baldart 5.5.0 → 5.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +119 -0
- package/VERSION +1 -1
- package/framework/.claude/agents/CHANGELOG.md +16 -0
- package/framework/.claude/agents/prd-card-writer.md +37 -3
- package/framework/.claude/skills/capture/CHANGELOG.md +4 -0
- package/framework/.claude/skills/capture/SKILL.md +2 -1
- package/framework/.claude/skills/design-sync/CHANGELOG.md +4 -0
- package/framework/.claude/skills/design-sync/SKILL.md +2 -1
- package/framework/.claude/skills/ds-edit/CHANGELOG.md +5 -0
- package/framework/.claude/skills/ds-edit/SKILL.md +9 -10
- package/framework/.claude/skills/ds-handoff/CHANGELOG.md +5 -0
- package/framework/.claude/skills/ds-handoff/SKILL.md +3 -2
- package/framework/.claude/skills/ds-new/CHANGELOG.md +4 -0
- package/framework/.claude/skills/ds-new/SKILL.md +2 -1
- package/framework/.claude/skills/ds-render/CHANGELOG.md +4 -0
- package/framework/.claude/skills/ds-render/SKILL.md +2 -1
- package/framework/.claude/skills/e2e-review/CHANGELOG.md +4 -0
- package/framework/.claude/skills/e2e-review/SKILL.md +2 -1
- package/framework/.claude/skills/gamification-design/CHANGELOG.md +4 -0
- package/framework/.claude/skills/gamification-design/SKILL.md +2 -1
- package/framework/.claude/skills/graph-align/CHANGELOG.md +4 -0
- package/framework/.claude/skills/graph-align/SKILL.md +2 -1
- package/framework/.claude/skills/i18n/CHANGELOG.md +4 -0
- package/framework/.claude/skills/i18n/SKILL.md +2 -1
- package/framework/.claude/skills/motion-design/CHANGELOG.md +4 -0
- package/framework/.claude/skills/motion-design/SKILL.md +2 -1
- package/framework/.claude/skills/new/CHANGELOG.md +27 -0
- package/framework/.claude/skills/new/SKILL.md +2 -1
- package/framework/.claude/skills/new/references/commit.md +12 -8
- package/framework/.claude/skills/new/references/completeness.md +10 -0
- package/framework/.claude/skills/new/references/final-review.md +23 -0
- package/framework/.claude/skills/new/references/implement.md +14 -4
- package/framework/.claude/skills/new/references/merge-cleanup.md +35 -14
- package/framework/.claude/skills/new2/CHANGELOG.md +40 -0
- package/framework/.claude/skills/new2/SKILL.md +53 -12
- package/framework/.claude/skills/prd/CHANGELOG.md +40 -0
- package/framework/.claude/skills/prd/SKILL.md +18 -5
- package/framework/.claude/skills/prd/assets/state-template.md +8 -1
- package/framework/.claude/skills/prd/references/audit-phase.md +13 -1
- package/framework/.claude/skills/prd/references/backlog-phase.md +20 -0
- package/framework/.claude/skills/prd/references/discovery-phase.md +35 -0
- package/framework/.claude/skills/prd/references/ui-design-phase.md +28 -0
- package/framework/.claude/skills/prd/references/validation-phase.md +45 -1
- package/framework/.claude/skills/prd-add/CHANGELOG.md +4 -0
- package/framework/.claude/skills/prd-add/SKILL.md +2 -1
- package/framework/.claude/skills/skill-creator/references/skill-structure.md +31 -2
- package/framework/.claude/skills/skill-creator/scripts/quick_validate.py +25 -3
- package/framework/.claude/skills/ui-design/CHANGELOG.md +4 -0
- package/framework/.claude/skills/ui-design/SKILL.md +2 -1
- package/framework/.claude/skills/ui-implement/CHANGELOG.md +4 -0
- package/framework/.claude/skills/ui-implement/SKILL.md +2 -1
- package/framework/.claude/skills/worktree-manager/CHANGELOG.md +13 -0
- package/framework/.claude/skills/worktree-manager/SKILL.md +11 -1
- package/framework/.claude/skills/worktree-manager/scripts/merge-worktree.sh +82 -6
- package/framework/.claude/workflows/new-final-review.js +9 -7
- package/framework/.claude/workflows/new2-resolve.js +29 -1
- package/framework/.claude/workflows/new2.js +158 -18
- package/framework/agents/card-schema.md +18 -1
- package/framework/agents/research-protocol.md +6 -1
- package/framework/scripts/stamp-holistic-audit.js +53 -10
- package/package.json +1 -1
- package/src/commands/configure.js +9 -2
- package/src/commands/doctor.js +65 -0
- package/src/utils/skill-gate.js +139 -0
- package/src/utils/symlinks.js +72 -7
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,125 @@ All notable changes to BALDART will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [5.7.0] - 2026-07-06
|
|
9
|
+
|
|
10
|
+
**Feature-gated skill linking — stop wasting Codex's 2% skill-description budget.** Codex
|
|
11
|
+
reserves ~2% of its context window for skill descriptions; BALDART's ~40 skills alone
|
|
12
|
+
already exceed it (~6.5k tokens), so Codex warns *"Skill descriptions were shortened to fit
|
|
13
|
+
the 2% skills context budget"* and truncates them (degrading skill routing). Until now the
|
|
14
|
+
installer linked EVERY framework skill into a consumer — including ones whose gating
|
|
15
|
+
`features.*` flag is OFF (e.g. the `ds-*` cluster, `i18n`, `graph-align`, `e2e-review`),
|
|
16
|
+
which then merely refuse at runtime: dead weight on the budget. Now a skill is linked only
|
|
17
|
+
when its declared feature is enabled, trimming ~2.5k tokens (~40%) on a typical project
|
|
18
|
+
without design-system/i18n/code-graph/e2e.
|
|
19
|
+
|
|
20
|
+
- **`requires_feature` frontmatter (SSOT) + `src/utils/skill-gate.js`**: an OPTIONAL
|
|
21
|
+
`requires_feature: has_x` (string or list = AND) on a skill's `SKILL.md`. Makes
|
|
22
|
+
machine-readable a dependency the skills already declared in prose (their "Project
|
|
23
|
+
Context" header) — no second SSOT, same pattern as `version:`/`effort:`. `resolveSkillGate`
|
|
24
|
+
reads `features.*` **directly** from `baldart.config.yml` (NOT `agent-slots.resolveAgentFlags`,
|
|
25
|
+
which omits `has_prd_workflow`/`has_e2e_review`) and **fails open** globally (config
|
|
26
|
+
absent/unreadable → link everything) and per-skill (malformed frontmatter → link that skill).
|
|
27
|
+
- **Applied to BOTH runtimes from one code path** (`mergeSkills` in `src/utils/symlinks.js`):
|
|
28
|
+
the gate is shared SEMANTICS (which skills are relevant), not runtime mechanics, so Claude
|
|
29
|
+
(`.claude/skills/`) and Codex (`.agents/skills/`) stay identical by construction. Adds the
|
|
30
|
+
**prune** direction — a feature flipped off (or a fail-open first install) now removes stale
|
|
31
|
+
framework symlinks, never touching a user skill dir or a user-override symlink pointing
|
|
32
|
+
elsewhere.
|
|
33
|
+
- **17 skills gated**: `has_design_system` → ui-design, ui-implement, ds-new, ds-edit,
|
|
34
|
+
ds-render, design-sync, ds-handoff, motion-design, gamification-design · `has_i18n` → i18n ·
|
|
35
|
+
`has_code_graph` → graph-align · `has_e2e_review` → e2e-review · `has_prd_workflow` → prd,
|
|
36
|
+
prd-add · `has_backlog` → new, new2 · `has_wiki_overlay` → capture. The five bootstrap
|
|
37
|
+
skills (`design-system-init`, `i18n-adopt`, `graphify-bootstrap`, `lsp-bootstrap`,
|
|
38
|
+
`toolchain-bootstrap`) stay ALWAYS-linked so a feature can always be turned on — then
|
|
39
|
+
`configure`/`update` re-merge and the cluster appears.
|
|
40
|
+
- **Lifecycle wiring**: `configure` now re-runs `mergeSkills` after writing config (first
|
|
41
|
+
install linked fail-open before the config existed — this is what actually prunes);
|
|
42
|
+
`update` already re-merges (prune committed via `BALDART_MANAGED_PATTERNS`); `doctor` gains
|
|
43
|
+
a non-blocking `reconcile-skills` advisory when a gated-off skill is still linked, and its
|
|
44
|
+
skill sample-probe no longer samples gatable skills (`prd`/`capture`). `skill-creator`:
|
|
45
|
+
`quick_validate.py` allow-lists `requires_feature` (it previously HARD-FAILED on unknown
|
|
46
|
+
keys) + soft-warns unknown flags; `references/skill-structure.md` documents the field.
|
|
47
|
+
`new2.js` binding-gate now guards on `has_design_system`.
|
|
48
|
+
- **Behaviour change for Claude consumers**: a skill whose feature is off now *disappears*
|
|
49
|
+
from `.claude/skills/` instead of appearing and refusing at runtime. Mitigated: bootstraps
|
|
50
|
+
stay visible, and re-enabling the feature (then any merge) brings the cluster back.
|
|
51
|
+
- **Rider — two skill descriptions made `quick_validate`-clean** (pre-existing failures, both
|
|
52
|
+
among the heaviest so this also shrinks the Codex budget): `ds-edit` description trimmed
|
|
53
|
+
1080→1014 chars (was over the 1024 max), `ds-handoff` angle-bracket placeholder
|
|
54
|
+
(`<screens-or-feature>`) rephrased bracket-free — no trigger phrases lost.
|
|
55
|
+
- Verified: unit-level gate partitioning (design_system-off/backlog-on → 15 gated off, `new`
|
|
56
|
+
linked, bootstrap present), YAML validity of all 17 frontmatters, `quick_validate` PASS.
|
|
57
|
+
- **No new `baldart.config.yml` key** (consumes existing `features.*`) → the schema-change
|
|
58
|
+
propagation rule does NOT apply; it is skill-frontmatter metadata like `version`/`effort`.
|
|
59
|
+
- **Codex parity: portable** — single semantic filter, both runtimes, install-time only;
|
|
60
|
+
`requires_feature` is ignored by both skill loaders (they read only name+description, as
|
|
61
|
+
they already do for `version`/`effort`).
|
|
62
|
+
|
|
63
|
+
## [5.6.0] - 2026-07-04
|
|
64
|
+
|
|
65
|
+
**Outcome-integrity wave (FEAT-0068 post-mortem — mayo, 72.78M token, DONE falso).** Il
|
|
66
|
+
batch chiuse 6/6 card + epic come "✅ DONE, merged" mentre il goal dell'epic era invisibile
|
|
67
|
+
sul ~90% delle schermate: il root cause era in `/prd` (inventario ISA sui consumer del
|
|
68
|
+
meccanismo invece che sui proprietari della superficie; recipe ancorata su un componente
|
|
69
|
+
`@deprecated`; due gate phantom-stampati), attraversava card che nessun gate poteva salvare
|
|
70
|
+
(coverage passata vacuamente su un inventario sbagliato), e veniva sigillato da `/new`/`new2`
|
|
71
|
+
(chiusura epic al commit dell'ultima card — PRIMA della final review — con predicato
|
|
72
|
+
conta-figli, nessun verdetto PARTIAL, safety-commit che spazzava file non gated su develop,
|
|
73
|
+
commit agent in detour sul main checkout). 28 finding crit/high confermati adversarialmente;
|
|
74
|
+
ogni fix è ancorato a un'evidenza del run.
|
|
75
|
+
|
|
76
|
+
- **Chiusura epic v2 (`/new` 2.3.0 + `new2` 1.8.0)**: SOLO in merge phase (il gate
|
|
77
|
+
commit-time v4.99.0 è ritirato — aveva anche un anchor bug `^parent:` che lo rendeva
|
|
78
|
+
no-op); predicato esteso (figli **e follow-up** DONE + nessun residual bloccante +
|
|
79
|
+
**AC epic verificati con oracoli**); blocklist JS + guardia post-merge (F-029 twin) +
|
|
80
|
+
ramo **REOPEN** (il ratchet è bidirezionale); classe finding **closure-invalidating**
|
|
81
|
+
(un "goal not achieved" è un difetto di STATO — il fix di prosa non chiude).
|
|
82
|
+
- **Verdetto PARTIAL calcolato** (`final-review.md` + `buildReport`): residual HIGH+ /
|
|
83
|
+
epic aperta / AC epic `[ ]` ⇒ headline `⚠️ PARTIAL` col gap nominato; sezione
|
|
84
|
+
`## Epic goal`; severity sui residui; "nulla perso" mai come surrogato di "non finito".
|
|
85
|
+
- **Igiene git orchestrata**: `merge-worktree.sh --safety-sweep allowlist:` (worktree-manager
|
|
86
|
+
1.2.0 — il codice non gated va in quarantena etichettata, mai nel trunk sotto un
|
|
87
|
+
"[safety]" opaco); isolamento worktree del commit agent esteso ai TOOL con evidenza
|
|
88
|
+
porcelain + guardia JS (era 7.1M di detour + stash dangling); divieto stash + audit
|
|
89
|
+
post-run dei commit non-card e degli stash del batch (mai "non miei da droppare").
|
|
90
|
+
- **Review**: relay Codex della final review in foreground `--wait` (il polling veniva
|
|
91
|
+
ucciso dall'enforcement structured-output a 83s/600s → fallback freddo da 3.68M);
|
|
92
|
+
esito **refuted** ratificato in `new2-resolve` (premessa falsa = zero edit) + divieto
|
|
93
|
+
di fix che disattivano verifiche mandate da AC (`verification-posture-change`);
|
|
94
|
+
suite aggiunte dalla card ESEGUITE targeted pre-commit (`completeness.md` 1b).
|
|
95
|
+
- **Routing**: `hasMockup` semantico (la card COSTRUISCE la UI mockata — un bare
|
|
96
|
+
`links.design` su card docs va all'owner router; era 6.55M di ui-expert su una card
|
|
97
|
+
docs+ADR).
|
|
98
|
+
- **`/prd` 1.6.0 (il root cause)**: categoria ISA **UI ROLE FAMILY (registry-first)**
|
|
99
|
+
(owner della superficie dal registry + flag BLOCK su `@deprecated`); §0 LOAD CONTRACT
|
|
100
|
+
su `discovery-phase.md` (vista PARTIAL ⇒ offset-Read fino in fondo — la coda persa
|
|
101
|
+
conteneva il Codex completeness cross-check mai eseguito); `module_read` stamps
|
|
102
|
+
ESEGUITI + item 0-ii Phase-evidence audit (2 gate phantom-stampati sul run reale);
|
|
103
|
+
`step_3_mode` enum chiuso + contratto `skipped` (mai design hand-authored fuori
|
|
104
|
+
`/ui-design`) + Reconciliation-lite senza mockup + trigger di ri-enumerazione ISA;
|
|
105
|
+
gate quantificatore-universale sugli AC epic (`invariant_owners:`); stamp holistic
|
|
106
|
+
**evidence-gated** (`stamp-holistic-audit.js --audit-report` → `agents_run`; senza
|
|
107
|
+
artefatto → `status: skipped` = ASSENTE per `/new`); card-writer 1.2.0
|
|
108
|
+
(self-validation eseguita, epic `ac_verification` obbligatoria, mai count hardcodato,
|
|
109
|
+
`links.design` solo su card UI, invariante baseline snapshot); HARD RULE mw-docs
|
|
110
|
+
(+ guardia `/mw` su `kind: docs`); EDIT CONTRACT dello state file (5 retry ciechi
|
|
111
|
+
da ~250k); `research-protocol.md` pre-flight libreria in difesa.
|
|
112
|
+
- **Tooling maintainer**: `new-session-audit.mjs` guadagna **EPIC_AC_UNMET** (FAIL —
|
|
113
|
+
retro-validato: il run FEAT-0068 ora fallisce l'audit invece di passarlo) e
|
|
114
|
+
**GATE_DISABLED_BY_FIX** (WARN) + fix del digest-writer su id workflow con `/`;
|
|
115
|
+
`check-new-parity.mjs` esteso a 21 policy (chiusura epic, PARTIAL, mockup semantico —
|
|
116
|
+
con token FORBIDDEN sui meccanismi ritirati).
|
|
117
|
+
- Deliberatamente rinviati (MED/LOW non verificati dal pass avversariale): digest
|
|
118
|
+
per-batch dei moduli di riferimento (tassa cache ~3-5M), card shape
|
|
119
|
+
VERIFY-ONLY/MECHANICAL-MIGRATION, sampling visivo del goal epic in final review,
|
|
120
|
+
script `update-state.mjs` per `/prd` (mitigato dall'EDIT CONTRACT).
|
|
121
|
+
- Codex parity: **portable** — le policy vivono nei moduli prose SSOT (`/new`, `/prd`)
|
|
122
|
+
e in script zero-dep/shell; i workflow Claude-only (`new2*`, `new-final-review`)
|
|
123
|
+
hanno ricevuto le STESSE policy dei twin prose (guardia di parity estesa a 21 regole).
|
|
124
|
+
Nessuna nuova chiave `baldart.config.yml` → la schema-change propagation rule non si
|
|
125
|
+
applica.
|
|
126
|
+
|
|
8
127
|
## [5.5.0] - 2026-07-03
|
|
9
128
|
|
|
10
129
|
**Migration deploy chain hardened (FEAT-0067 post-mortem — mayo).** The batch's DB
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
5.
|
|
1
|
+
5.7.0
|
|
@@ -7,6 +7,22 @@ per-item agent merge, the doctor probes, and the discovery hooks — like
|
|
|
7
7
|
|
|
8
8
|
Formato: [Keep a Changelog](https://keepachangelog.com/) · per-agent SemVer.
|
|
9
9
|
|
|
10
|
+
## [prd-card-writer v1.2.0] — 2026-07-04 (framework v5.6.0 — FEAT-0068 post-mortem)
|
|
11
|
+
|
|
12
|
+
- **Epic AC rules**: mai count di figli hardcodato ("le 6 sub-card"); AC con
|
|
13
|
+
quantificatore universale su una superficie ⇒ `invariant_owners:` dal census
|
|
14
|
+
registry/ISA; `ac_verification` OBBLIGATORIA sull'epic (≥1 oracolo per goal AC —
|
|
15
|
+
consumata dal gate di chiusura epic).
|
|
16
|
+
- **`links.design` FORBIDDEN su card che non costruiscono UI mockata** (docs/test/
|
|
17
|
+
meta-only ⇒ owner coder, riferimenti di contesto in `canonical_docs.additional_refs`)
|
|
18
|
+
— un pointer vagante clampava la build a ui-expert (6.55M su una card docs).
|
|
19
|
+
- **Invariante snapshot-suite**: una card che CREA una suite visual-regression dichiara
|
|
20
|
+
il lifecycle delle baseline (generate+committate in-card, o assertion-based) — pena
|
|
21
|
+
BLOCKER di authoring.
|
|
22
|
+
- **Self-validation**: il writer ESEGUE `validate-card-baseline.js --prd` sul proprio
|
|
23
|
+
output e ritorna solo su exit 0 (token EARS sempre inglesi verbatim) — mai asserire
|
|
24
|
+
"YAML-valid" senza aver eseguito il validator.
|
|
25
|
+
|
|
10
26
|
## [prd-card-writer v1.1.0] — 2026-07-03 (framework v5.4.0)
|
|
11
27
|
|
|
12
28
|
- **Proportionality lower-bound** in Card Atomicity Rules: a Tier-Gate TRIVIAL/LIGHT
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: prd-card-writer
|
|
3
|
-
version: 1.
|
|
3
|
+
version: 1.2.0
|
|
4
4
|
description: "Generates atomic backlog cards from an approved PRD. Handles card YAML writing, dependency graph computation, parallel group assignment, and traceability matrices (FR/NFR, ISA, UI). Invoked by the /prd skill at Step 5 to offload the heaviest mechanical phase from the main context. Also runs in Standalone Single-Card Mode to author ONE baseline-conformant follow-up/CHORE/BUG/issue card (no epic+children) — invoked by /new (AC-deferral), new2/new2-resolve, and /issue-review. The canonical card writer: every card-creation path delegates here rather than hand-writing a partial stub."
|
|
5
5
|
model: opus
|
|
6
6
|
effort: high
|
|
@@ -335,7 +335,18 @@ applies even when N=1.
|
|
|
335
335
|
- `business_rationale` (extended — full strategic context)
|
|
336
336
|
- `scope.summary` + `scope_boundaries` (in_scope summary + out_of_scope deferrals)
|
|
337
337
|
- `acceptance_criteria` as `[ ] [AC-EPIC-N]` items rolling up the PRD ACs (NOT
|
|
338
|
-
duplicating child ACs — track end-to-end outcomes only)
|
|
338
|
+
duplicating child ACs — track end-to-end outcomes only). **v5.6.0 (FEAT-0068)
|
|
339
|
+
epic-AC rules:** (1) NEVER hardcode a child count ("all 6 sub-cards DONE" broke the
|
|
340
|
+
moment follow-ups appeared — write "all child cards **including any added later**");
|
|
341
|
+
(2) an AC with a universal quantifier over a surface ("every screen", "tutte le
|
|
342
|
+
route") MUST list its surface owners in `invariant_owners:` (from the ISA UI ROLE
|
|
343
|
+
FAMILY census) so the closure gate can re-verify them.
|
|
344
|
+
- `ac_verification` — **REQUIRED on the epic (v5.6.0)**: ≥1 executable oracle per
|
|
345
|
+
top-level goal AC (same grounding rule as child cards — only verified commands/greps;
|
|
346
|
+
else `manual:`). The `/new`/`new2` epic-closure gate RUNS these before flipping the
|
|
347
|
+
epic DONE — an epic with no oracle can only close via manual evidence, which is
|
|
348
|
+
slower. (FEAT-0068's goal was greppable at authoring time: "every top-edge family
|
|
349
|
+
member consumes `--safe-area-inset-top`".)
|
|
339
350
|
- `definition_of_done`: epic-level (e.g. "all sub-card DONE", "PRD test scenarios
|
|
340
351
|
executed", "ssot-registry entry added")
|
|
341
352
|
- `execution_strategy` block with `recommended_mode`, `groups[]` (each with
|
|
@@ -505,6 +516,14 @@ Every card MUST include ALL fields from the template:
|
|
|
505
516
|
`manual: <what a human checks>`. Genuinely undecidable → `[NEEDS CLARIFICATION: …]`.
|
|
506
517
|
Non-manual oracles SHOULD also appear in `validation_commands` (the validator warns on
|
|
507
518
|
drift). Consumed by `/new` Phase 2.5, which EXECUTES them.
|
|
519
|
+
- **Snapshot-suite lifecycle invariant (v5.6.0 — FEAT-0068):** a card whose scope CREATES a
|
|
520
|
+
visual-regression / snapshot / screenshot-diff suite MUST declare the baseline lifecycle in
|
|
521
|
+
its requirements + DoD: EITHER "baselines generated (`--update-snapshots` or equivalent) and
|
|
522
|
+
committed IN THIS CARD" (the generate command listed in `validation_commands`/MAY-EDIT
|
|
523
|
+
covering the baseline dir) OR "assertion-based checks with screenshots advisory-only". A
|
|
524
|
+
suite whose baselines "arrive later" with no declared bootstrap is a card-authoring BLOCKER
|
|
525
|
+
— on the real run it detonated as a merge-blocker and the 4.73M repair "fixed" it by
|
|
526
|
+
flag-gating the epic's only visual verification.
|
|
508
527
|
- `definition_of_done` (checklist including doc invariants). **When `features.has_i18n: true`** AND the
|
|
509
528
|
card introduces user-facing strings, the DoD MUST carry an i18n-completeness line — NOT merely "strings
|
|
510
529
|
via `t()` + registered", but: *"new keys authored in the source locale + the i18n context registry (by
|
|
@@ -519,7 +538,12 @@ Every card MUST include ALL fields from the template:
|
|
|
519
538
|
- `review_profile` (`skip`|`light`|`balanced`|`deep` — computed via Rule C, or honored if pre-set)
|
|
520
539
|
- `files_likely_touched` (exact paths with NEW/MODIFY)
|
|
521
540
|
- `links.prd` (path to PRD)
|
|
522
|
-
- `links.design` (REQUIRED for any card with UI scope
|
|
541
|
+
- `links.design` (REQUIRED for any card with UI scope; **FORBIDDEN on cards that build no
|
|
542
|
+
mocked UI — v5.6.0**: a docs/test/meta-only card, or one whose `files_likely_touched` has
|
|
543
|
+
no component/style path, must NOT carry `links.design` even "for context" — downstream the
|
|
544
|
+
`/new` mockup-first router treats it as a build target and clamps the card to `ui-expert`;
|
|
545
|
+
on FEAT-0068 the epic explainer stamped on a docs+ADR card cost 6.55M. Point context-only
|
|
546
|
+
references in `canonical_docs.additional_refs` instead) — the card's screen design
|
|
523
547
|
reference, resolved to a path **that exists on disk in the worktree**:
|
|
524
548
|
- **design.html when one was generated** for this screen (Step 3 produced it).
|
|
525
549
|
- **ELSE the screen's canonical mockup PNG** under `${paths.prd_dir}/<slug>/mockups/`
|
|
@@ -732,6 +756,16 @@ The consumer (`new/SKILL.md`) reads `execution_strategy.groups[].level` and
|
|
|
732
756
|
|
|
733
757
|
## Output Format
|
|
734
758
|
|
|
759
|
+
**Self-validation BEFORE returning (v5.6.0 — you own your domain's deterministic hygiene).**
|
|
760
|
+
Run `node .framework/framework/scripts/validate-card-baseline.js --prd <your card files>` (or
|
|
761
|
+
the `VALIDATOR` path the caller passed) on your own output and fix every deterministic failure
|
|
762
|
+
(enum values, EARS keyword language — the tokens are ALWAYS English verbatim, only the clause
|
|
763
|
+
body follows `identity.language` —, forbidden patterns, missing required fields) IN THIS
|
|
764
|
+
CONTEXT before returning. Return only on exit 0, and state `validator: exit 0 (N cards)` in
|
|
765
|
+
the summary. NEVER assert "YAML-valid / pattern-clean" without having executed the validator —
|
|
766
|
+
on a real session that unexecuted claim cost a full orchestrator round-trip when Step 6
|
|
767
|
+
bounced all 6 children on Italian EARS tokens. Step 6 still re-runs it as the independent gate.
|
|
768
|
+
|
|
735
769
|
Return to the caller a structured summary:
|
|
736
770
|
|
|
737
771
|
1. **Card list** — IDs and titles of all cards created
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Formato: [Keep a Changelog](https://keepachangelog.com/) · [SemVer](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## 1.0.1 — 2026-07-06
|
|
6
|
+
|
|
7
|
+
- **Feature-gate**: added `requires_feature: has_wiki_overlay` frontmatter — this skill is now linked into a consumer only when `features.has_wiki_overlay` is enabled (it already refused at runtime otherwise). Trims Codex's ~2% skill-description budget on projects without the feature. Install-time gate, portable across Claude + Codex.
|
|
8
|
+
|
|
5
9
|
## 1.0.0 — 2026-07-01
|
|
6
10
|
|
|
7
11
|
- Baseline: versioning per-skill introdotto al framework v4.82.0.
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
name: capture
|
|
3
3
|
effort: medium
|
|
4
4
|
description: Distilla una sintesi cross-document della conversazione recente in una synthesis page riusabile del wiki overlay (path da `paths.wiki_dir`/syntheses/ in `baldart.config.yml`). Usare quando l'utente invoca `/capture`, dice "capture synthesis", "salva sintesi", "distilla conversazione", "save this as wiki", "questa conversazione in wiki", o quando chiede di trasformare un ragionamento cross-document appena fatto in una pagina stabile. Due modalità — manual (sempre funzionante) e proactive (conditional sui candidati in `.claude/capture-queue/`). Implementa il loop query→wiki file-back di Karpathy.
|
|
5
|
-
version: 1.0.
|
|
5
|
+
version: 1.0.1
|
|
6
|
+
requires_feature: has_wiki_overlay
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
# /capture — Synthesis Capture Skill
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Formato: [Keep a Changelog](https://keepachangelog.com/) · [SemVer](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## 1.0.1 — 2026-07-06
|
|
6
|
+
|
|
7
|
+
- **Feature-gate**: added `requires_feature: has_design_system` frontmatter — this skill is now linked into a consumer only when `features.has_design_system` is enabled (it already refused at runtime otherwise). Trims Codex's ~2% skill-description budget on projects without the feature. Install-time gate, portable across Claude + Codex.
|
|
8
|
+
|
|
5
9
|
## 1.0.0 — 2026-07-01
|
|
6
10
|
|
|
7
11
|
- Baseline: versioning per-skill introdotto al framework v4.82.0.
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: design-sync
|
|
3
3
|
effort: high
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.1
|
|
5
|
+
requires_feature: has_design_system
|
|
5
6
|
description: >
|
|
6
7
|
Keep the in-repo design system (the SSOT) and its Claude Design satellite
|
|
7
8
|
"mirror" project in sync — the code→design half of the closed loop. Three modes:
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
Formato: [Keep a Changelog](https://keepachangelog.com/) · [SemVer](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## 1.1.1 — 2026-07-06
|
|
6
|
+
|
|
7
|
+
- **Feature-gate**: added `requires_feature: has_design_system` frontmatter — this skill is now linked into a consumer only when `features.has_design_system` is enabled (it already refused at runtime otherwise). Trims Codex's ~2% skill-description budget on projects without the feature. Install-time gate, portable across Claude + Codex.
|
|
8
|
+
- **Description trimmed to pass `quick_validate`**: the `description` was 1080 chars (over the 1024 max); compressed to 1014 without losing any trigger phrase. Also shrinks the Codex skill-description budget.
|
|
9
|
+
|
|
5
10
|
## 1.1.0 — 2026-07-02
|
|
6
11
|
|
|
7
12
|
- **P1 locate hardening.** Reso esplicito che lo step P1 è un lookup deterministico
|
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ds-edit
|
|
3
3
|
effort: medium
|
|
4
|
-
version: 1.1.
|
|
4
|
+
version: 1.1.1
|
|
5
|
+
requires_feature: has_design_system
|
|
5
6
|
description: >
|
|
6
7
|
Update ONE existing canonical design-system element correctly — the deliberate
|
|
7
8
|
edit twin of /ds-new. Classifies the change (resync the spec to changed source /
|
|
8
|
-
extend with a
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
framework/templates/component-spec.template.md filled if a spec is missing),
|
|
9
|
+
extend with a variant or prop / breaking change + migration / re-govern the
|
|
10
|
+
closed-set role) and runs it end to end: apply the source change (via ui-expert),
|
|
11
|
+
regenerate the spec via the serializer (HEAD from source, agentic + prose
|
|
12
|
+
PRESERVED, the canonical component-spec template filled if a spec is missing),
|
|
13
13
|
re-govern if needed, verify. A THIN orchestrator — delegates every rule to the
|
|
14
14
|
existing SSOTs, never hand-writes a spec HEAD. Use when the user says /ds-edit,
|
|
15
15
|
"aggiorna un componente", "modifica una primitive", "aggiungi una variante",
|
|
16
16
|
"estendi il componente", "resync dello spec", "breaking change su un
|
|
17
|
-
componente", or when `/prd` confirms a REUSE+VARIANT extension. The
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
features.has_design_system.
|
|
17
|
+
componente", or when `/prd` confirms a REUSE+VARIANT extension. The mechanical
|
|
18
|
+
doc-resync after a code change is ALREADY automatic (`DS_COMPONENT_STALE` gate)
|
|
19
|
+
— this skill is for the DELIBERATE change. Gated on features.has_design_system.
|
|
21
20
|
---
|
|
22
21
|
|
|
23
22
|
# DS Edit — update one existing canonical element
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
Formato: [Keep a Changelog](https://keepachangelog.com/) · [SemVer](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## 1.2.1 — 2026-07-06
|
|
6
|
+
|
|
7
|
+
- **Feature-gate**: added `requires_feature: has_design_system` frontmatter — this skill is now linked into a consumer only when `features.has_design_system` is enabled (it already refused at runtime otherwise). Trims Codex's ~2% skill-description budget on projects without the feature. Install-time gate, portable across Claude + Codex.
|
|
8
|
+
- **Description made `quick_validate`-clean**: removed the angle-bracket placeholder (`<screens-or-feature>`) the validator rejects, rephrased bracket-free without losing the standalone-invocation trigger.
|
|
9
|
+
|
|
5
10
|
## 1.2.0 — 2026-07-02
|
|
6
11
|
|
|
7
12
|
- **Analysis-profile contract (framework v4.94.0)**: the standalone screen-resolution probe passes `PROFILE=ui` to `codebase-architect` per `framework/agents/analysis-profiles.md`. The Step 3 field-extraction retrieval order is unchanged.
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ds-handoff
|
|
3
3
|
effort: medium
|
|
4
|
-
version: 1.2.
|
|
4
|
+
version: 1.2.1
|
|
5
|
+
requires_feature: has_design_system
|
|
5
6
|
description: >
|
|
6
7
|
Produce a FIELD-LEVEL, 1:1, interaction-complete handoff brief for Claude Design
|
|
7
8
|
— every screen's real fields (label, control type, required, validation, default,
|
|
@@ -9,7 +10,7 @@ description: >
|
|
|
9
10
|
data schemas (Zod / TS types / form schemas) via a coverage gate that BLOCKS prompt
|
|
10
11
|
emission when a backed screen's fields are unverified. The single SSOT for the
|
|
11
12
|
Claude Design handoff prompt: `/prd` Step 3.0 Branch B delegates here; usable
|
|
12
|
-
standalone via `/ds-handoff
|
|
13
|
+
standalone via `/ds-handoff` with a screen list or feature. A THIN orchestrator — cites
|
|
13
14
|
`design-system-protocol.md` (Functional Traceability Gate, Reference Tables) and
|
|
14
15
|
reads `mockup_analysis` as input, never duplicating their rules; reuses existing
|
|
15
16
|
retrieval (code-graph / LSP / codebase-architect / Grep) rather than shipping a
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Formato: [Keep a Changelog](https://keepachangelog.com/) · [SemVer](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## 1.1.1 — 2026-07-06
|
|
6
|
+
|
|
7
|
+
- **Feature-gate**: added `requires_feature: has_design_system` frontmatter — this skill is now linked into a consumer only when `features.has_design_system` is enabled (it already refused at runtime otherwise). Trims Codex's ~2% skill-description budget on projects without the feature. Install-time gate, portable across Claude + Codex.
|
|
8
|
+
|
|
5
9
|
## 1.1.0 — 2026-07-02
|
|
6
10
|
|
|
7
11
|
- **Reuse-first hardening.** Reso esplicito che lo step 1 reuse-first resta il
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ds-new
|
|
3
3
|
effort: medium
|
|
4
|
-
version: 1.1.
|
|
4
|
+
version: 1.1.1
|
|
5
|
+
requires_feature: has_design_system
|
|
5
6
|
description: >
|
|
6
7
|
Create ONE canonical design-system element — a component OR a token — end to
|
|
7
8
|
end with the full discipline: reuse-first research, (optional) scaffold, then
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Formato: [Keep a Changelog](https://keepachangelog.com/) · [SemVer](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## 1.0.1 — 2026-07-06
|
|
6
|
+
|
|
7
|
+
- **Feature-gate**: added `requires_feature: has_design_system` frontmatter — this skill is now linked into a consumer only when `features.has_design_system` is enabled (it already refused at runtime otherwise). Trims Codex's ~2% skill-description budget on projects without the feature. Install-time gate, portable across Claude + Codex.
|
|
8
|
+
|
|
5
9
|
## 1.0.0 — 2026-07-01
|
|
6
10
|
|
|
7
11
|
- Baseline: versioning per-skill introdotto al framework v4.82.0.
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ds-render
|
|
3
3
|
effort: medium
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.1
|
|
5
|
+
requires_feature: has_design_system
|
|
5
6
|
description: >
|
|
6
7
|
Render the design-system primitives in ISOLATION (one component × variant at a
|
|
7
8
|
time) and capture a PNG per entry — the render harness BALDART never had (today
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Formato: [Keep a Changelog](https://keepachangelog.com/) · [SemVer](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## 1.3.2 — 2026-07-06
|
|
6
|
+
|
|
7
|
+
- **Feature-gate**: added `requires_feature: has_e2e_review` frontmatter — this skill is now linked into a consumer only when `features.has_e2e_review` is enabled (it already refused at runtime otherwise). Trims Codex's ~2% skill-description budget on projects without the feature. Install-time gate, portable across Claude + Codex.
|
|
8
|
+
|
|
5
9
|
## 1.3.1 — 2026-07-03
|
|
6
10
|
|
|
7
11
|
- Boundary pointer: "Not a design generator" ora punta solo a `ui-design`
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: e2e-review
|
|
3
3
|
effort: medium
|
|
4
|
-
version: 1.3.
|
|
4
|
+
version: 1.3.2
|
|
5
|
+
requires_feature: has_e2e_review
|
|
5
6
|
description: >
|
|
6
7
|
Deterministic, BLOCKING end-to-end review run after a feature is implemented.
|
|
7
8
|
Combines functional E2E (Playwright spec written by `coder`, executed via
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Formato: [Keep a Changelog](https://keepachangelog.com/) · [SemVer](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## 1.0.2 — 2026-07-06
|
|
6
|
+
|
|
7
|
+
- **Feature-gate**: added `requires_feature: has_design_system` frontmatter — this skill is now linked into a consumer only when `features.has_design_system` is enabled (it already refused at runtime otherwise). Trims Codex's ~2% skill-description budget on projects without the feature. Install-time gate, portable across Claude + Codex.
|
|
8
|
+
|
|
5
9
|
## 1.0.1 — 2026-07-03
|
|
6
10
|
|
|
7
11
|
- Related Skills: `ui-ux-pro-max` (superseded) sostituito con `ui-design` v2
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gamification-design
|
|
3
3
|
effort: medium
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.2
|
|
5
|
+
requires_feature: has_design_system
|
|
5
6
|
description: Use when designing or analyzing points systems, reward loops, progression mechanics, engagement features, or loyalty programs. Triggers include "points system," "rewards design," "progression," "engagement loop," "battle pass," "loyalty mechanics," "gamification," or "retention hooks." For B2C customer-facing features in this codebase, this skill invokes the hyper-gamification-designer agent.
|
|
6
7
|
---
|
|
7
8
|
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Formato: [Keep a Changelog](https://keepachangelog.com/) · [SemVer](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## 1.0.1 — 2026-07-06
|
|
6
|
+
|
|
7
|
+
- **Feature-gate**: added `requires_feature: has_code_graph` frontmatter — this skill is now linked into a consumer only when `features.has_code_graph` is enabled (it already refused at runtime otherwise). Trims Codex's ~2% skill-description budget on projects without the feature. Install-time gate, portable across Claude + Codex.
|
|
8
|
+
|
|
5
9
|
## 1.0.0 — 2026-07-01
|
|
6
10
|
|
|
7
11
|
- Baseline: versioning per-skill introdotto al framework v4.82.0.
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: graph-align
|
|
3
3
|
effort: medium
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.1
|
|
5
|
+
requires_feature: has_code_graph
|
|
5
6
|
description: >
|
|
6
7
|
On-demand documentation alignment via the Graphify code knowledge graph.
|
|
7
8
|
Rebuilds the graph offline (graphify update .), then cross-checks graph
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Formato: [Keep a Changelog](https://keepachangelog.com/) · [SemVer](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## 1.0.1 — 2026-07-06
|
|
6
|
+
|
|
7
|
+
- **Feature-gate**: added `requires_feature: has_i18n` frontmatter — this skill is now linked into a consumer only when `features.has_i18n` is enabled (it already refused at runtime otherwise). Trims Codex's ~2% skill-description budget on projects without the feature. Install-time gate, portable across Claude + Codex.
|
|
8
|
+
|
|
5
9
|
## 1.0.0 — 2026-07-01
|
|
6
10
|
|
|
7
11
|
- Baseline: versioning per-skill introdotto al framework v4.82.0.
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: i18n
|
|
3
3
|
effort: medium
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.1
|
|
5
|
+
requires_feature: has_i18n
|
|
5
6
|
description: >
|
|
6
7
|
On-demand internationalization audit + context-aware translation. Audits the
|
|
7
8
|
i18n context registry against the t() calls and native locale files (drift
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Formato: [Keep a Changelog](https://keepachangelog.com/) · [SemVer](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## 1.0.1 — 2026-07-06
|
|
6
|
+
|
|
7
|
+
- **Feature-gate**: added `requires_feature: has_design_system` frontmatter — this skill is now linked into a consumer only when `features.has_design_system` is enabled (it already refused at runtime otherwise). Trims Codex's ~2% skill-description budget on projects without the feature. Install-time gate, portable across Claude + Codex.
|
|
8
|
+
|
|
5
9
|
## 1.0.0 — 2026-07-01
|
|
6
10
|
|
|
7
11
|
- Baseline: versioning per-skill introdotto al framework v4.82.0.
|
|
@@ -2,6 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
Formato: [Keep a Changelog](https://keepachangelog.com/) · [SemVer](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## 2.3.1 — 2026-07-06
|
|
6
|
+
|
|
7
|
+
- **Feature-gate**: added `requires_feature: has_backlog` frontmatter — this skill is now linked into a consumer only when `features.has_backlog` is enabled (it already refused at runtime otherwise). Trims Codex's ~2% skill-description budget on projects without the feature. Install-time gate, portable across Claude + Codex.
|
|
8
|
+
|
|
9
|
+
## 2.3.0 — 2026-07-04 (FEAT-0068 post-mortem: integrità dell'esito)
|
|
10
|
+
|
|
11
|
+
- **Chiusura epic: solo in merge phase, predicato esteso** — `commit.md` c-bis RITIRATO
|
|
12
|
+
(timing: chiudeva PRIMA che la final review potesse smentire il goal; anchor bug:
|
|
13
|
+
`^parent:` non matchava il `parent:` annidato sotto `group:` → gate no-op).
|
|
14
|
+
`merge-cleanup.md` 5e ora richiede: figli **e follow-up** DONE + nessun residual
|
|
15
|
+
bloccante/finding closure-invalidating + **AC epic verificati con evidenza**
|
|
16
|
+
(oracoli `ac_verification`); ramo **REOPEN** per un'epic DONE con scope aperto.
|
|
17
|
+
- **Classe finding "closure-invalidating"** (`final-review.md` F.4): un finding
|
|
18
|
+
"goal/AC epic non raggiunto" è un difetto di STATO — il fix testuale non basta,
|
|
19
|
+
l'epic non chiude (o riapre) nello stesso repair commit.
|
|
20
|
+
- **Verdetto PARTIAL calcolato** (`final-review.md` § Report verdict): residual HIGH+ /
|
|
21
|
+
epic aperta / AC epic `[ ]` ⇒ prima riga `⚠️ PARTIAL` col gap nominato; ✅ riservato.
|
|
22
|
+
- **Routing mockup semantico** (`implement.md` 6a): `HAS_MOCKUP` = la card COSTRUISCE
|
|
23
|
+
la UI mockata (design_src, o design + bindings/file UI) — un bare `links.design` su
|
|
24
|
+
card docs/meta va all'owner router (era: clamp a ui-expert, 6.55M su una card docs).
|
|
25
|
+
- **Stamp holistic evidence-gated** (`implement.md` step 4 P1): uno stamp senza
|
|
26
|
+
`agents_run` non vuoto = ASSENTE → il plan-auditor gira (phantom stamp FEAT-0068).
|
|
27
|
+
- **Suite aggiunte dalla card: eseguite, non solo parse** (`completeness.md` 1b): uno
|
|
28
|
+
spec ADDED va RUN targeted pre-commit; suite snapshot senza lifecycle baseline
|
|
29
|
+
dichiarato = `Partial` → gap-fix subito (era: merge-blocker + repair da 4.73M che
|
|
30
|
+
flag-gatava la verifica dell'epic).
|
|
31
|
+
|
|
5
32
|
## 2.2.1 — 2026-07-03 (FEAT-0067 post-mortem: migration vocabulary aliases)
|
|
6
33
|
|
|
7
34
|
- Il gate di delega `-auto` (condizione 4) e il Migration Gate Phase 0 1b (setup.md
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: new
|
|
3
3
|
effort: medium
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.3.1
|
|
5
|
+
requires_feature: has_backlog
|
|
5
6
|
description: >
|
|
6
7
|
Orchestrate a team of specialized agents to implement one or more backlog cards
|
|
7
8
|
end-to-end inside a dedicated worktree, with code review, doc review, QA, and
|
|
@@ -33,14 +33,18 @@
|
|
|
33
33
|
a. Edit the backlog YAML (`${paths.backlog_dir}/<CARD-ID>.yml`): set `status: DONE`, add `completed_date: <today>`, and add `provenance.implementation_session: <SESSION-ID>` (this run's session UUID — get it with `Bash(echo "${CLAUDE_CODE_SESSION_ID:-}")`; if empty, omit the field). Merge into any existing `provenance:` block written by `/prd` — do NOT overwrite `planning_session`. This makes an implementation bug traceable back to the session that produced it (`~/.claude/projects/*/<id>.jsonl`).
|
|
34
34
|
b. Add implementation notes summarizing what was built.
|
|
35
35
|
c. **Update `${paths.references_dir}/ssot-registry.md`** — add/update the entry for this card's feature area. The pre-commit doc-freshness hook BLOCKS commits that touch `${paths.backlog_dir}/` without a corresponding ssot-registry update. Always include ssot-registry.md in the same commit as the backlog YAML.
|
|
36
|
-
c-bis. **Epic
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
36
|
+
c-bis. **Epic closure does NOT happen here (v5.6.0 — the v4.99.0 commit-time gate is RETIRED).**
|
|
37
|
+
Two proven defects (FEAT-0068 post-mortem): (1) **timing** — closing at the last card's
|
|
38
|
+
commit runs structurally BEFORE the final review can disprove the epic goal (the FEAT-0068
|
|
39
|
+
epic closed DONE 13 minutes before the review proved the goal unmet on ~90% of screens),
|
|
40
|
+
and the commit context cannot see follow-up cards materialized later in the batch;
|
|
41
|
+
(2) **anchor bug** — the retired gate grepped `^parent:` but the card schema nests
|
|
42
|
+
`parent:` indented under `group:`, so it was a silent no-op on schema-conformant cards.
|
|
43
|
+
Epic closure now lives ONLY in the merge phase (`merge-cleanup.md` Phase 6b step 5e,
|
|
44
|
+
extended predicate: children **and follow-ups** DONE + no blocking residual + **epic ACs
|
|
45
|
+
verified**), which runs AFTER the final review. At commit time the parent epic and every
|
|
46
|
+
sibling card YAML are READ-ONLY. The epic-staleness safety net the v4.99.0 gate closed
|
|
47
|
+
stays closed by Phase 6b 5e + the nightly doc routine.
|
|
44
48
|
d. **Verify the write**: re-read the YAML file and confirm `status: DONE` is present. If not, retry the edit.
|
|
45
49
|
e. Stage BOTH the updated YAML AND ssot-registry.md, then commit (or as an immediate follow-up commit if the Phase 4 implementation commit already happened). When this produces a SECOND commit for the card, record BOTH hashes in the tracker (`commit: <impl-hash> + <done-hash>`) so traceability/bisect is unambiguous.
|
|
46
50
|
29. **Update tracker**: move card to `## Completed Cards` with commit hash(es), summary, flags, **and `card_status: DONE (verified)`** — the tracker is the only state surface (§ "State surface — the tracker only"); do not also emit a TaskUpdate or Progress-Bar turn for the transition. If you surface the card completion to the user at all, do it as a short prose line folded into the commit turn, never a dedicated turn.
|
|
@@ -36,6 +36,16 @@ Before triggering any review, you MUST verify that the coder agent implemented *
|
|
|
36
36
|
`conditional_items` section → flag as `Missing` (the coder must document the branch taken).
|
|
37
37
|
|
|
38
38
|
1. **Enter Phase 2.5 (completeness)** — **no standalone tracker write** for phase entry (§ "Context Tracking" allowlist; the tracker records only `2.5-completeness DONE` at step 6, co-emitted). Proceed directly to the next step.
|
|
39
|
+
1b. **Card-added test suites must RUN, not just parse (v5.6.0 — FEAT-0068).** If the card's diff
|
|
40
|
+
ADDS or modifies a test/spec file, the completeness evidence for that item is a targeted
|
|
41
|
+
EXECUTION of exactly that file (`npx vitest run <file>` / `npx playwright test <file>` / the
|
|
42
|
+
toolchain equivalent), in the worktree, before commit — a `--list`/parse check only proves the
|
|
43
|
+
file compiles, not that the suite can pass. A suite that cannot run yet by design (e.g. a
|
|
44
|
+
visual-regression suite whose baselines are generated later) is only `Done` if the card
|
|
45
|
+
EXPLICITLY declares that lifecycle (see `card-schema.md` § snapshot-suite invariant) AND the
|
|
46
|
+
declared bootstrap command is exercised; otherwise classify `Partial` and route to the
|
|
47
|
+
gap-fix loop NOW — the FEAT-0068 card shipped a baseline-less suite that detonated as a
|
|
48
|
+
merge-blocker and was "fixed" by flag-gating the epic's only visual verification (4.73M).
|
|
39
49
|
2. Re-read the backlog card (`requirements`, `acceptance_criteria`, `unknowns`, and `definition_of_done` fields).
|
|
40
50
|
3. Build a checklist — one row per item:
|
|
41
51
|
|