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 CHANGED
@@ -1,15 +1,9 @@
1
- # [2.4.0](https://github.com/abdelrahmannasr/yadflow/compare/v2.3.0...v2.4.0) (2026-06-13)
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
- * address CodeRabbit review on PR [#48](https://github.com/abdelrahmannasr/yadflow/issues/48) ([2f182f7](https://github.com/abdelrahmannasr/yadflow/commit/2f182f72b68e226196b6190802771b0e12b585f9))
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 { moduleActions, repoActions, hubActions, authorsActions } from './plan.mjs';
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.0",
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",