@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 @@
|
|
|
1
|
+
{"version":3,"file":"0003_plan_inputs.d.ts","sourceRoot":"","sources":["../../../src/migrations/0003_plan_inputs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,SAAS,CA4DvE,CAAA"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable, append-only source observations for compiled plan execution.
|
|
3
|
+
* @since 1.0.0
|
|
4
|
+
*/
|
|
5
|
+
import * as Dialect from "@smthrs/database/Dialect";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
8
|
+
/**
|
|
9
|
+
* Creates input generations and marks pre-observation executions as non-recoverable.
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
* @category migrations
|
|
12
|
+
*/
|
|
13
|
+
export const planInputs = Effect.gen(function* () {
|
|
14
|
+
const sql = yield* SqlClient.SqlClient;
|
|
15
|
+
yield* sql `CREATE TABLE flows_plan_input_legacy_runs (
|
|
16
|
+
run_id TEXT PRIMARY KEY NOT NULL REFERENCES flows_runs(run_id) ON DELETE CASCADE
|
|
17
|
+
)`;
|
|
18
|
+
// A past source snapshot cannot be reconstructed from the files a completed
|
|
19
|
+
// action may already have changed. Preserve that uncertainty on upgrade.
|
|
20
|
+
yield* sql `INSERT INTO flows_plan_input_legacy_runs (run_id)
|
|
21
|
+
SELECT DISTINCT run_id FROM flows_attempts`;
|
|
22
|
+
yield* Dialect.trigger(sql, {
|
|
23
|
+
name: `flows_plan_input_legacy_runs_no_update`,
|
|
24
|
+
table: `flows_plan_input_legacy_runs`,
|
|
25
|
+
event: "BEFORE UPDATE",
|
|
26
|
+
reject: "legacy plan input uncertainty is immutable"
|
|
27
|
+
});
|
|
28
|
+
yield* sql `CREATE TABLE flows_plan_input_heads (
|
|
29
|
+
run_id TEXT NOT NULL REFERENCES flows_runs(run_id) ON DELETE CASCADE,
|
|
30
|
+
plan_id TEXT NOT NULL CHECK (length(plan_id) > 0),
|
|
31
|
+
base_digest TEXT NOT NULL CHECK (length(base_digest) > 0),
|
|
32
|
+
generation ${Dialect.integer(sql)} NOT NULL CHECK (${Dialect.isInteger(sql, sql `generation`)} AND generation >= 0 AND generation <= 9007199254740991),
|
|
33
|
+
PRIMARY KEY (run_id, plan_id)
|
|
34
|
+
)`;
|
|
35
|
+
yield* sql `CREATE UNIQUE INDEX flows_plan_input_heads_run_idx ON flows_plan_input_heads (run_id)`;
|
|
36
|
+
yield* sql `CREATE TABLE flows_plan_input_generations (
|
|
37
|
+
run_id TEXT NOT NULL REFERENCES flows_runs(run_id) ON DELETE CASCADE,
|
|
38
|
+
plan_id TEXT NOT NULL CHECK (length(plan_id) > 0),
|
|
39
|
+
generation ${Dialect.integer(sql)} NOT NULL CHECK (${Dialect.isInteger(sql, sql `generation`)} AND generation >= 0 AND generation <= 9007199254740991),
|
|
40
|
+
snapshot_json TEXT NOT NULL CHECK (${Dialect.jsonValid(sql, sql `snapshot_json`)}),
|
|
41
|
+
checksum TEXT NOT NULL CHECK (length(checksum) = 64),
|
|
42
|
+
PRIMARY KEY (run_id, plan_id, generation)
|
|
43
|
+
)`;
|
|
44
|
+
yield* Dialect.trigger(sql, {
|
|
45
|
+
name: `flows_plan_input_generations_no_update`,
|
|
46
|
+
table: `flows_plan_input_generations`,
|
|
47
|
+
event: "BEFORE UPDATE",
|
|
48
|
+
reject: "plan input generations are immutable"
|
|
49
|
+
});
|
|
50
|
+
yield* Dialect.trigger(sql, {
|
|
51
|
+
name: `flows_plan_input_heads_forward_only`,
|
|
52
|
+
table: `flows_plan_input_heads`,
|
|
53
|
+
event: "BEFORE UPDATE",
|
|
54
|
+
when: `NEW.run_id <> OLD.run_id OR NEW.plan_id <> OLD.plan_id OR
|
|
55
|
+
NEW.base_digest <> OLD.base_digest OR NEW.generation <> OLD.generation + 1`,
|
|
56
|
+
reject: "plan input heads only advance one generation"
|
|
57
|
+
});
|
|
58
|
+
for (const table of ["flows_plan_input_legacy_runs", "flows_plan_input_heads", "flows_plan_input_generations"]) {
|
|
59
|
+
// Cascade on run collection is allowed; direct deletion of replay state
|
|
60
|
+
// while its owning run exists is not.
|
|
61
|
+
yield* Dialect.trigger(sql, {
|
|
62
|
+
name: `${table}_no_delete`,
|
|
63
|
+
table: `${table}`,
|
|
64
|
+
event: "BEFORE DELETE",
|
|
65
|
+
when: `EXISTS (SELECT 1 FROM flows_runs WHERE run_id = OLD.run_id)`,
|
|
66
|
+
reject: "plan inputs belong to their run"
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=0003_plan_inputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0003_plan_inputs.js","sourceRoot":"","sources":["../../../src/migrations/0003_plan_inputs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAsD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC/F,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAA;;IAER,CAAA;IACF,4EAA4E;IAC5E,yEAAyE;IACzE,KAAK,CAAC,CAAC,GAAG,CAAA;+CACmC,CAAA;IAC7C,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;QAC1B,IAAI,EAAE,wCAAwC;QAC9C,KAAK,EAAE,8BAA8B;QACrC,KAAK,EAAE,eAAe;QACtB,MAAM,EAAE,4CAA4C;KACrD,CAAC,CAAA;IACF,KAAK,CAAC,CAAC,GAAG,CAAA;;;;iBAIK,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBACjC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAA,YAAY,CACxC;;IAEE,CAAA;IACF,KAAK,CAAC,CAAC,GAAG,CAAA,uFAAuF,CAAA;IACjG,KAAK,CAAC,CAAC,GAAG,CAAA;;;iBAGK,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBACjC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAA,YAAY,CACxC;yCACuC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAA,eAAe,CAAC;;;IAG/E,CAAA;IACF,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;QAC1B,IAAI,EAAE,wCAAwC;QAC9C,KAAK,EAAE,8BAA8B;QACrC,KAAK,EAAE,eAAe;QACtB,MAAM,EAAE,sCAAsC;KAC/C,CAAC,CAAA;IACF,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;QAC1B,IAAI,EAAE,qCAAqC;QAC3C,KAAK,EAAE,wBAAwB;QAC/B,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE;iFACuE;QAC7E,MAAM,EAAE,8CAA8C;KACvD,CAAC,CAAA;IACF,KAAK,MAAM,KAAK,IAAI,CAAC,8BAA8B,EAAE,wBAAwB,EAAE,8BAA8B,CAAC,EAAE,CAAC;QAC/G,wEAAwE;QACxE,sCAAsC;QACtC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YAC1B,IAAI,EAAE,GAAG,KAAK,YAAY;YAC1B,KAAK,EAAE,GAAG,KAAK,EAAE;YACjB,KAAK,EAAE,eAAe;YACtB,IAAI,EAAE,6DAA6D;YACnE,MAAM,EAAE,iCAAiC;SAC1C,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Durable, append-only source observations for compiled plan execution.\n * @since 1.0.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Creates input generations and marks pre-observation executions as non-recoverable.\n * @since 1.0.0\n * @category migrations\n */\nexport const planInputs: Effect.Effect<void, unknown, SqlClient.SqlClient> = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql`CREATE TABLE flows_plan_input_legacy_runs (\n run_id TEXT PRIMARY KEY NOT NULL REFERENCES flows_runs(run_id) ON DELETE CASCADE\n )`\n // A past source snapshot cannot be reconstructed from the files a completed\n // action may already have changed. Preserve that uncertainty on upgrade.\n yield* sql`INSERT INTO flows_plan_input_legacy_runs (run_id)\n SELECT DISTINCT run_id FROM flows_attempts`\n yield* Dialect.trigger(sql, {\n name: `flows_plan_input_legacy_runs_no_update`,\n table: `flows_plan_input_legacy_runs`,\n event: \"BEFORE UPDATE\",\n reject: \"legacy plan input uncertainty is immutable\"\n })\n yield* sql`CREATE TABLE flows_plan_input_heads (\n run_id TEXT NOT NULL REFERENCES flows_runs(run_id) ON DELETE CASCADE,\n plan_id TEXT NOT NULL CHECK (length(plan_id) > 0),\n base_digest TEXT NOT NULL CHECK (length(base_digest) > 0),\n generation ${Dialect.integer(sql)} NOT NULL CHECK (${\n Dialect.isInteger(sql, sql`generation`)\n } AND generation >= 0 AND generation <= 9007199254740991),\n PRIMARY KEY (run_id, plan_id)\n )`\n yield* sql`CREATE UNIQUE INDEX flows_plan_input_heads_run_idx ON flows_plan_input_heads (run_id)`\n yield* sql`CREATE TABLE flows_plan_input_generations (\n run_id TEXT NOT NULL REFERENCES flows_runs(run_id) ON DELETE CASCADE,\n plan_id TEXT NOT NULL CHECK (length(plan_id) > 0),\n generation ${Dialect.integer(sql)} NOT NULL CHECK (${\n Dialect.isInteger(sql, sql`generation`)\n } AND generation >= 0 AND generation <= 9007199254740991),\n snapshot_json TEXT NOT NULL CHECK (${Dialect.jsonValid(sql, sql`snapshot_json`)}),\n checksum TEXT NOT NULL CHECK (length(checksum) = 64),\n PRIMARY KEY (run_id, plan_id, generation)\n )`\n yield* Dialect.trigger(sql, {\n name: `flows_plan_input_generations_no_update`,\n table: `flows_plan_input_generations`,\n event: \"BEFORE UPDATE\",\n reject: \"plan input generations are immutable\"\n })\n yield* Dialect.trigger(sql, {\n name: `flows_plan_input_heads_forward_only`,\n table: `flows_plan_input_heads`,\n event: \"BEFORE UPDATE\",\n when: `NEW.run_id <> OLD.run_id OR NEW.plan_id <> OLD.plan_id OR\n NEW.base_digest <> OLD.base_digest OR NEW.generation <> OLD.generation + 1`,\n reject: \"plan input heads only advance one generation\"\n })\n for (const table of [\"flows_plan_input_legacy_runs\", \"flows_plan_input_heads\", \"flows_plan_input_generations\"]) {\n // Cascade on run collection is allowed; direct deletion of replay state\n // while its owning run exists is not.\n yield* Dialect.trigger(sql, {\n name: `${table}_no_delete`,\n table: `${table}`,\n event: \"BEFORE DELETE\",\n when: `EXISTS (SELECT 1 FROM flows_runs WHERE run_id = OLD.run_id)`,\n reject: \"plan inputs belong to their run\"\n })\n }\n})\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bind source observations to the runtime identity that admitted them.
|
|
3
|
+
* @since 1.0.0
|
|
4
|
+
*/
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
7
|
+
/**
|
|
8
|
+
* Older heads retain NULL: their original runtime environment is unknowable.
|
|
9
|
+
* New heads require an environment fingerprint, immutable for their lifetime.
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
* @category migrations
|
|
12
|
+
*/
|
|
13
|
+
export declare const planEnvironment: Effect.Effect<void, unknown, SqlClient.SqlClient>;
|
|
14
|
+
//# sourceMappingURL=0004_plan_environment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0004_plan_environment.d.ts","sourceRoot":"","sources":["../../../src/migrations/0004_plan_environment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,SAAS,CAkB5E,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bind source observations to the runtime identity that admitted them.
|
|
3
|
+
* @since 1.0.0
|
|
4
|
+
*/
|
|
5
|
+
import * as Dialect from "@smthrs/database/Dialect";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
8
|
+
/**
|
|
9
|
+
* Older heads retain NULL: their original runtime environment is unknowable.
|
|
10
|
+
* New heads require an environment fingerprint, immutable for their lifetime.
|
|
11
|
+
* @since 1.0.0
|
|
12
|
+
* @category migrations
|
|
13
|
+
*/
|
|
14
|
+
export const planEnvironment = Effect.gen(function* () {
|
|
15
|
+
const sql = yield* SqlClient.SqlClient;
|
|
16
|
+
yield* sql `ALTER TABLE flows_plan_input_heads ADD COLUMN environment_digest TEXT
|
|
17
|
+
CHECK (environment_digest IS NULL OR length(environment_digest) > 0)`;
|
|
18
|
+
yield* Dialect.trigger(sql, {
|
|
19
|
+
name: `flows_plan_input_heads_environment_required`,
|
|
20
|
+
table: `flows_plan_input_heads`,
|
|
21
|
+
event: "BEFORE INSERT",
|
|
22
|
+
when: `NEW.environment_digest IS NULL`,
|
|
23
|
+
reject: "new plan input heads require an environment identity"
|
|
24
|
+
});
|
|
25
|
+
yield* Dialect.trigger(sql, {
|
|
26
|
+
name: `flows_plan_input_heads_environment_immutable`,
|
|
27
|
+
table: `flows_plan_input_heads`,
|
|
28
|
+
event: "BEFORE UPDATE",
|
|
29
|
+
when: `NEW.environment_digest IS DISTINCT FROM OLD.environment_digest`,
|
|
30
|
+
reject: "plan input environment identity is immutable"
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=0004_plan_environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0004_plan_environment.js","sourceRoot":"","sources":["../../../src/migrations/0004_plan_environment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAsD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACpG,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAA;yEAC6D,CAAA;IACvE,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;QAC1B,IAAI,EAAE,6CAA6C;QACnD,KAAK,EAAE,wBAAwB;QAC/B,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,gCAAgC;QACtC,MAAM,EAAE,sDAAsD;KAC/D,CAAC,CAAA;IACF,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;QAC1B,IAAI,EAAE,8CAA8C;QACpD,KAAK,EAAE,wBAAwB;QAC/B,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,gEAAgE;QACtE,MAAM,EAAE,8CAA8C;KACvD,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Bind source observations to the runtime identity that admitted them.\n * @since 1.0.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Older heads retain NULL: their original runtime environment is unknowable.\n * New heads require an environment fingerprint, immutable for their lifetime.\n * @since 1.0.0\n * @category migrations\n */\nexport const planEnvironment: Effect.Effect<void, unknown, SqlClient.SqlClient> = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql`ALTER TABLE flows_plan_input_heads ADD COLUMN environment_digest TEXT\n CHECK (environment_digest IS NULL OR length(environment_digest) > 0)`\n yield* Dialect.trigger(sql, {\n name: `flows_plan_input_heads_environment_required`,\n table: `flows_plan_input_heads`,\n event: \"BEFORE INSERT\",\n when: `NEW.environment_digest IS NULL`,\n reject: \"new plan input heads require an environment identity\"\n })\n yield* Dialect.trigger(sql, {\n name: `flows_plan_input_heads_environment_immutable`,\n table: `flows_plan_input_heads`,\n event: \"BEFORE UPDATE\",\n when: `NEW.environment_digest IS DISTINCT FROM OLD.environment_digest`,\n reject: \"plan input environment identity is immutable\"\n })\n})\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable scheduler merge intentions and their committed plan extensions.
|
|
3
|
+
* @since 1.0.0
|
|
4
|
+
*/
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
7
|
+
/**
|
|
8
|
+
* Existing heads retain an unknown merge-state version; a later runtime must
|
|
9
|
+
* not infer its missing control decisions from arbitrary plan-node bodies.
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
* @category migrations
|
|
12
|
+
*/
|
|
13
|
+
export declare const planMerges: Effect.Effect<void, unknown, SqlClient.SqlClient>;
|
|
14
|
+
//# sourceMappingURL=0005_plan_merges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0005_plan_merges.d.ts","sourceRoot":"","sources":["../../../src/migrations/0005_plan_merges.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,SAAS,CA4CvE,CAAA"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable scheduler merge intentions and their committed plan extensions.
|
|
3
|
+
* @since 1.0.0
|
|
4
|
+
*/
|
|
5
|
+
import * as Dialect from "@smthrs/database/Dialect";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
8
|
+
/**
|
|
9
|
+
* Existing heads retain an unknown merge-state version; a later runtime must
|
|
10
|
+
* not infer its missing control decisions from arbitrary plan-node bodies.
|
|
11
|
+
* @since 1.0.0
|
|
12
|
+
* @category migrations
|
|
13
|
+
*/
|
|
14
|
+
export const planMerges = Effect.gen(function* () {
|
|
15
|
+
const sql = yield* SqlClient.SqlClient;
|
|
16
|
+
yield* sql `ALTER TABLE flows_plan_input_heads ADD COLUMN merge_state_version ${Dialect.integer(sql)}
|
|
17
|
+
CHECK (merge_state_version IS NULL OR merge_state_version = 1)`;
|
|
18
|
+
yield* Dialect.trigger(sql, {
|
|
19
|
+
name: `flows_plan_input_heads_merge_version_immutable`,
|
|
20
|
+
table: `flows_plan_input_heads`,
|
|
21
|
+
event: "BEFORE UPDATE",
|
|
22
|
+
when: `NEW.merge_state_version IS DISTINCT FROM OLD.merge_state_version`,
|
|
23
|
+
reject: "plan merge state version is immutable"
|
|
24
|
+
});
|
|
25
|
+
yield* sql `CREATE TABLE flows_plan_merge_intents (
|
|
26
|
+
run_id TEXT NOT NULL REFERENCES flows_runs(run_id) ON DELETE CASCADE,
|
|
27
|
+
stopped_node_id TEXT NOT NULL CHECK (length(stopped_node_id) > 0),
|
|
28
|
+
intent_json TEXT NOT NULL CHECK (${Dialect.jsonValid(sql, sql `intent_json`)}),
|
|
29
|
+
checksum TEXT NOT NULL CHECK (length(checksum) = 64),
|
|
30
|
+
PRIMARY KEY (run_id, stopped_node_id)
|
|
31
|
+
)`;
|
|
32
|
+
yield* sql `CREATE TABLE flows_plan_merge_completions (
|
|
33
|
+
run_id TEXT NOT NULL REFERENCES flows_runs(run_id) ON DELETE CASCADE,
|
|
34
|
+
stopped_node_id TEXT NOT NULL CHECK (length(stopped_node_id) > 0),
|
|
35
|
+
generation ${Dialect.integer(sql)} NOT NULL CHECK (${Dialect.isInteger(sql, sql `generation`)} AND generation > 0),
|
|
36
|
+
merge_node_id TEXT NOT NULL CHECK (length(merge_node_id) > 0),
|
|
37
|
+
completion_json TEXT NOT NULL CHECK (${Dialect.jsonValid(sql, sql `completion_json`)}),
|
|
38
|
+
checksum TEXT NOT NULL CHECK (length(checksum) = 64),
|
|
39
|
+
PRIMARY KEY (run_id, stopped_node_id),
|
|
40
|
+
UNIQUE (run_id, generation), UNIQUE (run_id, merge_node_id),
|
|
41
|
+
FOREIGN KEY (run_id, stopped_node_id) REFERENCES flows_plan_merge_intents(run_id, stopped_node_id) ON DELETE CASCADE
|
|
42
|
+
)`;
|
|
43
|
+
for (const table of ["flows_plan_merge_intents", "flows_plan_merge_completions"]) {
|
|
44
|
+
yield* Dialect.trigger(sql, {
|
|
45
|
+
name: `${table}_no_update`,
|
|
46
|
+
table: `${table}`,
|
|
47
|
+
event: "BEFORE UPDATE",
|
|
48
|
+
reject: "plan merge decisions are immutable"
|
|
49
|
+
});
|
|
50
|
+
yield* Dialect.trigger(sql, {
|
|
51
|
+
name: `${table}_no_delete`,
|
|
52
|
+
table: `${table}`,
|
|
53
|
+
event: "BEFORE DELETE",
|
|
54
|
+
when: `EXISTS (SELECT 1 FROM flows_runs WHERE run_id = OLD.run_id)`,
|
|
55
|
+
reject: "plan merge decisions belong to their run"
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=0005_plan_merges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0005_plan_merges.js","sourceRoot":"","sources":["../../../src/migrations/0005_plan_merges.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAsD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC/F,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAA,qEAAqE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;mEAClC,CAAA;IACjE,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;QAC1B,IAAI,EAAE,gDAAgD;QACtD,KAAK,EAAE,wBAAwB;QAC/B,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,kEAAkE;QACxE,MAAM,EAAE,uCAAuC;KAChD,CAAC,CAAA;IACF,KAAK,CAAC,CAAC,GAAG,CAAA;;;uCAG2B,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAA,aAAa,CAAC;;;IAG3E,CAAA;IACF,KAAK,CAAC,CAAC,GAAG,CAAA;;;iBAGK,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAA,YAAY,CAAC;;2CAErD,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAA,iBAAiB,CAAC;;;;;IAKnF,CAAA;IACF,KAAK,MAAM,KAAK,IAAI,CAAC,0BAA0B,EAAE,8BAA8B,CAAC,EAAE,CAAC;QACjF,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YAC1B,IAAI,EAAE,GAAG,KAAK,YAAY;YAC1B,KAAK,EAAE,GAAG,KAAK,EAAE;YACjB,KAAK,EAAE,eAAe;YACtB,MAAM,EAAE,oCAAoC;SAC7C,CAAC,CAAA;QACF,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YAC1B,IAAI,EAAE,GAAG,KAAK,YAAY;YAC1B,KAAK,EAAE,GAAG,KAAK,EAAE;YACjB,KAAK,EAAE,eAAe;YACtB,IAAI,EAAE,6DAA6D;YACnE,MAAM,EAAE,0CAA0C;SACnD,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Durable scheduler merge intentions and their committed plan extensions.\n * @since 1.0.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Existing heads retain an unknown merge-state version; a later runtime must\n * not infer its missing control decisions from arbitrary plan-node bodies.\n * @since 1.0.0\n * @category migrations\n */\nexport const planMerges: Effect.Effect<void, unknown, SqlClient.SqlClient> = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql`ALTER TABLE flows_plan_input_heads ADD COLUMN merge_state_version ${Dialect.integer(sql)}\n CHECK (merge_state_version IS NULL OR merge_state_version = 1)`\n yield* Dialect.trigger(sql, {\n name: `flows_plan_input_heads_merge_version_immutable`,\n table: `flows_plan_input_heads`,\n event: \"BEFORE UPDATE\",\n when: `NEW.merge_state_version IS DISTINCT FROM OLD.merge_state_version`,\n reject: \"plan merge state version is immutable\"\n })\n yield* sql`CREATE TABLE flows_plan_merge_intents (\n run_id TEXT NOT NULL REFERENCES flows_runs(run_id) ON DELETE CASCADE,\n stopped_node_id TEXT NOT NULL CHECK (length(stopped_node_id) > 0),\n intent_json TEXT NOT NULL CHECK (${Dialect.jsonValid(sql, sql`intent_json`)}),\n checksum TEXT NOT NULL CHECK (length(checksum) = 64),\n PRIMARY KEY (run_id, stopped_node_id)\n )`\n yield* sql`CREATE TABLE flows_plan_merge_completions (\n run_id TEXT NOT NULL REFERENCES flows_runs(run_id) ON DELETE CASCADE,\n stopped_node_id TEXT NOT NULL CHECK (length(stopped_node_id) > 0),\n generation ${Dialect.integer(sql)} NOT NULL CHECK (${Dialect.isInteger(sql, sql`generation`)} AND generation > 0),\n merge_node_id TEXT NOT NULL CHECK (length(merge_node_id) > 0),\n completion_json TEXT NOT NULL CHECK (${Dialect.jsonValid(sql, sql`completion_json`)}),\n checksum TEXT NOT NULL CHECK (length(checksum) = 64),\n PRIMARY KEY (run_id, stopped_node_id),\n UNIQUE (run_id, generation), UNIQUE (run_id, merge_node_id),\n FOREIGN KEY (run_id, stopped_node_id) REFERENCES flows_plan_merge_intents(run_id, stopped_node_id) ON DELETE CASCADE\n )`\n for (const table of [\"flows_plan_merge_intents\", \"flows_plan_merge_completions\"]) {\n yield* Dialect.trigger(sql, {\n name: `${table}_no_update`,\n table: `${table}`,\n event: \"BEFORE UPDATE\",\n reject: \"plan merge decisions are immutable\"\n })\n yield* Dialect.trigger(sql, {\n name: `${table}_no_delete`,\n table: `${table}`,\n event: \"BEFORE DELETE\",\n when: `EXISTS (SELECT 1 FROM flows_runs WHERE run_id = OLD.run_id)`,\n reject: \"plan merge decisions belong to their run\"\n })\n }\n})\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Indexed engine execution observation and ordering.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
8
|
+
/**
|
|
9
|
+
* Brings existing spawn edges into the migration ladder and binds changes to
|
|
10
|
+
* their child's run revision. Run-store owns the shared revision triggers.
|
|
11
|
+
* @category migrations
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
export declare const executionListing: Effect.Effect<void, unknown, SqlClient.SqlClient>;
|
|
15
|
+
//# sourceMappingURL=0006_execution_listing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0006_execution_listing.d.ts","sourceRoot":"","sources":["../../../src/migrations/0006_execution_listing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,SAAS,CAqE7E,CAAA"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Indexed engine execution observation and ordering.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import * as Dialect from "@smthrs/database/Dialect";
|
|
7
|
+
import * as Effect from "effect/Effect";
|
|
8
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
9
|
+
/**
|
|
10
|
+
* Brings existing spawn edges into the migration ladder and binds changes to
|
|
11
|
+
* their child's run revision. Run-store owns the shared revision triggers.
|
|
12
|
+
* @category migrations
|
|
13
|
+
* @since 1.0.0
|
|
14
|
+
*/
|
|
15
|
+
export const executionListing = Effect.gen(function* () {
|
|
16
|
+
const sql = yield* SqlClient.SqlClient;
|
|
17
|
+
yield* sql `CREATE TABLE IF NOT EXISTS flows_run_parents (
|
|
18
|
+
child_id TEXT NOT NULL CHECK (length(child_id) > 0),
|
|
19
|
+
parent_id TEXT NOT NULL CHECK (length(parent_id) > 0),
|
|
20
|
+
seq ${Dialect.integer(sql)} NOT NULL CHECK (${Dialect.isInteger(sql, sql `seq`)} AND seq >= 0 AND seq <= 9007199254740991),
|
|
21
|
+
PRIMARY KEY (child_id, parent_id)
|
|
22
|
+
)`;
|
|
23
|
+
yield* sql `CREATE INDEX IF NOT EXISTS flows_run_parents_parent_idx ON flows_run_parents (parent_id)`;
|
|
24
|
+
yield* sql `CREATE INDEX flows_run_parents_first_idx ON flows_run_parents (child_id, seq, parent_id)`;
|
|
25
|
+
yield* sql `CREATE INDEX flows_run_parents_children_idx ON flows_run_parents (parent_id, seq, child_id)`;
|
|
26
|
+
yield* Dialect.trigger(sql, {
|
|
27
|
+
name: "flows_run_parents_gc",
|
|
28
|
+
table: "flows_runs",
|
|
29
|
+
event: "AFTER DELETE",
|
|
30
|
+
body: "DELETE FROM flows_run_parents WHERE child_id = OLD.run_id OR parent_id = OLD.run_id;"
|
|
31
|
+
});
|
|
32
|
+
yield* sql `ALTER TABLE flows_runs ADD COLUMN execution_parent_id TEXT`;
|
|
33
|
+
yield* sql `ALTER TABLE flows_runs ADD COLUMN execution_flow TEXT
|
|
34
|
+
GENERATED ALWAYS AS (${Dialect.jsonText(sql, sql `state_json`, "$.flowName")}) ${sql.literal(Dialect.isPostgres(sql) ? "STORED" : "VIRTUAL")}`;
|
|
35
|
+
yield* sql `ALTER TABLE flows_runs ADD COLUMN execution_lineage TEXT
|
|
36
|
+
GENERATED ALWAYS AS (COALESCE(lineage_id, run_id)) ${sql.literal(Dialect.isPostgres(sql) ? "STORED" : "VIRTUAL")}`;
|
|
37
|
+
yield* sql `CREATE INDEX flows_runs_round_page_idx ON flows_runs (execution_lineage, COALESCE(round_ordinal, 0), run_id)`;
|
|
38
|
+
yield* Dialect.trigger(sql, {
|
|
39
|
+
name: `flows_runs_creation_immutable`,
|
|
40
|
+
table: `flows_runs`,
|
|
41
|
+
event: "BEFORE UPDATE OF created_at_ms",
|
|
42
|
+
when: `NEW.created_at_ms <> OLD.created_at_ms`,
|
|
43
|
+
reject: "execution creation key is immutable"
|
|
44
|
+
});
|
|
45
|
+
yield* sql `UPDATE flows_runs SET execution_parent_id = COALESCE(parent_run_id,
|
|
46
|
+
(SELECT parent_id FROM flows_run_parents WHERE child_id = run_id ORDER BY seq, parent_id LIMIT 1))`;
|
|
47
|
+
for (const operation of ["INSERT", "UPDATE OF parent_run_id"]) {
|
|
48
|
+
yield* Dialect.trigger(sql, {
|
|
49
|
+
name: `flows_runs_effective_parent_${operation === "INSERT" ? "insert" : "update"}`,
|
|
50
|
+
table: "flows_runs",
|
|
51
|
+
event: `AFTER ${operation}`,
|
|
52
|
+
body: `
|
|
53
|
+
UPDATE flows_runs SET execution_parent_id = COALESCE(NEW.parent_run_id,
|
|
54
|
+
(SELECT parent_id FROM flows_run_parents WHERE child_id = NEW.run_id ORDER BY seq, parent_id LIMIT 1))
|
|
55
|
+
WHERE run_id = NEW.run_id;
|
|
56
|
+
`
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
for (const operation of ["INSERT", "UPDATE", "DELETE"]) {
|
|
60
|
+
const row = operation === "DELETE" ? "OLD" : "NEW";
|
|
61
|
+
yield* Dialect.trigger(sql, {
|
|
62
|
+
name: `flows_run_parents_revision_${operation.toLowerCase()}`,
|
|
63
|
+
table: "flows_run_parents",
|
|
64
|
+
event: `AFTER ${operation}`,
|
|
65
|
+
body: `
|
|
66
|
+
UPDATE flows_runs SET execution_parent_id = COALESCE(parent_run_id,
|
|
67
|
+
(SELECT parent_id FROM flows_run_parents WHERE child_id = run_id ORDER BY seq, parent_id LIMIT 1))
|
|
68
|
+
WHERE run_id = ${row}.child_id ${operation === "UPDATE" ? "OR run_id = OLD.child_id" : ""};
|
|
69
|
+
`
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
// Every subset of the five equality filters has its creation-order suffix.
|
|
73
|
+
// This avoids rare combined predicates degrading to whole-history scans.
|
|
74
|
+
const fields = ["status", "execution_flow", "execution_parent_id", "execution_lineage", "waiting_reason"];
|
|
75
|
+
for (let mask = 0; mask < 32; mask++) {
|
|
76
|
+
const columns = fields.filter((_, index) => (mask & (1 << index)) !== 0);
|
|
77
|
+
yield* sql.unsafe(`CREATE INDEX flows_runs_listing_${mask} ON flows_runs
|
|
78
|
+
(${[...columns, "created_at_ms", "run_id"].join(", ")})`);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=0006_execution_listing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0006_execution_listing.js","sourceRoot":"","sources":["../../../src/migrations/0006_execution_listing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAsD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrG,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAA;;;UAGF,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBAC1B,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAA,KAAK,CACjC;;IAEE,CAAA;IACF,KAAK,CAAC,CAAC,GAAG,CAAA,0FAA0F,CAAA;IACpG,KAAK,CAAC,CAAC,GAAG,CAAA,0FAA0F,CAAA;IACpG,KAAK,CAAC,CAAC,GAAG,CAAA,6FAA6F,CAAA;IACvG,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;QAC1B,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,cAAc;QACrB,IAAI,EAAE,sFAAsF;KAC7F,CAAC,CAAA;IACF,KAAK,CAAC,CAAC,GAAG,CAAA,4DAA4D,CAAA;IACtE,KAAK,CAAC,CAAC,GAAG,CAAA;2BACe,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA,YAAY,EAAE,YAAY,CAAC,KAC3E,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAC5D,EAAE,CAAA;IACF,KAAK,CAAC,CAAC,GAAG,CAAA;yDAC6C,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAA;IACpH,KAAK,CAAC,CAAC,GAAG,CAAA,8GAA8G,CAAA;IACxH,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;QAC1B,IAAI,EAAE,+BAA+B;QACrC,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,gCAAgC;QACvC,IAAI,EAAE,wCAAwC;QAC9C,MAAM,EAAE,qCAAqC;KAC9C,CAAC,CAAA;IACF,KAAK,CAAC,CAAC,GAAG,CAAA;uGAC2F,CAAA;IACrG,KAAK,MAAM,SAAS,IAAI,CAAC,QAAQ,EAAE,yBAAyB,CAAU,EAAE,CAAC;QACvE,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YAC1B,IAAI,EAAE,+BAA+B,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;YACnF,KAAK,EAAE,YAAY;YACnB,KAAK,EAAE,SAAS,SAAS,EAAE;YAC3B,IAAI,EAAE;;;;OAIL;SACF,CAAC,CAAA;IACJ,CAAC;IACD,KAAK,MAAM,SAAS,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAU,EAAE,CAAC;QAChE,MAAM,GAAG,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;QAClD,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YAC1B,IAAI,EAAE,8BAA8B,SAAS,CAAC,WAAW,EAAE,EAAE;YAC7D,KAAK,EAAE,mBAAmB;YAC1B,KAAK,EAAE,SAAS,SAAS,EAAE;YAC3B,IAAI,EAAE;;;yBAGa,GAAG,aAAa,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE;OAC1F;SACF,CAAC,CAAA;IACJ,CAAC;IACD,2EAA2E;IAC3E,yEAAyE;IACzE,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,CAAA;IACzG,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;QACxE,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,mCAAmC,IAAI;SACpD,CAAC,GAAG,OAAO,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7D,CAAC;AACH,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Indexed engine execution observation and ordering.\n *\n * @since 1.0.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Brings existing spawn edges into the migration ladder and binds changes to\n * their child's run revision. Run-store owns the shared revision triggers.\n * @category migrations\n * @since 1.0.0\n */\nexport const executionListing: Effect.Effect<void, unknown, SqlClient.SqlClient> = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql`CREATE TABLE IF NOT EXISTS flows_run_parents (\n child_id TEXT NOT NULL CHECK (length(child_id) > 0),\n parent_id TEXT NOT NULL CHECK (length(parent_id) > 0),\n seq ${Dialect.integer(sql)} NOT NULL CHECK (${\n Dialect.isInteger(sql, sql`seq`)\n } AND seq >= 0 AND seq <= 9007199254740991),\n PRIMARY KEY (child_id, parent_id)\n )`\n yield* sql`CREATE INDEX IF NOT EXISTS flows_run_parents_parent_idx ON flows_run_parents (parent_id)`\n yield* sql`CREATE INDEX flows_run_parents_first_idx ON flows_run_parents (child_id, seq, parent_id)`\n yield* sql`CREATE INDEX flows_run_parents_children_idx ON flows_run_parents (parent_id, seq, child_id)`\n yield* Dialect.trigger(sql, {\n name: \"flows_run_parents_gc\",\n table: \"flows_runs\",\n event: \"AFTER DELETE\",\n body: \"DELETE FROM flows_run_parents WHERE child_id = OLD.run_id OR parent_id = OLD.run_id;\"\n })\n yield* sql`ALTER TABLE flows_runs ADD COLUMN execution_parent_id TEXT`\n yield* sql`ALTER TABLE flows_runs ADD COLUMN execution_flow TEXT\n GENERATED ALWAYS AS (${Dialect.jsonText(sql, sql`state_json`, \"$.flowName\")}) ${\n sql.literal(Dialect.isPostgres(sql) ? \"STORED\" : \"VIRTUAL\")\n }`\n yield* sql`ALTER TABLE flows_runs ADD COLUMN execution_lineage TEXT\n GENERATED ALWAYS AS (COALESCE(lineage_id, run_id)) ${sql.literal(Dialect.isPostgres(sql) ? \"STORED\" : \"VIRTUAL\")}`\n yield* sql`CREATE INDEX flows_runs_round_page_idx ON flows_runs (execution_lineage, COALESCE(round_ordinal, 0), run_id)`\n yield* Dialect.trigger(sql, {\n name: `flows_runs_creation_immutable`,\n table: `flows_runs`,\n event: \"BEFORE UPDATE OF created_at_ms\",\n when: `NEW.created_at_ms <> OLD.created_at_ms`,\n reject: \"execution creation key is immutable\"\n })\n yield* sql`UPDATE flows_runs SET execution_parent_id = COALESCE(parent_run_id,\n (SELECT parent_id FROM flows_run_parents WHERE child_id = run_id ORDER BY seq, parent_id LIMIT 1))`\n for (const operation of [\"INSERT\", \"UPDATE OF parent_run_id\"] as const) {\n yield* Dialect.trigger(sql, {\n name: `flows_runs_effective_parent_${operation === \"INSERT\" ? \"insert\" : \"update\"}`,\n table: \"flows_runs\",\n event: `AFTER ${operation}`,\n body: `\n UPDATE flows_runs SET execution_parent_id = COALESCE(NEW.parent_run_id,\n (SELECT parent_id FROM flows_run_parents WHERE child_id = NEW.run_id ORDER BY seq, parent_id LIMIT 1))\n WHERE run_id = NEW.run_id;\n `\n })\n }\n for (const operation of [\"INSERT\", \"UPDATE\", \"DELETE\"] as const) {\n const row = operation === \"DELETE\" ? \"OLD\" : \"NEW\"\n yield* Dialect.trigger(sql, {\n name: `flows_run_parents_revision_${operation.toLowerCase()}`,\n table: \"flows_run_parents\",\n event: `AFTER ${operation}`,\n body: `\n UPDATE flows_runs SET execution_parent_id = COALESCE(parent_run_id,\n (SELECT parent_id FROM flows_run_parents WHERE child_id = run_id ORDER BY seq, parent_id LIMIT 1))\n WHERE run_id = ${row}.child_id ${operation === \"UPDATE\" ? \"OR run_id = OLD.child_id\" : \"\"};\n `\n })\n }\n // Every subset of the five equality filters has its creation-order suffix.\n // This avoids rare combined predicates degrading to whole-history scans.\n const fields = [\"status\", \"execution_flow\", \"execution_parent_id\", \"execution_lineage\", \"waiting_reason\"]\n for (let mask = 0; mask < 32; mask++) {\n const columns = fields.filter((_, index) => (mask & (1 << index)) !== 0)\n yield* sql.unsafe(`CREATE INDEX flows_runs_listing_${mask} ON flows_runs\n (${[...columns, \"created_at_ms\", \"run_id\"].join(\", \")})`)\n }\n})\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Indexed allocation of the global run-parent sequence.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
8
|
+
/**
|
|
9
|
+
* Supports MAX(seq) without scanning retained edges from unrelated runs.
|
|
10
|
+
*
|
|
11
|
+
* @category migrations
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
export declare const runParentSequence: Effect.Effect<void, unknown, SqlClient.SqlClient>;
|
|
15
|
+
//# sourceMappingURL=0007_run_parent_sequence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0007_run_parent_sequence.d.ts","sourceRoot":"","sources":["../../../src/migrations/0007_run_parent_sequence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,SAAS,CAG9E,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Indexed allocation of the global run-parent sequence.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
8
|
+
/**
|
|
9
|
+
* Supports MAX(seq) without scanning retained edges from unrelated runs.
|
|
10
|
+
*
|
|
11
|
+
* @category migrations
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
export const runParentSequence = Effect.gen(function* () {
|
|
15
|
+
const sql = yield* SqlClient.SqlClient;
|
|
16
|
+
yield* sql `CREATE INDEX flows_run_parents_seq_idx ON flows_run_parents (seq)`;
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=0007_run_parent_sequence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0007_run_parent_sequence.js","sourceRoot":"","sources":["../../../src/migrations/0007_run_parent_sequence.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAsD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACtG,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAA,mEAAmE,CAAA;AAC/E,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Indexed allocation of the global run-parent sequence.\n *\n * @since 1.0.0\n */\n\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Supports MAX(seq) without scanning retained edges from unrelated runs.\n *\n * @category migrations\n * @since 1.0.0\n */\nexport const runParentSequence: Effect.Effect<void, unknown, SqlClient.SqlClient> = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql`CREATE INDEX flows_run_parents_seq_idx ON flows_run_parents (seq)`\n})\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registration recovery only needs completions the run has not observed.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
8
|
+
/**
|
|
9
|
+
* Retains completion values for replay while removing consumed rows from sweeps.
|
|
10
|
+
* Existing completions stay eligible until first read by the upgraded engine.
|
|
11
|
+
*
|
|
12
|
+
* @category migrations
|
|
13
|
+
* @since 1.0.0
|
|
14
|
+
*/
|
|
15
|
+
export declare const deferredConsumption: Effect.Effect<void, unknown, SqlClient.SqlClient>;
|
|
16
|
+
//# sourceMappingURL=0008_deferred_consumption.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0008_deferred_consumption.d.ts","sourceRoot":"","sources":["../../../src/migrations/0008_deferred_consumption.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,SAAS,CAShF,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registration recovery only needs completions the run has not observed.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import * as Dialect from "@smthrs/database/Dialect";
|
|
7
|
+
import * as Effect from "effect/Effect";
|
|
8
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
9
|
+
/**
|
|
10
|
+
* Retains completion values for replay while removing consumed rows from sweeps.
|
|
11
|
+
* Existing completions stay eligible until first read by the upgraded engine.
|
|
12
|
+
*
|
|
13
|
+
* @category migrations
|
|
14
|
+
* @since 1.0.0
|
|
15
|
+
*/
|
|
16
|
+
export const deferredConsumption = Effect.gen(function* () {
|
|
17
|
+
const sql = yield* SqlClient.SqlClient;
|
|
18
|
+
yield* sql `ALTER TABLE flows_deferred_completions ADD COLUMN consumed_at_ms ${Dialect.integer(sql)}
|
|
19
|
+
CHECK (consumed_at_ms IS NULL OR (${Dialect.isInteger(sql, sql `consumed_at_ms`)} AND consumed_at_ms >= 0 AND consumed_at_ms <= 9007199254740991))`;
|
|
20
|
+
yield* sql `CREATE INDEX flows_deferred_completions_unconsumed_idx
|
|
21
|
+
ON flows_deferred_completions (flow_name, execution_id, deferred_name)
|
|
22
|
+
WHERE consumed_at_ms IS NULL`;
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=0008_deferred_consumption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0008_deferred_consumption.js","sourceRoot":"","sources":["../../../src/migrations/0008_deferred_consumption.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACxG,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAA,oEAAoE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;wCAEhG,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAA,gBAAgB,CAC5C,mEAAmE,CAAA;IACnE,KAAK,CAAC,CAAC,GAAG,CAAA;;iCAEqB,CAAA;AACjC,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Registration recovery only needs completions the run has not observed.\n *\n * @since 1.0.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Retains completion values for replay while removing consumed rows from sweeps.\n * Existing completions stay eligible until first read by the upgraded engine.\n *\n * @category migrations\n * @since 1.0.0\n */\nexport const deferredConsumption: Effect.Effect<void, unknown, SqlClient.SqlClient> = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql`ALTER TABLE flows_deferred_completions ADD COLUMN consumed_at_ms ${Dialect.integer(sql)}\n CHECK (consumed_at_ms IS NULL OR (${\n Dialect.isInteger(sql, sql`consumed_at_ms`)\n } AND consumed_at_ms >= 0 AND consumed_at_ms <= 9007199254740991))`\n yield* sql`CREATE INDEX flows_deferred_completions_unconsumed_idx\n ON flows_deferred_completions (flow_name, execution_id, deferred_name)\n WHERE consumed_at_ms IS NULL`\n})\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backfills the journal records the deferred/clock fold reads.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
8
|
+
/**
|
|
9
|
+
* Journals every deferred/clock change written before the fold's records
|
|
10
|
+
* existed: a clock row with no `clock-scheduled` record, a completed clock
|
|
11
|
+
* with no `clock-completed` record, a completion with no `deferred-completed`
|
|
12
|
+
* record, and a consumed completion with no `deferred-consumed` record. Without
|
|
13
|
+
* them a rebuild would drop the clock, or re-arm a completed one and wake a run
|
|
14
|
+
* for a result it already observed (issue #2037).
|
|
15
|
+
*
|
|
16
|
+
* Each backfilled record is appended at the run's next sequence under a
|
|
17
|
+
* `flows.engine.backfill:` producer whose identity names the row, with the
|
|
18
|
+
* lineage meta every engine record carries.
|
|
19
|
+
*
|
|
20
|
+
* @category migrations
|
|
21
|
+
* @since 1.0.0
|
|
22
|
+
*/
|
|
23
|
+
export declare const deferredClockFacts: Effect.Effect<void, unknown, SqlClient.SqlClient>;
|
|
24
|
+
//# sourceMappingURL=0009_deferred_clock_facts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0009_deferred_clock_facts.d.ts","sourceRoot":"","sources":["../../../src/migrations/0009_deferred_clock_facts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAwB1D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,SAAS,CAkH/E,CAAA"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backfills the journal records the deferred/clock fold reads.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import { FlowEngine } from "@smthrs/engine";
|
|
7
|
+
import * as JournalEvent from "@smthrs/journal/JournalEvent";
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
10
|
+
import { EventTypes } from "../EventTypes.js";
|
|
11
|
+
const optionalTime = (value) => value === null ? null : Number(value);
|
|
12
|
+
/**
|
|
13
|
+
* Journals every deferred/clock change written before the fold's records
|
|
14
|
+
* existed: a clock row with no `clock-scheduled` record, a completed clock
|
|
15
|
+
* with no `clock-completed` record, a completion with no `deferred-completed`
|
|
16
|
+
* record, and a consumed completion with no `deferred-consumed` record. Without
|
|
17
|
+
* them a rebuild would drop the clock, or re-arm a completed one and wake a run
|
|
18
|
+
* for a result it already observed (issue #2037).
|
|
19
|
+
*
|
|
20
|
+
* Each backfilled record is appended at the run's next sequence under a
|
|
21
|
+
* `flows.engine.backfill:` producer whose identity names the row, with the
|
|
22
|
+
* lineage meta every engine record carries.
|
|
23
|
+
*
|
|
24
|
+
* @category migrations
|
|
25
|
+
* @since 1.0.0
|
|
26
|
+
*/
|
|
27
|
+
export const deferredClockFacts = Effect.gen(function* () {
|
|
28
|
+
const sql = yield* SqlClient.SqlClient;
|
|
29
|
+
const recorded = new Set();
|
|
30
|
+
const events = yield* sql `
|
|
31
|
+
SELECT run_id, event_type, payload_json FROM flows_journal_events
|
|
32
|
+
WHERE ${sql.in("event_type", [
|
|
33
|
+
EventTypes.clockScheduled,
|
|
34
|
+
EventTypes.clockCompleted,
|
|
35
|
+
EventTypes.deferredCompleted,
|
|
36
|
+
EventTypes.deferredConsumed
|
|
37
|
+
])}
|
|
38
|
+
`;
|
|
39
|
+
for (const event of events) {
|
|
40
|
+
const payload = JSON.parse(event.payload_json);
|
|
41
|
+
const name = event.event_type === EventTypes.clockScheduled || event.event_type === EventTypes.clockCompleted
|
|
42
|
+
? payload.clockName
|
|
43
|
+
: payload.deferredName;
|
|
44
|
+
recorded.add(JSON.stringify([event.event_type, payload.flowName, payload.executionId, name]));
|
|
45
|
+
}
|
|
46
|
+
const next = new Map();
|
|
47
|
+
const append = (eventType, executionId, name, emittedAtMs, payload) => Effect.gen(function* () {
|
|
48
|
+
const identity = JSON.stringify([eventType, payload.flowName, executionId, name]);
|
|
49
|
+
if (recorded.has(identity))
|
|
50
|
+
return;
|
|
51
|
+
recorded.add(identity);
|
|
52
|
+
let seq = next.get(executionId);
|
|
53
|
+
if (seq === undefined) {
|
|
54
|
+
const rows = yield* sql `
|
|
55
|
+
SELECT MAX(seq) + 1 AS next FROM flows_journal_events WHERE run_id = ${executionId}
|
|
56
|
+
`;
|
|
57
|
+
seq = Number(rows[0]?.next ?? 0);
|
|
58
|
+
}
|
|
59
|
+
next.set(executionId, seq + 1);
|
|
60
|
+
const sourceId = `flows.engine.backfill:${JournalEvent.contentDigest(identity)}`;
|
|
61
|
+
yield* sql `
|
|
62
|
+
INSERT INTO flows_journal_events (
|
|
63
|
+
run_id, seq, event_id, source_id, source_seq, emitted_at_ms, event_type, payload_json, meta_json
|
|
64
|
+
) VALUES (
|
|
65
|
+
${executionId},
|
|
66
|
+
${seq},
|
|
67
|
+
${JournalEvent.makeEventId(executionId, sourceId, 0)},
|
|
68
|
+
${sourceId},
|
|
69
|
+
${0},
|
|
70
|
+
${emittedAtMs},
|
|
71
|
+
${eventType},
|
|
72
|
+
${JSON.stringify(payload)},
|
|
73
|
+
${JSON.stringify({ lineageId: FlowEngine.Lineage.root(executionId) })}
|
|
74
|
+
)
|
|
75
|
+
`;
|
|
76
|
+
});
|
|
77
|
+
const clocks = yield* sql `
|
|
78
|
+
SELECT flow_name, execution_id, clock_name, deferred_name, due_at_ms, completed_at_ms
|
|
79
|
+
FROM flows_clock_deadlines
|
|
80
|
+
ORDER BY execution_id, flow_name, clock_name
|
|
81
|
+
`;
|
|
82
|
+
for (const clock of clocks) {
|
|
83
|
+
const dueAtMs = Number(clock.due_at_ms);
|
|
84
|
+
const completedAtMs = optionalTime(clock.completed_at_ms);
|
|
85
|
+
yield* append(EventTypes.clockScheduled, clock.execution_id, clock.clock_name, completedAtMs ?? dueAtMs, {
|
|
86
|
+
flowName: clock.flow_name,
|
|
87
|
+
executionId: clock.execution_id,
|
|
88
|
+
clockName: clock.clock_name,
|
|
89
|
+
deferredName: clock.deferred_name,
|
|
90
|
+
dueAtMs
|
|
91
|
+
});
|
|
92
|
+
if (completedAtMs !== null) {
|
|
93
|
+
yield* append(EventTypes.clockCompleted, clock.execution_id, clock.clock_name, completedAtMs, {
|
|
94
|
+
flowName: clock.flow_name,
|
|
95
|
+
executionId: clock.execution_id,
|
|
96
|
+
clockName: clock.clock_name,
|
|
97
|
+
completedAtMs
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const deferreds = yield* sql `
|
|
102
|
+
SELECT flow_name, execution_id, deferred_name, exit_json, metadata_json, completed_at_ms, consumed_at_ms
|
|
103
|
+
FROM flows_deferred_completions
|
|
104
|
+
ORDER BY execution_id, flow_name, deferred_name
|
|
105
|
+
`;
|
|
106
|
+
for (const deferred of deferreds) {
|
|
107
|
+
const completedAtMs = Number(deferred.completed_at_ms);
|
|
108
|
+
const consumedAtMs = optionalTime(deferred.consumed_at_ms);
|
|
109
|
+
yield* append(EventTypes.deferredCompleted, deferred.execution_id, deferred.deferred_name, completedAtMs, {
|
|
110
|
+
flowName: deferred.flow_name,
|
|
111
|
+
executionId: deferred.execution_id,
|
|
112
|
+
deferredName: deferred.deferred_name,
|
|
113
|
+
completedAtMs,
|
|
114
|
+
exitDigest: JournalEvent.contentDigest(deferred.exit_json),
|
|
115
|
+
metadataDigest: deferred.metadata_json === null ? null : JournalEvent.contentDigest(deferred.metadata_json)
|
|
116
|
+
});
|
|
117
|
+
if (consumedAtMs !== null) {
|
|
118
|
+
yield* append(EventTypes.deferredConsumed, deferred.execution_id, deferred.deferred_name, consumedAtMs, {
|
|
119
|
+
flowName: deferred.flow_name,
|
|
120
|
+
executionId: deferred.execution_id,
|
|
121
|
+
deferredName: deferred.deferred_name,
|
|
122
|
+
consumedAtMs
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
//# sourceMappingURL=0009_deferred_clock_facts.js.map
|