Repository navigation
fix: add parallel timer clocks with exact v1 rounding - #225
Conversation
|
The next remaining-family source checkpoint is Rust #225, current exact It adds strictly correlated persisted plain-Timer The Rust comparison is concrete: the old source refused valid year-1000/year-3000 instants under its float-range guard. A separate new real Activity worker fixture proves exact v1 success/failure behavior there; the timer-group fixture independently proves the new family. Both fixtures must fail on immutable base and pass candidate with the same consumer. No historical fixture or the original 17 PHP 8.4/Carbon reference bytes changed. Those old observations remain attributed legacy evidence, not a portable oracle. The separately labeled canonical-v1 table has 26 exact signed/offset/large-date vectors, with additional signed integer-limit controls. The original Current offline Rust 1.86 passes 73 clock methods, 53 corpus methods, formatting and the normal warning-free all-target/all-feature build. All 26 exact-module guard controls pass, including omission/addition for both new production modules. New original hosted checks and the two actual behavioral negatives are running, not claimed green. Source containers/stoppers are absent, and borrowed public inputs are preserved. I own normal source/main/automatic stable-docs completion; no producer/wire advertisement, marker, release, private review reroute or #191/#192 operating authority follows. |
|
|
The persisted Timer All 20 actual-main checks are terminal: 18 success/two intended manual worker skips. Original CI 42183881760/a1 and all four CodeQL analyses 42183881798/a1 succeed. Rust 1.86/stable checks include 788 unit tests, 53 corpus tests and 88 Python policy tests. The exact same official consumer proves 74→76 replay fixtures, related_change=true and two genuine behavioral negatives against accepted The original The new accessor computes canonical milliseconds using checked signed UTC microseconds and The sole automatic stable-docs follower is complete:
All 495 regular-file paths match #224. Only The merged branch is deleted locally/remotely with remote absence verified. Checkout is clean at actual main; source containers/controllers/stoppers are absent and borrowed public inputs preserved. Bounded diagnostics retain seven-day scope. Full #215 producer/context/query/remaining-family/guide/published acceptance remains open. The finite accepted wheel-only PyYAML source correction follows before the remaining clock source train. No marker, wire advertisement, release, private review reroute or #191/#192 operating authority follows from this source delivery. |



Parallel plain-Timer
allgroups had no replay clock, and the new group clock's float-based conversion refused large valid epochs. This source change exposes consumed timer-group time and implements the unreleased accessor's canonical v1 millisecond rule for Activity and Timer groups.Normalize the authoritative instant to checked signed UTC microseconds
U, then computeM = sign(U) * ((abs(U) + 500) div 1000)using integers only. Signed half boundaries, offsets and large dates no longer depend on runtime floating-point rounding. Success keeps authored descriptor order, retains the first member on equalM, and returns that member's original full-precision instant. Qualified failure reconstruction uses integerMonly when it agrees with the unchanged legacy-selected member. Legacy results/errors, scalar event times, cancellation, UUID and history are unchanged.Each timer member requires an exact ordered schedule/fire, nonempty physical timer ID, numeric counters, delay and complete authored group path. Pending, cancelled, duplicate, aliased, internal/unknown-kind, mixed or otherwise unproved evidence stays unavailable. Only consumed members contribute. Query execution guards preserve the lack of a consumed group-time context in Core query replay, including reconstructed workflow code. The common index/path/time helpers remove the duplicated indexing loop while preserving Activity behavior.
Offline official Rust 1.86 passes 73 clock tests and 53 corpus tests, plus formatting and the normal warning-free all-target/all-feature build. All 26 exact-module guard classification controls pass, including omission/addition proof; existing enforcement and historical fixtures are preserved. A separately labeled canonical-v1 table has 26 exact vectors plus signed integer-limit controls. The original PHP 8.4/Carbon 17-vector file is byte-for-byte unchanged and remains attributed legacy evidence. Two real worker fixtures cover timer-group first-tie selection and Activity success/failure at large positive/negative epochs that the old source refused. Original current-head CI
42182879323/a1passes on exact13342387: 788 unit tests, 53 corpus tests and 88 Python policy tests. The unchanged official consumer proves 74→76 fixtures and two genuine behavioral negatives against immutable base115922dd; codec stays 48→48. Both required checks are green. Sonar duplication is corrected from the original head’s 3.5% to 0.0%, with zero unresolved issues; no threshold or enforcement changed. All 20 current-head checks are terminal: 18 success/two intended manual worker skips, including all four CodeQL analyses.Refs durable-workflow/.github#215, group order/boundary semantics, and the chosen canonical-v1 numeric contract. Maintained Core remains
ce24207e, independently reread unchanged. It is the boundary/identity/order reference; existing Core legacyWorkflow::now()is not claimed numerically equivalent across PHP runtimes. Matching explicitly versioned additive-clock Core source/context and published cross-SDK conformance remain open. This adds no public name, marker, producer/wire advertisement or release. Normal actual-mainde5f1b2fand all 20 checks are terminal (18 success/two intended skips). Sole automatic Pages42183881724/a1, deployment7595212816and artifact13486538605are accepted, with all 495 files reconciled and 16/16 raw HTTPS matches. Stable published 4.12 API/source is unchanged. Terminal delivery and cleanup receipt. #191/#192 operating gates remain unchanged.