Skip to content

Preserve due-schedule timestamp precision - #506

Merged
rmcdaniel merged 1 commit into
mainfrom
fix/schedule-tick-precision
Sep 9, 2026
Merged

Preserve due-schedule timestamp precision#506
rmcdaniel merged 1 commit into
mainfrom
fix/schedule-tick-precision

Conversation

@rmcdaniel

Copy link
Copy Markdown
Member

Summary

Refs #505. Preserve the WorkflowSchedule model's microsecond serialization in the due-schedule predicate, instead of letting the connection format a DateTime binding at whole-second precision. No API, schema, cron or overlap-policy change.

The regression persists and reloads the deadline, freezes time at exact whole-second/fractional boundaries, checks original occurrence identity, forbids early dispatch and verifies that a repeated tick does not start twice. Existing fairness checks are unchanged.

Validation

  • Before the fix: three due boundary cases fail on SQLite; the future case passes.
  • After the fix: all seven tick cases pass, 36 assertions, PHP 8.4 / Laravel 13 / SQLite.
  • ECS applied to the two changed files; diff reviewed.
  • Broader schedule/degraded-mode/command tests and static analysis are running. Repository CI will provide normal MySQL and release-gate checks.

Release Follow-Through

Keep #505 open until publication and affected-consumer qualification. Inspect Server's locked Workflow/image contents and embedded consumers; SDK/CLI protocol and packages are unchanged. Run the published schedule cases on SQLite/MySQL/PostgreSQL after publication; record downstream rebuild/release decisions rather than assuming a library tag changes existing images.

@rmcdaniel
rmcdaniel marked this pull request as ready for review September 9, 2026 23:12
@rmcdaniel

Copy link
Copy Markdown
Member Author

Local verification is complete for SQLite: 89 schedule, degraded-mode and command cases / 452 assertions pass, and full phpstan analyse src tests reports no errors. ECS passes for the changed files. Before the fix, the three due boundary cases failed; after it all seven tick cases pass, including namespace fairness and duplicate-tick prevention.

The first broad local command used a synchronous queue, which is deliberately unsupported by four degraded-mode cases. Rerunning with the asynchronous database queue resolved those harness errors without changing tests or product code. Existing CI remains the public MySQL gate; PostgreSQL qualification and published-artifact follow-through remain outstanding.

@rmcdaniel
rmcdaniel merged commit 98d9058 into main Sep 9, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants