From flanksource-claude-code-plugin
Evaluates a Mission Control environment's platform health for release or promotion readiness. Checks health check pipelines, config scrapers, background jobs, notifications, event queues, and MC infrastructure. Use for pre-release checks, environment promotion, or environment status. Triggers: "check environment health", "is it ready for release", "pre-release health check", "evaluate environment", "promotion readiness", "environment status"
How this skill is triggered — by the user, by Claude, or both
Slash command
/flanksource-claude-code-plugin:promotion-eval-mission-controlThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Systematically evaluate the health of a Mission Control environment **as a platform** (not demo workloads) to support release and promotion readiness decisions. This skill queries the live environment using MCP tools and produces a structured diagnostic report.
Systematically evaluate the health of a Mission Control environment as a platform (not demo workloads) to support release and promotion readiness decisions. This skill queries the live environment using MCP tools and produces a structured diagnostic report.
This evaluation focuses on Mission Control platform health — the components that make MC work (canary-checker, config-db, mission-control deployments, core health checks, scrapers, jobs). It does NOT evaluate demo workloads or user-created resources unless they indicate a platform problem.
Known expected-fail checks: Some health checks have the label Expected-Fail=true. These are intentional test checks and should be excluded from failure counts and findings.
When invoked, check if the user specified:
24h)Execute these phases sequentially. After each phase, record component status and findings.
Initialize a running JSON result conforming to @skills/promotion-eval-mission-control/schema.json with:
{
"verdict": "READY",
"evaluated_at": "<current ISO timestamp>",
"time_window": "<window>",
"target": "<target environment>",
"components": {},
"findings": [],
"recommendations": []
}
These are the confirmed MissionControl catalog types:
MissionControl::ScrapeConfig — config scrapersMissionControl::Playbook — playbook definitionsMissionControl::Notification — notification rulesMissionControl::Job — background jobsMissionControl::Canary — canary check definitionsMissionControl::Connection — external connectionsMissionControl::Topology — topology definitionsGoal: Determine if health checks are running and passing.
view_failing-health-checks_mission-control with withRows=true and select=["id","name","type","status","severity","last_transition_time","description"]list_all_checks for baseline metricsExpected-Fail=true from failure countsget_check_status(id, limit=10) to retrieve recent execution history. Classify as:
updated_at is older than the time windowMetrics to record:
total_checks: Total number of health checkshealthy_count: Number currently healthyunhealthy_count: Number currently unhealthy (excluding expected-fail)expected_fail_count: Checks labeled Expected-Failpersistent_failures: Number failing consistentlystale_count: Number not updated within time windowhealth_rate: Percentage healthy (excluding expected-fail from denominator)Verdict logic:
Goal: Verify config scrapers are active and producing fresh data.
search_catalog with type=MissionControl::ScrapeConfig and select=["id","name","health","status","updated_at"]updated_at timestamp. Flag any not updated within expected schedule (typically 1h)view_mission-control-system_mission-control with withPanels=true — this returns scraper error counts and a list of scrapers with errorssearch_catalog_changes with type=MissionControl::ScrapeConfig created_at>now-{window} for config changesMetrics to record:
total_scrapers: Number of scraper configs foundactive_count: Scrapers updated within expected windowstale_count: Scrapers not recently updatederror_count: From system view scraper errors panelVerdict logic:
Goal: Check for failed playbook runs and job errors.
view_jobhistory_mission-control with withRows=true and select=["name","status","duration","error","timestamp"] limit=20get_playbook_failed_runs(limit=10) for recent failuresget_playbook_recent_runs(limit=20) to calculate success rateget_playbook_run_steps(run_id) to understand the failure causesearch_catalog with type=MissionControl::Playbook health=unhealthy to find unhealthy playbook definitionsMetrics to record:
total_recent_runs: Total playbook runs in windowfailed_runs: Number of failed runssuccess_rate: Percentage of successful runsjob_errors: Count of job errors from job history viewVerdict logic:
Goal: Verify the notification pipeline is functioning.
view_notification-send-history_mission-control with withRows=true and select=["id","age","resource_name","resource_current_health","title","notification"] limit=20view_mission-control-system_mission-control panel (already fetched in Phase 2) includes notification counts by status (SENT, SILENCED, REPEAT-INTERVAL, etc.)search_catalog with type=MissionControl::Notification and select=["id","name","health","status"]get_notifications_for_resource(resource_id, status=error, since=now-{window})Metrics to record:
total_notification_configs: Number of notification rulessent_count: From system viewsilenced_count: From system viewerror_count: Notifications with error statusdelivery_rate: sent / (sent + error) percentageVerdict logic:
Goal: Check overall system health indicators, database, and event queue.
view_mission-control-system_mission-control with withPanels=true (reuse from Phase 2 if already fetched)
view_mission-control-database_mission-control with withPanels=true
list_connections to verify external integrations are configuredMetrics to record:
db_size_bytes: Database sizedb_connections: Active connectionsactive_users: User counttotal_connections: Number of configured connectionsVerdict logic:
Goal: Verify Mission Control's own Kubernetes resources are healthy.
view_mission-control-pods_mission-control with withRows=true and select=["name","namespace","status","health","updated"] — this returns all MC-related podssearch_catalog with type=Kubernetes::Deployment and name patterns:
name=mission-control*name=canary-checker*name=config-db*
Use select=["id","name","health","status","updated_at"] for each.describe_catalog(id) to get full details including error messagessearch_catalog_changes with type=Kubernetes::Deployment name=mission-control* created_at>now-{window} (and similar for canary-checker, config-db)get_related_configs to trace Deployment → ReplicaSet → PodMetrics to record:
total_mc_pods: MC pods foundhealthy_pods: Healthy MC podsunhealthy_pods: Unhealthy MC podstotal_mc_deployments: MC deployments foundhealthy_deployments: Healthy MC deploymentsrecent_changes: Changes to MC components in time windowVerdict logic:
After all phases complete, produce the final report in two parts:
# Promotion Evaluation Report
**Target**: <target environment>
**Evaluated at**: <timestamp>
**Time window**: <window>
**Verdict**: **<READY|CAUTION|NOT_READY>**
## Summary
| Component | Status | Key Metrics |
|-----------|--------|-------------|
| Health Checks | <PASS/WARN/FAIL> | <health_rate>% healthy, <persistent_failures> persistent failures |
| Config Scrapers | <PASS/WARN/FAIL> | <active_count>/<total_scrapers> active, <error_count> errors |
| Jobs & Playbooks | <PASS/WARN/FAIL> | <success_rate>% success rate, <failed_runs> failures |
| Notifications | <PASS/WARN/FAIL/SKIP> | <sent_count> sent, <error_count> errors |
| System & DB | <PASS/WARN/FAIL> | DB <db_size>MB, <db_connections> connections |
| MC Infrastructure | <PASS/WARN/FAIL> | <healthy_pods>/<total_mc_pods> pods healthy |
## Findings
<For each finding, sorted by severity (critical first)>
### [severity] [component]: [message]
- **Resource**: [name] ([type], ID: [id])
- **Evidence**: [evidence]
## Recent Changes (Risk Factors)
<List recent changes to MC infrastructure that could affect stability>
## Recommendations
<Numbered list of actionable recommendations>
Output the completed JSON object conforming to the schema. Wrap in a code block with language json.
Derive the top-level verdict from component statuses:
Components that must not FAIL for READY: health_checks, config_scrapers, mc_infrastructure
Components that may SKIP without affecting verdict: notifications
npx claudepluginhub flanksource/claude-code-plugin --plugin mission-control-skillsCreates, edits, and verifies skills using a test-driven development approach with pressure scenarios and subagents.