baldart 3.28.0 → 3.28.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 +19 -0
- package/VERSION +1 -1
- package/package.json +1 -1
- package/src/commands/add.js +54 -13
- package/src/commands/update.js +6 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,25 @@ 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.28.1] - 2026-05-28
|
|
9
|
+
|
|
10
|
+
Patch su tre drift segnalati dal curator dopo v3.28.0 install in `mayo`:
|
|
11
|
+
(1) `--yes` non si propaga da `update --reset` al child `baldart add`,
|
|
12
|
+
(2) errore "Configuring alias is not permitted without enabling allowUnsafeAlias" stampato come install-failed mentre l'install era OK,
|
|
13
|
+
(3) due template `ui-guidelines.template.md` + `brand-guidelines.md` lasciati untracked senza istruzioni chiare all'utente. Tutti e tre cosmetici/UX, nessuno affecta la correctness del framework installato — ma confondono l'utente durante il post-install.
|
|
14
|
+
|
|
15
|
+
### Fixed — `baldart add` honors `--yes` from parent caller
|
|
16
|
+
|
|
17
|
+
- **[src/commands/add.js](src/commands/add.js)** + **[src/commands/update.js:237](src/commands/update.js)**: `add(repo, options)` ora legge `options.yes` e auto-conferma i prompt non-distruttivi (`Install framework?`, `Configure git aliases?`, `Configure project context now?`). Il prompt distruttivo `Remove and reinstall?` resta interattivo anche con `--yes` (safety). `update --reset` ora invoca correttamente `addCmd(undefined, { yes: true })` — prima passava `{ yes: true }` come **primo argomento** (cioè `repo`), facendo `options` undefined e ogni prompt scattava.
|
|
18
|
+
|
|
19
|
+
### Fixed — Git alias config failure non più mascherato da install-failure
|
|
20
|
+
|
|
21
|
+
- **[src/commands/add.js](src/commands/add.js)**: la configurazione degli alias `fw-version`/`fw-update`/`fw-push` passa da `git.git.addConfig()` (simple-git, che rifiuta i bang-alias senza `allowUnsafeAlias`) a `spawnSync('git', ['config', key, value])` diretto. Il bypass del check simple-git è esplicito qui: l'utente sta opt-in agli alias durante l'install. Failure isolato per alias (non bubble-up al catch globale), reported come WARNING se non-zero count, install continua. Il messaggio "✗ Installation failed: Configuring alias is not permitted…" non appare più.
|
|
22
|
+
|
|
23
|
+
### Fixed — Template editable post-install: istruzioni chiare
|
|
24
|
+
|
|
25
|
+
- **[src/commands/add.js](src/commands/add.js)** NEXT STEPS box: i due template `docs/references/ui-guidelines.template.md` e `docs/references/brand-guidelines.md`, copiati incondizionatamente durante `copyCustomizableFiles()`, ora sono elencati esplicitamente con cosa farne (rename / edit / delete) e con il punto chiave: "Commit them to track your project's design language, or add them to .gitignore if you don't need them." Evita la confusione del curator durante v3.28.0 install ("non chiari se debbano essere scelti/scartati dall'utente o committati. Non c'è prompt che lo chieda").
|
|
26
|
+
|
|
8
27
|
## [3.28.0] - 2026-05-28
|
|
9
28
|
|
|
10
29
|
Tre additions indipendenti accumulate nel working tree e pronte per il rilascio: convenzione testuale per le dipendenze MCP, supporto `.zip` per il mockup intake del PRD, e nuovo hook `capture-detect` come parte del proactive mode dello skill `/capture` (registrazione opt-in, non auto-attivata). Tre temi distinti ma raggruppati in un'unica release di accumulo perché tutti additive e zero-schema-change.
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.28.
|
|
1
|
+
3.28.1
|
package/package.json
CHANGED
package/src/commands/add.js
CHANGED
|
@@ -7,6 +7,13 @@ const Hooks = require('../utils/hooks');
|
|
|
7
7
|
async function add(repo, options) {
|
|
8
8
|
const git = new GitUtils();
|
|
9
9
|
const symlinks = new SymlinkUtils();
|
|
10
|
+
// Non-interactive flag honored on non-destructive prompts only. The
|
|
11
|
+
// "Remove and reinstall?" prompt (line 40) stays interactive even with
|
|
12
|
+
// --yes — that path requires explicit user intent, not flag inheritance.
|
|
13
|
+
// Callers that have already established intent (e.g. `update --reset`)
|
|
14
|
+
// rm -rf `.framework/` themselves, so `git.frameworkExists()` is false
|
|
15
|
+
// here and the destructive prompt is never reached.
|
|
16
|
+
const nonInteractive = options && options.yes === true;
|
|
10
17
|
|
|
11
18
|
try {
|
|
12
19
|
// Step 1: Verify environment
|
|
@@ -70,7 +77,9 @@ async function add(repo, options) {
|
|
|
70
77
|
'Templates copied for customization'
|
|
71
78
|
]);
|
|
72
79
|
|
|
73
|
-
const proceed =
|
|
80
|
+
const proceed = nonInteractive
|
|
81
|
+
? true
|
|
82
|
+
: await UI.confirm('Install framework?', true);
|
|
74
83
|
if (!proceed) {
|
|
75
84
|
UI.info('Installation cancelled');
|
|
76
85
|
process.exit(0);
|
|
@@ -157,13 +166,39 @@ async function add(repo, options) {
|
|
|
157
166
|
// Configure Git aliases
|
|
158
167
|
UI.section('Configuring Git Aliases');
|
|
159
168
|
|
|
160
|
-
const configureAliases =
|
|
169
|
+
const configureAliases = nonInteractive
|
|
170
|
+
? true
|
|
171
|
+
: await UI.confirm('Configure git aliases (fw-version, fw-update, fw-push)?', true);
|
|
161
172
|
|
|
162
173
|
if (configureAliases) {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
174
|
+
// simple-git >=3.21 rejects shell-command aliases (prefix `!`) unless
|
|
175
|
+
// `allowUnsafeAlias` is set in its constructor — and even that is
|
|
176
|
+
// version-gated. Spawning `git config` directly bypasses the safety
|
|
177
|
+
// check (which is a simple-git policy, not a git policy: the user is
|
|
178
|
+
// explicitly opting in to these aliases here). Any failure here is
|
|
179
|
+
// cosmetic (the framework is fully installed without aliases), so we
|
|
180
|
+
// warn and continue instead of bubbling up to the global catch — that
|
|
181
|
+
// surfaced as "✗ Installation failed: Configuring alias is not
|
|
182
|
+
// permitted without enabling allowUnsafeAlias" while the install was
|
|
183
|
+
// actually fine.
|
|
184
|
+
const { spawnSync } = require('child_process');
|
|
185
|
+
const aliases = [
|
|
186
|
+
['alias.fw-version', '!cat .framework/VERSION'],
|
|
187
|
+
['alias.fw-update', '!npx baldart update'],
|
|
188
|
+
['alias.fw-push', '!npx baldart push'],
|
|
189
|
+
];
|
|
190
|
+
let aliasFailures = 0;
|
|
191
|
+
for (const [key, value] of aliases) {
|
|
192
|
+
const r = spawnSync('git', ['config', key, value], { stdio: 'pipe' });
|
|
193
|
+
if (r.status !== 0) {
|
|
194
|
+
aliasFailures += 1;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
if (aliasFailures === 0) {
|
|
198
|
+
UI.success('Git aliases configured');
|
|
199
|
+
} else {
|
|
200
|
+
UI.warning(`${aliasFailures}/${aliases.length} git alias(es) could not be configured (non-blocking — install continues).`);
|
|
201
|
+
}
|
|
167
202
|
}
|
|
168
203
|
|
|
169
204
|
// BALDART hooks (multi-hook registry since v3.18.0)
|
|
@@ -201,10 +236,12 @@ async function add(repo, options) {
|
|
|
201
236
|
// Skills now resolve project-specific facts from baldart.config.yml
|
|
202
237
|
// instead of hard-coding paths. Configure prompts for these on install.
|
|
203
238
|
UI.newline();
|
|
204
|
-
const runConfigure =
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
239
|
+
const runConfigure = nonInteractive
|
|
240
|
+
? true
|
|
241
|
+
: await UI.confirm(
|
|
242
|
+
'Configure project context now (paths, identity, stack, feature flags)?',
|
|
243
|
+
true
|
|
244
|
+
);
|
|
208
245
|
if (runConfigure) {
|
|
209
246
|
try {
|
|
210
247
|
const configureCmd = require('./configure');
|
|
@@ -226,9 +263,13 @@ async function add(repo, options) {
|
|
|
226
263
|
' • Rename to lint-before-commit.sh',
|
|
227
264
|
' • Make executable: chmod +x .claude/hooks/lint-before-commit.sh',
|
|
228
265
|
'',
|
|
229
|
-
'2.
|
|
230
|
-
' •
|
|
231
|
-
'
|
|
266
|
+
'2. Two editable templates landed at docs/references/ (untracked):',
|
|
267
|
+
' • ui-guidelines.template.md — UI design language template.',
|
|
268
|
+
' Edit and rename to ui-guidelines.md if you adopt it.',
|
|
269
|
+
' • brand-guidelines.md — Brand voice & visual identity.',
|
|
270
|
+
' Edit to taste, or delete if your project does not need one.',
|
|
271
|
+
' These are starting points. Commit them to track your project\'s',
|
|
272
|
+
' design language, or add them to .gitignore if you don\'t need them.',
|
|
232
273
|
'',
|
|
233
274
|
'3. Create backlog cards:',
|
|
234
275
|
' • Copy templates/feature-card.template.yml',
|
package/src/commands/update.js
CHANGED
|
@@ -234,7 +234,12 @@ async function runReset(git, options, autoYes) {
|
|
|
234
234
|
UI.newline();
|
|
235
235
|
UI.info('Re-installing framework via `baldart add`…');
|
|
236
236
|
const addCmd = require('./add');
|
|
237
|
-
|
|
237
|
+
// `add(repo, options)` — first arg is the repo URL (undefined → use default
|
|
238
|
+
// from package.json). Pre-v3.28.1 we incorrectly passed `{ yes: true }` as
|
|
239
|
+
// the first arg, so `options` was undefined and every interactive prompt
|
|
240
|
+
// ("Install framework?", "Configure git aliases?", …) fired despite the
|
|
241
|
+
// parent `update --reset --yes --i-know` having already established intent.
|
|
242
|
+
await addCmd(undefined, { yes: true });
|
|
238
243
|
|
|
239
244
|
// Post-restore sanity check — confirm nothing user-owned got clobbered.
|
|
240
245
|
const stillPresent = {
|