baldart 4.97.1 → 4.98.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 CHANGED
@@ -5,6 +5,28 @@ 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.98.1] - 2026-07-02
9
+
10
+ **UI *verification* also routes `PROFILE=ui`, not just UI *change* — closing the one gap v4.98.0 missed.** A live post-update session confirmed v4.98.0 works where it matters: on the actual change ("migriamo") Claude correctly spawned `codebase-architect (PROFILE=ui)`. The only borderline case was the *preceding* verification ("mi verifichi che /products/new su desktop e tablet sia già sul nuovo page layout") — answered with an inline Grep. Root cause was in the v4.98.0 wording itself: the UI grounding mandate was scoped entirely to the verb "change/build", so a literal reader treated a read-only UI verification as outside it. Fixed by broadening "any UI **change**" to "any UI **work** — a change OR a verification/question whose correct answer needs design-system-spec or responsive/state grounding" across the same three surfaces:
11
+
12
+ - `AGENTS.md` primitive `1.7.0 → 1.7.1` (§ Non-negotiables + § Change Tiers carve-out + Light bullet), `CLAUDE.md` primitive `1.4.0 → 1.4.1` (Plan Mode paragraph).
13
+ - `agents/analysis-profiles.md`: no-token inference rule #1 now includes "verifying/inspecting the design-system adoption or responsive state of" a component/page/layout; § 3 routing row broadened to "ad-hoc UI change OR adoption/responsive verification outside a skill → `ui`".
14
+ - **A bare symbol-presence check** ("does file X import Y" — a pure Grep, no correctness/responsive judgment) is now explicitly exempt alongside the Trivial one-liner, so narrow lookups keep their fast path and the proportionality concern (no full architect spawn for a yes/no import check) is respected.
15
+
16
+ **PATCH** — same-day refinement of the v4.98.0 rule, no new surface, no config key, no install-layout change. **Codex parity: portable** — pure prose in the shared skeleton + the `agents/` module both runtimes read. **Not a `baldart.config.yml` key** → the schema-change propagation rule does NOT apply.
17
+
18
+ ## [4.98.0] - 2026-07-02
19
+
20
+ **Codebase understanding is tier-orthogonal — and every UI change grounds via `PROFILE=ui`, even a "quick" one.** A live Claude session took a small ad-hoc UI request ("modifichiamo al volo questa pagina su desktop e tablet, serve il back button sull'header") and went straight to `find`/`grep`/`Read` instead of spawning `codebase-architect` with `PROFILE=ui` — whereas Codex, on the same framework, routes the profile correctly. An adversarial pass (3 skeptics) **refuted the obvious diagnosis** ("Codex reads a stricter doc than Claude"): `CLAUDE.md` states AGENTS.md is loaded automatically alongside it, so Claude reads the *same* unconditional `codebase-architect` MUST that Codex reads — this was a Claude-side *misreading* of an already-universal rule, not a weaker rule. The real drivers, confirmed with `path:line`:
21
+
22
+ - **`CLAUDE.md` conflated "Light skips plan mode / delegation" with "Light skips understanding."** The architect + `PROFILE` bullet lived *only* inside the "For a Heavy task:" block, so a Light-task reader treated grounding as Heavy-only machinery. Fixed: the Plan Mode section now states the invocation is **tier-orthogonal** and applies to Light too; UI → `PROFILE=ui` always; only a genuine Trivial one-liner skips it. (CLAUDE primitive `1.3.0 → 1.4.0`.)
23
+ - **`AGENTS.md` § Change Tiers never carved understanding out of the tier-gated "heavy machinery" list**, so it got swept into the Light exemption by association. Fixed: § Non-negotiables now says the architect MUST applies **regardless of tier** (UI → `PROFILE=ui`, Trivial one-liner exempt, inline Grep is not a substitute); § Change Tiers explicitly excludes understanding from the tier-gated machinery; the Light bullet reiterates it grounds first when the change needs real understanding. (AGENTS primitive `1.6.0 → 1.7.0`.)
24
+ - **The "which profile, when" mapping for ad-hoc UI requests lived only in `/new` `implement.md`**, so a request *outside any skill* had no routing rule. Fixed in `agents/analysis-profiles.md`: the no-token inference rule #1 now catches generic UI work (component / page / header / layout / styling / responsive), not just a named mockup; and the § 3 routing table gains explicit rows for **ad-hoc UI change outside a skill → `ui`** and ad-hoc non-UI grounding → `feature`.
25
+
26
+ The hook-based enforcement one skeptic proposed (a `PreToolUse` gate that blocks edits until architect ran) was **rejected**: it can't distinguish a typo from a UI change, would block Trivial one-liners and follow-up edits, and reproduces the already-refuted "do-X-every-time gate without a ground truth" antipattern (v4.78.2). The Trivial exemption is preserved throughout, so genuine one-liners keep their fast path — no latency regression.
27
+
28
+ **MINOR** — shipped-primitive behavior clarification (regenerated into consumers on `baldart update`); no new surface, no config key, no install-layout change. **Codex parity: portable** — pure prose in the shared skeleton + the bulk-symlinked `agents/` module both runtimes read; AGENTS.md is the cross-tool SSOT (already correct, now unambiguous), CLAUDE.md is the Claude-native stub where the regression lived. **Not a `baldart.config.yml` key** → the schema-change propagation rule does NOT apply.
29
+
8
30
  ## [4.97.1] - 2026-07-02
9
31
 
10
32
  **`/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`.
package/VERSION CHANGED
@@ -1 +1 @@
1
- 4.97.1
1
+ 4.98.1
@@ -29,8 +29,11 @@ instead of restating search strategy).
29
29
  `### PROFILE: <name>` and Read ONLY that section (plus any `§ Shared block` it cites) —
30
30
  never read this module end-to-end.
31
31
  - **No token → deterministic inference**, in this exact priority order (first match wins):
32
- 1. prompt names a mockup / `links.design` / `component_bindings` / design-system
33
- registry / tokens `ui`
32
+ 1. prompt concerns UI — a mockup / `links.design` / `component_bindings` / design-system
33
+ registry / tokens, OR building, changing, OR **verifying/inspecting the design-system
34
+ adoption or responsive state of** a component, page, header, layout, styling, or
35
+ responsive/breakpoint behavior → `ui`. (A bare symbol-presence check — "does file X
36
+ import Y" — is a plain Grep, not this profile.)
34
37
  2. prompt asks blast-radius / affected surface / "what depends on" / refactor scope →
35
38
  `impact`
36
39
  3. prompt reports an error / crash / regression / "non funziona" → `bug`
@@ -188,6 +191,8 @@ payload should never rely on `full` — pass a token.
188
191
 
189
192
  | Caller | Profile |
190
193
  |---|---|
194
+ | ad-hoc UI change OR adoption/responsive verification outside a skill (component / page / header / styling / responsive) | `ui` |
195
+ | ad-hoc pre-implementation grounding outside a skill (non-UI) | `feature` |
191
196
  | `/new` implement.md Phase 1 step 3 · `new2.js` B7 | `ui` if card has non-empty `links.design` OR `links.design_src` (the `hasMockup` bit), else `feature` |
192
197
  | `new-final-review.js` / `new-card-review.js` Phase Baseline · `/codexreview` Step 1 | `baseline` |
193
198
  | `plan-auditor` FULL-mode grounding spawn | `impact` |
@@ -4,6 +4,34 @@ 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.7.1 — 2026-07-02
8
+
9
+ - **UI *verification* also routes `PROFILE=ui`, not just UI *change*** (follow-up to 1.7.0).
10
+ 1.7.0 scoped the UI grounding mandate entirely to "change/build", so a read-only UI
11
+ verification ("is page X already on the new layout, on desktop and tablet?") fell in a gap
12
+ and a literal reader answered it with an inline Grep. Now the mandate reads "any UI **work**"
13
+ — a change OR a **verification/question whose correct answer needs design-system-spec or
14
+ responsive/state grounding**. A **bare symbol-presence check** ("does file X import Y" — a
15
+ pure Grep, no correctness/responsive judgment) stays explicitly exempt alongside the Trivial
16
+ one-liner, so narrow lookups keep their fast path. Verified against a live session: the fix
17
+ correctly fired the architect on the *change* ("migriamo"); only the initial *verification*
18
+ was uncovered — this closes it. Portable (Claude + Codex).
19
+
20
+ ## 1.7.0 — 2026-07-02
21
+
22
+ - **Codebase understanding is tier-orthogonal, and UI work always grounds via `PROFILE=ui`**:
23
+ the `codebase-architect` + profile MUST (§ Non-negotiables) now states explicitly that it
24
+ applies **regardless of tier** — a **Light** change still grounds first whenever acting
25
+ correctly needs understanding, and **any UI change routes `PROFILE=ui`** even for a small
26
+ tweak; only a genuine **Trivial** one-liner skips it, and an inline Grep is not a substitute.
27
+ § Change Tiers now carves understanding **out** of the tier-gated "heavy machinery" list
28
+ (it precedes the tier decision), and the Light bullet reiterates "still grounds via
29
+ `codebase-architect` first when the change needs real understanding (UI → `PROFILE=ui`)".
30
+ Closes the gap where an ad-hoc "quick" UI edit (outside any skill) skipped the architect
31
+ because the reader conflated "Light skips plan mode / delegation" with "Light skips
32
+ understanding". Cross-tool: pure prose in the shared skeleton — portable (both runtimes read
33
+ the same MUST; this was a Claude-side misreading of an already-universal rule, now unambiguous).
34
+
7
35
  ## 1.6.0 — 2026-07-02
8
36
 
9
37
  - **Change Tiers — a real Light lane between Trivial and Heavy**: new `## Change Tiers`
@@ -1,4 +1,4 @@
1
- <!-- baldart-primitive: name=AGENTS primitive_version=1.6.0
1
+ <!-- baldart-primitive: name=AGENTS primitive_version=1.7.1
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,
@@ -30,8 +30,17 @@ mechanics — this file remains the single source of truth for the protocol.
30
30
  profile**: `PROFILE=feature` (pre-implementation grounding) · `bug` (failure-path
31
31
  tracing) · `impact` (blast radius / refactor scope) · `discovery` (planning / question
32
32
  context) · `ui` (design-system / component scope) · `baseline` (review grounding over a
33
- diff). Contract + per-profile scoping: `agents/analysis-profiles.md`. Only if NEITHER
34
- invocation mechanism exists, degrade explicitly to inline retrieval
33
+ diff). Contract + per-profile scoping: `agents/analysis-profiles.md`. This applies
34
+ **regardless of tier** Change Tiers): a **Light** change still grounds first whenever
35
+ acting correctly needs understanding you don't already have, and **any UI work routes
36
+ `PROFILE=ui`** (design-system / component grounding) even for a small tweak — a change, OR a
37
+ **verification/question** whose correct answer needs design-system-spec or responsive/state
38
+ grounding (e.g. "is page X already on the new layout, on desktop and tablet?"). Only a genuine
39
+ **Trivial** one-liner (a typo, an obvious self-contained fix) or a **bare symbol-presence
40
+ check** (does file X import Y — a pure Grep, no correctness/responsive judgment) skips it;
41
+ starting with an inline Grep is NOT a substitute when the task needs cross-file or
42
+ design-system grounding.
43
+ Only if NEITHER invocation mechanism exists, degrade explicitly to inline retrieval
35
44
  (code-graph → LSP → Grep) and SAY SO.
36
45
  - MUST have any **Heavy** plan (see § Change Tiers) reviewed BEFORE presenting it for
37
46
  approval — run `plan-auditor` + `doc-reviewer` (in parallel), incorporate their feedback,
@@ -99,13 +108,19 @@ mechanics — this file remains the single source of truth for the protocol.
99
108
  Every change is one of three tiers. The tier — NOT raw file count — decides whether the heavy
100
109
  machinery (plan mode, plan review, delegation, worktree, backlog card) applies. **When in
101
110
  doubt, treat it as Light** and escalate only when a Heavy trigger is actually present.
111
+ **Codebase understanding (`codebase-architect` + the matching profile, § Non-negotiables) is
112
+ NOT part of this tier-gated machinery** — it precedes the tier decision and applies to Light
113
+ too; only a Trivial one-liner or a bare symbol-presence Grep skips it, and any UI work —
114
+ change OR a spec/responsive-grounded verification — always grounds via `PROFILE=ui`.
102
115
 
103
116
  - **Trivial** — a one-liner, typo, or obvious bug with a clear fix. Just do it.
104
117
  - **Light** — the default for most work. Any change that does **not** hit a Heavy trigger,
105
118
  even if it spans several files within one coherent area. → Implement **directly on the
106
119
  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.
120
+ orchestrator may edit inline or delegate for volume, but **still grounds via
121
+ `codebase-architect` first** when the task needs real understanding (UI work — change or
122
+ spec/responsive-grounded verification → `PROFILE=ui`).
123
+ Docs stay in sync and the pre-commit gates still run.
109
124
  - **Heavy** — escalate ONLY when the change: introduces a new DB schema / migration; adds a
110
125
  new external dependency; adds a new API contract / route or a new domain entity; is a wide
111
126
  or cross-module refactor; or runs in parallel with other agents/sessions on shared files.
@@ -4,6 +4,26 @@ 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.4.1 — 2026-07-02
8
+
9
+ - **UI verification also grounds via `PROFILE=ui`** (follow-up to 1.4.0): the Plan Mode
10
+ paragraph now says "every UI **task**" grounds — a change OR a verification/question whose
11
+ correct answer needs design-system-spec or responsive/state grounding — with a bare
12
+ symbol-presence check ("does file X import Y") explicitly exempt. Mirrors AGENTS primitive
13
+ 1.7.1. Closes the gap where a read-only "is page X on the new layout?" was answered by an
14
+ inline Grep because 1.4.0 mandated grounding only on UI *changes*.
15
+
16
+ ## 1.4.0 — 2026-07-02
17
+
18
+ - **Break the "Light skips delegation → Light skips architect" conflation**: the Plan Mode
19
+ section now states that Light/Trivial changes skip plan mode / plan-review / mandatory
20
+ delegation but do **NOT** skip codebase understanding — the `codebase-architect` + `PROFILE`
21
+ invocation is **tier-orthogonal**, a Light change still grounds via it when acting correctly
22
+ needs understanding, and **every UI change grounds via `PROFILE=ui`**; only a genuine Trivial
23
+ one-liner skips it. This was the Claude-native locus of the bug: the architect bullet lived
24
+ only inside the "For a Heavy task:" block, so a Light-task reader treated it as Heavy-only.
25
+ Mirrors the AGENTS.md primitive 1.7.0 § Non-negotiables / § Change Tiers clarification.
26
+
7
27
  ## 1.3.0 — 2026-07-02
8
28
 
9
29
  - Plan Mode scoped to **Heavy** changes (see `AGENTS.md` § Change Tiers): Light and Trivial
@@ -1,4 +1,4 @@
1
- <!-- baldart-primitive: name=CLAUDE primitive_version=1.3.0
1
+ <!-- baldart-primitive: name=CLAUDE primitive_version=1.4.1
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.
@@ -16,7 +16,14 @@ SSOT, not restated here. Below are the **Claude-native mechanics only**.
16
16
 
17
17
  Plan mode is for **Heavy** changes only (see `AGENTS.md` § Change Tiers). **Light** and
18
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:
19
+ them directly. When in doubt, treat it as Light. They do **NOT**, however, skip codebase
20
+ understanding: the `codebase-architect` + `PROFILE` invocation (`AGENTS.md` § Non-negotiables)
21
+ is **tier-orthogonal** — a Light change still grounds via it whenever acting correctly needs
22
+ understanding you don't already have, and **every UI task grounds via `PROFILE=ui`** — a change,
23
+ OR a verification/question whose correct answer needs design-system-spec or responsive/state
24
+ grounding (e.g. "is page X already on the new layout, on desktop and tablet?") — even for a small
25
+ tweak. Only a genuine Trivial one-liner or a bare symbol-presence check (does file X import Y)
26
+ skips it. For a Heavy task:
20
27
 
21
28
  - Enter plan mode (`EnterPlanMode`) before writing code.
22
29
  - Invoke `codebase-architect` before writing the plan — never plan blind. Pass the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "baldart",
3
- "version": "4.97.1",
3
+ "version": "4.98.1",
4
4
  "description": "Claude Agent Framework - Reusable framework for coordinating AI agents and humans in software projects",
5
5
  "bin": {
6
6
  "baldart": "./bin/baldart.js"