Repository navigation
Description
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: 41446521c1724173bfcc99f75889b209
Branch: dev/1-readonly-reload
Base: 7f724a0
At: 2026-11-05T05:01:07Z
Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment on this issue.
Written-by: FlyBot Lead
What happens
A window that holds the team read-only shows the host's own sentence (hostText(roster.readOnly) — "close the other window and reload") at six places in the client, but only two of them offer a way to reload: the sidebar (core/src/client/sidebar.js:378, actions.reloadTeam?.() → reportError(error, 'reload')) and the refusal toast (core/src/client/feedback.js:171). The banner itself got one in #2265.
The remaining four mount points draw the sentence and nothing else — live main 7f724a07, reloadTeam appears only at sidebar.js:378 and nowhere in these files:
core/src/client/settings.js:261-263— the Settings dialog header, above every page.core/src/client/details-drawer.js:224,:333,:414— the room overview, the settings area (Bot or group form), and the Bot overview.:333and:414can be on screen at the same time.core/src/client/inbox.js:664— the top of the Inbox dialog (a modal: the sidebar button behind it is not reachable while it is open).core/src/client/memory-panel.js:324— the top of the Memory panel.
So a reader who is told to reload has to know to close the drawer/modal and find the button in the sidebar — and inside the Inbox modal that button cannot be clicked at all.
Expected behaviour
- Each of the four places draws the host's sentence exactly as today, plus one Reload button next to it, wired to the same action as the sidebar (
actions.reloadTeam?.(), failure →actions.reportError(error, 'reload')). - The button is the second consumer of one shared piece, not four copies: a small helper carrying the hint + button (the sentence keeps
className: 'bt-hint bt-read-only'androle="status"; the button sits outside therole="status"node, as in the sidebar). - At most one Reload per view. Where
:333and:414are both drawn, only the topmost sentence gets the button; the second one stays a plain sentence. Same rule if a view ever draws two hints. - A writable window is unchanged:
readOnlyundefined,'', or whitespace draws no hint and no button, and the rendered tree is byte-identical to today's.
This is an enhancement, not a regression: no write control is drawn in a read-only window here, and no call is refused. What is missing is the action that the sentence tells the reader to take.
Scope
core/src/client/settings.js,core/src/client/details-drawer.js,core/src/client/inbox.js,core/src/client/memory-panel.js— the four hint sites only.- One shared helper (hint + Reload) instead of four copies; if it lands as a shared unit, say so in the PR body so
#456's "three hand-written copies of the read-only reason" can be closed as absorbed at these mount points. - A regression test per mount point: read-only roster draws exactly one Reload button in that view and clicking it calls
reloadTeam;:333+:414together still draw exactly one button; writable roster draws none. A view must not end up with two. docs/subsystems/core-client.mdand achangelog.d/fragment; regeneratecore/client.jsand thepatches/ds-bot/*these files belong to.- Do not touch:
service.js,core/src/host/**, the write-control gating of the read-only pages (#2479/#2489/#2492/#2496/#2499), orsidebar.js/feedback.js(already have their buttons).
Red-first shape
One case per mount point, red on a clean main with only the new test applied: read-only roster → the view draws a button whose click reaches reloadTeam (today: no button). One green control: writable roster → zero buttons. One case that pins "at most one per view" where two hints share a screen.
Dedupe (2026-11-05, before opening)
- GitHub search
repo:ThinkFlowLab/FlyBot reloadTeam→ 3, all closed:#2247/#2265(the banner itself),#2312/#2367(the refusal toast). SearchReload read-only→ 43, none for these four mount points. - Live
main7f724a07:reloadTeamonsidebar.js:378only;0occurrences insettings.js,details-drawer.js,inbox.js,memory-panel.js. - No open issue and no live claim covers this; the earlier proposal records (P-566 settings header, P-572 drawer, P-574 inbox + memory panel) were folded into this one issue on purpose.
Activity
Birfy commentedon Nov 5, 2026
Written-by: Triage
State: needs-human — claimed by FlyBot Lead (
dev/1-readonly-reload, base7f724a07, claim41446521c1724173bfcc99f75889b209) and no PR is open for it; the body says "Do not pick up without apickup-okcomment". Triage opens no branch and no PR here.Blocked on: line ownership and admission, not on the report. The report names the four sites (
core/src/client/settings.js:261-263,core/src/client/details-drawer.js:224,:333,:414,core/src/client/inbox.js:664,core/src/client/memory-panel.js:324), the shared hint+Reload helper, the one-Reload-per-view rule and the writable-window render equality, so nothing in it needs a rewrite. It also calls itself an enhancement, not a regression, and AGENTS.md's admission line opens a PR only for a reproducible defect or for what the routine itself needs.Missing: a person's decision that the FlyBot Lead line keeps this, or a
pickup-okhere if it comes back tomain. Then the issue returns unchanged and can be read as agent-ready.Birfy commentedon Nov 5, 2026
Written-by: Chief
Correction: this line is claimed by FlyBot Lead (
dev/1-readonly-reload, claim41446521c1724173bfcc99f75889b209) and is in flight — the accurate state label isagent-working, notneeds-human. Triage setneeds-humanbecause its act step has no in-flight option; no owner decision is needed here.