agentskeptic 8.3.0 → 8.4.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 (52) hide show
  1. package/README.md +9 -5
  2. package/config/marketing.json +1 -1
  3. package/dist/cliArgv.d.ts +6 -0
  4. package/dist/cliArgv.d.ts.map +1 -1
  5. package/dist/cliArgv.js +9 -0
  6. package/dist/cliArgv.js.map +1 -1
  7. package/dist/coverageBudget.d.ts +22 -0
  8. package/dist/coverageBudget.d.ts.map +1 -0
  9. package/dist/coverageBudget.js +125 -0
  10. package/dist/coverageBudget.js.map +1 -0
  11. package/dist/coverageBudget.test.d.ts +2 -0
  12. package/dist/coverageBudget.test.d.ts.map +1 -0
  13. package/dist/coverageBudget.test.js +48 -0
  14. package/dist/coverageBudget.test.js.map +1 -0
  15. package/dist/coverageBudgetExit.d.ts +9 -0
  16. package/dist/coverageBudgetExit.d.ts.map +1 -0
  17. package/dist/coverageBudgetExit.js +18 -0
  18. package/dist/coverageBudgetExit.js.map +1 -0
  19. package/dist/coverageBudgetExit.test.d.ts +2 -0
  20. package/dist/coverageBudgetExit.test.d.ts.map +1 -0
  21. package/dist/coverageBudgetExit.test.js +30 -0
  22. package/dist/coverageBudgetExit.test.js.map +1 -0
  23. package/dist/coverageBudgetPolicy.d.ts +24 -0
  24. package/dist/coverageBudgetPolicy.d.ts.map +1 -0
  25. package/dist/coverageBudgetPolicy.js +55 -0
  26. package/dist/coverageBudgetPolicy.js.map +1 -0
  27. package/dist/coverageBudgetPolicy.test.d.ts +2 -0
  28. package/dist/coverageBudgetPolicy.test.d.ts.map +1 -0
  29. package/dist/coverageBudgetPolicy.test.js +36 -0
  30. package/dist/coverageBudgetPolicy.test.js.map +1 -0
  31. package/dist/decisionEvidenceHumanLayer.d.ts +6 -2
  32. package/dist/decisionEvidenceHumanLayer.d.ts.map +1 -1
  33. package/dist/decisionEvidenceHumanLayer.js +6 -4
  34. package/dist/decisionEvidenceHumanLayer.js.map +1 -1
  35. package/dist/discovery-payload-v1.json +1 -1
  36. package/dist/execution-identity.v1.json +1 -1
  37. package/dist/publicDistribution.generated.d.ts +1 -1
  38. package/dist/publicDistribution.generated.js +1 -1
  39. package/dist/schemaLoad.d.ts +1 -1
  40. package/dist/schemaLoad.d.ts.map +1 -1
  41. package/dist/schemaLoad.js +2 -0
  42. package/dist/schemaLoad.js.map +1 -1
  43. package/dist/standardVerifyWorkflowCli.d.ts +8 -1
  44. package/dist/standardVerifyWorkflowCli.d.ts.map +1 -1
  45. package/dist/standardVerifyWorkflowCli.js +21 -2
  46. package/dist/standardVerifyWorkflowCli.js.map +1 -1
  47. package/dist/verify/batchVerifyTelemetrySubcommand.d.ts.map +1 -1
  48. package/dist/verify/batchVerifyTelemetrySubcommand.js +71 -10
  49. package/dist/verify/batchVerifyTelemetrySubcommand.js.map +1 -1
  50. package/package.json +1 -1
  51. package/schemas/coverage-budget-v1.schema.json +41 -0
  52. package/schemas/openapi-commercial-v1.yaml +1 -1
package/README.md CHANGED
@@ -16,7 +16,7 @@ AgentSkeptic re-checks the stores your agent claims to change, then returns a de
16
16
  ```text
17
17
  ### Success (`wf_complete`) — canonical `agentskeptic check`
18
18
 
19
- stderr (first line): truth_check_verdict: trusted
19
+ stderr (first lines): truth_check_verdict: trusted, then release_critical_truth_check_verdict: trusted
20
20
  stdout (Outcome Certificate excerpt): {"schemaVersion":3,"workflowId":"wf_complete","runKind":"contract_sql","stateRelation":"matches_expectations"}
21
21
 
22
22
  ### Failure (`wf_missing`)
@@ -24,6 +24,8 @@ stdout (Outcome Certificate excerpt): {"schemaVersion":3,"workflowId":"wf_comple
24
24
  stderr (first line): truth_check_verdict: not_trusted
25
25
  Human report then explains ROW_ABSENT (missing downstream row vs registry expectation).
26
26
  stdout (Outcome Certificate excerpt): {"schemaVersion":3,"workflowId":"wf_missing","runKind":"contract_sql","stateRelation":"does_not_match"}
27
+
28
+ Optional coverage budgets: when configured (`--coverage-budget` or `agentskeptic/coverage-budget.json` beside `--project`), stderr adds `coverage_budget_verdict:` and `coverage_budget_detail:` after the two truth lines — see docs/integrate.md § Optional coverage budgets.
27
29
  ```
28
30
 
29
31
  [How it works](https://agentskeptic.com/database-truth-vs-traces)
@@ -34,7 +36,7 @@ stdout (Outcome Certificate excerpt): {"schemaVersion":3,"workflowId":"wf_missin
34
36
 
35
37
  **Start here:** **[`docs/first-truth-check.md`](docs/first-truth-check.md)** — canonical first-run steps (command, inputs, stdout/stderr, CI, Cursor, troubleshooting).
36
38
 
37
- Compare recorded tool activity to downstream state (SQL and, in contract mode, HTTP witnesses, object storage, vectors, Mongo per your registry) and get **Outcome Certificate v3** on stdout (**`schemaVersion: 3`**, **`failureSpine`**, **`evidenceCompleteness`**) plus a **`truth_check_verdict`** line on stderr ([**Trust artifact naming glossary**](docs/outcome-certificate-normative.md#trust-artifact-naming-glossary) explains receipts and decision-bundle `exit.json` naming):
39
+ Compare recorded tool activity to downstream state (SQL and, in contract mode, HTTP witnesses, object storage, vectors, Mongo per your registry) and get **Outcome Certificate v3** on stdout (**`schemaVersion: 3`**, **`failureSpine`**, **`evidenceCompleteness`**) plus **`truth_check_verdict:`** and **`release_critical_truth_check_verdict:`** on stderr ([**Trust artifact naming glossary**](docs/outcome-certificate-normative.md#trust-artifact-naming-glossary) explains receipts and decision-bundle `exit.json` naming). Optional **coverage budgets** append two more machine lines only when a policy is active — **[`docs/integrate.md`](docs/integrate.md#optional-coverage-budgets)**.
38
40
 
39
41
  ```bash
40
42
  npx agentskeptic check --workflow-id wf_example \
@@ -46,7 +48,9 @@ With the conventional layout, **`--registry`** and **`--events`** default to **`
46
48
 
47
49
  **No license required.** The default `agentskeptic check` path needs no `AGENTSKEPTIC_API_KEY` and no license server; it runs stateless contract verification locally. (Stateful **`agentskeptic enforce`** for baselines, drift, and acceptance is a later opt-in commercial path — see below.)
48
50
 
49
- **Reading the result.** stdout is one **Outcome Certificate v3** line (machine JSON as above). On verdict exits, stderr begins with one of:
51
+ **Reading the result.** stdout is one **Outcome Certificate v3** line (machine JSON as above). On verdict exits, stderr begins with **`truth_check_verdict:`** and **`release_critical_truth_check_verdict:`** (each `trusted`, `not_trusted`, or `unknown`), then the human certificate report. When a coverage budget policy is active, two additional machine lines follow — see **[`docs/integrate.md`](docs/integrate.md#optional-coverage-budgets)**.
52
+
53
+ The **`truth_check_verdict`** values mean:
50
54
 
51
55
  ```text
52
56
  truth_check_verdict: trusted
@@ -118,7 +122,7 @@ const certificate = await skeptic.check({
118
122
 
119
123
  ### Python / LangGraph / CrewAI (same truth check)
120
124
 
121
- The default verification contract is unchanged: **`agentskeptic check` semantics**, Outcome Certificate on stdout, and **`truth_check_verdict`** on stderr—whether you invoke the published **npm CLI** alongside your stack or use the **Python SDK / extras** documented in **[`docs/integrate.md`](docs/integrate.md)**. Start here: **`pip install`** and framework notes there, plus **[`examples/python-verification/README.md`](examples/python-verification/README.md)**.
125
+ The default verification contract is unchanged: **`agentskeptic check` semantics**, Outcome Certificate on stdout, and the **`truth_check_verdict:`** / **`release_critical_truth_check_verdict:`** stderr prefix—whether you invoke the published **npm CLI** alongside your stack or use the **Python SDK / extras** documented in **[`docs/integrate.md`](docs/integrate.md)**. Start here: **`pip install`** and framework notes there, plus **[`examples/python-verification/README.md`](examples/python-verification/README.md)**.
122
126
 
123
127
  See **[`docs/integrate.md`](docs/integrate.md)** (canonical integrator guide — see title in integrate.md) and [`docs/migrate-2.md`](docs/migrate-2.md) for 1.x → 2.0 renames.
124
128
 
@@ -178,7 +182,7 @@ This is the fastest way to see **`ROW_ABSENT`** versus **verified** on the same
178
182
  agentskeptic check --workflow-id <id> --events <path> --registry <path> --db <sqlitePath>
179
183
  ```
180
184
 
181
- stdout is the Outcome Certificate; stderr begins with `truth_check_verdict: trusted|not_trusted|unknown` plus the human report.
185
+ stdout is the Outcome Certificate; stderr begins with `truth_check_verdict: trusted|not_trusted|unknown` and `release_critical_truth_check_verdict: trusted|not_trusted|unknown`, then the human report (optional coverage budget lines when configured).
182
186
 
183
187
  **Local feedback loop with run history (advanced):** `agentskeptic loop` wraps the same `check` contract and adds local run history, prior-run comparison, and a single TRUSTED / NOT TRUSTED / UNKNOWN line for tight inner-loop iteration — normative contract: [`docs/local-feedback-loop.md`](docs/local-feedback-loop.md).
184
188
 
@@ -42,7 +42,7 @@
42
42
  },
43
43
  "shareableTerminalDemo": {
44
44
  "title": "Bundled terminal proof",
45
- "transcript": "### Success (`wf_complete`) — canonical `agentskeptic check`\n\nstderr (first line): truth_check_verdict: trusted\nstdout (Outcome Certificate excerpt): {\"schemaVersion\":3,\"workflowId\":\"wf_complete\",\"runKind\":\"contract_sql\",\"stateRelation\":\"matches_expectations\"}\n\n### Failure (`wf_missing`)\n\nstderr (first line): truth_check_verdict: not_trusted\nHuman report then explains ROW_ABSENT (missing downstream row vs registry expectation).\nstdout (Outcome Certificate excerpt): {\"schemaVersion\":3,\"workflowId\":\"wf_missing\",\"runKind\":\"contract_sql\",\"stateRelation\":\"does_not_match\"}"
45
+ "transcript": "### Success (`wf_complete`) — canonical `agentskeptic check`\n\nstderr (first lines): truth_check_verdict: trusted, then release_critical_truth_check_verdict: trusted\nstdout (Outcome Certificate excerpt): {\"schemaVersion\":3,\"workflowId\":\"wf_complete\",\"runKind\":\"contract_sql\",\"stateRelation\":\"matches_expectations\"}\n\n### Failure (`wf_missing`)\n\nstderr (first line): truth_check_verdict: not_trusted\nHuman report then explains ROW_ABSENT (missing downstream row vs registry expectation).\nstdout (Outcome Certificate excerpt): {\"schemaVersion\":3,\"workflowId\":\"wf_missing\",\"runKind\":\"contract_sql\",\"stateRelation\":\"does_not_match\"}\n\nOptional coverage budgets: when configured (`--coverage-budget` or `agentskeptic/coverage-budget.json` beside `--project`), stderr adds `coverage_budget_verdict:` and `coverage_budget_detail:` after the two truth lines — see docs/integrate.md § Optional coverage budgets."
46
46
  },
47
47
  "cliFollowupLines": [
48
48
  "Context: {{ACQUISITION_URL}}",
package/dist/cliArgv.d.ts CHANGED
@@ -24,6 +24,12 @@ export type ParsedBatchVerifyCli = {
24
24
  decisionNextActionPath: string | undefined;
25
25
  /** When true, stderr includes truth_check_verdict for primary product path (agentskeptic check). */
26
26
  invokedViaCheck?: boolean;
27
+ /** Absolute resolved --project root when present. */
28
+ projectPath?: string;
29
+ /** Explicit --coverage-budget path (may be relative to cwd). */
30
+ coverageBudgetPathArg?: string;
31
+ /** When true, fail exit 1 on budget miss if state exit would be 0 (requires active budget policy). */
32
+ enforceCoverageBudget?: boolean;
27
33
  };
28
34
  /**
29
35
  * Parse argv for bare `agentskeptic` batch mode (no subcommand).
@@ -1 +1 @@
1
- {"version":3,"file":"cliArgv.d.ts","sourceRoot":"","sources":["../src/cliArgv.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAI3E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIzE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAUhE;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAyBjF;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAUpE;AAiCD,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,gHAAgH;IAChH,wBAAwB,EAAE,OAAO,CAAC;IAClC,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,uBAAuB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,oGAAoG;IACpG,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,oBAAoB,CA0D5E;AAED;;;;GAIG;AACH,wBAAgB,wCAAwC,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAmBjF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAoBhE;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,aAAa,EAAE,OAAO,CAAC;IACvB,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,uBAAuB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,cAAc,CA8BhE"}
1
+ {"version":3,"file":"cliArgv.d.ts","sourceRoot":"","sources":["../src/cliArgv.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAI3E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIzE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAUhE;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAyBjF;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAUpE;AAiCD,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,gHAAgH;IAChH,wBAAwB,EAAE,OAAO,CAAC;IAClC,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,uBAAuB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,oGAAoG;IACpG,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,sGAAsG;IACtG,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAqE5E;AAED;;;;GAIG;AACH,wBAAgB,wCAAwC,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAmBjF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAoBhE;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,aAAa,EAAE,OAAO,CAAC;IACvB,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,uBAAuB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,cAAc,CA8BhE"}
package/dist/cliArgv.js CHANGED
@@ -112,6 +112,10 @@ export function parseBatchVerifyCliArgs(args) {
112
112
  const decisionAttestationPath = argValue(args, "--decision-attestation");
113
113
  const decisionNextActionPath = argValue(args, "--decision-next-action");
114
114
  const projectRoot = process.cwd();
115
+ const projectRaw = argValue(args, "--project");
116
+ const projectPath = projectRaw !== undefined && projectRaw.length > 0 ? path.resolve(projectRoot, projectRaw) : undefined;
117
+ const coverageBudgetPathArg = argValue(args, "--coverage-budget");
118
+ const enforceCoverageBudget = args.includes("--enforce-coverage-budget");
115
119
  return {
116
120
  workflowId,
117
121
  eventsPath,
@@ -129,6 +133,11 @@ export function parseBatchVerifyCliArgs(args) {
129
133
  decisionAttestationPath,
130
134
  decisionNextActionPath,
131
135
  invokedViaCheck: args.includes("--internal-invoked-via-check"),
136
+ ...(projectPath !== undefined ? { projectPath } : {}),
137
+ ...(coverageBudgetPathArg !== undefined && coverageBudgetPathArg.length > 0 ?
138
+ { coverageBudgetPathArg }
139
+ : {}),
140
+ ...(enforceCoverageBudget ? { enforceCoverageBudget: true } : {}),
132
141
  };
133
142
  }
134
143
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"cliArgv.js","sourceRoot":"","sources":["../src/cliArgv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cliArgv.js","sourceRoot":"","sources":["../src/cliArgv.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { OutcomeCertificateV1 } from "./outcomeCertificate.js";
2
+ import type { CoverageBudgetPolicyV1 } from "./coverageBudgetPolicy.js";
3
+ export type CoverageBudgetMachineCode = "PASS" | "FAIL_UNDERFULL" | "SKIP_NO_ENTRY" | "UNEVAL_NO_WITNESS";
4
+ export type CoverageBudgetVerdict = "pass" | "fail" | "skipped" | "unevaluable";
5
+ export type CoverageBudgetEvaluation = {
6
+ verdict: CoverageBudgetVerdict;
7
+ code: CoverageBudgetMachineCode;
8
+ /** Single machine line after `coverage_budget_verdict:` */
9
+ detailLine: string;
10
+ /** Inserted before humanReport in stderr (includes trailing newline before human). */
11
+ humanBlock: string;
12
+ };
13
+ /**
14
+ * Phase B: evaluate policy row against certificate witness rollup (after certificate exists).
15
+ */
16
+ export declare function evaluateCoverageBudgetPhaseB(options: {
17
+ certificate: OutcomeCertificateV1;
18
+ policy: CoverageBudgetPolicyV1;
19
+ policyPath: string;
20
+ }): CoverageBudgetEvaluation;
21
+ export declare function writeCoverageBudgetMachineLinesToStderr(evaluation: CoverageBudgetEvaluation): void;
22
+ //# sourceMappingURL=coverageBudget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverageBudget.d.ts","sourceRoot":"","sources":["../src/coverageBudget.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,gBAAgB,GAAG,eAAe,GAAG,mBAAmB,CAAC;AAE1G,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,CAAC;AAEhF,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,qBAAqB,CAAC;IAC/B,IAAI,EAAE,yBAAyB,CAAC;IAChC,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAqDF;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,WAAW,EAAE,oBAAoB,CAAC;IAClC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,wBAAwB,CAyF3B;AAED,wBAAgB,uCAAuC,CAAC,UAAU,EAAE,wBAAwB,GAAG,IAAI,CAGlG"}
@@ -0,0 +1,125 @@
1
+ const COVERAGE_BUDGET_BEGIN = "=== coverage_budget ===";
2
+ const COVERAGE_BUDGET_END = "=== end coverage_budget ===";
3
+ function sortedCsv(kinds) {
4
+ if (kinds.length === 0)
5
+ return "-";
6
+ return [...kinds].sort((a, b) => a.localeCompare(b)).join(",");
7
+ }
8
+ function buildDetailLine(args) {
9
+ const wf = encodeURIComponent(args.workflowId);
10
+ return [
11
+ `workflow=${wf}`,
12
+ `verdict=${args.verdict}`,
13
+ `required=${sortedCsv(args.required)}`,
14
+ `satisfied=${sortedCsv(args.satisfied)}`,
15
+ `missing=${sortedCsv(args.missing)}`,
16
+ `code=${args.code}`,
17
+ ].join(" ");
18
+ }
19
+ function buildHumanBlock(args) {
20
+ return (`${COVERAGE_BUDGET_BEGIN}\n` +
21
+ `policy_path: ${args.policyPath}\n` +
22
+ `required_kinds: ${args.requiredKinds}\n` +
23
+ `observed_fully_satisfied: ${args.observed}\n` +
24
+ `result: ${args.resultLine}\n` +
25
+ `${COVERAGE_BUDGET_END}\n`);
26
+ }
27
+ function witnessRollup(certificate) {
28
+ const w = certificate.evidenceCompleteness?.witnessCoverage;
29
+ if (!w || w.schemaVersion !== 1 || !Array.isArray(w.fullySatisfiedKinds))
30
+ return null;
31
+ return w;
32
+ }
33
+ /**
34
+ * Phase B: evaluate policy row against certificate witness rollup (after certificate exists).
35
+ */
36
+ export function evaluateCoverageBudgetPhaseB(options) {
37
+ const { certificate, policy, policyPath } = options;
38
+ const row = policy.workflows.find((r) => r.workflowId === certificate.workflowId);
39
+ if (row === undefined) {
40
+ const detailLine = buildDetailLine({
41
+ workflowId: certificate.workflowId,
42
+ verdict: "skipped",
43
+ required: [],
44
+ satisfied: [],
45
+ missing: [],
46
+ code: "SKIP_NO_ENTRY",
47
+ });
48
+ const human = buildHumanBlock({
49
+ policyPath,
50
+ requiredKinds: "-",
51
+ observed: "-",
52
+ resultLine: `skipped_no_entry (no policy row for workflow "${certificate.workflowId}")`,
53
+ });
54
+ return {
55
+ verdict: "skipped",
56
+ code: "SKIP_NO_ENTRY",
57
+ detailLine,
58
+ humanBlock: human,
59
+ };
60
+ }
61
+ const required = [...row.minimumFullySatisfiedKinds].sort((a, b) => a.localeCompare(b));
62
+ const W = witnessRollup(certificate);
63
+ if (W === null) {
64
+ const detailLine = buildDetailLine({
65
+ workflowId: certificate.workflowId,
66
+ verdict: "unevaluable",
67
+ required,
68
+ satisfied: [],
69
+ missing: [],
70
+ code: "UNEVAL_NO_WITNESS",
71
+ });
72
+ const human = buildHumanBlock({
73
+ policyPath,
74
+ requiredKinds: sortedCsv(required),
75
+ observed: "-",
76
+ resultLine: "unevaluable_no_witness_rollup (certificate lacks witnessCoverage.fullySatisfiedKinds)",
77
+ });
78
+ return {
79
+ verdict: "unevaluable",
80
+ code: "UNEVAL_NO_WITNESS",
81
+ detailLine,
82
+ humanBlock: human,
83
+ };
84
+ }
85
+ const satisfiedSet = new Set(W.fullySatisfiedKinds);
86
+ const satisfied = [...W.fullySatisfiedKinds].sort((a, b) => a.localeCompare(b));
87
+ const missing = required.filter((k) => !satisfiedSet.has(k));
88
+ if (missing.length === 0) {
89
+ const detailLine = buildDetailLine({
90
+ workflowId: certificate.workflowId,
91
+ verdict: "pass",
92
+ required,
93
+ satisfied,
94
+ missing: [],
95
+ code: "PASS",
96
+ });
97
+ const human = buildHumanBlock({
98
+ policyPath,
99
+ requiredKinds: sortedCsv(required),
100
+ observed: sortedCsv(satisfied),
101
+ resultLine: "pass",
102
+ });
103
+ return { verdict: "pass", code: "PASS", detailLine, humanBlock: human };
104
+ }
105
+ const detailLine = buildDetailLine({
106
+ workflowId: certificate.workflowId,
107
+ verdict: "fail",
108
+ required,
109
+ satisfied,
110
+ missing,
111
+ code: "FAIL_UNDERFULL",
112
+ });
113
+ const human = buildHumanBlock({
114
+ policyPath,
115
+ requiredKinds: sortedCsv(required),
116
+ observed: sortedCsv(satisfied),
117
+ resultLine: "fail — state_relation may still be matches_expectations; coverage budget not satisfied.",
118
+ });
119
+ return { verdict: "fail", code: "FAIL_UNDERFULL", detailLine, humanBlock: human };
120
+ }
121
+ export function writeCoverageBudgetMachineLinesToStderr(evaluation) {
122
+ process.stderr.write(`coverage_budget_verdict: ${evaluation.verdict}\n`);
123
+ process.stderr.write(`coverage_budget_detail: ${evaluation.detailLine}\n`);
124
+ }
125
+ //# sourceMappingURL=coverageBudget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverageBudget.js","sourceRoot":"","sources":["../src/coverageBudget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=coverageBudget.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverageBudget.test.d.ts","sourceRoot":"","sources":["../src/coverageBudget.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { readFileSync } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { evaluateCoverageBudgetPhaseB } from "./coverageBudget.js";
6
+ const __dirname = dirname(fileURLToPath(import.meta.url));
7
+ const root = join(__dirname, "..");
8
+ function loadCert(name) {
9
+ const raw = readFileSync(join(root, "test", "fixtures", "outcome-ci-surface", name), "utf8");
10
+ return JSON.parse(raw);
11
+ }
12
+ describe("evaluateCoverageBudgetPhaseB", () => {
13
+ const policyPath = "/tmp/policy.json";
14
+ const policy = {
15
+ schemaVersion: 1,
16
+ workflows: [{ workflowId: "wf_complete", minimumFullySatisfiedKinds: ["http_witness", "sql"] }],
17
+ };
18
+ it("passes when required kinds are subset of fullySatisfiedKinds", () => {
19
+ const cert = loadCert("trusted.cert.json");
20
+ const p = {
21
+ ...policy,
22
+ workflows: [{ workflowId: "wf_complete", minimumFullySatisfiedKinds: ["sql"] }],
23
+ };
24
+ const r = evaluateCoverageBudgetPhaseB({ certificate: cert, policy: p, policyPath });
25
+ expect(r.verdict).toBe("pass");
26
+ expect(r.code).toBe("PASS");
27
+ expect(r.detailLine).toContain("code=PASS");
28
+ expect(r.detailLine).toContain(`workflow=${encodeURIComponent("wf_complete")}`);
29
+ });
30
+ it("fails when required kind missing", () => {
31
+ const cert = loadCert("trusted.cert.json");
32
+ const r = evaluateCoverageBudgetPhaseB({ certificate: cert, policy, policyPath });
33
+ expect(r.verdict).toBe("fail");
34
+ expect(r.code).toBe("FAIL_UNDERFULL");
35
+ expect(r.detailLine).toContain("missing=http_witness");
36
+ });
37
+ it("skipped when no workflow row", () => {
38
+ const cert = loadCert("trusted.cert.json");
39
+ const p = {
40
+ schemaVersion: 1,
41
+ workflows: [{ workflowId: "wf_other", minimumFullySatisfiedKinds: ["sql"] }],
42
+ };
43
+ const r = evaluateCoverageBudgetPhaseB({ certificate: cert, policy: p, policyPath });
44
+ expect(r.verdict).toBe("skipped");
45
+ expect(r.code).toBe("SKIP_NO_ENTRY");
46
+ });
47
+ });
48
+ //# sourceMappingURL=coverageBudget.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverageBudget.test.js","sourceRoot":"","sources":["../src/coverageBudget.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { CoverageBudgetVerdict } from "./coverageBudget.js";
2
+ export declare function baseExitFromStateRelation(stateRelation: string): 0 | 1 | 2;
3
+ export declare function resolveFinalExitCode(args: {
4
+ baseExit: 0 | 1 | 2;
5
+ budgetActive: boolean;
6
+ budgetVerdict: CoverageBudgetVerdict | null;
7
+ enforceCoverageBudget: boolean;
8
+ }): 0 | 1 | 2;
9
+ //# sourceMappingURL=coverageBudgetExit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverageBudgetExit.d.ts","sourceRoot":"","sources":["../src/coverageBudgetExit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjE,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAI1E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC5C,qBAAqB,EAAE,OAAO,CAAC;CAChC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAMZ"}
@@ -0,0 +1,18 @@
1
+ export function baseExitFromStateRelation(stateRelation) {
2
+ if (stateRelation === "matches_expectations")
3
+ return 0;
4
+ if (stateRelation === "does_not_match")
5
+ return 1;
6
+ return 2;
7
+ }
8
+ export function resolveFinalExitCode(args) {
9
+ const { baseExit, budgetActive, budgetVerdict, enforceCoverageBudget } = args;
10
+ if (baseExit !== 0)
11
+ return baseExit;
12
+ if (!budgetActive || budgetVerdict === null)
13
+ return 0;
14
+ if (enforceCoverageBudget && budgetVerdict === "fail")
15
+ return 1;
16
+ return 0;
17
+ }
18
+ //# sourceMappingURL=coverageBudgetExit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverageBudgetExit.js","sourceRoot":"","sources":["../src/coverageBudgetExit.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,yBAAyB,CAAC,aAAqB;IAC7D,IAAI,aAAa,KAAK,sBAAsB;QAAE,OAAO,CAAC,CAAC;IACvD,IAAI,aAAa,KAAK,gBAAgB;QAAE,OAAO,CAAC,CAAC;IACjD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAKpC;IACC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC;IAC9E,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACpC,IAAI,CAAC,YAAY,IAAI,aAAa,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IACtD,IAAI,qBAAqB,IAAI,aAAa,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC;IAChE,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=coverageBudgetExit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverageBudgetExit.test.d.ts","sourceRoot":"","sources":["../src/coverageBudgetExit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { baseExitFromStateRelation, resolveFinalExitCode } from "./coverageBudgetExit.js";
3
+ describe("coverageBudgetExit", () => {
4
+ it("baseExitFromStateRelation", () => {
5
+ expect(baseExitFromStateRelation("matches_expectations")).toBe(0);
6
+ expect(baseExitFromStateRelation("does_not_match")).toBe(1);
7
+ expect(baseExitFromStateRelation("not_established")).toBe(2);
8
+ });
9
+ it("resolveFinalExitCode enforces budget fail only when active and flag", () => {
10
+ expect(resolveFinalExitCode({
11
+ baseExit: 0,
12
+ budgetActive: true,
13
+ budgetVerdict: "fail",
14
+ enforceCoverageBudget: true,
15
+ })).toBe(1);
16
+ expect(resolveFinalExitCode({
17
+ baseExit: 0,
18
+ budgetActive: true,
19
+ budgetVerdict: "fail",
20
+ enforceCoverageBudget: false,
21
+ })).toBe(0);
22
+ expect(resolveFinalExitCode({
23
+ baseExit: 1,
24
+ budgetActive: true,
25
+ budgetVerdict: "fail",
26
+ enforceCoverageBudget: true,
27
+ })).toBe(1);
28
+ });
29
+ });
30
+ //# sourceMappingURL=coverageBudgetExit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverageBudgetExit.test.js","sourceRoot":"","sources":["../src/coverageBudgetExit.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE1F,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,yBAAyB,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,yBAAyB,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,CACJ,oBAAoB,CAAC;YACnB,QAAQ,EAAE,CAAC;YACX,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,MAAM;YACrB,qBAAqB,EAAE,IAAI;SAC5B,CAAC,CACH,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,MAAM,CACJ,oBAAoB,CAAC;YACnB,QAAQ,EAAE,CAAC;YACX,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,MAAM;YACrB,qBAAqB,EAAE,KAAK;SAC7B,CAAC,CACH,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACV,MAAM,CACJ,oBAAoB,CAAC;YACnB,QAAQ,EAAE,CAAC;YACX,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,MAAM;YACrB,qBAAqB,EAAE,IAAI;SAC5B,CAAC,CACH,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ export type CoverageBudgetPolicyV1 = {
2
+ schemaVersion: 1;
3
+ workflows: Array<{
4
+ workflowId: string;
5
+ minimumFullySatisfiedKinds: string[];
6
+ }>;
7
+ };
8
+ export type CoverageBudgetPhaseAResult = {
9
+ active: false;
10
+ } | {
11
+ active: true;
12
+ policyPath: string;
13
+ policy: CoverageBudgetPolicyV1;
14
+ };
15
+ /**
16
+ * Phase A: resolve optional policy path, read + validate before verify I/O.
17
+ * @param explicitCoverageBudgetPath --coverage-budget value when set (may be relative)
18
+ * @param projectPathResolved absolute --project root when present
19
+ */
20
+ export declare function loadCoverageBudgetPolicyPhaseA(options: {
21
+ explicitCoverageBudgetPath: string | undefined;
22
+ projectPathResolved: string | undefined;
23
+ }): CoverageBudgetPhaseAResult;
24
+ //# sourceMappingURL=coverageBudgetPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverageBudgetPolicy.d.ts","sourceRoot":"","sources":["../src/coverageBudgetPolicy.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,EAAE,CAAC,CAAC;IACjB,SAAS,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,0BAA0B,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAChF,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAClC;IAAE,MAAM,EAAE,KAAK,CAAA;CAAE,GACjB;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAezE;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE;IACtD,0BAA0B,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC,GAAG,0BAA0B,CA4C7B"}
@@ -0,0 +1,55 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { CLI_OPERATIONAL_CODES } from "./cliOperationalCodes.js";
4
+ import { TruthLayerError } from "./truthLayerError.js";
5
+ import { loadSchemaValidator } from "./schemaLoad.js";
6
+ function assertUniqueWorkflowIds(policy) {
7
+ const seen = new Set();
8
+ for (const row of policy.workflows) {
9
+ if (seen.has(row.workflowId)) {
10
+ throw new TruthLayerError(CLI_OPERATIONAL_CODES.CLI_USAGE, `coverage-budget: duplicate workflowId "${row.workflowId}" in policy file.`);
11
+ }
12
+ seen.add(row.workflowId);
13
+ }
14
+ }
15
+ /**
16
+ * Phase A: resolve optional policy path, read + validate before verify I/O.
17
+ * @param explicitCoverageBudgetPath --coverage-budget value when set (may be relative)
18
+ * @param projectPathResolved absolute --project root when present
19
+ */
20
+ export function loadCoverageBudgetPolicyPhaseA(options) {
21
+ const cwd = process.cwd();
22
+ let filePath = null;
23
+ if (options.explicitCoverageBudgetPath !== undefined && options.explicitCoverageBudgetPath.length > 0) {
24
+ filePath = path.resolve(cwd, options.explicitCoverageBudgetPath);
25
+ if (!existsSync(filePath)) {
26
+ throw new TruthLayerError(CLI_OPERATIONAL_CODES.CLI_USAGE, `coverage-budget: file not found at ${filePath}`);
27
+ }
28
+ }
29
+ else if (options.projectPathResolved !== undefined) {
30
+ const candidate = path.join(options.projectPathResolved, "agentskeptic", "coverage-budget.json");
31
+ if (!existsSync(candidate)) {
32
+ return { active: false };
33
+ }
34
+ filePath = candidate;
35
+ }
36
+ else {
37
+ return { active: false };
38
+ }
39
+ const raw = readFileSync(filePath, "utf8");
40
+ let parsed;
41
+ try {
42
+ parsed = JSON.parse(raw);
43
+ }
44
+ catch {
45
+ throw new TruthLayerError(CLI_OPERATIONAL_CODES.CLI_USAGE, `coverage-budget: invalid JSON at ${filePath}`);
46
+ }
47
+ const validate = loadSchemaValidator("coverage-budget-v1");
48
+ if (!validate(parsed)) {
49
+ throw new TruthLayerError(CLI_OPERATIONAL_CODES.CLI_USAGE, `coverage-budget: schema validation failed at ${filePath}: ${JSON.stringify(validate.errors ?? [])}`);
50
+ }
51
+ const policy = parsed;
52
+ assertUniqueWorkflowIds(policy);
53
+ return { active: true, policyPath: filePath, policy };
54
+ }
55
+ //# sourceMappingURL=coverageBudgetPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverageBudgetPolicy.js","sourceRoot":"","sources":["../src/coverageBudgetPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAWtD,SAAS,uBAAuB,CAAC,MAA8B;IAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,eAAe,CACvB,qBAAqB,CAAC,SAAS,EAC/B,0CAA0C,GAAG,CAAC,UAAU,mBAAmB,CAC5E,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,OAG9C;IACC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,IAAI,QAAQ,GAAkB,IAAI,CAAC;IAEnC,IAAI,OAAO,CAAC,0BAA0B,KAAK,SAAS,IAAI,OAAO,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtG,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,eAAe,CACvB,qBAAqB,CAAC,SAAS,EAC/B,sCAAsC,QAAQ,EAAE,CACjD,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,cAAc,EAAE,sBAAsB,CAAC,CAAC;QACjG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC3B,CAAC;QACD,QAAQ,GAAG,SAAS,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,QAAS,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,eAAe,CACvB,qBAAqB,CAAC,SAAS,EAC/B,oCAAoC,QAAQ,EAAE,CAC/C,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;IAC3D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,eAAe,CACvB,qBAAqB,CAAC,SAAS,EAC/B,gDAAgD,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CACrG,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAgC,CAAC;IAChD,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAS,EAAE,MAAM,EAAE,CAAC;AACzD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=coverageBudgetPolicy.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverageBudgetPolicy.test.d.ts","sourceRoot":"","sources":["../src/coverageBudgetPolicy.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { mkdtempSync, writeFileSync, rmSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { tmpdir } from "node:os";
5
+ import { loadCoverageBudgetPolicyPhaseA } from "./coverageBudgetPolicy.js";
6
+ import { TruthLayerError } from "./truthLayerError.js";
7
+ describe("loadCoverageBudgetPolicyPhaseA", () => {
8
+ it("returns inactive when no explicit path and no project file", () => {
9
+ const r = loadCoverageBudgetPolicyPhaseA({
10
+ explicitCoverageBudgetPath: undefined,
11
+ projectPathResolved: undefined,
12
+ });
13
+ expect(r.active).toBe(false);
14
+ });
15
+ it("rejects duplicate workflowId after schema", () => {
16
+ const dir = mkdtempSync(join(tmpdir(), "as-cb-"));
17
+ const p = join(dir, "bud.json");
18
+ writeFileSync(p, JSON.stringify({
19
+ schemaVersion: 1,
20
+ workflows: [
21
+ { workflowId: "wf_a", minimumFullySatisfiedKinds: ["sql"] },
22
+ { workflowId: "wf_a", minimumFullySatisfiedKinds: ["http_witness"] },
23
+ ],
24
+ }));
25
+ try {
26
+ expect(() => loadCoverageBudgetPolicyPhaseA({
27
+ explicitCoverageBudgetPath: p,
28
+ projectPathResolved: undefined,
29
+ })).toThrow(TruthLayerError);
30
+ }
31
+ finally {
32
+ rmSync(dir, { recursive: true, force: true });
33
+ }
34
+ });
35
+ });
36
+ //# sourceMappingURL=coverageBudgetPolicy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverageBudgetPolicy.test.js","sourceRoot":"","sources":["../src/coverageBudgetPolicy.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,GAAG,8BAA8B,CAAC;YACvC,0BAA0B,EAAE,SAAS;YACrC,mBAAmB,EAAE,SAAS;SAC/B,CAAC,CAAC;QACH,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAChC,aAAa,CACX,CAAC,EACD,IAAI,CAAC,SAAS,CAAC;YACb,aAAa,EAAE,CAAC;YAChB,SAAS,EAAE;gBACT,EAAE,UAAU,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC,KAAK,CAAC,EAAE;gBAC3D,EAAE,UAAU,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC,cAAc,CAAC,EAAE;aACrE;SACF,CAAC,CACH,CAAC;QACF,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,EAAE,CACV,8BAA8B,CAAC;gBAC7B,0BAA0B,EAAE,CAAC;gBAC7B,mBAAmB,EAAE,SAAS;aAC/B,CAAC,CACH,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC7B,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}