audit-tools 0.52.5 → 0.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/audit/cli/auditStep.d.ts +1 -1
- package/dist/audit/cli/conceptualDispatch.d.ts +2 -2
- package/dist/audit/cli/conceptualDispatch.d.ts.map +1 -1
- package/dist/audit/cli/conceptualDispatch.js +6 -5
- 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 +3 -16
- package/dist/audit/cli/confirmIntentStep.js.map +1 -1
- package/dist/audit/cli/dispatch/hostHandoff.d.ts +2 -0
- package/dist/audit/cli/dispatch/hostHandoff.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/hostHandoff.js +22 -1
- package/dist/audit/cli/dispatch/hostHandoff.js.map +1 -1
- package/dist/audit/cli/dispatch/packetFilter.d.ts +1 -1
- package/dist/audit/cli/dispatch/packetFilter.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/packetFilter.js +1 -1
- package/dist/audit/cli/dispatch/packetFilter.js.map +1 -1
- package/dist/audit/cli/functionalPreflight.d.ts.map +1 -1
- package/dist/audit/cli/functionalPreflight.js +6 -3
- package/dist/audit/cli/functionalPreflight.js.map +1 -1
- package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
- package/dist/audit/cli/nextStepCommand.js +57 -34
- package/dist/audit/cli/nextStepCommand.js.map +1 -1
- package/dist/audit/cli/nextStepHelpers.d.ts +3 -3
- package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
- package/dist/audit/cli/nextStepHelpers.js +52 -77
- package/dist/audit/cli/nextStepHelpers.js.map +1 -1
- package/dist/audit/cli/prompts.d.ts +1 -2
- package/dist/audit/cli/prompts.d.ts.map +1 -1
- package/dist/audit/cli/prompts.js +2 -12
- package/dist/audit/cli/prompts.js.map +1 -1
- package/dist/audit/cli/sampleRunCommand.d.ts +2 -2
- package/dist/audit/cli/semanticReviewStep.d.ts +11 -2
- package/dist/audit/cli/semanticReviewStep.d.ts.map +1 -1
- package/dist/audit/cli/semanticReviewStep.js +14 -10
- package/dist/audit/cli/semanticReviewStep.js.map +1 -1
- package/dist/audit/contracts/workerSchemas.d.ts +14 -14
- package/dist/audit/contracts/wrapperResponse.d.ts +6 -6
- package/dist/audit/extractors/graphRoutes.d.ts.map +1 -1
- package/dist/audit/extractors/graphRoutes.js +1 -3
- package/dist/audit/extractors/graphRoutes.js.map +1 -1
- package/dist/audit/io/artifacts.d.ts.map +1 -1
- package/dist/audit/io/artifacts.js +2 -3
- package/dist/audit/io/artifacts.js.map +1 -1
- package/dist/audit/orchestrator/advance.d.ts.map +1 -1
- package/dist/audit/orchestrator/advance.js +21 -1
- package/dist/audit/orchestrator/advance.js.map +1 -1
- package/dist/audit/orchestrator/architectureDiscovery.d.ts +25 -0
- package/dist/audit/orchestrator/architectureDiscovery.d.ts.map +1 -0
- package/dist/audit/orchestrator/architectureDiscovery.js +193 -0
- package/dist/audit/orchestrator/architectureDiscovery.js.map +1 -0
- package/dist/audit/orchestrator/dependencyMap.d.ts +20 -0
- package/dist/audit/orchestrator/dependencyMap.d.ts.map +1 -1
- package/dist/audit/orchestrator/dependencyMap.js +47 -0
- package/dist/audit/orchestrator/dependencyMap.js.map +1 -1
- package/dist/audit/orchestrator/dependencySlices.d.ts.map +1 -1
- package/dist/audit/orchestrator/dependencySlices.js +37 -3
- package/dist/audit/orchestrator/dependencySlices.js.map +1 -1
- package/dist/audit/orchestrator/designReviewProjection.d.ts +2 -6
- package/dist/audit/orchestrator/designReviewProjection.d.ts.map +1 -1
- package/dist/audit/orchestrator/designReviewProjection.js +2 -6
- package/dist/audit/orchestrator/designReviewProjection.js.map +1 -1
- package/dist/audit/orchestrator/designReviewPrompt.d.ts +2 -2
- package/dist/audit/orchestrator/designReviewPrompt.js +2 -2
- package/dist/audit/orchestrator/designReviewSnapshot.d.ts +2 -3
- package/dist/audit/orchestrator/designReviewSnapshot.d.ts.map +1 -1
- package/dist/audit/orchestrator/designReviewSnapshot.js +2 -3
- package/dist/audit/orchestrator/designReviewSnapshot.js.map +1 -1
- package/dist/audit/orchestrator/executorRunners.d.ts.map +1 -1
- package/dist/audit/orchestrator/executorRunners.js +1 -22
- package/dist/audit/orchestrator/executorRunners.js.map +1 -1
- package/dist/audit/orchestrator/executors.d.ts.map +1 -1
- package/dist/audit/orchestrator/executors.js +0 -12
- package/dist/audit/orchestrator/executors.js.map +1 -1
- package/dist/audit/orchestrator/ingestionExecutors.d.ts.map +1 -1
- package/dist/audit/orchestrator/ingestionExecutors.js +38 -37
- package/dist/audit/orchestrator/ingestionExecutors.js.map +1 -1
- package/dist/audit/orchestrator/nextStep.d.ts +2 -28
- package/dist/audit/orchestrator/nextStep.d.ts.map +1 -1
- package/dist/audit/orchestrator/nextStep.js +4 -37
- package/dist/audit/orchestrator/nextStep.js.map +1 -1
- package/dist/audit/orchestrator/obligationDerive.d.ts +2 -3
- package/dist/audit/orchestrator/obligationDerive.d.ts.map +1 -1
- package/dist/audit/orchestrator/obligationDerive.js +2 -3
- package/dist/audit/orchestrator/obligationDerive.js.map +1 -1
- package/dist/audit/orchestrator/pendingTasks.d.ts +2 -0
- package/dist/audit/orchestrator/pendingTasks.d.ts.map +1 -1
- package/dist/audit/orchestrator/pendingTasks.js +5 -1
- package/dist/audit/orchestrator/pendingTasks.js.map +1 -1
- package/dist/audit/orchestrator/planningExecutors.d.ts.map +1 -1
- package/dist/audit/orchestrator/planningExecutors.js +9 -0
- package/dist/audit/orchestrator/planningExecutors.js.map +1 -1
- package/dist/audit/orchestrator/requeueCommand.d.ts +1 -1
- package/dist/audit/orchestrator/resultBaseline.d.ts +5 -5
- package/dist/audit/orchestrator/resultBaseline.d.ts.map +1 -1
- package/dist/audit/orchestrator/resultBaseline.js +24 -47
- package/dist/audit/orchestrator/resultBaseline.js.map +1 -1
- package/dist/audit/orchestrator/selectiveDeepening/findingFollowup.d.ts.map +1 -1
- package/dist/audit/orchestrator/selectiveDeepening/findingFollowup.js +2 -0
- package/dist/audit/orchestrator/selectiveDeepening/findingFollowup.js.map +1 -1
- package/dist/audit/orchestrator/staleness.d.ts.map +1 -1
- package/dist/audit/orchestrator/staleness.js +14 -10
- package/dist/audit/orchestrator/staleness.js.map +1 -1
- package/dist/audit/orchestrator/state.js +1 -1
- package/dist/audit/orchestrator/state.js.map +1 -1
- package/dist/audit/orchestrator/synthesisExecutors.d.ts.map +1 -1
- package/dist/audit/orchestrator/synthesisExecutors.js +3 -0
- package/dist/audit/orchestrator/synthesisExecutors.js.map +1 -1
- package/dist/audit/types/auditState.d.ts +6 -6
- package/dist/audit/types/flowCoverage.d.ts +6 -6
- package/dist/audit/types.d.ts +24 -13
- package/dist/audit/types.d.ts.map +1 -1
- package/dist/audit/types.js +92 -11
- package/dist/audit/types.js.map +1 -1
- package/dist/remediate/contractPipeline/executionPlan.d.ts +1908 -0
- package/dist/remediate/contractPipeline/executionPlan.d.ts.map +1 -0
- package/dist/remediate/contractPipeline/executionPlan.js +467 -0
- package/dist/remediate/contractPipeline/executionPlan.js.map +1 -0
- package/dist/remediate/contractPipeline/runtimePlanAuthority.d.ts +12 -0
- package/dist/remediate/contractPipeline/runtimePlanAuthority.d.ts.map +1 -0
- package/dist/remediate/contractPipeline/runtimePlanAuthority.js +41 -0
- package/dist/remediate/contractPipeline/runtimePlanAuthority.js.map +1 -0
- package/dist/remediate/dedup/crossLensDedup.d.ts +3 -16
- package/dist/remediate/dedup/crossLensDedup.d.ts.map +1 -1
- package/dist/remediate/dedup/crossLensDedup.js +2 -32
- package/dist/remediate/dedup/crossLensDedup.js.map +1 -1
- package/dist/remediate/index.d.ts +2 -19
- package/dist/remediate/index.d.ts.map +1 -1
- package/dist/remediate/index.js +22 -138
- package/dist/remediate/index.js.map +1 -1
- package/dist/remediate/intake.d.ts +10 -10
- package/dist/remediate/intent/intentOrdering.d.ts +6 -8
- package/dist/remediate/intent/intentOrdering.d.ts.map +1 -1
- package/dist/remediate/intent/intentOrdering.js +24 -47
- package/dist/remediate/intent/intentOrdering.js.map +1 -1
- package/dist/remediate/phases/close.d.ts +25 -17
- package/dist/remediate/phases/close.d.ts.map +1 -1
- package/dist/remediate/phases/close.js +278 -218
- package/dist/remediate/phases/close.js.map +1 -1
- package/dist/remediate/phases/closeAcceptance.d.ts +42 -0
- package/dist/remediate/phases/closeAcceptance.d.ts.map +1 -0
- package/dist/remediate/phases/closeAcceptance.js +66 -0
- package/dist/remediate/phases/closeAcceptance.js.map +1 -0
- package/dist/remediate/phases/closeReviewProvenance.d.ts +1 -1
- package/dist/remediate/phases/closeReviewProvenance.d.ts.map +1 -1
- package/dist/remediate/phases/closeReviewProvenance.js +9 -8
- package/dist/remediate/phases/closeReviewProvenance.js.map +1 -1
- package/dist/remediate/phases/closeVerifyAnalyzerLeads.d.ts.map +1 -1
- package/dist/remediate/phases/closeVerifyAnalyzerLeads.js +11 -9
- package/dist/remediate/phases/closeVerifyAnalyzerLeads.js.map +1 -1
- package/dist/remediate/phases/closeVerifyHeadEvidence.d.ts +21 -86
- package/dist/remediate/phases/closeVerifyHeadEvidence.d.ts.map +1 -1
- package/dist/remediate/phases/closeVerifyHeadEvidence.js +30 -19
- package/dist/remediate/phases/closeVerifyHeadEvidence.js.map +1 -1
- package/dist/remediate/phases/plan.d.ts +3 -60
- package/dist/remediate/phases/plan.d.ts.map +1 -1
- package/dist/remediate/phases/plan.js +3 -227
- package/dist/remediate/phases/plan.js.map +1 -1
- package/dist/remediate/phases/triage.d.ts.map +1 -1
- package/dist/remediate/phases/triage.js +19 -30
- package/dist/remediate/phases/triage.js.map +1 -1
- package/dist/remediate/riskSignal.d.ts +9 -43
- package/dist/remediate/riskSignal.d.ts.map +1 -1
- package/dist/remediate/riskSignal.js +7 -28
- package/dist/remediate/riskSignal.js.map +1 -1
- package/dist/remediate/state/disposition.d.ts +2 -1
- package/dist/remediate/state/disposition.d.ts.map +1 -1
- package/dist/remediate/state/disposition.js +37 -1
- package/dist/remediate/state/disposition.js.map +1 -1
- package/dist/remediate/state/runIdentity.d.ts +2 -13
- package/dist/remediate/state/runIdentity.d.ts.map +1 -1
- package/dist/remediate/state/runIdentity.js +3 -13
- package/dist/remediate/state/runIdentity.js.map +1 -1
- package/dist/remediate/state/store.d.ts +12 -36
- package/dist/remediate/state/store.d.ts.map +1 -1
- package/dist/remediate/state/store.js +58 -150
- package/dist/remediate/state/store.js.map +1 -1
- package/dist/remediate/state/types.d.ts +406 -504
- package/dist/remediate/state/types.d.ts.map +1 -1
- package/dist/remediate/state/types.js +24 -104
- package/dist/remediate/state/types.js.map +1 -1
- package/dist/remediate/steps/contractPipeline.d.ts +7 -661
- package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
- package/dist/remediate/steps/contractPipeline.js +264 -3851
- package/dist/remediate/steps/contractPipeline.js.map +1 -1
- package/dist/remediate/steps/contractPipelinePrompts.d.ts +20 -142
- package/dist/remediate/steps/contractPipelinePrompts.d.ts.map +1 -1
- package/dist/remediate/steps/contractPipelinePrompts.js +48 -581
- package/dist/remediate/steps/contractPipelinePrompts.js.map +1 -1
- package/dist/remediate/steps/dispatch/contractConformanceReview.d.ts +4 -1
- package/dist/remediate/steps/dispatch/contractConformanceReview.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch/contractConformanceReview.js +6 -3
- package/dist/remediate/steps/dispatch/contractConformanceReview.js.map +1 -1
- package/dist/remediate/steps/dispatch/hostContracts.d.ts +1 -1
- package/dist/remediate/steps/dispatch/hostContracts.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch/hostHandoff.d.ts +4 -21
- package/dist/remediate/steps/dispatch/hostHandoff.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch/hostHandoff.js +161 -383
- package/dist/remediate/steps/dispatch/hostHandoff.js.map +1 -1
- package/dist/remediate/steps/finalGate.d.ts +34 -0
- package/dist/remediate/steps/finalGate.d.ts.map +1 -1
- package/dist/remediate/steps/finalGate.js +44 -4
- package/dist/remediate/steps/finalGate.js.map +1 -1
- package/dist/remediate/steps/frictionCloseout.d.ts +1 -30
- package/dist/remediate/steps/frictionCloseout.d.ts.map +1 -1
- package/dist/remediate/steps/frictionCloseout.js +6 -99
- package/dist/remediate/steps/frictionCloseout.js.map +1 -1
- package/dist/remediate/steps/nextStep.d.ts +2 -15
- package/dist/remediate/steps/nextStep.d.ts.map +1 -1
- package/dist/remediate/steps/nextStep.js +254 -1042
- package/dist/remediate/steps/nextStep.js.map +1 -1
- package/dist/remediate/steps/prompts.js +16 -16
- package/dist/remediate/steps/prompts.js.map +1 -1
- package/dist/remediate/steps/stepUtils.d.ts +1 -1
- package/dist/remediate/steps/stepUtils.d.ts.map +1 -1
- package/dist/remediate/steps/types.d.ts +1 -1
- package/dist/remediate/steps/types.d.ts.map +1 -1
- package/dist/remediate/steps/types.js +1 -1
- package/dist/remediate/steps/types.js.map +1 -1
- package/dist/remediate/types/options.d.ts +9 -0
- package/dist/remediate/types/options.d.ts.map +1 -1
- package/dist/remediate/validation/artifacts.d.ts.map +1 -1
- package/dist/remediate/validation/artifacts.js +10 -56
- package/dist/remediate/validation/artifacts.js.map +1 -1
- package/dist/remediate/validation/remediationState.d.ts +2 -2
- package/dist/remediate/validation/remediationState.d.ts.map +1 -1
- package/dist/remediate/validation/remediationState.js +17 -77
- package/dist/remediate/validation/remediationState.js.map +1 -1
- package/dist/remediate/validation/verificationReport.d.ts +3 -0
- package/dist/remediate/validation/verificationReport.d.ts.map +1 -0
- package/dist/remediate/validation/verificationReport.js +28 -0
- package/dist/remediate/validation/verificationReport.js.map +1 -0
- package/dist/shared/analyzers/types.d.ts +10 -10
- package/dist/shared/engine/obligationEngine.d.ts +2 -2
- package/dist/shared/friction/triage.d.ts +7 -28
- package/dist/shared/friction/triage.d.ts.map +1 -1
- package/dist/shared/friction/triage.js +7 -28
- package/dist/shared/friction/triage.js.map +1 -1
- package/dist/shared/graph/orderedReachability.js +1 -1
- package/dist/shared/graph/orderedReachability.js.map +1 -1
- package/dist/shared/index.d.ts +5 -6
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +3 -4
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/loopCorePaths.d.ts.map +1 -1
- package/dist/shared/loopCorePaths.js +37 -5
- package/dist/shared/loopCorePaths.js.map +1 -1
- package/dist/shared/prompts.d.ts +24 -10
- package/dist/shared/prompts.d.ts.map +1 -1
- package/dist/shared/prompts.js +27 -13
- package/dist/shared/prompts.js.map +1 -1
- package/dist/shared/reReview/projectionDiff.d.ts.map +1 -1
- package/dist/shared/reReview/projectionDiff.js +6 -14
- package/dist/shared/reReview/projectionDiff.js.map +1 -1
- package/dist/shared/types/executionPlan.d.ts +416 -0
- package/dist/shared/types/executionPlan.d.ts.map +1 -0
- package/dist/shared/types/executionPlan.js +132 -0
- package/dist/shared/types/executionPlan.js.map +1 -0
- package/dist/shared/types/remediationOutcome.d.ts +1378 -12
- package/dist/shared/types/remediationOutcome.d.ts.map +1 -1
- package/dist/shared/types/remediationOutcome.js +29 -1
- package/dist/shared/types/remediationOutcome.js.map +1 -1
- package/dist/shared/types/{contractPipeline/verification.d.ts → verificationReport.d.ts} +9 -37
- package/dist/shared/types/verificationReport.d.ts.map +1 -0
- package/dist/shared/types/verificationReport.js +4 -0
- package/dist/shared/types/verificationReport.js.map +1 -0
- package/dist/shared/validation/findingGrounding.d.ts +3 -5
- package/dist/shared/validation/findingGrounding.d.ts.map +1 -1
- package/dist/shared/validation/findingGrounding.js +4 -7
- package/dist/shared/validation/findingGrounding.js.map +1 -1
- package/package.json +2 -1
- package/scripts/shared/primitives.mjs +20 -0
- package/skills/audit-code/SKILL.md +5 -12
- package/skills/audit-code/audit-code.prompt.md +5 -8
- package/skills/audit-code/opencode-command-template.txt +2 -2
- package/skills/remediate-code/SKILL.md +5 -7
- package/skills/remediate-code/remediate-code.prompt.md +5 -5
- package/dispatch/lens-definitions.json +0 -46
- package/dist/remediate/contractPipeline/artifactNames.d.ts +0 -8
- package/dist/remediate/contractPipeline/artifactNames.d.ts.map +0 -1
- package/dist/remediate/contractPipeline/artifactNames.js +0 -28
- package/dist/remediate/contractPipeline/artifactNames.js.map +0 -1
- package/dist/remediate/contractPipeline/artifactStore.d.ts +0 -219
- package/dist/remediate/contractPipeline/artifactStore.d.ts.map +0 -1
- package/dist/remediate/contractPipeline/artifactStore.js +0 -436
- package/dist/remediate/contractPipeline/artifactStore.js.map +0 -1
- package/dist/remediate/contractPipeline/changeClassification.d.ts +0 -130
- package/dist/remediate/contractPipeline/changeClassification.d.ts.map +0 -1
- package/dist/remediate/contractPipeline/changeClassification.js +0 -446
- package/dist/remediate/contractPipeline/changeClassification.js.map +0 -1
- package/dist/remediate/contractPipeline/contractReviewBinding.d.ts +0 -28
- package/dist/remediate/contractPipeline/contractReviewBinding.d.ts.map +0 -1
- package/dist/remediate/contractPipeline/contractReviewBinding.js +0 -75
- package/dist/remediate/contractPipeline/contractReviewBinding.js.map +0 -1
- package/dist/remediate/contractPipeline/counterexampleFingerprint.d.ts +0 -27
- package/dist/remediate/contractPipeline/counterexampleFingerprint.d.ts.map +0 -1
- package/dist/remediate/contractPipeline/counterexampleFingerprint.js +0 -37
- package/dist/remediate/contractPipeline/counterexampleFingerprint.js.map +0 -1
- package/dist/remediate/contractPipeline/cyclicSeamResolution.d.ts +0 -131
- package/dist/remediate/contractPipeline/cyclicSeamResolution.d.ts.map +0 -1
- package/dist/remediate/contractPipeline/cyclicSeamResolution.js +0 -257
- package/dist/remediate/contractPipeline/cyclicSeamResolution.js.map +0 -1
- package/dist/remediate/contractPipeline/derive.d.ts +0 -173
- package/dist/remediate/contractPipeline/derive.d.ts.map +0 -1
- package/dist/remediate/contractPipeline/derive.js +0 -477
- package/dist/remediate/contractPipeline/derive.js.map +0 -1
- package/dist/remediate/contractPipeline/finalizedContractFields.d.ts +0 -50
- package/dist/remediate/contractPipeline/finalizedContractFields.d.ts.map +0 -1
- package/dist/remediate/contractPipeline/finalizedContractFields.js +0 -77
- package/dist/remediate/contractPipeline/finalizedContractFields.js.map +0 -1
- package/dist/remediate/contractPipeline/idRegistry.d.ts +0 -144
- package/dist/remediate/contractPipeline/idRegistry.d.ts.map +0 -1
- package/dist/remediate/contractPipeline/idRegistry.js +0 -214
- package/dist/remediate/contractPipeline/idRegistry.js.map +0 -1
- package/dist/remediate/contractPipeline/obligationKinds.d.ts +0 -27
- package/dist/remediate/contractPipeline/obligationKinds.d.ts.map +0 -1
- package/dist/remediate/contractPipeline/obligationKinds.js +0 -18
- package/dist/remediate/contractPipeline/obligationKinds.js.map +0 -1
- package/dist/remediate/contractPipeline/phaseCut.d.ts +0 -125
- package/dist/remediate/contractPipeline/phaseCut.d.ts.map +0 -1
- package/dist/remediate/contractPipeline/phaseCut.js +0 -339
- package/dist/remediate/contractPipeline/phaseCut.js.map +0 -1
- package/dist/remediate/contractPipeline/phaseCutArtifact.d.ts +0 -31
- package/dist/remediate/contractPipeline/phaseCutArtifact.d.ts.map +0 -1
- package/dist/remediate/contractPipeline/phaseCutArtifact.js +0 -48
- package/dist/remediate/contractPipeline/phaseCutArtifact.js.map +0 -1
- package/dist/remediate/contractPipeline/repairState.d.ts +0 -110
- package/dist/remediate/contractPipeline/repairState.d.ts.map +0 -1
- package/dist/remediate/contractPipeline/repairState.js +0 -185
- package/dist/remediate/contractPipeline/repairState.js.map +0 -1
- package/dist/remediate/contractPipeline/reviewSnapshot.d.ts +0 -79
- package/dist/remediate/contractPipeline/reviewSnapshot.d.ts.map +0 -1
- package/dist/remediate/contractPipeline/reviewSnapshot.js +0 -140
- package/dist/remediate/contractPipeline/reviewSnapshot.js.map +0 -1
- package/dist/remediate/contractPipeline/semanticProjection.d.ts +0 -64
- package/dist/remediate/contractPipeline/semanticProjection.d.ts.map +0 -1
- package/dist/remediate/contractPipeline/semanticProjection.js +0 -136
- package/dist/remediate/contractPipeline/semanticProjection.js.map +0 -1
- package/dist/remediate/contractPipeline/sketchSource.d.ts +0 -194
- package/dist/remediate/contractPipeline/sketchSource.d.ts.map +0 -1
- package/dist/remediate/contractPipeline/sketchSource.js +0 -262
- package/dist/remediate/contractPipeline/sketchSource.js.map +0 -1
- package/dist/remediate/contractPipeline/testPlanCarry.d.ts +0 -17
- package/dist/remediate/contractPipeline/testPlanCarry.d.ts.map +0 -1
- package/dist/remediate/contractPipeline/testPlanCarry.js +0 -72
- package/dist/remediate/contractPipeline/testPlanCarry.js.map +0 -1
- package/dist/remediate/steps/dispatch/marshal.d.ts +0 -7
- package/dist/remediate/steps/dispatch/marshal.d.ts.map +0 -1
- package/dist/remediate/steps/dispatch/marshal.js +0 -11
- package/dist/remediate/steps/dispatch/marshal.js.map +0 -1
- package/dist/remediate/validation/contractPipeline.d.ts +0 -35
- package/dist/remediate/validation/contractPipeline.d.ts.map +0 -1
- package/dist/remediate/validation/contractPipeline.js +0 -613
- package/dist/remediate/validation/contractPipeline.js.map +0 -1
- package/dist/remediate/validation/contractPipelineGates.d.ts +0 -272
- package/dist/remediate/validation/contractPipelineGates.d.ts.map +0 -1
- package/dist/remediate/validation/contractPipelineGates.js +0 -1397
- package/dist/remediate/validation/contractPipelineGates.js.map +0 -1
- package/dist/shared/types/contractPipeline/design.d.ts +0 -79
- package/dist/shared/types/contractPipeline/design.d.ts.map +0 -1
- package/dist/shared/types/contractPipeline/design.js +0 -16
- package/dist/shared/types/contractPipeline/design.js.map +0 -1
- package/dist/shared/types/contractPipeline/goal.d.ts +0 -41
- package/dist/shared/types/contractPipeline/goal.d.ts.map +0 -1
- package/dist/shared/types/contractPipeline/goal.js +0 -10
- package/dist/shared/types/contractPipeline/goal.js.map +0 -1
- package/dist/shared/types/contractPipeline/implementation.d.ts +0 -118
- package/dist/shared/types/contractPipeline/implementation.d.ts.map +0 -1
- package/dist/shared/types/contractPipeline/implementation.js +0 -13
- package/dist/shared/types/contractPipeline/implementation.js.map +0 -1
- package/dist/shared/types/contractPipeline/obligations.d.ts +0 -283
- package/dist/shared/types/contractPipeline/obligations.d.ts.map +0 -1
- package/dist/shared/types/contractPipeline/obligations.js +0 -84
- package/dist/shared/types/contractPipeline/obligations.js.map +0 -1
- package/dist/shared/types/contractPipeline/verification.d.ts.map +0 -1
- package/dist/shared/types/contractPipeline/verification.js +0 -10
- package/dist/shared/types/contractPipeline/verification.js.map +0 -1
- package/dist/shared/types/contractPipeline.d.ts +0 -48
- package/dist/shared/types/contractPipeline.d.ts.map +0 -1
- package/dist/shared/types/contractPipeline.js +0 -32
- package/dist/shared/types/contractPipeline.js.map +0 -1
- package/dist/shared/types/obligationLedger.d.ts +0 -39
- package/dist/shared/types/obligationLedger.d.ts.map +0 -1
- package/dist/shared/types/obligationLedger.js +0 -49
- package/dist/shared/types/obligationLedger.js.map +0 -1
|
@@ -1,613 +0,0 @@
|
|
|
1
|
-
import { CounterexampleSchema } from "../../shared/types/contractPipeline/obligations.js";
|
|
2
|
-
// sites-pinned: tests/remediate/step-prompt-sketch-drift.test.ts, tests/remediate/contract-pipeline.test.ts
|
|
3
|
-
/**
|
|
4
|
-
* Validation helpers for contract-pipeline artifacts.
|
|
5
|
-
* Follows the ValidationIssue[] pattern used by the rest of the remediator
|
|
6
|
-
* validation layer.
|
|
7
|
-
*/
|
|
8
|
-
import { isRecord, pushValidationIssue, findFirstCycleWitness, } from "audit-tools/shared";
|
|
9
|
-
import { detectContractTokenCycles } from "../contractPipeline/phaseCut.js";
|
|
10
|
-
import { ASSESSMENT_FINDING_STATUSES, ASSESSMENT_VERDICTS, CONTRACT_REPAIR_TARGETS, CONTRACT_REPAIR_TARGETS_OFFERED, CONTEXT_ENTRY_KINDS, COUNTEREXAMPLE_CLASSIFICATIONS, CONCEPTUAL_CRITIQUE_REPAIR_TARGETS, CRITIQUE_ITEM_KINDS, CRITIQUE_ITEM_SEVERITIES, CRITIQUE_VERDICTS, CYCLIC_SEAM_BREAK_STRATEGIES, CYCLIC_SEAM_RESOLUTION_STATUSES, GOAL_SOURCE_TYPES, IMPLEMENTATION_EDGE_KINDS, IMPLEMENTATION_NODE_STATUSES, JUDGE_VERDICTS, OBLIGATION_KINDS, OBLIGATION_STATUSES, SEAM_RESOLUTION_DECISIONS, TEST_SPEC_KINDS, VERIFICATION_FINDING_STATUSES, VERIFICATION_REPORT_STATUSES, VERIFICATION_TRACE_KINDS, VERIFICATION_TRACE_STATUSES, } from "../contractPipeline/sketchSource.js";
|
|
11
|
-
import { CONTRACT_PIPELINE_GOAL_SPEC_VERSION, CONTRACT_PIPELINE_CONTEXT_BUNDLE_VERSION, CONTRACT_PIPELINE_CONCEPTUAL_DESIGN_CRITIQUE_VERSION, CONTRACT_PIPELINE_OBLIGATION_LEDGER_VERSION, CONTRACT_PIPELINE_CONTRACT_ASSESSMENT_REPORT_VERSION, CONTRACT_PIPELINE_COUNTEREXAMPLE_VERSION, CONTRACT_PIPELINE_JUDGE_REPORT_VERSION, CONTRACT_PIPELINE_IMPLEMENTATION_DAG_VERSION, CONTRACT_PIPELINE_VERIFICATION_REPORT_VERSION, CONTRACT_PIPELINE_TEST_VALIDATOR_PLAN_VERSION, } from "audit-tools/shared";
|
|
12
|
-
// Version constant for cyclic_seam_resolution artifact.
|
|
13
|
-
export const CP_CYCLIC_SEAM_RESOLUTION_VERSION = "remediate-code-contract-pipeline/cyclic-seam-resolution/v1alpha1";
|
|
14
|
-
// Version constants for seam-negotiation artifacts not yet in audit-tools/shared.
|
|
15
|
-
export const CP_MODULE_DECOMPOSITION_VERSION = "remediate-code-contract-pipeline/module-decomposition/v1alpha1";
|
|
16
|
-
export const CP_MODULE_CONTRACTS_VERSION = "remediate-code-contract-pipeline/module-contracts/v1alpha1";
|
|
17
|
-
export const CP_SEAM_RECONCILIATION_REPORT_VERSION = "remediate-code-contract-pipeline/seam-reconciliation-report/v1alpha1";
|
|
18
|
-
export const CP_FINALIZED_MODULE_CONTRACTS_VERSION = "remediate-code-contract-pipeline/finalized-module-contracts/v1alpha1";
|
|
19
|
-
// ── Helpers ───────────────────────────────────────────────────────────────────
|
|
20
|
-
function requireString(value, path, issues) {
|
|
21
|
-
if (typeof value !== "string" || value.length === 0) {
|
|
22
|
-
pushValidationIssue(issues, path, `${path} must be a non-empty string.`);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
function requireStringArray(value, path, issues) {
|
|
26
|
-
if (!Array.isArray(value) || value.some((item) => typeof item !== "string")) {
|
|
27
|
-
pushValidationIssue(issues, path, `${path} must be an array of strings.`);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
function requireOneOf(value, allowed, path, issues) {
|
|
31
|
-
if (!allowed.includes(String(value))) {
|
|
32
|
-
pushValidationIssue(issues, path, `${path} must be one of: ${allowed.join(", ")}.`);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Shared envelope guard for every contract-pipeline validator (MNT-86b18f1b):
|
|
37
|
-
* the isRecord guard + contract_version match + optional goal_id check that each
|
|
38
|
-
* validator opened with verbatim. Returns the value narrowed to a record when it
|
|
39
|
-
* is one, or `undefined` when it is not (the caller returns its issues early).
|
|
40
|
-
* The trailing `created_at` check stays in each validator since it runs after
|
|
41
|
-
* the artifact-specific body.
|
|
42
|
-
*/
|
|
43
|
-
function validateEnvelope(value, path, expectedVersion, issues, opts = { goalId: true }) {
|
|
44
|
-
if (!isRecord(value)) {
|
|
45
|
-
pushValidationIssue(issues, path, `${path} must be an object.`);
|
|
46
|
-
return undefined;
|
|
47
|
-
}
|
|
48
|
-
if (value.contract_version !== expectedVersion) {
|
|
49
|
-
pushValidationIssue(issues, `${path}.contract_version`, `${path}.contract_version must be "${expectedVersion}".`);
|
|
50
|
-
}
|
|
51
|
-
if (opts.goalId !== false) {
|
|
52
|
-
requireString(value.goal_id, `${path}.goal_id`, issues);
|
|
53
|
-
}
|
|
54
|
-
return value;
|
|
55
|
-
}
|
|
56
|
-
// ── GoalSpec ──────────────────────────────────────────────────────────────────
|
|
57
|
-
export function validateGoalSpec(value, path = "goal_spec") {
|
|
58
|
-
const issues = [];
|
|
59
|
-
const v = validateEnvelope(value, path, CONTRACT_PIPELINE_GOAL_SPEC_VERSION, issues);
|
|
60
|
-
if (!v)
|
|
61
|
-
return issues;
|
|
62
|
-
requireString(v.objective, `${path}.objective`, issues);
|
|
63
|
-
requireStringArray(v.non_goals, `${path}.non_goals`, issues);
|
|
64
|
-
requireStringArray(v.success_criteria, `${path}.success_criteria`, issues);
|
|
65
|
-
requireOneOf(v.source_type, GOAL_SOURCE_TYPES, `${path}.source_type`, issues);
|
|
66
|
-
requireString(v.created_at, `${path}.created_at`, issues);
|
|
67
|
-
return issues;
|
|
68
|
-
}
|
|
69
|
-
// ── ContextBundle ─────────────────────────────────────────────────────────────
|
|
70
|
-
export function validateContextBundle(value, path = "context_bundle") {
|
|
71
|
-
const issues = [];
|
|
72
|
-
const v = validateEnvelope(value, path, CONTRACT_PIPELINE_CONTEXT_BUNDLE_VERSION, issues);
|
|
73
|
-
if (!v)
|
|
74
|
-
return issues;
|
|
75
|
-
if (!Array.isArray(v.entries)) {
|
|
76
|
-
pushValidationIssue(issues, `${path}.entries`, `${path}.entries must be an array.`);
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
for (const [i, entry] of v.entries.entries()) {
|
|
80
|
-
if (!isRecord(entry)) {
|
|
81
|
-
pushValidationIssue(issues, `${path}.entries[${i}]`, `${path}.entries[${i}] must be an object.`);
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
requireString(entry.path, `${path}.entries[${i}].path`, issues);
|
|
85
|
-
requireOneOf(entry.kind, CONTEXT_ENTRY_KINDS, `${path}.entries[${i}].kind`, issues);
|
|
86
|
-
requireString(entry.relevance_reason, `${path}.entries[${i}].relevance_reason`, issues);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
requireString(v.context_summary, `${path}.context_summary`, issues);
|
|
90
|
-
requireString(v.created_at, `${path}.created_at`, issues);
|
|
91
|
-
return issues;
|
|
92
|
-
}
|
|
93
|
-
// ── ModuleDecomposition ───────────────────────────────────────────────────────
|
|
94
|
-
export function validateModuleDecomposition(value, path = "module_decomposition") {
|
|
95
|
-
const issues = [];
|
|
96
|
-
const v = validateEnvelope(value, path, CP_MODULE_DECOMPOSITION_VERSION, issues);
|
|
97
|
-
if (!v)
|
|
98
|
-
return issues;
|
|
99
|
-
if (!Array.isArray(v.modules)) {
|
|
100
|
-
pushValidationIssue(issues, `${path}.modules`, `${path}.modules must be an array.`);
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
for (const [i, mod] of v.modules.entries()) {
|
|
104
|
-
if (!isRecord(mod)) {
|
|
105
|
-
pushValidationIssue(issues, `${path}.modules[${i}]`, `${path}.modules[${i}] must be an object.`);
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
|
-
requireString(mod.name, `${path}.modules[${i}].name`, issues);
|
|
109
|
-
requireString(mod.responsibilities, `${path}.modules[${i}].responsibilities`, issues);
|
|
110
|
-
requireStringArray(mod.file_scope, `${path}.modules[${i}].file_scope`, issues);
|
|
111
|
-
if (mod.source_work_block_ids !== undefined) {
|
|
112
|
-
requireStringArray(mod.source_work_block_ids, `${path}.modules[${i}].source_work_block_ids`, issues);
|
|
113
|
-
}
|
|
114
|
-
if (mod.prepares_seam_ids !== undefined) {
|
|
115
|
-
requireStringArray(mod.prepares_seam_ids, `${path}.modules[${i}].prepares_seam_ids`, issues);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
requireString(v.created_at, `${path}.created_at`, issues);
|
|
120
|
-
return issues;
|
|
121
|
-
}
|
|
122
|
-
// ── ModuleContracts ───────────────────────────────────────────────────────────
|
|
123
|
-
function validateModuleContractEntry(entry, path, issues) {
|
|
124
|
-
requireString(entry.name, `${path}.name`, issues);
|
|
125
|
-
requireStringArray(entry.inputs, `${path}.inputs`, issues);
|
|
126
|
-
requireStringArray(entry.outputs, `${path}.outputs`, issues);
|
|
127
|
-
requireStringArray(entry.invariants, `${path}.invariants`, issues);
|
|
128
|
-
requireStringArray(entry.side_effects, `${path}.side_effects`, issues);
|
|
129
|
-
requireString(entry.validation_boundary, `${path}.validation_boundary`, issues);
|
|
130
|
-
requireStringArray(entry.failure_modes, `${path}.failure_modes`, issues);
|
|
131
|
-
}
|
|
132
|
-
export function validateModuleContracts(value, path = "module_contracts") {
|
|
133
|
-
const issues = [];
|
|
134
|
-
const v = validateEnvelope(value, path, CP_MODULE_CONTRACTS_VERSION, issues);
|
|
135
|
-
if (!v)
|
|
136
|
-
return issues;
|
|
137
|
-
if (!Array.isArray(v.module_contracts)) {
|
|
138
|
-
pushValidationIssue(issues, `${path}.module_contracts`, `${path}.module_contracts must be an array.`);
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
for (const [i, mod] of v.module_contracts.entries()) {
|
|
142
|
-
if (!isRecord(mod)) {
|
|
143
|
-
pushValidationIssue(issues, `${path}.module_contracts[${i}]`, `${path}.module_contracts[${i}] must be an object.`);
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
validateModuleContractEntry(mod, `${path}.module_contracts[${i}]`, issues);
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
requireString(v.created_at, `${path}.created_at`, issues);
|
|
150
|
-
return issues;
|
|
151
|
-
}
|
|
152
|
-
// ── SeamReconciliationReport ──────────────────────────────────────────────────
|
|
153
|
-
export function validateSeamReconciliationReport(value, path = "seam_reconciliation_report") {
|
|
154
|
-
const issues = [];
|
|
155
|
-
const v = validateEnvelope(value, path, CP_SEAM_RECONCILIATION_REPORT_VERSION, issues);
|
|
156
|
-
if (!v)
|
|
157
|
-
return issues;
|
|
158
|
-
if (!Array.isArray(v.mismatches)) {
|
|
159
|
-
pushValidationIssue(issues, `${path}.mismatches`, `${path}.mismatches must be an array.`);
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
for (const [i, mismatch] of v.mismatches.entries()) {
|
|
163
|
-
if (!isRecord(mismatch)) {
|
|
164
|
-
pushValidationIssue(issues, `${path}.mismatches[${i}]`, `${path}.mismatches[${i}] must be an object.`);
|
|
165
|
-
continue;
|
|
166
|
-
}
|
|
167
|
-
requireString(mismatch.seam_id, `${path}.mismatches[${i}].seam_id`, issues);
|
|
168
|
-
requireString(mismatch.module_a, `${path}.mismatches[${i}].module_a`, issues);
|
|
169
|
-
requireString(mismatch.module_b, `${path}.mismatches[${i}].module_b`, issues);
|
|
170
|
-
requireString(mismatch.description, `${path}.mismatches[${i}].description`, issues);
|
|
171
|
-
if (!isRecord(mismatch.resolution)) {
|
|
172
|
-
pushValidationIssue(issues, `${path}.mismatches[${i}].resolution`, `${path}.mismatches[${i}].resolution must be an object (every mismatch requires a resolution decision).`);
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
requireOneOf(mismatch.resolution.decision, SEAM_RESOLUTION_DECISIONS, `${path}.mismatches[${i}].resolution.decision`, issues);
|
|
176
|
-
requireString(mismatch.resolution.agreed_interface, `${path}.mismatches[${i}].resolution.agreed_interface`, issues);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
requireString(v.created_at, `${path}.created_at`, issues);
|
|
181
|
-
return issues;
|
|
182
|
-
}
|
|
183
|
-
// ── FinalizedModuleContracts ──────────────────────────────────────────────────
|
|
184
|
-
export function validateFinalizedModuleContracts(value, path = "finalized_module_contracts") {
|
|
185
|
-
const issues = [];
|
|
186
|
-
const v = validateEnvelope(value, path, CP_FINALIZED_MODULE_CONTRACTS_VERSION, issues);
|
|
187
|
-
if (!v)
|
|
188
|
-
return issues;
|
|
189
|
-
if (!Array.isArray(v.module_contracts)) {
|
|
190
|
-
pushValidationIssue(issues, `${path}.module_contracts`, `${path}.module_contracts must be an array.`);
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
for (const [i, mod] of v.module_contracts.entries()) {
|
|
194
|
-
if (!isRecord(mod)) {
|
|
195
|
-
pushValidationIssue(issues, `${path}.module_contracts[${i}]`, `${path}.module_contracts[${i}] must be an object.`);
|
|
196
|
-
continue;
|
|
197
|
-
}
|
|
198
|
-
validateModuleContractEntry(mod, `${path}.module_contracts[${i}]`, issues);
|
|
199
|
-
}
|
|
200
|
-
// A cycle in the DECLARED artifact-token graph is a validation error, not a
|
|
201
|
-
// silently dropped edge (open-bugs.md:106): implementation ordering derives
|
|
202
|
-
// from these tokens alone, and the fail-toward-later tiering would place
|
|
203
|
-
// token consumers ahead of their producers. Naming members and edges makes
|
|
204
|
-
// the ingestion re-emit actionable.
|
|
205
|
-
for (const cycle of detectContractTokenCycles(v)) {
|
|
206
|
-
pushValidationIssue(issues, `${path}.module_contracts`, `${path}.module_contracts declares a CYCLIC artifact-token dependency graph; implementation ` +
|
|
207
|
-
`ordering derives from these tokens alone, so the declared flow must be acyclic. Cycle ` +
|
|
208
|
-
`members: [${cycle.members.join(", ")}]. Edges: ${cycle.edges
|
|
209
|
-
.map((e) => `${e.consumer} depends on ${e.producer} via artifact:${e.artifact}`)
|
|
210
|
-
.join("; ")}. Adjust inputs/outputs so one direction owns each flow; keep the module set ` +
|
|
211
|
-
`unchanged.`);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
requireString(v.created_at, `${path}.created_at`, issues);
|
|
215
|
-
return issues;
|
|
216
|
-
}
|
|
217
|
-
// ── DesignSpec ────────────────────────────────────────────────────────────────
|
|
218
|
-
// ── DesignSpec structural gates + cross-artifact gates ────────────────────────
|
|
219
|
-
// Extracted to contractPipelineGates.ts (MNT-86b18f1b). Re-exported here for
|
|
220
|
-
// backward-compatible imports — callers do not need to update their import paths.
|
|
221
|
-
export { validateDesignSpecGates, validateGoalIdConsistency, validateImplementationDAGIntegrity, validatePairedObligations, validateEvidenceThreaded, validateDigestCoverage, validateWorkBlockSeamPreparation, validateReconciliationDerivation, validateContractCitationGrounding, validateDecompositionFileScope, validateFinalizedModuleSetPreserved, enumerateRepoTreePaths, isInsideGitWorkTree, } from "./contractPipelineGates.js";
|
|
222
|
-
// ── ConceptualDesignCritique ──────────────────────────────────────────────────
|
|
223
|
-
export function validateConceptualDesignCritique(value, path = "conceptual_design_critique") {
|
|
224
|
-
const issues = [];
|
|
225
|
-
const v = validateEnvelope(value, path, CONTRACT_PIPELINE_CONCEPTUAL_DESIGN_CRITIQUE_VERSION, issues);
|
|
226
|
-
if (!v)
|
|
227
|
-
return issues;
|
|
228
|
-
if (!Array.isArray(v.items)) {
|
|
229
|
-
pushValidationIssue(issues, `${path}.items`, `${path}.items must be an array.`);
|
|
230
|
-
}
|
|
231
|
-
else {
|
|
232
|
-
for (const [i, item] of v.items.entries()) {
|
|
233
|
-
if (!isRecord(item)) {
|
|
234
|
-
pushValidationIssue(issues, `${path}.items[${i}]`, `${path}.items[${i}] must be an object.`);
|
|
235
|
-
continue;
|
|
236
|
-
}
|
|
237
|
-
requireString(item.id, `${path}.items[${i}].id`, issues);
|
|
238
|
-
requireOneOf(item.kind, CRITIQUE_ITEM_KINDS, `${path}.items[${i}].kind`, issues);
|
|
239
|
-
requireString(item.description, `${path}.items[${i}].description`, issues);
|
|
240
|
-
requireOneOf(item.severity, CRITIQUE_ITEM_SEVERITIES, `${path}.items[${i}].severity`, issues);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
if (v.repair_target !== undefined) {
|
|
244
|
-
requireOneOf(v.repair_target, CONCEPTUAL_CRITIQUE_REPAIR_TARGETS, `${path}.repair_target`, issues);
|
|
245
|
-
}
|
|
246
|
-
requireOneOf(v.verdict, CRITIQUE_VERDICTS, `${path}.verdict`, issues);
|
|
247
|
-
requireString(v.created_at, `${path}.created_at`, issues);
|
|
248
|
-
return issues;
|
|
249
|
-
}
|
|
250
|
-
// ── ObligationLedger ──────────────────────────────────────────────────────────
|
|
251
|
-
export function validateObligationLedger(value, path = "obligation_ledger") {
|
|
252
|
-
const issues = [];
|
|
253
|
-
const v = validateEnvelope(value, path, CONTRACT_PIPELINE_OBLIGATION_LEDGER_VERSION, issues);
|
|
254
|
-
if (!v)
|
|
255
|
-
return issues;
|
|
256
|
-
if (!Array.isArray(v.obligations)) {
|
|
257
|
-
pushValidationIssue(issues, `${path}.obligations`, `${path}.obligations must be an array.`);
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
for (const [i, obl] of v.obligations.entries()) {
|
|
261
|
-
if (!isRecord(obl)) {
|
|
262
|
-
pushValidationIssue(issues, `${path}.obligations[${i}]`, `${path}.obligations[${i}] must be an object.`);
|
|
263
|
-
continue;
|
|
264
|
-
}
|
|
265
|
-
requireString(obl.id, `${path}.obligations[${i}].id`, issues);
|
|
266
|
-
requireString(obl.description, `${path}.obligations[${i}].description`, issues);
|
|
267
|
-
requireOneOf(obl.kind, OBLIGATION_KINDS, `${path}.obligations[${i}].kind`, issues);
|
|
268
|
-
requireStringArray(obl.depends_on, `${path}.obligations[${i}].depends_on`, issues);
|
|
269
|
-
requireOneOf(obl.status, OBLIGATION_STATUSES, `${path}.obligations[${i}].status`, issues);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
requireString(v.created_at, `${path}.created_at`, issues);
|
|
273
|
-
return issues;
|
|
274
|
-
}
|
|
275
|
-
// ── TestValidatorPlan ─────────────────────────────────────────────────────────
|
|
276
|
-
export function validateTestValidatorPlan(value, path = "test_validator_plan") {
|
|
277
|
-
const issues = [];
|
|
278
|
-
const v = validateEnvelope(value, path, CONTRACT_PIPELINE_TEST_VALIDATOR_PLAN_VERSION, issues);
|
|
279
|
-
if (!v)
|
|
280
|
-
return issues;
|
|
281
|
-
if (!Array.isArray(v.test_specs)) {
|
|
282
|
-
pushValidationIssue(issues, `${path}.test_specs`, `${path}.test_specs must be an array.`);
|
|
283
|
-
}
|
|
284
|
-
else {
|
|
285
|
-
for (const [i, spec] of v.test_specs.entries()) {
|
|
286
|
-
if (!isRecord(spec)) {
|
|
287
|
-
pushValidationIssue(issues, `${path}.test_specs[${i}]`, `${path}.test_specs[${i}] must be an object.`);
|
|
288
|
-
continue;
|
|
289
|
-
}
|
|
290
|
-
requireString(spec.obligation_id, `${path}.test_specs[${i}].obligation_id`, issues);
|
|
291
|
-
requireString(spec.name, `${path}.test_specs[${i}].name`, issues);
|
|
292
|
-
// A spec that disputes its obligation carries no test: it needs only its
|
|
293
|
-
// id, its name and the claim. The scaffold tells the worker to replace the
|
|
294
|
-
// spec body with the claim, and this validator used to refuse exactly that.
|
|
295
|
-
const inapplicable = spec.inapplicable_claim !== undefined;
|
|
296
|
-
if (!inapplicable || spec.kind !== undefined) {
|
|
297
|
-
requireOneOf(spec.kind, TEST_SPEC_KINDS, `${path}.test_specs[${i}].kind`, issues);
|
|
298
|
-
}
|
|
299
|
-
if (!inapplicable || spec.assertions !== undefined) {
|
|
300
|
-
if (!Array.isArray(spec.assertions) || (!inapplicable && spec.assertions.length === 0)) {
|
|
301
|
-
pushValidationIssue(issues, `${path}.test_specs[${i}].assertions`, `${path}.test_specs[${i}].assertions must be a non-empty array of strings.`);
|
|
302
|
-
}
|
|
303
|
-
else {
|
|
304
|
-
requireStringArray(spec.assertions, `${path}.test_specs[${i}].assertions`, issues);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
if (inapplicable) {
|
|
308
|
-
if (!isRecord(spec.inapplicable_claim)) {
|
|
309
|
-
pushValidationIssue(issues, `${path}.test_specs[${i}].inapplicable_claim`, `${path}.test_specs[${i}].inapplicable_claim must be an object.`);
|
|
310
|
-
}
|
|
311
|
-
else {
|
|
312
|
-
requireString(spec.inapplicable_claim.obligation_id, `${path}.test_specs[${i}].inapplicable_claim.obligation_id`, issues);
|
|
313
|
-
requireString(spec.inapplicable_claim.reason, `${path}.test_specs[${i}].inapplicable_claim.reason`, issues);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
requireString(v.created_at, `${path}.created_at`, issues);
|
|
319
|
-
return issues;
|
|
320
|
-
}
|
|
321
|
-
// ── ContractAssessmentReport ──────────────────────────────────────────────────
|
|
322
|
-
export function validateContractAssessmentReport(value, path = "contract_assessment_report") {
|
|
323
|
-
const issues = [];
|
|
324
|
-
const v = validateEnvelope(value, path, CONTRACT_PIPELINE_CONTRACT_ASSESSMENT_REPORT_VERSION, issues);
|
|
325
|
-
if (!v)
|
|
326
|
-
return issues;
|
|
327
|
-
if (!Array.isArray(v.findings)) {
|
|
328
|
-
pushValidationIssue(issues, `${path}.findings`, `${path}.findings must be an array.`);
|
|
329
|
-
}
|
|
330
|
-
else {
|
|
331
|
-
for (const [i, finding] of v.findings.entries()) {
|
|
332
|
-
if (!isRecord(finding)) {
|
|
333
|
-
pushValidationIssue(issues, `${path}.findings[${i}]`, `${path}.findings[${i}] must be an object.`);
|
|
334
|
-
continue;
|
|
335
|
-
}
|
|
336
|
-
requireString(finding.obligation_id, `${path}.findings[${i}].obligation_id`, issues);
|
|
337
|
-
requireOneOf(finding.status, ASSESSMENT_FINDING_STATUSES, `${path}.findings[${i}].status`, issues);
|
|
338
|
-
requireStringArray(finding.evidence, `${path}.findings[${i}].evidence`, issues);
|
|
339
|
-
requireString(finding.rationale, `${path}.findings[${i}].rationale`, issues);
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
requireOneOf(v.verdict, ASSESSMENT_VERDICTS, `${path}.verdict`, issues);
|
|
343
|
-
requireString(v.created_at, `${path}.created_at`, issues);
|
|
344
|
-
return issues;
|
|
345
|
-
}
|
|
346
|
-
// ── CounterexampleReport ──────────────────────────────────────────────────────
|
|
347
|
-
export function validateCounterexample(value, path = "counterexample") {
|
|
348
|
-
const issues = [];
|
|
349
|
-
const v = validateEnvelope(value, path, CONTRACT_PIPELINE_COUNTEREXAMPLE_VERSION, issues);
|
|
350
|
-
if (!v)
|
|
351
|
-
return issues;
|
|
352
|
-
if (!Array.isArray(v.counterexamples)) {
|
|
353
|
-
pushValidationIssue(issues, `${path}.counterexamples`, `${path}.counterexamples must be an array.`);
|
|
354
|
-
}
|
|
355
|
-
else {
|
|
356
|
-
for (const [i, entry] of v.counterexamples.entries()) {
|
|
357
|
-
if (!isRecord(entry)) {
|
|
358
|
-
pushValidationIssue(issues, `${path}.counterexamples[${i}]`, `${path}.counterexamples[${i}] must be an object.`);
|
|
359
|
-
continue;
|
|
360
|
-
}
|
|
361
|
-
const parsed = CounterexampleSchema.safeParse(entry);
|
|
362
|
-
if (!parsed.success)
|
|
363
|
-
for (const issue of parsed.error.issues) {
|
|
364
|
-
pushValidationIssue(issues, `${path}.counterexamples[${i}].${issue.path.join(".")}`, issue.message);
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
requireString(v.created_at, `${path}.created_at`, issues);
|
|
369
|
-
return issues;
|
|
370
|
-
}
|
|
371
|
-
// ── JudgeReport ───────────────────────────────────────────────────────────────
|
|
372
|
-
export function validateJudgeReport(value, path = "judge_report") {
|
|
373
|
-
const issues = [];
|
|
374
|
-
const v = validateEnvelope(value, path, CONTRACT_PIPELINE_JUDGE_REPORT_VERSION, issues);
|
|
375
|
-
if (!v)
|
|
376
|
-
return issues;
|
|
377
|
-
requireOneOf(v.verdict, JUDGE_VERDICTS, `${path}.verdict`, issues);
|
|
378
|
-
if (!Array.isArray(v.classifications)) {
|
|
379
|
-
pushValidationIssue(issues, `${path}.classifications`, `${path}.classifications must be an array.`);
|
|
380
|
-
}
|
|
381
|
-
else {
|
|
382
|
-
for (const [i, entry] of v.classifications.entries()) {
|
|
383
|
-
if (!isRecord(entry)) {
|
|
384
|
-
pushValidationIssue(issues, `${path}.classifications[${i}]`, `${path}.classifications[${i}] must be an object.`);
|
|
385
|
-
continue;
|
|
386
|
-
}
|
|
387
|
-
requireString(entry.counterexample_id, `${path}.classifications[${i}].counterexample_id`, issues);
|
|
388
|
-
requireOneOf(entry.classification, COUNTEREXAMPLE_CLASSIFICATIONS, `${path}.classifications[${i}].classification`, issues);
|
|
389
|
-
requireString(entry.rationale, `${path}.classifications[${i}].rationale`, issues);
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
if (v.verdict === "needs_repair") {
|
|
393
|
-
if (!isRecord(v.repair_directive)) {
|
|
394
|
-
pushValidationIssue(issues, `${path}.repair_directive`, `${path}.repair_directive is required when verdict is "needs_repair".`);
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
if (v.repair_directive !== undefined) {
|
|
398
|
-
if (!isRecord(v.repair_directive)) {
|
|
399
|
-
pushValidationIssue(issues, `${path}.repair_directive`, `${path}.repair_directive must be an object.`);
|
|
400
|
-
}
|
|
401
|
-
else {
|
|
402
|
-
if (v.repair_directive.target === "counterexample") {
|
|
403
|
-
// Named, not only listed: the critic's report is the input the judge
|
|
404
|
-
// rules on, so a repair of it is a new critic round, not a repair. Before,
|
|
405
|
-
// the loop swapped this target for another one in silence.
|
|
406
|
-
pushValidationIssue(issues, `${path}.repair_directive.target`, `${path}.repair_directive.target "counterexample" is not a repair target: the judge rules on the critic's report and cannot order it rewritten. Name the contract artifact that must change (${CONTRACT_REPAIR_TARGETS_OFFERED.join(", ")}), or classify the counterexample as residual_risk.`);
|
|
407
|
-
}
|
|
408
|
-
else {
|
|
409
|
-
requireOneOf(v.repair_directive.target, CONTRACT_REPAIR_TARGETS, `${path}.repair_directive.target`, issues);
|
|
410
|
-
}
|
|
411
|
-
requireString(v.repair_directive.instruction, `${path}.repair_directive.instruction`, issues);
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
requireString(v.created_at, `${path}.created_at`, issues);
|
|
415
|
-
return issues;
|
|
416
|
-
}
|
|
417
|
-
// ── ImplementationDAG ─────────────────────────────────────────────────────────
|
|
418
|
-
export function validateImplementationDAG(value, path = "implementation_dag") {
|
|
419
|
-
const issues = [];
|
|
420
|
-
const v = validateEnvelope(value, path, CONTRACT_PIPELINE_IMPLEMENTATION_DAG_VERSION, issues);
|
|
421
|
-
if (!v)
|
|
422
|
-
return issues;
|
|
423
|
-
if (!Array.isArray(v.nodes)) {
|
|
424
|
-
pushValidationIssue(issues, `${path}.nodes`, `${path}.nodes must be an array.`);
|
|
425
|
-
}
|
|
426
|
-
else {
|
|
427
|
-
for (const [i, node] of v.nodes.entries()) {
|
|
428
|
-
if (!isRecord(node)) {
|
|
429
|
-
pushValidationIssue(issues, `${path}.nodes[${i}]`, `${path}.nodes[${i}] must be an object.`);
|
|
430
|
-
continue;
|
|
431
|
-
}
|
|
432
|
-
requireString(node.id, `${path}.nodes[${i}].id`, issues);
|
|
433
|
-
requireString(node.title, `${path}.nodes[${i}].title`, issues);
|
|
434
|
-
requireString(node.description, `${path}.nodes[${i}].description`, issues);
|
|
435
|
-
requireStringArray(node.satisfies_obligations, `${path}.nodes[${i}].satisfies_obligations`, issues);
|
|
436
|
-
if (node.addresses_counterexamples !== undefined) {
|
|
437
|
-
requireStringArray(node.addresses_counterexamples, `${path}.nodes[${i}].addresses_counterexamples`, issues);
|
|
438
|
-
}
|
|
439
|
-
requireStringArray(node.depends_on, `${path}.nodes[${i}].depends_on`, issues);
|
|
440
|
-
requireStringArray(node.verification_obligation_ids, `${path}.nodes[${i}].verification_obligation_ids`, issues);
|
|
441
|
-
requireStringArray(node.targeted_commands, `${path}.nodes[${i}].targeted_commands`, issues);
|
|
442
|
-
requireOneOf(node.status, IMPLEMENTATION_NODE_STATUSES, `${path}.nodes[${i}].status`, issues);
|
|
443
|
-
if (node.files_likely_touched !== undefined) {
|
|
444
|
-
requireStringArray(node.files_likely_touched, `${path}.nodes[${i}].files_likely_touched`, issues);
|
|
445
|
-
}
|
|
446
|
-
if (node.preconditions !== undefined) {
|
|
447
|
-
requireStringArray(node.preconditions, `${path}.nodes[${i}].preconditions`, issues);
|
|
448
|
-
}
|
|
449
|
-
if (node.expected_changes !== undefined && node.expected_changes !== null) {
|
|
450
|
-
if (typeof node.expected_changes !== "string") {
|
|
451
|
-
pushValidationIssue(issues, `${path}.nodes[${i}].expected_changes`, `${path}.nodes[${i}].expected_changes must be a string when present.`);
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
// Node ids referenced by edges must point at a declared node. The nodeIds set
|
|
457
|
-
// is built in the node loop above; an edge whose from/to names a non-existent
|
|
458
|
-
// node is a dangling reference (referential-integrity violation) that would
|
|
459
|
-
// otherwise promote into a plan whose block dependencies cite phantom nodes.
|
|
460
|
-
const declaredNodeIds = new Set();
|
|
461
|
-
if (Array.isArray(v.nodes)) {
|
|
462
|
-
for (const node of v.nodes) {
|
|
463
|
-
if (isRecord(node) && typeof node.id === "string")
|
|
464
|
-
declaredNodeIds.add(node.id);
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
if (!Array.isArray(v.edges)) {
|
|
468
|
-
pushValidationIssue(issues, `${path}.edges`, `${path}.edges must be an array.`);
|
|
469
|
-
}
|
|
470
|
-
else {
|
|
471
|
-
for (const [i, edge] of v.edges.entries()) {
|
|
472
|
-
if (!isRecord(edge)) {
|
|
473
|
-
pushValidationIssue(issues, `${path}.edges[${i}]`, `${path}.edges[${i}] must be an object.`);
|
|
474
|
-
continue;
|
|
475
|
-
}
|
|
476
|
-
requireString(edge.from, `${path}.edges[${i}].from`, issues);
|
|
477
|
-
requireString(edge.to, `${path}.edges[${i}].to`, issues);
|
|
478
|
-
requireOneOf(edge.kind, IMPLEMENTATION_EDGE_KINDS, `${path}.edges[${i}].kind`, issues);
|
|
479
|
-
if (typeof edge.from === "string" && edge.from.length > 0 && !declaredNodeIds.has(edge.from)) {
|
|
480
|
-
pushValidationIssue(issues, `${path}.edges[${i}].from`, `${path}.edges[${i}].from "${edge.from}" does not reference a declared node id.`);
|
|
481
|
-
}
|
|
482
|
-
if (typeof edge.to === "string" && edge.to.length > 0 && !declaredNodeIds.has(edge.to)) {
|
|
483
|
-
pushValidationIssue(issues, `${path}.edges[${i}].to`, `${path}.edges[${i}].to "${edge.to}" does not reference a declared node id.`);
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
// Acyclicity: an implementation DAG must be a DAG. Node `depends_on` is the
|
|
488
|
-
// ordering the block promotion reads, so a dependency cycle would stall the
|
|
489
|
-
// phase scheduler — no node in the cycle can ever become dispatchable. The
|
|
490
|
-
// tool-derived scaffold is acyclic by construction, but a host-authored cyclic
|
|
491
|
-
// `depends_on` must be rejected too (referential integrity alone let it pass).
|
|
492
|
-
// Traverse declared nodes only (a dangling dep is ignored, as promotion drops it).
|
|
493
|
-
if (Array.isArray(v.nodes)) {
|
|
494
|
-
const dagNodes = [];
|
|
495
|
-
for (const node of v.nodes) {
|
|
496
|
-
if (!isRecord(node) || typeof node.id !== "string")
|
|
497
|
-
continue;
|
|
498
|
-
const deps = Array.isArray(node.depends_on)
|
|
499
|
-
? node.depends_on.filter((d) => typeof d === "string" && d !== node.id && declaredNodeIds.has(d))
|
|
500
|
-
: [];
|
|
501
|
-
dagNodes.push({ id: node.id, depends_on: deps });
|
|
502
|
-
}
|
|
503
|
-
// Self-edges are stripped above and self-loops stay OFF in the core: a node
|
|
504
|
-
// that lists itself is a redundant self-reference here, not a cycle that
|
|
505
|
-
// stalls the phase scheduler.
|
|
506
|
-
const cycle = findFirstCycleWitness(dagNodes);
|
|
507
|
-
if (cycle) {
|
|
508
|
-
pushValidationIssue(issues, `${path}.nodes`, `${path} has a dependency cycle among nodes: ${cycle.join(" -> ")}. The implementation DAG must be acyclic.`);
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
requireString(v.created_at, `${path}.created_at`, issues);
|
|
512
|
-
return issues;
|
|
513
|
-
}
|
|
514
|
-
// ── VerificationReport ────────────────────────────────────────────────────────
|
|
515
|
-
export function validateVerificationReport(value, path = "verification_report") {
|
|
516
|
-
const issues = [];
|
|
517
|
-
// VerificationReport has no goal_id at the top level (it carries an optional
|
|
518
|
-
// goal_id elsewhere); skip the goal_id envelope check for this artifact.
|
|
519
|
-
const v = validateEnvelope(value, path, CONTRACT_PIPELINE_VERIFICATION_REPORT_VERSION, issues, {
|
|
520
|
-
goalId: false,
|
|
521
|
-
});
|
|
522
|
-
if (!v)
|
|
523
|
-
return issues;
|
|
524
|
-
if (!Array.isArray(v.findings)) {
|
|
525
|
-
pushValidationIssue(issues, `${path}.findings`, `${path}.findings must be an array.`);
|
|
526
|
-
}
|
|
527
|
-
else {
|
|
528
|
-
for (const [i, finding] of v.findings.entries()) {
|
|
529
|
-
if (!isRecord(finding)) {
|
|
530
|
-
pushValidationIssue(issues, `${path}.findings[${i}]`, `${path}.findings[${i}] must be an object.`);
|
|
531
|
-
continue;
|
|
532
|
-
}
|
|
533
|
-
requireString(finding.finding_id, `${path}.findings[${i}].finding_id`, issues);
|
|
534
|
-
if (!Array.isArray(finding.traces)) {
|
|
535
|
-
pushValidationIssue(issues, `${path}.findings[${i}].traces`, `${path}.findings[${i}].traces must be an array.`);
|
|
536
|
-
}
|
|
537
|
-
else {
|
|
538
|
-
for (const [j, trace] of finding.traces.entries()) {
|
|
539
|
-
if (!isRecord(trace)) {
|
|
540
|
-
pushValidationIssue(issues, `${path}.findings[${i}].traces[${j}]`, `${path}.findings[${i}].traces[${j}] must be an object.`);
|
|
541
|
-
continue;
|
|
542
|
-
}
|
|
543
|
-
requireString(trace.trace_id, `${path}.findings[${i}].traces[${j}].trace_id`, issues);
|
|
544
|
-
requireOneOf(trace.kind, VERIFICATION_TRACE_KINDS, `${path}.findings[${i}].traces[${j}].kind`, issues);
|
|
545
|
-
requireString(trace.label, `${path}.findings[${i}].traces[${j}].label`, issues);
|
|
546
|
-
requireStringArray(trace.evidence, `${path}.findings[${i}].traces[${j}].evidence`, issues);
|
|
547
|
-
requireOneOf(trace.status, VERIFICATION_TRACE_STATUSES, `${path}.findings[${i}].traces[${j}].status`, issues);
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
requireOneOf(finding.overall_status, VERIFICATION_FINDING_STATUSES, `${path}.findings[${i}].overall_status`, issues);
|
|
551
|
-
}
|
|
552
|
-
}
|
|
553
|
-
// Report-level overall_status stays strict passed|failed — "skipped" is a
|
|
554
|
-
// per-finding-only outcome (see FindingVerificationTrace doc comment).
|
|
555
|
-
requireOneOf(v.overall_status, VERIFICATION_REPORT_STATUSES, `${path}.overall_status`, issues);
|
|
556
|
-
requireString(v.created_at, `${path}.created_at`, issues);
|
|
557
|
-
return issues;
|
|
558
|
-
}
|
|
559
|
-
// ── CyclicSeamResolution ──────────────────────────────────────────────────────
|
|
560
|
-
export function validateCyclicSeamResolution(value, path = "cyclic_seam_resolution") {
|
|
561
|
-
const issues = [];
|
|
562
|
-
const v = validateEnvelope(value, path, CP_CYCLIC_SEAM_RESOLUTION_VERSION, issues);
|
|
563
|
-
if (!v)
|
|
564
|
-
return issues;
|
|
565
|
-
if (!Array.isArray(v.cycles)) {
|
|
566
|
-
pushValidationIssue(issues, `${path}.cycles`, `${path}.cycles must be an array.`);
|
|
567
|
-
}
|
|
568
|
-
else {
|
|
569
|
-
for (const [i, cycle] of v.cycles.entries()) {
|
|
570
|
-
if (!isRecord(cycle)) {
|
|
571
|
-
pushValidationIssue(issues, `${path}.cycles[${i}]`, `${path}.cycles[${i}] must be an object.`);
|
|
572
|
-
continue;
|
|
573
|
-
}
|
|
574
|
-
if (!Array.isArray(cycle.members) || cycle.members.some((m) => typeof m !== "string")) {
|
|
575
|
-
pushValidationIssue(issues, `${path}.cycles[${i}].members`, `${path}.cycles[${i}].members must be an array of strings.`);
|
|
576
|
-
}
|
|
577
|
-
// `break_strategy` was NOT validated here — it was checked later, and
|
|
578
|
-
// only on the authored-resolution path, against two inline literals. So a
|
|
579
|
-
// cycle record naming an unsanctioned strategy passed the CONTRACT
|
|
580
|
-
// validator that decides whether the artifact is admissible at all. The
|
|
581
|
-
// vocabulary now lives in the shared declaration the prompt sketch also
|
|
582
|
-
// renders, and this reads it.
|
|
583
|
-
requireOneOf(cycle.break_strategy, CYCLIC_SEAM_BREAK_STRATEGIES, `${path}.cycles[${i}].break_strategy`, issues);
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
requireOneOf(v.status, CYCLIC_SEAM_RESOLUTION_STATUSES, `${path}.status`, issues);
|
|
587
|
-
requireString(v.created_at, `${path}.created_at`, issues);
|
|
588
|
-
return issues;
|
|
589
|
-
}
|
|
590
|
-
// ── Validator registry ────────────────────────────────────────────────────────
|
|
591
|
-
/**
|
|
592
|
-
* One validator per contract-pipeline artifact payload. Used by the driver's
|
|
593
|
-
* ingestion pass (worker-written raw payloads are untrusted until validated)
|
|
594
|
-
* and by the artifacts validation sweep.
|
|
595
|
-
*/
|
|
596
|
-
export const CONTRACT_PIPELINE_VALIDATORS = {
|
|
597
|
-
goal_spec: validateGoalSpec,
|
|
598
|
-
context_bundle: validateContextBundle,
|
|
599
|
-
module_decomposition: validateModuleDecomposition,
|
|
600
|
-
module_contracts: validateModuleContracts,
|
|
601
|
-
seam_reconciliation_report: validateSeamReconciliationReport,
|
|
602
|
-
finalized_module_contracts: validateFinalizedModuleContracts,
|
|
603
|
-
conceptual_design_critique: validateConceptualDesignCritique,
|
|
604
|
-
obligation_ledger: validateObligationLedger,
|
|
605
|
-
cyclic_seam_resolution: validateCyclicSeamResolution,
|
|
606
|
-
test_validator_plan: validateTestValidatorPlan,
|
|
607
|
-
contract_assessment_report: validateContractAssessmentReport,
|
|
608
|
-
counterexample: validateCounterexample,
|
|
609
|
-
judge_report: validateJudgeReport,
|
|
610
|
-
implementation_dag: validateImplementationDAG,
|
|
611
|
-
verification_report: validateVerificationReport,
|
|
612
|
-
};
|
|
613
|
-
//# sourceMappingURL=contractPipeline.js.map
|