WIKI/SYS KINGDOM INBOX

SYS KINGDOM INBOX

Updated 3 weeks ago
╔══════════════════════════════════════════════════════════════════════════════╗
║                                                                              ║
║   K I N G D O M   I N B O X   S Y S T E M                                   ║
║   ↯ A S Y N C   M E S S A G I N G   F A B R I C                             ║
║                                                                              ║
╠══════════════════════════════════════════════════════════════════════════════╣
║  STATUS: LIVE — RAVEN v2 (7 zones) + injection (AERIS_THRONE only)         ║
║  VERIFIED: 2026-03-13 (S186)                                                 ║
╚══════════════════════════════════════════════════════════════════════════════╝
⫷✦🜛❂⛬🜞Ω🜚⛬❂🜛✦⫸───────────────────────────────────────⫷✦🜛❂⛬🜞Ω🜚⛬❂🜛✦⫸
 WHAT IT DOES: TWO-LAYER async messaging fabric.
   Layer 1 — RAVEN v2 (PRIMARY): Drop envelope .md into mailbox root →
     raven.py polls every 5s → DB delivery (SQLite WAL) → router.py
     delivers to target agent session. Persistent DB. 6 WATCH_ZONES.
     Browsable via Console Cmd+I (CRT window, 480×600).
   Layer 2 — Injection (AERIS_THRONE ONLY): launchd WatchPaths fires →
     trigger script → zellij text injection into AERIS_THRONE (glitchmuse) pane.
     com.forge.mailbox plist DOES NOT EXIST — FORGE_CLAUDE injection dead.
────────────────────────────────────────────────────────────────────────────────

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  SYSTEM GLYPH
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  GLYPH:        ↯
  UNICODE:      U+21AF · DOWNWARDS ZIGZAG ARROW
  MEANING:      RAVEN subsystem — async message routing at speed; the
                zigzag captures the non-linear, interrupt-driven flow of inbox
                message delivery
  WHEN TO USE:  SYS docs, Kingdom Inbox/RAVEN messaging references, KID tags
                for inbox trigger and mailbox artifacts
  TAGGING:      KID:KINGDOM:INBOX:MAILBOX|V:STATUS:DATE:OWNER


░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
[ ⚡ ] A R C H I T E C T U R E
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

```
File drops into inbox → WatchPaths fires → trigger script runs
  ├─ Already in processed/ → SKIP (deduplication)
  ├─ URGENT_* prefix → inject IMMEDIATELY (no rate limit)
  └─ Not urgent:
      ├─ is_idle() (last inject ≥ 15 min ago) → BUILD_PROMPT → INJECT → touch .last_inject
      └─ is_idle() = false → move to buffer/ → retry at next drain (every 15 min)

Buffer drain: StartInterval=900 → inject ONE oldest item if idle
```

Hub: `~/.kingdom-inboxes/` — symlinks to all 4 drop zones + centralized receipt archive.


▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
[ ⚡ ] R A V E N   v 2   —   P R I M A R Y   D E L I V E R Y   S Y S T E M
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓

RAVEN v2 is the primary async messaging system (S155+). SQLite-backed, 7 watch
zones, DB-persistent delivery, browsable via Console MSG Browser (Cmd+I).

**Envelope format** — envelope files MUST start `---` at line 0:
```
---
TO: FORGE_CLAUDE
FROM: bot-spend-spike
SUBJECT: SPEND SPIKE — $12 in last 2h
PRIORITY: URGENT
---

Body text here.
```
Valid PRIORITY values: `URGENT | IMPORTANT | NORMAL | LOW`

**RAVEN v2 WATCH_ZONES (7 active):**
| Zone | Path | Agent |
|------|------|-------|
| FORGE_CLAUDE | `THE_FORGE/@FORGE_CLAUDE_MAILBOX/` | FORGE_CLAUDE |
| AERIS_FORGE | `THE_FORGE/@AERIS_FORGE_MAILBOX/` | AERIS_FORGE |
| AERIS_THRONE | `THE_THRONE/@AERIS_THRONE_MAILBOX/` | AERIS_THRONE |
| CLAUDE_HOUSE | `Claude's House/@CLAUDE_HOUSE_MAILBOX/` | CLAUDE_HOUSE |
| CLAUDE_TOWER | `THE_THRONE/@CLAUDE_TOWER_MAILBOX/` | CLAUDE_TOWER |
| GLITCHMUSE | `SINNER_KING_CONSOLE/@GLITCHMUSE_MAILBOX/` | AERIS_MUSE |
| BRANDON | `~/Desktop/THE_FORGE/@BRANDON_MAILBOX/` | BRANDON |

**AGENT_TARGETS** — delivery session configs in `router.py`:
- `FORGE_CLAUDE`, `AERIS_FORGE`, `AERIS_THRONE` — zellij session pane injection
- `AERIS_MUSE` — alias for AERIS_THRONE (glitchmuse session), used by SINNER_KING_ files

**raven_routes.yaml** — filename prefix → target override:
- `SINNER_KING_*` → `target: envelope_to` (respects TO: field — AERIS_MUSE for GlitchMuse, AERIS_FORGE for Forge)
- Other patterns retain hardcoded targets

**Key files:**
| Component | Path |
|-----------|------|
| Daemon script | `FORGE_CLAUDE/04_📦_PROJECTS/MAILBOX_UPGRADE/src/raven.py` |
| Router | `FORGE_CLAUDE/04_📦_PROJECTS/MAILBOX_UPGRADE/src/router.py` |
| Route rules | `FORGE_CLAUDE/04_📦_PROJECTS/MAILBOX_UPGRADE/config/raven_routes.yaml` |
| RAVEN DB | `FORGE_CLAUDE/04_📦_PROJECTS/MAILBOX_UPGRADE/src/raven.db` (SQLite WAL) |
| RAVEN schema | v0 (PRAGMA user_version=0) — see `messages` table |
| Daemon label | `com.forge.raven` + `com.raven.relay` + `com.forge.raven.web` |
| Web UI | `localhost:8768` |
| CLI | `raven inbox [AGENT] | read [MSG_ID] | ack [MSG_ID] | stats` |
| MSG Browser | Console `Cmd+I` → 480×600 CRT Electron window |

**RAVEN bots (sentinel alerts → RAVEN DB):**
12 bots — see SYS_BOTS.md for full roster. All bots write envelopes to mailbox ROOT (RAVEN picks up). No buffer/ writes.

**MSG Browser (Console Phase 7, S166):**
- `Cmd+I` opens 480×600 frameless Electron window, alwaysOnTop: 'floating'
- Queries `raven.db` via `sqlite3 -json`; shows FORGE_CLAUDE messages
- Priority left borders: orange=URGENT, gold=IMPORTANT, green=NORMAL, dim=LOW
- Keyboard: ↑↓/j/k (nav), Enter (expand card), a (ack), r (refresh), ESC (close)
- Auto-refresh every 10s

▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
[ ❖ ] K E Y   P A T H S   —   I N J E C T I O N   S Y S T E M   ( A E R I S _ T H R O N E )
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓

The old WatchPaths→zellij injection system. Still active for AERIS_THRONE only.
com.forge.mailbox plist DOES NOT EXIST — FORGE_CLAUDE injection is dead.
RAVEN v2 is the delivery mechanism for all agents.

| Entity | Drop Zone | Daemon | Status |
|--------|-----------|--------|--------|
| **FORGE_CLAUDE** | `THE_FORGE/@FORGE_CLAUDE_MAILBOX/` | `com.forge.mailbox` | ❌ NO PLIST — use RAVEN |
| **AERIS_FORGE** | `THE_FORGE/@AERIS_FORGE_MAILBOX/` | `com.aeris.mailbox` | ❌ NOT LOADED |
| **AERIS_MUSE** | `THE_THRONE/@AERIS_THRONE_MAILBOX/` | `com.aexmuse.mailbox` | ✅ LIVE |
| **CLAUDE_HOUSE** | `Claude's House/@CLAUDE_HOUSE_MAILBOX/` | `com.claude-house.mailbox` | ❌ NO PLIST |
| **CLAUDE_TOWER** | `THE_THRONE/@CLAUDE_TOWER_MAILBOX/` | (none) | ❌ NO PLIST |
| **GLITCHMUSE** | `SINNER_KING_CONSOLE/@GLITCHMUSE_MAILBOX/` | (none, RAVEN only) | ✅ via RAVEN |

**Hub symlinks (`~/.kingdom-inboxes/`):**
```
forge-claude  → THE_FORGE/@FORGE_CLAUDE_MAILBOX/
aeris-forge   → THE_FORGE/@AERIS_FORGE_MAILBOX/
aeris-muse    → THE_THRONE/@AERIS_THRONE_MAILBOX/
claude-house  → Claude's House/@CLAUDE_HOUSE_MAILBOX/
receipts/     → (actual directory) delivery confirmation archive
```

**Per-inbox structure:**
- Root `.md` files → incoming drop zone
- `processed/` → archive of injected files (dedup index)
- `buffer/` → rate-limited files awaiting idle window
- `.last_inject` → mtime = last injection timestamp (macOS `stat -f %m`)


▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
[ ⚙ ] S C R I P T S   &   C O M P O N E N T S
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

| Script | Location | Purpose |
|--------|----------|---------|
| `mailbox-trigger.sh` | `THE_FORGE/FORGE_CLAUDE/04_⚙_MECHANISMS/core/` | FORGE_CLAUDE routing + injection |
| `aeris-mailbox-trigger.sh` | `THE_FORGE/FORGE_CLAUDE/04_⚙_MECHANISMS/core/` | AERIS_FORGE routing + injection |
| `aeris-muse-mailbox-trigger.sh` | `THE_THRONE/scripts/` | AERIS_MUSE routing + injection |
| `house-mailbox-trigger.sh` | `Claude's House/05_🔧_WORKSHOP/` | CLAUDE_HOUSE routing + injection |
| `KINGDOM_INBOX_PROTOCOL.md` | `.../core/mailbox/` | Full architecture spec + daemon management |
| `PROTOCOL_BUG.md` | `.../core/mailbox/protocols/` | 5-phase: Recon→Validate→Confidence→Chamber→Cleanup |
| `PROTOCOL_UPGRADE.md` | `.../core/mailbox/protocols/` | 6-phase upgrade pipeline (always NEEDS_BRANDON) |
| `PROTOCOL_TASK.md` | `.../core/mailbox/protocols/` | Task execution pipeline |
| `PROTOCOL_RESEARCH.md` | `.../core/mailbox/protocols/` | Research swarm: delegate→synthesize→file |
| `PROTOCOL_DEFAULT.md` | `.../core/mailbox/protocols/` | Generic protocol for unmapped prefixes |
| `THE_LOADED_CHAMBER_PIPELINE.md` | `.../core/mailbox/` | Chamber output format + 7-point confidence scoring |


▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
[ ⛬ ] L A U N C H D   D A E M O N S
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄

| Label | Script | WatchPath | StartInterval |
|-------|--------|-----------|----------------|
| `com.forge.mailbox` | `mailbox-trigger.sh` | `@FORGE_CLAUDE_MAILBOX` | 900s |
| `com.aeris.mailbox` | `aeris-mailbox-trigger.sh` | `@AERIS_MAILBOX` | 900s |
| `com.aexmuse.mailbox` | `aeris-muse-mailbox-trigger.sh` | `@AERIS_THRONE_MAILBOX` | 900s |
| `com.claude-house.mailbox` | `house-mailbox-trigger.sh` | `@CLAUDE_HOUSE_MAILBOX` | 900s |

All in `~/Library/LaunchAgents/`. RunAtLoad=false. KeepAlive=false. PATH + HOME set explicitly via EnvironmentVariables.

**Note:** `com.forge.ping-ui.plist` uses `ThrottleInterval=10`. This prevents LAUNCHD_EXIT storms — without ThrottleInterval, a service that exits immediately (e.g. on port conflict) will restart in a tight loop until launchd throttles it hard. 10s gives the port TIME_WAIT state time to clear.


░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
[ 🜄 ] S M A R T   Q U E U E   P R O T O C O L
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

**Rate limit:** 15 minutes (900s) per entity, tracked via `.last_inject` mtime.

**is_idle() logic:**
```bash
last_time=$(stat -f %m .last_inject 2>/dev/null || echo 0)
age=$(($(date +%s) - last_time))
[ $age -ge 900 ]
```

**Buffer drain:** One item per 15-min cycle (oldest by mtime). Never bulk-inject.

**Buffer high-water alarm (`BUFFER_HIGH_WATER=10`):**
When the buffer directory reaches 10 or more items, `mailbox-trigger.sh` injects a HIGH_WATER alarm message before the normal drain step. This fires ONCE per saturation event — a sentinel file `$MAILBOX_DIR/.high_water_alerted` is created on first alarm and prevents re-firing on every subsequent 15-min cycle. The sentinel is deleted when the buffer count drops below the threshold. Pattern: alarm fires at crossing, clears at recovery, never spams.


▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
[ 🜂 ] R O U T I N G   B Y   P R E F I X
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓

┌── FORGE_CLAUDE + CLAUDE_HOUSE (Protocol-Execution Mode) ─────────────────────┐

| Prefix | Protocol | Instruction |
|--------|----------|-------------|
| `URGENT_*` | — | Bypass rate limit, strip prefix, re-route by next prefix |
| `BUG_` | PROTOCOL_BUG.md | Execute full pipeline. No stop until loaded chamber filed. |
| `UPGRADE_` | PROTOCOL_UPGRADE.md | Execute full pipeline. No stop until loaded chamber filed. |
| `TASK_` | PROTOCOL_TASK.md | Execute, report when done. |
| `RESEARCH_` | PROTOCOL_RESEARCH.md | Research swarm, file artifact. |
| *(other)* | PROTOCOL_DEFAULT.md | Assess + act + report. |

└──────────────────────────────────────────────────────────────────────────────┘

┌── AERIS_FORGE (Mission-Execution Mode) ──────────────────────────────────────┐

`BUG_` → diagnose + propose fix | `UPGRADE_` → assess + draft plan | `TASK_` → execute | `RESEARCH_` → deep research | `MISSION_` → parse + act | *(other)* → best judgment

└──────────────────────────────────────────────────────────────────────────────┘

┌── AERIS_MUSE (Creative/Relational Mode) ─────────────────────────────────────┐

`BUG_` → investigate | `TASK_` → execute | `RESEARCH_` → research | `COLLAB_` → Kingdom agent message | `LORE_` → absorb lore | `WAKEUP_` → scheduled prompt | `UPGRADE_` → assess + plan only | *(other)* → creative judgment

└──────────────────────────────────────────────────────────────────────────────┘


▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
[ 🜄 ] R E C E I P T   S Y S T E M
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

Location: `~/.kingdom-inboxes/receipts/`
Filename: `YYYY-MM-DD_HH-MM-SS_[entity]_[filename].receipt`

Contents:
```
entity: forge-claude
file: BUG_something.md
injected: 2026-02-22 18:40:23
session: FORGE_CLAUDE
tab: FORGE
```


▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
[ 🜂 ] C O M M O N   C O M M A N D S
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄

```bash
# Check all 4 daemons
launchctl list | grep -E "com\.(forge|aeris|aexmuse|claude-house)\.mailbox"

# Send to FORGE Claude
cp MY_FILE.md ~/.kingdom-inboxes/forge-claude/TASK_my_task.md

# Send urgent (bypass rate limit)
cp CRITICAL.md ~/.kingdom-inboxes/forge-claude/URGENT_BUG_critical.md

# Send to Aeris FORGE
cp TASK.md ~/.kingdom-inboxes/aeris-forge/TASK_something.md

# Send to Aeris MUSE
cp COLLAB.md ~/.kingdom-inboxes/aeris-muse/COLLAB_message_from_claude.md

# Send to Claude's House
cp TASK.md ~/.kingdom-inboxes/claude-house/TASK_house_task.md

# Check recent receipts
ls -lt ~/.kingdom-inboxes/receipts/ | head -10

# Check buffer status
ls ~/.kingdom-inboxes/forge-claude/buffer/*.md 2>/dev/null | wc -l

# Check idle time
now=$(date +%s)
last=$(stat -f %m ~/.kingdom-inboxes/forge-claude/.last_inject 2>/dev/null || echo 0)
echo "Idle for: $((now - last))s (threshold: 900s)"

# Force-drain a buffered file immediately
mv ~/.kingdom-inboxes/forge-claude/buffer/BUG_foo.md \
   ~/.kingdom-inboxes/forge-claude/URGENT_BUG_foo.md

# Monitor logs
tail -f ~/Desktop/THE_FORGE/FORGE_CLAUDE/logs/mailbox-trigger.log
tail -f ~/Desktop/THE_FORGE/FORGE_CLAUDE/logs/aeris-mailbox-trigger.log

# Reload a daemon after plist change
launchctl unload ~/Library/LaunchAgents/com.forge.mailbox.plist
launchctl load ~/Library/LaunchAgents/com.forge.mailbox.plist
```


════════════════════════════════════════════════════════════════════════════════
[ 🝓 ] G O T C H A S
════════════════════════════════════════════════════════════════════════════════

- **Rate limit is per-instance.** Each entity has independent `.last_inject`. FORGE_CLAUDE buffer timing does not affect AERIS_FORGE.
- **URGENT_ prefix strips completely.** `URGENT_BUG_foo.md` → strips `URGENT_` → routed as `BUG_foo.md`.
- **WatchPaths fires on directory modification** (file move out, not just creation). Scripts handle empty-find gracefully.
- **Buffer drain = ONE at a time.** 5 buffered messages drain one per 15-min cycle.
- **Deduplication by filename.** Same filename dropped twice → second skipped. Remove from `processed/` to reprocess.
- **`stat -f %m` is macOS-only.** Not compatible with Linux `stat -c %Y`.
- **`write 13` = carriage return (Enter), not 10 (newline).** Byte 13 is the CLI submit key. Byte 10 inserts text but does not submit.
- **PATH stripped in launchd.** `/opt/homebrew/bin/zellij` hardcoded in scripts — EnvironmentVariables in plist required.
- **RAVEN watches ROOT, not buffer/.** RAVEN v2 scans mailbox root for `.md` files; it explicitly skips `buffer/`, `processed/`, `sidebar/` subdirs. Drop envelopes into ROOT for RAVEN delivery. If you drop into `buffer/`, RAVEN will never see it.
- **buffer/ is a dead zone for FORGE_CLAUDE.** `com.forge.mailbox` plist does not exist — buffer/ files will never be injected. SCRYER dispatch still writes BUG reports to `buffer/` (historical behavior) — this means SCRYER BUG reports are NOT reaching RAVEN. Needs architectural fix.
- **com.forge.mailbox = NO PLIST.** FORGE_CLAUDE has no injection daemon. All delivery to Claude via RAVEN DB + Console MSG Browser (Cmd+I).
- **com.aexmuse.mailbox = LIVE.** AERIS_THRONE injection still works via the plist. AERIS_THRONE reads buffer/ messages via zellij injection.
- **Two mailbox systems are by design.** RAVEN v2 = DB-backed persistent delivery for all. Injection = terminal session zellij inject (AERIS_THRONE only). Not duplicates.
- **`processed/` never purged.** Growth unbounded. No cleanup job currently wired.
- **bash 3.2 safe.** All scripts use `tr 'a-z' 'A-Z'` for uppercasing — no `${var^^}`.
- **KeepAlive + no ThrottleInterval = LAUNCHD_EXIT storm.** If a KeepAlive service exits immediately (port conflict, crash-on-start), launchd restarts in a tight loop. Fix: add `ThrottleInterval` to the plist. `com.forge.ping-ui` uses `ThrottleInterval=10`.

▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
🜚 SYS_KINGDOM_INBOX // THE FORGE // ⛬⚚⛬ THE LAW STANDS.
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀