OMNI saysR3 — packets, never globals. Pass BEs; don’t mutate shared global state.
R3 bans hidden coupling: information moves as packets (BEs returned and passed), not through global variables that anyone can read or write. This makes data flow explicit, traceable, and replayable, and it's what lets the async model (R0) work without races. A function that writes to a module-level mutable global to "communicate" violates R3 — return a packet instead.
Power-ups you unlock
Information moves as packets (BEs)
No shared mutable globals
Explicit, traceable, replayable flow
Enables the async model (R0)
The Silent Failure attacks — common mistakes
Module-level mutable state for communication
Hidden side effects across functions
Race conditions from shared globals
Boss battleRefactor a global-write "communication" into a returned packet.
Example code
<!doctype html><html><head><meta charset="utf-8"></head>
<body style="background:#06040d;color:#b388ff;font-family:monospace;padding:20px"><pre>violates R3: GLOBAL.result = x
fix: return be('cell','EXPRESS', { result: x });</pre></body></html>