Skip to content

Use cases

The project moves in vertical slices. Every use case reaches all the way to Python, and is considered closed when it answers every guarantee on its questionnaire.

How to read it. Each section records a decision at the moment it was taken. The argument is the point — code moved on, the reasoning did not — so what a section says is what was true when it closed, with three exceptions written down once here rather than patched into every section that predates them:

  • workers={"gpu-box": Worker.at(…)} in Graph.forward and in Trainer became broker=Broker.embedded({…}) in CU28. The shape of what is handed over is the same; what it resolves to is no longer a connection.
  • the crate called transport moved out to soma-fabric/wire, unchanged, after CU27. Paths in the questionnaires point at where the tests are today.
  • Transition, Await and Driver — a node that suspends and something that serves what it asked for — were removed after CU18. A node is a function. Sections written before that still show them; After CU18 says why they went.

what it settled
CU1creating a graphtopology only, and errors at insertion rather than in a validate()
CU2executing onethe engine is Rust, Value has a closed set of variants
CU3the shape of itPlan is an enum, and compile is the step between structure and engine
CU4fans both waysaggregation is a node reading a map; there is no Aggregator trait
CU5the DSL>> and | in both languages, and somatize is the verb
CU6 & CU7one contractone Node with one forward, in both languages
CU8Opaquea value that only exists in this process, asked for by hand
CU9wavesone thread per branch, decomposed as a tree and not flattened
CU10the devicePlacement is a fact of its own; the plan says when, not where
CU11trainingoutside the graph, and the three levels the rest rests on
CU12a workerPlan::Remote, the Transport hole, and what does not travel
CU13the cachea Merkle key over the recipe, and the Keeper hole
CU14training the far halfa trainer travels and stands beside the node
afterOpaque on the wirea codec in front of it, measured at 9–15×
afterevery=Na group of steps is one update
CU15federatedexport is weights node by node, fedavg is a function, a round is a for
CU16the grain of an iteman item’s name is its content; micro-batches are level 2
CU17level 3Partition, Pruner, Sampler — pure, and no callback crosses
CU18a study in a foldera trial is a number, claim settles it, the state is the queue
aftera node is a functionTransition and Driver had no tenant and went
CU19a graph drawnobservability is three things, and this is the first
aftera bucketthe second Store, and claim is a conditional PUT
CU20the recordthe Watcher hole; facts meet in the record, not in Rust
aftera run drawnone drawing function, live and read back
CU21the diagnosisan opinion about the record, reproducible without training again
CU22before a stepa probe is one recorded forward; what separates is a runaway
aftera block is a boxrepeats, lanes, and an arrow that left the drawing
CU23the fleetno registry; the record turned the other way up
CU24the dataa source is a node, and it is handed a coordinate
CU25not running what nobody needsnames are knowable before anything runs
CU26what an edit didtwo sets of names, and findings rather than buckets
CU27what a node was built withthe declaration goes in the key
afterthe wire leavestransportsoma-fabric/wire, and why
CU28a brokerwhich broker is a URL; ask eagerly, connect lazily
CU29provenancewhat cannot be recovered is written down when it is known