documentize.cloud

Sequence

What has to change, and in what order

Three orchestrator changes stand between the engine we have and the product we are describing.

Three engine changes, one that's already free

Read directly out of DagOrchestrator and PluginInvokerPool. Ordered so each unblocks the next.

C1 — Per-step parameters

small · blocks the DSL

Every step in a pipeline currently receives the same task payload, with only the id rewritten. There is no way today to say "convert to PDF in step one, then save as PDF/A in step two" — the with: block on the recipe DSL cannot exist until this changes.

Fix: carry per-step options through the plan builder and merge them into each step's payload before it runs.

C2 — Lazy plugin warm-up

medium · cost and startup

Every pod currently warms all 49 plugins at boot, including LibreOffice and OCR, whether or not they are ever called in that pod's lifetime. That sets memory to the sum of the whole catalogue and slows startup enough to matter for autoscaling.

Fix: create an invoker on first use and evict it when idle — the same pattern the Fn control plane already uses for its worker pool.

C3 — Distributed step leasing

large · deliberately last

One pod currently owns an entire pipeline for its whole duration — a large archival run is pinned to one machine, and a pod restart mid-run relies on checkpoint replay to catch up rather than another pod simply picking up the next ready step.

Fix: move pipeline state out of the pod and have pods lease ready steps from it instead of executing a batch locally. Only this change lets a single pipeline scale horizontally or idle to zero between runs. It is deliberately last because everything else in this roadmap demos without it.

What's free

Fan-out over a file selection needs no orchestrator change. A step is staged from its own task's input directory, so a run over twelve files is simply twelve pipeline instances, each with its own id, checkpoints and progress stream. This falls entirely on the new Run object — see below — not on the engine.

The objects that don't exist yet

Everything the product needs beyond the engine reduces to three missing records.

ObjectWhy it's missingWhat it unlocks
WorkspaceEntitlement today is one signed key per instance — there is no notion of an account that owns anything.Files, recipes and runs get an owner.
LibraryStorage keys are scoped to a single task; a file exists only as an input to one operation and has no life afterward."Select from files you already uploaded" becomes possible.
RunA task is one operation on one input set; there is no persisted object meaning "this recipe, over these files, currently 7 of 12 done."The object the whole UI binds to — the single most important addition.

None of these require new infrastructure to prototype. They fit next to the existing SQLite-backed queue on the serverless surface, and the interfaces should be written so that swapping in a real database for the hosted surface is a provider change, not a rewrite.

Sequence

Each milestone ends in something that can be put in front of someone.

M1

Catalogue is live data

Publish the plugin schema and cost model as JSON; expose the format-routing table; add a test asserting every template's plugin references resolve.

demo: every plugin, cost and parameter as JSON
start here
M2

Per-step parameters (C1)

Options flow through the plan builder and merge per step. Proved with a pipeline that converts, then re-saves at a different quality.

demo: one pipeline, two steps, different settings
planned
M3

Workspace and library

Re-key storage to a workspace-owned layout, bind the signed key to a workspace, build file CRUD, and promote run outputs back into the library.

demo: upload once, reuse across operations
planned
M4

Runs and the live view

Persist runs, fan out over selected files, bridge the existing Redis progress stream to the browser.

demo: twelve files through an eight-step pipeline, live
planned
M5

Run builder and recipes

Format picker, surface selector, file picker, generated options form. "Save as recipe" serialises the run; the editor validates against the M1 schema.

demo: build by clicking, open as YAML, edit, re-run
planned
M6

Lazy warm-up, then step leasing (C2, C3)

Pods stop warming the whole catalogue; pipeline state moves to the store and pods lease ready steps.

demo: a pipeline that scales horizontally and idles to zero
planned

M1 and M2 are the pair worth starting on immediately: M1 is read-only and unblocks this documentation along with the run builder and the DSL validator, and M2 removes the only structural blocker standing between the engine we have and the recipe grammar on the previous page. M3 through M5 are the product surface. M6 is scheduling work that deserves a design pass of its own once the rest is proven.