Beds read the catalogue: one loader, eight beds converted, the rest declared (hq issue 073) #41

Merged
jschoubben merged 5 commits from feat/beds-read-the-catalogue into main 2026-09-21 17:23:16 +00:00
Owner

What

  • catalogueModule() in the harness reads a module's manifest from the catalogue and rewrites only what the lab must: the build section goes, each artifact becomes the image the machine holds, images are pinned, and a bed may declare a host-port remap or a lab-local address.
  • Eight beds now install the catalogue's manifest: confluence, gitlab, openai-consumer, audit-logger, ollama + local-model-consumer, model-usage, mosquitto, anthropic-manager + anthropic-consumer.
  • The five private loaders (adopted-store-cross-node, two-node-db, the three whole-mesh beds) are folded onto the shared one. The ace loader never resolved a runtime artifact; whole-mesh-full still asked for registry and firewall (the catalogue says distribution and nftables) and swallowed the miss.
  • The receipt claims the catalogue's commit (MESH_LAB_CATALOG, either spelling).
  • test/beds-read-the-catalogue.test.ts refuses an inline manifest literal naming a catalogue module unless the bed is declared with its reason (BESIDE / WEARING / DIFFERS). The declared list is the debt; a declaration for a copy that is gone is refused too.

Proven

All eight converted beds ran green in the lab against this branch, each receipt naming mesh-catalog e0d3472: confluence, gitlab, openai-bed, assigned-audit, assigned-catalogue-mqtt, anthropic-bed, assigned-model-usage, local-model-bed. Unit tests 151/151.

Not run: the five loader-folded beds (adopted-store-cross-node, two-node-db, whole-mesh-ace/novox/full) — the change there is a pure replacement of loader code by the shared function the eight runs exercised.

HQ

Decided in ADR 0089 (hq MR on the same branch name); issue 073 diagnosed; issues 074 and 075 opened for the other two kinds of copy the survey found.

## What - `catalogueModule()` in the harness reads a module's manifest from the catalogue and rewrites only what the lab must: the build section goes, each artifact becomes the image the machine holds, images are pinned, and a bed may declare a host-port remap or a lab-local address. - Eight beds now install the catalogue's manifest: confluence, gitlab, openai-consumer, audit-logger, ollama + local-model-consumer, model-usage, mosquitto, anthropic-manager + anthropic-consumer. - The five private loaders (adopted-store-cross-node, two-node-db, the three whole-mesh beds) are folded onto the shared one. The ace loader never resolved a runtime artifact; whole-mesh-full still asked for `registry` and `firewall` (the catalogue says `distribution` and `nftables`) and swallowed the miss. - The receipt claims the catalogue's commit (`MESH_LAB_CATALOG`, either spelling). - `test/beds-read-the-catalogue.test.ts` refuses an inline manifest literal naming a catalogue module unless the bed is declared with its reason (BESIDE / WEARING / DIFFERS). The declared list is the debt; a declaration for a copy that is gone is refused too. ## Proven All eight converted beds ran green in the lab against this branch, each receipt naming `mesh-catalog e0d3472`: confluence, gitlab, openai-bed, assigned-audit, assigned-catalogue-mqtt, anthropic-bed, assigned-model-usage, local-model-bed. Unit tests 151/151. Not run: the five loader-folded beds (adopted-store-cross-node, two-node-db, whole-mesh-ace/novox/full) — the change there is a pure replacement of loader code by the shared function the eight runs exercised. ## HQ Decided in ADR 0089 (hq MR on the same branch name); issue 073 diagnosed; issues 074 and 075 opened for the other two kinds of copy the survey found.
jschoubben added 3 commits 2026-09-21 12:52:02 +00:00
A bed installs a catalogue module by reading its manifest from MESH_LAB_CATALOG at
run time, so a receipt naming no catalogue commit cannot say whether a catalogue
change was ever proven. Claimed under either spelling of the variable; not built,
because a manifest is read, not compiled (novox/hq 04-ISSUES/073).
catalogueModule() in the harness reads a module's manifest from the catalogue and
rewrites only what the lab must: the build section goes, each artifact becomes the
image the machine holds, images are pinned, and a bed may declare a host-port remap
or a lab-local address. confluence, gitlab, openai-consumer, audit-logger, ollama,
local-model-consumer, model-usage, mosquitto, anthropic-manager and
anthropic-consumer now install the catalogue's manifest. A unit test refuses any
inline copy naming a catalogue module unless the bed is declared with its reason;
the declared list is the debt (novox/hq 04-ISSUES/073).
adopted-store-cross-node, two-node-db and the three whole-mesh beds each carried a
private loader; they drifted. The ace loader never resolved a runtime artifact, so a
module the mesh builds travelled unresolved; whole-mesh-full still asked for
'registry' and 'firewall', which the catalogue names distribution and nftables, and
swallowed the miss as NOT ASSIGNED. One loader now (novox/hq 04-ISSUES/073).
jschoubben added 1 commit 2026-09-21 13:18:49 +00:00
The control plane's manifest is leaving the catalogue (ADR 0069, issue 072); a marker
that named it would make every catalogue-reading bed skip the day it goes.
jschoubben added 1 commit 2026-09-21 17:21:56 +00:00
Review findings: a sibling-path fallback read a catalogue the receipt never claimed;
a manifest literal naming its version first slipped the fence; the shared loader
thirteen beds install through had no test short of a lab run.
jschoubben merged commit c8c3028f38 into main 2026-09-21 17:23:16 +00:00
jschoubben deleted branch feat/beds-read-the-catalogue 2026-09-21 17:23:16 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-lab#41