@smthrs/engine-store 0.0.0-stage → 1.0.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +247 -0
- package/LICENSE +21 -0
- package/README.md +146 -2
- package/dist/cjs/ArtifactGc.d.ts +235 -0
- package/dist/cjs/ArtifactGc.d.ts.map +1 -0
- package/dist/cjs/ArtifactGc.js +183 -0
- package/dist/cjs/ArtifactGc.js.map +7 -0
- package/dist/cjs/ArtifactSync.d.ts +164 -0
- package/dist/cjs/ArtifactSync.d.ts.map +1 -0
- package/dist/cjs/ArtifactSync.js +144 -0
- package/dist/cjs/ArtifactSync.js.map +7 -0
- package/dist/cjs/CacheSync.d.ts +112 -0
- package/dist/cjs/CacheSync.d.ts.map +1 -0
- package/dist/cjs/CacheSync.js +64 -0
- package/dist/cjs/CacheSync.js.map +7 -0
- package/dist/cjs/DeferredClockFold.d.ts +354 -0
- package/dist/cjs/DeferredClockFold.d.ts.map +1 -0
- package/dist/cjs/DeferredClockFold.js +335 -0
- package/dist/cjs/DeferredClockFold.js.map +7 -0
- package/dist/cjs/DisasterRecovery.d.ts +431 -0
- package/dist/cjs/DisasterRecovery.d.ts.map +1 -0
- package/dist/cjs/DisasterRecovery.js +453 -0
- package/dist/cjs/DisasterRecovery.js.map +7 -0
- package/dist/cjs/DurableEngineState.d.ts +776 -0
- package/dist/cjs/DurableEngineState.d.ts.map +1 -0
- package/dist/cjs/DurableEngineState.js +1536 -0
- package/dist/cjs/DurableEngineState.js.map +7 -0
- package/dist/cjs/EngineStore.d.ts +158 -0
- package/dist/cjs/EngineStore.d.ts.map +1 -0
- package/dist/cjs/EngineStore.js +398 -0
- package/dist/cjs/EngineStore.js.map +7 -0
- package/dist/cjs/EngineStoreMetrics.d.ts +276 -0
- package/dist/cjs/EngineStoreMetrics.d.ts.map +1 -0
- package/dist/cjs/EngineStoreMetrics.js +135 -0
- package/dist/cjs/EngineStoreMetrics.js.map +7 -0
- package/dist/cjs/Errors.d.ts +22 -0
- package/dist/cjs/Errors.d.ts.map +1 -0
- package/dist/cjs/Errors.js +39 -0
- package/dist/cjs/Errors.js.map +7 -0
- package/dist/cjs/EventTypes.d.ts +27 -0
- package/dist/cjs/EventTypes.d.ts.map +1 -0
- package/dist/cjs/EventTypes.js +37 -0
- package/dist/cjs/EventTypes.js.map +7 -0
- package/dist/cjs/ExecutionFacts.d.ts +59 -0
- package/dist/cjs/ExecutionFacts.d.ts.map +1 -0
- package/dist/cjs/ExecutionFacts.js +123 -0
- package/dist/cjs/ExecutionFacts.js.map +7 -0
- package/dist/cjs/ExecutionSnapshot.d.ts +117 -0
- package/dist/cjs/ExecutionSnapshot.d.ts.map +1 -0
- package/dist/cjs/ExecutionSnapshot.js +111 -0
- package/dist/cjs/ExecutionSnapshot.js.map +7 -0
- package/dist/cjs/Inconsistency.d.ts +154 -0
- package/dist/cjs/Inconsistency.d.ts.map +1 -0
- package/dist/cjs/Inconsistency.js +135 -0
- package/dist/cjs/Inconsistency.js.map +7 -0
- package/dist/cjs/Migrations.d.ts +56 -0
- package/dist/cjs/Migrations.d.ts.map +1 -0
- package/dist/cjs/Migrations.js +78 -0
- package/dist/cjs/Migrations.js.map +7 -0
- package/dist/cjs/OwnerIdentity.d.ts +91 -0
- package/dist/cjs/OwnerIdentity.d.ts.map +1 -0
- package/dist/cjs/OwnerIdentity.js +65 -0
- package/dist/cjs/OwnerIdentity.js.map +7 -0
- package/dist/cjs/PlanInputStore.d.ts +110 -0
- package/dist/cjs/PlanInputStore.d.ts.map +1 -0
- package/dist/cjs/PlanInputStore.js +224 -0
- package/dist/cjs/PlanInputStore.js.map +7 -0
- package/dist/cjs/PlanMergeStore.d.ts +113 -0
- package/dist/cjs/PlanMergeStore.d.ts.map +1 -0
- package/dist/cjs/PlanMergeStore.js +255 -0
- package/dist/cjs/PlanMergeStore.js.map +7 -0
- package/dist/cjs/PlanScheduler.d.ts +363 -0
- package/dist/cjs/PlanScheduler.d.ts.map +1 -0
- package/dist/cjs/PlanScheduler.js +1090 -0
- package/dist/cjs/PlanScheduler.js.map +7 -0
- package/dist/cjs/Reconciliation.d.ts +175 -0
- package/dist/cjs/Reconciliation.d.ts.map +1 -0
- package/dist/cjs/Reconciliation.js +119 -0
- package/dist/cjs/Reconciliation.js.map +7 -0
- package/dist/cjs/ReplayOnly.d.ts +91 -0
- package/dist/cjs/ReplayOnly.d.ts.map +1 -0
- package/dist/cjs/ReplayOnly.js +52 -0
- package/dist/cjs/ReplayOnly.js.map +7 -0
- package/dist/cjs/Retention.d.ts +113 -0
- package/dist/cjs/Retention.d.ts.map +1 -0
- package/dist/cjs/Retention.js +99 -0
- package/dist/cjs/Retention.js.map +7 -0
- package/dist/cjs/RunCatalogRead.d.ts +17 -0
- package/dist/cjs/RunCatalogRead.d.ts.map +1 -0
- package/dist/cjs/RunCatalogRead.js +33 -0
- package/dist/cjs/RunCatalogRead.js.map +7 -0
- package/dist/cjs/RunChangeFeed.d.ts +75 -0
- package/dist/cjs/RunChangeFeed.d.ts.map +1 -0
- package/dist/cjs/RunChangeFeed.js +96 -0
- package/dist/cjs/RunChangeFeed.js.map +7 -0
- package/dist/cjs/RunState.d.ts +116 -0
- package/dist/cjs/RunState.d.ts.map +1 -0
- package/dist/cjs/RunState.js +76 -0
- package/dist/cjs/RunState.js.map +7 -0
- package/dist/cjs/Selection.d.ts +495 -0
- package/dist/cjs/Selection.d.ts.map +1 -0
- package/dist/cjs/Selection.js +288 -0
- package/dist/cjs/Selection.js.map +7 -0
- package/dist/cjs/SelectionStore.d.ts +141 -0
- package/dist/cjs/SelectionStore.d.ts.map +1 -0
- package/dist/cjs/SelectionStore.js +229 -0
- package/dist/cjs/SelectionStore.js.map +7 -0
- package/dist/cjs/StepBoundary.d.ts +501 -0
- package/dist/cjs/StepBoundary.d.ts.map +1 -0
- package/dist/cjs/StepBoundary.js +619 -0
- package/dist/cjs/StepBoundary.js.map +7 -0
- package/dist/cjs/StepCacheFold.d.ts +148 -0
- package/dist/cjs/StepCacheFold.d.ts.map +1 -0
- package/dist/cjs/StepCacheFold.js +131 -0
- package/dist/cjs/StepCacheFold.js.map +7 -0
- package/dist/cjs/StepSandbox.d.ts +78 -0
- package/dist/cjs/StepSandbox.d.ts.map +1 -0
- package/dist/cjs/StepSandbox.js +75 -0
- package/dist/cjs/StepSandbox.js.map +7 -0
- package/dist/cjs/WakeBus.d.ts +116 -0
- package/dist/cjs/WakeBus.d.ts.map +1 -0
- package/dist/cjs/WakeBus.js +89 -0
- package/dist/cjs/WakeBus.js.map +7 -0
- package/dist/cjs/WorkspaceSandbox.d.ts +619 -0
- package/dist/cjs/WorkspaceSandbox.d.ts.map +1 -0
- package/dist/cjs/WorkspaceSandbox.js +711 -0
- package/dist/cjs/WorkspaceSandbox.js.map +7 -0
- package/dist/cjs/index.d.ts +157 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +95 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/internal/ActionPersistence.d.ts +276 -0
- package/dist/cjs/internal/ActionPersistence.d.ts.map +1 -0
- package/dist/cjs/internal/ActionPersistence.js +1395 -0
- package/dist/cjs/internal/ActionPersistence.js.map +7 -0
- package/dist/cjs/internal/ArtifactRoots.d.ts +38 -0
- package/dist/cjs/internal/ArtifactRoots.d.ts.map +1 -0
- package/dist/cjs/internal/ArtifactRoots.js +89 -0
- package/dist/cjs/internal/ArtifactRoots.js.map +7 -0
- package/dist/cjs/internal/AttemptAdmission.d.ts +53 -0
- package/dist/cjs/internal/AttemptAdmission.d.ts.map +1 -0
- package/dist/cjs/internal/AttemptAdmission.js +52 -0
- package/dist/cjs/internal/AttemptAdmission.js.map +7 -0
- package/dist/cjs/internal/AttemptLifecycle.d.ts +245 -0
- package/dist/cjs/internal/AttemptLifecycle.d.ts.map +1 -0
- package/dist/cjs/internal/AttemptLifecycle.js +112 -0
- package/dist/cjs/internal/AttemptLifecycle.js.map +7 -0
- package/dist/cjs/internal/AttemptProbe.d.ts +53 -0
- package/dist/cjs/internal/AttemptProbe.d.ts.map +1 -0
- package/dist/cjs/internal/AttemptProbe.js +66 -0
- package/dist/cjs/internal/AttemptProbe.js.map +7 -0
- package/dist/cjs/internal/CacheAdmission.d.ts +79 -0
- package/dist/cjs/internal/CacheAdmission.d.ts.map +1 -0
- package/dist/cjs/internal/CacheAdmission.js +71 -0
- package/dist/cjs/internal/CacheAdmission.js.map +7 -0
- package/dist/cjs/internal/CacheAgeHistory.d.ts +27 -0
- package/dist/cjs/internal/CacheAgeHistory.d.ts.map +1 -0
- package/dist/cjs/internal/CacheAgeHistory.js +61 -0
- package/dist/cjs/internal/CacheAgeHistory.js.map +7 -0
- package/dist/cjs/internal/CacheAgeVerdicts.d.ts +15 -0
- package/dist/cjs/internal/CacheAgeVerdicts.d.ts.map +1 -0
- package/dist/cjs/internal/CacheAgeVerdicts.js +73 -0
- package/dist/cjs/internal/CacheAgeVerdicts.js.map +7 -0
- package/dist/cjs/internal/CacheOutputPolicy.d.ts +24 -0
- package/dist/cjs/internal/CacheOutputPolicy.d.ts.map +1 -0
- package/dist/cjs/internal/CacheOutputPolicy.js +75 -0
- package/dist/cjs/internal/CacheOutputPolicy.js.map +7 -0
- package/dist/cjs/internal/CachePublication.d.ts +97 -0
- package/dist/cjs/internal/CachePublication.d.ts.map +1 -0
- package/dist/cjs/internal/CachePublication.js +80 -0
- package/dist/cjs/internal/CachePublication.js.map +7 -0
- package/dist/cjs/internal/CallFacts.d.ts +15 -0
- package/dist/cjs/internal/CallFacts.d.ts.map +1 -0
- package/dist/cjs/internal/CallFacts.js +97 -0
- package/dist/cjs/internal/CallFacts.js.map +7 -0
- package/dist/cjs/internal/CopiedRecord.d.ts +61 -0
- package/dist/cjs/internal/CopiedRecord.d.ts.map +1 -0
- package/dist/cjs/internal/CopiedRecord.js +134 -0
- package/dist/cjs/internal/CopiedRecord.js.map +7 -0
- package/dist/cjs/internal/DeferredPersistence.d.ts +108 -0
- package/dist/cjs/internal/DeferredPersistence.d.ts.map +1 -0
- package/dist/cjs/internal/DeferredPersistence.js +270 -0
- package/dist/cjs/internal/DeferredPersistence.js.map +7 -0
- package/dist/cjs/internal/EffectRecords.d.ts +92 -0
- package/dist/cjs/internal/EffectRecords.d.ts.map +1 -0
- package/dist/cjs/internal/EffectRecords.js +63 -0
- package/dist/cjs/internal/EffectRecords.js.map +7 -0
- package/dist/cjs/internal/EngineJj.d.ts +30 -0
- package/dist/cjs/internal/EngineJj.d.ts.map +1 -0
- package/dist/cjs/internal/EngineJj.js +42 -0
- package/dist/cjs/internal/EngineJj.js.map +7 -0
- package/dist/cjs/internal/EngineStateSchema.d.ts +68 -0
- package/dist/cjs/internal/EngineStateSchema.d.ts.map +1 -0
- package/dist/cjs/internal/EngineStateSchema.js +58 -0
- package/dist/cjs/internal/EngineStateSchema.js.map +7 -0
- package/dist/cjs/internal/ExecutionSnapshotRead.d.ts +162 -0
- package/dist/cjs/internal/ExecutionSnapshotRead.d.ts.map +1 -0
- package/dist/cjs/internal/ExecutionSnapshotRead.js +201 -0
- package/dist/cjs/internal/ExecutionSnapshotRead.js.map +7 -0
- package/dist/cjs/internal/ExecutionSnapshotRelations.d.ts +39 -0
- package/dist/cjs/internal/ExecutionSnapshotRelations.d.ts.map +1 -0
- package/dist/cjs/internal/ExecutionSnapshotRelations.js +105 -0
- package/dist/cjs/internal/ExecutionSnapshotRelations.js.map +7 -0
- package/dist/cjs/internal/ExitEncoding.d.ts +180 -0
- package/dist/cjs/internal/ExitEncoding.d.ts.map +1 -0
- package/dist/cjs/internal/ExitEncoding.js +236 -0
- package/dist/cjs/internal/ExitEncoding.js.map +7 -0
- package/dist/cjs/internal/FileBoundarySnapshot.d.ts +14 -0
- package/dist/cjs/internal/FileBoundarySnapshot.d.ts.map +1 -0
- package/dist/cjs/internal/FileBoundarySnapshot.js +51 -0
- package/dist/cjs/internal/FileBoundarySnapshot.js.map +7 -0
- package/dist/cjs/internal/FileEnumeration.d.ts +127 -0
- package/dist/cjs/internal/FileEnumeration.d.ts.map +1 -0
- package/dist/cjs/internal/FileEnumeration.js +194 -0
- package/dist/cjs/internal/FileEnumeration.js.map +7 -0
- package/dist/cjs/internal/HostReflection.d.ts +80 -0
- package/dist/cjs/internal/HostReflection.d.ts.map +1 -0
- package/dist/cjs/internal/HostReflection.js +43 -0
- package/dist/cjs/internal/HostReflection.js.map +7 -0
- package/dist/cjs/internal/JournalRecords.d.ts +325 -0
- package/dist/cjs/internal/JournalRecords.d.ts.map +1 -0
- package/dist/cjs/internal/JournalRecords.js +122 -0
- package/dist/cjs/internal/JournalRecords.js.map +7 -0
- package/dist/cjs/internal/NodeJournal.d.ts +157 -0
- package/dist/cjs/internal/NodeJournal.d.ts.map +1 -0
- package/dist/cjs/internal/NodeJournal.js +192 -0
- package/dist/cjs/internal/NodeJournal.js.map +7 -0
- package/dist/cjs/internal/Ordering.d.ts +14 -0
- package/dist/cjs/internal/Ordering.d.ts.map +1 -0
- package/dist/cjs/internal/Ordering.js +25 -0
- package/dist/cjs/internal/Ordering.js.map +7 -0
- package/dist/cjs/internal/PlanInputs.d.ts +14 -0
- package/dist/cjs/internal/PlanInputs.d.ts.map +1 -0
- package/dist/cjs/internal/PlanInputs.js +78 -0
- package/dist/cjs/internal/PlanInputs.js.map +7 -0
- package/dist/cjs/internal/PlanMerges.d.ts +178 -0
- package/dist/cjs/internal/PlanMerges.d.ts.map +1 -0
- package/dist/cjs/internal/PlanMerges.js +125 -0
- package/dist/cjs/internal/PlanMerges.js.map +7 -0
- package/dist/cjs/internal/ProvenanceSlot.d.ts +30 -0
- package/dist/cjs/internal/ProvenanceSlot.d.ts.map +1 -0
- package/dist/cjs/internal/ProvenanceSlot.js +53 -0
- package/dist/cjs/internal/ProvenanceSlot.js.map +7 -0
- package/dist/cjs/internal/ResultEnvelope.d.ts +88 -0
- package/dist/cjs/internal/ResultEnvelope.d.ts.map +1 -0
- package/dist/cjs/internal/ResultEnvelope.js +90 -0
- package/dist/cjs/internal/ResultEnvelope.js.map +7 -0
- package/dist/cjs/internal/RetentionOps.d.ts +414 -0
- package/dist/cjs/internal/RetentionOps.d.ts.map +1 -0
- package/dist/cjs/internal/RetentionOps.js +354 -0
- package/dist/cjs/internal/RetentionOps.js.map +7 -0
- package/dist/cjs/internal/RunCatalogOps.d.ts +118 -0
- package/dist/cjs/internal/RunCatalogOps.d.ts.map +1 -0
- package/dist/cjs/internal/RunCatalogOps.js +85 -0
- package/dist/cjs/internal/RunCatalogOps.js.map +7 -0
- package/dist/cjs/internal/RunCoordinator.d.ts +78 -0
- package/dist/cjs/internal/RunCoordinator.d.ts.map +1 -0
- package/dist/cjs/internal/RunCoordinator.js +123 -0
- package/dist/cjs/internal/RunCoordinator.js.map +7 -0
- package/dist/cjs/internal/RunDriver.d.ts +192 -0
- package/dist/cjs/internal/RunDriver.d.ts.map +1 -0
- package/dist/cjs/internal/RunDriver.js +1586 -0
- package/dist/cjs/internal/RunDriver.js.map +7 -0
- package/dist/cjs/internal/RunLifecycle.d.ts +22 -0
- package/dist/cjs/internal/RunLifecycle.d.ts.map +1 -0
- package/dist/cjs/internal/RunLifecycle.js +63 -0
- package/dist/cjs/internal/RunLifecycle.js.map +7 -0
- package/dist/cjs/internal/RunListing.d.ts +78 -0
- package/dist/cjs/internal/RunListing.d.ts.map +1 -0
- package/dist/cjs/internal/RunListing.js +171 -0
- package/dist/cjs/internal/RunListing.js.map +7 -0
- package/dist/cjs/internal/RunListingError.d.ts +35 -0
- package/dist/cjs/internal/RunListingError.d.ts.map +1 -0
- package/dist/cjs/internal/RunListingError.js +47 -0
- package/dist/cjs/internal/RunListingError.js.map +7 -0
- package/dist/cjs/internal/RuntimeGraph.d.ts +73 -0
- package/dist/cjs/internal/RuntimeGraph.d.ts.map +1 -0
- package/dist/cjs/internal/RuntimeGraph.js +180 -0
- package/dist/cjs/internal/RuntimeGraph.js.map +7 -0
- package/dist/cjs/internal/SandboxedExecution.d.ts +80 -0
- package/dist/cjs/internal/SandboxedExecution.d.ts.map +1 -0
- package/dist/cjs/internal/SandboxedExecution.js +104 -0
- package/dist/cjs/internal/SandboxedExecution.js.map +7 -0
- package/dist/cjs/internal/StateTransaction.d.ts +44 -0
- package/dist/cjs/internal/StateTransaction.d.ts.map +1 -0
- package/dist/cjs/internal/StateTransaction.js +52 -0
- package/dist/cjs/internal/StateTransaction.js.map +7 -0
- package/dist/cjs/internal/StepFacts.d.ts +14 -0
- package/dist/cjs/internal/StepFacts.d.ts.map +1 -0
- package/dist/cjs/internal/StepFacts.js +58 -0
- package/dist/cjs/internal/StepFacts.js.map +7 -0
- package/dist/cjs/internal/TypedEvents.d.ts +14 -0
- package/dist/cjs/internal/TypedEvents.d.ts.map +1 -0
- package/dist/cjs/internal/TypedEvents.js +37 -0
- package/dist/cjs/internal/TypedEvents.js.map +7 -0
- package/dist/cjs/migrations/0001_initial.d.ts +17 -0
- package/dist/cjs/migrations/0001_initial.d.ts.map +1 -0
- package/dist/cjs/migrations/0001_initial.js +61 -0
- package/dist/cjs/migrations/0001_initial.js.map +7 -0
- package/dist/cjs/migrations/0002_selection_store.d.ts +15 -0
- package/dist/cjs/migrations/0002_selection_store.d.ts.map +1 -0
- package/dist/cjs/migrations/0002_selection_store.js +56 -0
- package/dist/cjs/migrations/0002_selection_store.js.map +7 -0
- package/dist/cjs/migrations/0003_plan_inputs.d.ts +13 -0
- package/dist/cjs/migrations/0003_plan_inputs.d.ts.map +1 -0
- package/dist/cjs/migrations/0003_plan_inputs.js +90 -0
- package/dist/cjs/migrations/0003_plan_inputs.js.map +7 -0
- package/dist/cjs/migrations/0004_plan_environment.d.ts +14 -0
- package/dist/cjs/migrations/0004_plan_environment.d.ts.map +1 -0
- package/dist/cjs/migrations/0004_plan_environment.js +56 -0
- package/dist/cjs/migrations/0004_plan_environment.js.map +7 -0
- package/dist/cjs/migrations/0005_plan_merges.d.ts +14 -0
- package/dist/cjs/migrations/0005_plan_merges.d.ts.map +1 -0
- package/dist/cjs/migrations/0005_plan_merges.js +82 -0
- package/dist/cjs/migrations/0005_plan_merges.js.map +7 -0
- package/dist/cjs/migrations/0006_execution_listing.d.ts +15 -0
- package/dist/cjs/migrations/0006_execution_listing.d.ts.map +1 -0
- package/dist/cjs/migrations/0006_execution_listing.js +101 -0
- package/dist/cjs/migrations/0006_execution_listing.js.map +7 -0
- package/dist/cjs/migrations/0007_run_parent_sequence.d.ts +15 -0
- package/dist/cjs/migrations/0007_run_parent_sequence.d.ts.map +1 -0
- package/dist/cjs/migrations/0007_run_parent_sequence.js +40 -0
- package/dist/cjs/migrations/0007_run_parent_sequence.js.map +7 -0
- package/dist/cjs/migrations/0008_deferred_consumption.d.ts +16 -0
- package/dist/cjs/migrations/0008_deferred_consumption.d.ts.map +1 -0
- package/dist/cjs/migrations/0008_deferred_consumption.js +45 -0
- package/dist/cjs/migrations/0008_deferred_consumption.js.map +7 -0
- package/dist/cjs/migrations/0009_deferred_clock_facts.d.ts +24 -0
- package/dist/cjs/migrations/0009_deferred_clock_facts.d.ts.map +1 -0
- package/dist/cjs/migrations/0009_deferred_clock_facts.js +141 -0
- package/dist/cjs/migrations/0009_deferred_clock_facts.js.map +7 -0
- package/dist/cjs/migrations/0010_pending_cancellation.d.ts +15 -0
- package/dist/cjs/migrations/0010_pending_cancellation.d.ts.map +1 -0
- package/dist/cjs/migrations/0010_pending_cancellation.js +41 -0
- package/dist/cjs/migrations/0010_pending_cancellation.js.map +7 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/test/TestStores.d.ts +89 -0
- package/dist/cjs/test/TestStores.d.ts.map +1 -0
- package/dist/cjs/test/TestStores.js +98 -0
- package/dist/cjs/test/TestStores.js.map +7 -0
- package/dist/esm/ArtifactGc.d.ts +235 -0
- package/dist/esm/ArtifactGc.d.ts.map +1 -0
- package/dist/esm/ArtifactGc.js +268 -0
- package/dist/esm/ArtifactGc.js.map +1 -0
- package/dist/esm/ArtifactSync.d.ts +164 -0
- package/dist/esm/ArtifactSync.d.ts.map +1 -0
- package/dist/esm/ArtifactSync.js +176 -0
- package/dist/esm/ArtifactSync.js.map +1 -0
- package/dist/esm/CacheSync.d.ts +112 -0
- package/dist/esm/CacheSync.d.ts.map +1 -0
- package/dist/esm/CacheSync.js +94 -0
- package/dist/esm/CacheSync.js.map +1 -0
- package/dist/esm/DeferredClockFold.d.ts +354 -0
- package/dist/esm/DeferredClockFold.d.ts.map +1 -0
- package/dist/esm/DeferredClockFold.js +472 -0
- package/dist/esm/DeferredClockFold.js.map +1 -0
- package/dist/esm/DisasterRecovery.d.ts +431 -0
- package/dist/esm/DisasterRecovery.d.ts.map +1 -0
- package/dist/esm/DisasterRecovery.js +523 -0
- package/dist/esm/DisasterRecovery.js.map +1 -0
- package/dist/esm/DurableEngineState.d.ts +776 -0
- package/dist/esm/DurableEngineState.d.ts.map +1 -0
- package/dist/esm/DurableEngineState.js +1648 -0
- package/dist/esm/DurableEngineState.js.map +1 -0
- package/dist/esm/EngineStore.d.ts +158 -0
- package/dist/esm/EngineStore.d.ts.map +1 -0
- package/dist/esm/EngineStore.js +403 -0
- package/dist/esm/EngineStore.js.map +1 -0
- package/dist/esm/EngineStoreMetrics.d.ts +276 -0
- package/dist/esm/EngineStoreMetrics.d.ts.map +1 -0
- package/dist/esm/EngineStoreMetrics.js +260 -0
- package/dist/esm/EngineStoreMetrics.js.map +1 -0
- package/dist/esm/Errors.d.ts +22 -0
- package/dist/esm/Errors.d.ts.map +1 -0
- package/dist/esm/Errors.js +22 -0
- package/dist/esm/Errors.js.map +1 -0
- package/dist/esm/EventTypes.d.ts +27 -0
- package/dist/esm/EventTypes.d.ts.map +1 -0
- package/dist/esm/EventTypes.js +27 -0
- package/dist/esm/EventTypes.js.map +1 -0
- package/dist/esm/ExecutionFacts.d.ts +59 -0
- package/dist/esm/ExecutionFacts.d.ts.map +1 -0
- package/dist/esm/ExecutionFacts.js +96 -0
- package/dist/esm/ExecutionFacts.js.map +1 -0
- package/dist/esm/ExecutionSnapshot.d.ts +117 -0
- package/dist/esm/ExecutionSnapshot.d.ts.map +1 -0
- package/dist/esm/ExecutionSnapshot.js +95 -0
- package/dist/esm/ExecutionSnapshot.js.map +1 -0
- package/dist/esm/Inconsistency.d.ts +154 -0
- package/dist/esm/Inconsistency.d.ts.map +1 -0
- package/dist/esm/Inconsistency.js +133 -0
- package/dist/esm/Inconsistency.js.map +1 -0
- package/dist/esm/Migrations.d.ts +56 -0
- package/dist/esm/Migrations.d.ts.map +1 -0
- package/dist/esm/Migrations.js +91 -0
- package/dist/esm/Migrations.js.map +1 -0
- package/dist/esm/OwnerIdentity.d.ts +91 -0
- package/dist/esm/OwnerIdentity.d.ts.map +1 -0
- package/dist/esm/OwnerIdentity.js +99 -0
- package/dist/esm/OwnerIdentity.js.map +1 -0
- package/dist/esm/PlanInputStore.d.ts +110 -0
- package/dist/esm/PlanInputStore.d.ts.map +1 -0
- package/dist/esm/PlanInputStore.js +207 -0
- package/dist/esm/PlanInputStore.js.map +1 -0
- package/dist/esm/PlanMergeStore.d.ts +113 -0
- package/dist/esm/PlanMergeStore.d.ts.map +1 -0
- package/dist/esm/PlanMergeStore.js +244 -0
- package/dist/esm/PlanMergeStore.js.map +1 -0
- package/dist/esm/PlanScheduler.d.ts +363 -0
- package/dist/esm/PlanScheduler.d.ts.map +1 -0
- package/dist/esm/PlanScheduler.js +1321 -0
- package/dist/esm/PlanScheduler.js.map +1 -0
- package/dist/esm/Reconciliation.d.ts +175 -0
- package/dist/esm/Reconciliation.d.ts.map +1 -0
- package/dist/esm/Reconciliation.js +175 -0
- package/dist/esm/Reconciliation.js.map +1 -0
- package/dist/esm/ReplayOnly.d.ts +91 -0
- package/dist/esm/ReplayOnly.d.ts.map +1 -0
- package/dist/esm/ReplayOnly.js +59 -0
- package/dist/esm/ReplayOnly.js.map +1 -0
- package/dist/esm/Retention.d.ts +113 -0
- package/dist/esm/Retention.d.ts.map +1 -0
- package/dist/esm/Retention.js +139 -0
- package/dist/esm/Retention.js.map +1 -0
- package/dist/esm/RunCatalogRead.d.ts +17 -0
- package/dist/esm/RunCatalogRead.d.ts.map +1 -0
- package/dist/esm/RunCatalogRead.js +17 -0
- package/dist/esm/RunCatalogRead.js.map +1 -0
- package/dist/esm/RunChangeFeed.d.ts +75 -0
- package/dist/esm/RunChangeFeed.d.ts.map +1 -0
- package/dist/esm/RunChangeFeed.js +81 -0
- package/dist/esm/RunChangeFeed.js.map +1 -0
- package/dist/esm/RunState.d.ts +116 -0
- package/dist/esm/RunState.d.ts.map +1 -0
- package/dist/esm/RunState.js +109 -0
- package/dist/esm/RunState.js.map +1 -0
- package/dist/esm/Selection.d.ts +495 -0
- package/dist/esm/Selection.d.ts.map +1 -0
- package/dist/esm/Selection.js +482 -0
- package/dist/esm/Selection.js.map +1 -0
- package/dist/esm/SelectionStore.d.ts +141 -0
- package/dist/esm/SelectionStore.d.ts.map +1 -0
- package/dist/esm/SelectionStore.js +215 -0
- package/dist/esm/SelectionStore.js.map +1 -0
- package/dist/esm/StepBoundary.d.ts +501 -0
- package/dist/esm/StepBoundary.d.ts.map +1 -0
- package/dist/esm/StepBoundary.js +919 -0
- package/dist/esm/StepBoundary.js.map +1 -0
- package/dist/esm/StepCacheFold.d.ts +148 -0
- package/dist/esm/StepCacheFold.d.ts.map +1 -0
- package/dist/esm/StepCacheFold.js +201 -0
- package/dist/esm/StepCacheFold.js.map +1 -0
- package/dist/esm/StepSandbox.d.ts +78 -0
- package/dist/esm/StepSandbox.d.ts.map +1 -0
- package/dist/esm/StepSandbox.js +70 -0
- package/dist/esm/StepSandbox.js.map +1 -0
- package/dist/esm/WakeBus.d.ts +116 -0
- package/dist/esm/WakeBus.d.ts.map +1 -0
- package/dist/esm/WakeBus.js +121 -0
- package/dist/esm/WakeBus.js.map +1 -0
- package/dist/esm/WorkspaceSandbox.d.ts +619 -0
- package/dist/esm/WorkspaceSandbox.d.ts.map +1 -0
- package/dist/esm/WorkspaceSandbox.js +985 -0
- package/dist/esm/WorkspaceSandbox.js.map +1 -0
- package/dist/esm/index.d.ts +157 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +157 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/ActionPersistence.d.ts +276 -0
- package/dist/esm/internal/ActionPersistence.d.ts.map +1 -0
- package/dist/esm/internal/ActionPersistence.js +2306 -0
- package/dist/esm/internal/ActionPersistence.js.map +1 -0
- package/dist/esm/internal/ArtifactRoots.d.ts +38 -0
- package/dist/esm/internal/ArtifactRoots.d.ts.map +1 -0
- package/dist/esm/internal/ArtifactRoots.js +76 -0
- package/dist/esm/internal/ArtifactRoots.js.map +1 -0
- package/dist/esm/internal/AttemptAdmission.d.ts +53 -0
- package/dist/esm/internal/AttemptAdmission.d.ts.map +1 -0
- package/dist/esm/internal/AttemptAdmission.js +52 -0
- package/dist/esm/internal/AttemptAdmission.js.map +1 -0
- package/dist/esm/internal/AttemptLifecycle.d.ts +245 -0
- package/dist/esm/internal/AttemptLifecycle.d.ts.map +1 -0
- package/dist/esm/internal/AttemptLifecycle.js +104 -0
- package/dist/esm/internal/AttemptLifecycle.js.map +1 -0
- package/dist/esm/internal/AttemptProbe.d.ts +53 -0
- package/dist/esm/internal/AttemptProbe.d.ts.map +1 -0
- package/dist/esm/internal/AttemptProbe.js +83 -0
- package/dist/esm/internal/AttemptProbe.js.map +1 -0
- package/dist/esm/internal/CacheAdmission.d.ts +79 -0
- package/dist/esm/internal/CacheAdmission.d.ts.map +1 -0
- package/dist/esm/internal/CacheAdmission.js +72 -0
- package/dist/esm/internal/CacheAdmission.js.map +1 -0
- package/dist/esm/internal/CacheAgeHistory.d.ts +27 -0
- package/dist/esm/internal/CacheAgeHistory.d.ts.map +1 -0
- package/dist/esm/internal/CacheAgeHistory.js +49 -0
- package/dist/esm/internal/CacheAgeHistory.js.map +1 -0
- package/dist/esm/internal/CacheAgeVerdicts.d.ts +15 -0
- package/dist/esm/internal/CacheAgeVerdicts.d.ts.map +1 -0
- package/dist/esm/internal/CacheAgeVerdicts.js +54 -0
- package/dist/esm/internal/CacheAgeVerdicts.js.map +1 -0
- package/dist/esm/internal/CacheOutputPolicy.d.ts +24 -0
- package/dist/esm/internal/CacheOutputPolicy.d.ts.map +1 -0
- package/dist/esm/internal/CacheOutputPolicy.js +73 -0
- package/dist/esm/internal/CacheOutputPolicy.js.map +1 -0
- package/dist/esm/internal/CachePublication.d.ts +97 -0
- package/dist/esm/internal/CachePublication.d.ts.map +1 -0
- package/dist/esm/internal/CachePublication.js +116 -0
- package/dist/esm/internal/CachePublication.js.map +1 -0
- package/dist/esm/internal/CallFacts.d.ts +15 -0
- package/dist/esm/internal/CallFacts.d.ts.map +1 -0
- package/dist/esm/internal/CallFacts.js +83 -0
- package/dist/esm/internal/CallFacts.js.map +1 -0
- package/dist/esm/internal/CopiedRecord.d.ts +61 -0
- package/dist/esm/internal/CopiedRecord.d.ts.map +1 -0
- package/dist/esm/internal/CopiedRecord.js +165 -0
- package/dist/esm/internal/CopiedRecord.js.map +1 -0
- package/dist/esm/internal/DeferredPersistence.d.ts +108 -0
- package/dist/esm/internal/DeferredPersistence.d.ts.map +1 -0
- package/dist/esm/internal/DeferredPersistence.js +240 -0
- package/dist/esm/internal/DeferredPersistence.js.map +1 -0
- package/dist/esm/internal/EffectRecords.d.ts +92 -0
- package/dist/esm/internal/EffectRecords.d.ts.map +1 -0
- package/dist/esm/internal/EffectRecords.js +94 -0
- package/dist/esm/internal/EffectRecords.js.map +1 -0
- package/dist/esm/internal/EngineJj.d.ts +30 -0
- package/dist/esm/internal/EngineJj.d.ts.map +1 -0
- package/dist/esm/internal/EngineJj.js +29 -0
- package/dist/esm/internal/EngineJj.js.map +1 -0
- package/dist/esm/internal/EngineStateSchema.d.ts +68 -0
- package/dist/esm/internal/EngineStateSchema.d.ts.map +1 -0
- package/dist/esm/internal/EngineStateSchema.js +53 -0
- package/dist/esm/internal/EngineStateSchema.js.map +1 -0
- package/dist/esm/internal/ExecutionSnapshotRead.d.ts +162 -0
- package/dist/esm/internal/ExecutionSnapshotRead.d.ts.map +1 -0
- package/dist/esm/internal/ExecutionSnapshotRead.js +218 -0
- package/dist/esm/internal/ExecutionSnapshotRead.js.map +1 -0
- package/dist/esm/internal/ExecutionSnapshotRelations.d.ts +39 -0
- package/dist/esm/internal/ExecutionSnapshotRelations.d.ts.map +1 -0
- package/dist/esm/internal/ExecutionSnapshotRelations.js +81 -0
- package/dist/esm/internal/ExecutionSnapshotRelations.js.map +1 -0
- package/dist/esm/internal/ExitEncoding.d.ts +180 -0
- package/dist/esm/internal/ExitEncoding.d.ts.map +1 -0
- package/dist/esm/internal/ExitEncoding.js +361 -0
- package/dist/esm/internal/ExitEncoding.js.map +1 -0
- package/dist/esm/internal/FileBoundarySnapshot.d.ts +14 -0
- package/dist/esm/internal/FileBoundarySnapshot.d.ts.map +1 -0
- package/dist/esm/internal/FileBoundarySnapshot.js +29 -0
- package/dist/esm/internal/FileBoundarySnapshot.js.map +1 -0
- package/dist/esm/internal/FileEnumeration.d.ts +127 -0
- package/dist/esm/internal/FileEnumeration.d.ts.map +1 -0
- package/dist/esm/internal/FileEnumeration.js +236 -0
- package/dist/esm/internal/FileEnumeration.js.map +1 -0
- package/dist/esm/internal/HostReflection.d.ts +80 -0
- package/dist/esm/internal/HostReflection.d.ts.map +1 -0
- package/dist/esm/internal/HostReflection.js +98 -0
- package/dist/esm/internal/HostReflection.js.map +1 -0
- package/dist/esm/internal/JournalRecords.d.ts +325 -0
- package/dist/esm/internal/JournalRecords.d.ts.map +1 -0
- package/dist/esm/internal/JournalRecords.js +306 -0
- package/dist/esm/internal/JournalRecords.js.map +1 -0
- package/dist/esm/internal/NodeJournal.d.ts +157 -0
- package/dist/esm/internal/NodeJournal.d.ts.map +1 -0
- package/dist/esm/internal/NodeJournal.js +298 -0
- package/dist/esm/internal/NodeJournal.js.map +1 -0
- package/dist/esm/internal/Ordering.d.ts +14 -0
- package/dist/esm/internal/Ordering.d.ts.map +1 -0
- package/dist/esm/internal/Ordering.js +14 -0
- package/dist/esm/internal/Ordering.js.map +1 -0
- package/dist/esm/internal/PlanInputs.d.ts +14 -0
- package/dist/esm/internal/PlanInputs.d.ts.map +1 -0
- package/dist/esm/internal/PlanInputs.js +57 -0
- package/dist/esm/internal/PlanInputs.js.map +1 -0
- package/dist/esm/internal/PlanMerges.d.ts +178 -0
- package/dist/esm/internal/PlanMerges.d.ts.map +1 -0
- package/dist/esm/internal/PlanMerges.js +113 -0
- package/dist/esm/internal/PlanMerges.js.map +1 -0
- package/dist/esm/internal/ProvenanceSlot.d.ts +30 -0
- package/dist/esm/internal/ProvenanceSlot.d.ts.map +1 -0
- package/dist/esm/internal/ProvenanceSlot.js +39 -0
- package/dist/esm/internal/ProvenanceSlot.js.map +1 -0
- package/dist/esm/internal/ResultEnvelope.d.ts +88 -0
- package/dist/esm/internal/ResultEnvelope.d.ts.map +1 -0
- package/dist/esm/internal/ResultEnvelope.js +83 -0
- package/dist/esm/internal/ResultEnvelope.js.map +1 -0
- package/dist/esm/internal/RetentionOps.d.ts +414 -0
- package/dist/esm/internal/RetentionOps.d.ts.map +1 -0
- package/dist/esm/internal/RetentionOps.js +576 -0
- package/dist/esm/internal/RetentionOps.js.map +1 -0
- package/dist/esm/internal/RunCatalogOps.d.ts +118 -0
- package/dist/esm/internal/RunCatalogOps.d.ts.map +1 -0
- package/dist/esm/internal/RunCatalogOps.js +120 -0
- package/dist/esm/internal/RunCatalogOps.js.map +1 -0
- package/dist/esm/internal/RunCoordinator.d.ts +78 -0
- package/dist/esm/internal/RunCoordinator.d.ts.map +1 -0
- package/dist/esm/internal/RunCoordinator.js +115 -0
- package/dist/esm/internal/RunCoordinator.js.map +1 -0
- package/dist/esm/internal/RunDriver.d.ts +192 -0
- package/dist/esm/internal/RunDriver.d.ts.map +1 -0
- package/dist/esm/internal/RunDriver.js +2334 -0
- package/dist/esm/internal/RunDriver.js.map +1 -0
- package/dist/esm/internal/RunLifecycle.d.ts +22 -0
- package/dist/esm/internal/RunLifecycle.d.ts.map +1 -0
- package/dist/esm/internal/RunLifecycle.js +49 -0
- package/dist/esm/internal/RunLifecycle.js.map +1 -0
- package/dist/esm/internal/RunListing.d.ts +78 -0
- package/dist/esm/internal/RunListing.d.ts.map +1 -0
- package/dist/esm/internal/RunListing.js +146 -0
- package/dist/esm/internal/RunListing.js.map +1 -0
- package/dist/esm/internal/RunListingError.d.ts +35 -0
- package/dist/esm/internal/RunListingError.d.ts.map +1 -0
- package/dist/esm/internal/RunListingError.js +27 -0
- package/dist/esm/internal/RunListingError.js.map +1 -0
- package/dist/esm/internal/RuntimeGraph.d.ts +73 -0
- package/dist/esm/internal/RuntimeGraph.d.ts.map +1 -0
- package/dist/esm/internal/RuntimeGraph.js +182 -0
- package/dist/esm/internal/RuntimeGraph.js.map +1 -0
- package/dist/esm/internal/SandboxedExecution.d.ts +80 -0
- package/dist/esm/internal/SandboxedExecution.d.ts.map +1 -0
- package/dist/esm/internal/SandboxedExecution.js +107 -0
- package/dist/esm/internal/SandboxedExecution.js.map +1 -0
- package/dist/esm/internal/StateTransaction.d.ts +44 -0
- package/dist/esm/internal/StateTransaction.d.ts.map +1 -0
- package/dist/esm/internal/StateTransaction.js +54 -0
- package/dist/esm/internal/StateTransaction.js.map +1 -0
- package/dist/esm/internal/StepFacts.d.ts +14 -0
- package/dist/esm/internal/StepFacts.d.ts.map +1 -0
- package/dist/esm/internal/StepFacts.js +35 -0
- package/dist/esm/internal/StepFacts.js.map +1 -0
- package/dist/esm/internal/TypedEvents.d.ts +14 -0
- package/dist/esm/internal/TypedEvents.d.ts.map +1 -0
- package/dist/esm/internal/TypedEvents.js +14 -0
- package/dist/esm/internal/TypedEvents.js.map +1 -0
- package/dist/esm/migrations/0001_initial.d.ts +17 -0
- package/dist/esm/migrations/0001_initial.d.ts.map +1 -0
- package/dist/esm/migrations/0001_initial.js +41 -0
- package/dist/esm/migrations/0001_initial.js.map +1 -0
- package/dist/esm/migrations/0002_selection_store.d.ts +15 -0
- package/dist/esm/migrations/0002_selection_store.d.ts.map +1 -0
- package/dist/esm/migrations/0002_selection_store.js +34 -0
- package/dist/esm/migrations/0002_selection_store.js.map +1 -0
- package/dist/esm/migrations/0003_plan_inputs.d.ts +13 -0
- package/dist/esm/migrations/0003_plan_inputs.d.ts.map +1 -0
- package/dist/esm/migrations/0003_plan_inputs.js +70 -0
- package/dist/esm/migrations/0003_plan_inputs.js.map +1 -0
- package/dist/esm/migrations/0004_plan_environment.d.ts +14 -0
- package/dist/esm/migrations/0004_plan_environment.d.ts.map +1 -0
- package/dist/esm/migrations/0004_plan_environment.js +33 -0
- package/dist/esm/migrations/0004_plan_environment.js.map +1 -0
- package/dist/esm/migrations/0005_plan_merges.d.ts +14 -0
- package/dist/esm/migrations/0005_plan_merges.d.ts.map +1 -0
- package/dist/esm/migrations/0005_plan_merges.js +59 -0
- package/dist/esm/migrations/0005_plan_merges.js.map +1 -0
- package/dist/esm/migrations/0006_execution_listing.d.ts +15 -0
- package/dist/esm/migrations/0006_execution_listing.d.ts.map +1 -0
- package/dist/esm/migrations/0006_execution_listing.js +81 -0
- package/dist/esm/migrations/0006_execution_listing.js.map +1 -0
- package/dist/esm/migrations/0007_run_parent_sequence.d.ts +15 -0
- package/dist/esm/migrations/0007_run_parent_sequence.d.ts.map +1 -0
- package/dist/esm/migrations/0007_run_parent_sequence.js +18 -0
- package/dist/esm/migrations/0007_run_parent_sequence.js.map +1 -0
- package/dist/esm/migrations/0008_deferred_consumption.d.ts +16 -0
- package/dist/esm/migrations/0008_deferred_consumption.d.ts.map +1 -0
- package/dist/esm/migrations/0008_deferred_consumption.js +24 -0
- package/dist/esm/migrations/0008_deferred_consumption.js.map +1 -0
- package/dist/esm/migrations/0009_deferred_clock_facts.d.ts +24 -0
- package/dist/esm/migrations/0009_deferred_clock_facts.d.ts.map +1 -0
- package/dist/esm/migrations/0009_deferred_clock_facts.js +127 -0
- package/dist/esm/migrations/0009_deferred_clock_facts.js.map +1 -0
- package/dist/esm/migrations/0010_pending_cancellation.d.ts +15 -0
- package/dist/esm/migrations/0010_pending_cancellation.d.ts.map +1 -0
- package/dist/esm/migrations/0010_pending_cancellation.js +19 -0
- package/dist/esm/migrations/0010_pending_cancellation.js.map +1 -0
- package/dist/esm/test/TestStores.d.ts +89 -0
- package/dist/esm/test/TestStores.d.ts.map +1 -0
- package/dist/esm/test/TestStores.js +103 -0
- package/dist/esm/test/TestStores.js.map +1 -0
- package/docs/README.md +113 -0
- package/docs/api.md +1494 -0
- package/docs/concepts/attempts-and-replay.md +149 -0
- package/docs/concepts/cache-admission.md +265 -0
- package/docs/concepts/call-facts.md +86 -0
- package/docs/concepts/durable-waits.md +175 -0
- package/docs/concepts/execution-facts.md +90 -0
- package/docs/concepts/ownership-and-fencing.md +128 -0
- package/docs/concepts/step-boundaries.md +148 -0
- package/docs/concepts/workspace-transactions.md +199 -0
- package/docs/event-types.md +14 -0
- package/docs/guides/back-up-and-restore.md +164 -0
- package/docs/guides/collect-unreferenced-artifacts.md +128 -0
- package/docs/guides/compose-a-durable-engine.md +146 -0
- package/docs/guides/coordinate-two-processes.md +120 -0
- package/docs/guides/defer-work-with-selection.md +171 -0
- package/docs/guides/delete-old-run-history.md +154 -0
- package/docs/guides/drive-a-plan.md +314 -0
- package/docs/guides/observe-engine-metrics.md +98 -0
- package/docs/guides/observe-executions.md +187 -0
- package/docs/guides/reclaim-runs-from-a-dead-host.md +133 -0
- package/docs/guides/share-a-cache-across-machines.md +134 -0
- package/docs/guides/testing.md +123 -0
- package/docs/installation.md +102 -0
- package/docs/quickstart.md +215 -0
- package/docs/troubleshooting.md +347 -0
- package/package.json +438 -3
- package/src/ArtifactGc.ts +408 -0
- package/src/ArtifactSync.ts +278 -0
- package/src/CacheSync.ts +131 -0
- package/src/DeferredClockFold.ts +586 -0
- package/src/DisasterRecovery.ts +888 -0
- package/src/DurableEngineState.ts +2656 -0
- package/src/EngineStore.ts +656 -0
- package/src/EngineStoreMetrics.ts +331 -0
- package/src/Errors.ts +28 -0
- package/src/EventTypes.ts +27 -0
- package/src/ExecutionFacts.ts +125 -0
- package/src/ExecutionSnapshot.ts +186 -0
- package/src/Inconsistency.ts +253 -0
- package/src/Migrations.ts +95 -0
- package/src/OwnerIdentity.ts +125 -0
- package/src/PlanInputStore.ts +292 -0
- package/src/PlanMergeStore.ts +330 -0
- package/src/PlanScheduler.ts +1806 -0
- package/src/Reconciliation.ts +224 -0
- package/src/ReplayOnly.ts +95 -0
- package/src/Retention.ts +214 -0
- package/src/RunCatalogRead.ts +27 -0
- package/src/RunChangeFeed.ts +125 -0
- package/src/RunState.ts +137 -0
- package/src/Selection.ts +683 -0
- package/src/SelectionStore.ts +353 -0
- package/src/StepBoundary.ts +1165 -0
- package/src/StepCacheFold.ts +244 -0
- package/src/StepSandbox.ts +110 -0
- package/src/WakeBus.ts +167 -0
- package/src/WorkspaceSandbox.ts +1604 -0
- package/src/index.ts +185 -0
- package/src/internal/ActionPersistence.ts +2687 -0
- package/src/internal/ArtifactRoots.ts +92 -0
- package/src/internal/AttemptAdmission.ts +76 -0
- package/src/internal/AttemptLifecycle.ts +163 -0
- package/src/internal/AttemptProbe.ts +90 -0
- package/src/internal/CacheAdmission.ts +133 -0
- package/src/internal/CacheAgeHistory.ts +58 -0
- package/src/internal/CacheAgeVerdicts.ts +61 -0
- package/src/internal/CacheOutputPolicy.ts +82 -0
- package/src/internal/CachePublication.ts +153 -0
- package/src/internal/CallFacts.ts +87 -0
- package/src/internal/CopiedRecord.ts +201 -0
- package/src/internal/DeferredPersistence.ts +459 -0
- package/src/internal/EffectRecords.ts +136 -0
- package/src/internal/EngineJj.ts +30 -0
- package/src/internal/EngineStateSchema.ts +92 -0
- package/src/internal/ExecutionSnapshotRead.ts +300 -0
- package/src/internal/ExecutionSnapshotRelations.ts +121 -0
- package/src/internal/ExitEncoding.ts +453 -0
- package/src/internal/FileBoundarySnapshot.ts +39 -0
- package/src/internal/FileEnumeration.ts +334 -0
- package/src/internal/HostReflection.ts +128 -0
- package/src/internal/JournalRecords.ts +396 -0
- package/src/internal/NodeJournal.ts +340 -0
- package/src/internal/Ordering.ts +14 -0
- package/src/internal/PlanInputs.ts +62 -0
- package/src/internal/PlanMerges.ts +123 -0
- package/src/internal/ProvenanceSlot.ts +52 -0
- package/src/internal/ResultEnvelope.ts +118 -0
- package/src/internal/RetentionOps.ts +865 -0
- package/src/internal/RunCatalogOps.ts +174 -0
- package/src/internal/RunCoordinator.ts +215 -0
- package/src/internal/RunDriver.ts +3154 -0
- package/src/internal/RunLifecycle.ts +53 -0
- package/src/internal/RunListing.ts +210 -0
- package/src/internal/RunListingError.ts +37 -0
- package/src/internal/RuntimeGraph.ts +253 -0
- package/src/internal/SandboxedExecution.ts +165 -0
- package/src/internal/StateTransaction.ts +71 -0
- package/src/internal/StepFacts.ts +36 -0
- package/src/internal/TypedEvents.ts +29 -0
- package/src/migrations/0001_initial.ts +51 -0
- package/src/migrations/0002_selection_store.ts +38 -0
- package/src/migrations/0003_plan_inputs.ts +75 -0
- package/src/migrations/0004_plan_environment.ts +34 -0
- package/src/migrations/0005_plan_merges.ts +60 -0
- package/src/migrations/0006_execution_listing.ts +86 -0
- package/src/migrations/0007_run_parent_sequence.ts +19 -0
- package/src/migrations/0008_deferred_consumption.ts +27 -0
- package/src/migrations/0009_deferred_clock_facts.ts +163 -0
- package/src/migrations/0010_pending_cancellation.ts +20 -0
- package/src/test/TestStores.ts +145 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Coordinate two processes over one store"
|
|
3
|
+
description: "Share a wake bus so a resume does not wait for the next poll, let a follower learn of runs another engine created, and prove cross-process behavior in a test."
|
|
4
|
+
sidebar:
|
|
5
|
+
order: 8
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Two engines over one database do not share memory. Everything they know about
|
|
9
|
+
each other comes from rows. This guide covers the three seams that make that
|
|
10
|
+
practical: the wake bus that makes same-process resumes immediate, the catalog
|
|
11
|
+
read that lets a follower see another engine's runs, and the test composition
|
|
12
|
+
that gives you two real connections.
|
|
13
|
+
|
|
14
|
+
## Share a wake bus inside one process
|
|
15
|
+
|
|
16
|
+
Polling is the correct fallback and the slow path. `WakeBus` is an in-process,
|
|
17
|
+
edge-triggered bus that shortens it:
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import { WakeBus } from "@smthrs/engine-store"
|
|
21
|
+
|
|
22
|
+
const bus = WakeBus.layer
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
An engine composition resolves the bus optionally. Provide this layer when your
|
|
26
|
+
host has its own wake sources, an HTTP handler completing a deferred, say, so
|
|
27
|
+
they and the engine share one bus. Provide nothing and the composition builds a
|
|
28
|
+
private one.
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
import * as Effect from "effect/Effect"
|
|
32
|
+
|
|
33
|
+
const complete = (executionId: string) =>
|
|
34
|
+
Effect.gen(function*() {
|
|
35
|
+
const wakeBus = yield* WakeBus.WakeBus
|
|
36
|
+
// ... make the durable write first, then announce it.
|
|
37
|
+
yield* wakeBus.wake(executionId)
|
|
38
|
+
})
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Announce only after the durable write returns. A wake is not durable: with no
|
|
42
|
+
waiters it is dropped, and the polling fallback covers the run. Registration is
|
|
43
|
+
removed when a waiting fiber is interrupted, including scope closure and losing
|
|
44
|
+
a race against the polling sleep, so an abandoned wait leaks nothing.
|
|
45
|
+
|
|
46
|
+
`WakeBus.layerNoop()` drops every wake, which is what a test asserting the
|
|
47
|
+
polling fallback provides. `waiters(executionId)` reports the current count, for
|
|
48
|
+
tests and diagnostics: a count observed now says nothing about a moment later.
|
|
49
|
+
|
|
50
|
+
Cross-process delivery stays store-driven. The other process learns from the
|
|
51
|
+
row, not from the bus.
|
|
52
|
+
|
|
53
|
+
## Let a follower learn of another engine's runs
|
|
54
|
+
|
|
55
|
+
[`@smthrs/sync`](/api/smithers-sync) serves a workspace subscription over a
|
|
56
|
+
`RunCatalog`, and its own implementations are static or in-process, so a
|
|
57
|
+
follower composed against one sees the runs that existed when it started and
|
|
58
|
+
never learns of another. `RunCatalogRead` is the durable read that fixes that:
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
import { RunCatalogRead } from "@smthrs/engine-store"
|
|
62
|
+
import * as Effect from "effect/Effect"
|
|
63
|
+
|
|
64
|
+
const runs = Effect.gen(function*() {
|
|
65
|
+
const catalog = yield* RunCatalogRead.RunCatalogRead
|
|
66
|
+
return yield* catalog.listRunIds({ limit: 500 })
|
|
67
|
+
})
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
`RunCatalogRead.layer` provides it and needs `SqlClient`. `listRunIds` returns
|
|
71
|
+
the workspace's runs oldest first, bounded by `limit`, which defaults to
|
|
72
|
+
`defaultLimit` of 10,000. A workspace with more runs than the bound is followed
|
|
73
|
+
by its most recent ones; an older run stays readable through a run-scoped
|
|
74
|
+
subscription, which names it directly.
|
|
75
|
+
|
|
76
|
+
It reads a set rather than a cursor tail on purpose. Retention deletes runs, and
|
|
77
|
+
a follower that only ever appended what appeared after a cursor would keep every
|
|
78
|
+
collected run in its view forever and hold a journal stream open for each one.
|
|
79
|
+
|
|
80
|
+
Nothing here polls. The interval belongs to `RunCatalog.makePolling` in
|
|
81
|
+
[`@smthrs/sync`](/api/smithers-sync), so the durable side has no policy and no fiber of
|
|
82
|
+
its own. `RunCatalogError` carries `invalid_options` (the limit was not a
|
|
83
|
+
non-negative safe integer) or `list_failed`; on a failure the caller keeps
|
|
84
|
+
whatever view it had, and the next read converges.
|
|
85
|
+
|
|
86
|
+
## Prove cross-process behavior in a test
|
|
87
|
+
|
|
88
|
+
Two independently constructed bundles pointed at one file is what a second
|
|
89
|
+
process actually looks like: two connections, two engines, no shared object
|
|
90
|
+
graph. `test/TestStores.layerAt(filename)` is built for exactly that:
|
|
91
|
+
|
|
92
|
+
```ts
|
|
93
|
+
import * as TestStores from "@smthrs/engine-store/test/TestStores"
|
|
94
|
+
|
|
95
|
+
const first = TestStores.layerAt("./tmp/shared.db")
|
|
96
|
+
const second = TestStores.layerAt("./tmp/shared.db")
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
`layerAt` re-exports the `SqlClient` connection alongside `DurableEngineState`,
|
|
100
|
+
because the in-memory variant of that service is a map a second bundle would not
|
|
101
|
+
see.
|
|
102
|
+
|
|
103
|
+
Use a real file. `:memory:` gives each connection its own private database, so
|
|
104
|
+
it cannot prove anything durable across compositions. `TestStores.layer` is the
|
|
105
|
+
private in-memory bundle, which is right for a case that only needs one engine.
|
|
106
|
+
|
|
107
|
+
## Give two engines two source ids
|
|
108
|
+
|
|
109
|
+
Set a distinct `journalSource` per engine so their journal records are
|
|
110
|
+
distinguishable, and a distinct `owner.hostId` when they genuinely represent
|
|
111
|
+
different hosts. The `OwnerId` nonce already distinguishes incarnations, so two
|
|
112
|
+
processes on one host may share a `hostId`.
|
|
113
|
+
|
|
114
|
+
## Related
|
|
115
|
+
|
|
116
|
+
- [Durable waits](../concepts/durable-waits.md): the wake, park, and sweep model
|
|
117
|
+
the bus accelerates.
|
|
118
|
+
- [Test against a durable store](./testing.md): the rest of the test surface.
|
|
119
|
+
- [Sync followers](/docs/guides/sync-followers/) on smithers.sh: the consumer
|
|
120
|
+
side of the catalog read.
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Defer work with selection beliefs"
|
|
3
|
+
description: "Record suspected edges, let the scheduler postpone sink nodes a change probably does not affect, then repay that debt with a guess-free recertification pass."
|
|
4
|
+
sidebar:
|
|
5
|
+
order: 9
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Selection is the one advisory seam in this package. It guesses which sink nodes
|
|
9
|
+
a change probably does not affect and postpones them, and it proposes flows a
|
|
10
|
+
plan never reaches. It never changes a step key, a cache row, or a correctness
|
|
11
|
+
decision, and the default admits everything.
|
|
12
|
+
|
|
13
|
+
## The belief shape
|
|
14
|
+
|
|
15
|
+
A `SuspectedEdge` says "changes matching this path pattern tend to affect this
|
|
16
|
+
flow":
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
import { Selection } from "@smthrs/engine-store"
|
|
20
|
+
|
|
21
|
+
const edge: Selection.SuspectedEdge = {
|
|
22
|
+
scope: "packages/ui/src/**",
|
|
23
|
+
affects: "flows/IntegrationTests",
|
|
24
|
+
confidence: 0.8,
|
|
25
|
+
validFromMs: 0,
|
|
26
|
+
evidence: ["run-42:seq-118"]
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
`confidence` is in `[0, 1]` and is moved by outcomes, never by hand.
|
|
31
|
+
`validFromMs` keeps the edge inert until a snapshot's `pinnedAtMs` reaches it.
|
|
32
|
+
`evidence` references the journal facts the guess was learned from.
|
|
33
|
+
|
|
34
|
+
A `BeliefSnapshot` pins the edge set at plan time, which is what keeps selection
|
|
35
|
+
a pure function of data in hand: a belief updated mid-run cannot change what
|
|
36
|
+
that run defers.
|
|
37
|
+
|
|
38
|
+
## Persist and train the beliefs
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
import { SelectionStore } from "@smthrs/engine-store"
|
|
42
|
+
import * as Effect from "effect/Effect"
|
|
43
|
+
|
|
44
|
+
const train = Effect.gen(function*() {
|
|
45
|
+
const store = yield* SelectionStore.SelectionStore
|
|
46
|
+
yield* store.upsert([edge])
|
|
47
|
+
const snapshot = yield* store.snapshot()
|
|
48
|
+
yield* store.train([{ scope: edge.scope, affects: edge.affects, outcome: "miss" }])
|
|
49
|
+
return snapshot
|
|
50
|
+
})
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
`SelectionStore.layer` persists through this package's own migration set and
|
|
54
|
+
needs `DurableWriter` and `SqlClient`.
|
|
55
|
+
|
|
56
|
+
- `upsert(edges)` inserts or replaces by `(scope, affects)`. It refuses an
|
|
57
|
+
edge whose scope breaks the scope grammar with `invalid_input`.
|
|
58
|
+
- `list()` returns every stored edge, and fails with `decode_failed` on a row
|
|
59
|
+
that no longer decodes, including a scope stored before the wildcard cap.
|
|
60
|
+
- `snapshot()` returns a `BeliefSnapshot` pinned at the injected clock's current
|
|
61
|
+
time, never `Date.now()`.
|
|
62
|
+
- `train(observations)` applies the asymmetric rule in one transaction: a hit
|
|
63
|
+
gains five percent of the remaining headroom, `confidence + 0.05 * (1 -
|
|
64
|
+
confidence)`; a miss halves, `confidence * 0.5`. Training only touches
|
|
65
|
+
matching stored edges, ignores unknown pairs rather than creating them, and
|
|
66
|
+
never writes journal records. At most `maxEvidenceEntries` (128) newest
|
|
67
|
+
evidence entries are retained per edge.
|
|
68
|
+
|
|
69
|
+
`SelectionStoreError` distinguishes `invalid_input`, `decode_failed` for a
|
|
70
|
+
corrupt row, and `persistence_failed`.
|
|
71
|
+
|
|
72
|
+
## Wire selection into a scheduler run
|
|
73
|
+
|
|
74
|
+
`PlanScheduler.Options.selection` carries the whole opt-in, and every field is
|
|
75
|
+
optional because every default is inert:
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
const scheduler = PlanScheduler.layer({
|
|
79
|
+
runId: "plan-1",
|
|
80
|
+
owner,
|
|
81
|
+
sourceId: "planner",
|
|
82
|
+
selection: {
|
|
83
|
+
changed: ["packages/ui/src/Button.tsx"],
|
|
84
|
+
beliefs: snapshot,
|
|
85
|
+
policy: { deferBelow: 0.3 }
|
|
86
|
+
}
|
|
87
|
+
})
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
`deferBelow` defaults to zero, which defers nothing. A sink whose best matched
|
|
91
|
+
likelihood is strictly below the threshold is deferred; a likelihood exactly at
|
|
92
|
+
the threshold is admitted. `full: true` is the run-level override: every verdict
|
|
93
|
+
is treated as `Admit` and the override is journaled, the way a `--fresh` flag
|
|
94
|
+
ignores the cache.
|
|
95
|
+
|
|
96
|
+
## Choose a selector
|
|
97
|
+
|
|
98
|
+
`Selection.layerNoop` admits everything, and is the behavioral default: a run
|
|
99
|
+
under it is byte-identical to a run before the seam existed.
|
|
100
|
+
|
|
101
|
+
`Selection.layerHeuristic` is pure glob matching over live edges, where live
|
|
102
|
+
means `validFromMs <= pinnedAtMs`. A scope glob must match the whole path:
|
|
103
|
+
`**` matches any run of characters including `/`, `*` matches a run within one
|
|
104
|
+
segment, `?` matches one non-`/` character, and every other character is
|
|
105
|
+
literal. A scope carries at most `Selection.maxScopeWildcards` (8) `*` or `**`
|
|
106
|
+
tokens. Matching runs in time linear in the path and never backtracks. A matching edge supplies the likelihood, a
|
|
107
|
+
sink can defer only when a live edge names it, and a `Candidate.stats` failure
|
|
108
|
+
ratio raises the likelihood so flaky sinks stay inline. Stats alone never defer.
|
|
109
|
+
|
|
110
|
+
`Selection.layer(service)` installs your own. A model-backed layer belongs
|
|
111
|
+
elsewhere, because `@smthrs/engine-store` carries no model dependency.
|
|
112
|
+
|
|
113
|
+
A selector returns one `Selected` per candidate carrying a `Verdict`:
|
|
114
|
+
|
|
115
|
+
| Verdict | Meaning |
|
|
116
|
+
| --------- | --------------------------------------------------------------------------------------------- |
|
|
117
|
+
| `Admit` | Run the node normally. |
|
|
118
|
+
| `Defer` | Postpone the sink; carries the `edge` and the `likelihood`. |
|
|
119
|
+
| `Propose` | Name a flow no real dependency reaches; carries the `flow`, the `edge`, and the `confidence`. |
|
|
120
|
+
|
|
121
|
+
Only sink nodes, plan nodes nothing depends on, are offered as candidates.
|
|
122
|
+
|
|
123
|
+
## Read and repay the debt
|
|
124
|
+
|
|
125
|
+
A deferred node is journaled as `flows.engine.selection-deferred` and settles
|
|
126
|
+
`deferred`. It never dispatched, wrote no cache row, and is never reported as
|
|
127
|
+
passed.
|
|
128
|
+
|
|
129
|
+
```ts
|
|
130
|
+
const owed = Selection.debt("plan-1")
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
`debt(runId)` folds the journal: each `selection-deferred` record opens a debt
|
|
134
|
+
under its plan key, and a later `node-settled` under the same key with `built`,
|
|
135
|
+
`clean`, or `failed` closes it. A `skipped` settlement does not, because that
|
|
136
|
+
work never ran. A `failed` one does, because the guess-free pass executed the
|
|
137
|
+
work and surfaced the miss, which is the training signal.
|
|
138
|
+
|
|
139
|
+
`debt(runId, { repaidBy })` widens only the close side, accepting matching
|
|
140
|
+
settlements from explicitly named repaying runs. The fold never guesses which
|
|
141
|
+
other runs were guess-free passes.
|
|
142
|
+
|
|
143
|
+
`PlanScheduler.recertify({ plan, deferringRunId, options })` is the driver:
|
|
144
|
+
it re-drives the compiled plan under the caller's fresh run id with the `full`
|
|
145
|
+
selection override, then returns `{ runId, report, remaining }`, where
|
|
146
|
+
`remaining` is the deferring run's debt computed with `repaidBy`. Repayment is a
|
|
147
|
+
read-side join; the deferring run's journal is never rewritten.
|
|
148
|
+
|
|
149
|
+
Scheduling the cadence, nightly or per merge, is a product concern. This is the
|
|
150
|
+
primitive one pass runs.
|
|
151
|
+
|
|
152
|
+
## Present it
|
|
153
|
+
|
|
154
|
+
Three pure helpers render selection without any IO:
|
|
155
|
+
|
|
156
|
+
- `Selection.risk({ changed, beliefs })` returns `{ level, reasons }`, where
|
|
157
|
+
level is `high` at confidence at or above 0.7, `medium` at or above 0.4, else
|
|
158
|
+
`low`, and each reason reads `<scope> -> <affects> (<confidence>)`. It is an
|
|
159
|
+
annotation, never a gate.
|
|
160
|
+
- `Selection.card(input)` renders the plan card, one string per line: `clean`
|
|
161
|
+
renders as `cached`, `built` as `run`, a `deferred` row carries its fail
|
|
162
|
+
likelihood and the recertification cadence, and each proposal names the edge
|
|
163
|
+
that suggested it.
|
|
164
|
+
- `Selection.proposeReadSet({ beliefs, flow, paths })` returns the workspace
|
|
165
|
+
paths live edges select for a flow, deduplicated in input order. It is the
|
|
166
|
+
feeder for a `boundaryMode: "expected"` declaration.
|
|
167
|
+
|
|
168
|
+
## Related
|
|
169
|
+
|
|
170
|
+
- [Drive a plan to completion](./drive-a-plan.md): where the `deferred` outcome
|
|
171
|
+
appears.
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Delete old run history"
|
|
3
|
+
description: "Run an explicit retention pass over finished runs: the age threshold, the dry run, the lineage guard that keeps a run a live one still needs, and what smthrs gc does."
|
|
4
|
+
sidebar:
|
|
5
|
+
order: 5
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Nothing in the durable stores forgets on its own. A finished run keeps its row,
|
|
9
|
+
every attempt, every journal event, and every archived frame forever, and
|
|
10
|
+
journal compaction is off by default, so the file only grows. That is the right
|
|
11
|
+
default, because a run's history is the only account of what an agent did to a
|
|
12
|
+
repository. Deleting it is an operator decision, taken explicitly.
|
|
13
|
+
|
|
14
|
+
## Run a pass
|
|
15
|
+
|
|
16
|
+
`Retention.retain` deletes up to `limit` aged terminal runs and their dependents
|
|
17
|
+
in one transaction:
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import { Retention } from "@smthrs/engine-store"
|
|
21
|
+
import * as Effect from "effect/Effect"
|
|
22
|
+
|
|
23
|
+
const collect = Effect.gen(function*() {
|
|
24
|
+
const retention = yield* Retention.Retention
|
|
25
|
+
return yield* retention.retain({
|
|
26
|
+
olderThanMs: 30 * 24 * 60 * 60 * 1000,
|
|
27
|
+
limit: 1000,
|
|
28
|
+
dryRun: true
|
|
29
|
+
})
|
|
30
|
+
})
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
`Retention.layer` provides the service and needs `SqlClient` and
|
|
34
|
+
[`@smthrs/journal`](/api/journal)'s `Journal`.
|
|
35
|
+
|
|
36
|
+
`olderThanMs` is how long a run must have been finished, measured from
|
|
37
|
+
`finished_at_ms` or from `created_at_ms` for a terminal row that never recorded
|
|
38
|
+
one. Zero collects every terminal run; a negative value is read as zero.
|
|
39
|
+
|
|
40
|
+
`limit` bounds one pass and defaults to `Retention.defaultLimit`, which is 1000.
|
|
41
|
+
Retention is idempotent. For a fixed, finite, acyclic lineage and a positive
|
|
42
|
+
integer limit, each successful non-dry pass removes at least one collectable
|
|
43
|
+
run while any remain. This includes continuation chains longer
|
|
44
|
+
than the bound. Selection prioritizes deeper continuation children before
|
|
45
|
+
parents, then age and run id; the report lists selected runs oldest first.
|
|
46
|
+
Parents pinned by children excluded by age or live lineage do not consume the
|
|
47
|
+
bound. Protected runs remain until eligible. Zero or a negative limit deletes
|
|
48
|
+
nothing.
|
|
49
|
+
|
|
50
|
+
`dryRun` computes and reports the pass without deleting anything. Under a dry
|
|
51
|
+
run the report names exactly the runs a real pass would remove, which is what
|
|
52
|
+
makes it worth trusting.
|
|
53
|
+
|
|
54
|
+
## Read the report
|
|
55
|
+
|
|
56
|
+
`RetainReport` carries the `cutoffMs`, the `runIds` deleted oldest first, per
|
|
57
|
+
table counts (`runs`, `attempts`, `clockDeadlines`, `deferredCompletions`,
|
|
58
|
+
`journalEntries`, `journalCheckpoints`, `archiveEntries`,
|
|
59
|
+
`timeTravelReceipts`), the `dryRun` flag, and two retention lists:
|
|
60
|
+
|
|
61
|
+
- `retainedForLiveDescendants`: aged terminal runs left in place because a
|
|
62
|
+
descendant is not terminal, or is terminal and is not being deleted by this
|
|
63
|
+
pass.
|
|
64
|
+
- `retainedForLiveAncestors`: aged terminal runs left in place because an
|
|
65
|
+
ancestor is not terminal. That ancestor can still read the run's settled
|
|
66
|
+
result through `agent/await`, which answers out of the run row.
|
|
67
|
+
|
|
68
|
+
A run retained for both reasons is reported under `retainedForLiveDescendants`,
|
|
69
|
+
and at most `limit` runs are reported, so the report costs no more than the
|
|
70
|
+
pass.
|
|
71
|
+
|
|
72
|
+
## Three properties make it safe on a live workspace
|
|
73
|
+
|
|
74
|
+
**One transaction.** Every delete runs inside a single `journal.transact`, so a
|
|
75
|
+
crash leaves either a run with all of its rows or none of them, never a run row
|
|
76
|
+
whose history is gone or history whose run row is gone.
|
|
77
|
+
|
|
78
|
+
**Terminal and aged only.** A run is a candidate only when its status is
|
|
79
|
+
`completed`, `failed`, or `cancelled` and it finished before the cutoff. A
|
|
80
|
+
`pending`, `running`, or `suspended` row belongs to work that can still resume,
|
|
81
|
+
at any age.
|
|
82
|
+
|
|
83
|
+
**Nothing a live run still needs.** A candidate is retained when a live run
|
|
84
|
+
stands on either side of it in the lineage, over both relations that make one
|
|
85
|
+
run the parent of another: the `flows_run_parents` edge a spawned child is
|
|
86
|
+
recorded under, and the `parent_run_id` column the rounds of one trampoline
|
|
87
|
+
lineage are chained through. The lineage filters run before the bound, which is
|
|
88
|
+
what makes a bounded pass converge: otherwise a workspace whose oldest thousand
|
|
89
|
+
aged runs all hang under one parked parent would fill the window with runs the
|
|
90
|
+
pass then has to retain, pass after pass.
|
|
91
|
+
|
|
92
|
+
Journal history is deleted outright rather than compacted to a checkpoint.
|
|
93
|
+
`Journal.checkpoint` and `Journal.compact` are owner-fenced and require a
|
|
94
|
+
`running` run under the exact owner, so neither can be called for a finished,
|
|
95
|
+
ownerless run at all. Deleting is strictly stronger, and it happens in the same
|
|
96
|
+
transaction as the run row.
|
|
97
|
+
|
|
98
|
+
## Collect across both of a project's databases
|
|
99
|
+
|
|
100
|
+
A project keeps its history in two files, the control plane's database and the
|
|
101
|
+
engine's, and a sweep of one without the other leaves half of a deleted run
|
|
102
|
+
behind. `Retention.collect` is the host-facing pass, taking the database as a
|
|
103
|
+
service and running once per file:
|
|
104
|
+
|
|
105
|
+
```ts
|
|
106
|
+
import { Retention } from "@smthrs/engine-store"
|
|
107
|
+
|
|
108
|
+
const pass = Retention.collect({
|
|
109
|
+
olderThanMs: Date.now() - 30 * 24 * 60 * 60 * 1000,
|
|
110
|
+
database: ".flows/engine.db",
|
|
111
|
+
dryRun: false
|
|
112
|
+
})
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Note the difference in units: `Service.retain` takes a duration, while
|
|
116
|
+
`collect` takes an absolute epoch millisecond threshold. `collect` returns a
|
|
117
|
+
`Retention.Report` with the `database` label, the threshold, the `runs`
|
|
118
|
+
removed, `deleted` row counts per table (empty under a dry run), and the
|
|
119
|
+
`dryRun` flag.
|
|
120
|
+
|
|
121
|
+
`collect` reads eligibility and deletes inside one retryable write transaction.
|
|
122
|
+
A concurrent attachment to a live parent cannot slip between that scan and
|
|
123
|
+
deletion. If contention causes a retry, the pass recomputes its candidates.
|
|
124
|
+
Dry runs read the same guard inside a transaction without modifying history
|
|
125
|
+
or schema; their report is a snapshot, not a reservation for a later sweep.
|
|
126
|
+
|
|
127
|
+
`collect` runs the same deletion and the same lineage guard as `retain`, so
|
|
128
|
+
neither can hold a shorter table list than the other. It handles a database
|
|
129
|
+
that composed fewer stores: the control plane's file migrates the run store and
|
|
130
|
+
the journal and nothing else, so the guard drops the edge-table half of the walk
|
|
131
|
+
there and keeps the `parent_run_id` half.
|
|
132
|
+
|
|
133
|
+
`Retention.eligible(olderThanMs, limit?)` returns just the candidate run ids,
|
|
134
|
+
for a tool that wants to show them before deleting anything.
|
|
135
|
+
|
|
136
|
+
## The CLI already does this
|
|
137
|
+
|
|
138
|
+
[`smthrs gc`](/cli/gc) is `collect` over a project's databases, with
|
|
139
|
+
`--older-than` defaulting to 30 days and `--dry-run` available. It refuses
|
|
140
|
+
`--older-than 0s`, because that is "delete all history" wearing the spelling of
|
|
141
|
+
a retention policy. After retention it runs `ArtifactGc` over the engine's
|
|
142
|
+
`.flows/objects` directory with the default 14-day grace, so blobs the deleted
|
|
143
|
+
runs were the last to reference are collected too.
|
|
144
|
+
|
|
145
|
+
Nothing schedules any of this. Automatic retention stays opt-in, for the same
|
|
146
|
+
reason artifact collection does: deletion is the irreversible direction, and a
|
|
147
|
+
human approving a plan must be approving the deletions.
|
|
148
|
+
|
|
149
|
+
## Related
|
|
150
|
+
|
|
151
|
+
- [Collect unreferenced artifacts](./collect-unreferenced-artifacts.md): the
|
|
152
|
+
blob half of reclaiming space.
|
|
153
|
+
- [Retention](/docs/guides/retention/) on smithers.sh: the operator's
|
|
154
|
+
procedure.
|