Repository navigation
Native schedule list, update and backfill - #573
Merged
Merged
Conversation
GET /api/schedules follows ScheduleController::index: status and workflow
type filters, the schedule visibility query (equality predicates joined by
AND on schedule fields and registered search attributes), Laravel's
messages, PHP's refusal bodies and continuation tokens signed with
DW_SERVER_KEY or APP_KEY, bound to the namespace, filters and a cursor that
must still exist. PUT /api/schedules/{id} merges the action and records
PHP's changed fields. POST /api/schedules/{id}/backfill triggers each
occurrence in the range as triggerForBackfill does, with PHP's fire times
and offsets.
Backfill times are read as ISO-8601 exactly as PHP's date rule and
DateTimeImmutable read them, checked against a 700-case oracle corpus.
Other strtotime spellings are refused. Ranges over 10,000 occurrences
are refused instead of running unbounded, and an update to a spec that
cannot be evaluated is a 422 where PHP returns 500.
Laravel sizes a non-numeric value under a numeric rule by its length;
the shared rules engine now does too.
The new schedule-catalog fixture compares 72 responses with a reviewed
copy of published PHP's. The schedule probe replays its whole sequence
in a new namespace when published PHP on SQLite records its own lock
failure inside a response.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t-update # Conflicts: # .github/workflows/server-parity.yml # scripts/conformance/server-parity/contract.mjs # scripts/conformance/server-parity/probe.php
rmcdaniel
enabled auto-merge
October 21, 2026 07:51
|
This was referenced Oct 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Part of #325. Follows #570, which has merged.
Native now lists, updates and backfills schedules as published Server 2.5.14 does.
What changes
GET /api/schedules). Supports PHP's filters with Laravel's validation messages and PHP's refusal bodies, includinglast_safe_cursor.AND. They work on ScheduleId, Status, WorkflowType, TaskQueue, Note and registered search attributes.DW_SERVER_KEYorAPP_KEY. When neither is set, native uses its auth token, not a per-container key, so tokens survive restarts and work on every node. Each token is bound to its namespace and filters, and is refused once its cursor is gone.PUT /api/schedules/{id}). Merges the action with the stored one, recomputes the run quota and next fire time, and records PHP'schanged_fields.POST /api/schedules/{id}/backfill). Fires every occurrence in the range once, from the start time up to but not including the end time, astriggerForBackfilldoes.page_size=xreports only the integer rule.Deliberate differences
strtotimeforms, such as+1 dayor@timestamp, get thedatevalidation message.backfill_range_too_large. PHP has no limit.Evidence
cron-oracle/backfill-dates.php: PHP'sdaterule and instant for 700 seeded strings. Native refuses everything PHP refuses and matches every instant to the microsecond.schedule-catalogparity fixture (72 requests, with a reviewed PHP copy). Locally, published PHP, embedded and native pass it, and PHP and native agree on every normalized response.🤖 Generated with Claude Code