agentskeptic 4.2.0 → 6.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 (134) hide show
  1. package/dist/actionableFailure.remediationExhaustive.test.js +1 -1
  2. package/dist/bootstrap/runBootstrapSubcommand.js +1 -1
  3. package/dist/ciLock.js +1 -1
  4. package/dist/ciLock.js.map +1 -1
  5. package/dist/cli.js +2 -2
  6. package/dist/commercial/trustDecisionRecord.d.ts.map +1 -1
  7. package/dist/commercial/trustDecisionRecord.js +7 -3
  8. package/dist/commercial/trustDecisionRecord.js.map +1 -1
  9. package/dist/commercial/trustDecisionRecord.schema.test.js +24 -2
  10. package/dist/commercial/trustDecisionRecord.schema.test.js.map +1 -1
  11. package/dist/commercial/verifyOutcomeBeaconBody.d.ts.map +1 -1
  12. package/dist/commercial/verifyOutcomeBeaconBody.js +2 -1
  13. package/dist/commercial/verifyOutcomeBeaconBody.js.map +1 -1
  14. package/dist/compare.acceptance.test.js +1 -1
  15. package/dist/decisionBlocker.d.ts +1 -11
  16. package/dist/decisionBlocker.d.ts.map +1 -1
  17. package/dist/decisionBlocker.js +1 -41
  18. package/dist/decisionBlocker.js.map +1 -1
  19. package/dist/decisionEvidenceBundle/validateDecisionEvidenceBundle.js +1 -1
  20. package/dist/decisionEvidenceBundle/writeDecisionEvidenceBundle.js +2 -2
  21. package/dist/decisionEvidenceBundle.test.js +50 -3
  22. package/dist/decisionEvidenceBundle.test.js.map +1 -1
  23. package/dist/decisionGate.assertSafe.test.js +1 -1
  24. package/dist/decisionGate.assertSafe.test.js.map +1 -1
  25. package/dist/decisionGate.js +1 -1
  26. package/dist/enforceStateful.js +2 -2
  27. package/dist/enforceStateful.js.map +1 -1
  28. package/dist/evidenceCompleteness.d.ts +54 -0
  29. package/dist/evidenceCompleteness.d.ts.map +1 -0
  30. package/dist/evidenceCompleteness.js +263 -0
  31. package/dist/evidenceCompleteness.js.map +1 -0
  32. package/dist/execution-identity.v1.json +1 -1
  33. package/dist/failureSpine.d.ts +37 -0
  34. package/dist/failureSpine.d.ts.map +1 -0
  35. package/dist/failureSpine.js +218 -0
  36. package/dist/failureSpine.js.map +1 -0
  37. package/dist/failureSpine.test.d.ts +2 -0
  38. package/dist/failureSpine.test.d.ts.map +1 -0
  39. package/dist/failureSpine.test.js +28 -0
  40. package/dist/failureSpine.test.js.map +1 -0
  41. package/dist/formatEvidenceCompletenessHuman.d.ts +12 -0
  42. package/dist/formatEvidenceCompletenessHuman.d.ts.map +1 -0
  43. package/dist/formatEvidenceCompletenessHuman.js +47 -0
  44. package/dist/formatEvidenceCompletenessHuman.js.map +1 -0
  45. package/dist/formatFailureSpineHuman.d.ts +4 -0
  46. package/dist/formatFailureSpineHuman.d.ts.map +1 -0
  47. package/dist/formatFailureSpineHuman.js +18 -0
  48. package/dist/formatFailureSpineHuman.js.map +1 -0
  49. package/dist/governanceEvidence.d.ts +9 -3
  50. package/dist/governanceEvidence.d.ts.map +1 -1
  51. package/dist/governanceEvidence.js +10 -5
  52. package/dist/governanceEvidence.js.map +1 -1
  53. package/dist/governanceEvidence.test.js +31 -4
  54. package/dist/governanceEvidence.test.js.map +1 -1
  55. package/dist/index.d.ts +7 -3
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +5 -2
  58. package/dist/index.js.map +1 -1
  59. package/dist/langGraphCheckpointTrustGate.js +1 -1
  60. package/dist/langGraphCheckpointTrustIneligibleCertificate.js +1 -1
  61. package/dist/loop/loopOutput.d.ts +0 -4
  62. package/dist/loop/loopOutput.d.ts.map +1 -1
  63. package/dist/loop/loopOutput.js +3 -6
  64. package/dist/loop/loopOutput.js.map +1 -1
  65. package/dist/loop/runLoopSubcommand.d.ts.map +1 -1
  66. package/dist/loop/runLoopSubcommand.js +0 -2
  67. package/dist/loop/runLoopSubcommand.js.map +1 -1
  68. package/dist/outcomeCertificate.d.ts +20 -10
  69. package/dist/outcomeCertificate.d.ts.map +1 -1
  70. package/dist/outcomeCertificate.js +85 -8
  71. package/dist/outcomeCertificate.js.map +1 -1
  72. package/dist/outcomeCertificate.test.js +1 -1
  73. package/dist/publicDistribution.generated.d.ts +1 -1
  74. package/dist/publicDistribution.generated.js +1 -1
  75. package/dist/quickVerify/formatQuickVerifyHumanReport.test.js +8 -3
  76. package/dist/quickVerify/formatQuickVerifyHumanReport.test.js.map +1 -1
  77. package/dist/quickVerify/quickParamPointerNegatives.test.js +5 -2
  78. package/dist/quickVerify/quickParamPointerNegatives.test.js.map +1 -1
  79. package/dist/quickVerify/quickParamPointerPromotionGoldens.test.js +7 -4
  80. package/dist/quickVerify/quickParamPointerPromotionGoldens.test.js.map +1 -1
  81. package/dist/quickVerify/runQuickVerify.d.ts +3 -1
  82. package/dist/quickVerify/runQuickVerify.d.ts.map +1 -1
  83. package/dist/quickVerify/runQuickVerify.js +24 -3
  84. package/dist/quickVerify/runQuickVerify.js.map +1 -1
  85. package/dist/redactEvidenceString.d.ts +5 -0
  86. package/dist/redactEvidenceString.d.ts.map +1 -0
  87. package/dist/redactEvidenceString.js +17 -0
  88. package/dist/redactEvidenceString.js.map +1 -0
  89. package/dist/remediationConsumptionGuard.test.js +3 -0
  90. package/dist/remediationConsumptionGuard.test.js.map +1 -1
  91. package/dist/remediationMessage.d.ts +6 -0
  92. package/dist/remediationMessage.d.ts.map +1 -0
  93. package/dist/remediationMessage.js +30 -0
  94. package/dist/remediationMessage.js.map +1 -0
  95. package/dist/remediationWireSurfaceGuard.test.js +3 -0
  96. package/dist/remediationWireSurfaceGuard.test.js.map +1 -1
  97. package/dist/schemaLoad.d.ts +1 -1
  98. package/dist/schemaLoad.d.ts.map +1 -1
  99. package/dist/schemaLoad.js +25 -1
  100. package/dist/schemaLoad.js.map +1 -1
  101. package/dist/sdk/_generated/openapi-types.d.ts +25 -15
  102. package/dist/sdk/_generated/openapi-types.d.ts.map +1 -1
  103. package/dist/shareReport/postPublicVerificationReport.d.ts +3 -3
  104. package/dist/shareReport/postPublicVerificationReport.js +1 -1
  105. package/dist/shareReport/postPublicVerificationReport.js.map +1 -1
  106. package/dist/standardVerifyWorkflowCli.d.ts +7 -7
  107. package/dist/standardVerifyWorkflowCli.js +3 -3
  108. package/dist/trustDecision.d.ts +7 -2
  109. package/dist/trustDecision.d.ts.map +1 -1
  110. package/dist/trustDecision.js +14 -7
  111. package/dist/trustDecision.js.map +1 -1
  112. package/dist/verify/batchVerifyTelemetrySubcommand.js +2 -2
  113. package/package.json +4 -3
  114. package/schemas/decision-evidence-exit-v1.schema.json +1 -1
  115. package/schemas/evidence-completeness-v1.schema.json +87 -0
  116. package/schemas/failure-spine-v1.schema.json +38 -0
  117. package/schemas/material-truth-v2.schema.json +83 -0
  118. package/schemas/openapi-commercial-v1.in.yaml +46 -21
  119. package/schemas/openapi-commercial-v1.yaml +47 -22
  120. package/schemas/outcome-certificate-v2.schema.json +93 -0
  121. package/schemas/outcome-certificate-v3.schema.json +97 -0
  122. package/schemas/public-verification-report-v3.schema.json +15 -0
  123. package/schemas/quick-verify-report.schema.json +6 -2
  124. package/schemas/regression-artifact-v1.schema.json +1 -1
  125. package/schemas/trust-decision-record-v1.schema.json +3 -3
  126. package/scripts/discovery-payload.lib.cjs +140 -18
  127. package/dist/decisionBlocker.contract.test.d.ts +0 -2
  128. package/dist/decisionBlocker.contract.test.d.ts.map +0 -1
  129. package/dist/decisionBlocker.contract.test.js +0 -51
  130. package/dist/decisionBlocker.contract.test.js.map +0 -1
  131. package/dist/loop/failureHints.d.ts +0 -6
  132. package/dist/loop/failureHints.d.ts.map +0 -1
  133. package/dist/loop/failureHints.js +0 -36
  134. package/dist/loop/failureHints.js.map +0 -1
@@ -0,0 +1,263 @@
1
+ /**
2
+ * Canonical evidence completeness object (schemas/evidence-completeness-v1.schema.json).
3
+ */
4
+ import { deriveActionableFailureWorkflow } from "./actionableFailure.js";
5
+ import { remediationMessageForRecommendedAction } from "./remediationMessage.js";
6
+ import { RESOLVE_FAILURE_CODES } from "./verificationDiagnostics.js";
7
+ import { REGISTRY_RESOLVER_CODE, SQL_VERIFICATION_OUTCOME_CODE as SQL } from "./wireReasonCodes.js";
8
+ import { userPhraseForReasonCode } from "./verificationUserPhrases.js";
9
+ import { redactEvidenceString } from "./redactEvidenceString.js";
10
+ const REGISTRY_CODES = new Set(Object.values(REGISTRY_RESOLVER_CODE));
11
+ function capList(lines, max, eachMax) {
12
+ const out = [];
13
+ for (let i = 0; i < lines.length && out.length < max; i++) {
14
+ out.push(redactEvidenceString(lines[i], eachMax));
15
+ }
16
+ return out;
17
+ }
18
+ function collectWorkflowCodes(result) {
19
+ const s = new Set();
20
+ for (const r of result.runLevelReasons)
21
+ s.add(r.code);
22
+ if (result.eventSequenceIntegrity.kind === "irregular") {
23
+ for (const r of result.eventSequenceIntegrity.reasons)
24
+ s.add(r.code);
25
+ }
26
+ for (const step of result.steps) {
27
+ for (const r of step.reasons)
28
+ s.add(r.code);
29
+ }
30
+ return s;
31
+ }
32
+ function classifyWorkflowBlocker(result) {
33
+ const C = collectWorkflowCodes(result);
34
+ if (C.has("NO_STEPS_FOR_WORKFLOW"))
35
+ return "ingest_empty";
36
+ if (C.has("MALFORMED_EVENT_LINE"))
37
+ return "ingest_unstructured";
38
+ if (result.eventSequenceIntegrity.kind === "irregular")
39
+ return "event_sequence";
40
+ const ctx = result.verificationRunContext;
41
+ if (ctx.toolSkippedEvents.length > 0)
42
+ return "control_flow_context";
43
+ if (ctx.controlEvents.some((e) => e.decision === "skipped"))
44
+ return "control_flow_context";
45
+ if (ctx.modelTurnEvents.some((e) => e.status !== "completed"))
46
+ return "control_flow_context";
47
+ if (C.has(SQL.UNKNOWN_TOOL))
48
+ return "registry_unknown_tool";
49
+ for (const c of C) {
50
+ if (REGISTRY_CODES.has(c) || RESOLVE_FAILURE_CODES.has(c))
51
+ return "registry_resolution";
52
+ }
53
+ if (C.has(SQL.STATE_WITNESS_UNAVAILABLE_IN_SQLITE_FILE_MODE) ||
54
+ C.has(SQL.STATE_WITNESS_SETUP_ERROR)) {
55
+ return "witness_unavailable";
56
+ }
57
+ if (C.has(SQL.CONNECTOR_ERROR) ||
58
+ C.has(SQL.ROW_SHAPE_MISMATCH) ||
59
+ C.has(SQL.UNREADABLE_VALUE) ||
60
+ C.has(SQL.VECTOR_PROVIDER_ERROR) ||
61
+ C.has(SQL.HTTP_WITNESS_NETWORK_ERROR)) {
62
+ return "database_access";
63
+ }
64
+ if (C.has(SQL.ROW_NOT_OBSERVED_WITHIN_WINDOW) ||
65
+ C.has(SQL.MULTI_EFFECT_UNCERTAIN_WITHIN_WINDOW) ||
66
+ C.has(SQL.FORBIDDEN_ROWS_STILL_PRESENT_WITHIN_WINDOW) ||
67
+ C.has(SQL.BOUNDED_WINDOW_EXPIRED_WITHOUT_OBSERVATION)) {
68
+ return "timing_or_window";
69
+ }
70
+ if (result.status === "inconsistent")
71
+ return "state_mismatch";
72
+ if (result.status === "incomplete")
73
+ return "verification_incomplete";
74
+ return "none";
75
+ }
76
+ function nextActionsFromRemediation(code) {
77
+ const text = redactEvidenceString(remediationMessageForRecommendedAction(code), 500);
78
+ return [{ id: code, text }];
79
+ }
80
+ function syntheticFailureBase(result) {
81
+ const codes = [...collectWorkflowCodes(result)].sort((a, b) => a.localeCompare(b)).slice(0, 12);
82
+ return {
83
+ summary: "Synthetic failure analysis for evidence completeness fallback.",
84
+ primaryOrigin: "workflow_flow",
85
+ confidence: "medium",
86
+ unknownReasonCodes: [],
87
+ evidence: codes.length > 0
88
+ ? [{ scope: "run_level", codes }]
89
+ : [{ scope: "step", codes: ["UNCLASSIFIED_GAP"], seq: 0, toolId: "" }],
90
+ alternativeHypotheses: undefined,
91
+ };
92
+ }
93
+ export function workflowResultToEngineSlice(result) {
94
+ const { workflowTruthReport: _omit, schemaVersion: _sv, ...rest } = result;
95
+ return { ...rest, schemaVersion: 8 };
96
+ }
97
+ export function buildEvidenceCompletenessFromWorkflowResult(result) {
98
+ const truth = result.workflowTruthReport;
99
+ const verified = [];
100
+ const unverified = [];
101
+ for (const st of truth.steps) {
102
+ const label = `${st.toolId}:seq=${st.seq}`;
103
+ if (st.outcomeLabel === "VERIFIED") {
104
+ verified.push(redactEvidenceString(`${label}: verified`, 160));
105
+ }
106
+ else {
107
+ const msg = st.reasons[0]?.message ?? st.outcomeLabel;
108
+ unverified.push(redactEvidenceString(`${label}: ${msg}`, 160));
109
+ }
110
+ }
111
+ const blockerCategory = classifyWorkflowBlocker(result);
112
+ const fa = truth.failureAnalysis;
113
+ let recommended = "manual_review";
114
+ const engineSlice = workflowResultToEngineSlice(result);
115
+ if (fa === null && result.status === "complete") {
116
+ recommended = "none";
117
+ }
118
+ else {
119
+ const base = fa ?? syntheticFailureBase(result);
120
+ recommended = deriveActionableFailureWorkflow(engineSlice, base).recommendedAction;
121
+ }
122
+ const primaryCodes = [...collectWorkflowCodes(result)].sort((a, b) => a.localeCompare(b)).slice(0, 8);
123
+ const missingInputs = primaryCodes.map((code) => {
124
+ const phrase = userPhraseForReasonCode(code);
125
+ return {
126
+ code: redactEvidenceString(code, 72),
127
+ hint: phrase ? redactEvidenceString(phrase, 400) : redactEvidenceString(code, 400),
128
+ };
129
+ });
130
+ const nextActions = result.status === "complete" && fa === null ? nextActionsFromRemediation("none") : nextActionsFromRemediation(recommended);
131
+ return {
132
+ schemaVersion: 1,
133
+ blockerCategory,
134
+ quickSignal: "na",
135
+ verifiedClaims: capList(verified, 24, 160),
136
+ unverifiedClaims: capList(unverified, 24, 160),
137
+ missingInputs,
138
+ nextActions,
139
+ };
140
+ }
141
+ function classifyQuickBlocker(signal, verdict) {
142
+ if (signal === "no_actions")
143
+ return "ingest_empty";
144
+ if (signal === "no_structured_activity")
145
+ return "ingest_unstructured";
146
+ if (signal === "no_sql_candidates")
147
+ return "registry_resolution";
148
+ if (signal === "sql_ran_failed")
149
+ return "state_mismatch";
150
+ if (verdict === "uncertain")
151
+ return "verification_incomplete";
152
+ return "preview_lane";
153
+ }
154
+ export function buildEvidenceCompletenessFromQuickReport(input) {
155
+ const { ingest, units, verdict } = input;
156
+ let quickSignal = "sql_ran_uncertain";
157
+ if (ingest.reasonCodes.includes("INGEST_NO_ACTIONS")) {
158
+ quickSignal = "no_actions";
159
+ }
160
+ else if (ingest.reasonCodes.includes("INGEST_NO_STRUCTURED_TOOL_ACTIVITY")) {
161
+ quickSignal = "no_structured_activity";
162
+ }
163
+ else if (units.length === 0) {
164
+ quickSignal = "no_sql_candidates";
165
+ }
166
+ else {
167
+ const mappedOk = units.filter((u) => !u.reasonCodes.includes("MAPPING_FAILED")).length > 0;
168
+ if (!mappedOk) {
169
+ quickSignal = "no_sql_candidates";
170
+ }
171
+ else if (verdict === "pass")
172
+ quickSignal = "sql_ran_passed";
173
+ else if (verdict === "fail")
174
+ quickSignal = "sql_ran_failed";
175
+ else
176
+ quickSignal = "sql_ran_uncertain";
177
+ }
178
+ const verified = [];
179
+ const unverified = [];
180
+ for (const u of units) {
181
+ if (u.verdict === "verified") {
182
+ verified.push(redactEvidenceString(`unit=${u.unitId} tool=${u.sourceAction.toolName}`, 160));
183
+ }
184
+ else {
185
+ unverified.push(redactEvidenceString(`unit=${u.unitId} tool=${u.sourceAction.toolName}: ${u.reconciliation.verification_verdict}`, 160));
186
+ }
187
+ }
188
+ let missingInputs = [];
189
+ if (ingest.reasonCodes.length > 0) {
190
+ missingInputs.push({
191
+ code: redactEvidenceString("ingest", 72),
192
+ hint: redactEvidenceString(ingest.reasonCodes.join(","), 400),
193
+ });
194
+ }
195
+ else if (units.length > 0) {
196
+ const firstFailed = units.find((u) => u.reasonCodes.length > 0);
197
+ if (firstFailed) {
198
+ missingInputs.push({
199
+ code: redactEvidenceString(firstFailed.reasonCodes[0], 72),
200
+ hint: redactEvidenceString(`${firstFailed.unitId}:${firstFailed.sourceAction.toolName}`, 400),
201
+ });
202
+ }
203
+ }
204
+ missingInputs = missingInputs.slice(0, 8);
205
+ const blockerCategory = classifyQuickBlocker(quickSignal, verdict);
206
+ const nextActions = [];
207
+ nextActions.push({
208
+ id: "rerun_quick_or_promote_contract",
209
+ text: redactEvidenceString("For decision-grade reliance, export registry and events then run agentskeptic check (contract mode).", 500),
210
+ });
211
+ if (quickSignal !== "sql_ran_passed") {
212
+ nextActions.push({
213
+ id: "fix_ingest_or_mapping",
214
+ text: redactEvidenceString("Fix ingest shape or mapping failures shown in units, then rerun quick verify.", 500),
215
+ });
216
+ }
217
+ return {
218
+ schemaVersion: 1,
219
+ blockerCategory,
220
+ quickSignal,
221
+ verifiedClaims: capList(verified, 24, 160),
222
+ unverifiedClaims: capList(unverified, 24, 160),
223
+ missingInputs: missingInputs.length > 0
224
+ ? missingInputs
225
+ : [{ code: redactEvidenceString("none_reported", 72), hint: redactEvidenceString("No structured missing-field entries.", 400) }],
226
+ nextActions,
227
+ };
228
+ }
229
+ /** LangGraph checkpoint trust ineligible: no runnable verification trace. */
230
+ export function buildEvidenceCompletenessForIneligibleLangGraph(params) {
231
+ const { headline, details } = params;
232
+ return {
233
+ schemaVersion: 1,
234
+ blockerCategory: "verification_incomplete",
235
+ quickSignal: "na",
236
+ verifiedClaims: [],
237
+ unverifiedClaims: [redactEvidenceString(headline, 200)],
238
+ missingInputs: details.slice(0, 8).map((d) => ({
239
+ code: redactEvidenceString(d.code, 72),
240
+ hint: redactEvidenceString(d.message, 400),
241
+ })),
242
+ nextActions: [
243
+ {
244
+ id: "fix_langgraph_eligibility",
245
+ text: redactEvidenceString("Repair NDJSON capture so checkpoint trust receives schema-valid schemaVersion 3 tool_observed lines for this workflow, then rerun verify.", 500),
246
+ },
247
+ ],
248
+ };
249
+ }
250
+ /** Deterministic completeness object for minimal tests and fixtures (normative blocker `none`). */
251
+ export function minimalEvidenceCompletenessFixture(overrides) {
252
+ const base = {
253
+ schemaVersion: 1,
254
+ blockerCategory: "none",
255
+ quickSignal: "na",
256
+ verifiedClaims: [],
257
+ unverifiedClaims: [],
258
+ missingInputs: [{ code: redactEvidenceString("fixture", 72), hint: redactEvidenceString("Test fixture completeness row.", 400) }],
259
+ nextActions: [{ id: "none", text: redactEvidenceString("No further action required.", 500) }],
260
+ };
261
+ return { ...base, ...overrides };
262
+ }
263
+ //# sourceMappingURL=evidenceCompleteness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidenceCompleteness.js","sourceRoot":"","sources":["../src/evidenceCompleteness.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  "identityVersion": "1.0.0",
5
5
  "mergeGateFingerprintSha256": "64b5ae2ed5025c08c7c9d7b601958cc90edc32c0d80ea207fdaa373de5b9c2fc",
6
6
  "nodeEnginesDeclared": "22.x || 24.x",
7
- "npmPackageVersion": "4.2.0",
7
+ "npmPackageVersion": "6.0.0",
8
8
  "pythonPipExtrasFragment": "dev,postgres",
9
9
  "verificationContractManifest": {
10
10
  "manifestSha256": "c5f23ec43576716c4b9a13e752cd2962a78bb4b4da1f9e521f911e15dfd80268",
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Unified failure spine v1 — certificate.failureSpine JSON + human failure_spine block source.
3
+ */
4
+ import type { QuickVerifyReport } from "./quickVerify/runQuickVerify.js";
5
+ import type { TrustDecision } from "./trustDecision.js";
6
+ import type { ActionableFailure, Reason, WorkflowResult } from "./types.js";
7
+ import type { OutcomeCertificateHighStakesReliance, OutcomeCertificateStateRelation } from "./outcomeCertificate.js";
8
+ export type FailureSpineSource = "workflow" | "quick" | "ineligible_langgraph";
9
+ export type FailureSpineV1 = {
10
+ schemaVersion: 1;
11
+ trustDecision: TrustDecision;
12
+ summary: string;
13
+ actionableFailure: ActionableFailure;
14
+ primaryCodes: string[];
15
+ rerunGuidance: string;
16
+ source: FailureSpineSource;
17
+ };
18
+ export declare function buildFailureSpineFromWorkflowResult(params: {
19
+ result: WorkflowResult;
20
+ runKind: "contract_sql" | "contract_sql_langgraph_checkpoint_trust";
21
+ stateRelation: OutcomeCertificateStateRelation;
22
+ highStakesReliance: OutcomeCertificateHighStakesReliance;
23
+ }): FailureSpineV1;
24
+ export declare function buildFailureSpineFromQuickReport(params: {
25
+ report: QuickVerifyReport;
26
+ workflowId: string;
27
+ stateRelation: OutcomeCertificateStateRelation;
28
+ highStakesReliance: OutcomeCertificateHighStakesReliance;
29
+ }): FailureSpineV1;
30
+ export declare function buildFailureSpineFromIneligibleLangGraph(params: {
31
+ workflowId: string;
32
+ runLevelReasons: Reason[];
33
+ headline: string;
34
+ stateRelation: OutcomeCertificateStateRelation;
35
+ highStakesReliance: OutcomeCertificateHighStakesReliance;
36
+ }): FailureSpineV1;
37
+ //# sourceMappingURL=failureSpine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failureSpine.d.ts","sourceRoot":"","sources":["../src/failureSpine.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,KAAK,EACV,iBAAiB,EAEjB,MAAM,EAGN,cAAc,EAEf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,oCAAoC,EACpC,+BAA+B,EAChC,MAAM,yBAAyB,CAAC;AAKjC,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,OAAO,GAAG,sBAAsB,CAAC;AAE/E,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,CAAC,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,kBAAkB,CAAC;CAC5B,CAAC;AA4CF,wBAAgB,mCAAmC,CAAC,MAAM,EAAE;IAC1D,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,cAAc,GAAG,yCAAyC,CAAC;IACpE,aAAa,EAAE,+BAA+B,CAAC;IAC/C,kBAAkB,EAAE,oCAAoC,CAAC;CAC1D,GAAG,cAAc,CAqCjB;AAuED,wBAAgB,gCAAgC,CAAC,MAAM,EAAE;IACvD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,+BAA+B,CAAC;IAC/C,kBAAkB,EAAE,oCAAoC,CAAC;CAC1D,GAAG,cAAc,CA8BjB;AAED,wBAAgB,wCAAwC,CAAC,MAAM,EAAE;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,+BAA+B,CAAC;IAC/C,kBAAkB,EAAE,oCAAoC,CAAC;CAC1D,GAAG,cAAc,CAuDjB"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * Unified failure spine v1 — certificate.failureSpine JSON + human failure_spine block source.
3
+ */
4
+ import { deriveActionableFailureWorkflow } from "./actionableFailure.js";
5
+ import { workflowResultToEngineSlice } from "./evidenceCompleteness.js";
6
+ import { buildFailureAnalysis } from "./failureAnalysis.js";
7
+ import { remediationMessageForRecommendedAction } from "./remediationMessage.js";
8
+ import { redactEvidenceString } from "./redactEvidenceString.js";
9
+ import { trustDecisionFromRelianceFields } from "./trustDecision.js";
10
+ import { DEFAULT_VERIFICATION_POLICY } from "./verificationPolicy.js";
11
+ import { createEmptyVerificationRunContext } from "./verificationRunContext.js";
12
+ import { SQL_VERIFICATION_OUTCOME_CODE } from "./wireReasonCodes.js";
13
+ function sortUniqueCodes(codes) {
14
+ return [...new Set(codes)].sort((a, b) => a.localeCompare(b));
15
+ }
16
+ function collectWorkflowCodes(result) {
17
+ const s = new Set();
18
+ for (const r of result.runLevelReasons)
19
+ s.add(r.code);
20
+ if (result.eventSequenceIntegrity.kind === "irregular") {
21
+ for (const r of result.eventSequenceIntegrity.reasons)
22
+ s.add(r.code);
23
+ }
24
+ for (const step of result.steps) {
25
+ for (const r of step.reasons)
26
+ s.add(r.code);
27
+ }
28
+ return s;
29
+ }
30
+ function syntheticFailureBase(result) {
31
+ const codes = [...collectWorkflowCodes(result)].sort((a, b) => a.localeCompare(b)).slice(0, 12);
32
+ return {
33
+ summary: "Synthetic failure analysis for evidence completeness fallback.",
34
+ primaryOrigin: "workflow_flow",
35
+ confidence: "medium",
36
+ unknownReasonCodes: [],
37
+ evidence: codes.length > 0
38
+ ? [{ scope: "run_level", codes }]
39
+ : [{ scope: "step", codes: ["UNCLASSIFIED_GAP"], seq: 0, toolId: "" }],
40
+ alternativeHypotheses: undefined,
41
+ };
42
+ }
43
+ function primaryCodesForWorkflowResult(result) {
44
+ const fa = result.workflowTruthReport.failureAnalysis;
45
+ if (fa !== null) {
46
+ const c0 = fa.evidence[0]?.codes;
47
+ if (c0?.length)
48
+ return sortUniqueCodes([...c0]).slice(0, 24);
49
+ return ["UNCLASSIFIED"];
50
+ }
51
+ const all = [...collectWorkflowCodes(result)];
52
+ return all.length ? sortUniqueCodes(all).slice(0, 24) : ["UNCLASSIFIED"];
53
+ }
54
+ export function buildFailureSpineFromWorkflowResult(params) {
55
+ const { result, runKind, stateRelation, highStakesReliance } = params;
56
+ const truth = result.workflowTruthReport;
57
+ const engineSlice = workflowResultToEngineSlice(result);
58
+ let actionableFailure;
59
+ let summary;
60
+ if (truth.failureAnalysis !== null) {
61
+ actionableFailure = truth.failureAnalysis.actionableFailure;
62
+ summary = truth.failureAnalysis.summary;
63
+ }
64
+ else {
65
+ const base = syntheticFailureBase(result);
66
+ actionableFailure = deriveActionableFailureWorkflow(engineSlice, base);
67
+ summary = truth.trustSummary;
68
+ }
69
+ const trustDecision = trustDecisionFromRelianceFields({
70
+ runKind,
71
+ stateRelation,
72
+ highStakesReliance,
73
+ });
74
+ const rerunGuidance = redactEvidenceString(remediationMessageForRecommendedAction(actionableFailure.recommendedAction), 500);
75
+ return {
76
+ schemaVersion: 1,
77
+ trustDecision,
78
+ summary,
79
+ actionableFailure,
80
+ primaryCodes: primaryCodesForWorkflowResult(result),
81
+ rerunGuidance,
82
+ source: "workflow",
83
+ };
84
+ }
85
+ function quickVerifyReportToSyntheticEngine(report, workflowId) {
86
+ const status = report.verdict === "fail" ? "inconsistent" : report.verdict === "pass" ? "complete" : "incomplete";
87
+ const steps = report.units.map((u, i) => {
88
+ const st = u.verdict === "verified" ? "verified" : u.verdict === "fail" ? "inconsistent" : "uncertain";
89
+ const reasons = u.reasonCodes.length > 0
90
+ ? u.reasonCodes.map((c) => ({ code: c, message: c }))
91
+ : u.verdict !== "verified"
92
+ ? [{ code: SQL_VERIFICATION_OUTCOME_CODE.ROW_ABSENT, message: "quick synthetic absent" }]
93
+ : [];
94
+ const step = {
95
+ seq: i,
96
+ toolId: u.sourceAction.toolName,
97
+ intendedEffect: { narrative: u.explanation },
98
+ observedExecution: { paramsCanonical: "{}" },
99
+ verificationRequest: {
100
+ kind: "sql_row",
101
+ table: u.inference.table,
102
+ identityEq: [{ column: "id", value: "quick_synthetic" }],
103
+ requiredFields: {},
104
+ },
105
+ status: st,
106
+ reasons,
107
+ evidenceSummary: {},
108
+ repeatObservationCount: 1,
109
+ evaluatedObservationOrdinal: 1,
110
+ };
111
+ if (st !== "verified") {
112
+ step.failureDiagnostic = "workflow_execution";
113
+ }
114
+ return step;
115
+ });
116
+ return {
117
+ schemaVersion: 8,
118
+ workflowId,
119
+ status,
120
+ runLevelReasons: [],
121
+ verificationPolicy: DEFAULT_VERIFICATION_POLICY,
122
+ eventSequenceIntegrity: { kind: "normal" },
123
+ steps,
124
+ verificationRunContext: createEmptyVerificationRunContext(),
125
+ };
126
+ }
127
+ function primaryCodesQuick(report) {
128
+ const codes = [];
129
+ for (const u of report.units) {
130
+ if (u.verdict !== "verified") {
131
+ codes.push(`quick_unit_${u.verdict}`);
132
+ }
133
+ }
134
+ return codes.length ? sortUniqueCodes(codes) : ["UNCLASSIFIED"];
135
+ }
136
+ function syntheticQuickFailureAnalysis(report) {
137
+ return {
138
+ summary: report.summary,
139
+ primaryOrigin: "workflow_flow",
140
+ confidence: "medium",
141
+ unknownReasonCodes: [],
142
+ evidence: [{ scope: "run_level", codes: ["QUICK_PREVIEW_SYNTHETIC"] }],
143
+ alternativeHypotheses: undefined,
144
+ };
145
+ }
146
+ export function buildFailureSpineFromQuickReport(params) {
147
+ const engine = quickVerifyReportToSyntheticEngine(params.report, params.workflowId);
148
+ const fa = buildFailureAnalysis(engine);
149
+ let actionableFailure;
150
+ if (fa !== null) {
151
+ actionableFailure = deriveActionableFailureWorkflow(engine, fa);
152
+ }
153
+ else {
154
+ actionableFailure = deriveActionableFailureWorkflow(engine, syntheticQuickFailureAnalysis(params.report));
155
+ }
156
+ const trustDecision = trustDecisionFromRelianceFields({
157
+ runKind: "quick_preview",
158
+ stateRelation: params.stateRelation,
159
+ highStakesReliance: params.highStakesReliance,
160
+ });
161
+ const rerunGuidance = redactEvidenceString(remediationMessageForRecommendedAction(actionableFailure.recommendedAction), 500);
162
+ return {
163
+ schemaVersion: 1,
164
+ trustDecision,
165
+ summary: params.report.summary,
166
+ actionableFailure,
167
+ primaryCodes: primaryCodesQuick(params.report),
168
+ rerunGuidance,
169
+ source: "quick",
170
+ };
171
+ }
172
+ export function buildFailureSpineFromIneligibleLangGraph(params) {
173
+ const engine = {
174
+ schemaVersion: 8,
175
+ workflowId: params.workflowId,
176
+ status: "incomplete",
177
+ runLevelReasons: params.runLevelReasons,
178
+ verificationPolicy: DEFAULT_VERIFICATION_POLICY,
179
+ eventSequenceIntegrity: { kind: "normal" },
180
+ steps: [],
181
+ verificationRunContext: createEmptyVerificationRunContext(),
182
+ };
183
+ const fa = buildFailureAnalysis(engine);
184
+ const base = {
185
+ summary: params.headline,
186
+ primaryOrigin: "workflow_flow",
187
+ confidence: "low",
188
+ unknownReasonCodes: [],
189
+ evidence: params.runLevelReasons.length > 0
190
+ ? [{ scope: "run_level", codes: params.runLevelReasons.map((r) => r.code) }]
191
+ : [{ scope: "run_level", codes: ["LANGGRAPH_INELIGIBLE"] }],
192
+ alternativeHypotheses: undefined,
193
+ };
194
+ const actionableFailure = fa !== null ? deriveActionableFailureWorkflow(engine, fa) : deriveActionableFailureWorkflow(engine, base);
195
+ const trustDecision = trustDecisionFromRelianceFields({
196
+ runKind: "contract_sql_langgraph_checkpoint_trust",
197
+ stateRelation: params.stateRelation,
198
+ highStakesReliance: params.highStakesReliance,
199
+ });
200
+ const rerunGuidance = redactEvidenceString(remediationMessageForRecommendedAction(actionableFailure.recommendedAction), 500);
201
+ let primaryCodes;
202
+ if (params.runLevelReasons.length > 0) {
203
+ primaryCodes = sortUniqueCodes(params.runLevelReasons.map((r) => r.code)).slice(0, 24);
204
+ }
205
+ else {
206
+ primaryCodes = ["LANGGRAPH_INELIGIBLE"];
207
+ }
208
+ return {
209
+ schemaVersion: 1,
210
+ trustDecision,
211
+ summary: params.headline,
212
+ actionableFailure,
213
+ primaryCodes,
214
+ rerunGuidance,
215
+ source: "ineligible_langgraph",
216
+ };
217
+ }
218
+ //# sourceMappingURL=failureSpine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failureSpine.js","sourceRoot":"","sources":["../src/failureSpine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=failureSpine.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failureSpine.test.d.ts","sourceRoot":"","sources":["../src/failureSpine.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { describe, expect, it } from "vitest";
5
+ import { buildFailureSpineFromWorkflowResult } from "./failureSpine.js";
6
+ const __dirname = dirname(fileURLToPath(import.meta.url));
7
+ const root = join(__dirname, "..");
8
+ describe("buildFailureSpineFromWorkflowResult (wf_multi_all_fail golden)", () => {
9
+ it("matches workflowTruthReport.failureAnalysis actionableFailure; unsafe; ROW_ABSENT primaryCodes", () => {
10
+ const raw = readFileSync(join(root, "test/golden/wf_multi_all_fail.stdout.json"), "utf8");
11
+ const result = JSON.parse(raw);
12
+ const fa = result.workflowTruthReport.failureAnalysis;
13
+ expect(fa).not.toBeNull();
14
+ const spine = buildFailureSpineFromWorkflowResult({
15
+ result,
16
+ runKind: "contract_sql",
17
+ stateRelation: "does_not_match",
18
+ highStakesReliance: "prohibited",
19
+ });
20
+ expect(spine.trustDecision).toBe("unsafe");
21
+ expect(spine.source).toBe("workflow");
22
+ expect(spine.summary).toBe(fa.summary);
23
+ expect(spine.actionableFailure).toEqual(fa.actionableFailure);
24
+ expect(spine.primaryCodes).toEqual(["ROW_ABSENT"]);
25
+ expect(spine.schemaVersion).toBe(1);
26
+ });
27
+ });
28
+ //# sourceMappingURL=failureSpine.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failureSpine.test.js","sourceRoot":"","sources":["../src/failureSpine.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,mCAAmC,EAAE,MAAM,mBAAmB,CAAC;AAGxE,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAEnC,QAAQ,CAAC,gEAAgE,EAAE,GAAG,EAAE;IAC9E,EAAE,CAAC,gGAAgG,EAAE,GAAG,EAAE;QACxG,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,2CAA2C,CAAC,EAAE,MAAM,CAAC,CAAC;QAC1F,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;QACjD,MAAM,EAAE,GAAG,MAAM,CAAC,mBAAmB,CAAC,eAAe,CAAC;QACtD,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAE1B,MAAM,KAAK,GAAG,mCAAmC,CAAC;YAChD,MAAM;YACN,OAAO,EAAE,cAAc;YACvB,aAAa,EAAE,gBAAgB;YAC/B,kBAAkB,EAAE,YAAY;SACjC,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAG,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,EAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { EvidenceCompletenessJson } from "./evidenceCompleteness.js";
2
+ /** Mirrors certificate `runKind` (avoid importing outcomeCertificate — circular). */
3
+ export type EvidenceCompletenessRunKind = "contract_sql" | "contract_sql_langgraph_checkpoint_trust" | "quick_preview";
4
+ export declare const EVIDENCE_COMPLETENESS_BEGIN: "=== evidence_completeness ===";
5
+ export declare const EVIDENCE_COMPLETENESS_END: "=== end evidence_completeness ===";
6
+ /** Max body lines between anchors (excluding boundary lines). */
7
+ export declare const EVIDENCE_COMPLETENESS_MAX_LINES: 22;
8
+ export declare function formatEvidenceCompletenessHuman(ec: EvidenceCompletenessJson, ctx: {
9
+ runKind: EvidenceCompletenessRunKind;
10
+ highStakesReliance: "permitted" | "prohibited";
11
+ }): string;
12
+ //# sourceMappingURL=formatEvidenceCompletenessHuman.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatEvidenceCompletenessHuman.d.ts","sourceRoot":"","sources":["../src/formatEvidenceCompletenessHuman.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAG1E,qFAAqF;AACrF,MAAM,MAAM,2BAA2B,GACnC,cAAc,GACd,yCAAyC,GACzC,eAAe,CAAC;AAEpB,eAAO,MAAM,2BAA2B,EAAG,+BAAwC,CAAC;AACpF,eAAO,MAAM,yBAAyB,EAAG,mCAA4C,CAAC;AAEtF,iEAAiE;AACjE,eAAO,MAAM,+BAA+B,EAAG,EAAW,CAAC;AAE3D,wBAAgB,+BAA+B,CAC7C,EAAE,EAAE,wBAAwB,EAC5B,GAAG,EAAE;IAAE,OAAO,EAAE,2BAA2B,CAAC;IAAC,kBAAkB,EAAE,WAAW,GAAG,YAAY,CAAA;CAAE,GAC5F,MAAM,CAsCR"}