baldart 3.22.0 → 3.23.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 CHANGED
@@ -5,6 +5,41 @@ 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
+ ## [3.23.0] - 2026-05-27
9
+
10
+ Aggiunto il flag `-full` / `--full` a `/new` per espandere un epic ai suoi figli in un colpo solo — `/new FEAT-005 -full` lancia automaticamente `FEAT-005-1`, `FEAT-005-2`, … senza domande di grouping né di branch. Risolve il pattern ricorrente "ho un epic con 5 child card, le voglio tutte ora": prima richiedeva di listarle a mano (`/new FEAT-005-1 FEAT-005-2 FEAT-005-3 …`) o di usare l'hyphen-range solo se gli ID erano numericamente contigui.
11
+
12
+ ### Added — `/new` epic expansion flag
13
+
14
+ - **[framework/.claude/skills/new/SKILL.md](framework/.claude/skills/new/SKILL.md)**: nuova regola di parsing `Epic expansion (-full / --full)` nella sezione args. Discovery dei figli via union di due rules: (1) filename in `${paths.backlog_dir}` con prefisso `<PARENT-ID>-` (separator letterale, quindi `FEAT-005-1.yml` matcha ma `FEAT-005.yml` e `FEAT-0050.yml` no); (2) cards con `group.parent: <PARENT-ID>`. Il parent stesso è escluso (override esplicito: `/new FEAT-005 FEAT-005 -full`). Ordinamento per `group.sequence` ASC, fallback lessicografico. Batch-scoped: `/new FEAT-005 FEAT-008 -full` espande entrambi gli epic. Zero figli trovati → HALT esplicito (no silent no-op). Mixed batches supportati: `/new FEAT-005 -full FEAT-007` accoda i figli di 005 + FEAT-007 standalone.
15
+ - **[framework/.claude/commands/new.md](framework/.claude/commands/new.md)**: versione condensata della stessa regola, allineata al SKILL canonico.
16
+
17
+ ### Why MINOR (not PATCH)
18
+
19
+ Capability addition pura: nuovo flag, nessuna modifica al comportamento esistente. Tutti gli invocation pattern pre-3.23 continuano a funzionare identici. Per la decision tree in MAINTAINING.md "Did you add new functionality? → YES → MINOR".
20
+
21
+ ### Why no schema-change propagation
22
+
23
+ Modifica testuale a due file di skill/command. Zero chiavi nuove in `baldart.config.yml`, zero modifiche CLI (`src/commands/*`), zero hook, zero adapter. La discovery dei figli sfrutta `${paths.backlog_dir}` già presente nella config schema da v3.0.0.
24
+
25
+ ## [3.22.1] - 2026-05-27
26
+
27
+ Rimosso il gate `AskUserQuestion` di conferma merge introdotto in v3.22.0 Step 7 — era friction inutile contro il "seamless" che è il punto della release. Quando l'utente lancia `/prd` ha già implicitamente accettato la pipeline completa (discovery → design → cards → commit → merge in develop). Chiedere "Procedo con merge?" a fine sessione equivale a chiedere "sei sicuro di voler completare quello che mi hai chiesto di fare?".
28
+
29
+ ### Changed — `/prd` Step 7 merge è ora full-seamless
30
+
31
+ - **[framework/.claude/skills/prd/references/validation-phase.md](framework/.claude/skills/prd/references/validation-phase.md)**: Step 7 point 9 non è più un `AskUserQuestion` ma una nota che chiarisce il razionale del no-confirmation flow + escape hatch user-initiated ("non mergiare" / "lascia il worktree" honora l'override e ferma dopo il commit).
32
+ - **[framework/.claude/skills/prd/SKILL.md](framework/.claude/skills/prd/SKILL.md)** HARD RULE 17 lifecycle: la descrizione di Step 7 cita "Seamless by default, no confirmation gate" + l'escape hatch.
33
+ - **[framework/.claude/skills/prd/references/discovery-phase.md](framework/.claude/skills/prd/references/discovery-phase.md)**: il messaggio di kickoff visibile all'utente promette esplicitamente "commit + merge automatico in develop + cleanup worktree, seamless" — niente più sorprese a fine sessione.
34
+
35
+ ### Why PATCH and not MINOR
36
+
37
+ Rimozione di un comportamento (gate di conferma) introdotto solo 0 minuti fa nella stessa giornata. Nessuna nuova capability, nessun breaking change per consumer: il gate non era una feature documentata né attesa dagli utenti pre-v3.22.0, era una sovra-cautela introdotta da me contro la richiesta esplicita ("seamless"). La decision tree di MAINTAINING.md classifica "bugfix di behaviour non desiderato senza breaking change" come PATCH.
38
+
39
+ ### Why no schema-change propagation
40
+
41
+ Modifica puramente comportamentale dentro un singolo step di una singola skill. Zero chiavi nuove, zero modifiche CLI, zero hook.
42
+
8
43
  ## [3.22.0] - 2026-05-27
9
44
 
10
45
  Le sessioni `/prd` ora vivono in un **docs worktree** dedicato, esattamente come fa `/new` per le card di codice. Il problema risolto: con 5-10 sessioni Claude in parallelo, ogni PRD inquinava il main checkout con `docs/prd/<slug>/PRD.md`, lo state file, le card YAML, l'eventuale `design.html`, e gli update a `ssot-registry.md` / `project-status.md`. `git status` diventava un campo minato, le sessioni `/new` rischiavano di stashare/committare file PRD non loro, e la review manuale era pressoché impossibile. Soluzione: estendere `worktree-manager` con una **modalità docs lean** (no `npm install`, no porta, no `.env` copy, no build verify, no lint/tsc gates) e integrarla nel ciclo di vita del PRD — creazione automatica al kickoff, merge automatico (previa conferma utente) al termine, cleanup seamless.
package/VERSION CHANGED
@@ -1 +1 @@
1
- 3.22.0
1
+ 3.23.0
@@ -9,6 +9,7 @@ Parse the card IDs from the arguments. Cards can be specified as:
9
9
  - Space-separated: `GLOB-001 GLOB-002 GLOB-003`
10
10
  - Hyphen-range: `GLOB-001-GLOB-008` (expands to all cards in range)
11
11
  - Comma-separated: `GLOB-001, GLOB-002, GLOB-003`
12
+ - **Epic expansion (`-full` / `--full`)**: `/new <PARENT-ID> -full` (e.g., `/new FEAT-005 -full`) expands to ALL children of the parent epic with **NO questions asked**. Children = YAML files in `backlog/` whose filename starts with `<PARENT-ID>-` (e.g., `FEAT-005-1.yml`, `FEAT-005-2.yml`) OR whose `group.parent` field equals `<PARENT-ID>`. The parent epic card itself is excluded. Sort by `group.sequence` ASC, fallback to lexicographic ID. The flag is batch-scoped (`/new FEAT-005 FEAT-008 -full` expands both). If a parent has zero children → HALT and report. All children share `group.parent`, so the existing worktree logic groups them into ONE worktree under the parent's `git_strategy.branch`.
12
13
 
13
14
  If no card IDs are provided, ask the user which cards to implement.
14
15
 
@@ -23,6 +23,13 @@ Parse the card IDs from the arguments. Cards can be specified as:
23
23
  - Space-separated: `GLOB-001 GLOB-002 GLOB-003`
24
24
  - Hyphen-range: `GLOB-001-GLOB-008` (expands to all cards in range)
25
25
  - Comma-separated: `GLOB-001, GLOB-002, GLOB-003`
26
+ - **Epic expansion (`-full` / `--full`)**: `/new <PARENT-ID> -full` (e.g., `/new FEAT-005 -full`) expands to ALL children of the parent epic with **NO questions asked**. Children discovery — union of two rules:
27
+ 1. YAML files in `${paths.backlog_dir}` whose filename starts with `<PARENT-ID>-` (matches `FEAT-005-1.yml`, `FEAT-005-2.yml`, …; never matches `FEAT-005.yml` itself, never matches `FEAT-0050.yml` because the separator is a literal dash).
28
+ 2. Cards in `${paths.backlog_dir}` whose `group.parent` YAML field equals `<PARENT-ID>` (catches children that don't follow the prefix convention).
29
+
30
+ The parent epic card itself is **excluded** (epic parents are typically planning containers; to include it, list it explicitly: `/new FEAT-005 FEAT-005 -full`). Children are sorted by `group.sequence` ASC, falling back to lexicographic ID order. The flag is **batch-scoped**: `/new FEAT-005 FEAT-008 -full` expands BOTH parents. If a `-full` parent has zero discovered children → HALT and report (do not silently no-op). With `-full`, all children share the same `group.parent`, so the existing worktree-grouping logic (pre-flight step 4) places them in ONE worktree under the parent's `git_strategy.branch` — no grouping question is asked.
31
+
32
+ Parser contract: strip `-full` / `--full` tokens from the args list, treat each remaining token as a parent ID, and expand via the rules above. Mixed batches are allowed (`/new FEAT-005 -full FEAT-007` queues all children of FEAT-005 PLUS the standalone FEAT-007).
26
33
 
27
34
  If no card IDs are provided, ask the user which cards to implement.
28
35
 
@@ -133,10 +133,13 @@ message. You ask questions, wait for answers, and iterate.
133
133
  `/prd-add`, scan `.worktrees/registry.json` for entries with
134
134
  `kind: "docs"` matching the slug; if found, `cd` into that worktree
135
135
  before scanning for state files. See [discovery-phase.md](references/discovery-phase.md) § Step 0.
136
- - **Step 7 (Commit)** — commit happens inside the worktree, then the skill
137
- asks the user for explicit confirmation before invoking `worktree-manager`
138
- programmatic `mw-docs`, which rebases onto `origin/develop` and lands the
139
- PRD via the configured `git.merge_strategy`. See [validation-phase.md](references/validation-phase.md) § Step 7.
136
+ - **Step 7 (Commit & Merge)** — commit happens inside the worktree, then
137
+ `worktree-manager` programmatic `mw-docs` is invoked immediately to
138
+ rebase onto `origin/develop` and land the PRD via the configured
139
+ `git.merge_strategy`. Seamless by default, no confirmation gate (the
140
+ user opted into the full pipeline when they ran `/prd`). If the user
141
+ explicitly says "non mergiare" / "lascia il worktree", honor the
142
+ override and stop after the commit. See [validation-phase.md](references/validation-phase.md) § Step 7.
140
143
 
141
144
  **Path resolution rule (CRITICAL — read carefully).** Claude Code's
142
145
  `Write` / `Edit` / `Read` tools require ABSOLUTE paths and **do NOT
@@ -116,7 +116,8 @@ Descrizione: <user's description>
116
116
  Contesto: <one-line summary from context-primer>
117
117
 
118
118
  Tutti i file del PRD vivono nel worktree — il main repo resta pulito.
119
- Al termine eseguirò un merge automatico in develop (previa tua conferma).
119
+ Al termine commit + merge automatico in develop + cleanup worktree, seamless.
120
+ (Se in qualunque momento mi dici "non mergiare", mi fermo dopo il commit.)
120
121
 
121
122
  Ora comincio la fase di **Discovery** — ti faro delle domande per capire bene
122
123
  la feature prima di scrivere qualsiasi documento.
@@ -109,27 +109,25 @@ created by Step 1 (HARD RULE 17). `$WORKTREE_PATH` is set in the state file.
109
109
 
110
110
  ### Merge into develop (worktree-manager mw-docs)
111
111
 
112
- 9. **Ask the user for explicit confirmation** before merging the merge
113
- touches `origin/develop` and is hard to reverse. Use `AskUserQuestion`:
114
-
115
- ```
116
- PRD pronto per il merge in `develop`.
117
-
118
- Strategia merge: <pr | local-push> (da git.merge_strategy)
119
- Worktree: <relative-worktree-path>
120
- Branch: prd/<slug>
121
- File: <N> file (PRD.md, design.html, N card YAML, ...)
122
-
123
- Procedo con merge automatico e cleanup del worktree?
124
- ```
125
-
126
- Options:
127
- - **Sì, merge e cleanup** (default).
128
- - **No, lascia il worktree** — l'utente vuole fare review manuale o test
129
- prima del merge. STOP. La sessione finisce qui; il worktree resta su disco
130
- pronto per un futuro `/mw` manuale o `worktree-manager mw-docs`.
131
-
132
- 10. **On confirmation: invoke `worktree-manager` programmatic mw-docs**:
112
+ 9. **Invoke `worktree-manager` programmatic mw-docs immediately** — no
113
+ confirmation prompt. The user opted into the full PRD pipeline when they
114
+ ran `/prd`; chiedere conferma a fine sessione è friction inutile e rompe
115
+ il "seamless" che è il punto della v3.22.0.
116
+
117
+ The merge is recoverable: if something goes wrong post-merge the user can
118
+ `git revert` on develop just like any other commit. The hard-to-reverse
119
+ operations (`git push`, branch deletion) happen inside `mw-docs` which
120
+ has its own failure handling (rebase abort, push rejection, gh CLI error)
121
+ none of which silently corrupts state.
122
+
123
+ **Escape hatch.** If the user explicitly says "non mergiare" or "lascia il
124
+ worktree" at any point during Step 7 (e.g. they want to review the PRD
125
+ manually before it lands on develop), respect that and STOP after the
126
+ commit — the worktree stays on disk, ready for a future manual `/mw` or
127
+ `worktree-manager mw-docs`. This is a user-initiated override, not a
128
+ default gate.
129
+
130
+ 10. **Invoke `worktree-manager` programmatic mw-docs**:
133
131
 
134
132
  ```
135
133
  Skill: worktree-manager
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "baldart",
3
- "version": "3.22.0",
3
+ "version": "3.23.0",
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"