baldart 4.96.0 → 4.97.1
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 +20 -0
- package/VERSION +1 -1
- package/framework/.claude/skills/ds-edit/CHANGELOG.md +9 -0
- package/framework/.claude/skills/ds-edit/SKILL.md +10 -4
- package/framework/.claude/skills/ds-new/CHANGELOG.md +9 -0
- package/framework/.claude/skills/ds-new/SKILL.md +11 -7
- package/framework/templates/primitives/AGENTS.CHANGELOG.md +15 -0
- package/framework/templates/primitives/AGENTS.md +36 -13
- package/framework/templates/primitives/CLAUDE.CHANGELOG.md +7 -0
- package/framework/templates/primitives/CLAUDE.md +6 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,26 @@ 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
|
+
## [4.97.1] - 2026-07-02
|
|
9
|
+
|
|
10
|
+
**`/ds-new` + `/ds-edit`: locate/reuse-first is a deterministic registry lookup, never a search agent.** A live `/ds-edit` run went off-script — instead of the skill's deterministic spine (resolve the component spec → `ui-expert` source edit → `extract-one` → `serialize-spec` → `doc-reviewer` → `ds-gate`), the model improvised ad-hoc `general-purpose` agents to "find" the component and verify a formatter. Root cause: the skills said *what* to do ("resolve the existing component") but never forbade *how not to*. Reaffirmed (adversarially) that the v4.94.0 `codebase-architect` analysis profiles correctly do NOT belong in the `ds*` skills — those operate on a single, already-named element (no scope→registry fan-out), and `ds-new`'s reuse-first is a **deterministic signature detector** that an LLM `ui`-profile pass would only make fuzzier and duplicate; the `ui` profile lives in the *planning* skills (`/prd`, `/ui-design`, `/new`, `/ds-handoff`, `context-primer`) and, when it matters, already ran upstream before `/prd` delegates to `ds-new`/`ds-edit`.
|
|
11
|
+
|
|
12
|
+
- **`ds-edit` P1** now states explicitly: read `components/<Name>.md` directly and take its `source` — a plain file resolution, **never** a `general-purpose` / `Explore` / `codebase-architect` spawn (grep the exported symbol if only the source path is uncertain). Skill `1.0.0 → 1.1.0`.
|
|
13
|
+
- **`ds-new` step 1** now states explicitly: reuse-first stays the deterministic `ds-reuse-gate.js → signatureDuplicates` / `baldart ds-gate` detector, **never** routed through an LLM search/architect agent. Skill `1.0.0 → 1.1.0`.
|
|
14
|
+
|
|
15
|
+
**PATCH** — skill-body clarification, no new surface, no install-layout change, no behavior change to the deterministic spine. **Codex parity: portable** — pure prose in the shared skill bodies (both skills already degrade `ui-expert`/`doc-reviewer` delegation to TODO on Codex; this hardening is runtime-agnostic). **Not a `baldart.config.yml` key** → the schema-change propagation rule does NOT apply.
|
|
16
|
+
|
|
17
|
+
## [4.97.0] - 2026-07-02
|
|
18
|
+
|
|
19
|
+
**Change Tiers — a real Light lane, so ordinary edits stop triggering the heavy machinery.** The root primitives forced plan mode on *any* non-trivial task, a `plan-auditor` + `doc-reviewer` review gate on *every* non-trivial plan, mandatory delegation to a domain agent, and (amplified by project overlays) a worktree + backlog card whenever more than a few files were touched — so even a small direct edit spun up the full orchestration. Root cause: there were only two tiers (Trivial vs everything-else-is-Heavy); no genuine middle lane.
|
|
20
|
+
|
|
21
|
+
- **New `## Change Tiers` section in the `AGENTS.md` primitive** (cross-tool SSOT, read by Claude + Codex) defines **Trivial / Light / Heavy**, and the *tier* — not raw file count — decides whether the heavy machinery fires. Default is **Light; when in doubt → Light**.
|
|
22
|
+
- **Light** (the new default for most work): any change that hits **no Heavy trigger**, even multi-file within one coherent area → implemented **directly on the current branch**, no plan mode, no plan-review, no worktree, no card.
|
|
23
|
+
- **Heavy** (aggressive calibration): escalate ONLY for a new DB schema/migration, a new external dependency, a new API contract/route or domain entity, a wide/cross-module refactor, or work parallel to other sessions on shared files → full machinery.
|
|
24
|
+
- The plan-review MUST, the delegation MUST, and the Git Workflow worktree rule in `AGENTS.md` are now scoped to **Heavy**; the `CLAUDE.md` primitive Plan Mode section likewise fires only for Heavy (Light/Trivial skip plan mode + review + mandatory delegation). Primitives bumped: `AGENTS.md` 1.5.0 → **1.6.0**, `CLAUDE.md` 1.2.0 → **1.3.0**.
|
|
25
|
+
|
|
26
|
+
**MINOR** — behavior/posture change to shipped primitives, no install-layout change. **Codex parity: portable** — pure prose in the shared `AGENTS.md` skeleton; Codex reads the same tiers to decide agent-spawn / worktree / card. **Not a `baldart.config.yml` key** → the schema-change propagation rule does NOT apply. Consumers pick it up on `baldart update` (regenerated root primitives); project overlays may add project-specific Heavy triggers.
|
|
27
|
+
|
|
8
28
|
## [4.96.0] - 2026-07-02
|
|
9
29
|
|
|
10
30
|
**Protected branch decoupled from the integration trunk — `git.protected_branch`.** The root `AGENTS.md` primitive expressed the "NEVER push directly to X" MUST via `{{ git.trunk_branch }}`, conflating two distinct roles that in a two-branch gitflow are different branches: the *integration trunk* (worktree base + feature PR target in `/prd` + `/new`) and the *protected branch* (production/release line that must not receive direct pushes). A consumer with `trunk_branch: develop` therefore had its agents (Claude + Codex) refuse a direct `develop` push — even though `develop` was the integration branch they push to and `main` was the truly-protected line. `trunk_branch` could not simply be flipped to `main` because it also drives worktree creation (`update.js`), which must branch from `develop`.
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
4.
|
|
1
|
+
4.97.1
|
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
Formato: [Keep a Changelog](https://keepachangelog.com/) · [SemVer](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## 1.1.0 — 2026-07-02
|
|
6
|
+
|
|
7
|
+
- **P1 locate hardening.** Reso esplicito che lo step P1 è un lookup deterministico
|
|
8
|
+
diretto sul registro (`components/<Name>.md` → `source`) e che NON deve mai
|
|
9
|
+
spawnare un agente `general-purpose` / `Explore` / `codebase-architect` per
|
|
10
|
+
"trovare" il componente — l'unità è già nominata, non c'è fan-out da esplorare.
|
|
11
|
+
Chiude la deriva osservata in cui il modello improvvisava una ricerca ad-hoc al
|
|
12
|
+
posto dello spine deterministico della skill.
|
|
13
|
+
|
|
5
14
|
## 1.0.0 — 2026-07-01
|
|
6
15
|
|
|
7
16
|
- Baseline: versioning per-skill introdotto al framework v4.82.0.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ds-edit
|
|
3
3
|
effort: medium
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
description: >
|
|
6
6
|
Update ONE existing canonical design-system element correctly — the deliberate
|
|
7
7
|
edit twin of /ds-new. Classifies the change (resync the spec to changed source /
|
|
@@ -81,9 +81,15 @@ the target component + intended variant are pre-resolved.
|
|
|
81
81
|
## Pre-flight
|
|
82
82
|
|
|
83
83
|
- **P0 — gate.** `features.has_design_system: false` → REFUSE.
|
|
84
|
-
- **P1 — locate
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
- **P1 — locate (deterministic registry lookup — NEVER a search agent).** Read
|
|
85
|
+
`${paths.design_system}/components/<Name>.md` **directly** and take its `source`
|
|
86
|
+
field — the registry IS the index, so this is a plain file resolution. Do **not**
|
|
87
|
+
spawn a `general-purpose` / `Explore` / `codebase-architect` agent to "find" the
|
|
88
|
+
component: `ds-edit` operates on a single, already-named element, so there is no
|
|
89
|
+
fan-out to explore (the `ui` analysis profile is for scope→registry discovery in the
|
|
90
|
+
*planning* skills, not here). If the spec does NOT exist → STOP and suggest `/ds-new`
|
|
91
|
+
(this skill edits; it does not create). If only the `source` path is uncertain,
|
|
92
|
+
`grep` the exported symbol — still no agent.
|
|
87
93
|
- **P2 — classify the change** (the edit decision tree; ask the user when unclear):
|
|
88
94
|
- **resync** — the source already changed (props/variants/a11y); only the spec
|
|
89
95
|
needs to catch up. (Often you don't even need this skill — see "What this skill
|
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
Formato: [Keep a Changelog](https://keepachangelog.com/) · [SemVer](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## 1.1.0 — 2026-07-02
|
|
6
|
+
|
|
7
|
+
- **Reuse-first hardening.** Reso esplicito che lo step 1 reuse-first resta il
|
|
8
|
+
detector deterministico a firma (`ds-reuse-gate.js → signatureDuplicates` /
|
|
9
|
+
`baldart ds-gate`) e NON deve essere instradato attraverso un agente
|
|
10
|
+
`general-purpose` / `Explore` / `codebase-architect` (sostituirebbe il check a
|
|
11
|
+
firma con uno più fuzzy e duplicherebbe la Reuse Analysis che il profilo `ui`
|
|
12
|
+
possiede già nelle skill di planning). Simmetrico al P1 hardening di `ds-edit`.
|
|
13
|
+
|
|
5
14
|
## 1.0.0 — 2026-07-01
|
|
6
15
|
|
|
7
16
|
- Baseline: versioning per-skill introdotto al framework v4.82.0.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ds-new
|
|
3
3
|
effort: medium
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
description: >
|
|
6
6
|
Create ONE canonical design-system element — a component OR a token — end to
|
|
7
7
|
end with the full discipline: reuse-first research, (optional) scaffold, then
|
|
@@ -87,12 +87,16 @@ branch), the role/closure are pre-resolved — skip the reuse step (P1/step 1).
|
|
|
87
87
|
|
|
88
88
|
Each step is a delegation. Read the cited SSOT; do not paraphrase it.
|
|
89
89
|
|
|
90
|
-
1. **Reuse-first (BLOCKING
|
|
91
|
-
|
|
92
|
-
`design-system-protocol.md`.
|
|
93
|
-
|
|
94
|
-
ds-gate
|
|
95
|
-
|
|
90
|
+
1. **Reuse-first (BLOCKING — deterministic, NEVER a search agent).** Walk the
|
|
91
|
+
Component Discovery Cascade AND query the Selection Policy **by role**
|
|
92
|
+
(`INDEX.md` § Selection Policy), per `design-system-protocol.md`. The duplicate
|
|
93
|
+
check is the gate's own **deterministic detector** — `node -e` over
|
|
94
|
+
`src/utils/ds-reuse-gate.js → signatureDuplicates` (or `baldart ds-gate` once a
|
|
95
|
+
spec exists) — NOT an LLM pass: do **not** route reuse-first through a
|
|
96
|
+
`general-purpose` / `Explore` / `codebase-architect` agent (that would replace a
|
|
97
|
+
signature-based check with a fuzzier one and duplicate the Reuse Analysis the `ui`
|
|
98
|
+
profile already owns in the *planning* skills). Ask the user **only** on a real
|
|
99
|
+
fork (a suspected-duplicate, or a closed-family hit) — one consolidated
|
|
96
100
|
`AskUserQuestion`. On a clean match → **STOP and reuse the existing component**
|
|
97
101
|
(creating it anyway is the exact failure this skill prevents).
|
|
98
102
|
2. **Create (conditional).** *Scaffold mode* → DELEGATE `ui-expert` (Task tool):
|
|
@@ -4,6 +4,21 @@ Formato: [Keep a Changelog](https://keepachangelog.com/) · [SemVer](https://sem
|
|
|
4
4
|
Questo è il changelog INTERNO dello skeleton spedito (`primitive_version`), separato dal
|
|
5
5
|
file `AGENTS.md` generato nel consumer e indipendente dal `VERSION` del framework.
|
|
6
6
|
|
|
7
|
+
## 1.6.0 — 2026-07-02
|
|
8
|
+
|
|
9
|
+
- **Change Tiers — a real Light lane between Trivial and Heavy**: new `## Change Tiers`
|
|
10
|
+
section defines Trivial / Light / Heavy, and the tier (NOT raw file count) now decides
|
|
11
|
+
whether the heavy machinery fires. The plan-review MUST is scoped to **Heavy** plans (was
|
|
12
|
+
"any non-trivial plan → `plan-auditor` + `doc-reviewer`"); the delegation MUST is scoped to
|
|
13
|
+
**Heavy** implementation (Light changes MAY be implemented directly inline); the Git
|
|
14
|
+
Workflow worktree rule fires for **Heavy** work on a new branch (Light goes on the current
|
|
15
|
+
branch). Heavy triggers (aggressive calibration): new DB schema/migration, new external
|
|
16
|
+
dependency, new API contract/route or domain entity, wide/cross-module refactor, or work
|
|
17
|
+
parallel to other sessions on shared files. Default is **Light; when in doubt → Light**.
|
|
18
|
+
Removes the "everything is non-trivial → plan mode + review + delegate + worktree + card"
|
|
19
|
+
friction on ordinary edits. Cross-tool: pure prose in the shared skeleton — portable
|
|
20
|
+
(Claude + Codex; Codex reads the same tiers to decide agent-spawn / worktree / card).
|
|
21
|
+
|
|
7
22
|
## 1.5.0 — 2026-07-02
|
|
8
23
|
|
|
9
24
|
- **Protected branch decoupled from the integration trunk**: the "NEVER push directly"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- baldart-primitive: name=AGENTS primitive_version=1.
|
|
1
|
+
<!-- baldart-primitive: name=AGENTS primitive_version=1.6.0
|
|
2
2
|
This is the SHIPPED SKELETON. The writer (src/utils/root-primitives.js) strips
|
|
3
3
|
this banner, resolves every {{ slot }} / {{> partial }} / {{#flag}} from
|
|
4
4
|
baldart.config.yml (+ package.json/README), merges .baldart/overlays/AGENTS.md,
|
|
@@ -33,16 +33,19 @@ mechanics — this file remains the single source of truth for the protocol.
|
|
|
33
33
|
diff). Contract + per-profile scoping: `agents/analysis-profiles.md`. Only if NEITHER
|
|
34
34
|
invocation mechanism exists, degrade explicitly to inline retrieval
|
|
35
35
|
(code-graph → LSP → Grep) and SAY SO.
|
|
36
|
-
- MUST have any
|
|
37
|
-
`plan-auditor` + `doc-reviewer` (in parallel), incorporate their feedback,
|
|
38
|
-
plan that the review gate was honored. Present the ALREADY-reviewed plan,
|
|
39
|
-
(Claude Code enforces this inside plan mode, before `ExitPlanMode` — see
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
- MUST have any **Heavy** plan (see § Change Tiers) reviewed BEFORE presenting it for
|
|
37
|
+
approval — run `plan-auditor` + `doc-reviewer` (in parallel), incorporate their feedback,
|
|
38
|
+
and note in the plan that the review gate was honored. Present the ALREADY-reviewed plan,
|
|
39
|
+
never a raw one. (Claude Code enforces this inside plan mode, before `ExitPlanMode` — see
|
|
40
|
+
`CLAUDE.md`.) **Light** and **Trivial** changes need no plan and no review — implement them
|
|
41
|
+
directly.
|
|
42
|
+
- MUST delegate **Heavy** implementation to the domain agent — plan and delegate, do NOT
|
|
43
|
+
write substantial code inline: **code / logic / tests → `coder`**; **UI (components, pages,
|
|
42
44
|
styling, visual output) → `ui-expert`**. Same dual-tool invocation as `codebase-architect`
|
|
43
|
-
(Claude Code: Task tool `subagent_type`; Codex: custom agent by name).
|
|
44
|
-
(
|
|
45
|
-
|
|
45
|
+
(Claude Code: Task tool `subagent_type`; Codex: custom agent by name). For a **Light**
|
|
46
|
+
change the orchestrator MAY implement directly inline (or still delegate at its discretion
|
|
47
|
+
— e.g. for volume). Every other agent (code-reviewer, doc-reviewer, qa-sentinel,
|
|
48
|
+
security-reviewer, …) routes via `.claude/agents/REGISTRY.md`.
|
|
46
49
|
- MUST NOT silently substitute a different agent when an invocation returns empty / times
|
|
47
50
|
out / is denied — STOP, report verbatim, and wait. Never auto-route to a generic agent.
|
|
48
51
|
- MUST NOT work on files another agent has claimed; parallel work only on independent areas.
|
|
@@ -91,14 +94,34 @@ mechanics — this file remains the single source of truth for the protocol.
|
|
|
91
94
|
entries older than 7 days to `work-history.md`.
|
|
92
95
|
{{/has_project_status}}
|
|
93
96
|
|
|
97
|
+
## Change Tiers
|
|
98
|
+
|
|
99
|
+
Every change is one of three tiers. The tier — NOT raw file count — decides whether the heavy
|
|
100
|
+
machinery (plan mode, plan review, delegation, worktree, backlog card) applies. **When in
|
|
101
|
+
doubt, treat it as Light** and escalate only when a Heavy trigger is actually present.
|
|
102
|
+
|
|
103
|
+
- **Trivial** — a one-liner, typo, or obvious bug with a clear fix. Just do it.
|
|
104
|
+
- **Light** — the default for most work. Any change that does **not** hit a Heavy trigger,
|
|
105
|
+
even if it spans several files within one coherent area. → Implement **directly on the
|
|
106
|
+
current branch**: no plan mode, no plan-review gate, no worktree, no backlog card. The
|
|
107
|
+
orchestrator may edit inline or delegate for volume. Docs stay in sync and the pre-commit
|
|
108
|
+
gates still run.
|
|
109
|
+
- **Heavy** — escalate ONLY when the change: introduces a new DB schema / migration; adds a
|
|
110
|
+
new external dependency; adds a new API contract / route or a new domain entity; is a wide
|
|
111
|
+
or cross-module refactor; or runs in parallel with other agents/sessions on shared files.
|
|
112
|
+
→ Full machinery: plan mode → reviewed plan (`plan-auditor` + `doc-reviewer`) → delegation
|
|
113
|
+
to the domain agent → a git **worktree** (`/nw`) → a backlog card (when the backlog feature
|
|
114
|
+
is on). Project overlays may add project-specific Heavy triggers.
|
|
115
|
+
|
|
94
116
|
## Git Workflow
|
|
95
117
|
|
|
96
118
|
Branch naming: `{{ git.feature_prefix }}/<CARD-ID>-slug` (local), `codex/…` or `claude/…`
|
|
97
119
|
(cloud agents), `hotfix/<ID>-slug` (production fixes). Branches are created by the
|
|
98
120
|
orchestrator (`/nw`, `/new`) or the user — **never by the `coder` agent** (it implements on
|
|
99
|
-
the branch it was spawned on).
|
|
100
|
-
|
|
101
|
-
checkout
|
|
121
|
+
the branch it was spawned on). **Light** changes go directly on the current branch. **Heavy**
|
|
122
|
+
work on a NEW branch uses a git **worktree** (`/nw`) — the orchestrator MUST NOT run
|
|
123
|
+
`git switch` / `checkout -b` / `branch` on the shared main checkout (other sessions share it).
|
|
124
|
+
Stage explicit filenames only; never bundle unrelated changes.
|
|
102
125
|
|
|
103
126
|
## Workflow Gates
|
|
104
127
|
|
|
@@ -4,6 +4,13 @@ Formato: [Keep a Changelog](https://keepachangelog.com/) · [SemVer](https://sem
|
|
|
4
4
|
Changelog INTERNO dello stub spedito (`primitive_version`), separato dal `CLAUDE.md`
|
|
5
5
|
generato nel consumer e indipendente dal `VERSION` del framework.
|
|
6
6
|
|
|
7
|
+
## 1.3.0 — 2026-07-02
|
|
8
|
+
|
|
9
|
+
- Plan Mode scoped to **Heavy** changes (see `AGENTS.md` § Change Tiers): Light and Trivial
|
|
10
|
+
changes now explicitly skip plan mode, the plan-review gate, and mandatory delegation —
|
|
11
|
+
implemented directly. "When in doubt → Light." Removes the plan-mode-for-any-non-trivial-
|
|
12
|
+
task friction on ordinary edits. Mirrors the AGENTS.md primitive 1.6.0 Change Tiers.
|
|
13
|
+
|
|
7
14
|
## 1.2.0 — 2026-07-02
|
|
8
15
|
|
|
9
16
|
- Plan Mode: the `codebase-architect` pre-plan invocation now passes the matching
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- baldart-primitive: name=CLAUDE primitive_version=1.
|
|
1
|
+
<!-- baldart-primitive: name=CLAUDE primitive_version=1.3.0
|
|
2
2
|
SHIPPED SKELETON. The writer strips this banner, resolves {{ slot }}/{{#flag}} from
|
|
3
3
|
baldart.config.yml, merges .baldart/overlays/CLAUDE.md, stamps a baldart-generated
|
|
4
4
|
marker, and writes the result to the repo root.
|
|
@@ -14,8 +14,11 @@ SSOT, not restated here. Below are the **Claude-native mechanics only**.
|
|
|
14
14
|
|
|
15
15
|
## Plan Mode (Claude-native)
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
Plan mode is for **Heavy** changes only (see `AGENTS.md` § Change Tiers). **Light** and
|
|
18
|
+
**Trivial** changes skip plan mode, the plan-review gate, and mandatory delegation — implement
|
|
19
|
+
them directly. When in doubt, treat it as Light. For a Heavy task:
|
|
20
|
+
|
|
21
|
+
- Enter plan mode (`EnterPlanMode`) before writing code.
|
|
19
22
|
- Invoke `codebase-architect` before writing the plan — never plan blind. Pass the
|
|
20
23
|
matching `PROFILE=<feature|bug|impact|discovery|ui|baseline>` token (the profile
|
|
21
24
|
vocabulary and routing live in `AGENTS.md` § Non-negotiables and
|