Merge pull request 'Design 47 follows ADR 0656 and ADR 0644: the delivery's own parts checked and delivered by their own change (issue 1921)' (#523) from docs/47-two-graphs into main

This commit was merged in pull request #523.
This commit is contained in:
2026-11-06 20:42:02 +00:00
2 changed files with 999 additions and 32 deletions
+37 -6
View File
@@ -291,11 +291,17 @@ every other domain has something to run on. **Recorded by** the controller and t
**Purpose.** To decide, send and apply what each node runs, and to say why.
**Recorded by** the controller's `inventory` database; from ADR 0567, by the seat `mesh-module-assigner`, in its states on
the bus. **Upstream of** Provisioning, Connectivity, Data
and Health and repair. **Decided by** ADR 0100, 0126, 0176, 0181, 0207, 0221, 0252, 0261, 0411, 0539, 0549, 0559, 0565, 0567, 0571, 0634.
and Health and repair. **Decided by** ADR 0100, 0126, 0176, 0181, 0207, 0221, 0252, 0261, 0411, 0539, 0549, 0559, 0565, 0567, 0571, 0634, 0656.
**Uses:** node, machine, module, seat, manifest (Module), config value (Config), proposal (Operator and conversation).
- **assignment** — a module put on a node. Its config values on that node (module-assignment config,
Config) are `mesh-config`'s, never part of what the controller records (ADR 0348 §9).
- **assignment graph** — the module versions placed on nodes at one revision, with the edges between versions that
its inputs give: provisioning, contribution, and the acting parts' versions that are to act on each entry. The
assigner computes it from the catalog graph, the placements and the nodes' capabilities, and nothing else writes it;
it keeps each revision naming the revisions of its inputs, served by the seat `mesh-wants`, and writes the wants
from a trunk revision's alone (ADR 0656). Not the **catalog graph** (Delivery), whose entries are modules, not
versions on nodes; not an **assignment**, one module put on one node.
- **placement** — which module runs on which node, with its pins, host ports and bindings, and what a person
decided of the node, as one key per node in the state `placement` of the seat `mesh-module-assigner`. It changes only by
a placement proposal the operator approves, and no repository holds it or names a node (ADR 0567). Until ADR
@@ -515,7 +521,7 @@ and the operator act. **Recorded by** the controller's `identity` and `licences`
back when it fails. The domain is continuous integration and delivery, named **delivery**, and its parts live in
the repository `mesh-delivery` (ADR 0429 §2). **Recorded by** the `mesh-delivery` module (deliveries) and the
controller (the planner, the rollout) until release 6 of ADR 0429; from each release on, by the parts it builds. **Downstream of** Module, Core, Health and repair and Data.
**Decided by** ADR 0162, 0218, 0236, 0237, 0238, 0239, 0250, 0267, 0270, 0276, 0323, 0401–0408, 0428, 0429, 0444–0447, 0524–0530, 0539, 0548, 0551, 0571, 0578, 0579, 0593, 0601.
**Decided by** ADR 0162, 0218, 0236, 0237, 0238, 0239, 0250, 0267, 0270, 0276, 0323, 0401–0408, 0428, 0429, 0444–0447, 0524–0530, 0539, 0548, 0551, 0571, 0578, 0579, 0593, 0601, 0644, 0656.
**Uses:** module, node, declaration and send (Placement), health (Health and repair), person.
- **merge check** — what a pull request carries before it may merge, judging the merge of its head into a
@@ -524,11 +530,36 @@ controller (the planner, the rollout) until release 6 of ADR 0429; from each rel
**composition check**; for a delivery group, one verdict on every member's head (ADR 0445, ADR 0447). Before
release 4 of ADR 0429 a pull request carried two statuses, one for the modules the change touches and one
for the repository's own script (ADR 0238).
- **module graph** — the edges the indexer keeps between modules, from which each delivery part orders a source
revision by its own rule: provisions, bus state, a served verb and a reader's capability are waited on; a package
and a build module's change are triggers that rebuild, never waits; a verb edge on a cycle is left out (ADR 0603
§1, §2, ADR 0614). Nothing stores the order.
- **catalog graph** — the modules as their manifests declare them at one revision (bases, packages, provides and
requires, invokes and serves), with the acting rules the seats declare; the indexer keeps it, one
revision per source revision it takes in (ADR 0656). Its other name is **module graph**, the word for it before
ADR 0656, from which each delivery part orders a source revision by its own rule: provisions, bus state, a served
verb and a reader's capability are waited on; a package, and until research 085's milestone a build module's
change, are triggers that rebuild, never waits; a verb edge on a cycle is left out (ADR 0603 §1, §2, ADR 0614); from research 085's milestone an acting part's edge is a wait within
its step (ADR 0656). Nothing stores the order. Not the **assignment graph** (Placement), computed from it.
*Not:* ~~build graph~~
- **acting part** — the holder of a seat whose definition carries a rule: the step its holder acts in and the modules
it acts on (ADR 0656), in the field `acts` (design 47): the indexer, the checker, the build modules, the
node-engine, the grants part, the assigner. Within a revision its new version acts first in its step, a wait with a
bound (ADR 0656); when it fails or is late, the modules it was to act on stay on their running builds and a
condition names it (design 47). Not every
**part**: an acting part may be any module that holds such a seat, a build module among them.
- **graph difference** — a change's assignment graph against the current one: the new versions, the moved edges,
the touched nodes and the order read off the edges. It is the change's delivery, and nothing stores a plan beside
it (ADR 0656); the assigner serves it by the seat `mesh-wants`'s verb `difference` (design 47). Not a **delivery plan**,
which was stored and handed out.
- **revision view** — what every part acts on: the catalog graph with its heads, seat definitions, verdicts and
fingerprints, served by the seat `mesh-catalog`'s verb `revision`, and the assignment graph computed from it,
served by the seat `mesh-wants`'s verb `revision`, for a trunk revision or a candidate's heads; a pair, each half
served by its one owner (ADR 0656; the verbs' names, design 47). A part with none for the current revision waits
and says so (ADR 0656). The node-engine reads only the catalog half, beside its want (design 47).
- **delivery record** — the gate's record of one milestone's delivery, a ledger instance it alone writes: the group's
state (heads, verdicts, checks, asks), the trace (milestone, issues, pull requests, commits, the assignment graph
revisions it moved between) and what happened to each entry on each node (ADR 0656). It holds no tiers and nothing
else orders by it. Not a **delivery**, one commit on its way.
- **checking program** — the rules every check applies, built from the change's heads (ADR 0656, ADR 0644) and run in
a build seat's sandbox (ADR 0448 §2) with the revision view as its input and no bus account; the running checker
only asks for it, reads its verdict, records and publishes it (design 47). Not the **checker**, the part that asks for it.
- **composition check** — whether the machines a change touches still compose with it, run by the assigner
from the modules the indexer and the builder hold, with the composition of `mesh-delivery-sdk`, the one the controller
composes with
File diff suppressed because it is too large Load Diff