6eabed63eb
Reload the service manager's units before restarting a service whose files changed, and start the guard before the network as the controller declares it (hq ADR 0100)
jschoubben2026-09-22 17:38:17 +02:00
3e0e6e6b7e
Delete a forwarded opening the way ufw accepts it, and read a fresh machine's resolver as not in use — both measured on a lab machine (hq ADR 0100)
jschoubben2026-09-22 17:37:01 +02:00
5e3dd3f59c
Raise a machine in use adopted: keep its firewall, load no dropping table, guard the mesh's own ports, and take only the mesh's own modules (hq ADR 0100)
jschoubben2026-09-22 17:32:44 +02:00
4811f176fd
Refuse a converged genesis on a machine in use, naming every container and listener counted (hq ADR 0100)
jschoubben2026-09-22 17:29:32 +02:00
3964d9da0a
Take the foundation's ports as genesis inputs, check them free, and hand them to the controller as the node's settings (hq ADR 0100)
jschoubben2026-09-22 17:28:36 +02:00
770f589401
Report what an adopted node holds, its firewall and what is reachable, and speak unasked when that changes (hq ADR 0100)
jschoubben2026-09-22 17:22:31 +02:00
3c90d155b3
Converge openings through the firewall an adopted node was found with, and retire it only when the node converges (hq ADR 0100)
jschoubben2026-09-22 17:19:49 +02:00
3a613113be
Keep what an adopted node was found holding until its module is taken, and report it held (hq ADR 0100)
jschoubben2026-09-22 17:14:04 +02:00
fcc447c216
Read a node's adoption from every declaration, so the host knows which modules are untaken (hq ADR 0100)
jschoubben2026-09-22 17:11:26 +02:00
4fc0330937
Merge pull request 'An enrolling node asks again while the mesh cannot answer, and proves it holds its key (issue 083)' (#19) from multiple-fixes into main
jschoubben2026-09-22 14:42:56 +02:00
406a5559b0
An enrolling node signs its request with the identity it just generated, so the mesh can tell it from anyone who knows its public key (novox/hq issue 083)
jschoubben2026-09-22 14:33:31 +02:00
eaebae7b36
Review of 083: the give-up message says to wait out the mesh's hold before asking again; the installer no longer says the token is spent when it may not be
jschoubben2026-09-22 14:23:20 +02:00
c8bbdb2da5
An enrolling node asks again, with the same request, while the mesh says it cannot answer — for as long as the mesh holds the token for it (novox/hq issue 083)
jschoubben2026-09-22 14:07:25 +02:00
0ed8914c07
Merge pull request 'A run-once step names what it reads and runs again when it changed (ADR 0099)' (#18) from multiple-fixes into main
jschoubben2026-09-21 23:58:46 +02:00
8da78de210
A run-once step names what it reads and runs again when it changed (novox/hq ADR 0099, issue 077)
jschoubben2026-09-21 23:25:06 +02:00
e8b6d9ac31
Merge pull request 'Genesis registers the control plane with the manifest its build produced (hq issue 072)' (#17) from feat/one-controller-manifest into main
jschoubben2026-09-21 19:23:17 +02:00
ffe7dbd348
Step 9 without a build is refused, and a test says so
jschoubben2026-09-21 19:21:04 +02:00
8afbe57814
The pinning line shows the built image's id, not one digit of it
jschoubben2026-09-21 15:27:13 +02:00
5223169226
Genesis registers the control plane with the manifest its build produced
jschoubben2026-09-21 15:17:47 +02:00
4661025eb7
Merge pull request 'The host applies the newest declaration, a file may be created once, the foundation filters first (issues 031, 035, 054)' (#16) from feat/migration-blockers into main
jschoubben2026-09-21 13:48:51 +02:00
c32eada62b
The base filter opens the bus and the registry in the input chain too
jschoubben2026-09-21 12:28:57 +02:00
b72b71a989
The host applies the newest declaration, a file may be created once, the foundation filters first
jschoubben2026-09-21 12:11:52 +02:00
d7eea1ab66
Merge pull request 'The installer delivers any MESH_…_FILE own secret, not only the store's' (#15) from feat/secret-not-in-environment into main
jschoubben2026-09-21 11:59:15 +02:00
c5c42376c1
The installer delivers any MESH_…_FILE own secret, not only the store's (ADR 0086)
jschoubben2026-09-21 10:10:33 +02:00
e30a6b08ea
Merge pull request 'Genesis makes the root secrets and the operator key, and installs the vault' (#14) from feat/secrets-vault into main
jschoubben2026-09-21 10:03:17 +02:00
d756effc33
The broker-admin marker ends in a newline, and the transcript never says a credential
jschoubben2026-09-21 01:32:51 +02:00
70d0f36896
Installer review: secrets are staged privately, and a bundle is 0600 whether or not it existed
jschoubben2026-09-21 01:26:35 +02:00
036af3cfdc
The export is its own installer step, and the result names the operator files
jschoubben2026-09-21 01:11:52 +02:00
ee0c8b856e
Genesis makes the root secrets, the operator key, and installs the vault
jschoubben2026-09-21 00:12:55 +02:00
1f483fcacd
Merge pull request 'Self-upgrade installer: genesis pivot, rename, adopt store+broker' (#13) from feat/a-bed-that-hands-over-nothing into main
jschoubben2026-09-16 23:22:06 +02:00
56124c38b7
Phase 3.2: the foundation broker binds amqp (5672) mesh-wide for consumers
jschoubben2026-09-16 21:24:13 +02:00
1232031fb9
Correct store phrasing — a module gets a database only if it asks
jschoubben2026-09-16 21:20:00 +02:00
9109a8c178
Phase 3.1: adopt the foundation store as the postgres module
jschoubben2026-09-16 20:32:12 +02:00
1a7c9fdac3
gitea runs on the host network at genesis
jschoubben2026-09-16 10:33:07 +02:00
79863068fc
Genesis raises the package registry before it builds the base
jschoubben2026-09-16 10:27:11 +02:00
21474b0144
The installer goes as far as it can, and asks where a human must choose
jschoubben2026-09-15 21:56:23 +02:00
7a223464e5
Genesis installs distribution, which is what the software is called
jschoubben2026-09-15 20:51:00 +02:00
de5160de4a
A unit file reinterprets an environment value; a container does not
jschoubben2026-09-15 12:40:36 +02:00
f5cf9510c1
One kind for the module's own code, with three modes
jschoubben2026-09-15 10:26:31 +02:00
1f0fb85128
A daemon says what to run, not how it is hosted
jschoubben2026-09-15 02:29:33 +02:00
200c6c127f
Merge pull request 'A one-shot service that finished is not stopped, and a container is what it reads' (#12) from fix/a-oneshot-that-finished-is-not-stopped into main
jschoubben2026-09-14 17:16:14 +02:00
e7f94e0402
A one-shot service that finished is not stopped, and a container is what it reads
jschoubben2026-09-14 16:51:57 +02:00
0f143d16ce
Merge pull request 'The installer names the unit this project packages' (#11) from fix/the-installer-names-the-unit-we-package into main
jschoubben2026-09-14 14:11:42 +02:00
cc9b3c1a8e
The installer names the unit this project packages
jschoubben2026-09-14 14:11:27 +02:00
6205a93bfe
Merge pull request 'Installation sets up the builder, so a raised mesh can produce' (#10) from feat/installation-sets-up-the-builder into main
jschoubben2026-09-14 12:32:04 +02:00
8eeb28f00b
Installation sets up the builder, so a raised mesh can produce
jschoubben2026-09-14 12:31:43 +02:00
3dfe574e46
Merge pull request 'The installer carries a builder and builds the control plane it raises' (#9) from feat/a-module-is-a-repository-and-a-path into main
jschoubben2026-09-13 11:16:50 +02:00
163a44a49a
Preflight names the carried image for what it is
jschoubben2026-09-13 04:38:44 +02:00
432e3edcfd
Publish the image this mesh built, not the one the installer carried
jschoubben2026-09-13 04:24:18 +02:00
e1a2fe7323
The installer carries a builder and builds the control plane it raises
jschoubben2026-09-13 04:08:58 +02:00
cab83b61c8
Merge pull request 'mesh-bootstrap: the installer, and the two things its first real run found' (#8) from fix/bootstrap-first-run into main
jschoubben2026-09-11 21:56:56 +02:00
26ff447aa3
bootstrap: the mesh hearing from a machine is not an agent running on it
jschoubben2026-09-11 12:11:57 +02:00
7e3481f025
bootstrap: the slot the installer fills is not a registry to reach for
jschoubben2026-09-11 11:38:15 +02:00
cb5e137297
bootstrap: read the image id back from the runtime, never predict it
jschoubben2026-09-11 00:12:36 +02:00
0a88dc1f9d
bootstrap: follow the mount from the variable to the secret
jschoubben2026-09-11 00:03:14 +02:00
f534cf8b42
bootstrap: the rest of the pivot — enrol, registry, publish, reinstall, retire
jschoubben2026-09-10 23:59:57 +02:00
af953dbb0d
bootstrap: the temporary control plane gets a temporary name
jschoubben2026-09-10 23:59:32 +02:00
9c9e02ba1d
mesh-bootstrap: drop an unread parameter
jschoubben2026-09-10 23:18:07 +02:00
b82ab95f74
mesh-bootstrap: the first-node procedure, as a program rather than a test
jschoubben2026-09-10 23:17:30 +02:00
4af9483219
declaration: an image may be named by the digest of its own configuration
jschoubben2026-09-10 22:40:02 +02:00
46cc06847d
Merge pull request 'apply: pull a scheduled container's image at apply, without running it' (#7) from feat/schedule-pull into main
jschoubben2026-09-07 02:48:43 +02:00
e5af6bb58e
apply: ensure a scheduled container's image is present at apply, without running it
jschoubben2026-09-07 02:23:46 +02:00
a37acf77ae
Merge pull request 'apply: run a scheduled container on its cadence, non-gating and non-stacking (ADR 0053)' (#6) from feat/apply-schedule into main
jschoubben2026-09-06 14:27:44 +02:00
9d1f001dcc
apply: a scheduled step is a container run on a cadence (ADR 0053)
jschoubben2026-09-06 14:08:44 +02:00
24e9ae4065
Merge pull request 'Apply a run-once container to completion and gate on it (ADR 0052)' (#5) from feat/apply-run-once into main
jschoubben2026-09-06 00:05:08 +02:00
19e5dd83ea
apply: a run-once container is a step the host runs to completion (ADR 0052)
jschoubben2026-09-05 23:55:45 +02:00
91e0d6a4c7
Merge pull request 'The host mounts an operator-owned path and owns nothing (ADR 0051)' (#4) from feat/mount-operator-owned into main
jschoubben2026-09-05 22:48:13 +02:00
f06eea5fa3
declaration: an access is mounted, and the host owns nothing about it
jschoubben2026-09-05 22:19:33 +02:00
291cab1091
Merge pull request 'Unify trunk on main: initialization → main' (#3) from initialization into main
jschoubben2026-09-05 03:13:32 +02:00
652984b09d
Merge pull request 'A container reflects its config: restart-on for containers (issue 009)' (#2) from issue/009-container-restart-on into initialization
jschoubben2026-09-05 03:07:11 +02:00
aa441bac19
A container reflects its config: restart-on for containers (04-ISSUES/009)
jschoubben2026-09-04 23:39:47 +02:00
8211d8b6fb
A report says which declaration it is about
jschoubben2026-09-02 00:01:12 +02:00
aca9eb37ff
An owner may be a number the machine has never heard of
jschoubben2026-09-01 23:45:02 +02:00
b91342a6bd
A machine says which ports it already holds
jschoubben2026-09-01 18:29:39 +02:00
a7a2a48615
A full host implements the network shape, and something checks that it does
jschoubben2026-09-01 00:36:17 +02:00
8c248e3d7f
A secret can reach a container's environment, and sit inside a config file
jschoubben2026-08-31 22:25:57 +02:00
f48e06473d
A directory holding anything the mesh did not put there is never removed
jschoubben2026-08-31 19:53:41 +02:00
4a43e21794
A network is a shape, so that it can be removed
jschoubben2026-08-31 18:55:06 +02:00
af9d316258
Resources are applied in the order they were declared, and now something says so
jschoubben2026-08-31 18:50:10 +02:00
8e12b3c9e4
Name the decisions these tests defend, and check the bundle at all
jschoubben2026-08-31 17:33:34 +02:00
b4d2e851a3
Name a stale package index, rather than reporting a failed install
jschoubben2026-08-31 12:59:53 +02:00
c3d6f240fe
Give a container the names, rather than a resolver to ask
jschoubben2026-08-31 12:05:52 +02:00
0e2b288bb6
A container can be told where to resolve names
jschoubben2026-08-31 11:09:49 +02:00
8fcfa88fe0
A machine that wakes or moves says so, instead of waiting to be told
jschoubben2026-08-31 10:21:26 +02:00
5bc0006e83
The substrate raises a third context's store
jschoubben2026-08-31 02:52:26 +02:00
efa2e13513
The store's readiness is checked over TCP, not the socket
jschoubben2026-08-31 01:01:00 +02:00
f9c70a7c97
Something after the declaration is refused whole
jschoubben2026-08-31 00:51:29 +02:00
c83ed4eca9
A node's serving key is stored in the format a server reads
jschoubben2026-08-31 00:41:10 +02:00
5237944473
A node generates the key it serves TLS with
jschoubben2026-08-31 00:09:15 +02:00
08e91065b4
A failed action stops what follows; nothing else does
jschoubben2026-08-30 20:07:42 +02:00
aec37bf89e
Attempt every resource, and report every failure
jschoubben2026-08-30 19:26:02 +02:00
b2ecf25594
When the store does not come up, say what it said
jschoubben2026-08-30 04:06:10 +02:00
c57087d75d
A user, bytes, and an archive — because most of what people install is not a service
jschoubben2026-08-30 03:22:38 +02:00
bc5b6e2143
One reader for a declaration file, because there were three
jschoubben2026-08-30 02:54:25 +02:00
bdc9c436b4
The token says what the mesh calls this machine
jschoubben2026-08-30 02:36:42 +02:00
ef0d96a1a8
Write out what this node says when it joins, for the mesh to read
jschoubben2026-08-30 02:20:43 +02:00
a752fc514b
A file the mesh can deliver and cannot read
jschoubben2026-08-30 00:12:22 +02:00
d81f826089
A check that what the control plane emits is what this host accepts
jschoubben2026-08-29 23:35:11 +02:00