@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 +13 -0
- package/bin/cli.mjs +5 -0
- package/package.json +1 -1
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.
|
|
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": {
|