@paths.design/caws-cli 11.0.0 → 11.1.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.
Files changed (119) hide show
  1. package/README.md +2 -2
  2. package/dist/index.js +2 -2
  3. package/dist/init/harness-detect.d.ts +18 -0
  4. package/dist/init/harness-detect.d.ts.map +1 -0
  5. package/dist/init/harness-detect.js +90 -0
  6. package/dist/init/harness-detect.js.map +1 -0
  7. package/dist/init/hook-install.d.ts +53 -0
  8. package/dist/init/hook-install.d.ts.map +1 -0
  9. package/dist/init/hook-install.js +421 -0
  10. package/dist/init/hook-install.js.map +1 -0
  11. package/dist/init/hook-packs/manifest-claude-code.d.ts +4 -0
  12. package/dist/init/hook-packs/manifest-claude-code.d.ts.map +1 -0
  13. package/dist/init/hook-packs/manifest-claude-code.js +190 -0
  14. package/dist/init/hook-packs/manifest-claude-code.js.map +1 -0
  15. package/dist/init/hook-packs/register.d.ts +19 -0
  16. package/dist/init/hook-packs/register.d.ts.map +1 -0
  17. package/dist/init/hook-packs/register.js +37 -0
  18. package/dist/init/hook-packs/register.js.map +1 -0
  19. package/dist/init/hook-packs/types.d.ts +123 -0
  20. package/dist/init/hook-packs/types.d.ts.map +1 -0
  21. package/dist/init/hook-packs/types.js +29 -0
  22. package/dist/init/hook-packs/types.js.map +1 -0
  23. package/dist/shell/commands/gates.d.ts.map +1 -1
  24. package/dist/shell/commands/gates.js +28 -1
  25. package/dist/shell/commands/gates.js.map +1 -1
  26. package/dist/shell/commands/init.d.ts +9 -0
  27. package/dist/shell/commands/init.d.ts.map +1 -1
  28. package/dist/shell/commands/init.js +131 -27
  29. package/dist/shell/commands/init.js.map +1 -1
  30. package/dist/shell/commands/specs.d.ts +41 -0
  31. package/dist/shell/commands/specs.d.ts.map +1 -0
  32. package/dist/shell/commands/specs.js +264 -0
  33. package/dist/shell/commands/specs.js.map +1 -0
  34. package/dist/shell/commands/worktree.d.ts +38 -0
  35. package/dist/shell/commands/worktree.d.ts.map +1 -0
  36. package/dist/shell/commands/worktree.js +286 -0
  37. package/dist/shell/commands/worktree.js.map +1 -0
  38. package/dist/shell/gates/disposition.d.ts.map +1 -1
  39. package/dist/shell/gates/disposition.js +33 -3
  40. package/dist/shell/gates/disposition.js.map +1 -1
  41. package/dist/shell/gates/local-evaluators/budget-limit.d.ts +24 -0
  42. package/dist/shell/gates/local-evaluators/budget-limit.d.ts.map +1 -0
  43. package/dist/shell/gates/local-evaluators/budget-limit.js +67 -0
  44. package/dist/shell/gates/local-evaluators/budget-limit.js.map +1 -0
  45. package/dist/shell/gates/local-evaluators/diff-helpers.d.ts +25 -0
  46. package/dist/shell/gates/local-evaluators/diff-helpers.d.ts.map +1 -0
  47. package/dist/shell/gates/local-evaluators/diff-helpers.js +74 -0
  48. package/dist/shell/gates/local-evaluators/diff-helpers.js.map +1 -0
  49. package/dist/shell/gates/local-evaluators/index.d.ts +28 -0
  50. package/dist/shell/gates/local-evaluators/index.d.ts.map +1 -0
  51. package/dist/shell/gates/local-evaluators/index.js +67 -0
  52. package/dist/shell/gates/local-evaluators/index.js.map +1 -0
  53. package/dist/shell/gates/local-evaluators/scope-boundary.d.ts +23 -0
  54. package/dist/shell/gates/local-evaluators/scope-boundary.d.ts.map +1 -0
  55. package/dist/shell/gates/local-evaluators/scope-boundary.js +67 -0
  56. package/dist/shell/gates/local-evaluators/scope-boundary.js.map +1 -0
  57. package/dist/shell/gates/local-evaluators/spec-completeness.d.ts +12 -0
  58. package/dist/shell/gates/local-evaluators/spec-completeness.d.ts.map +1 -0
  59. package/dist/shell/gates/local-evaluators/spec-completeness.js +73 -0
  60. package/dist/shell/gates/local-evaluators/spec-completeness.js.map +1 -0
  61. package/dist/shell/index.d.ts +4 -0
  62. package/dist/shell/index.d.ts.map +1 -1
  63. package/dist/shell/index.js +13 -1
  64. package/dist/shell/index.js.map +1 -1
  65. package/dist/shell/register.d.ts.map +1 -1
  66. package/dist/shell/register.js +192 -2
  67. package/dist/shell/register.js.map +1 -1
  68. package/dist/shell/render/init-hook-pack.d.ts +16 -0
  69. package/dist/shell/render/init-hook-pack.d.ts.map +1 -0
  70. package/dist/shell/render/init-hook-pack.js +206 -0
  71. package/dist/shell/render/init-hook-pack.js.map +1 -0
  72. package/dist/store/atomic-write.d.ts +20 -2
  73. package/dist/store/atomic-write.d.ts.map +1 -1
  74. package/dist/store/atomic-write.js +44 -2
  75. package/dist/store/atomic-write.js.map +1 -1
  76. package/dist/store/lifecycle-lock.d.ts +34 -0
  77. package/dist/store/lifecycle-lock.d.ts.map +1 -0
  78. package/dist/store/lifecycle-lock.js +168 -0
  79. package/dist/store/lifecycle-lock.js.map +1 -0
  80. package/dist/store/lifecycle-transaction.d.ts +79 -0
  81. package/dist/store/lifecycle-transaction.d.ts.map +1 -0
  82. package/dist/store/lifecycle-transaction.js +319 -0
  83. package/dist/store/lifecycle-transaction.js.map +1 -0
  84. package/dist/store/rules.d.ts +16 -0
  85. package/dist/store/rules.d.ts.map +1 -1
  86. package/dist/store/rules.js +17 -0
  87. package/dist/store/rules.js.map +1 -1
  88. package/dist/store/specs-writer.d.ts +61 -0
  89. package/dist/store/specs-writer.d.ts.map +1 -0
  90. package/dist/store/specs-writer.js +506 -0
  91. package/dist/store/specs-writer.js.map +1 -0
  92. package/dist/store/worktrees-writer.d.ts +77 -0
  93. package/dist/store/worktrees-writer.d.ts.map +1 -0
  94. package/dist/store/worktrees-writer.js +674 -0
  95. package/dist/store/worktrees-writer.js.map +1 -0
  96. package/dist/store/yaml-patch.d.ts +7 -0
  97. package/dist/store/yaml-patch.d.ts.map +1 -0
  98. package/dist/store/yaml-patch.js +250 -0
  99. package/dist/store/yaml-patch.js.map +1 -0
  100. package/package.json +7 -4
  101. package/templates/hook-packs/claude-code/CLAUDE.md +172 -0
  102. package/templates/hook-packs/claude-code/audit.sh +121 -0
  103. package/templates/hook-packs/claude-code/block-dangerous.sh +158 -0
  104. package/templates/hook-packs/claude-code/classify_command.py +1064 -0
  105. package/templates/hook-packs/claude-code/dispatch/post_tool_use.sh +63 -0
  106. package/templates/hook-packs/claude-code/dispatch/pre_tool_use.sh +50 -0
  107. package/templates/hook-packs/claude-code/dispatch/session_start.sh +41 -0
  108. package/templates/hook-packs/claude-code/dispatch/stop.sh +37 -0
  109. package/templates/hook-packs/claude-code/guard-strikes.sh +140 -0
  110. package/templates/hook-packs/claude-code/lib/parse-input.sh +127 -0
  111. package/templates/hook-packs/claude-code/lib/run-handlers.sh +212 -0
  112. package/templates/hook-packs/claude-code/reset-danger-latch.sh +21 -0
  113. package/templates/hook-packs/claude-code/reset-strikes.sh +243 -0
  114. package/templates/hook-packs/claude-code/runtime-paths.sh +80 -0
  115. package/templates/hook-packs/claude-code/scope-guard.sh +392 -0
  116. package/templates/hook-packs/claude-code/session-caws-status.sh +171 -0
  117. package/templates/hook-packs/claude-code/session-log.sh +180 -0
  118. package/templates/hook-packs/claude-code/worktree-guard.sh +240 -0
  119. package/templates/hook-packs/claude-code/worktree-write-guard.sh +77 -0
@@ -0,0 +1,319 @@
1
+ "use strict";
2
+ // Lifecycle mutation transaction wrapper.
3
+ //
4
+ // LIFECYCLE-MUTATION-001 substrate: multi-file lifecycle mutations
5
+ // serialize through .caws/state.lock and produce a typed outcome that
6
+ // names partial-failure explicitly. The transaction is NOT a database
7
+ // transaction — filesystem rollback is best-effort, and the useful
8
+ // invariant is "partial failure is detected, named, and recoverable,"
9
+ // not "rollback always succeeds."
10
+ //
11
+ // Operation order (within the critical section):
12
+ // 1. acquire lifecycle lock (already done by withLifecycleLock or
13
+ // directly by the caller)
14
+ // 2. read all affected files; capture original bytes for rollback
15
+ // 3. compute planned writes (caller-provided)
16
+ // 4. validate planned state via kernel hooks (caller-provided)
17
+ // 5. write files in deterministic order using writeFileAtomic
18
+ // with preserveMode: true (per A2)
19
+ // 6. append the transaction's event(s) through appendEvent (the SOLE
20
+ // v11 writer of events.jsonl)
21
+ // 7. if event append fails, attempt rollback of all written files
22
+ // from captured original bytes; produce LIFECYCLE_PARTIAL_FAILURE_*
23
+ // 8. release lock (caller's `finally`)
24
+ //
25
+ // fsyncDir posture (A3):
26
+ // This module does NOT call fsyncDir by default. Rationale: v11.1
27
+ // accepts rename durability without parent-directory fsync for two
28
+ // reasons. (a) writeFileAtomic already does file-content fsync before
29
+ // rename, which is the durability primitive that survives kernel
30
+ // crashes; only power loss between rename and dirent flush is at risk.
31
+ // (b) The lock + event-append step provides a recovery anchor: if a
32
+ // crash leaves the filesystem in a partially-renamed state, the next
33
+ // transaction's read step will see whichever state the filesystem
34
+ // committed, and the event log's last entry tells the operator the
35
+ // last fully-acknowledged transition. Power-loss safety is therefore
36
+ // bounded by the audit log, not by directory fsync. Callers needing
37
+ // stronger durability may pass an `fsyncAfter: true` option.
38
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
39
+ if (k2 === undefined) k2 = k;
40
+ var desc = Object.getOwnPropertyDescriptor(m, k);
41
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
42
+ desc = { enumerable: true, get: function() { return m[k]; } };
43
+ }
44
+ Object.defineProperty(o, k2, desc);
45
+ }) : (function(o, m, k, k2) {
46
+ if (k2 === undefined) k2 = k;
47
+ o[k2] = m[k];
48
+ }));
49
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
50
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
51
+ }) : function(o, v) {
52
+ o["default"] = v;
53
+ });
54
+ var __importStar = (this && this.__importStar) || (function () {
55
+ var ownKeys = function(o) {
56
+ ownKeys = Object.getOwnPropertyNames || function (o) {
57
+ var ar = [];
58
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
59
+ return ar;
60
+ };
61
+ return ownKeys(o);
62
+ };
63
+ return function (mod) {
64
+ if (mod && mod.__esModule) return mod;
65
+ var result = {};
66
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
67
+ __setModuleDefault(result, mod);
68
+ return result;
69
+ };
70
+ })();
71
+ Object.defineProperty(exports, "__esModule", { value: true });
72
+ exports.runLifecycleTransaction = runLifecycleTransaction;
73
+ const fs = __importStar(require("fs"));
74
+ const caws_kernel_1 = require("@paths.design/caws-kernel");
75
+ const atomic_write_1 = require("./atomic-write");
76
+ const events_store_1 = require("./events-store");
77
+ const repo_root_1 = require("./repo-root");
78
+ const rules_1 = require("./rules");
79
+ // ─── Implementation ──────────────────────────────────────────────────────
80
+ function captureSnapshot(filePath) {
81
+ try {
82
+ const stat = fs.statSync(filePath);
83
+ const originalContents = fs.readFileSync(filePath);
84
+ return {
85
+ path: filePath,
86
+ originalContents,
87
+ originalMode: stat.mode & 0o7777,
88
+ };
89
+ }
90
+ catch (e) {
91
+ const cause = e;
92
+ if (cause.code === 'ENOENT') {
93
+ return { path: filePath, originalContents: null, originalMode: undefined };
94
+ }
95
+ // Any other read failure: surface as a snapshot we don't trust.
96
+ // Treat as "file did not exist" for rollback purposes; the
97
+ // transaction's write step will hit the same error and abort.
98
+ return { path: filePath, originalContents: null, originalMode: undefined };
99
+ }
100
+ }
101
+ function rollbackOne(snapshot) {
102
+ try {
103
+ if (snapshot.originalContents === null) {
104
+ // File didn't exist before; rollback is to delete it.
105
+ try {
106
+ fs.unlinkSync(snapshot.path);
107
+ }
108
+ catch (e) {
109
+ const cause = e;
110
+ // Already gone — treat as success.
111
+ if (cause.code === 'ENOENT')
112
+ return { ok: true };
113
+ return { ok: false, reason: `failed to remove ${snapshot.path}: ${cause.code ?? 'unknown'}` };
114
+ }
115
+ return { ok: true };
116
+ }
117
+ // Restore prior contents. Use writeFileAtomic with the captured
118
+ // mode so the rollback itself is atomic at the file level.
119
+ const opts = snapshot.originalMode !== undefined ? { preserveMode: true } : {};
120
+ // Pre-stage the target file with original mode by chmod-then-write
121
+ // is overkill; writeFileAtomic with preserveMode will stat the
122
+ // target (which currently has the failed-transaction bytes and
123
+ // possibly a different mode). Safer: write first with default
124
+ // mode, then chmod explicitly.
125
+ const writeResult = (0, atomic_write_1.writeFileAtomic)(snapshot.path, snapshot.originalContents, opts);
126
+ if (!writeResult.ok) {
127
+ return { ok: false, reason: `writeFileAtomic failed during rollback: ${snapshot.path}` };
128
+ }
129
+ if (snapshot.originalMode !== undefined) {
130
+ try {
131
+ fs.chmodSync(snapshot.path, snapshot.originalMode);
132
+ }
133
+ catch {
134
+ // Mode-restore failure during rollback: contents are restored
135
+ // but mode may be wrong. We do NOT escalate to unrecovered for
136
+ // a mode-only failure; the file content is correct.
137
+ }
138
+ }
139
+ return { ok: true };
140
+ }
141
+ catch (e) {
142
+ const cause = e;
143
+ return { ok: false, reason: cause.message ?? 'unknown rollback error' };
144
+ }
145
+ }
146
+ function buildRecoveryInstruction(plannedEvents, writesCompleted, rolledBack, rollbackFailed) {
147
+ const lines = [
148
+ 'Lifecycle transaction left the repository in a partial state.',
149
+ ` ${writesCompleted.length} file write(s) completed before failure.`,
150
+ ` ${rolledBack.length} successfully rolled back; ${rollbackFailed.length} rollback failure(s).`,
151
+ '',
152
+ `Files that may need manual inspection:`,
153
+ ];
154
+ for (const f of rollbackFailed) {
155
+ lines.push(` ${f.path} (rollback failed)`);
156
+ }
157
+ lines.push('');
158
+ lines.push(`Events that were NOT appended (${plannedEvents.length}):`);
159
+ for (const ev of plannedEvents) {
160
+ lines.push(` ${ev.event} (spec_id=${ev.spec_id ?? 'n/a'})`);
161
+ }
162
+ lines.push('');
163
+ lines.push('Required action: review each listed file against the planned event payload above to');
164
+ lines.push('determine whether to redo the lifecycle transition or to manually restore prior state.');
165
+ lines.push('Do NOT hand-author entries into events.jsonl.');
166
+ return lines.join('\n');
167
+ }
168
+ /**
169
+ * Run a lifecycle transaction.
170
+ *
171
+ * The caller MUST hold the lifecycle lock (via withLifecycleLock or
172
+ * acquireLifecycleLock). This function does not acquire the lock
173
+ * itself; that responsibility lives in the caller so a higher-level
174
+ * orchestrator (CLI-SPECS-001, CLI-WORKTREE-001) can group multiple
175
+ * conceptual mutations inside one lock if needed.
176
+ *
177
+ * Returns:
178
+ * Ok({ kind: 'success', ... }) — everything worked
179
+ * Ok({ kind: 'partial_failure_recovered', ... }) — rolled back cleanly
180
+ * Err([LIFECYCLE_PARTIAL_FAILURE_UNRECOVERED]) — partial state remains
181
+ * Err([LIFECYCLE_PLAN_REJECTED]) — validate() rejected
182
+ * Err([LIFECYCLE_WRITE_FAILED]) — a write failed before events
183
+ */
184
+ function runLifecycleTransaction(plan) {
185
+ // Step 1: validate plan (pre-write).
186
+ if (plan.validate) {
187
+ const validation = plan.validate();
188
+ if (!validation.ok) {
189
+ const diagnostics = validation.errors.map((d) => {
190
+ const extra = {
191
+ data: { source_rule: d.rule },
192
+ };
193
+ if (d.subject !== undefined)
194
+ extra.subject = d.subject;
195
+ return (0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PLAN_REJECTED, d.message, extra);
196
+ });
197
+ return (0, caws_kernel_1.err)(diagnostics);
198
+ }
199
+ }
200
+ // Step 2: snapshot every planned file BEFORE any write.
201
+ const snapshots = plan.plannedWrites.map((w) => captureSnapshot(w.path));
202
+ // Step 3: apply writes in deterministic order.
203
+ const writesCompleted = [];
204
+ for (let i = 0; i < plan.plannedWrites.length; i++) {
205
+ const w = plan.plannedWrites[i];
206
+ if (!w)
207
+ continue;
208
+ const opts = w.preserveMode === true ? { preserveMode: true } : {};
209
+ const result = (0, atomic_write_1.writeFileAtomic)(w.path, w.contents, opts);
210
+ if (!result.ok) {
211
+ // Write failed; the transaction has not yet appended any events.
212
+ // Roll back the writes that already succeeded.
213
+ const rolledBack = [];
214
+ const rollbackFailed = [];
215
+ for (let j = i - 1; j >= 0; j--) {
216
+ const snap = snapshots[j];
217
+ if (!snap)
218
+ continue;
219
+ const r = rollbackOne(snap);
220
+ if (r.ok)
221
+ rolledBack.push(snap.path);
222
+ else
223
+ rollbackFailed.push({ path: snap.path, reason: r.reason });
224
+ }
225
+ if (rollbackFailed.length === 0) {
226
+ const diagnostics = result.errors.map((d) => {
227
+ const extra = {
228
+ data: { source_rule: d.rule, rolled_back: rolledBack.length },
229
+ };
230
+ if (d.subject !== undefined)
231
+ extra.subject = d.subject;
232
+ return (0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_WRITE_FAILED, d.message, extra);
233
+ });
234
+ return (0, caws_kernel_1.err)(diagnostics);
235
+ }
236
+ // Rollback during pre-event-write failure is itself unrecovered.
237
+ const recoveryInstruction = buildRecoveryInstruction(plan.events, writesCompleted, rolledBack, rollbackFailed);
238
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PARTIAL_FAILURE_UNRECOVERED, `Lifecycle write failed and rollback could not fully restore prior state.`, {
239
+ subject: w.path,
240
+ data: {
241
+ writes_completed: writesCompleted,
242
+ rolled_back: rolledBack,
243
+ rollback_failed: rollbackFailed,
244
+ recovery_instruction: recoveryInstruction,
245
+ },
246
+ }));
247
+ }
248
+ writesCompleted.push(w.path);
249
+ }
250
+ // Step 3b (optional): fsync affected directories.
251
+ if (plan.fsyncAfter === true) {
252
+ const dirs = new Set();
253
+ for (const w of plan.plannedWrites) {
254
+ const lastSlash = w.path.lastIndexOf('/');
255
+ if (lastSlash > 0)
256
+ dirs.add(w.path.slice(0, lastSlash));
257
+ }
258
+ for (const d of dirs) {
259
+ (0, atomic_write_1.fsyncDir)(d);
260
+ }
261
+ }
262
+ // Step 4: append events through appendEvent (the SOLE v11 events
263
+ // writer). On any failure, attempt rollback.
264
+ const appendedEvents = [];
265
+ for (let i = 0; i < plan.events.length; i++) {
266
+ const body = plan.events[i];
267
+ if (!body)
268
+ continue;
269
+ const result = (0, events_store_1.appendEvent)(plan.cawsDir, body);
270
+ if (!result.ok) {
271
+ // Roll back all writes. Reverse order so latest writes are
272
+ // restored to their pre-transaction state first.
273
+ const rolledBack = [];
274
+ const rollbackFailed = [];
275
+ for (let j = snapshots.length - 1; j >= 0; j--) {
276
+ const snap = snapshots[j];
277
+ if (!snap)
278
+ continue;
279
+ const r = rollbackOne(snap);
280
+ if (r.ok)
281
+ rolledBack.push(snap.path);
282
+ else
283
+ rollbackFailed.push({ path: snap.path, reason: r.reason });
284
+ }
285
+ // Also, previously-appended events in this transaction are
286
+ // already in the log. We CANNOT un-append from a hash-chained
287
+ // log without breaking the chain. Surface this in the recovery
288
+ // instruction.
289
+ if (rollbackFailed.length === 0 && appendedEvents.length === 0) {
290
+ return (0, caws_kernel_1.ok)({
291
+ kind: 'partial_failure_recovered',
292
+ cause: result.errors,
293
+ rolledBack,
294
+ });
295
+ }
296
+ const recoveryInstruction = buildRecoveryInstruction(plan.events, writesCompleted, rolledBack, rollbackFailed);
297
+ return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.LIFECYCLE_PARTIAL_FAILURE_UNRECOVERED, `Lifecycle event append failed. ${appendedEvents.length} event(s) were already appended before the failure; ${rollbackFailed.length} file(s) could not be rolled back.`, {
298
+ subject: body.event,
299
+ data: {
300
+ writes_completed: writesCompleted,
301
+ rolled_back: rolledBack,
302
+ rollback_failed: rollbackFailed,
303
+ already_appended: appendedEvents.map((e) => ({
304
+ seq: e.seq,
305
+ event_hash: e.event_hash,
306
+ })),
307
+ recovery_instruction: recoveryInstruction,
308
+ },
309
+ }));
310
+ }
311
+ appendedEvents.push(result.value);
312
+ }
313
+ return (0, caws_kernel_1.ok)({
314
+ kind: 'success',
315
+ writes: writesCompleted.map((path) => ({ path })),
316
+ appendedEvents,
317
+ });
318
+ }
319
+ //# sourceMappingURL=lifecycle-transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle-transaction.js","sourceRoot":"","sources":["../../src/store/lifecycle-transaction.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,22 @@ export declare const STORE_RULES: {
47
47
  readonly INIT_LEGACY_RESIDUE: "store.init.legacy_residue";
48
48
  /** init seeded a default policy that did not pass kernel validation. */
49
49
  readonly INIT_DEFAULT_POLICY_INVALID: "store.init.default_policy_invalid";
50
+ /** Failed to acquire the global .caws/state.lock after bounded retry. */
51
+ readonly LIFECYCLE_LOCK_CONTENTION: "store.lifecycle.lock_contention";
52
+ /** Plan validation rejected the proposed transaction before any write. */
53
+ readonly LIFECYCLE_PLAN_REJECTED: "store.lifecycle.plan_rejected";
54
+ /** A planned file write failed; the transaction aborted before event append. */
55
+ readonly LIFECYCLE_WRITE_FAILED: "store.lifecycle.write_failed";
56
+ /** State writes succeeded but event append failed; rollback succeeded. */
57
+ readonly LIFECYCLE_PARTIAL_FAILURE_RECOVERED: "store.lifecycle.partial_failure_recovered";
58
+ /** State writes succeeded, event append failed, AND rollback also failed.
59
+ * Caller MUST handle the recovery instruction in the diagnostic data. */
60
+ readonly LIFECYCLE_PARTIAL_FAILURE_UNRECOVERED: "store.lifecycle.partial_failure_unrecovered";
61
+ /** yaml-patch refused an ambiguous mutation (e.g., duplicate top-level key,
62
+ * or a flow-style mapping at the target location). */
63
+ readonly YAML_PATCH_AMBIGUOUS: "store.yaml_patch.ambiguous";
64
+ /** yaml-patch refused because the target key was not found in the document. */
65
+ readonly YAML_PATCH_KEY_NOT_FOUND: "store.yaml_patch.key_not_found";
50
66
  };
51
67
  export type StoreRule = (typeof STORE_RULES)[keyof typeof STORE_RULES];
52
68
  export declare const STORE_RULE_PREFIXES: readonly ["store.repo_root.", "store.read.", "store.write.", "store.specs.", "store.waivers.", "store.registry.", "store.events.", "store.init."];
@@ -1 +1 @@
1
- {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/store/rules.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW;;;;IAOtB,+EAA+E;;;;IAI/E,0BAA0B;;IAE1B,0BAA0B;;;IAK1B,+EAA+E;;IAI/E,4EAA4E;;IAE5E,2EAA2E;;IAE3E,gDAAgD;;IAIhD,sEAAsE;;IAItE,8EAA8E;;IAE9E,kDAAkD;;IAElD,oDAAoD;;IAEpD,4CAA4C;;IAE5C,sEAAsE;;IAEtE,2DAA2D;;IAI3D,mEAAmE;;IAEnE,6EAA6E;;IAE7E,uEAAuE;;IAEvE,uEAAuE;;IAEvE,uEAAuE;;IAIvE,iEAAiE;;IAEjE,wEAAwE;;CAEhE,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEvE,eAAO,MAAM,mBAAmB,mJAStB,CAAC"}
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/store/rules.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW;;;;IAOtB,+EAA+E;;;;IAI/E,0BAA0B;;IAE1B,0BAA0B;;;IAK1B,+EAA+E;;IAI/E,4EAA4E;;IAE5E,2EAA2E;;IAE3E,gDAAgD;;IAIhD,sEAAsE;;IAItE,8EAA8E;;IAE9E,kDAAkD;;IAElD,oDAAoD;;IAEpD,4CAA4C;;IAE5C,sEAAsE;;IAEtE,2DAA2D;;IAI3D,mEAAmE;;IAEnE,6EAA6E;;IAE7E,uEAAuE;;IAEvE,uEAAuE;;IAEvE,uEAAuE;;IAIvE,iEAAiE;;IAEjE,wEAAwE;;IAIxE,yEAAyE;;IAEzE,0EAA0E;;IAE1E,gFAAgF;;IAEhF,0EAA0E;;IAG1E;8EAC0E;;IAG1E;2DACuD;;IAEvD,+EAA+E;;CAEvE,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEvE,eAAO,MAAM,mBAAmB,mJAStB,CAAC"}
@@ -64,6 +64,23 @@ exports.STORE_RULES = {
64
64
  INIT_LEGACY_RESIDUE: 'store.init.legacy_residue',
65
65
  /** init seeded a default policy that did not pass kernel validation. */
66
66
  INIT_DEFAULT_POLICY_INVALID: 'store.init.default_policy_invalid',
67
+ // ---- lifecycle mutation substrate (LIFECYCLE-MUTATION-001) -------------
68
+ /** Failed to acquire the global .caws/state.lock after bounded retry. */
69
+ LIFECYCLE_LOCK_CONTENTION: 'store.lifecycle.lock_contention',
70
+ /** Plan validation rejected the proposed transaction before any write. */
71
+ LIFECYCLE_PLAN_REJECTED: 'store.lifecycle.plan_rejected',
72
+ /** A planned file write failed; the transaction aborted before event append. */
73
+ LIFECYCLE_WRITE_FAILED: 'store.lifecycle.write_failed',
74
+ /** State writes succeeded but event append failed; rollback succeeded. */
75
+ LIFECYCLE_PARTIAL_FAILURE_RECOVERED: 'store.lifecycle.partial_failure_recovered',
76
+ /** State writes succeeded, event append failed, AND rollback also failed.
77
+ * Caller MUST handle the recovery instruction in the diagnostic data. */
78
+ LIFECYCLE_PARTIAL_FAILURE_UNRECOVERED: 'store.lifecycle.partial_failure_unrecovered',
79
+ /** yaml-patch refused an ambiguous mutation (e.g., duplicate top-level key,
80
+ * or a flow-style mapping at the target location). */
81
+ YAML_PATCH_AMBIGUOUS: 'store.yaml_patch.ambiguous',
82
+ /** yaml-patch refused because the target key was not found in the document. */
83
+ YAML_PATCH_KEY_NOT_FOUND: 'store.yaml_patch.key_not_found',
67
84
  };
68
85
  exports.STORE_RULE_PREFIXES = [
69
86
  'store.repo_root.',
@@ -1 +1 @@
1
- {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/store/rules.ts"],"names":[],"mappings":";AAAA,yDAAyD;AACzD,EAAE;AACF,yEAAyE;AACzE,qEAAqE;AACrE,wEAAwE;AACxE,wEAAwE;;;AAE3D,QAAA,WAAW,GAAG;IACzB,4EAA4E;IAC5E,wBAAwB,EAAE,gCAAgC;IAC1D,+BAA+B,EAAE,uCAAuC;IACxE,0BAA0B,EAAE,kCAAkC;IAE9D,6EAA6E;IAC7E,+EAA+E;IAC/E,iBAAiB,EAAE,yBAAyB;IAC5C,eAAe,EAAE,uBAAuB;IACxC,cAAc,EAAE,sBAAsB;IACtC,0BAA0B;IAC1B,iBAAiB,EAAE,yBAAyB;IAC5C,0BAA0B;IAC1B,iBAAiB,EAAE,yBAAyB;IAE5C,6EAA6E;IAC7E,eAAe,EAAE,uBAAuB;IACxC,+EAA+E;IAC/E,0BAA0B,EAAE,kCAAkC;IAE9D,6EAA6E;IAC7E,4EAA4E;IAC5E,kBAAkB,EAAE,0BAA0B;IAC9C,2EAA2E;IAC3E,sBAAsB,EAAE,8BAA8B;IACtD,gDAAgD;IAChD,kBAAkB,EAAE,0BAA0B;IAE9C,4EAA4E;IAC5E,sEAAsE;IACtE,mBAAmB,EAAE,2BAA2B;IAEhD,4EAA4E;IAC5E,8EAA8E;IAC9E,oBAAoB,EAAE,4BAA4B;IAClD,kDAAkD;IAClD,wBAAwB,EAAE,gCAAgC;IAC1D,oDAAoD;IACpD,oBAAoB,EAAE,4BAA4B;IAClD,4CAA4C;IAC5C,yBAAyB,EAAE,iCAAiC;IAC5D,sEAAsE;IACtE,sBAAsB,EAAE,8BAA8B;IACtD,2DAA2D;IAC3D,iBAAiB,EAAE,yBAAyB;IAE5C,4EAA4E;IAC5E,mEAAmE;IACnE,8BAA8B,EAAE,sCAAsC;IACtE,6EAA6E;IAC7E,4BAA4B,EAAE,oCAAoC;IAClE,uEAAuE;IACvE,0BAA0B,EAAE,kCAAkC;IAC9D,uEAAuE;IACvE,sBAAsB,EAAE,8BAA8B;IACtD,uEAAuE;IACvE,8BAA8B,EAAE,sCAAsC;IAEtE,4EAA4E;IAC5E,iEAAiE;IACjE,mBAAmB,EAAE,2BAA2B;IAChD,wEAAwE;IACxE,2BAA2B,EAAE,mCAAmC;CACxD,CAAC;AAIE,QAAA,mBAAmB,GAAG;IACjC,kBAAkB;IAClB,aAAa;IACb,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,iBAAiB;IACjB,eAAe;IACf,aAAa;CACL,CAAC"}
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/store/rules.ts"],"names":[],"mappings":";AAAA,yDAAyD;AACzD,EAAE;AACF,yEAAyE;AACzE,qEAAqE;AACrE,wEAAwE;AACxE,wEAAwE;;;AAE3D,QAAA,WAAW,GAAG;IACzB,4EAA4E;IAC5E,wBAAwB,EAAE,gCAAgC;IAC1D,+BAA+B,EAAE,uCAAuC;IACxE,0BAA0B,EAAE,kCAAkC;IAE9D,6EAA6E;IAC7E,+EAA+E;IAC/E,iBAAiB,EAAE,yBAAyB;IAC5C,eAAe,EAAE,uBAAuB;IACxC,cAAc,EAAE,sBAAsB;IACtC,0BAA0B;IAC1B,iBAAiB,EAAE,yBAAyB;IAC5C,0BAA0B;IAC1B,iBAAiB,EAAE,yBAAyB;IAE5C,6EAA6E;IAC7E,eAAe,EAAE,uBAAuB;IACxC,+EAA+E;IAC/E,0BAA0B,EAAE,kCAAkC;IAE9D,6EAA6E;IAC7E,4EAA4E;IAC5E,kBAAkB,EAAE,0BAA0B;IAC9C,2EAA2E;IAC3E,sBAAsB,EAAE,8BAA8B;IACtD,gDAAgD;IAChD,kBAAkB,EAAE,0BAA0B;IAE9C,4EAA4E;IAC5E,sEAAsE;IACtE,mBAAmB,EAAE,2BAA2B;IAEhD,4EAA4E;IAC5E,8EAA8E;IAC9E,oBAAoB,EAAE,4BAA4B;IAClD,kDAAkD;IAClD,wBAAwB,EAAE,gCAAgC;IAC1D,oDAAoD;IACpD,oBAAoB,EAAE,4BAA4B;IAClD,4CAA4C;IAC5C,yBAAyB,EAAE,iCAAiC;IAC5D,sEAAsE;IACtE,sBAAsB,EAAE,8BAA8B;IACtD,2DAA2D;IAC3D,iBAAiB,EAAE,yBAAyB;IAE5C,4EAA4E;IAC5E,mEAAmE;IACnE,8BAA8B,EAAE,sCAAsC;IACtE,6EAA6E;IAC7E,4BAA4B,EAAE,oCAAoC;IAClE,uEAAuE;IACvE,0BAA0B,EAAE,kCAAkC;IAC9D,uEAAuE;IACvE,sBAAsB,EAAE,8BAA8B;IACtD,uEAAuE;IACvE,8BAA8B,EAAE,sCAAsC;IAEtE,4EAA4E;IAC5E,iEAAiE;IACjE,mBAAmB,EAAE,2BAA2B;IAChD,wEAAwE;IACxE,2BAA2B,EAAE,mCAAmC;IAEhE,2EAA2E;IAC3E,yEAAyE;IACzE,yBAAyB,EAAE,iCAAiC;IAC5D,0EAA0E;IAC1E,uBAAuB,EAAE,+BAA+B;IACxD,gFAAgF;IAChF,sBAAsB,EAAE,8BAA8B;IACtD,0EAA0E;IAC1E,mCAAmC,EACjC,2CAA2C;IAC7C;8EAC0E;IAC1E,qCAAqC,EACnC,6CAA6C;IAC/C;2DACuD;IACvD,oBAAoB,EAAE,4BAA4B;IAClD,+EAA+E;IAC/E,wBAAwB,EAAE,gCAAgC;CAClD,CAAC;AAIE,QAAA,mBAAmB,GAAG;IACjC,kBAAkB;IAClB,aAAa;IACb,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,iBAAiB;IACjB,eAAe;IACf,aAAa;CACL,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { type EventBody, type Result, type Spec, type Diagnostic } from '@paths.design/caws-kernel';
2
+ export interface CreateSpecInput {
3
+ readonly id: string;
4
+ readonly title: string;
5
+ readonly mode: 'feature' | 'refactor' | 'fix' | 'doc' | 'chore';
6
+ readonly riskTier: 1 | 2 | 3;
7
+ /** Initial state. v11.1 defaults to active. */
8
+ readonly initialState?: 'active' | 'draft';
9
+ /** Override the timestamp used for created_at + the event ts. Tests inject. */
10
+ readonly now?: () => Date;
11
+ /** The EventBody actor envelope (built by the shell layer). */
12
+ readonly actor: EventBody['actor'];
13
+ }
14
+ export interface CloseSpecInput {
15
+ readonly id: string;
16
+ readonly resolution: 'completed' | 'superseded' | 'abandoned';
17
+ readonly reason?: string;
18
+ readonly mergeCommit?: string;
19
+ readonly supersededBy?: string;
20
+ readonly now?: () => Date;
21
+ readonly actor: EventBody['actor'];
22
+ }
23
+ export interface ArchiveSpecInput {
24
+ readonly id: string;
25
+ readonly reason?: string;
26
+ readonly now?: () => Date;
27
+ readonly actor: EventBody['actor'];
28
+ }
29
+ export type SpecWriterOutcome = {
30
+ readonly kind: 'success';
31
+ readonly id: string;
32
+ readonly path: string;
33
+ } | {
34
+ readonly kind: 'partial_failure_recovered';
35
+ readonly cause: readonly Diagnostic[];
36
+ };
37
+ export declare function createSpec(cawsDir: string, input: CreateSpecInput): Result<SpecWriterOutcome>;
38
+ export declare function closeSpec(cawsDir: string, input: CloseSpecInput): Result<SpecWriterOutcome>;
39
+ export declare function archiveSpec(cawsDir: string, input: ArchiveSpecInput): Result<SpecWriterOutcome>;
40
+ export interface SpecsListEntry {
41
+ readonly id: string;
42
+ readonly title: string;
43
+ readonly lifecycle_state: string;
44
+ readonly path: string;
45
+ }
46
+ export interface SpecsListResult {
47
+ readonly active: readonly SpecsListEntry[];
48
+ readonly archived: readonly SpecsListEntry[];
49
+ }
50
+ /** List specs by lifecycle state, optionally including archived ones. */
51
+ export declare function listSpecs(cawsDir: string, options?: {
52
+ readonly includeArchived?: boolean;
53
+ }): Result<SpecsListResult>;
54
+ /** Find a spec by id under active or archive locations. */
55
+ export declare function showSpec(cawsDir: string, id: string): Result<{
56
+ readonly spec: Spec;
57
+ readonly path: string;
58
+ readonly source: string;
59
+ }>;
60
+ export type { EventBody };
61
+ //# sourceMappingURL=specs-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specs-writer.d.ts","sourceRoot":"","sources":["../../src/store/specs-writer.ts"],"names":[],"mappings":"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"}