A module declares the data it holds; protection and D13 derived from it (hq ADR 0233) #88

Merged
mesh-admin merged 2 commits from feat/a-module-declares-the-data-it-holds into main 2026-10-06 15:00:53 +00:00
Contributor

hq ADR 0233.

  • internal/catalogue/data.go: the data section (own / consumers / kept-by), classes irreplaceable/valuable/rebuildable/cache/none, backup (copy|none|{dump,into}) and redundancy; parse problems; DataProblems for module check (granting provider must state its consumers' class, no keeps-consumer-data on offers, no hand-written backup lines, rw-mounted dirs declared, kept-by irreplaceable protected at the provider). KeepsConsumerData follows the class. Backup holder lines (backup, new data kind) derived, ${machine:} and ${access:} filled. Only irreplaceable data depends on node-backup. Old CheckBackup store list removed (it was only ever enforced by a test).
  • internal/inventory/data.go + migration 0072: data_item (retired/deleted kept, never dropped) and hourly data_reading.
  • cmd/mesh-controller/data.go: probe D13 (asks every node-backup.backed-up, every keeping provider's provisioner_retirement with new held_sizes), conditions data-shrank, data-missing, empty-replacement, data-held-twice, data-quiet, backup-stale, array-degraded, protection-missing, data-unmeasured, cleanup-waiting — urgent for irreplaceable, warning for valuable; kept-by upgrades provider items. Verb data; cleanup list|delete extended to own retired data (deleted by the holder's backup_delete_retired after a last restore point); unassign says what it leaves.
  • Grant: VerbsTheSelfCheckAsks += node-backup.backed-up (golden updated; mesh-host's genesis lock in its PR).

Tests: catalogue/data_test.go, inventory/data_test.go, cmd data_test.go incl. issue 273 replay (empty replacement of five consumers) and unassign keeps irreplaceable data retired + empty replacement elsewhere through real postgres:17 + nats:2.11. Full suite go test -race -p 1 ./... green; vet, gofmt clean; module check passes all 125 manifests (mesh-catalog + media + photos).

Merge order: this first (with mesh-host's genesis lock), then mesh-catalog, mesh-media-catalog, photos, then hq.

hq ADR 0233. - `internal/catalogue/data.go`: the `data` section (own / consumers / kept-by), classes irreplaceable/valuable/rebuildable/cache/none, `backup` (copy|none|{dump,into}) and `redundancy`; parse problems; `DataProblems` for `module check` (granting provider must state its consumers' class, no `keeps-consumer-data` on offers, no hand-written backup lines, rw-mounted dirs declared, kept-by irreplaceable protected at the provider). `KeepsConsumerData` follows the class. Backup holder lines (`backup`, new `data` kind) derived, `${machine:}` and `${access:}` filled. Only irreplaceable data depends on `node-backup`. Old `CheckBackup` store list removed (it was only ever enforced by a test). - `internal/inventory/data.go` + migration **0072**: `data_item` (retired/deleted kept, never dropped) and hourly `data_reading`. - `cmd/mesh-controller/data.go`: probe **D13** (asks every `node-backup.backed-up`, every keeping provider's `provisioner_retirement` with new `held_sizes`), conditions `data-shrank`, `data-missing`, `empty-replacement`, `data-held-twice`, `data-quiet`, `backup-stale`, `array-degraded`, `protection-missing`, `data-unmeasured`, `cleanup-waiting` — urgent for irreplaceable, warning for valuable; kept-by upgrades provider items. Verb `data`; `cleanup list|delete` extended to own retired data (deleted by the holder's `backup_delete_retired` after a last restore point); `unassign` says what it leaves. - Grant: `VerbsTheSelfCheckAsks` += `node-backup.backed-up` (golden updated; mesh-host's genesis lock in its PR). Tests: catalogue/data_test.go, inventory/data_test.go, cmd data_test.go incl. **issue 273 replay** (empty replacement of five consumers) and **unassign keeps irreplaceable data retired + empty replacement elsewhere** through real postgres:17 + nats:2.11. Full suite `go test -race -p 1 ./...` green; vet, gofmt clean; `module check` passes all 125 manifests (mesh-catalog + media + photos). **Merge order**: this first (with mesh-host's genesis lock), then mesh-catalog, mesh-media-catalog, photos, then hq.
mesh-admin added 1 commit 2026-10-06 14:48:17 +00:00
A module's data section says what it keeps and how precious it is; the backup holder's lines,
binding stickiness, retirement on unassign and D13's conditions follow from it, so issue 273's
empty replacement is said and an unassigned module's data is remembered, not forgotten.
jschoubben added 1 commit 2026-10-06 15:00:24 +00:00
A walk over a large library every hour loads the array that protects it. An item now says how it
is measured — a bounded daily walk, a dataset's counters, or its top level only — and a size that
is a lower bound is kept as such and never read as a shrink.
mesh-admin merged commit 2b5060789f into main 2026-10-06 15:00:53 +00:00
mesh-admin deleted branch feat/a-module-declares-the-data-it-holds 2026-10-06 15:00:54 +00:00
Author
Contributor

Delivery novox/mesh-controller@2b5060789f55 — held since 2026-10-06T23:05:28Z

Held for a person: merged without a passing check: only a person decides that it goes on — mesh-delivery.release with why lets it go on.

Delivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step

  • tier 0: mesh-controller
  • tier 1: build-agent
  • tier 2: route-proxy
  • ace: receives build-agent, route-proxy
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent, route-proxy
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • route-proxy provides route: its consumers are sent again after it
  • route-proxy keeps data (ADR 0233): what it holds is backed up before it moves

Transitions

  • 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-controller#88 merged; its head was not heard by this owner, so it is made from the forge's word
  • 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-controller@2b5060789f55` — **held** since 2026-10-06T23:05:28Z Held for a person: merged without a passing check: only a person decides that it goes on — `mesh-delivery.release` with why lets it go on. **Delivery plan** — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - tier 2: route-proxy - ace: receives build-agent, route-proxy - g14: receives build-agent - novox: receives mesh-controller, build-agent, route-proxy - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - route-proxy provides route: its consumers are sent again after it - route-proxy keeps data (ADR 0233): what it holds is backed up before it moves **Transitions** - 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-controller#88 merged; its head was not heard by this owner, so it is made from the forge's word - 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
This repo is archived. You cannot comment on pull requests.