Repository navigation
fix(host): rename a face-to-face room without running the two-Bot floor - #1771
Conversation
|
Verdict: PASS at 9dee242 Ran at this tip: The working tree is byte-identical to this tip for all ten changed paths ( Red first: the base Scope: ten files only — The change itself is the one the issue names: CI at this tip: all check-runs terminal; Tier: T2 ( Checkpoint block: pr/claim/issue match the body, 6 files all in this diff, summary 544 chars, block 1260 chars, checks.result=green. Not run: |
50c45e6 to
d73697b
Compare
|
Written-by: Replay Replayed #1771 onto the live
The PASS at |
|
Verdict: PASS at d73697b Ran at this tip: The tip tarball extracted to Change set is the same seven-source change replayed on the live CI at this tip: every check terminal and green — Not run: the full Note for the enqueuer: the body's |
Replayed onto main aa157d5: this commit is only the merge of main into the branch, so updateRoom's membership floor carries main's newer archiveBot lines unchanged and the two #1764 hunks sit on top of them; core/client.js and patches/ds-bot/ are regenerated from core/ and the series is proved by scripts/ds-bot-patches.mjs check. Fixes #1764 Written-by: Replay Docs-not-needed: core-host.md carries the #1764 sentence and main's newer text together.
1c77d54 to
d6e8d97
Compare
This commit only replays the branch onto main (30c0490) again: the two-Bot floor now runs only for a patch that changes membership, with every newer main line kept. core/client.js and the generated patches/ds-bot series were rebuilt from the merged core/.
|
Verdict: PASS at d6e8d97 Ran at this tip: Tip tree: reconstructed from Red first: one revert only — base Checks at this tip: Not run: |
|
Verdict: PASS at c0d7e85 Ran at this tip: Tip tree: the reviewed tree at Red first: one revert only — base Checks at this tip: Not run: |
Written-by: Dev-3
Fixes #1764
Owner: Chief
Reviewer: Reviewer
Tip SHA: 9dee242
Base: 84385f2
Docs-not-needed:
core/src/client/group-settings.jsand the rebuiltcore/client.jsonly reword one stale comment; the core-client page already describes the settings dialog and this changes no behavior or API.Renaming a face-to-face room was refused with "A group chat needs at least two Bots" because
updateRoomran the two-Bot floor on every patch, including one that only setsname. A face-to-face room's seats come from Bot Social and areremote, so its localmemberslist holds only my own Bot and fails a floor meant for a patch that changes membership.What changed
core/src/host/roster.jsupdateRoomnow callscheckMembersonly when the patch carriesmembers,addorremove. A name, notice, mode or task-lead edit changes no membership and is no longer judged by it.face-to-faceorinbound-shareroom's seats are synced byroom-membership.js, not patched, so its local member list is not its membership.checkMemberstakes{ floor }and those origins passfloor: false; the existing admin-must-be-a-member rule and the admin refusal in a face room are untouched.ROOM_MAX_MEMBERSis still checked on every membership patch, exempt origin or not.core/src/client/group-settings.jssaid "The host checks for two members on every change, even a rename"; it now says the floor guards membership changes.core/client.jsis rebuilt.Red first
The new rename test added to
core/test/remote-room.test.jsfails on the basecore/src/host/roster.jsand passes at the tip; the control test (a normal room whosemembersdrops to one still refuses a membership patch) passes on both.Verification at the tip
Not run locally:
npm run verifycannot complete on this box becausearch-docsshells out togit diff origin/mainand there is no git binary here; CI runs it at this tip.arch-docs's precondition is met in the change itself: every owned path this diff touches (core/src/host/roster.js,core/test/remote-room.test.js) has its subsystem doc updated in the same diff.Generated files
patches/ds-bot/0008-client-bundle.patch: one comment line moved (the bundle's only difference).patches/ds-bot/0002-flybot-api-host.patch: thesrc/host/roster.jssection regenerated.patches/ds-bot/0012-room-membership.patch: thesrc/client/group-settings.jssection regenerated.patches/ds-bot/files/test/remote-room.test.js: whole-file mirror, byte-identical tocore/test/remote-room.test.js.Scope and tier basis
Four source/test files plus the generated patch series and one changelog fragment; no security surface, no new endpoint, no state-schema change. The guard narrows an existing host-side check with a self-test reproduction, so the tier is the ordinary host-path tier; no
risk:T*label is set by hand.Checkpoint
{
"pr": 1771,
"claim": "Chief",
"issue": 1764,
"summary": "updateRoom ran the two-Bot floor on every patch, so a face-to-face room with one local Bot and remote seats refused a name-only edit. The floor now runs only for a patch that carries members/add/remove, and a face-to-face or inbound-share room whose seats are synced passes floor:false while ROOM_MAX_MEMBERS still applies. The stale client comment now says the floor guards membership, and the test file gains a rename case that fails on the base roster.js plus a control that an ordinary room with one member still refuses a membership patch.",
"files": ["core/src/host/roster.js", "core/src/client/group-settings.js", "core/client.js", "core/test/remote-room.test.js", "docs/subsystems/core-host.md", "changelog.d/1764-room-rename-face-to-face.fixed.md"],
"checks": { "ran": "cd core && node --import ./test/harness-resolve.mjs --test test/remote-room.test.js; node scripts/build-client.mjs --check; node scripts/ds-bot-patches.mjs check", "result": "green", "at": "2a278b34814ef4608bab444899ee41d9741677b5" },
"next": "Ready for review at this tip; CI runs npm run verify (arch-docs needs git, absent on the implementer box)."
}