agentskeptic 8.2.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.
- package/README.md +9 -5
- package/config/marketing.json +1 -1
- package/dist/cliArgv.d.ts +6 -0
- package/dist/cliArgv.d.ts.map +1 -1
- package/dist/cliArgv.js +9 -0
- package/dist/cliArgv.js.map +1 -1
- package/dist/coverageBudget.d.ts +22 -0
- package/dist/coverageBudget.d.ts.map +1 -0
- package/dist/coverageBudget.js +125 -0
- package/dist/coverageBudget.js.map +1 -0
- package/dist/coverageBudget.test.d.ts +2 -0
- package/dist/coverageBudget.test.d.ts.map +1 -0
- package/dist/coverageBudget.test.js +48 -0
- package/dist/coverageBudget.test.js.map +1 -0
- package/dist/coverageBudgetExit.d.ts +9 -0
- package/dist/coverageBudgetExit.d.ts.map +1 -0
- package/dist/coverageBudgetExit.js +18 -0
- package/dist/coverageBudgetExit.js.map +1 -0
- package/dist/coverageBudgetExit.test.d.ts +2 -0
- package/dist/coverageBudgetExit.test.d.ts.map +1 -0
- package/dist/coverageBudgetExit.test.js +30 -0
- package/dist/coverageBudgetExit.test.js.map +1 -0
- package/dist/coverageBudgetPolicy.d.ts +24 -0
- package/dist/coverageBudgetPolicy.d.ts.map +1 -0
- package/dist/coverageBudgetPolicy.js +55 -0
- package/dist/coverageBudgetPolicy.js.map +1 -0
- package/dist/coverageBudgetPolicy.test.d.ts +2 -0
- package/dist/coverageBudgetPolicy.test.d.ts.map +1 -0
- package/dist/coverageBudgetPolicy.test.js +36 -0
- package/dist/coverageBudgetPolicy.test.js.map +1 -0
- package/dist/decisionEvidenceHumanLayer.d.ts +6 -2
- package/dist/decisionEvidenceHumanLayer.d.ts.map +1 -1
- package/dist/decisionEvidenceHumanLayer.js +6 -4
- package/dist/decisionEvidenceHumanLayer.js.map +1 -1
- package/dist/discovery-payload-v1.json +1 -1
- package/dist/execution-identity.v1.json +1 -1
- package/dist/publicDistribution.generated.d.ts +1 -1
- package/dist/publicDistribution.generated.js +1 -1
- package/dist/schemaLoad.d.ts +1 -1
- package/dist/schemaLoad.d.ts.map +1 -1
- package/dist/schemaLoad.js +2 -0
- package/dist/schemaLoad.js.map +1 -1
- package/dist/standardVerifyWorkflowCli.d.ts +8 -1
- package/dist/standardVerifyWorkflowCli.d.ts.map +1 -1
- package/dist/standardVerifyWorkflowCli.js +21 -2
- package/dist/standardVerifyWorkflowCli.js.map +1 -1
- package/dist/verify/batchVerifyTelemetrySubcommand.d.ts.map +1 -1
- package/dist/verify/batchVerifyTelemetrySubcommand.js +71 -10
- package/dist/verify/batchVerifyTelemetrySubcommand.js.map +1 -1
- package/package.json +1 -1
- package/schemas/coverage-budget-v1.schema.json +41 -0
- 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
|
|
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
|
|
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
|
|
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
|
|
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`
|
|
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
|
|
package/config/marketing.json
CHANGED
|
@@ -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
|
|
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).
|
package/dist/cliArgv.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
/**
|
package/dist/cliArgv.js.map
CHANGED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|