Sprint Validated
Sprint-validated ritual for Marcus (PM) -- stamps per-sprint validation on dev + bumps regression_manifest. Does NOT merge to mai…
---
name: sprint-validated
description: "Sprint-validated ritual for Marcus (PM) -- stamps per-sprint validation on dev + bumps regression_manifest. Does NOT merge to main -- /chain-validated does that at chain end per spec 2026-05-28. Per CIO 2026-05-23 directive #1: main = fully validated stable; dev = integration branch. Run when CIO confirms the per-sprint drill is green."
---
# Sprint Validated (PM-driven, dev/main workflow per spec 2026-05-28)
Per-sprint validation ritual for Marcus (PM). Companion to `/sprint-deploy-pm` (Phase 3.5 merged sprint → dev; deploy ran from dev). Per spec `docs/superpowers/specs/2026-05-28-dev-main-branching-workflow-design.md`: validation drills target `dev`; this command stamps the per-sprint validation block + bumps `regression_manifest` for the sprint's `validatesFeatures`. **It does NOT merge to main.** `/chain-validated` does that at chain end (after every sprint in the V0.X chain has its own `/sprint-validated` stamp AND CIO confirms whole-chain green).
**WHEN to run**: after a real-hardware drill successfully exercises the sprint's `validation.bigDefinitionOfDone` clauses AND CIO confirms green light.
**WHEN NOT to run**: drill failed (a new patch sprint forks from `dev` → fix → re-run `/sprint-deploy-pm` with V0.X.(Y+1) patch bump → retry validation); drill not yet attempted; sprint not in DEPLOYED-AWAITING-VALIDATION state.
**Output of this command**: `dev`'s sprint.json carries `validation.validatedAt` stamp. `regression_manifest.json` bumps `lastValidated` for features the sprint validated. PM artifacts (backlog.json status, MEMORY.md, projectManager.md) reflect the per-sprint stamp. Sprint N+1 grooming can begin (PM judgement -- see spec §8.1).
---
## Phase 0 -- Pre-flight gates
```bash
git status --short # working tree clean
git branch --show-current # MUST be `dev` (sprint already merged + closed by /sprint-deploy-pm Phase 3.5)
# If on sprint branch: `git checkout dev` first
# If on main: abort -- sprint-validated runs from dev
python -c "
import json
d = json.load(open('offices/ralph/sprint.json', encoding='utf-8'))
v = d.get('validation', {})
if not v:
raise SystemExit('ERROR: sprint.json has no validation block (Sprint 27+ required field)')
if v.get('validatedAt'):
raise SystemExit(f'ERROR: sprint already marked validated at {v[\"validatedAt\"]}; double-run?')
print(f'Sprint awaiting validation as of currentVersion={v.get(\"currentVersion\")}')
print(f'bigDefinitionOfDone clauses: {len(v.get(\"bigDefinitionOfDone\", []))}')
print(f'validatesFeatures: {v.get(\"validatesFeatures\", [])}')
"
Stop conditions:
- On
mainbranch or anysprint/*branch (run fromdev) - sprint.json
validationblock missing (sprint pre-2026-05-08-workflow; needs migration) - sprint.json
validation.validatedAtalready set (double-run detection) - Working tree dirty (commit / stash drift first)
Phase 1 -- Confirm validation evidence
Print the sprint's bigDefinitionOfDone clauses. CIO confirms each was observed (Mike's 2026-05-08 rule: evidence is helpful but not required; Mike looks for proof himself).
If running interactively, prompt for confirmation. If running via slash command in Claude session, take CIO's prior message as the green light.
python -c "
import json
v = json.load(open('offices/ralph/sprint.json', encoding='utf-8'))['validation']
print('=== bigDefinitionOfDone (Mike confirmed observed?) ===')
for i, clause in enumerate(v['bigDefinitionOfDone'], 1):
print(f' [{i}] {clause}')
"
Optional: query journalctl / DB tables for evidence the validation events fired (e.g., new drive_summary row, new STAGE_* power_log rows, new connection_log auto_update_applied event). If automation can prove the clauses, log the evidence to validation field.
Phase 2 -- Update sprint.json validation block
# Mark validated:
import json
from datetime import datetime, timezone
p = 'offices/ralph/sprint.json'
d = json.load(open(p, encoding='utf-8'))
d['validation']['validatedAt'] = datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')
d['validation']['validatedBy'] = "Mike (CIO confirmed) + drill: <Drive N / Drain Test N>"
with open(p, 'w', encoding='utf-8', newline='\n') as f:
json.dump(d, f, indent=2, ensure_ascii=False)
f.write('\n')
Phase 3 -- Update regression_manifest.json
For each feature in sprint's validation.validatesFeatures, bump lastValidated + validatedBy:
import json
from datetime import date
sprintP = 'offices/ralph/sprint.json'
manifestP = 'offices/pm/regression_manifest.json'
sprintData = json.load(open(sprintP, encoding='utf-8'))
manifest = json.load(open(manifestP, encoding='utf-8'))
today = date.today().isoformat()
validatedFeatures = sprintData['validation']['validatesFeatures']
validationLabel = sprintData['validation']['validatedBy'] # e.g. "Drive 6 + Drain Test 11"
sprintNum = int(sprintData['sprint'].split('--')[0].strip().split()[-1]) # extract "27" from "Sprint 27 -- ..."
bumped = []
for feat in manifest['features']:
if feat['id'] in validatedFeatures:
feat['lastValidated'] = today
feat['validatedBy'] = validationLabel
bumped.append(feat['id'])
manifest['lastUpdated'] = today
manifest['lastUpdatedBy'] = f"Marcus (PM, Sprint {sprintNum} validated)"
with open(manifestP, 'w', encoding='utf-8', newline='\n') as f:
json.dump(manifest, f, indent=2, ensure_ascii=False)
f.write('\n')
print(f'Bumped lastValidated for {len(bumped)} features: {bumped}')
Phase 4 -- Update PM artifacts
4a -- backlog.json B-XXX phase: awaiting-validation -> complete
# Find the active phase under the sprint's backlogItem reference
# Bump status: awaiting-validation -> complete
# Set validatedAt date
4b -- MEMORY.md
Update Current ```
Maintain Sprint Validated?
Let people know it's listed here — add the badge (live metrics, light/dark aware) or a plain link to your README or docs.
[Sprint Validated on getagentictools](https://getagentictools.com/loops/mcornelison-sprint-validated-pm-driven-dev-main-workflow-per-spec-2026-05-28?ref=badge) npx agentictools info loops/mcornelison-sprint-validated-pm-driven-dev-main-workflow-per-spec-2026-05-28 The second line is the CLI lookup for this page — handy in READMEs and docs.