A build keeps what it was told

The builder announces a build with the resolved manifest, the path inside the
repository, and every artifact it stood on. The control plane received all of it
and kept none of it.

That was survivable while the catalogue heard the same announcement directly. It
stops being survivable the moment the catalogue was not there to hear it — which
on a fresh mesh is always, and always for the same modules: the shared base, the
store the catalogue runs on, and the catalogue itself are each necessarily built
BEFORE the catalogue exists to hear about them. The graph's foundation is the
part the graph never sees.

Replaying those builds needs what they said, not a summary. Without the manifest
there are no requires/provides edges; without `against` there are no build edges,
which are the ones that answer "a base moved, what must be rebuilt". A replay
carrying neither would restore the module list and leave the question the
catalogue exists for still wrong, while looking fixed.

Kept null rather than empty where a build predates this, so a replay can say it
is holding nothing instead of inventing an empty declaration for a module that
certainly had one. And `built_against`, not `built_on`: that column exists and
means the machine, which is a different fact about a different subject.

Toward novox/hq 04-ISSUES/050.

Claude-Session: https://claude.ai/code/session_01D6qtiYU3P9jk3pnAXyAFyx
This commit is contained in:
2026-09-15 01:22:34 +02:00
parent dda001d64b
commit 2b82872ac3
3 changed files with 65 additions and 3 deletions
@@ -0,0 +1,26 @@
-- What a build result carried and the mesh threw away.
--
-- novox/hq 04-ISSUES/050. The builder announces a build with the resolved manifest, the path
-- inside the repository, and every artifact it was built against. The control plane receives all
-- of it and kept none of it: `build` held the repository, the ref, the commit and what was made.
--
-- That was survivable while the catalogue heard the same announcement directly. It stops being
-- survivable the moment the catalogue was not there to hear it — which on a fresh mesh is always,
-- and always for the same modules. The shared base, the store the catalogue itself runs on, and
-- the catalogue: each is necessarily built BEFORE the catalogue exists to hear about it, so the
-- graph's foundation is the part the graph never sees.
--
-- Replaying those builds needs what they said, not a summary of it. Without the manifest there
-- are no requires/provides edges; without `against` there are no build edges, which are the ones
-- that answer "a base moved, what must be rebuilt". A replay carrying neither would restore the
-- module list and leave the question the catalogue exists for still wrong, while looking fixed.
--
-- Empty and null-free, so every build recorded before this keeps exactly the meaning it had: a
-- row with no manifest is one that predates this, and a replay says so rather than inventing an
-- empty declaration.
--
-- `built_against` rather than `built_on`: that column already exists and means the MACHINE that
-- did the build, which is a different fact about a different subject.
alter table build add column source_path text not null default '';
alter table build add column manifest jsonb;
alter table build add column built_against jsonb;