Repository navigation
fix: correlate fired condition timeout replay time - #224
Conversation
|
|
The persisted fired-only scalar condition-timeout SOURCE checkpoint is complete on actual main. Normal merge All 20 actual-main checks are terminal: 18 success/two intended manual worker skips. Original CI 42177802708/a1 and all four CodeQL analyses 42177802368/a1 succeed. Rust 1.86/stable checks include 779 unit tests, 53 corpus tests and 86 Python policy tests. The unchanged official consumer proves 73→74 replay fixtures, related_change=true and one genuine behavioral negative against accepted The source mapping uses one fully correlated condition open/schedule/fire and the consumed The sole automatic stable-docs follower is complete:
All 495 regular-file paths match #223. Only The merged branch is deleted locally/remotely and remote absence verified. Checkout is clean at actual main; owned source containers/controllers/stoppers are absent, with public borrowed inputs preserved. Sanitized diagnostics have seven-day retention. Broader #215 source-family/query/producer/guide/published acceptance remains open; the next supported parallel family follows the accepted group-order table. No release, wire, private review or #191/#192 operating authority follows from this source delivery. |



After Rust consumed a persisted scalar condition timeout represented by
TimerFiredalone,replay_now()stayed unavailable. It now returns that exact fired event'srecorded_at, following Core'sresumeTimedOutConditionbranch. Existing explicit condition-resolution behavior keeps its own time authority.The clock requires one ordered canonical wait/schedule/fire with matching physical/logical wait, key/fingerprint, typed command counters, timer ID/kind and timeout delay. Indexes bind identities once; duplicate, cancelled, aliased, reordered or orphaned physical waits remain unavailable. Cold and repeated reads preserve exact precision and backward/equal time. Payload fired/deadline/reuse values, insertion aliases and missing timer-row authority cannot replace the consumed event time. Legacy outcomes, reopen validation, cancellation, UUID/history and APIs are unchanged.
This authority is executor-specific. Core query replay stops without an explicit condition resolution, so both snapshot and actual reconstructed-query clocks remain unavailable on fired-only histories, including inside the reconstructed workflow. Existing explicit-resolution query behavior is preserved. Grouped conditions and the separate PHP occurrence-carrier gap remain open.
Offline official Rust 1.86 passes 64 clock tests and 53 corpus tests, including eight new consumed/cold/correlation/reopen/orphan/group/query controls. Formatting and the normal warning-free all-target/all-feature build pass. The new module receives one exact replay guard with 24 passing omission/addition classification controls; previous guards, selectors, validators and fixtures are preserved. The native-shaped synthetic fixture runs through the real worker consumer. Original CI
42176963526/a1passes on exact2e17ef99: 779 unit tests, 53 corpus tests and 86 Python policy tests. The unchanged official consumer proves 73→74 fixtures, related_change=true and one real behavioral negative against immutable base3c4f10c6; codec remains 48→48. Both required checks (Target branch qualification and SonarCloud) are green, with direct Sonar inventory zero. All 20 current-head checks are terminal: 18 success/two intended manual worker skips, including all four CodeQL analyses.Refs durable-workflow/.github#215 and the recorded source gap. Actual references: Core
ce24207eresumeTimedOutConditionandQueryStateReplayer; nativefadf8729existing wait-field/schedule/fire writers. This introduces no producer field or wire change and claims no native/installed qualification. Normal actual-main115922ddand all 20 checks are terminal (18 success/two intended skips). The sole automatic Pages run42177802650/a1, deployment7594389330and artifact13483768157are accepted, with all 495 files reconciled and 16/16 live raw HTTPS matches. Published API/source remains stable 4.12.0. Terminal delivery and cleanup receipt. Release and #191/#192 operating boundaries remain separate.