Add deploy-verification skill - #257
Merged
Merged
Conversation
A merged config/infra change isn't done at the merge — pods can fail to roll on a ConfigMap change with no restart trigger, a query window can be too narrow to mean anything, and a stack-scoped change can leak into an unintended environment. This has repeatedly cost follow-up work after a deploy was assumed complete. Codify the checklist: CD pipeline status, pod rollout confirmation, config read from the running process (not the manifest), a fair before/after metric comparison, and a scope check across sibling stacks. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XqAaVVSbbp412kVEYbKY1K
Contributor
There was a problem hiding this comment.
Pull request overview
Adds a reusable skill for validating that infrastructure and configuration changes reached live environments.
Changes:
- Adds a five-step deployment verification workflow.
- Registers the skill in process and infrastructure profiles.
- Updates both skill catalogs.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
agent-config.toml |
Registers the skill and profile membership. |
skills/README.md |
Adds the skill to the main catalog. |
skills/process/README.md |
Adds the process-category listing. |
skills/process/deploy-verification/SKILL.md |
Defines the deployment verification procedure. |
Suppressed comments (4)
skills/process/deploy-verification/SKILL.md:63
- The skill is triggered for any config/Pulumi/Helm change, but many valid changes do not require replacing pods (for example, Service/Ingress changes or config handled by a live reloader). Treating an older pod as a silent failure gives false negatives; first establish whether this change was expected to roll the workload, and otherwise verify the relevant live resource or reload path.
If pod `AGE` predates the pipeline run, the workload did not restart. This
is the single most common silent failure in this checklist: a
`ConfigMap`/`Secret` change with no checksum/annotation-based restart
trigger on the pod template is inert until something else causes a restart.
skills/process/deploy-verification/SKILL.md:98
- The literal
mcp__<server>__...form is client-specific, while this repository installs skills for Claude Code, Pi, GitHub Copilot, and OpenCode; the server prefix can also depend on the user's MCP configuration. Agents on other clients may therefore look for a nonexistent tool. Name the server and its unprefixed tool instead, allowing each client to resolve its exposed invocation name.
mcp__toolhive-swe-<tier>__grafana_query_prometheus
skills/process/deploy-verification/SKILL.md:128
- A Pulumi preview reports differences between the current stack state and what a future update would deploy; it cannot prove that a sibling environment already received this change. In fact, a sibling diff usually means that stack has not applied the new desired state. Distinguish an actual leak (sibling update history/live state changed after the merge) from a latent scope bug (preview says a future sibling update would change it).
`"0 changes"` on every stack except the intended target confirms scope. Any
unexpected diff on an unrelated stack is a blocker, not a footnote — surface
it before calling the deploy verified.
skills/process/deploy-verification/SKILL.md:83
- This skill explicitly covers Secret changes, but these commands print environment variables or mounted files into the agent transcript and logs. That can disclose production credentials. Keep plaintext inspection only for non-sensitive config; for secret-backed values, compare an approved expected checksum with a checksum computed inside the container so the value never leaves it.
kubectl exec -n <namespace> <pod> -- env | grep <VAR>
# or, for a file-mounted config:
kubectl exec -n <namespace> <pod> -- cat <mounted-path>
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
…anging kubectl documents --timeout's default as 0s, "zero means never" (verified against kubectl rollout status --help), so the unbounded watch would hang the verification agent on exactly the stalled rollout this checklist is meant to catch, producing no step result at all. Bound it at 5m and treat the non-zero exit as evidence the rollout did not complete, rather than a slow command to retry with a longer wait. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CqvGU3ssvASjwcfFGExNPL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What are the relevant tickets?
N/A
Description (What does it do?)
deploy-verificationskill (skills/process/deploy-verification/SKILL.md) that walks the checklist for confirming a merged config/infra change actually took effect, not just that it merged:toolhive-swe-{ci,qa,prod}Grafana/Prometheus MCP tier, with an explicit fair-comparison windowagent-config.toml([skills], plus theprocessandinfrastructureprofiles) and adds it to bothskills/README.mdandskills/process/README.mdper the skill-authoring checklist inAGENTS.md.How can this be tested?
npx skills-ref validate ./skills/process/deploy-verification— passes.agent-kit validate agent-config.toml— no drift beyond the expected "not yet installed locally" entries for a brand-new skill.prek run --files agent-config.toml skills/README.md skills/process/README.md skills/process/deploy-verification/SKILL.md— all checks pass (markdownlint, TOML, secrets, etc.).