Skip to content

Cut the ctrl/session-container lane at the root, and repair a witness file that never ran - #9483

Merged
briansrls merged 2 commits into
mainfrom
session/warm-tern-755-session-cut
Aug 27, 2026
Merged

briansrls merged 2 commits into
mainfrom
session/warm-tern-755-session-cut

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Operator direction: "I would err towards deleting anything related to ctrl/session containers, if possible - i really want to minimize this stuff." Steps 7-9 of the convergence plan are retired by deletion rather than implemented.

20 files, -4,780 / +38.

Deleted

Six modules whose only production importers were each other, plus their four witness files:

module prod importers
gunbc.session_auto_publish 0
gunbc.session_auto_publish_ctrl_ingest 1 (auto_publish only) — the bridge from ctrl publishSessionWorktree
gunbc.session_demand_observe 0
gunbc.session_demand 1 (demand_observe only)
gunbc.session_container_projection 0
gunbc.ctrl_host_provisioning_census 0

Five load-bearing edges the import census could not see

Delete-first surfaced every one by refusing. That is the argument for cutting at the root rather than reading first:

  1. session_demand_observe had zero .dag importers and a live consumer — it is invoked by path as a fleet-converge workflow dispatch mode. Removed the mode, the step, the ci_spec target and its invoke. This is the lanes-are-invisible blind spot: a module census cannot see an actuation consumer.
  2. A decl_ref citation into session_auto_publish from gunbc.list_membership_operation_gap. With the citation wall now on main, deleting the module would have dangled it and redded the parse phase.
  3. length(list_membership_gap_sites) >= 5 over exactly 5 rows. Lowered to 4 — the subject went away, not a row hidden to green a ratchet.
  4. gunbc_ci_fleet_job_backstop_timeout_note described the removed mode. The computed value is unaffected (it derives from always-run counts plus the spark_grants worst case, and the removed step was neither), but the prose asserted a mode that no longer exists.
  5. Two stale prose citations.

The generated workflow was regenerated, not edited

.github/workflows/fleet-converge.yml carries an explicit never-hand-edit instruction and a recorded two-day outage from a hand cut. Regenerated from gunbc.generated_artifact_emit and verified three ways before installing: the diff against the committed file contains only the three intended removals; steps went 25 to 24 and timeouts 20 to 19; and the set of steps lacking a timeout is identical in both, so no surviving step lost one.

Free §3 win

PublicationContext and PublicationDisposition were each defined twice in the corpus. The live consumer imports from gunbc.publication_policy, so the cluster's copies were dead duplicates and the name collision goes with them.

A defect I introduced in #9351, found while validating this cut

test.claim.session_reservation_policy_witness_test declared its twelve witnesses as plain fn, not test fn. The floor discovers by scanning for the literal test fn / test data prefix (v1_compiler cli_run scan_test_decl_lines), so those twelve are invisible to discovery and have never executed in CI.

They passed every time I ran them by hand, and I cited that 12/12 as validation for #9351. A file that reads as coverage and carries none is worse than an absent file, because it gets cited — and it was. It also guarded the one carrier this cut keeps: session_reservation_policy is what makes srv1's width honest and srv2 refuse.

Promoted to test fn, assertions unchanged, reason recorded in the file rather than renamed silently.

This is a population, not an incident. 990 corpus witness files use test fn; nine do not:

clock_freshness_witness.dag                    1
corpus_gate_dag_root_probe.dag                 1
diagnostic_redfish_witness.dag                 1
env_freshness_witness.dag                      1
filesystem_read_outcome_witness_test.dag       3
gcp_oauth_access_token_witness.dag             9
http_pilot_rest_witness.dag                    1
json_emit_corpus_witness.dag                   1
session_reservation_policy_witness_test.dag   12   <- repaired here

Only mine is repaired. The other eight are named here rather than swept in: each needs its own check that it passes under the floor's hermetic envelope, which is different work from this cut. Naming them is the point — they are 17 further assertions that currently read as coverage and never run.

Kept, deliberately

session_admission_policy, session_reservation_policy, session_lease. Deleting the reservation policy would reinstate the fabricated fleet-wide figure #9351 removed; session_lease has two real consumers (host_effect_nbd_proxy_serve, roadmap_dispatch_actuator). If those should go too it is a further cut with a cost worth stating first.

Validated by execution

workflow_dispatch_input 6/6 · runner_placement 28/28 · session_reservation_policy 12/12 both before and after promotion.

… file that never ran

Operator direction: delete anything related to ctrl/session containers; minimize
this. Steps 7-9 of the convergence plan are retired by deletion rather than
implemented.

DELETED, six modules whose only production importers were each other:
gunbc.session_auto_publish, gunbc.session_auto_publish_ctrl_ingest (literally the
bridge from ctrl publishSessionWorktree), gunbc.session_demand,
gunbc.session_demand_observe, gunbc.session_container_projection and
gunbc.ctrl_host_provisioning_census, with their four witness files. ~4,700 lines.

FIVE LOAD-BEARING EDGES THE IMPORT CENSUS COULD NOT SEE. Delete-first surfaced
every one by refusing, which is the whole argument for cutting at the root:

- session_demand_observe had ZERO .dag importers and a live consumer: it is
  invoked BY PATH as a fleet-converge workflow dispatch mode. Removed the mode,
  the step, the ci_spec target and its invoke. This is the lanes-are-invisible
  blind spot -- a module census cannot see an actuation consumer.
- gunbc.list_membership_operation_gap carried a decl_ref citation into
  session_auto_publish. With the citation wall now on main, deleting the module
  would have dangled it and redded the parse phase.
- carrier_reference_integrity asserted length(list_membership_gap_sites) >= 5
  over exactly 5 rows. Lowered to 4: the SUBJECT went away, not a row hidden to
  green a ratchet.
- gunbc_ci_fleet_job_backstop_timeout_note described the removed mode. The
  computed value is unaffected -- it derives from always-run counts plus the
  spark_grants worst case and the removed step was neither -- but the prose
  asserted a mode that no longer exists.
- Two stale prose citations.

.github/workflows/fleet-converge.yml REGENERATED from its authority, never hand
edited (that file carries an explicit never-hand-edit instruction and a recorded
two-day outage from a hand cut). Verified three ways before installing: the diff
against the committed file contains ONLY the three intended removals; steps went
25->24 and timeouts 20->19; and the set of steps LACKING a timeout is identical
in both, so no surviving step lost one.

FREE §3 WIN: PublicationContext and PublicationDisposition were each defined
TWICE in the corpus. The live consumer imports from gunbc.publication_policy, so
the cluster's copies were dead duplicates and the name collision goes with them.

AND A DEFECT I INTRODUCED IN #9351, FOUND WHILE VALIDATING THIS CUT.
test.claim.session_reservation_policy_witness_test declared its twelve witnesses
as plain `fn`, not `test fn`. The floor discovers by scanning for the literal
`test fn ` / `test data ` prefix (v1_compiler cli_run scan_test_decl_lines), so
those twelve are INVISIBLE to discovery and have never executed in CI. They
passed every time I ran them by hand, and I cited that 12/12 as validation for
#9351 -- a file that reads as coverage and carries none, which is worse than an
absent file because it gets cited. It also guarded the one carrier this cut
KEEPS: session_reservation_policy is what makes srv1's width honest and srv2
refuse. Promoted to `test fn`, assertions unchanged, reason recorded in the file.

POPULATION, NOT INCIDENT: 990 corpus witness files use `test fn` and 9 do not.
Only mine is repaired here; the other eight are named in the PR body rather than
swept in, since each needs its own check that it passes under the floor's
hermetic envelope.

KEPT: session_admission_policy, session_reservation_policy, session_lease.
Deleting the reservation policy would reinstate the fabricated fleet-wide figure
#9351 removed; session_lease has two real consumers.

Validated by execution: workflow_dispatch_input 6/6, runner_placement 28/28,
session_reservation_policy 12/12 both before and after promotion.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

The floor red on this PR is inherited from main, not caused by this cut. Evidence, and I am not pushing anything for it.

main is broadly red right now: 9 of the last 10 completed runs failed, across six distinct SHAs. Main run 33095831903 fails with the identical signature to this PR — same step (Required CI: witnesses lane (parse, witness floor)), and the same four No files were found artifact-upload failures, which is what a fold refusing before it produces any roster looks like.

Main's logs are fetchable (its runs completed; this PR's were still locked behind an in-progress build), and they name the cause:

dag/product/fabric/contention.dag:23:19: name 'grant_duration_seconds' not found in module 'product.fabric.supply'
dag/product/fabric/contention.dag:280:3:  non-exhaustive match: missing variant(s) UnobservedGrantDuration
dag/product/fabric/contention.dag:421:3:  non-exhaustive match: missing variant(s) QuoteNotPriceableWithoutDuration
dag/product/fabric/contention.dag:463:30: function 'grant_duration_seconds' not found in scope
dag/product/fabric/contention.dag:469:43: function 'grant_duration_seconds' not found in scope

Mechanism: gunbc#9397 renamed grant_duration_seconds to grant_duration_bound_seconds and changed its return from Second to Second? — because a duration can now be unknown — and added the two variants. contention.dag, from a different PR, still consumes the old API. Two changes each green on their own base, composing into a red main.

Nothing in this diff touches product.fabric. The modules deleted here are the ctrl/session-container lane, and the only product.fabric files that appear anywhere near this branch are ones it does not modify.

A fix is already in flight as gunbc#9492 ("contention finishes #9397's rename (MAIN RED)"), so I am deliberately not writing a second one — duplicate repairs of one fleet-wide break are their own waste. This PR's floor should clear once that lands; it needs a re-run, not a change.

Three hypotheses I tested and refuted before reaching this, recorded so the next reader does not repeat them: the floor growth budget (required_floor_growth_budget_witness_test passes locally 1/1 against this tree, so deleting four witness files did not trip it); a dangling reference under src/v1, which the parse sweep covers and my original census did not (zero hits); and an annotation-grain violation from the // blocks added here.

— sent from warm-tern-755

@gunbai-bot

gunbai-bot Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

Correcting my comment above: main is broken in TWO independent ways, not one. I named only the first, because main's log carried only the first — my own log, which became readable once the run completed, carries both.

Break 1 — product.fabric.contention (as described above): #9397 renamed grant_duration_seconds to grant_duration_bound_seconds and changed its return to Second?; contention.dag still calls the old name. Fix in flight: gunbc#9492.

Break 2 — gunbc.fleet_fan_wiring_witness, which I missed:

dag/gunbc/fleet_fan_wiring_witness.dag:754:1: error: duplicate declaration
  'srv3_wiring_with_a_duplicated_header' in module 'gunbc.fleet_fan_wiring_witness'

data srv3_wiring_with_a_duplicated_header is declared at line 447 and again at line 754, byte-identical, from gunbc#9299. Present at this branch's base and at main HEAD. Fix in flight: gunbc#9497.

Why my first comment missed it, which is the part worth recording. I compared my failure against main run 33095831903 and matched on the contention.dag signature. That run does not contain the duplicate-declaration error at all — so signature-matching against one main run told me a cause was shared and I read it as the cause. A refusal that lists five errors and a refusal that lists six look identical through a grep for the five. The second only surfaced when I stopped comparing and read my own log end to end.

Neither break is in this diff. Nothing here touches product.fabric or fleet_fan_wiring_witness, and both files are untouched by the ctrl/session-container cut.

Both fixes are in flight and I am writing neither. This PR needs a re-run once #9492 and #9497 have landed — not a change. If it still refuses after both, that result is worth reading fresh rather than assuming a third inherited cause.

Adjacent and not mine to pursue here: gunbc#9481 records that the compiler ADMITS duplicate function definitions in one module and silently resolves to the last, which is the class Break 2 sits in. Worth noting that the data form above is refused while the fn form is not.

— sent from warm-tern-755

@gunbai-bot

gunbai-bot Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

Correction to the number I cited for Break 1: gunbc#9492 was closed unmerged at 18:07, contained by gunbc#9488 — the same repair built independently, and better on the arm-reachability question #9492 drew a review round over. #9488 never passes the duration into the ranked fold, so the unobserved arms are structurally absent there rather than present-and-unreachable.

So the two blockers under this PR are #9488 and #9497. Both are open and mergeable as of this comment. Nothing else changes: neither break is in this diff, I am writing neither fix, and this PR needs a re-run once both land.

Worth stating plainly since I have now cited a wrong PR number once in this thread: "a fix is in flight" is a claim with an expiry, and I checked it rather than carrying it forward. The premise had gone false in the twenty minutes between my comment and this one.

— sent from warm-tern-755

@gunbai-bot

gunbai-bot Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

Both inherited main breaks are now merged (#9488, #9497), and I merged current main in rather than clicking re-run — a re-run replays the pinned merge ref, which still carried broken main, so it would have reproduced the identical red and read as a defect in this diff. Head is cdfdb2a379.

Before pushing I checked the failure that actually threatens a deletion PR: main moved 67 files while this was blocked, and a new reference to a module deleted here would merge CLEAN and break main. Two hits, both past-tense // annotations authored in this PR, and zero live imports of any of the six deleted modules.

The floor then refused, and it is not an assertion failure. Run 33108592865:

planned=11864 executed=11864 terminal=11864 passed=11723
known_red_held=30 failed=0 stale_quarantine=0
interrupted_before_verdict=1
verdict=FloorRefused unexpected_failures=0

failed=0 and unexpected_failures=0. The single cause:

INTERRUPTED-BEFORE-VERDICT
test.claim.live_deploy.emit.emit_RED_unit_files_are_not_written_through_here_documents
was BUDGET-REFUSED and went UNDECIDED: Cpu, cost at least 5005ms against 5000ms

5005 ms against a 5000 ms CPU cap — a 0.1% overshoot, on a witness this PR does not touch. The authored set here is 20 files and none of them are under live_deploy; the deletions are ctrl/session-container modules with no path to that witness.

Worth stating precisely, because the floor's own message does: this is not a red. The deadline preempted the verdict, so whether that witness passes is UNKNOWN and its real cost is UNMEASURED — 5005 ms is the interrupt point, not the row's cost. Nothing here claims the witness is broken, and I am not claiming it is healthy either.

Re-running the failed lane, which is the right move now for the reason it was the wrong move an hour ago: the merge ref contains repaired main, and the refusal is a timing race rather than content. If it recurs, the honest reading is a marginal witness sitting on the cost line rather than anything in this diff — and that is a real finding for whoever owns live_deploy.emit, since a row this close to the cap is a nondeterministic merge gate for every PR, not just this one.

— sent from warm-tern-755

@briansrls
briansrls merged commit cdb2f8f into main Aug 27, 2026
3 of 5 checks passed
@briansrls
briansrls deleted the session/warm-tern-755-session-cut branch August 27, 2026 21:12
briansrls pushed a commit that referenced this pull request Aug 27, 2026
…p the wall that makes the fourth impossible

#9483 ("repair a witness file that never ran") deleted two of this branch's four barren
specimens with the ctrl/session-container lane and promoted a third in place, while this
repair was in flight. Resolution takes main's deletions and main's WHOLE version of
session_reservation_policy_witness_test — including the aggregate this branch had deleted.
Deleting theirs is still the right call for the reason the leaf promotions make it
redundant, but a deletion arriving as conflict resolution carries no reasoning a reviewer
can see; it belongs in its own change with the double-assertion argument stated, not
smuggled through a merge.

WHAT SURVIVES, and it is the point rather than the remainder: the wall, and the one
specimen nobody happened to be cutting a lane through.
filesystem_read_outcome_witness_test.dag is STILL BARREN on main tonight — the barren
census over all 1708 `*_test.dag` entries under both roots returns exactly one — and its
three claims are promoted here. After this, zero.

#9483 is a repair; this is a construction. The clean test is what happens to the NEXT
instance: after a repair, nothing; after the wall, it refuses. The surviving specimen is
the receipt that repair does not close the class.

And the RED control is stronger for having been overtaken. It named four specimens, three
were then removed by an unrelated human action, and the wall's verdict on the survivor did
not move — so the mechanism does not depend on the population it was discovered from,
which is exactly what a reviewer would otherwise ask to be shown.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012aG5paMUmwmfRSp7czE5dY
gunbai-bot Bot pushed a commit that referenced this pull request Sep 15, 2026
…ess under budget

required-witnesses-floor refused two cost rows, no wrong verdict:
- instance_gap_carrier_declaration_refs_all_resolve (withheld cost debt on main)
  PASSED-OVER-BUDGET at 34.9 s, almost all of it the shared module_path_index fill
  it paid (629 eval steps of its own). It ran because the explanatory comment added in
  18d6aa6 sat between its closing brace and the next test fn, and changed-witness
  selection attributes changed LINES to declarations
  (claim_edit_changes_execution_policy_outside_reported_cost_delta). The comment is
  removed; the #9483 provenance already lives in the carrier prose, the commit and the
  PR body. The file's diff is now the import and the two conjuncts inside
  instance_gap_carrier_ref_population_is_not_empty only.
- lex_rule_dispatch_agrees_with_trying_every_rule: 72,615 steps vs 72,300. Two
  redundant specimens dropped (fnord duplicates iffy's keyword-prefix case; !x
  duplicates the !/!= shared first character). Local gunbc run: 19 checked, 18 pruned,
  0 disagreements, pass; no-residual mutant 4 disagreements, fail.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NHwsRfYwr6M5rXcCQFNdar
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant