Issue 210: the record of the runtime's process carries no digest; the credential and the unit text are ruled out

This commit is contained in:
jochen
2026-10-03 13:13:25 +02:00
parent d718a917e5
commit 911125148c
@@ -36,13 +36,16 @@ when the machine is as declared; a `process` here never does.
Owner mesh-host, `internal/apply/process.go`. The decision is: the digest of the fetched bundle
plus the unit text is `want`; when the host's record of what it last wrote equals `want` and no
`restart-on` resource changed, the process is left alone. The unit text is rendered with sorted
keys, so `want` is stable. The log says `created` — the word the code uses only when the previous
record is empty (with a record it would say `updated`) — so what fails is the record: for this
resource the host does not find what it wrote last cycle. Two candidates, to be settled in the
host's tests: the applied-store does not persist or does not key a `process` outcome the way it is
read back, or the outcome's `wrote` is dropped before it is saved. **Fix direction:** a test that
applies the same `process` declaration twice against a recorded store and asserts the second
outcome is `unchanged` with no restart. Observed only on the laptop's journal; the other three
machines' host logs are not readable by the operator account over SSH, and the behaviour is the
host's, not the machine's.
`restart-on` resource changed, the process is left alone. Two things were ruled out on the laptop:
the credential the runtime restarts on, which has not been written since the evening before (the
host would also say `updated`, not `created`, for a restart it owed to another resource); and the
unit text, rendered with sorted keys and so stable. What fails is the record. The host's state file
holds an entry for `node-tools.runtime` — applied at the last cycle, with **no `wrote` digest at
all** — while the sibling entry for the runtime's credential carries its digest. The apply sets the
digest on its outcome on every path that installs the daemon, and the loop that records outcomes
copies it into the record for every kind; between the two, a `process` outcome arrives with its
digest empty. **Fix direction:** find where a `process` outcome loses its digest on the way to the
record, and a test that applies the same `process` declaration twice against a recorded store and
asserts the second outcome is `unchanged` with no restart — the test the shape never had. Observed
on the laptop's journal and state; the other three machines' host logs are not readable by the
operator account over SSH, and the behaviour is the host's, not the machine's.