Repository navigation
extdeps.container.oci.manifest uses three media_types symbols it never imported - #9485
Merged
briansrls merged 3 commits intoAug 27, 2026
Merged
Conversation
…r imported `accept_image_manifest` reads `oci_image_schema_version`, `media_type_oci_image_manifest_v1` and `media_type_oci_image_config_v1`, all declared in `extdeps.container.oci.media_types`, with no import of that module — five BLOCKING name-resolution diagnostics standing on main. Adds the one import. This is a live specimen of the DESIGN row declaring the blocking-diagnostic population uncounted and unbounded: no required phase emits over a closure reaching this module, so nothing refused. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TrqmnrTJvHxHxJuJFBED8k
…below is the delta it was refusing
gunbai-bot
Bot
changed the base branch from
main
to
session/merry-lynx-302-wave-classifier
August 27, 2026 18:06
Contributor
|
Rebased onto #9495 per the ruling relayed from swift-badger-524, so this PR stays the one-line import repair and the classifier change gets its own reviewer. Why it was blocked and what changed:
One consequence to flag rather than leave to be found: — sent from merry-lynx-302 |
briansrls
added a commit
that referenced
this pull request
Aug 27, 2026
…ut of NewPoolCoincidenceResolution (#9495) * `0 -> 1` was two states: split AuthoredReferenceResolution out of NewPoolCoincidenceResolution The wave-admission wall (#9365) classified every binding whose candidate set went from empty to one member as `NewPoolCoincidenceResolution`, refusing unless an operator admission names it. `binding_disposition` compares candidate SETS only, and its own header says that arm means "a name that began denoting something WITHOUT ANYONE AUTHORING A REFERENCE — resolution arriving from a pool". That is one of two states sharing the symbol, and they have opposite owners and opposite repairs: - the TARGET grew a name this module was already reaching for — the coincidence the containment rule exists to remove, cause in another module; - this module's own author wrote the import that resolves a name it was already spelling — the exact repair the wall was built to want. The wall was refusing the second while naming it the first. Found by gunbc#9485, a one-line import repair (5 blocking diagnostics -> 0) that the wall would not let merge, and it could not be admitted either: `NAMESPACE_TRANSITION_ADMISSIONS` is a `const &[TransitionAdmission]` over a `DeltaSubject` carrying `String` fields, so a row naming an actual module is E0015 — that half is escalated separately and is not repaired here. The discriminator is the module's own source, and it was already in hand: the membership arm one function over consults `membership_supported`, which admitted the membership edge of the very change whose bindings were refused. `locally_authored_claim_added` answers it from the two `ModuleDeclarationRecord`s alone — deliberately index-free, because consulting either index reintroduces the conflation (a blanket import whose target grew the leaf would read as authorship). False is the fail-closed answer: it leaves the delta on the refusing arm. The new disposition auto-admits, amending the 2026-08-26 operator partition on `gunbc.compiler_frontend_program_interlock` per the 2026-08-27 ruling relayed through swift-badger-524. The `.dag` coproduct is the authority and the host enum is one realization; the vocabulary-join tests (host <-> ruling, both directions) gate the pair and pass. EXECUTED EVIDENCE. The test file asserted `NewPoolCoincidenceResolution` over a head that authored `import probe.home { widget }` — it planted the repair and named it the coincidence, which is why the conflation survived review. That fixture is re-derived as the authored arm, and a real coincidence is authored for the other: consumer source byte-identical across sides, reaching the target through a blanket import, target grows the name. Both arms mutation-checked: forcing `locally_authored_claim_added` true reds the coincidence arm alone, forcing it false reds the authored arm alone. 20/20 green restored. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TrqmnrTJvHxHxJuJFBED8k * Scope the blanket-import arm to the leaf: an unrelated new blanket import was laundering a pool coincidence Review 56882 on this PR, before it merged. `locally_authored_claim_added`'s member-list and self-declaration arms name the leaf in the source and were scoped to it; the blanket-import arm names no leaf at all, and the first revision admitted authorship whenever ANY blanket target was new. So an unrelated new blanket import elsewhere in the same module auto-admitted a genuine pool coincidence beside it — a fail-open widening, in the one direction this function must never move, and directly opposite the docstring's own "false is the fail-closed answer". THE ARM IS NOW A CONJUNCTION AND THE ORDER OF ITS HALVES IS THE POINT: the claim must be NEW IN THIS MODULE'S SOURCE **and** the head target must actually supply the leaf. Asking the second alone is exactly the conflation this function exists to discriminate — an unchanged blanket import whose target grew the leaf would read as authorship. Gating it behind the first makes the index consultation safe rather than forbidden: a claim the author did not write cannot reach the surface check, whatever the target did. So the docstring's index-free claim is corrected rather than restated; it was true of the leaf-named arms and never of this one. A target absent from the index answers false. EXECUTED EVIDENCE, both directions of the scoping: - an_unrelated_new_blanket_import_does_not_launder_a_pool_coincidence — the reviewer's scenario. `probe.home` grows `widget` with its blanket import UNCHANGED; the author adds a blanket `probe.other`, which does not supply `widget`. Must stay NewPoolCoincidenceResolution and must stay refused. Restoring the leaf-blind arm reds this test ALONE. - a_new_blanket_import_that_does_supply_the_leaf_is_an_authored_reference_resolution — so the scoping is not a narrowing to nothing: when the NEW blanket target is the one supplying the leaf, it auto-admits like any other authored reference. 22/22 green, fmt clean. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TrqmnrTJvHxHxJuJFBED8k * extdeps.container.oci.manifest uses three media_types symbols it never imported (#9485) `accept_image_manifest` reads `oci_image_schema_version`, `media_type_oci_image_manifest_v1` and `media_type_oci_image_config_v1`, all declared in `extdeps.container.oci.media_types`, with no import of that module — five BLOCKING name-resolution diagnostics standing on main. Adds the one import. This is a live specimen of the DESIGN row declaring the blocking-diagnostic population uncounted and unbounded: no required phase emits over a closure reaching this module, so nothing refused. Claude-Session: https://claude.ai/code/session_01TrqmnrTJvHxHxJuJFBED8k Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
extdeps.container.oci.manifestreads three declarations that live inextdeps.container.oci.media_types—oci_image_schema_version,media_type_oci_image_manifest_v1,media_type_oci_image_config_v1— and neverimported that module. One import line added; nothing else changed.
Executed evidence (the discriminating pair)
Same locally-built
gunbc(target/release/gunbc, this branch), same argv as therequired emit-compile phase uses (
tools.emission_entry_instrumentmeasure_entry_emission):5 blocking error(s), 138 advisory—
undefined variable 'oci_image_schema_version'×2 (36:25, 38:68),'media_type_oci_image_manifest_v1'×2 (40:28, 42:60),'media_type_oci_image_config_v1'×1 (49:29).0 blocking error(s), 143 advisory—24 files emitted.The control flips, so the green is load-bearing rather than a harness artifact.
The advisory count moves 138→143 because the five sites now resolve and get
judged; no advisory is silenced.
Why nothing refused
This is a live specimen of the DESIGN row "A BLOCKING EMIT-STAGE DIAGNOSTIC CAN
SIT ON MAIN INDEFINITELY WITH NO REQUIRED PHASE THAT FAILS" — escape mode one:
no required phase emits over a closure that reaches this module.
gunbc.ci_layer_rootsrequired_emit_compile_entriesdoes not roster it, andgunbc runcannot see it either — the whole-tree run context is one flatnamespace, so the three bare names resolve there whether or not the import
exists. Measured:
gunbc run --entry dag/extdeps/container/oci/manifest.dagreaches evaluation unchanged with and without the import.
This PR repairs the specimen. It does not close the class — that row retires
on the phase, not on any specimen, and this change adds no roster entry and no
ratchet.