audit-tools 0.51.11 → 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/executorRunners.d.ts.map +1 -1
- package/dist/audit/orchestrator/executorRunners.js +14 -3
- package/dist/audit/orchestrator/executorRunners.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/orchestrator/synthesisExecutors.d.ts +10 -3
- package/dist/audit/orchestrator/synthesisExecutors.d.ts.map +1 -1
- package/dist/audit/orchestrator/synthesisExecutors.js +5 -4
- package/dist/audit/orchestrator/synthesisExecutors.js.map +1 -1
- package/dist/audit/reporting/synthesis.d.ts +23 -6
- package/dist/audit/reporting/synthesis.d.ts.map +1 -1
- package/dist/audit/reporting/synthesis.js +53 -13
- 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 +8 -8
- package/dist/remediate/phases/close.js.map +1 -1
- package/dist/remediate/phases/closeVerifyHeadEvidence.d.ts +19 -35
- package/dist/remediate/phases/closeVerifyHeadEvidence.d.ts.map +1 -1
- package/dist/remediate/phases/closeVerifyHeadEvidence.js +38 -12
- package/dist/remediate/phases/closeVerifyHeadEvidence.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 +59 -8
- package/dist/remediate/state/types.d.ts.map +1 -1
- package/dist/remediate/state/types.js +12 -1
- package/dist/remediate/state/types.js.map +1 -1
- package/dist/remediate/steps/contractPipeline.d.ts +40 -2
- package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
- package/dist/remediate/steps/contractPipeline.js +147 -53
- 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 +337 -294
- 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/git.d.ts +31 -0
- package/dist/shared/git.d.ts.map +1 -1
- package/dist/shared/git.js +105 -0
- package/dist/shared/git.js.map +1 -1
- package/dist/shared/index.d.ts +17 -14
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +18 -11
- 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/reporting/auditDeliverable.d.ts +8 -3
- package/dist/shared/reporting/auditDeliverable.d.ts.map +1 -1
- package/dist/shared/reporting/auditDeliverable.js +10 -3
- package/dist/shared/reporting/auditDeliverable.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 +210 -15
- package/dist/shared/types/finding.d.ts.map +1 -1
- package/dist/shared/types/finding.js +68 -5
- package/dist/shared/types/finding.js.map +1 -1
- package/dist/shared/types/intentCheckpoint.d.ts +28 -42
- 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/dist/shared/validation/findingsReport.d.ts +13 -2
- package/dist/shared/validation/findingsReport.d.ts.map +1 -1
- package/dist/shared/validation/findingsReport.js +19 -2
- package/dist/shared/validation/findingsReport.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,3 +1,7 @@
|
|
|
1
|
+
// sites-pinned: tests/audit/semantic-review-step.test.ts, tests/audit/host-handoff.test.ts
|
|
2
|
+
// (the remedy map decides which section a refusal renders under, so inverting
|
|
3
|
+
// any entry moves a work item to the wrong heading in the semantic-review
|
|
4
|
+
// prompt)
|
|
1
5
|
/**
|
|
2
6
|
* Shared recording and trailing-state diagnostics for host-result ingestion.
|
|
3
7
|
*
|
|
@@ -35,23 +39,51 @@ export async function readTrailingSubmissionRefusals(artifactsDir, submissionIds
|
|
|
35
39
|
}
|
|
36
40
|
return last;
|
|
37
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* The remedy of every SHARED submission code. A draw that adds its own codes
|
|
44
|
+
* builds its own `Record<ItsCodeUnion, IssueRemedy>` by spreading this one — the
|
|
45
|
+
* record type is what makes a new code state its remedy to compile, rather than
|
|
46
|
+
* defaulting into whichever section a filter happens to leave it in (the audit
|
|
47
|
+
* draw's is `AUDIT_INGEST_ISSUE_REMEDY`).
|
|
48
|
+
*/
|
|
49
|
+
export const SUBMISSION_ISSUE_REMEDY = {
|
|
50
|
+
submission_missing: "wait",
|
|
51
|
+
submission_malformed: "repair",
|
|
52
|
+
submission_contract_invalid: "repair",
|
|
53
|
+
submission_rejected: "repair",
|
|
54
|
+
// The work item was ALREADY ACCEPTED by a concurrent ingest of this run, so
|
|
55
|
+
// it is not pending, it is not republished, and there is nothing to write.
|
|
56
|
+
duplicate_submission_id: "none",
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* The remedy of every shared WORKLOAD code — spread beside
|
|
60
|
+
* {@link SUBMISSION_ISSUE_REMEDY} by each draw.
|
|
61
|
+
*/
|
|
62
|
+
export const WORKLOAD_ISSUE_REMEDY = {
|
|
63
|
+
// Not about any one result: the run's own persisted workload carries a
|
|
64
|
+
// contract version this build no longer mints. The ingest returns it so the
|
|
65
|
+
// same call walks on to the re-prepare, which rewrites the document. Nothing
|
|
66
|
+
// is asked of the host.
|
|
67
|
+
workload_stale: "none",
|
|
68
|
+
};
|
|
38
69
|
/**
|
|
39
70
|
* Is this issue an OBSERVATION that nothing has been written yet, rather than a
|
|
40
71
|
* refusal of something that WAS written?
|
|
41
72
|
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* retry loop) to special-case the message text to tell them apart. That is
|
|
47
|
-
* exactly what the measured friction was: a host parser special-casing the
|
|
48
|
-
* string "no result file exists".
|
|
73
|
+
* Kept as its own name because four call sites read exactly this question, and
|
|
74
|
+
* derived from {@link SUBMISSION_ISSUE_REMEDY} so the "wait" answer has ONE
|
|
75
|
+
* home. A draw-specific code is absent from the shared record and so is not a
|
|
76
|
+
* missing observation — which is what every caller already assumed.
|
|
49
77
|
*
|
|
50
|
-
* The
|
|
51
|
-
*
|
|
78
|
+
* The distinction was the whole point of the original two-way split. "The host
|
|
79
|
+
* has not finished" and "the host's work was refused" are different facts with
|
|
80
|
+
* different remedies, and a rendering that gives them one shape forces every
|
|
81
|
+
* reader (a host parser, an operator, a retry loop) to special-case the message
|
|
82
|
+
* text to tell them apart. That is exactly what the measured friction was: a
|
|
83
|
+
* host parser special-casing the string "no result file exists".
|
|
52
84
|
*/
|
|
53
85
|
export function isMissingObservation(issue) {
|
|
54
|
-
return issue.code === "
|
|
86
|
+
return SUBMISSION_ISSUE_REMEDY[issue.code] === "wait";
|
|
55
87
|
}
|
|
56
88
|
/**
|
|
57
89
|
* WHAT ONE WORK ITEM'S OUTCOME LOOKS LIKE to the host that has to finish it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostResultOutcomes.js","sourceRoot":"","sources":["../../../src/shared/submission/hostResultOutcomes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EACpB,wCAAwC,GAGzC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"hostResultOutcomes.js","sourceRoot":"","sources":["../../../src/shared/submission/hostResultOutcomes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE renderer for an ingest report — the sections a host reads to learn what
|
|
3
|
+
* the last ingest did with its results, and what it must do next.
|
|
4
|
+
*
|
|
5
|
+
* ONE renderer, both draws (owner review of prompt 20, 2026-09-18). The audit
|
|
6
|
+
* draw renders it in the semantic-review step and on a step of another kind
|
|
7
|
+
* that carries the same report; the remediate draw renders it in the
|
|
8
|
+
* implement-dispatch step. Each draw supplies its own REMEDY map — the answer to
|
|
9
|
+
* "what must the reader do about this code" — and nothing else. The sections,
|
|
10
|
+
* their order, the bullet format and the paragraphs have one home, here: the
|
|
11
|
+
* two hand copies this replaced had already drifted apart (the remediate copy
|
|
12
|
+
* rendered a duplicate result as a repair beside every other refusal, the audit
|
|
13
|
+
* copy as settled; the remediate copy had no settled section at all).
|
|
14
|
+
*
|
|
15
|
+
* The section a work item lands in is chosen by the draw's remedy for its CODE,
|
|
16
|
+
* never by the message text. A message may be reworded at any time and the
|
|
17
|
+
* section must not move with it.
|
|
18
|
+
*/
|
|
19
|
+
import type { IssueRemedy } from "./hostResultOutcomes.js";
|
|
20
|
+
import type { SubmissionIssue } from "./submissionClassifier.js";
|
|
21
|
+
/**
|
|
22
|
+
* Where the workload that binds every `result_path` sits relative to the
|
|
23
|
+
* report, which decides how the repair paragraph points at it.
|
|
24
|
+
*
|
|
25
|
+
* - `follows` — the same prompt publishes the workload BELOW the report.
|
|
26
|
+
* - `named_above` — the same prompt names the workload file ABOVE the report.
|
|
27
|
+
* - `next_call` — the report rides a step of another kind; the next workload
|
|
28
|
+
* comes on a later call.
|
|
29
|
+
*/
|
|
30
|
+
type IngestReportWorkload = "follows" | "named_above" | "next_call";
|
|
31
|
+
/** An advisory the ingest recorded on a result it ACCEPTED. */
|
|
32
|
+
interface IngestAdvisory {
|
|
33
|
+
readonly work_item_id: string;
|
|
34
|
+
readonly message: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The ingest report as prompt lines. An empty section is omitted, so a clean
|
|
38
|
+
* ingest renders nothing at all.
|
|
39
|
+
*
|
|
40
|
+
* `landedWithoutResult` names the items whose edits LANDED (the run holds a
|
|
41
|
+
* corroborated commit for each) with no result file at the bound path. Each is
|
|
42
|
+
* listed once, under its own section: the remedy is not "write the result when
|
|
43
|
+
* the work is done" but "write the result for the commit that is already
|
|
44
|
+
* there", so the same id is left out of the not-yet-written section.
|
|
45
|
+
*/
|
|
46
|
+
export declare function renderIngestReportLines<TCode extends string>(input: {
|
|
47
|
+
readonly issues: readonly SubmissionIssue<TCode>[];
|
|
48
|
+
readonly remedy: (issue: SubmissionIssue<TCode>) => IssueRemedy;
|
|
49
|
+
readonly workload: IngestReportWorkload;
|
|
50
|
+
readonly landedWithoutResult?: readonly string[];
|
|
51
|
+
readonly advisories?: readonly IngestAdvisory[];
|
|
52
|
+
}): string[];
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=ingestReport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ingestReport.d.ts","sourceRoot":"","sources":["../../../src/shared/submission/ingestReport.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE;;;;;;;;GAQG;AACH,KAAK,oBAAoB,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,CAAC;AAEpE,+DAA+D;AAC/D,UAAU,cAAc;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AA0BD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,SAAS,MAAM,EAAE,KAAK,EAAE;IACnE,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC;IAChE,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CACjD,GAAG,MAAM,EAAE,CAiCX"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
const OPERATOR_SECTION_HEADING = "## Problems the worker cannot fix — stop and report them to the operator";
|
|
2
|
+
const REPAIR_PARAGRAPH = {
|
|
3
|
+
follows: "Each item above is still pending and is republished in the workload below. Write its result at the `result_path` the workload binds — the workload is the authority for every path.",
|
|
4
|
+
named_above: "Each item above is still pending and is republished in the workload file named above. Write its result at the `result_path` the workload binds — the workload is the authority for every path.",
|
|
5
|
+
next_call: "Each item above is still pending. Write its result at the `result_path` the next published workload binds — the workload is the authority for every path.",
|
|
6
|
+
};
|
|
7
|
+
/** One issue as a bullet, with its locators. */
|
|
8
|
+
function describeIssue(issue) {
|
|
9
|
+
return (`- ${issue.work_item_id ? `\`${issue.work_item_id}\` (${issue.code}): ` : `${issue.code}: `}` +
|
|
10
|
+
`${issue.message}${issue.result_path ? ` (\`${issue.result_path}\`)` : ""}`);
|
|
11
|
+
}
|
|
12
|
+
function section(heading, lines) {
|
|
13
|
+
return lines.length === 0 ? [] : [heading, "", ...lines, ""];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The ingest report as prompt lines. An empty section is omitted, so a clean
|
|
17
|
+
* ingest renders nothing at all.
|
|
18
|
+
*
|
|
19
|
+
* `landedWithoutResult` names the items whose edits LANDED (the run holds a
|
|
20
|
+
* corroborated commit for each) with no result file at the bound path. Each is
|
|
21
|
+
* listed once, under its own section: the remedy is not "write the result when
|
|
22
|
+
* the work is done" but "write the result for the commit that is already
|
|
23
|
+
* there", so the same id is left out of the not-yet-written section.
|
|
24
|
+
*/
|
|
25
|
+
export function renderIngestReportLines(input) {
|
|
26
|
+
const landed = [...new Set(input.landedWithoutResult ?? [])];
|
|
27
|
+
const landedSet = new Set(landed);
|
|
28
|
+
const byRemedy = (remedy) => input.issues.filter((issue) => input.remedy(issue) === remedy);
|
|
29
|
+
const waiting = byRemedy("wait").filter((issue) => issue.work_item_id === undefined || !landedSet.has(issue.work_item_id));
|
|
30
|
+
const repairable = byRemedy("repair").map(describeIssue);
|
|
31
|
+
return [
|
|
32
|
+
...section("## Results not yet written", waiting.map(describeIssue)),
|
|
33
|
+
...section("## Results to repair and write again", repairable),
|
|
34
|
+
// The repair paragraph belongs to the repair section and renders with it.
|
|
35
|
+
// A report holding only settled refusals must not tell the reader to write a
|
|
36
|
+
// repaired result for an item no workload binds a path for.
|
|
37
|
+
...(repairable.length === 0 ? [] : [REPAIR_PARAGRAPH[input.workload], ""]),
|
|
38
|
+
...section("## Commits that landed without a result file", landed.map((id) => `- \`${id}\`: write the result for the commit that is already on HEAD. Do not do the edit again.`)),
|
|
39
|
+
...section(OPERATOR_SECTION_HEADING, byRemedy("operator").map(describeIssue)),
|
|
40
|
+
...section("## Settled — no action needed", byRemedy("none").map(describeIssue)),
|
|
41
|
+
...section("## Advisory notes on accepted results", (input.advisories ?? []).map((advisory) => `- \`${advisory.work_item_id}\` was ACCEPTED; advisory: ${advisory.message}`)),
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=ingestReport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ingestReport.js","sourceRoot":"","sources":["../../../src/shared/submission/ingestReport.ts"],"names":[],"mappings":"AAyCA,MAAM,wBAAwB,GAC5B,0EAA0E,CAAC;AAE7E,MAAM,gBAAgB,GAAmD;IACvE,OAAO,EACL,qLAAqL;IACvL,WAAW,EACT,gMAAgM;IAClM,SAAS,EACP,2JAA2J;CAC9J,CAAC;AAEF,gDAAgD;AAChD,SAAS,aAAa,CAAuB,KAA6B;IACxE,OAAO,CACL,KAAK,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,YAAY,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE;QAC7F,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5E,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,OAAe,EAAE,KAAwB;IACxD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CAAuB,KAM7D;IACC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,CAAC,MAAmB,EAA4B,EAAE,CACjE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CACrC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAClF,CAAC;IACF,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACzD,OAAO;QACL,GAAG,OAAO,CAAC,4BAA4B,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACpE,GAAG,OAAO,CAAC,sCAAsC,EAAE,UAAU,CAAC;QAC9D,0EAA0E;QAC1E,6EAA6E;QAC7E,4DAA4D;QAC5D,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1E,GAAG,OAAO,CACR,8CAA8C,EAC9C,MAAM,CAAC,GAAG,CACR,CAAC,EAAE,EAAE,EAAE,CACL,OAAO,EAAE,wFAAwF,CACpG,CACF;QACD,GAAG,OAAO,CAAC,wBAAwB,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC7E,GAAG,OAAO,CAAC,+BAA+B,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAChF,GAAG,OAAO,CACR,uCAAuC,EACvC,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAC1B,CAAC,QAAQ,EAAE,EAAE,CACX,OAAO,QAAQ,CAAC,YAAY,8BAA8B,QAAQ,CAAC,OAAO,EAAE,CAC/E,CACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -98,18 +98,18 @@ export declare const INGESTION_CHECKS: readonly [{
|
|
|
98
98
|
readonly draws: readonly ["remediate"];
|
|
99
99
|
readonly cited_by: "draw";
|
|
100
100
|
}, {
|
|
101
|
-
readonly id: "
|
|
102
|
-
readonly verifies: "`
|
|
101
|
+
readonly id: "landed_commit";
|
|
102
|
+
readonly verifies: "`landed_commit` is a full commit id that exists, is not the workload baseline, changes at least one file, descends from the baseline (waived only under a genuinely orphaned baseline in recovery), and is reachable from HEAD.";
|
|
103
103
|
readonly draws: readonly ["remediate"];
|
|
104
104
|
readonly cited_by: "draw";
|
|
105
105
|
}, {
|
|
106
|
-
readonly id: "
|
|
107
|
-
readonly verifies: "
|
|
106
|
+
readonly id: "write_scope";
|
|
107
|
+
readonly verifies: "Every file the landed commit changed, as git reports it, lies within the prompt-bound `allowed_files`.";
|
|
108
108
|
readonly draws: readonly ["remediate"];
|
|
109
109
|
readonly cited_by: "draw";
|
|
110
110
|
}, {
|
|
111
|
-
readonly id: "
|
|
112
|
-
readonly verifies: "
|
|
111
|
+
readonly id: "required_tests";
|
|
112
|
+
readonly verifies: "The tool's own rerun of every prompt-bound required test passes on the tree that holds the landed commit.";
|
|
113
113
|
readonly draws: readonly ["remediate"];
|
|
114
114
|
readonly cited_by: "draw";
|
|
115
115
|
}, {
|
|
@@ -118,13 +118,8 @@ export declare const INGESTION_CHECKS: readonly [{
|
|
|
118
118
|
readonly draws: readonly ["remediate"];
|
|
119
119
|
readonly cited_by: "draw";
|
|
120
120
|
}, {
|
|
121
|
-
readonly id: "
|
|
122
|
-
readonly verifies: "
|
|
123
|
-
readonly draws: readonly ["remediate"];
|
|
124
|
-
readonly cited_by: "draw";
|
|
125
|
-
}, {
|
|
126
|
-
readonly id: "landing_attestation";
|
|
127
|
-
readonly verifies: "`acceptance` and `merge` both attest a completed landing.";
|
|
121
|
+
readonly id: "run_start_dirt";
|
|
122
|
+
readonly verifies: "No file the landed commit changed overlaps dirt that pre-dated the run.";
|
|
128
123
|
readonly draws: readonly ["remediate"];
|
|
129
124
|
readonly cited_by: "draw";
|
|
130
125
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingestionChecks.d.ts","sourceRoot":"","sources":["../../../src/shared/submission/ingestionChecks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ingestionChecks.d.ts","sourceRoot":"","sources":["../../../src/shared/submission/ingestionChecks.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,eAAO,MAAM,eAAe;;;;;;EAGlB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAEnE,0CAA0C;AAC1C,eAAO,MAAM,uBAAuB,4CAA4C,CAAC;AAEjF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,0FAA0F;IAC1F,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC;CACtC;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqHiB,CAAC;AAE/C,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAEvE,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,gBAAgB,EAAE,CAIrF;AAED,0EAA0E;AAC1E,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,cAAc,CAAC,UAAU,CAAC,EACnC,IAAI,CAAC,EAAE,aAAa,GACnB,SAAS,gBAAgB,EAAE,CAM7B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// sites-pinned: tests/shared/ingestion-checks-drift.test.ts, tests/remediate/host-handoff-corroboration.test.ts
|
|
1
2
|
/**
|
|
2
3
|
* The ONE declared list of checks result ingestion performs before it accepts a
|
|
3
4
|
* host result — the source `docs/audit-pkg/contracts.md`'s check block is
|
|
@@ -97,20 +98,20 @@ export const INGESTION_CHECKS = [
|
|
|
97
98
|
cited_by: "draw",
|
|
98
99
|
},
|
|
99
100
|
{
|
|
100
|
-
id: "
|
|
101
|
-
verifies: "`
|
|
101
|
+
id: "landed_commit",
|
|
102
|
+
verifies: "`landed_commit` is a full commit id that exists, is not the workload baseline, changes at least one file, descends from the baseline (waived only under a genuinely orphaned baseline in recovery), and is reachable from HEAD.",
|
|
102
103
|
draws: ["remediate"],
|
|
103
104
|
cited_by: "draw",
|
|
104
105
|
},
|
|
105
106
|
{
|
|
106
|
-
id: "
|
|
107
|
-
verifies: "
|
|
107
|
+
id: "write_scope",
|
|
108
|
+
verifies: "Every file the landed commit changed, as git reports it, lies within the prompt-bound `allowed_files`.",
|
|
108
109
|
draws: ["remediate"],
|
|
109
110
|
cited_by: "draw",
|
|
110
111
|
},
|
|
111
112
|
{
|
|
112
|
-
id: "
|
|
113
|
-
verifies: "
|
|
113
|
+
id: "required_tests",
|
|
114
|
+
verifies: "The tool's own rerun of every prompt-bound required test passes on the tree that holds the landed commit.",
|
|
114
115
|
draws: ["remediate"],
|
|
115
116
|
cited_by: "draw",
|
|
116
117
|
},
|
|
@@ -121,14 +122,8 @@ export const INGESTION_CHECKS = [
|
|
|
121
122
|
cited_by: "draw",
|
|
122
123
|
},
|
|
123
124
|
{
|
|
124
|
-
id: "
|
|
125
|
-
verifies: "
|
|
126
|
-
draws: ["remediate"],
|
|
127
|
-
cited_by: "draw",
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
id: "landing_attestation",
|
|
131
|
-
verifies: "`acceptance` and `merge` both attest a completed landing.",
|
|
125
|
+
id: "run_start_dirt",
|
|
126
|
+
verifies: "No file the landed commit changed overlaps dirt that pre-dated the run.",
|
|
132
127
|
draws: ["remediate"],
|
|
133
128
|
cited_by: "draw",
|
|
134
129
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingestionChecks.js","sourceRoot":"","sources":["../../../src/shared/submission/ingestionChecks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,uCAAuC,EAAE;IAChE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,6CAA6C,EAAE;CAClE,CAAC;AAIX,0CAA0C;AAC1C,MAAM,CAAC,MAAM,uBAAuB,GAAG,yCAAyC,CAAC;AAWjF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B;QACE,EAAE,EAAE,aAAa;QACjB,QAAQ,EACN,iMAAiM;QACnM,KAAK,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;QAC7B,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,EAAE,EAAE,aAAa;QACjB,QAAQ,EAAE,4CAA4C;QACtD,KAAK,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;QAC7B,QAAQ,EAAE,QAAQ;KACnB;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,QAAQ,EACN,kIAAkI;QACpI,KAAK,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;QAC7B,QAAQ,EAAE,MAAM;KACjB;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,QAAQ,EACN,uPAAuP;QACzP,KAAK,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;QAC7B,QAAQ,EAAE,MAAM;KACjB;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,QAAQ,EACN,2MAA2M;QAC7M,KAAK,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;QAC7B,QAAQ,EAAE,MAAM;KACjB;IACD;QACE,EAAE,EAAE,eAAe;QACnB,QAAQ,EACN,sIAAsI;QACxI,KAAK,EAAE,CAAC,OAAO,CAAC;QAChB,QAAQ,EAAE,MAAM;KACjB;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,QAAQ,EAAE,iFAAiF;QAC3F,KAAK,EAAE,CAAC,OAAO,CAAC;QAChB,QAAQ,EAAE,MAAM;KACjB;IACD;QACE,EAAE,EAAE,eAAe;QACnB,QAAQ,EACN,uGAAuG;QACzG,KAAK,EAAE,CAAC,OAAO,CAAC;QAChB,QAAQ,EAAE,MAAM;KACjB;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,QAAQ,EACN,oLAAoL;QACtL,KAAK,EAAE,CAAC,OAAO,CAAC;QAChB,QAAQ,EAAE,MAAM;KACjB;IACD;QACE,EAAE,EAAE,eAAe;QACnB,QAAQ,EACN,yKAAyK;QAC3K,KAAK,EAAE,CAAC,WAAW,CAAC;QACpB,QAAQ,EAAE,MAAM;KACjB;IACD;QACE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"ingestionChecks.js","sourceRoot":"","sources":["../../../src/shared/submission/ingestionChecks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { IngestionCheckId } from "./ingestionChecks.js";
|
|
2
2
|
export declare const SUBMISSION_ISSUE_CODES: readonly ["submission_missing", "submission_malformed", "submission_contract_invalid", "submission_rejected", "duplicate_submission_id"];
|
|
3
3
|
export type SubmissionIssueCode = (typeof SUBMISSION_ISSUE_CODES)[number];
|
|
4
|
+
/**
|
|
5
|
+
* The workload codes both draws share. Not a submission code — it names no
|
|
6
|
+
* result — so it is a separate tuple each draw spreads into its own vocabulary.
|
|
7
|
+
*/
|
|
8
|
+
export declare const WORKLOAD_ISSUE_CODES: readonly ["workload_stale"];
|
|
9
|
+
export type WorkloadIssueCode = (typeof WORKLOAD_ISSUE_CODES)[number];
|
|
4
10
|
/**
|
|
5
11
|
* One classified failure. `TCode` widens for a draw that adds its own domain
|
|
6
12
|
* codes; the base parameterization is the shared vocabulary above — see
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submissionClassifier.d.ts","sourceRoot":"","sources":["../../../src/shared/submission/submissionClassifier.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"submissionClassifier.d.ts","sourceRoot":"","sources":["../../../src/shared/submission/submissionClassifier.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,eAAO,MAAM,sBAAsB,0IAWzB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E;;;GAGG;AACH,eAAO,MAAM,oBAAoB,6BAUvB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe,CAAC,KAAK,SAAS,MAAM,GAAG,mBAAmB;IACzE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,gFAAgF;AAChF,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAExD;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,qBAAqB,CAAC,CA0BhC;AAED,+EAA+E;AAC/E,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,qBAAqB,GAC7B,eAAe,GAAG,IAAI,CAkBxB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// sites-pinned: tests/shared/ingest-report.test.ts, tests/remediate/host-handoff.test.ts
|
|
1
2
|
/**
|
|
2
3
|
* The ONE failure vocabulary for a host submission both orchestrators read.
|
|
3
4
|
*
|
|
@@ -26,6 +27,21 @@ export const SUBMISSION_ISSUE_CODES = [
|
|
|
26
27
|
/** A second submission re-uses an identity already accepted this run. */
|
|
27
28
|
"duplicate_submission_id",
|
|
28
29
|
];
|
|
30
|
+
/**
|
|
31
|
+
* The workload codes both draws share. Not a submission code — it names no
|
|
32
|
+
* result — so it is a separate tuple each draw spreads into its own vocabulary.
|
|
33
|
+
*/
|
|
34
|
+
export const WORKLOAD_ISSUE_CODES = [
|
|
35
|
+
/**
|
|
36
|
+
* The persisted host workload was issued under a contract version this build
|
|
37
|
+
* no longer mints, so no submission can be accepted against it. RECOVERABLE
|
|
38
|
+
* BY EXACTLY ONE ACTION — re-prepare, which publishes a current workload — and
|
|
39
|
+
* the tool takes that action itself in the same call, so the code is
|
|
40
|
+
* distinct from a workload whose bytes are wrong. The trigger is a
|
|
41
|
+
* contract-version bump that changed the work item's shape or its prompt.
|
|
42
|
+
*/
|
|
43
|
+
"workload_stale",
|
|
44
|
+
];
|
|
29
45
|
/**
|
|
30
46
|
* Read the bytes at a bound path and classify the outcome. A file that is not
|
|
31
47
|
* there and a file that will not parse are DIFFERENT answers; every other IO
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submissionClassifier.js","sourceRoot":"","sources":["../../../src/shared/submission/submissionClassifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,wCAAwC;IACxC,oBAAoB;IACpB,0DAA0D;IAC1D,sBAAsB;IACtB,kEAAkE;IAClE,6BAA6B;IAC7B,8DAA8D;IAC9D,qBAAqB;IACrB,yEAAyE;IACzE,yBAAyB;CACjB,CAAC;AAsCX;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,YAAoB;IAEpB,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC7B,CAAC;QACD,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC/D,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,yEAAyE;QACzE,0EAA0E;QAC1E,wEAAwE;QACxE,0CAA0C;QAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAY,EAAE,CAAC;IACtE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC/D,CAAC;IACJ,CAAC;AACH,CAAC;AASD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,OAA8B,EAC9B,OAA8B;IAE9B,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,QAAQ,GAAG;QACf,aAAa,EAAE,OAAO,CAAC,YAAY;QACnC,eAAe,EAAE,OAAO,CAAC,cAAc;KAC/B,CAAC;IACX,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,SAAS,OAAO,CAAC,IAAI,uCAAuC;YACrE,GAAG,QAAQ;SACZ,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,SAAS,OAAO,CAAC,IAAI,wCAAwC,OAAO,CAAC,MAAM,EAAE;QACtF,GAAG,QAAQ;KACZ,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"submissionClassifier.js","sourceRoot":"","sources":["../../../src/shared/submission/submissionClassifier.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,wCAAwC;IACxC,oBAAoB;IACpB,0DAA0D;IAC1D,sBAAsB;IACtB,kEAAkE;IAClE,6BAA6B;IAC7B,8DAA8D;IAC9D,qBAAqB;IACrB,yEAAyE;IACzE,yBAAyB;CACjB,CAAC;AAIX;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC;;;;;;;OAOG;IACH,gBAAgB;CACR,CAAC;AAsCX;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,YAAoB;IAEpB,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC7B,CAAC;QACD,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC/D,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,yEAAyE;QACzE,0EAA0E;QAC1E,wEAAwE;QACxE,0CAA0C;QAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAY,EAAE,CAAC;IACtE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC/D,CAAC;IACJ,CAAC;AACH,CAAC;AASD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,OAA8B,EAC9B,OAA8B;IAE9B,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,QAAQ,GAAG;QACf,aAAa,EAAE,OAAO,CAAC,YAAY;QACnC,eAAe,EAAE,OAAO,CAAC,cAAc;KAC/B,CAAC;IACX,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,SAAS,OAAO,CAAC,IAAI,uCAAuC;YACrE,GAAG,QAAQ;SACZ,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,SAAS,OAAO,CAAC,IAAI,wCAAwC,OAAO,CAAC,MAAM,EAAE;QACtF,GAAG,QAAQ;KACZ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** A worker prompt as both draws persist it on a work item. */
|
|
2
|
+
interface BoundWorkerPrompt {
|
|
3
|
+
readonly text: string;
|
|
4
|
+
readonly sha256: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Bind a prompt body to its result template. `renderTail` receives the body
|
|
8
|
+
* digest and returns the template text — the caller derives the result id from
|
|
9
|
+
* the same digest with `deriveResultId`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function bindWorkerPrompt(body: string, renderTail: (promptDigest: string) => string): BoundWorkerPrompt;
|
|
12
|
+
/**
|
|
13
|
+
* Does a persisted prompt hold its binding: the text ends with the template the
|
|
14
|
+
* digest renders, and the digest is the digest of the text above it?
|
|
15
|
+
*/
|
|
16
|
+
export declare function workerPromptBindingHolds(prompt: BoundWorkerPrompt, renderTail: (promptDigest: string) => string): boolean;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=workerPromptBinding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workerPromptBinding.d.ts","sourceRoot":"","sources":["../../../src/shared/submission/workerPromptBinding.ts"],"names":[],"mappings":"AAiBA,+DAA+D;AAC/D,UAAU,iBAAiB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAKD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,GAC3C,iBAAiB,CAGnB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,iBAAiB,EACzB,UAAU,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,GAC3C,OAAO,CAIT"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// sites-pinned: tests/remediate/host-handoff.test.ts, tests/audit/host-handoff.test.ts
|
|
2
|
+
// (both draws bind their worker prompts here, so a change to where the digest
|
|
3
|
+
// stops moves every `prompt_sha256` the tests re-derive from the prompt text)
|
|
4
|
+
/**
|
|
5
|
+
* THE worker-prompt binding both draws share (owner review of prompt 20,
|
|
6
|
+
* 2026-09-18).
|
|
7
|
+
*
|
|
8
|
+
* A worker prompt ENDS with the result the tool expects, as a JSON template
|
|
9
|
+
* whose identity values — run id, work item id, result id, prompt digest — the
|
|
10
|
+
* tool fills in. The worker copies them; it never derives, chooses or looks
|
|
11
|
+
* them up. A text cannot carry its own digest, so the digest covers the BODY:
|
|
12
|
+
* the text above the template. The template is then a pure function of the
|
|
13
|
+
* digest, so the whole text is still re-derivable from the digest and the
|
|
14
|
+
* body, and a parse can check both halves.
|
|
15
|
+
*/
|
|
16
|
+
import { promptSha256 } from "./hostHandoffCore.js";
|
|
17
|
+
/** The separator between the body and the template. */
|
|
18
|
+
const BODY_TAIL_SEPARATOR = "\n\n";
|
|
19
|
+
/**
|
|
20
|
+
* Bind a prompt body to its result template. `renderTail` receives the body
|
|
21
|
+
* digest and returns the template text — the caller derives the result id from
|
|
22
|
+
* the same digest with `deriveResultId`.
|
|
23
|
+
*/
|
|
24
|
+
export function bindWorkerPrompt(body, renderTail) {
|
|
25
|
+
const digest = promptSha256(body);
|
|
26
|
+
return { text: `${body}${BODY_TAIL_SEPARATOR}${renderTail(digest)}`, sha256: digest };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Does a persisted prompt hold its binding: the text ends with the template the
|
|
30
|
+
* digest renders, and the digest is the digest of the text above it?
|
|
31
|
+
*/
|
|
32
|
+
export function workerPromptBindingHolds(prompt, renderTail) {
|
|
33
|
+
const tail = `${BODY_TAIL_SEPARATOR}${renderTail(prompt.sha256)}`;
|
|
34
|
+
if (!prompt.text.endsWith(tail))
|
|
35
|
+
return false;
|
|
36
|
+
return promptSha256(prompt.text.slice(0, prompt.text.length - tail.length)) === prompt.sha256;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=workerPromptBinding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workerPromptBinding.js","sourceRoot":"","sources":["../../../src/shared/submission/workerPromptBinding.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,8EAA8E;AAC9E,8EAA8E;AAC9E;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAQpD,uDAAuD;AACvD,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,UAA4C;IAE5C,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,mBAAmB,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACxF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAyB,EACzB,UAA4C;IAE5C,MAAM,IAAI,GAAG,GAAG,mBAAmB,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAClE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC;AAChG,CAAC"}
|
|
@@ -150,6 +150,30 @@ export declare function quoteForCmd(arg: string): string;
|
|
|
150
150
|
*/
|
|
151
151
|
export declare function shellQuote(arg: string, platform?: NodeJS.Platform): string;
|
|
152
152
|
export declare function toPromptPathToken(value: string): string;
|
|
153
|
+
/**
|
|
154
|
+
* Every win32 ABSOLUTE path inside a free-text prompt body, forward-slashed.
|
|
155
|
+
*
|
|
156
|
+
* {@link toPromptPathToken} normalizes one whole token, which is what a step
|
|
157
|
+
* contract's path FIELDS are. A prompt body is a free string: a renderer
|
|
158
|
+
* interpolates a path into a sentence, so the same file reaches the reader
|
|
159
|
+
* backslashed in the prose and forward-slashed in the field beside it. A
|
|
160
|
+
* backslashed path breaks in every bash-like shell the reader may paste it
|
|
161
|
+
* into, and the disagreement itself makes the reader guess which form the tool
|
|
162
|
+
* means.
|
|
163
|
+
*
|
|
164
|
+
* ANCHORED ON A DRIVE LETTER OR A UNC ROOT, deliberately. The relative forms
|
|
165
|
+
* `toPromptPathToken` also accepts (`.\x`, `a\b.json`) are not recognized here:
|
|
166
|
+
* inside free text they are indistinguishable from a regular expression, an
|
|
167
|
+
* escape sequence, or a code sample, and rewriting one of those would corrupt
|
|
168
|
+
* prompt content. An absolute path has no such collision.
|
|
169
|
+
*
|
|
170
|
+
* A match ends at whitespace, so a path holding a SPACE is normalized up to
|
|
171
|
+
* that space. The result still agrees with what {@link toPromptPathToken} puts
|
|
172
|
+
* in the path field beside it, because the remainder of such a path holds no
|
|
173
|
+
* further separator to convert. Quoting a path with a space is the reader's
|
|
174
|
+
* problem either way, and free text cannot solve it.
|
|
175
|
+
*/
|
|
176
|
+
export declare function normalizePromptBodyPaths(body: string): string;
|
|
153
177
|
/**
|
|
154
178
|
* Quote a single argv token for a *rendered command line* that this tool
|
|
155
179
|
* hands a host agent to run verbatim — the host may paste it into posix sh,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../../src/shared/tooling/exec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../../src/shared/tooling/exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
// sites-pinned: tests/shared/step-contract-writer.test.ts, tests/audit/semantic-review-step.test.ts
|
|
2
|
+
// (the prompt-path helpers decide how every written prompt states a path;
|
|
3
|
+
// broadening the match corrupts non-path text, narrowing it leaves a
|
|
4
|
+
// backslashed path in the body)
|
|
1
5
|
import { spawn, spawnSync } from "node:child_process";
|
|
2
6
|
import { win32 } from "node:path";
|
|
3
7
|
const SHELL_SHIM_COMMANDS = new Set(["npm", "npx", "pnpm", "yarn"]);
|
|
@@ -224,6 +228,32 @@ function isPromptPathToken(value) {
|
|
|
224
228
|
export function toPromptPathToken(value) {
|
|
225
229
|
return isPromptPathToken(value) ? value.replace(/\\/g, "/") : value;
|
|
226
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* Every win32 ABSOLUTE path inside a free-text prompt body, forward-slashed.
|
|
233
|
+
*
|
|
234
|
+
* {@link toPromptPathToken} normalizes one whole token, which is what a step
|
|
235
|
+
* contract's path FIELDS are. A prompt body is a free string: a renderer
|
|
236
|
+
* interpolates a path into a sentence, so the same file reaches the reader
|
|
237
|
+
* backslashed in the prose and forward-slashed in the field beside it. A
|
|
238
|
+
* backslashed path breaks in every bash-like shell the reader may paste it
|
|
239
|
+
* into, and the disagreement itself makes the reader guess which form the tool
|
|
240
|
+
* means.
|
|
241
|
+
*
|
|
242
|
+
* ANCHORED ON A DRIVE LETTER OR A UNC ROOT, deliberately. The relative forms
|
|
243
|
+
* `toPromptPathToken` also accepts (`.\x`, `a\b.json`) are not recognized here:
|
|
244
|
+
* inside free text they are indistinguishable from a regular expression, an
|
|
245
|
+
* escape sequence, or a code sample, and rewriting one of those would corrupt
|
|
246
|
+
* prompt content. An absolute path has no such collision.
|
|
247
|
+
*
|
|
248
|
+
* A match ends at whitespace, so a path holding a SPACE is normalized up to
|
|
249
|
+
* that space. The result still agrees with what {@link toPromptPathToken} puts
|
|
250
|
+
* in the path field beside it, because the remainder of such a path holds no
|
|
251
|
+
* further separator to convert. Quoting a path with a space is the reader's
|
|
252
|
+
* problem either way, and free text cannot solve it.
|
|
253
|
+
*/
|
|
254
|
+
export function normalizePromptBodyPaths(body) {
|
|
255
|
+
return body.replace(/(?:[A-Za-z]:\\|\\\\[^\\\s"'`]+\\)[^\s"'`<>|]*/gu, (match) => match.replace(/\\/g, "/"));
|
|
256
|
+
}
|
|
227
257
|
// Tokens matching this charset need no quoting in any of the three dialects
|
|
228
258
|
// `renderPromptCommand` targets (posix sh, PowerShell, cmd.exe). Anything
|
|
229
259
|
// outside it — spaces, quotes, and shell metacharacters such as `& | < > ^ %
|