v1.6.0 — One kit, any language: configurable Output Language, /export-docs, PHP/Laravel & 3 hardening rounds
Five change groups in this release: (1) configurable Output Language — artifacts & conversation follow the language declared per project (absent → Vietnamese, fully backward-compatible); (2)
/specbusiness layer & sliced legacy baselines; (3) new command/export-docs— render kit artifacts into your company's own PRD/SDD templates; (4) PHP + Laravel as the third first-class stack; (5) a three-round hardening audit across all 20 commands. Verified in sandboxes: all four/specbranches (greenfield · REVERSE · DELTA · scoped REVERSE) ran end-to-end with every mechanical gate passing.
🌐 1 · Output Language — one kit, any language
Output Language(Project Profile) — prose, artifacts and conversation in the declared language; code & identifiers always English; missing field → Vietnamese (no silent flip for ongoing projects)- Kit source is now fully English — runtime output follows the Profile; handoff markers renamed
[CẦN …]→[NEEDS …]so English-output projects carry no foreign tokens; gates grep language-neutral anchors
🧾 2 · /spec — business-ready specs & sliced legacy baselines
- Business layer — Goals & Success Metrics table, Permission Matrix (role × action), mandatory scenario class tags
@happy/@negative/@edge(✅❌⚠️ at export) - Machine-checked "no transport-only stories" guard — UI-product scenarios must be written from the user's observable perspective
--scope— scoped REVERSE — baseline a large legacy system slice by slice with a covered ∪ uncovered ledger the gate reconciles against the endpoint inventory--wireframes(as-is UI documentation for REVERSE) and--propose-goals(labeled📝P-nnproposals — numbers never invented)
📤 3 · New command: /export-docs
- Fill-only rendering of SPEC / ARCHITECTURE / reports into company templates (EXTENSION layer
.claude/local/doc-templates/) — no invented content, sign-off cells never auto-filled - Stable 1:1 ID transform
@US-XXX-Snn → AC-x.y.zviaexports/TRACE_MAP.md— refreshes never renumber - Audience register per target — stakeholder targets translate technical identifiers into business language; engineer targets keep them verbatim
- Export gate: heading census, placeholder residue, internal cross-refs, diagram & API-sample fidelity,
📝P-nnlabel fidelity
🐘 4 · Third first-class stack: PHP + Laravel
lang-php+framework-php-laravel+test-phpoverrides (Pest default — brownfield keeps PHPUnit; RFC 7807 with the documented brownfield-422 exception; host-isolated.env.testing)phpscanner plugin (composer audit with prod-block/dev-advisory split, project-local PHPStan) — wired through every downstream command (/discover→/infra→/docs→/deploy→/debug→/simplify)
🛡️ 5 · Full-kit hardening — 3 audit rounds over all 20 commands
- Traceability closed end-to-end —
NFR-xxkeyed chain across all four artifact tiers (spec → arch → plan → verify);/plan§Impact Analysis (blast radius before tasks);/archFlow Disposition (no flow silently undrawn) - Real-infrastructure isolation, proven not trusted — legacy test-suite pre-flight, connection tripwire whitelist at Gate 6, compose self-containment at
/infra//deploy - Deployment safety —
IMAGE_TAGdigest/rollback chain; newdatabase.md§Expand-contract + §DB-resident objects are source code;db/schema-snapshot/refreshed in the same change-set; the "rollback < 1 minute vs destructive migration" contradiction closed; "As-is refresh" KB-sync gates - Scan coverage disclosure —
stacks_unscannedsurfaced and gate-blocking: "not scanned" must never read as "nothing found" - Brownfield evidence, repo-resident —
/discoverendpoint inventory generalized (consumers, scheduled jobs, CLI) + Connection/Messaging/Cache inventories (credentials always masked); guided DB-schema export with per-connection consent and a 4-step transport ladder; DB MCP servers evaluated and rejected on measured evidence - Multi-repo depth —
/discover-systemgeneratesspecs/system/requirements views +contracts/event-catalog.md, bash-first incremental re-sync; 6 new fill-only templates; multi-stack repos must declare ALL stacks in the Profile, scoped by path - Agent reliability — spawn prompts standardized to carry conversation-level facts (mode/flow, scope, NFR list,
A-xxreturns); one E2E assertion contract at Gate 6 and Gate 11 alike; results/service boards read from real runner output, never from a sub-agent's report
🧭 Also in this release
- Getting-started guides —
getting-started-brownfield.md&getting-started-greenfield.md, linked from README & quick-start - Default model —
settings.jsonnow shipsclaude-sonnet-5
⚠️ Upgrade notes
- No
Output Languagein your Profile → everything stays Vietnamese — no silent language flip - A SPEC without a
Coveragefield is treated asfull(the field postdates it) - Marker rename
[CẦN <role>]→[NEEDS <role>]: update the On-missing enum in your localdoc-templates/mapping.md; older exports keep the old marker until the next re-export - Company doc templates live in
.claude/local/doc-templates/(EXTENSION — kit upgrades never touch them; keep them out of public remotes)
Full detail per change: CHANGELOG.md § [1.6.0].