Skip to content

feat(mecatui): bound schedule browsing on the shared surface - #2398

Merged
jbeda merged 9 commits into
mainfrom
impl/2173-schedule-surface
Oct 28, 2026
Merged

jbeda merged 9 commits into
mainfrom
impl/2173-schedule-surface

Conversation

@jbeda

@jbeda jbeda commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Move /schedule into the shared conversation-filling surface, with bounded schedule and run lists, preserved selection/filter/scroll, and separate scrollable details.
  • Add a persistent Huh-based creator with multiline prompt entry, finite timing phrases or cron, searchable IANA timezones, zoned next-run estimates, and explicit Cancel/Create actions. Validation and RPC failures preserve the draft; small terminals keep hidden controls inactive.
  • Return from a schedule-run transcript to its originating history without changing the active chat or draft. Correlate asynchronous results and preserve pending operations across navigation.
  • Read-only schedules use plan; writable schedules use the server's default permission mode. Runs use server-selected models and separate run history, not automatic delivery to the open chat.

Closes #2173. Relates to #1742, #1589, #2237, and #555.

Implementation boundaries

Uses existing scheduling RPCs and fields. Adds Huh v2.0.3, a checked-in timezone catalog generated from pinned Go data, and standard-library embedded timezone fallback for the client and scheduler. Server validation and authorization remain authoritative.

Schedule editing, model selection, advanced policy, timing assistance, and form-to-chat delivery remain separate work.

Verification

Local checks passed: task test, task test:race, task lint, task build, and the offline approval demo. Regression coverage includes geometry, bindings, draft retention, stale results, timezone/DST behavior, and transcript return.

The creator was manually exercised; final layout/Back refinements still need a manual pass. No live schedules were created or fired for verification.

CI is running on the latest push. The known Kind Clear/Fork HTTP 409 flake is tracked in #2401; its cause is unconfirmed and this PR does not claim to fix it.

API compatibility

No wire major/feature change, public engine API change, storage migration, or upgrade sequencing. Existing invalid-zone and embedded-zone parsing policies are unchanged; embedded tzdata improves rule availability on hosts without system zoneinfo.

@jbeda

jbeda commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor Author

Final design decisions

  • The browser uses schedule inventory → run history → schedule details. Returning from a run transcript restores the originating history and leaves the active chat untouched.
  • Creation is a persistent form, not a wizard. Cancel/Create follow the controls; supporting information appears below them. Only explicit Create submits.
  • Timing accepts documented finite phrases or cron. The selected timezone is authoritative; local previews are estimates and the server's saved next run is authoritative.
  • Read-only uses plan; writable uses the server default. Form-created runs have separate history, with no automatic delivery to the open chat.

These decisions supersede the earlier implementation plans. The PR description owns the final scope, verification, compatibility assessment, and remaining limitations.

jbeda and others added 3 commits October 27, 2026 11:24
Move schedule inventory, run history, and schedule details into a fill
surface with bounded controls, stable selection, and owned async results.
Preserve read-only transcript handoff and document reusable TUI conventions.

Co-authored-by: Mecatl <noreply@mecatl.dev>
Explicitly submit plan mode for read-only schedules and default mode for mutating schedules, showing the effective mode in the create form. Retain form values and focus until creation succeeds, prevent duplicate pending submissions, and cover retry and explicit Back behavior.

Co-authored-by: Mecatl <noreply@mecatl.dev>
Add multiline prompt editing, searchable timezone selection, finite timing validation, explicit controls, and geometry-safe widget input routing. Preserve failed drafts and disclose execution policy and result delivery.

Co-authored-by: Mecatl <noreply@mecatl.dev>
Keep mutating schedules on the server default permission mode, explicitly label that policy, and carry the upstream regression into current Model.Update coverage. Pin timezone catalog provenance independently of the module language floor and rolling CI toolchain; regenerate with Go 1.27.3.

Co-authored-by: Mecatl <noreply@mecatl.dev>
jbeda and others added 2 commits October 27, 2026 11:55
The schedule preview imports the existing robfig cron package directly. Preserve its version while making root module metadata stable under tidy.

Co-authored-by: Mecatl <noreply@mecatl.dev>
Keep labeled fields visible, search timezones directly, and place explicit actions next to the form. Preserve surface-owned input, permission policy, pending operations, and failed drafts.

Co-authored-by: Mecatl <noreply@mecatl.dev>
Group form controls and actions ahead of muted supporting information,
add space around schedule lists, and expand timezone suggestions to six
rows when the available geometry permits.

Return schedule-run transcript inspection to its originating browser,
preserving selection, scroll, filters, pending operations, and the active
chat draft. Cover compact/loading/error states, stale receipts, hidden
input, cleanup, and captured keybinding precedence.

Document the reusable layout conventions and corrected Back destination.

Co-authored-by: Mecatl <noreply@mecatl.dev>
jbeda and others added 2 commits October 28, 2026 09:55
Fence delayed filter clipboard receipts across focus changes, expand tabs before bounded list layout, and strengthen independent receipt identity regressions. Remove unreachable creator initialization and unused autocomplete configuration.

Co-authored-by: Mecatl <noreply@mecatl.dev>
Remove the independent source toolchain pin and record provenance from the active Go runtime. Keep timezone refresh explicit, protect the catalog in existing generation gates, and cover active archive provenance and deterministic extraction.

Co-authored-by: Mecatl <noreply@mecatl.dev>
@jbeda
jbeda merged commit 11a6a85 into main Oct 28, 2026
45 checks passed
@jbeda
jbeda deleted the impl/2173-schedule-surface branch October 28, 2026 21:20
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.

mecatui: bound /schedule inventory and fire-history browsing

1 participant