Skip to content

Adopt orphaned PR #9380: resolve its two conflicts against main and land the third cli_invoke/walk_plan_stage deletion increment - #9385

Closed
gunbai-bot[bot] wants to merge 8 commits into
mainfrom
session/smart-lynx-458
Closed

gunbai-bot[bot] wants to merge 8 commits into
mainfrom
session/smart-lynx-458

Conversation

@gunbai-bot

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

Copy link
Copy Markdown
Contributor

Auto-opened by session-dashboard for session smart-lynx-458.
Pushing to session/smart-lynx-458 advances this PR.

Worker attestation

Before flipping this PR to ready for review, confirm each item:

  • Title describes the change (not the session id or branch).
  • PR body summarises what and why (replace the TODO below).
  • Tests run: name the command (e.g. npm test, cargo test) and the result.
  • If this closes a work item, the body contains a Closes #N directive.
  • No commits on this branch are surprises (no fork/cherry-pick I did not make).
  • No secrets / credentials / large binaries staged.

Summary

TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.

Test plan

  • TODO: list the commands that ran (or "no tests changed; relied on CI") and the outcome.

gunbc-ci-auto-heal and others added 8 commits August 26, 2026 00:46
…ope-disposition witness a fixture home it owns

#9228 deleted claim_executor's plan/walk surface and named its .dag residue rather
than sweeping it. This is that cut, plus one repair the census surfaced.

WHAT WENT, AT THE ROOT:

  PlanFunction and the plan argv builders. The coproduct modelled a closed roster of
  --plan-function targets; the flag no longer parses and the entry every variant named
  (src/v2/workflow/ci_floor_plan.dag) was deleted by the 2026-08-15 floor cut. Gone with
  it: claim_executor_run_plan_transport_argv, claim_executor_run_plan_shell, the
  notice-title normalizer and shell suffix that existed only to feed them,
  claim_executor.Executor.RunPlan, ci_spec's scheduler_invoke/scheduler_invoke_with/
  floor_plan_entry/floor_plan_function/plan_artifact_plan_function, and
  gunbc_ci_floor_only_script.

  The --verify-build-artifacts half is UNTOUCHED and deliberately so: it is a live mode
  (fleet-converge.yml), so claim_executor_verify_artifacts_shell, claim_executor_bin_shell,
  release_bin_shell_path and SourceRootShellStyle all stay. cli_invoke's dissolve trigger is
  NARROWED to name only what survives rather than deleted, since the shell-vs-argv fork it
  records is still open for that one spelling.

  gunbc_ci_run_script emitted the release build AND a claim_executor --plan-entry line. The
  second half is deleted, not repointed at --required-ci: witnesses.yml already invokes that,
  and a second route to it here is the parallel authority the floor cut removed.

  The walk_plan_stage fixture family, whole: 11 fixture modules, the 379-line #[ignore]
  harness, its scaffold row and witness, and the seed_retention_frontier retained_test_harness
  row. Their sole driver was the plan.dag recipes #9228 deleted.

  v2.workflow.required_floor fixture_home_prefixes() and RequiredFloorDisposition::
  DeclinedFixtureMember, with the cli_run.rs decode, branch, counter and TSV column. That
  arm's roster was one prefix and the family above was its entire population; its own header
  said "DISSOLVES when the fixture stops authoring test fns", and this is that condition.
  Coordinated with sleek-carp-211, who is modelling the enum in #9246 and asked for both
  sides deleted here.

  The pre-push witness-corpus gate. Not on the brief, found by the flag census:
  pre_push.rs built claim_executor and invoked --plan-entry/--plan-function on the deleted
  floor plan entry. Its EMISSION died 2026-07-25 when the operator made the hook fmt-only;
  its INVOCATION died 2026-08-25 with the flags. Two witness rows asserting "a .dag push arms
  a gate" are deleted rather than weakened -- measured against the roster, the corpus binding
  was the only thing making them true, so they were green against the plan and false about the
  hook anyone runs.

THE REPAIR THE CENSUS SURFACED (tools.dag_compile_clean_scope):

  Three walk_plan_stage files were pinned as the roster and pool of the SCOPE DISPOSITION
  witness, which has nothing to do with plan/walk. Its own note records that these same
  specimens already moved once for exactly this reason -- from test/fixture/floor_skip, which
  died with affected-set selection. This would have been the third home.

  They are rehomed to src/v2/test/fixture/compile_clean_scope/, a home this witness owns:
  three modules, no test fn, no effects, one consumer. No discovery exclusion is needed
  because there is nothing to discover, which is a stronger construction than the dir-grain
  exclusion the old home required.

  AND THE PROPERTY THE NOTE CLAIMED IS NOW ASSERTED. The expectation was
  ExpectScopedContaining -- MEMBERSHIP -- so a selector returning the whole roster satisfied
  every row and the "strict-subset proof" the note describes was checked by nothing.
  ExpectScopedExactly compares the selected list to the expected list.

EVIDENCE, by execution on a release gunbc (remote, one dispatch):
  control    witness_touched_path_dispositions_hold -> true
  mutation   give scope_isolated an import edge to scope_shared -> false
  The mutation is exactly the strict-subset violation; the old assertion could not see it.

Rust: cargo check -p v1-compiler --bins clean, fmt clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Conflict: ci_layer_roots' walk_plan_stage_control_fixture_exclusion_note. Main edited
the row beside it; this branch deletes the row itself with the fixture family. Took
this branch's side -- the 2026-07-11 fixture-home ruling it carried is restated in
witness_admission_fixture_note, which survives.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…aught

dag/test/claim/dag_compile_clean_scope_witness_test.dag imports ExpectScopedContaining
and pins the disposition row count. Both moved with the rehoming and I checked only the
long-lane witness, so strict preparation refused with a name-resolution error before any
site ran. Fixed at both ends: the import drops the deleted variant (ExpectSkip went with
it -- it was imported and never used), and the pin goes 7 -> 8, which is the roster
growing by one row because the strict-subset proof needs three specimens where the old
home carried two.

The pin doing its job here is the argument for keeping it: a count that had to be updated
by hand is exactly what stopped this rehoming from silently shipping a roster of a
different size than the one the note describes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…greens without running CI

REQUEST_CHANGES from codex/gpt-5.6-sol (review 56054), and the finding is correct.

WHAT I BROKE. This branch narrowed gunbc_ci_run_script to ci_release_build_script()
alone, because its other half emitted a `claim_executor --plan-entry` line naming an
entry the floor cut deleted. But `gunbc ci` is a real CLI subcommand, so what survived
was a callable verb that builds the release binaries, verifies the artifacts, and exits
0 -- under a name that says it ran CI. That is fail-open semantic dilution: the failure
mode is not a wrong answer, it is a CORRECT answer to a much smaller question, reported
under the name of the larger one. §5's absorbing-fallback rule is about a failure arm
that widens; this is its mirror at the success arm, a green that narrowed.

WHY DELETED AND NOT REBOUND. Binding the verb to `claim_executor --required-ci` was the
reviewer's other option and I am not taking it, on the grounds this branch already
argued in the commit that caused the defect: witnesses.yml invokes --required-ci, and a
second route to it is the parallel authority the floor cut removed. The verb also has no
distinct job left -- "build the release binaries and verify the artifacts" already has a
name, ci_release_build_script, and fleet-converge.yml already calls it. So the verb is
not an authority that lost its body; it is a name with nothing left to denote.

THE CENSUS, cut at the root and followed where it led:
  dag/tools/gunbc_ci.dag                     the entry module, deleted
  main.rs Commands::Ci + its arm             the CLI verb
  gunbc.cli_dispatch_surface "ci" row        the modeled CLI surface
  gunbc_cli_dispatch_surface.rs              its generated mirror
  v2.workflow.ci_release_build_emit          gunbc_ci_run_script, the wrapper
  std.emit_on_demand gunbc_ci_emission_surface   the wet-surface row naming tools.gunbc_ci main
  emit_on_demand_kernel_witness_test         its enrollment assertion
  wall_residue_live_test residue_gunbc_ci_clean  a test fn whose subject was the deleted file

ci_release_build_script itself is UNTOUCHED and still has three consumers
(ci_materialization, fleet_workflow_steps, fleet-converge.yml). Only the wrapper goes.

EVIDENCE, build lane on this tree (remote, one dispatch):
  required-ci: lane=build phases_run=2 failed=0
  regen first_generation_equal=true    -- the mirror edit is byte-equal to the emitter's
                                          own output, established by the gate rather than
                                          by my reading of the diff
  v2-emission blocking=0, census 3792 -> 3791, the one deleted module

The emitter-gap witness still holds: gap_is_non_empty_while_the_divergence_row_stands
needs at least one AbsentFromEmitMainRs row and 17 remain after this one goes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…sposition

#9227 landed a .dag authority for the floor's admission order whose middle arm
was the fixture home this branch deletes. #9227's construction is kept whole --
ModulePrefixMatch, first_module_prefix_match, and the typed LiveTreeDisposition
input -- and only the fixture arm is cut, which is the wildcard-free wall doing
its job: three consumers failed to compile rather than inheriting an arm.

required_floor.dag: fixture_home_prefixes, DeclinedFixtureMember and the arm are
gone. #9227's header argued the ordering was load-bearing BECAUSE a fixture
member that also read the live tree had to report the permanent ownership fact
over the staged prediction. That argument dies with the arm, so it is rewritten
rather than left standing: the surviving long-home-over-live-tree precedence has
no executing discriminator, since no site can be both, and the header now says
so and says not to cite it as covered.

discovery_census.dag: the arm is removed from census_partition_step and
census_counts_add and the declined_fixture_member counter field with it.

discovery_census_witness_test.dag: w_fixture_home_dominates_live_tree is deleted
-- its subject is gone, and repointing it at a live fixture home is the borrowed
-home move this cut already refused once. The mixed population stays at five
sites, the fixture site becoming a second live-tree read, so every assertion
denominated in the population size is unchanged and only the arm it lands in
moved.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…uilt

The header already said the surviving long-home-over-live-tree precedence has
no executing discriminator and must not be cited as covered. It did not say
what would make it coverable again, which leaves a reader unable to tell
cannot-cover-yet from nobody-built-it -- the distinction DESIGN 4b(2) exists to
keep.

The trigger is a decline whose subject CAN collide with an existing one: a site
that legitimately satisfies two decline reasons at once, so which reason it
reports is a decision some input can get wrong. At that point a discriminating
witness is authorable and is owed. Until then the correct response to the
absence is to build that collision case, not to re-point a witness at a subject
that cannot disagree with itself -- which would be permanently green by
construction, and cited as coverage.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

Closing as superseded: this work is already on main by content, landed as #9252.

MEASUREMENT (not inference). Adopted session/crisp-swift-16 at 79ae4a1 onto session/smart-lynx-458, merged current main (80e7e3d), resolved the two conflicts, then diffed the resolved tree against main:

git diff --cached origin/main --stat   ->   empty

The merged branch is byte-identical to main. There is nothing left for this PR to land.

WHY THE BRANCH STILL LOOKS LIKE 42 CHANGED FILES: git diff origin/main...HEAD is three-dot, so it reports everything since the merge base and attributes main's own newer commits to the branch. The two-dot reading against the main the branch had already merged shows the real contribution. Each of the four non-merge commits was checked individually against main:

  • 27512a50fbe (plan/walk .dag residue + scope-disposition witness fixture home) - squash-merged as Delete the .dag residue of the deleted plan/walk CLI surface (PlanFunction, cli_invoke builders, walk_plan_stage fixture family) #9252 (489346fff7c, 2026-08-26). dag/tools/gunbc_ci.dag, src/v1/stage0/tests/walk_plan_stage_fixture.rs and dag/test/claim/walk_plan_stage_fixture_hand_rust_witness_test.dag are all ABSENT from main; PlanFunction and walk_plan_stage have zero occurrences there.
  • b29781b7a19 (delete the gunbc ci verb) - verb: "ci" occurs 0 times in main's dag/gunbc/cli_dispatch_surface.dag.
  • d6bc492a7c9 (scope-disposition witness per-PR repair) - carried in the same squash.
  • e39652e749b (name the admission order's next-rung trigger) - git diff origin/main HEAD -- src/v2/workflow/required_floor.dag is empty.

dag/gunbc/cli_invoke.dag surviving on main is deliberate, not residue: the --verify-build-artifacts half is live (fleet-converge.yml), which #9252's own body states.

CONFLICT RESOLUTIONS, RECORDED SO THEY ARE NOT RE-DERIVED. src/v1/stage0/src/main.rs: both hunks are pure additions from main (#9336's Test variant and its dispatch arm) with an empty ours side, so the union is main's side. src/v1/stage0/src/gunbc_cli_dispatch_surface.rs: genuinely generated, and NOT produced by generated_artifact_gate main_wet - that entry exits 0 and leaves this mirror untouched. It comes from the v1 emitter, claim_executor --required-regen, which I ran from a freshly built binary (required-regen: first_generation_equal=true planned=136 executed=136 declared_divergent=1 [main.rs] - the one divergence being the hand-maintained main.rs, declared in v2.compiler.self_host.stage0_crate_layout). That regeneration confirmed the merged authority and its mirror agree; it produced no content this PR needs to land, since the resolved tree equals main.

Both halves of that dead end are @merry-bear-547's measurement, independently reproduced here.

@gunbai-bot

gunbai-bot Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by #9252; the merged branch is byte-identical to main.

@gunbai-bot gunbai-bot Bot closed this Aug 27, 2026
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.

0 participants