ADR-0113: Scheduled conversations are grouped by schedule, not filed in folders¶
- Status: Accepted (authorized by the repository owner, 2026-09-21)
- Date: 2026-09-21
- Related: Sections 16 and 29 of the engineering plan; ADR-0049, ADR-0089, ADR-0102
- Detailed design:
docs/plan/scheduling.md,docs/plan/thread-folders.md
Context¶
Each occurrence of a schedule runs in a session of its own, so a weekday
briefing adds a conversation to the native sidebar every weekday. ADR-0102
keeps folders to chat conversations: the proposal pass never considers a
session carrying schedule_id, and the move route refuses one with
session_not_chat. Recurring briefings therefore pile up, ungrouped, in the
unfiled history, and each row offers a move menu the server always refuses.
The owner asked for the briefings to be grouped. Two routes were weighed: letting scheduled sessions into folders, or grouping them by schedule as a presentation of the scheduler's own data.
Decisions¶
- Folders stay chat-only. Milestone 29's move-semantics and proposal-eligibility gates are unchanged; no scheduled session is filed, proposed, or moved.
- The native sidebar groups scheduled sessions by schedule. The history
cache records each session's
schedule_idmetadata. A schedule with two or more cached sessions renders as one collapsible group in a Scheduled section between the folders and the unfiled history, labelled with its most recent session's title. A single session stays in the history. - Grouping is client-derived presentation. It adds no route, scope, event, or server state, fetches no schedule record, and does not depend on the folder flag.
- Expansion is device state. Groups start collapsed, the owner's toggles are remembered on the device, and a new firing never reopens a group.
- Scheduled rows lose the move menu. A control the server always refuses is not offered.
Consequences¶
- Recurring schedules collapse to one row each, with or without folders.
- A briefing cannot share a folder with related chats. Filing scheduled sessions would need a new decision amending ADR-0102.
- The label follows the most recent session's pinned title, so a renamed schedule relabels its group on its next firing.
- The evidence is Swift model and view-model tests under ADR-0049; no gate is registered and the historical milestone gate counts do not change.
Alternatives considered¶
- Admit scheduled sessions to folders, by hand or by a folder named on the schedule: rejected because it weakens two Milestone 29 acceptance gates and couples the materializer to folder membership, rename, and deletion.
- A server-side grouped index: rejected because the session index already
carries
schedule_id, so the grouping needs no new server surface. - Label groups from the schedule record: rejected because it adds a point read per group and fails for schedules removed by terminal retention (ADR-0089) while their sessions remain.