Skip to content

(sidebar): define what a row represents and make every row verb follow it #564

Closed

Description

@devsuitup

Nothing defines what a sidebar row represents. Four mechanisms (/compact, /clear, continuations, slug groups) follow four different rules for which sessions share a row. Some verbs act on the row's representative, others on one member, and a merged row carries no mark that it is merged.

Concept: Row. See docs/product/CONCEPT-MAP.md M4 and §1–§4 (#561).

Related: #556 (Archive judges members by the representative's descriptor), #530 (duplicate merged row keys).

Converge in two steps. First write the definition, for example "a row is one conversation lineage; its newest live member drives its state, its position and the target of its verbs". Then align the four mechanisms and every row verb to it, and mark merged rows visibly.

Activity

  1. devsuitup commented on Oct 13, 2026

    @devsuitup
    OwnerAuthor

    Decision (maintainer, 13/10): what a sidebar row represents.

    Definition. A row is one conversation: the transcript the user started, plus every transcript the CLI carried that same exchange into without being asked (a compaction mirror, or an unambiguous continuation).

    • The newest member (the head) drives state, position, Open and the process verbs.
    • Name, pin and archived belong to the conversation, stored on its oldest member (the root).

    The four mechanisms

    • /compact: same row. This already works today through bridgeSessionId.
    • Continuation (continued-in): same row only for a single proven linear chain, meaning one terminal id or a matching bridgeSessionId. An ambiguous or branching graph keeps separate rows, and the (sessions): one chooser for continuations, one rule for sessions live elsewhere #567 chooser runs on open.
    • /clear: new row. The open terminal follows the new transcript.
    • Slug grouping is kept for scheduled runs only: a slug group is a container of rows. Interactive sessions are no longer grouped by the CLI slug, unless a measurement shows that slug links something users recognise.

    Row verbs

    • Open: the open tab of any member, head first. Otherwise resume the head, with no chooser for a linear chain.
    • Stop: every live member, in one confirmation that says how many parts run and where ((ux): one confirmation rule for destructive vs reversible actions #565).
    • Archive: stops the live members first and confirms only if something is live ((ux): one confirmation rule for destructive vs reversible actions #565). The flag goes on the root.
    • Delete: deletes every part (transcripts and their subagents). It is refused before any dialog while a member is live. The dialog counts the parts. There is no per-part delete.
    • Rename and Pin: the root.
    • Fork and Resume with config: the head.
    • View messages: the whole conversation, or at least the head.

    Marking. A merged row shows "N parts", and its short id is the head's id. A "Parts" item in the context menu lists the members, each with View messages and Copy id. A search hit on any member lands on the row.

    Found while writing this, not reproduced yet:

    • Delete on a merged row currently removes only the representative's file (main.js delete-session handler), so the row likely comes back as its newest mirror.
    • Opening a merged compact row with nothing open resumes the oldest file.
  2. 1 remaining item

  3. devsuitup commented on Oct 19, 2026

    @devsuitup
    OwnerAuthor

    S16 (continuation chains rolled into one row) — owner decision, decided by Jean-Baptiste in person, 2026-10-19:

    • Q2: a continuation into a transcript of the same bridge group is not a branch. It is ignored for linearity, and the chain rolls up into one row.
    • Q1 (which name, pin and archive flag a rolled row shows, given that on real data the archived root is older than an unarchived, pinned head): delegated to the product designer. A recommendation will follow before the wiring PR.

    Spec: .work-files/spec-564-s16.md (local). It is split into two PRs: PR 1 is renderer only (search and subagents follow every part of a merged row, which also fixes compaction mirrors); PR 2 does the rollup wiring and waits on Q1.

  4. devsuitup commented on Oct 19, 2026

    @devsuitup
    OwnerAuthor

    S16 Q1 — decided by Jean-Baptiste in person, 2026-10-19, on the product designer's recommendation. This replaces the 13/10 sentences "Rename and Pin: the root" / "The flag goes on the root".

    Name, pin and archived belong to the conversation and are read across all its parts. A row is archived only when every part is archived, and pinned when any part is pinned. Its name is the newest rename the user made on any part, otherwise the root's name. Archive, Unarchive, Pin, Unpin and Rename write every part at once. A subagent is hidden when the conversation it belongs to is archived. The same rule applies to compaction mirrors and to a live background row.

    Why: on real data, two of the chains S16 rolls up have an archived old part and a pinned live part. "Root only" would hide two live conversations, and their newer subagents would fall into Orphan subagents. The union rule writes nothing during a read and needs no migration.

    This is implemented in S16 PR 2. docs/product/CONCEPT-MAP.md, docs/product/GLOSSARY.md and .ai/contexts/subagent-observability.md will be updated there.

  5. devsuitup commented on Oct 19, 2026

    @devsuitup
    OwnerAuthor

    Status of the slices, after #721 (merged as 8a44351):

  6. devsuitup commented on Oct 30, 2026

    @devsuitup
    OwnerAuthor

    Confirmed by Jean-Baptiste in person on 2026-10-30 (audit point M4): a sidebar row stays one conversation, as decided here on 19/10. Follow-up decisions of the same day: Stop from the terminal header and grid card stops the whole conversation (#917); Open always opens the head (#918, which also fixes the stale glossary entry); "Stop all" on a folder header refuses conversations with background jobs, says why, and can be forced (#843). Analysis: .work-files/switchboard/m4-row-definitions.md.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions