Skip to content

core: a read-only window's Settings → Bot still draws the Bot settings form and says nothing about why #2279

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: 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.readOnly empty 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 on roster.readOnly.
  • core/src/client/schedules.js (+1/−1): export the existing lockedWindow predicate 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.

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