Files
mesh-lab/scenarios/genesis-untrusted.yml
T
jochen d03f87b00d Register R92 as a bed: genesis on a runtime that trusts no registry (hq issue 92)
The lab's base image trusts the documentation ranges as plain-HTTP registries, so no genesis bed could
see the push to an untrusted registry that issue 92 is about (reviews 73 and 76 on mesh-host #91). The
bed takes that trust off the anchor before the installer runs and asks the runtime it trusts loopback
only, then runs genesis with --registry 192.0.2.10:5000 and holds that the control plane reaches the
registry, trusted by the mesh's name too.

The prover gains a bed kind: it builds the node-engine and its installer at each commit, the carried
builder from the pinned controller, and raises the bed; a bed that never reached the step it replays
skips, and a skip is an error, never the fault reproduced.

Not proved yet: genesis stops at step 6 on both sides, because the temporary controller has no
MESH_BUS_NATS and the bus template is refused by the installer (issue 146).
2026-10-13 02:57:21 +02:00

43 lines
1.8 KiB
YAML

# GENESIS on a runtime nobody told to trust a registry: the bed of replay R92 (novox/hq issue 92).
#
# The first real genesis pushed the control plane's image to the registry it had just raised, and the
# container runtime refused: "server gave HTTP response to HTTPS client". The mesh's registry speaks plain
# HTTP on purpose, and the trust that lets a runtime speak to it was written six steps after the push. The
# lab never saw it, because its base image trusts the documentation ranges as plain-HTTP registries before
# any bed starts (src/lifecycle/base.ts). The bed takes that trust back off the anchor before genesis runs,
# so the anchor's runtime is a bare machine's: it trusts loopback and nothing else.
#
# Two machines on one public segment, both with a way out — the installer pulls the store, the bus and the
# registry over it, as a bare machine does:
# - anchor: the machine genesis raises, given its registry at its own address, 192.0.2.10:5000;
# - forge: serves the control plane's repository at the commit under test over git's own protocol, so the
# installer builds exactly that and nothing on the workstation listens for the lab. On the anchor
# itself it would be a listener, and genesis refuses a machine something already listens on.
scenario: genesis-untrusted
segments:
hosting:
kind: public
cidr: [192.0.2.0/24]
machines:
anchor:
at: { segment: hosting, address: [192.0.2.10] }
egress: true
inbound: allow
# Genesis-single's anchor: the foundation, the registry, and two control planes during the pivot.
memory: 8GiB
cpus: 4
disk: 40GiB
forge:
at: { segment: hosting, address: [192.0.2.30] }
egress: true
inbound: allow
memory: 2GiB
cpus: 2
disk: 15GiB
place:
all: [host, runtime]