@warnyin/sdlc 0.2.0 → 0.2.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,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.1 (2026-08-20)
4
+
5
+ - **Fix**: `archive` failed with `ENOENT` on the first change a repo ever ships.
6
+ `init` scaffolds `sdlc/changes/archive/`, but git does not track empty
7
+ directories, so the folder is absent for everyone who clones before that first
8
+ ship. The rename is now preceded by a `mkdir -p` of the archive root.
9
+
10
+ The failure landed mid-phase-2, after the delta had been merged into the living
11
+ specs, evals promoted, `status: shipped` stamped and the ship event journalled —
12
+ a repo left half-shipped while the CLI reported total failure. The directory is
13
+ now prepared next to the other destination checks, before phase 1 computes a
14
+ single merge, so an unusable archive path aborts with the specs untouched.
15
+
3
16
  ## 0.2.0 (2026-08-20)
4
17
 
5
18
  `init` is now an installer you can actually see working — still zero dependencies.
package/bin/cli.mjs CHANGED
@@ -437,6 +437,11 @@ export function cmdArchive(projectRoot, changeId, { strict = true } = {}) {
437
437
  // while reporting failure.
438
438
  const date = new Date().toISOString().slice(0, 10);
439
439
  const destDir = path.join(sdlcRoot, 'changes', 'archive', `${date}-${changeId}`);
440
+ // `init` scaffolds changes/archive/, but git does not track empty directories:
441
+ // it is absent for anyone who cloned before the first change shipped. Prepare
442
+ // it here, with the other destination checks, so a bad archive path fails
443
+ // while the specs are still untouched instead of ENOENT-ing at the rename.
444
+ fs.mkdirSync(path.dirname(destDir), { recursive: true });
440
445
  if (fs.existsSync(destDir)) {
441
446
  throw new Error(`archive target already exists: ${toPosix(path.relative(projectRoot, destDir))} — nothing was merged`);
442
447
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@warnyin/sdlc",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
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": {