Amend design 47 for milestone G's prepare, so G is built from what the records hold
The prepare found the design behind its records and the code: Placement retired by ADR 0641 while the design still put two seats in a contracts module never made, ADR 0659 and ADR 0660 not followed, the checker and the forge bridge reading the gate's state, the delivery parts naming the forge module's tools, and four hand-wired seat-list readers. Design 47 now writes each as the design's choice under the record it follows; the hold and the merge turns are removed by the operator's word with their record still to come, and a session's recovery merge waits for one. The glossary moves Placement's words into Core and Delivery and adds the seat mesh-grants; the words test refuses Placement as a domain heading (ADR 0641 §5); design 26 takes the new contracts homes and the seat git's verbs. Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
This commit is contained in:
@@ -38,6 +38,7 @@ import (
|
||||
// holders the glossary says no seat's holder: no seat "held by" or "claimed by" a named module, no named module
|
||||
// "holder of" a seat, no module that "holds the seat" (the operator, 2026-11-09). Who holds a seat is read
|
||||
// from the mesh's assignments, and the glossary's head says where.
|
||||
// domains no retired domain heads a section of the glossary (ADR 0641 §5: Placement).
|
||||
// copy with MESH_CATALOG_DIR set to a checkout of the catalog, its copies of the retired words and the
|
||||
// daemons' lines equal this glossary's and this list (skipped, with its reason, when unset).
|
||||
//
|
||||
@@ -830,3 +831,32 @@ func TestHoldersRefusesANamedHolderAndPassesARole(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// domains: a retired domain is no heading of the glossary. ADR 0641 §1 retired Placement into Core (module
|
||||
// assignment) and Delivery (the wants), and §5 has this test refuse it as a domain heading.
|
||||
|
||||
var retiredDomains = []string{"Placement"}
|
||||
|
||||
func checkRetiredDomains(text string) []string {
|
||||
var out []string
|
||||
for _, d := range retiredDomains {
|
||||
rx := regexp.MustCompile(`(?m)^##\s+` + regexp.QuoteMeta(d) + `\b`)
|
||||
for _, loc := range rx.FindAllStringIndex(text, -1) {
|
||||
out = append(out, fmt.Sprintf("%s:%d: %q is a retired domain (ADR 0641 §1) and heads no section", glossaryFile, lineOf(text, loc[0]), d))
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func TestWordsGlossaryHasNoRetiredDomainHeading(t *testing.T) {
|
||||
expectNone(t, checkRetiredDomains(readFile(rootFS(), glossaryFile)))
|
||||
}
|
||||
|
||||
func TestRetiredDomainsRefusesTheHeadingAndPassesProse(t *testing.T) {
|
||||
if len(checkRetiredDomains("## Placement — what runs on which node\n")) == 0 {
|
||||
t.Error("a Placement heading was not refused")
|
||||
}
|
||||
if got := checkRetiredDomains("## Core\n\nwhich was the Placement domain until ADR 0641\n"); len(got) != 0 {
|
||||
t.Errorf("prose refused: %v", got)
|
||||
}
|
||||
}
|
||||
|
||||
+46
-40
@@ -165,8 +165,8 @@ and repair).
|
||||
**Purpose.** To hold, check and resolve every value a module reads that someone may change, and to say
|
||||
where each resolved value came from. **Recorded by** the `mesh-config` module, in its buckets on the bus,
|
||||
with its store as the history behind them. **Upstream of** Provisioning, which places the values;
|
||||
downstream of Module and Placement. **Decided by** ADR 0262, 0277, 0348.
|
||||
**Uses:** module, node, manifest (Module), assignment (Placement), provision (Provisioning), proposal
|
||||
downstream of Module and Core. **Decided by** ADR 0262, 0277, 0348.
|
||||
**Uses:** module, node, manifest (Module), assignment (Core), provision (Provisioning), proposal
|
||||
(Operator and conversation).
|
||||
|
||||
- **template file** — a file a module ships with placeholders, such as `${config:<key>}`, which the provisioner
|
||||
@@ -225,10 +225,13 @@ downstream of Module and Placement. **Decided by** ADR 0262, 0277, 0348.
|
||||
## Core — the mesh's own machinery
|
||||
|
||||
**Purpose.** To keep the controller, the bus, the store and every node's engine running and agreed, so
|
||||
every other domain has something to run on. **Recorded by** the controller and the store.
|
||||
**Upstream of** every domain but Module; the others use the bus and the store as they are.
|
||||
**Decided by** ADR 0005, 0006, 0067, 0106, 0141, 0175, 0227, 0229, 0289.
|
||||
**Uses:** node, module, seat.
|
||||
every other domain has something to run on; and to decide and apply what each node runs, and say why: module
|
||||
assignment, which was the Placement domain until ADR 0641 §1 retired it into this one. **Recorded by** the
|
||||
controller and the store; for module assignment, by the seat `mesh-module-assigner`, in its states on the bus
|
||||
(ADR 0567). **Upstream of** every domain but Module; the others use the bus and the store as they are.
|
||||
**Decided by** ADR 0005, 0006, 0067, 0100, 0106, 0126, 0141, 0175, 0176, 0181, 0207, 0221, 0227, 0229, 0252, 0261,
|
||||
0289, 0411, 0539, 0549, 0559, 0565, 0567, 0571, 0634, 0641.
|
||||
**Uses:** node, machine, module, seat, manifest (Module), config value (Config), proposal (Operator and conversation).
|
||||
|
||||
- **controller** — the component that decides what each node should be, holds the mesh's records, and
|
||||
tells nodes over the bus. The relationship is *controller and nodes*, and no node is subordinate: a
|
||||
@@ -299,22 +302,8 @@ every other domain has something to run on. **Recorded by** the controller and t
|
||||
text is about the controller's records; the builder's *mirrored* `upstream` image (Delivery) is
|
||||
a different thing, a copy of an outside image in the artifact store.
|
||||
|
||||
## Placement — what runs on which node
|
||||
|
||||
**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, 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
|
||||
@@ -323,11 +312,8 @@ and Health and repair. **Decided by** ADR 0100, 0126, 0176, 0181, 0207, 0221, 02
|
||||
- **mesh-module-assigner** — the seat, held once for the mesh, that keeps placement: its states
|
||||
`placement`, `proposals` and `candidates`, and its seven verbs `placement`, `proposals`, `propose`, `withdraw`,
|
||||
`again`, `adopt` and `hand-back`. Only the holder writes its states (ADR 0567, renamed by ADR 0634 §9). Its
|
||||
contract is in `mesh-placement-contracts` (ADR 0634 §7).
|
||||
contract is in `mesh-contracts`, module assignment being of this domain (ADR 0641 §1).
|
||||
*Not:* ~~mesh-placement~~
|
||||
- **mesh-wants** — the seat, held once for the mesh, that keeps what each node should run, one want
|
||||
per node and module (`want.<node>.<module>`), and a person's upgrade policy, served as its verb `upgrade`
|
||||
(ADR 0565 §7, ADR 0571 §8). Its contract is in `mesh-placement-contracts` (ADR 0634 §6, §7).
|
||||
- **seat holders** — the state `seat-holders` of the seat `mesh-module-assigner`, written by its holder: one
|
||||
key per seat naming each holder and its node, composed from placement and the manifests' claims as the indexer
|
||||
holds them, and rewritten only when a key differs. The tool runner and every other reader of who holds a seat
|
||||
@@ -409,9 +395,9 @@ and Health and repair. **Decided by** ADR 0100, 0126, 0176, 0181, 0207, 0221, 02
|
||||
|
||||
**Purpose.** To resolve which module serves a provision for which consumer, to wire the two, and to
|
||||
place every value a module needs into its files on its node. **Recorded by** the controller and
|
||||
`mesh-provisioner`. **Upstream of** Data; downstream of Module, Placement, Config and Identity.
|
||||
`mesh-provisioner`. **Upstream of** Data; downstream of Module, Core, Config and Identity.
|
||||
**Decided by** ADR 0027, 0084, 0138, 0225, 0230, 0263, 0349.
|
||||
**Uses:** module, seat, node-engine (Core), declaration (Placement), config value (Config), credential
|
||||
**Uses:** module, seat, node-engine (Core), declaration (Core), config value (Config), credential
|
||||
and vault (Identity and access).
|
||||
|
||||
- **provision** — a service one module `provides` and others `require`; the mesh resolves a provider
|
||||
@@ -467,7 +453,7 @@ and vault (Identity and access).
|
||||
**Purpose.** To issue, hold, rotate and check the credentials and grants by which modules, nodes, agents
|
||||
and the operator act. **Recorded by** the controller's `identity` and `licences` databases and the vault.
|
||||
**Upstream of** Provisioning, Delivery, and Operator and conversation.
|
||||
**Decided by** ADR 0085, 0113, 0183, 0225, 0234, 0386, 0387, 0388, 0411, 0413, 0414, 0550, 0571, 0587, 0634.
|
||||
**Decided by** ADR 0085, 0113, 0183, 0225, 0234, 0386, 0387, 0388, 0411, 0413, 0414, 0550, 0571, 0587, 0634, 0636, 0656, 0660.
|
||||
**Uses:** module, node, seat, tool (Module), operator, consumer and provision (Provisioning), agent and ask (Operator and conversation).
|
||||
|
||||
- **credential** — anything that proves an identity: a password, a key, a token. A **pair credential**
|
||||
@@ -514,6 +500,11 @@ and the operator act. **Recorded by** the controller's `identity` and `licences`
|
||||
is issued. The bus server calls its accounts *users*; the mesh says bus account. Each module's membership
|
||||
is kept in the grants part's state `memberships` (seat `mesh-grants`), one key `<node>.<module>` written
|
||||
only when it differs, and the runtime reads its membership there (ADR 0571 §10).
|
||||
- **mesh-grants** — the seat, held once for the mesh, that composes who may say what on the bus: each module's
|
||||
membership, the bus's user list and `grants.<module>.<fingerprint>`, applying mesh-sdk's `SeatsToPassOn` for a
|
||||
seat's pass (ADR 0660 §3). From research 085's milestone it is defined whole in `mesh-identity-and-access-contracts`,
|
||||
this domain's contracts module (ADR 0636 §5), as an acting part of the step `grant` (ADR 0656 §1), with the events
|
||||
`wait-held` and `wait-ended` (design 47).
|
||||
- **rotate** — replacing a credential without a consumer holding one the provider does not know.
|
||||
- **licence** — a model-access account the licence manager holds and **binds** to a consumer, the
|
||||
coding agent on a node (ADR 0183).
|
||||
@@ -535,8 +526,8 @@ 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, 0644, 0656.
|
||||
**Uses:** module, node, declaration and send (Placement), health (Health and repair), person.
|
||||
**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, 0641, 0644, 0656, 0659.
|
||||
**Uses:** module, node, declaration and send (Core), health (Health and repair), person.
|
||||
|
||||
- **merge check** — what a pull request carries before it may merge, judging the merge of its head into a
|
||||
named **trunk commit**, made in a clone of its own on a build node and never pushed (ADR 0323). One status,
|
||||
@@ -550,8 +541,18 @@ controller (the planner, the rollout) until release 6 of ADR 0429; from each rel
|
||||
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.
|
||||
its step (ADR 0656). Nothing stores the order. Not the **assignment graph**, computed from it.
|
||||
*Not:* ~~build graph~~
|
||||
- **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**, whose entries are modules, not
|
||||
versions on nodes; not an **assignment**, one module put on one node.
|
||||
- **mesh-wants** — the seat, held once for the mesh, that keeps what each node should run, one want
|
||||
per node and module (`want.<node>.<module>`), and a person's upgrade policy, served as its verb `upgrade`
|
||||
(ADR 0565 §7, ADR 0571 §8). Of this domain: the wants are what the delivery asks of the nodes, so its contract is in
|
||||
`mesh-delivery-contracts` (ADR 0641 §2).
|
||||
- **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
|
||||
@@ -600,7 +601,9 @@ controller (the planner, the rollout) until release 6 of ADR 0429; from each rel
|
||||
to merge there in the order of their Approve, and the check each waits for. It holds new checks off that
|
||||
repository until the merge is done (ADR 0548 §3). Written only while the check gates merges (the gate's
|
||||
setting `check-gates-merge`); while it does not, no turn is written and an approved merge goes in at once
|
||||
(ADR 0551 §1).
|
||||
(ADR 0551 §1). Goes at research 085's milestone with the hold and the setting, once the record that ends them is
|
||||
accepted (the operator, 2026-11-09; design 47); the word goes to a *Not:* line with the as-is update after that
|
||||
delivery.
|
||||
- **build seat** — a language's node seat, held on a node by that language's build module: `node-build-go`,
|
||||
`node-build-node` and `node-build-image` (ADR 0525 §2). Its accepted kinds are the **build streams**, and its
|
||||
verbs `current`, `pause` and `resume` serve that node's pulls. It replaces the seat `node-build-agent`, retired
|
||||
@@ -809,7 +812,10 @@ controller (the planner, the rollout) until release 6 of ADR 0429; from each rel
|
||||
nodes; what a lab run declares; and a recorded failure run again to prove a fix (ADR 0016, ADR 0237).
|
||||
- **git seat** — the seat `git`, held once for the mesh, delivering the provision `git`: the
|
||||
repositories a build comes from ([26 — The seats](../03-DESIGN/01-to-be/26-the-seats.md) *The git seat*). A seat of
|
||||
this domain.
|
||||
this domain, defined in `mesh-delivery-contracts`. From research 085's milestone its verbs are the one way a
|
||||
delivery part reaches the forge: reads (`pull`, `open-pulls`, `tags`, `trees`, `file`, `commits`, `branches`,
|
||||
`contains`) for the parts that declare them, and acts (`status`, `comment`, `view`, `note`, `merge-pull`) for the
|
||||
forge bridge alone (design 47, *The verbs*). Not the **forge** itself, the server, nor the forge module's own tools.
|
||||
|
||||
## Health and repair — what is wrong, and putting it right
|
||||
|
||||
@@ -1254,18 +1260,18 @@ renaming one sense, the old sense moves to a *Not:* line and becomes mechanical.
|
||||
|
||||
| Word | Sense | Say | Domain |
|
||||
|---|---|---|---|
|
||||
| plan | what the controller would send one node, until release 6 | that node's **declaration** (verb `plan`) | Placement |
|
||||
| plan | what the controller would send one node, until release 6 | that node's **declaration** (verb `plan`) | Core |
|
||||
| | what a delivery would do to the mesh, until release 6 | **delivery plan** | Delivery |
|
||||
| | the sending of one batch of commits across nodes, until release 6 | **rollout** (verb `plans`) | Delivery |
|
||||
| | a step a person starts, like the bus's | **planned step** | Core |
|
||||
| composition | one module's resources for one node at one fingerprint, signed, from release 6 | **composition** | Placement |
|
||||
| | the function in `mesh-delivery-sdk` that composes them, which the node agents, the assigner and the grants part run (ADR 0635 §4) | **the composition of `mesh-delivery-sdk`** | Placement |
|
||||
| composition | one module's resources for one node at one fingerprint, signed, from release 6 | **composition** | Core |
|
||||
| | the function in `mesh-delivery-sdk` that composes them, which the node agents, the assigner and the grants part run (ADR 0635 §4) | **the composition of `mesh-delivery-sdk`** | Core |
|
||||
| | whether the machines a change touches still compose | **composition check** | Delivery |
|
||||
| membership | the subjects a bus account is issued | **membership** | Provisioning |
|
||||
| binding | the names on the bus of a module's bus state, in its membership | **binding** of bus state | Data |
|
||||
| | a consumer's tie to the data a provider keeps for it | **sticky binding** | Data |
|
||||
| | which host ports and addresses a placement gives a module | a placement's **bindings** | Placement |
|
||||
| | an account in a group of the machine | **account group** | Placement |
|
||||
| | which host ports and addresses a placement gives a module | a placement's **bindings** | Core |
|
||||
| | an account in a group of the machine | **account group** | Core |
|
||||
| domain | an area of the mesh that owns a set of concepts and the one word for each (ADR 0244), the sections of this page; the one sense "domain" keeps bare | **mesh domain** | The record |
|
||||
| | one of the eight concerns a direction and a design are reviewed against (playbook 01); never written bare | **architectural domain** | The record |
|
||||
| configuration | the settings of a storage type, which a template fixes or a module gives | **configuration** of a storage type | Data |
|
||||
@@ -1278,7 +1284,7 @@ renaming one sense, the old sense moves to a *Not:* line and becomes mechanical.
|
||||
| | one choice of an ask to a person | an ask's **option** | Operator and conversation |
|
||||
| effect | what an operation does to a ledger's state | **ledger effect** | Data |
|
||||
| | a tool's mark: reads, acts or dangerous | a tool's **effect** | Identity and access |
|
||||
| push | the controller giving nodes their declarations, until release 6 | **send** (verb `push`) | Placement |
|
||||
| push | the controller giving nodes their declarations, until release 6 | **send** (verb `push`) | Core |
|
||||
| | a git push | **git push** | The record |
|
||||
| | a phone notification | **push notification** | Operator and conversation |
|
||||
| release | a person letting a held delivery go on | **release** | Delivery |
|
||||
@@ -1288,7 +1294,7 @@ renaming one sense, the old sense moves to a *Not:* line and becomes mechanical.
|
||||
| gate | the judgement on a delivery's first node | **first-node gate** | Delivery |
|
||||
| | the check of what a change makes of the machines it touches, a pull request status until release 4 of ADR 0429 | ~~merge gate~~ (hq); the **composition check** | Delivery |
|
||||
| | the part that merges a group and moves the source revision | **gate part** (`mesh-delivery-gate`) | Delivery |
|
||||
| | a failed step stopping its module's later steps (ADR 0136) | *a failed step holds its module* | Placement |
|
||||
| | a failed step stopping its module's later steps (ADR 0136) | *a failed step holds its module* | Core |
|
||||
| tier | a level of the mesh | **layer** | Core |
|
||||
| | a step of a rollout | **tier** | Delivery |
|
||||
| | how much proof an ask needs | **assurance level** | Identity and access |
|
||||
@@ -1307,7 +1313,7 @@ renaming one sense, the old sense moves to a *Not:* line and becomes mechanical.
|
||||
| | an entry in the build queue | **build request** (an ask on a build stream) | Delivery |
|
||||
| store | the one database server | **store** | Core |
|
||||
| | the OCI registry | **artifact store** | Delivery |
|
||||
| | a node's own copy of its last declaration | **last declaration** | Placement |
|
||||
| | a node's own copy of its last declaration | **last declaration** | Core |
|
||||
| | the seat holding the mail accounts | **`mail-store`** | Mail |
|
||||
| record | a numbered decision | **decision record** | The record |
|
||||
| | the literal reader of this repository, searched first for a symptom | **the record** (the `records` module) | Operator and conversation |
|
||||
|
||||
Reference in New Issue
Block a user