baldart 5.11.0 → 5.11.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 +11 -0
- package/VERSION +1 -1
- package/framework/.claude/skills/new/CHANGELOG.md +16 -0
- package/framework/.claude/skills/new/SKILL.md +9 -1
- package/framework/.claude/skills/new/references/merge-cleanup.md +23 -0
- package/framework/.claude/skills/new/references/team-mode.md +2 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,17 @@ 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.11.1] - 2026-07-07
|
|
9
|
+
|
|
10
|
+
**`/new` now tears down its idle background subagents at end of run — closes the "Background work is running" leak on terminal exit.**
|
|
11
|
+
A user reported that after every interactive `/new` run, closing the terminal warns `Background work is running` and lists the batch's teammates (`## AUTONOMOUS CARD IMPLEMENTATION — FEAT-00NN`, the `i18n-translator` fill, the doc closer) as if they were still executing. They are not — they **finished**. Root cause: `/new` spawns its coder + closer subagents with `run_in_background: true`, and a background subagent that completes its work does **NOT** terminate — it goes idle ("rests") so the orchestrator could `SendMessage`/resume it (deliberate: the empty-result gate reads their transcripts from disk, and the framework explicitly forbids messaging a rested teammate). Phase 6c's teardown ended the **Codex broker** (a Bash process) + reaped orphan MCP servers, but there was **no `TaskStop` anywhere in the framework** — so the idle teammates stayed alive until Claude Code's `SessionEnd` (whenever the user closes the terminal). Harmless to the committed work (already merged), but noisy and wasteful of session resources.
|
|
12
|
+
|
|
13
|
+
- **New Phase 6c step 5c** (`framework/.claude/skills/new/references/merge-cleanup.md`) — after the merge and after every teammate's transcript has been consumed, `TaskList` → `TaskStop` the batch's idle teammates, scoped to THIS run only: matched by the `coder-<CARD-ID>` name prefix OR any card ID in the tracker `## Card Queue` (so the match survives a compaction). NEVER stops a task outside the batch signature (the user's unrelated background work in the same session). Best-effort + non-blocking + one log line (`Background subagents teardown: <stopped N | none alive | N/A (Codex) | skipped>`).
|
|
14
|
+
- **Mirror on early exit** (`framework/.claude/skills/new/SKILL.md` § "Terminal hygiene") — the same `TaskList`→`TaskStop` runs when the batch ends before Phase 6c (unrecoverable HALT / killed final-review workflow), exactly as the Codex-broker early teardown already did.
|
|
15
|
+
- **Pointer** in `references/team-mode.md` — the parallel `coder-<CARD-ID>` fan-out is the widest source of the leak; noted that Phase 6c 5c tears them down after merge.
|
|
16
|
+
- **`/new2` is unaffected** — its agents run inside the dynamic-workflow runtime and die with the workflow; only the classic `/new` (Task-tool background subagents) leaked.
|
|
17
|
+
- **Codex parity: N/A** — no observable Agent/Task tool on Codex, team-mode is forced sequential there, and Codex named-agent spawns do not persist as idle background tasks (`framework/agents/runtime-portability-protocol.md`). **No new `baldart.config.yml` key** → the schema-change propagation rule does NOT apply. `/new` skill version → 2.4.1.
|
|
18
|
+
|
|
8
19
|
## [5.11.0] - 2026-07-06
|
|
9
20
|
|
|
10
21
|
**Seamless framework-drift reconciliation in `baldart update` — a trivially-drifted shared framework file no longer dead-ends the whole update.**
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
5.11.
|
|
1
|
+
5.11.1
|
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
Formato: [Keep a Changelog](https://keepachangelog.com/) · [SemVer](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## 2.4.1 — 2026-07-07
|
|
6
|
+
|
|
7
|
+
- **Teardown dei subagent in background a fine run (chiude il leak "Background work is running").**
|
|
8
|
+
I coder + closer di `/new` sono spawnati con `run_in_background: true`; un subagent che finisce il
|
|
9
|
+
lavoro **non termina** — va in idle ("rests") così l'orchestratore *potrebbe* farne resume. Il
|
|
10
|
+
teardown di Phase 6c fermava solo il **broker Codex** (processo Bash), mai i subagent → restavano
|
|
11
|
+
vivi in idle fino al `SessionEnd`, comparendo come "Background work is running" alla chiusura del
|
|
12
|
+
terminale. Nuovo step **6c.5c** (`references/merge-cleanup.md`): dopo il merge, `TaskList` →
|
|
13
|
+
`TaskStop` sui soli teammate di QUESTO batch — matchati per `coder-<CARD-ID>` o per card-ID dal
|
|
14
|
+
tracker `## Card Queue` (sopravvive alla compaction); mai un task fuori dalla firma del batch
|
|
15
|
+
(lavoro background non correlato dell'utente). Best-effort + non-bloccante + riga di log. Mirror
|
|
16
|
+
dello stesso teardown nel path di uscita anticipata (`SKILL.md` § "Terminal hygiene"); pointer in
|
|
17
|
+
`references/team-mode.md` (i coder paralleli sono la fonte principale del leak). `/new2` non è
|
|
18
|
+
affetto (agent nel runtime del workflow → muoiono col workflow). Codex parity: N/A (nessun
|
|
19
|
+
Agent/Task tool osservabile; team-mode forzato sequenziale). Nessuna nuova chiave `baldart.config.yml`.
|
|
20
|
+
|
|
5
21
|
## 2.4.0 — 2026-07-06
|
|
6
22
|
|
|
7
23
|
- **Prossime wave per NOME nel messaggio finale.** Il Step F.6 "Prossimi Passi"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: new
|
|
3
3
|
effort: medium
|
|
4
|
-
version: 2.4.
|
|
4
|
+
version: 2.4.1
|
|
5
5
|
requires_feature: has_backlog
|
|
6
6
|
description: >
|
|
7
7
|
Orchestrate a team of specialized agents to implement one or more backlog cards
|
|
@@ -472,6 +472,14 @@ printf '%s' "$TD" | grep -qi "unknown command" \
|
|
|
472
472
|
This NEVER touches a broker for another worktree or the user's interactive session (different cwd). If the
|
|
473
473
|
orchestrator is hard-killed and never resumed, the `baldart doctor` reaper is the final safety net.
|
|
474
474
|
|
|
475
|
+
**Also stop THIS batch's idle background subagents on that early exit** (Claude-only, best-effort) — the
|
|
476
|
+
same teardown Phase 6c step 5c runs on the normal close. `/new`'s coder + closer teammates (`run_in_background`)
|
|
477
|
+
go idle rather than terminate, so an early exit leaves them alive and they surface as "Background work is
|
|
478
|
+
running" when the user closes the terminal. `TaskList` → `TaskStop` each task named `coder-<CARD-ID>` or whose
|
|
479
|
+
name/prompt references a card ID from the tracker `## Card Queue`; NEVER stop a task that does not match the
|
|
480
|
+
batch signature (the user's unrelated background work). Any `TaskStop` error / absent tool is fine — never
|
|
481
|
+
gate the exit on it. (Codex: N/A — no observable Task tool.)
|
|
482
|
+
|
|
475
483
|
---
|
|
476
484
|
|
|
477
485
|
|
|
@@ -263,6 +263,28 @@ The most common failure mode is leaving cards IN_PROGRESS after merge. This crea
|
|
|
263
263
|
Never gate the close on these — any error or a "nothing to do" result is fine; capture each one-line
|
|
264
264
|
summary for the log.
|
|
265
265
|
|
|
266
|
+
5c. **Background subagent teardown — stop THIS batch's idle teammates (Claude-only, NON-BLOCKING)**.
|
|
267
|
+
`/new` spawns coder + closer subagents with `run_in_background: true` (team-mode coders
|
|
268
|
+
`coder-<CARD-ID>`, the step-7c `i18n-translator` fill, the doc closer). A background subagent that
|
|
269
|
+
finishes its work does **NOT** terminate — it goes idle ("rests") so the orchestrator *could*
|
|
270
|
+
resume it (and the empty-result gate reads its transcript from disk, never via `SendMessage`). By
|
|
271
|
+
Phase 6c every card is merged and every teammate's transcript has already been consumed, so these
|
|
272
|
+
idle teammates are pure dead weight — but the broker teardown above only ends the **Codex broker**
|
|
273
|
+
(a Bash process); it does NOT touch the subagents. Left alone they stay alive until Claude Code's
|
|
274
|
+
`SessionEnd` (hours away) and surface as **"Background work is running"** the moment the user tries
|
|
275
|
+
to close the terminal — noise + held session resources, though the committed work is already safe.
|
|
276
|
+
Stop ONLY the teammates belonging to THIS batch — matched by the batch's card IDs (read from the
|
|
277
|
+
tracker `## Card Queue`, so the match survives a compaction) or the `coder-` name prefix:
|
|
278
|
+
- `TaskList` → for each task still `running`/idle whose `name` is `coder-<CARD-ID>` OR whose
|
|
279
|
+
`name`/prompt references any card ID in `## Card Queue` (e.g. `FEAT-00NN`) → `TaskStop` it.
|
|
280
|
+
- **NEVER** `TaskStop` a task that does not match the batch signature — the user may have unrelated
|
|
281
|
+
background work in the same session. When a task's ownership is ambiguous, LEAVE it (a stray idle
|
|
282
|
+
`/new` teammate is harmless; killing the user's unrelated work is not).
|
|
283
|
+
Best-effort: a `TaskStop` error / "already stopped" / an absent `TaskList` tool is all fine —
|
|
284
|
+
capture a one-line count for the log, never gate the close on it. **(Codex path — N/A:** no
|
|
285
|
+
observable Agent/Task tool, team-mode is forced sequential, and Codex named-agent spawns do not
|
|
286
|
+
persist as idle background tasks — see `framework/agents/runtime-portability-protocol.md`.)
|
|
287
|
+
|
|
266
288
|
6. **Log and exit**:
|
|
267
289
|
```
|
|
268
290
|
## Phase 6c — Workspace Hygiene Post-merge
|
|
@@ -273,6 +295,7 @@ The most common failure mode is leaving cards IN_PROGRESS after merge. This crea
|
|
|
273
295
|
Phase 0 snapshot restore: <n/a | popped clean | conflict-deferred-to-user>
|
|
274
296
|
Codex broker teardown: <graceful (pid) | signalled N | none | skipped (error)>
|
|
275
297
|
Codex MCP hygiene (reap): <reaped N/M | nothing to reap | skipped (error)>
|
|
298
|
+
Background subagents teardown: <stopped N | none alive | N/A (Codex) | skipped (error)>
|
|
276
299
|
Completed: <timestamp>
|
|
277
300
|
```
|
|
278
301
|
If any step ended in HALT, set `Status: HALT` and report — Phase 7 must NOT start with an unclean main repo unless the user explicitly chose `[Lascia così]`.
|
|
@@ -348,4 +348,6 @@ Before starting group N, verify ALL cards in groups 0..N-1 are status: done. If
|
|
|
348
348
|
|
|
349
349
|
After all groups are complete, run the same Final Review, Phase 6 (merge), and Phase 7 (production readiness) as documented above. Since v3.37.0 the Final Review runs a **single FULL `/codexreview` over the entire batch diff** (per the Final-review FULL gate) — no scope reduction — so every team-mode card, including any reviewed at `light` in D.4b, receives a guaranteed full review before merge.
|
|
350
350
|
|
|
351
|
+
> **The parallel `coder-<CARD-ID>` teammates are torn down at Phase 6c step 5c** (`references/merge-cleanup.md`) — a `run_in_background` coder goes idle rather than terminating, so team mode (the widest fan-out) is the main source of the "Background work is running" idle-teammate leak. The Phase 6c teardown `TaskStop`s them after merge; nothing to do here.
|
|
352
|
+
|
|
351
353
|
---
|