Follow ADR 0666's 26 clauses in the designs and the glossary
mesh/delivery merged: source.main moved to novox/hq@38915bbe0174
mesh/check checking 43eac215d264 on 2ba88971cf52
mesh/delivery merged: source.main moved to novox/hq@38915bbe0174
mesh/check checking 43eac215d264 on 2ba88971cf52
The record was proposed again with clauses 2 and 17 split for the knowledge base's review, so every citation of it moves to the new numbers. Claude-Session: https://claude.ai/code/session_01JG73KK8HD1gufnqyFxMFdW
This commit is contained in:
+30
-30
@@ -97,7 +97,7 @@ and repair).
|
||||
- **manifest** — the file a module is defined by (`module.json`): what it is, what it provides and
|
||||
requires, the seats it claims, the resources it declares, its tools, its data and its health. From the delivery of
|
||||
design 47's milestone G it also names its artifacts and, where nothing else says it, each one's dependencies (`needs`),
|
||||
and never a pipeline step's status, which is the registration's policy (ADR 0666 §4, §11). Say
|
||||
and never a pipeline step's status, which is the registration's policy (ADR 0666 §7, §14). Say
|
||||
manifest in prose, not the file's name.
|
||||
*Not:* ~~module definition~~ (hq)
|
||||
- **resource** — one thing a manifest declares a node must have: a file, a directory, a service, a
|
||||
@@ -310,7 +310,7 @@ controller and the store; for module assignment, by the seat `mesh-module-assign
|
||||
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). From the delivery
|
||||
of design 47's milestone G it names, per module, the **watched branch** its node runs, by default the registration's
|
||||
first, and may name an earlier build to return to, one value (ADR 0666 §3, §18). Until ADR
|
||||
first, and may name an earlier build to return to, one value (ADR 0666 §6, §24). Until ADR
|
||||
0547's third milestone the controller's assignments are kept equal to it by the holder.
|
||||
*Not:* ~~placement file~~ (hq)
|
||||
- **mesh-module-assigner** — the seat, held once for the mesh, that keeps placement: its states
|
||||
@@ -534,45 +534,45 @@ controller (the planner, the rollout) until release 6 of ADR 0429; from each rel
|
||||
**Uses:** module, node, declaration and send (Core), health (Health and repair), person.
|
||||
|
||||
- **pipeline** — the pipeline steps run for one commit, or one group, of a module on one of its watched branches, by
|
||||
the seat `mesh-pipeline-runner`, before the commit is delivered (ADR 0666 §1, §4): each step asked of the seat that
|
||||
the seat `mesh-pipeline-runner`, before the commit is delivered (ADR 0666 §1, §7): each step asked of the seat that
|
||||
serves it, its end heard as an event, the pipeline's end said as `pipeline-ended` with every step's result, from
|
||||
which alone the assigner writes a want. From the delivery of design 47's milestone G. Not a **delivery**, the commit
|
||||
on its way; and *check* is no longer the word for a bundle of steps (research 086).
|
||||
- **pipeline step** — one action run on a module's commit before it is delivered: lint, unit tests, integration tests,
|
||||
composition, code review or approval (ADR 0666 §4). Its outcome is `passed`, `failed`, `nothing to run`, `bypassed`,
|
||||
composition, code review or approval (ADR 0666 §7). Its outcome is `passed`, `failed`, `nothing to run`, `bypassed`,
|
||||
`carried`, `could not run`, `accepted`, `superseded` or `cancelled`, or it waits on a person (design 47). Always written
|
||||
whole here, never *step* alone: see [Homonyms](#homonyms).
|
||||
- **policy** — a module's statuses of its pipeline steps, per artifact: `required` (runs, holds the delivery until it
|
||||
passes), `optional` (runs, a failure shown and holding nothing) or `bypass` (nothing runs), kept in its registration
|
||||
and never in a manifest (ADR 0666 §4). Not the **upgrade policy** (Module), how a module's builds reach its nodes (see
|
||||
and never in a manifest (ADR 0666 §7). Not the **upgrade policy** (Module), how a module's builds reach its nodes (see
|
||||
[Homonyms](#homonyms)).
|
||||
- **registration** — a module's entry in the catalog: its git origin, the path of its manifest, its watched branches and
|
||||
its policy, kept by the seat `mesh-catalog`, every version with who changed it and on whose Approve;
|
||||
registering and changing one are trusted acts (ADR 0666 §2). The mesh knows modules, and a repository only as a
|
||||
module's git origin.
|
||||
- **watched branch** — a branch a module's registration names, whose commits start that module's pipeline and which a
|
||||
placement may choose for a node; registering one the forge does not protect is refused (ADR 0666 §2, §3).
|
||||
placement may choose for a node; registering one the forge does not protect is refused (ADR 0666 §3, §6).
|
||||
- **run on request** — a pipeline run for a named commit or group that delivers nothing, asked by the runner's verb
|
||||
`run`; the indexer builds its candidate from the runner's `run-started` (ADR 0666 §15).
|
||||
`run`; the indexer builds its candidate from the runner's `run-started` (ADR 0666 §18).
|
||||
- **artifact reference** — an artifact written `<module>:<artifact>`, such as `mesh-grants:program`: the end of a
|
||||
dependency edge of the catalog graph (ADR 0666 §11).
|
||||
dependency edge of the catalog graph (ADR 0666 §14).
|
||||
- **mesh-pipeline-runner** — the seat, held once for the mesh, that runs each pipeline: it reads the policy from the
|
||||
registrations, asks each pipeline step of the seat that serves it, says each step's start and end and each pipeline's
|
||||
end as its events, keeps each pipeline's state and step log on the bus, and serves the run on request (ADR 0666 §4,
|
||||
end as its events, keeps each pipeline's state and step log on the bus, and serves the run on request (ADR 0666 §7,
|
||||
§11). An acting part of the step `pipeline` (design 47). Of this domain: its contract is in `mesh-delivery-contracts`.
|
||||
- **mesh-builds** — the seat, held once for the mesh, whose holder numbers a package's version when it is published and
|
||||
says the publication as its event `package-published`, on which every artifact built against the package is rebuilt
|
||||
and its pipeline started (ADR 0666 §12; design 51). Of this domain: its contract is in `mesh-delivery-contracts`.
|
||||
and its pipeline started (ADR 0666 §15; design 51). Of this domain: its contract is in `mesh-delivery-contracts`.
|
||||
- **composition step** — the pipeline step that composes each machine's declaration with a change, by the composer built
|
||||
from its heads in the sandbox, refusing a change in which two modules own one path; served by the seat `mesh-wants`
|
||||
(ADR 0666 §14). From milestone G's delivery it replaces the **composition check**.
|
||||
(ADR 0666 §17). From milestone G's delivery it replaces the **composition check**.
|
||||
- **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,
|
||||
`mesh/check`, written by the checker: the change's tests, run by the language's build module, and the
|
||||
**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). Goes at the delivery of design 47's milestone G, the **pipeline** in its
|
||||
place (ADR 0666 §14); the word goes to the *pipeline* entry's *Not:* line with the as-is update after that delivery.
|
||||
place (ADR 0666 §17); the word goes to the *pipeline* entry's *Not:* line with the as-is update after that delivery.
|
||||
- **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
|
||||
@@ -580,7 +580,7 @@ controller (the planner, the rollout) until release 6 of ADR 0429; from each rel
|
||||
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). From milestone G's delivery it is kept once per **watched branch**, and its edges run between
|
||||
**artifact references**, of six kinds, the reverse order holding when something goes away (ADR 0666 §3, §11).
|
||||
**artifact references**, of six kinds, the reverse order holding when something goes away (ADR 0666 §6, §14).
|
||||
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
|
||||
@@ -588,7 +588,7 @@ controller (the planner, the rollout) until release 6 of ADR 0429; from each rel
|
||||
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), from milestone G's delivery from a revision of the watched branch a
|
||||
placement chose whose `required` pipeline steps passed (ADR 0666 §6). Not the **catalog graph**, whose entries are modules, not
|
||||
placement chose whose `required` pipeline steps passed (ADR 0666 §9). 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`
|
||||
@@ -597,7 +597,7 @@ controller (the planner, the rollout) until release 6 of ADR 0429; from each rel
|
||||
- **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; from milestone G's delivery the holder of `mesh-pipeline-runner` in the
|
||||
checker's place (ADR 0666 §16). Within a revision its new version acts first in its step, a wait with a
|
||||
checker's place (ADR 0666 §19). 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.
|
||||
@@ -613,13 +613,13 @@ controller (the planner, the rollout) until release 6 of ADR 0429; from each rel
|
||||
- **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); from milestone G's delivery the
|
||||
pipelines' step and pipeline events in place of the verdicts, checks and asks (ADR 0666 §6). It holds no tiers and nothing
|
||||
pipelines' step and pipeline events in place of the verdicts, checks and asks (ADR 0666 §9). 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.
|
||||
Goes with the checker at milestone G's delivery: its rules become the indexer's validation and cycle rule and the
|
||||
**composition step** (ADR 0666 §14).
|
||||
**composition step** (ADR 0666 §17).
|
||||
- **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
|
||||
@@ -629,17 +629,17 @@ controller (the planner, the rollout) until release 6 of ADR 0429; from each rel
|
||||
*Not:* ~~merge gate~~ (hq)
|
||||
- **kept verdict** — a package's passing verdict at one test level, kept by the checker under the digest of
|
||||
everything its tests read, written once and read-only; a check takes it instead of running an unchanged
|
||||
package (ADR 0444). From milestone G's delivery the pipeline runner keeps it, and a test step takes it (ADR 0666 §5).
|
||||
package (ADR 0444). From milestone G's delivery the pipeline runner keeps it, and a test step takes it (ADR 0666 §8).
|
||||
- **carried verdict** — a delivery's verdict moved to a newer trunk commit, or a newer sibling commit, by its
|
||||
package digests: the checker merges the head onto the new commit and runs only the packages whose digest the
|
||||
move changed, keeping the composition while no composed fingerprint changed; the verdict names the commits it
|
||||
was carried from (ADR 0548 §5, §6). A head git refuses onto the new commit is not carried: its next check is
|
||||
whole (ADR 0548 §7). From milestone G's delivery the pipeline runner carries a step by its package digests (ADR 0666 §5).
|
||||
whole (ADR 0548 §7). From milestone G's delivery the pipeline runner carries a step by its package digests (ADR 0666 §8).
|
||||
- **try** — the checker's run of a delivery group's check on one or more members, each a repository at an exact
|
||||
commit, before or without a pull request: the same examiner as the group's check, stricter in that a missing
|
||||
candidate or a node's missing composition answer ends it as error, and owing the forge no status and no Approve.
|
||||
It keeps the verdicts of the packages it passed for the check to take (ADR 0637). Asked only when the operator
|
||||
asks for one (ADR 0637 §6). Goes at milestone G's delivery, the **run on request** in its place (ADR 0666 §15); the
|
||||
asks for one (ADR 0637 §6). Goes at milestone G's delivery, the **run on request** in its place (ADR 0666 §18); the
|
||||
word goes to that entry's *Not:* line with the as-is update after that delivery.
|
||||
- **trunk commit** — the commit of the trunk a merge check's verdict was judged against: the trunk's head when
|
||||
the build module cloned it. The verdict holds for that commit only, goes out of date when the trunk moves, and
|
||||
@@ -746,7 +746,7 @@ controller (the planner, the rollout) until release 6 of ADR 0429; from each rel
|
||||
level: a group holds deliveries, never groups. Its state is derived from its members, never set. From milestone G's
|
||||
delivery: a shared branch name carrying its issue number, complete when each member's commit has landed on its
|
||||
modules' watched branch, taken in as one source revision of that branch and run as one pipeline per watched branch
|
||||
(ADR 0666 §10).
|
||||
(ADR 0666 §13).
|
||||
- **hotfix** — one pull request in one repository, delivered at its merge (ADR 0401).
|
||||
- **feature** — one branch name across its repositories: in two or more, its pull requests are one delivery group,
|
||||
merged together and delivered member by member in the group's order; in one, a single pull request delivered as a
|
||||
@@ -789,7 +789,7 @@ controller (the planner, the rollout) until release 6 of ADR 0429; from each rel
|
||||
Health seat `mesh-watchdogs`, whose watchdogs are pulses, and keeps the dead letters, ADR 0564 §4, §5) and the
|
||||
**status view** (`mesh-delivery-cli` and a web view, writing only its answers to asks and saying the events
|
||||
`delivered`, `moving`, `settled` and `stuck`, derived from the keys), and from milestone G the **pipeline runner**
|
||||
(the holder of `mesh-pipeline-runner`, ADR 0666 §4), in the checker's place at its delivery. The reviewer is the review
|
||||
(the holder of `mesh-pipeline-runner`, ADR 0666 §7), in the checker's place at its delivery. The reviewer is the review
|
||||
agent's session, not a part. Built over releases 1 to 6 of ADR 0429.
|
||||
- **manifest validator** — the indexer's rules that judge each manifest before anything of it reaches a node: strict
|
||||
decoding, the seat and namespace rules, the bus and stream limits and the whole-catalog checks. It refuses a
|
||||
@@ -802,7 +802,7 @@ controller (the planner, the rollout) until release 6 of ADR 0429; from each rel
|
||||
change alters or one between manifests that an altered manifest takes part in, and
|
||||
a group that changes it runs the one built from its own head (ADR 0578 §2, ADR 0579 §2). From milestone G's delivery
|
||||
the indexer alone runs it: the validator built from a revision's heads judges that revision in the sandbox before any
|
||||
take-in, on every watched branch, and refuses a manifest that names a pipeline step's status (ADR 0666 §3, §4).
|
||||
take-in, on every watched branch, and refuses a manifest that names a pipeline step's status (ADR 0666 §6, §7).
|
||||
*Not:* ~~the judge / a judge / its judge / no judge / judge's / own judge / whose judge / same judge / indexer's judge / trunk's judge / running judge / older judge / newer judge / stricter judge~~ (hq)
|
||||
- **build-input fingerprint** — what identifies a module's build by its content: a hash over its source files, its
|
||||
manifest and the fingerprints of its build-time inputs, so equal content gives an equal fingerprint whatever
|
||||
@@ -816,7 +816,7 @@ controller (the planner, the rollout) until release 6 of ADR 0429; from each rel
|
||||
source revision is **delivered** when every want equals its module's fingerprint and every have equals its
|
||||
want and is healthy, derived from the keys and recorded by no part (§1). From milestone G's delivery there is one
|
||||
per **watched branch**, the key `source.<branch>` in place of `source.main`, served by the seat `mesh-delivery`'s verb
|
||||
`source`, and each want names a build-input fingerprint computed at one such revision (ADR 0666 §3).
|
||||
`source`, and each want names a build-input fingerprint computed at one such revision (ADR 0666 §6).
|
||||
- **pending revision** — a source revision the running indexer has not taken in, because it names another build of
|
||||
the indexer or follows one that does: only the named indexer's own keys are written, the rest kept in the
|
||||
indexer's state `pending` until that indexer starts and takes it in (ADR 0633 §1 to §3). A group's members wait
|
||||
@@ -878,8 +878,8 @@ controller (the planner, the rollout) until release 6 of ADR 0429; from each rel
|
||||
bridge alone, as the holder's trusted value `callers` names, and the forge's events (`pull.*`, `forge.*`,
|
||||
`repo.writable`) as the seat's (design 47, *The verbs*). From milestone G's delivery `merge-pull` is a session's
|
||||
merge, refused only for a head at whose fingerprint a run failed a `required` step, a head that moved or an unprotected branch
|
||||
(ADR 0666 §8), the read `branch` and the event `branch-moved` say a branch's head and protection, and the callers per
|
||||
verb are the seat definition's (ADR 0666 §17). Not the **forge** itself, the server, nor the forge module's own tools.
|
||||
(ADR 0666 §11), the read `branch` and the event `branch-moved` say a branch's head and protection, and the callers per
|
||||
verb are the seat definition's (ADR 0666 §20). Not the **forge** itself, the server, nor the forge module's own tools.
|
||||
|
||||
## Health and repair — what is wrong, and putting it right
|
||||
|
||||
@@ -915,7 +915,7 @@ becomes a message). **Decided by** ADR 0227, 0231, 0240, 0252, 0283, 0564.
|
||||
- **condition** — one open fact about something the mesh owns that is wrong, with a key and a severity;
|
||||
raised and cleared only by observation
|
||||
(ADR 0231). A pipeline step or a watched branch's head standing still five minutes is one, from the watchman's
|
||||
finding `pipeline-stands`; a step waiting on a person is not (ADR 0666 §18).
|
||||
finding `pipeline-stands`; a step waiting on a person is not (ADR 0666 §24).
|
||||
What a wrapped dashboard raises is its own; the mesh's notion is a condition.
|
||||
*Not:* ~~alert~~ (hq)
|
||||
- **self-check** — the mesh's own examination of itself, run on demand and on a schedule (to-be 45 §4), held
|
||||
@@ -966,7 +966,7 @@ becomes a message). **Decided by** ADR 0227, 0231, 0240, 0252, 0283, 0564.
|
||||
asks the owner's tools for its data, or hears its declared events (ADR 0595, ADR 0596). A value is never refused for
|
||||
its size: one over the bus's per-value limit is kept in the object store beside its state, `<state>-objects`, granted
|
||||
to its owner alone, its name in the key, and a reply or an event over the per-message limit carries the object's
|
||||
name (ADR 0666 §13).
|
||||
name (ADR 0666 §16).
|
||||
- **`bus-state`** — the provision of the bus module that every bus-state entry of a manifest requires, so the module
|
||||
graph orders the bus module's build before a module asking bus state (ADR 0614 §5). Provided by the holder of the
|
||||
seat `mesh-broker`.
|
||||
@@ -1075,9 +1075,9 @@ asking, never the act. **Decided by** ADR 0152, 0175, 0234, 0259, 0272, 0383, 03
|
||||
date, acknowledge). An **authorising ask** is one whose chosen option its asker performs. The router
|
||||
holds every ask, checks each answer's proofs and issues a **warrant**; the asker acts on it with its
|
||||
own grants (ADR 0234, ADR 0259). No ask is hidden: an asker has at most three offered at once, a newer ask with the
|
||||
same `about` replaces its open one, and a fourth is offered while the oldest waits, never the newest (ADR 0666 §9;
|
||||
same `about` replaces its open one, and a fourth is offered while the oldest waits, never the newest (ADR 0666 §12;
|
||||
design 46 §6). From the delivery of design 47's milestone G the operator's approval of a delivery is the pipeline
|
||||
step `approval`, asked as an ask like any other, and no merge is asked (ADR 0666 §7).
|
||||
step `approval`, asked as an ask like any other, and no merge is asked (ADR 0666 §10).
|
||||
- **warrant** — the router's record that a person chose one option of one ask: the ask, the option,
|
||||
who chose (the operator, as a channel kind's identity), through which channel, the proofs and when,
|
||||
published for that asker alone. The only thing an asker acts on (ADR 0259).
|
||||
|
||||
@@ -223,7 +223,7 @@ when the title and the note alone do not fit, and says that too.
|
||||
|
||||
### Limits, batching, history
|
||||
|
||||
- An asker holds **at most three open asks**; a fourth is refused in words. *Amended 2026-11-10, ADR 0666 §9, from the
|
||||
- An asker holds **at most three open asks**; a fourth is refused in words. *Amended 2026-11-10, ADR 0666 §12, from the
|
||||
delivery of design 47's milestone G:* **no ask is hidden, and the newest is never held back.** An asker still has at
|
||||
most three asks offered at once, but a fourth is offered, not refused: the oldest of its offered asks is held back
|
||||
instead, kept open with its answer tickets withdrawn, its message edited to say it waits behind newer asks of the
|
||||
@@ -440,7 +440,7 @@ answer (`operator`); an expiry; what happens on expiry, in words; and optionally
|
||||
condition's key), so a newer ask about it replaces the older. It is refused at once, on its asker's
|
||||
`decided` subject, when its words break a rule, when no ready channel can carry one of its options' levels,
|
||||
or, until the delivery of design 47's milestone G, when the asker already has three open; from that delivery a fourth
|
||||
is offered and the asker's oldest held back (§6, *Limits, batching, history*; ADR 0666 §9).
|
||||
is offered and the asker's oldest held back (§6, *Limits, batching, history*; ADR 0666 §12).
|
||||
|
||||
**A warrant** carries the ask's id and asker, the option, `by` ("the operator, via telegram, user id
|
||||
verified"), the channel module, the proofs, the level met and when. No secret. An ask that ends without one
|
||||
@@ -719,7 +719,7 @@ Each phase ends at its own *done when*. Owning repositories from [`repos.md`](..
|
||||
| **5 — Authorise, with TOTP** | `authorises` in the verb table; the router's checks for the code; direct calls refused, break-glass; `retire approve` takes `expect`; the hand-act fields; the TOTP seed as the router's state, enrolled at a terminal with ten recovery codes; `factor recover`, `factor status`, the local-only break-glass enrolment; no P2 tier before recovery codes exist; optional key enrolment; the self-check probe for the away channel; agents' grants lose the authorising verbs | mesh-controller; mesh-catalog (agents' grants, the desk's code prompt) | one controller test per refusal passes; at the desk, approve needs a code; a recovery drill re-enrols with a recovery code, and is announced |
|
||||
| **6 — Telegram live** | the `telegram` module (built in 5a) with replies and forced-reply codes, under its own account on the control node; the operator's two bots configured; the watcher assigned off the control node; the dead-man ping | mesh-catalog | the self-check says the away channel carries every tier; rehearsals: an approve and a destroy answered on the phone, with the hand-acts read |
|
||||
| **7 — A call that needs approval** (ADR 0286) | `needs-approval` in the manifest and the seat list, issued in the membership, withheld from a runner without `approval-mark/1` in its bus permissions (controller); the act's digest in TypeScript beside Go, with shared vectors (shared library); the check, the ask, the runner's `approvals`, the node's used file and `warranted` (tool runner); the controller's own verbs; `execute` marked (the controller's seat list) once issue 418's reads exist | mesh-controller, mesh-sdk, mesh-tools, mesh-catalog | a marked call on a node is asked on the phone, does nothing, runs once when made again after Approve, is refused the third time and asked again, and `hand-acts` shows the warrant |
|
||||
| **8 — No ask hidden** (ADR 0666 §9), delivered with design 47's milestone G | a fourth ask offered and the asker's oldest held back, offered again when one ends; `asks` lists the held-back asks; the router's tool `ask-again`; the pipeline runner's `approval` asks and their `about` | mesh-catalog (the router) | a fourth ask and a declined approval each reach the operator; `asks` shows the held-back one |
|
||||
| **8 — No ask hidden** (ADR 0666 §12), delivered with design 47's milestone G | a fourth ask offered and the asker's oldest held back, offered again when one ends; `asks` lists the held-back asks; the router's tool `ask-again`; the pipeline runner's `approval` asks and their `about` | mesh-catalog (the router) | a fourth ask and a declined approval each reach the operator; `asks` shows the held-back one |
|
||||
|
||||
**Switching phase 5a on: the operator's steps, in order** (amended 2026-10-09, ADR 0259). Each line is typed with
|
||||
`nox` (`mesh-cli`) on the control-node, from the operator's own account, which is the controller's terminal
|
||||
|
||||
@@ -227,11 +227,11 @@ source revision is derived from the keys: every **want** equals its module's **f
|
||||
and run in a build seat's sandbox (ADR 0448 §2); the running checker only asks, records and publishes (*The check
|
||||
on the change's own acting parts*, below). It makes milestone G's own check, and is removed with its buckets and its
|
||||
bus account once the first pipeline after G's delivery has delivered a change end to end, after a tested backup
|
||||
(ADR 0667 §2, §6): from then the pipeline makes the check (ADR 0666 §14).
|
||||
(ADR 0667 §2, §6): from then the pipeline makes the check (ADR 0666 §17).
|
||||
- **The pipeline runner** (module `mesh-delivery-pipeline`, holding the seat `mesh-pipeline-runner`), from milestone
|
||||
G's delivery: runs each module's pipeline for each commit or group on its watched branches, asking each pipeline step
|
||||
of the seat that serves it and saying each step's end and the pipeline's end as events, its state on the bus; it
|
||||
serves the run on request in the try's place, and is an acting part in the checker's place (ADR 0666 §4, §15, §16;
|
||||
serves the run on request in the try's place, and is an acting part in the checker's place (ADR 0666 §7, §18, §19;
|
||||
*Pipelines per module*).
|
||||
- **The gate** merges a group's pull requests once the check and the operator's Approve agree on the same
|
||||
heads, reading no review line (ADR 0659 §1), and then moves the mesh's source revision in one write. While the
|
||||
@@ -241,7 +241,7 @@ source revision is derived from the keys: every **want** equals its module's **f
|
||||
that milestone it keeps one delivery record per milestone's delivery as a ledger instance (ADR 0656), its `merges`
|
||||
carried into the records (*The delivery record*, below). From G's delivery it merges nothing and asks no Approve: a
|
||||
session merges a pull request through the seat `git`, and the gate keeps the delivery record, its groups and the
|
||||
source revision per watched branch (ADR 0666 §7, §8, §10).
|
||||
source revision per watched branch (ADR 0666 §10, §11, §13).
|
||||
- **The teller** carries conditions and asks to the operator's phone and is the only writer of an ask's answer.
|
||||
- **The assigner** writes which fingerprint each node should run, by six rules: the build is done, the
|
||||
fingerprint is not held, the node is the module's **canary** or the canary runs it healthy, at most `step`
|
||||
@@ -265,7 +265,7 @@ source revision is derived from the keys: every **want** equals its module's **f
|
||||
in an `objects` section in the old form (ADR 0619 §2), serves it and a change's graph difference by verbs of
|
||||
its seat `mesh-wants`, and writes the wants from a trunk revision's assignment graph alone (ADR 0656). From G's
|
||||
delivery it runs the composition step, and writes a want only from a revision whose every `required` pipeline step
|
||||
passed, on the watched branch a placement chose (ADR 0666 §6, §14).
|
||||
passed, on the watched branch a placement chose (ADR 0666 §9, §17).
|
||||
- **The node agent**, the node-engine's own process, follows its node's wants, **composes each wanted module for
|
||||
its own node** with the composition of `mesh-delivery-sdk` from the manifest by digest, the module's resolved values from
|
||||
mesh-config, its secrets and bus credential asked of the vault sealed to the node's key, its licences and what
|
||||
@@ -360,7 +360,7 @@ The target (ADR 0547):
|
||||
one pass and moves the source revision in one write. It asks the controller nothing, consumes no event of a
|
||||
plan, never sends to a machine and writes no composition (ADR 0539 §17). From milestone G's delivery it asks no
|
||||
Approve and merges nothing; it forms the groups, keeps one source revision per watched branch and one delivery record
|
||||
per delivery (ADR 0666 §7, §8, §10).
|
||||
per delivery (ADR 0666 §10, §11, §13).
|
||||
- **The controller** is no part of build and delivery (ADR 0547 §1). The jobs it still keeps outside them
|
||||
(nodes and adoption, identities, secrets and given values, licences, config moves, conditions and facts, ADR
|
||||
0429 §9) each move by a decision of their own under research 072 before it loses its lease. All are decided:
|
||||
@@ -418,7 +418,7 @@ The target (ADR 0547):
|
||||
- **From milestone G's delivery a merge waits for nothing of the mesh.** A session merges a pull request through
|
||||
the seat `git`'s `merge-pull`, judged on its head, the branch's protection and the runs at its build-input
|
||||
fingerprint, which refuse it only where a `required` step failed and are never waited for; the pipeline then runs on the landed commit, and only its `required` steps, the `approval` step where a policy names it among them, hold the
|
||||
delivery (ADR 0666 §6, §8; *Pipelines per module*). The trunk is still what runs, on each module's watched branches,
|
||||
delivery (ADR 0666 §9, §11; *Pipelines per module*). The trunk is still what runs, on each module's watched branches,
|
||||
which a placement chooses.
|
||||
|
||||
## Pipelines per module
|
||||
@@ -455,7 +455,7 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
- **What it holds.** The seat `mesh-catalog` keeps each module's **registration**: its git origin, the path of its
|
||||
manifest, its watched branches and its policy, on the bus, every version with who changed it and the warrant of the
|
||||
operator's Approve (ADR 0666 §2). The indexer is a foundation part, so the registrations are kept in its old sections
|
||||
(ADR 0619 §1 to §3, ADR 0666 §2): one key per module in its old `state` section `registrations`, and every version on
|
||||
(ADR 0619 §1 to §3, ADR 0666 §4): one key per module in its old `state` section `registrations`, and every version on
|
||||
its old `streams` section's stream `registration-history`, kept with no age limit.
|
||||
The catalog graph is derived from the registrations and the manifests they point to; the mesh knows modules, and a
|
||||
repository only as a module's git origin.
|
||||
@@ -465,18 +465,18 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
("`mesh-grants:program` unit tests: `required` → `bypass`"), and write the version only on its warrant; a Decline or
|
||||
an expiry writes nothing (ADR 0666 §2). Until a record binds each forge account to its bus identity, `register` and
|
||||
`policy` refuse code review as a `required` step, naming why, so no review gates while its author cannot be told
|
||||
(ADR 0666 §17; issue 1966, note 157). A manifest moved to another path is the one manifest change that changes the
|
||||
(ADR 0666 §22; issue 1966, note 157). A manifest moved to another path is the one manifest change that changes the
|
||||
registration; any other manifest change is a commit, judged at its revision.
|
||||
- **Said and read.** Each written change is said as the seat's event `registration-changed` (the module, the version,
|
||||
what moved); the verb `registrations` answers every registration, or one with its history. The indexer derives the
|
||||
modules it keeps from them, and the forge bridge its watched branches, each by a first view of `registrations` and
|
||||
then that event, never by reading the ledger (ADR 0666 §2, ADR 0596).
|
||||
then that event, never by reading the ledger (ADR 0666 §3, ADR 0596).
|
||||
- **An unprotected branch is refused.** `register` and `watch` read a branch's protection through the seat `git`'s read
|
||||
verb `branch` (its head, and whether a rule refuses a direct push and admits only merges), and refuse a watched branch
|
||||
the forge does not protect, naming it (ADR 0666 §2).
|
||||
the forge does not protect, naming it (ADR 0666 §3).
|
||||
- **No part fixes a name.** Every branch, repository and module name a part needs is read from the registrations and the
|
||||
catalog graph; the lint step refuses such a name in a string, a constant or a table of code logic, a Go import path
|
||||
not being code logic (ADR 0666 §2). About 39 such names in 9 parts were found on 2026-11-09 (research 086, Findings);
|
||||
not being code logic (ADR 0666 §5). About 39 such names in 9 parts were found on 2026-11-09 (research 086, Findings);
|
||||
milestone G removes them.
|
||||
- **The first registrations are one ask.** At its first start on G's build the indexer, holding no registration,
|
||||
proposes one registration for every module its trunk revision holds, from what it took in (the origin and path of
|
||||
@@ -502,27 +502,27 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
- **Only a watched branch starts a pipeline.** The forge bridge hears every commit of every watched branch the
|
||||
registrations name, through the seat `git`'s event `branch-moved` (a branch's new head, from the forge's push
|
||||
webhook, which a merge and an admitted push alike say), and takes the commit from the forge's own record by the seat's
|
||||
verb `branch`, never from the event's body (ADR 0666 §3). One event for every way a branch moves, because a merge is
|
||||
verb `branch`, never from the event's body (ADR 0666 §6). One event for every way a branch moves, because a merge is
|
||||
not the only one. `branch-moved` is kept on the seat's stream `SEAT_git_branch-moved`, which the bridge hears through
|
||||
a durable consumer, so a move said while the bridge is down is heard when it starts; at its start it also reads each
|
||||
watched branch's head the same way.
|
||||
- **A head with no pipeline is a finding.** A watched branch's head that starts no pipeline within five minutes is the
|
||||
watchman's finding `pipeline-stands`, naming the branch and its head, raised by the condition keeper (ADR 0564 §2),
|
||||
unless it waits as progress not owed: a member of a gathered group is governed by ADR 0633 §5's 30-minute bound, and
|
||||
a merge behind a pending revision of the same branch by its 60-minute bound (ADR 0666 §18). The finding clears on the
|
||||
a merge behind a pending revision of the same branch by its 60-minute bound (ADR 0666 §24). The finding clears on the
|
||||
runner's `pipeline-started` for that head.
|
||||
- **The catalog graph per watched branch.** The indexer keeps the catalog graph once per watched branch, from that
|
||||
branch's manifests at each source revision (ADR 0666 §3): each revision names its branch, and the stores, caps and
|
||||
branch's manifests at each source revision (ADR 0666 §6): each revision names its branch, and the stores, caps and
|
||||
pins of *Two graphs, one source of truth* hold per branch.
|
||||
- **A placement names the branch.** Each module of a placement key names the watched branch its node runs, by default the
|
||||
registration's first, set by a placement proposal like every other placement change (ADR 0567, ADR 0666 §3). The
|
||||
registration's first, set by a placement proposal like every other placement change (ADR 0567, ADR 0666 §6). The
|
||||
assigner computes each node's entries from the catalog graph of the branch its placement names, so a module watched on
|
||||
`main` and `beta` runs `beta` only where a placement chose it.
|
||||
- **A source revision per watched branch.** The gate keeps one source revision per watched branch, `source.<branch>`,
|
||||
in place of `source.main` (ADR 0429 §11 to §13 as ADR 0666 §3 changes them), in the old `state` section `source`
|
||||
in place of `source.main` (ADR 0429 §11 to §13 as ADR 0666 §6 changes them), in the old `state` section `source`
|
||||
already holds, its key's layout being the only change. The gate is no foundation part: the bus module's delivery
|
||||
waits on no act of the gate's, since the indexer takes a revision in from the forge bridge's stream and the assigner
|
||||
writes wants from the runner's events, so the gate's other kept data stay in ADR 0595's templates (ADR 0666 §2), and serves it by the seat
|
||||
writes wants from the runner's events, so the gate's other kept data stay in ADR 0595's templates (ADR 0666 §4), and serves it by the seat
|
||||
`mesh-delivery`'s verb `source` with the branch, saying `source-moved` on each new revision; the indexer and the
|
||||
node-engine's catch-up read it there, never the gate's state (ADR 0596). Each want names a build-input fingerprint
|
||||
computed at one such revision.
|
||||
@@ -530,15 +530,15 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
indexer asks the manifest validator built from the revision's heads to judge it in the build seat's sandbox (the
|
||||
ask `run`, *What ADR 0656 leaves to this design*). A revision it refuses stays pending under ADR 0633 §5's
|
||||
60-minute bound, its hand acts and its condition `take-in-waits`; the way back is a revert, an ordinary merge
|
||||
(ADR 0666 §3, §20). A revision on the branch the indexer's own placement chose is taken in only by the indexer it
|
||||
(ADR 0666 §6, §26). A revision on the branch the indexer's own placement chose is taken in only by the indexer it
|
||||
names (ADR 0633 §1). This validation is no pipeline step and waits on no pipeline, so every delivering pipeline runs
|
||||
on a revision already taken in.
|
||||
- **A branch whose protection was removed starts nothing.** On every `branch-moved` the forge bridge reads the
|
||||
branch's protection again; a move of a watched branch whose protection was removed starts no delivering pipeline, and
|
||||
the forge bridge writes the finding `branch-unprotected`, naming the branch, which the condition keeper raises and
|
||||
clears once the protection is back (ADR 0666 §3).
|
||||
clears once the protection is back (ADR 0666 §6).
|
||||
- **A pending revision holds its own branch only.** A merge waits behind a pending revision only on the same watched
|
||||
branch; other branches move on (ADR 0666 §3, which changes ADR 0633 §3).
|
||||
branch; other branches move on (ADR 0666 §6, which changes ADR 0633 §3).
|
||||
- **How it is checked.** Whole (forge bridge): a commit of a branch no registration names starts nothing; a commit on a
|
||||
watched branch is taken from the seat's `branch` read, not the event; a head missed while the bridge was stopped is
|
||||
read at its start. Whole (indexer, assigner): a commit on `beta` gives a revision of the `beta` graph only and moves
|
||||
@@ -550,8 +550,8 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
### Pipeline steps and the policy
|
||||
|
||||
- **The runner.** The seat `mesh-pipeline-runner`, held once for the mesh by the module `mesh-delivery-pipeline`,
|
||||
runs each pipeline (ADR 0666 §4). It is a foundation part, since the bus module's own delivery waits on its pipeline
|
||||
(ADR 0666 §2): its kept data are in old sections (ADR 0619 §2), it waits on no bus module process to start, and it
|
||||
runs each pipeline (ADR 0666 §7). It is a foundation part, since the bus module's own delivery waits on its pipeline
|
||||
(ADR 0666 §4): its kept data are in old sections (ADR 0619 §2), it waits on no bus module process to start, and it
|
||||
joins the manifest validator's list of foundation parts, which refuses its manifest asking a template. It reads the policy from the registrations, asks each step that is not `bypass` of
|
||||
the seat that serves it, and says each step's start and end and the pipeline's end (*Health and going back*, below).
|
||||
- **The steps and who serves them.** Lint, unit tests and integration tests are the build seats' (`node-build-go`,
|
||||
@@ -559,26 +559,26 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
can run by its language's convention (as *The check from release 4* says the tests are found), and the accepted kind
|
||||
`step` on its stream `check`, which runs one. Composition is the assigner's, an accepted kind `step` of the seat
|
||||
`mesh-wants`. Code review comes in through the runner's own verb `review`. Approval is asked through the seat
|
||||
`operator-channel`'s ask and heard on its event `decided` (ADR 0666 §4, §7). A step with nothing to do ends at once as
|
||||
`operator-channel`'s ask and heard on its event `decided` (ADR 0666 §7, §10). A step with nothing to do ends at once as
|
||||
`nothing to run`, never as passed.
|
||||
- **The policy.** Each step's status, per module and per artifact, is `required` (runs; holds the delivery until it
|
||||
passes), `optional` (runs; a failure is shown and may be accepted) or `bypass` (nothing runs; said as bypassed),
|
||||
kept in the registration and never in a manifest: the manifest validator refuses a manifest that names a status
|
||||
(ADR 0666 §4; research 086, R3). A `required` step that ends `nothing to run` holds the delivery and names the step.
|
||||
(ADR 0666 §7; research 086, R3). A `required` step that ends `nothing to run` holds the delivery and names the step.
|
||||
- **Asked on a work queue, ended by an event.** The runner asks each step on the serving seat's work queue and hears
|
||||
its end as that seat's event `step-ended` (the record's `step ended`), on
|
||||
`mesh.seat.<seat>.event.step-ended.<node>`, the node that ran it in the subject and each holder's account granted only
|
||||
its own node's subject, through a durable consumer of its own, so a step outlives a restart of either side (ADR 0666
|
||||
§4, ADR 0363 §2). A build seat's holder restarted mid-step gets the step again from its work queue and finishes it
|
||||
§7, ADR 0363 §2). A build seat's holder restarted mid-step gets the step again from its work queue and finishes it
|
||||
(ADR 0664 §1). A unit or integration test step says its test counts in `step-ended`, and `pipeline-ended` names any
|
||||
repository over 50 integration or 500 unit tests, and any catalog module over them (ADR 0666 §5; the test budget). A step's outcome is one of `passed`, `failed`, `nothing to run`,
|
||||
repository over 50 integration or 500 unit tests, and any catalog module over them (ADR 0666 §8; the test budget). A step's outcome is one of `passed`, `failed`, `nothing to run`,
|
||||
`bypassed`, `carried` (with the pipeline it was carried from), `could not run` (naming the part not heard),
|
||||
`waiting on <person>`, `accepted` (a failed `optional` step a person accepted, with who and why), `superseded` and
|
||||
`cancelled`.
|
||||
- **Carried, not run.** A step whose build-input fingerprint and policy did not change is carried by its package
|
||||
digests, as ADR 0548 §5 holds, the runner making the carry instead of the checker: a test step runs only the packages
|
||||
with no kept result for their digest, and a run on request's results are reused when the merged commit's inputs match
|
||||
(ADR 0666 §5; research 086, choice 24). An `approval` step is never carried.
|
||||
(ADR 0666 §8; research 086, choice 24). An `approval` step is never carried.
|
||||
- **Approval comes last.** The runner asks the `approval` step only once every other `required` step of the pipeline
|
||||
passed, so the operator approves a commit the mesh already judged, the one place ADR 0661 §3 had the check gate the
|
||||
ask. A failure after an approval is said, as a failed `optional` step is, and the approval stays.
|
||||
@@ -586,7 +586,7 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
one key per pipeline keyed by its watched branch, source revision and module, written by compare-and-set so a holder
|
||||
replaced mid-pipeline and its successor never both write one; its step log on its old `streams` section's stream
|
||||
`step-log`; each step's output in its old `objects` section `step-outputs`, named in the log; and each package's
|
||||
passing result per level in its old `state` section `kept`, under the digest of what its tests read (ADR 0666 §2, §5;
|
||||
passing result per level in its old `state` section `kept`, under the digest of what its tests read (ADR 0666 §4, §8;
|
||||
*The runner's kept data*, below). At its first start it takes the checker's kept verdicts into `kept`, read by the
|
||||
checker's tool `checker_kept`, so the first pipelines after G carry what the checker had judged.
|
||||
- **How it is checked.** Whole (runner): a step with unchanged fingerprint and policy is carried and says from where,
|
||||
@@ -604,15 +604,15 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
(the record's `pipeline ended`), keyed by source revision, with every step's result. The assigner consumes it, and
|
||||
writes a want only from a source revision whose every `required` step passed for the modules it moves, on the watched
|
||||
branch a placement chose, by compare-and-set on a newer revision, so an older revision ending after a newer one
|
||||
writes nothing (ADR 0666 §6). This is one more rule beside the assigner's others (ADR 0429 §6), checked per module.
|
||||
From G's delivery it replaces the trunk-only want (ADR 0656 §2 as ADR 0666 §6 changes it). For a group's source
|
||||
writes nothing (ADR 0666 §9). This is one more rule beside the assigner's others (ADR 0429 §6), checked per module.
|
||||
From G's delivery it replaces the trunk-only want (ADR 0656 §2 as ADR 0666 §9 changes it). For a group's source
|
||||
revision the runner says one `group-ended` once every member's modules have ended, and the assigner writes the
|
||||
group's wants only on it: a member's own `pipeline-ended` writes nothing (ADR 0666 §6).
|
||||
group's wants only on it: a member's own `pipeline-ended` writes nothing (ADR 0666 §9).
|
||||
- **A failed `optional` step holds nothing.** It is shown in `pipeline-ended`, in the delivery record and in the runner's
|
||||
`show`; a person may accept it by the runner's verb `accept`, recorded in the hand-act log with who and why.
|
||||
- **A newer commit supersedes an older pipeline of a module whose fingerprint it changed.** On a newer commit of the
|
||||
same watched branch the runner ends a module's older running pipeline as `superseded` only when the newer commit
|
||||
changed that module's build-input fingerprint (ADR 0666 §6); a module the commit leaves as it was finishes its
|
||||
changed that module's build-input fingerprint (ADR 0666 §9); a module the commit leaves as it was finishes its
|
||||
pipeline. A newer publish of a package likewise supersedes the rebuild pipelines an older publish of it started. A
|
||||
superseded pipeline's waiting asks are dropped by each build seat's `drop` (ADR 0664 §4), naming
|
||||
the newer commit as the cause, so a cancelled pipeline leaves no ask on a stream (a gap G's prepare found: a cancelled
|
||||
@@ -620,14 +620,14 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
- **A step nothing starts ends its pipeline.** A step whose prerequisite nothing starts (a seat with no holder, a
|
||||
prerequisite step `bypass`) ends the pipeline refused within five minutes, naming the step and what it waits for,
|
||||
never as a silent wait (research 086, R5); a step whose seat has no holder ends its pipeline failed, naming the seat
|
||||
(ADR 0666 §14).
|
||||
(ADR 0666 §17).
|
||||
- **A failed head is said to its author, then to the operator.** A `required` step that failed, or ended `could not
|
||||
run`, on a watched branch's head is the runner's finding `pipeline-failed`, naming the module, the branch, the commit
|
||||
and the step; the condition keeper raises it as the commit's author's for two hours and then the operator's, as ADR
|
||||
0505 §5 and §6 have a delivery whose cure is its author's new head, and clears it when a newer revision of that branch
|
||||
passes that step (ADR 0666 §18). The author is the forge's record of the commit, read through the seat `git`.
|
||||
passes that step (ADR 0666 §24). The author is the forge's record of the commit, read through the seat `git`.
|
||||
- **The delivery record keeps every step.** The gate's delivery record consumes the step and pipeline events and keeps
|
||||
them as long as the record (ADR 0666 §6; *The delivery record*).
|
||||
them as long as the record (ADR 0666 §9; *The delivery record*).
|
||||
- **How it is checked.** Whole (assigner): a failed `required` step writes no want; a failed `optional` step holds
|
||||
nothing; an older revision's `pipeline-ended` after a newer one's writes nothing; a group with one member passed and
|
||||
another still running writes no want until `group-ended`. Whole (runner): a newer commit that changed a module's
|
||||
@@ -639,14 +639,14 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
### Approval is a step, and a session merges a pull request
|
||||
|
||||
- **No Approve per merge.** The operator's approval is the pipeline step `approval`, its status in each module's policy;
|
||||
no Approve is asked per merge, and the delivery gate's merge turns and its Approve per merge go (ADR 0666 §7, which
|
||||
no Approve is asked per merge, and the delivery gate's merge turns and its Approve per merge go (ADR 0666 §10, which
|
||||
changes ADR 0661 §3 to §5). The operator is asked only where a module's policy says `approval`, and for registrations
|
||||
and policy changes.
|
||||
- **The approval is an ask of the runner's.** The runner raises an authorising ask of tier approve on the seat
|
||||
`operator-channel` under its own name, its `about` the module and the watched branch only, so a newer commit's ask
|
||||
replaces the older one's (design 46 §10). The warrant ends the step passed; an ask that is declined, expires or is
|
||||
refused ends it `declined`, and one that is replaced ends it `superseded`. Only a declined `approval` step is asked
|
||||
again, by the runner's verb `ask-again` (ADR 0666 §7). While it waits the runner
|
||||
again, by the runner's verb `ask-again` (ADR 0666 §10). While it waits the runner
|
||||
says `wait-held` waiting on the operator, never a stall (ADR 0283).
|
||||
- **A session merges a pull request.** Any session the tool runner proves, and the operator, merges by calling the seat
|
||||
`git`'s verb `merge-pull` over the mesh, which merges with the forge tools' account (ADR 0398 §2) at the head the
|
||||
@@ -654,21 +654,21 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
push, the protection read again on every `branch-moved` of the branch, and it judges the head's runs by its modules'
|
||||
policies: it refuses a head when any run at its build-input fingerprint failed a step a policy marks `required`, and
|
||||
merges a head whose `required` steps passed or that has no run yet, a failed `optional` or a `bypass` step refusing
|
||||
nothing; it never waits for a run and never asks an Approve (ADR 0666 §8). The forge keeps only its branch protection.
|
||||
nothing; it never waits for a run and never asks an Approve (ADR 0666 §11). The forge keeps only its branch protection.
|
||||
- **Judged from its own state, never by a call.** The holder of the seat `git` consumes the runner's `step-ended`
|
||||
through a durable consumer of its own and keeps, in its own state `failed-steps`, each failed `required` step by
|
||||
module and build-input fingerprint, with the commits it was seen at and the run that failed it, for 30 days; so a head
|
||||
merges while the runner is down, judged on what it already heard (ADR 0666 §8, ADR 0596). A head's fingerprints are
|
||||
merges while the runner is down, judged on what it already heard (ADR 0666 §11, ADR 0596). A head's fingerprints are
|
||||
those its runs named for its commit; a step that failed at that fingerprint in any run, a group's or another commit's
|
||||
of the same content included, refuses it, unless a later run of that same step at that fingerprint, asked again by
|
||||
the operator or the healers (the runner's `rerun`), passed: that pass clears the failure from `failed-steps` (ADR 0666
|
||||
§8). The runner's `step-ended` says that the step was a rerun and the caller the runtime proved, and the forge module
|
||||
§11). The runner's `step-ended` says that the step was a rerun and the caller the runtime proved, and the forge module
|
||||
clears a failure only for a rerun whose caller is the operator or a healer; a plain pass, or a rerun asked by anyone
|
||||
else, clears nothing. A run still running is judged by the steps it has ended, since the merge never waits. A refusal names the run, the module and the step, so the session knows what to fix. The gate merges nothing, and its forge merge token is
|
||||
removed by G's delivery (ADR 0667 §6); the forge bridge hears the landed commit as it hears every commit of a watched
|
||||
branch.
|
||||
- **The operator-channel hides no ask.** It keeps design 46's three open asks per asker, never holds the newest back,
|
||||
and replaces an open ask by the same asker's ask with the same `about` (ADR 0666 §9; design 46 §6).
|
||||
and replaces an open ask by the same asker's ask with the same `about` (ADR 0666 §12; design 46 §6).
|
||||
- **How it is checked.** Whole (forge module, forge bridge): a session's `merge-pull` at its head merges with no run yet,
|
||||
and with a passed one, and asks no Approve; with the runner stopped a head merges; a head at whose fingerprint any
|
||||
run failed a `required` step, a head that moved and a branch whose protection was removed since its last move are
|
||||
@@ -680,17 +680,17 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
### Groups
|
||||
|
||||
- **Formed from the branch name.** The gate forms a group from a shared branch name carrying its issue number, as it
|
||||
does today without the fixed list of trunk names (ADR 0666 §10).
|
||||
does today without the fixed list of trunk names (ADR 0666 §13).
|
||||
- **A member reaches its group by landing.** A member has reached its group when its commit lands on its modules'
|
||||
watched branch. The forge bridge sets the group on each landed member's commit, reading the members from the seat
|
||||
`mesh-delivery`'s verb `groups`, and publishes `forge.group.merged` when that verb says every member has (ADR 0666 §10,
|
||||
`mesh-delivery`'s verb `groups`, and publishes `forge.group.merged` when that verb says every member has (ADR 0666 §13,
|
||||
which changes ADR 0633 §4).
|
||||
- **One source revision, one pipeline per branch.** The indexer keeps landed members pending until the group's end and
|
||||
takes them in together as one source revision of that watched branch, saying `take-in.taken`; the runner starts the
|
||||
group's one pipeline per watched branch on that event, and a member of a gathered group starts no pipeline of its own.
|
||||
When one member's `required` step fails, none of the group's modules is delivered (research 086, R5).
|
||||
- **A group that never completes is said.** By ADR 0633 §5's 30-minute bound and its condition; `bridge_group_end_again`
|
||||
says a group's end again from the gate's group verb, never the gate's `merges` state (ADR 0666 §10, which changes ADR
|
||||
says a group's end again from the gate's group verb, never the gate's `merges` state (ADR 0666 §13, which changes ADR
|
||||
0633 §5).
|
||||
- **How it is checked.** Whole (indexer, gate, forge bridge): a group of three repositories, its own packages included,
|
||||
is one source revision and one pipeline; one member's failed `required` step delivers none; a group with a member that
|
||||
@@ -699,7 +699,7 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
### Dependencies between artifacts
|
||||
|
||||
- **Six kinds of edge between artifact references.** The catalog graph's edges run between **artifact references**,
|
||||
`<module>:<artifact>`, such as `mesh-grants:program`, of six kinds (ADR 0666 §11):
|
||||
`<module>:<artifact>`, such as `mesh-grants:program`, of six kinds (ADR 0666 §14):
|
||||
|
||||
| Kind | B before A | Derived from |
|
||||
|---|---|---|
|
||||
@@ -715,13 +715,13 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
package edge names an artifact; at module level the tool runner and the grants part looked like a cycle, per artifact
|
||||
they are a chain (`mesh-grants:program`, then `node-tools:runtime`, then `mesh-grants:tools`).
|
||||
- **Removal runs the other way.** When something goes away the order is reversed: a seat moved to a new holder has its
|
||||
old holder released before the new one claims (ADR 0666 §11).
|
||||
old holder released before the new one claims (ADR 0666 §14).
|
||||
- **The edges alone order.** The build and the delivery order by these edges alone; a cycle of delivery edges (kinds 2,
|
||||
4, 5, 6) is delivered as one step, and a cycle of build edges (kinds 1 and 3) is refused, naming every artifact on it
|
||||
(ADR 0666 §11; research 086, R17). The cycle rule is the indexer's, in the catalog graph it keeps, so the checking
|
||||
(ADR 0666 §14; research 086, R17). The cycle rule is the indexer's, in the catalog graph it keeps, so the checking
|
||||
program's cycle rule goes with the checker.
|
||||
- **A format's reader first.** A format a running reader cannot read is preceded by its reader, an edge of kind 4 on
|
||||
every watched branch (ADR 0666 §11): the indexer's manifest validator for a new field of a seat definition or a
|
||||
every watched branch (ADR 0666 §14): the indexer's manifest validator for a new field of a seat definition or a
|
||||
manifest, and on each node the node-engine that reads a manifest's new fields before any manifest that writes them
|
||||
(ADR 0667 §4).
|
||||
- **How it is checked.** Unit (indexer's graph): a chain per artifact where modules would cycle; two programs needing
|
||||
@@ -732,14 +732,14 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
### A publish rebuilds
|
||||
|
||||
- **Numbered at publication.** The builder numbers a package's version when it is published, never only when a build
|
||||
is claimed, and says the publication as the event `package-published` of its seat `mesh-builds` (ADR 0666 §12; design
|
||||
is claimed, and says the publication as the event `package-published` of its seat `mesh-builds` (ADR 0666 §15; design
|
||||
51, *The versions*). The seat is new, held once for the mesh, defined in `mesh-delivery-contracts`; the builder held
|
||||
none until now, and its waits stay on its own stream in this milestone.
|
||||
- **Every dependent is rebuilt against it.** On `package-published` every artifact with a kind-1 edge to the package is
|
||||
rebuilt against the new version, and the runner, which consumes the event, starts its pipeline; nothing else is
|
||||
rebuilt, and a change to tests alone publishes nothing (ADR 0666 §12; research 086, R18).
|
||||
rebuilt, and a change to tests alone publishes nothing (ADR 0666 §15; research 086, R18).
|
||||
- **Unread packages refuse.** A build that cannot read the published packages refuses and names the unread state
|
||||
(ADR 0666 §12).
|
||||
(ADR 0666 §15).
|
||||
- **How it is checked.** Whole (builder, indexer): a mesh-sdk merge changing one package publishes one version, and only
|
||||
the artifacts importing that package rebuild; a merge changing only tests rebuilds nothing; a build whose packages
|
||||
cannot be read refuses naming the state. Tests 70 and 80.
|
||||
@@ -748,18 +748,18 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
|
||||
- **A value over the limit is an object.** mesh-sdk's own small object store package (ADR 0595 §9) puts a value over
|
||||
the bus's per-value limit in the object store beside its state and keeps the object's name in the key; a verb's reply or an event over the
|
||||
per-message limit carries the object's name (ADR 0666 §13). A value moved there is deleted with its key, and a
|
||||
per-message limit carries the object's name (ADR 0666 §16). A value moved there is deleted with its key, and a
|
||||
replaced value leaves one object.
|
||||
- **One object store per state, granted to its owner.** Each state asked by the template `state` gets its object store
|
||||
beside it, `<state>-objects`, a template form of ADR 0595 that the bus module provides and the grants part grants to
|
||||
the state's owner alone (ADR 0666 §13); a foundation part's large values go in an old `objects` section of its own.
|
||||
the state's owner alone (ADR 0666 §16); a foundation part's large values go in an old `objects` section of its own.
|
||||
Its size is the template's (ADR 0595 §3). An object store holds no space until a value is written to it, so the many
|
||||
it adds reserve nothing; the few values over the limit (a delivery record, a catalog graph revision list, a test's
|
||||
output) are estimated, as a guess, at under 1 GiB across the mesh.
|
||||
- **An object sent is readable by the modules it is for.** A reply's or an event's object is written to the sender's
|
||||
object store of sent objects, and the grants part derives from the manifests a standing grant to read them: the
|
||||
callers its seat definition names for the verbs it serves, and the consumers whose `consumes` declare its events;
|
||||
no other module may read them (ADR 0666 §13). The grant follows the manifests, so it is written when they change,
|
||||
no other module may read them (ADR 0666 §16). The grant follows the manifests, so it is written when they change,
|
||||
never per object. A consumer's reader of
|
||||
the form is delivered before its producer writes it, an edge of kind 4.
|
||||
- **Its tools come with the package.** The package serves each module that imports it `<module>_state_objects` (the
|
||||
@@ -776,13 +776,13 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
### The pipeline makes the check, and the checker goes
|
||||
|
||||
- **Every step runs on parts built from the change.** Every pipeline step that runs a change's code runs on parts built
|
||||
from the change's own heads, in the build seat's sandbox, with no network and no bus account (ADR 0666 §14, ADR 0448
|
||||
from the change's own heads, in the build seat's sandbox, with no network and no bus account (ADR 0666 §17, ADR 0448
|
||||
§2, §4): the composition step composes each machine's declaration with the composer built from the heads and refuses
|
||||
a change in which two modules own one path; the build seats' steps run lint and tests. A step whose serving part the
|
||||
change alters runs from the change's build of it, built within 20 minutes or ending `waiting for a build node` or
|
||||
`did not build`, the first tier of *The check on the change's own acting parts* made the runner's.
|
||||
- **The run on request.** The runner's verb `run` takes one or more members, each a module at a named commit, runs them
|
||||
through their pipelines and delivers nothing, replacing the checker's try (ADR 0666 §15). Its callers are the
|
||||
through their pipelines and delivers nothing, replacing the checker's try (ADR 0666 §18). Its callers are the
|
||||
sessions, as the agents' bus identities the tool runner proves, and the operator, and nothing else, since a run of a
|
||||
group builds and publishes its packages' tagged versions (design 51). The runner says `run-started`, the indexer builds
|
||||
the run's candidate from it, and the candidate's composition step writes no want (ADR 0656 §9); the candidate is
|
||||
@@ -791,7 +791,7 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
- **The runner is an acting part in the checker's place.** The acting rule's step `check` becomes the runner's step
|
||||
`pipeline` (*What ADR 0656 leaves to this design*): its own change runs on its own new version, a failing new runner
|
||||
holds while the old one runs pipelines (ADR 0656 §4), and the pipelines in flight when its holder is replaced are
|
||||
taken up again from its kept state (ADR 0666 §16).
|
||||
taken up again from its kept state (ADR 0666 §19).
|
||||
- **What the checker did, and where it goes.**
|
||||
|
||||
| The checker's | From G's delivery |
|
||||
@@ -814,22 +814,22 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
|
||||
- **Callers per verb, in the seat's definition.** Each seat definition names, per verb, the callers allowed to call it,
|
||||
in its field `callers` (holder roles, modules, the operator, the healers), which the grants part reads as its one
|
||||
source of caller limits; the runner's verbs are the first (ADR 0666 §17). A verb whose definition names no `callers`
|
||||
source of caller limits; the runner's verbs are the first (ADR 0666 §20). A verb whose definition names no `callers`
|
||||
admits only the seat's holder roles and the operator, so a field left out opens nothing. It replaces the holder's
|
||||
trusted config value `callers` of the seat `git` and the package seats (design 51), which no holder set for most
|
||||
verbs. A format its running reader cannot read, so its reader is delivered first (ADR 0667 §4).
|
||||
- **A step's result from its holder only.** The runner takes a step's result only from the bus account of that step's
|
||||
seat holder, naming the commit and the build-input fingerprint; a result from another account, or naming another
|
||||
commit or fingerprint, is refused and said (ADR 0666 §17).
|
||||
commit or fingerprint, is refused and said (ADR 0666 §21).
|
||||
- **A review gates, once it can.** A code review's result is taken through the verb `review` from the reviewer's bus
|
||||
account and refused from the commit's author, so a review gates where a policy says `required` (ADR 0666 §17, which
|
||||
account and refused from the commit's author, so a review gates where a policy says `required` (ADR 0666 §22, which
|
||||
changes ADR 0659 §2). Until a record binds each forge account to its bus identity no policy may say it (*A module's
|
||||
registration*; issue 1966, note 157).
|
||||
- **A widening is said, never refused.** A change that alters any part serving a step (the runner, step detection, the
|
||||
lint rule, a build seat's test runner, the composer), or widens an acting rule, a grant or a credential, says so in
|
||||
its `pipeline-ended`, its field `widens` naming each. The running runner computes it, from the sources of the change
|
||||
against those of the watched branch, never the runner built from the change, so a change cannot hide its own
|
||||
widening; nothing refuses it for that (ADR 0666 §17, the operator, 2026-11-10). The teller passes `widens` on to every
|
||||
widening; nothing refuses it for that (ADR 0666 §23, the operator, 2026-11-10). The teller passes `widens` on to every
|
||||
channel, as it does `recovery-merged`. This is what replaces ADR 0656 §8's naming in the Approve ask.
|
||||
- **How it is checked.** Whole (runner, grants part): a forged step result and an author's own review are refused; a
|
||||
caller not in a verb's `callers`, and any caller but the holder roles and the operator of a verb with no `callers`,
|
||||
@@ -840,7 +840,7 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
|
||||
- **The runner's events.** Each on `mesh.seat.mesh-pipeline-runner.event.<event>.<module>.<branch>.<commit or group>`,
|
||||
a branch or group name escaped as a key's name is, declared in the seat's definition and published by the runner's
|
||||
account alone (ADR 0666 §18, ADR 0363 §2):
|
||||
account alone (ADR 0666 §24, ADR 0363 §2):
|
||||
|
||||
| Event | Says |
|
||||
|---|---|
|
||||
@@ -857,7 +857,7 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
never by run length; a step or a watched branch's head standing still five minutes is its finding `pipeline-stands`,
|
||||
raised by the condition keeper and cleared on the step's end, or for a head on its `pipeline-started` (ADR 0564 §2,
|
||||
§4). A step waiting on a person is said as waiting on that person (ADR 0283), never as a stall; a group waiting for
|
||||
its members, and a merge behind a pending revision, are governed by their own bounds (ADR 0666 §18). At its start the
|
||||
its members, and a merge behind a pending revision, are governed by their own bounds (ADR 0666 §24). At its start the
|
||||
watchman seeds its open waits from the runner's `stands`, as it seeds `take-in-waits` from `indexer_pending`.
|
||||
- **The runner's own health.** Its manifest declares its health check, run outside its process (ADR 0240): the runner
|
||||
answers `show`, and its durable consumers of `step-ended`, `take-in.taken`, `package-published` and `decided` are
|
||||
@@ -866,7 +866,7 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
after five minutes, as every part does (ADR 0656 §6).
|
||||
- **Going back is one act.** A failing new version holds while the old keeps running (ADR 0656 §4); a return to an
|
||||
earlier build is one value in the placement, the module's `build` in its placement key, set by a placement proposal
|
||||
(ADR 0666 §18).
|
||||
(ADR 0666 §24).
|
||||
- **How it is checked.** Whole (runner, watchman): a step whose worker dies raises `pipeline-stands` within five minutes;
|
||||
a head with no pipeline raises it and its `pipeline-started` clears it; a step waiting on the operator raises nothing;
|
||||
a runner restarted mid-step takes its pipelines up again; its health check fails naming a consumer behind. Whole
|
||||
@@ -875,18 +875,18 @@ check and deliver milestone G itself (ADR 0667 §2); each of them says so in a l
|
||||
### A recovery fix is an ordinary merge
|
||||
|
||||
- **No recovery merge verb.** A fix that recovers the mesh is merged like any change on a watched branch, by a
|
||||
session's `merge-pull`, and runs its pipeline; no trusted recovery merge verb is built (ADR 0666 §20). The shape this
|
||||
session's `merge-pull`, and runs its pipeline; no trusted recovery merge verb is built (ADR 0666 §26). The shape this
|
||||
design sketched for one (a verb `merge` of the seat `mesh-delivery` with `recovery-callers`) is dropped.
|
||||
- **Named a recovery, said everywhere.** Its author names it a recovery by the seat `mesh-delivery`'s verb `recovery`
|
||||
(the commit and why), never by a pull request's text: the gate marks the delivery record `recovery` with the caller
|
||||
the runtime proves, and says `recovery-merged`, which the teller passes on to every channel (ADR 0666 §20). A widening
|
||||
the runtime proves, and says `recovery-merged`, which the teller passes on to every channel (ADR 0666 §26). A widening
|
||||
it carries is said in its `pipeline-ended` like any other (*Who may say what*).
|
||||
- **How it is checked.** Whole (gate): a merge named a recovery is marked in its record and `recovery-merged` is said;
|
||||
a recovery named by a description is not. Test 92.
|
||||
|
||||
### The tools
|
||||
|
||||
Every new state has a tool that reads it and every new act a tool that starts it by hand (ADR 0666 §19), against the
|
||||
Every new state has a tool that reads it and every new act a tool that starts it by hand (ADR 0666 §25), against the
|
||||
four lines a module's tools answer; every read tool of a store also answers its fill against its cap:
|
||||
|
||||
| Part (seat) | Read everything it holds | Do by hand what it does itself | Recover without help |
|
||||
@@ -981,34 +981,34 @@ step keys and the builder's build log, against the checker's last week (test 99)
|
||||
|
||||
| Choice | Why |
|
||||
|---|---|
|
||||
| The registrations in the indexer's old `state` section with their history on an old stream, capped at 64 MiB, kept for the life of the mesh | the indexer is a foundation part (ADR 0619 §1 to §3, ADR 0666 §2); a registration keeps every version with who and on whose Approve, and nothing derives it again |
|
||||
| The runner a foundation part, its kept data in old sections, on the manifest validator's list | the bus module's own delivery waits on its pipeline (ADR 0666 §2) |
|
||||
| The registrations in the indexer's old `state` section with their history on an old stream, capped at 64 MiB, kept for the life of the mesh | the indexer is a foundation part (ADR 0619 §1 to §3, ADR 0666 §4); a registration keeps every version with who and on whose Approve, and nothing derives it again |
|
||||
| The runner a foundation part, its kept data in old sections, on the manifest validator's list | the bus module's own delivery waits on its pipeline (ADR 0666 §4) |
|
||||
| The gate no foundation part, its `source` in the old section it already has | the bus module's delivery waits on no act of the gate's; only the key's layout changes |
|
||||
| The verbs `register`, `policy`, `watch`, `unwatch`, `registrations` and the event `registration-changed` on `mesh-catalog` | one verb per trusted act, each its own ask naming what moves; readers follow the event (ADR 0596) |
|
||||
| The seed of the first registrations proposed as one ask, with the statuses the check judged until then and approval `bypass`, raised again by `indexer_seed_again` | registering is a trusted act (ADR 0666 §2), and one ask for the whole seed is how placement was adopted (ADR 0567); a declined or expired seed must not leave the pipelines stopped with no way on |
|
||||
| Code review refused as `required` until forge accounts are bound to bus identities | a review is refused from its author (ADR 0666 §17), which cannot be told until then |
|
||||
| The seat `git`'s read verb `branch` and event `branch-moved`, kept on its seat stream | registering reads a branch's protection through the seat `git` (ADR 0666 §2); a branch moves by a merge or an admitted push; a stream keeps a move said while the bridge is down |
|
||||
| The watchman's finding `pipeline-stands` for a step or a head still five minutes, cleared by the step's end or the head's `pipeline-started` | the record's five minutes (ADR 0666 §18), one finding for both, timed from the runner's events |
|
||||
| The runner's finding `pipeline-failed`, the author's for two hours, then the operator's | ADR 0666 §18 with ADR 0505 §5, §6 |
|
||||
| A module's watched branch and its `build` in the placement key, set by a proposal | a placement names the branch and a return is one value in it (ADR 0666 §3, §18); every placement change goes by a proposal (ADR 0567) |
|
||||
| The gate's `source.<branch>`, its verb `source` and event `source-moved` | one source revision per watched branch (ADR 0666 §3), read through the seat (G's prepare, the indexer's watch of the gate's `source`) |
|
||||
| The build seats' verb `steps` and accepted kind `step` on `check`; the assigner's kind `step` on `mesh-wants`; `step-ended` with the node in its subject | steps are asked on the serving seat's work queue (ADR 0666 §4); the `check` stream already orders after `delivery`; a node's account says only its own node's ends (ADR 0363 §2) |
|
||||
| The outcomes, with `accepted`, `superseded` and `cancelled`; an approval expired or refused ends `declined`, replaced `superseded` | every end a step can have is said as itself (ADR 0666 §7) |
|
||||
| The seed of the first registrations proposed as one ask, with the statuses the check judged until then and approval `bypass`, raised again by `indexer_seed_again` | registering is a trusted act (ADR 0666 §3), and one ask for the whole seed is how placement was adopted (ADR 0567); a declined or expired seed must not leave the pipelines stopped with no way on |
|
||||
| Code review refused as `required` until forge accounts are bound to bus identities | a review is refused from its author (ADR 0666 §22), which cannot be told until then |
|
||||
| The seat `git`'s read verb `branch` and event `branch-moved`, kept on its seat stream | registering reads a branch's protection through the seat `git` (ADR 0666 §3); a branch moves by a merge or an admitted push; a stream keeps a move said while the bridge is down |
|
||||
| The watchman's finding `pipeline-stands` for a step or a head still five minutes, cleared by the step's end or the head's `pipeline-started` | the record's five minutes (ADR 0666 §24), one finding for both, timed from the runner's events |
|
||||
| The runner's finding `pipeline-failed`, the author's for two hours, then the operator's | ADR 0666 §24 with ADR 0505 §5, §6 |
|
||||
| A module's watched branch and its `build` in the placement key, set by a proposal | a placement names the branch and a return is one value in it (ADR 0666 §6, §24); every placement change goes by a proposal (ADR 0567) |
|
||||
| The gate's `source.<branch>`, its verb `source` and event `source-moved` | one source revision per watched branch (ADR 0666 §6), read through the seat (G's prepare, the indexer's watch of the gate's `source`) |
|
||||
| The build seats' verb `steps` and accepted kind `step` on `check`; the assigner's kind `step` on `mesh-wants`; `step-ended` with the node in its subject | steps are asked on the serving seat's work queue (ADR 0666 §7); the `check` stream already orders after `delivery`; a node's account says only its own node's ends (ADR 0363 §2) |
|
||||
| The outcomes, with `accepted`, `superseded` and `cancelled`; an approval expired or refused ends `declined`, replaced `superseded` | every end a step can have is said as itself (ADR 0666 §10) |
|
||||
| `approval` asked last, its `about` the module and the branch | the operator approves a commit the mesh already judged, the point ADR 0661 §3 kept in one place; one ask per module and branch, a newer commit's replacing it |
|
||||
| A superseded pipeline's asks dropped by `drop`, and a pipeline superseded only when its module's fingerprint changed | a cancelled pipeline must leave no ask on a stream (ADR 0664 §4; G's prepare); a module the commit did not change has nothing newer to run (ADR 0666 §6) |
|
||||
| A group's wants only on `group-ended` | a group is delivered whole or not at all (ADR 0666 §6; research 086, R5) |
|
||||
| A superseded pipeline's asks dropped by `drop`, and a pipeline superseded only when its module's fingerprint changed | a cancelled pipeline must leave no ask on a stream (ADR 0664 §4; G's prepare); a module the commit did not change has nothing newer to run (ADR 0666 §9) |
|
||||
| A group's wants only on `group-ended` | a group is delivered whole or not at all (ADR 0666 §9; research 086, R5) |
|
||||
| The six kinds derived from existing words, `needs` per artifact only where nothing says it | one form of each fact (ADR 0656 §6); the catalog entry's `needs` already exists from G |
|
||||
| The cycle rule in the indexer's graph | the graph is the indexer's, and the checking program goes with the checker |
|
||||
| The builder's seat `mesh-builds` and its event `package-published` | the record has the builder say the publication as an event of its seat (ADR 0666 §12); its waits move only when a later change gives the seat its verbs |
|
||||
| Each state's object store `<state>-objects` through mesh-sdk's small package, sent objects readable by a standing grant derived from the manifests, and the package's two tools | one object store per state, granted to its owner; the sender's declared callers and consumers read what it sends (ADR 0666 §13); only its users import it, so nothing else is rebuilt |
|
||||
| The builder's seat `mesh-builds` and its event `package-published` | the record has the builder say the publication as an event of its seat (ADR 0666 §15); its waits move only when a later change gives the seat its verbs |
|
||||
| Each state's object store `<state>-objects` through mesh-sdk's small package, sent objects readable by a standing grant derived from the manifests, and the package's two tools | one object store per state, granted to its owner; the sender's declared callers and consumers read what it sends (ADR 0666 §16); only its users import it, so nothing else is rebuilt |
|
||||
| The `run` ask published by the runner's account and the indexer's; the verb `run` called by the sessions and the operator only | the steps and the validation run code from the change, in the sandbox only, and each asker reads only its own step keys (ADR 0363 §2); a run publishes tagged packages, so nothing else may ask one |
|
||||
| The checker's step `check` becomes `pipeline`; the checker's kept verdicts taken into `kept` | the runner is an acting part in the checker's place (ADR 0666 §16); the first pipelines then run only what changed |
|
||||
| The field `callers` in a seat definition replaces the holders' trusted `callers`, a missing field admitting the holder roles and the operator only | the record makes the definition the grants part's one source (ADR 0666 §17); a field left out must open nothing |
|
||||
| `widens` in `pipeline-ended`, computed by the running runner over every part serving a step, passed on by the teller | a widening is said and nothing refuses it (ADR 0666 §17, §20); a change must not compute its own |
|
||||
| `merge-pull` judged from the forge module's own `failed-steps`, heard from `step-ended`, any run at the head's fingerprint counting unless a later rerun of that step passed, the protection read again on every `branch-moved` | the record has it judge from the events it consumes, never by a call, so a head merges while the runner is down (ADR 0666 §8, ADR 0596) |
|
||||
| The checker's step `check` becomes `pipeline`; the checker's kept verdicts taken into `kept` | the runner is an acting part in the checker's place (ADR 0666 §19); the first pipelines then run only what changed |
|
||||
| The field `callers` in a seat definition replaces the holders' trusted `callers`, a missing field admitting the holder roles and the operator only | the record makes the definition the grants part's one source (ADR 0666 §20); a field left out must open nothing |
|
||||
| `widens` in `pipeline-ended`, computed by the running runner over every part serving a step, passed on by the teller | a widening is said and nothing refuses it (ADR 0666 §23, §26); a change must not compute its own |
|
||||
| `merge-pull` judged from the forge module's own `failed-steps`, heard from `step-ended`, any run at the head's fingerprint counting unless a later rerun of that step passed, the protection read again on every `branch-moved` | the record has it judge from the events it consumes, never by a call, so a head merges while the runner is down (ADR 0666 §11, ADR 0596) |
|
||||
| The new assigner before the new `merge-pull` and the runner, by `needs`, both switching on the first `registration-changed` | a merge with no Approve must never reach an assigner that writes wants without a pipeline (ADR 0667 §5) |
|
||||
| The forge bridge's finding `branch-unprotected` | a move of a branch whose protection was removed starts no delivering pipeline and is said (ADR 0666 §3) |
|
||||
| The verb `recovery` of `mesh-delivery` | a recovery is named by its author as a fact the bus keeps with who said it, never read from text (ADR 0666 §20, research 086 R10) |
|
||||
| The forge bridge's finding `branch-unprotected` | a move of a branch whose protection was removed starts no delivering pipeline and is said (ADR 0666 §6) |
|
||||
| The verb `recovery` of `mesh-delivery` | a recovery is named by its author as a fact the bus keeps with who said it, never read from text (ADR 0666 §26, research 086 R10) |
|
||||
| No forge status for a pipeline | the step results live on the bus (research 086 R10), shown by the runner and the delivery record; a status would be a second copy outside it |
|
||||
| The runner's `pipelines` kept 30 days, its outputs 7, keyed by source revision | the delivery record keeps its own copy of the events for 90 days; about 300 pipelines a day must fit its caps |
|
||||
| The checker's removal after the first end-to-end pipeline and a tested restore, its backup kept 90 days | ADR 0667 §6; 90 days is the delivery records' retention, the longest a trace reads back |
|
||||
@@ -1059,7 +1059,7 @@ holds:
|
||||
|
||||
- **the group's state**: the heads, the verdicts, the checks and the asks, which `merges` holds today; from milestone
|
||||
G's delivery the pipelines' `step-started`, `step-ended` and `pipeline-ended` in place of the verdicts, the checks and
|
||||
the asks, kept as long as the record (ADR 0666 §6);
|
||||
the asks, kept as long as the record (ADR 0666 §9);
|
||||
- **the trace**: the milestone, its issues, its pull requests, their commits, and the graph revisions the delivery
|
||||
moved between;
|
||||
- **what happened to each entry on each node**: for every entry of the graph difference, taken in, built, checked,
|
||||
@@ -1092,7 +1092,7 @@ ADR 0656.
|
||||
the record and asks the operator nothing again (issue 1972). The Approve is withdrawn only as ADR 0441 §1 has it,
|
||||
when a member stops being mergeable, and a carried verdict is read as current (ADR 0548 §8). From G's delivery no
|
||||
Approve is asked per merge; an `approval` step's answer is the runner's, kept in the record as its step's end
|
||||
(ADR 0666 §7).
|
||||
(ADR 0666 §10).
|
||||
- **From G's delivery, a record for every landed merge.** A session merges through the seat `git` and the gate merges
|
||||
nothing, so every merge is one the gate did not make: the gate opens a record for each source revision of a watched
|
||||
branch the indexer takes in, a group's members in one, and `forge-made` no longer marks a record apart. A merge its
|
||||
@@ -1192,7 +1192,7 @@ checker's `mesh/check` from a watch of the checker's state `owed`: reads of anot
|
||||
- **A group's merges follow one another, until G's delivery.** The gate says a group's next `merge-pull` only once the previous member's
|
||||
merged message is heard (ADR 0441 §5), so a member the forge refuses holds the rest, and none is merged ahead.
|
||||
- **From G's delivery the gate owes no merge, and the checker nothing.** A session calls `merge-pull` itself (ADR 0666
|
||||
§8), and a group's members land one by one, the group ending when every member has (*Groups*); the checker's `owed`
|
||||
§11), and a group's members land one by one, the group ending when every member has (*Groups*); the checker's `owed`
|
||||
goes with the checker, and the runner owes the forge nothing, a pipeline's result living on the bus. The gate still
|
||||
owes the delivery's view, a comment and the note's line, performed by the forge bridge as above.
|
||||
- **The bridge catches up from the seat.** At its start the bridge resumes its durable consumer and also reads
|
||||
@@ -1258,7 +1258,7 @@ backup hold, superseded, covered, stopped, retired and failed) and the machine s
|
||||
module's progress on each node is its want against its have, shown by the view (ADR 0539 §17).
|
||||
|
||||
**From milestone G's delivery the gate keeps no merge states.** With no check before a merge and no Approve per merge
|
||||
(ADR 0666 §7, §14), nothing is `proposed`, `ready`, `rejected` or `held` before a merge: a commit's states are its
|
||||
(ADR 0666 §10, §17), nothing is `proposed`, `ready`, `rejected` or `held` before a merge: a commit's states are its
|
||||
pipeline's steps, kept by the runner (*Pipeline steps and the policy*). The table, the gate's `table`, `recheck` and
|
||||
`close` and the one key per pull request go with the check; `stalled` lists the acts owed to the forge past their 15
|
||||
minutes and the records `record-open` names.
|
||||
@@ -1351,9 +1351,9 @@ Findings 11). How each is kept, read and retained is this design's choice under
|
||||
it runs (ADR 0656, which changes ADR 0571 §8).
|
||||
- **From G's delivery, per watched branch and between artifacts.** The catalog graph is kept once per watched branch,
|
||||
each revision naming its branch, and its edges run between artifact references, of the six kinds of *Dependencies
|
||||
between artifacts* (ADR 0666 §3, §11). The assigner computes a node's entries from the catalog graph of the branch its
|
||||
between artifacts* (ADR 0666 §6, §14). The assigner computes a node's entries from the catalog graph of the branch its
|
||||
placement names, and writes a want from a revision of that branch whose `required` steps passed, in place of a trunk
|
||||
revision's alone (ADR 0666 §6, which changes ADR 0656 §2).
|
||||
revision's alone (ADR 0666 §9, which changes ADR 0656 §2).
|
||||
- **Reverted.** Only the new form is written: the indexer, the assigner and the gate keep nothing of ADR 0603 §2's
|
||||
keys or of `merges` and `turns` beside the new forms, since nothing reads them after milestone G. A revert of
|
||||
milestone G is a change like any other, checked and delivered, and the delivery system restores what it must
|
||||
@@ -1401,7 +1401,7 @@ Findings 11). How each is kept, read and retained is this design's choice under
|
||||
candidate's graph writes none (ADR 0656). From G's delivery a want comes from a revision of the watched branch a
|
||||
placement chose whose `required` steps passed, and a candidate is a run on request's: the indexer builds it on the
|
||||
runner's `run-started` and drops it on that run's `pipeline-ended`, the gate's `heads-replaced` no longer making
|
||||
candidates (ADR 0666 §6, §15).
|
||||
candidates (ADR 0666 §9, §18).
|
||||
- **Each part acts on its own entries.** The builder, the build modules and the grants part each act when their own
|
||||
entries in the new revision differ from what they run (ADR 0656), reading them through the seat `mesh-wants`'s verbs
|
||||
and events, never its bus state (ADR 0596), and naming no other module (ADR 0656). The node-engine acts on its want
|
||||
@@ -1431,7 +1431,7 @@ Findings 11). How each is kept, read and retained is this design's choice under
|
||||
candidate's view is read only by the parts that judge a candidate, inside the check its manifest validator and
|
||||
composer, and the indexer's candidate pass (ADR 0656, which changes ADR 0636 §4 in that the candidate pass joins
|
||||
them). From G's delivery a running part acts on a revision of a watched branch as on a trunk revision, and a
|
||||
candidate's view is read only by a run on request's steps and the indexer's candidate pass (ADR 0666 §3, §15).
|
||||
candidate's view is read only by a run on request's steps and the indexer's candidate pass (ADR 0666 §6, §18).
|
||||
- **Every other reader of which modules exist reads the catalog half, in the same milestone.** From milestone G the
|
||||
indexer declares no state `modules` and serves neither its tool `indexer_read_modules` nor a view of it (*Reverted*,
|
||||
above), so every module that learns from it which modules exist moves in milestone G, not after: the watchman (its
|
||||
@@ -1514,7 +1514,7 @@ ADR 0656 leaves how each part is built to this design, under issue 1921; these f
|
||||
- **An acting rule's fields.** The seat's definition is where ADR 0656 has an acting part declare what it acts on. A
|
||||
seat's definition gains one optional field `acts`, a list of rules, each with three fields of its own: `step`, one of `take-in`,
|
||||
`validate`, `check`, `build`, `compose`, `grant` and `place`, and from G's delivery `pipeline`, the runner's, in
|
||||
`check`'s place (ADR 0666 §16); `on`, either `every` (every module) or a `language`
|
||||
`check`'s place (ADR 0666 §19); `on`, either `every` (every module) or a `language`
|
||||
naming the language of the modules it acts on, matched against what the manifest says its language is, as the
|
||||
indexer's language map matches today; and `bound`, how long an entry waits in that step for the acting part's new
|
||||
version (*An acting part's new version acts first*, below, gives each step's default). The definition format's own
|
||||
@@ -1848,7 +1848,7 @@ names go, since every new acting part needed code changes elsewhere (research 08
|
||||
acting rule changes what a part acts on across every module it matches, so the operator's Approve ask of a change
|
||||
names any acting rule it adds, and any it widens: a `step`, an `on` or a longer `bound` that now matches more
|
||||
modules or holds them longer is named like an added rule. From G's delivery there is no Approve ask per merge, and
|
||||
the pipeline's end names it in `widens` instead, refusing nothing (ADR 0666 §17).
|
||||
the pipeline's end names it in `widens` instead, refusing nothing (ADR 0666 §23).
|
||||
- **Each step's wait is its own part's, read and released by its own tools.** The part that does a step holds its
|
||||
wait, so each wait has one owner that already holds that step's state, and says `wait-held` and `wait-ended` (*What
|
||||
each step says*) with the step, the acting part, its version, the entry and since when:
|
||||
@@ -1900,7 +1900,7 @@ commit on the SDK's trunk or the head of an SDK pull request the forge holds, op
|
||||
## Checks
|
||||
|
||||
**Until milestone G's delivery.** The sections under *Checks* hold as written until then, and make milestone G's own
|
||||
check (ADR 0667 §2). From its delivery the pipeline makes the check and the checker goes (ADR 0666 §14): what each
|
||||
check (ADR 0667 §2). From its delivery the pipeline makes the check and the checker goes (ADR 0666 §17): what each
|
||||
part of the checker did, and where it goes, is in *The pipeline makes the check, and the checker goes*.
|
||||
|
||||
### One check per set of heads, kept by the bus
|
||||
@@ -2004,10 +2004,10 @@ on the operator's Approve; below).*
|
||||
**Removed at research 085's milestone.** The hold, the merge turns, their stalled line, the gate's tools for them and
|
||||
the setting `check-gates-merge` go in milestone G, the gate's and the forge module's alike (the operator, on Telegram,
|
||||
2026-11-09 01:11 UTC, choosing "Remove them in G"; the forge's merge then judges no check, *The seat `git`*). The setting has been false since 2026-10-25, so the gate wrote no turn and held no merge in that time, and the
|
||||
operator's word for G is that no check gates delivery (1921's note of 2026-11-07). From G's delivery no merge waits on a check, and none on an Approve either (ADR 0666 §7): the checker is gone, and the
|
||||
operator's word for G is that no check gates delivery (1921's note of 2026-11-07). From G's delivery no merge waits on a check, and none on an Approve either (ADR 0666 §10): the checker is gone, and the
|
||||
pipeline runs on the landed commit (*Pipelines per module*). **Its record is accepted:** ADR 0661 ends ADR 0548 §2
|
||||
to §4, §9 and §10 and ADR 0551 and changes ADR 0534 §4's judgement of `mesh/check` by the merge; until G's delivery the
|
||||
rule below holds as those records have it. ADR 0662 is withdrawn; G builds ADR 0661 §1, §2 and §6, and ADR 0666 §7
|
||||
rule below holds as those records have it. ADR 0662 is withdrawn; G builds ADR 0661 §1, §2 and §6, and ADR 0666 §10
|
||||
changes its §3 to §5 (the merge on the Approve alone), which G therefore builds for no merge. Beside it, ADR 0663 (accepted: the indexer answers `revision` in its own runtime to
|
||||
exactly the parts that invoke it, the tool runner among them) holds the tool
|
||||
runner's first view of the catalog half (*Every other reader of which modules exist*). How it is checked: in the gate's whole-module test an approved merge into a
|
||||
@@ -2191,7 +2191,7 @@ running versions never check in their place, and a check fails, naming the part,
|
||||
|
||||
A try says beforehand whether a check will pass. It is the check's own code run on commits nobody pushed to a
|
||||
pull request, and it owes the forge nothing. It holds until milestone G's delivery, when the runner's run on request
|
||||
takes its place and the checker's try, its events and the indexer's try candidates go (ADR 0666 §15).
|
||||
takes its place and the checker's try, its events and the indexer's try candidates go (ADR 0666 §18).
|
||||
|
||||
- **A try is a delivery group at exact commits.** The checker's try takes one or more members, each a repository
|
||||
and the exact commit asked, never a branch's head, with an optional trunk commit. One repository at one commit
|
||||
@@ -2286,7 +2286,7 @@ takes its place and the checker's try, its events and the indexer's try candidat
|
||||
|
||||
## The Approve and the merge
|
||||
|
||||
*ADR 0421, ADR 0398 §3, ADR 0406 §1, ADR 0659; from milestone G's delivery ADR 0666 §7, §8.*
|
||||
*ADR 0421, ADR 0398 §3, ADR 0406 §1, ADR 0659; from milestone G's delivery ADR 0666 §10, §11.*
|
||||
|
||||
**Until milestone G's delivery**, which is merged under it (ADR 0667 §2). From that delivery no Approve is asked per
|
||||
merge and the gate merges nothing: a session merges a pull request through the seat `git`'s `merge-pull`, and
|
||||
@@ -2328,7 +2328,7 @@ session merges a pull request*).
|
||||
merges through the seat `git`'s verb `merge-pull`, which judges those two and no check, and a trunk move holds no
|
||||
merge for its carry (ADR 0661; *The seat `git`*, under *The verbs*). This shape is built for no merge: milestone G's
|
||||
own merges are made by the running gate, and from G's delivery `merge-pull` is the session's own act, judged on the
|
||||
pull request's head, the branch's protection and the runs at its fingerprint, never on an Approve (ADR 0666 §8, which
|
||||
pull request's head, the branch's protection and the runs at its fingerprint, never on an Approve (ADR 0666 §11, which
|
||||
changes ADR 0661 §3 to §5).
|
||||
- **A push or a Decline ends the Approve.** A new head ends its ask or its Approve, for a group every member's, and
|
||||
is said once on the pull request; the new head is asked again once its checks pass. A Decline merges nothing and
|
||||
@@ -2350,7 +2350,7 @@ session merges a pull request*).
|
||||
(*Taken in by the indexer it names*, below; ADR 0633).
|
||||
- **From milestone G's delivery, per watched branch.** The gate writes one source revision per watched branch,
|
||||
`source.<branch>`, as a commit or a group lands there; the pipeline runs on each revision the indexer takes in, and
|
||||
the wants follow a revision whose `required` steps passed, on the branch each placement chose (ADR 0666 §3, §6).
|
||||
the wants follow a revision whose `required` steps passed, on the branch each placement chose (ADR 0666 §6, §9).
|
||||
- **From research 085's milestone, the wants follow the trunk's assignment graph.** A merge taken in makes a
|
||||
catalog graph revision and then an assignment graph revision; the assigner writes each want from that revision,
|
||||
its rules unchanged (ADR 0656), and each acting part's new version acts first in its own step (ADR 0656; *Two
|
||||
@@ -2458,7 +2458,7 @@ timer. A group's merges arrive together.
|
||||
`take-in.taken`: a hand take-in as any take-in does, and a hand drop naming the drop, for a merge whose wait was
|
||||
said pending, so the watchman's `take-in-waits` clears; a drop of a merge never said pending emits none (ADR 0633
|
||||
§5, ADR 0639 §9).
|
||||
- **From milestone G's delivery** (ADR 0666 §3, §10, which change ADR 0633 §1 and §3 to §6): before any take-in, on every
|
||||
- **From milestone G's delivery** (ADR 0666 §6, §13, which change ADR 0633 §1 and §3 to §6): before any take-in, on every
|
||||
watched branch, the running indexer validates the revision with the manifest validator built from its heads, in the
|
||||
sandbox, and a revision it refuses stays pending, as the bullets above have it, with the way back a revert; a pending
|
||||
revision holds only its own watched branch; a group's member reaches it by landing, and the group ends when the gate's
|
||||
@@ -2979,13 +2979,13 @@ From research 085's milestone the seat gains:
|
||||
|---|---|
|
||||
| `groups` with a group | that group's members, which the forge bridge reads in place of the gate's `merges` state (ADR 0656), and the acts the gate said it owes the forge for it, each with its id and its recorded outcome (*What the gate owes the forge*) |
|
||||
| `owed` | an act the gate owes the forge (a merge, a status, the delivery's view, a comment, a line on the commit's note), with its pull request, head and id, on `mesh.seat.mesh-delivery.event.owed.<repository>.<number>`, said only from the gate's account and heard by the forge bridge through a durable consumer (*What the gate owes the forge*) |
|
||||
| `milestone-asked`, `milestone-withdrawn`, `milestone-answered` | until G's delivery: the one Approve ask per milestone (ADR 0493 §9 as ADR 0659 §1 changes it, issue 1783), held until it is answered, or withdrawn by a new head and asked again (ADR 0441 §1); said on `mesh.seat.mesh-delivery.event.<event>`, the milestone in the event, apart from each delivery's `transition`, which stays as it is, so a waiter on one member's pull request wakes only on that member's `transition`. G's delivery ends the ask and its three events with the Approve per merge (ADR 0666 §7) |
|
||||
| `milestone-asked`, `milestone-withdrawn`, `milestone-answered` | until G's delivery: the one Approve ask per milestone (ADR 0493 §9 as ADR 0659 §1 changes it, issue 1783), held until it is answered, or withdrawn by a new head and asked again (ADR 0441 §1); said on `mesh.seat.mesh-delivery.event.<event>`, the milestone in the event, apart from each delivery's `transition`, which stays as it is, so a waiter on one member's pull request wakes only on that member's `transition`. G's delivery ends the ask and its three events with the Approve per merge (ADR 0666 §10) |
|
||||
| `record-opened` | a delivery record opened, which the watchman times for `record-open` |
|
||||
| `pinned`, `freed`, `heads-replaced` | the events by which the indexer and the assigner keep or drop graph revisions, said only from the gate's account (*The delivery record*) |
|
||||
| `record-ended`, `filling`, `full`, `room` | a delivery record ended; the ledger past 80 % of its cap; the ledger full; the ledger back below its cap (*The delivery record*) |
|
||||
|
||||
From milestone G's delivery the seat's `table`, `recheck` and `close` go with the merge states (*The state table*),
|
||||
the milestone ask and its three events with the Approve per merge, and it gains (ADR 0666 §3, §20):
|
||||
the milestone ask and its three events with the Approve per merge, and it gains (ADR 0666 §6, §26):
|
||||
|
||||
| Verb or event | Answers or does |
|
||||
|---|---|
|
||||
@@ -2995,7 +2995,7 @@ the milestone ask and its three events with the Approve per merge, and it gains
|
||||
| `record-opened`, `recovery-merged` | a delivery record opened; a merge named a recovery, which the teller passes on to every channel |
|
||||
|
||||
**The seat `mesh-pipeline-runner`**, from milestone G's delivery, defined in `mesh-delivery-contracts` with the callers
|
||||
of each verb (ADR 0666 §4, §17, §19):
|
||||
of each verb (ADR 0666 §7, §20, §25):
|
||||
|
||||
| Verb | Answers or does | Callers |
|
||||
|---|---|---|
|
||||
@@ -3041,7 +3041,7 @@ parts' manifests declare in `invokes` and `consumes` and what their code calls,
|
||||
| `contains` | whether one commit contains another | the indexer, the gate (`gitea_contains`) |
|
||||
| `statuses` | the statuses a commit carries | the gate (`gitea_commit_statuses`) |
|
||||
| `status`, `comment`, `view`, `note` | a commit status, a comment, the delivery's one view comment, a line on the commit's note under `refs/notes/mesh-plan`; a comment and a note line carry the act's id and an id already held is skipped | the forge bridge alone, performing the gate's and the checker's `owed` (`gitea_commit_status`, `gitea_add_comment`, `gitea_delivery_view`, `gitea_note_append`) |
|
||||
| `merge-pull` | until G's delivery: merges a pull request at the head the operator's Approve names; refuses a head that moved, a branch no rule guards, a head the Approve does not name and a merge git refuses; judges no check (below). From G's delivery: merges with the forge tools' account (ADR 0398 §2) at the head the caller names, judging that it is still the pull request's head and that the branch's protection refuses a direct push, the protection read again on every `branch-moved`, and refusing a head when any run at its build-input fingerprint failed a `required` step, judged from its own state `failed-steps` heard from the runner's `step-ended`, never by a call; a head with no run yet or a passed one merges, it never waits for a run and never asks an Approve (ADR 0666 §8). A pull request already merged at that head is answered performed | until G's delivery the forge bridge alone (`gitea_merge_pull_request`); from it any session the tool runner proves, and the operator |
|
||||
| `merge-pull` | until G's delivery: merges a pull request at the head the operator's Approve names; refuses a head that moved, a branch no rule guards, a head the Approve does not name and a merge git refuses; judges no check (below). From G's delivery: merges with the forge tools' account (ADR 0398 §2) at the head the caller names, judging that it is still the pull request's head and that the branch's protection refuses a direct push, the protection read again on every `branch-moved`, and refusing a head when any run at its build-input fingerprint failed a `required` step, judged from its own state `failed-steps` heard from the runner's `step-ended`, never by a call; a head with no run yet or a passed one merges, it never waits for a run and never asks an Approve (ADR 0666 §11). A pull request already merged at that head is answered performed | until G's delivery the forge bridge alone (`gitea_merge_pull_request`); from it any session the tool runner proves, and the operator |
|
||||
|
||||
| Event of the seat | Says | Heard by (today's event) |
|
||||
|---|---|---|
|
||||
@@ -3062,7 +3062,7 @@ Each is said on `mesh.seat.git.event.<event>`, declared in the seat's definition
|
||||
two package seats' verbs (design 51), gains a line per verb of the seat `git`: the act verbs name the forge bridge
|
||||
alone, the reads name each part that declares them in `invokes`; the grants part grants by it, and the holder
|
||||
refuses a caller it does not name. From G's delivery the callers per verb are the seat definition's field `callers`,
|
||||
the grants part's one source (ADR 0666 §17): `status`, `comment`, `view` and `note` the forge bridge alone,
|
||||
the grants part's one source (ADR 0666 §20): `status`, `comment`, `view` and `note` the forge bridge alone,
|
||||
`merge-pull` the persons and agent sessions the tool runner proves, the reads the parts that declare them. The forge module's own acting tools (`gitea_merge_pull_request`,
|
||||
`gitea_commit_status`, `gitea_delivery_view`, `gitea_note_append`, `gitea_add_comment`) retire with the milestone,
|
||||
and so do its watch of the checker's state `owed` and its read of the gate's `source`, so the bridge stays the one
|
||||
@@ -3073,7 +3073,7 @@ Each is said on `mesh.seat.git.event.<event>`, declared in the seat's definition
|
||||
ADR 0548 §2 to §4, §9 and §10 also changes ADR 0534 §4's judgement of `mesh/check` by the merge; it is to be accepted
|
||||
before the push (*Nothing merges into a repository under check*). From G's delivery it judges no Approve either, its caller
|
||||
is any session the tool runner proves, and it refuses a head when any run at its fingerprint failed a `required` step,
|
||||
never waiting for one (ADR 0666 §8; *Approval is a step, and a session merges a pull request*). The reads the
|
||||
never waiting for one (ADR 0666 §11; *Approval is a step, and a session merges a pull request*). The reads the
|
||||
gate would have needed to merge (the forge's word for a conflict, the base's required statuses, the merging account's
|
||||
write access) are not added: no part of the mesh but `merge-pull` merges, and it answers git's own refusal of a merge
|
||||
as refused.
|
||||
@@ -3857,8 +3857,8 @@ B0's own choices, each checked by the rows of *How it is checked* below:
|
||||
- Who may review a change, and the review verb's grant: issue 1782, outside milestone G; no part reads a review line
|
||||
meanwhile, and the verb, if built, gates nothing (ADR 0659 §2, §3).
|
||||
- **A session's merge of a recovery fix** is decided: an ordinary merge through its pipeline, named a recovery by its
|
||||
author (ADR 0666 §20; *A recovery fix is an ordinary merge*). The verb this design sketched for it is not built.
|
||||
- **How the runner knows a review's caller is the commit's author.** ADR 0666 §17 refuses a review from the commit's
|
||||
author (ADR 0666 §26; *A recovery fix is an ordinary merge*). The verb this design sketched for it is not built.
|
||||
- **How the runner knows a review's caller is the commit's author.** ADR 0666 §22 refuses a review from the commit's
|
||||
author; the forge names the author by its forge account and the runtime proves the caller's bus account, and no
|
||||
record binds the two. Until one does, code review is never a `required` step: `register` and `policy` refuse it
|
||||
(*A module's registration*); issue 1966 tracks it (note 157).
|
||||
|
||||
@@ -266,7 +266,7 @@ the verb.
|
||||
|
||||
### The versions
|
||||
|
||||
- **From the delivery of design 47's milestone G, a package is numbered when it is published** (ADR 0666 §12). The
|
||||
- **From the delivery of design 47's milestone G, a package is numbered when it is published** (ADR 0666 §15). The
|
||||
builder numbers a package's version at its publication, never only when its build is claimed: a package's trunk
|
||||
build is claimed with no number and built by its digest, and once its build is done the builder gives it the next
|
||||
count of its series, under compare-and-set, and says `numbered`, on which the build module calls `publish` with
|
||||
@@ -284,7 +284,7 @@ the verb.
|
||||
publishes nothing, `package-published` is said once per publication, and only the importing artifacts rebuild
|
||||
(design 47, test 80).
|
||||
- **A build that cannot read the published packages refuses**, naming the unread state, never building against a guess
|
||||
(ADR 0666 §12; design 47, test 70).
|
||||
(ADR 0666 §15; design 47, test 70).
|
||||
- **Until that delivery, the builder numbers every trunk build** of a package, image, bundle or archive at its claim: the package series
|
||||
its manifest declares (design 32; `0.1` when it declares none) and the next count for that name, under
|
||||
compare-and-set. Numbers follow the order of the forge bridge's merge events: a claim of a later merge waits until
|
||||
@@ -343,7 +343,7 @@ the verb.
|
||||
not wake on it, for each head of a delivery group member that declares a package; a person asks through `builder_tag`.
|
||||
From the delivery of design 47's milestone G the checker goes, and the pipeline runner says `tag-wanted` instead, on
|
||||
its own seat `mesh-pipeline-runner`, for each member that declares a package of a run on request of a group not yet
|
||||
merged (ADR 0666 §15): a group merged together is one source revision whose packages are published before its
|
||||
merged (ADR 0666 §18): a group merged together is one source revision whose packages are published before its
|
||||
dependents build, so only a run on request needs a tagged version. The
|
||||
builder consumes the event on a durable consumer and keeps the ask in its own state `tag-asks`, removed when its
|
||||
branch is merged or deleted, or its pull request closed. An ask the builder has not answered within five minutes is narrated in the build log
|
||||
|
||||
Reference in New Issue
Block a user