agentskeptic 0.2.1 → 1.0.3

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 (160) hide show
  1. package/README.md +24 -22
  2. package/dist/actionableFailure.remediationExhaustive.test.js +4 -4
  3. package/dist/actionableFailure.remediationExhaustive.test.js.map +1 -1
  4. package/dist/agentRunBundle.d.ts +2 -0
  5. package/dist/agentRunBundle.d.ts.map +1 -1
  6. package/dist/agentRunBundle.js +4 -0
  7. package/dist/agentRunBundle.js.map +1 -1
  8. package/dist/ciLockWorkflow.js +1 -1
  9. package/dist/cli/lockOrchestration.d.ts.map +1 -1
  10. package/dist/cli/lockOrchestration.js +51 -45
  11. package/dist/cli/lockOrchestration.js.map +1 -1
  12. package/dist/cli/lockOrchestration.test.js +7 -1
  13. package/dist/cli/lockOrchestration.test.js.map +1 -1
  14. package/dist/cli.js +27 -23
  15. package/dist/cli.js.map +1 -1
  16. package/dist/cliArgv.d.ts +4 -1
  17. package/dist/cliArgv.d.ts.map +1 -1
  18. package/dist/cliArgv.js +5 -2
  19. package/dist/cliArgv.js.map +1 -1
  20. package/dist/cliOperationalCodes.d.ts +1 -0
  21. package/dist/cliOperationalCodes.d.ts.map +1 -1
  22. package/dist/cliOperationalCodes.js +1 -0
  23. package/dist/cliOperationalCodes.js.map +1 -1
  24. package/dist/commercial/postVerifyOutcomeBeacon.d.ts +3 -3
  25. package/dist/commercial/postVerifyOutcomeBeacon.d.ts.map +1 -1
  26. package/dist/commercial/postVerifyOutcomeBeacon.js +9 -6
  27. package/dist/commercial/postVerifyOutcomeBeacon.js.map +1 -1
  28. package/dist/commercial/verifyOutcomeBeaconBody.d.ts +12 -0
  29. package/dist/commercial/verifyOutcomeBeaconBody.d.ts.map +1 -0
  30. package/dist/commercial/verifyOutcomeBeaconBody.js +26 -0
  31. package/dist/commercial/verifyOutcomeBeaconBody.js.map +1 -0
  32. package/dist/crossing/crossingDecisionReadyFooter.d.ts +1 -1
  33. package/dist/crossing/crossingDecisionReadyFooter.d.ts.map +1 -1
  34. package/dist/crossing/crossingDecisionReadyFooter.js +1 -1
  35. package/dist/crossing/crossingDecisionReadyFooter.js.map +1 -1
  36. package/dist/crossing/runCrossingSubcommand.js +8 -8
  37. package/dist/decisionBlocker.contract.test.d.ts +2 -0
  38. package/dist/decisionBlocker.contract.test.d.ts.map +1 -0
  39. package/dist/decisionBlocker.contract.test.js +51 -0
  40. package/dist/decisionBlocker.contract.test.js.map +1 -0
  41. package/dist/decisionBlocker.d.ts +10 -0
  42. package/dist/decisionBlocker.d.ts.map +1 -0
  43. package/dist/decisionBlocker.js +66 -0
  44. package/dist/decisionBlocker.js.map +1 -0
  45. package/dist/decisionGate.assertSafe.test.d.ts +2 -0
  46. package/dist/decisionGate.assertSafe.test.d.ts.map +1 -0
  47. package/dist/decisionGate.assertSafe.test.js +52 -0
  48. package/dist/decisionGate.assertSafe.test.js.map +1 -0
  49. package/dist/decisionGate.d.ts +23 -0
  50. package/dist/decisionGate.d.ts.map +1 -0
  51. package/dist/decisionGate.js +88 -0
  52. package/dist/decisionGate.js.map +1 -0
  53. package/dist/decisionGate.persistBundle.test.d.ts +2 -0
  54. package/dist/decisionGate.persistBundle.test.d.ts.map +1 -0
  55. package/dist/{withWorkflowVerification.persistBundle.test.js → decisionGate.persistBundle.test.js} +31 -19
  56. package/dist/decisionGate.persistBundle.test.js.map +1 -0
  57. package/dist/decisionUnsafeError.d.ts +8 -0
  58. package/dist/decisionUnsafeError.d.ts.map +1 -0
  59. package/dist/decisionUnsafeError.js +12 -0
  60. package/dist/decisionUnsafeError.js.map +1 -0
  61. package/dist/discovery-payload-v1.json +152 -41
  62. package/dist/executionPathFindings.d.ts +1 -1
  63. package/dist/executionPathFindings.d.ts.map +1 -1
  64. package/dist/executionPathFindings.js +2 -2
  65. package/dist/executionPathFindings.js.map +1 -1
  66. package/dist/executionTrace.js +2 -2
  67. package/dist/executionTrace.js.map +1 -1
  68. package/dist/failureCatalog.d.ts +1 -0
  69. package/dist/failureCatalog.d.ts.map +1 -1
  70. package/dist/failureCatalog.js +1 -0
  71. package/dist/failureCatalog.js.map +1 -1
  72. package/dist/failureOriginCatalog.d.ts.map +1 -1
  73. package/dist/failureOriginCatalog.js +1 -0
  74. package/dist/failureOriginCatalog.js.map +1 -1
  75. package/dist/index.d.ts +17 -5
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +11 -4
  78. package/dist/index.js.map +1 -1
  79. package/dist/langGraphCheckpointTrustGate.d.ts +38 -0
  80. package/dist/langGraphCheckpointTrustGate.d.ts.map +1 -0
  81. package/dist/langGraphCheckpointTrustGate.js +127 -0
  82. package/dist/langGraphCheckpointTrustGate.js.map +1 -0
  83. package/dist/langGraphCheckpointTrustIneligibleCertificate.d.ts +8 -0
  84. package/dist/langGraphCheckpointTrustIneligibleCertificate.d.ts.map +1 -0
  85. package/dist/langGraphCheckpointTrustIneligibleCertificate.js +17 -0
  86. package/dist/langGraphCheckpointTrustIneligibleCertificate.js.map +1 -0
  87. package/dist/langGraphCheckpointTrustUnsafeError.d.ts +8 -0
  88. package/dist/langGraphCheckpointTrustUnsafeError.d.ts.map +1 -0
  89. package/dist/langGraphCheckpointTrustUnsafeError.js +12 -0
  90. package/dist/langGraphCheckpointTrustUnsafeError.js.map +1 -0
  91. package/dist/loadEvents.d.ts +5 -0
  92. package/dist/loadEvents.d.ts.map +1 -1
  93. package/dist/loadEvents.js +32 -0
  94. package/dist/loadEvents.js.map +1 -1
  95. package/dist/operationalDisposition.d.ts +8 -0
  96. package/dist/operationalDisposition.d.ts.map +1 -1
  97. package/dist/operationalDisposition.js +8 -0
  98. package/dist/operationalDisposition.js.map +1 -1
  99. package/dist/outcomeCertificate.d.ts +60 -0
  100. package/dist/outcomeCertificate.d.ts.map +1 -0
  101. package/dist/outcomeCertificate.js +254 -0
  102. package/dist/outcomeCertificate.js.map +1 -0
  103. package/dist/outcomeCertificate.test.d.ts +2 -0
  104. package/dist/outcomeCertificate.test.d.ts.map +1 -0
  105. package/dist/outcomeCertificate.test.js +74 -0
  106. package/dist/outcomeCertificate.test.js.map +1 -0
  107. package/dist/pipeline.d.ts +18 -17
  108. package/dist/pipeline.d.ts.map +1 -1
  109. package/dist/pipeline.js +43 -149
  110. package/dist/pipeline.js.map +1 -1
  111. package/dist/planTransition.test.js +4 -4
  112. package/dist/publicDistribution.generated.d.ts +1 -1
  113. package/dist/publicDistribution.generated.js +1 -1
  114. package/dist/schemaLoad.d.ts +1 -1
  115. package/dist/schemaLoad.d.ts.map +1 -1
  116. package/dist/schemaLoad.js +5 -0
  117. package/dist/schemaLoad.js.map +1 -1
  118. package/dist/shareReport/postPublicVerificationReport.d.ts +6 -0
  119. package/dist/shareReport/postPublicVerificationReport.d.ts.map +1 -1
  120. package/dist/shareReport/postPublicVerificationReport.js +3 -1
  121. package/dist/shareReport/postPublicVerificationReport.js.map +1 -1
  122. package/dist/standardVerifyWorkflowCli.d.ts +20 -5
  123. package/dist/standardVerifyWorkflowCli.d.ts.map +1 -1
  124. package/dist/standardVerifyWorkflowCli.js +53 -22
  125. package/dist/standardVerifyWorkflowCli.js.map +1 -1
  126. package/dist/trustDecision.d.ts +8 -0
  127. package/dist/trustDecision.d.ts.map +1 -0
  128. package/dist/trustDecision.js +13 -0
  129. package/dist/trustDecision.js.map +1 -0
  130. package/dist/types.d.ts +24 -4
  131. package/dist/types.d.ts.map +1 -1
  132. package/dist/types.js.map +1 -1
  133. package/dist/verificationRunContext.d.ts.map +1 -1
  134. package/dist/verificationRunContext.js +3 -0
  135. package/dist/verificationRunContext.js.map +1 -1
  136. package/dist/verify/batchVerifyTelemetrySubcommand.d.ts.map +1 -1
  137. package/dist/verify/batchVerifyTelemetrySubcommand.js +123 -32
  138. package/dist/verify/batchVerifyTelemetrySubcommand.js.map +1 -1
  139. package/dist/verifyAgentskeptic.d.ts +4 -8
  140. package/dist/verifyAgentskeptic.d.ts.map +1 -1
  141. package/dist/verifyAgentskeptic.js +16 -21
  142. package/dist/verifyAgentskeptic.js.map +1 -1
  143. package/dist/verifyAgentskeptic.test.js +10 -12
  144. package/dist/verifyAgentskeptic.test.js.map +1 -1
  145. package/dist/verifyRunStateFromBufferedRunEvents.d.ts +18 -0
  146. package/dist/verifyRunStateFromBufferedRunEvents.d.ts.map +1 -0
  147. package/dist/verifyRunStateFromBufferedRunEvents.js +65 -0
  148. package/dist/verifyRunStateFromBufferedRunEvents.js.map +1 -0
  149. package/package.json +6 -5
  150. package/schemas/event.schema.json +35 -0
  151. package/schemas/openapi-commercial-v1.in.yaml +3 -3
  152. package/schemas/openapi-commercial-v1.yaml +3 -3
  153. package/schemas/outcome-certificate-v1.schema.json +89 -0
  154. package/schemas/public-verification-report-v2.schema.json +15 -0
  155. package/schemas/workflow-engine-result.schema.json +2 -1
  156. package/scripts/discovery-acquisition.lib.cjs +54 -80
  157. package/scripts/discovery-payload.lib.cjs +34 -5
  158. package/dist/withWorkflowVerification.persistBundle.test.d.ts +0 -2
  159. package/dist/withWorkflowVerification.persistBundle.test.d.ts.map +0 -1
  160. package/dist/withWorkflowVerification.persistBundle.test.js.map +0 -1
@@ -0,0 +1,254 @@
1
+ import { formatQuickVerifyHumanReport } from "./quickVerify/formatQuickVerifyHumanReport.js";
2
+ import { formatWorkflowTruthReportStruct } from "./workflowTruthReport.js";
3
+ export function deriveHighStakesReliance(runKind, stateRelation) {
4
+ if (runKind === "quick_preview")
5
+ return "prohibited";
6
+ if (stateRelation === "matches_expectations")
7
+ return "permitted";
8
+ return "prohibited";
9
+ }
10
+ export function workflowResultToStateRelation(result) {
11
+ if (result.status === "complete")
12
+ return "matches_expectations";
13
+ if (result.status === "inconsistent")
14
+ return "does_not_match";
15
+ return "not_established";
16
+ }
17
+ function truthStepToCertificateStep(step) {
18
+ return {
19
+ seq: step.seq,
20
+ toolId: step.toolId,
21
+ declaredAction: step.intendedEffect.narrative,
22
+ expectedOutcome: step.verifyTarget ?? step.intendedEffect.narrative,
23
+ observedOutcome: step.observedStateSummary,
24
+ };
25
+ }
26
+ function buildRelianceRationale(runKind, stateRelation, highStakesReliance) {
27
+ if (runKind === "quick_preview") {
28
+ return "Quick preview uses inferred, provisional checks. It is never sufficient as the sole basis for high-stakes ship, bill, compliance, or audit-final decisions—even when state appears to match.";
29
+ }
30
+ if (runKind === "contract_sql_langgraph_checkpoint_trust") {
31
+ if (highStakesReliance === "permitted") {
32
+ return "Contract verification used your registry and read-only SQL; every captured step matched declared expectations under the configured rules, and every LangGraph checkpoint rollup verdict is verified. You may treat this artifact as decision-grade for those steps, subject to your own scope and retention policy.";
33
+ }
34
+ if (stateRelation === "does_not_match") {
35
+ return "At least one step failed verification against the database (missing row, wrong values, or partial multi-effect failure), or a LangGraph checkpoint rollup verdict is inconsistent. Do not treat this run as meeting its intended persisted outcome.";
36
+ }
37
+ return "LangGraph checkpoint trust mode did not establish a single approved production snapshot (ineligible wire, incomplete verification, incomplete checkpoint rollup, or sequence integrity). Do not treat absence of a mismatch as proof of success.";
38
+ }
39
+ if (highStakesReliance === "permitted") {
40
+ return "Contract verification used your registry and read-only SQL; every captured step matched declared expectations under the configured rules. You may treat this artifact as decision-grade for those steps, subject to your own scope and retention policy.";
41
+ }
42
+ if (stateRelation === "does_not_match") {
43
+ return "At least one step failed verification against the database (missing row, wrong values, or partial multi-effect failure). Do not treat this run as meeting its intended persisted outcome.";
44
+ }
45
+ return "Verification could not be completed or could not establish a determinate match (incomplete registry, empty capture, indeterminate window, or connector issue). Do not treat absence of a mismatch as proof of success.";
46
+ }
47
+ function buildExplanationFromWorkflowResult(result) {
48
+ const truth = result.workflowTruthReport;
49
+ const details = [];
50
+ for (const step of truth.steps) {
51
+ for (const r of step.reasons) {
52
+ details.push({ code: r.code, message: r.message });
53
+ }
54
+ }
55
+ for (const r of result.runLevelReasons) {
56
+ details.push({ code: r.code, message: r.message });
57
+ }
58
+ const fe = truth.failureExplanation;
59
+ const headline = truth.failureAnalysis?.summary ??
60
+ (fe !== null ? `${fe.divergence} — expected: ${fe.expected}; observed: ${fe.observed}` : truth.trustSummary);
61
+ return { headline, details };
62
+ }
63
+ function rollupCheckpointGroupVerdict(outcomes) {
64
+ if (outcomes.some((o) => o.status === "incomplete_verification"))
65
+ return "incomplete";
66
+ if (outcomes.some((o) => o.status === "missing" || o.status === "inconsistent" || o.status === "partially_verified")) {
67
+ return "inconsistent";
68
+ }
69
+ if (outcomes.every((o) => o.status === "verified"))
70
+ return "verified";
71
+ return "incomplete";
72
+ }
73
+ function checkpointProductionMeaning(verdict) {
74
+ if (verdict === "verified") {
75
+ return "Production may advance under this checkpoint identity.";
76
+ }
77
+ if (verdict === "inconsistent") {
78
+ return "Do not advance production for this checkpoint identity until traces and database agree.";
79
+ }
80
+ return "Verification is incomplete for this checkpoint identity; production gate remains closed.";
81
+ }
82
+ export function computeCheckpointVerdictsFromWorkflowResult(result) {
83
+ const byKey = new Map();
84
+ for (const s of result.steps) {
85
+ if (s.langgraphCheckpointKey === undefined)
86
+ continue;
87
+ const g = byKey.get(s.langgraphCheckpointKey) ?? { seqs: [], outcomes: [] };
88
+ g.seqs.push(s.seq);
89
+ g.outcomes.push(s);
90
+ byKey.set(s.langgraphCheckpointKey, g);
91
+ }
92
+ const keys = [...byKey.keys()].sort((a, b) => {
93
+ const ea = byKey.get(a);
94
+ const eb = byKey.get(b);
95
+ const minA = Math.min(...ea.seqs);
96
+ const minB = Math.min(...eb.seqs);
97
+ return minA - minB || a.localeCompare(b);
98
+ });
99
+ return keys.map((key) => {
100
+ const { seqs, outcomes } = byKey.get(key);
101
+ const sortedSeqs = [...new Set(seqs)].sort((x, y) => x - y);
102
+ const verdict = rollupCheckpointGroupVerdict(outcomes);
103
+ return {
104
+ checkpointKey: key,
105
+ verdict,
106
+ seqs: sortedSeqs,
107
+ productionMeaning: checkpointProductionMeaning(verdict),
108
+ };
109
+ });
110
+ }
111
+ /** Exact stderr headline for LangGraph ineligible (A2) terminal contract. */
112
+ export const LANGGRAPH_CHECKPOINT_TRUST_INELIGIBLE_HEADLINE = "LangGraph checkpoint trust: ineligible";
113
+ export function buildIneligibleLangGraphCheckpointTrustCertificate(workflowId, runLevelReasons) {
114
+ const runKind = "contract_sql_langgraph_checkpoint_trust";
115
+ const stateRelation = "not_established";
116
+ const highStakesReliance = deriveHighStakesReliance(runKind, stateRelation);
117
+ const ineligibleHeadline = LANGGRAPH_CHECKPOINT_TRUST_INELIGIBLE_HEADLINE;
118
+ const details = runLevelReasons.length > 0
119
+ ? runLevelReasons.map((r) => ({ code: r.code, message: r.message }))
120
+ : [
121
+ {
122
+ code: "LANGGRAPH_INELIGIBLE",
123
+ message: "No schema-valid schemaVersion 3 tool_observed lines for this workflow in LangGraph checkpoint trust mode.",
124
+ },
125
+ ];
126
+ const humanReport = runLevelReasons.length > 0
127
+ ? `${ineligibleHeadline}\n${runLevelReasons.map((r) => `${r.code}: ${r.message}`).join("\n")}`
128
+ : `${ineligibleHeadline}\n${details[0].code}: ${details[0].message}`;
129
+ const cert = {
130
+ schemaVersion: 1,
131
+ workflowId,
132
+ runKind,
133
+ stateRelation,
134
+ highStakesReliance,
135
+ relianceRationale: buildRelianceRationale(runKind, stateRelation, highStakesReliance),
136
+ intentSummary: ineligibleHeadline,
137
+ explanation: { headline: ineligibleHeadline, details },
138
+ steps: [],
139
+ humanReport,
140
+ };
141
+ assertOutcomeCertificateInvariants(cert);
142
+ return cert;
143
+ }
144
+ export function buildOutcomeCertificateLangGraphCheckpointTrustFromWorkflowResult(result) {
145
+ const runKind = "contract_sql_langgraph_checkpoint_trust";
146
+ const stateRelation = workflowResultToStateRelation(result);
147
+ const highStakesReliance = deriveHighStakesReliance(runKind, stateRelation);
148
+ const truth = result.workflowTruthReport;
149
+ const steps = truth.steps.map(truthStepToCertificateStep);
150
+ const checkpointVerdicts = computeCheckpointVerdictsFromWorkflowResult(result);
151
+ const baseHuman = formatWorkflowTruthReportStruct(truth);
152
+ const humanReport = checkpointVerdicts.length === 0
153
+ ? baseHuman
154
+ : `${baseHuman}\n\nlanggraph_checkpoint_verdicts:\n${checkpointVerdicts
155
+ .map((c) => `${c.checkpointKey}\t${c.verdict}\t${c.productionMeaning}`)
156
+ .join("\n")}`;
157
+ const cert = {
158
+ schemaVersion: 1,
159
+ workflowId: result.workflowId,
160
+ runKind,
161
+ stateRelation,
162
+ highStakesReliance,
163
+ relianceRationale: buildRelianceRationale(runKind, stateRelation, highStakesReliance),
164
+ intentSummary: truth.trustSummary,
165
+ explanation: buildExplanationFromWorkflowResult(result),
166
+ steps,
167
+ humanReport,
168
+ checkpointVerdicts,
169
+ };
170
+ assertOutcomeCertificateInvariants(cert);
171
+ return cert;
172
+ }
173
+ /**
174
+ * Build Outcome Certificate from a finalized contract `WorkflowResult` (batch / library verify).
175
+ */
176
+ export function buildOutcomeCertificateFromWorkflowResult(result, runKind) {
177
+ const stateRelation = workflowResultToStateRelation(result);
178
+ const highStakesReliance = deriveHighStakesReliance(runKind, stateRelation);
179
+ const truth = result.workflowTruthReport;
180
+ const steps = truth.steps.map(truthStepToCertificateStep);
181
+ const humanReport = formatWorkflowTruthReportStruct(truth);
182
+ const cert = {
183
+ schemaVersion: 1,
184
+ workflowId: result.workflowId,
185
+ runKind,
186
+ stateRelation,
187
+ highStakesReliance,
188
+ relianceRationale: buildRelianceRationale(runKind, stateRelation, highStakesReliance),
189
+ intentSummary: truth.trustSummary,
190
+ explanation: buildExplanationFromWorkflowResult(result),
191
+ steps,
192
+ humanReport,
193
+ };
194
+ assertOutcomeCertificateInvariants(cert);
195
+ return cert;
196
+ }
197
+ function quickVerdictToStateRelation(verdict) {
198
+ if (verdict === "pass")
199
+ return "matches_expectations";
200
+ if (verdict === "fail")
201
+ return "does_not_match";
202
+ return "not_established";
203
+ }
204
+ export function buildOutcomeCertificateFromQuickReport(options) {
205
+ const { report, workflowId, humanReportOptions } = options;
206
+ const runKind = "quick_preview";
207
+ const stateRelation = quickVerdictToStateRelation(report.verdict);
208
+ const highStakesReliance = deriveHighStakesReliance(runKind, stateRelation);
209
+ const humanReport = formatQuickVerifyHumanReport(report, humanReportOptions);
210
+ const details = [];
211
+ for (const u of report.units) {
212
+ if (u.verdict !== "verified") {
213
+ details.push({
214
+ code: `quick_unit_${u.verdict}`,
215
+ message: u.reconciliation?.verification_verdict ?? u.verdict,
216
+ });
217
+ }
218
+ }
219
+ const cert = {
220
+ schemaVersion: 1,
221
+ workflowId,
222
+ runKind,
223
+ stateRelation,
224
+ highStakesReliance,
225
+ relianceRationale: buildRelianceRationale(runKind, stateRelation, highStakesReliance),
226
+ intentSummary: report.summary,
227
+ explanation: {
228
+ headline: report.summary,
229
+ details,
230
+ },
231
+ steps: report.units.map((u, i) => ({
232
+ seq: i,
233
+ declaredAction: `${u.sourceAction.toolName} (unit ${u.unitId})`,
234
+ expectedOutcome: u.reconciliation.expected,
235
+ observedOutcome: u.reconciliation.observed_database,
236
+ })),
237
+ humanReport,
238
+ };
239
+ assertOutcomeCertificateInvariants(cert);
240
+ return cert;
241
+ }
242
+ export function formatOutcomeCertificateHuman(certificate) {
243
+ return certificate.humanReport;
244
+ }
245
+ export function assertOutcomeCertificateInvariants(certificate) {
246
+ const expected = deriveHighStakesReliance(certificate.runKind, certificate.stateRelation);
247
+ if (certificate.highStakesReliance !== expected) {
248
+ throw new Error(`outcome_certificate: highStakesReliance ${certificate.highStakesReliance} !== derived ${expected} for runKind=${certificate.runKind} stateRelation=${certificate.stateRelation}`);
249
+ }
250
+ if (formatOutcomeCertificateHuman(certificate) !== certificate.humanReport) {
251
+ throw new Error("outcome_certificate: humanReport must equal formatOutcomeCertificateHuman(certificate)");
252
+ }
253
+ }
254
+ //# sourceMappingURL=outcomeCertificate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcomeCertificate.js","sourceRoot":"","sources":["../src/outcomeCertificate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=outcomeCertificate.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcomeCertificate.test.d.ts","sourceRoot":"","sources":["../src/outcomeCertificate.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ import { mkdtempSync, readFileSync, rmSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import { dirname, join } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { DatabaseSync } from "node:sqlite";
6
+ import { describe, expect, it } from "vitest";
7
+ import { loadSchemaValidator } from "./schemaLoad.js";
8
+ import { verifyWorkflow } from "./pipeline.js";
9
+ import { assertOutcomeCertificateInvariants, buildOutcomeCertificateFromWorkflowResult, deriveHighStakesReliance, formatOutcomeCertificateHuman, } from "./outcomeCertificate.js";
10
+ const __dirname = dirname(fileURLToPath(import.meta.url));
11
+ const root = join(__dirname, "..");
12
+ function seedTempSqliteDb() {
13
+ const dir = mkdtempSync(join(tmpdir(), "outcome-cert-"));
14
+ const dbPath = join(dir, "demo.db");
15
+ const seed = readFileSync(join(root, "examples", "seed.sql"), "utf8");
16
+ const db = new DatabaseSync(dbPath);
17
+ db.exec(seed);
18
+ db.close();
19
+ return {
20
+ dbPath,
21
+ cleanup: () => rmSync(dir, { recursive: true, force: true }),
22
+ };
23
+ }
24
+ describe("outcomeCertificate", () => {
25
+ it("deriveHighStakesReliance matches normative table", () => {
26
+ expect(deriveHighStakesReliance("quick_preview", "matches_expectations")).toBe("prohibited");
27
+ expect(deriveHighStakesReliance("contract_sql", "matches_expectations")).toBe("permitted");
28
+ expect(deriveHighStakesReliance("contract_sql", "does_not_match")).toBe("prohibited");
29
+ expect(deriveHighStakesReliance("contract_sql", "not_established")).toBe("prohibited");
30
+ expect(deriveHighStakesReliance("contract_sql_langgraph_checkpoint_trust", "matches_expectations")).toBe("permitted");
31
+ expect(deriveHighStakesReliance("contract_sql_langgraph_checkpoint_trust", "not_established")).toBe("prohibited");
32
+ });
33
+ it("wf_complete certificate passes schema and invariants", async () => {
34
+ const { dbPath, cleanup } = seedTempSqliteDb();
35
+ try {
36
+ const result = await verifyWorkflow({
37
+ workflowId: "wf_complete",
38
+ eventsPath: join(root, "examples", "events.ndjson"),
39
+ registryPath: join(root, "examples", "tools.json"),
40
+ database: { kind: "sqlite", path: dbPath },
41
+ logStep: () => { },
42
+ truthReport: () => { },
43
+ });
44
+ const certificate = buildOutcomeCertificateFromWorkflowResult(result, "contract_sql");
45
+ const validate = loadSchemaValidator("outcome-certificate-v1");
46
+ expect(validate(certificate)).toBe(true);
47
+ assertOutcomeCertificateInvariants(certificate);
48
+ expect(formatOutcomeCertificateHuman(certificate)).toBe(certificate.humanReport);
49
+ }
50
+ finally {
51
+ cleanup();
52
+ }
53
+ });
54
+ it("wf_missing certificate is does_not_match", async () => {
55
+ const { dbPath, cleanup } = seedTempSqliteDb();
56
+ try {
57
+ const result = await verifyWorkflow({
58
+ workflowId: "wf_missing",
59
+ eventsPath: join(root, "examples", "events.ndjson"),
60
+ registryPath: join(root, "examples", "tools.json"),
61
+ database: { kind: "sqlite", path: dbPath },
62
+ logStep: () => { },
63
+ truthReport: () => { },
64
+ });
65
+ const certificate = buildOutcomeCertificateFromWorkflowResult(result, "contract_sql");
66
+ expect(certificate.stateRelation).toBe("does_not_match");
67
+ expect(certificate.highStakesReliance).toBe("prohibited");
68
+ }
69
+ finally {
70
+ cleanup();
71
+ }
72
+ });
73
+ });
74
+ //# sourceMappingURL=outcomeCertificate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcomeCertificate.test.js","sourceRoot":"","sources":["../src/outcomeCertificate.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import { DatabaseSync } from "node:sqlite";
2
- import type { StepOutcome, ToolObservedEvent, ToolRegistryEntry, VerificationDatabase, VerificationPolicy, WorkflowResult } from "./types.js";
2
+ import type { EventFileAggregateCounts, EventSequenceIntegrity, Reason, StepOutcome, RunEvent, ToolObservedEvent, ToolRegistryEntry, VerificationDatabase, VerificationPolicy, WorkflowResult } from "./types.js";
3
3
  export declare function loadToolsRegistry(registryPath: string): Map<string, ToolRegistryEntry>;
4
+ /** Stable rollup key for LangGraph checkpoint trust (v3 `tool_observed` only). */
5
+ export declare function langgraphCheckpointKeyFromToolObserved(ev: ToolObservedEvent): string | undefined;
4
6
  export declare function verifyToolObservedStep(options: {
5
7
  workflowId: string;
6
8
  ev: ToolObservedEvent;
@@ -10,6 +12,21 @@ export declare function verifyToolObservedStep(options: {
10
12
  verificationPolicy: VerificationPolicy;
11
13
  repeatObservationCount?: number;
12
14
  }): StepOutcome;
15
+ /** Single kernel: reconciles prepared tool events + run metadata against a registry-backed DB. */
16
+ export type VerifyRunStateFromEventsInput = {
17
+ workflowId: string;
18
+ events: ToolObservedEvent[];
19
+ runEvents: RunEvent[];
20
+ runLevelReasons: Reason[];
21
+ eventSequenceIntegrity: EventSequenceIntegrity;
22
+ eventFileAggregateCounts: EventFileAggregateCounts;
23
+ registry: Map<string, ToolRegistryEntry>;
24
+ database: VerificationDatabase;
25
+ verificationPolicy: VerificationPolicy;
26
+ logStep: (line: object) => void;
27
+ truthReport: (report: string) => void;
28
+ };
29
+ export declare function verifyRunStateFromEvents(input: VerifyRunStateFromEventsInput): Promise<WorkflowResult>;
13
30
  export declare function verifyWorkflow(options: {
14
31
  workflowId: string;
15
32
  eventsPath: string;
@@ -19,20 +36,4 @@ export declare function verifyWorkflow(options: {
19
36
  logStep?: (line: object) => void;
20
37
  truthReport?: (report: string) => void;
21
38
  }): Promise<WorkflowResult>;
22
- export declare function withWorkflowVerification(options: {
23
- workflowId: string;
24
- registryPath: string;
25
- dbPath: string;
26
- verificationPolicy?: VerificationPolicy;
27
- logStep?: (line: object) => void;
28
- truthReport?: (report: string) => void;
29
- /**
30
- * Writes canonical bundle after successful verification (`runId` = basename of `outDir`).
31
- * Optional `ed25519PrivateKeyPemPath`: PKCS#8 PEM path → schemaVersion 2 + `workflow-result.sig.json`.
32
- */
33
- persistBundle?: {
34
- outDir: string;
35
- ed25519PrivateKeyPemPath?: string;
36
- };
37
- }, run: (observeStep: (value: unknown) => void) => void | Promise<void>): Promise<WorkflowResult>;
38
39
  //# sourceMappingURL=pipeline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAsB3C,OAAO,KAAK,EAIV,WAAW,EAEX,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAElB,cAAc,EACf,MAAM,YAAY,CAAC;AA4BpB,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAEtF;AAgED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,iBAAiB,CAAC;IACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACzC,EAAE,EAAE,YAAY,CAAC;IACjB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,GAAG,WAAW,CA4Dd;AA4ID,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,GAAG,OAAO,CAAC,cAAc,CAAC,CAwF1B;AAoGD,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC;;;OAGG;IACH,aAAa,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,wBAAwB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE,EACD,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACnE,OAAO,CAAC,cAAc,CAAC,CAiDzB"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAoB3C,OAAO,KAAK,EACV,wBAAwB,EACxB,sBAAsB,EAGtB,MAAM,EACN,WAAW,EACX,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAElB,cAAc,EACf,MAAM,YAAY,CAAC;AAyBpB,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAEtF;AAMD,kFAAkF;AAClF,wBAAgB,sCAAsC,CAAC,EAAE,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAIhG;AAqED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,iBAAiB,CAAC;IACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACzC,EAAE,EAAE,YAAY,CAAC;IACjB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,GAAG,WAAW,CA4Dd;AA4ID,kGAAkG;AAClG,MAAM,MAAM,6BAA6B,GAAG;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,wBAAwB,EAAE,wBAAwB,CAAC;IACnD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACzC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,CAAC;AAEF,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,GAAG,OAAO,CAAC,cAAc,CAAC,CA4F5G;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,GAAG,OAAO,CAAC,cAAc,CAAC,CAsB1B"}