JA_Available
// ENGINEERING NOTES

Writing

Architecture decision records from building AutoFlow — each one written down before the code: what I chose, what it cost, and why.

FEATURED · AUTOFLOW · ADR-0006 · SECURITY

Expressions are parsed, not evaluated

Workflow expressions are user-supplied strings running in a multi-tenant system that holds every customer's credentials. So AutoFlow never evaluates them — it parses each one into a path and resolves it against the run context. No eval, no new Function, no vm.

2026-08-02 · 3 min readRead on GitHub
Showing 8 of 8 notes
2026-08-02ADR-0002Inngest as the durable execution runtimeRuns must survive process death and resume without repeating side effects — without us operating a queue, workers and a scheduler.Architecture2 min2026-08-02ADR-0004Envelope encryption for credentialsA per-credential AES-256-GCM key, wrapped by a master key that never touches the database — and no read path for plaintext at all.Security3 min2026-08-31ADR-0011Node types are retired by deprecation, never by deletionA saved workflow stores its node type ids forever, so deleting one breaks yesterday's runs. Retirement is a three-step lifecycle instead.Architecture4 min2026-09-01ADR-0015The SSRF guard owns redirect followingThe egress guard vetted the first URL and fetch followed the rest — one 302 away from cloud metadata. Now every hop goes back through the guard.Security3 min2026-09-01ADR-0016Two-stage execution retention now; partitioning laterOne five-minute, eight-node workflow writes ~2,300 node executions a day. Retention ships now; partitioning waits behind a trigger.Data & reliability4 min2026-09-03ADR-0020Code node sandbox: worker thread + node:vm, hard caps, no host bindingsUser code runs in a dedicated worker with a fresh realm, no require or network, and loud limits on time and memory.Security6 min2026-09-03ADR-0024Polling triggers: at-least-once with dedupe, and no history replay18 of 35 reference automations start with “when a new X appears”. The first poll sets a baseline; overlaps are de-duplicated in one place.Data & reliability5 min2026-09-03ADR-0025Binary payloads by reference, never by value12 of 35 reference automations move a PDF, image or video between nodes. Serialised into the run context, a 3 MB invoice fails the run — so files travel as references.Data & reliability5 min
// WHAT'S NEXT

Let's build something
great together

Have a role, a project or just an idea? My inbox is open.