Skip to content

import/namespace manager - #9455

Closed
briansrls wants to merge 4 commits into
mainfrom
fix/9451-emit-produced-bound
Closed

briansrls wants to merge 4 commits into
mainfrom
fix/9451-emit-produced-bound

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Auto-opened by session-dashboard for session snappy-dove-250.
Pushing to fix/9451-emit-produced-bound 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 4 commits August 27, 2026 08:17
…a census whose count cannot travel without its exit status (#adhoc-678a5d07)

DESIGN carries the emit-stage blocking-diagnostic class as outside the ladder
with its population UNCOUNTED AND UNBOUNDED, which is the weakest state any row
in that document occupies. This takes the census that word was missing.

Measured at d198ff6 on a local aarch64 build, whole-root --target rust, exit
status and peak residency captured in the same record as the count via
wait4/getrusage(RUSAGE_CHILDREN):

  dag/ primary   exit 1, refused at emit, 11.41 GiB, 1154 s, 3006 sources
  src/v2 primary exit 1, refused at emit, 8.56 GiB, 257 s, 1937 sources

THREE IS NOT THE POPULATION, AND THAT IS THE RESULT. emit_rust returns with no
files at its first gate, so the three parameter-default refusals were masking
eight anonymous-record ones standing on the pristine tree the whole time.
Clearing each gate in the working tree - uncommitted, reverted, never proposed
as a repair - is a measurement of what the next gate would report, not of main.

THE UPPER BOUND IS UNREACHABLE BY THIS ROUTE. With both gates clear emit reaches
code generation and does not return: stopped at a declared five-hour budget,
still computing, no tree written, so no exit status and no population. The
carrier has an arm for that rather than letting a halted run borrow a code it
never produced.

The count is unrepresentable without its provenance by construction: every
population-bearing arm carries a CensusRun holding the termination and the peak,
the extent is DERIVED from which gate fired rather than stored beside it, and a
killed or unterminated run derives NoBound however plausible its output looked.
A whole-refusal count is also not the class's count - on src/v2 twenty
diagnostics stand at the emit refusal and none of them was produced by emit -
so origin is carried per site and the emit-produced subset is derived.

No repairs. The DESIGN row keeps its rung and its restoration trigger; only the
word UNCOUNTED moves.

Witnesses pass under claim_batch --hermetic, with a discriminating RED confirmed
on the pristine-bound arm; both modules compile 0-blocking as an entry closure.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… instrument, and the invocation was prose

Blocking finding, and the carrier was right where the document was wrong: the
added DESIGN sentence read "the instrument is
gunbc.emit_stage_blocking_population_census", while that module says twice that
it is a receipt and not an instrument, and points at
tools.emission_entry_instrument where a real one exists. The 2026-08-24 ruling
turns on that word - a measurement is cited by naming the producer that
re-derives it - and no .dag entry point produces this measurement at all: the
compiler's CLI was driven by hand. DESIGN now says so rather than implying a
route that does not exist.

And the invocation stops being prose. census_run_invocation derives each run's
argv from that run's own fields, so the command is reachable from the fact it
produced instead of living in a // annotation no Accepted program can read - the
same reason a citation names a symbol rather than a position. It is deliberately
not an extdeps.exec.command ArgvCommand: that mint gates who may construct a
RUNNABLE command, and a receipt that executes nothing has no business holding
one.

Also lands the recurring failure mode smart-ram-730 asked for, because it
generalises past this PR: BOUND-SHAPED CLOSURE, where a requirement is
discharged by a number that is real and the row it satisfies stops ranking for
work. It is not a special case of prefix-of-the-truth - that is about what a
producer reports, this is about what a consumer concludes from a satisfied
clause - and its tell is that the satisfying figure came from a mechanism that
stops.

Witnesses still 8/8 under claim_batch --hermetic; the entry closure still
compiles 0-blocking.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…it population's name

census_population_bound computed every arm with count(bs), the WHOLE refusal
population, while the module defines emit_produced_sites twelve lines earlier
under a comment stating the distinction exactly -- "a reader asking how big is
the emit-stage blocking population is asking about ProducedByEmit members, and
the whole-refusal count answers a wider question".

So the module declared the correct projection and then published the other one.
That is DESIGN section 3 in its least visible form: not two authorities for one
fact, but the module's own authority bypassed by its own public surface.

MEASURED PER CENSUS ROW, which is why the change is one figure and not four:

  pristine_census      3 ProducedByEmit,  0 upstream  -> 3, unchanged
  layer_two_census     8 ProducedByEmit,  0 upstream  -> 8, unchanged
  src_v2_root_census   0 ProducedByEmit, 20 upstream  -> 20 becomes 0

Only the src/v2-root row was misreporting, and it was misreporting completely:
every one of its 20 members was produced by an earlier stage and merely surfaced
at emit, so the emit-stage population it published a bound for was empty.

THE WITNESS ALREADY CARRIED THE CORRECT READING IN PROSE and asserted against it:

  "Zero emit-produced members there is an OBSERVATION OF ZERO, not a clean pass,
   so the reading stays incomplete and bounds only from below."

three lines above n == 20. The comment was the design and the assertion was the
slip; the assertion now reads n == 0 and the comment becomes accurate rather than
contradicted.

LowerBoundOnly { count: 0 } is not the weaker claim. It is the true one, and it is
what that comment describes: zero emit-produced diagnostics observed, a gate
masking whatever lies beyond, therefore at least zero and the reading incomplete.
20 was not a stronger bound -- it was a bound on a disjoint population presented
under this one's name, which is the fabricated-plausible-output failure the
carrier exists to prevent.

VERIFICATION LIMIT, DECLARED RATHER THAN ELIDED: this change is NOT execution-
verified. The gunbc on PATH is a shim over a binary baked 2026-06-26 and it cannot
resolve the current corpus -- it reports unresolved 'Nat', 'NonEmptyStr' and
'DeclarationRef' across dag/extdeps. A control run on the UNMODIFIED tree emits
the identical diagnostics, so the failure is the binary's age and not this edit,
but that control establishes only that I did not break it -- not that it is green.
Building a current compiler in-session risks an OOM kill in a shared slice, so
this rides on CI.

Taken over from session/silent-tern-401, which no longer exists; its PR #9451 was
sitting on an open REQUEST_CHANGES with no owner.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013crMNyLvjKC2Q5UF851PKy
The conflict was an ADD/ADD on the census module and its witness, which is the
tell that this PR's content had already reached main by squash merge. Confirmed:
`git diff origin/main origin/session/silent-tern-401` over those two files is
exactly the review-56636 fix and nothing else. So the branch's only content not
already on main is that fix, and this merge collapses the PR to it.

THE DEFECT IS THEREFORE LIVE ON MAIN RIGHT NOW, which the add/add hid: main
carries count(bs) at all four gate arms and a witness asserting n == 20, over an
src_v2_root_census whose emit-produced count is 0 and whose 20 members are all
ProducedUpstreamSurfacedAtEmitRefusal. This is not a stale branch reapplying a
landed change -- it is the only carrier of the repair.

RESOLUTIONS, each read rather than defaulted:

  census module + witness -- took HEAD. Both hunks are exactly this branch's fix
  against main's original; nothing else differed.

  DESIGN.md -- took MAIN, which is a strict superset. The file is under
  merge=generated-artifact, whose driver deliberately refuses rather than
  answering: it leaves the OURS side in the worktree with no conflict markers and
  marks the path unmerged, so the state looks resolved and is not. Taking that
  default would have silently dropped main's bytes, which is the exact failure
  that driver exists to prevent and which cost #7836 twice.

  A three-way merge over the extracted stages settles it: ours and main made
  BYTE-IDENTICAL edits at lines 140 and 151 (this PR's DESIGN row had already
  squash-landed), and main additionally updated line 147, which ours lacks. So
  main's version contains everything ours does plus one row. merge-file returns
  clean and its output is identical to main's side.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013crMNyLvjKC2Q5UF851PKy
@gunbai-bot

gunbai-bot Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Closing as a duplicate. This PR was auto-opened from my local working branch fix/9451-emit-produced-bound, which points at the identical commit (6f3d7d8048) already under review as #9451 — same two files, same change.

The fix belongs on #9451 because that PR carries the review thread the change answers (review 56636's REQUEST_CHANGES) and the merge-conflict resolution history. Two PRs for one fix is a duplicate authority, not redundancy worth keeping.

No action needed here; track it at #9451.

— sent from snappy-dove-250

@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.

1 participant