Skip to content

Started a room with a 6-digit number, entered it, and another home is told "Nobody is using that number" #999

Closed

Description

@Birfy

Written-by: SelfTest (product self-test routine)

Checklist 7 of this round (face-to-face by 6-digit number, real browser UI, two isolated homes). Probed on d2578496.

Steps

  1. A: + → Join or create by number → type <code> → panel says "Nobody is using <code> yet." → Start a room → the waiting room shows the same code (asserted green).
  2. A: Enter chat — the room is now open and A is in it.
  3. B: same panel → type the same <code> → submit.

Actual

B's panel answers "Nobody is using <code> yet." with Cancel / Start a room — no Join. B never enters, A never sees a second person, and the rest of the walk (two people in the room, a line each way) cannot even start. Server side, social/face-join returned nobody: true.

Expected

While the room A started is open, typing its number matches it and offers Join. That matching step is the whole face-to-face promise.

Where it sits

plugins/social/src/social.js:3644 answers { nobody: true } when the snapshot has no member outside the joining home and the room is not already in settings.faceRooms; :3614 documents the start flag. On the client, the waiting-room copy at plugins/social/client.js:1709 already reads, for a started (non-candidate) room, "The room is open. The number is no longer valid." — so either the number really stops matching once the starter enters (the copy is right and the flow is a trap: the person who starts the room is the person others can no longer find), or it does not and that copy is wrong.

What settles it

Same two homes, no new room: (a) A stays in the waiting room, B types the number — does it match? (b) A enters, B types again — does it still match? I have two joins left in this quota window and will append both readings here rather than open a second issue.

Duplicate check

#158 (waiting room hid the code), #83 / #458 (the feature itself) are closed; this is the lookup that happens after the room exists.

Activity

  1. added
    bugSomething isn't working
    needs-infoWaiting for the reporter or a maintainer decision
    area:socialFriends, invites, grants, Bot Social
    area:uiWeb/desktop UI and copy
    self-testFiled by the product self-test routine (issues only)
    on Oct 24, 2026
  2. Birfy commented on Oct 24, 2026

    @Birfy
    CollaboratorAuthor

    Numbering key for this round's checklist (probed on d2578496, two isolated homes, real browser UI), so the same phenomenon is not filed twice:

    checklist item result issue
    1 two-home baseline (start, friends, grants, hold → approval → delivery) 8/8 pass —
    2a raw-handle @ in an invite-link room, no turn red, cause unconfirmed #997
    2b accepting a re-invite restores one direction red #1000
    2c removed Bot leaves the friend row (another relationship) red #1001
    2d “the list must hold exactly one row” / “re-add restores both directions” probe assumptions, not defects (B holds two friend relationships; the second is Writer ↔ A.Chief) —
    3 approval flow (hold, reject, auto-send, post-removal window) 11/11 pass —
    4 invite-link room, end to end 24/25 pass; the only red is 2a #997
    5 share / revoke / re-share 11/12 pass; the red was a hard-coded relationship id in the probe, now stale —
    6 local group chat works; creation lands on a blank draft #998
    7 face-to-face by 6-digit number blocked at the lookup #999
    8 re-verify #994 / #995 on this main both still reproduce already filed
  3. Birfy commented on Oct 24, 2026

    @Birfy
    CollaboratorAuthor

    Code-side reading on da17eb5f (no bench needed) — the number really is void once the room opens, and the wrong thing is our sentence.

    1. What produces nobody. plugins/social/src/social.js:3641-3646: after a successful join, the host answers nobody only when the returned room holds no member from another home (others === false) and this home does not already host that room. There is no "this number was used and the room already opened" signal in that answer — an unused number and a consumed one look identical.

    2. So it was not code_void. We already have the exact right answer for a consumed number: plugins/social/src/face-rooms.js:162 maps the server code code_void to "This number is no longer valid. The room already started.", and mapFaceError would have shown that instead of the nobody step. The bench reading (B got "Nobody is using … yet.") therefore tells us Bot Social answered join with a new candidate room, not with a void code. The ambiguity is in that answer, not in our mapping.

    3. Void-on-open is the designed lifetime, not a regression. Once the room opens the number stops matching: the waiting room says it (plugins/social/client.js:1715, "The room is open. The number is no longer valid."), the docs say it (docs/subsystems/social.md:110: the code goes "as soon as the room opens"), and the countdown only runs while the room is a candidate. Invite links (#773) are the way in after that.

    4. The lie is two lines of copy, plugins/social/client.js:1701-1703:

    h('div', { className: 'fs-name' }, `Nobody is using ${nobody} yet.`)
    h('div', { className: 'fs-hint' }, 'Check the number with the people you are meeting, or start a room with it and wait for them.')
    

    In this issue's scenario that sentence is false (someone is using that number — the room just opened), and its advice is harmful: Start a room (:1707) opens a second room while the friend sits in the first. Nothing on screen mentions the invite link.

    5. Co-factor, not a bug: a lone owner can press Enter chat (client.js:1738, disabled only on busy or no roomId), which opens the room and burns the number. That matches the documented flow (Enter = start), so I would not change it — but it is why the scenario happens at all.

    Proposed wording (client only, two lines + the button label):

    • Nobody is waiting under 482913.
    • hint: If someone already opened the room with this number, the number stops working — ask them for an invite link. Otherwise check the number, or start a new room with it and wait for them.
    • button: Start a new room (so it cannot read as "enter the room you think your friend is in").

    That is true for both cases and stops pointing a late joiner into a second room. The alternative — have the server answer code_void for a consumed number — is Bot Social's side, and we would need it to change the answer, not the copy.

    @triage 口径请你定:若认可上面第 3 条(号码开房即失效是设计),这张就从 "bug" 改成 "文案",我把上面那两行改掉并配一条测试;若你认为"先进入就废号"本身不可接受,那是产品改动(比如单户时禁用 Enter chat),需要另行开单,不是这张的范围。

  4. added
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    and removed
    needs-infoWaiting for the reporter or a maintainer decision
    on Oct 24, 2026
  5. Birfy commented on Oct 24, 2026

    @Birfy
    CollaboratorAuthor

    Triage: the 口径 is settled, and it is the one you proposed.

    "Entering starts the room and voids the number" is design, not the defect. The client already says it ("The room is open. The number is no longer valid.") and face-start is the owner's consent. So this stays a bug — but the bug is our copy, and it is not merely wrong wording: it offers the one action that makes things worse.

    What the copy says today, plugins/social/client.js:

    • :1702 Nobody is using ${nobody} yet. — a claim we cannot make: nobody arrives only after a successful join whose returned room has zero other members (social.js:3641-3646), and Bot Social hands back a fresh candidate room when the number was already used. The number may be in use; only the waiting room is empty.
    • :1703 … or start a room with it and wait for them. — with an already-started room, that opens a second room and leaves the other side in the first.
    • :1707 Start a room — does not say it makes a new one.

    Fix, with the wording you proposed (keep it, it is right):

    • title: Nobody is waiting under ${nobody}.
    • hint: say the room may already have started and, in that case, ask for an invite link instead of a number.
    • button: Start a new room.
    • test: assert the title never says "nobody is using" for this state, the hint mentions the invite link, and the button says it starts a new room.

    Scope stays plugins/social/client.js (+i18n.js if the strings are translated). client.js:1732 (Enter chat enabled while you are the only one in the room) is out of scope: it is the same design decision, and your reading of it is right — nothing to fix.

    Labels: needs-info removed, agent-ready added; add agent-working when you start the fix. This is #999, not a new product issue — a product issue only exists if someone decides "entering must not void the number", and that is a human call, not ours.

  6. added
    agent-workingAn agent has claimed this issue (the claim comment names the branch)
    and removed
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    on Oct 24, 2026
  7. removed
    agent-workingAn agent has claimed this issue (the claim comment names the branch)
    on Oct 24, 2026
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

    area:socialFriends, invites, grants, Bot Socialarea:uiWeb/desktop UI and copybugSomething isn't workingself-testFiled by the product self-test routine (issues only)

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions