v2.5.0 — M11 delivery-workflow codification + M12 interview completeness
Two milestones, purely additive. M11 codifies the delivery workflow as data; M12 closes every gap the interview-completeness audit found in the intake interview. No breaking changes.
✨ Added — M12: interview completeness (#149–#154)
- Environment preflight (#154). A dependency-free
tools/preflight.pyverifiespython/git/gh(+gh auth) up front with OS-specific install hints and a non-zero exit — no more mid-run stack traces on a missing tool. The installers carry a non-Python bootstrap hint for the Python-missing case. - First-class
webdomain + enterprise posture (#149, ADR-0015). A shippeddomains/web.yaml(hard accessibility + Core Web Vitals budgets, UX/content pipeline,accessibility-review+web-vitals-budgetgates) — andenterprisemodelled as an orthogonalgovernance.postureflag that raises the bar on any domain, deliberately not a fourth domain. - Architecture-style & pattern elicitation (#151).
Q5.4captures a structured style (Layered / Hexagonal / Clean / …), expected patterns, and anadvisory | enforceddiscipline posture — and seeds the generated pattern catalogue instead of shipping it empty. - Optional layered package scaffold (#152). A service/app/web project can opt into
controller / service / repository / dto / mapper / …packages under bothsrc/mainandsrc/test, recorded in the generated ADR-0002; a library keeps the flat shape. - Spec import-and-validate (#153). Phase 5 opens with
Q5.0 — provenance: bring an existing PRD/SRS, get it mapped onto the six-section shape and gap-audited for testability — only the gaps are asked. - Authoring languages (#150, ADR-0016). Doc + code-comment language are asked unconditionally (defaults confirmed, never silent); a non-English choice renders a recorded exception into the generated
AGENTS.md§2 while identifiers/API/commits stay English.
✨ Added — M11: delivery-workflow codification (#141–#144)
- PR-metadata contract as data (
git.yamlpr.metadata+ advisorypr_metadata_check.py). - Full roadmap milestone seeding (
seed_milestones.pycreates everyMN — namemilestone, not just the first). - Explicit "CI live & green" bootstrap gate — per-milestone PR delivery opens only after the bootstrap PR's CI is green.
- Verbose squash-body policy — the squash commit carries the PR's context/change/verification body, never a one-liner.
🐛 Fixed
questionnaire.yamlsilent truncation (#153 discovery). The hand-rolled loader doesn't fold multi-line quoted scalars or multi-line flow lists and silently dropped everything after the first one — phases 4–5 were partly invisible to machine consumers. Data reflowed to the loader-supported subset, with a full-parse guard + a PyYAML differential now running in CI.
Full detail in CHANGELOG.md. The factory bundle, SHA256SUMS, and the setup.* installers attach automatically when this release is published.