audit-tools 0.52.3 → 0.52.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -1
- package/dist/audit/cli/args.d.ts.map +1 -1
- package/dist/audit/cli/args.js +6 -2
- package/dist/audit/cli/args.js.map +1 -1
- package/dist/audit/cli/argumentContract.d.ts +11 -0
- package/dist/audit/cli/argumentContract.d.ts.map +1 -0
- package/dist/audit/cli/argumentContract.js +45 -0
- package/dist/audit/cli/argumentContract.js.map +1 -0
- package/dist/audit/cli/auditReviewBindings.d.ts +49 -0
- package/dist/audit/cli/auditReviewBindings.d.ts.map +1 -0
- package/dist/audit/cli/auditReviewBindings.js +61 -0
- package/dist/audit/cli/auditReviewBindings.js.map +1 -0
- package/dist/audit/cli/auditStep.d.ts +1 -27
- package/dist/audit/cli/auditStep.d.ts.map +1 -1
- package/dist/audit/cli/auditStep.js +7 -32
- package/dist/audit/cli/auditStep.js.map +1 -1
- package/dist/audit/cli/charterComparisonPrompt.d.ts +2 -0
- package/dist/audit/cli/charterComparisonPrompt.d.ts.map +1 -1
- package/dist/audit/cli/charterComparisonPrompt.js +9 -0
- package/dist/audit/cli/charterComparisonPrompt.js.map +1 -1
- package/dist/audit/cli/charterExtractionPrompt.d.ts.map +1 -1
- package/dist/audit/cli/charterExtractionPrompt.js +17 -3
- package/dist/audit/cli/charterExtractionPrompt.js.map +1 -1
- package/dist/audit/cli/conceptualDispatch.d.ts +1 -1
- package/dist/audit/cli/conceptualDispatch.d.ts.map +1 -1
- package/dist/audit/cli/conceptualDispatch.js +15 -2
- package/dist/audit/cli/conceptualDispatch.js.map +1 -1
- package/dist/audit/cli/confirmIntentStep.d.ts.map +1 -1
- package/dist/audit/cli/confirmIntentStep.js +10 -17
- package/dist/audit/cli/confirmIntentStep.js.map +1 -1
- package/dist/audit/cli/dispatch/hostHandoff.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/hostHandoff.js +231 -229
- package/dist/audit/cli/dispatch/hostHandoff.js.map +1 -1
- package/dist/audit/cli/explainTaskCommand.d.ts.map +1 -1
- package/dist/audit/cli/explainTaskCommand.js +3 -1
- package/dist/audit/cli/explainTaskCommand.js.map +1 -1
- package/dist/audit/cli/fanoutLanes.d.ts +10 -14
- package/dist/audit/cli/fanoutLanes.d.ts.map +1 -1
- package/dist/audit/cli/fanoutLanes.js +50 -16
- package/dist/audit/cli/fanoutLanes.js.map +1 -1
- package/dist/audit/cli/functionalPreflight.d.ts +96 -0
- package/dist/audit/cli/functionalPreflight.d.ts.map +1 -0
- package/dist/audit/cli/functionalPreflight.js +103 -0
- package/dist/audit/cli/functionalPreflight.js.map +1 -0
- package/dist/audit/cli/laneSubmissions.d.ts +5 -1
- package/dist/audit/cli/laneSubmissions.d.ts.map +1 -1
- package/dist/audit/cli/laneSubmissions.js +45 -34
- package/dist/audit/cli/laneSubmissions.js.map +1 -1
- package/dist/audit/cli/nextStepCommand.d.ts +1 -9
- package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
- package/dist/audit/cli/nextStepCommand.js +101 -38
- package/dist/audit/cli/nextStepCommand.js.map +1 -1
- package/dist/audit/cli/nextStepHelpers.d.ts +10 -25
- package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
- package/dist/audit/cli/nextStepHelpers.js +57 -67
- package/dist/audit/cli/nextStepHelpers.js.map +1 -1
- package/dist/audit/cli/prompts.d.ts.map +1 -1
- package/dist/audit/cli/prompts.js +9 -4
- package/dist/audit/cli/prompts.js.map +1 -1
- package/dist/audit/cli/recoverSubmissionCommand.d.ts.map +1 -1
- package/dist/audit/cli/recoverSubmissionCommand.js +8 -1
- package/dist/audit/cli/recoverSubmissionCommand.js.map +1 -1
- package/dist/audit/cli/reviewRun.js +1 -1
- package/dist/audit/cli/reviewRun.js.map +1 -1
- package/dist/audit/cli/reviewSubmission.d.ts +24 -0
- package/dist/audit/cli/reviewSubmission.d.ts.map +1 -0
- package/dist/audit/cli/reviewSubmission.js +97 -0
- package/dist/audit/cli/reviewSubmission.js.map +1 -0
- package/dist/audit/cli/sampleRunCommand.d.ts +3 -3
- package/dist/audit/cli/steps.d.ts +18 -18
- package/dist/audit/cli/steps.d.ts.map +1 -1
- package/dist/audit/cli/steps.js +1 -0
- package/dist/audit/cli/steps.js.map +1 -1
- package/dist/audit/cli/unacceptResultsCommand.d.ts.map +1 -1
- package/dist/audit/cli/unacceptResultsCommand.js +2 -1
- package/dist/audit/cli/unacceptResultsCommand.js.map +1 -1
- package/dist/audit/cli.d.ts +2 -1
- package/dist/audit/cli.d.ts.map +1 -1
- package/dist/audit/cli.js +27 -19
- package/dist/audit/cli.js.map +1 -1
- package/dist/audit/contracts/workerSchemas.d.ts +10 -10
- package/dist/audit/contracts/wrapperResponse.d.ts +34 -34
- package/dist/audit/extractors/commentDecomposition.d.ts +14 -0
- package/dist/audit/extractors/commentDecomposition.d.ts.map +1 -1
- package/dist/audit/extractors/commentDecomposition.js +2 -1
- package/dist/audit/extractors/commentDecomposition.js.map +1 -1
- package/dist/audit/extractors/graph.d.ts +1 -1
- package/dist/audit/extractors/graph.d.ts.map +1 -1
- package/dist/audit/extractors/graph.js +12 -7
- package/dist/audit/extractors/graph.js.map +1 -1
- package/dist/audit/extractors/graphPythonImports.d.ts +3 -0
- package/dist/audit/extractors/graphPythonImports.d.ts.map +1 -1
- package/dist/audit/extractors/graphPythonImports.js +24 -5
- package/dist/audit/extractors/graphPythonImports.js.map +1 -1
- package/dist/audit/extractors/graphRouteSources.d.ts +7 -0
- package/dist/audit/extractors/graphRouteSources.d.ts.map +1 -0
- package/dist/audit/extractors/graphRouteSources.js +208 -0
- package/dist/audit/extractors/graphRouteSources.js.map +1 -0
- package/dist/audit/extractors/graphRoutes.d.ts +1 -1
- package/dist/audit/extractors/graphRoutes.d.ts.map +1 -1
- package/dist/audit/extractors/graphRoutes.js +65 -68
- package/dist/audit/extractors/graphRoutes.js.map +1 -1
- package/dist/audit/io/artifacts.d.ts +1 -0
- package/dist/audit/io/artifacts.d.ts.map +1 -1
- package/dist/audit/io/artifacts.js +29 -10
- package/dist/audit/io/artifacts.js.map +1 -1
- package/dist/audit/io/runArtifacts.d.ts +1 -1
- package/dist/audit/io/runArtifacts.d.ts.map +1 -1
- package/dist/audit/io/runArtifacts.js +3 -0
- package/dist/audit/io/runArtifacts.js.map +1 -1
- package/dist/audit/io/toolingManifest.d.ts.map +1 -1
- package/dist/audit/io/toolingManifest.js +11 -32
- package/dist/audit/io/toolingManifest.js.map +1 -1
- package/dist/audit/orchestrator/acquisitionExecutor.d.ts +2 -3
- package/dist/audit/orchestrator/acquisitionExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/acquisitionExecutor.js.map +1 -1
- package/dist/audit/orchestrator/advanceTypes.d.ts +1 -2
- package/dist/audit/orchestrator/advanceTypes.d.ts.map +1 -1
- package/dist/audit/orchestrator/autoFixExecutor.d.ts +2 -2
- package/dist/audit/orchestrator/autoFixExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/autoFixExecutor.js +2 -2
- package/dist/audit/orchestrator/autoFixExecutor.js.map +1 -1
- package/dist/audit/orchestrator/charterFidelityPacket.d.ts +2 -0
- package/dist/audit/orchestrator/charterFidelityPacket.d.ts.map +1 -1
- package/dist/audit/orchestrator/charterFidelityPacket.js +6 -1
- package/dist/audit/orchestrator/charterFidelityPacket.js.map +1 -1
- package/dist/audit/orchestrator/charterPackets.d.ts +2 -0
- package/dist/audit/orchestrator/charterPackets.d.ts.map +1 -1
- package/dist/audit/orchestrator/charterPackets.js +6 -0
- package/dist/audit/orchestrator/charterPackets.js.map +1 -1
- package/dist/audit/orchestrator/designReviewProjection.d.ts +5 -8
- package/dist/audit/orchestrator/designReviewProjection.d.ts.map +1 -1
- package/dist/audit/orchestrator/designReviewProjection.js +7 -1
- package/dist/audit/orchestrator/designReviewProjection.js.map +1 -1
- package/dist/audit/orchestrator/designReviewPrompt.d.ts +3 -47
- package/dist/audit/orchestrator/designReviewPrompt.d.ts.map +1 -1
- package/dist/audit/orchestrator/designReviewPrompt.js +28 -135
- package/dist/audit/orchestrator/designReviewPrompt.js.map +1 -1
- package/dist/audit/orchestrator/designReviewSnapshot.d.ts +24 -1
- package/dist/audit/orchestrator/designReviewSnapshot.d.ts.map +1 -1
- package/dist/audit/orchestrator/designReviewSnapshot.js +8 -2
- package/dist/audit/orchestrator/designReviewSnapshot.js.map +1 -1
- package/dist/audit/orchestrator/designReviewTask.d.ts +46 -0
- package/dist/audit/orchestrator/designReviewTask.d.ts.map +1 -0
- package/dist/audit/orchestrator/designReviewTask.js +44 -0
- package/dist/audit/orchestrator/designReviewTask.js.map +1 -0
- package/dist/audit/orchestrator/intentCheckpointGate.d.ts +1 -1
- package/dist/audit/orchestrator/intentCheckpointGate.d.ts.map +1 -1
- package/dist/audit/orchestrator/intentCheckpointGate.js +4 -2
- package/dist/audit/orchestrator/intentCheckpointGate.js.map +1 -1
- package/dist/audit/orchestrator/intentEquivalenceExecutor.d.ts +3 -0
- package/dist/audit/orchestrator/intentEquivalenceExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/intentEquivalenceExecutor.js +2 -0
- package/dist/audit/orchestrator/intentEquivalenceExecutor.js.map +1 -1
- package/dist/audit/orchestrator/intentInterpreter.d.ts +1 -9
- package/dist/audit/orchestrator/intentInterpreter.d.ts.map +1 -1
- package/dist/audit/orchestrator/intentInterpreter.js +6 -11
- package/dist/audit/orchestrator/intentInterpreter.js.map +1 -1
- package/dist/audit/orchestrator/selectiveDeepening/shared.d.ts +2 -2
- package/dist/audit/orchestrator/selectiveDeepening/shared.d.ts.map +1 -1
- package/dist/audit/orchestrator/staleness.d.ts.map +1 -1
- package/dist/audit/orchestrator/staleness.js +32 -40
- package/dist/audit/orchestrator/staleness.js.map +1 -1
- package/dist/audit/orchestrator/state.d.ts.map +1 -1
- package/dist/audit/orchestrator/state.js +8 -14
- package/dist/audit/orchestrator/state.js.map +1 -1
- package/dist/audit/orchestrator/systemicChallengeExecutor.d.ts +19 -0
- package/dist/audit/orchestrator/systemicChallengeExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/systemicChallengeExecutor.js +15 -1
- package/dist/audit/orchestrator/systemicChallengeExecutor.js.map +1 -1
- package/dist/audit/reporting/criticalFlowFallbackPrompt.d.ts +1 -1
- package/dist/audit/reporting/criticalFlowFallbackPrompt.d.ts.map +1 -1
- package/dist/audit/reporting/criticalFlowFallbackPrompt.js +4 -2
- package/dist/audit/reporting/criticalFlowFallbackPrompt.js.map +1 -1
- package/dist/audit/reporting/mergeFindings.d.ts.map +1 -1
- package/dist/audit/reporting/mergeFindings.js +43 -2
- package/dist/audit/reporting/mergeFindings.js.map +1 -1
- package/dist/audit/types/auditScope.d.ts +2 -2
- package/dist/audit/types/auditState.d.ts +6 -6
- package/dist/audit/types/conceptualAdjudication.d.ts +19 -19
- package/dist/audit/types/conceptualAdjudication.d.ts.map +1 -1
- package/dist/audit/types/conceptualAdjudication.js +3 -3
- package/dist/audit/types/conceptualAdjudication.js.map +1 -1
- package/dist/audit/types.d.ts +17 -19
- package/dist/audit/types.d.ts.map +1 -1
- package/dist/audit/types.js +19 -20
- package/dist/audit/types.js.map +1 -1
- package/dist/remediate/contractPipeline/artifactStore.d.ts +3 -1
- package/dist/remediate/contractPipeline/artifactStore.d.ts.map +1 -1
- package/dist/remediate/contractPipeline/artifactStore.js +26 -31
- package/dist/remediate/contractPipeline/artifactStore.js.map +1 -1
- package/dist/remediate/contractPipeline/changeClassification.d.ts.map +1 -1
- package/dist/remediate/contractPipeline/changeClassification.js +20 -8
- package/dist/remediate/contractPipeline/changeClassification.js.map +1 -1
- package/dist/remediate/contractPipeline/contractReviewBinding.d.ts +28 -0
- package/dist/remediate/contractPipeline/contractReviewBinding.d.ts.map +1 -0
- package/dist/remediate/contractPipeline/contractReviewBinding.js +75 -0
- package/dist/remediate/contractPipeline/contractReviewBinding.js.map +1 -0
- package/dist/remediate/contractPipeline/repairState.d.ts +3 -1
- package/dist/remediate/contractPipeline/repairState.d.ts.map +1 -1
- package/dist/remediate/contractPipeline/repairState.js +1 -0
- package/dist/remediate/contractPipeline/repairState.js.map +1 -1
- package/dist/remediate/contractPipeline/sketchSource.d.ts +1 -0
- package/dist/remediate/contractPipeline/sketchSource.d.ts.map +1 -1
- package/dist/remediate/contractPipeline/sketchSource.js +1 -0
- package/dist/remediate/contractPipeline/sketchSource.js.map +1 -1
- package/dist/remediate/dedup/crossLensDedup.d.ts +1 -2
- package/dist/remediate/dedup/crossLensDedup.d.ts.map +1 -1
- package/dist/remediate/dedup/crossLensDedup.js +1 -0
- package/dist/remediate/dedup/crossLensDedup.js.map +1 -1
- package/dist/remediate/index.d.ts.map +1 -1
- package/dist/remediate/index.js +92 -52
- package/dist/remediate/index.js.map +1 -1
- package/dist/remediate/intake.d.ts +54 -0
- package/dist/remediate/intake.d.ts.map +1 -1
- package/dist/remediate/intake.js +15 -1
- package/dist/remediate/intake.js.map +1 -1
- package/dist/remediate/intakeSelection.d.ts +27 -0
- package/dist/remediate/intakeSelection.d.ts.map +1 -0
- package/dist/remediate/intakeSelection.js +37 -0
- package/dist/remediate/intakeSelection.js.map +1 -0
- package/dist/remediate/intent/intentPersistence.d.ts +41 -0
- package/dist/remediate/intent/intentPersistence.d.ts.map +1 -0
- package/dist/remediate/intent/intentPersistence.js +129 -0
- package/dist/remediate/intent/intentPersistence.js.map +1 -0
- package/dist/remediate/phases/close.d.ts +2 -1
- package/dist/remediate/phases/close.d.ts.map +1 -1
- package/dist/remediate/phases/close.js +19 -2
- package/dist/remediate/phases/close.js.map +1 -1
- package/dist/remediate/phases/closeReviewProvenance.d.ts +4 -0
- package/dist/remediate/phases/closeReviewProvenance.d.ts.map +1 -0
- package/dist/remediate/phases/closeReviewProvenance.js +16 -0
- package/dist/remediate/phases/closeReviewProvenance.js.map +1 -0
- package/dist/remediate/phases/triage.d.ts.map +1 -1
- package/dist/remediate/phases/triage.js +3 -1
- package/dist/remediate/phases/triage.js.map +1 -1
- package/dist/remediate/review/filterDispositions.d.ts +13 -0
- package/dist/remediate/review/filterDispositions.d.ts.map +1 -0
- package/dist/remediate/review/filterDispositions.js +32 -0
- package/dist/remediate/review/filterDispositions.js.map +1 -0
- package/dist/remediate/state/runIdentity.d.ts +27 -0
- package/dist/remediate/state/runIdentity.d.ts.map +1 -0
- package/dist/remediate/state/runIdentity.js +38 -0
- package/dist/remediate/state/runIdentity.js.map +1 -0
- package/dist/remediate/state/store.d.ts +80 -1
- package/dist/remediate/state/store.d.ts.map +1 -1
- package/dist/remediate/state/store.js +82 -1
- package/dist/remediate/state/store.js.map +1 -1
- package/dist/remediate/state/types.d.ts +215 -42
- package/dist/remediate/state/types.d.ts.map +1 -1
- package/dist/remediate/state/types.js +11 -3
- package/dist/remediate/state/types.js.map +1 -1
- package/dist/remediate/steps/contractPipeline.d.ts +61 -3
- package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
- package/dist/remediate/steps/contractPipeline.js +121 -47
- package/dist/remediate/steps/contractPipeline.js.map +1 -1
- package/dist/remediate/steps/contractPipelinePrompts.d.ts +27 -4
- package/dist/remediate/steps/contractPipelinePrompts.d.ts.map +1 -1
- package/dist/remediate/steps/contractPipelinePrompts.js +34 -32
- package/dist/remediate/steps/contractPipelinePrompts.js.map +1 -1
- package/dist/remediate/steps/dispatch/contractConformanceReview.d.ts +31 -0
- package/dist/remediate/steps/dispatch/contractConformanceReview.d.ts.map +1 -0
- package/dist/remediate/steps/dispatch/contractConformanceReview.js +98 -0
- package/dist/remediate/steps/dispatch/contractConformanceReview.js.map +1 -0
- package/dist/remediate/steps/dispatch/hostContracts.d.ts +133 -0
- package/dist/remediate/steps/dispatch/hostContracts.d.ts.map +1 -0
- package/dist/remediate/steps/dispatch/hostContracts.js +104 -0
- package/dist/remediate/steps/dispatch/hostContracts.js.map +1 -0
- package/dist/remediate/steps/dispatch/hostCorroboration.d.ts +70 -0
- package/dist/remediate/steps/dispatch/hostCorroboration.d.ts.map +1 -0
- package/dist/remediate/steps/dispatch/hostCorroboration.js +350 -0
- package/dist/remediate/steps/dispatch/hostCorroboration.js.map +1 -0
- package/dist/remediate/steps/dispatch/hostHandoff.d.ts +8 -162
- package/dist/remediate/steps/dispatch/hostHandoff.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch/hostHandoff.js +137 -690
- package/dist/remediate/steps/dispatch/hostHandoff.js.map +1 -1
- package/dist/remediate/steps/dispatch/requiredTests.d.ts +83 -0
- package/dist/remediate/steps/dispatch/requiredTests.d.ts.map +1 -0
- package/dist/remediate/steps/dispatch/requiredTests.js +262 -0
- package/dist/remediate/steps/dispatch/requiredTests.js.map +1 -0
- package/dist/remediate/steps/finalGate.d.ts +8 -7
- package/dist/remediate/steps/finalGate.d.ts.map +1 -1
- package/dist/remediate/steps/finalGate.js +14 -11
- package/dist/remediate/steps/finalGate.js.map +1 -1
- package/dist/remediate/steps/frictionCloseout.d.ts +34 -0
- package/dist/remediate/steps/frictionCloseout.d.ts.map +1 -0
- package/dist/remediate/steps/frictionCloseout.js +113 -0
- package/dist/remediate/steps/frictionCloseout.js.map +1 -0
- package/dist/remediate/steps/gateCommands.d.ts +7 -9
- package/dist/remediate/steps/gateCommands.d.ts.map +1 -1
- package/dist/remediate/steps/gateCommands.js +37 -11
- package/dist/remediate/steps/gateCommands.js.map +1 -1
- package/dist/remediate/steps/intakeResolver.d.ts +2 -0
- package/dist/remediate/steps/intakeResolver.d.ts.map +1 -1
- package/dist/remediate/steps/intakeResolver.js +36 -11
- package/dist/remediate/steps/intakeResolver.js.map +1 -1
- package/dist/remediate/steps/nextStep.d.ts +23 -110
- package/dist/remediate/steps/nextStep.d.ts.map +1 -1
- package/dist/remediate/steps/nextStep.js +232 -508
- package/dist/remediate/steps/nextStep.js.map +1 -1
- package/dist/remediate/steps/prompts.d.ts +1 -1
- package/dist/remediate/steps/prompts.d.ts.map +1 -1
- package/dist/remediate/steps/prompts.js +7 -2
- package/dist/remediate/steps/prompts.js.map +1 -1
- package/dist/remediate/steps/recoverIngest.d.ts +57 -0
- package/dist/remediate/steps/recoverIngest.d.ts.map +1 -0
- package/dist/remediate/steps/recoverIngest.js +171 -0
- package/dist/remediate/steps/recoverIngest.js.map +1 -0
- package/dist/remediate/steps/stepWriter.d.ts +5 -4
- package/dist/remediate/steps/stepWriter.d.ts.map +1 -1
- package/dist/remediate/steps/stepWriter.js +2 -1
- package/dist/remediate/steps/stepWriter.js.map +1 -1
- package/dist/remediate/steps/types.d.ts +2 -3
- package/dist/remediate/steps/types.d.ts.map +1 -1
- 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 -12
- 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 +10 -7
- package/dist/remediate/validation/contractPipeline.js.map +1 -1
- package/dist/remediate/validation/contractPipelineGates.d.ts +13 -67
- package/dist/remediate/validation/contractPipelineGates.d.ts.map +1 -1
- package/dist/remediate/validation/contractPipelineGates.js +65 -139
- package/dist/remediate/validation/contractPipelineGates.js.map +1 -1
- package/dist/remediate/validation/remediationState.d.ts.map +1 -1
- package/dist/remediate/validation/remediationState.js +9 -3
- package/dist/remediate/validation/remediationState.js.map +1 -1
- package/dist/shared/agentReflections.d.ts +2 -2
- package/dist/shared/analyzerPolicy.d.ts +2 -16
- package/dist/shared/analyzerPolicy.d.ts.map +1 -1
- package/dist/shared/analyzerPolicy.js +22 -24
- package/dist/shared/analyzerPolicy.js.map +1 -1
- package/dist/shared/analyzerRunConsent.d.ts +33 -0
- package/dist/shared/analyzerRunConsent.d.ts.map +1 -0
- package/dist/shared/analyzerRunConsent.js +42 -0
- package/dist/shared/analyzerRunConsent.js.map +1 -0
- package/dist/shared/analyzers/acquisitionEngine.d.ts +3 -8
- package/dist/shared/analyzers/acquisitionEngine.d.ts.map +1 -1
- package/dist/shared/analyzers/acquisitionEngine.js +1 -0
- package/dist/shared/analyzers/acquisitionEngine.js.map +1 -1
- package/dist/shared/decompose/charterExtraction.d.ts +8 -8
- package/dist/shared/decompose/systemicChallenge.d.ts +12 -12
- package/dist/shared/engine/obligationEngine.d.ts +2 -2
- package/dist/shared/findings/dedupe.d.ts.map +1 -1
- package/dist/shared/findings/dedupe.js +16 -0
- package/dist/shared/findings/dedupe.js.map +1 -1
- package/dist/shared/graph/orderedReachability.d.ts +9 -0
- package/dist/shared/graph/orderedReachability.d.ts.map +1 -0
- package/dist/shared/graph/orderedReachability.js +21 -0
- package/dist/shared/graph/orderedReachability.js.map +1 -0
- package/dist/shared/index.d.ts +9 -3
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +6 -3
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/intake/guidanceBootstrap.d.ts +2 -0
- package/dist/shared/intake/guidanceBootstrap.d.ts.map +1 -1
- package/dist/shared/intake/guidanceBootstrap.js +10 -1
- package/dist/shared/intake/guidanceBootstrap.js.map +1 -1
- package/dist/shared/intent/constraintClauses.d.ts +3 -0
- package/dist/shared/intent/constraintClauses.d.ts.map +1 -1
- package/dist/shared/intent/constraintClauses.js +9 -0
- package/dist/shared/intent/constraintClauses.js.map +1 -1
- package/dist/shared/io/artifactTreeHold.d.ts +5 -0
- package/dist/shared/io/artifactTreeHold.d.ts.map +1 -0
- package/dist/shared/io/artifactTreeHold.js +13 -0
- package/dist/shared/io/artifactTreeHold.js.map +1 -0
- package/dist/shared/io/auditToolsPaths.d.ts +3 -1
- package/dist/shared/io/auditToolsPaths.d.ts.map +1 -1
- package/dist/shared/io/auditToolsPaths.js +6 -1
- package/dist/shared/io/auditToolsPaths.js.map +1 -1
- package/dist/shared/io/collectFilesSorted.d.ts +10 -0
- package/dist/shared/io/collectFilesSorted.d.ts.map +1 -0
- package/dist/shared/io/collectFilesSorted.js +38 -0
- package/dist/shared/io/collectFilesSorted.js.map +1 -0
- package/dist/shared/io/json.d.ts.map +1 -1
- package/dist/shared/io/json.js +11 -4
- package/dist/shared/io/json.js.map +1 -1
- package/dist/shared/io/stepContractWriter.d.ts.map +1 -1
- package/dist/shared/io/stepContractWriter.js +8 -0
- package/dist/shared/io/stepContractWriter.js.map +1 -1
- package/dist/shared/loopCorePaths.d.ts.map +1 -1
- package/dist/shared/loopCorePaths.js +9 -0
- package/dist/shared/loopCorePaths.js.map +1 -1
- package/dist/shared/observability/rootLogObservations.d.ts +10 -0
- package/dist/shared/observability/rootLogObservations.d.ts.map +1 -0
- package/dist/shared/observability/rootLogObservations.js +147 -0
- package/dist/shared/observability/rootLogObservations.js.map +1 -0
- package/dist/shared/prompts.d.ts +7 -7
- package/dist/shared/prompts.d.ts.map +1 -1
- package/dist/shared/prompts.js +11 -11
- package/dist/shared/prompts.js.map +1 -1
- package/dist/shared/submission/submissionLedger.d.ts +7 -1
- package/dist/shared/submission/submissionLedger.d.ts.map +1 -1
- package/dist/shared/submission/submissionLedger.js +8 -0
- package/dist/shared/submission/submissionLedger.js.map +1 -1
- package/dist/shared/tooling/testCommand.d.ts +1 -0
- package/dist/shared/tooling/testCommand.d.ts.map +1 -1
- package/dist/shared/tooling/testCommand.js +4 -0
- package/dist/shared/tooling/testCommand.js.map +1 -1
- package/dist/shared/types/charter.d.ts +8 -8
- package/dist/shared/types/conceptualPerspective.d.ts +66 -0
- package/dist/shared/types/conceptualPerspective.d.ts.map +1 -0
- package/dist/shared/types/conceptualPerspective.js +135 -0
- package/dist/shared/types/conceptualPerspective.js.map +1 -0
- package/dist/shared/types/contractPipeline/design.d.ts +5 -0
- package/dist/shared/types/contractPipeline/design.d.ts.map +1 -1
- package/dist/shared/types/contractPipeline/design.js +6 -0
- package/dist/shared/types/contractPipeline/design.js.map +1 -1
- package/dist/shared/types/contractPipeline/implementation.d.ts +54 -0
- package/dist/shared/types/contractPipeline/implementation.d.ts.map +1 -1
- package/dist/shared/types/contractPipeline/implementation.js +10 -5
- package/dist/shared/types/contractPipeline/implementation.js.map +1 -1
- package/dist/shared/types/contractPipeline/obligations.d.ts +21 -10
- package/dist/shared/types/contractPipeline/obligations.d.ts.map +1 -1
- package/dist/shared/types/contractPipeline/obligations.js +13 -1
- package/dist/shared/types/contractPipeline/obligations.js.map +1 -1
- package/dist/shared/types/disposition.d.ts +6 -6
- package/dist/shared/types/finding.d.ts +50 -50
- package/dist/shared/types/intentCheckpoint.d.ts +66 -11
- package/dist/shared/types/intentCheckpoint.d.ts.map +1 -1
- package/dist/shared/types/intentCheckpoint.js +10 -2
- package/dist/shared/types/intentCheckpoint.js.map +1 -1
- package/dist/shared/types/remediationOutcome.d.ts +252 -24
- package/dist/shared/types/remediationOutcome.d.ts.map +1 -1
- package/dist/shared/types/remediationOutcome.js +4 -0
- package/dist/shared/types/remediationOutcome.js.map +1 -1
- package/dist/shared/types/reviewIndependence.d.ts +225 -0
- package/dist/shared/types/reviewIndependence.d.ts.map +1 -0
- package/dist/shared/types/reviewIndependence.js +67 -0
- package/dist/shared/types/reviewIndependence.js.map +1 -0
- package/dist/shared/types/stepContract.d.ts +8 -2
- package/dist/shared/types/stepContract.d.ts.map +1 -1
- package/dist/shared/types/stepContract.js +4 -1
- package/dist/shared/types/stepContract.js.map +1 -1
- package/dist/shared/validation/findingsReport.d.ts.map +1 -1
- package/dist/shared/validation/findingsReport.js +13 -0
- package/dist/shared/validation/findingsReport.js.map +1 -1
- package/docs/audit-pkg/contracts.md +38 -2
- package/docs/audit-pkg/operator-guide.md +59 -4
- package/package.json +5 -5
- package/skills/audit-code/audit-code.prompt.md +1 -31
- package/skills/remediate-code/remediate-code.prompt.md +12 -6
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// sites-pinned: tests/remediate/host-handoff.test.ts, tests/remediate/host-handoff-corroboration.test.ts
|
|
2
|
+
import { SUBMISSION_ISSUE_CODES, WORKLOAD_ISSUE_CODES } from "audit-tools/shared";
|
|
3
|
+
export const CONFORMANCE_REVIEW_ISSUES = [
|
|
4
|
+
"conformance_review_required", "conformance_review_unavailable", "conformance_review_insufficient",
|
|
5
|
+
];
|
|
6
|
+
/**
|
|
7
|
+
* Remediation's issue vocabulary: the SHARED submission codes plus this draw's
|
|
8
|
+
* own domain corroboration codes.
|
|
9
|
+
*
|
|
10
|
+
* The submission half is imported, never restated — a submission that is
|
|
11
|
+
* missing, unparseable, contract-invalid, or a duplicate identity means exactly
|
|
12
|
+
* the same thing on both sides of the pipeline, and the two used to spell it
|
|
13
|
+
* differently (`result_missing` here, a bare `null` in the audit ingest). The
|
|
14
|
+
* git/worktree/test half stays here: audit has no analogue and dragging
|
|
15
|
+
* `commit_not_landed` into the shared core would suggest it could emit one.
|
|
16
|
+
*/
|
|
17
|
+
export const REMEDIATION_ISSUE_CODES = [
|
|
18
|
+
...SUBMISSION_ISSUE_CODES,
|
|
19
|
+
"workload_missing",
|
|
20
|
+
"workload_invalid",
|
|
21
|
+
"trusted_binding_missing",
|
|
22
|
+
"commit_missing",
|
|
23
|
+
"commit_not_landed",
|
|
24
|
+
"baseline_not_ancestor",
|
|
25
|
+
"changed_files_mismatch",
|
|
26
|
+
"run_start_dirty_overlap",
|
|
27
|
+
"required_test_failed",
|
|
28
|
+
/**
|
|
29
|
+
* A required test exceeded its deadline. DISTINCT from `required_test_failed`
|
|
30
|
+
* by code alone: a hung suite and a genuine red are different facts about the
|
|
31
|
+
* work, and telling them apart must not require parsing a joined message.
|
|
32
|
+
*/
|
|
33
|
+
"required_test_timed_out",
|
|
34
|
+
/**
|
|
35
|
+
* A required test produced more output than the capture buffer holds, so the
|
|
36
|
+
* runner killed it. NOT a verdict on the tests: the child was terminated by
|
|
37
|
+
* the capture cap, and whether the suite would have passed is unknown. It has
|
|
38
|
+
* its own code because it was previously indistinguishable from a hang — node
|
|
39
|
+
* kills an over-buffer child with a signal, which the old discriminator read
|
|
40
|
+
* as a deadline miss.
|
|
41
|
+
*/
|
|
42
|
+
"required_test_output_overflow",
|
|
43
|
+
/**
|
|
44
|
+
* A plan block declares a dependency id that exists in NO block of the plan.
|
|
45
|
+
* The block is unschedulable — never level 0 — and the producer bug is named
|
|
46
|
+
* rather than absorbed.
|
|
47
|
+
*/
|
|
48
|
+
"dependency_missing",
|
|
49
|
+
/**
|
|
50
|
+
* A block arrived outside the normalized write-scope / declared-command shape
|
|
51
|
+
* this boundary consumes (artifact:normalized-block-write-scope). Refused, not
|
|
52
|
+
* silently normalized: a silently sorted, deduped or re-rooted write scope
|
|
53
|
+
* hides the producer bug and widens what a host may touch.
|
|
54
|
+
*/
|
|
55
|
+
"block_contract_invalid",
|
|
56
|
+
/**
|
|
57
|
+
* A recovery-mode acceptance could not be marked on the submission ledger, so
|
|
58
|
+
* it was refused. An acceptance that used the relaxation MUST stay
|
|
59
|
+
* distinguishable from a clean one; an unrecordable mark is a refusal, never
|
|
60
|
+
* a silent acceptance.
|
|
61
|
+
*/
|
|
62
|
+
"recovery_unrecorded",
|
|
63
|
+
/**
|
|
64
|
+
* The repository HEAD moved between the recovery verb's unlocked test phase
|
|
65
|
+
* and its locked write phase, so the pre-computed test verdicts describe a
|
|
66
|
+
* tree that is no longer current. The whole recovery aborts.
|
|
67
|
+
*/
|
|
68
|
+
"tree_moved_between_phases",
|
|
69
|
+
/**
|
|
70
|
+
* The run's own WORKLOAD BINDING changed between the recovery verb's unlocked
|
|
71
|
+
* test phase and its locked write phase — the sibling of
|
|
72
|
+
* `tree_moved_between_phases` for a concurrent state writer that settles items
|
|
73
|
+
* and re-mints the binding without moving a commit. The pre-computed verdicts
|
|
74
|
+
* describe work that is no longer pending, so the whole recovery aborts.
|
|
75
|
+
*/
|
|
76
|
+
"state_moved_between_phases",
|
|
77
|
+
/**
|
|
78
|
+
* The work item's baseline commit is not in this repository, so nothing can
|
|
79
|
+
* be corroborated against it. The run's recorded state is at fault, not the
|
|
80
|
+
* result.
|
|
81
|
+
*/
|
|
82
|
+
"baseline_missing",
|
|
83
|
+
/**
|
|
84
|
+
* The work item's baseline commit exists but is no longer an ancestor of HEAD
|
|
85
|
+
* (history was rewritten under the run). The spawn-free `recover-ingest` verb
|
|
86
|
+
* is the named repair; no worker can make it.
|
|
87
|
+
*/
|
|
88
|
+
"baseline_orphaned",
|
|
89
|
+
/**
|
|
90
|
+
* `landed_commit` names a commit that cannot be this item's landed work: the
|
|
91
|
+
* baseline itself, or a commit whose diff against the baseline is empty.
|
|
92
|
+
*/
|
|
93
|
+
"landed_commit_invalid",
|
|
94
|
+
/**
|
|
95
|
+
* A result names a work item that the persisted workload binds but that is no
|
|
96
|
+
* longer pending (it settled, or its dependencies are not complete).
|
|
97
|
+
*/
|
|
98
|
+
"work_item_not_eligible",
|
|
99
|
+
// `workload_stale` is shared with the audit draw: its meaning and its remedy
|
|
100
|
+
// live beside `WORKLOAD_ISSUE_CODES`.
|
|
101
|
+
...WORKLOAD_ISSUE_CODES,
|
|
102
|
+
...CONFORMANCE_REVIEW_ISSUES,
|
|
103
|
+
];
|
|
104
|
+
//# sourceMappingURL=hostContracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hostContracts.js","sourceRoot":"","sources":["../../../../src/remediate/steps/dispatch/hostContracts.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAA+D,MAAM,oBAAoB,CAAC;AAK/I,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,6BAA6B,EAAE,gCAAgC,EAAE,iCAAiC;CAC1F,CAAC;AAuDX;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,GAAG,sBAAsB;IACzB,kBAAkB;IAClB,kBAAkB;IAClB,yBAAyB;IACzB,gBAAgB;IAChB,mBAAmB;IACnB,uBAAuB;IACvB,wBAAwB;IACxB,yBAAyB;IACzB,sBAAsB;IACtB;;;;OAIG;IACH,yBAAyB;IACzB;;;;;;;OAOG;IACH,+BAA+B;IAC/B;;;;OAIG;IACH,oBAAoB;IACpB;;;;;OAKG;IACH,wBAAwB;IACxB;;;;;OAKG;IACH,qBAAqB;IACrB;;;;OAIG;IACH,2BAA2B;IAC3B;;;;;;OAMG;IACH,4BAA4B;IAC5B;;;;OAIG;IACH,kBAAkB;IAClB;;;;OAIG;IACH,mBAAmB;IACnB;;;OAGG;IACH,uBAAuB;IACvB;;;OAGG;IACH,wBAAwB;IACxB,6EAA6E;IAC7E,sCAAsC;IACtC,GAAG,oBAAoB;IACvB,GAAG,yBAAyB;CACpB,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { type IngestionCheckId } from "audit-tools/shared";
|
|
2
|
+
import type { CurrentRemediationHostState, RemediationHostWorkItem, RemediationHostResult, RemediationHostIngestIssue } from "./hostContracts.js";
|
|
3
|
+
import type { RemediationRequiredTestVerdicts } from "./requiredTests.js";
|
|
4
|
+
type CorroboratedHostResult = {
|
|
5
|
+
readonly ok: true;
|
|
6
|
+
readonly changedFiles: readonly string[];
|
|
7
|
+
/**
|
|
8
|
+
* True only when the baseline→landed ancestry check was WAIVED under an
|
|
9
|
+
* orphaned baseline. The caller must record the acceptance on the
|
|
10
|
+
* submission ledger before it lands.
|
|
11
|
+
*/
|
|
12
|
+
readonly usedRecovery: boolean;
|
|
13
|
+
} | {
|
|
14
|
+
readonly ok: false;
|
|
15
|
+
readonly code: RemediationHostIngestIssue["code"];
|
|
16
|
+
readonly check: IngestionCheckId;
|
|
17
|
+
readonly message: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Corroborate an explicit `resolved_no_change` decision against the repository.
|
|
21
|
+
*
|
|
22
|
+
* A no-change decision used to be accepted on its evidence STRINGS alone, with
|
|
23
|
+
* only the required tests re-run — so a host that had in fact edited and then
|
|
24
|
+
* declared "nothing to do" was recorded as verified-no-change, and the edit
|
|
25
|
+
* rode into the run unattributed. The claim is mechanically falsifiable, so it
|
|
26
|
+
* is FALSIFIED.
|
|
27
|
+
*
|
|
28
|
+
* The scope of the falsification is the FULL write-scope corroboration every
|
|
29
|
+
* other acceptance path gets, NOT a narrowing to this item's `allowed_files`.
|
|
30
|
+
* `corroborateHostResult` refuses a landed commit that touched anything outside
|
|
31
|
+
* `allowed_files`; a no-change decision that narrowed the check to files INSIDE
|
|
32
|
+
* `allowed_files` would be the inverse rule — the out-of-scope edit, the more
|
|
33
|
+
* serious of the two, would be the one silently admitted. So EVERY path the
|
|
34
|
+
* tree shows as moved since the workload baseline refuses the claim.
|
|
35
|
+
*
|
|
36
|
+
* `excusedPaths` is the only exemption, and it is ground truth rather than the
|
|
37
|
+
* host's word: `run_start_dirty` (already dirty before the run began, so not
|
|
38
|
+
* evidence that this host edited anything — and because it is captured from
|
|
39
|
+
* `stagedAndUntracked`, it excuses pre-existing UNTRACKED strays too) unioned
|
|
40
|
+
* with the accepted edit surface — `applied_edit_surface` plus whatever this
|
|
41
|
+
* same ingest has already corroborated and accepted, so a sibling work item's
|
|
42
|
+
* legitimately landed files do not falsify this item's claim.
|
|
43
|
+
*
|
|
44
|
+
* Fails CLOSED, like every other corroboration here: a git that cannot answer
|
|
45
|
+
* refuses the claim rather than admitting it.
|
|
46
|
+
*/
|
|
47
|
+
export declare function corroborateNoChangeClaim(params: {
|
|
48
|
+
readonly root: string;
|
|
49
|
+
readonly workItem: RemediationHostWorkItem;
|
|
50
|
+
/** Repo-relative paths whose movement is already accounted for. */
|
|
51
|
+
readonly excusedPaths: ReadonlySet<string>;
|
|
52
|
+
}): Promise<{
|
|
53
|
+
readonly ok: true;
|
|
54
|
+
} | {
|
|
55
|
+
readonly ok: false;
|
|
56
|
+
readonly code: RemediationHostIngestIssue["code"];
|
|
57
|
+
readonly check: IngestionCheckId;
|
|
58
|
+
readonly message: string;
|
|
59
|
+
}>;
|
|
60
|
+
export declare function corroborateHostResult(params: {
|
|
61
|
+
readonly root: string;
|
|
62
|
+
readonly state: CurrentRemediationHostState;
|
|
63
|
+
readonly workItem: RemediationHostWorkItem;
|
|
64
|
+
readonly result: RemediationHostResult;
|
|
65
|
+
readonly verdicts: RemediationRequiredTestVerdicts | null;
|
|
66
|
+
/** See `ingestRemediationHostResults`'s `recovery` option. */
|
|
67
|
+
readonly recovery: boolean;
|
|
68
|
+
}): Promise<CorroboratedHostResult>;
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=hostCorroboration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hostCorroboration.d.ts","sourceRoot":"","sources":["../../../../src/remediate/steps/dispatch/hostCorroboration.ts"],"names":[],"mappings":"AACA,OAAO,EAAqI,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC9L,OAAO,KAAK,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAClJ,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAsB1E,KAAK,sBAAsB,GACvB;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC,GACD;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAsLN;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAC3C,mEAAmE;IACnE,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC5C,GAAG,OAAO,CACP;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAA;CAAE,GACrB;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CACJ,CA+CA;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,2BAA2B,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,+BAA+B,GAAG,IAAI,CAAC;IAC1D,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAgIlC"}
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
// sites-pinned: tests/remediate/host-handoff-corroboration.test.ts
|
|
2
|
+
import { AUDIT_TOOLS_DIRNAME, compareCodeUnits, isGitRepo, normalizeRepoPath, repoRelativePath, runTrackedAsync, TRACKED_CHILD_DEADLINE_MS } from "audit-tools/shared";
|
|
3
|
+
import { rerunRequiredTests, requiredTestIssue } from "./requiredTests.js";
|
|
4
|
+
function pathIsAllowedByWriteScope(root, candidate, allowedFiles) {
|
|
5
|
+
let normalized;
|
|
6
|
+
try {
|
|
7
|
+
normalized = repoRelativePath(root, candidate, "landed file");
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
if (normalized !== candidate)
|
|
13
|
+
return false;
|
|
14
|
+
return allowedFiles.some((allowed) => allowed.endsWith("/")
|
|
15
|
+
? normalized.startsWith(allowed)
|
|
16
|
+
: normalized === allowed);
|
|
17
|
+
}
|
|
18
|
+
// The corroboration probes below run while the remediation state lock (and, on
|
|
19
|
+
// the fold path, the phase lock) is held — ASYNC with the shared deadline
|
|
20
|
+
// (INV-SSF), so the held lock's mtime heartbeat keeps beating through each
|
|
21
|
+
// probe and a git that never answers cannot hang the ingest.
|
|
22
|
+
async function gitCommitExists(root, commit) {
|
|
23
|
+
const result = await runTrackedAsync(["git", "rev-parse", "--verify", "--quiet", `${commit}^{commit}`], { cwd: root, encoding: "utf8", timeout: TRACKED_CHILD_DEADLINE_MS });
|
|
24
|
+
return !result.error && result.status === 0;
|
|
25
|
+
}
|
|
26
|
+
// INV-WTS-3 (landed-node ancestry): a landed node's commit must be an ancestor
|
|
27
|
+
// of the ref it claims to have landed on. `git merge-base --is-ancestor` exits 0
|
|
28
|
+
// exactly when that holds.
|
|
29
|
+
async function gitCommitIsAncestor(root, ancestor, descendant) {
|
|
30
|
+
const result = await runTrackedAsync(["git", "merge-base", "--is-ancestor", ancestor, descendant], { cwd: root, encoding: "utf8", timeout: TRACKED_CHILD_DEADLINE_MS });
|
|
31
|
+
return !result.error && result.status === 0;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Is this commit ORPHANED — unreachable from anything the repository still
|
|
35
|
+
* keeps?
|
|
36
|
+
*
|
|
37
|
+
* "Not an ancestor of HEAD" is NOT orphanhood. A baseline sitting on an
|
|
38
|
+
* unmerged `feature` branch while the work landed on trunk fails the ancestry
|
|
39
|
+
* test exactly like a rewritten-away commit does, and treating that as orphaned
|
|
40
|
+
* would hand the relaxation to the ordinary cross-branch case — precisely the
|
|
41
|
+
* stale-worker situation the ancestry check exists to catch.
|
|
42
|
+
*
|
|
43
|
+
* So orphanhood is the CONJUNCTION of two probes: `git for-each-ref --contains`
|
|
44
|
+
* lists every branch/tag/remote ref whose history contains the commit (empty
|
|
45
|
+
* output = no live ref keeps it), and the HEAD ancestry check rides alongside
|
|
46
|
+
* it.
|
|
47
|
+
*
|
|
48
|
+
* A THIRD source of reachability sits outside `for-each-ref` entirely: the
|
|
49
|
+
* HEADs of this repository's OTHER worktrees, checked into no ref at all. In a
|
|
50
|
+
* linked worktree git DETACHES HEAD (or parks a per-worktree branch), so a
|
|
51
|
+
* baseline that is the live HEAD of a sibling worktree — exactly the state a
|
|
52
|
+
* parallel remediation lane is in — would be reported as contained by nothing,
|
|
53
|
+
* i.e. orphaned, and the relaxation would be handed out for a commit the
|
|
54
|
+
* repository is actively keeping. `git worktree list --porcelain` enumerates
|
|
55
|
+
* every worktree with its current HEAD, so it is read and compared. The linked
|
|
56
|
+
* worktree's own HEAD is included by this probe, which is why the ordinary
|
|
57
|
+
* detached-HEAD case needs no separate arm.
|
|
58
|
+
*
|
|
59
|
+
* RESIDUAL, deliberately not closed: that probe compares HEAD for EQUALITY, so
|
|
60
|
+
* it covers a worktree detached at the baseline ONLY when its HEAD *is* the
|
|
61
|
+
* baseline. A sibling worktree detached at a DESCENDANT of the baseline — a
|
|
62
|
+
* lane that landed further commits on top — keeps the baseline reachable while
|
|
63
|
+
* matching no ref and no worktree HEAD, and is still reported orphaned. Closing
|
|
64
|
+
* it means an ancestry probe per enumerated worktree HEAD; the residual is
|
|
65
|
+
* stated here rather than left as an implied full cover.
|
|
66
|
+
*
|
|
67
|
+
* A failed scan is not evidence of orphanhood — any probe that cannot answer
|
|
68
|
+
* fails closed, so a git that cannot answer never unlocks the relaxation.
|
|
69
|
+
*/
|
|
70
|
+
async function gitCommitIsOrphaned(root, commit) {
|
|
71
|
+
if (await gitCommitIsAncestor(root, commit, "HEAD"))
|
|
72
|
+
return false;
|
|
73
|
+
const result = await runTrackedAsync(["git", "for-each-ref", "--contains", commit, "--format=%(refname)"], { cwd: root, encoding: "utf8", timeout: TRACKED_CHILD_DEADLINE_MS });
|
|
74
|
+
if (result.error || result.status !== 0)
|
|
75
|
+
return false;
|
|
76
|
+
if (result.stdout.trim().length > 0)
|
|
77
|
+
return false;
|
|
78
|
+
// Reached only when no REF keeps the commit. Every worktree HEAD is then
|
|
79
|
+
// checked, so the detached (and per-worktree-branch) HEADs git does not
|
|
80
|
+
// enumerate as refs are still seen.
|
|
81
|
+
const worktrees = await runTrackedAsync(["git", "worktree", "list", "--porcelain"], { cwd: root, encoding: "utf8", timeout: TRACKED_CHILD_DEADLINE_MS });
|
|
82
|
+
if (worktrees.error || worktrees.status !== 0)
|
|
83
|
+
return false;
|
|
84
|
+
return !worktrees.stdout
|
|
85
|
+
.split("\n")
|
|
86
|
+
.filter((line) => line.startsWith("HEAD "))
|
|
87
|
+
.some((line) => line.slice("HEAD ".length).trim() === commit);
|
|
88
|
+
}
|
|
89
|
+
async function gitChangedFilesOfCommit(root, commit) {
|
|
90
|
+
const result = await runTrackedAsync([
|
|
91
|
+
"git",
|
|
92
|
+
"diff-tree",
|
|
93
|
+
"--root",
|
|
94
|
+
"--no-commit-id",
|
|
95
|
+
"--name-only",
|
|
96
|
+
"-r",
|
|
97
|
+
"-z",
|
|
98
|
+
commit,
|
|
99
|
+
], { cwd: root, encoding: "utf8", timeout: TRACKED_CHILD_DEADLINE_MS });
|
|
100
|
+
if (result.error || result.status !== 0)
|
|
101
|
+
return null;
|
|
102
|
+
return [...new Set(result.stdout.split("\0").filter(Boolean))].sort(compareCodeUnits);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Every repo-relative path the tree shows as touched since `baseline` — the
|
|
106
|
+
* commits baseline→HEAD, the working tree's own deviation from HEAD (staged and
|
|
107
|
+
* unstaged alike), and the untracked files git considers repository content.
|
|
108
|
+
*
|
|
109
|
+
* All three legs are needed to falsify a no-change claim, and they enumerate the
|
|
110
|
+
* three ways a host can have edited: committed (leg 1), edited a TRACKED file
|
|
111
|
+
* and left it uncommitted (leg 2), and CREATED a file (leg 3). A new `src/*.ts`
|
|
112
|
+
* is a real edit and the most natural shape a remediation takes; without leg 3
|
|
113
|
+
* the cheapest way to smuggle one past a no-change claim was simply never to
|
|
114
|
+
* `git add` it. `null` means git could not answer, which callers must treat as
|
|
115
|
+
* "cannot corroborate" rather than as "nothing changed".
|
|
116
|
+
*
|
|
117
|
+
* The untracked leg honours `--exclude-standard`, so it enumerates only what git
|
|
118
|
+
* itself treats as content — a repo's `.gitignore`d build and coverage output is
|
|
119
|
+
* already invisible to it. Two exemptions cover the remainder, both ground
|
|
120
|
+
* truth rather than the host's word:
|
|
121
|
+
*
|
|
122
|
+
* - THIS TOOL'S OWN ARTIFACT TREE ({@link AUDIT_TOOLS_DIRNAME}) is subtracted
|
|
123
|
+
* here, explicitly. In a real repository the tool writes a managed
|
|
124
|
+
* `.gitignore` block covering it, so it never reaches this probe at all; the
|
|
125
|
+
* explicit subtraction is what makes that independent of whether the block
|
|
126
|
+
* has been written yet, so a bare root (a fixture, a first run) cannot
|
|
127
|
+
* manufacture a false refusal out of the tool's own workload, prompt and
|
|
128
|
+
* result documents.
|
|
129
|
+
* - PRE-EXISTING untracked strays are excused by the caller's `excusedPaths`,
|
|
130
|
+
* for free: `run_start_dirty` is captured from `stagedAndUntracked` before
|
|
131
|
+
* any remediation edit exists, so it already enumerates untracked files.
|
|
132
|
+
* What survives both is an untracked file that appeared DURING the run — the
|
|
133
|
+
* only untracked class that can be this host's edit.
|
|
134
|
+
*/
|
|
135
|
+
async function gitChangedFilesSince(root, baseline) {
|
|
136
|
+
const files = new Set();
|
|
137
|
+
for (const args of [
|
|
138
|
+
// baseline → HEAD: what the host committed.
|
|
139
|
+
["diff", "--name-only", "-z", baseline, "HEAD"],
|
|
140
|
+
// HEAD → working tree: what the host edited and did not commit.
|
|
141
|
+
["diff", "--name-only", "-z", "HEAD"],
|
|
142
|
+
// Never added: what the host CREATED. `--exclude-standard` keeps git's own
|
|
143
|
+
// ignore rules authoritative.
|
|
144
|
+
["ls-files", "--others", "--exclude-standard", "-z"],
|
|
145
|
+
]) {
|
|
146
|
+
const probe = await runTrackedAsync(["git", ...args], {
|
|
147
|
+
cwd: root,
|
|
148
|
+
encoding: "utf8",
|
|
149
|
+
timeout: TRACKED_CHILD_DEADLINE_MS,
|
|
150
|
+
});
|
|
151
|
+
if (probe.error || probe.status !== 0)
|
|
152
|
+
return null;
|
|
153
|
+
for (const file of probe.stdout.split("\0").filter(Boolean)) {
|
|
154
|
+
if (isAuditToolsArtifactPath(file))
|
|
155
|
+
continue;
|
|
156
|
+
files.add(file);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return [...files].sort(compareCodeUnits);
|
|
160
|
+
}
|
|
161
|
+
/** Whether a repo-relative path lives inside this tool's own artifact tree. */
|
|
162
|
+
function isAuditToolsArtifactPath(path) {
|
|
163
|
+
const normalized = normalizeRepoPath(path);
|
|
164
|
+
return (normalized === AUDIT_TOOLS_DIRNAME ||
|
|
165
|
+
normalized.startsWith(`${AUDIT_TOOLS_DIRNAME}/`));
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Corroborate an explicit `resolved_no_change` decision against the repository.
|
|
169
|
+
*
|
|
170
|
+
* A no-change decision used to be accepted on its evidence STRINGS alone, with
|
|
171
|
+
* only the required tests re-run — so a host that had in fact edited and then
|
|
172
|
+
* declared "nothing to do" was recorded as verified-no-change, and the edit
|
|
173
|
+
* rode into the run unattributed. The claim is mechanically falsifiable, so it
|
|
174
|
+
* is FALSIFIED.
|
|
175
|
+
*
|
|
176
|
+
* The scope of the falsification is the FULL write-scope corroboration every
|
|
177
|
+
* other acceptance path gets, NOT a narrowing to this item's `allowed_files`.
|
|
178
|
+
* `corroborateHostResult` refuses a landed commit that touched anything outside
|
|
179
|
+
* `allowed_files`; a no-change decision that narrowed the check to files INSIDE
|
|
180
|
+
* `allowed_files` would be the inverse rule — the out-of-scope edit, the more
|
|
181
|
+
* serious of the two, would be the one silently admitted. So EVERY path the
|
|
182
|
+
* tree shows as moved since the workload baseline refuses the claim.
|
|
183
|
+
*
|
|
184
|
+
* `excusedPaths` is the only exemption, and it is ground truth rather than the
|
|
185
|
+
* host's word: `run_start_dirty` (already dirty before the run began, so not
|
|
186
|
+
* evidence that this host edited anything — and because it is captured from
|
|
187
|
+
* `stagedAndUntracked`, it excuses pre-existing UNTRACKED strays too) unioned
|
|
188
|
+
* with the accepted edit surface — `applied_edit_surface` plus whatever this
|
|
189
|
+
* same ingest has already corroborated and accepted, so a sibling work item's
|
|
190
|
+
* legitimately landed files do not falsify this item's claim.
|
|
191
|
+
*
|
|
192
|
+
* Fails CLOSED, like every other corroboration here: a git that cannot answer
|
|
193
|
+
* refuses the claim rather than admitting it.
|
|
194
|
+
*/
|
|
195
|
+
export async function corroborateNoChangeClaim(params) {
|
|
196
|
+
const { root, workItem, excusedPaths } = params;
|
|
197
|
+
if (!(await isGitRepo(root)))
|
|
198
|
+
return { ok: true };
|
|
199
|
+
const baseline = workItem.baseline_commit;
|
|
200
|
+
if (!(await gitCommitExists(root, baseline))) {
|
|
201
|
+
return {
|
|
202
|
+
ok: false,
|
|
203
|
+
code: "commit_missing",
|
|
204
|
+
check: "no_change_corroboration",
|
|
205
|
+
message: "resolved_no_change cannot be corroborated: baseline_commit does not resolve to a real commit",
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
const changed = await gitChangedFilesSince(root, baseline);
|
|
209
|
+
if (changed === null) {
|
|
210
|
+
return {
|
|
211
|
+
ok: false,
|
|
212
|
+
code: "commit_missing",
|
|
213
|
+
check: "no_change_corroboration",
|
|
214
|
+
message: "resolved_no_change cannot be corroborated: git could not enumerate the changes since the workload baseline",
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
const violating = changed.filter((path) => !excusedPaths.has(normalizeRepoPath(path)));
|
|
218
|
+
if (violating.length > 0) {
|
|
219
|
+
const inScope = violating.filter((path) => pathIsAllowedByWriteScope(root, path, workItem.allowed_files));
|
|
220
|
+
const outOfScope = violating.filter((path) => !pathIsAllowedByWriteScope(root, path, workItem.allowed_files));
|
|
221
|
+
return {
|
|
222
|
+
ok: false,
|
|
223
|
+
code: "changed_files_mismatch",
|
|
224
|
+
check: "no_change_corroboration",
|
|
225
|
+
message: "resolved_no_change is contradicted by the tree — these files changed since the " +
|
|
226
|
+
`workload baseline: ${violating.join(", ")}` +
|
|
227
|
+
(outOfScope.length > 0
|
|
228
|
+
? ` (outside the prompt-bound allowed_files: ${outOfScope.join(", ")}` +
|
|
229
|
+
(inScope.length > 0 ? `; inside: ${inScope.join(", ")})` : ")")
|
|
230
|
+
: ""),
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
return { ok: true };
|
|
234
|
+
}
|
|
235
|
+
export async function corroborateHostResult(params) {
|
|
236
|
+
const { root, state, workItem, result, verdicts } = params;
|
|
237
|
+
const baseline = workItem.baseline_commit;
|
|
238
|
+
const landed = result.landed_commit;
|
|
239
|
+
let usedRecovery = false;
|
|
240
|
+
if (!(await gitCommitExists(root, baseline))) {
|
|
241
|
+
return {
|
|
242
|
+
ok: false,
|
|
243
|
+
code: "baseline_missing",
|
|
244
|
+
check: "landed_commit",
|
|
245
|
+
message: "the work item's baseline_commit is not in this repository",
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
if (!(await gitCommitExists(root, landed))) {
|
|
249
|
+
return {
|
|
250
|
+
ok: false,
|
|
251
|
+
code: "commit_missing",
|
|
252
|
+
check: "landed_commit",
|
|
253
|
+
message: "landed_commit is not a commit in this repository",
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
if (landed === baseline) {
|
|
257
|
+
return {
|
|
258
|
+
ok: false,
|
|
259
|
+
code: "landed_commit_invalid",
|
|
260
|
+
check: "landed_commit",
|
|
261
|
+
message: "landed_commit is the baseline commit; name the commit that carries this item's edits",
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
if (!(await gitCommitIsAncestor(root, baseline, landed))) {
|
|
265
|
+
if (!params.recovery) {
|
|
266
|
+
// An ORPHANED baseline (no ref contains it, HEAD cannot reach it) is a
|
|
267
|
+
// fault in the run, not in the work: no commit could ever descend from
|
|
268
|
+
// it. The spawn-free recovery verb is its named repair.
|
|
269
|
+
if (await gitCommitIsOrphaned(root, baseline)) {
|
|
270
|
+
return {
|
|
271
|
+
ok: false,
|
|
272
|
+
code: "baseline_orphaned",
|
|
273
|
+
check: "landed_commit",
|
|
274
|
+
message: "the work item's baseline_commit is orphaned (history was rewritten under the run); " +
|
|
275
|
+
"the operator can run `recover-ingest` to accept the landed work",
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
return {
|
|
279
|
+
ok: false,
|
|
280
|
+
code: "baseline_not_ancestor",
|
|
281
|
+
check: "landed_commit",
|
|
282
|
+
message: "the trusted workload baseline is not an ancestor of the claimed landed commit",
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
// The relaxation is precondition-bound: it applies ONLY when the trusted
|
|
286
|
+
// baseline is genuinely ORPHANED — contained by no ref AND unreachable from
|
|
287
|
+
// HEAD (see gitCommitIsOrphaned). That is the one state in which no landed
|
|
288
|
+
// commit could ever descend from it, so the item is unacceptable under
|
|
289
|
+
// every preparable binding. A baseline the repository still keeps — on an
|
|
290
|
+
// unmerged branch, a tag, a remote ref, or HEAD itself — is a HEALTHY
|
|
291
|
+
// binding, and a landed commit that does not descend from it is exactly the
|
|
292
|
+
// stale-worker case the ancestry check exists to catch; recovery refuses it
|
|
293
|
+
// identically to the normal lane.
|
|
294
|
+
if (!(await gitCommitIsOrphaned(root, baseline))) {
|
|
295
|
+
return {
|
|
296
|
+
ok: false,
|
|
297
|
+
code: "baseline_not_ancestor",
|
|
298
|
+
check: "landed_commit",
|
|
299
|
+
message: "the trusted workload baseline is not an ancestor of the claimed landed commit, " +
|
|
300
|
+
"and the baseline is NOT orphaned (a ref still contains it, or it is reachable " +
|
|
301
|
+
"from HEAD), so the stale-worker protection stands and recovery cannot waive it",
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
usedRecovery = true;
|
|
305
|
+
}
|
|
306
|
+
if (!(await gitCommitIsAncestor(root, landed, "HEAD"))) {
|
|
307
|
+
return {
|
|
308
|
+
ok: false,
|
|
309
|
+
code: "commit_not_landed",
|
|
310
|
+
check: "landed_commit",
|
|
311
|
+
message: "landed_commit is not reachable from the repository HEAD",
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
const actualFiles = await gitChangedFilesOfCommit(root, landed);
|
|
315
|
+
if (!actualFiles || actualFiles.length === 0) {
|
|
316
|
+
return {
|
|
317
|
+
ok: false,
|
|
318
|
+
code: "landed_commit_invalid",
|
|
319
|
+
check: "landed_commit",
|
|
320
|
+
message: "landed_commit changes no file; name the commit that carries this item's edits",
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
const outOfScope = actualFiles.filter((path) => !pathIsAllowedByWriteScope(root, path, workItem.allowed_files));
|
|
324
|
+
if (outOfScope.length > 0) {
|
|
325
|
+
return {
|
|
326
|
+
ok: false,
|
|
327
|
+
code: "changed_files_mismatch",
|
|
328
|
+
check: "write_scope",
|
|
329
|
+
message: "the landed commit changed files outside the prompt-bound allowed_files: " +
|
|
330
|
+
outOfScope.join(", "),
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
const runStartDirty = new Set((state.run_start_dirty ?? []).map(normalizeRepoPath));
|
|
334
|
+
const dirtyOverlap = actualFiles.filter((path) => runStartDirty.has(normalizeRepoPath(path)));
|
|
335
|
+
if (dirtyOverlap.length > 0) {
|
|
336
|
+
return {
|
|
337
|
+
ok: false,
|
|
338
|
+
code: "run_start_dirty_overlap",
|
|
339
|
+
check: "run_start_dirt",
|
|
340
|
+
message: `landed files overlap pre-existing run-start dirt: ${dirtyOverlap.join(", ")}`,
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
const failedTests = await rerunRequiredTests(root, workItem.required_tests, verdicts);
|
|
344
|
+
if (failedTests.length > 0) {
|
|
345
|
+
const issue = requiredTestIssue(workItem, failedTests);
|
|
346
|
+
return { ok: false, code: issue.code, check: "required_tests", message: issue.message };
|
|
347
|
+
}
|
|
348
|
+
return { ok: true, changedFiles: actualFiles, usedRecovery };
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=hostCorroboration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hostCorroboration.js","sourceRoot":"","sources":["../../../../src/remediate/steps/dispatch/hostCorroboration.ts"],"names":[],"mappings":"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"}
|