Skip to content

client: a read-only window's Board, New chat and Project settings overlays offer no Reload #2521

Closed

Description

@HugoXK

Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment on this issue.

Written-by: FlyBot Lead
Claimed-by: FlyBot Lead
Claim-Id: cce0d5e889b74566b96d54c6ec7ff13c
Branch: dev/2-overlay-readonly-reload
Base: d1ea853
At: 2026-11-05T10:38:09Z

Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment.

Written-by: FlyBot Lead

What happens

In a read-only window, four surfaces drawn inside an overlay keep the host's sentence ("…reload…") and offer no Reload entry, while the sidebar's own Reload sits behind that overlay. A reader mid-task has to close the overlay, press Reload, and open it again.

Each of them already draws the sentence, so nothing looks broken — the missing entry only shows after a try.

  1. Board — core/src/client/kanban.js:371 draws
    locked ? h('p', { className: 'bt-board-hint bt-read-only', role: 'status' }, hostText(roster.readOnly)) : null
    and nothing beside it.
  2. New chat, composer — core/src/client/new-chat.js:299-302 draws the same bare sentence
    (this is the To: row / composer state).
  3. New chat, admin chosen — core/src/client/new-chat.js:253-254, the group block. It and the
    composer are mutually exclusive states of one component, so a mount covers only one of them.
  4. Project settings panel — core/src/client/project-board.js:867-871: the locked branch draws
    only the h3, the sentence, and Back to board.

The overlays are position: fixed; inset: 0 plus a scrim (Project board CSS :14, scrim :1125),
mounted at core/src/client/index.js:943 (shadow('shell.overlay', { id: 'project-board', order: 57 }))
— so the sidebar entry is genuinely unreachable while one is open.

Expected

Every one of the four offers exactly one Reload beside the host's sentence, running the same
actions.reloadTeam read the sidebar runs (never a page reload), so a reader who was locked out
mid-task recovers without leaving the overlay.

Red first

core/test/readonly-reload-lines.test.js, extended SURFACES (7 → 11) run against a clean
d1ea853c tree holding only the extended test file:

not ok 3 - every surface that is not the header or a drawer offers one Reload — its own way out of the modal
    Board dialog: one Reload entry
    0 !== 1
not ok 4 - one shared piece: the sentence is the host sentence, and the control sits outside the live region
    Board dialog: the sentence is read first
not ok 5 - a press runs the client's own team read, once, and sends no write
    Board dialog: the entry is drawn
# tests 7
# pass 4
# fail 3
# cancelled 0

The three failures are loop assertions (one per behaviour across all surfaces), so the count is 3,
not one per surface. A throwaway probe measured each new surface individually as
sentences=1 / reloads=0 before the fix; after the fix the same file is 7/7.

Scope

  • Draw all four through the shared piece that already exists — core/src/client/read-only.js →
    readOnlyLine(h, roster, actions, { key, className, style, reload = true }): the sentence stays
    inside role="status", the button outside it, one Reload per screen.
  • KanbanDialog (kanban.js:395) and NewChat (new-chat.js:14) already receive actions.
    ProjectSettingsPanel (project-board.js:830) receives only call/onClose/onSaved, so
    ProjectBoardOverlay (:1144) must pass actions (or an onReload) down to it.
  • Extend core/test/readonly-reload-lines.test.js: SURFACES (:148-154) to 11 and mountFor
    (:209-213) with four branches; every component involved is already exported, so no new seam.
    Writable windows keep every write control they have today.
  • This is the client-bundle lane: regenerate core/client.js plus the patch carriers and mirrors.
    new-chat.js is carried by patches/ds-bot/0003-flybot-api-client.patch, the others by
    0008-client-bundle.patch; those two plus their files/ mirrors and the test mirror are the only
    generated files this change is allowed to touch.

Duplicate check

Searched live main and closed issues before opening (Reload dialog read-only 7 hits,
"bt-read-only" 39, Reload overlay 1): all closed and about other surfaces — #2502 (Settings
header, the shared piece this reuses), #2299 (Inbox), #2273/#2275 (task-board writes). No open
issue covers these overlay surfaces.

Activity

  1. HugoXK commented on Nov 5, 2026

    @HugoXK
    ContributorAuthor

    Written-by: FlyBot Lead

    在飞:已认领 Claim-Id cce0d5e889b74566b96d54c6ec7ff13c(分支 dev/2-overlay-readonly-reload,base d1ea853c)。READY 已在本地(红先 7 tests / 4 pass / 3 fail → 修后 7/7),由 FlyBot Dev-2 开 draft PR 跟进;本条按在飞打 agent-working,不再当待分诊条目。

  2. added a commit that references this issue on Nov 5, 2026
    276042f
  3. HugoXK commented on Nov 6, 2026

    @HugoXK
    ContributorAuthor

    Release

    Written-by: FlyBot Lead
    Released: cce0d5e889b74566b96d54c6ec7ff13c
    Reason: issue closed (merged)
    At: 2026-11-06T02:14:20Z

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions