Decision log¶
Newest last. Each entry: what was decided, why, and what it rules out.
| Date | Decision | Why | Instead of |
|---|---|---|---|
| 2026-10-25 | Connect RPC (protobuf) end to end | One schema generates the Go agent, the Worker and the admin. Measured cost on the router: about 0.45 MB of flash. | Hono RPC (TypeScript only), hand-written JSON |
| 2026-10-25 | Control plane on Cloudflare Workers + D1 + Durable Objects | Cheap, no servers, realtime with hibernating WebSockets (same model as digilan). | A VM, digilan's Go nexus |
| 2026-10-25 | Go agent, cobra CLI, plain-text output with --json |
Static binary for every router CPU; CLI readable over SSH, in the web console and with screen readers. Binary named edge-agent, ea symlink, like digilan. |
A full digilan-style CLI/TUI |
| 2026-10-25 | Fleet enroll codes in generic firmware, MAC identifies the router after | One image per batch, factory reset re-enrolls by itself, codes revocable. | Per-device images only |
| 2026-10-25 | Data plane: WireGuard + VXLAN | ZeroTier's free plan is non-commercial, its API needs a paid plan ($18/month) and its controller licence forbids commercial use without an agreement. Tailscale's free plan is non-commercial too and its package (10 MB) does not fit 16 MB flash. WireGuard is in the kernel, free, fastest on weak CPUs. | ZeroTier (tested in the lab as an evaluation), Tailscale, Headscale |
| 2026-10-25 | Connection ladder, every rung tried automatically; only one side needs to be reachable | ISP boxes and connections vary widely (see the ISP guide): IPv6 pinhole, UPnP mapping, then more rungs. | Asking customers to forward ports |
| 2026-10-25 | Two WireGuard paths always up + path watcher | Failover in about 3 s instead of 146 s; leases renewed at different times. | One tunnel re-dialed on failure |
| 2026-10-25 | Confirm-or-rollback guard on every config change | A router must never need a site visit (digilan's rollback guard). | Applying and hoping |
| 2026-10-25 | No LuCI on any image | The agent owns the router's configuration; a second editor only produces changes the agent overwrites. | LuCI for debugging |
| 2026-10-25 | Debug console = one non-interactive command per request, recorded | Accessible, auditable; covers ea, logread, ifstatus, flash.sh. |
A full terminal emulator (can come later) |
| 2026-10-25 | Technician kit = the agent in a container | Reuses enrollment, realtime and the console; no third party. | Cloudflare Tunnel (possible stopgap) |
| 2026-10-25 | Admin: SvelteKit, native CSS, server-rendered forms, WCAG 2.2 AA | Light, accessible, works without JS. | A component library |
| 2026-10-26 | Admin becomes a client-side app (replaces server-rendered forms) | Server rendering made every click wait for the API (0.7-1 s). Pages now show at once; JavaScript becomes required. a11y patterns kept. | Streamed SSR (keeps no-JS, waits one round trip) |
| 2026-10-26 | Fast staff session check in the control plane, Smart Placement | Better Auth's getSession cost 0.4-0.8 s per call; each D1 query ~90 ms from the caller's colo. |
Caching sessions in the admin |
| 2026-10-26 | Either router can be the reachable one | Home behind carrier NAT is common (5G, Starlink, Free, SFR); a reachable travel side still connects. | Home-only reachability |
| 2026-10-25 | Admin cards on phones, tables on wide screens | A restyled table loses its semantics in Safari (VoiceOver). | One responsive table |
| 2026-10-25 | GitLab group jumo-router (jumo was taken), Go module gitlab.com/jumo-router/edge/agent |
||
| 2026-10-25 | Environments: dev and prd only | Small team; staging adds cost without a second team to protect. | dev/stg/prd as in lengua |
| 2026-10-25 | Secrets as suffixed group variables (ADMIN_API_KEY_DEV, _PRD) |
Environment-scoped group variables need a paid GitLab tier. | Scoped variables |
| 2026-10-25 | No Terraform yet | Wrangler creates D1 and custom domains (DNS + certificates). Terraform later for Access, WAF, R2. | Terraform from day one |
| 2026-10-25 | Hardware: not the GL-SFT1200 Opal | No official OpenWrt support (vendor 18.06 SDK, kernel 4.14). See Hardware. |