mesh/merge-gate pass: builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step; every machine composes with the change as it…
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery-group group fix/assign-says-why-a-module-is-not-there delivering: 1 of 2 delivered
mesh/delivery superseded: a newer delivery to the same trunk took over its walk
Second review of #150: one key per machine and module let a newer failure be cleared in the tick that raised it, pruning could orphan an open condition, and a build no longer waited for read as never asked although it may still run.
53 lines
3.0 KiB
SQL
53 lines
3.0 KiB
SQL
-- An assignment waits for its module's build (novox/hq issue 325, ADR 0261).
|
|
--
|
|
-- A merge that adds a module asks for its build (issue 300), and the module is registered when the build's
|
|
-- outcome is taken in, minutes later. An `assign` in between was answered "no module of that name", which
|
|
-- read as "nobody registered it". The controller now keeps every build it asks for, so `assign` can tell a
|
|
-- build in flight from a module it never heard of, and an assignment made while the build runs is kept as
|
|
-- pending and made by the controller when the build registers the module, or ended with the reason.
|
|
|
|
-- Every build the controller asked for: a merge's new module, a plan's tier, a person's `build`, an `assign`
|
|
-- with build. Kept once the ask is made, never before. Its outcome is the `build` row of the same id;
|
|
-- an ask without one is still running, or was lost. not_asked is why the ask could not be handed over; for a
|
|
-- merge that could not ask, the id is the controller's and no build's. outcome_unknown is why an asker that
|
|
-- handed it over stopped waiting: the build may still run, and is read as in flight until its outcome or
|
|
-- its bound.
|
|
create table build_request (
|
|
id text primary key,
|
|
repository text not null,
|
|
seat text not null default '',
|
|
source_path text not null default '',
|
|
ref text not null default '',
|
|
commit_hash text not null default '',
|
|
asked_for text not null default '',
|
|
not_asked text,
|
|
outcome_unknown text,
|
|
asked_at timestamptz not null default now()
|
|
);
|
|
create index build_request_asked_at on build_request (asked_at);
|
|
|
|
-- An assignment kept until its module is registered (ADR 0261). waiting until the build registers the
|
|
-- module; applying while the controller makes it, under the machine's hold; then applied, refused (the
|
|
-- assignment was refused then), expired (the build failed, was not registered, or said nothing within its
|
|
-- bound) or withdrawn (`unassign`). raised_at is when an expiry or refusal was raised as a condition,
|
|
-- acknowledged_at when a person took it back with `unassign`, cleared_at when its condition was cleared.
|
|
-- Gone with its machine. Ended rows are deleted after 30 days, once any condition raised for them is cleared.
|
|
create table pending_assignment (
|
|
id bigserial primary key,
|
|
node uuid not null references node (id) on delete cascade,
|
|
module text not null,
|
|
build_id text not null,
|
|
repository text not null default '',
|
|
source_path text not null default '',
|
|
since timestamptz not null default now(),
|
|
state text not null default 'waiting'
|
|
check (state in ('waiting', 'applying', 'applied', 'refused', 'expired', 'withdrawn')),
|
|
note text not null default '',
|
|
settled_at timestamptz,
|
|
raised_at timestamptz,
|
|
acknowledged_at timestamptz,
|
|
cleared_at timestamptz
|
|
);
|
|
create unique index pending_assignment_open on pending_assignment (node, module)
|
|
where state in ('waiting', 'applying');
|