You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A burst of writes to one cold document can answer busy and apply nothing. Should it wait instead? Decide from production data first.
Acceptance
On or after 2026-10-12, the maintainer posts sum(increase(document_content_apply_total{outcome="busy"}[14d])). Also post the same query filtered to mode=~"blocks|text", which is MCP only.
If the count is small, close this issue as not planned. Today's text already says "Retry in a few seconds." (writeResult in documentTools.ts)
If the count is not small, post one ruling: A (name the wait in the tool text and in docs/mcp/reference.md §Limits), B (retry once inside the tool), or C (keep a cold room loaded briefly). Open a new issue for B or C.
Facts
withDocumentLock and WS_APPLY_DEADLINE_MS (20 s) live in hocuspocusApply.ts and types.ts.
Production runs two hocuspocus-server replicas. Each has its own lock, so a one-process local burst does not predict production.
Raising the deadline gains little: it must stay below the 30 s hop timeout.
Parent
#328. Related: #229, #329.
Question
A burst of writes to one cold document can answer
busyand apply nothing. Should it wait instead? Decide from production data first.Acceptance
sum(increase(document_content_apply_total{outcome="busy"}[14d])). Also post the same query filtered tomode=~"blocks|text", which is MCP only.writeResultindocumentTools.ts)docs/mcp/reference.md§Limits), B (retry once inside the tool), or C (keep a cold room loaded briefly). Open a new issue for B or C.Facts
withDocumentLockandWS_APPLY_DEADLINE_MS(20 s) live inhocuspocusApply.tsandtypes.ts.hocuspocus-serverreplicas. Each has its own lock, so a one-process local burst does not predict production.busyrefusal is counted only astool-errortoday. If the ruling is A, reuse the outcome argument that Refuse a connected-app rewrite of a section that holds media #329 adds torefuse()to countbusyapart.Out of scope
Any change to the #229 lock before the ruling.