Phase 5 (1/4): keep a facts snapshot for merge checks, and say when it goes stale (hq ADR 0237, S14) #95

Merged
mesh-admin merged 1 commits from feat/facts-snapshot into main 2026-10-06 19:19:20 +00:00
Contributor

hq to-be 45 §9 / ADR 0237 decision 1.

  • The controller (lease holder) composes the facts snapshot every 10 min and keeps it in the artifact store as facts:latest when it moved or is a day old; the manifest it replaced is deleted by digest so the nightly collector takes it (the store keeps one).
  • Holds: every machine under a same-length pseudonym (roles, system, libc, arch, builds, capabilities, assignments, pins, settings, names of given secrets, how its declaration composes today), seats and holders, every module as the mesh holds it with source and build edges, the bus/store/node-engine versions as they run.
  • No secret, no address, no name: scrubber withholds secret-looking keys/values, maps addresses to documentation ranges, replaces machine/site/account/domain names everywhere.
  • facts, facts show, facts compose, facts export.
  • S14 facts-stale past two days (row moved from deferred to watched, with its suppression in the generated signals test).

Tests: no-secret/no-address/no-name test over a mesh with secrets, settings and a made credential; scrubber tests; live registry test (put, read by tag, replaced snapshot collected by the store's own collector run as the nightly runs it). Full suite green with postgres + nats (-p 1).

Merge first of the Phase 5 controller PRs. Rollout: a controller build; nothing to migrate.

hq to-be 45 §9 / ADR 0237 decision 1. - The controller (lease holder) composes the facts snapshot every 10 min and keeps it in the artifact store as `facts:latest` when it moved or is a day old; the manifest it replaced is deleted by digest so the nightly collector takes it (the store keeps one). - Holds: every machine under a same-length pseudonym (roles, system, libc, arch, builds, capabilities, assignments, pins, settings, names of given secrets, how its declaration composes today), seats and holders, every module as the mesh holds it with source and build edges, the bus/store/node-engine versions as they run. - No secret, no address, no name: scrubber withholds secret-looking keys/values, maps addresses to documentation ranges, replaces machine/site/account/domain names everywhere. - `facts`, `facts show`, `facts compose`, `facts export`. - S14 `facts-stale` past two days (row moved from deferred to watched, with its suppression in the generated signals test). Tests: no-secret/no-address/no-name test over a mesh with secrets, settings and a made credential; scrubber tests; live registry test (put, read by tag, replaced snapshot collected by the store's own collector run as the nightly runs it). Full suite green with postgres + nats (-p 1). Merge first of the Phase 5 controller PRs. Rollout: a controller build; nothing to migrate.
mesh-admin added 1 commit 2026-10-06 19:17:38 +00:00
Every check the mesh had was right about the world it was given and none was given
the mesh's: a real machine's name made an identity too long (263), the node-engine
refused what the catalogue check passed (236). The controller now composes what a
check needs - every machine under a pseudonym of its name's length, its roles,
system, builds, capabilities, assignments, pins, settings and how its declaration
composes; every seat, module and source; the bus, store and node-engine versions it
runs - with no secret, no address and no name, and keeps it in the artifact store
as facts:latest when it moved, or daily. The replaced snapshot's manifest is let go
of, so the nightly collector takes it. S14 raises facts-stale past two days.
mesh-admin merged commit 042874e0ce into main 2026-10-06 19:19:20 +00:00
mesh-admin deleted branch feat/facts-snapshot 2026-10-06 19:19:20 +00:00
Author
Contributor

Delivery novox/mesh-controller@042874e0ce9a — 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#95 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@042874e0ce9a` — **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#95 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.
No Reviewers
1 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-controller#95