audit-tools 0.55.3 → 0.55.5

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 (130) hide show
  1. package/dist/audit/cli/auditReviewBindings.d.ts +4 -4
  2. package/dist/audit/cli/charterExtractionPrompt.d.ts.map +1 -1
  3. package/dist/audit/cli/charterExtractionPrompt.js +3 -1
  4. package/dist/audit/cli/charterExtractionPrompt.js.map +1 -1
  5. package/dist/audit/cli/dispatch/packetFilter.d.ts +1 -1
  6. package/dist/audit/cli/envelope.d.ts +1 -1
  7. package/dist/audit/cli/envelope.d.ts.map +1 -1
  8. package/dist/audit/cli/envelope.js +4 -1
  9. package/dist/audit/cli/envelope.js.map +1 -1
  10. package/dist/audit/cli/laneValidators.d.ts +9 -6
  11. package/dist/audit/cli/laneValidators.d.ts.map +1 -1
  12. package/dist/audit/cli/laneValidators.js +22 -7
  13. package/dist/audit/cli/laneValidators.js.map +1 -1
  14. package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
  15. package/dist/audit/cli/nextStepHelpers.js +7 -2
  16. package/dist/audit/cli/nextStepHelpers.js.map +1 -1
  17. package/dist/audit/cli/reviewRun.d.ts +6 -0
  18. package/dist/audit/cli/reviewRun.d.ts.map +1 -1
  19. package/dist/audit/cli/reviewRun.js +3 -2
  20. package/dist/audit/cli/reviewRun.js.map +1 -1
  21. package/dist/audit/cli/sampleRunCommand.d.ts +1 -1
  22. package/dist/audit/contracts/workerSchemas.d.ts +14 -14
  23. package/dist/audit/orchestrator/dependencyMap.d.ts.map +1 -1
  24. package/dist/audit/orchestrator/dependencyMap.js +6 -0
  25. package/dist/audit/orchestrator/dependencyMap.js.map +1 -1
  26. package/dist/audit/orchestrator/dependencySlices.d.ts.map +1 -1
  27. package/dist/audit/orchestrator/dependencySlices.js +35 -11
  28. package/dist/audit/orchestrator/dependencySlices.js.map +1 -1
  29. package/dist/audit/orchestrator/hostInputPause.js +1 -1
  30. package/dist/audit/orchestrator/hostInputPause.js.map +1 -1
  31. package/dist/audit/orchestrator/requeueCommand.d.ts +1 -1
  32. package/dist/audit/types.d.ts +12 -12
  33. package/dist/audit/validation/auditResults.d.ts +1 -0
  34. package/dist/audit/validation/auditResults.d.ts.map +1 -1
  35. package/dist/audit/validation/auditResults.js +1 -0
  36. package/dist/audit/validation/auditResults.js.map +1 -1
  37. package/dist/remediate/findingFilter.js +1 -1
  38. package/dist/remediate/findingFilter.js.map +1 -1
  39. package/dist/remediate/phases/close.d.ts +1 -0
  40. package/dist/remediate/phases/close.d.ts.map +1 -1
  41. package/dist/remediate/phases/close.js +12 -6
  42. package/dist/remediate/phases/close.js.map +1 -1
  43. package/dist/remediate/phases/closeVerifyAnalyzerLeads.d.ts +1 -1
  44. package/dist/remediate/phases/closeVerifyHeadEvidence.d.ts +13 -0
  45. package/dist/remediate/phases/closeVerifyHeadEvidence.d.ts.map +1 -1
  46. package/dist/remediate/phases/closeVerifyHeadEvidence.js +30 -14
  47. package/dist/remediate/phases/closeVerifyHeadEvidence.js.map +1 -1
  48. package/dist/remediate/steps/contractPipeline.d.ts +0 -6
  49. package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
  50. package/dist/remediate/steps/contractPipeline.js +3 -32
  51. package/dist/remediate/steps/contractPipeline.js.map +1 -1
  52. package/dist/remediate/steps/dispatch/hostContracts.js +1 -1
  53. package/dist/remediate/steps/dispatch/hostContracts.js.map +1 -1
  54. package/dist/remediate/steps/dispatch/hostHandoff.js +2 -2
  55. package/dist/remediate/steps/dispatch/hostHandoff.js.map +1 -1
  56. package/dist/remediate/steps/dispatch/requiredTests.js +1 -1
  57. package/dist/remediate/steps/dispatch/requiredTests.js.map +1 -1
  58. package/dist/remediate/steps/gateCommands.d.ts +1 -0
  59. package/dist/remediate/steps/gateCommands.d.ts.map +1 -1
  60. package/dist/remediate/steps/gateCommands.js +2 -0
  61. package/dist/remediate/steps/gateCommands.js.map +1 -1
  62. package/dist/remediate/steps/nextStep.d.ts.map +1 -1
  63. package/dist/remediate/steps/nextStep.js +19 -62
  64. package/dist/remediate/steps/nextStep.js.map +1 -1
  65. package/dist/remediate/steps/prompts.d.ts.map +1 -1
  66. package/dist/remediate/steps/prompts.js +6 -9
  67. package/dist/remediate/steps/prompts.js.map +1 -1
  68. package/dist/remediate/steps/recoverIngest.js +1 -1
  69. package/dist/remediate/steps/recoverIngest.js.map +1 -1
  70. package/dist/shared/analyzers/provenance.d.ts +1 -1
  71. package/dist/shared/analyzers/provenance.js +1 -1
  72. package/dist/shared/decompose/charterExtraction.d.ts +12 -13
  73. package/dist/shared/decompose/charterExtraction.d.ts.map +1 -1
  74. package/dist/shared/decompose/charterExtraction.js +18 -5
  75. package/dist/shared/decompose/charterExtraction.js.map +1 -1
  76. package/dist/shared/decompose/systemicChallenge.js +1 -1
  77. package/dist/shared/decompose/systemicChallenge.js.map +1 -1
  78. package/dist/shared/engine/obligationEngine.d.ts +1 -1
  79. package/dist/shared/engine/obligationEngine.js +1 -1
  80. package/dist/shared/findings/dedupe.js +1 -1
  81. package/dist/shared/findings/dedupe.js.map +1 -1
  82. package/dist/shared/index.d.ts +1 -0
  83. package/dist/shared/index.d.ts.map +1 -1
  84. package/dist/shared/index.js +1 -0
  85. package/dist/shared/index.js.map +1 -1
  86. package/dist/shared/intent/clauseBoundaries.d.ts +1 -0
  87. package/dist/shared/intent/clauseBoundaries.d.ts.map +1 -1
  88. package/dist/shared/intent/clauseBoundaries.js +1 -0
  89. package/dist/shared/intent/clauseBoundaries.js.map +1 -1
  90. package/dist/shared/intent/pathScope.d.ts +1 -0
  91. package/dist/shared/intent/pathScope.d.ts.map +1 -1
  92. package/dist/shared/intent/pathScope.js +1 -0
  93. package/dist/shared/intent/pathScope.js.map +1 -1
  94. package/dist/shared/io/nodeWorktreeGuard.d.ts +1 -1
  95. package/dist/shared/io/nodeWorktreeGuard.js +1 -1
  96. package/dist/shared/io/pathIdentity.d.ts.map +1 -1
  97. package/dist/shared/io/pathIdentity.js +1 -0
  98. package/dist/shared/io/pathIdentity.js.map +1 -1
  99. package/dist/shared/io/stepContractWriter.d.ts +1 -0
  100. package/dist/shared/io/stepContractWriter.d.ts.map +1 -1
  101. package/dist/shared/io/stepContractWriter.js +1 -0
  102. package/dist/shared/io/stepContractWriter.js.map +1 -1
  103. package/dist/shared/loopCorePaths.d.ts.map +1 -1
  104. package/dist/shared/loopCorePaths.js +9 -0
  105. package/dist/shared/loopCorePaths.js.map +1 -1
  106. package/dist/shared/submission/submissionLedger.js +2 -2
  107. package/dist/shared/submission/submissionLedger.js.map +1 -1
  108. package/dist/shared/submission/submissionScan.js +1 -1
  109. package/dist/shared/submission/submissionScan.js.map +1 -1
  110. package/dist/shared/tooling/exec.js +2 -2
  111. package/dist/shared/tooling/exec.js.map +1 -1
  112. package/dist/shared/types/closingActions.js +1 -1
  113. package/dist/shared/types/closingActions.js.map +1 -1
  114. package/dist/shared/types/finding.js +2 -2
  115. package/dist/shared/types/finding.js.map +1 -1
  116. package/dist/shared/types/stepContract.js +1 -1
  117. package/dist/shared/types/stepContract.js.map +1 -1
  118. package/dist/shared/validation/findingGrounding.d.ts +1 -0
  119. package/dist/shared/validation/findingGrounding.d.ts.map +1 -1
  120. package/dist/shared/validation/findingGrounding.js +1 -0
  121. package/dist/shared/validation/findingGrounding.js.map +1 -1
  122. package/dist/shared/validation/producerBoundary.d.ts +10 -0
  123. package/dist/shared/validation/producerBoundary.d.ts.map +1 -0
  124. package/dist/shared/validation/producerBoundary.js +26 -0
  125. package/dist/shared/validation/producerBoundary.js.map +1 -0
  126. package/package.json +4 -2
  127. package/dispatch/artifacts-dir.mjs +0 -14
  128. package/dispatch/merge-results.mjs +0 -257
  129. package/dispatch/validate-result.mjs +0 -115
  130. package/dispatch/validate.mjs +0 -34
@@ -1 +1 @@
1
- {"version":3,"file":"stepContract.js","sourceRoot":"","sources":["../../../src/shared/types/stepContract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stepContract.js","sourceRoot":"","sources":["../../../src/shared/types/stepContract.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ export declare function normalizeForMatch(text: string): string;
19
19
  export declare function normalizeRepoPath(p: string): string;
20
20
  /**
21
21
  * True when `p` is a bare basename — a single path segment with no separator
22
+ * <!-- comment-citation-exempt: illustrative example path -->
22
23
  * (`advance.ts`), as opposed to a nested repo-relative path (`src/x/advance.ts`)
23
24
  * or a dotfile-dir path (`.claude/hooks/x.mjs`). A bare basename is the one shape
24
25
  * that cannot be resolved by a naive `root/<name>` join when the real file is
@@ -1 +1 @@
1
- {"version":3,"file":"findingGrounding.d.ts","sourceRoot":"","sources":["../../../src/shared/validation/findingGrounding.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAErE,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAGjD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAC9B,MAAM,GAAG,SAAS,CAapB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CA0BtB;AAsDD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAE7E;AAED,qFAAqF;AACrF,MAAM,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAKrE;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,IAAI,YAAY,CASzD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,UAAU,GAAE,YAAkC,GAC7C,OAAO,CAAC,gBAAgB,CAAC,CAoD3B;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,OAAO,CAE9E;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,GAClC,OAAO,CAET"}
1
+ {"version":3,"file":"findingGrounding.d.ts","sourceRoot":"","sources":["../../../src/shared/validation/findingGrounding.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAErE,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAGjD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAC9B,MAAM,GAAG,SAAS,CAapB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CA0BtB;AAsDD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAE7E;AAED,qFAAqF;AACrF,MAAM,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAKrE;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,IAAI,YAAY,CASzD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,UAAU,GAAE,YAAkC,GAC7C,OAAO,CAAC,gBAAgB,CAAC,CAoD3B;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,OAAO,CAE9E;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,GAClC,OAAO,CAET"}
@@ -48,6 +48,7 @@ export function normalizeRepoPath(p) {
48
48
  }
49
49
  /**
50
50
  * True when `p` is a bare basename — a single path segment with no separator
51
+ * <!-- comment-citation-exempt: illustrative example path -->
51
52
  * (`advance.ts`), as opposed to a nested repo-relative path (`src/x/advance.ts`)
52
53
  * or a dotfile-dir path (`.claude/hooks/x.mjs`). A bare basename is the one shape
53
54
  * that cannot be resolved by a naive `root/<name>` join when the real file is
@@ -1 +1 @@
1
- {"version":3,"file":"findingGrounding.js","sourceRoot":"","sources":["../../../src/shared/validation/findingGrounding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"findingGrounding.js","sourceRoot":"","sources":["../../../src/shared/validation/findingGrounding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { RemediationOutcomesReport } from "../types/remediationOutcome.js";
2
+ /**
3
+ * Refuse a `remediation-outcomes.json` value the canonical
4
+ * `RemediationOutcomesReportSchema` rejects. The schema is deliberately NOT
5
+ * strict (the on-disk outcomes file is a superset, carrying run-level fields the
6
+ * shared subset does not declare), so unknown keys are tolerated and only a
7
+ * missing/malformed REQUIRED field of the owning contract is refused.
8
+ */
9
+ export declare function assertValidRemediationOutcomesReport(value: RemediationOutcomesReport): void;
10
+ //# sourceMappingURL=producerBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"producerBoundary.d.ts","sourceRoot":"","sources":["../../../src/shared/validation/producerBoundary.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAIhF;;;;;;GAMG;AACH,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,yBAAyB,GAC/B,IAAI,CAQN"}
@@ -0,0 +1,26 @@
1
+ // sites-pinned: tests/shared/producer-boundary.test.ts
2
+ // The write-boundary gate for `remediation-outcomes.json`: the close phase
3
+ // builds the machine contract but, without this check, persists whatever it
4
+ // built — a producer that drops a required field writes a malformed contract
5
+ // that only a much later consumer discovers. `assertValidRemediationOutcomesReport`
6
+ // runs the finished value through the OWNING schema (`RemediationOutcomesReportSchema`,
7
+ // deliberately not strict because the on-disk file is a superset) and throws with
8
+ // the full issue list BEFORE the value is written, so a refusal writes none of
9
+ // the close-phase artifacts.
10
+ import { RemediationOutcomesReportSchema } from "../types/remediationOutcome.js";
11
+ import { formatSchemaFailure } from "./schemaFailure.js";
12
+ /**
13
+ * Refuse a `remediation-outcomes.json` value the canonical
14
+ * `RemediationOutcomesReportSchema` rejects. The schema is deliberately NOT
15
+ * strict (the on-disk outcomes file is a superset, carrying run-level fields the
16
+ * shared subset does not declare), so unknown keys are tolerated and only a
17
+ * missing/malformed REQUIRED field of the owning contract is refused.
18
+ */
19
+ export function assertValidRemediationOutcomesReport(value) {
20
+ const result = RemediationOutcomesReportSchema.safeParse(value);
21
+ if (!result.success) {
22
+ throw new Error(`remediation-outcomes.json: produced report fails the owning contract — ` +
23
+ formatSchemaFailure(result.error));
24
+ }
25
+ }
26
+ //# sourceMappingURL=producerBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"producerBoundary.js","sourceRoot":"","sources":["../../../src/shared/validation/producerBoundary.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,2EAA2E;AAC3E,4EAA4E;AAC5E,6EAA6E;AAC7E,oFAAoF;AACpF,wFAAwF;AACxF,kFAAkF;AAClF,+EAA+E;AAC/E,6BAA6B;AAG7B,OAAO,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,UAAU,oCAAoC,CAClD,KAAgC;IAEhC,MAAM,MAAM,GAAG,+BAA+B,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,yEAAyE;YACvE,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CACpC,CAAC;IACJ,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "audit-tools",
3
- "version": "0.55.3",
3
+ "version": "0.55.5",
4
4
  "private": false,
5
5
  "license": "ISC",
6
6
  "description": "Provider-neutral code auditing and remediation workflows for arbitrary repositories.",
@@ -25,7 +25,6 @@
25
25
  "audit-code.mjs",
26
26
  "wrapper/**",
27
27
  "remediate-code.mjs",
28
- "dispatch/**",
29
28
  "schemas/**",
30
29
  "skills/**",
31
30
  "scripts/postinstall.mjs",
@@ -72,12 +71,15 @@
72
71
  "check:doc-manifest": "node scripts/check-doc-manifest.mjs",
73
72
  "check:doc-links": "node scripts/check-doc-links.mjs",
74
73
  "check:doc-code-citations": "node scripts/check-doc-code-citations.mjs",
74
+ "check:comment-code-citations": "node scripts/check-comment-code-citations.mjs",
75
75
  "check:philosophy-brief": "node scripts/check-philosophy-brief.mjs",
76
76
  "check:readme-sample-report": "node --import tsx/esm scripts/check-readme-sample-report.mjs",
77
77
  "check:proposal-red-at": "node scripts/check-proposal-red-at.mjs",
78
78
  "verify:hosts": "node scripts/audit/verify-hosts.mjs",
79
79
  "verify:remediate-hosts": "node scripts/remediate/verify-hosts.mjs",
80
80
  "pack:smoke": "node scripts/shared/smoke-tarball.mjs",
81
+ "staged:legs": "node scripts/run-staged-legs.mjs",
82
+ "land": "node scripts/land.mjs",
81
83
  "smoke:linked-audit-code": "node scripts/audit/smoke-linked-audit-code.mjs",
82
84
  "smoke:packaged-audit-code": "node scripts/audit/smoke-packaged-audit-code.mjs",
83
85
  "smoke:linked-remediate-code": "node scripts/remediate/smoke-linked-remediate-code.mjs",
@@ -1,14 +0,0 @@
1
- import { join, resolve } from "node:path";
2
-
3
- /**
4
- * Resolve the artifacts directory from command-line args or default to
5
- * <cwd>/.audit-tools/audit. The --artifacts-dir flag is optional; when omitted
6
- * or invalid, defaults to the standard location. Default must match where the
7
- * orchestrator/wrapper actually writes runs: <root>/.audit-tools/audit
8
- * (COR-bf5c7331) — the prior `.audit-artifacts` default resolved to a
9
- * directory the pipeline never populates.
10
- */
11
- export function resolveArtifactsDir(argv, defaultDir = join(process.cwd(), ".audit-tools", "audit")) {
12
- const idx = argv.indexOf("--artifacts-dir");
13
- return idx !== -1 && argv[idx + 1] ? resolve(argv[idx + 1]) : defaultDir;
14
- }
@@ -1,257 +0,0 @@
1
- import { join } from "node:path";
2
- import { readFileSync, writeFileSync, readdirSync, existsSync } from "node:fs";
3
- import { pathToFileURL } from "node:url";
4
- import { validateResult } from "./validate.mjs";
5
- import { resolveArtifactsDir } from "./artifacts-dir.mjs";
6
-
7
- /**
8
- * Importable merge core (CP-NODE-21 / dispatch-scripts-test-reach). Every
9
- * acceptance branch this script owns — fail-closed manifest read, INV-01
10
- * array-payload expansion, duplicate-task_id rejection, unknown-task_id
11
- * rejection, missing-result-is-a-failure, no-destructive-truncation, and the
12
- * INV-03 partial-merge signal (surfaced here as `failing.length > 0`, which
13
- * the CLI shim below turns into a non-zero exit) — lives in this function so
14
- * a test can drive it in-process against a fabricated run directory, without
15
- * spawning a child process and without process.exit ever firing mid-test.
16
- * The CLI shim is a byte-compatible wrapper: same argv parsing, same
17
- * stdout/stderr text, same exit codes as before this split.
18
- *
19
- * @param {{ artifactsDir: string, runId: string }} options
20
- * @returns {{
21
- * ok: boolean,
22
- * fatal?: { message: string },
23
- * passing: object[],
24
- * failing: { task_id: string, errors: string[] }[],
25
- * total: number,
26
- * auditResultsPath: string,
27
- * failedTasksPath: string,
28
- * wroteAuditResults: boolean,
29
- * wroteFailedTasks: boolean,
30
- * }}
31
- */
32
- export function mergeResults({ artifactsDir, runId }) {
33
- const taskResultsDir = join(artifactsDir, "runs", runId, "task-results");
34
- const auditResultsPath = join(artifactsDir, "runs", runId, "run-results.json");
35
- const failedTasksPath = join(artifactsDir, "runs", runId, "failed-tasks.json");
36
- const tasksPath = join(artifactsDir, "runs", runId, "pending-audit-tasks.json");
37
-
38
- if (!existsSync(taskResultsDir)) {
39
- return {
40
- ok: false,
41
- fatal: { message: `task-results directory not found: ${taskResultsDir}` },
42
- passing: [],
43
- failing: [],
44
- total: 0,
45
- auditResultsPath,
46
- failedTasksPath,
47
- wroteAuditResults: false,
48
- wroteFailedTasks: false,
49
- };
50
- }
51
-
52
- // Manifest-reconciled completeness (COR-7602834d cluster): acceptance is judged against the
53
- // pending manifest, never against whichever task-results files happen to exist.
54
- // A missing or unreadable manifest means no task context can be established, so
55
- // the merge hard-fails BEFORE any write (fail-closed task-identity gate) instead
56
- // of validating results fail-open with no assigned task.
57
- let tasks;
58
- try {
59
- tasks = JSON.parse(readFileSync(tasksPath, "utf8"));
60
- if (!Array.isArray(tasks)) {
61
- throw new Error("pending-audit-tasks.json must be a JSON array of AuditTasks");
62
- }
63
- } catch (e) {
64
- return {
65
- ok: false,
66
- fatal: {
67
- message:
68
- `Cannot read pending manifest ${tasksPath}: ${/** @type {any} */ (e).message}\n` +
69
- "merge-results judges acceptance against the pending manifest (fail-closed); aborting before any write.",
70
- },
71
- passing: [],
72
- failing: [],
73
- total: 0,
74
- auditResultsPath,
75
- failedTasksPath,
76
- wroteAuditResults: false,
77
- wroteFailedTasks: false,
78
- };
79
- }
80
- const taskMap = new Map(tasks.filter(t => t && typeof t.task_id === "string").map(t => [t.task_id, t]));
81
-
82
- // Schema-pointer-file exclusion was retired along with the rest of the
83
- // schema-copy feature in 467b1e8f ("retire the execution substrate: zero
84
- // adapters, host-owned execution"), which deleted PACKET_SCHEMA_FILENAMES
85
- // and its sole producer (nothing in src/ copies schema files into
86
- // task-results/ anymore) but left this import pointing at the deleted
87
- // export — an orphaned reference that made this whole script unimportable
88
- // (ESM throws on a missing named export). If a schema-pointer-file
89
- // convention is reintroduced, re-add the matching exclusion here sourced
90
- // from wherever that filename list lives then; there is nothing to exclude
91
- // today.
92
- const files = readdirSync(taskResultsDir)
93
- .filter(f => f.endsWith(".json"))
94
- .sort();
95
-
96
- const failing = [];
97
- const resultsByTaskId = new Map();
98
-
99
- for (const filename of files) {
100
- const filePath = join(taskResultsDir, filename);
101
- let parsed;
102
- try {
103
- parsed = JSON.parse(readFileSync(filePath, "utf8"));
104
- } catch (e) {
105
- failing.push({ task_id: filename, errors: [`Invalid JSON: ${/** @type {any} */ (e).message}`] });
106
- continue;
107
- }
108
-
109
- // Expand top-level AuditResult[] arrays — a worker that emits an array
110
- // payload must not be treated as one invalid object (INV-01 / COR-bf5c7331).
111
- const candidates = Array.isArray(parsed) ? parsed : [parsed];
112
- for (const resultObj of candidates) {
113
- const taskId =
114
- resultObj && typeof resultObj === "object" && !Array.isArray(resultObj) &&
115
- typeof resultObj.task_id === "string"
116
- ? resultObj.task_id
117
- : undefined;
118
- if (!taskId) {
119
- failing.push({
120
- task_id: filename,
121
- errors: ["Result has no task_id; cannot bind it to an assigned task."],
122
- });
123
- continue;
124
- }
125
- if (resultsByTaskId.has(taskId)) {
126
- // Dedup-by-task_id: the first on-disk result for a task is authoritative;
127
- // later copies are rejected, never double-merged.
128
- failing.push({
129
- task_id: taskId,
130
- errors: [`Duplicate audit result for assigned task '${taskId}'.`],
131
- });
132
- continue;
133
- }
134
- if (!taskMap.has(taskId)) {
135
- // Identity is the tool's authority: a result that matches no assigned
136
- // task in the pending manifest never validates (fail-closed).
137
- failing.push({
138
- task_id: taskId,
139
- errors: [`Unknown task_id '${taskId}': not in the pending manifest for run '${runId}'.`],
140
- });
141
- continue;
142
- }
143
- resultsByTaskId.set(taskId, resultObj);
144
- }
145
- }
146
-
147
- // Validate each MANIFEST task's result: present → validate in the assigned
148
- // task's context; absent → a genuine failure (the manifest, not the file
149
- // listing, decides completeness).
150
- const passing = [];
151
- for (const task of taskMap.values()) {
152
- const resultObj = resultsByTaskId.get(task.task_id);
153
- if (resultObj === undefined) {
154
- failing.push({ task_id: task.task_id, errors: ["Missing audit result for assigned task."] });
155
- continue;
156
- }
157
- const { valid, errors } = validateResult(resultObj, task);
158
- if (valid) {
159
- passing.push(resultObj);
160
- } else {
161
- failing.push({ task_id: task.task_id, errors });
162
- }
163
- }
164
-
165
- let wroteFailedTasks = false;
166
- if (failing.length > 0) {
167
- writeFileSync(failedTasksPath, JSON.stringify(failing, null, 2));
168
- wroteFailedTasks = true;
169
- }
170
-
171
- // No destructive truncation on re-run (COR-44bea9c0 cluster): run-results.json is written
172
- // only when there is something to merge. A blocked no-op (nothing passed while
173
- // something failed) — e.g. a stray re-invocation after a successful merge —
174
- // must never truncate a previously written run-results.json to [].
175
- let wroteAuditResults = false;
176
- if (passing.length > 0) {
177
- writeFileSync(auditResultsPath, JSON.stringify(passing, null, 2));
178
- wroteAuditResults = true;
179
- }
180
-
181
- return {
182
- ok: true,
183
- passing,
184
- failing,
185
- total: passing.length + failing.length,
186
- auditResultsPath,
187
- failedTasksPath,
188
- wroteAuditResults,
189
- wroteFailedTasks,
190
- };
191
- }
192
-
193
- function runCli() {
194
- const runIdIdx = process.argv.indexOf("--run-id");
195
- if (runIdIdx === -1 || !process.argv[runIdIdx + 1]) {
196
- console.error("Usage: node dispatch/merge-results.mjs --run-id <run_id> [--artifacts-dir <dir>]");
197
- process.exit(1);
198
- }
199
- const runId = process.argv[runIdIdx + 1];
200
-
201
- // Default must match where the orchestrator/wrapper actually writes runs:
202
- // <root>/.audit-tools/audit (COR-bf5c7331). The prior `.audit-artifacts`
203
- // default resolved to a directory the pipeline never populates.
204
- const artifactsDir = resolveArtifactsDir(process.argv);
205
-
206
- const result = mergeResults({ artifactsDir, runId });
207
-
208
- if (!result.ok) {
209
- console.error((/** @type {any} */ (result.fatal)).message);
210
- process.exit(1);
211
- }
212
-
213
- const { passing, failing, total, auditResultsPath, failedTasksPath } = result;
214
-
215
- if (failing.length > 0) {
216
- process.stderr.write(`${failing.length} task(s) failed validation and were excluded:\n`);
217
- for (const f of failing) {
218
- for (const err of f.errors) {
219
- process.stderr.write(` ✗ ${f.task_id}: ${err}\n`);
220
- }
221
- }
222
- }
223
-
224
- // FND-OBS-bf5c7331: emit a structured JSON summary line to stdout so callers
225
- // get a machine-readable payload alongside the human-readable text line.
226
- // Both are written to stdout; the JSON summary line always comes first so
227
- // programmatic consumers can parse it without stripping the text line.
228
- process.stdout.write(
229
- JSON.stringify({
230
- ts: new Date().toISOString(),
231
- source: "audit-code:merge-results",
232
- event: "merge_summary",
233
- total,
234
- accepted: passing.length,
235
- rejected: failing.length,
236
- audit_results_path: auditResultsPath,
237
- ...(failing.length > 0 ? { failed_tasks_path: failedTasksPath } : {}),
238
- }) + "\n",
239
- );
240
- console.log(`✓ ${passing.length}/${total} tasks valid → ${auditResultsPath}`);
241
- if (failing.length > 0) {
242
- console.log(" Re-run those tasks in the next cycle.");
243
- }
244
-
245
- // Exit non-zero when any result failed validation so callers can detect
246
- // partial merges and avoid treating them as clean success (INV-03 / COR-bf5c7331-2).
247
- process.exit(failing.length > 0 ? 1 : 0);
248
- }
249
-
250
- // Only run the CLI when this file is the process entrypoint — not when a test
251
- // imports mergeResults() directly. Compares resolved file:// URLs (not raw
252
- // argv[1] strings) so this is correct on Windows, where argv[1] is a
253
- // backslash path that never equals import.meta.url's forward-slash form.
254
- const isMainModule = process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href;
255
- if (isMainModule) {
256
- runCli();
257
- }
@@ -1,115 +0,0 @@
1
- import { join } from "node:path";
2
- import { readFileSync, existsSync } from "node:fs";
3
- import { pathToFileURL } from "node:url";
4
- import { validateResult } from "./validate.mjs";
5
- import { resolveArtifactsDir } from "./artifacts-dir.mjs";
6
-
7
- /**
8
- * Resolve the AuditTask context for `taskId` from the run's pending
9
- * manifest. Degrades to `task: null` (never throws) when the manifest is
10
- * absent or unreadable — validateResult's fail-closed null-task branch is the
11
- * single enforcement point downstream; this helper only ever supplies
12
- * context, it never itself decides pass/fail.
13
- *
14
- * @param {{ artifactsDir: string, runId: string, taskId: string }} options
15
- * @returns {{ task: object | null, warning?: string }}
16
- */
17
- export function resolveTaskContext({ artifactsDir, runId, taskId }) {
18
- const tasksPath = join(artifactsDir, "runs", runId, "pending-audit-tasks.json");
19
- if (!existsSync(tasksPath)) {
20
- return { task: null };
21
- }
22
- try {
23
- const tasks = JSON.parse(readFileSync(tasksPath, "utf8"));
24
- return { task: tasks.find(t => t.task_id === taskId) ?? null };
25
- } catch (e) {
26
- return {
27
- task: null,
28
- warning: `[warn] Could not read pending-audit-tasks.json; line-count validation will be skipped: ${/** @type {any} */ (e).message}`,
29
- };
30
- }
31
- }
32
-
33
- /**
34
- * Importable core (CP-NODE-21 / dispatch-scripts-test-reach): reads one
35
- * task-results file, resolves its task context via {@link resolveTaskContext},
36
- * and validates it. No process.exit — the CLI shim below translates the
37
- * outcome into console output and an exit code, byte-compatible with this
38
- * script's behavior before the split.
39
- *
40
- * @param {{ artifactsDir: string, runId: string, taskId: string }} options
41
- * @returns {{
42
- * ok: boolean,
43
- * fatal?: { message: string },
44
- * warning?: string,
45
- * resultPath: string,
46
- * valid?: boolean,
47
- * errors?: string[],
48
- * }}
49
- */
50
- export function validateOneResult({ artifactsDir, runId, taskId }) {
51
- const sanitized = taskId.replace(/[^a-zA-Z0-9_-]/g, "_");
52
- const resultPath = join(artifactsDir, "runs", runId, "task-results", sanitized + ".json");
53
-
54
- if (!existsSync(resultPath)) {
55
- return { ok: false, fatal: { message: `File not found: ${resultPath}` }, resultPath };
56
- }
57
-
58
- let resultObj;
59
- try {
60
- resultObj = JSON.parse(readFileSync(resultPath, "utf8"));
61
- } catch (e) {
62
- return { ok: false, fatal: { message: `Invalid JSON in ${resultPath}: ${/** @type {any} */ (e).message}` }, resultPath };
63
- }
64
-
65
- const { task, warning } = resolveTaskContext({ artifactsDir, runId, taskId });
66
- const { valid, errors } = validateResult(resultObj, task);
67
- return { ok: true, warning, resultPath, valid, errors };
68
- }
69
-
70
- function runCli() {
71
- const runIdIdx = process.argv.indexOf("--run-id");
72
- const taskIdIdx = process.argv.indexOf("--task-id");
73
-
74
- const runId = runIdIdx !== -1 ? process.argv[runIdIdx + 1] : undefined;
75
- const taskId = taskIdIdx !== -1 ? process.argv[taskIdIdx + 1] : undefined;
76
-
77
- if (!runId || !taskId) {
78
- console.error("Usage: node dispatch/validate-result.mjs --run-id <run_id> --task-id <task_id> [--artifacts-dir <dir>]");
79
- process.exit(1);
80
- }
81
-
82
- // Default must match where the orchestrator/wrapper actually writes runs:
83
- // <root>/.audit-tools/audit (COR-bf5c7331), not the legacy `.audit-artifacts`.
84
- const artifactsDir = resolveArtifactsDir(process.argv);
85
-
86
- const result = validateOneResult({ artifactsDir, runId, taskId });
87
-
88
- if (!result.ok) {
89
- console.error((/** @type {any} */ (result.fatal)).message);
90
- process.exit(1);
91
- }
92
-
93
- if (result.warning) {
94
- process.stderr.write(result.warning + "\n");
95
- }
96
-
97
- if (result.valid) {
98
- console.log("✓ valid:", taskId);
99
- process.exit(0);
100
- } else {
101
- console.error("✗ invalid:", taskId);
102
- console.error(JSON.stringify(result.errors, null, 2));
103
- process.exit(1);
104
- }
105
- }
106
-
107
- // Only run the CLI when this file is the process entrypoint — not when a test
108
- // imports validateOneResult()/resolveTaskContext() directly. Compares
109
- // resolved file:// URLs (not raw argv[1] strings) so this is correct on
110
- // Windows, where argv[1] is a backslash path that never equals
111
- // import.meta.url's forward-slash form.
112
- const isMainModule = process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href;
113
- if (isMainModule) {
114
- runCli();
115
- }
@@ -1,34 +0,0 @@
1
- import { validateAuditResults } from "../dist/audit/validation/auditResults.js";
2
-
3
- /**
4
- * Validate one audit result in the context of its assigned task.
5
- *
6
- * Task-identity gate (audit-merge-and-results contract; COR-7602834d cluster):
7
- * a result validates ONLY in the context of its
8
- * assigned task from the pending manifest. A null/absent task context hard-fails
9
- * — validating with no task context would silently skip every identity-match and
10
- * line-count check (fail-open), admitting results the tool cannot bind to any
11
- * assigned task.
12
- *
13
- * @param {object} resultObj — parsed JSON from a task-results file
14
- * @param {object|null} task — the matching AuditTask from pending-audit-tasks.json, or null
15
- * @returns {{ valid: boolean, errors: string[] }}
16
- */
17
- export function validateResult(resultObj, task) {
18
- if (!task) {
19
- return {
20
- valid: false,
21
- errors: [
22
- "No assigned task context: a result validates only against its assigned task " +
23
- "from pending-audit-tasks.json (fail-closed).",
24
- ],
25
- };
26
- }
27
- const issues = validateAuditResults([resultObj], [task], {
28
- lineIndex: task.file_line_counts ?? {},
29
- });
30
- const errors = issues
31
- .filter(i => i.severity === "error")
32
- .map(i => `${i.path}: ${i.message}`);
33
- return { valid: errors.length === 0, errors };
34
- }