Sprint Validated

Sprint-validated ritual for Marcus (PM) -- stamps per-sprint validation on dev + bumps regression_manifest. Does NOT merge to mai…

mcornelison updated 29d ago
Claude CodeGeneric
View source ↗
---
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 main branch or any sprint/* branch (run from dev)
  • sprint.json validation block missing (sprint pre-2026-05-08-workflow; needs migration)
  • sprint.json validation.validatedAt already 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.