Welcome, Guest | Browse

Software Factory Archive

← Previous Work All Works Next Work →

The First Pipeline

Rating:
General Audiences
Fandom:
StrongDM Software Factory
Characters:
Justin McCarthy Jay Taylor Navan Chauhan
Tags:
Attractor First Pipeline Three Nodes Origin Triumph
Words:
463
Published:
2025-10-28

Before the complex pipelines with their fan-out and fan-in, before the subgraphs and model stylesheets and condition expressions, before any of that, there was pipeline zero. Three nodes. Two edges. One simple task: generate a function that adds two numbers.

Justin wrote the DOT file himself. Not the code—never the code—but the pipeline definition. Node one: spec_reader, which ingested an NLSpec describing a function that takes two integers and returns their sum. Node two: codergen, which called Claude to generate the function. Node three: validator, which ran the generated function against a set of test inputs and checked the outputs.

Two edges. Spec reader to codergen. Codergen to validator. A straight line. The simplest possible directed acyclic graph that still did something.

First run. The codergen node called Claude. Claude generated a Python function. The validator ran it. It failed. The function returned a string instead of an integer.

"Type error," Navan said, reading the validator output.

"It didn't have a loop-back edge," Justin said. "This pipeline is fire-and-forget. One shot. Let me add a loop."

He added a third edge: validator back to codergen, with a condition of success == false. Now the pipeline could iterate.

Second run. Claude generated the function again. This time it returned an integer, but it handled string inputs by converting them, which the spec hadn't asked for. The validator flagged it as an unexpected behavior.

Third run. The function was correct for the test inputs but used a lambda instead of a named function, which the validator's name-check rejected.

"We're converging," Jay said. "Each failure is smaller than the last."

Fourth run. A named function. Two parameters. Returns their sum as an integer. The validator passed all test cases. The satisfaction score: 1.0.

The pipeline completed.

Three people sat in a room in San Mateo and looked at a terminal that displayed a single word: PASS. The function was trivial. Any first-year programmer could have written it in ten seconds. But none of them had written it. A machine had written it, guided by a three-node pipeline defined in a DOT file, after four attempts at convergence.

"That's it," Justin said quietly.

"That's not much," Jay said, but he was smiling.

"That's everything. Everything we build from here is a variation on what just happened. More nodes, more edges, more complex specs. But the pattern is identical. Describe, generate, validate, iterate. Four steps. We just watched all four."

Navan photographed the terminal with his phone. The timestamp on the photo would read July 23rd, 2025, 4:47 PM. A function that adds two numbers. Three nodes. Two edges. Four tries.

"We should frame this," Navan said.

"We should build on it," Justin said.

They did both.

Kudos: 152

factory_floor_sweeper 2025-10-30

"We should frame this." "We should build on it." They did both. Those last three lines are the best ending in the archive. The origin story deserved exactly this kind of quiet landing.

convergence_simp 2025-10-31

Four tries to add two numbers. And each failure was smaller than the last. Compounding correctness, happening in real time, on the simplest possible problem. Beautiful starting point for everything that follows.

← Previous Work All Works Next Work →