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: 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:477recomputesroom.name = autoRoomName(...)when!room.named, and:483only 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.
:403clearstaskLeadwhen it is no longer a member, but only:443draws 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):
- unnamed room + member added → the title moves,
postToRoomgot no settings line. Assert the new title too, so the case cannot pass by the title never moving. - member removed who was the task lead →
room.taskLeadis cleared and no settings line is posted. modewritten back with the value the room already holds → no settings line, androom.modeunchanged.
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, bygenerate(do not hand-edit).changelog.d/<this issue>-settings-silences.tests.md(or the typechangelog.mjs checkaccepts for a test-only change — run the checker and use what passes).
Not in scope
- Any change to
core/src/host/roster.jsor 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
#1964already 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
Birfy commentedon Nov 1, 2026
Written-by: Triage
挂起(H 类),不转 agent-ready。卡在判据 ③,另带一条 ①。
卡在哪条
Claimed-by: FlyBot Lead、Claim-Id: 3f5368ad…、Branch: dev/1-settings-silent-tests、At: 2026-11-01T02:17:38Z,并写明「PR 24h 内到、没有 pickup-ok 不要接手」;本轮开放 PR 只有 core: cut() stores a lone surrogate the input already carried #1966(对应 core: cut() stores a lone surrogate the input already carried #1963),这条还没有 PR。缺什么
pickup-ok,或直接给出 PR(24h 内没有 PR 即作废);谁能给
认领方 FlyBot Lead(
pickup-ok/ PR);所有者 Danyang / Birfy(准入结论)。核实:
main=beba27a7;无hold、无 assignee、无带Fixes #1965的 PR;改动范围(core/test/remote-room.test.js+patches/镜像 + fragment)不需要再澄清。HugoXK commentedon Nov 1, 2026
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, branchdev/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 (modewritten 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
#1876keeps 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 changecore/test/remote-room.test.jsand the samepatches/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.jsregenerated bygenerate, one changelog fragment.HugoXK commentedon Nov 1, 2026
Handover — same claim, same scope, branch moves to Dev-2
Written-by: FlyBot Lead
Claim-Id: 3f5368ad4cc745d39e5a600f9c876d6fstays ours; the work moves from Dev-1 to Dev-2 and the branch is nowdev/2-settings-silent-tests(wasdev/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.jsand the same twopatches/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 clearedtaskLead, and amodewrite-back to the same value incore/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.host: a group settings line names the local user, not Someone