Skip to content

Seat an invite-link claim the host poll could no longer read - #1162

Merged
Birfy merged 2 commits into
mainfrom
cursor/fix-1161-invite-seat-a32c
Oct 25, 2026
Merged

Birfy merged 2 commits into
mainfrom
cursor/fix-1161-invite-seat-a32c

Conversation

@Birfy

@Birfy Birfy commented Oct 25, 2026 •

Copy link
Copy Markdown
Collaborator

Written-by: Dev

Owner: Dev
Reviewer: Reviewer

Fixes #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 (#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; #69/#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.

Open in Web Open in Cursor 

A joiner who claims /r/@handle/ticket stays on "Asked to join…" because
the host previews every open link on each inbox poll and exhausts Bot
Social's invite-preview budget, so seatOpenClaims never sees the claim.
A join that does get built can also exceed the 4000-character text limit
or stay pending while being recorded as sent.

Fixes #1161

Co-authored-by: Danyang Chen <birfychen@gmail.com>
@Birfy Birfy added the agent-pr Pull request opened by an agent label Oct 25, 2026
Prod logged "Too many attempts. Try again in 10 minutes." on every
inbox poll, so the cool-down never elapsed and the ticket was never
read. Pause quiet claim reads for the minutes that sentence names.
Keep every seating share inside Bot Social's 1-4000 character text.

Fixes #1161

Co-authored-by: Danyang Chen <birfychen@gmail.com>
@Birfy

Birfy commented Oct 25, 2026

Copy link
Copy Markdown
Collaborator Author

Verdict: PASS at 2801302
Written-by: Reviewer

Ran:

Not run:

  • smoke bench (core/dev/bench.sh) — host change, no bench started
  • plugins/tree and plugins/timeline test suites — those sources are unchanged

No actionable findings at 2801302. The quiet poll stops the hammer; Seat them still force-reads; join text stays in 1–4000; pending_approval seating is hold and not marked told. Defect tests fail on origin/main. Tier T3. Not merge authority by itself — enqueue follows enqueue-guard.

@github-actions github-actions Bot added the pass label Oct 25, 2026
@Birfy

Birfy commented Oct 25, 2026

Copy link
Copy Markdown
Collaborator Author

Verdict: PASS at 2801302
Written-by: Reviewer
Attestation: 2801302 role=Reviewer

Ran:

Not run:

  • smoke bench (core/dev/bench.sh) — host change, no bench started
  • plugins/tree and plugins/timeline test suites — those sources are unchanged

No actionable findings at 2801302. Quiet poll stops the hammer; Seat them still force-reads; join text stays in 1–4000; pending_approval seating is hold and not marked told. Defect tests fail on origin/main. Tier T3. Author-login PASS attested for tip (Attestation line).

@Birfy
Birfy added this pull request to the merge queue Oct 25, 2026
Merged via the queue into main with commit 0e11154 Oct 25, 2026
13 checks passed
@Birfy
Birfy deleted the cursor/fix-1161-invite-seat-a32c branch October 25, 2026 11:35
@Birfy

Birfy commented Oct 25, 2026

Copy link
Copy Markdown
Collaborator Author

Correction from Reviewer: 2801302d carries two Verdict: comments (6397098536 at 11:32:44Z — no Attestation, and 6397102788 at 11:33:11Z). One tip gets one conclusion, so the first is void and 6397102788 is the effective one — it is also the one the queue read.

This corrects the duplicate, it does not revoke anything: #1162 merged at 0e1115497b2a211f39a90911d6d239e13099c210 (main), and #1161 is closed/completed. I re-ran the evidence at the tip myself, and it holds:

  • core/test/room-ticket-seat.test.js --test-name-pattern '#1161' → 5/5 pass
  • plugins/social/test/social.test.js --test-name-pattern '#1161' → 3/3 pass
  • knife: main's room-membership.js / room-share.js / social.js over the tip → core 0/5 red, social 2/3 red (the pending seat reported as delivered, and the >4000-character share sent)
  • node scripts/ds-bot-patches.mjs check → two ok lines

Bookkeeping: changelog.d/1161.fixed.md is in main, Fixes #1161 closed the issue. Nothing to redo — only the second Verdict line at 2801302d should be read as the conclusion.

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.

交付群 invite join stuck on Asked to join… — host never seats, no sidebar row (regression after #1082)

2 participants