yadflow 2.4.0 → 2.4.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 +2 -8
- package/cli/setup.mjs +28 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
## [2.4.1](https://github.com/abdelrahmannasr/yadflow/compare/v2.4.0...v2.4.1) (2026-06-14)
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
### Bug Fixes
|
|
5
5
|
|
|
6
|
-
*
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
### Features
|
|
10
|
-
|
|
11
|
-
* add DeepTutor learning layer across all SDLC stages ([bd8d4ea](https://github.com/abdelrahmannasr/yadflow/commit/bd8d4eaaa0258242a62ed1b131f7e3f74506af64))
|
|
12
|
-
* make learning-layer output local-only (never committed or pushed) ([aa8f74e](https://github.com/abdelrahmannasr/yadflow/commit/aa8f74eb61855d3a663810a0c68cf8e37fbedd66))
|
|
6
|
+
* migrate pre-2.0 sdlc-* skills during `yad setup` ([5b53e40](https://github.com/abdelrahmannasr/yadflow/commit/5b53e40480b3049d4efc596792f2630597d837fd))
|
|
13
7
|
|
|
14
8
|
# [2.2.0](https://github.com/abdelrahmannasr/yadflow/compare/v2.1.0...v2.2.0) (2026-06-14)
|
|
15
9
|
|
package/cli/setup.mjs
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
// `yad setup` — the guided, idempotent first-run wizard.
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import fs from 'node:fs';
|
|
4
|
+
import os from 'node:os';
|
|
4
5
|
import {
|
|
5
6
|
c, log, step, ok, info, warn, hand, fail, ask, askYesNo, run, has,
|
|
6
7
|
exists, readJSON, writeJSON,
|
|
7
8
|
} from './lib.mjs';
|
|
8
9
|
import { VERSION, IDE_FOLDER_TARGETS, PROJECT_FILES, DESIGN_TOOLS, DESIGN_PRIMARY, TESTING_TOOLS, TESTING_PRIMARY, LEARNING_TOOLS, LEARNING_PRIMARY } from './manifest.mjs';
|
|
9
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
moduleActions, repoActions, hubActions, authorsActions,
|
|
12
|
+
legacyModuleActions, legacyRepoActions, legacyHubActions,
|
|
13
|
+
} from './plan.mjs';
|
|
10
14
|
|
|
11
15
|
const ALL_IDES = [...IDE_FOLDER_TARGETS, '.opencode'];
|
|
12
16
|
|
|
@@ -181,8 +185,27 @@ export async function runSetup(root, opts = {}) {
|
|
|
181
185
|
ideTargets = answer.split(',').map((s) => s.trim()).filter(Boolean);
|
|
182
186
|
}
|
|
183
187
|
applyActions(moduleActions(root, ideTargets), { force: true });
|
|
188
|
+
// Migrate any pre-2.0 install in place: remove the old sdlc-* skill copies in the project's
|
|
189
|
+
// IDE targets and install their yad-* renames. Without this, setup only ADDED yad-* and left
|
|
190
|
+
// stale sdlc-* sitting next to them (the rename only ran under `yad update` / `yad check --fix`).
|
|
191
|
+
applyActions(legacyModuleActions(root, ideTargets), { force: true });
|
|
184
192
|
ok(`module installed into: ${ideTargets.join(', ')}`);
|
|
185
193
|
|
|
194
|
+
// Global leftovers: a pre-2.0 install may have put sdlc-* skills in the user's global
|
|
195
|
+
// ~/.claude/skills (path.join(homedir, '.claude', 'skills', <old>)). The CLI is project-scoped,
|
|
196
|
+
// so touching the home dir requires an interactive yes — never auto-fire it in SDLC_NONINTERACTIVE
|
|
197
|
+
// (scripted/CI) mode, where the prompt would otherwise return its default. Silent when there is
|
|
198
|
+
// nothing to migrate.
|
|
199
|
+
const globalLegacy = process.env.SDLC_NONINTERACTIVE ? [] : legacyModuleActions(os.homedir(), ['.claude']);
|
|
200
|
+
if (globalLegacy.length) {
|
|
201
|
+
if (await askYesNo(`Found ${globalLegacy.length} legacy sdlc-* skill(s) in your global ~/.claude/skills (pre-2.0 install). Migrate them to yad-*?`, true)) {
|
|
202
|
+
applyActions(globalLegacy, { force: true });
|
|
203
|
+
ok('migrated global ~/.claude/skills to yad-*');
|
|
204
|
+
} else {
|
|
205
|
+
info('left global ~/.claude/skills untouched — re-run `yad setup` or migrate later with `yad update`');
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
186
209
|
// 3. Detect hub platform + roster
|
|
187
210
|
step(3, total, 'Hub platform & reviewer roster');
|
|
188
211
|
const hubPath = path.join(root, PROJECT_FILES.hubConfig);
|
|
@@ -299,6 +322,9 @@ export async function runSetup(root, opts = {}) {
|
|
|
299
322
|
for (const repo of registry.repos) {
|
|
300
323
|
log(` ${c.bold(repo.name)} ${c.dim(`(${repo.platform})`)}`);
|
|
301
324
|
applyActions(repoActions(root, repo), { force: true });
|
|
325
|
+
// Migrate pre-2.0 wired CI (marker-owned sdlc-*.yml -> yad-*.yml); a user-authored
|
|
326
|
+
// same-named file is never touched.
|
|
327
|
+
applyActions(legacyRepoActions(root, repo), { force: true });
|
|
302
328
|
}
|
|
303
329
|
// the hub: event-driven gate-sync CI, so platform approvals/merges drive `yad gate ci`
|
|
304
330
|
const hubWiring = hubActions(root);
|
|
@@ -306,6 +332,7 @@ export async function runSetup(root, opts = {}) {
|
|
|
306
332
|
log(` ${c.bold('hub')} ${c.dim('(gate-sync + verified-commits CI)')}`);
|
|
307
333
|
applyActions(hubWiring, { force: true });
|
|
308
334
|
}
|
|
335
|
+
applyActions(legacyHubActions(root), { force: true });
|
|
309
336
|
// author allowlists for the verified-commits gate (hub + every repo), from the roster emails
|
|
310
337
|
applyActions(authorsActions(root, registry.repos), { force: true });
|
|
311
338
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yadflow",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.1",
|
|
4
4
|
"description": "Yadflow — the gated, team, multi-repo SDLC: author → review → build with a PR-driven review gate and a zero-dependency `yad` CLI (setup, gate, commit, open-pr, repo). A BMAD module + 22 yad-* skills.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "AbdelRahman Nasr",
|