audit-tools 0.52.5 → 0.53.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/dispatch/hostHandoff.d.ts +2 -0
- package/dist/audit/cli/dispatch/hostHandoff.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/hostHandoff.js +1 -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/nextStepCommand.d.ts.map +1 -1
- package/dist/audit/cli/nextStepCommand.js +42 -20
- 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 +50 -75
- 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/architectureDiscovery.d.ts +11 -0
- package/dist/audit/orchestrator/architectureDiscovery.d.ts.map +1 -0
- package/dist/audit/orchestrator/architectureDiscovery.js +174 -0
- package/dist/audit/orchestrator/architectureDiscovery.js.map +1 -0
- 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/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 +1 -13
- package/dist/audit/orchestrator/executors.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 +5 -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/state.d.ts.map +1 -1
- package/dist/audit/orchestrator/state.js +2 -0
- 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 +12 -12
- 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 +259 -3854
- 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 +255 -1028
- package/dist/remediate/steps/nextStep.js.map +1 -1
- package/dist/remediate/steps/prompts.js +12 -12
- 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 +6 -0
- package/dist/shared/loopCorePaths.js.map +1 -1
- package/dist/shared/prompts.d.ts +1 -2
- package/dist/shared/prompts.d.ts.map +1 -1
- package/dist/shared/prompts.js +1 -2
- 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 +1 -1
- 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,590 +1,57 @@
|
|
|
1
|
-
// sites-pinned: tests/remediate/contract-pipeline-prompts.test.ts, tests/remediate/step-prompt-sketch-drift.test.ts, tests/remediate/contract-validation-gates.test.ts
|
|
2
|
-
/**
|
|
3
|
-
* Bounded prompt renderers for each of the contract-pipeline roles.
|
|
4
|
-
* Each renderer accepts only the required artifact paths for its role and
|
|
5
|
-
* fails fast when any required path is missing. Prompts stay path-based and
|
|
6
|
-
* schema-grounded rather than embedding raw artifact content.
|
|
7
|
-
*/
|
|
8
|
-
import { DEPENDENCY_MAP } from "../contractPipeline/artifactStore.js";
|
|
9
|
-
import { GOAL_ID_MAX_LENGTH } from "../contractPipeline/idRegistry.js";
|
|
10
|
-
import { ASSESSMENT_FINDING_STATUSES, ASSESSMENT_VERDICTS, CONTRACT_REPAIR_TARGETS_OFFERED, CONTEXT_ENTRY_KINDS, COUNTEREXAMPLE_CLASSIFICATIONS, CONCEPTUAL_CRITIQUE_REPAIR_TARGETS, CRITIQUE_ITEM_KINDS, CRITIQUE_ITEM_SEVERITIES, CRITIQUE_VERDICTS, GOAL_SOURCE_TYPES, IMPLEMENTATION_EDGE_KINDS, IMPLEMENTATION_NODE_STATUSES, JUDGE_VERDICTS, OBLIGATION_KINDS, OBLIGATION_STATUSES, SEAM_RESOLUTION_DECISIONS, TEST_SPEC_KINDS, sketchValues, } from "../contractPipeline/sketchSource.js";
|
|
11
|
-
import { renderIndependentReviewMandate } from "audit-tools/shared";
|
|
12
|
-
import { loaderCommand } from "./prompts.js";
|
|
13
|
-
/**
|
|
14
|
-
* The ONE statement of the `targeted_commands` rule. The tool executes each
|
|
15
|
-
* entry verbatim through a shell, one invocation per entry; the rule is
|
|
16
|
-
* single-sourced in `audit-tools/shared` (`commandLeavesDeclaredShape`), and
|
|
17
|
-
* this text states it where the field is written. A worker that emitted
|
|
18
|
-
* `npm run build && npm run check` on 23 nodes cost a whole DAG regeneration.
|
|
19
|
-
*/
|
|
20
|
-
const TARGETED_COMMANDS_RULE = "`targeted_commands`: one command per entry, run verbatim through a shell. Write `\"npm run build\"` and `\"npm run check\"` as two entries, never `\"npm run build && npm run check\"`. Do not use a pipe, a redirect, `;` or command substitution: the tool refuses those, and the whole DAG is written again.";
|
|
21
|
-
export const ROLES = {
|
|
22
|
-
goal_normalization: {
|
|
23
|
-
title: "Goal Normalization",
|
|
24
|
-
outputKey: "goal_spec",
|
|
25
|
-
outputSchema: `{
|
|
26
|
-
"contract_version": "remediate-code-contract-pipeline/goal-spec/v1alpha1",
|
|
27
|
-
"goal_id": "<stable-identifier>",
|
|
28
|
-
"objective": "<single-sentence primary objective>",
|
|
29
|
-
"non_goals": ["<explicit out-of-scope items>"],
|
|
30
|
-
"success_criteria": ["<measurable criteria>"],
|
|
31
|
-
"source_type": "${sketchValues(GOAL_SOURCE_TYPES)}"
|
|
32
|
-
}`,
|
|
33
|
-
description: "State the remediation objective as one bounded goal.",
|
|
34
|
-
fieldRules: [
|
|
35
|
-
`\`goal_id\` is kebab-case: a lowercase letter first, then lowercase letters, digits and single \`-\` separators, at most ${GOAL_ID_MAX_LENGTH} characters.`,
|
|
36
|
-
],
|
|
37
|
-
pathASeed: "Frame the goal around these findings.",
|
|
38
|
-
},
|
|
39
|
-
context_collection: {
|
|
40
|
-
title: "Context Collection",
|
|
41
|
-
outputKey: "context_bundle",
|
|
42
|
-
outputSchema: `{
|
|
43
|
-
"contract_version": "remediate-code-contract-pipeline/context-bundle/v1alpha1",
|
|
44
|
-
"goal_id": "<from goal_spec>",
|
|
45
|
-
"entries": [{ "path": "<repo-relative>", "kind": "${sketchValues(CONTEXT_ENTRY_KINDS)}", "relevance_reason": "..." }],
|
|
46
|
-
"context_summary": "<free-text summary>"
|
|
47
|
-
}`,
|
|
48
|
-
description: "Collect the code and documents that the goal touches. Give one reason for each entry.",
|
|
49
|
-
fieldRules: ["Every `path` is relative to the repository root."],
|
|
50
|
-
repoReads: "that are relevant to the goal",
|
|
51
|
-
pathASeed: "Include every file these findings name.",
|
|
52
|
-
},
|
|
53
|
-
decomposition: {
|
|
54
|
-
title: "Module Decomposition",
|
|
55
|
-
outputKey: "module_decomposition",
|
|
56
|
-
outputSchema: `{
|
|
57
|
-
"contract_version": "remediate-code-contract-pipeline/module-decomposition/v1alpha1",
|
|
58
|
-
"goal_id": "<from goal_spec>",
|
|
59
|
-
"modules": [{
|
|
60
|
-
"name": "<module-name>",
|
|
61
|
-
"responsibilities": "<brief description of what this module does>",
|
|
62
|
-
"file_scope": ["<repo-relative paths owned by this module>"],
|
|
63
|
-
"source_work_block_ids": ["<audit work-block ids implemented by this module; [] outside Path A>"],
|
|
64
|
-
"prepares_seam_ids": ["<required audit seam ids prepared by this module before parallel refactors; [] when none>"]
|
|
65
|
-
}]
|
|
66
|
-
}`,
|
|
67
|
-
description: "Split the goal into named modules. Give each module its responsibility and the files it owns. On Path A, map modules to work blocks with `source_work_block_ids`, and add one seam-preparation module for each seam in the seed where `requires_preparation` is true (one module may prepare several seams). Do not draft contracts.",
|
|
68
|
-
fieldRules: [
|
|
69
|
-
"Scope each module at the file that holds its logic, never at a file that only re-exports (`export * from …`, `export { x } from …`).",
|
|
70
|
-
"Every `file_scope` path exists in the repository.",
|
|
71
|
-
"A seam-preparation module lists the seams in `prepares_seam_ids`, and its `file_scope` includes each prepared seam's `file`.",
|
|
72
|
-
],
|
|
73
|
-
repoReads: "to confirm where each module's logic lives",
|
|
74
|
-
pathASeed: "Map every work block in the seed to a module.",
|
|
75
|
-
},
|
|
76
|
-
module_contract_drafting: {
|
|
77
|
-
title: "Per-Module Contract Drafting",
|
|
78
|
-
outputKey: "module_contracts",
|
|
79
|
-
outputSchema: `{
|
|
80
|
-
"contract_version": "remediate-code-contract-pipeline/module-contracts/v1alpha1",
|
|
81
|
-
"goal_id": "<from goal_spec>",
|
|
82
|
-
"module_contracts": [{
|
|
83
|
-
"name": "<module-name — must match module_decomposition>",
|
|
84
|
-
"inputs": ["<what this module receives as input>"],
|
|
85
|
-
"outputs": ["<what this module produces as output>"],
|
|
86
|
-
"invariants": ["<invariant that must hold — include a verification_obligation note>"],
|
|
87
|
-
"side_effects": ["<observable side-effects with owner>"],
|
|
88
|
-
"validation_boundary": "<what this module validates vs. what callers must guarantee>",
|
|
89
|
-
"failure_modes": ["<ways this module can fail and how callers should handle them>"],
|
|
90
|
-
"neighbor_needs": [{
|
|
91
|
-
"neighbor": "<module-name>",
|
|
92
|
-
"needs": "<what this module needs from that neighbor>"
|
|
93
|
-
}]
|
|
94
|
-
}]
|
|
95
|
-
}`,
|
|
96
|
-
description: "Draft a contract for each module in the decomposition: inputs, outputs, invariants, side effects, validation boundary, failure modes, and what it needs from each neighbor.",
|
|
97
|
-
fieldRules: [
|
|
98
|
-
"Each `name` equals a module name in the decomposition.",
|
|
99
|
-
"`inputs` and `outputs` are not empty.",
|
|
100
|
-
"On Path A, each finding id in the seed appears in an invariant, a failure mode, an input or an output.",
|
|
101
|
-
],
|
|
102
|
-
repoReads: "in each module's file scope",
|
|
103
|
-
pathASeed: "Cover every finding id in the seed.",
|
|
104
|
-
},
|
|
105
|
-
seam_reconciliation: {
|
|
106
|
-
title: "Seam Reconciliation",
|
|
107
|
-
outputKey: "seam_reconciliation_report",
|
|
108
|
-
outputSchema: `{
|
|
109
|
-
"contract_version": "remediate-code-contract-pipeline/seam-reconciliation-report/v1alpha1",
|
|
110
|
-
"goal_id": "<from module_contracts>",
|
|
111
|
-
"mismatches": [{
|
|
112
|
-
"seam_id": "<seam-identifier>",
|
|
113
|
-
"module_a": "<module-name>",
|
|
114
|
-
"module_b": "<module-name>",
|
|
115
|
-
"description": "<what A declares vs. what B declares — the mismatch>",
|
|
116
|
-
"resolution": {
|
|
117
|
-
"decision": "<which side adjusts — ${sketchValues(SEAM_RESOLUTION_DECISIONS)}>",
|
|
118
|
-
"agreed_interface": "<the reconciled interface both sides must adopt>"
|
|
119
|
-
}
|
|
120
|
-
}]
|
|
121
|
-
}`,
|
|
122
|
-
description: "For each seam where one module's output differs from its neighbor's input or need, record the mismatch, which side adjusts, and the agreed interface. An empty `mismatches` list is correct when every seam agrees.",
|
|
123
|
-
fieldRules: [
|
|
124
|
-
"`module_a` and `module_b` are exact module names from the module contracts.",
|
|
125
|
-
],
|
|
126
|
-
},
|
|
127
|
-
contract_finalization: {
|
|
128
|
-
title: "Per-Module Contract Finalization",
|
|
129
|
-
outputKey: "finalized_module_contracts",
|
|
130
|
-
outputSchema: `{
|
|
131
|
-
"contract_version": "remediate-code-contract-pipeline/finalized-module-contracts/v1alpha1",
|
|
132
|
-
"goal_id": "<from module_contracts>",
|
|
133
|
-
"module_contracts": [{
|
|
134
|
-
"name": "<module-name>",
|
|
135
|
-
"inputs": ["<final — incorporating reconciliation decisions; tag a shared artifact this module CONSUMES with an 'artifact:<name>' token>"],
|
|
136
|
-
"outputs": ["<final — incorporating reconciliation decisions; tag a shared artifact this module PRODUCES with an 'artifact:<name>' token>"],
|
|
137
|
-
"invariants": ["<invariant id + description>"],
|
|
138
|
-
"side_effects": ["<side-effect with owner>"],
|
|
139
|
-
"validation_boundary": "<finalized validation boundary>",
|
|
140
|
-
"failure_modes": ["<failure mode + caller handling>"],
|
|
141
|
-
"seam_adjustments": ["<adjustments made per seam_reconciliation_report, if any>"]
|
|
142
|
-
}]
|
|
143
|
-
}`,
|
|
144
|
-
description: "Apply each reconciliation decision and write the final contract for each module. Record the seam adjustments you applied. When one module produces something another consumes, tag it as `artifact:<name>` (for example `artifact:validated-roster`) in the producer's `outputs` and in the consumer's `inputs`: the tool orders the implementation from these tokens.",
|
|
145
|
-
fieldRules: [
|
|
146
|
-
"Keep the module set exactly: one contract for each module in `module_contracts`, and no other.",
|
|
147
|
-
"`inputs` and `outputs` are not empty.",
|
|
148
|
-
"Do not add `depends_on`.",
|
|
149
|
-
],
|
|
150
|
-
},
|
|
151
|
-
// Repair only: the tool derives the obligation ledger itself
|
|
152
|
-
// (`contractPipeline/derive.ts`), so this role reaches a worker only as the
|
|
153
|
-
// target of a judge repair. The text states that derivation, because a
|
|
154
|
-
// repaired ledger passes the same gates as a derived one.
|
|
155
|
-
obligation_ledger: {
|
|
156
|
-
title: "Obligation Ledger",
|
|
157
|
-
outputKey: "obligation_ledger",
|
|
158
|
-
outputSchema: `{
|
|
159
|
-
"contract_version": "remediate-code-contract-pipeline/obligation-ledger/v1alpha1",
|
|
160
|
-
"goal_id": "<from goal_spec>",
|
|
161
|
-
"obligations": [{
|
|
162
|
-
"id": "OBL-<module-slug>-<suffix>",
|
|
163
|
-
"description": "<concrete obligation>",
|
|
164
|
-
"kind": "${sketchValues(OBLIGATION_KINDS)}",
|
|
165
|
-
"depends_on": [],
|
|
166
|
-
"status": "${sketchValues(OBLIGATION_STATUSES)}",
|
|
167
|
-
"module": "<module-name>",
|
|
168
|
-
"change_classification": "<keep the value from the current ledger>",
|
|
169
|
-
"source_finding_ids": ["<audit finding id this obligation implements, when any>"]
|
|
170
|
-
}]
|
|
171
|
-
}`,
|
|
172
|
-
description: "Rewrite the obligation ledger from the finalized module contracts.",
|
|
173
|
-
fieldRules: [
|
|
174
|
-
"One `structural` obligation for each module, one `invariant` obligation for each module invariant, and one `behavioral` obligation for each module failure mode.",
|
|
175
|
-
"Each id is `OBL-<module-slug>-<suffix>`. The suffix is `contract` for the structural obligation, `inv-<n>` for the n-th invariant and `fail-<n>` for the n-th failure mode. `<module-slug>` is the module name in lowercase, with each run of other characters replaced by one `-`.",
|
|
176
|
-
"`module` is the module name. Keep each obligation's `change_classification` from the current ledger.",
|
|
177
|
-
"Keep every audit finding id that the current ledger names, in `source_finding_ids` or in the description.",
|
|
178
|
-
],
|
|
179
|
-
},
|
|
180
|
-
critique: {
|
|
181
|
-
title: "Conceptual Design Critique",
|
|
182
|
-
outputKey: "conceptual_design_critique",
|
|
183
|
-
outputSchema: `{
|
|
184
|
-
"contract_version": "remediate-code-contract-pipeline/conceptual-design-critique/v1alpha1",
|
|
185
|
-
"goal_id": "<from goal_spec>",
|
|
186
|
-
"items": [{ "id": "<id>", "kind": "${sketchValues(CRITIQUE_ITEM_KINDS)}", "description": "...", "severity": "${sketchValues(CRITIQUE_ITEM_SEVERITIES)}" }],
|
|
187
|
-
"repair_target": "${sketchValues(CONCEPTUAL_CRITIQUE_REPAIR_TARGETS)}",
|
|
188
|
-
"verdict": "${sketchValues(CRITIQUE_VERDICTS)}"
|
|
189
|
-
}`,
|
|
190
|
-
description: "Critique the finalized module contracts and their owning module decomposition: philosophy, alternatives, direction, and declared file scope.",
|
|
191
|
-
fieldRules: [
|
|
192
|
-
"For blocking interface changes, set `repair_target` to `finalized_module_contracts`. For module ownership, module-set, or `file_scope` changes, select the owning `module_decomposition` artifact; never invent these fields in finalized interfaces. Mark genuinely optional concerns `advisory`.",
|
|
193
|
-
],
|
|
194
|
-
reviewPolicy: { full: "independent", light: "degraded_allowed" },
|
|
195
|
-
},
|
|
196
|
-
test_validator_plan: {
|
|
197
|
-
title: "Test and Validator Plan",
|
|
198
|
-
outputKey: "test_validator_plan",
|
|
199
|
-
outputSchema: `{
|
|
200
|
-
"contract_version": "remediate-code-contract-pipeline/test-validator-plan/v1alpha1",
|
|
201
|
-
"goal_id": "<from goal_spec>",
|
|
202
|
-
"test_specs": [{
|
|
203
|
-
"obligation_id": "<id from obligation_ledger>",
|
|
204
|
-
"name": "<short test name>",
|
|
205
|
-
"kind": "${sketchValues(TEST_SPEC_KINDS)}",
|
|
206
|
-
"assertions": ["<concrete, falsifiable assertion>"],
|
|
207
|
-
"inapplicable_claim": {
|
|
208
|
-
"obligation_id": "<must match obligation_id above>",
|
|
209
|
-
"reason": "<falsifiable reason checkable against the ledger>"
|
|
210
|
-
}
|
|
211
|
-
}]
|
|
212
|
-
}`,
|
|
213
|
-
description: "Write one test spec for each invariant and behavioral obligation, before any implementation. To dispute an obligation, write an `inapplicable_claim` with a reason that the ledger can disprove. Do not invent obligations.",
|
|
214
|
-
fieldRules: [
|
|
215
|
-
"A spec for a behavior change has at least one positive (success-path) assertion and one negative (failure-path) assertion. The negative assertion names the changed symbol or file, not the whole repository. An obligation classified as an addition needs one assertion of either kind.",
|
|
216
|
-
"A disputed spec has only `obligation_id`, `name` and `inapplicable_claim`, and the claim's `obligation_id` equals the spec's.",
|
|
217
|
-
],
|
|
218
|
-
},
|
|
219
|
-
assessment: {
|
|
220
|
-
title: "Contract Assessment",
|
|
221
|
-
outputKey: "contract_assessment_report",
|
|
222
|
-
outputSchema: `{
|
|
223
|
-
"contract_version": "remediate-code-contract-pipeline/contract-assessment-report/v1alpha1",
|
|
224
|
-
"goal_id": "<from goal_spec>",
|
|
225
|
-
"findings": [{ "obligation_id": "<id>", "status": "${sketchValues(ASSESSMENT_FINDING_STATUSES)}", "evidence": ["..."], "rationale": "..." }],
|
|
226
|
-
"verdict": "${sketchValues(ASSESSMENT_VERDICTS)}"
|
|
227
|
-
}`,
|
|
228
|
-
description: "For each obligation, state whether the design satisfies it, with evidence.",
|
|
229
|
-
fieldRules: ["A `violated` finding lists at least one evidence entry."],
|
|
230
|
-
},
|
|
231
|
-
critic: {
|
|
232
|
-
title: "Adversarial Critic (Counterexample Search)",
|
|
233
|
-
outputKey: "counterexample",
|
|
234
|
-
outputSchema: `{
|
|
235
|
-
"contract_version": "remediate-code-contract-pipeline/counterexample/v1alpha1",
|
|
236
|
-
"goal_id": "<from goal_spec>",
|
|
237
|
-
"counterexamples": [{
|
|
238
|
-
"id": "CE-001",
|
|
239
|
-
"claim": "<the design/assessment claim being falsified>",
|
|
240
|
-
"reproduction_steps": ["<concrete step>"],
|
|
241
|
-
"expected": "<what the design promises>",
|
|
242
|
-
"actual": "<what actually happens under this counterexample>",
|
|
243
|
-
"violated_obligation_ids": ["<obligation_id>"]
|
|
244
|
-
}]
|
|
245
|
-
}`,
|
|
246
|
-
description: "Adversarially attack the design: produce concrete counterexamples that falsify design invariants, obligations, or assessment claims. Each counterexample must name the claim it falsifies, concrete reproduction steps, and the obligation(s) it violates. Search hard for inputs, orderings, and edge states the design mishandles; an empty counterexamples array is only acceptable when you genuinely cannot falsify anything.",
|
|
247
|
-
reviewPolicy: { full: "independent", light: "degraded_allowed" },
|
|
248
|
-
},
|
|
249
|
-
judge: {
|
|
250
|
-
title: "Adversarial Judge",
|
|
251
|
-
outputKey: "judge_report",
|
|
252
|
-
outputSchema: `{
|
|
253
|
-
"contract_version": "remediate-code-contract-pipeline/judge-report/v1alpha1",
|
|
254
|
-
"goal_id": "<from goal_spec>",
|
|
255
|
-
"verdict": "${sketchValues(JUDGE_VERDICTS)}",
|
|
256
|
-
"classifications": [{
|
|
257
|
-
"counterexample_id": "<id from the counterexample report>",
|
|
258
|
-
"classification": "${sketchValues(COUNTEREXAMPLE_CLASSIFICATIONS)}",
|
|
259
|
-
"rationale": "<one-line justification>"
|
|
260
|
-
}],
|
|
261
|
-
"repair_directive": {
|
|
262
|
-
"target": "${sketchValues(CONTRACT_REPAIR_TARGETS_OFFERED)}",
|
|
263
|
-
"instruction": "<bounded instruction for regenerating the target artifact>"
|
|
264
|
-
}
|
|
265
|
-
}`,
|
|
266
|
-
description: "Judge every counterexample from the critic: `accepted` (a real flaw the contract must address), `out_of_scope` (outside the goal spec), `duplicate`, `invalid` (does not falsify the claim), or `residual_risk` (real but tolerable; recorded, not repaired). The verdict is `approved` only when no accepted counterexample needs a contract repair; then omit `repair_directive`. Otherwise the verdict is `needs_repair`, and `repair_directive` names the one artifact whose rewrite addresses the accepted counterexamples.",
|
|
267
|
-
fieldRules: [
|
|
268
|
-
`\`repair_directive.target\` is one of ${CONTRACT_REPAIR_TARGETS_OFFERED.map((t) => `\`${t}\``).join(", ")}.`,
|
|
269
|
-
"A repair must be expressible in the target's own schema. For `finalized_module_contracts`, that is the seven interface fields, prose `seam_adjustments`, and implementation order only as `artifact:<name>` tokens in `inputs` and `outputs`, with the module set kept. For module ownership, a new module, or `file_scope`, target `module_decomposition`; downstream contracts and obligations are re-derived by the tool. Never invent unsupported schema fields or classify an otherwise blocking defect as tolerated merely because its fix belongs upstream.",
|
|
270
|
-
],
|
|
271
|
-
reviewPolicy: { full: "independent", light: "independent" },
|
|
272
|
-
},
|
|
273
|
-
implementation_planning: {
|
|
274
|
-
title: "Implementation Planning (DAG)",
|
|
275
|
-
outputKey: "implementation_dag",
|
|
276
|
-
outputSchema: `{
|
|
277
|
-
"contract_version": "remediate-code-contract-pipeline/implementation-dag/v1alpha1",
|
|
278
|
-
"goal_id": "<from goal_spec>",
|
|
279
|
-
"nodes": [{
|
|
280
|
-
"id": "<task-id>",
|
|
281
|
-
"title": "<short title>",
|
|
282
|
-
"description": "<bounded task description>",
|
|
283
|
-
"satisfies_obligations": ["<obligation_id>"],
|
|
284
|
-
"addresses_counterexamples": ["<accepted counterexample id, when applicable>"],
|
|
285
|
-
"addressed_critique_items": ["<advisory conceptual-critique id this node honours, when applicable>"],
|
|
286
|
-
"depends_on": ["<task-id>"],
|
|
287
|
-
"output_files": ["<EVERY file this node creates or edits — the tests it must write, the source a generated artifact mirrors, new shared modules, manifests>"],
|
|
288
|
-
"verification_obligation_ids": ["<obligation_id>"],
|
|
289
|
-
"targeted_commands": ["<command to verify>"],
|
|
290
|
-
"status": "${sketchValues(IMPLEMENTATION_NODE_STATUSES)}"
|
|
291
|
-
}],
|
|
292
|
-
"edges": [{ "from": "<id>", "to": "<id>", "kind": "${sketchValues(IMPLEMENTATION_EDGE_KINDS)}" }]
|
|
293
|
-
}`,
|
|
294
|
-
description: "Split the implementation into a dependency DAG of bounded tasks.",
|
|
295
|
-
fieldRules: [
|
|
296
|
-
"Every node lists at least one obligation id (in `satisfies_obligations` or `verification_obligation_ids`) or one accepted counterexample id (in `addresses_counterexamples`).",
|
|
297
|
-
"Every accepted counterexample that is not waived is in some node's `addresses_counterexamples`.",
|
|
298
|
-
"`output_files` lists every file the node creates or edits: the tests it writes, the sources a generated artifact mirrors, new shared modules and manifests. Each file is in a directory that exists.",
|
|
299
|
-
TARGETED_COMMANDS_RULE,
|
|
300
|
-
],
|
|
301
|
-
},
|
|
302
|
-
};
|
|
303
|
-
/**
|
|
304
|
-
* Phases whose value is adversarial independence — the reviewer must NOT be the
|
|
305
|
-
* author of the design under review. Declared in ROLES' explicit reviewPolicy
|
|
306
|
-
* so the set is always in sync with the phase definitions and never hand-maintained.
|
|
307
|
-
*
|
|
308
|
-
* Currently includes 'critique' (conceptual design critique), 'critic' (counterexample search), and
|
|
309
|
-
* 'judge' (adjudicates the critic's counterexamples — a judge who authored the
|
|
310
|
-
* design systematically dismisses valid counterexamples against it, so the
|
|
311
|
-
* adjudication is only worth anything from an independent reviewer; memory:
|
|
312
|
-
* delegate the judge too). The 'assessment' phase is the author's OWN coverage
|
|
313
|
-
* self-assessment (not an adversarial review of someone else's work), so it is
|
|
314
|
-
* intentionally excluded (no review policy).
|
|
315
|
-
*/
|
|
316
1
|
export function reviewRequirementForRole(role, depth) {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
return "";
|
|
351
|
-
return `\n## Field Rules\n\n${rules.map((rule) => `- ${rule}`).join("\n")}\n`;
|
|
352
|
-
}
|
|
353
|
-
/** The self-check block both prompts end with. */
|
|
354
|
-
function renderSelfCheck(outputKey, outputPath, repoRoot) {
|
|
355
|
-
return `
|
|
356
|
-
Check the file before you stop:
|
|
357
|
-
|
|
358
|
-
\`${loaderCommand(`validate-artifact --name ${outputKey} --file ${outputPath}${repoRoot ? ` --root ${repoRoot}` : ""}`)}\`
|
|
359
|
-
|
|
360
|
-
\`status: "ok"\` means the file is admissible. Otherwise, fix each problem it names.
|
|
361
|
-
`;
|
|
362
|
-
}
|
|
363
|
-
function renderCwdNote(repoRoot) {
|
|
364
|
-
return repoRoot
|
|
365
|
-
? `\n> Set the shell/tool working directory to \`${repoRoot}\` before running any commands.\n`
|
|
366
|
-
: "";
|
|
367
|
-
}
|
|
368
|
-
/**
|
|
369
|
-
* The artifacts a role must read, DERIVED from the artifact store's dependency
|
|
370
|
-
* DAG rather than re-declared per role.
|
|
371
|
-
*
|
|
372
|
-
* `DEPENDENCY_MAP[outputKey]` is already the authoritative statement of what
|
|
373
|
-
* this artifact is built from — it is what re-stales the artifact when an
|
|
374
|
-
* upstream changes, and (with `writeDerivedContractArtifact`) every entry in it
|
|
375
|
-
* is a file some producer actually wrote. Reading the prompt's input list off
|
|
376
|
-
* the same map means the two can never disagree: a prompt cannot name an input
|
|
377
|
-
* nothing produces, and a new dependency cannot be added to the DAG while the
|
|
378
|
-
* prompt still withholds it from the worker.
|
|
379
|
-
*/
|
|
380
|
-
function requiredInputKeysFor(role) {
|
|
381
|
-
return DEPENDENCY_MAP[role.outputKey];
|
|
382
|
-
}
|
|
383
|
-
/**
|
|
384
|
-
* Render a bounded prompt for the given contract-pipeline role.
|
|
385
|
-
* Throws a descriptive error when any required artifact path is missing.
|
|
386
|
-
*/
|
|
387
|
-
export function renderContractPipelinePrompt(input) {
|
|
388
|
-
const role = ROLES[input.role];
|
|
389
|
-
if (!role) {
|
|
390
|
-
throw new Error(`Unknown contract-pipeline role: "${input.role}". Valid roles: ${Object.keys(ROLES).join(", ")}.`);
|
|
391
|
-
}
|
|
392
|
-
const requiredInputKeys = requiredInputKeysFor(role);
|
|
393
|
-
// Validate required inputs.
|
|
394
|
-
for (const key of requiredInputKeys) {
|
|
395
|
-
if (!input.artifactPaths[key]) {
|
|
396
|
-
throw new Error(`Contract-pipeline role "${input.role}" requires artifact path for "${key}" but it was not provided.`);
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
const outputPath = input.artifactPaths[role.outputKey];
|
|
400
|
-
if (!outputPath) {
|
|
401
|
-
throw new Error(`Contract-pipeline role "${input.role}" requires output artifact path for "${role.outputKey}" but it was not provided.`);
|
|
402
|
-
}
|
|
403
|
-
const inputSections = requiredInputKeys.map((key) => {
|
|
404
|
-
const canonical = input.artifactReadPaths?.[key];
|
|
405
|
-
const path = canonical ?? input.artifactPaths[key];
|
|
406
|
-
return `- \`${path}\` (${key}${input.artifactReadPaths ? canonical ? "; canonical envelope: read payload" : "; staged raw domain artifact" : ""})`;
|
|
407
|
-
});
|
|
408
|
-
const sourceSections = input.sourcePaths && input.sourcePaths.length > 0
|
|
409
|
-
? `\n## Source Inputs\n\n${input.sourcePaths.map((p) => `- \`${p}\``).join("\n")}\n`
|
|
410
|
-
: "";
|
|
411
|
-
const pathASeedSection = input.pathASeedPath && role.pathASeed
|
|
412
|
-
? `\n## Path-A Audit Seed\n\n- \`${input.pathASeedPath}\` (path_a_seed) — ${role.pathASeed}\n`
|
|
413
|
-
: "";
|
|
414
|
-
const readScope = role.repoReads
|
|
415
|
-
? `Read the files above. You may also read repository files ${role.repoReads}.`
|
|
416
|
-
: "Read the files above. Do not read other files.";
|
|
417
|
-
const independentCriticDirective = renderIndependentCriticDirective(input.role, input.adversarialDepth);
|
|
418
|
-
const prompt = `# ${role.title}
|
|
419
|
-
|
|
420
|
-
${role.description}
|
|
421
|
-
${renderCwdNote(input.repoRoot)}${independentCriticDirective}
|
|
422
|
-
## Required Inputs
|
|
423
|
-
${inputSections.length > 0 ? inputSections.join("\n") : "_No artifact inputs required for this role._"}
|
|
424
|
-
${input.artifactReadPaths ? "For inputs marked canonical, read the `payload` field as domain data; review provenance is metadata. Inputs marked staged are raw artifacts authored earlier in this same round trip. Do not edit canonical files." : ""}
|
|
425
|
-
${sourceSections}${pathASeedSection}
|
|
426
|
-
## What You May Read
|
|
427
|
-
|
|
428
|
-
${readScope}
|
|
429
|
-
|
|
430
|
-
## Your Task
|
|
431
|
-
|
|
432
|
-
Write the complete artifact to exactly:
|
|
433
|
-
|
|
434
|
-
\`${outputPath}\`
|
|
435
|
-
|
|
436
|
-
It must have this JSON shape:
|
|
437
|
-
|
|
438
|
-
\`\`\`json
|
|
439
|
-
${role.outputSchema}
|
|
440
|
-
\`\`\`
|
|
441
|
-
${renderFieldRules(role.fieldRules)}${renderSelfCheck(role.outputKey, outputPath, input.repoRoot)}
|
|
442
|
-
**Stop after you write the output file.** Do not edit source files. Do not start the next phase.
|
|
2
|
+
return role === "judge" || depth !== "light" ? "independent" : "degraded_allowed";
|
|
3
|
+
}
|
|
4
|
+
export function renderPlanAuthorPrompt(params) {
|
|
5
|
+
return `# ${params.canonical ? "Revise" : "Author"} the executable change plan
|
|
6
|
+
|
|
7
|
+
Goal: make the agreed changes and demonstrate that they work. Plan cohesive implementation units, not a complete restatement of every module in the repository.
|
|
8
|
+
Read ${params.sourcePath}${params.canonical ? ` and ${params.planPath}` : ""}. Source finding identities and payloads are immutable provenance. You may inspect repository source/tests/configuration relevant to this request beneath ${params.root}. Inspect actual source before deciding the affected behavior and boundaries.
|
|
9
|
+
${params.reason ? `\nRequired corrections:\n${params.reason}\n` : ""}
|
|
10
|
+
${params.history.accepted_ids.length ? `Accepted counterexamples that must remain addressed:\n${JSON.stringify(params.history, null, 2)}` : ""}
|
|
11
|
+
|
|
12
|
+
Write ONLY ${params.outputPath}, with this shape:
|
|
13
|
+
${JSON.stringify({
|
|
14
|
+
base_revision_sha256: params.canonical?.revision_sha256 ?? null,
|
|
15
|
+
plan: {
|
|
16
|
+
plan_id: params.source.plan_id,
|
|
17
|
+
objective: "<agreed goal>", non_goals: [],
|
|
18
|
+
requirements: [{ id: "REQ-stable-name", description: "<specific required behavior>", source_finding_ids: params.source.findings.map(f => f.id), change_kind: "behavior_change", assertions: [
|
|
19
|
+
{ kind: "positive", description: "<falsifiable success case>", scope_paths: ["<affected source/test>"] },
|
|
20
|
+
{ kind: "negative", description: "<falsifiable failure/regression case>", scope_paths: ["<affected source/test>"] },
|
|
21
|
+
] }],
|
|
22
|
+
units: [{ id: "UNIT-stable-name", title: "<cohesive change>", description: "<exact implementation intent>", source_finding_ids: params.source.findings.map(f => f.id), requirement_ids: ["REQ-stable-name"], dependencies: [], read_paths: ["<existing source/test>"], allowed_files: ["<every source/test/config file to edit or create>"], required_tests: ["<one executable command per entry>"], affected_interfaces: [], addresses_counterexample_ids: params.history.accepted_ids }],
|
|
23
|
+
source_dispositions: [],
|
|
24
|
+
},
|
|
25
|
+
retired_requirements: [],
|
|
26
|
+
}, null, 2)}
|
|
27
|
+
|
|
28
|
+
Stable IDs identify requirements and units, not array positions. Preserve existing IDs when unrelated work is inserted/reordered. To remove a requirement, supply retired_requirements: [{id,reason,replaced_by:[]}]. This is a complete semantic revision, not patch operations. Never change or remove a previously accepted execution unit; add an explicit follow-up unit instead.
|
|
29
|
+
|
|
30
|
+
Each source finding must be covered by execution units OR one source_dispositions entry {finding_id,status:"already_fixed"|"refuted"|"deferred",reason,evidence:[...]}. Evidence must explain the actual source/test basis; these decisions are independently reviewed. Do not invent tasks for an already-fixed or empty scope. Requirements and units may both be empty when no implementation is appropriate. A conversation request with no units must carry request_disposition:{status:"already_satisfied"|"deferred",reason,evidence:[...]}; an objective alone is not a completion claim.
|
|
31
|
+
|
|
32
|
+
Behavior changes need scoped positive and negative assertions; additions need at least one. Structural requirements still need an executable verification command or an explicit inapplicable_reason for independent assessment. An inapplicable requirement carries no assertions. Keep source and tests together. List actual dependencies explicitly; no module-token or separate obligation graph is authored. affected_interfaces is only for boundaries changed or endangered by this work, not every module interface.
|
|
33
|
+
|
|
34
|
+
Every planned command is one invocation, with no shell chaining, redirects or substitutions. Directory write grants end in /. Source-level write scope is enforced against the resulting change. No changes, commits, or implementation yet.
|
|
443
35
|
`;
|
|
444
|
-
return { prompt, outputPath, role };
|
|
445
36
|
}
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
* `contractPipeline.ts`), because it needs the detected cycles. There is no
|
|
455
|
-
* `closing` phase: the close phase writes the verification report itself.
|
|
456
|
-
*/
|
|
457
|
-
export const PHASE_TO_ARTIFACT = {
|
|
458
|
-
goal_normalization: "goal_spec",
|
|
459
|
-
context_collection: "context_bundle",
|
|
460
|
-
decomposition: "module_decomposition",
|
|
461
|
-
module_contract_drafting: "module_contracts",
|
|
462
|
-
seam_reconciliation: "seam_reconciliation_report",
|
|
463
|
-
contract_finalization: "finalized_module_contracts",
|
|
464
|
-
critique: "conceptual_design_critique",
|
|
465
|
-
obligation_ledger: "obligation_ledger",
|
|
466
|
-
cyclic_seam_resolution: "cyclic_seam_resolution",
|
|
467
|
-
test_validator_plan: "test_validator_plan",
|
|
468
|
-
assessment: "contract_assessment_report",
|
|
469
|
-
critic: "counterexample",
|
|
470
|
-
judge: "judge_report",
|
|
471
|
-
implementation_planning: "implementation_dag",
|
|
472
|
-
};
|
|
473
|
-
/**
|
|
474
|
-
* Dependency order for pipeline phase progression — derived from
|
|
475
|
-
* PHASE_TO_ARTIFACT's insertion order so the phase list lives in exactly one
|
|
476
|
-
* place (single-source; no drift between the mapping and the order).
|
|
477
|
-
*/
|
|
478
|
-
export const CONTRACT_PIPELINE_PHASE_ORDER = Object.keys(PHASE_TO_ARTIFACT);
|
|
479
|
-
/**
|
|
480
|
-
* Per-trigger prompt contract, as DECLARED DATA rather than a branch in the
|
|
481
|
-
* renderer, so a third trigger cannot be added without stating its framing and
|
|
482
|
-
* its inputs.
|
|
483
|
-
*
|
|
484
|
-
* The defect this closes (observed live 2026-08-22 on the first-draw remediation
|
|
485
|
-
* run, `Contract Repair: finalized_module_contracts`): the renderer had ONE
|
|
486
|
-
* hard-coded framing and ONE hard-coded six-artifact input list, so a repair
|
|
487
|
-
* ordered by the CONCEPTUAL-CRITIQUE gate told the worker "the adversarial judge
|
|
488
|
-
* rejected the current contract" and listed `obligation_ledger`,
|
|
489
|
-
* `contract_assessment_report`, `counterexample` and `judge_report` as Required
|
|
490
|
-
* Inputs. On that trigger those four do not exist on disk. The worker burned
|
|
491
|
-
* turns hunting inputs the tool never bound.
|
|
492
|
-
*
|
|
493
|
-
* ⚠ The old existence check could not catch it and was never going to: it tested
|
|
494
|
-
* whether a PATH STRING was present in `artifactPaths`, and that record is
|
|
495
|
-
* populated for every `CP_ARTIFACT_NAMES` entry unconditionally
|
|
496
|
-
* (`contractPipeline.ts`), with no disk check. So it never threw in production —
|
|
497
|
-
* it silently rendered paths to files that were not there, which is worse than a
|
|
498
|
-
* refusal. Checking only the trigger's own set is what makes the guard mean
|
|
499
|
-
* something.
|
|
500
|
-
*/
|
|
501
|
-
const REPAIR_TRIGGER_CONTRACT = {
|
|
502
|
-
judge: {
|
|
503
|
-
lead: (target) => `The adversarial judge rejected the current contract. Make targeted edits to \`${target}\` so that it addresses every accepted counterexample.`,
|
|
504
|
-
instructionHeading: "Judge Instruction",
|
|
505
|
-
requiredInputs: [
|
|
506
|
-
"goal_spec",
|
|
507
|
-
"finalized_module_contracts",
|
|
508
|
-
"obligation_ledger",
|
|
509
|
-
"contract_assessment_report",
|
|
510
|
-
"counterexample",
|
|
511
|
-
"judge_report",
|
|
512
|
-
],
|
|
513
|
-
readingNote: "the accepted counterexamples in the judge report's classifications",
|
|
514
|
-
},
|
|
515
|
-
critique: {
|
|
516
|
-
lead: (target) => `The conceptual design critique raised blocking concerns. Make targeted edits to \`${target}\` so that no blocking concern still applies.`,
|
|
517
|
-
instructionHeading: "Blocking Concerns",
|
|
518
|
-
// The critique gate runs BEFORE any downstream artifact is derived, so the
|
|
519
|
-
// judge-side artifacts do not exist yet. Listing them is what sent workers
|
|
520
|
-
// hunting. These three are the whole of what this trigger binds.
|
|
521
|
-
requiredInputs: [
|
|
522
|
-
"goal_spec",
|
|
523
|
-
"finalized_module_contracts",
|
|
524
|
-
"conceptual_design_critique",
|
|
525
|
-
],
|
|
526
|
-
readingNote: "each blocking concern in the conceptual design critique",
|
|
527
|
-
},
|
|
528
|
-
};
|
|
529
|
-
/**
|
|
530
|
-
* The role that first writes each repair target. The repair prompt renders
|
|
531
|
-
* that role's sketch AND its field rules: a repaired artifact passes the same
|
|
532
|
-
* validator and the same gates as a first write, so the two prompts state one
|
|
533
|
-
* set of rules from one place.
|
|
534
|
-
*/
|
|
535
|
-
const REPAIR_TARGET_ROLE = {
|
|
536
|
-
module_decomposition: ROLES.decomposition,
|
|
537
|
-
finalized_module_contracts: ROLES.contract_finalization,
|
|
538
|
-
obligation_ledger: ROLES.obligation_ledger,
|
|
539
|
-
contract_assessment_report: ROLES.assessment,
|
|
540
|
-
};
|
|
541
|
-
/**
|
|
542
|
-
* Render the bounded repair step for a failing gate: targeted edits to the named
|
|
543
|
-
* artifact, serialized as complete JSON. The worker edits only the
|
|
544
|
-
* target; the pipeline brings every later artifact back on its own.
|
|
545
|
-
*/
|
|
546
|
-
export function renderContractRepairPrompt(input) {
|
|
547
|
-
const outputPath = input.artifactPaths[input.target];
|
|
548
|
-
if (!outputPath) {
|
|
549
|
-
throw new Error(`Contract repair requires an artifact path for "${input.target}" but it was not provided.`);
|
|
550
|
-
}
|
|
551
|
-
const contract = REPAIR_TRIGGER_CONTRACT[input.trigger];
|
|
552
|
-
const requiredInputs = input.target === "module_decomposition"
|
|
553
|
-
? [...new Set([...contract.requiredInputs, "context_bundle", "module_decomposition"])]
|
|
554
|
-
: contract.requiredInputs;
|
|
555
|
-
for (const key of requiredInputs) {
|
|
556
|
-
if (!input.artifactPaths[key]) {
|
|
557
|
-
throw new Error(`Contract repair (${input.trigger}) requires artifact path for "${key}" but it was not provided.`);
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
const role = REPAIR_TARGET_ROLE[input.target];
|
|
561
|
-
const prompt = `# Contract Repair: ${input.target}
|
|
562
|
-
|
|
563
|
-
${contract.lead(input.target)}
|
|
564
|
-
${renderCwdNote(input.repoRoot)}
|
|
565
|
-
## ${contract.instructionHeading}
|
|
566
|
-
|
|
567
|
-
${input.instruction}
|
|
568
|
-
|
|
569
|
-
## Required Inputs
|
|
570
|
-
|
|
571
|
-
${requiredInputs.map((key) => `- \`${(input.artifactReadPaths ?? input.artifactPaths)[key]}\` (${key})`).join("\n")}
|
|
572
|
-
${input.artifactReadPaths ? "Read the `payload` field of each canonical input envelope as its domain artifact; do not edit the canonical files." : ""}
|
|
573
|
-
|
|
574
|
-
## Your Task
|
|
575
|
-
|
|
576
|
-
Read the inputs above. Attend to ${contract.readingNote}. Apply targeted edits; preserve the canonical goal identity and every untouched module/obligation identity. Do not regenerate or collapse the existing module set when repairing finalized interfaces. Serialize the complete updated JSON, not a diff, to exactly:
|
|
37
|
+
export function renderPlanReviewPrompt(params) {
|
|
38
|
+
const tasks = {
|
|
39
|
+
critique: `Assess whether this is the right approach to the user's goal: scope, simpler alternatives, affected boundaries, ownership, and execution partition. Do not require whole-module documentation where no boundary changes. Return {verdict:"approved"|"needs_repair",issues:[{id,description,requirement_ids:[],unit_ids:[],blocking:true|false}]}.`,
|
|
40
|
+
critic: `Try to falsify the plan's behavior, integration assumptions, and acceptance assertions. Inspect cited source/tests. Return {counterexamples:[{id,claim,reproduction_steps:[...],expected,actual,requirement_ids:[],unit_ids:[]}]}. Use stable IDs for repeated counterexamples; an empty list is permitted only after a real search.`,
|
|
41
|
+
judge: `Independently judge every current or previously accepted counterexample, and assess every requirement and source disposition against concrete evidence. Return {verdict:"approved"|"needs_repair",classifications:[{counterexample_id,classification:"accepted"|"repaired"|"invalid"|"out_of_scope"|"duplicate"|"residual_risk",rationale}],requirement_assessments:[{requirement_id,verdict:"satisfied"|"insufficient",evidence:[...]}],disposition_assessments:[{finding_id,verdict:"satisfied"|"insufficient",evidence:[...]}]}. Approved means every requirement/disposition is sufficient and no accepted counterexample remains. For an empty request, include request_disposition_assessment:{verdict:"satisfied"|"insufficient",evidence:[...]}. Use repaired only with concrete evidence that the plan now addresses a previously accepted counterexample. A claimed repair must actually address the counterexample; merely listing its ID is not proof.`,
|
|
42
|
+
};
|
|
43
|
+
const scope = [...new Set(params.canonical.plan.units.flatMap(unit => [...unit.read_paths, ...unit.allowed_files]))];
|
|
44
|
+
return `# Executable plan ${params.role}
|
|
577
45
|
|
|
578
|
-
|
|
46
|
+
${tasks[params.role]}
|
|
579
47
|
|
|
580
|
-
|
|
48
|
+
Read the source record ${params.sourcePath}, canonical plan ${params.planPath}, and prior review records ${params.priorReviewPaths.join(", ") || "(none)"}.
|
|
49
|
+
You may inspect the affected repository files and their immediate callers/tests beneath ${params.root}; initial evidence scope: ${JSON.stringify(scope)}. File paths in the supplied records are evidence references you may follow within that repository. Do not edit repository source or the canonical plan.
|
|
581
50
|
|
|
582
|
-
|
|
583
|
-
${
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
**Stop after you write the output file.** Do not edit any other artifact or any source file. Do not start the next phase.
|
|
51
|
+
Review the exact executable units, not a future planner's interpretation. Revision: ${params.canonical.revision_sha256}.
|
|
52
|
+
Historical counterexamples: ${JSON.stringify(params.history.counterexamples)}.
|
|
53
|
+
Review requirement: ${params.requirement}. ${params.requirement === "independent" ? "Use an independent context that did not author this plan and cannot see its author's reasoning. Unavailable independence must be declared; it cannot be replaced with self-review." : "A declared lightweight self-review is allowed for this low-risk lane."}
|
|
54
|
+
Independence is a host declaration; binding does not prove reviewer identity.
|
|
587
55
|
`;
|
|
588
|
-
return { prompt, outputPath };
|
|
589
56
|
}
|
|
590
57
|
//# sourceMappingURL=contractPipelinePrompts.js.map
|