v9.0.0
The configuration surface shrinks from 28 settings to 20, and pull requests are always ASD-managed through gh. Three workflow guardrails replace an agent's word with deterministic evidence: a repeated impl⇄impl-test defect set escalates as a stalemate, a fail-first proof must carry raw runner evidence, and the retrospective deduplicates findings before drafting each survivor as a one-line guardrail with a named home. Audit now reads every relevant docs/ document and lets the canonical ASD document win a contradiction.
Migration (breaking)
- Run
/asd-update. The new.asd/migrations/9.0.0.jsrewrites.asd/project/config.yamlline by line, keeping your comments and line endings:documents.c4: enabledkeeps yourproject.diagram_tool(or setslikec4when absent);documents.c4: disabledsetsdiagram_tool: none.skip_design_phases: enableddisablesdocuments.prd,ux_specandadrand setsdiagram_tool: none.- Legacy
documents.audit: enabled/disabledbecomealways/off. documents.c4,skip_design_phases,git.gh_enabled,git.auto_pr,system.os,system.tools.likec4,system.tools.designmdandreview.scoped_fan_outare removed.- A config shape it does not recognise (flow maps, duplicate keys, tabs, mixed line endings, out-of-range values) is left untouched with a warning naming the re-run command.
- A sprint already active keeps working from its frozen
state.json.
ghis required./asd-initstops unlessgh --versionandgh auth statussucceed, and theprphase opens and merges throughghonly; aghfailure isFAILEDnaminggh auth loginor the install step. There is no manual-PR fallback.- Diff-scoped rubric n/a marking is always on. Projects that omitted
review.scoped_fan_outpreviously got full per-section review; the standing n/a predicates now always apply. - An unknown
documents.auditvalue blocks scope instead of being normalised. - A release migration is a sanctioned config writer.
/asd-updatemay apply release-mandated key renames and removals, plus the value mappings, key insertions and shipped-comment rewrites that carry a renamed or removed key's or value's intent (core.md).
Added
- Stalemate breaker (
sprint-lifecycle.md"Impl-test phase"): two consecutiveimpl-testentries routing the same code-defect set emitFAILED: stalemateand ask the user to continue with guidance, accept the defects as debt, or abort. Identity is file path, the runner's first failure line and the failing test name, compared by the newnode .asd/runtime.js defect-stalemate. A logged answer covers only the next routing of that set.test-plan.mdDefects gains anEntrycolumn, and an interrupted impl-test entry is resumed rather than duplicated. - Audit contradictions (
sprint-lifecycle.md"Audit phase"): audit reads everydocs/document bearing on the touched areas; a canonical ASD document wins a contradiction without a gate, and a contradiction precedence cannot settle is a hard user decision.t_audit.mdgains an optional Contradictions section. external-preflightreports the hostplatform.
Changed
- Fail-first proof (
code-style.md§17): the record must name the exact command, its non-zero exit code and the failing test; a bare claim is not proof. Thet_test-plan.mdRegression proof cell takes that shape. - Retrospective (
sprint-lifecycle.md"Retro phase"): findings are merged by root cause, checked against the rules already in their candidate home, and only then drafted asGuardrail+Home. Both tables int_retrospective.htmlreplaceRecommendation/Target. - Diagram setting:
project.diagram_tooltakesnone | likec4 | mermaid;state.json.documents.c4stays as the frozen effective-diagram flag. The design block collapses at the audit exit whenever PRD, UX spec and ADR are disabled and the effective diagram tool isnone. - External Review invocation keys its stdin form on the host shell: Claude Code always uses a heredoc, Codex a here-string on Windows and a heredoc elsewhere.
- Test coverage grew from 197 to 203 checks.