The Control-Feedback Loop is how a CAT Node operationalizes its Architectural Quantum as a Minimal Federated Operating Model. The Ordering of Execution that is Invoiced into a Bill-Of-Materials loop is the Node's runtime realization of the Quantum Architecture Description in the README Function / Process / InfraFunction and Structure / Plant / InfraStructure are independently content-addressed halves of one deployable Data Product unit.
- The "Architectural Quantum" is a Minimal Federated Operating Model that adheres to Domain-Driven Design principles
- The "Node" consumes an "Order" containing an input "Invoice" of input data to be processed as well as the Architectural Quantum's functional domain components that process Invoiced data; The content of the Order CID to be processed by the Node's "Factory" consists of the following: (*)
- A. the CID-ed input Invoice as is within
data/input/data/* - B. the CID-ed Architectural Quantum's functional domain components:
- a. "Function [FaaS]" consists of "Process [Composed Function]" and "InfraFunction [Actuator]" as its dependency
- Function [FaaS] (as Code) is CID-ed for which the contents consist of CIDs for Process [Composed Function] and InfraFunction [Actuator]
- Process [Composed Function] is the composed callable graph (FaaS-composer analogue): transport port callables —
integration_cachealways receives Function-ownedTransportPort;ingress/egressreceiveTransportPortwhennum_partitions == 1(default) and also Function-ownedIoPortwhenCATS_IO_PARTITIONS>1(Plant-backed partitioned CAR layout) — plus a Higher-Order Transfer Function / hotF (integrated_subproc— Plant-agnosticComputePort.run_transfer; this demo’s Structure wiresRayComputePort/RayIoPortunderplant_cid). Process transport callables takeinput_dir_id(Order ABI §6j); Ray I/O jobs useinput_id/layout_id. Process itself is the composition, not a hotF and not the notebook UI; peering mutate is Structure TF (ipfs_transport_peering/TransportContext.ensure_peered), not Process heal. Orders are authored via the REPLaC (REPL as Code) Workflow UI of Function [FaaS] (this demo: Marimo). Compose with named imports of the Process public surface only (neverimport *).
- b. "Structure [PaaS]" is Function's infrastructure dependency and consists of "Plant [SaaS]" and Plant's "InfraStructure [IaaS]" infrastructure dependency
- Structure [PaaS] (as Code) is CID-ed for which the contents consist of Plant [SaaS] and InfraStructure [IaaS] CIDs
- a. "Function [FaaS]" consists of "Process [Composed Function]" and "InfraFunction [Actuator]" as its dependency
- A. the CID-ed input Invoice as is within
- The Node's "Factory" processes an Order to produce "Executor" of an Architectural Quantum by composing Function [FaaS], constructing Structure [PaaS], then instantiating Executors with Function [FaaS] & Structure [PaaS] as its dependencies / parameters
- The Executor is a composition of Architectural Quantum execution that executes and Invoices the ephemeral execution of the Architectural Quantum.
- A. the Executor executes the aforemention composition as a Function [FaaS] executing on Structure [PaaS]: transport port callables run locally with a narrowed
TransportPort(and PlantIoPortwhenCATS_IO_PARTITIONS>1); InfraFunction [Actuator] dispatches the hotF onto Plant viaPlantPort(Plant.plant_port()→RayPlantPortfor this demo) with scratch viaObjectStore/JobHandle; in-job entrypoint wiresComputePort - B. the Executor Invoices the ephemeral execution of the Architectural Quantum by producing a content-addressed Invoice containing the original Order ref, the output Data (
data_uri), interim stage refs (ingress_data_uri,integration_data_uri), and a (non-deterministic processing) Seed (Function/Process replay dictionary) — Seed is populated (seed_uri→{seed, rng_seed, num_partitions}, minted fresh per execution; #187); stage refs on the Invoice remain the interim feedback surface for data products (whenCATS_IO_PARTITIONS>1, those ids may be partition-layout directory roots ofpart-*.carfiles — still one content id per stage)
- A. the Executor executes the aforemention composition as a Function [FaaS] executing on Structure [PaaS]: transport port callables run locally with a narrowed
- The Node produces a CID-ed BOM — a JSON-LD + PROV-O envelope (
build_execution_bom) containing an CID-ed Invoice (withstructure_as_executed_cidnesting observed Plant / ObjectStore state), CID-ed Executor execution "logs", andnode_didattribution, then signed with a Data Integrity proof (sign_execution_bom,eddsa-jcs-2022/ Nodedid:keykeyfile; Flask HTTP bind stays on Node lifecycle, not the BOM) (*). Full Nest tree:BOM.mdCAT Node HTTP BOM response.
- 2. The Order is intended to be consumed from within a "BOM" hosted on a registry; i.e. - discovered via that BOM's Invoice
order_uri/ equality id rather than supplied out-of-band. A Node-local BOM registry (BomRegistryunder{CATS_HOME}/.cats/registry/) indexes verified ExecutionBoms onRuntime.execute(fail closed).POST /cat/node/initacceptsorder_uri, orbom_uri/bom_ldp_uri/bom_solid_uri/ uniquecontent_id/data_urito resolve the Order via the index (GET /ldp/registry/…). Legacyorder_cid/bom_cid/data_cid→ 400. Ambiguous data → 409 with candidatebom_ids. Mesh-global federation of the index remains deferred. Full contract:BomRegistry.md. - 4B. Seed holds the Function/Process replay dictionary (
seedidentity hex, Process/NumPy-usablerng_seedint, observednum_partitions); Invoice carries Order + output data +seed_cidalongside the still-useful interim stage CIDs.num_partitionsis recorded on Seed each run, not yet read from it — envCATS_IO_PARTITIONS(demo) remains the interim selector ofnuntil the Executor resolvesnfrom Seed / a prior BOM's lineage (Option B follow-on; seeTODO.md) - 5. BOM content ids (and locator /
*_urifields) are published into the Node-local registry on execute for future Order consumption /link*lineage (BomRegistry.md); Solid dual-write of registry records remains later. CAS locator maps (by-content/) and Phase 2b dual-field*_uriare landed.
