Verification Strategy
Map the project's real risks to gates, watch each gate fail before calling it
executable, and wire it to block the promotion it protects. Accept no gate on
reading the code, a coverage number, or the builder's opinion.
When to use
- The project floor is absent, stale, or cannot catch a real defect.
- A high-risk initiative introduces preservation, platform, data, security,
concurrency, resource, or rollout risks the current battery does not cover.
- Skip a bounded feature — its plan evaluators and TDD own the local proof.
A missing project floor is separate scope.
Step 1: Map the risks before writing any gate
- Inventory what the project promises and what could break it: committed
behaviour, platforms and build modes, data and operations, commands and CI
that already run, existing tests, escaped defects.
- Transformation: add its migration facts, invariants, and approved
deviations.
- Instantiate
assets/assurance-matrix.md now. Fill Risk inventory and
Risk-to-gate matrix. Write no gate code before this exists.
- Fill
Catalogue disposition for every category in
references/battery-catalogue.md: covered, or an accountable expiring
approval plus a compensating gate. N/A needs evidence and an owner.
Step 2: Make each gate real
- Fill
Cadence and promotion map: cheap gates block every change;
expensive ones protect a phase, trial, cutover, or release.
- A "manual" gate gets a procedure, evidence, an owner, and a promotion it
blocks.
- Calibrate in isolation you are authorized to use: bind what the gate
touches and your authority to mutate, recover, and clean up.
- Watch the whole cycle: green → red on an introduced divergence → full
restoration → green. Keep raw results outside the candidate.
- Unsafe to calibrate for real: use a known-bad fixture, or mark the gate
uncalibrated and say so.
- Record each gate as
executable, planned, or blocked. Only
executable satisfies an entry condition.
- One bounded gate to implement: invoke
test-driven-development.
Multi-step gate work: invoke writing-plans.
Step 3: Protect the battery from its own erosion
- Fill
Control-plane independence and Test-inventory audit.
- Keep the inventory, the validator, and the wiring outside the tests they
protect.
- A mutable plane that would guard its own invocation: record its promotion
as
planned or blocked until external enforcement exists.
Step 4: Challenge, then hand over the decision
REQUIRED SUB-SKILL: invoke requesting-code-review with the prompt in
references/assurance-challenger.md, before approval. Keep the candidate
read-only.
Blocker: correct a successor, reverify, rechallenge until clear or
concretely blocked.
Present the matrix and stop:
Assurance matrix {{path}} — {{n}} executable, {{n}} planned, {{n}} absent
Thresholds: {{list}}. Omissions: {{list}}. Blocking cadence: {{summary}}.
1. Approve the battery
2. Request changes
3. Reject the strategy
4. Cancel
Recommendation: {{option}} — {{one sentence}}.
Approve nothing yourself. Authority to draft gates is not authority to
accept unseen risks, thresholds, omissions, or exceptions.
Keep the normative file at proposed; lifecycle state stays external.
Every normative change is an exact-delta successor.
Hard stops
Calling a control executable when it is not
- It is only planned, or only prose.
- It has never been run.
- It has never been watched fail.
Writing gate code before the matrix and catalogue dispositions exist — including when the gate is small enough to stay inline.
A gate that cannot fail for the right reason
- A presence or change detector: it goes red without any behaviour being protected.
- An aggregate green that hides a platform, a build mode, a shard, a test, or a cadence that never ran.
- A wildcard match, a file's presence, a set or count comparison, a named receipt, a success marker, or an outer timeout, presented as proof that an exact case or action occurred.
Calling the battery established before removing, skipping, duplicating, or hollowing a test turns the project command red under an independent guard — and restoring it returns green.
Self-protection that protects nothing
- A validator living only inside the tree it discovers.
- A mutable command asked to guard its own invocation. Without external wiring, that promotion stays
planned or blocked.
Taking authority you were not given
- Deferring the independent challenge until after approval.
- Granting yourself an exception.
- Approving work the decision owner has not seen.
- Writing lifecycle state into a normative candidate.
Lowering a threshold, deleting a test, or accepting a deviation to make the matrix green.
1---2name: verification-strategy3description: Use to establish or repair a project's correctness battery, before high-risk work whose assurance is absent, stale, or unfalsifiable, and again on changed risk, an escaped defect, or a hollow gate. Fires on how should we test this project, our tests don't catch anything, and what should CI run, even if nobody says strategy. Skip a bounded feature, and skip writing or running an already-defined gate.4---56# Verification Strategy78Map the project's real risks to gates, watch each gate fail before calling it9executable, and wire it to block the promotion it protects. Accept no gate on10reading the code, a coverage number, or the builder's opinion.1112## When to use1314- The project floor is absent, stale, or cannot catch a real defect.15- A high-risk initiative introduces preservation, platform, data, security,16 concurrency, resource, or rollout risks the current battery does not cover.17- **Skip** a bounded feature — its plan evaluators and TDD own the local proof.18 A missing project floor is separate scope.1920## Step 1: Map the risks before writing any gate21221. Inventory what the project promises and what could break it: committed23 behaviour, platforms and build modes, data and operations, commands and CI24 that already run, existing tests, escaped defects.252. Transformation: add its migration facts, invariants, and approved26 deviations.273. Instantiate `assets/assurance-matrix.md` now. Fill `Risk inventory` and28 `Risk-to-gate matrix`. Write no gate code before this exists.294. Fill `Catalogue disposition` for every category in30 `references/battery-catalogue.md`: covered, or an accountable expiring31 approval plus a compensating gate. N/A needs evidence and an owner.3233## Step 2: Make each gate real34351. Fill `Cadence and promotion map`: cheap gates block every change;36 expensive ones protect a phase, trial, cutover, or release.372. A "manual" gate gets a procedure, evidence, an owner, and a promotion it38 blocks.393. Calibrate in isolation you are authorized to use: bind what the gate40 touches and your authority to mutate, recover, and clean up.414. Watch the whole cycle: green → red on an introduced divergence → full42 restoration → green. Keep raw results outside the candidate.435. Unsafe to calibrate for real: use a known-bad fixture, or mark the gate44 `uncalibrated` and say so.456. Record each gate as `executable`, `planned`, or `blocked`. Only46 `executable` satisfies an entry condition.477. One bounded gate to implement: invoke `test-driven-development`.48 Multi-step gate work: invoke `writing-plans`.4950## Step 3: Protect the battery from its own erosion51521. Fill `Control-plane independence` and `Test-inventory audit`.532. Keep the inventory, the validator, and the wiring *outside* the tests they54 protect.553. A mutable plane that would guard its own invocation: record its promotion56 as `planned` or `blocked` until external enforcement exists.5758## Step 4: Challenge, then hand over the decision59601. **REQUIRED SUB-SKILL:** invoke `requesting-code-review` with the prompt in61 `references/assurance-challenger.md`, before approval. Keep the candidate62 read-only.632. Blocker: correct a successor, reverify, rechallenge until clear or64 concretely blocked.653. Present the matrix and stop:6667 ```text68 Assurance matrix {{path}} — {{n}} executable, {{n}} planned, {{n}} absent69 Thresholds: {{list}}. Omissions: {{list}}. Blocking cadence: {{summary}}.7071 1. Approve the battery72 2. Request changes73 3. Reject the strategy74 4. Cancel7576 Recommendation: {{option}} — {{one sentence}}.77 ```78794. Approve nothing yourself. Authority to draft gates is not authority to80 accept unseen risks, thresholds, omissions, or exceptions.815. Keep the normative file at `proposed`; lifecycle state stays external.82 Every normative change is an exact-delta successor.8384## Hard stops8586**Calling a control executable when it is not**8788- It is only planned, or only prose.89- It has never been run.90- It has never been watched fail.9192**Writing gate code before the matrix and catalogue dispositions exist** — including when the gate is small enough to stay inline.9394**A gate that cannot fail for the right reason**9596- A presence or change detector: it goes red without any behaviour being protected.97- An aggregate green that hides a platform, a build mode, a shard, a test, or a cadence that never ran.98- A wildcard match, a file's presence, a set or count comparison, a named receipt, a success marker, or an outer timeout, presented as proof that an exact case or action occurred.99100**Calling the battery established** before removing, skipping, duplicating, or hollowing a test turns the project command red under an independent guard — and restoring it returns green.101102**Self-protection that protects nothing**103104- A validator living only inside the tree it discovers.105- A mutable command asked to guard its own invocation. Without external wiring, that promotion stays `planned` or `blocked`.106107**Taking authority you were not given**108109- Deferring the independent challenge until after approval.110- Granting yourself an exception.111- Approving work the decision owner has not seen.112- Writing lifecycle state into a normative candidate.113114**Lowering a threshold, deleting a test, or accepting a deviation to make the matrix green.**