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 +35 -0
- package/VERSION +1 -1
- package/framework/.claude/commands/new.md +1 -0
- package/framework/.claude/skills/new/SKILL.md +7 -0
- package/framework/.claude/skills/prd/SKILL.md +7 -4
- package/framework/.claude/skills/prd/references/discovery-phase.md +2 -1
- package/framework/.claude/skills/prd/references/validation-phase.md +19 -21
- package/package.json +1 -1
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.
|
|
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
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
|
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. **
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|