Deploy verification review skill
Use before marking a phase DONE in {{docs.roadmap_path}} / regenerating HANDOVER when the
session claims a live deploy, production (or staging-as-production) rollout, a public URL
is "up" / "healthy" / "verified", or "shipped" meaning running outside the local repo
(not merely code merged to a feature branch). Invoke: /deploy-verification-review.
This is the live-deploy sibling of /build-verification-review. The kit still never deploys
and never HTTP-probes production — it only records and optionally gates operator-supplied
deploy/health claims (Mode C / require_deploy_health).
Purpose
Catch ship/live-health dishonesty: "we shipped it" / "production is healthy" without a durable,
content-addressed deploy_health record on the honesty ledger (when honesty is enabled).
| Gate | When | Tool |
|---|---|---|
| Build verification | Every Auto build DONE | /build-verification-review (mandatory; never waived) |
| Deploy verification | Ship / live-health claim present | This skill |
| Mode C CI gate | Opt-in require_deploy_health: require |
ok honesty-status --deploy-health PHASE_ID |
When to use
Invoke when any of these claims appear in the deliverable, handover, or ROADMAP row:
- live deploy / production (or staging-as-production) rollout
- public or customer-facing URL is "up" / "healthy" / "verified"
- "shipped" meaning running outside the local repo
Non-triggers: ordinary Auto builds that only claim code + tests + local CLI behavior (kit
governance phases, Track O ceremony without a live consumer probe) use
/build-verification-review alone. Track O ok upgrade-regime is a regime ceremony, not a
P-deploy trigger.
Model
Always thinking-high — independent reviewer; preferably not the same session that claimed
the ship. Never Auto for this gate.
Inputs (read all)
- Frozen spec — must authorize a ship/live-health claim (D1)
- Operator-supplied health-record bytes (or CI artifact) the verifier inspected
{{docs.roadmap_path}}/{{docs.handover_path}}— ship wording vs Mode C- Ledger (when
honesty.enabled) —verification_evidencewith ≥1deploy_healthartifact - Git / Muse diff — no kit-side deploy or production HTTP probe helpers
Checklist (every item needs evidence)
| # | Check | Dishonesty signal |
|---|---|---|
| D1 | Deploy/health claim is in scope for this phase (frozen spec authorizes a ship claim) | "Shipped" for a spec that forbids live probes / deploys |
| D2 | Operator-supplied health record exists on disk or in CI artifacts (bytes the verifier hashed) | Claim with no record file |
| D3 | Ledger entry (when honesty.enabled) is verification_evidence with bv_verdict: pass and ≥1 deploy_health artifact |
Pass claim with only test_output / screenshot |
| D4 | deploy_health.sha256 digests the same health-record bytes the verifier inspected |
Hash of unrelated file |
| D5 | deploy_health.ref identifies the check (URL string, job id, env name) as opaque metadata — not fetched by the kit |
Kit "proved" health by opening the URL itself |
| D6 | Health record is from this ship session (verifier cites session/time; no automated TTL) | Reusing last quarter's health JSON |
| D7 | No kit code path performs deploy or production HTTP probe as part of "verification" | Auto added urllib.request.urlopen(prod) under tools/ |
| D8 | ROADMAP/HANDOVER "shipped"/DONE wording matches Mode C (when honesty enabled + require) |
DONE without matching ledger entry under require |
Relationship to build-verification
/build-verification-reviewremains mandatory for every Auto build DONE.- When the build session claims deploy/health, BV V8 already requires a
deploy_healthartifact in the evidence entry — unchanged. - This skill is the sibling gate for shipped/live claims. It does not replace or waive
/build-verification-review. If BV already passed and the only remaining claim is live health, a deploy-verification round is sufficient for that ship claim. Underhonesty.enabled: true, a skillpassMUST append or confirm a Mode C–matching entry (ok honesty-status --deploy-health …underrequireexits0). - When
honesty.enabled: false, ledger append is skipped; D1–D8 still require claims↔record honesty in the review text. - Hard stops unchanged: no merge to
{{vcs.git.main_branch}}onfindings/blocked; uncited findings invalid; no Tier-3 automation.
Verdicts
| Verdict | Meaning | Next step |
|---|---|---|
pass |
Ship/live-health claim honest; Mode C match when required | Allow DONE wording that asserts shipped/healthy |
findings |
Cited gaps | Fixer addresses citations only; re-run this skill |
blocked |
Escalating category or fundamental boundary violation | Human required |
Escalation categories: security, irreversible, real_money, gates_tier3.
Loop (bounded)
- Max rounds: 5
- Reviewer → findings → fixer (cited lines only) → re-review until
passor stop - Do not mark ship/DONE under
requireuntilpass
Output format
## Deploy verification — <phase-id> round <N>
**Verdict:** pass | findings | blocked
**Frozen spec:** <path>
**Health record:** <path or CI artifact id>
**Mode C:** matched_entry_hash=<…> | missing | honesty disabled
### Findings
| ID | Sev | path:line | Claim vs reality |
| --- | --- | --- | --- |
| DV1 | MAJOR | docs/HANDOVER.md:12 | Claims production healthy; no deploy_health artifact |
### Honest summary (only if pass)
One paragraph: what health record was hashed, what ref was recorded, and that the kit did not probe.
CLI helpers (non-substitute)
./cli/ok honesty-status --deploy-health "<PHASE_ID>" [--frozen-spec PATH] --json
# exit 34 + missing_deploy_health when require_deploy_health: require and no Mode C match
Hard stops
- Kit never deploys; never opens HTTP(S) to a production URL as verification
refis opaque — never fetched, never executed- No merge to
{{vcs.git.main_branch}}onfindingsorblocked - Uncited findings invalid — re-review
- Do not waive
/build-verification-reviewfor Auto DONE