tracegrove 0.0.0-stage → 0.3.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/LICENSE +202 -0
- package/README.md +588 -2
- package/conformance/coordination-vectors.json +377 -0
- package/dist/adapters/browser/capabilities.d.ts +45 -0
- package/dist/adapters/browser/capabilities.js +14 -0
- package/dist/adapters/browser/capabilities.js.map +1 -0
- package/dist/adapters/browser/driver.d.ts +45 -0
- package/dist/adapters/browser/driver.js +295 -0
- package/dist/adapters/browser/driver.js.map +1 -0
- package/dist/adapters/browser/session.d.ts +21 -0
- package/dist/adapters/browser/session.js +87 -0
- package/dist/adapters/browser/session.js.map +1 -0
- package/dist/adapters/http/capabilities.d.ts +2 -0
- package/dist/adapters/http/capabilities.js +21 -0
- package/dist/adapters/http/capabilities.js.map +1 -0
- package/dist/adapters/http/driver.d.ts +55 -0
- package/dist/adapters/http/driver.js +125 -0
- package/dist/adapters/http/driver.js.map +1 -0
- package/dist/adapters/job/capabilities.d.ts +45 -0
- package/dist/adapters/job/capabilities.js +8 -0
- package/dist/adapters/job/capabilities.js.map +1 -0
- package/dist/adapters/job/driver.d.ts +26 -0
- package/dist/adapters/job/driver.js +110 -0
- package/dist/adapters/job/driver.js.map +1 -0
- package/dist/adapters/job/types.d.ts +9 -0
- package/dist/adapters/job/types.js +2 -0
- package/dist/adapters/job/types.js.map +1 -0
- package/dist/adapters/mcp/capabilities.d.ts +46 -0
- package/dist/adapters/mcp/capabilities.js +17 -0
- package/dist/adapters/mcp/capabilities.js.map +1 -0
- package/dist/adapters/mcp/driver.d.ts +10 -0
- package/dist/adapters/mcp/driver.js +83 -0
- package/dist/adapters/mcp/driver.js.map +1 -0
- package/dist/adapters/poll.d.ts +12 -0
- package/dist/adapters/poll.js +31 -0
- package/dist/adapters/poll.js.map +1 -0
- package/dist/authoring/activity.d.ts +17 -0
- package/dist/authoring/activity.js +18 -0
- package/dist/authoring/activity.js.map +1 -0
- package/dist/authoring/agent.d.ts +70 -0
- package/dist/authoring/agent.js +268 -0
- package/dist/authoring/agent.js.map +1 -0
- package/dist/authoring/appLaunch.d.ts +7 -0
- package/dist/authoring/appLaunch.js +32 -0
- package/dist/authoring/appLaunch.js.map +1 -0
- package/dist/authoring/appLocation.d.ts +2 -0
- package/dist/authoring/appLocation.js +5 -0
- package/dist/authoring/appLocation.js.map +1 -0
- package/dist/authoring/browser.d.ts +15 -0
- package/dist/authoring/browser.js +20 -0
- package/dist/authoring/browser.js.map +1 -0
- package/dist/authoring/compile.d.ts +47 -0
- package/dist/authoring/compile.js +508 -0
- package/dist/authoring/compile.js.map +1 -0
- package/dist/authoring/discover.d.ts +43 -0
- package/dist/authoring/discover.js +149 -0
- package/dist/authoring/discover.js.map +1 -0
- package/dist/authoring/environmentTemplates.d.ts +3 -0
- package/dist/authoring/environmentTemplates.js +24 -0
- package/dist/authoring/environmentTemplates.js.map +1 -0
- package/dist/authoring/heal.d.ts +108 -0
- package/dist/authoring/heal.js +723 -0
- package/dist/authoring/heal.js.map +1 -0
- package/dist/authoring/index.d.ts +14 -0
- package/dist/authoring/index.js +15 -0
- package/dist/authoring/index.js.map +1 -0
- package/dist/authoring/init.d.ts +21 -0
- package/dist/authoring/init.js +141 -0
- package/dist/authoring/init.js.map +1 -0
- package/dist/authoring/localSettings.d.ts +33 -0
- package/dist/authoring/localSettings.js +31 -0
- package/dist/authoring/localSettings.js.map +1 -0
- package/dist/authoring/media.d.ts +10 -0
- package/dist/authoring/media.js +37 -0
- package/dist/authoring/media.js.map +1 -0
- package/dist/authoring/module.d.ts +2 -0
- package/dist/authoring/module.js +38 -0
- package/dist/authoring/module.js.map +1 -0
- package/dist/authoring/run.d.ts +74 -0
- package/dist/authoring/run.js +242 -0
- package/dist/authoring/run.js.map +1 -0
- package/dist/authoring/runSource.d.ts +6 -0
- package/dist/authoring/runSource.js +24 -0
- package/dist/authoring/runSource.js.map +1 -0
- package/dist/authoring/savedRun.d.ts +13 -0
- package/dist/authoring/savedRun.js +94 -0
- package/dist/authoring/savedRun.js.map +1 -0
- package/dist/authoring/schema.d.ts +574 -0
- package/dist/authoring/schema.js +147 -0
- package/dist/authoring/schema.js.map +1 -0
- package/dist/authoring/snapshotSource.d.ts +13 -0
- package/dist/authoring/snapshotSource.js +41 -0
- package/dist/authoring/snapshotSource.js.map +1 -0
- package/dist/authoring/sourceSelection.d.ts +34 -0
- package/dist/authoring/sourceSelection.js +13 -0
- package/dist/authoring/sourceSelection.js.map +1 -0
- package/dist/authoring/sources.d.ts +5 -0
- package/dist/authoring/sources.js +65 -0
- package/dist/authoring/sources.js.map +1 -0
- package/dist/authoring/status.d.ts +48 -0
- package/dist/authoring/status.js +100 -0
- package/dist/authoring/status.js.map +1 -0
- package/dist/authoring/typed.d.ts +6 -0
- package/dist/authoring/typed.js +5 -0
- package/dist/authoring/typed.js.map +1 -0
- package/dist/authoring/ui.d.ts +10 -0
- package/dist/authoring/ui.js +486 -0
- package/dist/authoring/ui.js.map +1 -0
- package/dist/authoring/uiPage.d.ts +1 -0
- package/dist/authoring/uiPage.js +358 -0
- package/dist/authoring/uiPage.js.map +1 -0
- package/dist/authoring/uiSourceControls.d.ts +2 -0
- package/dist/authoring/uiSourceControls.js +41 -0
- package/dist/authoring/uiSourceControls.js.map +1 -0
- package/dist/authoring/verificationSource.d.ts +41 -0
- package/dist/authoring/verificationSource.js +46 -0
- package/dist/authoring/verificationSource.js.map +1 -0
- package/dist/authoring/workspace.d.ts +33 -0
- package/dist/authoring/workspace.js +58 -0
- package/dist/authoring/workspace.js.map +1 -0
- package/dist/cli/arguments.d.ts +288 -0
- package/dist/cli/arguments.js +121 -0
- package/dist/cli/arguments.js.map +1 -0
- package/dist/cli/cleanup.d.ts +18 -0
- package/dist/cli/cleanup.js +40 -0
- package/dist/cli/cleanup.js.map +1 -0
- package/dist/cli/doctor.d.ts +51 -0
- package/dist/cli/doctor.js +118 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/errors.d.ts +2 -0
- package/dist/cli/errors.js +84 -0
- package/dist/cli/errors.js.map +1 -0
- package/dist/cli/jsonFile.d.ts +2 -0
- package/dist/cli/jsonFile.js +15 -0
- package/dist/cli/jsonFile.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +603 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/render.d.ts +22 -0
- package/dist/cli/render.js +150 -0
- package/dist/cli/render.js.map +1 -0
- package/dist/cli/samples/catalog.d.ts +10 -0
- package/dist/cli/samples/catalog.js +3 -0
- package/dist/cli/samples/catalog.js.map +1 -0
- package/dist/cli/samples/write.d.ts +5 -0
- package/dist/cli/samples/write.js +64 -0
- package/dist/cli/samples/write.js.map +1 -0
- package/dist/cli/source.d.ts +41 -0
- package/dist/cli/source.js +59 -0
- package/dist/cli/source.js.map +1 -0
- package/dist/core/activationDecision.d.ts +153 -0
- package/dist/core/activationDecision.js +34 -0
- package/dist/core/activationDecision.js.map +1 -0
- package/dist/core/artifacts.d.ts +18 -0
- package/dist/core/artifacts.js +79 -0
- package/dist/core/artifacts.js.map +1 -0
- package/dist/core/atomicFiles.d.ts +9 -0
- package/dist/core/atomicFiles.js +76 -0
- package/dist/core/atomicFiles.js.map +1 -0
- package/dist/core/boundedFile.d.ts +2 -0
- package/dist/core/boundedFile.js +28 -0
- package/dist/core/boundedFile.js.map +1 -0
- package/dist/core/bundle.d.ts +77 -0
- package/dist/core/bundle.js +375 -0
- package/dist/core/bundle.js.map +1 -0
- package/dist/core/bundleArchive.d.ts +10 -0
- package/dist/core/bundleArchive.js +47 -0
- package/dist/core/bundleArchive.js.map +1 -0
- package/dist/core/bundleEvidence.d.ts +12 -0
- package/dist/core/bundleEvidence.js +169 -0
- package/dist/core/bundleEvidence.js.map +1 -0
- package/dist/core/bundleExport.d.ts +12 -0
- package/dist/core/bundleExport.js +36 -0
- package/dist/core/bundleExport.js.map +1 -0
- package/dist/core/bundleFiles.d.ts +5 -0
- package/dist/core/bundleFiles.js +47 -0
- package/dist/core/bundleFiles.js.map +1 -0
- package/dist/core/bundlePaths.d.ts +2 -0
- package/dist/core/bundlePaths.js +7 -0
- package/dist/core/bundlePaths.js.map +1 -0
- package/dist/core/bundleSnapshot.d.ts +26 -0
- package/dist/core/bundleSnapshot.js +71 -0
- package/dist/core/bundleSnapshot.js.map +1 -0
- package/dist/core/capabilityBoundary.d.ts +1452 -0
- package/dist/core/capabilityBoundary.js +361 -0
- package/dist/core/capabilityBoundary.js.map +1 -0
- package/dist/core/capabilityLifecycle.d.ts +366 -0
- package/dist/core/capabilityLifecycle.js +79 -0
- package/dist/core/capabilityLifecycle.js.map +1 -0
- package/dist/core/cleanup.d.ts +35 -0
- package/dist/core/cleanup.js +71 -0
- package/dist/core/cleanup.js.map +1 -0
- package/dist/core/cleanupActions.d.ts +5 -0
- package/dist/core/cleanupActions.js +15 -0
- package/dist/core/cleanupActions.js.map +1 -0
- package/dist/core/cleanupAttestation.d.ts +23 -0
- package/dist/core/cleanupAttestation.js +57 -0
- package/dist/core/cleanupAttestation.js.map +1 -0
- package/dist/core/clock.d.ts +4 -0
- package/dist/core/clock.js +14 -0
- package/dist/core/clock.js.map +1 -0
- package/dist/core/compiler.d.ts +19 -0
- package/dist/core/compiler.js +200 -0
- package/dist/core/compiler.js.map +1 -0
- package/dist/core/controller.d.ts +7 -0
- package/dist/core/controller.js +132 -0
- package/dist/core/controller.js.map +1 -0
- package/dist/core/coordination.d.ts +72 -0
- package/dist/core/coordination.js +118 -0
- package/dist/core/coordination.js.map +1 -0
- package/dist/core/corpus.d.ts +60 -0
- package/dist/core/corpus.js +216 -0
- package/dist/core/corpus.js.map +1 -0
- package/dist/core/deadline.d.ts +12 -0
- package/dist/core/deadline.js +38 -0
- package/dist/core/deadline.js.map +1 -0
- package/dist/core/deliveryJournal.d.ts +37 -0
- package/dist/core/deliveryJournal.js +85 -0
- package/dist/core/deliveryJournal.js.map +1 -0
- package/dist/core/environmentPreflight.d.ts +14 -0
- package/dist/core/environmentPreflight.js +179 -0
- package/dist/core/environmentPreflight.js.map +1 -0
- package/dist/core/errors.d.ts +22 -0
- package/dist/core/errors.js +29 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/events.d.ts +14 -0
- package/dist/core/events.js +37 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/executionInspection.d.ts +90 -0
- package/dist/core/executionInspection.js +31 -0
- package/dist/core/executionInspection.js.map +1 -0
- package/dist/core/executionOwnership.d.ts +72 -0
- package/dist/core/executionOwnership.js +82 -0
- package/dist/core/executionOwnership.js.map +1 -0
- package/dist/core/executionPreparation.d.ts +362 -0
- package/dist/core/executionPreparation.js +93 -0
- package/dist/core/executionPreparation.js.map +1 -0
- package/dist/core/executionReadback.d.ts +15 -0
- package/dist/core/executionReadback.js +21 -0
- package/dist/core/executionReadback.js.map +1 -0
- package/dist/core/executor.d.ts +46 -0
- package/dist/core/executor.js +616 -0
- package/dist/core/executor.js.map +1 -0
- package/dist/core/frozenBundle.d.ts +314 -0
- package/dist/core/frozenBundle.js +24 -0
- package/dist/core/frozenBundle.js.map +1 -0
- package/dist/core/fsDurability.d.ts +2 -0
- package/dist/core/fsDurability.js +12 -0
- package/dist/core/fsDurability.js.map +1 -0
- package/dist/core/generators.d.ts +4 -0
- package/dist/core/generators.js +71 -0
- package/dist/core/generators.js.map +1 -0
- package/dist/core/gitSnapshot.d.ts +63 -0
- package/dist/core/gitSnapshot.js +55 -0
- package/dist/core/gitSnapshot.js.map +1 -0
- package/dist/core/gitSources.d.ts +29 -0
- package/dist/core/gitSources.js +97 -0
- package/dist/core/gitSources.js.map +1 -0
- package/dist/core/ledger.d.ts +38 -0
- package/dist/core/ledger.js +169 -0
- package/dist/core/ledger.js.map +1 -0
- package/dist/core/ledgerInspection.d.ts +18 -0
- package/dist/core/ledgerInspection.js +66 -0
- package/dist/core/ledgerInspection.js.map +1 -0
- package/dist/core/ledgerRecords.d.ts +23 -0
- package/dist/core/ledgerRecords.js +29 -0
- package/dist/core/ledgerRecords.js.map +1 -0
- package/dist/core/localActivationState.d.ts +260 -0
- package/dist/core/localActivationState.js +49 -0
- package/dist/core/localActivationState.js.map +1 -0
- package/dist/core/localPromotionState.d.ts +387 -0
- package/dist/core/localPromotionState.js +22 -0
- package/dist/core/localPromotionState.js.map +1 -0
- package/dist/core/localQualificationResults.d.ts +39 -0
- package/dist/core/localQualificationResults.js +160 -0
- package/dist/core/localQualificationResults.js.map +1 -0
- package/dist/core/localReviewStore.d.ts +28 -0
- package/dist/core/localReviewStore.js +167 -0
- package/dist/core/localReviewStore.js.map +1 -0
- package/dist/core/localScenarioActivation.d.ts +6 -0
- package/dist/core/localScenarioActivation.js +70 -0
- package/dist/core/localScenarioActivation.js.map +1 -0
- package/dist/core/localScenarioOwner.d.ts +20 -0
- package/dist/core/localScenarioOwner.js +2 -0
- package/dist/core/localScenarioOwner.js.map +1 -0
- package/dist/core/localScenarioPromotion.d.ts +9 -0
- package/dist/core/localScenarioPromotion.js +49 -0
- package/dist/core/localScenarioPromotion.js.map +1 -0
- package/dist/core/localScenarioState.d.ts +2297 -0
- package/dist/core/localScenarioState.js +117 -0
- package/dist/core/localScenarioState.js.map +1 -0
- package/dist/core/localScenarioStore.d.ts +838 -0
- package/dist/core/localScenarioStore.js +218 -0
- package/dist/core/localScenarioStore.js.map +1 -0
- package/dist/core/localScenarioStructure.d.ts +4 -0
- package/dist/core/localScenarioStructure.js +52 -0
- package/dist/core/localScenarioStructure.js.map +1 -0
- package/dist/core/localStructureState.d.ts +2 -0
- package/dist/core/localStructureState.js +22 -0
- package/dist/core/localStructureState.js.map +1 -0
- package/dist/core/lookup.d.ts +662 -0
- package/dist/core/lookup.js +55 -0
- package/dist/core/lookup.js.map +1 -0
- package/dist/core/ownership.d.ts +3 -0
- package/dist/core/ownership.js +24 -0
- package/dist/core/ownership.js.map +1 -0
- package/dist/core/planInspection.d.ts +108 -0
- package/dist/core/planInspection.js +44 -0
- package/dist/core/planInspection.js.map +1 -0
- package/dist/core/planner.d.ts +14 -0
- package/dist/core/planner.js +261 -0
- package/dist/core/planner.js.map +1 -0
- package/dist/core/qualification.d.ts +26 -0
- package/dist/core/qualification.js +58 -0
- package/dist/core/qualification.js.map +1 -0
- package/dist/core/qualificationBundle.d.ts +6 -0
- package/dist/core/qualificationBundle.js +51 -0
- package/dist/core/qualificationBundle.js.map +1 -0
- package/dist/core/qualificationExecution.d.ts +879 -0
- package/dist/core/qualificationExecution.js +54 -0
- package/dist/core/qualificationExecution.js.map +1 -0
- package/dist/core/recoveryStatus.d.ts +6 -0
- package/dist/core/recoveryStatus.js +123 -0
- package/dist/core/recoveryStatus.js.map +1 -0
- package/dist/core/reducer.d.ts +56 -0
- package/dist/core/reducer.js +355 -0
- package/dist/core/reducer.js.map +1 -0
- package/dist/core/replayAssessment.d.ts +15 -0
- package/dist/core/replayAssessment.js +78 -0
- package/dist/core/replayAssessment.js.map +1 -0
- package/dist/core/replayEvidence.d.ts +7 -0
- package/dist/core/replayEvidence.js +58 -0
- package/dist/core/replayEvidence.js.map +1 -0
- package/dist/core/repositorySelectionEvidence.d.ts +3 -0
- package/dist/core/repositorySelectionEvidence.js +58 -0
- package/dist/core/repositorySelectionEvidence.js.map +1 -0
- package/dist/core/rerun.d.ts +3 -0
- package/dist/core/rerun.js +24 -0
- package/dist/core/rerun.js.map +1 -0
- package/dist/core/resultSink.d.ts +52 -0
- package/dist/core/resultSink.js +120 -0
- package/dist/core/resultSink.js.map +1 -0
- package/dist/core/review.d.ts +22 -0
- package/dist/core/review.js +65 -0
- package/dist/core/review.js.map +1 -0
- package/dist/core/runnerCapabilities.d.ts +22 -0
- package/dist/core/runnerCapabilities.js +44 -0
- package/dist/core/runnerCapabilities.js.map +1 -0
- package/dist/core/scenario.d.ts +32 -0
- package/dist/core/scenario.js +119 -0
- package/dist/core/scenario.js.map +1 -0
- package/dist/core/scenarioActivation.d.ts +16 -0
- package/dist/core/scenarioActivation.js +47 -0
- package/dist/core/scenarioActivation.js.map +1 -0
- package/dist/core/scenarioStructure.d.ts +400 -0
- package/dist/core/scenarioStructure.js +72 -0
- package/dist/core/scenarioStructure.js.map +1 -0
- package/dist/core/snapshotEvidence.d.ts +3 -0
- package/dist/core/snapshotEvidence.js +37 -0
- package/dist/core/snapshotEvidence.js.map +1 -0
- package/dist/core/snapshotRepository.d.ts +48 -0
- package/dist/core/snapshotRepository.js +47 -0
- package/dist/core/snapshotRepository.js.map +1 -0
- package/dist/core/source-analysis.d.ts +18 -0
- package/dist/core/source-analysis.js +99 -0
- package/dist/core/source-analysis.js.map +1 -0
- package/dist/core/source-citation.d.ts +53 -0
- package/dist/core/source-citation.js +59 -0
- package/dist/core/source-citation.js.map +1 -0
- package/dist/core/sourcePromotion.d.ts +929 -0
- package/dist/core/sourcePromotion.js +92 -0
- package/dist/core/sourcePromotion.js.map +1 -0
- package/dist/core/sourceReviewEvidence.d.ts +271 -0
- package/dist/core/sourceReviewEvidence.js +24 -0
- package/dist/core/sourceReviewEvidence.js.map +1 -0
- package/dist/core/targetObservation.d.ts +3 -0
- package/dist/core/targetObservation.js +26 -0
- package/dist/core/targetObservation.js.map +1 -0
- package/dist/hosts/launchTemplates.d.ts +2 -0
- package/dist/hosts/launchTemplates.js +5 -0
- package/dist/hosts/launchTemplates.js.map +1 -0
- package/dist/hosts/local.d.ts +17 -0
- package/dist/hosts/local.js +311 -0
- package/dist/hosts/local.js.map +1 -0
- package/dist/hosts/localSupervisor.d.ts +1 -0
- package/dist/hosts/localSupervisor.js +115 -0
- package/dist/hosts/localSupervisor.js.map +1 -0
- package/dist/hosts/mock.d.ts +4 -0
- package/dist/hosts/mock.js +82 -0
- package/dist/hosts/mock.js.map +1 -0
- package/dist/hosts/pinnedArguments.d.ts +3 -0
- package/dist/hosts/pinnedArguments.js +39 -0
- package/dist/hosts/pinnedArguments.js.map +1 -0
- package/dist/hosts/runtime.d.ts +5 -0
- package/dist/hosts/runtime.js +60 -0
- package/dist/hosts/runtime.js.map +1 -0
- package/dist/hosts/sourceIdentity.d.ts +54 -0
- package/dist/hosts/sourceIdentity.js +27 -0
- package/dist/hosts/sourceIdentity.js.map +1 -0
- package/dist/hosts/types.d.ts +39 -0
- package/dist/hosts/types.js +2 -0
- package/dist/hosts/types.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/awr/attachment.d.ts +34 -0
- package/dist/integrations/awr/attachment.js +120 -0
- package/dist/integrations/awr/attachment.js.map +1 -0
- package/dist/integrations/awr/attachmentContracts.d.ts +273 -0
- package/dist/integrations/awr/attachmentContracts.js +39 -0
- package/dist/integrations/awr/attachmentContracts.js.map +1 -0
- package/dist/integrations/awr/attachmentHttp.d.ts +9 -0
- package/dist/integrations/awr/attachmentHttp.js +19 -0
- package/dist/integrations/awr/attachmentHttp.js.map +1 -0
- package/dist/integrations/awr/cli.d.ts +7 -0
- package/dist/integrations/awr/cli.js +43 -0
- package/dist/integrations/awr/cli.js.map +1 -0
- package/dist/integrations/awr/contracts.d.ts +54 -0
- package/dist/integrations/awr/contracts.js +33 -0
- package/dist/integrations/awr/contracts.js.map +1 -0
- package/dist/integrations/awr/http.d.ts +8 -0
- package/dist/integrations/awr/http.js +23 -0
- package/dist/integrations/awr/http.js.map +1 -0
- package/dist/integrations/awr/index.d.ts +7 -0
- package/dist/integrations/awr/index.js +8 -0
- package/dist/integrations/awr/index.js.map +1 -0
- package/dist/integrations/awr/jsonHttp.d.ts +15 -0
- package/dist/integrations/awr/jsonHttp.js +69 -0
- package/dist/integrations/awr/jsonHttp.js.map +1 -0
- package/dist/integrations/awr/outbox.d.ts +28 -0
- package/dist/integrations/awr/outbox.js +88 -0
- package/dist/integrations/awr/outbox.js.map +1 -0
- package/dist/integrations/awr/projection.d.ts +4 -0
- package/dist/integrations/awr/projection.js +54 -0
- package/dist/integrations/awr/projection.js.map +1 -0
- package/dist/protocol/canonical.d.ts +41 -0
- package/dist/protocol/canonical.js +114 -0
- package/dist/protocol/canonical.js.map +1 -0
- package/dist/protocol/index.d.ts +9620 -0
- package/dist/protocol/index.js +185 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/protocol/primitives.d.ts +63 -0
- package/dist/protocol/primitives.js +46 -0
- package/dist/protocol/primitives.js.map +1 -0
- package/dist/protocol/schemas/browser.d.ts +153 -0
- package/dist/protocol/schemas/browser.js +29 -0
- package/dist/protocol/schemas/browser.js.map +1 -0
- package/dist/protocol/schemas/capability.d.ts +2126 -0
- package/dist/protocol/schemas/capability.js +165 -0
- package/dist/protocol/schemas/capability.js.map +1 -0
- package/dist/protocol/schemas/capabilityLifecycle.d.ts +509 -0
- package/dist/protocol/schemas/capabilityLifecycle.js +47 -0
- package/dist/protocol/schemas/capabilityLifecycle.js.map +1 -0
- package/dist/protocol/schemas/cleanup.d.ts +109 -0
- package/dist/protocol/schemas/cleanup.js +59 -0
- package/dist/protocol/schemas/cleanup.js.map +1 -0
- package/dist/protocol/schemas/cli.d.ts +121 -0
- package/dist/protocol/schemas/cli.js +24 -0
- package/dist/protocol/schemas/cli.js.map +1 -0
- package/dist/protocol/schemas/config.d.ts +59 -0
- package/dist/protocol/schemas/config.js +32 -0
- package/dist/protocol/schemas/config.js.map +1 -0
- package/dist/protocol/schemas/corpus.d.ts +36 -0
- package/dist/protocol/schemas/corpus.js +10 -0
- package/dist/protocol/schemas/corpus.js.map +1 -0
- package/dist/protocol/schemas/definitions.d.ts +3409 -0
- package/dist/protocol/schemas/definitions.js +431 -0
- package/dist/protocol/schemas/definitions.js.map +1 -0
- package/dist/protocol/schemas/evidenceProjection.d.ts +146 -0
- package/dist/protocol/schemas/evidenceProjection.js +18 -0
- package/dist/protocol/schemas/evidenceProjection.js.map +1 -0
- package/dist/protocol/schemas/execution.d.ts +3179 -0
- package/dist/protocol/schemas/execution.js +500 -0
- package/dist/protocol/schemas/execution.js.map +1 -0
- package/dist/protocol/schemas/gitSources.d.ts +330 -0
- package/dist/protocol/schemas/gitSources.js +32 -0
- package/dist/protocol/schemas/gitSources.js.map +1 -0
- package/dist/protocol/schemas/mcp.d.ts +24 -0
- package/dist/protocol/schemas/mcp.js +16 -0
- package/dist/protocol/schemas/mcp.js.map +1 -0
- package/dist/protocol/schemas/nativeJob.d.ts +106 -0
- package/dist/protocol/schemas/nativeJob.js +16 -0
- package/dist/protocol/schemas/nativeJob.js.map +1 -0
- package/dist/protocol/schemas/portableEnvironment.d.ts +1256 -0
- package/dist/protocol/schemas/portableEnvironment.js +108 -0
- package/dist/protocol/schemas/portableEnvironment.js.map +1 -0
- package/dist/protocol/schemas/promotion.d.ts +132 -0
- package/dist/protocol/schemas/promotion.js +9 -0
- package/dist/protocol/schemas/promotion.js.map +1 -0
- package/dist/protocol/schemas/protocol.d.ts +146 -0
- package/dist/protocol/schemas/protocol.js +25 -0
- package/dist/protocol/schemas/protocol.js.map +1 -0
- package/dist/protocol/schemas/recoveryStatus.d.ts +88 -0
- package/dist/protocol/schemas/recoveryStatus.js +20 -0
- package/dist/protocol/schemas/recoveryStatus.js.map +1 -0
- package/dist/protocol/schemas/resultSink.d.ts +80 -0
- package/dist/protocol/schemas/resultSink.js +14 -0
- package/dist/protocol/schemas/resultSink.js.map +1 -0
- package/dist/protocol/schemas/review.d.ts +248 -0
- package/dist/protocol/schemas/review.js +45 -0
- package/dist/protocol/schemas/review.js.map +1 -0
- package/dist/protocol/schemas/scenario.d.ts +810 -0
- package/dist/protocol/schemas/scenario.js +53 -0
- package/dist/protocol/schemas/scenario.js.map +1 -0
- package/dist/protocol/schemas/source.d.ts +300 -0
- package/dist/protocol/schemas/source.js +25 -0
- package/dist/protocol/schemas/source.js.map +1 -0
- package/dist/source/git.d.ts +36 -0
- package/dist/source/git.js +159 -0
- package/dist/source/git.js.map +1 -0
- package/dist/source/gitObjectProof.d.ts +12 -0
- package/dist/source/gitObjectProof.js +115 -0
- package/dist/source/gitObjectProof.js.map +1 -0
- package/dist/source/snapshotPaths.d.ts +2 -0
- package/dist/source/snapshotPaths.js +24 -0
- package/dist/source/snapshotPaths.js.map +1 -0
- package/dist/source/snapshotTree.d.ts +15 -0
- package/dist/source/snapshotTree.js +79 -0
- package/dist/source/snapshotTree.js.map +1 -0
- package/docs/architecture.md +126 -0
- package/docs/awr-delivery.md +102 -0
- package/docs/browser-driver.md +148 -0
- package/docs/cleanup-followups.md +74 -0
- package/docs/developer-ux.md +315 -0
- package/docs/examples/portable-environments/alongside_runner.json +199 -0
- package/docs/examples/portable-environments/external_staging.json +183 -0
- package/docs/git-object-proof.md +100 -0
- package/docs/git-source-resolution.md +133 -0
- package/docs/images/ui-run.png +0 -0
- package/docs/local-execution-recovery.md +55 -0
- package/docs/local-review-store.md +13 -0
- package/docs/local-scenario-store.md +91 -0
- package/docs/mcp-driver.md +87 -0
- package/docs/native-jobs.md +96 -0
- package/docs/portable-environments.md +155 -0
- package/docs/qualification-registration.md +58 -0
- package/docs/qualification-results.md +59 -0
- package/docs/replay-assessment.md +17 -0
- package/docs/result-sink.md +87 -0
- package/docs/scenario-activation.md +54 -0
- package/docs/scenario-structure.md +58 -0
- package/docs/source-promotion.md +104 -0
- package/docs/source-review.md +21 -0
- package/docs/verified-bundles.md +175 -0
- package/docs/work-report-attachment.md +127 -0
- package/package.json +45 -4
- package/samples/django-notes/manage.py +8 -0
- package/samples/django-notes/notes/__init__.py +0 -0
- package/samples/django-notes/notes/auth.py +14 -0
- package/samples/django-notes/notes/migrations/0001_initial.py +19 -0
- package/samples/django-notes/notes/migrations/__init__.py +0 -0
- package/samples/django-notes/notes/models.py +13 -0
- package/samples/django-notes/notes/views.py +33 -0
- package/samples/django-notes/notesite/__init__.py +0 -0
- package/samples/django-notes/notesite/settings.py +17 -0
- package/samples/django-notes/notesite/urls.py +9 -0
- package/samples/django-notes/requirements.txt +1 -0
- package/samples/django-notes/tracegrove/notes/crud.flow.yaml +27 -0
- package/samples/django-notes/tracegrove.config.yaml +7 -0
- package/samples/fastapi-notes/app/__init__.py +0 -0
- package/samples/fastapi-notes/app/main.py +69 -0
- package/samples/fastapi-notes/requirements.txt +2 -0
- package/samples/fastapi-notes/tracegrove/notes/crud.flow.yaml +27 -0
- package/samples/fastapi-notes/tracegrove.config.yaml +8 -0
- package/samples/notes-api/app/app.mjs +67 -0
- package/samples/notes-api/app/http.mjs +16 -0
- package/samples/notes-api/tracegrove/fixtures/existing-note.fixture.yaml +12 -0
- package/samples/notes-api/tracegrove/notes/create-read-delete.flow.yaml +35 -0
- package/samples/notes-api/tracegrove/notes/list.flow.yaml +25 -0
- package/samples/notes-api/tracegrove.config.yaml +15 -0
- package/samples/notes-api/verification/actions/notes.registry.yaml +6 -0
- package/samples/notes-api/verification/auth/host-issued-owner.yaml +6 -0
- package/samples/notes-api/verification/cases/notes.contract.yaml +51 -0
- package/samples/notes-api/verification/cases/notes.create.yaml +123 -0
- package/samples/notes-api/verification/cases/notes.suite.yaml +5 -0
- package/samples/notes-api/verification/components/notes-api-stub.profile.yaml +8 -0
- package/samples/notes-api/verification/components/notes-api.profile.yaml +15 -0
- package/samples/notes-api/verification/environments/local-notes.yaml +11 -0
- package/samples/notes-api/verification/environments/mock-notes.yaml +11 -0
- package/samples/notes-api/verification/fidelity/full-live-sandbox.yaml +7 -0
- package/samples/notes-api/verification/fidelity/mock-contract.yaml +6 -0
- package/samples/notes-api/verification/fixtures/existing-note.payload.yaml +15 -0
- package/samples/notes-api/verification/fixtures/existing-note.plan.yaml +9 -0
- package/samples/notes-api/verification/fixtures/existing-note.recipe.yaml +29 -0
- package/samples/notes-api/verification/hosts/local-process.yaml +27 -0
- package/samples/notes-api/verification/hosts/mock-loopback.yaml +14 -0
- package/samples/notes-api/verification/mocks/notes.responses.yaml +5 -0
- package/samples/notes-api/verification/personas/owner.yaml +16 -0
- package/samples/notes-api/verification/policies/no-authoring-inference.yaml +10 -0
- package/samples/notes-api/verification/runners/http.yaml +5 -0
- package/samples/notes-api/verification/surfaces/http-api.binding.yaml +11 -0
- package/samples/notes-api/verification/surfaces/http-api.pack.yaml +7 -0
- package/samples/notes-api/verification/workflow.yaml +27 -0
- package/samples/notes-browser/tracegrove/notes/browser.flow.yaml +19 -0
- package/samples/notes-browser/verification/cases/notes.browser.yaml +63 -0
- package/samples/notes-browser/verification/cases/notes.suite.yaml +4 -0
- package/samples/notes-browser/verification/runners/http.yaml +5 -0
- package/samples/notes-browser/verification/surfaces/http-api.binding.yaml +11 -0
- package/samples/notes-browser/verification/surfaces/http-api.pack.yaml +7 -0
- package/samples/notes-django/README.md +21 -0
- package/samples/notes-django/app/django_app.py +119 -0
- package/samples/notes-django/app/requirements.lock +4 -0
- package/samples/notes-mcp/app/mcp.mjs +47 -0
- package/samples/notes-mcp/tracegrove/notes.flow.yaml +20 -0
- package/samples/notes-mcp/tracegrove.config.yaml +13 -0
- package/samples/report-jobs/README.md +30 -0
- package/samples/report-jobs/app/jobs-api.mjs +65 -0
- package/samples/report-jobs/app/native-bridge.mjs +30 -0
- package/samples/report-jobs/app/store.mjs +74 -0
- package/samples/report-jobs/app/worker.mjs +22 -0
- package/samples/report-jobs/tracegrove/fixtures/failed-job.fixture.yaml +12 -0
- package/samples/report-jobs/tracegrove/fixtures/held-job.fixture.yaml +12 -0
- package/samples/report-jobs/tracegrove/fixtures/success-job.fixture.yaml +12 -0
- package/samples/report-jobs/tracegrove/reports/cancellation.flow.yaml +15 -0
- package/samples/report-jobs/tracegrove/reports/completion.flow.yaml +31 -0
- package/samples/report-jobs/tracegrove/reports/failure.flow.yaml +12 -0
- package/samples/report-jobs/tracegrove.config.yaml +10 -0
- package/samples/report-native/README.md +11 -0
- package/samples/report-native/tracegrove/cancellation.flow.yaml +11 -0
- package/samples/report-native/tracegrove/completion.flow.yaml +22 -0
- package/samples/report-native/tracegrove/failure.flow.yaml +7 -0
- package/samples/report-native/tracegrove.config.yaml +11 -0
- package/schema/tracegrove_cli-error_v1.json +156 -0
- package/schema/tracegrove_config_v1.json +233 -0
- package/schema/tracegrove_fixture_v1.json +297 -0
- package/schema/tracegrove_flow_v1.json +960 -0
- package/schema/tracegrove_recovery-status_v1.json +234 -0
- package/schema/tracegrove_run-video_v1.json +25 -0
- package/schema/workflow_action-registry_v1.json +303 -0
- package/schema/workflow_auth-recipe_v1.json +146 -0
- package/schema/workflow_boundary-observation_v1.json +515 -0
- package/schema/workflow_browser-command_v1.json +292 -0
- package/schema/workflow_browser-locator_v1.json +74 -0
- package/schema/workflow_browser-network-observation_v1.json +48 -0
- package/schema/workflow_browser-observation_v1.json +53 -0
- package/schema/workflow_budget-reservation_v1.json +150 -0
- package/schema/workflow_campaign-result_v1.json +382 -0
- package/schema/workflow_capability-artifact-manifest_v1.json +529 -0
- package/schema/workflow_capability-descriptor_v1.json +351 -0
- package/schema/workflow_capability-lifecycle-checkpoint_v1.json +510 -0
- package/schema/workflow_capability-observation_v1.json +1707 -0
- package/schema/workflow_capability-operation_v1.json +3212 -0
- package/schema/workflow_capability-replay-plan_v1.json +1247 -0
- package/schema/workflow_capability-retry-policy_v1.json +39 -0
- package/schema/workflow_capability-retry-state_v1.json +242 -0
- package/schema/workflow_case_v1.json +4222 -0
- package/schema/workflow_change-model_v1.json +614 -0
- package/schema/workflow_cleanup-expectation_v1.json +108 -0
- package/schema/workflow_cleanup-followup_v1.json +145 -0
- package/schema/workflow_component-profile_v1.json +219 -0
- package/schema/workflow_config_v1.json +180 -0
- package/schema/workflow_corpus_v1.json +172 -0
- package/schema/workflow_cost-observation_v1.json +366 -0
- package/schema/workflow_credential-lease_v1.json +222 -0
- package/schema/workflow_effective-config_v1.json +214 -0
- package/schema/workflow_environment-plan_v1.json +445 -0
- package/schema/workflow_environment_v1.json +1827 -0
- package/schema/workflow_evidence-projection_v1.json +636 -0
- package/schema/workflow_execution_v1.json +4086 -0
- package/schema/workflow_fidelity-plan_v1.json +512 -0
- package/schema/workflow_fidelity-profile_v1.json +396 -0
- package/schema/workflow_fixture-manifest_v1.json +918 -0
- package/schema/workflow_fixture-plan_v1.json +594 -0
- package/schema/workflow_git-source-request_v1.json +124 -0
- package/schema/workflow_git-source-resolution_v1.json +660 -0
- package/schema/workflow_git-source-snapshot_v1.json +287 -0
- package/schema/workflow_host-lease_v1.json +321 -0
- package/schema/workflow_host-observation_v1.json +282 -0
- package/schema/workflow_host-plan_v1.json +719 -0
- package/schema/workflow_identity-attestation_v1.json +412 -0
- package/schema/workflow_intelligence-policy_v1.json +153 -0
- package/schema/workflow_logical-payload_v1.json +206 -0
- package/schema/workflow_mcp-tool-call_v1.json +70 -0
- package/schema/workflow_mcp-tool-observation_v1.json +125 -0
- package/schema/workflow_mock-responses_v1.json +185 -0
- package/schema/workflow_native-job-action_v1.json +123 -0
- package/schema/workflow_native-job-observation_v1.json +138 -0
- package/schema/workflow_native-job-ready_v1.json +31 -0
- package/schema/workflow_native-job-request_v1.json +155 -0
- package/schema/workflow_native-job-response_v1.json +125 -0
- package/schema/workflow_ownership_v1.json +116 -0
- package/schema/workflow_persona_v1.json +499 -0
- package/schema/workflow_plan-edit-projection_v1.json +152 -0
- package/schema/workflow_plan-review_v1.json +246 -0
- package/schema/workflow_portable-environment-intent_v1.json +499 -0
- package/schema/workflow_portable-environment-profile_v1.json +1429 -0
- package/schema/workflow_portable-preflight_v1.json +2281 -0
- package/schema/workflow_qualification-admission_v1.json +467 -0
- package/schema/workflow_qualification-intent_v1.json +98 -0
- package/schema/workflow_qualification-policy_v1.json +109 -0
- package/schema/workflow_qualification-round_v1.json +226 -0
- package/schema/workflow_replay-assessment_v1.json +197 -0
- package/schema/workflow_replay-finding_v1.json +147 -0
- package/schema/workflow_request_v1.json +1567 -0
- package/schema/workflow_result-ingest_v1.json +343 -0
- package/schema/workflow_revisions_v1.json +334 -0
- package/schema/workflow_routing-decision_v1.json +482 -0
- package/schema/workflow_runner-capabilities_v1.json +316 -0
- package/schema/workflow_runner-profile_v1.json +119 -0
- package/schema/workflow_runner-protocol_v1_host.json +382 -0
- package/schema/workflow_runner-protocol_v1_plugin.json +491 -0
- package/schema/workflow_scenario-activation-intent_v1.json +346 -0
- package/schema/workflow_scenario-activation_v1.json +562 -0
- package/schema/workflow_scenario-projection_v1.json +221 -0
- package/schema/workflow_scenario-promotion_v1.json +455 -0
- package/schema/workflow_scenario-replay-assessment_v1.json +696 -0
- package/schema/workflow_scenario-revision-token_v1.json +115 -0
- package/schema/workflow_scenario-structure_v1.json +368 -0
- package/schema/workflow_scenario_v1.json +401 -0
- package/schema/workflow_scoped-resource_v1.json +550 -0
- package/schema/workflow_seed-recipe_v1.json +724 -0
- package/schema/workflow_selection_v1.json +1108 -0
- package/schema/workflow_signed-cleanup-followup_v1.json +175 -0
- package/schema/workflow_source-plan_v1.json +756 -0
- package/schema/workflow_source-selection_v1.json +456 -0
- package/schema/workflow_source-validation_v1.json +366 -0
- package/schema/workflow_step-event_v1.json +228 -0
- package/schema/workflow_stream-transcript_v1.json +1030 -0
- package/schema/workflow_suite_v1.json +64 -0
- package/schema/workflow_surface-binding_v1.json +411 -0
- package/schema/workflow_surface-pack_v1.json +159 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "workflow.portable-environment-profile/v1",
|
|
3
|
+
"ref": {
|
|
4
|
+
"id": "example.profile.alongside_runner",
|
|
5
|
+
"revision": "1",
|
|
6
|
+
"digest": {
|
|
7
|
+
"algorithm": "sha256",
|
|
8
|
+
"hex": "e4996a6cd34d28fdecc35d1b6fbef4b7e38301c7133137a43d833d1833e53e56"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"scope": {
|
|
12
|
+
"ownerId": "example.owner",
|
|
13
|
+
"tenantId": null,
|
|
14
|
+
"visibility": "owner_private"
|
|
15
|
+
},
|
|
16
|
+
"sourceSelectionRef": {
|
|
17
|
+
"id": "example.source-selection",
|
|
18
|
+
"revision": "1",
|
|
19
|
+
"digest": {
|
|
20
|
+
"algorithm": "sha256",
|
|
21
|
+
"hex": "ab392664423be621da6bb048313f6531356bd96333edb3938dce0b97cad0f277"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"buildRef": {
|
|
25
|
+
"id": "example.build",
|
|
26
|
+
"revision": "1",
|
|
27
|
+
"digest": {
|
|
28
|
+
"algorithm": "sha256",
|
|
29
|
+
"hex": "7e261d3ba9878d05db4c5c6baa3e4a2db1a584c3d2f5f0628b4a1c78f43f5e42"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"configurationRef": {
|
|
33
|
+
"id": "example.non-secret-config",
|
|
34
|
+
"revision": "1",
|
|
35
|
+
"digest": {
|
|
36
|
+
"algorithm": "sha256",
|
|
37
|
+
"hex": "74afc8ef6b145b02ec9bb478dfdefdadb225fc6f7c6a729760b525ca83476e55"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"target": {
|
|
41
|
+
"mode": "alongside_runner",
|
|
42
|
+
"workspaceRef": {
|
|
43
|
+
"id": "example.workspace",
|
|
44
|
+
"revision": "1",
|
|
45
|
+
"digest": {
|
|
46
|
+
"algorithm": "sha256",
|
|
47
|
+
"hex": "8e1f432465350d78268d8b77cee90f0715de9e46a650df4235f2a74894fa52b1"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"hostPlanRef": {
|
|
51
|
+
"id": "example.host-plan",
|
|
52
|
+
"revision": "1",
|
|
53
|
+
"digest": {
|
|
54
|
+
"algorithm": "sha256",
|
|
55
|
+
"hex": "bc6a1e45f33b36d86dbce570145d739f81e757d620e6a973f641905ad11aff21"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"launchRecipeRef": {
|
|
59
|
+
"id": "example.launch-recipe",
|
|
60
|
+
"revision": "1",
|
|
61
|
+
"digest": {
|
|
62
|
+
"algorithm": "sha256",
|
|
63
|
+
"hex": "ea08051425f1b814abb6bc69d036429beb70df5b2a142f94bd1dcfe3df7cabd4"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"endpoints": [
|
|
68
|
+
{
|
|
69
|
+
"id": "app",
|
|
70
|
+
"resolverRef": {
|
|
71
|
+
"id": "example.app-endpoint",
|
|
72
|
+
"revision": "1",
|
|
73
|
+
"digest": {
|
|
74
|
+
"algorithm": "sha256",
|
|
75
|
+
"hex": "a6b3d24ad9a0af002a55a8ac10805e763bedd7b3e5fc0a714a3d59fecc129b81"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"source": "launch_reported"
|
|
79
|
+
}
|
|
80
|
+
],
|
|
81
|
+
"readiness": {
|
|
82
|
+
"endpointId": "app",
|
|
83
|
+
"path": "/health",
|
|
84
|
+
"method": "GET",
|
|
85
|
+
"expectedStatus": 200,
|
|
86
|
+
"timeoutMs": 20000
|
|
87
|
+
},
|
|
88
|
+
"capabilities": [
|
|
89
|
+
{
|
|
90
|
+
"id": "surface.http",
|
|
91
|
+
"version": 1,
|
|
92
|
+
"required": true
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
"dependencyPlanRefs": [],
|
|
96
|
+
"personaCredentials": [
|
|
97
|
+
{
|
|
98
|
+
"personaRef": {
|
|
99
|
+
"id": "example.persona.owner",
|
|
100
|
+
"revision": "1",
|
|
101
|
+
"digest": {
|
|
102
|
+
"algorithm": "sha256",
|
|
103
|
+
"hex": "6e993a3445b5165be1d544736fadaa7d46d65c63d07ed71b1552bb51a5bd0813"
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"secretRef": {
|
|
107
|
+
"id": "example.app-persona-credential",
|
|
108
|
+
"revision": "1",
|
|
109
|
+
"digest": {
|
|
110
|
+
"algorithm": "sha256",
|
|
111
|
+
"hex": "e90cf65d59c84838c7dd77bec933794873024e2c93cf8252a4079e494a04c4f8"
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
],
|
|
116
|
+
"executionPolicyRef": {
|
|
117
|
+
"id": "example.execution-policy",
|
|
118
|
+
"revision": "1",
|
|
119
|
+
"digest": {
|
|
120
|
+
"algorithm": "sha256",
|
|
121
|
+
"hex": "f5150e48ea518c445afe198f0c7d643b4645faaeb4fe3d6d007d79209dc4de59"
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"executionSecretRefs": [],
|
|
125
|
+
"network": {
|
|
126
|
+
"policyRef": {
|
|
127
|
+
"id": "example.network-policy",
|
|
128
|
+
"revision": "1",
|
|
129
|
+
"digest": {
|
|
130
|
+
"algorithm": "sha256",
|
|
131
|
+
"hex": "858db25db4c84793dd49f8bce7d12c9900326669c502880e1f5267895119efd2"
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
"enforcement": "host",
|
|
135
|
+
"inbound": "loopback_only",
|
|
136
|
+
"egress": "explicit_allowlist",
|
|
137
|
+
"allowedEndpointIds": [
|
|
138
|
+
"app"
|
|
139
|
+
]
|
|
140
|
+
},
|
|
141
|
+
"data": {
|
|
142
|
+
"mode": "none"
|
|
143
|
+
},
|
|
144
|
+
"ownership": {
|
|
145
|
+
"leasePolicyRef": {
|
|
146
|
+
"id": "example.lease-policy",
|
|
147
|
+
"revision": "1",
|
|
148
|
+
"digest": {
|
|
149
|
+
"algorithm": "sha256",
|
|
150
|
+
"hex": "0cc0aa82f73b5bf800d872d90a515772246e60a1f26c0b827c823a1256afb26d"
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
"cleanupPlanRef": {
|
|
154
|
+
"id": "example.cleanup-plan",
|
|
155
|
+
"revision": "1",
|
|
156
|
+
"digest": {
|
|
157
|
+
"algorithm": "sha256",
|
|
158
|
+
"hex": "af70f7ee71e47a2ba88e31da4d90bcf0cd8a991cb24b937245704f17d5f6b1db"
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
"cleanupReserveMs": 10000
|
|
162
|
+
},
|
|
163
|
+
"artifacts": {
|
|
164
|
+
"destinationRef": {
|
|
165
|
+
"id": "example.artifact-destination",
|
|
166
|
+
"revision": "1",
|
|
167
|
+
"digest": {
|
|
168
|
+
"algorithm": "sha256",
|
|
169
|
+
"hex": "86b317ba249de72c702be4390a57b7bcd090aa5fdb086fe16e64479efa4f9fca"
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
"durability": "export_required",
|
|
173
|
+
"redactionPolicyRef": {
|
|
174
|
+
"id": "example.redaction-policy",
|
|
175
|
+
"revision": "1",
|
|
176
|
+
"digest": {
|
|
177
|
+
"algorithm": "sha256",
|
|
178
|
+
"hex": "ebe43b36aeba3427ee4be196757f1cc3d4acb47c34f02928f40ed0cf008d0a8c"
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
"retentionMs": 86400000,
|
|
182
|
+
"maxBytes": 16777216
|
|
183
|
+
},
|
|
184
|
+
"limits": {
|
|
185
|
+
"wallMs": 120000,
|
|
186
|
+
"cpu": 1,
|
|
187
|
+
"memoryMb": 1024,
|
|
188
|
+
"diskMb": 256,
|
|
189
|
+
"maxRequests": 100,
|
|
190
|
+
"maxBrowserActions": 0,
|
|
191
|
+
"maxProviderCalls": 0,
|
|
192
|
+
"maxAgentCalls": 0,
|
|
193
|
+
"maxSpendCents": 0
|
|
194
|
+
},
|
|
195
|
+
"allowedReplayModes": [
|
|
196
|
+
"fresh_execution",
|
|
197
|
+
"evidence_playback"
|
|
198
|
+
]
|
|
199
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "workflow.portable-environment-profile/v1",
|
|
3
|
+
"ref": {
|
|
4
|
+
"id": "example.profile.external_staging",
|
|
5
|
+
"revision": "1",
|
|
6
|
+
"digest": {
|
|
7
|
+
"algorithm": "sha256",
|
|
8
|
+
"hex": "ce613297287d6c80046cf21ea9439ec5cecbd01db2facba9cdd0721e89af5045"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"scope": {
|
|
12
|
+
"ownerId": "example.owner",
|
|
13
|
+
"tenantId": null,
|
|
14
|
+
"visibility": "owner_private"
|
|
15
|
+
},
|
|
16
|
+
"sourceSelectionRef": {
|
|
17
|
+
"id": "example.source-selection",
|
|
18
|
+
"revision": "1",
|
|
19
|
+
"digest": {
|
|
20
|
+
"algorithm": "sha256",
|
|
21
|
+
"hex": "ab392664423be621da6bb048313f6531356bd96333edb3938dce0b97cad0f277"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"buildRef": {
|
|
25
|
+
"id": "example.build",
|
|
26
|
+
"revision": "1",
|
|
27
|
+
"digest": {
|
|
28
|
+
"algorithm": "sha256",
|
|
29
|
+
"hex": "7e261d3ba9878d05db4c5c6baa3e4a2db1a584c3d2f5f0628b4a1c78f43f5e42"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"configurationRef": {
|
|
33
|
+
"id": "example.non-secret-config",
|
|
34
|
+
"revision": "1",
|
|
35
|
+
"digest": {
|
|
36
|
+
"algorithm": "sha256",
|
|
37
|
+
"hex": "74afc8ef6b145b02ec9bb478dfdefdadb225fc6f7c6a729760b525ca83476e55"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"target": {
|
|
41
|
+
"mode": "external_staging",
|
|
42
|
+
"deploymentRef": {
|
|
43
|
+
"id": "example.deployment",
|
|
44
|
+
"revision": "1",
|
|
45
|
+
"digest": {
|
|
46
|
+
"algorithm": "sha256",
|
|
47
|
+
"hex": "8076c13e2f647e540083550833a8160c5e089fb199c9453ab5aecd598c9228fb"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"endpoints": [
|
|
52
|
+
{
|
|
53
|
+
"id": "app",
|
|
54
|
+
"resolverRef": {
|
|
55
|
+
"id": "example.app-endpoint",
|
|
56
|
+
"revision": "1",
|
|
57
|
+
"digest": {
|
|
58
|
+
"algorithm": "sha256",
|
|
59
|
+
"hex": "a6b3d24ad9a0af002a55a8ac10805e763bedd7b3e5fc0a714a3d59fecc129b81"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"source": "external_deployment"
|
|
63
|
+
}
|
|
64
|
+
],
|
|
65
|
+
"readiness": {
|
|
66
|
+
"endpointId": "app",
|
|
67
|
+
"path": "/health",
|
|
68
|
+
"method": "GET",
|
|
69
|
+
"expectedStatus": 200,
|
|
70
|
+
"timeoutMs": 20000
|
|
71
|
+
},
|
|
72
|
+
"capabilities": [
|
|
73
|
+
{
|
|
74
|
+
"id": "surface.http",
|
|
75
|
+
"version": 1,
|
|
76
|
+
"required": true
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"dependencyPlanRefs": [],
|
|
80
|
+
"personaCredentials": [
|
|
81
|
+
{
|
|
82
|
+
"personaRef": {
|
|
83
|
+
"id": "example.persona.owner",
|
|
84
|
+
"revision": "1",
|
|
85
|
+
"digest": {
|
|
86
|
+
"algorithm": "sha256",
|
|
87
|
+
"hex": "6e993a3445b5165be1d544736fadaa7d46d65c63d07ed71b1552bb51a5bd0813"
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"secretRef": {
|
|
91
|
+
"id": "example.app-persona-credential",
|
|
92
|
+
"revision": "1",
|
|
93
|
+
"digest": {
|
|
94
|
+
"algorithm": "sha256",
|
|
95
|
+
"hex": "e90cf65d59c84838c7dd77bec933794873024e2c93cf8252a4079e494a04c4f8"
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
],
|
|
100
|
+
"executionPolicyRef": {
|
|
101
|
+
"id": "example.execution-policy",
|
|
102
|
+
"revision": "1",
|
|
103
|
+
"digest": {
|
|
104
|
+
"algorithm": "sha256",
|
|
105
|
+
"hex": "f5150e48ea518c445afe198f0c7d643b4645faaeb4fe3d6d007d79209dc4de59"
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"executionSecretRefs": [],
|
|
109
|
+
"network": {
|
|
110
|
+
"policyRef": {
|
|
111
|
+
"id": "example.network-policy",
|
|
112
|
+
"revision": "1",
|
|
113
|
+
"digest": {
|
|
114
|
+
"algorithm": "sha256",
|
|
115
|
+
"hex": "858db25db4c84793dd49f8bce7d12c9900326669c502880e1f5267895119efd2"
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
"enforcement": "host",
|
|
119
|
+
"inbound": "none",
|
|
120
|
+
"egress": "explicit_allowlist",
|
|
121
|
+
"allowedEndpointIds": [
|
|
122
|
+
"app"
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
"data": {
|
|
126
|
+
"mode": "none"
|
|
127
|
+
},
|
|
128
|
+
"ownership": {
|
|
129
|
+
"leasePolicyRef": {
|
|
130
|
+
"id": "example.lease-policy",
|
|
131
|
+
"revision": "1",
|
|
132
|
+
"digest": {
|
|
133
|
+
"algorithm": "sha256",
|
|
134
|
+
"hex": "0cc0aa82f73b5bf800d872d90a515772246e60a1f26c0b827c823a1256afb26d"
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"cleanupPlanRef": {
|
|
138
|
+
"id": "example.cleanup-plan",
|
|
139
|
+
"revision": "1",
|
|
140
|
+
"digest": {
|
|
141
|
+
"algorithm": "sha256",
|
|
142
|
+
"hex": "af70f7ee71e47a2ba88e31da4d90bcf0cd8a991cb24b937245704f17d5f6b1db"
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"cleanupReserveMs": 10000
|
|
146
|
+
},
|
|
147
|
+
"artifacts": {
|
|
148
|
+
"destinationRef": {
|
|
149
|
+
"id": "example.artifact-destination",
|
|
150
|
+
"revision": "1",
|
|
151
|
+
"digest": {
|
|
152
|
+
"algorithm": "sha256",
|
|
153
|
+
"hex": "86b317ba249de72c702be4390a57b7bcd090aa5fdb086fe16e64479efa4f9fca"
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
"durability": "export_required",
|
|
157
|
+
"redactionPolicyRef": {
|
|
158
|
+
"id": "example.redaction-policy",
|
|
159
|
+
"revision": "1",
|
|
160
|
+
"digest": {
|
|
161
|
+
"algorithm": "sha256",
|
|
162
|
+
"hex": "ebe43b36aeba3427ee4be196757f1cc3d4acb47c34f02928f40ed0cf008d0a8c"
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
"retentionMs": 86400000,
|
|
166
|
+
"maxBytes": 16777216
|
|
167
|
+
},
|
|
168
|
+
"limits": {
|
|
169
|
+
"wallMs": 120000,
|
|
170
|
+
"cpu": 1,
|
|
171
|
+
"memoryMb": 1024,
|
|
172
|
+
"diskMb": 256,
|
|
173
|
+
"maxRequests": 100,
|
|
174
|
+
"maxBrowserActions": 0,
|
|
175
|
+
"maxProviderCalls": 0,
|
|
176
|
+
"maxAgentCalls": 0,
|
|
177
|
+
"maxSpendCents": 0
|
|
178
|
+
},
|
|
179
|
+
"allowedReplayModes": [
|
|
180
|
+
"fresh_execution",
|
|
181
|
+
"evidence_playback"
|
|
182
|
+
]
|
|
183
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Git object checks for pinned snapshots
|
|
2
|
+
|
|
3
|
+
New `materializeGitSnapshot` outputs include the raw commit/tree object proof and each
|
|
4
|
+
file's Git blob identity. The resolver reads immutable Git objects with its existing
|
|
5
|
+
restricted environment; materialization verifies the complete proof before creating
|
|
6
|
+
an output directory. No fetch, checkout, helper, signature verification or application
|
|
7
|
+
execution is added.
|
|
8
|
+
|
|
9
|
+
`verifyGitSnapshotCommit(snapshot, files)` independently hashes every actual file as a
|
|
10
|
+
Git blob, checks paths and modes against the complete raw tree closure, and hashes that
|
|
11
|
+
tree/commit chain against the selected commit. Both SHA-1 and SHA-256 object formats
|
|
12
|
+
are supported. Its observation has `verification: actual_file_bytes` and binds the
|
|
13
|
+
computed commit, root tree, object algorithm and proof digest. It needs captured bytes
|
|
14
|
+
and proof objects and captures each supplied file buffer once before both hash checks,
|
|
15
|
+
so it continues to work after the Git store and source directory
|
|
16
|
+
are unavailable.
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
const files = readGitSnapshotTree(snapshot, sourceRoot);
|
|
20
|
+
const observed = verifyGitSnapshotCommit(snapshot, files);
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
`verifyGitSnapshotProofMetadata(snapshot)` checks object/manifest links without reading
|
|
24
|
+
source files. Its distinct `verification: object_links_only` result is not a runtime
|
|
25
|
+
observation. A resealed manifest could pair a new SHA-256 file checksum with an old Git
|
|
26
|
+
blob ID; metadata alone cannot prove that association. Actual-file verification rejects
|
|
27
|
+
it even when the new checksums and manifest seal agree.
|
|
28
|
+
|
|
29
|
+
## Launch and saved evidence
|
|
30
|
+
|
|
31
|
+
Snapshot reads now verify object proofs when present. The trusted supervisor copies the
|
|
32
|
+
pinned files into its owned tree and verifies the private copy again before launching
|
|
33
|
+
the application. It sends the computed Git observation over its existing IPC channel.
|
|
34
|
+
The parent refuses missing/mismatched observations for proof-bearing snapshots, and
|
|
35
|
+
the sealed identity attestation records the observed fields. The application cannot
|
|
36
|
+
establish this observation through its health response.
|
|
37
|
+
|
|
38
|
+
Saved-bundle verification checks the proof's metadata, snapshot ref, component file
|
|
39
|
+
closure and recorded Git observation after the private launch directory is removed.
|
|
40
|
+
It does not regain the full source bytes from that observation. Authenticating the host
|
|
41
|
+
and its runtime file measurements remains the issuer's job. Existing proof-less snapshots
|
|
42
|
+
remain component-only and receive no Git observation. Repository binding is a separate,
|
|
43
|
+
explicit option described below; remote ownership and dependency-install provenance are
|
|
44
|
+
not inferred from Git object hashes.
|
|
45
|
+
|
|
46
|
+
## Bind a repository role
|
|
47
|
+
|
|
48
|
+
Materialization also saves a sealed `resolution.json` next to `snapshot.json`. To connect
|
|
49
|
+
the selected resolver head to a repository role:
|
|
50
|
+
|
|
51
|
+
```sh
|
|
52
|
+
tracegrove test --config ./head/source/tracegrove.config.yaml \
|
|
53
|
+
--source-snapshot ./head/snapshot.json --source-repository-role application
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The same flags work with `compile`. Compilation verifies the complete source tree,
|
|
57
|
+
checks the sealed resolution sidecar against the snapshot, and emits `SourceSelection`,
|
|
58
|
+
the original `RevisionMatrix`, and snapshot documents in the normal frozen corpus. The
|
|
59
|
+
planner binds that selection to the request and every cell. Existing component-only
|
|
60
|
+
snapshot runs do not change unless a repository role is provided. Old snapshots can
|
|
61
|
+
be rematerialized to obtain a sidecar; no network access is required.
|
|
62
|
+
|
|
63
|
+
The descriptor uses `urn:tracegrove:git-object:<algorithm>:<commit>` and origin
|
|
64
|
+
`snapshot_bundle`. It identifies the actual Git object, not ownership of a GitHub URL.
|
|
65
|
+
`requestedRef` in the target is the immutable commit; `requestedExpression` in source
|
|
66
|
+
selection retains the resolver's original expression. Both Git SHA-1 and SHA-256 work.
|
|
67
|
+
`dirty: false` describes the supervisor's complete private pinned copy, not the checkout.
|
|
68
|
+
|
|
69
|
+
Lockfile identity v1 hashes a sorted manifest of complete pinned path, mode and SHA-256
|
|
70
|
+
digest for `package-lock.json`, `npm-shrinkwrap.json`, `pnpm-lock.yaml`, `yarn.lock`,
|
|
71
|
+
`bun.lock`, `bun.lockb`, `uv.lock`, `poetry.lock`, `Pipfile.lock`, `Cargo.lock`, `Gemfile.lock`,
|
|
72
|
+
`composer.lock` and `go.sum` at any depth. No recognized lockfile produces an explicit
|
|
73
|
+
empty-manifest digest. This identifies pinned lockfiles; it does not establish which
|
|
74
|
+
dependencies were installed.
|
|
75
|
+
|
|
76
|
+
Repository observation is derived only after the supervisor's `actual_file_bytes`
|
|
77
|
+
observation matches the proof. Planning, execution preflight, saved-bundle checks and
|
|
78
|
+
revision assessment share the frozen source-closure checks. They reject different
|
|
79
|
+
roles, remote URLs, lockfile identities, missing closure documents and source plans
|
|
80
|
+
whose reviewed matrix differs. Base snapshots and multi-repository resolution sidecars
|
|
81
|
+
cannot use this single-head binding; companion repositories are never silently dropped.
|
|
82
|
+
They remain available for component-only runs until a complete multi-host binding exists.
|
|
83
|
+
|
|
84
|
+
Two independent native campaigns can now meet a revision-level local qualification
|
|
85
|
+
policy and activate through the durable scenario store. The tests simulate issuer and
|
|
86
|
+
physical-lease authority explicitly. This does not establish hosted issuer trust, live
|
|
87
|
+
staging coverage, remote repository ownership, or a reviewed-source promotion by itself.
|
|
88
|
+
|
|
89
|
+
Proofs fail on missing or duplicate trees, unrelated objects, malformed/canonicalization
|
|
90
|
+
errors, changed file/object/mode bindings, incomplete actual file coverage and unsupported
|
|
91
|
+
tree entries. Symlinks, submodules, empty Git directories and nonportable paths cannot
|
|
92
|
+
be silently omitted. Prototype bounds are 1 MiB per commit, 4 MiB per tree, 8 MiB total
|
|
93
|
+
tree bytes, 8,192 distinct trees and 20,000 traversal entries, in addition to the existing
|
|
94
|
+
10,000-file/32 MiB snapshot bound. Unsupported coverage blocks instead of truncating it.
|
|
95
|
+
|
|
96
|
+
Tests use real SHA-1/SHA-256 repositories, binary files and reused subtrees; remove the
|
|
97
|
+
Git/source paths before pure verification; and exercise resealed forged commits, trees,
|
|
98
|
+
files and runtime attestations. Native pinned launches and independent bundle reads
|
|
99
|
+
verify the observation path. These are local integrity/runtime facts, not hosted issuer
|
|
100
|
+
authentication, author identity, a signed release or remote repository ownership.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Immutable Git source resolution
|
|
2
|
+
|
|
3
|
+
`workflow-verify source-resolve --input repositories.json --output source.json --json` freezes explicit local base/head selections across repositories. It exports a sealed owner-private source-resolution document containing the `RevisionMatrix`, full binary-capable diffs, changed paths and before/after blob bytes. Exit zero means source resolution succeeded; it is not a case review, execution verdict or deployment proof.
|
|
4
|
+
|
|
5
|
+
Create a local request using the public typed SDK (the repository reference below is a local label, not a registered remote identity):
|
|
6
|
+
|
|
7
|
+
```js
|
|
8
|
+
import { writeFileSync } from 'node:fs';
|
|
9
|
+
import { localScope, digestOfValue } from 'workflow-verify';
|
|
10
|
+
|
|
11
|
+
writeFileSync('repositories.json', JSON.stringify({
|
|
12
|
+
scope: localScope(),
|
|
13
|
+
repositories: [{
|
|
14
|
+
repositoryRef: { id: 'application', revision: '1',
|
|
15
|
+
digest: digestOfValue({ kind: 'local-git-binding', name: 'application' }) },
|
|
16
|
+
root: '.', base: 'HEAD~1', head: 'HEAD',
|
|
17
|
+
}],
|
|
18
|
+
}, null, 2), { flag: 'wx', mode: 0o600 });
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Roots in CLI requests resolve relative to the request file. Library callers supply their own trusted local mappings. Both worktrees and bare repositories are supported; selecting a nested directory cannot silently bind its parent repository. The CLI accepts only the process's `localScope()` and writes new output files privately without overwriting existing evidence. Public JSON schemas include the Git request and resolution contracts.
|
|
22
|
+
|
|
23
|
+
`resolveGitSources(request, authorize)` requires a trusted host authorization callback before reading each repository. `GitSourceReader(matrix, bindings, authorize)` implements citation object reads and full-diff reads after restart. Bindings contain only `repositoryRef` and `root`; they do not re-resolve branch expressions. A reader refuses another scope/repository, substituted matrix rows, unavailable objects and changed full-diff bytes. Citation validation still checks exact file/excerpt digests. A later dirty checkout or moved branch does not change the selected immutable commit identities.
|
|
24
|
+
|
|
25
|
+
Git invocation uses argument arrays and [documented end-of-options handling](https://git-scm.com/docs/git-rev-parse), reads commit objects rather than worktree files, and disables replacement objects, inherited Git routing variables, external diff/text-conversion helpers, terminal prompts and lazy fetching. [Git's diff options](https://git-scm.com/docs/git-diff) define the helper exclusions. Selected commits and their tree closure are checked against Git object hashes; captured/read blobs are rehashed independently too. SHA-1 and SHA-256 Git object IDs are preserved in full. This does not create an authenticated issuer or attest a remote repository or deployed target; the host owns the Git executable, source mappings, protected object storage and admission policy.
|
|
26
|
+
|
|
27
|
+
No fetch, checkout, model call or review approval occurs. Missing or multiple merge bases block until a registered alternative revision policy exists; an empty base is never invented. Renames are represented as deletion/addition with detection disabled. Changed symlinks, submodules, unsupported paths/modes, oversized blobs and incomplete output block instead of dropping coverage.
|
|
28
|
+
|
|
29
|
+
Bounds: 32 repositories, 500 changed paths, 1 MiB per captured/cited blob, 4 MiB per full diff/tree listing/tree object, 8,192 trees per selected commit, 32 MiB of captured payload bytes and ten seconds per Git command. CLI input is at most 256 KiB. The artifact includes changed blobs and full diffs, not every source object: later citation reads require the selected objects in an authorized Git store. Full source-object transport remains separate work.
|
|
30
|
+
|
|
31
|
+
The output is a `RevisionMatrix`, not a complete runtime `SourceSelection` or qualified source-to-target proof. Independent element/coverage checking, reviewed source admission, hosted lifecycle storage and execution wiring remain separate gates. Tests use real temporary repositories, including dirty/moved checkouts, bare and SHA-256 repositories, corrupt objects, denied/revoked scope, missing objects, oversized blobs, configured helpers and the actual source/built CLI.
|
|
32
|
+
|
|
33
|
+
## Run selected revisions independently
|
|
34
|
+
|
|
35
|
+
Materialize complete regular-file trees from the frozen resolution using an explicit
|
|
36
|
+
authorized local repository mapping. Relative `--root` paths resolve beside the
|
|
37
|
+
input JSON. Output directories must not exist, and their parent must already exist.
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
tracegrove source-materialize --input source.json --repository application --root . --side base --output ./base-snapshot
|
|
41
|
+
tracegrove source-materialize --input source.json --repository application --root . --side head --output ./head-snapshot
|
|
42
|
+
tracegrove test --config ./base-snapshot/source/tracegrove.config.yaml --source-snapshot ./base-snapshot/snapshot.json
|
|
43
|
+
tracegrove test --config ./head-snapshot/source/tracegrove.config.yaml --source-snapshot ./head-snapshot/snapshot.json
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Each output contains `source/` and a sealed `snapshot.json` with the resolution and
|
|
47
|
+
repository references, exact commit, side, and every file's original Git mode,
|
|
48
|
+
byte count and SHA-256 digest. `materializeGitSnapshot(input, authorize)` exposes
|
|
49
|
+
the same operation through the SDK. Authorization runs before object reads and
|
|
50
|
+
again before output allocation. No fetch, checkout, dependency installation, app
|
|
51
|
+
execution, Git filters or hooks occur during materialization. Later `test` runs
|
|
52
|
+
execute trusted project code and use the ordinary compiler and app identity checks.
|
|
53
|
+
|
|
54
|
+
The reader validates the commit/tree closure and independently rehashes every blob,
|
|
55
|
+
including unchanged files. It refuses an empty tree, symlinks, submodules, unsupported
|
|
56
|
+
modes, nonportable names, case/Unicode aliases, more than 10,000 files, blobs over
|
|
57
|
+
1 MiB, or more than 32 MiB of file bytes. These are complete-coverage limits: it
|
|
58
|
+
never silently excludes a file to make a snapshot pass. A private output is created
|
|
59
|
+
only after all object reads succeed; the manifest is written last, and write failure
|
|
60
|
+
removes only the directory this operation exclusively created. Existing output is
|
|
61
|
+
preserved. The host filesystem and Git executable remain trusted.
|
|
62
|
+
|
|
63
|
+
The CLI regression test creates a real authorization bug and its fix in separate
|
|
64
|
+
commits, freezes them, dirties the checkout and moves its branch. Separate CLI
|
|
65
|
+
processes run the identical saved flow against both materialized revisions: the
|
|
66
|
+
base fails the ownership assertion and the head passes. Both bundles are re-read
|
|
67
|
+
and re-reduced, app digests match the snapshot's source bytes, and cleanup is
|
|
68
|
+
confirmed. CI repeats this through the built distribution and retains both sealed
|
|
69
|
+
bundles, source trees, snapshot manifests and resolution in `source-regression-proof`.
|
|
70
|
+
Another process can verify those bundles or rerun either snapshot without discovery;
|
|
71
|
+
the artifact README gives the exact commands. Locally, set
|
|
72
|
+
`TRACEGROVE_SOURCE_PROOF_DIR` to a new directory when running
|
|
73
|
+
`tests/cliGitSnapshot.test.ts` to retain the same proof.
|
|
74
|
+
|
|
75
|
+
A snapshot is mutable after publication; its manifest describes the captured
|
|
76
|
+
bytes. `test` and `compile` accept `--source-snapshot` for an explicit per-command
|
|
77
|
+
binding. Compilation checks the manifest, local owner scope and every pinned file.
|
|
78
|
+
The frozen launch plan includes that binding; the trusted supervisor checks the
|
|
79
|
+
files again, copies only pinned inputs into its private owned workspace, and
|
|
80
|
+
starts the app there. Untracked files cannot enter the launch copy. Post-plan drift
|
|
81
|
+
in any pinned file, including files outside the entrypoint's source glob, blocks
|
|
82
|
+
startup. The supervisor owns and removes the private copy after stop, startup
|
|
83
|
+
failure or controlling-client disconnect.
|
|
84
|
+
|
|
85
|
+
Pinned launches support the Node file, FastAPI module and canonical Django launch
|
|
86
|
+
templates. Opaque eval/shell wrappers and entrypoints outside the snapshot are
|
|
87
|
+
refused. The attestation binds the supervisor-computed source digest and snapshot
|
|
88
|
+
reference; saved-bundle verification rechecks the exact file closure and manifest
|
|
89
|
+
digests. Dependency installations, interpreter binaries and application environment
|
|
90
|
+
remain separately supplied inputs; this is not a process sandbox or a complete
|
|
91
|
+
dependency attestation. The CLI refuses snapshots from another local scope.
|
|
92
|
+
|
|
93
|
+
New snapshots carry [Git object proofs](git-object-proof.md). The supervisor checks the
|
|
94
|
+
actual private tree against blob/tree/commit object identities and records that fact.
|
|
95
|
+
Metadata-only checks remain distinct from actual-file verification. A self-sealed
|
|
96
|
+
manifest does not prove who resolved its commit, remote repository ownership or deployed
|
|
97
|
+
identity. This is not a runtime `SourceSelection`. The host does not yet populate repository observations
|
|
98
|
+
or promote qualification from this manifest. Authenticated resolver/admission
|
|
99
|
+
policy, reviewed lifecycle execution and hosted activation remain separate work.
|
|
100
|
+
|
|
101
|
+
## Keep scenarios in one workbench
|
|
102
|
+
|
|
103
|
+
Application input can be selected independently of the config and saved flows.
|
|
104
|
+
`app.root` is resolved inside the selected snapshot; flows, personas and config
|
|
105
|
+
continue to come from the workbench. No team config rewrite is needed.
|
|
106
|
+
|
|
107
|
+
```sh
|
|
108
|
+
tracegrove settings --dir ./workbench --source-snapshot ./snapshots/head/snapshot.json
|
|
109
|
+
tracegrove test --config ./workbench/tracegrove.config.yaml
|
|
110
|
+
tracegrove settings --dir ./workbench --working-tree
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
The CLI snapshot path is relative to the calling directory, as with the existing
|
|
114
|
+
one-run `test --source-snapshot` override. The saved path is relative to the
|
|
115
|
+
workbench. An explicit one-run override takes precedence over the saved choice.
|
|
116
|
+
Settings preserves the agent/model/budget preferences and rejects conflicting
|
|
117
|
+
input switches before writing any preference.
|
|
118
|
+
|
|
119
|
+
Grove's **Settings → Verification input** offers **Check snapshot** before
|
|
120
|
+
**Use this snapshot**. Checking reads and validates bytes and the launch template;
|
|
121
|
+
it launches no application and writes no compile output. Saving records the
|
|
122
|
+
manifest's exact reference. Replacing the manifest or changing a pinned file
|
|
123
|
+
blocks runs until reviewed again; there is no automatic fallback to working tree.
|
|
124
|
+
**Use working tree** clears the local selection without deleting a snapshot.
|
|
125
|
+
|
|
126
|
+
The Run page separates **Next run input** from **Recorded run request**. The latter
|
|
127
|
+
is reconstructed from the frozen host plans in re-verified saved evidence, even
|
|
128
|
+
after a preference change. Unreadable or inconsistent evidence shows unavailable,
|
|
129
|
+
never the current default. A recorded request describes local inputs; it does
|
|
130
|
+
not establish that an application successfully launched or grant hosted qualification.
|
|
131
|
+
Discovery's branch selector only scans routes and does not change run input.
|
|
132
|
+
Python dependencies may be supplied by the workbench's `.venv` or explicit
|
|
133
|
+
`app.python`; neither dependencies nor environment are sealed by the source pin.
|
|
Binary file
|