@jcr-adk/cli 2.0.0

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 (107) hide show
  1. package/LICENSE +201 -0
  2. package/bin/jcr-adk.mjs +8 -0
  3. package/dist/argv.d.ts +10 -0
  4. package/dist/argv.d.ts.map +1 -0
  5. package/dist/argv.js +56 -0
  6. package/dist/argv.js.map +1 -0
  7. package/dist/audit-summary.d.ts +28 -0
  8. package/dist/audit-summary.d.ts.map +1 -0
  9. package/dist/audit-summary.js +39 -0
  10. package/dist/audit-summary.js.map +1 -0
  11. package/dist/commands/audit.d.ts +8 -0
  12. package/dist/commands/audit.d.ts.map +1 -0
  13. package/dist/commands/audit.js +20 -0
  14. package/dist/commands/audit.js.map +1 -0
  15. package/dist/commands/doctor.d.ts +8 -0
  16. package/dist/commands/doctor.d.ts.map +1 -0
  17. package/dist/commands/doctor.js +25 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/explain-fail.d.ts +8 -0
  20. package/dist/commands/explain-fail.d.ts.map +1 -0
  21. package/dist/commands/explain-fail.js +41 -0
  22. package/dist/commands/explain-fail.js.map +1 -0
  23. package/dist/commands/gate.d.ts +8 -0
  24. package/dist/commands/gate.d.ts.map +1 -0
  25. package/dist/commands/gate.js +104 -0
  26. package/dist/commands/gate.js.map +1 -0
  27. package/dist/commands/handoff.d.ts +8 -0
  28. package/dist/commands/handoff.d.ts.map +1 -0
  29. package/dist/commands/handoff.js +61 -0
  30. package/dist/commands/handoff.js.map +1 -0
  31. package/dist/commands/init.d.ts +8 -0
  32. package/dist/commands/init.d.ts.map +1 -0
  33. package/dist/commands/init.js +48 -0
  34. package/dist/commands/init.js.map +1 -0
  35. package/dist/commands/plan.d.ts +8 -0
  36. package/dist/commands/plan.d.ts.map +1 -0
  37. package/dist/commands/plan.js +55 -0
  38. package/dist/commands/plan.js.map +1 -0
  39. package/dist/commands/replay.d.ts +8 -0
  40. package/dist/commands/replay.d.ts.map +1 -0
  41. package/dist/commands/replay.js +39 -0
  42. package/dist/commands/replay.js.map +1 -0
  43. package/dist/commands/review-pack.d.ts +8 -0
  44. package/dist/commands/review-pack.d.ts.map +1 -0
  45. package/dist/commands/review-pack.js +64 -0
  46. package/dist/commands/review-pack.js.map +1 -0
  47. package/dist/commands/run.d.ts +8 -0
  48. package/dist/commands/run.d.ts.map +1 -0
  49. package/dist/commands/run.js +205 -0
  50. package/dist/commands/run.js.map +1 -0
  51. package/dist/commands/sync.d.ts +8 -0
  52. package/dist/commands/sync.d.ts.map +1 -0
  53. package/dist/commands/sync.js +133 -0
  54. package/dist/commands/sync.js.map +1 -0
  55. package/dist/commands/tool.d.ts +12 -0
  56. package/dist/commands/tool.d.ts.map +1 -0
  57. package/dist/commands/tool.js +154 -0
  58. package/dist/commands/tool.js.map +1 -0
  59. package/dist/event-reader.d.ts +28 -0
  60. package/dist/event-reader.d.ts.map +1 -0
  61. package/dist/event-reader.js +39 -0
  62. package/dist/event-reader.js.map +1 -0
  63. package/dist/explain-fail-summary.d.ts +46 -0
  64. package/dist/explain-fail-summary.d.ts.map +1 -0
  65. package/dist/explain-fail-summary.js +405 -0
  66. package/dist/explain-fail-summary.js.map +1 -0
  67. package/dist/handlers.d.ts +134 -0
  68. package/dist/handlers.d.ts.map +1 -0
  69. package/dist/handlers.js +257 -0
  70. package/dist/handlers.js.map +1 -0
  71. package/dist/handoff-summary.d.ts +62 -0
  72. package/dist/handoff-summary.d.ts.map +1 -0
  73. package/dist/handoff-summary.js +170 -0
  74. package/dist/handoff-summary.js.map +1 -0
  75. package/dist/index.d.ts +11 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +6 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/lifecycle-artifacts.d.ts +62 -0
  80. package/dist/lifecycle-artifacts.d.ts.map +1 -0
  81. package/dist/lifecycle-artifacts.js +160 -0
  82. package/dist/lifecycle-artifacts.js.map +1 -0
  83. package/dist/main.d.ts +30 -0
  84. package/dist/main.d.ts.map +1 -0
  85. package/dist/main.js +159 -0
  86. package/dist/main.js.map +1 -0
  87. package/dist/permissions.d.ts +42 -0
  88. package/dist/permissions.d.ts.map +1 -0
  89. package/dist/permissions.js +57 -0
  90. package/dist/permissions.js.map +1 -0
  91. package/dist/replay-summary.d.ts +28 -0
  92. package/dist/replay-summary.d.ts.map +1 -0
  93. package/dist/replay-summary.js +73 -0
  94. package/dist/replay-summary.js.map +1 -0
  95. package/dist/review-pack-summary.d.ts +67 -0
  96. package/dist/review-pack-summary.d.ts.map +1 -0
  97. package/dist/review-pack-summary.js +199 -0
  98. package/dist/review-pack-summary.js.map +1 -0
  99. package/dist/session-run.d.ts +62 -0
  100. package/dist/session-run.d.ts.map +1 -0
  101. package/dist/session-run.js +112 -0
  102. package/dist/session-run.js.map +1 -0
  103. package/dist/session.d.ts +24 -0
  104. package/dist/session.d.ts.map +1 -0
  105. package/dist/session.js +37 -0
  106. package/dist/session.js.map +1 -0
  107. package/package.json +41 -0
@@ -0,0 +1,405 @@
1
+ /**
2
+ * Explain-fail summary — DAC-008 / Recovery plane read-only diagnostics.
3
+ *
4
+ * Reuses replay event shapes; does not mutate workspace state (CMD-02R).
5
+ * SEC-18: `evidenceLabel` distinguishes JSONL-observed facts from heuristic guidance.
6
+ */
7
+ import { buildReplaySummary } from "./replay-summary.js";
8
+ function payloadOf(event) {
9
+ return event.payload;
10
+ }
11
+ function filterBySpec(events, specId) {
12
+ if (!specId)
13
+ return [...events];
14
+ return events.filter((event) => event.specId === specId);
15
+ }
16
+ /** Resolve positional target as gateId (gate.report match) or runId (event correlation). */
17
+ export function resolveExplainTarget(events, targetId, specId) {
18
+ const scoped = filterBySpec(events, specId);
19
+ const gateEvents = scoped.filter((event) => {
20
+ if (event.kind !== "gate.report")
21
+ return false;
22
+ const gateId = payloadOf(event).gateId;
23
+ return typeof gateId === "string" && gateId === targetId;
24
+ });
25
+ if (gateEvents.length > 0) {
26
+ return { kind: "gate", gateId: targetId, events: gateEvents };
27
+ }
28
+ const runEvents = scoped.filter((event) => event.runId === targetId);
29
+ if (runEvents.length > 0) {
30
+ return { kind: "run", runId: targetId, events: runEvents };
31
+ }
32
+ return { kind: "not_found" };
33
+ }
34
+ function latestGateEvent(events) {
35
+ return [...events].sort((a, b) => a.seq - b.seq).at(-1);
36
+ }
37
+ function buildRerunCommands(input) {
38
+ const workspaceFlag = `--workspace ${JSON.stringify(input.workspaceRoot)}`;
39
+ const commands = [];
40
+ if (input.specId && input.runId) {
41
+ commands.push(`jcr-adk replay ${input.runId} --spec-id ${input.specId} ${workspaceFlag}`, `jcr-adk audit ${input.specId} --run-id ${input.runId} ${workspaceFlag}`);
42
+ }
43
+ else if (input.specId) {
44
+ commands.push(`jcr-adk audit ${input.specId} ${workspaceFlag}`);
45
+ }
46
+ if (input.failureKind === "gate" && input.specId && input.gateId) {
47
+ commands.push(`jcr-adk gate ${input.specId} --gate-id ${input.gateId} --acceptance-file .jcr-adk/specs/${input.specId}/acceptance.json ${workspaceFlag}`);
48
+ }
49
+ if (input.failureKind === "policy" && input.specId) {
50
+ if (input.shellCommand && input.toolName) {
51
+ const runIdFlag = input.runId ? ` --run-id ${input.runId}` : "";
52
+ commands.push(`jcr-adk tool ${input.toolName} --spec-id ${input.specId}${runIdFlag} --shell-command ${JSON.stringify(input.shellCommand)} --approve ${workspaceFlag}`);
53
+ }
54
+ commands.push(`jcr-adk run --spec-id ${input.specId} --dry-run ${workspaceFlag}`);
55
+ }
56
+ if (input.failureKind === "run" && input.specId) {
57
+ commands.push(`jcr-adk run --spec-id ${input.specId} --dry-run ${workspaceFlag}`);
58
+ }
59
+ return commands;
60
+ }
61
+ function policyGuidance(ruleId) {
62
+ if (ruleId.startsWith("AC-008") || ruleId.includes("SHELL")) {
63
+ return {
64
+ possibleCauses: [
65
+ "Destructive or package-manager shell command blocked by policy (AC-008)",
66
+ "Command requires explicit --approve when tier is approval-required",
67
+ ],
68
+ nextActions: [
69
+ "Review the denied shell command and use a safer alternative",
70
+ "If intentional, re-run with --approve after human review",
71
+ "Inspect policy.denied events via jcr-adk audit",
72
+ ],
73
+ };
74
+ }
75
+ if (ruleId.startsWith("CMD-02R") || ruleId.startsWith("CMD-")) {
76
+ return {
77
+ possibleCauses: ["Read/report command attempted lifecycle mutation (CMD-02R)"],
78
+ nextActions: ["Use lifecycle commands (run/sync/gate) for state changes", "Keep audit/replay/explain-fail read-only"],
79
+ };
80
+ }
81
+ return {
82
+ possibleCauses: [`Policy rule ${ruleId} denied the action`],
83
+ nextActions: ["Review policy rule and adjust the requested action", "Run jcr-adk audit for full policy timeline"],
84
+ };
85
+ }
86
+ function explainGateFailure(gateEvents, gateId, workspaceRoot) {
87
+ const latest = latestGateEvent(gateEvents);
88
+ const payload = payloadOf(latest);
89
+ const result = String(payload.result ?? "UNKNOWN");
90
+ const reportHash = typeof payload.reportHash === "string" ? payload.reportHash : undefined;
91
+ const specId = latest.specId;
92
+ const runId = latest.runId;
93
+ if (result === "PASS") {
94
+ return {
95
+ target: { kind: "gate", id: gateId },
96
+ specId,
97
+ runId,
98
+ failureKind: "none",
99
+ primaryCause: `Gate ${gateId} last reported PASS — no failure to explain`,
100
+ impact: {},
101
+ possibleCauses: [],
102
+ nextActions: ["No recovery action required for this gate"],
103
+ rerunCommands: buildRerunCommands({ workspaceRoot, specId, runId, gateId, failureKind: "none" }),
104
+ evidenceLabel: "observed",
105
+ };
106
+ }
107
+ const possibleCauses = [];
108
+ const nextActions = [];
109
+ const acceptanceItems = [];
110
+ if (reportHash === "none:gate-not-passed") {
111
+ possibleCauses.push("Acceptance items failed or evidence paths missing (G-03)");
112
+ nextActions.push("Fix acceptance items: ensure evidencePath is non-empty and passed=true");
113
+ nextActions.push("Re-run gate after evidence is updated");
114
+ }
115
+ if (result === "TIMEOUT") {
116
+ possibleCauses.push("Gate checker exceeded timeout (G-05 fail-closed)");
117
+ nextActions.push("Reduce checker scope or increase gate timeout in gate runner options");
118
+ }
119
+ if (result === "ERROR") {
120
+ possibleCauses.push("Gate checker raised an unexpected error");
121
+ nextActions.push("Inspect gate runner logs and acceptance evidence artifacts");
122
+ }
123
+ if (possibleCauses.length === 0) {
124
+ possibleCauses.push(`Gate ${gateId} reported ${result}`);
125
+ nextActions.push("Review acceptance criteria and evidence artifacts");
126
+ nextActions.push("Re-run gate after fixes");
127
+ }
128
+ const primaryCause = reportHash === "none:gate-not-passed"
129
+ ? `Gate ${gateId} reported ${result} before report sealing (G-02/G-03)`
130
+ : `Gate ${gateId} reported ${result}`;
131
+ return {
132
+ target: { kind: "gate", id: gateId },
133
+ specId,
134
+ runId,
135
+ failureKind: "gate",
136
+ primaryCause,
137
+ impact: {
138
+ acceptanceItems: acceptanceItems.length > 0 ? acceptanceItems : undefined,
139
+ relatedFiles: reportHash ? [reportHash] : undefined,
140
+ },
141
+ possibleCauses,
142
+ nextActions,
143
+ rerunCommands: buildRerunCommands({ workspaceRoot, specId, runId, gateId, failureKind: "gate" }),
144
+ evidenceLabel: reportHash === "none:gate-not-passed" ? "observed" : "inferred",
145
+ };
146
+ }
147
+ function latestGateReportPerId(events) {
148
+ const latestByGateId = new Map();
149
+ const ordered = [...events].sort((a, b) => a.seq - b.seq);
150
+ for (const event of ordered) {
151
+ if (event.kind !== "gate.report")
152
+ continue;
153
+ const gateId = payloadOf(event).gateId;
154
+ if (typeof gateId !== "string")
155
+ continue;
156
+ const existing = latestByGateId.get(gateId);
157
+ if (!existing || event.timestamp >= existing.timestamp) {
158
+ latestByGateId.set(gateId, event);
159
+ }
160
+ }
161
+ return latestByGateId;
162
+ }
163
+ function findActiveRunFailure(events) {
164
+ const ordered = [...events].sort((a, b) => a.seq - b.seq);
165
+ for (const event of ordered) {
166
+ if (event.kind === "run.failed")
167
+ return { kind: "run", event };
168
+ }
169
+ let failingGate;
170
+ for (const event of latestGateReportPerId(events).values()) {
171
+ const result = String(payloadOf(event).result ?? "");
172
+ if (result === "PASS")
173
+ continue;
174
+ if (!failingGate || event.timestamp >= failingGate.timestamp) {
175
+ failingGate = event;
176
+ }
177
+ }
178
+ if (failingGate)
179
+ return { kind: "gate", event: failingGate };
180
+ for (const event of ordered) {
181
+ if (event.kind === "tool.failed")
182
+ return { kind: "tool", event };
183
+ }
184
+ for (const event of ordered) {
185
+ if (event.kind === "policy.denied")
186
+ return { kind: "policy", event };
187
+ }
188
+ let lastApprovalIdx = -1;
189
+ for (let i = ordered.length - 1; i >= 0; i--) {
190
+ if (ordered[i].kind === "policy.approval.required") {
191
+ lastApprovalIdx = i;
192
+ break;
193
+ }
194
+ }
195
+ if (lastApprovalIdx >= 0) {
196
+ const holdEvent = ordered[lastApprovalIdx];
197
+ const holdPayload = payloadOf(holdEvent);
198
+ const holdRuleId = typeof holdPayload.ruleId === "string" ? holdPayload.ruleId : undefined;
199
+ const holdShell = typeof holdPayload.shellCommand === "string" ? holdPayload.shellCommand : undefined;
200
+ const afterHold = ordered.slice(lastApprovalIdx + 1);
201
+ const resolved = afterHold.some((event) => {
202
+ if (event.kind !== "policy.approved")
203
+ return false;
204
+ const approved = payloadOf(event);
205
+ if (holdRuleId && approved.ruleId !== holdRuleId)
206
+ return false;
207
+ if (holdShell &&
208
+ typeof approved.shellCommand === "string" &&
209
+ approved.shellCommand !== holdShell) {
210
+ return false;
211
+ }
212
+ return true;
213
+ });
214
+ if (!resolved) {
215
+ return { kind: "approval", event: holdEvent };
216
+ }
217
+ }
218
+ return undefined;
219
+ }
220
+ function countApprovalHolds(events) {
221
+ return events.filter((event) => event.kind === "policy.approval.required").length;
222
+ }
223
+ function toolNameBeforeEvent(events, targetSeq) {
224
+ const invoked = [...events]
225
+ .filter((event) => event.seq < targetSeq && event.kind === "tool.invoked")
226
+ .sort((a, b) => b.seq - a.seq);
227
+ for (const event of invoked) {
228
+ const toolName = payloadOf(event).toolName;
229
+ if (typeof toolName === "string")
230
+ return toolName;
231
+ }
232
+ return undefined;
233
+ }
234
+ function explainRunFailure(allEvents, runEvents, runId, specId, workspaceRoot) {
235
+ const replay = buildReplaySummary(allEvents, runId, specId);
236
+ const resolvedSpecId = specId ?? replay.specId;
237
+ const failure = findActiveRunFailure(runEvents);
238
+ if (!failure && replay.status === "completed" && replay.policyDenialCount === 0) {
239
+ return {
240
+ target: { kind: "run", id: runId },
241
+ specId: resolvedSpecId,
242
+ runId,
243
+ failureKind: "none",
244
+ primaryCause: `Run ${runId} completed without recorded failures`,
245
+ impact: { affectedTools: replay.toolsInvoked },
246
+ possibleCauses: [],
247
+ nextActions: ["No recovery action required for this run"],
248
+ rerunCommands: buildRerunCommands({
249
+ workspaceRoot,
250
+ specId: resolvedSpecId,
251
+ runId,
252
+ failureKind: "none",
253
+ }),
254
+ evidenceLabel: "observed",
255
+ };
256
+ }
257
+ if (!failure) {
258
+ return {
259
+ target: { kind: "run", id: runId },
260
+ specId: resolvedSpecId,
261
+ runId,
262
+ failureKind: replay.policyDenialCount > 0 ? "policy" : "none",
263
+ primaryCause: replay.policyDenialCount > 0
264
+ ? `Run ${runId} has ${replay.policyDenialCount} policy denial(s) but no terminal failure event`
265
+ : `Run ${runId} has no explicit failure signal in JSONL timeline`,
266
+ impact: {
267
+ affectedTools: replay.toolsInvoked,
268
+ policyDenialCount: replay.policyDenialCount > 0 ? replay.policyDenialCount : undefined,
269
+ },
270
+ possibleCauses: replay.policyDenialCount > 0
271
+ ? ["Policy denied one or more actions during the run"]
272
+ : ["Run may still be in progress or events are incomplete"],
273
+ nextActions: ["Inspect full timeline with jcr-adk replay", "Run jcr-adk audit for policy details"],
274
+ rerunCommands: buildRerunCommands({
275
+ workspaceRoot,
276
+ specId: resolvedSpecId,
277
+ runId,
278
+ failureKind: replay.policyDenialCount > 0 ? "policy" : "run",
279
+ }),
280
+ evidenceLabel: "observed",
281
+ };
282
+ }
283
+ const payload = payloadOf(failure.event);
284
+ if (failure.kind === "policy" || failure.kind === "approval") {
285
+ const ruleId = typeof payload.ruleId === "string" ? payload.ruleId : "UNKNOWN";
286
+ const reason = typeof payload.reason === "string" ? payload.reason : "policy denied";
287
+ const guidance = policyGuidance(ruleId);
288
+ const shellCommand = typeof payload.shellCommand === "string" ? payload.shellCommand : undefined;
289
+ const isApprovalHold = failure.kind === "approval";
290
+ const heldToolName = isApprovalHold
291
+ ? toolNameBeforeEvent(runEvents, failure.event.seq)
292
+ : undefined;
293
+ return {
294
+ target: { kind: "run", id: runId },
295
+ specId: resolvedSpecId,
296
+ runId,
297
+ failureKind: "policy",
298
+ primaryCause: isApprovalHold
299
+ ? `Policy approval hold (${ruleId}): ${reason}`
300
+ : `Policy denied (${ruleId}): ${reason}`,
301
+ impact: {
302
+ policyDenialCount: isApprovalHold
303
+ ? countApprovalHolds(runEvents)
304
+ : replay.policyDenialCount,
305
+ relatedFiles: typeof payload.targetPath === "string" ? [payload.targetPath] : undefined,
306
+ affectedTools: typeof payload.action === "string" ? [payload.action] : undefined,
307
+ },
308
+ possibleCauses: isApprovalHold
309
+ ? [
310
+ "Shell command matched approval-required tier (AC-008)",
311
+ ...(shellCommand ? [`Held shell command: ${shellCommand}`] : []),
312
+ ]
313
+ : [
314
+ ...guidance.possibleCauses,
315
+ ...(shellCommand ? [`Denied shell command: ${shellCommand}`] : []),
316
+ ],
317
+ nextActions: isApprovalHold
318
+ ? [
319
+ "Review the held command and confirm it is safe",
320
+ "Re-run with --approve after human review",
321
+ "Inspect policy.approval.required events via jcr-adk audit",
322
+ ]
323
+ : guidance.nextActions,
324
+ rerunCommands: buildRerunCommands({
325
+ workspaceRoot,
326
+ specId: resolvedSpecId,
327
+ runId,
328
+ failureKind: "policy",
329
+ shellCommand,
330
+ toolName: heldToolName,
331
+ }),
332
+ evidenceLabel: "observed",
333
+ };
334
+ }
335
+ if (failure.kind === "tool") {
336
+ const toolName = typeof payload.toolName === "string" ? payload.toolName : "unknown-tool";
337
+ const error = typeof payload.error === "string" ? payload.error : "tool execution failed";
338
+ return {
339
+ target: { kind: "run", id: runId },
340
+ specId: resolvedSpecId,
341
+ runId,
342
+ failureKind: "tool",
343
+ primaryCause: `Tool ${toolName} failed: ${error}`,
344
+ impact: { affectedTools: [toolName] },
345
+ possibleCauses: [
346
+ "Guarded tool executor rejected or errored during execution",
347
+ "Missing --target-path or invalid tool arguments",
348
+ ],
349
+ nextActions: [
350
+ "Review tool arguments and workspace paths",
351
+ "Re-run with jcr-adk tool after fixing inputs",
352
+ "Inspect tool.invoked / tool.failed events via replay",
353
+ ],
354
+ rerunCommands: buildRerunCommands({
355
+ workspaceRoot,
356
+ specId: resolvedSpecId,
357
+ runId,
358
+ failureKind: "run",
359
+ }),
360
+ evidenceLabel: "observed",
361
+ };
362
+ }
363
+ if (failure.kind === "gate") {
364
+ const gateId = typeof payload.gateId === "string" ? payload.gateId : "UNKNOWN-GATE";
365
+ const gateEvents = runEvents.filter((event) => {
366
+ if (event.kind !== "gate.report")
367
+ return false;
368
+ return payloadOf(event).gateId === gateId;
369
+ });
370
+ return explainGateFailure(gateEvents, gateId, workspaceRoot);
371
+ }
372
+ const runReason = typeof payload.reason === "string" ? payload.reason : "run failed";
373
+ return {
374
+ target: { kind: "run", id: runId },
375
+ specId: resolvedSpecId,
376
+ runId,
377
+ failureKind: "run",
378
+ primaryCause: `Run ${runId} failed: ${runReason}`,
379
+ impact: { affectedTools: replay.toolsInvoked },
380
+ possibleCauses: ["Runner or SDK bridge reported run.failed"],
381
+ nextActions: [
382
+ "Review run.failed payload in JSONL audit log",
383
+ "Fix underlying error and re-run with jcr-adk run",
384
+ ],
385
+ rerunCommands: buildRerunCommands({
386
+ workspaceRoot,
387
+ specId: resolvedSpecId,
388
+ runId,
389
+ failureKind: "run",
390
+ }),
391
+ evidenceLabel: "observed",
392
+ };
393
+ }
394
+ /** Build structured explain-fail output from workspace events (read-only). */
395
+ export function buildExplainFailSummary(events, targetId, workspaceRoot, specId) {
396
+ const resolution = resolveExplainTarget(events, targetId, specId);
397
+ if (resolution.kind === "not_found") {
398
+ return null;
399
+ }
400
+ if (resolution.kind === "gate") {
401
+ return explainGateFailure(resolution.events, resolution.gateId, workspaceRoot);
402
+ }
403
+ return explainRunFailure(events, resolution.events, resolution.runId, specId, workspaceRoot);
404
+ }
405
+ //# sourceMappingURL=explain-fail-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain-fail-summary.js","sourceRoot":"","sources":["../src/explain-fail-summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * CLI command handler skeletons — E6 / CMD-02R.
3
+ *
4
+ * Core-stage handlers:
5
+ * - `doctor`: read-only, no state mutation.
6
+ * - `gate`: verifier-controlled mutation only (runs gate, may update status).
7
+ * - `audit`: read-only event/gate/policy summary (CMD-03R / F-12).
8
+ * - `replay`: read-only JSONL replay summary (SR-09 / F-02).
9
+ * - `explain-fail`: read-only failure explanation (DAC-008).
10
+ * - `handoff`: read-only handoff package (DAC-006).
11
+ * - `review-pack`: read-only reviewer evidence bundle (DAC-007).
12
+ *
13
+ * Lifecycle init/plan/run/sync are in commands/*.ts.
14
+ */
15
+ import type { DoctorReport } from "@jcr-adk/doctor";
16
+ import type { GateResult, GateRunInput, GateRunResult } from "@jcr-adk/verifier";
17
+ import { type AuditSummary } from "./audit-summary.js";
18
+ import { type ExplainFailSummary } from "./explain-fail-summary.js";
19
+ import { type HandoffPackage } from "./handoff-summary.js";
20
+ import { type ReviewPackBundle } from "./review-pack-summary.js";
21
+ import { type ReplaySummary } from "./replay-summary.js";
22
+ type BlockingGateResult = Exclude<GateResult, "PASS">;
23
+ export interface DoctorHandlerInput {
24
+ readonly workspaceRoot: string;
25
+ /** Injected DoctorReport (produced by packages/doctor at runtime). */
26
+ readonly report: DoctorReport;
27
+ }
28
+ export interface DoctorHandlerResult {
29
+ readonly ok: boolean;
30
+ readonly report: DoctorReport;
31
+ }
32
+ /**
33
+ * `jcr-adk doctor` handler — read-only.
34
+ * Guards against any lifecycle state mutation attempts (CMD-02R).
35
+ */
36
+ export declare function runDoctorHandler(input: DoctorHandlerInput): DoctorHandlerResult;
37
+ export interface GateHandlerInput extends GateRunInput {
38
+ readonly workspaceRoot: string;
39
+ }
40
+ export type GateHandlerResult = {
41
+ readonly ok: true;
42
+ readonly gateResult: "PASS";
43
+ readonly gateRun: GateRunResult & {
44
+ ok: true;
45
+ };
46
+ } | {
47
+ readonly ok: false;
48
+ readonly gateResult: BlockingGateResult;
49
+ readonly reason: string;
50
+ };
51
+ /**
52
+ * `jcr-adk gate` handler — verifier-controlled mutation.
53
+ * Runs the gate, and:
54
+ * - PASS → caller may proceed with lifecycle mutation (G-02 check passes).
55
+ * - FAIL/TIMEOUT/ERROR → blocks mutation and returns reason.
56
+ *
57
+ * The handler itself does NOT write to the event store; it returns the run
58
+ * result so the caller can emit policy.denied / gate.completed events in the
59
+ * correct EVENT_FIRST_WRITE_ORDERING.
60
+ */
61
+ export declare function runGateHandler(input: GateHandlerInput): Promise<GateHandlerResult>;
62
+ export interface AuditHandlerInput {
63
+ readonly workspaceRoot: string;
64
+ readonly specId?: string;
65
+ readonly runId?: string;
66
+ }
67
+ export interface AuditHandlerResult {
68
+ readonly ok: boolean;
69
+ readonly summary: AuditSummary;
70
+ /** Set when the event log could not be read (corrupt/IO) — fail-closed. */
71
+ readonly error?: string;
72
+ }
73
+ /** `jcr-adk audit` — read-only event/gate/policy summary. */
74
+ export declare function runAuditHandler(input: AuditHandlerInput): Promise<AuditHandlerResult>;
75
+ export interface ReplayHandlerInput {
76
+ readonly workspaceRoot: string;
77
+ readonly runId: string;
78
+ readonly specId?: string;
79
+ }
80
+ export type ReplayFailureReason = "READ_ERROR" | "NO_EVENTS";
81
+ export interface ReplayHandlerResult {
82
+ readonly ok: boolean;
83
+ readonly summary: ReplaySummary;
84
+ /** Why replay failed, when ok is false. */
85
+ readonly reason?: ReplayFailureReason;
86
+ /** Set when the event log could not be read (corrupt/IO) — fail-closed. */
87
+ readonly error?: string;
88
+ }
89
+ /** `jcr-adk replay` — reconstruct run summary from JSONL events. */
90
+ export declare function runReplayHandler(input: ReplayHandlerInput): Promise<ReplayHandlerResult>;
91
+ export interface ExplainFailHandlerInput {
92
+ readonly workspaceRoot: string;
93
+ readonly targetId: string;
94
+ readonly specId?: string;
95
+ }
96
+ export type ExplainFailFailureReason = "READ_ERROR" | "NOT_FOUND";
97
+ export interface ExplainFailHandlerResult {
98
+ readonly ok: boolean;
99
+ readonly summary?: ExplainFailSummary;
100
+ readonly reason?: ExplainFailFailureReason;
101
+ readonly error?: string;
102
+ }
103
+ /** `jcr-adk explain-fail` — structured failure explanation from JSONL events. */
104
+ export declare function runExplainFailHandler(input: ExplainFailHandlerInput): Promise<ExplainFailHandlerResult>;
105
+ export interface HandoffHandlerInput {
106
+ readonly workspaceRoot: string;
107
+ readonly specId: string;
108
+ }
109
+ export type HandoffFailureReason = "READ_ERROR" | "SPEC_NOT_FOUND" | "ARTIFACT_READ_ERROR";
110
+ export interface HandoffHandlerResult {
111
+ readonly ok: boolean;
112
+ readonly package?: HandoffPackage;
113
+ readonly markdown?: string;
114
+ readonly reason?: HandoffFailureReason;
115
+ readonly error?: string;
116
+ }
117
+ /** `jcr-adk handoff` — build context package from spec artifacts + JSONL audit. */
118
+ export declare function runHandoffHandler(input: HandoffHandlerInput): Promise<HandoffHandlerResult>;
119
+ export interface ReviewPackHandlerInput {
120
+ readonly workspaceRoot: string;
121
+ readonly specId: string;
122
+ }
123
+ export type ReviewPackFailureReason = "READ_ERROR" | "SPEC_NOT_FOUND" | "ARTIFACT_READ_ERROR";
124
+ export interface ReviewPackHandlerResult {
125
+ readonly ok: boolean;
126
+ readonly bundle?: ReviewPackBundle;
127
+ readonly markdown?: string;
128
+ readonly reason?: ReviewPackFailureReason;
129
+ readonly error?: string;
130
+ }
131
+ /** `jcr-adk review-pack` — reviewer evidence bundle from spec + JSONL audit. */
132
+ export declare function runReviewPackHandler(input: ReviewPackHandlerInput): Promise<ReviewPackHandlerResult>;
133
+ export {};
134
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}