Repository navigation
feat: qualify parallel activity replay time with canonical-v1 arithmetic - #293
Conversation
|
|
PR #293 is merged and actual-main source acceptance is complete at The canonical-v1 implementation follows the chosen unreleased integer contract: consumed remote Activity-all members only, authored first-on-ms-tie selection, original full-precision success time, exact integer failure reconstruction only for an agreeing legacy-selected member. Python's published legacy clock, results/errors and cancellation remain unchanged. The 17 original PHP 8.4.27 / Carbon 3.15.1 observations and source attribution are retained unchanged beside the separate canonical-v1 table; this is not a universal legacy Core numeric-parity claim. Verification:
Merged remote branch absence is independently verified by GitHub 404; its local ref is absent. Shared main and the retained detached review checkout are clean at 7a36e43. The owned temporary prior-profile comparison checkout was removed; no owned local test/browser/container process remains. SDK-Python owns the public source diagnostic evidence through 2026-11-13 09:00 UTC, then removes/redacts its temporary copies. Existing failed evidence and separately sealed inputs are unaffected. Full central #215 stays OPEN: matching versioned additive Core context, ordinary-entry carrier, group-query/predicate authority, remaining consumed families and published cross-SDK conformance are not completed by this source cohort. The mismatched multi-failure outcome/versioning gap stays OPEN; no wire/marker/release or #123/#184 operating route is selected. |



After a validated parallel list of remote activities,
ctx.replay_now()can read the consumed group's time. Success compares authored members using exact canonical-v1 integer milliseconds, retains the first member on a tie and returns its original full-precision instant. Caught failure preserves Python's existing exception and reconstructs the selected millisecond only when that member agrees with the canonical selector; mismatched winners or reconstruction overflow remain unavailable.The reader validates every member's lifecycle, execution/type/counter identity and full authored group path. It binds actual Core
recorded_at/created_atinputs without substituting scalar redrive time or a history maximum. Empty groups preserve the existing boundary. Unsupported, mixed, local, select and scoped groups remain unavailable. Group query body/callbacks cannot borrow executor time; later independent scalar boundaries can recover their own authority.The unreleased canonical-v1 decision uses signed UTC microseconds
UandM = sign(U) * ((abs(U) + 500) div 1000), with integer arithmetic throughout. A separate table covers 31 fixed numeric vectors and six group cases across offsets, half boundaries, pre-epoch/large dates, ties and overflow. The original 17 observed PHP 8.4.27/Carbon 3.15.1 answers and independently bound source hashes remain byte-identical and separately attributed. This does not claim universal legacy CoreWorkflow::now()parity.Validation at
4530321c:46ebdad, one new-contract large-date failure on prior measured-profile draftb6382381, and 109/109 passes on the successor. No import/collection failures. Original first-draft evidence is retained under its original numeric profile.Related: durable-workflow/.github#215 and its consumed-group mapping. The versioned failure-selection proposal remains open. Full published conformance, matching versioned additive Core context and ordinary-entry/query authority remain open. This PR does not select a wire, workflow marker, version or release change.