baldart 4.46.0 → 4.47.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 +9 -0
- package/VERSION +1 -1
- package/framework/.claude/skills/new/SKILL.md +39 -70
- package/framework/.claude/skills/new/references/commit.md +1 -1
- package/framework/.claude/skills/new/references/final-review.md +1 -1
- package/framework/.claude/skills/new/references/implement.md +1 -1
- package/framework/.claude/skills/new/references/merge-cleanup.md +1 -1
- package/framework/.claude/skills/new/references/setup.md +2 -3
- package/framework/.claude/skills/new/references/team-mode.md +3 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,15 @@ 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.47.0] - 2026-06-16
|
|
9
|
+
|
|
10
|
+
**`/new`'s orchestrator context economy is re-aimed at its real driver — turn count — and the user-visible Progress Bar + native Task spine are removed.** Telemetry of two real 8-card batches (FEAT-0028/0029 on a consumer) showed the orchestrator paying ~285M `cache_read`: 613 turns each replaying a ~490k-token accumulated context (growing toward ~800k), so total cost ≈ **turn count × accumulated context**. A 3-lens **adversarial review before implementation** refuted the obvious diagnoses: the static prefix is only ~77k (not the ~225k first assumed — context is ~86% *accumulated*, not static); narration prose is only ~7% of the fuel; and the existing § "Context economy" (bulk-content-inline) rule targets a channel that totals only ~119k cumulatively. The measurement reviewer surfaced the actual missed lever — **0 of 274 tool turns batched any calls, and ~55% of turns carried no tool call at all** — and the correctness + prior-art reviewers established that delegating bookkeeping out of the orchestrator is a previously-trodden trap (v4.15.0 reverted a Write-from-memory tracker flush; the tracker is the recovery SSOT; `card_status: DONE` needs orchestrator-side disk re-read; the weak-subagent fabrication precedent applies). What survived: (1) a new turn-economy HARD RULE (batch independent tool calls; no narration-only turns; never poll/wait), and (2) since the Progress Bar + Task spine are pure *mirrors* of the internal tracker (recovery reads the tracker, never the spine), removing them is correctness-safe and eliminates ~45 dedicated visibility turns (~8% of a batch's `cache_read`, guaranteed, not batching-dependent). **MINOR** (skill behaviour change; **no new `baldart.config.yml` key** ⇒ schema-change propagation rule N/A; no removed agent/command/skill/routine).
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- **`framework/.claude/skills/new/SKILL.md`** — replaced the `## Progress Visibility (MANDATORY)` section (native Task spine + transition Progress Bar + Phase→ledger mapping) with `## State surface — the tracker only`: the internal `/tmp/batch-tracker-*.md` is now the SINGLE state surface (it was already the recovery SSOT; the spine/bar were never read by recovery). Added a second HARD RULE to § "Context economy" — **"turn count is the multiplier"** — instructing the orchestrator to (1) batch independent tool calls into one message, (2) never emit a narration-only turn, (3) never poll/wait on background work. The § "Context Tracking" mirror bullet and the § "Routing" core-invariant list are reconciled.
|
|
15
|
+
- **`framework/.claude/skills/new/references/{setup,implement,commit,team-mode,final-review,merge-cleanup}.md`** — every `**→ Visibility**: TaskUpdate … / emit a Progress Bar` step is removed; the underlying *state* writes (card `IN_PROGRESS` claim at implement.md 2b, `card_status: DONE (verified)` at commit.md 29 / team D.6) are **preserved** (they are correctness, not visibility) and now explicitly note the tracker is the only surface. Pre-flight no longer creates a Task spine (setup.md step 2b).
|
|
16
|
+
|
|
8
17
|
## [4.46.0] - 2026-06-15
|
|
9
18
|
|
|
10
19
|
**Worktree env-file copy is unified onto one stack-agnostic config key, `stack.env_files` — closing the v4.42.0-deferred divergence (`/nw` copied `.env.local`+`.env`; new2's pre-flight copied `env/.env.local/.env.example/supabase/.temp`) WITHOUT the superset the adversarial pass had refuted.** A worktree is a fresh checkout, so the gitignored env artifacts a build needs must be copied from main — but the SET was hard-coded and divergent across paths. This release makes the set a single SSOT list (`stack.env_files`, default `['.env.local', '.env']`) read identically by `worktree-manager` (`/nw`), `/new`, and `new2`. A 3-skeptic **adversarial review before implementation** shaped the design: it (1) confirmed `framework/agents/runbook.md:36` (`cp .env.example .env`) is a documentation-template onboarding idiom — a DIFFERENT context — and **excluded** it; (2) refuted folding `supabase/.temp` into the copy set (it carries the remote project-ref → every copying worktree auto-links to the shared remote, the exact footgun `stack.schema_deploy_from_trunk_only` exists to prevent, and worse unattended in `/new` than in manual `/nw`; it is not even a build input); and (3) found the bash bug class fixed below. Crucially, the layer is **stack-agnostic**: the generic skill/installer/template never name Supabase or any stack — copying a tool's local-state directory is a per-project opt-in the user adds to their own `stack.env_files` / overlay, never a framework default. **MINOR** (additive: a new `baldart.config.yml` key, propagated end-to-end per the schema-change rule; no removed surface).
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
4.
|
|
1
|
+
4.47.0
|
|
@@ -129,80 +129,25 @@ Trunk branch: [resolved git.trunk_branch — Phase 0 step 0 populates]
|
|
|
129
129
|
- **card_status: DONE (verified)** — confirms the backlog YAML was updated and re-read to verify
|
|
130
130
|
- **When blocked**: log the blocker in `## Issues & Flags`.
|
|
131
131
|
- **On context recovery**: if you ever feel lost or after context compaction, IMMEDIATELY read your tracker file (`/tmp/batch-tracker-<FIRST-CARD-ID>.md`) to restore your state.
|
|
132
|
-
- **
|
|
132
|
+
- **The tracker is internal and is the ONLY state surface** (since v4.47.0 — see § "State surface — the tracker only"): the user does NOT see it, and there is no separate user-visible mirror to keep in sync. Do NOT spend a dedicated turn restating a transition to the user (no TaskUpdate, no Progress-Bar block) — surface progress only as a short prose line folded into a turn you are already taking for real work (§ "Context economy" turn-count rule).
|
|
133
133
|
|
|
134
134
|
---
|
|
135
135
|
|
|
136
|
-
##
|
|
136
|
+
## State surface — the tracker only
|
|
137
137
|
|
|
138
|
-
|
|
138
|
+
`/new` keeps a **single** state surface: the internal `/tmp/batch-tracker-<FIRST-CARD-ID>.md`
|
|
139
|
+
recovery SSOT (§ "Context Tracking"). There is **no separate user-visible mirror**. The Progress
|
|
140
|
+
Bar markdown block and the per-transition native Task spine (TaskCreate/TaskUpdate) were **removed
|
|
141
|
+
for context economy (v4.47.0)**: every standalone TaskUpdate / Progress-Bar emission was its own
|
|
142
|
+
orchestrator turn paying a full accumulated-context replay (~490k tokens median, measured ~8% of a
|
|
143
|
+
batch's cache_read) for zero correctness value — the tracker already holds the authoritative state,
|
|
144
|
+
and recovery (§ "Context recovery protocol") reads the tracker, never the Task spine.
|
|
139
145
|
|
|
140
|
-
> **HARD RULE —
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
**When to create (once):** right after Pre-flight has resolved the execution mode (sequential vs team) and, in team mode, the wave layout (`execution_strategy.groups[].level`) — because only then do you know the wave label for each card. Create, in this order:
|
|
147
|
-
|
|
148
|
-
1. `Pre-flight` — framing task (already in progress by the time you create the spine; mark it `in_progress` immediately and `completed` as soon as the worktree is ready).
|
|
149
|
-
2. One task **per card**, in queue order. Subject:
|
|
150
|
-
- **team mode** (wave-labelled): `Wave <level> · <CARD-ID> — <title>` (e.g. `Wave 1 · FEAT-0502 — Add merchant filter`).
|
|
151
|
-
- **sequential mode**: `<CARD-ID> — <title>` (no wave prefix).
|
|
152
|
-
3. `Final review` — framing task.
|
|
153
|
-
4. `Merge & cleanup` — framing task.
|
|
154
|
-
|
|
155
|
-
**State transitions (TaskUpdate):**
|
|
156
|
-
|
|
157
|
-
| Task | → `in_progress` | → `completed` |
|
|
158
|
-
|------|-----------------|---------------|
|
|
159
|
-
| `Pre-flight` | at spine creation | worktree ready (end of Pre-flight) |
|
|
160
|
-
| card task | **Phase 1 step 2b** (claim — when you set the card `status: IN_PROGRESS`) | **Phase 4 step 28** (after commit + `card_status: DONE (verified)`) |
|
|
161
|
-
| `Final review` | start of Final Review (F.1) | Final Review complete (fixes applied, build green) |
|
|
162
|
-
| `Merge & cleanup` | start of Phase 6 | end of Phase 6c |
|
|
163
|
-
|
|
164
|
-
**Live sub-state in the subject (optional but encouraged):** while a card task is `in_progress`, you MAY append the current phase to its subject so the panel shows live movement between Progress Bar emissions — e.g. `Wave 1 · FEAT-0502 — Add merchant filter · Phase 3.7 Codex 🔄`. Strip the suffix when the card completes.
|
|
165
|
-
|
|
166
|
-
In team mode the cards of a wave run in parallel: set ALL of a wave's card tasks `in_progress` when that wave's coders are spawned (Step B), and complete each as its per-card pipeline reaches Phase 4 (team Step D.5/D.6).
|
|
167
|
-
|
|
168
|
-
### B. Progress Bar — markdown, at transition boundaries
|
|
169
|
-
|
|
170
|
-
Append this block to your message **at the heavy transition boundaries only** (NOT on every message, and NOT on every intra-card phase change — that accumulates markdown across long autonomous runs; per § "Context economy"). A **heavy transition boundary** is any of: a **card change**, a **wave change**, **any gate decision** (resolved or skipped), and every `AskUserQuestion` / STOP. **Intra-card phase movement** (e.g. Phase 2 → 2.5 → 2.55 within the same card, with no gate decision) is shown via the **Task spine live sub-state** (TaskUpdate, § A above) — NOT by re-emitting this full markdown block each phase.
|
|
171
|
-
|
|
172
|
-
```
|
|
173
|
-
---
|
|
174
|
-
📋 **Progresso /new: <batch-id>** — modalità <sequential|team> · Wave <X>/<Y>
|
|
175
|
-
|
|
176
|
-
| Card | Wave | Fase corrente | Stato |
|
|
177
|
-
|------|------|---------------|-------|
|
|
178
|
-
| FEAT-0501 | 0 | Phase 4 Commit | ✅ |
|
|
179
|
-
| FEAT-0502 | 1 | Phase 3.7 Codex | 🔄 |
|
|
180
|
-
| FEAT-0503 | 1 | — | ⬜ |
|
|
181
|
-
|
|
182
|
-
Gate ledger (card corrente): 2.5b AC-Closure ✅ · 2.55 Simplify ✅ · 2.6 E2E ⏭️ (backend-only) · 3 Doc ⏭️ (light, no-doc-diff→Final) · 3.5 QA ⏭️ (balanced→Final) · 3.7 Codex 🔄
|
|
183
|
-
Prossimo passo: <cosa succede dopo>
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
- Legend: `⬜ da fare · 🔄 in corso · ✅ risolto · ⏭️ skippato`.
|
|
187
|
-
- The `Wave` column and the `Wave <X>/<Y>` header are present in **team mode** only; in sequential mode drop the column and write `modalità sequential` with no wave counter.
|
|
188
|
-
- The **Gate ledger** line shows the current card's per-card gates (see § C for which). Each entry is `<gate> <state>`; a skipped entry MUST carry its reason **verbatim from the enumerated Gate-table / fast-lane skip reasons** — e.g. `IS_TRIVIAL`, `review_profile=light`, `backend-only diff`, `features.has_e2e_review:false`, `balanced→Final`, `holistic_audit provenance`. **Never invent a reason.** A ledger entry reading `⏭️ (time budget)` / `(to save tokens)` / any model-invented constraint is itself a protocol violation (see the top-of-file "NO PHASE SKIP FOR PERCEIVED TIME" clause) — the ledger exists to make skips auditable, not to license them.
|
|
189
|
-
|
|
190
|
-
### C. Phase → ledger mapping
|
|
191
|
-
|
|
192
|
-
These are the per-card gates tracked in the Gate ledger line (the rest of the pipeline — Phase 1 context, Phase 2 implement, Phase 4 commit — is shown in the table's "Fase corrente" column, not the ledger):
|
|
193
|
-
|
|
194
|
-
| Ledger entry | Phase | Skipped when (enumerated reason) |
|
|
195
|
-
|--------------|-------|----------------------------------|
|
|
196
|
-
| `2.5b AC-Closure` | Phase 2.5b | never (BLOCKING, unconditional) |
|
|
197
|
-
| `2.55 Simplify` | Phase 2.55 | `IS_TRIVIAL` |
|
|
198
|
-
| `2.6 E2E` | Phase 2.6 | `features.has_e2e_review:false`, backend-only diff, or card type ∈ {backend/api/db/infra/docs/chore/config} |
|
|
199
|
-
| `3 Doc` | Phase 3 | `review_profile=light` AND no doc files in diff → deferred to Final F.3 |
|
|
200
|
-
| `3.5 QA` | Phase 3.5 | `skip`/`light` (tests already ran Phase 2), or `balanced`→Final (unless Step-A escalation) |
|
|
201
|
-
| `3.7 Codex` | Phase 3.7 | `IS_TRIVIAL` only (otherwise unconditional; `light`/`full` is depth, not skip) |
|
|
202
|
-
|
|
203
|
-
In **team mode** the same gates map to the per-card team sub-steps (D.3a AC-Closure, D.3b Simplify, D.3c E2E, D.4 QA, D.4a/D.2 doc, D.4b Codex) — track them identically. The pre-flight cross-card Codex check (Step 3d) and plan-auditor grounding (Phase 1 step 4) are batch/card-setup gates: surface their resolve/skip in the `Prossimo passo` line or a one-off ledger note, not as recurring per-card rows.
|
|
204
|
-
|
|
205
|
-
---
|
|
146
|
+
> **HARD RULE — no dedicated visibility turns.** Do NOT spend a turn (a TaskUpdate, a Progress-Bar
|
|
147
|
+
> markdown block, or a narration-only message) whose sole purpose is to restate progress. Surface
|
|
148
|
+
> progress to the user ONLY as a short natural-prose line **folded into a turn you are already
|
|
149
|
+
> taking** for real work — per § "Context economy" → turn-count rule. `STOP` / `AskUserQuestion`
|
|
150
|
+
> moments are surfaced as before (they carry a real decision, not a status restatement).
|
|
206
151
|
|
|
207
152
|
## Context economy (MANDATORY)
|
|
208
153
|
|
|
@@ -241,6 +186,30 @@ baselines. Keep that bulk on disk and pass **paths**, not bodies.
|
|
|
241
186
|
> nor what the orchestrator is allowed to read at a decision point — only that bulk arrives via a
|
|
242
187
|
> path the consumer opens itself, not via the orchestrator's own context.
|
|
243
188
|
|
|
189
|
+
> **HARD RULE — turn count is the multiplier (this is the dominant cost).** Measurement of real
|
|
190
|
+
> batches shows the bulk-content rule above is necessary but NOT where most tokens go: the
|
|
191
|
+
> orchestrator's accumulated context (~490k tokens median, growing toward ~800k on long batches) is
|
|
192
|
+
> **replayed in full on EVERY turn** via `cache_read`. So total cost ≈ **turn count × accumulated
|
|
193
|
+
> context** — and the cheapest turn (a lone `cd`, a single TaskUpdate, a one-line narration) pays the
|
|
194
|
+
> SAME ~490k replay as the most expensive one. A measured 8-card batch ran **613 orchestrator turns,
|
|
195
|
+
> of which 0 batched any tool calls and ~55% carried no tool call at all.** Cut turns:
|
|
196
|
+
> 1. **Batch independent tool calls into ONE message.** Whenever you need ≥2 tool calls with no data
|
|
197
|
+
> dependency between them — several `Read`s, a `cd` plus the command that follows it, `Edit`s to
|
|
198
|
+
> different files, a status `Edit` to the tracker alongside the next real action — emit them in a
|
|
199
|
+
> **single assistant message**, not one-per-turn. A run that issues 270 tool calls one-per-turn
|
|
200
|
+
> pays ~270 full-context replays; batched ~3-for-1 it pays ~90. Never split independent mechanical
|
|
201
|
+
> calls across turns "for clarity."
|
|
202
|
+
> 2. **No narration-only turns.** Never emit a turn whose only content is a progress recap, a
|
|
203
|
+
> "now I will…" preamble, or a status restatement. If a status note matters, fold it into the same
|
|
204
|
+
> message as the next tool call. (Per § "State surface" the tracker is the only state surface — and
|
|
205
|
+
> you write it via batched `Edit`s, never narrate it.)
|
|
206
|
+
> 3. **Never poll or wait.** Background subagents and background `Bash` re-invoke you automatically on
|
|
207
|
+
> completion — end your turn after spawning; never `sleep N; echo "waiting…"` (already stated for
|
|
208
|
+
> team mode in `references/team-mode.md` — it applies to every barrier in both modes).
|
|
209
|
+
>
|
|
210
|
+
> These rules reduce the *number* of replays; the bulk-content rule above reduces the *size* of each.
|
|
211
|
+
> Both compound — apply them together.
|
|
212
|
+
|
|
244
213
|
---
|
|
245
214
|
|
|
246
215
|
## Toolchain gates
|
|
@@ -268,7 +237,7 @@ Reference modules cite this section as `§ "Toolchain gates"`.
|
|
|
268
237
|
sistema, ri-letto a OGNI turno. Per non pagare 60k+ token di istruzioni di fase a
|
|
269
238
|
ogni turno, il dettaglio passo-passo di ogni fase vive in un **modulo `references/<x>.md`**
|
|
270
239
|
caricato on-demand. Questo file (il core) tiene solo gli invarianti cross-fase
|
|
271
|
-
(Context Tracking,
|
|
240
|
+
(Context Tracking, State surface, § "Context economy", § "Toolchain gates",
|
|
272
241
|
Agent Routing, QA Profile, Trivial fast-lane, Risk-signal detector, Fix Application
|
|
273
242
|
Log) + questa mappa di navigazione.
|
|
274
243
|
|
|
@@ -35,7 +35,7 @@
|
|
|
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
36
|
d. **Verify the write**: re-read the YAML file and confirm `status: DONE` is present. If not, retry the edit.
|
|
37
37
|
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.
|
|
38
|
-
29. **Update tracker**: move card to `## Completed Cards` with commit hash(es), summary, flags, **and `card_status: DONE (verified)
|
|
38
|
+
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.
|
|
39
39
|
|
|
40
40
|
### Sub-agent failure protocol (since v3.28.3)
|
|
41
41
|
|
|
@@ -42,7 +42,7 @@ Once ALL cards are committed in the worktree:
|
|
|
42
42
|
|
|
43
43
|
### Step F.1 — Resolve scope
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
(All cards are committed; the batch now enters Final Review. No visibility emission — the internal tracker is the only state surface, see SKILL.md § "State surface — the tracker only". Record the Final-Review start/finish in the tracker only.)
|
|
46
46
|
|
|
47
47
|
1. **Read the tracker file** to get the full picture: card IDs, files changed, commit hashes.
|
|
48
48
|
2. Gather git evidence in the worktree:
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
- Read that card's backlog YAML and check its `status` field.
|
|
9
9
|
- If NOT `DONE` → HALT: log in `## Issues & Flags` and ask the user: "Card <CARD-ID> depends on <DEP-ID> which is `<status>`. Proceed anyway, or wait?" Do not start implementation until the user responds explicitly. **The card status is NOT written until this gate passes** — so a HALT leaves the card untouched (no stale `IN_PROGRESS` for the next run to mis-read).
|
|
10
10
|
- If `DONE` (or the user chose "proceed anyway") → continue.
|
|
11
|
-
2b. **Claim** — only now set the card status to `IN_PROGRESS` and assign yourself.
|
|
11
|
+
2b. **Claim** — only now set the card status to `IN_PROGRESS` (in the backlog YAML / tracker) and assign yourself. This is a state write, not a visibility emission — do not also spend a TaskUpdate / Progress-Bar turn (§ "State surface — the tracker only").
|
|
12
12
|
2c. **Trivial-card classification (BLOCKING gate for steps 3–4)** — evaluate `IS_TRIVIAL(card)` per § "Trivial-card fast-lane". Note: condition 3 (non-source diff) cannot be fully evaluated until the coder has produced the diff, so at this point compute the **provisional** trivial flag from conditions 1+2 only (`review_profile == skip` AND no Step-A trigger sourced from the card YAML text + `files_likely_touched` extensions — if EVERY path in `files_likely_touched` is non-source, condition 3 is provisionally satisfied). If provisionally trivial → **SKIP steps 3, 3a, and 4** (architecture grounding); log `trivial: architecture grounding skipped (review_profile=skip + non-source files_likely_touched + 0 triggers)` and jump to Phase 2. Re-confirm `IS_TRIVIAL` on the ACTUAL committed diff at the review gates (Phase 2.55/3.5/3.7); if the coder unexpectedly touched a source file, the guard flips the card back onto the normal review path there. If NOT provisionally trivial → run steps 3, 3a, 4 as normal.
|
|
13
13
|
3. **(skip when provisionally trivial — see 2c)** Invoke the **codebase-architect** agent (MUST per AGENTS.md) to understand the relevant codebase area, existing patterns, and architecture before any implementation. When `features.has_lsp_layer: true`, the architect uses LSP find-references for identifier-shaped lookups — this needs NO handoff from the orchestrator: the architect reads `features.has_lsp_layer` from `baldart.config.yml` directly (the flag is ambient) per `agents/code-search-protocol.md`. Likewise, when `features.has_code_graph: true`, the architect uses the Graphify code graph for structural/relational lookups (ambient flag) per `agents/code-graph-protocol.md`. The orchestrator does NOT propagate either flag. (Earlier doc versions numbered this step 4; the step that read project-status BEFORE the architect was removed because it persisted pre-analysis context — see step 3a.)
|
|
14
14
|
3a. Update `${paths.references_dir}/project-status.md` Active Code Context (skip when the file does not exist in the project) — do this AFTER the codebase-architect run (step 3) so the "Active Code Context" reflects the architect's findings (which files are actually in scope), not just the card YAML's `files_likely_touched`. Writing it before the architect run would persist pre-analysis claims that downstream agents (e.g. a parallel card) would then read as truth.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## Phase 6 — Post-batch merge & cleanup (delegated to worktree-manager skill)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
(The batch now enters Merge & cleanup. No visibility emission — the internal tracker is the only state surface, see SKILL.md § "State surface — the tracker only". Record merge/cleanup completion in the tracker only.)
|
|
8
8
|
|
|
9
9
|
After the final review passes AND all cards are committed in the worktree, delegate the entire merge and cleanup to the **worktree-manager** skill (`/mw` in programmatic mode):
|
|
10
10
|
|
|
@@ -182,7 +182,7 @@
|
|
|
182
182
|
|
|
183
183
|
When `mode == sequential`, the per-card pipeline below runs exactly as documented. The `execution_strategy.groups` levels are simply ignored. When `mode == team`, skip the per-card pipeline and follow the **Team Mode** section at the end of this document.
|
|
184
184
|
|
|
185
|
-
|
|
185
|
+
(No user-visible Task spine / Progress Bar is created — the internal tracker is the only state surface; see SKILL.md § "State surface — the tracker only".)
|
|
186
186
|
|
|
187
187
|
3d. **Codex batch cross-card grounding check** (background — launched together with the worktree-setup subagent in step 4, then a single barrier in step 5)
|
|
188
188
|
|
|
@@ -324,7 +324,6 @@
|
|
|
324
324
|
- `## Worktree` — path / branch / slug / port, plus `Created:` = **the subagent block's `created_at`** (worktree-creation time, NOT resume time, so Phase 8's `cycle_time_mins` still spans the build window). On the **4a2 resume** path, `Created:` = the registry entry's `createdAt`; on the **4d inline fallback**, stamp `date -u +%Y-%m-%dT%H:%M:%SZ` at creation. (Never leave `Created:` empty — `cycle_time_mins` anchors on it.)
|
|
325
325
|
- `## Cross-Card Conflicts (Codex)` — distilled findings (the 3d skip-decision already wrote the `SKIPPED`/`RUN — reason` line; append the distilled findings on the RUN path, nothing to add on SKIP).
|
|
326
326
|
- In team mode: `## Team Mode` + `## Parallel Groups` (per team-mode.md).
|
|
327
|
-
`## Execution Mode` was already written at step 3c
|
|
328
|
-
d. **→ Visibility**: mark the `Pre-flight` Task spine entry → `completed` and emit the first wave's Progress Bar.
|
|
327
|
+
`## Execution Mode` was already written at step 3c — do NOT rewrite it here. **Rationale**: pre-flight is idempotent and cheap to redo (step 4a2's git pre-check guards worktree re-creation), so the data sections do not need mid-flight persistence; per-phase incremental writes resume for card execution, where mid-phase recovery actually matters. The file already exists (the skeleton was created at batch start per § Context Tracking; Phase 0 wrote `## Phase 0`) — backfill, do NOT re-create.
|
|
329
328
|
|
|
330
329
|
---
|
|
@@ -57,7 +57,7 @@ its `arch_baseline_path` at this file, so the review reuses the group baseline i
|
|
|
57
57
|
|
|
58
58
|
#### Step B: Spawn parallel coder agents
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
(No visibility emission on wave change — the internal tracker is the only state surface; see SKILL.md § "State surface — the tracker only". Record the wave start in the tracker only.)
|
|
61
61
|
|
|
62
62
|
For each card in the current group, spawn a coder agent using the Agent tool. ALL agents for the group MUST be spawned in a **SINGLE message** (multiple Agent tool calls) to run truly in parallel.
|
|
63
63
|
|
|
@@ -278,8 +278,7 @@ After ALL agents in the group complete successfully:
|
|
|
278
278
|
a. Edit the backlog YAML (`${paths.backlog_dir}/<CARD-ID>.yml`): set `status: DONE`, add `completed_date: <today>`, add implementation notes (NEVER include `[USER-APPROVED DEFERRAL]` lines that didn't actually pass through D.3a's gate).
|
|
279
279
|
b. **Verify the write**: re-read the YAML file and confirm `status: DONE` is present. If not, retry.
|
|
280
280
|
c. Stage the updated YAML and include it in the card's commit (or as an immediate follow-up commit).
|
|
281
|
-
d. Log in tracker: `card_status: DONE (verified)` for each card.
|
|
282
|
-
e. **→ Visibility**: TaskUpdate each card's spine task → `completed` (strip any live phase suffix) as it reaches DONE here.
|
|
281
|
+
d. Log in tracker: `card_status: DONE (verified)` for each card — the tracker is the only state surface (§ "State surface — the tracker only"); do not emit a TaskUpdate turn per card.
|
|
283
282
|
Note: Phase 6b (Status Reconciliation) will catch any card missed here, but aim for zero misses.
|
|
284
283
|
|
|
285
284
|
#### Step D coverage assertion (MANDATORY end-of-group check)
|
|
@@ -302,8 +301,7 @@ A missing entry means a sub-step was skipped. An entry whose value is a **`revie
|
|
|
302
301
|
After committing all cards in the group:
|
|
303
302
|
1. Update tracker: move group to done, log all results per card.
|
|
304
303
|
2. **PURGE**: forget all implementation details, review findings, architect context.
|
|
305
|
-
3.
|
|
306
|
-
4. Move to the next pending group (Step A again).
|
|
304
|
+
3. Move to the next pending group (Step A again).
|
|
307
305
|
|
|
308
306
|
### Sequential fallback within team mode
|
|
309
307
|
|