@warnyin/sdlc 0.14.1 → 0.14.2
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 +16 -0
- package/bin/cli.mjs +10 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.14.2 (2026-09-19)
|
|
4
|
+
|
|
5
|
+
- **Fix (init)**: `init` no longer disowns the tools it did not install that run. It rebuilt the
|
|
6
|
+
ownership manifest from scratch and wrote it wholesale, so running `init` a second time for a
|
|
7
|
+
different tool dropped every entry belonging to the first — the files stayed on disk, but
|
|
8
|
+
`update` could no longer recognise them. The damage showed up later: such a file was **never
|
|
9
|
+
refreshed again** (refresh needs the recorded hash to match what is on disk) and was reported
|
|
10
|
+
as `kept (user-modified)`, blaming you for an edit you never made. `init` now carries forward
|
|
11
|
+
every entry it does not rewrite. It still never prunes — only `update --tool <list>` removes
|
|
12
|
+
a tool, and now that a tool installed by its own `init` run is properly owned, deselecting it
|
|
13
|
+
there prunes its files as it always should have.
|
|
14
|
+
- **If a project already hit this**, the fix cannot recover a hash nothing recorded. A disowned
|
|
15
|
+
file that still matches the current payload is re-claimed silently on your next `update`; one
|
|
16
|
+
that has already drifted stays frozen and keeps reporting `kept (user-modified)`. To recover
|
|
17
|
+
it, delete that file and run `update` — it is rewritten from the payload and owned again.
|
|
18
|
+
|
|
3
19
|
## 0.14.1 (2026-09-19)
|
|
4
20
|
|
|
5
21
|
- **Fix (init)**: adding a tool to a project that already has `sdlc/` no longer loses it on the
|
package/bin/cli.mjs
CHANGED
|
@@ -373,7 +373,16 @@ export async function cmdInit(projectRoot, args) {
|
|
|
373
373
|
};
|
|
374
374
|
scaffoldSdlc(projectRoot, tools, ctx);
|
|
375
375
|
installToolAdapters(projectRoot, tools, ctx);
|
|
376
|
-
|
|
376
|
+
// Carry forward every entry this run did not rewrite. `init` installs only the tools it was
|
|
377
|
+
// given, so writing `ctx.manifest` alone would disown the files of every OTHER tool already
|
|
378
|
+
// installed here — they stay on disk, but `update` then sees files it has no record of,
|
|
379
|
+
// refuses to refresh them (its refresh branch needs disk hash === recorded hash), freezes
|
|
380
|
+
// them at their old payload version and reports them as user-modified. Same failure
|
|
381
|
+
// `installFile` documents fixing per-file, reached instead by never visiting the entry.
|
|
382
|
+
// The merge happens HERE, not by seeding `ctx.manifest`: that Map is also what the install
|
|
383
|
+
// summary counts, and it must keep describing only what this run installed. `cmdUpdate`
|
|
384
|
+
// deliberately does NOT do this — its wholesale replace is what tells prune a tool is gone.
|
|
385
|
+
writeManifestFile(projectRoot, new Map([...ctx.oldManifest, ...ctx.manifest]));
|
|
377
386
|
ensureGitignore(projectRoot);
|
|
378
387
|
for (const w of ctx.warnings) console.warn(` ${style.yellow(symbols.warn)} ${w}`);
|
|
379
388
|
printInitSummary(tools, ctx, style, symbols, { configExisted, toolsAdded });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@warnyin/sdlc",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.2",
|
|
4
4
|
"description": "Spec-driven, AI-driven SDLC framework — token-lean specs, contract-first changes, autonomous pipeline with managed hooks. Operationalizes the Day-1 'New SDLC with Vibe Coding' work process.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|