Repository navigation
Conversation
Approved schedule browser and creator implementation plans
Amendment and verification statusThe operator explicitly authorized rebasing, pushing the rebased existing commits, and executing the last session's approved creator plan. That supersedes the historical planning-session-only/no-rebase notes retained verbatim below; it does not authorize merging. The existing archive is extended in place, not duplicated. The creator adds supported timing phrases and local validation/preview, searchable explicit timezone selection with a pinned generated catalog, multiline/paste editing, conventional read-only checkbox, explicit Create/Cancel, persistent focused-field help, error retention, execution/result disclosure, and the existing conversational scheduling alternative. It retains the browser hierarchy and all named deferrals. The normal-terminal implementation uses a focused-field viewport and a review view rather than requiring all help and fields to fit simultaneously. Verification sections below are intentions, not a claim all checks or manual terminal qualification are complete. Current execution evidence is maintained locally; the PR description will distinguish published code from uncommitted work. No private credentials, logs, or reviewer transcripts are included. Both selected plans are preserved in full. /schedule bounded surface planSlug: 2173-schedule-surface Issue: #2173. Umbrellas: #1742 / #1589 (bounded), #2237 / #555 (surface). Goal and scopeMove The operator confirmed fill placement and the three browsing levels: schedule inventory → runs → schedule details. Fire transcript activation remains a separate transition to the existing Sessions transcript viewer, not a fourth nested schedule level. Implementation is authorized by the operator's follow-up request. The operator also requested rebasing onto Pre-change behavior
Proposed approach
Confirmed interaction contract
Fill placement applies to all three browsing levels. At insufficient geometry show the bounded close/back fallback, consume unrelated input, disable hidden activation and preserve state for a later larger offer. At zero width/height return no body/hits and still allow close. The compact close action closes the surface directly, consistent with existing surface fallbacks; normal-size close follows the hierarchy above. The implementation chooses a Details chord consistent with the captured keymap and existing bare-action conventions, and exposes its actual hint. Do not give the same chord two actions in the same focus context. Test that configured Choose/Close/navigation bindings remain authoritative. This is a local key choice, not a new UI-wide keymap framework. No material operator decisions remain open. Acceptance and implementation outline
Verification and delivery
Schedule create usability — implementation planSlug: schedule-create-usability Goal and confirmed scopeMake creation usable before #2398 merges: enter a real task, understand timing/execution policy, submit deliberately, and correct errors without losing work. Joe will clear the session and request implementation next; do not start implementation in this planning session. Joe confirmed:
Existing seams and constraints
Minimum form and input contractControls: Name (single-line), Prompt (bounded multiline textarea with internal scrolling), Timing (single-line plus supported examples), Timezone (searchable autocomplete default UTC), Read-only (checked checkbox), separate focusable Create and Cancel.
Searchable autocomplete and timezone catalogBuild a thin reusable field over installed Bubbles textinput plus existing bounded.List, not a general form framework or new Huh dependency. Built-in textinput suggestions alone are prefix-only/inline and do not satisfy city search.
Catalog maintenance is generated and checked in, not generated on every build. No new Go module. Concrete ownership: Add Existing package tests always check sorted unique names, accepted identifier shape, UTC presence, metadata integrity, and successful zone loading, without rewriting anything. Freshness compares generated metadata/names/archive fingerprint against the declared root CI toolchain only when the active runtime equals that declared version. On that path (including existing pinned CI), stale/missing provenance or contents FAIL with the regeneration command: bumping root Go without refreshing the asset cannot silently skip CI freshness. On supported newer ambient local Go, run all internal/semantic checks and explicitly report that source-archive freshness requires the declared toolchain; do not compare a different toolchain's rules/archive or fail ordinary tests just because it is newer. No automatic download, new job, or duplicate generator compilation in tests. Test both matching-source and newer-runtime decision paths with injected version metadata, including a negative control proving a declared Go bump with stale provenance fails the matching CI path. Runtime rules are separate: standard Maintenance runbook issue filed: #2403. Related existing #807 covers exact local toolchain/generator checksum isolation. This slice adds only generator maintenance notes; do not implement the broad upgrade runbook. Finite timing grammar and interpretationPreserve old intended meanings and document exact examples; optional leading
12-hour inputs require 1–12; 24-hour inputs 0–23; minutes 0–59. Preserve existing intended supported forms; do not expand into noon/holidays/arbitrary sentences/date grammars. Existing cron-aligned interval semantics remain (not a new elapsed
Dependency-ordered tasks and completion
Verification and CI budgetNo new jobs, network/container checks, extra toolchain matrix, redundant generator compilation/invocation on critical path, or unbounded UI matrices. Catalog freshness and ID validation belong to existing package tests. Keep UI fixtures offline and deterministic. Measure added package-test cost during implementation; reduce fixture work rather than weakening behavioral assertions. Local exploratory Go 1.27.2 probe: 598 raw archive entries / 9,102 serialized bytes; enumeration/sort/serialization 0.14–0.92ms; all-name validation about 100ms first observed, 2.8ms warmed. Filtered selectable list will be smaller. These are workload timings, not measured CI wall time/compilation. Probe: Required checks:
Deferred backlog and deliveryOnly Go-upgrade checklist #2403 was filed during planning. During implementation, check existing issues then file/update focused follow-ups for: edit-existing without state reset; model picker/effective plan-aware identity; automatic model-assisted timing inside form; reusable prompt-editor core; advanced policies/budgets/timeouts/retries/context; explicit form-to-chat completion binding; remembered timezone preferences; separate server fail-closed invalid-zone behavior/preview parity (wire assessment). Relate these to #2398; do not duplicate #2403 or #807. API compatibility: existing fields/RPCs, no wire major/feature, exported engine API, storage migration, or authorization change. UI accepts explicit zones and validates before requests; backend embedded-zone/invalid-zone contracts remain unchanged. Standard embedded data improves rule availability, not rejection semantics. Stop for separate assessment/approval if stricter server behavior becomes necessary. No implementation, branch change, commit, push, or PR-plan publication in this session. Joe requested the checklist issue and plan/handoff update, then will clear and start implementation. On implementation authorization, archive the approved combined browser/create scope in the PR's existing single plan comment (verify mapping/privacy/conflicts/readback); current archived comment still contains only the older browser plan. Keep existing comment, don't create another plan dump. Review statusInitial fresh-context critique found embedded-zone precedence, vague timezone-name policy, tzdata ownership/proof, and finite grammar gaps. Revised plan resolves them with: authoritative timezone field/reject both prefixes; UTC+archive slash-ID membership; concrete client/server link owners and no new CI proof infrastructure; finite grammar table; one preview/submission result. User subsequently confirmed searchable reusable autocomplete, checked-in toolchain-derived catalog, explicit maintenance generation, and no CI-job/long-pole expansion. Two incremental design rechecks completed. The first identified source-toolchain freshness versus supported newer local Go and provisional generator ownership. The final recheck accepted the root-declared-source CI check/newer-local diagnostic split, negative controls, concrete generator/asset/task, and prefix-boundary cases: no remaining blocker, important, or advisory design findings. Reviewer worked from the supplied scope-complete brief and complete changed sections because ignored scratch was unavailable in its checkout; this is design evidence only, not implementation/tests/runtime proof. Reviewer agent ID: subagent-a8de2895d7051b91e83af3a871c9b90c-call_ZoJZqX2FRUvJ5OY9x8w0UBXt. No material product questions remain open. Capture any new load-bearing discovery during implementation instead of silently expanding scope. Joe requested session clear/handoff now and implementation in the next session; retain this plan and use plan-implement after that explicit implementation request. |
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>
3a3617a to
8354d4a
Compare
Summary
/scheduleonto the shared, conversation-filling surface lifecycle, consistent with/sessions.docs/tui.md.Closes #2173.
Relates to #1742, #1589, #2237, and #555. These umbrellas remain open.
Current status
Published PR head:
8354d4af5c3bb6eed6a81c3ebdb4af91948c54f8. The two existing schedule commits were explicitly rebased without conflicts ontoorigin/mainatc4a043fd01eaa0f9649090a74d74ab3cee5f0e23and pushed with an exact force-with-lease. Focused TUI suites passed after the rebase.The approved creator-usability slice is implemented locally but remains uncommitted and unpushed. It is not part of the published PR diff yet. It adds:
Run every day at 9am, local cron/clock validation, zoned next-occurrence estimates, and authoritative server next-run feedback.Local checks passed: focused UI/client/parser/catalog/generator suites; integrated
task test; full post-fixtask test:race; finaltask lint;task build; offline demo with tool call, permission ask/approval, and result;task docs;task site:build;git diff --check. The final test-only cross-surface editor-ownership negative control also passed focused race and lint checks. Four-axis final-tree review and targeted fix rechecks have no remaining findings.Manual terminal qualification of the rebuilt client remains outstanding. No live/paid scheduled runs were created or fired. The creator slice is not claimed ready for merge or published on this PR head.
Deferred work was deduplicated: model picker #2414, form timing assistance #2415, shared prompt-editor core #2416, advanced policy #2417, timezone preference #2418, and server-zone/preview contract #2419. Existing #2149 and #700 received the terminal editing and explicit form-to-chat binding follow-ups, respectively. Toolchain checklist #2403 and checksum issue #807 remain separate.
Manual-test follow-up and drive-by bug fixes
default; the existing server contract requires non-mutating schedules to useplan. Creation now explicitly sendsplanwhen changes are disallowed and canonicaldefaultwhen allowed, and displays the effective mode in the form. Client request tests verify both mode/mutating combinations on the wire.A comparison with the pre-refactor implementation found no additional refactor-introduced action, async-ownership, transcript-handoff, or list-rendering regressions. It also identified two older input defects outside these fixes: bracketed paste is dropped in schedule fields, and create-field cursor blink messages are not routed back to the field. Both are now fixed in the local, unpushed creator slice described above; the published browser/follow-up commits did not fix them.
Verification
Original surface implementation
task test,task test:race, andtask lint.task docs,task site:build, and offlinego run ./cmd/mecademo(tool call, permission ask/approval, and result).git diff --check.Manual-test follow-up fixes (
3a3617a49)task test,task lint, andtask test:race; the final follow-up changes passed the full race suite.task build; rebuiltbin/mecatuifor continued manual verification.git diff --check.The first full-test attempt on the original implementation hit the harness's long managed temporary-path limit for Unix sockets. Focused startup tests and full suites passed with the system temporary directory; the follow-up full gates used system temporary storage as well.
API compatibility
UI-only change. Existing RPCs, scheduler semantics, pagination, retention, and stored data are unchanged. The create-form fix supplies the existing permission-mode field consistently with existing server validation; it changes no authorization contract and grants no new permissions. The local creator slice uses existing trigger/timezone/mode fields with client-side validation; server invalid-zone and embedded-zone contracts remain unchanged. No wire API major/feature changes, exported engine Go API changes, stored-data migrations, or upgrade sequencing required.
Plan
The full approved implementation plan is preserved in the plan comment. Verification above records actual results for the original implementation and the committed follow-up fixes; verification in that plan describes the intended checks.