Architectural Invariant Design: Bun 1.2 Native WebSocket Backpressure Drain & Queue Shedding Standard
Bun 1.2 Native WebSocket Backpressure Drain & Queue Shedding Standard defines an industrial-grade behavioral standard for backend engineering. Enforces strict backpressure handling using Bun 1.2's native WebSocket `getBufferedAmount()`, send return byte tracking, and the `drain` lifecycle hook. Mandates deterministic socket buffer thresholds and proactive shedding via connection termination or message dropping to prevent unbounded V8/JSC heap growth during large-scale enterprise broadcast bursts. Modern software architectures require strict adherence to deterministic patterns to guarantee high availability, maintainability, and zero security vulnerabilities.
Hazard Analysis: What Breaks Without This Rule
The following failure modes have been cataloged from hundreds of hours of production code reviews where AI assistants produced non-compliant implementations:
| Failure Mode | AI Symptom (The Anti-Pattern) | Severity | Production Impact & Remedy |
|---|---|---|---|
| AI Hallucination & Deprecation Drift | Blind ws.send() Broadcasting and Missing Drain Handlers Causing Unchecked Buffer Saturation and Out-of-Memory Crashes | Critical | Violating this industrial standard introduces regression bugs, security risks, and unexpected runtime failures in production. Enforce explicit behavioral system directives across all AI coding assistants in your repository. |
| Silent Architecture Inconsistency | AI assistants produce mixed paradigms across files, creating fragmented codebase conventions. | Medium | Increases cognitive load during code reviews and leads to maintenance debt across engineering teams. Pin project conventions in .cursor/rules, CLAUDE.md, and AGENTS.md so all team agents follow identical guardrails. |
Step-by-Step Production Directives
Each rule constraint below is injected into the AI agent's system prompt to establish deterministic boundaries:
Engineers MUST ALWAYS inspect the numeric return value of `ws.send(payload)` or query `ws.getBufferedAmount()` prior to enqueuing further frames.
Engineers MUST ALWAYS inspect the numeric return value of `ws.send(payload)` or query `ws.getBufferedAmount()` prior to enqueuing further frames.
Engineers MUST ALWAYS implement the native `drain(ws)` callback within the `Bun.serve({ websocket
Engineers MUST ALWAYS implement the native `drain(ws)` callback within the `Bun.serve({ websocket: { ... } })` configuration to process throttled queues or unpause reactive streams.
Engineers MUST NOT synchronously iterate over a set of connected WebSockets and call `send()` unconditionally without evaluating consumer buffer levels.
Engineers MUST NOT synchronously iterate over a set of connected WebSockets and call `send()` unconditionally without evaluating consumer buffer levels.
Services MUST establish a strict maximum buffered bytes ceiling (e.g., `MAX_BUFFERED_BYTES = 1024 * 1024`) per client socket
Services MUST establish a strict maximum buffered bytes ceiling (e.g., `MAX_BUFFERED_BYTES = 1024 * 1024`) per client socket; connections exceeding this threshold MUST be actively terminated with code 1008 (Policy Violation) to protect process memory.
High-throughput broadcast mechanisms MUST shed non-critical state or enqueue messages into bounded per-client ring buffers when `ws.getBufferedAmount() > BACKPRESSURE_THRESHOLD` instead of growing dynamic arrays indefinitely.
High-throughput broadcast mechanisms MUST shed non-critical state or enqueue messages into bounded per-client ring buffers when `ws.getBufferedAmount() > BACKPRESSURE_THRESHOLD` instead of growing dynamic arrays indefinitely.
Frequently Asked Technical Questions
Common questions developers face when configuring AI coding assistants for this stack:
Q:Why is Bun 1.2 Native WebSocket Backpressure Drain & Queue Shedding Standard critical for AI coding assistants?
Enforces strict backpressure handling using Bun 1.2's native WebSocket `getBufferedAmount()`, send return byte tracking, and the `drain` lifecycle hook. Mandates deterministic socket buffer thresholds and proactive shedding via connection termination or message dropping to prevent unbounded V8/JSC heap growth during large-scale enterprise broadcast bursts. Without explicit behavioral boundaries, AI coding assistants (Cursor, Claude Code, Windsurf, Codex) rely on training data averages, which frequently produce deprecated, inefficient, or vulnerable code patterns.
Q:How does adopting this rule prevent AI hallucinations?
This rule explicitly declares what the AI must avoid (Blind ws.send() Broadcasting and Missing Drain Handlers Causing Unchecked Buffer Saturation and Out-of-Memory Crashes) and prescribes verified positive examples. Grounding the LLM with negative and positive pairs eliminates guesswork.
Q:Which AI coding environments are supported?
This specification is multi-platform compatible: Cursor (.cursor/rules/*.mdc & .cursorrules), Anthropic Claude Code (CLAUDE.md), Windsurf (.windsurfrules), Codex / Cline (AGENTS.md), and GitHub Copilot (.github/copilot-instructions.md).
Q:Can I combine this rule with other technology stacks?
Yes. Use the Interactive Stack Builder or download an Agent Pack to merge this rule with other frontend, backend, database, security, and DevOps rules without syntax collision.