diff --git a/01-RESEARCH/001-module-domain-decomposition/00-overview.md b/01-RESEARCH/001-module-domain-decomposition/00-overview.md index 20210a13..409419f4 100644 --- a/01-RESEARCH/001-module-domain-decomposition/00-overview.md +++ b/01-RESEARCH/001-module-domain-decomposition/00-overview.md @@ -1,8 +1,15 @@ --- -status: active +status: graduated initiated: 2026-08-22 touches: [03-DESIGN/00-as-is/02-modules-and-manifests.md, 03-DESIGN/00-as-is/10-module-catalogue.md, 03-DESIGN/01-to-be/00-work-breakdown.md] -became: [02-DECISIONS/0001-mesh-brokers-nodes-host-agents-think.md] +became: + - 02-DECISIONS/0001-mesh-brokers-nodes-host-agents-think.md + - 02-DECISIONS/0009-modules-and-the-graph.md + - 02-DECISIONS/0037-where-a-module-lives.md + - 02-DECISIONS/0039-what-the-sdk-holds-and-refuses.md + - 02-DECISIONS/0173-the-operators-machine-is-the-meshs-and-a-module-is-what-it-declares.md + - 02-DECISIONS/0181-the-operator-account-is-a-node-fact-and-a-home-is-a-placement-root.md + - 02-DECISIONS/0244-the-mesh-is-described-in-domains-and-one-word-names-one-thing.md --- # 001 — Module domain decomposition @@ -54,8 +61,8 @@ Tracked in [`analysis.md`](analysis.md) under "Open questions". ## Deliberately not decided Recorded so they are not mistaken for oversights. Each is open, and each comes out of -[ADR 0001](../../02-DECISIONS/0001-mesh-brokers-nodes-host-agents-think.md); this effort stays -`active` until they are answered. +[ADR 0001](../../02-DECISIONS/0001-mesh-brokers-nodes-host-agents-think.md); how each was answered +is under *What it became* below. | Question | Status | |---|---| @@ -65,3 +72,16 @@ Recorded so they are not mistaken for oversights. Each is open, and each comes o | What the shared library keeps after extraction. | Open. Phase 3. | | Where human agent modality is recorded — which user, on which node, a human agent acts as. | Open. Required by the model; not yet stored. | | Which domains the modules outside the platform core group into. | Open, from [ADR 0009](../../02-DECISIONS/0009-modules-and-the-graph.md), which settles the principle and deliberately not the list. | + +## What it became + +*Closed 2026-10-10.* Every question left open was answered by a later record, or stopped applying. + +- **The scheduler and the executor** were questions about two of the predecessor's modules. The predecessor is + retired and the operator's machines are the mesh's ([ADR 0173](../../02-DECISIONS/0173-the-operators-machine-is-the-meshs-and-a-module-is-what-it-declares.md)), so neither module exists to place. +- **One catalogue repository or many**: [ADR 0037](../../02-DECISIONS/0037-where-a-module-lives.md) — the mesh's own parts live in the repositories that + build them, software the world made is described in one catalogue, and an application carries its + description at its own root. +- **What the shared library keeps**: [ADR 0039](../../02-DECISIONS/0039-what-the-sdk-holds-and-refuses.md) — the stable spine, and never a module's own client or tools. +- **Which user, on which node, a person acts as**: [ADR 0181](../../02-DECISIONS/0181-the-operator-account-is-a-node-fact-and-a-home-is-a-placement-root.md) — the operator account is a fact of the node. +- **Which domains the modules group into**: [ADR 0009](../../02-DECISIONS/0009-modules-and-the-graph.md) settled the principle and [ADR 0244](../../02-DECISIONS/0244-the-mesh-is-described-in-domains-and-one-word-names-one-thing.md) the domains. diff --git a/01-RESEARCH/006-mesh-from-scratch/00-overview.md b/01-RESEARCH/006-mesh-from-scratch/00-overview.md index 44baf1c8..d67e62f5 100644 --- a/01-RESEARCH/006-mesh-from-scratch/00-overview.md +++ b/01-RESEARCH/006-mesh-from-scratch/00-overview.md @@ -1,12 +1,25 @@ --- -status: active +status: graduated initiated: 2026-08-23 touches: - 02-DECISIONS/0001-mesh-brokers-nodes-host-agents-think.md - 02-DECISIONS/0009-modules-and-the-graph.md - 03-DESIGN/00-as-is/00-overview.md - 03-DESIGN/01-to-be/00-work-breakdown.md -became: [] +became: + - 02-DECISIONS/0004-a-node-and-how-it-joins.md + - 02-DECISIONS/0005-the-node-host.md + - 02-DECISIONS/0006-the-substrate-and-the-control-plane.md + - 02-DECISIONS/0028-the-substrate-supplies-the-control-plane-and-nothing-else.md + - 02-DECISIONS/0033-the-substrate-is-a-store-and-a-broker.md + - 02-DECISIONS/0037-where-a-module-lives.md + - 02-DECISIONS/0040-what-a-module-is.md + - 02-DECISIONS/0041-events-are-a-relationship.md + - 02-DECISIONS/0106-the-bus-is-nats.md + - 03-DESIGN/01-to-be/05-the-node-host.md + - 03-DESIGN/01-to-be/06-the-controller.md + - 03-DESIGN/01-to-be/07-the-foundation.md + - 03-DESIGN/01-to-be/08-connectivity.md --- # 006 — The mesh designed from nothing @@ -72,9 +85,9 @@ against taste: ## Status -A first skeleton exists, with four design moves that the current shape does not have. It is -`active` because two of them are unproven and one contradicts a record that is already -accepted. +A first skeleton exists, with four design moves that the current shape does not have. It was +held open because two of them were unproven and one contradicted a record that was already +accepted; how each was settled is under *What it became* below. **Finding worth stating up front:** [ADR 0001](../../02-DECISIONS/0001-mesh-brokers-nodes-host-agents-think.md) names nine bounded contexts and **none of them owns connectivity** — no overlay, no resolution, @@ -92,3 +105,16 @@ the catalogue where modules genuinely change together under one intent. The skel | ~~Does absorbing overlay, filtering, packages, supervision and the container runtime make the host too large?~~ | **Answered 2026-08-25** — [`host-size.md`](host-size.md). Measured: the absorption is smaller than the machinery that already applies state, and eight of ten adapters already carry no dependency. The risk is not size but direction, and it is two modules wide. The claim survives with its scope corrected — the host carries one concern, *apply declared state on this machine*, of which the six are instances. Recorded as [ADR 0005](../../02-DECISIONS/0005-the-node-host.md), designed in [`05-the-node-host.md`](../../03-DESIGN/01-to-be/05-the-node-host.md). | | ~~Four substrate services or five?~~ | **Answered conditionally**, which is the honest form — [`07-the-foundation.md`](../../03-DESIGN/01-to-be/07-the-foundation.md). The substrate is *what the control plane consumes and cannot grant itself*. The identity provider qualifies only if the control plane delegates authentication; if it authenticates natively it is an ordinary hosted service. The count follows from a decision not yet taken, and asserting four was asserting that decision. | | Does `feature` survive? | The skeleton splits it in two and argues the conflation is what makes the delivery pipeline hard to reason about. Unproven. | + +## What it became + +*Closed 2026-10-10.* The skeleton's moves became decisions and designs, and its open questions were settled by them. + +- **Where the record lives**: contexts integrate through events ([ADR 0041](../../02-DECISIONS/0041-events-are-a-relationship.md)) carried by the bus + ([ADR 0106](../../02-DECISIONS/0106-the-bus-is-nats.md)), and the foundation is exactly a store and a bus ([ADR 0033](../../02-DECISIONS/0033-the-substrate-is-a-store-and-a-broker.md), after [ADR 0006](../../02-DECISIONS/0006-the-substrate-and-the-control-plane.md) and + [ADR 0028](../../02-DECISIONS/0028-the-substrate-supplies-the-control-plane-and-nothing-else.md)). [to-be 06](../../03-DESIGN/01-to-be/06-the-controller.md) still names the record as open and points here; that sentence predates these records. +- **One repository per tier or per context**: [ADR 0037](../../02-DECISIONS/0037-where-a-module-lives.md). +- **Does `feature` survive**: no. [ADR 0040](../../02-DECISIONS/0040-what-a-module-is.md) defines a module by the software it delivers, not as a bucket of + features; *artifact* became the word for what a build produces. +- The answered rows above became [ADR 0004](../../02-DECISIONS/0004-a-node-and-how-it-joins.md) and [ADR 0005](../../02-DECISIONS/0005-the-node-host.md), and the designs [to-be 05](../../03-DESIGN/01-to-be/05-the-node-host.md), [to-be 07](../../03-DESIGN/01-to-be/07-the-foundation.md) and + [to-be 08](../../03-DESIGN/01-to-be/08-connectivity.md). diff --git a/01-RESEARCH/007-provisioning-as-the-core/00-overview.md b/01-RESEARCH/007-provisioning-as-the-core/00-overview.md index aef8c60f..6c12de99 100644 --- a/01-RESEARCH/007-provisioning-as-the-core/00-overview.md +++ b/01-RESEARCH/007-provisioning-as-the-core/00-overview.md @@ -1,11 +1,20 @@ --- -status: active +status: graduated initiated: 2026-08-23 touches: - 03-DESIGN/00-as-is/03-provisioning.md - 02-DECISIONS/0009-modules-and-the-graph.md - 01-RESEARCH/006-mesh-from-scratch/code-skeleton.md -became: [] +became: + - 02-DECISIONS/0028-the-substrate-supplies-the-control-plane-and-nothing-else.md + - 02-DECISIONS/0033-the-substrate-is-a-store-and-a-broker.md + - 02-DECISIONS/0078-the-store-and-broker-are-modules.md + - 02-DECISIONS/0112-a-module-definition-names-no-node-mesh-or-path.md + - 02-DECISIONS/0114-a-shared-credential-rotates-over-two-credentials.md + - 02-DECISIONS/0144-anything-on-a-machine-may-call-anything-on-it.md + - 02-DECISIONS/0224-a-provider-that-keeps-failing-a-consumer-is-a-problem-the-controller-reports.md + - 03-DESIGN/01-to-be/13-credentials-and-their-rotation.md + - 03-DESIGN/01-to-be/27-a-module-requires-the-mesh-resolves.md --- # 007 — Provisioning as the mesh's core mechanism @@ -49,3 +58,18 @@ make each of them fatal rather than annoying. | Can the **control plane** hold requirements, and what satisfies them before anything is installed? | The generalisation research 006 needs. Ties directly to the self-hosting transition. | | What happens when a requirement **cannot** be satisfied — no provider, provider on an unreachable node, provider not yet installed? | Today this is silent or a stall. It should be a stated, visible state. | | Does a requirement belong to a **module** or to one of its **parts**? | Research 006 splits `feature` into artifact and part. A part-scoped requirement means a database is not provisioned where the part that needs it is not installed. | + +## What it became + +*Closed 2026-10-10.* All five questions have an accepted answer. + +- **What a grant means**: the provider checks each consumer periodically and announces one it keeps failing, + which the controller reports ([ADR 0224](../../02-DECISIONS/0224-a-provider-that-keeps-failing-a-consumer-is-a-problem-the-controller-reports.md)). A consumer verifying its own grant was proposed and withdrawn the + same day ([ADR 0144](../../02-DECISIONS/0144-anything-on-a-machine-may-call-anything-on-it.md)). +- **Rotation with fan-out**: [ADR 0114](../../02-DECISIONS/0114-a-shared-credential-rotates-over-two-credentials.md), designed in [to-be 13](../../03-DESIGN/01-to-be/13-credentials-and-their-rotation.md). +- **The controller's own requirements**: the foundation is what the controller needs and cannot grant itself + ([ADR 0028](../../02-DECISIONS/0028-the-substrate-supplies-the-control-plane-and-nothing-else.md), [ADR 0033](../../02-DECISIONS/0033-the-substrate-is-a-store-and-a-broker.md), [ADR 0078](../../02-DECISIONS/0078-the-store-and-broker-are-modules.md)). +- **A requirement nobody can answer**: installing a module resolves every requirement or is refused, naming + each one ([ADR 0112](../../02-DECISIONS/0112-a-module-definition-names-no-node-mesh-or-path.md), designed in [to-be 27](../../03-DESIGN/01-to-be/27-a-module-requires-the-mesh-resolves.md)). +- **Module or part**: everything a module needs is that module's requirement ([ADR 0112](../../02-DECISIONS/0112-a-module-definition-names-no-node-mesh-or-path.md)); a module is + not split into separately selected parts. diff --git a/01-RESEARCH/009-migration/00-overview.md b/01-RESEARCH/009-migration/00-overview.md index e87fe364..4e7f9fc1 100644 --- a/01-RESEARCH/009-migration/00-overview.md +++ b/01-RESEARCH/009-migration/00-overview.md @@ -1,12 +1,18 @@ --- -status: active +status: abandoned initiated: 2026-08-23 touches: - 01-RESEARCH/006-mesh-from-scratch/code-skeleton.md - 03-DESIGN/01-to-be/01-end-to-end-testing.md - 02-DECISIONS/0016-the-lab.md - 03-DESIGN/00-as-is/00-overview.md -became: [] +became: + - 02-DECISIONS/0067-genesis-is-a-pivot.md + - 02-DECISIONS/0100-a-node-in-use-is-adopted-before-it-is-converged.md + - 02-DECISIONS/0105-the-mesh-adopts-the-predecessors-tunnel-in-place.md + - 02-DECISIONS/0119-a-taken-tunnels-predecessor-is-retired.md + - 02-DECISIONS/0173-the-operators-machine-is-the-meshs-and-a-module-is-what-it-declares.md + - 02-DECISIONS/0200-genesis-pivots-to-the-controller-as-a-container-and-the-first-push-hands-it-to-a-process.md --- # 009 — Getting from the mesh that exists to the mesh that is designed @@ -93,3 +99,11 @@ fix it. | How is the cutover **rehearsed** against something resembling the real mesh, without copying the real mesh into a repository? | The lab must be able to model the real topology's shape without carrying its identity. | | Does anything have to keep running **during** the cutover? | Mail and source are the obvious candidates. If yes, "big-bang" is really "big-bang with exceptions", and the exceptions should be named now. | | Is the forge inside or outside the cutover? | If the mesh's own forge goes down with the old control plane, the means of deploying a fix goes with it. This is the self-hosting circularity appearing as a migration risk. | + +## What overtook it + +*Closed 2026-10-10.* The one-move switch-over was never made. The migration went machine by machine instead: a machine in use +was adopted first and converged module by module ([ADR 0100](../../02-DECISIONS/0100-a-node-in-use-is-adopted-before-it-is-converged.md)), the predecessor's tunnel was adopted in +place and then retired ([ADR 0105](../../02-DECISIONS/0105-the-mesh-adopts-the-predecessors-tunnel-in-place.md), [ADR 0119](../../02-DECISIONS/0119-a-taken-tunnels-predecessor-is-retired.md)), genesis became a pivot from a running mesh +([ADR 0067](../../02-DECISIONS/0067-genesis-is-a-pivot.md), [ADR 0200](../../02-DECISIONS/0200-genesis-pivots-to-the-controller-as-a-container-and-the-first-push-hands-it-to-a-process.md)), and the predecessor is retired from the operator's machines ([ADR 0173](../../02-DECISIONS/0173-the-operators-machine-is-the-meshs-and-a-module-is-what-it-declares.md)). +That migration is finished. diff --git a/01-RESEARCH/010-lab-inner-loop-cost/00-overview.md b/01-RESEARCH/010-lab-inner-loop-cost/00-overview.md index 44210d98..bba3f426 100644 --- a/01-RESEARCH/010-lab-inner-loop-cost/00-overview.md +++ b/01-RESEARCH/010-lab-inner-loop-cost/00-overview.md @@ -1,11 +1,15 @@ --- -status: active +status: graduated initiated: 2026-08-24 touches: - 03-DESIGN/01-to-be/03-scenario-lifecycle.md - 02-DECISIONS/0016-the-lab.md - 02-DECISIONS/0016-the-lab.md -became: [] +became: + - 02-DECISIONS/0016-the-lab.md + - 02-DECISIONS/0172-the-lab-is-a-module-and-runs-a-bed-when-the-mesh-asks.md + - 03-DESIGN/01-to-be/03-scenario-lifecycle.md + - 03-DESIGN/01-to-be/04-lab-installation.md --- # 010 — What the lab's inner loop actually costs @@ -58,3 +62,11 @@ something the mesh already does. | Why was the second snapshot more than twelve times slower than the first? | If snapshot cost is unpredictable rather than merely high, that is worse — a loop with a variable multi-minute step is one nobody trusts. | | Does a scenario snapshot need the machines stopped? | Stateless snapshots of a running virtual machine capture the disk but not memory. Whether a mesh restored that way is coherent is not established. | | What is the cost at scenario scale — four machines rather than one? | Only single-machine numbers were taken. If the operation is serial, four machines is four times the wait. | + +## What it became + +*Closed 2026-10-10.* The cost was measured and the answer is built in. The lab's own installation requires a copy-on-write +pool and refuses a machine without one ([to-be 04](../../03-DESIGN/01-to-be/04-lab-installation.md), [ADR 0172](../../02-DECISIONS/0172-the-lab-is-a-module-and-runs-a-bed-when-the-mesh-asks.md)), and the lifecycle design +([to-be 03](../../03-DESIGN/01-to-be/03-scenario-lifecycle.md), under [ADR 0016](../../02-DECISIONS/0016-the-lab.md)) rests on the measured numbers. Two machines were measured as well as one, +and boot concurrently. One small question stays unmeasured: whether a scenario snapshot needs its machines +stopped to restore a coherent mesh. diff --git a/01-RESEARCH/012-the-minimum-viable-node/00-overview.md b/01-RESEARCH/012-the-minimum-viable-node/00-overview.md index 6e580db0..b7530228 100644 --- a/01-RESEARCH/012-the-minimum-viable-node/00-overview.md +++ b/01-RESEARCH/012-the-minimum-viable-node/00-overview.md @@ -1,5 +1,5 @@ --- -status: active +status: graduated initiated: 2026-08-26 touches: - 02-DECISIONS/0005-the-node-host.md @@ -10,6 +10,15 @@ touches: - 02-DECISIONS/0078-the-store-and-broker-are-modules.md - 02-DECISIONS/0088-the-foundation-filters-before-anything-listens.md - 02-DECISIONS/0100-a-node-in-use-is-adopted-before-it-is-converged.md +became: + - 02-DECISIONS/0100-a-node-in-use-is-adopted-before-it-is-converged.md + - 02-DECISIONS/0101-a-machines-own-resolver-does-not-make-it-in-use.md + - 02-DECISIONS/0105-the-mesh-adopts-the-predecessors-tunnel-in-place.md + - 02-DECISIONS/0118-undeclaring-gives-a-unit-back-the-state-it-was-found-in.md + - 02-DECISIONS/0163-taking-a-module-over-is-a-comparison.md + - 02-DECISIONS/0182-inside-a-home-the-mesh-owns-what-it-places-and-holds-the-rest-as-found.md + - 02-DECISIONS/0262-a-preference-has-a-default-in-its-manifest-and-the-operators-own-value-has-none.md + - 03-DESIGN/01-to-be/09-the-node-lifecycle.md --- # 012 — The minimum viable node, and adopting what is already there @@ -211,3 +220,11 @@ it. Measured on the control-node, and weighed against the alternatives, in | How does a bundle stay true between building and applying? | It is built against a scan of the target. The machine can move between the scan and the apply, so the host has to verify rather than assume — and fail plainly when the bundle no longer fits. | | What cannot be precomputed at all? | Anything built from source on the target still needs a toolchain and a network at that moment. Tailoring moves that cost rather than removing it, and *minimal viable* has to be honest about what it cannot ship ahead. | | Does presence differencing understate the gap? | Knowing a package manager is installed does not say it is the version the mesh needs. A difference computed on presence alone is optimistic. | + +## What it became + +*Closed 2026-10-10.* A machine in use is adopted before it is converged ([ADR 0100](../../02-DECISIONS/0100-a-node-in-use-is-adopted-before-it-is-converged.md), refined by [ADR 0101](../../02-DECISIONS/0101-a-machines-own-resolver-does-not-make-it-in-use.md) and +[ADR 0105](../../02-DECISIONS/0105-the-mesh-adopts-the-predecessors-tunnel-in-place.md)), designed in [to-be 09](../../03-DESIGN/01-to-be/09-the-node-lifecycle.md). Taking a module over is a comparison against the kept original +([ADR 0163](../../02-DECISIONS/0163-taking-a-module-over-is-a-comparison.md)), and undeclaring gives the original back ([ADR 0118](../../02-DECISIONS/0118-undeclaring-gives-a-unit-back-the-state-it-was-found-in.md)). Inside a home the mesh owns what it +places and holds the rest as found ([ADR 0182](../../02-DECISIONS/0182-inside-a-home-the-mesh-owns-what-it-places-and-holds-the-rest-as-found.md)). Whether a value is required or only preferred is +[ADR 0262](../../02-DECISIONS/0262-a-preference-has-a-default-in-its-manifest-and-the-operators-own-value-has-none.md). The briefing and the failed line were questions for the migration, which is finished. diff --git a/01-RESEARCH/013-the-forge-and-the-registries/00-overview.md b/01-RESEARCH/013-the-forge-and-the-registries/00-overview.md index 714aaa3e..7f2db0d1 100644 --- a/01-RESEARCH/013-the-forge-and-the-registries/00-overview.md +++ b/01-RESEARCH/013-the-forge-and-the-registries/00-overview.md @@ -1,5 +1,5 @@ --- -status: active +status: graduated initiated: 2026-09-23 touches: - 02-DECISIONS/0075-two-stores-and-which-provides-what.md @@ -8,6 +8,11 @@ touches: - 02-DECISIONS/0082-the-registry-is-reached-by-name-and-trusted-by-the-overlay.md - 04-ISSUES/085-the-packages-port-given-at-genesis-is-not-a-setting/00-report.md - 04-ISSUES/090-the-forge-module-does-not-take-over-the-forge-genesis-raised/00-report.md +became: + - 02-DECISIONS/0111-a-build-source-is-on-the-git-seat-or-external.md + - 02-DECISIONS/0239-a-delivery-is-owned-by-the-mesh-delivery-module-and-runs-from-commit-to-delivered.md + - 02-DECISIONS/0267-an-artifact-is-rebuilt-only-when-its-build-source-changes-and-a-module-moves-only-along-build-dependencies-on-artifacts.md + - 03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md --- # 013 — The forge and the registries: what a seat is for, and what it is not @@ -52,3 +57,10 @@ See [the survey](the-survey.md) for what the code does today, with evidence. - Should the mesh learn when a source moves? It records the fact and never discovers it: nothing polls, and there is no receiver for a forge's push. `build --behind` answers a question only a person can currently make true. + +## What it became + +*Closed 2026-10-10.* The forge became the `git` seat ([ADR 0111](../../02-DECISIONS/0111-a-build-source-is-on-the-git-seat-or-external.md)): a source on it is recorded by its path and seat, never +an address, and an unheld seat refuses self-hosted builds and nothing else, which settles the genesis +concern. The mesh learns of a change from the forge's pull requests, each one a delivery +([ADR 0239](../../02-DECISIONS/0239-a-delivery-is-owned-by-the-mesh-delivery-module-and-runs-from-commit-to-delivered.md), [ADR 0267](../../02-DECISIONS/0267-an-artifact-is-rebuilt-only-when-its-build-source-changes-and-a-module-moves-only-along-build-dependencies-on-artifacts.md)), designed in [to-be 47](../../03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md). diff --git a/01-RESEARCH/017-a-mesh-that-heals-itself/00-overview.md b/01-RESEARCH/017-a-mesh-that-heals-itself/00-overview.md index 243e1ba8..f99a8220 100644 --- a/01-RESEARCH/017-a-mesh-that-heals-itself/00-overview.md +++ b/01-RESEARCH/017-a-mesh-that-heals-itself/00-overview.md @@ -1,5 +1,5 @@ --- -status: active +status: graduated initiated: 2026-09-26 touches: - 00-META/mission.md @@ -9,6 +9,17 @@ touches: - 03-DESIGN/01-to-be/06-the-controller.md - 03-DESIGN/01-to-be/09-the-node-lifecycle.md - 03-DESIGN/00-as-is/09-interfaces-and-observability.md +became: + - 02-DECISIONS/0116-the-bus-is-built-in-five-steps.md + - 02-DECISIONS/0224-a-provider-that-keeps-failing-a-consumer-is-a-problem-the-controller-reports.md + - 02-DECISIONS/0227-the-core-holds-nine-rules-each-checked-and-is-built-to-them-in-six-phases.md + - 02-DECISIONS/0231-a-healer-acts-on-what-observation-raised-and-only-observation-says-it-worked.md + - 02-DECISIONS/0234-the-mesh-holds-a-conversation-with-its-operator.md + - 02-DECISIONS/0240-a-module-says-how-it-is-healthy-and-the-node-engine-judges-it.md + - 02-DECISIONS/0253-a-condition-says-itself-to-the-operator-in-plain-words-beside-its-summary.md + - 03-DESIGN/01-to-be/25-the-bus-on-nats.md + - 03-DESIGN/01-to-be/28-building-the-bus.md + - 03-DESIGN/01-to-be/45-a-core-that-cannot-fail-silently.md --- # 017 — A mesh that heals itself @@ -45,3 +56,13 @@ the provisioner harness, and rotation, which is proposed alongside to-be 27 as A expected elsewhere. 2. **The 46 silent failures, classified**: a missing observation, a loop trusting memory, or a missing escalation. That shows which mechanism removes the most of them. + +## What it became + +*Closed 2026-10-10.* The intended behaviour is decided and designed. [ADR 0227](../../02-DECISIONS/0227-the-core-holds-nine-rules-each-checked-and-is-built-to-them-in-six-phases.md) takes this effort's principles into the +core's nine rules, designed in [to-be 45](../../03-DESIGN/01-to-be/45-a-core-that-cannot-fail-silently.md); a healer acts on what observation raised ([ADR 0231](../../02-DECISIONS/0231-a-healer-acts-on-what-observation-raised-and-only-observation-says-it-worked.md)); a +provider that keeps failing a consumer is reported ([ADR 0224](../../02-DECISIONS/0224-a-provider-that-keeps-failing-a-consumer-is-a-problem-the-controller-reports.md)); a module says how it is healthy +([ADR 0240](../../02-DECISIONS/0240-a-module-says-how-it-is-healthy-and-the-node-engine-judges-it.md)); the mesh holds a conversation with its operator ([ADR 0234](../../02-DECISIONS/0234-the-mesh-holds-a-conversation-with-its-operator.md), [ADR 0253](../../02-DECISIONS/0253-a-condition-says-itself-to-the-operator-in-plain-words-beside-its-summary.md)); the bus was built +in steps ([ADR 0116](../../02-DECISIONS/0116-the-bus-is-built-in-five-steps.md), [to-be 25](../../03-DESIGN/01-to-be/25-the-bus-on-nats.md), [to-be 28](../../03-DESIGN/01-to-be/28-building-the-bus.md)). The silent failures were classified by research 031, +which this effort fed. One item is not decided: a condition that needs judgement, handed to an agent as +work. It is tracked by issue 409. diff --git a/01-RESEARCH/019-a-warm-twin-of-the-running-mesh/00-overview.md b/01-RESEARCH/019-a-warm-twin-of-the-running-mesh/00-overview.md index 8d993c73..4315e3a8 100644 --- a/01-RESEARCH/019-a-warm-twin-of-the-running-mesh/00-overview.md +++ b/01-RESEARCH/019-a-warm-twin-of-the-running-mesh/00-overview.md @@ -1,8 +1,12 @@ --- -status: active +status: abandoned initiated: 2026-10-02 touches: [lab, the lab module, the catalogue, assignments, settings, the controller's store] -became: [] +became: + - 02-DECISIONS/0149-the-live-mesh-is-the-test-bed.md + - 02-DECISIONS/0237-a-change-is-judged-against-the-mesh-that-runs-before-it-merges-on-the-build-seat.md + - 02-DECISIONS/0238-a-commit-is-the-build-at-hand-one-commit-one-change-plan-checked-off-the-trunk-and-published-only-on-it.md + - 03-DESIGN/01-to-be/45-a-core-that-cannot-fail-silently.md --- # 019 — A warm twin of the running mesh @@ -53,3 +57,10 @@ does not have is a scenario that **is** the running mesh, kept current with it. The lab module (ADR 0172) runs beds through the mesh, and the lab's warm mode already snapshots and restores a raised scenario. The beds that raise a machine shaped like one live machine from the catalogue are the nearest existing thing, and the first to compare against. + +## What overtook it + +*Closed 2026-10-10.* No twin was built. The live mesh is the test bed ([ADR 0149](../../02-DECISIONS/0149-the-live-mesh-is-the-test-bed.md)). The half of the problem that a twin was +for, a change composing wrongly for a real machine, is the merge gate: a change is judged against the +mesh that runs before it merges ([ADR 0237](../../02-DECISIONS/0237-a-change-is-judged-against-the-mesh-that-runs-before-it-merges-on-the-build-seat.md), [ADR 0238](../../02-DECISIONS/0238-a-commit-is-the-build-at-hand-one-commit-one-change-plan-checked-off-the-trunk-and-published-only-on-it.md)), from a snapshot of the mesh's facts. Replaying +incidents is carried by the core's scripted replays in [to-be 45](../../03-DESIGN/01-to-be/45-a-core-that-cannot-fail-silently.md). diff --git a/01-RESEARCH/026-the-graphical-session-as-modules/00-overview.md b/01-RESEARCH/026-the-graphical-session-as-modules/00-overview.md index 5e44247d..d4ac8a03 100644 --- a/01-RESEARCH/026-the-graphical-session-as-modules/00-overview.md +++ b/01-RESEARCH/026-the-graphical-session-as-modules/00-overview.md @@ -1,5 +1,5 @@ --- -status: active +status: graduated initiated: 2026-10-04 touches: - 02-DECISIONS/0176-the-login-shell-is-a-node-seat-and-execute-is-its-contract.md @@ -11,7 +11,15 @@ touches: - 03-DESIGN/01-to-be/37-the-operators-machine.md - 03-DESIGN/01-to-be/38-building-the-operators-machine.md - 04-ISSUES/168-a-setting-reaches-every-file-and-contribution/00-report.md -became: [] +became: + - 02-DECISIONS/0208-the-graphical-session-is-one-module-per-piece-on-the-meshs-seats.md + - 02-DECISIONS/0210-a-tools-configuration-is-its-seat-holders-and-every-other-module-extends-it-through-the-seat.md + - 02-DECISIONS/0211-a-machines-power-is-a-node-seat-its-moments-take-contributions-and-its-states-are-events.md + - 02-DECISIONS/0212-a-seat-says-what-it-receives-and-the-machines-hotkeys-are-a-seat.md + - 02-DECISIONS/0215-the-machines-message-bus-is-a-node-seat-and-is-never-restarted-live.md + - 02-DECISIONS/0255-the-bar-takes-blocks-as-data-from-the-module-that-knows-the-hardware-placed-where-the-machine-has-it.md + - 02-DECISIONS/0260-a-bar-block-shows-a-value-its-module-keeps-on-the-bus-and-no-module-reads-anothers-files.md + - 03-DESIGN/01-to-be/42-the-machines-modules-in-order.md --- # 026 — The graphical session as modules @@ -72,3 +80,10 @@ package and a file is unfinished. The tools are catalogued in - [04 — Screensaver, displays and menus](04-screensaver-displays-and-menus.md): the lock and idle module, monitor layouts by the monitors' identity, rofi and dmenu behind one launcher seat, the clipboard, fonts - [05 — The tools each module serves](05-the-tools-each-module-serves.md): a first catalogue for the modules of 026 and 027 - [03 — What the predecessor taught](03-what-the-predecessor-taught.md): its 128 modules and 3,395 commits, as patterns to keep and failures not to repeat; shared with research 027. + +## What it became + +*Closed 2026-10-10.* The graphical session is one module per piece on the mesh's seats ([ADR 0208](../../02-DECISIONS/0208-the-graphical-session-is-one-module-per-piece-on-the-meshs-seats.md)): a tool's configuration +is its seat holder's ([ADR 0210](../../02-DECISIONS/0210-a-tools-configuration-is-its-seat-holders-and-every-other-module-extends-it-through-the-seat.md)), the hotkeys and the power are seats ([ADR 0212](../../02-DECISIONS/0212-a-seat-says-what-it-receives-and-the-machines-hotkeys-are-a-seat.md), [ADR 0211](../../02-DECISIONS/0211-a-machines-power-is-a-node-seat-its-moments-take-contributions-and-its-states-are-events.md)), the +machine's message bus is a seat never restarted live ([ADR 0215](../../02-DECISIONS/0215-the-machines-message-bus-is-a-node-seat-and-is-never-restarted-live.md)), and the bar takes blocks as data from +the bus ([ADR 0255](../../02-DECISIONS/0255-the-bar-takes-blocks-as-data-from-the-module-that-knows-the-hardware-placed-where-the-machine-has-it.md), [ADR 0260](../../02-DECISIONS/0260-a-bar-block-shows-a-value-its-module-keeps-on-the-bus-and-no-module-reads-anothers-files.md)). The order of building and rolling out is [to-be 42](../../03-DESIGN/01-to-be/42-the-machines-modules-in-order.md). diff --git a/01-RESEARCH/027-the-system-layer-as-modules/00-overview.md b/01-RESEARCH/027-the-system-layer-as-modules/00-overview.md index a95b1d40..27abf9be 100644 --- a/01-RESEARCH/027-the-system-layer-as-modules/00-overview.md +++ b/01-RESEARCH/027-the-system-layer-as-modules/00-overview.md @@ -1,5 +1,5 @@ --- -status: active +status: graduated initiated: 2026-10-04 touches: - 02-DECISIONS/0165-container-runtime-is-what-a-machine-can-run-and-a-running-runtime-is-its-holders-health.md @@ -8,7 +8,14 @@ touches: - 02-DECISIONS/0205-software-the-distribution-does-not-package-ships-as-a-pinned-archive-of-the-module.md - 03-DESIGN/01-to-be/37-the-operators-machine.md - 03-DESIGN/01-to-be/38-building-the-operators-machine.md -became: [] +became: + - 02-DECISIONS/0165-container-runtime-is-what-a-machine-can-run-and-a-running-runtime-is-its-holders-health.md + - 02-DECISIONS/0166-the-container-runtime-is-a-node-seat-and-the-host-creates-containers-through-its-holder.md + - 02-DECISIONS/0205-software-the-distribution-does-not-package-ships-as-a-pinned-archive-of-the-module.md + - 02-DECISIONS/0207-a-module-depends-on-the-node-seats-that-apply-its-resources.md + - 02-DECISIONS/0211-a-machines-power-is-a-node-seat-its-moments-take-contributions-and-its-states-are-events.md + - 02-DECISIONS/0215-the-machines-message-bus-is-a-node-seat-and-is-never-restarted-live.md + - 03-DESIGN/01-to-be/42-the-machines-modules-in-order.md --- # 027 — The system layer as modules @@ -62,3 +69,11 @@ package and a file is unfinished. The tools are catalogued in - [02 — Candidates and questions](02-candidates-and-questions.md) - [03 — The account's own tools](03-the-accounts-own-tools.md): `~/.ssh` as one module's, scripts on every machine, the keyring, the laptop's power management, mail as events - The predecessor's lessons, shared with research 026: [026/03](../026-the-graphical-session-as-modules/03-what-the-predecessor-taught.md) + +## What it became + +*Closed 2026-10-10.* The container runtime is a node seat ([ADR 0165](../../02-DECISIONS/0165-container-runtime-is-what-a-machine-can-run-and-a-running-runtime-is-its-holders-health.md), [ADR 0166](../../02-DECISIONS/0166-the-container-runtime-is-a-node-seat-and-the-host-creates-containers-through-its-holder.md)); software the distribution does not +package ships as a pinned archive of its module ([ADR 0205](../../02-DECISIONS/0205-software-the-distribution-does-not-package-ships-as-a-pinned-archive-of-the-module.md)); a module depends on the node seats that +apply its resources ([ADR 0207](../../02-DECISIONS/0207-a-module-depends-on-the-node-seats-that-apply-its-resources.md)); power and the machine's message bus are seats ([ADR 0211](../../02-DECISIONS/0211-a-machines-power-is-a-node-seat-its-moments-take-contributions-and-its-states-are-events.md), +[ADR 0215](../../02-DECISIONS/0215-the-machines-message-bus-is-a-node-seat-and-is-never-restarted-live.md)). The order and the remaining modules are [to-be 42](../../03-DESIGN/01-to-be/42-the-machines-modules-in-order.md); the parts of the container-runtime +records not yet built are tracked by issue 398. diff --git a/01-RESEARCH/037-the-catalogues-hard-coded-preferences/00-overview.md b/01-RESEARCH/037-the-catalogues-hard-coded-preferences/00-overview.md index cc6e01f4..851e33fa 100644 --- a/01-RESEARCH/037-the-catalogues-hard-coded-preferences/00-overview.md +++ b/01-RESEARCH/037-the-catalogues-hard-coded-preferences/00-overview.md @@ -1,12 +1,13 @@ --- -status: active +status: graduated initiated: 2026-10-08 touches: - 02-DECISIONS/0262-a-preference-has-a-default-in-its-manifest-and-the-operators-own-value-has-none.md - 03-DESIGN/01-to-be/27-a-module-requires-the-mesh-resolves.md - the catalogue's module manifests - the media catalogue's module manifests -became: [] +became: + - 02-DECISIONS/0262-a-preference-has-a-default-in-its-manifest-and-the-operators-own-value-has-none.md --- # 037 — The catalogue's hard-coded preferences @@ -37,3 +38,12 @@ the operator's yes. - [01 — the survey](01-the-survey.md): every candidate, by module, strongest first, with the modules that already take settings and those that have nothing to convert. + +## What it became + +*Closed 2026-10-10.* The survey was the deliverable, under [ADR 0262](../../02-DECISIONS/0262-a-preference-has-a-default-in-its-manifest-and-the-operators-own-value-has-none.md), and each conversion is a change to its module made on +the operator's yes. Three things the survey found are not conversions: the rows marked *(shell)* wait on +the controller filling `${setting:…}` in login-shell code, tracked by issue 410; a value several modules +share (the interface font size, the accent colour) needs a decision on one shared preference; and the +backup program's retention and the container runtime's log rotation need their programs to read a file, +or a new default, first. diff --git a/03-DESIGN/01-to-be/45-a-core-that-cannot-fail-silently.md b/03-DESIGN/01-to-be/45-a-core-that-cannot-fail-silently.md index c88c37d1..99f8c80a 100644 --- a/03-DESIGN/01-to-be/45-a-core-that-cannot-fail-silently.md +++ b/03-DESIGN/01-to-be/45-a-core-that-cannot-fail-silently.md @@ -844,4 +844,4 @@ in [to-be 47](47-delivery-from-commit-to-delivered.md), and their progress is tr - Routing by presence, quiet hours, answering back through a channel, and an external dead-man service — decided by [ADR 0234](../../02-DECISIONS/0234-the-mesh-holds-a-conversation-with-its-operator.md), designed in [to-be 46](46-the-conversation-with-the-operator.md). -- A condition that needs judgement handed to an agent as work — research 017. +- A condition that needs judgement handed to an agent as work — tracked by issue 409, since research 017 closed.