Repository navigation
What's changed
Audit convergence (G-1 / G-2, #106)
- New
.scrum/audit-ledger.json(schema +update-audit-ledger.sh): one entry per defect class keyed byaudit_identity, with structured occurrences,dec_id-verified exclusions, linked PBIs, and a detector with its own verification stamp. Status machineopen → sweeping → guarded/accepted → closedis enforced by the wrapper. codebase-auditreads the ledger, reuses identities byte-for-byte, transcribes every class and occurrence into the ledger before writing the report, files a detector PBI + sweep PBI for machine-checkable classes, and every AC carries a mandatoryNot closed by this check:line.- Guard-first detectors run as merge-gate errors:
run-detectors.shexecutes everyguardedclass's detector on the merged tree before the project regression command; violations or a broken detector recordmerge_failure.kind=detector_regression, rollmainback, and escalate at three strikes asmerge_detector_regression. smoke-test records adetectorscategory. A class can only becomeguardedthrough a wrapper check that proves the gate is actually wired. - Migration 008 seeds the ledger from existing audit PBIs.
Retrospective-filed defects (#104)
- #96: the design reviewer reads the PBI's acceptance criteria from
.scrum/backlog.jsonitself and everymissing_ac_mappingfinding carries the criterion text, the searched string, and the matching row. - #97: guard-type deliverables must demonstrate the failing direction (
negative:/positive:steps indemo_plan); Sprint Review and PO acceptance execute both;update-backlog-status.shwarns when a guard-shaped plan lacks one. - #93 (1): the three PreToolUse guards anchor on the project root (
$CLAUDE_PROJECT_DIR, else a marker walk) instead of the working directory, and fail closed when the root cannot be resolved. Decision A on #93 (2): the Bash text scan is a guardrail; its pattern set is frozen and pinned by a lint (#105).
Reliability and CI (#103)
- The documented
sh …/scrum-start.shlaunch now works on Linux (dash): the three entry points re-exec under bash, and internal launches usebash. - CI runs every integration suite and pytest, lints workflows with actionlint, and pins shellcheck v0.11.0 to match local runs.
sign-and-notarize.shretries notary polling on transient network errors and never retries a definitive Apple verdict; a keychain-profile run no longer exits 1 on success.- Instruction text that would write
.scrum/*.jsonwithout a wrapper is caught by a lint.
Documentation (#105)
- Public pages and READMEs state the current audit flow (severity-graded findings put to the PO; whole-repo audit every third Sprint). The requirements diary is folded into the requirements themselves. All 19 skills point at the canonical output discipline. pbi-merge forbids SM inspection actions during merge.
Upgrade notes
- Redeploy targets with
setup-user.sh;migrate-state.shruns migration 008 at launch and creates.scrum/audit-ledger.json. From then onadd-backlog-item.sh --audit-identitymust name a class present in the ledger (the error message names theupsert-classcommand to run). - New merge-failure kind
detector_regression(3 strikes →merge_detector_regression). Projects that never promote a class toguardedsee no behaviour change. - A target already in
sprint_reviewwhen it redeploys still needs asprint_acceptancedecision recorded (unchanged from v2.0.11).
Verification
bats -r tests/unit/ tests/lint/ tests/integration/: 1376 passedpytest tests/dashboard/: 41 passed- ShellCheck, Ruff, actionlint: passed
tests/integration/detector-merge-gate.bats: fake detector → merge rolled back →detector_regression→ third strike escalates
Full changes: v2.0.11...v2.0.12