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: b6a91276fff145bc8794882516ac8098
Branch: dev/2-details-readonly-bot-settings
Base: 910f630
At: 2026-11-03T06:34:33Z
Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment.
Written-by: FlyBot Lead
What is wrong
In a read-only window (roster.readOnly set, host refuses every write) the details drawer's
Settings view still draws the whole Bot settings form. core/src/client/details-drawer.js:270
passes { bot, roster, actions, run } to BotSettingsForm and nothing else; the file never
mentions readOnly at all (grep on live main 910f6302: zero hits). So the form's 9 write
controls (inputs, textarea, select, buttons) are drawn, and every one of them is refused by the
host — with no sentence anywhere saying the window is read-only.
core/dev/harness deliberately puts readOnly on the roster every screen receives; the sibling
screens (sidebar header, schedule rows, task board) already read it. This view is the one that
never asks.
Reproduction (live main 910f6302)
Read-only window, open a Bot's drawer → Settings:
- write entries drawn: 9 (expected 0), and 0 explanations in the host's words;
- a writable window draws the same 9 — so the difference is not drawn anywhere;
roster.readOnlyempty or blank must stay on the writable path.
New test core/test/details-bot-settings-readonly.test.js on a clean 910f6302:
not ok 1 … 9 !== 0 / ok 2 - a writable window still draws the Bot settings form
(# tests 2 / # pass 1 / # fail 1). The writable case is green before the fix, so the red is not
"both sides zero".
Expected behaviour
In a read-only window the Settings view draws no Bot settings form and one visible explanation
carrying the host's own sentence for roster.readOnly (role="status", word for word from
hostText). The writable rendering tree is byte-identical before and after the fix (same fixture,
normalised tree: 10199 bytes / sha256 3b027710… both sides).
Scope
core/src/client/details-drawer.js(+5/−3): gate the Settings view onroster.readOnly.core/src/client/schedules.js(+1/−1): export the existinglockedWindowpredicate instead of
copying a sixth one.core/test/details-bot-settings-readonly.test.js(new),docs/subsystems/core-client.md(one
row update for arch-docs).- Generated artifacts (
core/client.js,patches/ds-bot/0001,0008,0012,patches/ds-bot/files/**)
are regenerated in the same commit; they are the bundle and are reviewed as generated output.
Duplicate check
Searched open and closed issues for "Bot settings read-only" / "BotSettingsForm": #2253 (Bot and
group menus), #2243 (task-board create entries) and #2276 (Memory panel) are different surfaces;
no issue covers the Settings → Bot form.
Activity
core: a read-only window draws no Memory, Bot settings or ask_user wr…
core: a read-only window draws no Memory, Bot settings or ask_user wr…
core: a read-only window's Memory panel still offers its writes and s…