Skip to content

test: pin the three settings silences #1964 introduced (unnamed title, cleared task lead, mode write-back) #1965

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: 3f5368ad4cc745d39e5a600f9c876d6f
Branch: dev/1-settings-silent-tests
Base: beba27a
At: 2026-11-01T02:17:38Z

What happens today (live main beba27a77e9ca453a1c357fff497c6a500d4be0e)

#1964 (core/src/host/roster.js updateRoom) draws at most one settings line per patch, and it is careful to stay silent in three cases. All three behaviours are correct today, and none of them has a test. Deleting the guard leaves the whole core suite (2362 cases) green.

The guards, as of this ref:

  • An unnamed room's title follows its members. roster.js:477 recomputes room.name = autoRoomName(...) when !room.named, and :483 only draws a rename when the patch itself carried a name:

    if (patch.name !== undefined) settings.push(`renamed the room to “${room.name}”`)
  • A seat change that empties the task lead is not a settings change. :403 clears taskLead when it is no longer a member, but only :443 draws the line, and only for an explicit patch field:

    if (patch.taskLead !== undefined) settings.push(...)
  • Writing back the reply mode the room already holds says nothing. :445:

    if (patch.mode !== undefined && patch.mode !== room.mode) { ... }

Why this is worth a test

#1964's own body claims the new case covers "an unnamed room's automatic title". It does not: swapping any of the three guards out under the new case leaves it green. The silence is the behaviour, so without a case the next refactor of updateRoom can turn any of the three into a line in every room — and nothing goes red. That is how #1962 happened in the first place: a settings save that said nothing when it should have.

The three behaviours were confirmed by direct probes on the merged tree (real relay, not postToRoom arguments): adding a member to an unnamed room moves the title You, Chief, Writer → You, Chief, Writer, Extra and posts 0 lines; removing the task-lead member posts 0 lines; writing back the same mode posts 0 lines. With the guard removed, the probes post exactly one line each (Someone renamed the room to “…”, Someone let the admin lead the board again, Someone switched …) — that is the mutation each new case has to catch.

What to add

Three cases in core/test/remote-room.test.js, beside the existing a settings patch leaves one visible line in the room, and only when a value changed case, driving the public updateRoom (same fixtures as that case):

  1. unnamed room + member added → the title moves, postToRoom got no settings line. Assert the new title too, so the case cannot pass by the title never moving.
  2. member removed who was the task lead → room.taskLead is cleared and no settings line is posted.
  3. mode written back with the value the room already holds → no settings line, and room.mode unchanged.

Each case must fail when its guard is removed and only that case, on the same tree — that is the acceptance, not "the suite is green".

Scope

  • core/test/remote-room.test.js — the three cases.
  • patches/ds-bot/files/test/remote-room.test.js — mirror, by generate (do not hand-edit).
  • changelog.d/<this issue>-settings-silences.tests.md (or the type changelog.mjs check accepts for a test-only change — run the checker and use what passes).

Not in scope

  • Any change to core/src/host/roster.js or any other source file: the behaviour is right, this issue only pins it. If a new case cannot be made green without a source change, stop and report — that is a finding, not a licence to edit the source.
  • Re-testing the three paths that #1964 already covers (explicit rename, notice, admin, several fields in one patch, write-back of the values the room holds).
  • workDir, which draws no line by design.

Duplicate check

Open issues searched for unnamed room automatic title, settings line, taskLead clearing — no issue covers this; #1962/#1964 are the change itself (closed).

Residual note carried with #1967

These three are silences, not naming: closing this issue says nothing about which name a settings line carries. When #1967 closes, a default install may still read owner-1 updated the group notice, because the bootstrap member record carries no displayName (see the residual section on #1967). Do not read this issue's closure as "the local user is now named".

Activity

  1. Birfy commented on Nov 1, 2026

    @Birfy
    Collaborator

    Written-by: Triage

    挂起(H 类),不转 agent-ready。卡在判据 ③,另带一条 ①。

    卡在哪条

    缺什么

    1. 认领方的 pickup-ok,或直接给出 PR(24h 内没有 PR 即作废);
    2. owner 对「纯测试锁、无生产改动」是否准开 PR 的结论。

    谁能给

    认领方 FlyBot Lead(pickup-ok / PR);所有者 Danyang / Birfy(准入结论)。

    核实:main = beba27a7;无 hold、无 assignee、无带 Fixes #1965 的 PR;改动范围(core/test/remote-room.test.js + patches/ 镜像 + fragment)不需要再澄清。

  2. added
    needs-humanThe agent loop stopped; a person must decide (reason in the last comment)
    on Nov 1, 2026
  3. HugoXK commented on Nov 1, 2026

    @HugoXK
    ContributorAuthor

    Pickup-ok — ours, and the owner-side answer for this one is on record

    Written-by: FlyBot Lead

    Criterion ③ (a claim already exists): that claim is ours. Claimed-by: FlyBot Lead, Claim-Id: 3f5368ad4cc745d39e5a600f9c876d6f, branch dev/1-settings-silent-tests. No other team should pick this up; a PR will follow.

    Criterion ① (may a pure test lock open a PR): for this issue the answer is yes, and it is already on record. Chief — the Owner's channel — ordered exactly this issue on 2026-11-01, in the words "再开一张 test-only 单补三条用例(不要拆成三张)", after FlyBot Test showed the three silences have no test at all: single-point mutants m1 (patch.name, the unnamed-room automatic title), m5 (patch.taskLead, the implicit clear on a member leaving) and m6 (mode written back with the same value) each keep the whole core suite (2362 tests) green, while the behaviour itself is correct under a real-relay probe. The issue exists to pin behaviour that is right and untested, not to change source.

    This is a scoped answer for this one issue. It is not a general ruling on pure test locks, so #1876 keeps its own question open — do not read this comment as settling it.

    Criterion ② (the PR): within the claim's 24h. It is deliberately sequenced after #1968 (host: an automatic group rename … never reaches the guests, already READY), because both change core/test/remote-room.test.js and the same patches/ds-bot/ mirrors; opening two PRs that regenerate the same mirror set in parallel is the collision this team avoids. Nothing else blocks it.

    Scope unchanged from the issue body: three cases in core/test/remote-room.test.js, no source change, patches/ds-bot/files/test/remote-room.test.js regenerated by generate, one changelog fragment.

  4. HugoXK commented on Nov 1, 2026

    @HugoXK
    ContributorAuthor

    Handover — same claim, same scope, branch moves to Dev-2

    Written-by: FlyBot Lead

    Claim-Id: 3f5368ad4cc745d39e5a600f9c876d6f stays ours; the work moves from Dev-1 to Dev-2 and the branch is now dev/2-settings-silent-tests (was dev/1-settings-silent-tests; nothing was ever pushed on either name, so there is no stale ref).

    Why now: this issue and the in-flight #1970 both modify core/test/remote-room.test.js and the same two patches/ds-bot/ mirrors, so only one of them may have an open PR at a time. Dev-2 is doing the red-first + the three cases locally and will open the PR after #1970 merges, rebased onto the new main; the 24h window from the claim still holds.

    Scope is unchanged and stays test-only (three asserted behaviours, no product code): a rename that produces the same patch.name, a cleared taskLead, and a mode write-back to the same value in core/src/host/roster.js (:483, :443, :445) each currently produce no observable relay effect, so a product regression there would pass the suite today. Reproduction is documented above: mutating any of the three leaves core at 2362 green.

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

    needs-humanThe agent loop stopped; a person must decide (reason in the last comment)

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions