audit-tools 0.52.0 → 0.52.1
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/dist/audit/cli/auditStep.d.ts.map +1 -1
- package/dist/audit/cli/auditStep.js +2 -2
- package/dist/audit/cli/auditStep.js.map +1 -1
- package/dist/audit/cli/charterClarificationPrompt.d.ts +16 -8
- package/dist/audit/cli/charterClarificationPrompt.d.ts.map +1 -1
- package/dist/audit/cli/charterClarificationPrompt.js +95 -42
- package/dist/audit/cli/charterClarificationPrompt.js.map +1 -1
- package/dist/audit/cli/charterComparisonPrompt.d.ts +16 -6
- package/dist/audit/cli/charterComparisonPrompt.d.ts.map +1 -1
- package/dist/audit/cli/charterComparisonPrompt.js +76 -29
- package/dist/audit/cli/charterComparisonPrompt.js.map +1 -1
- package/dist/audit/cli/charterExtractionPrompt.d.ts +5 -4
- package/dist/audit/cli/charterExtractionPrompt.d.ts.map +1 -1
- package/dist/audit/cli/charterExtractionPrompt.js +64 -42
- package/dist/audit/cli/charterExtractionPrompt.js.map +1 -1
- package/dist/audit/cli/charterFidelityPrompt.d.ts +17 -4
- package/dist/audit/cli/charterFidelityPrompt.d.ts.map +1 -1
- package/dist/audit/cli/charterFidelityPrompt.js +72 -21
- package/dist/audit/cli/charterFidelityPrompt.js.map +1 -1
- package/dist/audit/cli/dispatch/hostHandoff.d.ts +23 -1
- package/dist/audit/cli/dispatch/hostHandoff.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/hostHandoff.js +204 -41
- package/dist/audit/cli/dispatch/hostHandoff.js.map +1 -1
- package/dist/audit/cli/dispatch/packetFilter.d.ts +8 -0
- package/dist/audit/cli/dispatch/packetFilter.d.ts.map +1 -1
- package/dist/audit/cli/fanoutLanes.d.ts.map +1 -1
- package/dist/audit/cli/fanoutLanes.js +20 -4
- package/dist/audit/cli/fanoutLanes.js.map +1 -1
- package/dist/audit/cli/laneValidators.d.ts +19 -7
- package/dist/audit/cli/laneValidators.d.ts.map +1 -1
- package/dist/audit/cli/laneValidators.js +73 -18
- package/dist/audit/cli/laneValidators.js.map +1 -1
- package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
- package/dist/audit/cli/nextStepCommand.js +13 -6
- package/dist/audit/cli/nextStepCommand.js.map +1 -1
- package/dist/audit/cli/nextStepHelpers.d.ts +25 -2
- package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
- package/dist/audit/cli/nextStepHelpers.js +105 -35
- package/dist/audit/cli/nextStepHelpers.js.map +1 -1
- package/dist/audit/cli/recoverSubmissionCommand.d.ts.map +1 -1
- package/dist/audit/cli/recoverSubmissionCommand.js +89 -4
- package/dist/audit/cli/recoverSubmissionCommand.js.map +1 -1
- package/dist/audit/cli/sampleRunCommand.d.ts +10 -0
- package/dist/audit/cli/sampleRunCommand.d.ts.map +1 -1
- package/dist/audit/cli/semanticReviewStep.d.ts +4 -4
- package/dist/audit/cli/semanticReviewStep.d.ts.map +1 -1
- package/dist/audit/cli/semanticReviewStep.js +35 -71
- package/dist/audit/cli/semanticReviewStep.js.map +1 -1
- package/dist/audit/contracts/findingContractPrompt.d.ts.map +1 -1
- package/dist/audit/contracts/findingContractPrompt.js +7 -1
- package/dist/audit/contracts/findingContractPrompt.js.map +1 -1
- package/dist/audit/contracts/workerSchemas.d.ts +280 -4
- package/dist/audit/contracts/workerSchemas.d.ts.map +1 -1
- package/dist/audit/contracts/workerSchemas.js +24 -2
- package/dist/audit/contracts/workerSchemas.js.map +1 -1
- package/dist/audit/orchestrator/charterClarificationExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/charterClarificationExecutor.js +39 -0
- package/dist/audit/orchestrator/charterClarificationExecutor.js.map +1 -1
- package/dist/audit/orchestrator/charterExtractionExecutor.d.ts +12 -5
- package/dist/audit/orchestrator/charterExtractionExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/charterExtractionExecutor.js +39 -9
- package/dist/audit/orchestrator/charterExtractionExecutor.js.map +1 -1
- package/dist/audit/orchestrator/designReviewPrompt.d.ts +7 -0
- package/dist/audit/orchestrator/designReviewPrompt.d.ts.map +1 -1
- package/dist/audit/orchestrator/designReviewPrompt.js +174 -19
- package/dist/audit/orchestrator/designReviewPrompt.js.map +1 -1
- package/dist/audit/orchestrator/intentCheckpointGate.d.ts.map +1 -1
- package/dist/audit/orchestrator/intentCheckpointGate.js +1 -5
- package/dist/audit/orchestrator/intentCheckpointGate.js.map +1 -1
- package/dist/audit/orchestrator/requeueCommand.d.ts +8 -0
- package/dist/audit/orchestrator/requeueCommand.d.ts.map +1 -1
- package/dist/audit/orchestrator/selectiveDeepening/lensVerification.d.ts.map +1 -1
- package/dist/audit/orchestrator/selectiveDeepening/lensVerification.js +94 -71
- package/dist/audit/orchestrator/selectiveDeepening/lensVerification.js.map +1 -1
- package/dist/audit/orchestrator/selectiveDeepening/shared.d.ts +0 -2
- package/dist/audit/orchestrator/selectiveDeepening/shared.d.ts.map +1 -1
- package/dist/audit/orchestrator/selectiveDeepening/shared.js +9 -2
- package/dist/audit/orchestrator/selectiveDeepening/shared.js.map +1 -1
- package/dist/audit/orchestrator/selectiveDeepening/stewardFollowup.d.ts.map +1 -1
- package/dist/audit/orchestrator/selectiveDeepening/stewardFollowup.js +28 -4
- package/dist/audit/orchestrator/selectiveDeepening/stewardFollowup.js.map +1 -1
- package/dist/audit/reporting/synthesis.d.ts +16 -3
- package/dist/audit/reporting/synthesis.d.ts.map +1 -1
- package/dist/audit/reporting/synthesis.js +40 -11
- package/dist/audit/reporting/synthesis.js.map +1 -1
- package/dist/audit/reporting/synthesisNarrativePrompt.d.ts +26 -1
- package/dist/audit/reporting/synthesisNarrativePrompt.d.ts.map +1 -1
- package/dist/audit/reporting/synthesisNarrativePrompt.js +53 -13
- package/dist/audit/reporting/synthesisNarrativePrompt.js.map +1 -1
- package/dist/audit/systemic/secondOrderAdversaryPrompt.d.ts.map +1 -1
- package/dist/audit/systemic/secondOrderAdversaryPrompt.js +67 -40
- package/dist/audit/systemic/secondOrderAdversaryPrompt.js.map +1 -1
- package/dist/audit/systemic/systemicChallengeLoop.d.ts.map +1 -1
- package/dist/audit/systemic/systemicChallengeLoop.js +13 -1
- package/dist/audit/systemic/systemicChallengeLoop.js.map +1 -1
- package/dist/audit/types/conceptualAdjudication.d.ts +26 -2
- package/dist/audit/types/conceptualAdjudication.d.ts.map +1 -1
- package/dist/audit/types/conceptualAdjudication.js +26 -7
- package/dist/audit/types/conceptualAdjudication.js.map +1 -1
- package/dist/audit/types.d.ts +279 -0
- package/dist/audit/types.d.ts.map +1 -1
- package/dist/audit/types.js +52 -0
- package/dist/audit/types.js.map +1 -1
- package/dist/audit/validation/auditResults.d.ts.map +1 -1
- package/dist/audit/validation/auditResults.js +51 -6
- package/dist/audit/validation/auditResults.js.map +1 -1
- package/dist/audit/validation/ingestIssueCodes.d.ts +3 -1
- package/dist/audit/validation/ingestIssueCodes.d.ts.map +1 -1
- package/dist/audit/validation/ingestIssueCodes.js +27 -15
- package/dist/audit/validation/ingestIssueCodes.js.map +1 -1
- package/dist/remediate/contractPipeline/sketchSource.d.ts +13 -3
- package/dist/remediate/contractPipeline/sketchSource.d.ts.map +1 -1
- package/dist/remediate/contractPipeline/sketchSource.js +14 -8
- package/dist/remediate/contractPipeline/sketchSource.js.map +1 -1
- package/dist/remediate/intake.d.ts +140 -36
- package/dist/remediate/intake.d.ts.map +1 -1
- package/dist/remediate/intake.js +159 -38
- package/dist/remediate/intake.js.map +1 -1
- package/dist/remediate/intent/checkpointFilter.d.ts +1 -2
- package/dist/remediate/intent/checkpointFilter.d.ts.map +1 -1
- package/dist/remediate/intent/checkpointFilter.js +1 -5
- package/dist/remediate/intent/checkpointFilter.js.map +1 -1
- package/dist/remediate/phases/close.d.ts.map +1 -1
- package/dist/remediate/phases/close.js +2 -2
- package/dist/remediate/phases/close.js.map +1 -1
- package/dist/remediate/phases/plan.d.ts +1 -1
- package/dist/remediate/review/reviewGate.d.ts +68 -39
- package/dist/remediate/review/reviewGate.d.ts.map +1 -1
- package/dist/remediate/review/reviewGate.js +133 -50
- package/dist/remediate/review/reviewGate.js.map +1 -1
- package/dist/remediate/state/store.d.ts +1 -2
- package/dist/remediate/state/store.d.ts.map +1 -1
- package/dist/remediate/state/store.js +124 -3
- package/dist/remediate/state/store.js.map +1 -1
- package/dist/remediate/state/types.d.ts +28 -4
- package/dist/remediate/state/types.d.ts.map +1 -1
- package/dist/remediate/state/types.js.map +1 -1
- package/dist/remediate/steps/contractPipeline.d.ts +17 -1
- package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
- package/dist/remediate/steps/contractPipeline.js +100 -52
- package/dist/remediate/steps/contractPipeline.js.map +1 -1
- package/dist/remediate/steps/contractPipelinePrompts.d.ts +32 -8
- package/dist/remediate/steps/contractPipelinePrompts.d.ts.map +1 -1
- package/dist/remediate/steps/contractPipelinePrompts.js +145 -131
- package/dist/remediate/steps/contractPipelinePrompts.js.map +1 -1
- package/dist/remediate/steps/dispatch/hostHandoff.d.ts +6 -4
- package/dist/remediate/steps/dispatch/hostHandoff.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch/hostHandoff.js +291 -155
- package/dist/remediate/steps/dispatch/hostHandoff.js.map +1 -1
- package/dist/remediate/steps/intakeResolver.d.ts +1 -1
- package/dist/remediate/steps/intakeResolver.d.ts.map +1 -1
- package/dist/remediate/steps/intakeResolver.js +50 -49
- package/dist/remediate/steps/intakeResolver.js.map +1 -1
- package/dist/remediate/steps/nextStep.d.ts.map +1 -1
- package/dist/remediate/steps/nextStep.js +315 -288
- package/dist/remediate/steps/nextStep.js.map +1 -1
- package/dist/remediate/steps/prompts.d.ts +10 -3
- package/dist/remediate/steps/prompts.d.ts.map +1 -1
- package/dist/remediate/steps/prompts.js +191 -228
- package/dist/remediate/steps/prompts.js.map +1 -1
- package/dist/remediate/steps/types.d.ts +2 -2
- package/dist/remediate/steps/types.d.ts.map +1 -1
- package/dist/remediate/steps/types.js +10 -3
- package/dist/remediate/steps/types.js.map +1 -1
- package/dist/remediate/validation/artifacts.d.ts.map +1 -1
- package/dist/remediate/validation/artifacts.js +5 -22
- package/dist/remediate/validation/artifacts.js.map +1 -1
- package/dist/remediate/validation/contractPipeline.d.ts.map +1 -1
- package/dist/remediate/validation/contractPipeline.js +25 -8
- package/dist/remediate/validation/contractPipeline.js.map +1 -1
- package/dist/remediate/validation/remediationState.d.ts +0 -1
- package/dist/remediate/validation/remediationState.d.ts.map +1 -1
- package/dist/remediate/validation/remediationState.js +1 -20
- package/dist/remediate/validation/remediationState.js.map +1 -1
- package/dist/shared/decompose/charterClarification.d.ts +7 -0
- package/dist/shared/decompose/charterClarification.d.ts.map +1 -1
- package/dist/shared/decompose/charterClarification.js +8 -1
- package/dist/shared/decompose/charterClarification.js.map +1 -1
- package/dist/shared/decompose/charterExtraction.d.ts +204 -16
- package/dist/shared/decompose/charterExtraction.d.ts.map +1 -1
- package/dist/shared/decompose/charterExtraction.js +70 -13
- package/dist/shared/decompose/charterExtraction.js.map +1 -1
- package/dist/shared/decompose/systemicChallenge.d.ts +42 -1
- package/dist/shared/decompose/systemicChallenge.d.ts.map +1 -1
- package/dist/shared/decompose/systemicChallenge.js +51 -0
- package/dist/shared/decompose/systemicChallenge.js.map +1 -1
- package/dist/shared/index.d.ts +14 -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/stepContractWriter.d.ts.map +1 -1
- package/dist/shared/io/stepContractWriter.js +13 -4
- package/dist/shared/io/stepContractWriter.js.map +1 -1
- package/dist/shared/submission/hostHandoffCore.d.ts +7 -0
- package/dist/shared/submission/hostHandoffCore.d.ts.map +1 -1
- package/dist/shared/submission/hostHandoffCore.js +15 -2
- package/dist/shared/submission/hostHandoffCore.js.map +1 -1
- package/dist/shared/submission/hostResultOutcomes.d.ts +60 -10
- package/dist/shared/submission/hostResultOutcomes.d.ts.map +1 -1
- package/dist/shared/submission/hostResultOutcomes.js +42 -10
- package/dist/shared/submission/hostResultOutcomes.js.map +1 -1
- package/dist/shared/submission/ingestReport.d.ts +54 -0
- package/dist/shared/submission/ingestReport.d.ts.map +1 -0
- package/dist/shared/submission/ingestReport.js +44 -0
- package/dist/shared/submission/ingestReport.js.map +1 -0
- package/dist/shared/submission/ingestionChecks.d.ts +8 -13
- package/dist/shared/submission/ingestionChecks.d.ts.map +1 -1
- package/dist/shared/submission/ingestionChecks.js +9 -14
- package/dist/shared/submission/ingestionChecks.js.map +1 -1
- package/dist/shared/submission/submissionClassifier.d.ts +6 -0
- package/dist/shared/submission/submissionClassifier.d.ts.map +1 -1
- package/dist/shared/submission/submissionClassifier.js +16 -0
- package/dist/shared/submission/submissionClassifier.js.map +1 -1
- package/dist/shared/submission/workerPromptBinding.d.ts +18 -0
- package/dist/shared/submission/workerPromptBinding.d.ts.map +1 -0
- package/dist/shared/submission/workerPromptBinding.js +38 -0
- package/dist/shared/submission/workerPromptBinding.js.map +1 -0
- package/dist/shared/tooling/exec.d.ts +24 -0
- package/dist/shared/tooling/exec.d.ts.map +1 -1
- package/dist/shared/tooling/exec.js +30 -0
- package/dist/shared/tooling/exec.js.map +1 -1
- package/dist/shared/types/charter.d.ts +143 -7
- package/dist/shared/types/charter.d.ts.map +1 -1
- package/dist/shared/types/charter.js +63 -7
- package/dist/shared/types/charter.js.map +1 -1
- package/dist/shared/types/charterPacket.d.ts +13 -0
- package/dist/shared/types/charterPacket.d.ts.map +1 -1
- package/dist/shared/types/charterPacket.js.map +1 -1
- package/dist/shared/types/contractPipeline/obligations.d.ts +30 -11
- package/dist/shared/types/contractPipeline/obligations.d.ts.map +1 -1
- package/dist/shared/types/contractPipeline/obligations.js +6 -1
- package/dist/shared/types/contractPipeline/obligations.js.map +1 -1
- package/dist/shared/types/contractPropertyShapes.d.ts.map +1 -1
- package/dist/shared/types/contractPropertyShapes.js +13 -0
- package/dist/shared/types/contractPropertyShapes.js.map +1 -1
- package/dist/shared/types/finding.d.ts +154 -15
- package/dist/shared/types/finding.d.ts.map +1 -1
- package/dist/shared/types/finding.js +41 -5
- package/dist/shared/types/finding.js.map +1 -1
- package/dist/shared/types/intentCheckpoint.d.ts +26 -40
- package/dist/shared/types/intentCheckpoint.d.ts.map +1 -1
- package/dist/shared/types/intentCheckpoint.js +30 -33
- package/dist/shared/types/intentCheckpoint.js.map +1 -1
- package/dist/shared/types/remediationOutcome.d.ts +8 -8
- package/dist/shared/validation/citationGrounding.d.ts +29 -5
- package/dist/shared/validation/citationGrounding.d.ts.map +1 -1
- package/dist/shared/validation/citationGrounding.js +56 -9
- package/dist/shared/validation/citationGrounding.js.map +1 -1
- package/dist/shared/validation/designFindingGrounding.d.ts +30 -9
- package/dist/shared/validation/designFindingGrounding.d.ts.map +1 -1
- package/dist/shared/validation/designFindingGrounding.js +32 -12
- package/dist/shared/validation/designFindingGrounding.js.map +1 -1
- package/docs/audit-pkg/contracts.md +4 -5
- package/package.json +1 -1
- package/schemas/audit_result.schema.json +51 -0
- package/schemas/audit_results.schema.json +51 -0
- package/schemas/audit_task.schema.json +44 -0
- package/schemas/finding.schema.json +4 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
// sites-pinned: tests/remediate/reviewGate.test.ts, tests/remediate/next-step-review-gate.test.ts
|
|
1
2
|
// Review-approval gate engine — builds the tiered item-set the user
|
|
2
|
-
// approves
|
|
3
|
+
// approves or declines, and consumes their verdict.
|
|
3
4
|
//
|
|
4
5
|
// This is the single review surface for both paths. It replaced the classic
|
|
5
6
|
// per-block implementation-risk preview, which fired AFTER the contract pipeline
|
|
@@ -14,10 +15,39 @@
|
|
|
14
15
|
// pipeline can mark it terminal-without-change.
|
|
15
16
|
//
|
|
16
17
|
// Tool owns the structure (tiering, rationale, cost, which items must be shown);
|
|
17
|
-
// the host fills only the semantic pros/cons slots when presenting.
|
|
18
|
+
// the host fills only the semantic pros/cons slots when presenting. Declined
|
|
18
19
|
// items become a RECORDED terminal disposition, never a silent close.
|
|
20
|
+
import { z } from "zod";
|
|
19
21
|
import { classifyReviewNecessity, partitionByReviewNecessity, REVIEW_NECESSITY_ORDER, REVIEW_NECESSITY_LABELS, } from "./reviewNecessity.js";
|
|
20
22
|
export const REVIEW_REQUEST_SCHEMA_VERSION = "remediate-code-review-request/v1";
|
|
23
|
+
/**
|
|
24
|
+
* The user's verdict (`review_resolution.json`). Strict at every level: the
|
|
25
|
+
* gate's default is APPROVE, so a field the tool does not read (a mistyped
|
|
26
|
+
* name, the retired `disapproved_*` names) would turn the user's decline into
|
|
27
|
+
* an approval in silence. An unknown field refuses the whole file instead.
|
|
28
|
+
*/
|
|
29
|
+
const ReviewResolutionSchema = z
|
|
30
|
+
.object({
|
|
31
|
+
plan_id: z.string().optional(),
|
|
32
|
+
/** Findings the user declined — do NOT act on these. */
|
|
33
|
+
declined_findings: z
|
|
34
|
+
.array(z
|
|
35
|
+
.object({
|
|
36
|
+
finding_id: z.string(),
|
|
37
|
+
/** The user's reason, in their words. Blank reads as absent. */
|
|
38
|
+
reason: z.string().optional(),
|
|
39
|
+
})
|
|
40
|
+
.strict())
|
|
41
|
+
.optional(),
|
|
42
|
+
/** Whole tiers the user declined (e.g. "decline everything strategic"). */
|
|
43
|
+
declined_tiers: z.array(z.string()).optional(),
|
|
44
|
+
})
|
|
45
|
+
.strict();
|
|
46
|
+
/** The retired field names, each with the field that replaced it. */
|
|
47
|
+
const RETIRED_RESOLUTION_FIELDS = {
|
|
48
|
+
disapproved_findings: '`declined_findings`, whose entries are `{ "finding_id": "<id>", "reason": "<optional>" }`',
|
|
49
|
+
disapproved_tiers: "`declined_tiers`",
|
|
50
|
+
};
|
|
21
51
|
function firstPath(finding) {
|
|
22
52
|
return (finding.affected_files ?? []).map((f) => f.path).filter(Boolean);
|
|
23
53
|
}
|
|
@@ -76,88 +106,141 @@ export function buildReviewRequest(findings, planId) {
|
|
|
76
106
|
* from the request's marks a stale leftover from another run — the caller must
|
|
77
107
|
* archive it and re-halt rather than apply a cross-run answer.
|
|
78
108
|
*/
|
|
79
|
-
|
|
109
|
+
function isResolutionForRequest(request, resolution) {
|
|
80
110
|
const resolutionPlanId = resolution?.plan_id;
|
|
81
111
|
if (resolutionPlanId === undefined)
|
|
82
112
|
return true;
|
|
83
113
|
return resolutionPlanId === request.plan_id;
|
|
84
114
|
}
|
|
85
115
|
/**
|
|
86
|
-
*
|
|
87
|
-
* contract): every `
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* arrays = clean. A tier that is valid but empty in this request stays a
|
|
92
|
-
* harmless no-op (it names a real vocabulary member, not a phantom item).
|
|
116
|
+
* The id references a resolution names outside the request (uniform id-join
|
|
117
|
+
* contract): every `declined_findings` id must name an item in the request,
|
|
118
|
+
* and every `declined_tiers` entry must be one of the closed review-necessity
|
|
119
|
+
* names. A tier that is valid but empty in this request stays a harmless no-op
|
|
120
|
+
* (it names a real vocabulary member, not a phantom item).
|
|
93
121
|
*/
|
|
94
|
-
|
|
122
|
+
function unknownResolutionIds(request, resolution) {
|
|
95
123
|
const validIds = request.tiers.flatMap((t) => t.items.map((i) => i.finding_id));
|
|
96
124
|
const validIdSet = new Set(validIds);
|
|
97
125
|
const validTiers = new Set(REVIEW_NECESSITY_ORDER);
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
126
|
+
const problems = [];
|
|
127
|
+
(resolution.declined_findings ?? []).forEach((entry, index) => {
|
|
128
|
+
if (!validIdSet.has(entry.finding_id)) {
|
|
129
|
+
problems.push(`\`declined_findings[${index}].finding_id\`: \`${entry.finding_id}\` is not in the request (valid: ${validIds.map((i) => `\`${i}\``).join(", ")})`);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
(resolution.declined_tiers ?? []).forEach((tier, index) => {
|
|
133
|
+
if (!validTiers.has(tier)) {
|
|
134
|
+
problems.push(`\`declined_tiers[${index}]\`: \`${tier}\` is not a tier (valid: ${REVIEW_NECESSITY_ORDER.map((t) => `\`${t}\``).join(", ")})`);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
return problems;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Read the text of `review_resolution.json` against the request it answers.
|
|
141
|
+
* The WHOLE file is refused — never partly applied — when it is not valid
|
|
142
|
+
* JSON, has a field the schema does not name (the retired `disapproved_*`
|
|
143
|
+
* names get their replacement stated), has a wrong type, or names an id or a
|
|
144
|
+
* tier outside the request. The reason names each problem. A file whose
|
|
145
|
+
* `plan_id` names a different request is `stale`: it answers another run.
|
|
146
|
+
*/
|
|
147
|
+
export function parseReviewResolution(text, request) {
|
|
148
|
+
let value;
|
|
149
|
+
try {
|
|
150
|
+
value = JSON.parse(text);
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
return {
|
|
154
|
+
kind: "refused",
|
|
155
|
+
reason: `the file is not valid JSON (${error instanceof Error ? error.message : String(error)})`,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
159
|
+
return {
|
|
160
|
+
kind: "refused",
|
|
161
|
+
reason: 'the file must be one JSON object: `{ "declined_findings": [...], "declined_tiers": [...] }`',
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
const planId = value.plan_id;
|
|
165
|
+
if (typeof planId === "string" && planId !== request.plan_id)
|
|
166
|
+
return { kind: "stale" };
|
|
167
|
+
const problems = [];
|
|
168
|
+
for (const [retired, replacement] of Object.entries(RETIRED_RESOLUTION_FIELDS)) {
|
|
169
|
+
if (retired in value) {
|
|
170
|
+
problems.push(`\`${retired}\` is not a field — write ${replacement}`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const parsed = ReviewResolutionSchema.safeParse(value);
|
|
174
|
+
if (!parsed.success) {
|
|
175
|
+
for (const issue of parsed.error.issues) {
|
|
176
|
+
if (issue.code === z.ZodIssueCode.unrecognized_keys) {
|
|
177
|
+
const unknown = issue.keys.filter((k) => !(k in RETIRED_RESOLUTION_FIELDS));
|
|
178
|
+
const where = issue.path.length > 0 ? ` in \`${issue.path.join(".")}\`` : "";
|
|
179
|
+
if (unknown.length > 0) {
|
|
180
|
+
problems.push(`unknown field(s)${where}: ${unknown.map((k) => `\`${k}\``).join(", ")}`);
|
|
181
|
+
}
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
const field = issue.path.length > 0 ? `\`${issue.path.join(".")}\`: ` : "";
|
|
185
|
+
problems.push(`${field}${issue.message}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
problems.push(...unknownResolutionIds(request, parsed.data));
|
|
190
|
+
}
|
|
191
|
+
return problems.length > 0 || !parsed.success
|
|
192
|
+
? { kind: "refused", reason: problems.join("; ") }
|
|
193
|
+
: { kind: "ok", resolution: parsed.data };
|
|
103
194
|
}
|
|
104
195
|
/**
|
|
105
196
|
* Apply the user's resolution to a request: every item is either approved (act
|
|
106
197
|
* on it) or declined (recorded terminal disposition with a reason). An item is
|
|
107
|
-
* declined if its id is in `
|
|
108
|
-
* `
|
|
198
|
+
* declined if its id is in `declined_findings` OR its tier is in
|
|
199
|
+
* `declined_tiers`. Everything else is approved — the default is to act,
|
|
109
200
|
* because the gate's job is to let the user REMOVE items, not to require
|
|
110
201
|
* opting every item in. An absent/empty resolution approves everything.
|
|
111
202
|
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
* (INV-RSM-RESOLUTION-CORRELATE, COR-0b906e37)
|
|
115
|
-
* {@link isResolutionForRequest} to archive-and-re-halt instead of crashing;
|
|
116
|
-
* the throw here is the mechanical backstop, not the primary UX.
|
|
203
|
+
* The resolution must come from {@link parseReviewResolution}; a stale
|
|
204
|
+
* `plan_id` or an unknown id still throws here as the mechanical backstop
|
|
205
|
+
* (INV-RSM-RESOLUTION-CORRELATE, COR-0b906e37), never the primary UX.
|
|
117
206
|
*
|
|
118
|
-
* Crucially, declined items are returned with an explicit reason
|
|
119
|
-
*
|
|
120
|
-
* them
|
|
207
|
+
* Crucially, declined items are returned with an explicit reason — the user's
|
|
208
|
+
* own words when they gave one — so the caller records a terminal disposition
|
|
209
|
+
* (e.g. `ignored`) rather than silently closing them, the exact failure this
|
|
210
|
+
* gate exists to prevent.
|
|
121
211
|
*/
|
|
122
212
|
export function applyReviewResolution(request, resolution) {
|
|
123
213
|
if (!isResolutionForRequest(request, resolution)) {
|
|
124
214
|
throw new Error(`review resolution plan_id "${resolution?.plan_id}" does not answer review request plan_id "${request.plan_id}" — stale cross-run resolution rejected (INV-RSM-RESOLUTION-CORRELATE).`);
|
|
125
215
|
}
|
|
126
|
-
const
|
|
127
|
-
if (
|
|
128
|
-
|
|
129
|
-
// with screenResolutionIds to archive-and-re-halt; this throw is the
|
|
130
|
-
// mechanical backstop, mirroring the plan_id-mismatch backstop above.
|
|
131
|
-
const parts = [];
|
|
132
|
-
if (screen.unknown_finding_ids.length > 0) {
|
|
133
|
-
parts.push(`unknown finding id(s) ${screen.unknown_finding_ids.map((i) => `"${i}"`).join(", ")} ` +
|
|
134
|
-
`(valid: ${screen.valid_finding_ids.join(", ")})`);
|
|
135
|
-
}
|
|
136
|
-
if (screen.unknown_tiers.length > 0) {
|
|
137
|
-
parts.push(`unknown tier(s) ${screen.unknown_tiers.map((t) => `"${t}"`).join(", ")} ` +
|
|
138
|
-
`(valid: ${REVIEW_NECESSITY_ORDER.join(", ")})`);
|
|
139
|
-
}
|
|
140
|
-
throw new Error(`review resolution refused — ${parts.join("; ")}. The gate's default is approve, ` +
|
|
141
|
-
`so a mistyped decline would silently become an approval; re-submit the whole ` +
|
|
142
|
-
`resolution with ids drawn from the request.`);
|
|
216
|
+
const unknown = resolution ? unknownResolutionIds(request, resolution) : [];
|
|
217
|
+
if (unknown.length > 0) {
|
|
218
|
+
throw new Error(`review resolution refused — ${unknown.join("; ")}`);
|
|
143
219
|
}
|
|
144
|
-
const
|
|
145
|
-
const
|
|
220
|
+
const userReasons = new Map((resolution?.declined_findings ?? []).map((d) => [d.finding_id, d.reason?.trim() || undefined]));
|
|
221
|
+
const declinedTiers = new Set(resolution?.declined_tiers ?? []);
|
|
146
222
|
const approved_ids = [];
|
|
147
223
|
const declined = [];
|
|
148
224
|
for (const tier of request.tiers) {
|
|
149
|
-
const
|
|
225
|
+
const tierDeclined = declinedTiers.has(tier.necessity);
|
|
150
226
|
for (const item of tier.items) {
|
|
151
|
-
|
|
227
|
+
const userReason = userReasons.get(item.finding_id);
|
|
228
|
+
if (userReason !== undefined) {
|
|
229
|
+
declined.push({
|
|
230
|
+
finding_id: item.finding_id,
|
|
231
|
+
reason: `Declined by the user at the review gate: ${userReason}`,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
else if (tierDeclined) {
|
|
152
235
|
declined.push({
|
|
153
236
|
finding_id: item.finding_id,
|
|
154
|
-
reason: `
|
|
237
|
+
reason: `Declined by the user at the review gate — declined the entire "${item.necessity}" tier.`,
|
|
155
238
|
});
|
|
156
239
|
}
|
|
157
|
-
else if (
|
|
240
|
+
else if (userReasons.has(item.finding_id)) {
|
|
158
241
|
declined.push({
|
|
159
242
|
finding_id: item.finding_id,
|
|
160
|
-
reason: `
|
|
243
|
+
reason: `Declined by the user at the review gate (review-necessity: ${item.necessity}).`,
|
|
161
244
|
});
|
|
162
245
|
}
|
|
163
246
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewGate.js","sourceRoot":"","sources":["../../../src/remediate/review/reviewGate.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,oDAAoD;AACpD,EAAE;AACF,4EAA4E;AAC5E,iFAAiF;AACjF,yEAAyE;AACzE,kFAAkF;AAClF,gFAAgF;AAChF,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAC/E,iFAAiF;AACjF,6EAA6E;AAC7E,gDAAgD;AAChD,EAAE;AACF,iFAAiF;AACjF,
|
|
1
|
+
{"version":3,"file":"reviewGate.js","sourceRoot":"","sources":["../../../src/remediate/review/reviewGate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SKIP_WRITE } from "audit-tools/shared";
|
|
2
|
-
import { RemediationPlan, RemediationItemState,
|
|
2
|
+
import { RemediationPlan, RemediationItemState, ClosingPlan, CoverageLedger, RemediationHostHandoffRecord } from "./types.js";
|
|
3
3
|
import { type RemediationRunStatus } from "./runStatus.js";
|
|
4
4
|
/**
|
|
5
5
|
* The schema version stamped on every persisted `state.json`.
|
|
@@ -44,7 +44,6 @@ export interface RemediationState {
|
|
|
44
44
|
status: RemediationRunStatus;
|
|
45
45
|
plan?: RemediationPlan;
|
|
46
46
|
items?: Record<string, RemediationItemState>;
|
|
47
|
-
clarifications?: ClarificationRequest[];
|
|
48
47
|
closing_plan?: ClosingPlan;
|
|
49
48
|
started_at?: string;
|
|
50
49
|
step_count?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/remediate/state/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/remediate/state/store.ts"],"names":[],"mappings":"AAGA,OAAO,EAKL,UAAU,EAEX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,WAAW,EAEX,cAAc,EACd,4BAA4B,EAE7B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,kCAAkC,EAC7C,+BAAwC,CAAC;AAK3C,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,kCAAkC,CAAC;IAC7D,MAAM,EAAE,oBAAoB,CAAC;IAC7B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC7C,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B;;;;OAIG;IACH,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC;;;;;;;;;;;;;;OAcG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC;;;;;;;;;;;;;;;;;;OAkBG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,4BAA4B,CAAC;CAC7C;AA4QD,eAAO,MAAM,eAAe,QAA+B,CAAC;AAU5D,qBAAa,UAAU;IAWnB,OAAO,CAAC,YAAY;IAEpB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAZlC;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2C;gBAGvD,YAAY,EAAE,MAAM,EAEX,cAAc,CAAC,EAAE,MAAM,YAAA;IA+CpC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B;;;;;;;;OAQG;IACG,SAAS,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAInD;;;;;;;;;;;;;;OAcG;IACG,MAAM,CACV,EAAE,EAAE,CACF,OAAO,EAAE,gBAAgB,GAAG,IAAI,KAC7B,OAAO,CAAC,gBAAgB,GAAG,OAAO,UAAU,CAAC,GACjD,OAAO,CAAC,gBAAgB,CAAC;IA4B5B;;;;;OAKG;IACG,SAAS,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAMxD"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
// sites-pinned: tests/remediate/clarification-round-contract.test.ts
|
|
1
2
|
import { mkdir } from "node:fs/promises";
|
|
2
3
|
import { join } from "node:path";
|
|
3
4
|
import { createLockedJsonStore, LOCKED_JSON_STORE_TIMEOUT_MS, SchemaVersionMismatchError, SKIP_WRITE, assertNotNodeWorktreeCwd, } from "audit-tools/shared";
|
|
4
|
-
import { RemediationHostHandoffRecordSchema, } from "./types.js";
|
|
5
|
+
import { isClarificationCategory, RemediationHostHandoffRecordSchema, } from "./types.js";
|
|
5
6
|
import { validateRemediationBlock } from "../validation/remediationState.js";
|
|
6
7
|
import { REMEDIATION_RUN_STATUSES, isRemediationRunStatus, } from "./runStatus.js";
|
|
7
8
|
/**
|
|
@@ -142,6 +143,7 @@ function validateState(value) {
|
|
|
142
143
|
}
|
|
143
144
|
}
|
|
144
145
|
}
|
|
146
|
+
errors.push(...clarificationQuestionErrors(obj));
|
|
145
147
|
if (status === "closing") {
|
|
146
148
|
const closingPlan = obj["closing_plan"];
|
|
147
149
|
if (!closingPlan || typeof closingPlan !== "object" || Array.isArray(closingPlan)) {
|
|
@@ -161,6 +163,122 @@ function validateState(value) {
|
|
|
161
163
|
}
|
|
162
164
|
return errors;
|
|
163
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* The clarification invariants. A worker question lives on its item, so:
|
|
168
|
+
*
|
|
169
|
+
* - the retired run-level `clarifications` list is refused (it was a second
|
|
170
|
+
* copy of the questions, and clearing it after a partial answer left the
|
|
171
|
+
* unanswered items with nothing to show — the round then listed no question
|
|
172
|
+
* and the run could not progress);
|
|
173
|
+
* - an item paused as `needs_clarification` must carry its question, because
|
|
174
|
+
* the clarification round is built from those items alone.
|
|
175
|
+
*
|
|
176
|
+
* A state written before the move is translated on READ by
|
|
177
|
+
* {@link adoptLegacyClarifications}, so these refuse only a WRITE of the old
|
|
178
|
+
* shape.
|
|
179
|
+
*/
|
|
180
|
+
function clarificationQuestionErrors(obj) {
|
|
181
|
+
const errors = [];
|
|
182
|
+
if (obj["clarifications"] !== undefined) {
|
|
183
|
+
errors.push("clarifications is retired: a worker question lives on its item as clarification_question");
|
|
184
|
+
}
|
|
185
|
+
const items = obj["items"];
|
|
186
|
+
if (!items || typeof items !== "object" || Array.isArray(items))
|
|
187
|
+
return errors;
|
|
188
|
+
for (const [key, item] of Object.entries(items)) {
|
|
189
|
+
if (!item || typeof item !== "object" || Array.isArray(item))
|
|
190
|
+
continue;
|
|
191
|
+
const it = item;
|
|
192
|
+
if (it["status"] !== "needs_clarification")
|
|
193
|
+
continue;
|
|
194
|
+
const question = it["clarification_question"];
|
|
195
|
+
if (!question ||
|
|
196
|
+
typeof question !== "object" ||
|
|
197
|
+
Array.isArray(question) ||
|
|
198
|
+
!isClarificationCategory(question["category"]) ||
|
|
199
|
+
typeof question["description"] !== "string" ||
|
|
200
|
+
question["description"].trim().length === 0) {
|
|
201
|
+
errors.push(`items["${key}"] is needs_clarification but carries no valid clarification_question ` +
|
|
202
|
+
"(a category and a non-empty description)");
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return errors;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* The READ rule for a state written before the worker question moved onto its
|
|
209
|
+
* item. Such a state holds the questions in a run-level `clarifications` list,
|
|
210
|
+
* and the old ingest ALSO wrote each question into the paused item's
|
|
211
|
+
* `failure_reason`.
|
|
212
|
+
*
|
|
213
|
+
* Every `needs_clarification` item without a `clarification_question` takes
|
|
214
|
+
* one: from its entry in the legacy list when there is one, else from its
|
|
215
|
+
* `failure_reason` (this recovers a run that the old partial-answer defect
|
|
216
|
+
* already wedged, where the list was cleared but the item still waits). The
|
|
217
|
+
* legacy list is then dropped, and the next write persists the new shape.
|
|
218
|
+
*
|
|
219
|
+
* This is the one place a read is not byte-faithful, and it touches only the
|
|
220
|
+
* retired shape: a current state passes through unchanged.
|
|
221
|
+
*/
|
|
222
|
+
function adoptLegacyClarifications(raw) {
|
|
223
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
224
|
+
return raw;
|
|
225
|
+
const obj = raw;
|
|
226
|
+
const items = obj["items"];
|
|
227
|
+
const hasItems = Boolean(items) && typeof items === "object" && !Array.isArray(items);
|
|
228
|
+
const needsQuestion = hasItems
|
|
229
|
+
? Object.values(items).some((item) => Boolean(item) &&
|
|
230
|
+
typeof item === "object" &&
|
|
231
|
+
item["status"] === "needs_clarification" &&
|
|
232
|
+
item["clarification_question"] === undefined)
|
|
233
|
+
: false;
|
|
234
|
+
if (obj["clarifications"] === undefined && !needsQuestion)
|
|
235
|
+
return raw;
|
|
236
|
+
const legacy = new Map();
|
|
237
|
+
if (Array.isArray(obj["clarifications"])) {
|
|
238
|
+
for (const entry of obj["clarifications"]) {
|
|
239
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry))
|
|
240
|
+
continue;
|
|
241
|
+
const e = entry;
|
|
242
|
+
if (typeof e["finding_id"] === "string" && !legacy.has(e["finding_id"])) {
|
|
243
|
+
legacy.set(e["finding_id"], e);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
const { clarifications: _retired, ...rest } = obj;
|
|
248
|
+
if (!hasItems)
|
|
249
|
+
return rest;
|
|
250
|
+
const nextItems = {};
|
|
251
|
+
for (const [key, item] of Object.entries(items)) {
|
|
252
|
+
const it = item;
|
|
253
|
+
if (!it ||
|
|
254
|
+
typeof it !== "object" ||
|
|
255
|
+
it["status"] !== "needs_clarification" ||
|
|
256
|
+
it["clarification_question"] !== undefined) {
|
|
257
|
+
nextItems[key] = item;
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
const entry = legacy.get(key);
|
|
261
|
+
const description = typeof entry?.["description"] === "string" && entry["description"].trim()
|
|
262
|
+
? entry["description"]
|
|
263
|
+
: typeof it["failure_reason"] === "string" && it["failure_reason"].trim()
|
|
264
|
+
? it["failure_reason"]
|
|
265
|
+
: "The worker paused this finding for a clarification but recorded no question text.";
|
|
266
|
+
const options = Array.isArray(entry?.["options"])
|
|
267
|
+
? entry["options"].filter((o) => typeof o === "string")
|
|
268
|
+
: [];
|
|
269
|
+
nextItems[key] = {
|
|
270
|
+
...it,
|
|
271
|
+
clarification_question: {
|
|
272
|
+
category: isClarificationCategory(entry?.["category"])
|
|
273
|
+
? entry["category"]
|
|
274
|
+
: "scope_of_fix",
|
|
275
|
+
description,
|
|
276
|
+
...(options.length > 0 ? { options } : {}),
|
|
277
|
+
},
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
return { ...rest, items: nextItems };
|
|
281
|
+
}
|
|
164
282
|
const LOCK_FILENAME = "state.lock";
|
|
165
283
|
// Acquire timeout for the shared file lock — the STALE_LOCK_MS-minus-margin
|
|
166
284
|
// derivation is single-sourced in the shared locked JSON store (a fresh-but-held
|
|
@@ -199,7 +317,8 @@ export class StateStore {
|
|
|
199
317
|
// `validateState` throws SchemaVersionMismatchError for a state stamped
|
|
200
318
|
// with another release's contract version; that propagates out of the
|
|
201
319
|
// read exactly as the policy requires (see the constant's doc).
|
|
202
|
-
const
|
|
320
|
+
const adopted = adoptLegacyClarifications(raw);
|
|
321
|
+
const errors = validateState(adopted);
|
|
203
322
|
if (errors.length > 0) {
|
|
204
323
|
throw new Error(`state.json failed schema validation: ${errors.join("; ")}`);
|
|
205
324
|
}
|
|
@@ -210,7 +329,9 @@ export class StateStore {
|
|
|
210
329
|
// written before the field existed has none until its next write, and
|
|
211
330
|
// `validateState` admits that (see the constant's doc) — which is the
|
|
212
331
|
// whole reason the field is optional on the type rather than required.
|
|
213
|
-
|
|
332
|
+
// The one exception is the retired clarification shape, translated by
|
|
333
|
+
// `adoptLegacyClarifications`; a current state is returned unchanged.
|
|
334
|
+
return adopted;
|
|
214
335
|
},
|
|
215
336
|
// The WRITE hook. Without it the store's own `persist` wrote whatever a
|
|
216
337
|
// caller handed it — the load gate was the only validation on the path,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/remediate/state/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/remediate/state/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -124,6 +124,7 @@ export declare const RemediationPlanSchema: z.ZodObject<{
|
|
|
124
124
|
line_end: z.ZodOptional<z.ZodNumber>;
|
|
125
125
|
symbol: z.ZodOptional<z.ZodString>;
|
|
126
126
|
quoted_text: z.ZodOptional<z.ZodString>;
|
|
127
|
+
no_quotable_span: z.ZodOptional<z.ZodString>;
|
|
127
128
|
hash_at_plan_time: z.ZodOptional<z.ZodString>;
|
|
128
129
|
}, "strip", z.ZodTypeAny, {
|
|
129
130
|
path: string;
|
|
@@ -131,6 +132,7 @@ export declare const RemediationPlanSchema: z.ZodObject<{
|
|
|
131
132
|
line_start?: number | undefined;
|
|
132
133
|
line_end?: number | undefined;
|
|
133
134
|
quoted_text?: string | undefined;
|
|
135
|
+
no_quotable_span?: string | undefined;
|
|
134
136
|
hash_at_plan_time?: string | undefined;
|
|
135
137
|
}, {
|
|
136
138
|
path: string;
|
|
@@ -138,6 +140,7 @@ export declare const RemediationPlanSchema: z.ZodObject<{
|
|
|
138
140
|
line_start?: number | undefined;
|
|
139
141
|
line_end?: number | undefined;
|
|
140
142
|
quoted_text?: string | undefined;
|
|
143
|
+
no_quotable_span?: string | undefined;
|
|
141
144
|
hash_at_plan_time?: string | undefined;
|
|
142
145
|
}>, {
|
|
143
146
|
path: string;
|
|
@@ -145,6 +148,7 @@ export declare const RemediationPlanSchema: z.ZodObject<{
|
|
|
145
148
|
line_start?: number | undefined;
|
|
146
149
|
line_end?: number | undefined;
|
|
147
150
|
quoted_text?: string | undefined;
|
|
151
|
+
no_quotable_span?: string | undefined;
|
|
148
152
|
hash_at_plan_time?: string | undefined;
|
|
149
153
|
}, {
|
|
150
154
|
path: string;
|
|
@@ -152,6 +156,7 @@ export declare const RemediationPlanSchema: z.ZodObject<{
|
|
|
152
156
|
line_start?: number | undefined;
|
|
153
157
|
line_end?: number | undefined;
|
|
154
158
|
quoted_text?: string | undefined;
|
|
159
|
+
no_quotable_span?: string | undefined;
|
|
155
160
|
hash_at_plan_time?: string | undefined;
|
|
156
161
|
}>, "many">;
|
|
157
162
|
impact: z.ZodOptional<z.ZodString>;
|
|
@@ -285,6 +290,7 @@ export declare const RemediationPlanSchema: z.ZodObject<{
|
|
|
285
290
|
line_start?: number | undefined;
|
|
286
291
|
line_end?: number | undefined;
|
|
287
292
|
quoted_text?: string | undefined;
|
|
293
|
+
no_quotable_span?: string | undefined;
|
|
288
294
|
hash_at_plan_time?: string | undefined;
|
|
289
295
|
}[];
|
|
290
296
|
severity_downgraded_from?: "high" | "low" | "critical" | "medium" | "info" | undefined;
|
|
@@ -347,6 +353,7 @@ export declare const RemediationPlanSchema: z.ZodObject<{
|
|
|
347
353
|
line_start?: number | undefined;
|
|
348
354
|
line_end?: number | undefined;
|
|
349
355
|
quoted_text?: string | undefined;
|
|
356
|
+
no_quotable_span?: string | undefined;
|
|
350
357
|
hash_at_plan_time?: string | undefined;
|
|
351
358
|
}[];
|
|
352
359
|
severity_downgraded_from?: "high" | "low" | "critical" | "medium" | "info" | undefined;
|
|
@@ -557,6 +564,7 @@ export declare const RemediationPlanSchema: z.ZodObject<{
|
|
|
557
564
|
line_start?: number | undefined;
|
|
558
565
|
line_end?: number | undefined;
|
|
559
566
|
quoted_text?: string | undefined;
|
|
567
|
+
no_quotable_span?: string | undefined;
|
|
560
568
|
hash_at_plan_time?: string | undefined;
|
|
561
569
|
}[];
|
|
562
570
|
severity_downgraded_from?: "high" | "low" | "critical" | "medium" | "info" | undefined;
|
|
@@ -657,6 +665,7 @@ export declare const RemediationPlanSchema: z.ZodObject<{
|
|
|
657
665
|
line_start?: number | undefined;
|
|
658
666
|
line_end?: number | undefined;
|
|
659
667
|
quoted_text?: string | undefined;
|
|
668
|
+
no_quotable_span?: string | undefined;
|
|
660
669
|
hash_at_plan_time?: string | undefined;
|
|
661
670
|
}[];
|
|
662
671
|
severity_downgraded_from?: "high" | "low" | "critical" | "medium" | "info" | undefined;
|
|
@@ -811,6 +820,15 @@ export declare const ClarificationRequestSchema: z.ZodObject<{
|
|
|
811
820
|
options?: string[] | undefined;
|
|
812
821
|
}>;
|
|
813
822
|
export type ClarificationRequest = z.infer<typeof ClarificationRequestSchema>;
|
|
823
|
+
/**
|
|
824
|
+
* A worker's open question, carried ON the paused item
|
|
825
|
+
* (`RemediationItemState.clarification_question`). The item is the ONE home of
|
|
826
|
+
* the question: the clarification round lists every item whose status is
|
|
827
|
+
* `needs_clarification`, so answering some questions can never erase the
|
|
828
|
+
* others. A separate run-level question list used to be a second copy; clearing
|
|
829
|
+
* it after a partial answer left the unanswered items with no question to show.
|
|
830
|
+
*/
|
|
831
|
+
export type ClarificationQuestion = Omit<ClarificationRequest, "finding_id">;
|
|
814
832
|
/** The canonical clarification categories (single-sourced from the schema). */
|
|
815
833
|
export declare const CLARIFICATION_CATEGORIES: ["public_contract", "behavioral_semantics", "scope_of_fix", "dependency_introduction", "compatibility_policy", "intent_vs_symptom", "issue_appropriateness"];
|
|
816
834
|
export type ClarificationCategory = ClarificationRequest["category"];
|
|
@@ -993,10 +1011,10 @@ export interface RemediationItemState {
|
|
|
993
1011
|
host_result_evidence?: string[];
|
|
994
1012
|
/**
|
|
995
1013
|
* WHAT LANDED for this item, persisted at acceptance — the corroborated
|
|
996
|
-
* worktree outcome, not the host's claim. `
|
|
997
|
-
* reachable from HEAD and its diff-tree
|
|
998
|
-
* {@link host_landed_files}
|
|
999
|
-
* scope, so this is ground truth by the time it is written.
|
|
1014
|
+
* worktree outcome, not the host's claim. The result's `landed_commit` was
|
|
1015
|
+
* verified reachable from HEAD, and its diff-tree — persisted as
|
|
1016
|
+
* {@link host_landed_files} — was verified to lie inside the item's
|
|
1017
|
+
* prompt-bound write scope, so this is ground truth by the time it is written.
|
|
1000
1018
|
*
|
|
1001
1019
|
* It is persisted PER ITEM so a later boundary — the outcomes contract, the
|
|
1002
1020
|
* report — can attribute the landing to this item without re-running the
|
|
@@ -1027,6 +1045,12 @@ export interface RemediationItemState {
|
|
|
1027
1045
|
completed_at?: string;
|
|
1028
1046
|
/** User's clarification answer, carried from applyClarificationResolution into the implement prompt. */
|
|
1029
1047
|
clarification_context?: string;
|
|
1048
|
+
/**
|
|
1049
|
+
* The worker's open question. Required while `status` is
|
|
1050
|
+
* `needs_clarification` (the state store refuses a paused item without one),
|
|
1051
|
+
* and removed when the answer is applied. See {@link ClarificationQuestion}.
|
|
1052
|
+
*/
|
|
1053
|
+
clarification_question?: ClarificationQuestion;
|
|
1030
1054
|
/**
|
|
1031
1055
|
* The failure context (failure_reason + last_successful_step) captured at
|
|
1032
1056
|
* the time this item was queued for retry. Carried into re-dispatch prompts
|