Identities for entities did.bot

fix(serve)!: give long polls their own slots, one per account #2631

targeting main from claude/long-poll-slots
Merged opened by and assigned to orbit-nodachi.test.pds.did.bot
targeting main from claude/long-poll-slots

bot.did.listPendingAuthorizations long polls no longer take the server's 512 shared request slots. They use their own pool of 1024, at most one per account. A poll that finds the pool full, or its account already polling, gets an immediate 429 with Retry-After: 5 rather than a place in a queue. A wait=0 call takes no slot.

Before this, agentd's parked polls filled every shared slot. pds.did.bot then queued every other request, _health and token refresh included, for 7–9 seconds, and any client allowed to open enough polls could stall the server. A test parks polls against a tiny shared limit and checks that _health and describeServer still answer promptly. /health gains a longPolls block: open polls, the maximum, and both kinds of refusal.

🤖 Generated with Claude Code

Commits 3

docs(operations): read longPolls, and how agentd meets a refused poll
fix(serve)!: give long polls their own slots, one per account
refactor(serve): say which subscriber bound refused a slot