@colmbyrne/specflow
Advanced tools
+10
-0
@@ -9,2 +9,12 @@ # Changelog | ||
| ## 0.7.4 (2026-06-10) | ||
| **Make the LF fix actually stick — 0.7.3's `prepack` didn't run on the publisher's machine, so it still shipped CRLF.** | ||
| `prepack` is unreliable if the publisher has `ignore-scripts` set (or an npm that skips it on publish), so 0.7.3 was published with CRLF anyway and still broke Linux/Mac. Now: `normalize-eol` runs as **`prepack` *and* `prepublishOnly`** (redundant hooks), is exposed as **`npm run normalize`** to run by hand, and **aborts the publish (exit 1) if any CR survives** — so a CRLF tarball can't be published silently again. | ||
| **Publishing this package:** `npm run normalize` then `npm publish` (the manual normalize guarantees LF even if your npm skips lifecycle scripts). | ||
| --- | ||
| ## 0.7.3 (2026-06-10) | ||
@@ -11,0 +21,0 @@ |
+3
-1
| { | ||
| "name": "@colmbyrne/specflow", | ||
| "version": "0.7.3", | ||
| "version": "0.7.4", | ||
| "description": "Specs that enforce themselves. Contract tests, journey hooks, and agent orchestration for LLM-driven development.", | ||
@@ -32,2 +32,4 @@ "license": "MIT", | ||
| "prepack": "node scripts/normalize-eol.cjs", | ||
| "prepublishOnly": "node scripts/normalize-eol.cjs", | ||
| "normalize": "node scripts/normalize-eol.cjs", | ||
| "postinstall": "echo '' && echo '╔═══════════════════════════════════════════════════════╗' && echo '║ @colmbyrne/specflow installed ║' && echo '╠═══════════════════════════════════════════════════════╣' && echo '║ ║' && echo '║ Run in EACH project you want to enforce: ║' && echo '║ ║' && echo '║ npx @colmbyrne/specflow init . ║' && echo '║ ║' && echo '║ This creates hooks, contracts, agents, tests, and ║' && echo '║ CLAUDE.md (or appends rules to your existing one). ║' && echo '║ Then fill in the Project Context in CLAUDE.md. ║' && echo '║ ║' && echo '╚═══════════════════════════════════════════════════════╝' && echo ''", | ||
@@ -34,0 +36,0 @@ "test": "jest --no-coverage", |
@@ -41,1 +41,8 @@ #!/usr/bin/env node | ||
| console.error(`normalize-eol: ${targets.size} shell file(s) checked, ${fixed} fixed`); | ||
| // Guard: abort loudly if any CR survives — better to fail the publish than ship CRLF. | ||
| const dirty = [...targets].filter(rel => readFileSync(join(ROOT, rel), 'utf8').includes('\r')); | ||
| if (dirty.length) { | ||
| console.error(`normalize-eol: ERROR — CR still present in: ${dirty.join(', ')}`); | ||
| process.exit(1); | ||
| } |
877930
0.13%1323
0.46%