story-validate
Prereq: spec.md, plan.md, tasks.md, audit-report.md. Verdict = readiness state (never PASS/FAIL).
Output: [STORY_DIR]/validation-report.md.
- Cheap-key read only: locate
STORY_DIR; read.speck/project.json; take claimed_state from--claim, the requested target, or the existing report claim. Classify UI vs backend. - Before the first mutation, run exactly one contract:
- Backend:
python3 .speck/scripts/context/speck_context.py story-validate-backend --select claimed_state=<state> - UI:
python3 .speck/scripts/context/speck_context.py story-validate-ui --select claimed_state=<state>
- Backend:
- Require exit 0 and
SPECK_CONTEXT_RECEIPT. Do not directly load unselected state, archetype, or axis references. The receipt'spost_write_gates,post_write_gates_all, andgate_policyfields are the exact executable closure contract; do not reconstruct or batch it. - Execute every receipted node in order; record
build_sha, cross-examine the audit, LARP, visual, and runtime evidence already produced, run only the validation probes, and lower the claim to what is earned. Follow the receipted post-write node literally: after the latest stamp, run every gate individually even on a downgrade. Correctable red may edit, re-stamp, and rerun all; otherwise run the remaining gates, recordconformant_redblockers, then make no edit.
STOP on any node STOP / P0 / missing required evidence.