← Journal

W14 — Jobs promoted into the flow runtime

The reorganization of the year. Every legacy job promoted into the flow runtime. 35k +LOC, 19k −LOC, the largest net code movement of the project. ComfyUI workflow skill, flow loops, workflow boundary nodes, constants runtime — all in seven days.

Tools axiom-enginecomfyuisvelte-flow

The largest week by raw code volume. Most of it isn’t new features — it’s the convergence of the two execution engines (jobs and flows) into a single substrate.

What shipped

The jobs-into-flows promotion

A 17k-LOC commit that took every legacy linear job and re-expressed it as nodes in the flow runtime. Up until this week, jobs and flows were parallel implementations with overlapping concerns; after this week, they were the same thing with two surfaces. The cron pipeline editor became a curated subset of the flow builder; the flow builder gained every skill the jobs system had accreted.

Workflow boundary nodes + constants runtime

Flow inputs and outputs as proper typed boundary nodes, not implicit conventions. A constants runtime so values can be defined once and referenced across an entire flow without serialization gymnastics. 2k LOC.

ComfyUI workflow skill

A 21k-LOC drop wiring ComfyUI workflows into the cockpit as first-class flow nodes. Image and video pipelines now compose with chat, jobs, and storage. Storage nodes, a UI→API converter, display improvements all rode along.

Flow loops + condition evaluation

528 LOC, but easily the most architecturally important change of the week. Loops in the flow runtime turn the graph from a DAG into a proper computation surface. Combined with condition evaluation, the runtime became Turing-complete in any practical sense.

Jobs node title formatting

A small but high-touch quality-of-life: when a flow node represents a particular job, its title surface variant + reactive job-name sync. The kind of detail that makes the canvas feel alive.

Flow runtime cache + trigger semantics tightening

End-of-week consolidation. Caching boundaries, trigger semantics, idempotency. The kind of work that nobody asks for but that quietly raises the floor.

Architecture moves

The jobs-promote-into-flows decision was the second-biggest architectural call of the project (after the original Svelte cutover). It cost a week of pure refactor; in return, the cockpit stopped having two ways to express a pipeline. Every skill, every trigger, every retry curve now lives in one place. New surfaces (the chat-as-tool work in W15, the Telegram bridge in W18) all hung off the same skill registry.

The other lasting decision was making loops first-class. A pipeline language without loops is a pipeline language for trivia; with loops it becomes a control surface for actual recurring work.

By the numbers

  • 9 commits
  • +35,627 / −18,886 (net +16,741)
  • 8 milestone-class drops, including the project’s largest single commit (21k +LOC for ComfyUI)

What’s next

Stabilize. The next two weeks are about polish and consolidation after this much movement.