Repository navigation
Delete the owned-CI control plane at the root - #8387
Conversation
The control plane was built once (#8016), never deployed, and never ran: it is in no release-bin roster, no systemd unit, no converge membership, and no .gunbc state exists anywhere. Its only live surface was a /ci route that answered a permanent 503 by construction. It therefore holds no boundary, which makes this the cleanest form of the DESIGN 3 delete-first cut: nothing depended on it, so nothing regresses. What it was: 1754 lines of hand-written Rust implementing semantics the substrate already models -- a poll loop, a filesystem queue, a lease, HTTP to GitHub, and JSON state -- under a declared scaffold whose three dissolve-on items were all still open. Per DESIGN 7 the seed shrinks toward zero, and this was the seed growing instead. Two forks die with it. QueueLease was a nickname for std.temporal_effect HeldLease, which already carries lease_key, resource_fingerprint, owner_fingerprint, generation, and a five-armed observed state, and whose decision_for_held_lease_verdict already yields stale-lease reclaim and foreign-holder refusal. CiExecutionSubject fused demand and work into one identity, so a retry had nowhere to live. Deleted whole rather than migrated, per the standing rule that a replacement cuts at the root: both Rust files and the bin registration, gunbc.owned_ci, owned_ci_seed (which existed only to feed the Rust seed), owned_ci_serve, owned_ci_page, gunbc.ci_execution_plan, the witness module, and the design doc whose sequencing was the old shape's gravity. Git history keeps all of it as quarry. The witnesses are retired rather than re-enrolled, with a receipt: their subject is the fused subject/run model, and evidence whose only subject is a rejected shape must not be left standing (DESIGN 4b). The lease obligations they covered are already witnessed against HeldLease in temporal_effect_spine_witness_test. The generated crate-layout artifacts are edited mechanically here rather than regenerated locally; the drift gate is the oracle for them. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GJgwfCsHvvRLD5EAErgP7F
review 52992 (cursor): roadmap_serve_witness_test still imported
CiRunsPageHandler, CiRunDetailPageHandler and CiRunsJsonHandler and asserted
that /ci, /ci/runs.json and /ci/run/{run_id} select them. Those variants,
routes and dispatch arms are deleted by this cut, so the enrolled witness
would not resolve against the updated module. Correct and confirmed by
reading the file; fixed rather than argued.
Why the first sweep missed it: the residual grep searched for the deleted
MODULE names (owned_ci, ci_execution_plan, ci_control_plane). These three
symbols contain none of those strings -- they are symbols removed from a
SURVIVING module. A deletion has two reference surfaces, not one, and only
the first was swept.
The re-sweep covers both: every symbol removed from a surviving module, every
exported symbol of each deleted module, and the route literals. All clean
across dag/, src/ and .github/. No route-count assertion exists that the
three removals would falsify.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GJgwfCsHvvRLD5EAErgP7F
|
Fixed in e28a301. review 52992 is correct — verified by reading the file before changing it.
Why my residual sweep missed it, since that's the more useful half: I grepped for the deleted module names — The re-sweep covers both, plus the route literals:
All clean across Remaining references are still only in the frozen — sent from silent-bear-842 |
|
Correcting two claims in this PR's commit message. Neither changes the diff — the deleted code never executed, so nothing regresses either way — but both are wrong as written and this repo treats a false claim in an authority as a defect in its own right. 1. So 2. Deletion correctness is unaffected. The lane was never deployed and never ran, so no capability regressed regardless of which carrier was the better home. The disposition stands: ownership and fencing belong on Separately, for anyone reading this cut as precedent for the successor design: Found by re-checking my own claims against the carrier rather than by review. — sent from silent-bear-842 |
Per merge policy, a merge commit rather than a rebase. One conflict, in src/v1/stage0/src/lib.rs, and it was reported by the generated-artifact merge driver refusing rather than answering: it left the ours side with no conflict markers, marked the path unmerged, and printed the regeneration recipe. That is the driver behaving correctly -- both sides had changed the file since the merge base, and taking either side wholesale would have dropped the other's authority-derived bytes. Resolved by composition rather than by picking a side: main's module list, which gained v1_tests_claim_checkpoint_identity_keying_witness_test in the cutover, MINUS the pub mod ci_control_plane this branch deletes. Both changes survive. The other three generated crate-layout artifacts auto-merged; verified line-by-line that each now equals main's content minus ci_control_plane and nothing else, rather than trusting the auto-merge. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GJgwfCsHvvRLD5EAErgP7F
|
CI is red on this head, and I am not pushing a fix, because the evidence says this PR is not the cause. Recording the discriminating check rather than asserting it. main is redder than this branch. The 48 failures on main against 23 here. The 19-row roster difference is exactly this PR's deleted witness population. Set difference, not counts. Of the 23, nineteen also fail on main. Four are ours-only, and none is reachable from this diff:
The first three are overruns of 1–3ms against a 500ms budget. A diff that only deletes files cannot make an unrelated witness three milliseconds slower. main independently fails three different The fourth imports The dominant failure class is unstable on main. What I have not done, deliberately. I have not edited This PR carries 2 approvals, no REQUEST_CHANGES, and — sent from silent-bear-842 |
Catching up to origin/main at b9763bd. Clean automatic merge, no conflicts this time -- the generated crate-layout artifacts were untouched by both commits. #8400 is the fix for the failure population diagnosed on this PR's previous head: the over-qualified Optional patterns behind the non-exhaustive pattern match on null class, and the removal of the 25 floor_expected_red rows that had begun passing. Both were main's, not this branch's -- the set difference measured 48 failures on main against 23 here, with the 19-row gap being exactly this PR's deleted witnesses. Verified after merge that this cut's deletions survived intact: zero live-tree references to ci_control_plane, owned_ci, ci_execution_plan or the CiRuns* handlers, and lib.rs carries no ci_control_plane module. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GJgwfCsHvvRLD5EAErgP7F
Merge commit rather than a rebase, per the repo's merge policy: the branch is under review and force-pushing it would invalidate the approvals for no change in end state. Four conflicts, all in generated crate-layout artifacts, all reported by the generated-artifact merge driver refusing rather than answering -- it leaves the ours side, marks the path unmerged with no markers, and prints the regeneration recipe. Two surfaced as ordinary conflicts and two as unmerged paths with no diff markers. Resolved identically in each: main's content minus pub mod ci_control_plane and its three roster entries. Main's new codex_app_server_stdio_session registration is preserved in all four artifacts. Verified per file that the ONLY difference from main's version is ci_control_plane, rather than trusting the resolution. Live-tree references to ci_control_plane: zero. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GJgwfCsHvvRLD5EAErgP7F
# Conflicts: # src/v1/stage0/Cargo.toml
Take main's in-module refusal_matches_name for compute_board admission (supersedes HAND-RUST board_article intercept). Drop deleted owned-CI binaries; keep expected_red_roster_join and main's 1500ms floor budget. Co-authored-by: Cursor <cursoragent@cursor.com>
The owned-CI control plane is deleted whole: both Rust files, the bin registration,
gunbc.owned_ci,owned_ci_seed,owned_ci_serve,owned_ci_page,gunbc.ci_execution_plan, the witness module, and the design doc.Why this is a clean cut
It was built once (#8016), never deployed and never ran — absent from
gunbc.ci_release_bins, from every systemd unit, and from every converge membership, with no.gunbcstate anywhere in the tree. Its only live surface was the/ciroute, which answered a permanent 503 by construction because nothing ever wrote the index it reads.So it holds no boundary. That makes this the easiest form of the DESIGN §3 delete-first cut rather than the hard one: no coverage gap to declare, no rung to drop, no frozen-X carve-out needed.
What it was
1754 lines of hand-written Rust implementing semantics the substrate already models — a poll loop, a filesystem queue, a lease, HTTP to GitHub, JSON state — under a declared scaffold whose three dissolve-on items were all still open. Per DESIGN §7 the seed shrinks toward zero; this was the seed growing instead.
Lease disposition — corrected
An earlier revision of this description claimed
QueueLeasewas "a nickname forHeldLease" and that the lease obligations were "already witnessed." Both were overclaims, verified against the carrier and corrected here rather than left standing:std.temporal_effectHeldLeasecarrieslease_key,resource_fingerprint,owner_fingerprint,generation,observed— and no timestamp and noexpires_at.LeaseRunningStaleis a supplied observation, not a verdict derived from a deadline. Theexpires_at/grant_not_expired_atmachinery in that module belongs toDurableApprovalGrant, a different type.QueueLeasecarried an actual wall-clock expiry model. So the two overlap: the deleted carrier duplicatedHeldLease's ownership and fencing facts while adding a lease-liveness fact that has no home yet.decision_for_held_lease_verdictandheld_lease_observed_verdicthave zero production consumers.fleet_converge_planmints aHeldLeasewithobserved: LeaseAbsentas a generation carrier and performs its own compare-and-swap; it does not call them. The type is live; the decision layer is modeled and unconsumed.Accurate disposition: ownership and generation fencing belong on
HeldLease. Lease-liveness observation and retry admission are new modeling the successor owes — not obligations being restored from this lane. Deletion correctness is unaffected either way, because the deleted code never executed.Evidence disposition
The 16 witnesses are retired with a receipt, not re-enrolled. Their subject is the fused subject/run model this cut rejects, and evidence whose only subject is a rejected shape must not be left standing (DESIGN §4b) — otherwise tests become how obsolete behavior grants itself immortality.
Reviewer notes
heal_generated_artifactshas since passed and pushed no correction commit, so the hand-written bytes are byte-identical to what the authority derives.buildandregenalso pass.roadmap_serve_witness_teststill asserted the deleted/ciroutes; caught by review 52992 and fixed ine28a3016bb. My first sweep searched deleted module names and missed symbols removed from a surviving module — the re-sweep covers both surfaces and the route literals.owned_cimentions are only in frozendocs/plans/import-strip-*measurement receipts, which are dated records and deliberately untouched.Follow-on work — a
.dagwork-and-lease broker — lands separately. This PR only removes the weed.