ADRs 0087 and 0088; issues 031, 035 and 054 resolved; designs 05, 07 and 18 amended
A seeded file is created once (0087); the foundation filters before anything listens (0088); a machine becomes the last thing it was told (design 05). Each says how it is checked.
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
layer: to-be
|
||||
status: in-progress
|
||||
code: [mesh-host]
|
||||
updated: 2026-08-31
|
||||
updated: 2026-09-21
|
||||
decisions:
|
||||
- 02-DECISIONS/0019-how-this-repository-works.md
|
||||
- 02-DECISIONS/0004-a-node-and-how-it-joins.md
|
||||
@@ -367,4 +367,17 @@ of the reason to manage a machine.
|
||||
silently incomplete.
|
||||
|
||||
**A partial host does archives and refuses users**: an archive needs a filesystem and a way to
|
||||
fetch; a user needs a user database the host is allowed to write.
|
||||
fetch; a user needs a user database the host is allowed to write.
|
||||
|
||||
## A machine becomes the last thing it was told
|
||||
|
||||
Every declaration is complete, so applying an old one is never wrong, only wasted — and under a
|
||||
flurry of pushes a machine spent minutes becoming things the mesh had moved past
|
||||
([issue 031](../../04-ISSUES/031-a-machine-becomes-each-thing-it-was-told-in-turn/00-report.md)).
|
||||
So the host looks at what is already waiting before it applies anything: it holds a small window
|
||||
of unacknowledged declarations, applies the newest, and sets the rest aside — each **reported as
|
||||
superseded**, naming the one applied instead, because silence would read as a machine that
|
||||
ignored an instruction and "applied" would be a lie. Applying stays one at a time; only seeing
|
||||
is not. **Checked** by the link's unit tests on the drain, and by the genesis bed's settle wait,
|
||||
which counts on a node catching up to the newest declaration rather than the oldest.
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ code:
|
||||
- mesh-lab test/integration/mesh.test.ts (a bare machine becomes a mesh)
|
||||
updated: 2026-09-21
|
||||
decisions:
|
||||
- 02-DECISIONS/0088-the-foundation-filters-before-anything-listens.md
|
||||
- 02-DECISIONS/0004-a-node-and-how-it-joins.md
|
||||
- 02-DECISIONS/0078-the-store-and-broker-are-modules.md
|
||||
- 02-DECISIONS/0079-the-foundation-seats-are-named-after-their-servers.md
|
||||
@@ -157,6 +158,16 @@ a real machine with a network; the sealed case is the lab, and the lab places im
|
||||
Reproducibility comes from pinning the identity of a thing rather than carrying its bytes, which
|
||||
is what keeps the bundle small enough for a person to read and check.
|
||||
|
||||
## Filtered from its first resource
|
||||
|
||||
The bundle installs the packet filter and loads a base ruleset before the store and broker come
|
||||
up ([ADR 0088](../../02-DECISIONS/0088-the-foundation-filters-before-anything-listens.md)): drop by
|
||||
default, keep loopback, replies, ping, ssh, the bus and the registry, and the container runtime's
|
||||
networks through the forward chain. It is written into the same table the filter module derives,
|
||||
so that module replaces it wholesale once it can. **Checked** by the installer's bundle test
|
||||
(order and rules) and by the genesis bed, which probes the machine from outside for the length of
|
||||
the install: the store's port never answers, the bus's does.
|
||||
|
||||
## Raising it
|
||||
|
||||
The order, from [research 011](../../01-RESEARCH/011-the-module-graph/worked-provider.md):
|
||||
|
||||
@@ -5,8 +5,9 @@ code:
|
||||
- mesh-controller cmd/mesh-builder
|
||||
- mesh-controller internal/builder
|
||||
- mesh-catalog modules/builder
|
||||
updated: 2026-09-15
|
||||
updated: 2026-09-21
|
||||
decisions:
|
||||
- 02-DECISIONS/0087-a-seeded-file-is-created-once.md
|
||||
- 02-DECISIONS/0040-what-a-module-is.md
|
||||
- 02-DECISIONS/0039-what-the-sdk-holds-and-refuses.md
|
||||
- 02-DECISIONS/0069-a-module-is-a-repository-and-a-path.md
|
||||
@@ -206,6 +207,10 @@ disagrees with it.
|
||||
| `service` | an **existing** unit put into a state | for software shipping its own unit |
|
||||
| `action` | a command to run | ❌ **refused** — [ADR 0005](../../02-DECISIONS/0005-the-node-host.md) |
|
||||
|
||||
A `file` may also say `create-once`: written when absent, left alone when present, reported as
|
||||
kept — a seed a program then owns ([ADR 0087](../../02-DECISIONS/0087-a-seeded-file-is-created-once.md)).
|
||||
Checked by the host's apply tests and by the vault bed, which grows into one and pushes again.
|
||||
|
||||
**The two at the bottom are the interesting rows.** `action` is refused outright: the link may not
|
||||
carry a command, so a module needing something done ships a program that reconciles — which is what
|
||||
a run-once `process` is. `service` installs no unit by design, which is right for software that
|
||||
|
||||
Reference in New Issue
Block a user