Repository navigation
fix(app-shell): the flow designer's Cron schedule field reads every cadence form the engine runs (objectui#12779) - #12844
Merged
objectstack-fleet[bot] merged 2 commits intoOct 17, 2026
Conversation
…adence form the engine runs (objectui#12779)
The start group's Cron schedule field read only `config.schedule.expression`
or the flat `config.cron`, so a bare cron string, a `{ cron }` cadence and an
interval or once cadence all read empty over a schedule the engine runs.
- `normalizeScheduleCadence` mirrors the engine's `normalizeSchedule`
(objectstack trigger-schedule), and `getFieldValue` reads the field
through it: every cron spelling shows its cron.
- An interval or once cadence draws read-only as what it is, through the
inspector's existing `disabled` control, with a line saying the designer
edits cron cadences only. No cron edit is offered over it.
- A commit rewrites `config.schedule` through `scheduleWithExpression`, so
the stored descriptor resolves to the typed cron: a bare string stays a
string, a stale `cron` is replaced, `type` and `timezone` are kept, and
the flat `config.cron` migrate-on-edit is unchanged.
Claude-Session: https://claude.ai/code/session_01BJXsVHBzUDeavBF1UUAkRK
Co-authored-by: Claude <noreply@anthropic.com>
…hedule-cadence-forms
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contributor
Author
席位核对 · ACCEPT ·
|
objectstack-fleet
Bot
deleted the
claude/issue-12779-schedule-cadence-forms
branch
October 17, 2026 02:40
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.
Fixes #12779
Clause-②: no
What changed
The flow designer's start-node Cron schedule field now reads every cadence form the engine runs, instead of reading empty over a schedule that runs.
normalizeScheduleCadence(inflow-node-config.ts) mirrors the engine'snormalizeSchedule(objectstackpackages/triggers/trigger-schedule/src/schedule-trigger.ts, read at objectstack570c7a2d95). It is mirrored, not imported: no new dependency on a trigger package.getFieldValuereads the field through it, so a bare cron string,{ expression }and{ cron }, typed or untyped, all show their cron.{ type: 'interval', intervalMs: 60000 }or "Once, at …". The label is "Schedule", and one line says the designer edits cron schedules only. It reuses the inspector's existingdisabledcontrol, the one read-only flows already use. No interval or once editor is added, and a stored interval is never converted to a cron.config.schedulethroughscheduleWithExpression, so the stored descriptor resolves to the cron the field shows. A bare string stays a bare string. A stalecronkey is replaced. An object keeps itstypeandtimezone. The flatconfig.cronmigrate-on-edit is unchanged.@object-ui/app-shell.Why
The field read only
config.schedule.expressionor the flatconfig.cron. A bare string (app-todo'stask_reminder), a{ cron }cadence and an interval (the showcase'sshowcase_scheduled_digest) all read empty, so an admin could "fix" a working flow. Typing a cron over an interval mergedexpressionbesidetype: 'interval', which the engine ignores.Evidence
flow-node-config.scheduleCadence-12779.test.ts(the engine's form table, reads, writes, controls) andFlowNodeInspector.scheduleCadence-12779.test.tsx(rendered reads, the read-only interval and once readings, writes, controls). Three ablations each turned the targeted cases red: read 11, read-only 11, write 3. Each file was restored to its HEAD blob.type-check, and 154 test files (2585 passed); i18n, changeset, citation and spec-symbol gates all exit 0.@objectstack/cli18.0.0-next.2): before, both the showcase interval node and a bare-string node read an empty Cron schedule. After, they read "Every 1 min" (read-only) and "0 8 * * *". Screenshots are on branchclaude/issue-12779-evidenceunderevidence/12779/. The bare-string flow was added to the backend's scratch copy only.Acceptance notes
FlowCanvas.tsx, outside this change) shows a bare string's cron but no cadence for an interval or once node.Provenance: built by the cloud session
session_01BJXsVHBzUDeavBF1UUAkRK(claim6227991314) and opened by thedomain:uiseat 1 PM (session_011K9g23W67dy2zwnyzaoB6o) from that session's final message, because a cloud session cannot open a PR from its container. The seat replaced the dev's footer line with this paragraph and changed nothing else.Generated by Claude Code