Skip to content

CI rework - #8633

Closed
briansrls wants to merge 2 commits into
mainfrom
v1-parse-gate
Closed

briansrls wants to merge 2 commits into
mainfrom
v1-parse-gate

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Auto-opened by session-dashboard for session tidy-lark-471.
Pushing to v1-parse-gate 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.

Brian Searls and others added 2 commits August 19, 2026 06:28
… --bin flag

`test.claim.v1_dag_parse_witness.v1_dag_parse_witnesses` is an ordinary discovered
witness that runs `v1_src_dag_parse` through `tools.v1_dag_parse_transport`. The fold
has been executing it since the FLOOR-Y cutover. It failed for one reason: the binary
it invokes was never named in `witness_floor_required_bins`, so
`witness_bin_program_readiness` refused and the witness returned false. It then went
onto `floor_expected_red` in #8283's bulk enrolment, which recorded the consequence and
lost the cause. Built, the witness returns true (verified by execution).

Three changes, no new gate:

  * `v1_src_dag_parse` joins `witness_floor_required_bins`. The emitted workflow gains
    exactly one `--bin` flag.
  * the roster row is deleted, so the witness's verdict is asserted again. Left in
    place it would now red the build as enrolled-but-passing, which is the roster
    working.
  * the binary's directory walk becomes RECURSIVE. `read_dir(src/v1)` saw the 46
    top-level modules and nothing below, so three authored files sat outside the only
    instrument that can see a v1 parse error -- gunbc/occurrence_binding_parser_walk.dag,
    gunbc/namespace_reference_derived_closure_production_observations.dag, and
    tests/claim/checkpoint_identity_keying_witness_test.dag, the last holding every
    `test fn` src/v1 declares. A walk that finds no files in a directory it never
    opened is indistinguishable from a clean one.

`tests/fixtures/` is excluded: those files are deliberately malformed inputs authored
FOR the parser's own tests, and the recursive walk found one immediately
(fact_cardinality_split_brace.dag). That is the fixture working. The existing corpus
discovery in `compiler_tests` excludes them on the same grounds. 49 files parse clean.

WHAT THIS DOES NOT CLAIM. Parse only -- no resolution, no types, no statement that
those modules mean anything. `--source-root src/v1` on the fold itself remains refused
and the measurement stands (CI run 32219326621): one flat namespace over both trees
yields 12 last-segment collisions, because the v1 and v2 compilers name their stages
identically. Parsing sidesteps that because each file parses independently against an
empty environment, so no cross-module pool exists to collide in. The binary keeps its
registered Scaffold status; its dissolve-on is the modeled pipeline parsing src/v1, and
building the scaffold does not satisfy that.

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

Run 32223611085 gave the mechanism, and it is not the one the previous commit
asserted:

  FAIL test.claim.v1_dag_parse_witness.v1_dag_parse_witnesses errored:
    type error: hermetic mode: no mock_response for operation IsExecutable
    -- refusing to fabricate Unit

`run_required_floor` runs HERMETICALLY. The witness reaches `shell.Test.IsExecutable`
through `tools.host_prelude`, and the hermetic envelope refuses host effects by
construction -- before the binary is reached, which is why the row failed in 1ms rather
than after any work. So the missing `--bin` was never the cause, and neither was a
budget refusal (a budget refusal must burn the budget first; 1ms excludes it on timing
alone).

THREE CONCLUSIONS OF THE PREVIOUS COMMIT DIE WITH IT. `--bin` alone fixes nothing;
deleting the roster row was wrong, because the row is legitimately red; and
"src/v1 parsing was already gated" is FALSE. The witness is DISCOVERED by the fold on
every run and CANNOT EXECUTE in it. I mistook discovery for execution.

The refusal is correct and must not be repaired. The witness's subject is a subprocess
exit status, which no in-process assertion can observe, and a mocked `IsExecutable`
would let it pass against a fabricated status -- the fabricated-plausible-output arm on
the exact assertion the witness exists to make. The `floor_expected_red` row is
restored.

WHAT LANDS INSTEAD is the workflow step this branch wrote first and then deleted as a
§3 second-authority violation, on that false premise. It is not a second authority: the
witness cannot execute, so there is no verdict to duplicate, and outside the fold is the
only place a host effect can happen. `--bin v1_src_dag_parse` stays because the step
runs it.

AND ONE CORRECTION BEYOND THIS GATE. `gunbc.ci_layer_roots` `excl_bin_wet_reason` did
not merely fail to warn -- its second clause asserted, present tense, that this class
"run[s] every PR as the declared bin-witness wet batch via bin_witness_wet_entries". That
has been false since 2026-08-15: the wet batch died with the floor cut, main carries
exactly two workflows, `witnesses.yml` is the hermetic fold that refuses this class by
construction, and `fleet-converge.yml` is workflow_dispatch-only with no bin-witness
batch. Measured: 94 `bin_wet` rows across 38 entry files name an executing consumer that
does not execute. A reader consulting that row to ask "is this class covered" was told
yes. The row now states the measurement; restoring the other 93 is not its call.

Found by silent-bear-842, whose original "src/v1 .dag has no per-PR gate" this branch
overturned and which stands.

The recursive-walk fix is unaffected and independently correct.

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

gunbai-bot Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Closing as fully superseded, rather than resolving the conflict. The conflict is real but the branch has no forward content, and I checked that rather than assuming it.

Its deliverable is already on main. The v1 .dag parse gate — the bin, the workflow step, and the emitter row — all landed by another route. src/v1/stage0/src/bin/v1_src_dag_parse.rs on this branch is byte-identical to main's copy, so there is nothing to merge there.

Its one quotable finding is also already on main. The excl_bin_wet_reason correction (the present-tense sentence claiming the bin-witness class was covered when nothing had run that batch since 2026-08-15) is present on main verbatim.

What it would still change, it should not. Against main the branch is behind, not ahead:

file main → branch
witness_floor_workflow.dag −274 lines (would delete #8618's regen steps)
witnesses.yml −13 lines (same)
ci_layer_roots.dag +94 lines — exclusion rows main deliberately deleted in #8506, "Delete three witness-exclusion rows whose files no longer exist"

So merging it would revert the regen work and resurrect exclusion rows for files that are gone.

And its subject is being removed anyway. The operator has directed that the CI step ladder be consolidated: "i would much prefer if it was all handled within the witnesses step and within the gunbc binary, not at a github actions job level." This branch's product is a separate GHA parse step, which is exactly what the consolidation deletes — the parse sweep becomes an in-process phase. Fixing a branch to preserve a step scheduled for deletion is work on a representation the cut removes.

The consolidation is on session/tidy-lark-471-ci-consolidate. The commit message on 3ca2fe8 — that the fold is hermetic, so a witness whose subject is a subprocess exit status cannot execute inside it, and that mocking IsExecutable would fabricate the exact status the witness exists to assert — is the durable finding here, and it survives in git history and in the restored floor_expected_red row on main.

— sent from tidy-lark-471

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