audit-tools 0.44.0 → 0.46.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 +15 -2
- package/dist/audit/cli/charterExtractionPrompt.d.ts.map +1 -1
- package/dist/audit/cli/charterExtractionPrompt.js +11 -1
- package/dist/audit/cli/charterExtractionPrompt.js.map +1 -1
- package/dist/audit/cli/cleanupCommand.d.ts +25 -0
- package/dist/audit/cli/cleanupCommand.d.ts.map +1 -1
- package/dist/audit/cli/cleanupCommand.js +69 -0
- package/dist/audit/cli/cleanupCommand.js.map +1 -1
- package/dist/audit/cli/dispatch/hostHandoff.d.ts +64 -3
- package/dist/audit/cli/dispatch/hostHandoff.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/hostHandoff.js +247 -99
- package/dist/audit/cli/dispatch/hostHandoff.js.map +1 -1
- package/dist/audit/cli/dispatch/packetFilter.d.ts +1 -1
- package/dist/audit/cli/dispatch.d.ts +1 -1
- package/dist/audit/cli/dispatch.d.ts.map +1 -1
- package/dist/audit/cli/dispatch.js +1 -1
- package/dist/audit/cli/dispatch.js.map +1 -1
- package/dist/audit/cli/fanoutLanes.d.ts.map +1 -1
- package/dist/audit/cli/fanoutLanes.js +6 -1
- package/dist/audit/cli/fanoutLanes.js.map +1 -1
- package/dist/audit/cli/laneSubmissions.d.ts +16 -2
- package/dist/audit/cli/laneSubmissions.d.ts.map +1 -1
- package/dist/audit/cli/laneSubmissions.js +38 -27
- package/dist/audit/cli/laneSubmissions.js.map +1 -1
- package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
- package/dist/audit/cli/nextStepCommand.js +9 -6
- package/dist/audit/cli/nextStepCommand.js.map +1 -1
- package/dist/audit/cli/nextStepHelpers.d.ts +39 -4
- package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
- package/dist/audit/cli/nextStepHelpers.js +132 -42
- package/dist/audit/cli/nextStepHelpers.js.map +1 -1
- package/dist/audit/cli/reviewRun.d.ts +1 -1
- package/dist/audit/cli/reviewRun.d.ts.map +1 -1
- package/dist/audit/cli/reviewRun.js +2 -9
- package/dist/audit/cli/reviewRun.js.map +1 -1
- package/dist/audit/cli/sampleRunCommand.d.ts.map +1 -1
- package/dist/audit/cli/sampleRunCommand.js +12 -1
- package/dist/audit/cli/sampleRunCommand.js.map +1 -1
- package/dist/audit/cli/semanticReviewStep.d.ts +5 -2
- package/dist/audit/cli/semanticReviewStep.d.ts.map +1 -1
- package/dist/audit/cli/semanticReviewStep.js +28 -1
- package/dist/audit/cli/semanticReviewStep.js.map +1 -1
- package/dist/audit/cli/steps.d.ts +6 -6
- package/dist/audit/cli/unacceptResultsCommand.d.ts +18 -0
- package/dist/audit/cli/unacceptResultsCommand.d.ts.map +1 -0
- package/dist/audit/cli/unacceptResultsCommand.js +49 -0
- package/dist/audit/cli/unacceptResultsCommand.js.map +1 -0
- package/dist/audit/cli.d.ts +6 -0
- package/dist/audit/cli.d.ts.map +1 -1
- package/dist/audit/cli.js +34 -59
- package/dist/audit/cli.js.map +1 -1
- package/dist/audit/contracts/findingContractPrompt.d.ts +11 -0
- package/dist/audit/contracts/findingContractPrompt.d.ts.map +1 -0
- package/dist/audit/contracts/findingContractPrompt.js +112 -0
- package/dist/audit/contracts/findingContractPrompt.js.map +1 -0
- package/dist/audit/contracts/workerSchemas.d.ts +106 -42
- package/dist/audit/contracts/workerSchemas.d.ts.map +1 -1
- package/dist/audit/contracts/workerSchemas.js +16 -7
- package/dist/audit/contracts/workerSchemas.js.map +1 -1
- package/dist/audit/contracts/wrapperResponse.d.ts +52 -28
- package/dist/audit/contracts/wrapperResponse.d.ts.map +1 -1
- package/dist/audit/contracts/wrapperResponse.js +8 -5
- package/dist/audit/contracts/wrapperResponse.js.map +1 -1
- package/dist/audit/decompose/sources.d.ts.map +1 -1
- package/dist/audit/decompose/sources.js +21 -5
- package/dist/audit/decompose/sources.js.map +1 -1
- package/dist/audit/extractors/analyzers/registry.d.ts +8 -5
- package/dist/audit/extractors/analyzers/registry.d.ts.map +1 -1
- package/dist/audit/extractors/analyzers/registry.js +28 -7
- package/dist/audit/extractors/analyzers/registry.js.map +1 -1
- package/dist/audit/extractors/designAssessment.js +1 -1
- package/dist/audit/extractors/gitHistory.d.ts +1 -1
- package/dist/audit/extractors/gitHistory.js +1 -1
- package/dist/audit/extractors/graph.d.ts +1 -1
- package/dist/audit/extractors/graph.js +1 -1
- package/dist/audit/extractors/risk.d.ts +1 -1
- package/dist/audit/extractors/risk.js +1 -1
- package/dist/audit/io/artifacts.d.ts.map +1 -1
- package/dist/audit/io/artifacts.js +5 -5
- package/dist/audit/io/artifacts.js.map +1 -1
- package/dist/audit/orchestrator/acquisitionExecutor.d.ts +11 -6
- package/dist/audit/orchestrator/acquisitionExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/acquisitionExecutor.js +1 -1
- package/dist/audit/orchestrator/acquisitionExecutor.js.map +1 -1
- package/dist/audit/orchestrator/advance.d.ts +14 -10
- package/dist/audit/orchestrator/advance.d.ts.map +1 -1
- package/dist/audit/orchestrator/advance.js +49 -24
- package/dist/audit/orchestrator/advance.js.map +1 -1
- package/dist/audit/orchestrator/advanceTypes.d.ts +14 -0
- package/dist/audit/orchestrator/advanceTypes.d.ts.map +1 -1
- package/dist/audit/orchestrator/autoFixExecutor.d.ts +20 -1
- package/dist/audit/orchestrator/autoFixExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/autoFixExecutor.js +77 -15
- package/dist/audit/orchestrator/autoFixExecutor.js.map +1 -1
- package/dist/audit/orchestrator/dependencyMap.js +1 -1
- package/dist/audit/orchestrator/dependencyMap.js.map +1 -1
- package/dist/audit/orchestrator/executorRunners.d.ts.map +1 -1
- package/dist/audit/orchestrator/executorRunners.js +18 -4
- package/dist/audit/orchestrator/executorRunners.js.map +1 -1
- package/dist/audit/orchestrator/executors.d.ts +54 -0
- package/dist/audit/orchestrator/executors.d.ts.map +1 -1
- package/dist/audit/orchestrator/executors.js +352 -0
- package/dist/audit/orchestrator/executors.js.map +1 -1
- package/dist/audit/orchestrator/hostInputPause.d.ts +20 -11
- package/dist/audit/orchestrator/hostInputPause.d.ts.map +1 -1
- package/dist/audit/orchestrator/hostInputPause.js +17 -11
- package/dist/audit/orchestrator/hostInputPause.js.map +1 -1
- package/dist/audit/orchestrator/localCommands.d.ts +24 -1
- package/dist/audit/orchestrator/localCommands.d.ts.map +1 -1
- package/dist/audit/orchestrator/localCommands.js +44 -9
- package/dist/audit/orchestrator/localCommands.js.map +1 -1
- package/dist/audit/orchestrator/nextStep.d.ts +13 -0
- package/dist/audit/orchestrator/nextStep.d.ts.map +1 -1
- package/dist/audit/orchestrator/nextStep.js +13 -0
- package/dist/audit/orchestrator/nextStep.js.map +1 -1
- package/dist/audit/orchestrator/requeueCommand.d.ts +1 -1
- package/dist/audit/orchestrator/runtimeCommand.d.ts +32 -1
- package/dist/audit/orchestrator/runtimeCommand.d.ts.map +1 -1
- package/dist/audit/orchestrator/runtimeCommand.js +90 -3
- package/dist/audit/orchestrator/runtimeCommand.js.map +1 -1
- package/dist/audit/orchestrator/structureExecutors.js +1 -1
- package/dist/audit/orchestrator/structureExecutors.js.map +1 -1
- package/dist/audit/orchestrator/syntaxResolutionExecutor.d.ts +11 -1
- package/dist/audit/orchestrator/syntaxResolutionExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/syntaxResolutionExecutor.js +25 -9
- package/dist/audit/orchestrator/syntaxResolutionExecutor.js.map +1 -1
- package/dist/audit/supervisor/operatorHandoff.d.ts +0 -1
- package/dist/audit/supervisor/operatorHandoff.d.ts.map +1 -1
- package/dist/audit/supervisor/operatorHandoff.js +2 -1
- package/dist/audit/supervisor/operatorHandoff.js.map +1 -1
- package/dist/audit/types.d.ts +33 -19
- package/dist/audit/types.d.ts.map +1 -1
- package/dist/audit/validation/auditResults.d.ts +39 -0
- package/dist/audit/validation/auditResults.d.ts.map +1 -1
- package/dist/audit/validation/auditResults.js +111 -53
- package/dist/audit/validation/auditResults.js.map +1 -1
- package/dist/audit/validation/ingestIssueCodes.d.ts +18 -0
- package/dist/audit/validation/ingestIssueCodes.d.ts.map +1 -0
- package/dist/audit/validation/ingestIssueCodes.js +26 -0
- package/dist/audit/validation/ingestIssueCodes.js.map +1 -0
- package/dist/remediate/contractPipeline/derive.d.ts.map +1 -1
- package/dist/remediate/contractPipeline/derive.js +1 -0
- package/dist/remediate/contractPipeline/derive.js.map +1 -1
- package/dist/remediate/contractPipeline/semanticProjection.d.ts +5 -4
- package/dist/remediate/contractPipeline/semanticProjection.d.ts.map +1 -1
- package/dist/remediate/contractPipeline/semanticProjection.js +34 -19
- package/dist/remediate/contractPipeline/semanticProjection.js.map +1 -1
- package/dist/remediate/index.d.ts.map +1 -1
- package/dist/remediate/index.js +3 -2
- package/dist/remediate/index.js.map +1 -1
- package/dist/remediate/phases/close.d.ts +37 -2
- package/dist/remediate/phases/close.d.ts.map +1 -1
- package/dist/remediate/phases/close.js +100 -31
- package/dist/remediate/phases/close.js.map +1 -1
- package/dist/remediate/phases/closeVerifyAnalyzerLeads.js +2 -2
- package/dist/remediate/phases/closeVerifyAnalyzerLeads.js.map +1 -1
- package/dist/remediate/phases/triage.d.ts.map +1 -1
- package/dist/remediate/phases/triage.js +61 -19
- package/dist/remediate/phases/triage.js.map +1 -1
- package/dist/remediate/state/types.d.ts +15 -1
- package/dist/remediate/state/types.d.ts.map +1 -1
- package/dist/remediate/steps/contractPipeline.d.ts +13 -0
- package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
- package/dist/remediate/steps/contractPipeline.js +82 -3
- package/dist/remediate/steps/contractPipeline.js.map +1 -1
- package/dist/remediate/steps/dispatch/hostHandoff.d.ts +1 -1
- package/dist/remediate/steps/dispatch/hostHandoff.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch/hostHandoff.js +297 -139
- package/dist/remediate/steps/dispatch/hostHandoff.js.map +1 -1
- package/dist/remediate/steps/nextStep.d.ts.map +1 -1
- package/dist/remediate/steps/nextStep.js +37 -7
- package/dist/remediate/steps/nextStep.js.map +1 -1
- package/dist/remediate/types/options.d.ts +1 -1
- package/dist/shared/analyzers/acquisitionEngine.d.ts +61 -28
- package/dist/shared/analyzers/acquisitionEngine.d.ts.map +1 -1
- package/dist/shared/analyzers/acquisitionEngine.js +83 -24
- package/dist/shared/analyzers/acquisitionEngine.js.map +1 -1
- package/dist/shared/analyzers/binaryAcquisition.d.ts +8 -2
- package/dist/shared/analyzers/binaryAcquisition.d.ts.map +1 -1
- package/dist/shared/analyzers/binaryAcquisition.js +4 -4
- package/dist/shared/analyzers/binaryAcquisition.js.map +1 -1
- package/dist/shared/constitutionalDocPaths.d.ts.map +1 -1
- package/dist/shared/constitutionalDocPaths.js +7 -0
- package/dist/shared/constitutionalDocPaths.js.map +1 -1
- package/dist/shared/decompose/systemicChallenge.d.ts +15 -1
- package/dist/shared/decompose/systemicChallenge.d.ts.map +1 -1
- package/dist/shared/engine/obligationEngine.d.ts +44 -3
- package/dist/shared/engine/obligationEngine.d.ts.map +1 -1
- package/dist/shared/engine/obligationEngine.js +53 -7
- package/dist/shared/engine/obligationEngine.js.map +1 -1
- package/dist/shared/findings/dedupe.d.ts.map +1 -1
- package/dist/shared/findings/dedupe.js +8 -0
- package/dist/shared/findings/dedupe.js.map +1 -1
- package/dist/shared/friction/frictionRecord.d.ts +42 -2
- package/dist/shared/friction/frictionRecord.d.ts.map +1 -1
- package/dist/shared/friction/frictionRecord.js +111 -3
- package/dist/shared/friction/frictionRecord.js.map +1 -1
- package/dist/shared/friction/triage.d.ts +15 -0
- package/dist/shared/friction/triage.d.ts.map +1 -1
- package/dist/shared/friction/triage.js +33 -2
- package/dist/shared/friction/triage.js.map +1 -1
- package/dist/shared/index.d.ts +16 -11
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +16 -9
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/io/fileLock.d.ts.map +1 -1
- package/dist/shared/io/fileLock.js +22 -3
- package/dist/shared/io/fileLock.js.map +1 -1
- package/dist/shared/io/frictionCapture.d.ts +73 -19
- package/dist/shared/io/frictionCapture.d.ts.map +1 -1
- package/dist/shared/io/frictionCapture.js +21 -30
- package/dist/shared/io/frictionCapture.js.map +1 -1
- package/dist/shared/io/lockedJsonStore.d.ts +24 -3
- package/dist/shared/io/lockedJsonStore.d.ts.map +1 -1
- package/dist/shared/io/lockedJsonStore.js +35 -7
- package/dist/shared/io/lockedJsonStore.js.map +1 -1
- package/dist/shared/io/stepContractWriter.d.ts +3 -3
- package/dist/shared/io/stepContractWriter.d.ts.map +1 -1
- package/dist/shared/io/stepContractWriter.js +97 -13
- package/dist/shared/io/stepContractWriter.js.map +1 -1
- package/dist/shared/submission/expectedSubmissions.d.ts +18 -0
- package/dist/shared/submission/expectedSubmissions.d.ts.map +1 -1
- package/dist/shared/submission/expectedSubmissions.js +17 -0
- package/dist/shared/submission/expectedSubmissions.js.map +1 -1
- package/dist/shared/submission/handRecovery.d.ts.map +1 -1
- package/dist/shared/submission/handRecovery.js +9 -11
- package/dist/shared/submission/handRecovery.js.map +1 -1
- package/dist/shared/submission/hostHandoffCore.d.ts +155 -0
- package/dist/shared/submission/hostHandoffCore.d.ts.map +1 -0
- package/dist/shared/submission/hostHandoffCore.js +210 -0
- package/dist/shared/submission/hostHandoffCore.js.map +1 -0
- package/dist/shared/submission/submissionClassifier.d.ts +4 -1
- package/dist/shared/submission/submissionClassifier.d.ts.map +1 -1
- package/dist/shared/submission/submissionClassifier.js.map +1 -1
- package/dist/shared/submission/submissionLedger.d.ts +16 -5
- package/dist/shared/submission/submissionLedger.d.ts.map +1 -1
- package/dist/shared/submission/submissionLedger.js +42 -3
- package/dist/shared/submission/submissionLedger.js.map +1 -1
- package/dist/shared/tooling/commandShape.d.ts +29 -0
- package/dist/shared/tooling/commandShape.d.ts.map +1 -1
- package/dist/shared/tooling/commandShape.js +82 -10
- package/dist/shared/tooling/commandShape.js.map +1 -1
- package/dist/shared/tooling/exec.d.ts +32 -0
- package/dist/shared/tooling/exec.d.ts.map +1 -1
- package/dist/shared/tooling/exec.js +189 -0
- package/dist/shared/tooling/exec.js.map +1 -1
- package/dist/shared/types/finding.d.ts +132 -20
- package/dist/shared/types/finding.d.ts.map +1 -1
- package/dist/shared/types/finding.js +70 -63
- package/dist/shared/types/finding.js.map +1 -1
- package/docs/audit-pkg/contracts.md +8 -1
- package/docs/audit-pkg/operator-guide.md +13 -2
- package/docs/audit-pkg/product.md +22 -6
- package/package.json +10 -6
- package/schemas/audit-code-v1alpha1.schema.json +297 -0
- package/schemas/audit_result.schema.json +5 -1
- package/schemas/audit_results.schema.json +5 -1
- package/schemas/finding.schema.json +1 -1
- package/scripts/shared/install-host-assets.mjs +8 -5
- package/skills/audit-code/SKILL.md +4 -2
- package/skills/audit-code/audit-code.prompt.md +5 -2
- package/skills/audit-code/opencode-command-template.txt +1 -1
- package/wrapper/audit-code-wrapper-lib.mjs +82 -16
- package/wrapper/installer-verb-help.mjs +14 -4
- package/docs/audit-pkg/development.md +0 -113
- package/docs/audit-pkg/release.md +0 -140
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
1
2
|
import { mkdir } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
2
4
|
import { buildRepoManifest } from "../extractors/fileInventory.js";
|
|
3
5
|
import { buildFileDisposition } from "../extractors/disposition.js";
|
|
4
6
|
import { buildCriticalFlowManifest } from "../extractors/flows.js";
|
|
@@ -10,7 +12,7 @@ import { initializeCoverageFromPlan } from "../orchestrator/planning.js";
|
|
|
10
12
|
import { writeCoreArtifacts } from "../io/artifacts.js";
|
|
11
13
|
import { buildAuditReportModel, renderAuditReportMarkdown, } from "../reporting/synthesis.js";
|
|
12
14
|
import { deriveAuditState } from "../orchestrator/state.js";
|
|
13
|
-
import { getArtifactsDir } from "./args.js";
|
|
15
|
+
import { getArtifactsDir, hasFlag } from "./args.js";
|
|
14
16
|
import { outputJson } from "./cliHelpers.js";
|
|
15
17
|
const SAMPLE_REPO_FILES = [
|
|
16
18
|
{ path: "src/api/auth.ts", size_bytes: 1240, hash: "abc123" },
|
|
@@ -87,6 +89,15 @@ export async function runSample(argv = process.argv) {
|
|
|
87
89
|
audit_report: auditReport,
|
|
88
90
|
});
|
|
89
91
|
const artifactsDir = getArtifactsDir(argv);
|
|
92
|
+
// A live bundle (audit_state.json present) is real run state — fabricated
|
|
93
|
+
// sample artifacts must never overwrite it. `--force` is the explicit
|
|
94
|
+
// disposable-target override, mirroring the cleanup verb.
|
|
95
|
+
if (existsSync(join(artifactsDir, "audit_state.json")) &&
|
|
96
|
+
!hasFlag(argv, "--force")) {
|
|
97
|
+
console.error(`Refusing to write sample artifacts into '${artifactsDir}': an audit state file is present. Pass --force to overwrite a disposable target.`);
|
|
98
|
+
process.exitCode = 1;
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
90
101
|
await mkdir(artifactsDir, { recursive: true });
|
|
91
102
|
await writeCoreArtifacts(artifactsDir, {
|
|
92
103
|
repo_manifest: repoManifest,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sampleRunCommand.js","sourceRoot":"","sources":["../../../src/audit/cli/sampleRunCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"sampleRunCommand.js","sourceRoot":"","sources":["../../../src/audit/cli/sampleRunCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { type SubmissionIssue } from "audit-tools/shared";
|
|
2
1
|
import type { ActiveReviewRun } from "../supervisor/operatorHandoff.js";
|
|
2
|
+
import type { AuditHostIngestIssue } from "../validation/ingestIssueCodes.js";
|
|
3
|
+
import { type AuditHostValidationWarning } from "./dispatch/hostHandoff.js";
|
|
3
4
|
import { writeCurrentStep } from "./steps.js";
|
|
4
5
|
/**
|
|
5
6
|
* Publish the complete provider-neutral semantic-review workload. The host owns
|
|
@@ -13,6 +14,8 @@ export declare function renderSemanticReviewStep(params: {
|
|
|
13
14
|
selectedExecutor?: string | null;
|
|
14
15
|
inProcessMadeProgress?: boolean;
|
|
15
16
|
/** Failures the ingest that preceded this emission classified. */
|
|
16
|
-
ingestIssues?: readonly
|
|
17
|
+
ingestIssues?: readonly AuditHostIngestIssue[];
|
|
18
|
+
/** Advisory validation findings on results the SAME ingest accepted. */
|
|
19
|
+
validationWarnings?: readonly AuditHostValidationWarning[];
|
|
17
20
|
}): Promise<Awaited<ReturnType<typeof writeCurrentStep>>>;
|
|
18
21
|
//# sourceMappingURL=semanticReviewStep.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semanticReviewStep.d.ts","sourceRoot":"","sources":["../../../src/audit/cli/semanticReviewStep.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"semanticReviewStep.d.ts","sourceRoot":"","sources":["../../../src/audit/cli/semanticReviewStep.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAExE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AA6E9C;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,eAAe,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,kEAAkE;IAClE,YAAY,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAC/C,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,SAAS,0BAA0B,EAAE,CAAC;CAC5D,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAqFxD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { resolve } from "node:path";
|
|
2
|
-
import { readJsonFile } from "audit-tools/shared";
|
|
2
|
+
import { linkFrictionRunIds, readJsonFile } from "audit-tools/shared";
|
|
3
|
+
import { AUDIT_FRICTION_RUN_ID } from "../orchestrator/nextStep.js";
|
|
3
4
|
import { prepareAuditHostHandoff, } from "./dispatch/hostHandoff.js";
|
|
4
5
|
import { nextStepCommand } from "./prompts.js";
|
|
5
6
|
import { writeCurrentStep } from "./steps.js";
|
|
@@ -51,6 +52,23 @@ function renderIngestIssueLines(issues) {
|
|
|
51
52
|
"",
|
|
52
53
|
];
|
|
53
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* The ADVISORY half of the ingest report: validation warnings on results that
|
|
57
|
+
* WERE accepted. Deliberately a separate renderer from {@link renderIngestIssueLines}
|
|
58
|
+
* — these need no repair, so they must not share a section (or a count) with
|
|
59
|
+
* items that could not be accepted, or an accepted-with-warning result reads as
|
|
60
|
+
* a refusal that never happened.
|
|
61
|
+
*/
|
|
62
|
+
function renderValidationWarningLines(warnings) {
|
|
63
|
+
if (warnings.length === 0)
|
|
64
|
+
return [];
|
|
65
|
+
return [
|
|
66
|
+
"## Advisory notes on accepted results",
|
|
67
|
+
"",
|
|
68
|
+
...warnings.map((warning) => `- \`${warning.work_item_id}\` was ACCEPTED; advisory: ${warning.message}`),
|
|
69
|
+
"",
|
|
70
|
+
];
|
|
71
|
+
}
|
|
54
72
|
/**
|
|
55
73
|
* Publish the complete provider-neutral semantic-review workload. The host owns
|
|
56
74
|
* every execution choice; audit-tools only binds prompts/results and ingests
|
|
@@ -68,9 +86,17 @@ export async function renderSemanticReviewStep(params) {
|
|
|
68
86
|
runId: activeReviewRun.run_id,
|
|
69
87
|
tasks: tasks.map(toHostTask),
|
|
70
88
|
});
|
|
89
|
+
// Name this round's runs on the audit friction record, which is keyed by a fixed
|
|
90
|
+
// literal and so on its own names no run at all (semantics: `FrictionRunLinks`). Each
|
|
91
|
+
// reference is sourced from the envelope that owns it, never synthesized.
|
|
92
|
+
await linkFrictionRunIds(artifactsDir, AUDIT_FRICTION_RUN_ID, {
|
|
93
|
+
step_run_id: activeReviewRun.run_id,
|
|
94
|
+
dispatch_run_id: handoff.workload.run_id,
|
|
95
|
+
}, "audit-code");
|
|
71
96
|
const continueCommand = nextStepCommand(root, artifactsDir);
|
|
72
97
|
const resultPaths = handoff.workload.work_items.map((item) => resolve(root, item.result_path));
|
|
73
98
|
const issues = params.ingestIssues ?? [];
|
|
99
|
+
const validationWarnings = params.validationWarnings ?? [];
|
|
74
100
|
return writeCurrentStep({
|
|
75
101
|
artifactsDir,
|
|
76
102
|
stepKind: "dispatch_review",
|
|
@@ -99,6 +125,7 @@ export async function renderSemanticReviewStep(params) {
|
|
|
99
125
|
"# audit-code semantic review",
|
|
100
126
|
"",
|
|
101
127
|
...renderIngestIssueLines(issues),
|
|
128
|
+
...renderValidationWarningLines(validationWarnings),
|
|
102
129
|
`Read the complete provider-neutral workload at: ${handoff.workload_path}`,
|
|
103
130
|
"",
|
|
104
131
|
"Execute every work item using the host facilities available in this conversation.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semanticReviewStep.js","sourceRoot":"","sources":["../../../src/audit/cli/semanticReviewStep.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"semanticReviewStep.js","sourceRoot":"","sources":["../../../src/audit/cli/semanticReviewStep.ts"],"names":[],"mappings":"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"}
|
|
@@ -181,13 +181,13 @@ export declare const StepArtifactSchema: z.ZodObject<{
|
|
|
181
181
|
status: "blocked" | "ready" | "complete";
|
|
182
182
|
contract_version: "audit-code-step/v1alpha1";
|
|
183
183
|
run_id: string | null;
|
|
184
|
+
repo_root: string;
|
|
185
|
+
artifacts_dir: string;
|
|
186
|
+
artifact_paths: Record<string, string | null>;
|
|
184
187
|
step_kind: "blocked" | "design_review" | "charter_clarification" | "analyzer_consent" | "systemic_challenge" | "critical_flow_fallback" | "synthesis_narrative" | "design_review_contract" | "design_review_conceptual" | "intent_equivalence" | "charter_delta" | "dispatch_review" | "design_review_parallel" | "charter_extraction" | "confirm_intent" | "analyzer_install" | "edge_reasoning_dispatch" | "present_report";
|
|
185
188
|
prompt_path: string;
|
|
186
189
|
allowed_commands: string[];
|
|
187
190
|
stop_condition: string;
|
|
188
|
-
repo_root: string;
|
|
189
|
-
artifacts_dir: string;
|
|
190
|
-
artifact_paths: Record<string, string | null>;
|
|
191
191
|
progress?: {
|
|
192
192
|
summary: string;
|
|
193
193
|
pending_packets?: number | undefined;
|
|
@@ -220,13 +220,13 @@ export declare const StepArtifactSchema: z.ZodObject<{
|
|
|
220
220
|
status: "blocked" | "ready" | "complete";
|
|
221
221
|
contract_version: "audit-code-step/v1alpha1";
|
|
222
222
|
run_id: string | null;
|
|
223
|
+
repo_root: string;
|
|
224
|
+
artifacts_dir: string;
|
|
225
|
+
artifact_paths: Record<string, string | null>;
|
|
223
226
|
step_kind: "blocked" | "design_review" | "charter_clarification" | "analyzer_consent" | "systemic_challenge" | "critical_flow_fallback" | "synthesis_narrative" | "design_review_contract" | "design_review_conceptual" | "intent_equivalence" | "charter_delta" | "dispatch_review" | "design_review_parallel" | "charter_extraction" | "confirm_intent" | "analyzer_install" | "edge_reasoning_dispatch" | "present_report";
|
|
224
227
|
prompt_path: string;
|
|
225
228
|
allowed_commands: string[];
|
|
226
229
|
stop_condition: string;
|
|
227
|
-
repo_root: string;
|
|
228
|
-
artifacts_dir: string;
|
|
229
|
-
artifact_paths: Record<string, string | null>;
|
|
230
230
|
progress?: {
|
|
231
231
|
summary: string;
|
|
232
232
|
pending_packets?: number | undefined;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `audit-code unaccept-results --work-item <id> [--work-item <id> …] | --all`
|
|
3
|
+
*
|
|
4
|
+
* Remove entries from the run's accepted host-results pair — the supported path
|
|
5
|
+
* back out of an acceptance, per the recovery-verb doctrine: operator-facing,
|
|
6
|
+
* refusing what it cannot validate (the strict accepted-ledger loader throws on
|
|
7
|
+
* a corrupt pair), recording the removal so a repaired run stays
|
|
8
|
+
* distinguishable from a clean one, and invalidating the persisted step
|
|
9
|
+
* contract. After dropping, the next fold re-reads the bound result files.
|
|
10
|
+
*
|
|
11
|
+
* Argument validation lives in {@link dropAcceptedResults} — the ONE copy of
|
|
12
|
+
* the "requires --work-item or --all" refusal; this command parses argv only.
|
|
13
|
+
*
|
|
14
|
+
* The run id resolves from the persisted review-run manifest, not an argv flag:
|
|
15
|
+
* the operator names WHAT to drop, never WHERE the state lives.
|
|
16
|
+
*/
|
|
17
|
+
export declare function cmdUnacceptResults(argv: string[]): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=unacceptResultsCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unacceptResultsCommand.d.ts","sourceRoot":"","sources":["../../../src/audit/cli/unacceptResultsCommand.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CtE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { dropAcceptedResults } from "./dispatch/hostHandoff.js";
|
|
2
|
+
import { getArtifactsDir, getFlag, getRootDir, hasFlag, } from "./args.js";
|
|
3
|
+
import { loadCurrentActiveReviewRun } from "./reviewRun.js";
|
|
4
|
+
/**
|
|
5
|
+
* `audit-code unaccept-results --work-item <id> [--work-item <id> …] | --all`
|
|
6
|
+
*
|
|
7
|
+
* Remove entries from the run's accepted host-results pair — the supported path
|
|
8
|
+
* back out of an acceptance, per the recovery-verb doctrine: operator-facing,
|
|
9
|
+
* refusing what it cannot validate (the strict accepted-ledger loader throws on
|
|
10
|
+
* a corrupt pair), recording the removal so a repaired run stays
|
|
11
|
+
* distinguishable from a clean one, and invalidating the persisted step
|
|
12
|
+
* contract. After dropping, the next fold re-reads the bound result files.
|
|
13
|
+
*
|
|
14
|
+
* Argument validation lives in {@link dropAcceptedResults} — the ONE copy of
|
|
15
|
+
* the "requires --work-item or --all" refusal; this command parses argv only.
|
|
16
|
+
*
|
|
17
|
+
* The run id resolves from the persisted review-run manifest, not an argv flag:
|
|
18
|
+
* the operator names WHAT to drop, never WHERE the state lives.
|
|
19
|
+
*/
|
|
20
|
+
export async function cmdUnacceptResults(argv) {
|
|
21
|
+
const root = getRootDir(argv);
|
|
22
|
+
const artifactsDir = getArtifactsDir(argv);
|
|
23
|
+
const all = hasFlag(argv, "--all");
|
|
24
|
+
const workItemIds = argv
|
|
25
|
+
.flatMap((token, index) => token === "--work-item" ? [argv[index + 1]] : [])
|
|
26
|
+
.filter((value) => typeof value === "string");
|
|
27
|
+
// Canonical run resolution: the same manifest `next-step`'s ingest fold reads.
|
|
28
|
+
// A hand-supplied run id would be a second way to be wrong about which state
|
|
29
|
+
// is being mutated.
|
|
30
|
+
const overrideRunId = getFlag(argv, "--run-id");
|
|
31
|
+
const runId = overrideRunId ?? (await loadCurrentActiveReviewRun(artifactsDir))?.run_id;
|
|
32
|
+
if (runId === undefined) {
|
|
33
|
+
throw new Error(`unaccept-results could not resolve the active review run under ${artifactsDir} ` +
|
|
34
|
+
"(no dispatch manifest); pass --run-id <id> only if the manifest was removed");
|
|
35
|
+
}
|
|
36
|
+
const outcome = await dropAcceptedResults({
|
|
37
|
+
root,
|
|
38
|
+
artifactsDir,
|
|
39
|
+
runId,
|
|
40
|
+
...(all ? { all: true } : { workItemIds }),
|
|
41
|
+
});
|
|
42
|
+
console.log(JSON.stringify({
|
|
43
|
+
status: "unaccepted",
|
|
44
|
+
run_id: runId,
|
|
45
|
+
dropped_work_item_ids: outcome.dropped_work_item_ids,
|
|
46
|
+
next: "audit-code next-step re-reads the bound result files for the dropped items",
|
|
47
|
+
}, null, 2));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=unacceptResultsCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unacceptResultsCommand.js","sourceRoot":"","sources":["../../../src/audit/cli/unacceptResultsCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EACL,eAAe,EACf,OAAO,EACP,UAAU,EACV,OAAO,GACR,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAE5D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAc;IACrD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,IAAI;SACrB,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACxB,KAAK,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CACjD;SACA,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;IAEjE,+EAA+E;IAC/E,6EAA6E;IAC7E,oBAAoB;IACpB,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,KAAK,GACT,aAAa,IAAI,CAAC,MAAM,0BAA0B,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC;IAC5E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,kEAAkE,YAAY,GAAG;YAC/E,6EAA6E,CAChF,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC;QACxC,IAAI;QACJ,YAAY;QACZ,KAAK;QACL,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;KAC3C,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;QACE,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,KAAK;QACb,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;QACpD,IAAI,EAAE,4EAA4E;KACnF,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;AACJ,CAAC"}
|
package/dist/audit/cli.d.ts
CHANGED
|
@@ -17,5 +17,11 @@ export declare const cliTestUtils: {
|
|
|
17
17
|
countLines: typeof countLines;
|
|
18
18
|
warnIfNotGitRepo: typeof warnIfNotGitRepo;
|
|
19
19
|
};
|
|
20
|
+
/**
|
|
21
|
+
* The ONE route table for the audit CLI. Each row is [verb, handler]; the
|
|
22
|
+
* dispatch below walks it and the unknown-command listing is DERIVED from it —
|
|
23
|
+
* never a second hand-maintained copy that drifts when a verb is added.
|
|
24
|
+
*/
|
|
25
|
+
export declare const COMMAND_ROUTES: ReadonlyArray<readonly [string, (argv: string[]) => Promise<void>]>;
|
|
20
26
|
export declare function runCli(argv: string[]): Promise<void>;
|
|
21
27
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/audit/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/audit/cli.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,OAAO,EACP,OAAO,EACP,eAAe,EACf,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/audit/cli.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,OAAO,EACP,OAAO,EACP,eAAe,EACf,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAkBtD,OAAO,EAAE,SAAS,EAAE,CAAC;AAErB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;CAWxB,CAAC;AAgBF;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,aAAa,CACxC,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAqBrD,CAAC;AAwBF,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAK1D"}
|
package/dist/audit/cli.js
CHANGED
|
@@ -20,6 +20,7 @@ import { cmdResynthesize } from "./cli/resynthesizeCommand.js";
|
|
|
20
20
|
import { cmdCleanup } from "./cli/cleanupCommand.js";
|
|
21
21
|
import { cmdScoreAudit } from "./cli/scoreAuditCommand.js";
|
|
22
22
|
import { cmdRecoverSubmission } from "./cli/recoverSubmissionCommand.js";
|
|
23
|
+
import { cmdUnacceptResults } from "./cli/unacceptResultsCommand.js";
|
|
23
24
|
export { runSample };
|
|
24
25
|
export const cliTestUtils = {
|
|
25
26
|
defaults: DIRECT_CLI_DEFAULTS,
|
|
@@ -46,6 +47,32 @@ export const cliTestUtils = {
|
|
|
46
47
|
* wrapper, scrubbed from provider spawns).
|
|
47
48
|
*/
|
|
48
49
|
const WORKER_SAFE_COMMANDS = new Set();
|
|
50
|
+
/**
|
|
51
|
+
* The ONE route table for the audit CLI. Each row is [verb, handler]; the
|
|
52
|
+
* dispatch below walks it and the unknown-command listing is DERIVED from it —
|
|
53
|
+
* never a second hand-maintained copy that drifts when a verb is added.
|
|
54
|
+
*/
|
|
55
|
+
export const COMMAND_ROUTES = [
|
|
56
|
+
["sample-run", runSample],
|
|
57
|
+
["next-step", cmdNextStep],
|
|
58
|
+
["import-external-analyzer", cmdImportExternalAnalyzer],
|
|
59
|
+
["intake", cmdIntake],
|
|
60
|
+
["plan", cmdPlan],
|
|
61
|
+
["ingest-results", cmdIngestResults],
|
|
62
|
+
["explain-task", cmdExplainTask],
|
|
63
|
+
["update-runtime-validation", cmdUpdateRuntimeValidation],
|
|
64
|
+
["validate", cmdValidate],
|
|
65
|
+
["validate-results", cmdValidateResults],
|
|
66
|
+
["requeue", cmdRequeue],
|
|
67
|
+
["synthesize", cmdSynthesize],
|
|
68
|
+
["force-synthesis", cmdForceSynthesis],
|
|
69
|
+
["resynthesize", cmdResynthesize],
|
|
70
|
+
["cleanup", cmdCleanup],
|
|
71
|
+
["status", cmdStatus],
|
|
72
|
+
["score-audit", cmdScoreAudit],
|
|
73
|
+
["recover-submission", cmdRecoverSubmission],
|
|
74
|
+
["unaccept-results", cmdUnacceptResults],
|
|
75
|
+
];
|
|
49
76
|
async function main(argv) {
|
|
50
77
|
const command = argv[2] ?? "sample-run";
|
|
51
78
|
assertCliCommandAllowedFromCwd({
|
|
@@ -56,66 +83,14 @@ async function main(argv) {
|
|
|
56
83
|
// worktree evidence, so the guard must see the unanchored value.
|
|
57
84
|
rawRoot: getFlag(argv, "--root"),
|
|
58
85
|
});
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
return;
|
|
66
|
-
case "import-external-analyzer":
|
|
67
|
-
await cmdImportExternalAnalyzer(argv);
|
|
68
|
-
return;
|
|
69
|
-
case "intake":
|
|
70
|
-
await cmdIntake(argv);
|
|
71
|
-
return;
|
|
72
|
-
case "plan":
|
|
73
|
-
await cmdPlan(argv);
|
|
74
|
-
return;
|
|
75
|
-
case "ingest-results":
|
|
76
|
-
await cmdIngestResults(argv);
|
|
77
|
-
return;
|
|
78
|
-
case "explain-task":
|
|
79
|
-
await cmdExplainTask(argv);
|
|
80
|
-
return;
|
|
81
|
-
case "update-runtime-validation":
|
|
82
|
-
await cmdUpdateRuntimeValidation(argv);
|
|
83
|
-
return;
|
|
84
|
-
case "validate":
|
|
85
|
-
await cmdValidate(argv);
|
|
86
|
-
return;
|
|
87
|
-
case "validate-results":
|
|
88
|
-
await cmdValidateResults(argv);
|
|
89
|
-
return;
|
|
90
|
-
case "requeue":
|
|
91
|
-
await cmdRequeue(argv);
|
|
92
|
-
return;
|
|
93
|
-
case "synthesize":
|
|
94
|
-
await cmdSynthesize(argv);
|
|
95
|
-
return;
|
|
96
|
-
case "force-synthesis":
|
|
97
|
-
await cmdForceSynthesis(argv);
|
|
98
|
-
return;
|
|
99
|
-
case "resynthesize":
|
|
100
|
-
await cmdResynthesize(argv);
|
|
101
|
-
return;
|
|
102
|
-
case "cleanup":
|
|
103
|
-
await cmdCleanup(argv);
|
|
104
|
-
return;
|
|
105
|
-
case "status":
|
|
106
|
-
await cmdStatus(argv);
|
|
107
|
-
return;
|
|
108
|
-
case "score-audit":
|
|
109
|
-
await cmdScoreAudit(argv);
|
|
110
|
-
return;
|
|
111
|
-
case "recover-submission":
|
|
112
|
-
await cmdRecoverSubmission(argv);
|
|
113
|
-
return;
|
|
114
|
-
default:
|
|
115
|
-
console.error(`Unknown command: ${command}`);
|
|
116
|
-
console.error("Available commands: sample-run, next-step, import-external-analyzer, intake, plan, ingest-results, explain-task, update-runtime-validation, validate, validate-results, requeue, synthesize, force-synthesis, resynthesize, cleanup, status, score-audit, recover-submission");
|
|
117
|
-
process.exitCode = 1;
|
|
86
|
+
const route = COMMAND_ROUTES.find(([verb]) => verb === command);
|
|
87
|
+
if (!route) {
|
|
88
|
+
console.error(`Unknown command: ${command}`);
|
|
89
|
+
console.error(`Available commands: ${COMMAND_ROUTES.map(([verb]) => verb).join(", ")}`);
|
|
90
|
+
process.exitCode = 1;
|
|
91
|
+
return;
|
|
118
92
|
}
|
|
93
|
+
await route[1](argv);
|
|
119
94
|
}
|
|
120
95
|
export async function runCli(argv) {
|
|
121
96
|
await main(argv).catch((error) => {
|
package/dist/audit/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/audit/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAEpE,OAAO,EACL,mBAAmB,EACnB,OAAO,EACP,OAAO,EACP,eAAe,EACf,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/audit/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The finding contract as prompt lines: required fields (with their shapes),
|
|
3
|
+
* min-length facts, the closed vocabularies, the optional fields with their own
|
|
4
|
+
* `.describe()` text, and every non-schema rule statement verbatim.
|
|
5
|
+
*
|
|
6
|
+
* Memoized: the derivation is pure and the result is embedded in every
|
|
7
|
+
* work-item prompt (and therefore in every prompt hash), so it must be both
|
|
8
|
+
* cheap and byte-stable across a run.
|
|
9
|
+
*/
|
|
10
|
+
export declare function findingContractPromptLines(): readonly string[];
|
|
11
|
+
//# sourceMappingURL=findingContractPrompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findingContractPrompt.d.ts","sourceRoot":"","sources":["../../../src/audit/contracts/findingContractPrompt.ts"],"names":[],"mappings":"AA8DA;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,IAAI,SAAS,MAAM,EAAE,CAoE9D"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// The audit draw's finding contract as prompt lines.
|
|
2
|
+
//
|
|
3
|
+
// DERIVED from `WorkerFindingSchema` — the strict projection ingestion parses —
|
|
4
|
+
// plus `AUDIT_RESULT_RULES`, the registry of the rules that are not expressible
|
|
5
|
+
// as per-finding schema refinements and that `validateAuditResults` emits its
|
|
6
|
+
// messages FROM. Prompt, acceptance and validation therefore share ONE source:
|
|
7
|
+
// a field or rule the validators enforce is stated here because it exists in
|
|
8
|
+
// the schema/registry, never because someone remembered to copy it in.
|
|
9
|
+
//
|
|
10
|
+
// A dispatch prompt that says only "findings must satisfy the audit finding
|
|
11
|
+
// contract" leaves the host to remember or fetch the contract; a measured lap
|
|
12
|
+
// lost four complete results exactly that way (findings missing the required
|
|
13
|
+
// per-finding `lens`; `evidence` submitted as a string where an array is
|
|
14
|
+
// required), and the 2026-08-21 lap then lost more to `evidence` being omitted
|
|
15
|
+
// entirely while downstream validation required it.
|
|
16
|
+
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
17
|
+
import { CONFIDENCES, LENSES, SEVERITIES, FINDING_LINE_END_INTEGER_RULE, FINDING_LINE_ORDER_RULE, FINDING_LINE_START_INTEGER_RULE, } from "audit-tools/shared";
|
|
18
|
+
import { AUDIT_RESULT_RULES } from "../validation/auditResults.js";
|
|
19
|
+
import { WorkerFindingSchema } from "./workerSchemas.js";
|
|
20
|
+
function describeField(node) {
|
|
21
|
+
if (node === undefined)
|
|
22
|
+
return "value";
|
|
23
|
+
if (Array.isArray(node.enum)) {
|
|
24
|
+
return `one of ${node.enum.map((value) => String(value)).join("|")}`;
|
|
25
|
+
}
|
|
26
|
+
if (node.type === "array") {
|
|
27
|
+
const item = node.items;
|
|
28
|
+
if (item?.type === "object") {
|
|
29
|
+
const required = [...(item.required ?? [])].sort();
|
|
30
|
+
return required.length > 0
|
|
31
|
+
? `array of objects, each requiring ${required.join(" + ")}`
|
|
32
|
+
: "array of objects";
|
|
33
|
+
}
|
|
34
|
+
return typeof item?.type === "string" ? `array of ${item.type}s` : "array";
|
|
35
|
+
}
|
|
36
|
+
return typeof node.type === "string" ? node.type : "value";
|
|
37
|
+
}
|
|
38
|
+
let renderedContract;
|
|
39
|
+
/**
|
|
40
|
+
* The finding contract as prompt lines: required fields (with their shapes),
|
|
41
|
+
* min-length facts, the closed vocabularies, the optional fields with their own
|
|
42
|
+
* `.describe()` text, and every non-schema rule statement verbatim.
|
|
43
|
+
*
|
|
44
|
+
* Memoized: the derivation is pure and the result is embedded in every
|
|
45
|
+
* work-item prompt (and therefore in every prompt hash), so it must be both
|
|
46
|
+
* cheap and byte-stable across a run.
|
|
47
|
+
*/
|
|
48
|
+
export function findingContractPromptLines() {
|
|
49
|
+
if (renderedContract !== undefined)
|
|
50
|
+
return renderedContract;
|
|
51
|
+
const schema = zodToJsonSchema(WorkerFindingSchema, {
|
|
52
|
+
$refStrategy: "none",
|
|
53
|
+
target: "jsonSchema7",
|
|
54
|
+
});
|
|
55
|
+
const properties = schema.properties ?? {};
|
|
56
|
+
const required = [...(schema.required ?? [])].sort();
|
|
57
|
+
const arrayFields = Object.entries(properties)
|
|
58
|
+
.filter(([, node]) => node.type === "array")
|
|
59
|
+
.map(([name]) => name)
|
|
60
|
+
.sort();
|
|
61
|
+
const optionalFields = Object.entries(properties)
|
|
62
|
+
.filter(([name]) => !required.includes(name))
|
|
63
|
+
.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0));
|
|
64
|
+
// Every min(1) the schema carries is a contract fact the host must know —
|
|
65
|
+
// an empty value fails the parse exactly as a missing field does — so it is
|
|
66
|
+
// detected FROM the schema node (required or optional, array or string),
|
|
67
|
+
// never from a hand list.
|
|
68
|
+
const nonEmptyFields = Object.entries(properties)
|
|
69
|
+
.filter(([, node]) => (node.minItems ?? 0) >= 1 || (node.minLength ?? 0) >= 1)
|
|
70
|
+
.map(([name]) => name)
|
|
71
|
+
.sort();
|
|
72
|
+
const nonEmptyLine = (names) => `Finding contract — ${names.join(", ")} ` +
|
|
73
|
+
`${names.every((name) => required.includes(name)) ? "must be non-empty" : "must be non-empty when supplied"} ` +
|
|
74
|
+
"(an empty value rejects the submission).";
|
|
75
|
+
const lines = [
|
|
76
|
+
"Finding contract — every entry of `findings` must carry these required fields: " +
|
|
77
|
+
required
|
|
78
|
+
.map((name) => `${name} (${describeField(properties[name])})`)
|
|
79
|
+
.join(", ") +
|
|
80
|
+
".",
|
|
81
|
+
...[
|
|
82
|
+
nonEmptyFields.filter((name) => required.includes(name)),
|
|
83
|
+
nonEmptyFields.filter((name) => !required.includes(name)),
|
|
84
|
+
]
|
|
85
|
+
.filter((names) => names.length > 0)
|
|
86
|
+
.map((names) => nonEmptyLine(names)),
|
|
87
|
+
"These fields are JSON arrays whenever present, never a bare string or object: " +
|
|
88
|
+
arrayFields.join(", ") +
|
|
89
|
+
". A finding that fails this contract rejects the whole submission.",
|
|
90
|
+
// `lens` is an OPTIONAL finding field (the enclosing AuditResult supplies
|
|
91
|
+
// the default), so its vocabulary clause is scoped to findings that supply
|
|
92
|
+
// one — stated two lines above as "lens is optional" — while severity and
|
|
93
|
+
// confidence are required on every finding. Still derived: the value list
|
|
94
|
+
// comes from LENSES, never a hand-typed copy.
|
|
95
|
+
`Closed vocabularies — severity must be one of ${SEVERITIES.join("|")}; confidence one of ${CONFIDENCES.join("|")}; lens, when supplied, one of ${LENSES.join("|")}.`,
|
|
96
|
+
...optionalFields
|
|
97
|
+
.filter(([, node]) => typeof node.description === "string")
|
|
98
|
+
.map(([name, node]) => `${name} is optional${typeof node.description === "string" ? `: ${node.description}` : "."}`),
|
|
99
|
+
// The line-span rules are enforced by the shared location refinement; the
|
|
100
|
+
// prompt states the very sentences the refinement emits (the exported
|
|
101
|
+
// constants), so the check and the statement cannot drift.
|
|
102
|
+
`Rule: ${FINDING_LINE_START_INTEGER_RULE}`,
|
|
103
|
+
`Rule: ${FINDING_LINE_END_INTEGER_RULE}`,
|
|
104
|
+
`Rule: ${FINDING_LINE_ORDER_RULE}`,
|
|
105
|
+
// Every cross-record rule the downstream validator enforces, verbatim from
|
|
106
|
+
// the registry the validator itself reads — not a paraphrase.
|
|
107
|
+
...AUDIT_RESULT_RULES.map((rule) => `Rule: ${rule.statement}`),
|
|
108
|
+
];
|
|
109
|
+
renderedContract = lines;
|
|
110
|
+
return renderedContract;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=findingContractPrompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findingContractPrompt.js","sourceRoot":"","sources":["../../../src/audit/contracts/findingContractPrompt.ts"],"names":[],"mappings":"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"}
|