# One machine that becomes a mesh and is then assigned schedtest — the bed that proves the # scheduled-container primitive (novox/hq ADR 0053) end to end. # # schedtest is the thinnest possible carrier of the ADR's claim: no service, no listener, no # provisioner, no runtime, no tools, no events — just a `container` marked `schedule: "* * * * *"` # that appends a timestamp line to a file in a mounted data directory each time the host fires it. # It is the recurring twin of the run-once bed (catalogue-mqtt), with the gating rule deliberately # reversed: installing the schedule must NOT run the container and must NOT gate convergence — the # node reports current as soon as the schedule is state that is present, and the clock (not the # apply) fires the runs thereafter. # # The sharp points this bed proves, straight from ADR 0053 "How each claim is checked": # - installing it does not run it, and the node is current WITHOUT a run; # - the container fires when the cron is due (top of the next minute); # - it fires AGAIN on the following minute — recurrence, not a one-shot. # # MESH_LAB_HOST_BINARY=.../mesh-host MESH_LAB_MODULES=.../mesh-controller/examples/modules # alpine:latest must be in the local daemon; the machine pulls it from the internet over its # uplink, and the scheduled container declares it exactly as the catalogue writes it. # There is no runtime image: schedtest carries no code of its own — the scheduled container is a # bare alpine that runs `date >> /data/runs.log` and exits. scenario: schedule-tick segments: hosting: kind: public cidr: [192.0.2.0/24] machines: anchor: at: { segment: hosting, address: [192.0.2.10] } egress: true inbound: allow memory: 3GiB cpus: 2 images: - mesh-controller:development place: # Only the host — schedtest has no mesh-runtime to place. The tick image is pulled from the # internet by the host over its uplink, not placed inside the machine. all: [host]