The derived-value record is renumbered a second time: the key-value-buckets record took 0201 while this waited to merge, as the bundles record took 0188 before it. Both times free when chosen, taken by the time it landed. cycle.py caught it; three repositories cite this record, so the number matters. 225 — a provisioner has not been able to read its grant secrets since 01:30, when a module's own code left its container and the files stayed root's. Four thousand refusals, each worded as patience, and two consumers unserved. Not from ADR 0202 or 0189, which landed hours later; dates in the report. 226 — the store's sweep stops at the first reference recorded with an address and collects nothing. A guard that cannot tell 'I will not ask about this' from 'it would not answer' stops the wrong amount of work. 227 — the photo app's admin client asks for the port the proxy holds. A module pinned months behind carries everything its branch gained, the first time anything makes it move.
1.8 KiB
status, opened, located-in, fixed-by, amended-design
| status | opened | located-in | fixed-by | amended-design | |
|---|---|---|---|---|---|
| open | 2026-10-04 |
|
227 — The photo app's admin client asks for port 80, which the reverse proxy holds, so it cannot start
What was observed
Applying the control machine, 2026-10-04:
applying "photos.admin-client": starting container photos-admin-client:
failed to bind host port 0.0.0.0:80/tcp: address already in use
Port 80 on that machine belongs to the reverse proxy (mesh-route-proxy, confirmed with ss),
which is the whole arrangement: the proxy holds the public ports and every module is reached
through it. A module that publishes 80 itself can never start beside it.
Everything else on the machine applied; this one resource fails every pass.
How it surfaced
photos had been pinned at a commit from 2026-09-28 and was rebuilt to main on 2026-10-04 —
forced by ADR 0202's
refusal of its transcribed bucket name. The admin client is one of the changes that came with the
rest of main. The rebuild did not create the conflict; it delivered it.
A module pinned months behind carries whatever its branch gained, all at once, the first time something makes it move. That is the cost of a pin, and it is paid in full rather than gradually.
What a fix has to settle
- Which port the admin client should ask for, or whether it should be reached through the proxy like everything else and publish nothing.
- Whether a module declaring a port the machine's proxy already holds should be refused when it is composed, rather than failing on the machine every pass. The mesh assigns ports (ADR 0038); a fixed 80 beside a proxy is a statement it could check.