@paths.design/caws-cli 11.1.7 → 11.1.8

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.
Files changed (158) hide show
  1. package/dist/index.js +55 -58
  2. package/dist/init/hook-packs/manifest-claude-code.d.ts +1 -1
  3. package/dist/init/hook-packs/manifest-claude-code.d.ts.map +1 -1
  4. package/dist/init/hook-packs/manifest-claude-code.js +260 -2
  5. package/dist/init/hook-packs/manifest-claude-code.js.map +1 -1
  6. package/dist/shell/binding/resolve-binding.d.ts.map +1 -1
  7. package/dist/shell/binding/resolve-binding.js +105 -1
  8. package/dist/shell/binding/resolve-binding.js.map +1 -1
  9. package/dist/shell/binding/types.d.ts +47 -3
  10. package/dist/shell/binding/types.d.ts.map +1 -1
  11. package/dist/shell/command-metadata.d.ts +93 -0
  12. package/dist/shell/command-metadata.d.ts.map +1 -0
  13. package/dist/shell/command-metadata.js +687 -0
  14. package/dist/shell/command-metadata.js.map +1 -0
  15. package/dist/shell/commands/agents.d.ts +1 -2
  16. package/dist/shell/commands/agents.d.ts.map +1 -1
  17. package/dist/shell/commands/claim.d.ts +16 -0
  18. package/dist/shell/commands/claim.d.ts.map +1 -1
  19. package/dist/shell/commands/claim.js +85 -26
  20. package/dist/shell/commands/claim.js.map +1 -1
  21. package/dist/shell/commands/events.d.ts +106 -0
  22. package/dist/shell/commands/events.d.ts.map +1 -0
  23. package/dist/shell/commands/events.js +510 -0
  24. package/dist/shell/commands/events.js.map +1 -0
  25. package/dist/shell/commands/gates.d.ts +2 -2
  26. package/dist/shell/commands/gates.d.ts.map +1 -1
  27. package/dist/shell/commands/gates.js +106 -25
  28. package/dist/shell/commands/gates.js.map +1 -1
  29. package/dist/shell/commands/init.d.ts.map +1 -1
  30. package/dist/shell/commands/init.js +26 -0
  31. package/dist/shell/commands/init.js.map +1 -1
  32. package/dist/shell/commands/prepush.d.ts +26 -0
  33. package/dist/shell/commands/prepush.d.ts.map +1 -0
  34. package/dist/shell/commands/prepush.js +373 -0
  35. package/dist/shell/commands/prepush.js.map +1 -0
  36. package/dist/shell/commands/scope.d.ts.map +1 -1
  37. package/dist/shell/commands/scope.js +31 -1
  38. package/dist/shell/commands/scope.js.map +1 -1
  39. package/dist/shell/commands/specs.d.ts +44 -3
  40. package/dist/shell/commands/specs.d.ts.map +1 -1
  41. package/dist/shell/commands/specs.js +411 -15
  42. package/dist/shell/commands/specs.js.map +1 -1
  43. package/dist/shell/commands/worktree.d.ts.map +1 -1
  44. package/dist/shell/commands/worktree.js +51 -1
  45. package/dist/shell/commands/worktree.js.map +1 -1
  46. package/dist/shell/gates/disposition.d.ts.map +1 -1
  47. package/dist/shell/gates/disposition.js +43 -2
  48. package/dist/shell/gates/disposition.js.map +1 -1
  49. package/dist/shell/index.d.ts +10 -4
  50. package/dist/shell/index.d.ts.map +1 -1
  51. package/dist/shell/index.js +22 -2
  52. package/dist/shell/index.js.map +1 -1
  53. package/dist/shell/legacy-command-map.js +832 -0
  54. package/dist/shell/push-range/classify-range.d.ts +99 -0
  55. package/dist/shell/push-range/classify-range.d.ts.map +1 -0
  56. package/dist/shell/push-range/classify-range.js +155 -0
  57. package/dist/shell/push-range/classify-range.js.map +1 -0
  58. package/dist/shell/push-range/scope-match.d.ts +13 -0
  59. package/dist/shell/push-range/scope-match.d.ts.map +1 -0
  60. package/dist/shell/push-range/scope-match.js +53 -0
  61. package/dist/shell/push-range/scope-match.js.map +1 -0
  62. package/dist/shell/register.d.ts.map +1 -1
  63. package/dist/shell/register.js +263 -228
  64. package/dist/shell/register.js.map +1 -1
  65. package/dist/shell/registered-command-groups.js +48 -0
  66. package/dist/shell/rules.d.ts +19 -0
  67. package/dist/shell/rules.d.ts.map +1 -1
  68. package/dist/shell/rules.js +27 -0
  69. package/dist/shell/rules.js.map +1 -1
  70. package/dist/shell/session/resolve-session.d.ts +29 -1
  71. package/dist/shell/session/resolve-session.d.ts.map +1 -1
  72. package/dist/shell/session/resolve-session.js +817 -11
  73. package/dist/shell/session/resolve-session.js.map +1 -1
  74. package/dist/shell/session/types.d.ts +127 -1
  75. package/dist/shell/session/types.d.ts.map +1 -1
  76. package/dist/shell/session/types.js +10 -4
  77. package/dist/shell/session/types.js.map +1 -1
  78. package/dist/store/doctor-snapshot.d.ts.map +1 -1
  79. package/dist/store/doctor-snapshot.js +26 -0
  80. package/dist/store/doctor-snapshot.js.map +1 -1
  81. package/dist/store/events-migration.d.ts +207 -0
  82. package/dist/store/events-migration.d.ts.map +1 -0
  83. package/dist/store/events-migration.js +358 -0
  84. package/dist/store/events-migration.js.map +1 -0
  85. package/dist/store/events-store.d.ts +47 -1
  86. package/dist/store/events-store.d.ts.map +1 -1
  87. package/dist/store/events-store.js +278 -0
  88. package/dist/store/events-store.js.map +1 -1
  89. package/dist/store/git-autocommit.d.ts +46 -0
  90. package/dist/store/git-autocommit.d.ts.map +1 -0
  91. package/dist/store/git-autocommit.js +198 -0
  92. package/dist/store/git-autocommit.js.map +1 -0
  93. package/dist/store/index.d.ts +4 -1
  94. package/dist/store/index.d.ts.map +1 -1
  95. package/dist/store/index.js +7 -1
  96. package/dist/store/index.js.map +1 -1
  97. package/dist/store/leases-store.d.ts.map +1 -1
  98. package/dist/store/leases-store.js +58 -0
  99. package/dist/store/leases-store.js.map +1 -1
  100. package/dist/store/rules.d.ts +53 -0
  101. package/dist/store/rules.d.ts.map +1 -1
  102. package/dist/store/rules.js +54 -0
  103. package/dist/store/rules.js.map +1 -1
  104. package/dist/store/specs-migration.d.ts +128 -0
  105. package/dist/store/specs-migration.d.ts.map +1 -0
  106. package/dist/store/specs-migration.js +481 -0
  107. package/dist/store/specs-migration.js.map +1 -0
  108. package/dist/store/specs-store.d.ts.map +1 -1
  109. package/dist/store/specs-store.js +14 -2
  110. package/dist/store/specs-store.js.map +1 -1
  111. package/dist/store/specs-writer.d.ts +130 -3
  112. package/dist/store/specs-writer.d.ts.map +1 -1
  113. package/dist/store/specs-writer.js +941 -102
  114. package/dist/store/specs-writer.js.map +1 -1
  115. package/dist/store/types.d.ts +6 -0
  116. package/dist/store/types.d.ts.map +1 -1
  117. package/dist/store/waivers-store.d.ts.map +1 -1
  118. package/dist/store/waivers-store.js +8 -1
  119. package/dist/store/waivers-store.js.map +1 -1
  120. package/dist/store/worktrees-writer.d.ts +28 -0
  121. package/dist/store/worktrees-writer.d.ts.map +1 -1
  122. package/dist/store/worktrees-writer.js +110 -12
  123. package/dist/store/worktrees-writer.js.map +1 -1
  124. package/package.json +5 -2
  125. package/templates/hook-packs/claude-code/CLAUDE.md +7 -1
  126. package/templates/hook-packs/claude-code/agent-heartbeat.sh +1 -1
  127. package/templates/hook-packs/claude-code/agent-register.sh +1 -1
  128. package/templates/hook-packs/claude-code/agent-stop.sh +1 -1
  129. package/templates/hook-packs/claude-code/audit.sh +1 -1
  130. package/templates/hook-packs/claude-code/block-dangerous.sh +1 -1
  131. package/templates/hook-packs/claude-code/classify_command.py +1 -1
  132. package/templates/hook-packs/claude-code/cwd-guard.sh +30 -0
  133. package/templates/hook-packs/claude-code/dispatch/post_tool_use.sh +15 -4
  134. package/templates/hook-packs/claude-code/dispatch/pre_tool_use.sh +10 -2
  135. package/templates/hook-packs/claude-code/dispatch/session_start.sh +1 -1
  136. package/templates/hook-packs/claude-code/dispatch/stop.sh +2 -2
  137. package/templates/hook-packs/claude-code/duplicate-export-check.sh +156 -0
  138. package/templates/hook-packs/claude-code/god-object-check.sh +102 -0
  139. package/templates/hook-packs/claude-code/guard-strikes.sh +1 -1
  140. package/templates/hook-packs/claude-code/lib/parse-input.sh +115 -1
  141. package/templates/hook-packs/claude-code/lib/run-handlers.sh +1 -1
  142. package/templates/hook-packs/claude-code/loc-delta-check.sh +91 -0
  143. package/templates/hook-packs/claude-code/naming-check.sh +128 -0
  144. package/templates/hook-packs/claude-code/plan-transcript-finalize.sh +59 -0
  145. package/templates/hook-packs/claude-code/plan-transcript-snapshot.sh +86 -0
  146. package/templates/hook-packs/claude-code/protected-paths.sh +59 -0
  147. package/templates/hook-packs/claude-code/quiet-merge.sh +68 -0
  148. package/templates/hook-packs/claude-code/reset-danger-latch.sh +1 -1
  149. package/templates/hook-packs/claude-code/reset-strikes.sh +1 -1
  150. package/templates/hook-packs/claude-code/runtime-paths.sh +1 -1
  151. package/templates/hook-packs/claude-code/scan-secrets.sh +98 -0
  152. package/templates/hook-packs/claude-code/scope-guard.sh +47 -65
  153. package/templates/hook-packs/claude-code/session-caws-status.sh +1 -1
  154. package/templates/hook-packs/claude-code/session-log.sh +1 -1
  155. package/templates/hook-packs/claude-code/session_log_renderer.py +956 -0
  156. package/templates/hook-packs/claude-code/shortcut-language-check.sh +147 -0
  157. package/templates/hook-packs/claude-code/worktree-guard.sh +1 -1
  158. package/templates/hook-packs/claude-code/worktree-write-guard.sh +1 -1
@@ -0,0 +1,481 @@
1
+ "use strict";
2
+ // CAWS-MIGRATE-V10-SPECS-001 — CLI store layer for the specs migrator.
3
+ //
4
+ // Boundary:
5
+ // - The transformer (packages/caws-kernel/src/spec/migrate-v10.ts) is pure.
6
+ // - This module owns ALL filesystem I/O: scan, atomic write, durable report,
7
+ // post-write validation.
8
+ // - The shell layer (commit 4) owns flag parsing and rendering.
9
+ //
10
+ // Doctrine sources:
11
+ // - .caws/specs/CAWS-MIGRATE-V10-SPECS-001.yaml acceptance A8-A11 + contract
12
+ // spec-v10-migration-output.
13
+ // - non_functional.reliability: atomic per-file write; partial failures
14
+ // leave already-written files in v11 form (intentional — no per-batch
15
+ // in-memory rollback for scaling reasons).
16
+ //
17
+ // What this module does NOT do:
18
+ // - Read any file outside .caws/specs/ and .caws/migrations/.
19
+ // - Write to the events log (migrations are not lifecycle events).
20
+ // - Hold locks (per-file atomic write is sufficient since each spec file
21
+ // is independent).
22
+ // - Touch .caws/specs/.archive/ (active spec migration only — invariant 9).
23
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ var desc = Object.getOwnPropertyDescriptor(m, k);
26
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
27
+ desc = { enumerable: true, get: function() { return m[k]; } };
28
+ }
29
+ Object.defineProperty(o, k2, desc);
30
+ }) : (function(o, m, k, k2) {
31
+ if (k2 === undefined) k2 = k;
32
+ o[k2] = m[k];
33
+ }));
34
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
35
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
36
+ }) : function(o, v) {
37
+ o["default"] = v;
38
+ });
39
+ var __importStar = (this && this.__importStar) || (function () {
40
+ var ownKeys = function(o) {
41
+ ownKeys = Object.getOwnPropertyNames || function (o) {
42
+ var ar = [];
43
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
44
+ return ar;
45
+ };
46
+ return ownKeys(o);
47
+ };
48
+ return function (mod) {
49
+ if (mod && mod.__esModule) return mod;
50
+ var result = {};
51
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
52
+ __setModuleDefault(result, mod);
53
+ return result;
54
+ };
55
+ })();
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
+ exports.MIGRATION_REPORT_SCHEMA_VERSION = void 0;
58
+ exports.runSpecsMigrateScan = runSpecsMigrateScan;
59
+ exports.runSpecsMigrateApply = runSpecsMigrateApply;
60
+ const crypto = __importStar(require("crypto"));
61
+ const fs = __importStar(require("fs"));
62
+ const path = __importStar(require("path"));
63
+ const yaml = __importStar(require("js-yaml"));
64
+ const caws_kernel_1 = require("@paths.design/caws-kernel");
65
+ const atomic_write_1 = require("./atomic-write");
66
+ const repo_root_1 = require("./repo-root");
67
+ const rules_1 = require("./rules");
68
+ // --- Public types ---------------------------------------------------------
69
+ /**
70
+ * Schema_version 1 of the durable migration report.
71
+ * Stable contract per contract spec-v10-migration-output.
72
+ */
73
+ exports.MIGRATION_REPORT_SCHEMA_VERSION = 1;
74
+ // --- Scan -----------------------------------------------------------------
75
+ /**
76
+ * Read-only scan of .caws/specs/. Classifies each YAML via the kernel
77
+ * detectSpecVersion + migrateSpecV10 pipeline; reports non-YAML files
78
+ * as observations (markdown_sidecar for *.md, unknown_non_yaml for the
79
+ * rest, EXCEPT registry.json which is the CLI's own bookkeeping and is
80
+ * silently ignored).
81
+ *
82
+ * Per A8: explicitly excludes .archive/ if present. Does NOT recurse.
83
+ * The scan is read-only — no files are modified and no events are appended.
84
+ *
85
+ * Failure mode: if the specs directory cannot be listed (permission
86
+ * denied, etc.), returns err with SPECS_MIGRATE_SCAN_FAILED. Refuses
87
+ * rather than returning an empty scan so an apply-default can't masquerade
88
+ * as "no v10 specs found."
89
+ */
90
+ function runSpecsMigrateScan(opts) {
91
+ // Defensive substrate assertion: cawsDir must point at a `.caws`
92
+ // directory. The store does NOT trust the shell to validate this —
93
+ // any caller (test harness, future SDK, in-process consumer) must
94
+ // pass an absolute path whose basename is exactly `.caws`. A wrong
95
+ // root would cause repo-root-relative paths in the report to be
96
+ // garbage and would cause the report write to land in the wrong
97
+ // .caws/migrations/ directory.
98
+ const cawsDirCheck = assertCawsDirShape(opts.cawsDir);
99
+ if (!(0, caws_kernel_1.isOk)(cawsDirCheck))
100
+ return cawsDirCheck;
101
+ const specsDir = path.join(opts.cawsDir, 'specs');
102
+ let entries;
103
+ try {
104
+ entries = fs.readdirSync(specsDir, { withFileTypes: true });
105
+ }
106
+ catch (e) {
107
+ const cause = e;
108
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_MIGRATE_SCAN_FAILED, `Failed to read ${specsDir}: ${cause.message ?? 'unknown error'}.`, {
109
+ subject: specsDir,
110
+ data: { code: cause.code },
111
+ narrowRepair: 'Verify the .caws/specs/ directory exists and is readable. The scan refuses to proceed on a directory it cannot list (so apply-default bypass cannot masquerade as "no v10 specs found").',
112
+ }));
113
+ }
114
+ // Sort for deterministic per-file order in the report.
115
+ entries.sort((a, b) => a.name.localeCompare(b.name));
116
+ const scanEntries = [];
117
+ const nonYaml = [];
118
+ const parseErrors = [];
119
+ let migrated = 0;
120
+ let migratedWithWarnings = 0;
121
+ let refused = 0;
122
+ for (const dirent of entries) {
123
+ // Skip subdirectories (including .archive/).
124
+ if (!dirent.isFile())
125
+ continue;
126
+ const fullPath = path.join(specsDir, dirent.name);
127
+ // Path is repo-root-relative (e.g., ".caws/specs/X.yaml"), not
128
+ // cawsDir-relative ("specs/X.yaml"). User-facing diagnostics and
129
+ // report entries reference the path the operator would type at
130
+ // the shell, which is repo-root-relative.
131
+ const repoRoot = path.dirname(opts.cawsDir);
132
+ const relPath = path.relative(repoRoot, fullPath);
133
+ // Non-YAML files: classify and skip.
134
+ if (!dirent.name.endsWith('.yaml') && !dirent.name.endsWith('.yml')) {
135
+ // registry.json is CLI bookkeeping — silently ignore.
136
+ if (dirent.name === 'registry.json')
137
+ continue;
138
+ const kind = dirent.name.endsWith('.md')
139
+ ? 'markdown_sidecar'
140
+ : 'unknown_non_yaml';
141
+ nonYaml.push({ file: relPath, kind });
142
+ continue;
143
+ }
144
+ // Read raw bytes (preserves YAML formatting for digest stability).
145
+ let raw;
146
+ try {
147
+ raw = fs.readFileSync(fullPath, 'utf8');
148
+ }
149
+ catch (e) {
150
+ const cause = e;
151
+ parseErrors.push({
152
+ file: relPath,
153
+ diagnostics: [
154
+ (0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_MIGRATE_PARSE_FAILED, `Failed to read ${relPath}: ${cause.message ?? 'unknown error'}.`, { subject: relPath, data: { code: cause.code } }),
155
+ ],
156
+ });
157
+ continue;
158
+ }
159
+ const oldDigest = sha256Hex(raw);
160
+ // Parse the YAML so the transformer has an object input.
161
+ const parseResult = (0, caws_kernel_1.parseSpecYaml)(raw, { sourcePath: relPath });
162
+ if (!(0, caws_kernel_1.isOk)(parseResult)) {
163
+ parseErrors.push({ file: relPath, diagnostics: parseResult.errors });
164
+ continue;
165
+ }
166
+ // Classification + transform. detectSpecVersion is the pure kernel
167
+ // classifier; the transformer's idempotency guard (A7) refuses
168
+ // already-v11 specs with a structured "no-op" outcome (severity=info).
169
+ const version = (0, caws_kernel_1.detectSpecVersion)(parseResult.value);
170
+ if (version === 'v11') {
171
+ // Already v11 — outside this migrator's job. Don't emit as refused;
172
+ // the transformer would emit kind=refused with rule ALREADY_V11
173
+ // (severity=info), but for scan-report distribution counts we
174
+ // exclude already-v11 specs from the totals so the operator's
175
+ // mental model "scan said X refusals" matches "X actionable items".
176
+ continue;
177
+ }
178
+ const migrateResult = (0, caws_kernel_1.migrateSpecV10)(parseResult.value, { path: relPath, contentDigest: oldDigest }, opts.lifecycleMapping !== undefined
179
+ ? { lifecycleMapping: opts.lifecycleMapping }
180
+ : {});
181
+ if (!(0, caws_kernel_1.isOk)(migrateResult)) {
182
+ // Transformer returned err (non-object input, etc.) — record as
183
+ // parse error so the scan stays usable.
184
+ parseErrors.push({ file: relPath, diagnostics: migrateResult.errors });
185
+ continue;
186
+ }
187
+ const outcome = migrateResult.value;
188
+ const specId = typeof parseResult.value === 'object' &&
189
+ parseResult.value !== null &&
190
+ 'id' in parseResult.value &&
191
+ typeof parseResult.value['id'] === 'string'
192
+ ? parseResult.value['id']
193
+ : null;
194
+ scanEntries.push({ file: relPath, spec_id: specId, old_digest: oldDigest, outcome, raw });
195
+ if (outcome.kind === 'migrated')
196
+ migrated++;
197
+ else if (outcome.kind === 'migrated_with_warnings')
198
+ migratedWithWarnings++;
199
+ else
200
+ refused++;
201
+ }
202
+ return (0, caws_kernel_1.ok)({
203
+ cawsDir: opts.cawsDir,
204
+ entries: scanEntries,
205
+ distribution: {
206
+ migrated,
207
+ migrated_with_warnings: migratedWithWarnings,
208
+ refused,
209
+ total: scanEntries.length,
210
+ },
211
+ non_yaml: nonYaml,
212
+ parse_errors: parseErrors,
213
+ });
214
+ }
215
+ // --- Apply ----------------------------------------------------------------
216
+ /**
217
+ * Run a scan, then optionally write the migrated YAMLs to disk + a
218
+ * durable migration report.
219
+ *
220
+ * apply=false (dry-run): produces an in-memory MigrationReport but
221
+ * writes NOTHING to disk (no spec writes, no report file).
222
+ *
223
+ * apply=true, partial=false: refuses if any scan entry is 'refused';
224
+ * no writes occur. Returns err with SPECS_MIGRATE_REFUSALS_PRESENT
225
+ * naming the first refused file and count.
226
+ *
227
+ * apply=true, partial=true: writes only the auto-migratable specs.
228
+ * Each write is preceded by post-write validation via the canonical
229
+ * parseAndValidateSpec; failure rolls back that single file (the
230
+ * on-disk YAML is byte-identical to the pre-call state) and records
231
+ * verdict='post_write_validation_failed' in the report. Other files
232
+ * in the batch are NOT rolled back (per non_functional reliability).
233
+ *
234
+ * The report is written ATOMICALLY via writeFileAtomic to
235
+ * .caws/migrations/v10-specs/<ISO>.json, ONCE per apply invocation,
236
+ * AFTER all per-file decisions are recorded.
237
+ */
238
+ function runSpecsMigrateApply(opts) {
239
+ // --- Scan first --------------------------------------------------------
240
+ const scanResult = runSpecsMigrateScan(opts);
241
+ if (!(0, caws_kernel_1.isOk)(scanResult)) {
242
+ return scanResult;
243
+ }
244
+ const scan = scanResult.value;
245
+ // --- A9: refusal-by-default for apply without partial ------------------
246
+ if (opts.apply && !opts.partial && scan.distribution.refused > 0) {
247
+ const firstRefused = scan.entries.find((e) => e.outcome.kind === 'refused');
248
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_MIGRATE_REFUSALS_PRESENT, `caws specs migrate --apply refused: ${scan.distribution.refused} of ${scan.distribution.total} spec(s) hit a 'refused' verdict (first: ${firstRefused?.file ?? 'unknown'}). Re-run with --partial to write the auto-migratable subset and skip refused, OR with --lifecycle-mapping <path> to unblock the unmapped-lifecycle cluster.`, {
249
+ subject: opts.cawsDir,
250
+ data: {
251
+ refused_count: scan.distribution.refused,
252
+ total: scan.distribution.total,
253
+ first_refused: firstRefused?.file ?? null,
254
+ },
255
+ narrowRepair: 'Either fix the refused specs by hand (read the refusal reasons in the dry-run report), or re-run with --partial to apply the migratable subset, or supply --lifecycle-mapping to resolve the unmapped-lifecycle cluster.',
256
+ }));
257
+ }
258
+ // --- Build per-file report entries -------------------------------------
259
+ const reportEntries = [];
260
+ let postWriteFailed = 0;
261
+ for (const entry of scan.entries) {
262
+ const reportEntry = buildBaseReportEntry(entry);
263
+ // Dry-run or refused: don't attempt the write. The report records
264
+ // the outcome as-is.
265
+ if (!opts.apply || entry.outcome.kind === 'refused') {
266
+ reportEntries.push(reportEntry);
267
+ continue;
268
+ }
269
+ // apply=true && (migrated || migrated_with_warnings):
270
+ // Serialize, post-write-validate, atomic write.
271
+ const serializedSpec = entry.outcome.kind === 'migrated'
272
+ ? entry.outcome.value
273
+ : entry.outcome.value;
274
+ let serialized;
275
+ try {
276
+ serialized = yaml.dump(serializedSpec, {
277
+ noRefs: true,
278
+ sortKeys: false,
279
+ lineWidth: 100,
280
+ });
281
+ }
282
+ catch (e) {
283
+ const cause = e;
284
+ reportEntries.push({
285
+ ...reportEntry,
286
+ verdict: 'post_write_validation_failed',
287
+ post_write_validation_errors: [
288
+ (0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_MIGRATE_POST_WRITE_VALIDATION_FAILED, `Failed to serialize migrated spec to YAML: ${cause.message ?? 'unknown error'}.`, { subject: entry.file }),
289
+ ],
290
+ });
291
+ postWriteFailed++;
292
+ continue;
293
+ }
294
+ // Post-write validation: run the canonical parseAndValidateSpec
295
+ // on the serialized output BEFORE the disk write. If validation
296
+ // fails, the file is never written (transformer-bug guard).
297
+ const validationResult = (0, caws_kernel_1.parseAndValidateSpec)(serialized, {
298
+ sourcePath: entry.file,
299
+ });
300
+ if (!(0, caws_kernel_1.isOk)(validationResult)) {
301
+ reportEntries.push({
302
+ ...reportEntry,
303
+ verdict: 'post_write_validation_failed',
304
+ post_write_validation_errors: validationResult.errors,
305
+ });
306
+ postWriteFailed++;
307
+ continue;
308
+ }
309
+ // Atomic write.
310
+ const fullPath = path.join(opts.cawsDir, '..', entry.file);
311
+ const writeResult = (0, atomic_write_1.writeFileAtomic)(fullPath, serialized);
312
+ if (!(0, caws_kernel_1.isOk)(writeResult)) {
313
+ // Write failed — record as post_write_validation_failed (the
314
+ // write didn't happen, so the file is byte-identical to pre-call).
315
+ reportEntries.push({
316
+ ...reportEntry,
317
+ verdict: 'post_write_validation_failed',
318
+ post_write_validation_errors: writeResult.errors,
319
+ });
320
+ postWriteFailed++;
321
+ continue;
322
+ }
323
+ // Success — compute new digest from what we wrote.
324
+ reportEntries.push({
325
+ ...reportEntry,
326
+ new_digest: sha256Hex(serialized),
327
+ });
328
+ }
329
+ // --- Build the report --------------------------------------------------
330
+ const report = {
331
+ schema_version: exports.MIGRATION_REPORT_SCHEMA_VERSION,
332
+ generated_at: opts.now.toISOString(),
333
+ command: buildCommandString(opts),
334
+ cwd: opts.cawsDir,
335
+ distribution: {
336
+ ...scan.distribution,
337
+ post_write_validation_failed: postWriteFailed,
338
+ },
339
+ non_yaml_observations: scan.non_yaml,
340
+ entries: reportEntries,
341
+ };
342
+ // --- Write the durable report (apply only) ----------------------------
343
+ let reportPath = null;
344
+ if (opts.apply) {
345
+ const writeRes = writeMigrationReport(opts.cawsDir, report);
346
+ if (!(0, caws_kernel_1.isOk)(writeRes)) {
347
+ // Report write failed AFTER spec writes succeeded — surface as
348
+ // err so the caller knows the audit trail is incomplete even
349
+ // though the migrations landed.
350
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_MIGRATE_REPORT_WRITE_FAILED, `Spec migrations were written to disk, but writing the durable migration report failed: ${writeRes.errors[0]?.message ?? 'unknown error'}. The migrations are on disk; only the audit trail is missing.`, {
351
+ subject: opts.cawsDir,
352
+ data: {
353
+ partial: opts.partial,
354
+ spec_write_count: reportEntries.filter((e) => e.verdict === 'migrated' || e.verdict === 'migrated_with_warnings').length,
355
+ },
356
+ narrowRepair: 'Investigate the .caws/migrations/v10-specs/ directory permissions. The spec writes themselves cannot be rolled back; treat this as an audit-trail gap and document the migration manually.',
357
+ }));
358
+ }
359
+ reportPath = writeRes.value;
360
+ }
361
+ return (0, caws_kernel_1.ok)({
362
+ cawsDir: opts.cawsDir,
363
+ partial: opts.partial,
364
+ report_path: reportPath,
365
+ report,
366
+ });
367
+ }
368
+ // --- Helpers --------------------------------------------------------------
369
+ function sha256Hex(input) {
370
+ return crypto.createHash('sha256').update(input, 'utf8').digest('hex');
371
+ }
372
+ /**
373
+ * Substrate assertion: cawsDir must be a path whose basename is
374
+ * exactly `.caws`. Refuses with SPECS_MIGRATE_SCAN_FAILED if not,
375
+ * naming the exact path passed and the expected shape.
376
+ *
377
+ * This is intentionally NOT a soft warning — a wrong root corrupts
378
+ * every relative-path computation downstream (report entries, write
379
+ * targets, the migrations-report directory itself). Failing hard at
380
+ * the substrate boundary is the right answer.
381
+ */
382
+ function assertCawsDirShape(cawsDir) {
383
+ if (typeof cawsDir !== 'string' || cawsDir.length === 0) {
384
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_MIGRATE_SCAN_FAILED, 'cawsDir must be a non-empty string path.', {
385
+ subject: String(cawsDir),
386
+ narrowRepair: 'Pass cawsDir as an absolute path whose basename is exactly ".caws" (e.g. "/path/to/repo/.caws").',
387
+ }));
388
+ }
389
+ const base = path.basename(cawsDir);
390
+ if (base !== '.caws') {
391
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_MIGRATE_SCAN_FAILED, `cawsDir basename must be exactly ".caws"; got "${base}" for path "${cawsDir}".`, {
392
+ subject: cawsDir,
393
+ data: { basename: base, expected: '.caws' },
394
+ narrowRepair: 'Pass cawsDir as the path to the .caws directory itself, not the repo root or a subdirectory. The shell layer (caws specs migrate) should compute this from resolveRepoRoot + path.join(repoRoot, ".caws").',
395
+ }));
396
+ }
397
+ return (0, caws_kernel_1.ok)(true);
398
+ }
399
+ function buildCommandString(opts) {
400
+ const parts = ['caws specs migrate', `--from ${opts.from}`];
401
+ if (opts.apply)
402
+ parts.push('--apply');
403
+ if (opts.partial)
404
+ parts.push('--partial');
405
+ if (opts.lifecycleMapping !== undefined)
406
+ parts.push('--lifecycle-mapping <path>');
407
+ return parts.join(' ');
408
+ }
409
+ function buildBaseReportEntry(entry) {
410
+ const o = entry.outcome;
411
+ if (o.kind === 'migrated') {
412
+ return {
413
+ file: entry.file,
414
+ spec_id: entry.spec_id,
415
+ old_digest: entry.old_digest,
416
+ new_digest: null, // populated post-write
417
+ verdict: 'migrated',
418
+ safe_renames: o.safe_renames,
419
+ coercions: o.coercions,
420
+ mode_source: o.mode_source,
421
+ lifecycle_mapping_used: o.lifecycle_mapping_used,
422
+ report_only_fields: o.report_only_fields,
423
+ refusal_reasons: [],
424
+ post_write_validation_errors: [],
425
+ };
426
+ }
427
+ if (o.kind === 'migrated_with_warnings') {
428
+ return {
429
+ file: entry.file,
430
+ spec_id: entry.spec_id,
431
+ old_digest: entry.old_digest,
432
+ new_digest: null,
433
+ verdict: 'migrated_with_warnings',
434
+ safe_renames: o.safe_renames,
435
+ coercions: o.coercions,
436
+ mode_source: o.mode_source,
437
+ lifecycle_mapping_used: o.lifecycle_mapping_used,
438
+ report_only_fields: o.report_only_fields,
439
+ refusal_reasons: [],
440
+ post_write_validation_errors: [],
441
+ };
442
+ }
443
+ // refused
444
+ return {
445
+ file: entry.file,
446
+ spec_id: entry.spec_id,
447
+ old_digest: entry.old_digest,
448
+ new_digest: null,
449
+ verdict: 'refused',
450
+ safe_renames: [],
451
+ coercions: [],
452
+ mode_source: null,
453
+ lifecycle_mapping_used: null,
454
+ report_only_fields: {},
455
+ refusal_reasons: o.reasons.map((r) => r.rule),
456
+ post_write_validation_errors: [],
457
+ };
458
+ }
459
+ function writeMigrationReport(cawsDir, report) {
460
+ // Windows-safe ISO timestamp (colons → hyphens), matching the events
461
+ // archive naming convention.
462
+ const safeStamp = report.generated_at.replace(/:/g, '-');
463
+ const dir = path.join(cawsDir, 'migrations', 'v10-specs');
464
+ const filePath = path.join(dir, `${safeStamp}.json`);
465
+ // Create directory (idempotent).
466
+ try {
467
+ fs.mkdirSync(dir, { recursive: true });
468
+ }
469
+ catch (e) {
470
+ const cause = e;
471
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_MIGRATE_REPORT_WRITE_FAILED, `Failed to create migration report directory ${dir}: ${cause.message ?? 'unknown error'}.`, { subject: dir, data: { code: cause.code } }));
472
+ }
473
+ const writeResult = (0, atomic_write_1.writeFileAtomic)(filePath, JSON.stringify(report, null, 2));
474
+ if (!(0, caws_kernel_1.isOk)(writeResult)) {
475
+ return (0, caws_kernel_1.err)(writeResult.errors);
476
+ }
477
+ return (0, caws_kernel_1.ok)(filePath);
478
+ }
479
+ // --- Unused-import suppression (isErr referenced for clarity in design) ---
480
+ void caws_kernel_1.isErr;
481
+ //# sourceMappingURL=specs-migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specs-migration.js","sourceRoot":"","sources":["../../src/store/specs-migration.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"specs-store.d.ts","sourceRoot":"","sources":["../../src/store/specs-store.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAM/C,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAmG1D"}
1
+ {"version":3,"file":"specs-store.d.ts","sourceRoot":"","sources":["../../src/store/specs-store.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAM/C,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAuG1D"}
@@ -88,12 +88,24 @@ function loadSpecs(cawsDir) {
88
88
  continue;
89
89
  // Explicit guard: working-spec.yaml is forbidden in vNext.
90
90
  if (entry.name === 'working-spec.yaml' || entry.name === 'working-spec.yml') {
91
- diagnostics.push((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_NON_YAML_SKIPPED, `Skipping ${entry.name}: project-level working spec is not supported in vNext.`, { subject: path.join(specsDir, entry.name) }));
91
+ diagnostics.push((0, caws_kernel_1.diagnostic)({
92
+ rule: rules_1.STORE_RULES.SPECS_NON_YAML_SKIPPED,
93
+ authority: 'kernel/diagnostics',
94
+ severity: 'info',
95
+ message: `Skipping ${entry.name}: project-level working spec is not supported in vNext.`,
96
+ subject: path.join(specsDir, entry.name),
97
+ }));
92
98
  continue;
93
99
  }
94
100
  const fullPath = path.join(specsDir, entry.name);
95
101
  if (!isYamlPath(entry.name)) {
96
- diagnostics.push((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_NON_YAML_SKIPPED, `Skipping non-YAML file in .caws/specs/: ${entry.name}.`, { subject: fullPath }));
102
+ diagnostics.push((0, caws_kernel_1.diagnostic)({
103
+ rule: rules_1.STORE_RULES.SPECS_NON_YAML_SKIPPED,
104
+ authority: 'kernel/diagnostics',
105
+ severity: 'info',
106
+ message: `Skipping non-YAML file in .caws/specs/: ${entry.name}.`,
107
+ subject: fullPath,
108
+ }));
97
109
  continue;
98
110
  }
99
111
  const source = (0, yaml_store_1.readYamlSource)(fullPath);
@@ -1 +1 @@
1
- {"version":3,"file":"specs-store.js","sourceRoot":"","sources":["../../src/store/specs-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"specs-store.js","sourceRoot":"","sources":["../../src/store/specs-store.ts"],"names":[],"mappings":"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"}