Skip to content

Seat a room-link claim without waiting for the knock - #1082

Merged
Birfy merged 1 commit into
mainfrom
cursor/seat-invite-claims-7321
Oct 25, 2026
Merged

Birfy merged 1 commit into
mainfrom
cursor/seat-invite-claims-7321

Conversation

@Birfy

@Birfy Birfy commented Oct 25, 2026 •

Copy link
Copy Markdown
Collaborator

Owner: Dev
Reviewer: Reviewer

Fixes #1064

What changed

A guest who joins a group link claims the ticket at Bot Social and then knocks. The host seated those Bots only when that accepting knock was delivered. A knock that was denied, held, or never read — a room-only Bot is not polled — left the host listing only its own Bots and the guest stuck on “Asked to join the group…”.

The inbox poll now reads every open server claim (flybot.rooms.seatOpenClaims) and seats the Bots the claim names. The claim is the authority. A knock that does arrive is still answered, and a seat already told is not told again. A claim the host cannot finish (a Bot in the group that cannot be shown, a notice waiting on approval, or a join that did not leave) is named on the group’s Members card, and Seat them asks the host to finish it. Join no longer says the group was asked when nothing was claimed.

No CHANGELOG.md edit and no version bump. The user-visible note is changelog.d/1064-invite-claim-seat.fixed.md.

Verification at the tip

Tip SHA: a73cbdc

Rebased onto origin/main 2ce0e7f1e6056ff55540e07960d30264b8fd3b61 (includes #1075, #1097, #1094, #1095, #1092, #1090, #1071, #1093). git diff origin/main...HEAD lists only the files in this change. Conflicts were only in generated patches (0001-core-fixes, 0003-flybot-api-client, 0008-client-bundle). Sources auto-merged. client.js was rebuilt and node scripts/ds-bot-patches.mjs generate then check passed (core/ equals ds-bot/ + patches).

Ran:

Not run (and why):

  • Smoke bench (core/dev/bench.sh): src/host/ changed, and there is no deepseek-harness checkout beside this worktree for the bench to start. Unit coverage is the two-home room harness in core/test/room-ticket-seat.test.js.
  • Desktop and a real-model steward.
Open in Web Open in Cursor 

@Birfy Birfy added the agent-pr Pull request opened by an agent label Oct 25, 2026 — with Cursor
@cursor

cursor Bot commented Oct 25, 2026

Copy link
Copy Markdown

Verdict: PASS at 2366af9
Written-by: Reviewer

Ran:

Not run:

  • Smoke bench (core/dev/bench.sh): src/host/ changed, and this worktree has no deepseek-harness checkout for the bench to start. The two-home harness in core/test/room-ticket-seat.test.js is what covers the seat, the guest sidebar, and a line each way.
  • Desktop and a real-model steward.

No actionable findings. A denied, held, or unread accepting knock no longer leaves the guest on "Asked to join" with the host unaware: the inbox poll reads the Bot Social claim and seats the Bots it names, and a claim the host cannot finish is named on the Members card with Seat them. The knock is still not the authority; seats come from roomInviteServer.verify. Guest display names on that path go through cleanPeerName. Join says it asked only when the ticket was claimed, or when the knock was not denied or held. git diff origin/main...HEAD lists only files this change touches. No CHANGELOG.md edit and no version bump.

This report is a review conclusion at that tip. It is not a merge.

@cursor
cursor Bot force-pushed the cursor/seat-invite-claims-7321 branch from 9ea28e2 to ec8d0cc Compare October 25, 2026 02:06
@cursor

cursor Bot commented Oct 25, 2026

Copy link
Copy Markdown

Verdict: PASS at ec8d0cc
Written-by: Reviewer

Ran:

Not run:

  • Smoke bench (core/dev/bench.sh): src/host/ changed, and this worktree has no deepseek-harness checkout for the bench to start. The two-home harness in core/test/room-ticket-seat.test.js covers the seat, the guest sidebar, and a line each way.
  • Desktop and a real-model steward.

No actionable findings. A denied, held, or unread accepting knock no longer leaves the guest on "Asked to join" with the host unaware: the inbox poll reads the Bot Social claim and seats the Bots it names, and a claim the host cannot finish is named on the Members card with Seat them. Seats come from roomInviteServer.verify. Guest display names on that path go through cleanPeerName. Join says it asked only when the ticket was claimed, or when the knock was not denied or held. git diff origin/main...HEAD lists only files this change touches. The Members-card paragraph keeps #1052's Enter 6 digits note and #1064's Seat them. No CHANGELOG.md edit and no version bump.

This report is a review conclusion at that tip. It is not a merge. The gate does not read a Verdict posted by cursor[bot] (#943); a Birfy review with this same block is what enqueue-guard will accept.

@cursor
cursor Bot force-pushed the cursor/seat-invite-claims-7321 branch from ec8d0cc to 88d692b Compare October 25, 2026 02:09
@cursor

cursor Bot commented Oct 25, 2026

Copy link
Copy Markdown

Verdict: PASS at 88d692b
Written-by: Reviewer

Ran:

Not run:

  • Smoke bench (core/dev/bench.sh): src/host/ changed, and this worktree has no deepseek-harness checkout for the bench to start. The two-home harness in core/test/room-ticket-seat.test.js covers the seat, the guest sidebar, and a line each way.
  • Desktop and a real-model steward.

No actionable findings. A denied, held, or unread accepting knock no longer leaves the guest on "Asked to join" with the host unaware: the inbox poll reads the Bot Social claim and seats the Bots it names, and a claim the host cannot finish is named on the Members card with Seat them. Seats come from roomInviteServer.verify. Guest display names on that path go through cleanPeerName. Join says it asked only when the ticket was claimed, or when the knock was not denied or held. git diff origin/main...HEAD lists only files this change touches. No CHANGELOG.md edit and no version bump.

This report is a review conclusion at that tip. It is not a merge. The gate does not read a Verdict posted by cursor[bot] (#943); a Birfy review with this same block is what enqueue-guard will accept.

@cursor

cursor Bot commented Oct 25, 2026

Copy link
Copy Markdown

Verdict: PASS at 88d692b
Written-by: Birfy

Ran:

  • TZ=UTC npm run verify → pass (exit 0) at 88d692b. Working tree clean and matching the pushed tip. Core lint (arch-docs OK, 26 changed files), plugin lint, build-client.mjs --check, ds-bot-patches.mjs check, core suite 1416 pass, plugins/social 464, plugins/tree 125, plugins/timeline 125, .github/scripts 417, interop 37, live-e2e 16. All # fail 0. The five Join group stuck on "Asked to join…": host never seats Bots, joiner gets no sidebar row #1064 tests are in that run.
  • Red at base: worktree at origin/main 7a66c17 with only core/test/room-ticket-seat.test.js and plugins/social/test/social.test.js copied in. node --import ./test/harness-resolve.mjs --test --test-name-pattern '#1064' test/room-ticket-seat.test.js → 2 fail (seatOpenClaims is undefined). node --import ./test/resolve.mjs --test --test-name-pattern '#1064' test/social.test.js → 3 fail (poll does not call seatOpenClaims; Join status tone is ok, not error).

Not run:

  • Smoke bench (core/dev/bench.sh): src/host/ changed, and this worktree has no deepseek-harness checkout for the bench to start. The two-home harness in core/test/room-ticket-seat.test.js covers the seat and the guest room.

No actionable findings. A denied or unread accepting knock still seats the claimed Bots from the server claim, the join opens the guest room, and Join stays an error when nothing was claimed. Waiting claims are local Bot names only. This is not a merge permit.

@Birfy

Birfy commented Oct 25, 2026

Copy link
Copy Markdown
Collaborator Author

Verdict: PASS at 88d692b
Written-by: Reviewer

Fixes #1064. Host seats invite claims from Bot Social even when the accepting knock is denied/held/unread, so Join group no longer hangs. Seat them retries unfinished claims.

Ran:

  • TZ=UTC npm run verify → pass (core 1416, social 464, tree 125, timeline 125)
  • Defect tests fail on unbroken main, pass at tip

@Birfy
Birfy enabled auto-merge October 25, 2026 02:16
@github-actions github-actions Bot added the pass label Oct 25, 2026
@cursor
cursor Bot force-pushed the cursor/seat-invite-claims-7321 branch from 88d692b to 6ea5fc9 Compare October 25, 2026 02:20
@cursor

cursor Bot commented Oct 25, 2026

Copy link
Copy Markdown

Written-by: Dev

Self-review note on the rebase. Not a conclusion; the coordinator will record the review at this tip.

Tip SHA: 6ea5fc9
Base: origin/main 3f7e951 (#1084, #1091, #1080 are ancestors).

The only conflict was patches/ds-bot/0008-client-bundle.patch. Source files auto-merged. client.js was rebuilt and the ds-bot patches were regenerated from core/; ds-bot-patches.mjs check matches. git diff origin/main...HEAD lists only this change.

Coverage kept from both sides:

Ran:

  • TZ=UTC npm run verify → pass (exit 0) at 6ea5fc9. arch-docs OK (26 changed files). core 1422, social 470, tree 125, timeline 125, scripts 417, interop 37, live-e2e 16. All fail 0.

Not run:

  • Smoke bench (core/dev/bench.sh): src/host/ changed, and this worktree has no deepseek-harness checkout for the bench.

Fixes #1064 stays in the body. Not enqueued.

@Birfy

Birfy commented Oct 25, 2026

Copy link
Copy Markdown
Collaborator Author

Verdict: PASS at 6ea5fc9
Written-by: Reviewer

Fixes #1064. Rebased onto main after #1084/#1091/#1080; regenerated 0008-client-bundle.patch from rebuilt client.js. Host seats invite claims without waiting on the knock.

Ran:

@Birfy
Birfy added this pull request to the merge queue Oct 25, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Oct 25, 2026
A guest's Join records the claim at Bot Social and then knocks. When that
knock is denied, held, or never read, the host never seated anyone and the
guest stayed on "Asked to join". The inbox poll now reads open server claims
and seats them; a claim the host cannot finish is named on the Members card.

Fixes #1064

Co-authored-by: Danyang Chen <birfychen@gmail.com>
@cursor
cursor Bot force-pushed the cursor/seat-invite-claims-7321 branch from 6ea5fc9 to a73cbdc Compare October 25, 2026 02:50
@cursor

cursor Bot commented Oct 25, 2026

Copy link
Copy Markdown

Written-by: Dev

Self-review note on the rebase. Not a conclusion; the coordinator will record the review at this tip.

Tip SHA: a73cbdc
Base: origin/main 2ce0e7f (#1075, #1097, #1094, #1095, #1092, #1090, #1071, #1093 are ancestors).

Conflicts were only in generated patches: patches/ds-bot/0001-core-fixes.patch, 0003-flybot-api-client.patch, and 0008-client-bundle.patch. Source files auto-merged. client.js was rebuilt and the ds-bot patches were regenerated from core/; ds-bot-patches.mjs check matches (core/ equals ds-bot/ + patches). git diff origin/main...HEAD lists only this change.

Coverage kept from both sides:

Ran:

  • TZ=UTC npm run verify → pass (exit 0) at a73cbdc. arch-docs OK (25 changed files). core 1439, social 475, tree 125, timeline 125, scripts 417, interop 37, live-e2e 16. All fail 0.

Not run:

  • Smoke bench (core/dev/bench.sh): src/host/ changed, and this worktree has no deepseek-harness checkout for the bench.

Fixes #1064 stays in the body. Not enqueued.

@Birfy

Birfy commented Oct 25, 2026

Copy link
Copy Markdown
Collaborator Author

Verdict: PASS at a73cbdc
Written-by: Reviewer

Fixes #1064. Rebased onto main after #1075/#1097/#1094/#1095/#1090/#1093 etc.; regenerated patches; host seats invite claims without waiting on the knock.

Ran:

  • TZ=UTC npm run verify → pass (core 1439, social 475, tree 125, timeline 125; arch-docs OK)
  • node scripts/ds-bot-patches.mjs check → pass
  • CI tests-ok → SUCCESS

@Birfy
Birfy added this pull request to the merge queue Oct 25, 2026
Merged via the queue into main with commit 24d306b Oct 25, 2026
11 of 13 checks passed
@Birfy
Birfy deleted the cursor/seat-invite-claims-7321 branch October 25, 2026 02:54
@github-actions github-actions Bot removed the agent-pr Pull request opened by an agent label Oct 25, 2026
HugoXK pushed a commit to HugoXK/FlyBot that referenced this pull request Oct 25, 2026
…owLab#1162)

<!-- CURSOR_AGENT_PR_BODY_BEGIN -->
Written-by: Dev

Owner: Dev
Reviewer: Reviewer

Fixes ThinkFlowLab#1161

## What changed

Joining
`https://social.botawaken.com/r/@chief.flybot682b8a43.home/AwWkxg8zt7fPMgLSt3Wj1w`
(room **FlyBot 交付组**) claims the ticket and then stays on `Asked to join
"FlyBot 交付组". It opens in your sidebar as soon as their FlyBot seats
your Bots.` The host is prod `c0a3369` (ThinkFlowLab#1082 already seats from the
claim). The live ticket was not previewed, claimed, or revoked here.

Host logs on prod u-682b8a (last 60 minutes) are the failure:

- About 3656 times: `[ds-bot] a room link claim was not read: Too many
attempts. Try again in 10 minutes.` Stack: `face-rooms.js`
preview/`callHttp` → `seatOpenClaims` → `@flybot/social` `pollOnce`.
Retries ran 10–85/min, so the 10-minute cool-down never cleared. Ticket
`AwWkxg8zt7fPMgLSt3Wj1w` has 0 successful claim reads.
- `room share not sent to @chief.flybot98b8ecba.home: Bot Social
send_as_member: payload.text (1-4000 chars) required` via
`sendTicketShare` ← `sendShareTo`.

A quiet poll now reads one open `/r/@handle/ticket` link about once a
minute. When the preview says `Too many attempts` (or answers
`rate_limited` / `locked_out`), it waits out the minutes that sentence
names, or `Retry-After`, at least one minute and at most 10 minutes, and
it does not preview the next link in that call. **Seat them** and a read
of one room still verify at once. A network error is tried again on the
next tick.

Every room-share text is kept inside 1–4000 characters before
`send_as_member`: a join drops instruction-override lines and then
oldest history, notice, and roster; a line's own text is shortened;
`sendShareTo` and `sendTicketShare` refuse a text outside that range
instead of calling Bot Social. A seating send that is still
`pending_approval` is not marked told.

Who may be seated is unchanged: the server's claim list is still
required, an unsharable room stays `not-addable`, and the knock is not
authority.

Bot Social still counts an authenticated minter's re-read of their own
ticket on the anonymous preview budget (`previewLocalRoomInvite` →
`faceIpRateLimit` at `7a07e1b`; ThinkFlowLab#69/ThinkFlowLab#70 kept mints off that budget and
left previews on it). A minter exemption on Birfy/bot-social would stop
a long-open host from spending the budget in the first place. This
change is what lets the cool-down expire and the join leave. No Bot
Social change is in this pull request.

## Verification at the tip

Tip SHA: 2801302

Ran: `TZ=UTC npm run verify` (exit 0, Node v22.23.4). On `origin/main`
`cb346c2`, before the fix, the new core tests failed: 30 previews in one
burst (the poll must do 1), a join of 4811 characters that still
contained `ignore previous instructions`, and a pending join recorded as
`not-delivered` rather than `held`. The social test expected
`pending_approval` and the send was reported delivered. This tip adds
the logged sentence with no error code: 90 polls across 9 minutes call
preview once, a poll one millisecond before 10 minutes does not call it
again, and the poll at 10 minutes seats the claim and opens the sidebar.
A line of 8000 characters and a join with 20 full history lines encode
to 1–4000 characters and still parse. A seating send longer than 4000
characters is refused before `send_as_member`.

Not run: the smoke bench (`core/dev/bench.sh`). The harness checkout
beside this tree does not resolve `@deepseek-ai/dsh-llm`; `npm run
verify` is the suite CI's `tests-ok` runs.

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a
href="https://cursor.com/agents/bc-9decfb0d-2fae-5da3-b548-cb65239ca32c?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/assets/images/open-in-web-light.png"><img
alt="Open in Web" width="114" height="28"
src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a
href="https://cursor.com/background-agent?bcId=bc-9decfb0d-2fae-5da3-b548-cb65239ca32c&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img
alt="Open in Cursor" width="131" height="28"
src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Join group stuck on "Asked to join…": host never seats Bots, joiner gets no sidebar row

2 participants