Loom Charter Annotation
This page records architectural amendments to the original Loom charter (2026-04-14-loom-charter.md) without rewriting it. The original document remains authoritative for everything not annotated below; the Fabric charter (2026-05-03-fabric-charter.md) explicitly positions itself as the Phase 10b plus 14 expansion of Loom, not a replacement.
Loom Decisions #2 through #13 are intact. Decision #1 is annotated.
Decision #1 (annotated)
Original text (Loom charter §3):
Vercel edge function is the front door for
optimal.miami. Eliminates Pi as single point of failure for the public URL. Stateless proxy, globally replicated, free tier. Reads Supabaseopenclaw_instancesto pick a healthy compute node and routes through Tailscale.
Status: SUPERSEDED by Fabric Phase 10b (Hetzner cloud control plane), 2026-05-04.
The original decision scoped a tiny stateless proxy on Vercel's edge whose only job was to remove the Pi as the SPOF for optimal.miami. That goal is achieved by Phase 10b, but the implementation is materially different and considerably larger:
- Front door is a Hetzner CX32 in US-East, not a Vercel edge function. Public hostname is
fabric.optimal.miami(Pi'soptimal.miamiis intentionally untouched until DNS cutover, which is deferred to Phase 14 platform takeover). - The "front door" is no longer stateless. It hosts the Bun server, JWT issuer, WebSocket multiplex, vault API (ciphertext-only), session router, and (Phase 14) MOTHER's cockpit-side proxy. Plain
wsplus NDJSON plus JWT inSec-WebSocket-Protocolplus device-dials-out. Devices dial OUT to the cloud; cloud has no inbound device port. Reference impl pattern:dzhng/claude-agent-server. - Cloudflare Tunnel from Hetzner, orange-cloud DNS, CF DDOS plus WAF in front. Per Fabric Decision #14 the user pays Cloudflare for protection; this is locked.
- State of record stays Supabase managed for v1 (Fabric Decision #7), with
loom_job_queueandopenclaw_instancesre-used across the Loom and Fabric workloads. Self-host Supabase is queued for Phase 15-1 if and when scale demands it.
Why the change
Two May-2026 OOM blackouts and sustained 86 °C thermal throttle on the fanless Pi 5 made it clear that the Pi cannot remain the optimal.miami origin under sustained load. The original Vercel-edge proxy decision was correct for "remove the SPOF" but did not anticipate the wider Fabric scope: paired-device routing, multi-harness session lifecycle, vault API, and cockpit hosting. A stateless edge function is not the right shape for any of those.
Hetzner CX32 at €5.83/mo gives the cloud plane:
- a real compute target (2 vCPU, 7.6 GB RAM) instead of a per-request edge function with a 10-second budget
- a stable public IP and persistent disk for the JWT signing key, vault ciphertext cache, and Loom run history
- room to host self-hosted Supabase, n8n, Strapi, and Phoenix in Phase 15 without changing the front-door architecture
What survives unchanged
- Decision #2 (Tailscale is the private transport). Devices that hold sensitive credentials still talk over Tailscale. Cloud is the switchboard, not the warehouse, per the XFER convention.
- Decision #3 (Supabase is the source of truth). Workflows, runs, instances, tasks, capability tags, and the new vault tables all live on the existing managed Supabase project (
hbfalrpswysryltysonm). - Decision #4 (one full OptimalOS instance per compute node). Hetzner runs one. The Pi runs one. Each holds its own SQLite cache. Losing a node loses nothing.
- Decisions #5 through #13 (workflows are TypeScript modules, agent-authored, vertical strand orientation, capability tags route work, etc.). All intact. Fabric layers on top; it does not replace the Loom workflow shape.
Loom hub-lease repurposed
A small but consequential amendment that touches Loom directly: loom_workflows.role='hub' is repurposed in Fabric to mean "which paired device runs MOTHER." One paired device per install holds MOTHER (the parent AI on the highest-RAM device). The user explicitly OK'd a Loom rewrite if it reads cleaner; today the existing hub-lease semantics are sufficient.
This is documented in the post-Wave-1 amendments section of ~/.optimalos/transfers/fabric-design/03-decision-ledger.md.
Where to read the unchanged charter
- Original Loom charter:
~/.openclaw/workspace/optimalOS/docs/superpowers/specs/2026-04-14-loom-charter.md(still the source of truth for Decisions #2 through #13 and for everything Loom does today: workflow shape, scheduler, operations registry, run history, agent-first authoring, cross-node dispatch, OpenClaw cron mirror). - Fabric charter (the supersession):
~/.openclaw/workspace/optimalOS/docs/superpowers/specs/2026-05-03-fabric-charter.md. - Decision ledger (locked decisions plus post-Wave-1 amendments):
~/.optimalos/transfers/fabric-design/03-decision-ledger.md. - Fabric overview (the "what got built and where it lives" view): Fabric.
What did not change
This annotation is narrow on purpose. Loom's day-to-day surfaces are unaffected:
- Loom strands still author and observe the same way (see Authoring a Strand and Workflow Anatomy).
- The cron mirror still runs every 5 minutes (see OpenClaw Cron Mirror).
priority-triageanddocs-drift-checkare unchanged (see their respective reference pages).- Cross-node dispatch via
loom_job_queuestill elects target hosts the same way (see Cross-Node Dispatch).
If you are looking for the practical Loom usage docs, this annotation is not the page you want. Read the Overview and the workflow-anatomy pages instead.