Answer the review of hq's finish: role names in the as-is delivery, ADR 0524-0529 named, stale check names fixed (issue 1296)

This commit is contained in:
2026-10-24 04:40:02 +02:00
parent ca460b681b
commit d08cac4e86
7 changed files with 37 additions and 30 deletions
+1 -1
View File
@@ -51,7 +51,7 @@ Decide the shape first:
```
then `# NNN. The title`, the title given to the tracker. **No status key**: the issue's status, owner and fix
live in the tracker (ADR 0275), and `cycle.py` refuses `status:`, `located-in:`, `fixed-by:`,
live in the tracker (ADR 0275), and the cycle test refuses `status:`, `located-in:`, `fixed-by:`,
`amended-design:`, `replay:` or `replay-none:` in any report. Notes and links go to the
tracker.
4. Write the symptom **as observed**, in plain terms, with the evidence that it happened.
+1 -1
View File
@@ -44,6 +44,6 @@ generated on demand and never written back to disk.
always generated, always ephemeral. This includes the ADR index — the hand-written one had
already drifted after a single addition, which is why it was removed, and the generated one
written into `02-DECISIONS/README.md` made every two open decisions conflict (issue 297), which
is why that went too. `index.py` fails if the list is stored there again.
is why that went too. the index test fails if the list is stored there again.
- Do not infer status from prose. Trust only a design's frontmatter, the tracker for an issue and the
knowledge base for a record; if one is wrong, flag it.
+16 -16
View File
@@ -41,24 +41,24 @@ named in its refusal: `knowledge-base.propose` refuses a record that breaks one
record, naming every reason at once, and the four rules that judge the whole record set run after every
acceptance and raise a condition when one fails (mesh-knowledge's `rules.go`, one table-test case per rule).
| Rule here until issue 426 | Where it lives now |
| Rule here until issue 426 (the Python checks, deleted with issue 1296) | Where it lives now |
|---|---|
| The records test's `rests-on`, for a record's `extends:` | the knowledge base's `rests-on` at propose, and the whole-set rule `rests-on-live` |
| The records test's `rests-on`, for a design's `decisions:` naming an accepted record | **nowhere yet**: this repository cannot read the knowledge base. The reviewer checks each new entry with `knowledge-base.get`. Designs become the knowledge base's own kind under issue 428 |
| The records test's `live-citation`, in a record | the knowledge base's `live-citation` |
| The records test's `live-citation`, in `00-META/` and `03-DESIGN/01-to-be/` | **nowhere yet**, as above: the reviewer checks a cited record's status with `knowledge-base.get`; issue 428 |
| The records test's `supersession` | the knowledge base's `supersedes-accepted` and `self-link`, and the whole-set rule `supersession` |
| The records test's `partial-supersession` | the knowledge base's `changes` link to a clause, `changes-in-force` and `supersedes-accepted`, and the whole-set rule `partial` |
| The records test's `clauses` | the knowledge base's `has-clause`, `clause-numbering`, `clause-lead` and `clause-size` |
| The records test's `numbering` | the knowledge base's `title` and `reserved` |
| The records test's `topics`, The index test's (a record's topic) | the knowledge base's `topic`, against the reading order The index test's still checks |
| The records test's `insights` | the knowledge base's `insight-form`; an accepted record changes by a new version marked as a progressive insight |
| `records.py` `rests-on`, for a record's `extends:` | the knowledge base's `rests-on` at propose, and the whole-set rule `rests-on-live` |
| `records.py` `rests-on`, for a design's `decisions:` naming an accepted record | **nowhere yet**: this repository cannot read the knowledge base. The reviewer checks each new entry with `knowledge-base.get`. Designs become the knowledge base's own kind under issue 428 |
| `records.py` `live-citation`, in a record | the knowledge base's `live-citation` |
| `records.py` `live-citation`, in `00-META/` and `03-DESIGN/01-to-be/` | **nowhere yet**, as above: the reviewer checks a cited record's status with `knowledge-base.get`; issue 428 |
| `records.py` `supersession` | the knowledge base's `supersedes-accepted` and `self-link`, and the whole-set rule `supersession` |
| `records.py` `partial-supersession` | the knowledge base's `changes` link to a clause, `changes-in-force` and `supersedes-accepted`, and the whole-set rule `partial` |
| `records.py` `clauses` | the knowledge base's `has-clause`, `clause-numbering`, `clause-lead` and `clause-size` |
| `records.py` `numbering` | the knowledge base's `title` and `reserved` |
| `records.py` `topics`, `index.py` (a record's topic) | the knowledge base's `topic`, against the reading order the index test still checks |
| `records.py` `insights` | the knowledge base's `insight-form`; an accepted record changes by a new version marked as a progressive insight |
| `index.py --print` | `knowledge-base.holds` with a topic |
| the cycle test research: a known status, `became:` when graduated | the knowledge base's `research-status`, `overview` and `became` |
| the cycle test no two decision records share a number | the knowledge base's `reserved`, and the issue tracker's counter behind `knowledge-base.reserve` |
| the cycle test an accepted decision cited by nothing | the knowledge base's whole-set rule `cited`: a record accepted there is cited by another record or names a home (`homes` at propose) |
| the cycle test a deferral names the issue that tracks it | the knowledge base's `deferral` |
| the words test over research efforts from 2026-10-07, and `kept` in `words-allowed.md` | the knowledge base's `retired-word` and `daemon-line`, from this glossary |
| `cycle.py` research: a known status, `became:` when graduated | the knowledge base's `research-status`, `overview` and `became` |
| `cycle.py` no two decision records share a number | the knowledge base's `reserved`, and the issue tracker's counter behind `knowledge-base.reserve` |
| `cycle.py` an accepted decision cited by nothing | the knowledge base's whole-set rule `cited`: a record accepted there is cited by another record or names a home (`homes` at propose) |
| `cycle.py` a deferral names the issue that tracks it | the knowledge base's `deferral` |
| `words.py` over research efforts from 2026-10-07, and `kept` in `words-allowed.md` | the knowledge base's `retired-word` and `daemon-line`, from this glossary |
## What is deliberately not checked
+1 -1
View File
@@ -14,7 +14,7 @@ the commit the knowledge base's records name as their source (issue 426).
This folder keeps one thing: the six topics of the reading order, in the order somebody would learn the
system. Each record names its own topic, and the knowledge base reads these lines through the records module
and refuses a record whose topic is not one of them. `index.py` checks that they are written.
and refuses a record whose topic is not one of them. the index test (`00-META/checks/`) checks that they are written.
1. **What the mesh is** — `topic: the mesh`. What it is for, and the parts it is made of.
2. **Its tiers, from the bottom up** — `topic: the tiers`. The foundation, the node and the controller, and
+14 -9
View File
@@ -17,6 +17,11 @@ decisions:
- "ADR 0382"
- "ADR 0395"
- "ADR 0398"
- "ADR 0524"
- "ADR 0525"
- "ADR 0527"
- "ADR 0528"
- "ADR 0529"
---
# Delivery — from a merge to the nodes, as it runs
@@ -31,15 +36,15 @@ build agent, the build queue and the two statuses `mesh/merge-gate` and `mesh/re
## Who does what
- **The parts of `mesh-delivery`** are modules of one repository, each a process with its own bus credential that
watches keys and writes keys (design 47, ADR 0429). Running now: the forge bridge (`mesh-delivery-forge-bridge`,
novox), the indexer (novox), the builder (`mesh-delivery-builder`, shanks), the checker (novox), the gate
(`mesh-delivery-gate`, which holds the seat `mesh-delivery`, novox), the teller (novox), the watchman (novox), the
status view (shanks) and the assigner (`mesh-delivery-assigner`, ace).
watches keys and writes keys (design 47, ADR 0429). Running now: the forge bridge (`mesh-delivery-forge-bridge`),
the indexer, the checker, the gate (`mesh-delivery-gate`, which holds the seat `mesh-delivery`), the teller and
the watchman on the control-node; the builder (`mesh-delivery-builder`) and the status view on the workstation;
and the assigner (`mesh-delivery-assigner`) on the home server (ADR 0524, ADR 0528).
- **The forge bridge** turns the forge's events into stream messages and is the only part that calls the forge. The
forge module (`gitea`, novox) still announces them through the forge's system webhook.
forge module (`gitea`, on the control-node) still announces them through the forge's system webhook.
- **The indexer** computes each module's fingerprint at the merge preview; **the builder** claims a build once per
fingerprint and orders it as an ask on the stream of the artifact's language.
- **The build modules** (`mesh-build-go` and `mesh-build-node` on three machines, `mesh-build-image` on one) hold the
- **The build modules** (`mesh-build-go` and `mesh-build-node` on three machines, `mesh-build-image` on one; ADR 0525) hold the
node seats `node-build-go`, `node-build-node` and `node-build-image`. Each pulls asks from the bus's work-queue
streams (deliveries first, then checks, then re-checks) while its node has a free slot of build capacity; no part
chooses the node. The seat `node-build-agent` and the module `build-agent` have no holder any more, and the seat
@@ -49,10 +54,10 @@ build agent, the build queue and the two statuses `mesh/merge-gate` and `mesh/re
**try** (`checker_try`, `checker_try_read`): the same check on a pushed branch, before a pull request. `checker_status`
shows the steps in flight by node and the candidates still without a verdict.
- **The gate** merges a delivery group's pull requests once the check, the review and the operator's Approve agree on
the same heads. The forge requires no status on any repository (ADR 0534).
the same heads. The forge requires no status on any repository (ADR 0534). The scripts `merge-check.sh` are gone from every repository (ADR 0529).
- **The assigner** composes the machines a change touches (the composition check the checker reads) and writes which
fingerprint each node should want, by its six rules; it only compares wants with what the controller sends.
- **The controller** (`mesh-controller`, novox) plans, orders, sends and judges. It computes a delivery plan for the
- **The controller** (`mesh-controller`, on the control-node) plans, orders, sends and judges. It computes a delivery plan for the
files a merge changes, moves only modules whose build source changed with their build dependents, and writes the
chain's links it owns. On 2026-10-24 the seat still lists 64 verbs, `queue` and `replay` among them; whether
those still do work was not read here, and the build agent they served has no holder.
@@ -65,7 +70,7 @@ build agent, the build queue and the two statuses `mesh/merge-gate` and `mesh/re
- A merge is made by the gate on the operator's Approve; the controller then makes a delivery plan, tiered along the
module graph, and sends it. `mesh-controller.plans` lists the plans and the delivery plans' tiers; a plan that
fails on a node says so and is retried by hand.
- **hq** builds no module: the checker runs hq's Go tests (`go test ./...`) as its check.
- **hq** builds no module: the checker runs hq's Go tests (`go test ./...`) as its check (ADR 0527).
## Where the record of what runs lives
+2
View File
@@ -4,6 +4,8 @@ status: implemented
code: [mesh-tools, mesh-host, mesh-controller]
updated: 2026-10-24
decisions:
- "ADR 0524"
- "ADR 0525"
- "ADR 0152"
- "ADR 0175"
- "ADR 0195"
+2 -2
View File
@@ -56,8 +56,8 @@ in running prose; a quotation keeps its words.
## Ground rules
- **Markdown only** — but for the four checks, Go tests in the package `00-META/checks/` with `go.mod` at the
root and no other Go code (ADR 0527), which the checker runs on every pull request as `mesh/check`;
until they replace them, `00-META/process/playbooks.html`, a drawn overview of the playbooks kept for a later docs site (the operator,
root and no other Go code (ADR 0527), which the checker runs on every pull request as `mesh/check`; and
`00-META/process/playbooks.html`, a drawn overview of the playbooks kept for a later docs site (the operator,
2026-10-19); a change to a playbook's steps updates it in the same pull request. Nothing checks that
yet: issue 1222 asks for the check.
A to-be design may also keep its reference mockup, the static HTML page the operator picked, in a