Skip to content

6848 cleanup - #6932

Closed
gunbai-bot[bot] wants to merge 273 commits into
mainfrom
namespace-wave1-reland
Closed

gunbai-bot[bot] wants to merge 273 commits into
mainfrom
namespace-wave1-reland

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Auto-opened by session-dashboard for session nimble-owl-658.
Pushing to namespace-wave1-reland 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.

briansrls and others added 30 commits July 18, 2026 14:19
…ent-alias grounding (180 -> 154)

TypeMismatch family root: nominal_call_arg_brand_mismatch compared authored
name STRINGS, which broke two ways post-strip. (1) A qualified spelling on one
side (extdeps.github.pulls.PullRequest formal vs PullRequest actual — the same
decl) read as a brand conflict: names now compare by qualified_last_segment,
which exactly restores pre-strip precision (bare-vs-bare). (2) Transparent
primitive aliases (Timestamp = String) are brand-ERASING by design
(is_transparent_primitive_alias_rhs), but census-path resolution grounds one
side to the kernel type while the other keeps its authored spelling; a new
brand_grounds_transparently_to exception treats a brand as equal to the kernel
type its alias grounds to (both directions). kernel_value_declared_type_mismatch
gets the same last-segment normalization. GUNBC_ARG_PROBE/GUNBC_PEEL_PROBE
env-gated probes added (inert; removed before the re-land gate).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
# Conflicts:
#	dag/gunbc/srv3_install_media_fetch.dag
#	dag/std/effects.dag
#	dag/test/claim/effects_witness_test.dag
#	src/v2/std/effects.dag
#	src/v2/test/claim/create_if_absent_double_init_witness_test.dag
…iner dispatch

Burndown 154 -> 149 (whole-tree compile-clean, honest corpus), net of the
qualify-on-borrow landing (181 peak at the raw seed mirror):

- type_name_compatible (00_core): both-dotted -> exact path equality; mixed
  bare/dotted -> last-segment (pre-migration precision, end-state precision
  when both sides qualify). Wired into node_type_compatible fallback,
  node_type_equals_core (all name arms), prefer_specific_type (join keeps
  the structured side over a name-compatible bare leaf).
- module_path_segments + qualified_last_segment moved 04_env -> 00_core
  (single authority; 04_env re-exports for existing importers).
- Container dispatch is qualification-invariant: canonical_template_name,
  is_declared_container_alias_spelling, node_is_set_collection normalize via
  qualified_last_segment before the container_template_algebra table
  (std.types.Map IS Map; -4 InternalError).
- medium_fidelity_witness_test: qualify the 4 Medium<...> return annotations
  (bare Medium is census-ambiguous from test.claim.* -> correct tie-refusal;
  the D2 pass had qualified ctor heads but not annotations).
- Probes GUNBC_VNF_PROBE / GUNBC_SIG_PROBE added (env-gated, removed before
  the reland gate).

Known residue (measured, tracked): std.computation kernel_algebra_profile
|> get pair (2, method-path, next lane); std.fermi |> first pair is
pre-existing (visible pre-154); reference_deps generic-param leak family
morphs (T-field rows).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Root cause was the inverse of the working theory: the 8 missing names
(nbd_proxy_serve_script, nbd_proxy_serve_program_statement_count,
nbd_proxy_serve_program_foreground_command_is_websocat,
nbd_proxy_serve_bash_emit_dissolution_trigger, install_media_fetch_script,
os_install_actuator_toolchain_ensure_script{,_uses_github_release_not_apt_for_websocat},
os_install_actuator_toolchain_ensure_is_privileged_gated_for_apt) were
deliberately deleted on main by the Shell->dag migration (#6587 8f57815,
#6596 c8169ef, #6629 9ffeb27, all ancestors of merge-base c2859a6),
with their consuming tests updated in the same PRs. The strip re-apply
(ab44ec2) clobbered 6 consuming files back to pre-migration content,
leaving dangling references. Re-adding the old decls would resurrect the
terminally-deleted bash sidecar (e06ea6a, operator ruling 2026-07-18).

Fix: restore the 6 consuming files to their merge-base c2859a6 content
(identical to merged-main tip 14c8d29), minus import blocks, plus the
8 qualification lines D1/D2 precedent requires (std.disposition.Terminal,
3x std.resources.Network, 3x gunbc.srv3_nbd_proxy_serve_intent.*,
extdeps.bmc.webui.nbd_proxy_serve.srv3_nbd_proxy_local_port).

Histogram: TOTAL_HARD 149 -> 136 (-13 = exactly the family sites);
all 8 family NAME rows gone; zero new SITE rows (site-level diff clean;
8 new NAME-table entries are top-50 truncation backfill, present as
baseline sites in untouched files).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ure unification

149 -> 123 whole-tree; witness roster 299 -> ~10 fatal. Two independent roots,
one class: the strip re-apply (ab44ec2) resurrected pre-migration file
content that main had since consolidated — a silent census poison (§3 forks
by resurrection).

- src/v2/std/algebra.dag: take main's (#6715 dissolved the v2 algebra tower
  onto std.algebra; the branch carried the old stacked fork, so flat literals
  in diagnostic/nat/logic refused, and after the first restore the stale
  stacked CONSUMERS integer.dag/seed_debt flipped red — both now main's).
- src/v2/lens/{effect,idempotency,ownership,parallelism}.dag: take main's
  (lens-commons consolidation into algebraic_composition.dag; the branch had
  hand-cemented stub forks like `type EffectClassification {}`).
- Cherry-pick a6e9f4f9cd: nbd/actuate/toolchain family — the 6 consuming
  files restored to merge-base-minus-imports (the decls were deliberately
  deleted on main by the Shell->dag migration; full provenance in that
  commit body). -13, exactly the family.
- cli_run: extend_with_reference_closure extracted — the ONE reference-
  closure authority now serves BOTH the whole-tree walk and the per-entry
  claim/witness loader (was a §3 fork: the roster path missed reference-only
  deps entirely).
- find_witness_project_to_core_controls + derivable_coercion_task_id:
  qualify one dotted reference per foreign module (Rule-1: references ARE
  the dep edges; a bare-only file has no closure) + Named->v2.std.node.Named
  (non-unique variant). Witness file 298 errors -> 5 (owned families).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…option (123 -> 89)

From the residue-classification agent's bucket list (all census-verified):
- Bucket (a) source qualifications: merge_admission Success/Failure ->
  extdeps.github.checks.* (the borrowing-module alias path), review/review_codex
  state Open -> extdeps.github.pulls.Open, upsert Absent (builtin-Witness
  collision), srv3_install_media Present{observed_sha256} (bare Present hit
  builtin Witness.Present), roadmap authored() -> gunbc.roadmap_authority
  (nearest-ancestor picked the test sibling by design; source must qualify),
  01_tokenize Empty/None/Accepted/Rejected -> std.algebra./v2.std.diagnostic.*,
  coverage + grammar_coverage Empty.
- Bucket (b) stale strip-era copies -> origin/main content minus imports:
  fleet_converge_cli (ProvisionBuildCache arm), falsifier_workflow test
  (cadence rename + semantics), host_build_cache_provision test (rewritten on
  main), behavioral.dag (DeterminismAxis -> std.determinism.Determinism, the
  open-thread-E rename the stale hunk had reverted).
- Deliberately NOT qualified (reverted after measurement): 02_parse
  OccurrenceIdAllocator/SpanIndex and grammar_coverage DeclFact/
  whole_corpus_scope/normalize — those reference edges pull the v2-internals
  subtree (occurrence_id/provenance/normalize -> compilers/sugar + standing_intent
  closures) into the corpus: +75 latent debts and census uniqueness flips
  (Accepted/Rejected aliases). That subtree opens as its own measured batch
  with the witness-roster lane (Increment B), not as a side effect.
- env_with_type_variable_bindings extracted to 04_env (consolidates
  resolve_item_types' inline type-param fold; no behavior change). The
  borrowed-sig resolve-at-borrow experiment was REVERTED after measurement:
  per-lookup resolve_node blows up wall-clock (>10min vs 103s) because the
  borrower's env lacks the owner's recursive-type facts (FreeMonoid expands to
  the depth bound per call). Needs the once-per-module hoist; benched.

Ordering/Equal/Less/Greater rows cleared for free with the algebra-fork
dissolution (previous commit), as the classifier predicted.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ier-invariant (89 -> 82)

Root (get-pair agent, proven by probe chain): the kernel algebra machinery is
keyed on raw canonical spellings ("Map"/"List") at MULTIPLE reads — the
profile lookup (enrich_kernel_type, lookup_structural_method), the
container_param_name table behind make_container_type/make_map_type, the
template-match compare (apply_type_substitution ContainerOf), and
is_container_type/container_expected_arity via receiver_name_str. A receiver
spelled by qualify-on-borrow (std.types.Map) or alias-expanded to its carrier
(FreeMonoid, std.algebra.FreeMonoid) sails past the invariant classifiers and
misses these reads; the method-pipe fallback then absorbs the miss by
returning the receiver type, surfacing two hops later as VariantNotFound
Present/Absent (std.computation kernel_algebra_profile |> get; std.fermi
|> first — the latter pre-existing with bare FreeMonoid).

Fix: container_kind_canonical(name) = last-segment, then carrier->canonical
inversion DERIVED from container_template_alias_rows (sorted fold, no minted
table) — applied at the profile lookup (kernel_profile_lookup) and every
authored-name entry into the kind-keyed tables. The interim
missing-kernel-container-profile guard rows this exposed (+66 at the halfway
point) confirmed the reads were reachable and are now all green.

Benched follow-up (own increment, own receipt): the method-pipe fallback's
final else still answers a dispatch miss with the receiver type — an
absorbing fallback to convert to a typed refusal; every currently-absorbed
miss becomes a counted diagnostic.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e per decl at owner position (82 -> 71)

The census stored raw pre-typecheck fn nodes, so borrowed generic fns leaked
bare type-param leaves (T/V/E) into consumers. Pass 2 (census_with_resolved_fn_sigs)
resolves each borrowable generic sig's return ONCE at census build in a synthetic
owner-position env (module_path = declaring module, symbol_index = completed pass-1
census, type params bound as TypeVariables via env_with_type_variable_bindings) —
order-independent, once per decl (the per-lookup variant re-resolved recursive
carriers to the depth bound per call, >10min), fail-closed staged: any resolution
diagnostic keeps the raw binding (upgraded | raw is a typed frontier, not a widen).
Wall-clock unchanged (~97s). Cleared: payload-on-V x8, refusals-on-T x2, facts-on-T x1.
Remaining: service-op output family (~30, next increment widens pass 2 to services),
T-family residue kept raw by the diagnostic gate (~19, diagnosing).
briansrls and others added 28 commits July 20, 2026 04:10
…-promotion, reexport control dissolution)

coproduct wire x2: the missing-field presence wall now stops malformed
InternallyTaggedObject literals at TYPECHECK (census-ambiguity absorbing skip closed);
tests assert the typed refusal instead of the decode-time compile_error backstop,
which remains for shapes the literal wall cannot see (bare naming-policy variants).
variant_reexport red control: perturbation dissolved twice over - empty
variant_surfaces+symbol_index resolve via the ancestry global_bare merge, and
dropping the declaring module binds imported names declared-weak (L1 typed-debt
deferral) - converted to purity witnesses + a documented RED-control debt pending
the strict missing-name wall. tier2 census reachability pin (2 AmbiguousBare sites
on extdeps_external_authority_anchor) parked on the non-required rust_tests lane
for post-merge triage.
…fect-import class)

A builtin that dispatches through a service (filesystem_read -> Filesystem.Read)
needs the provider module loaded for its service registration, but contributes no
name any census can resolve - the builtin identifier is the interpreters, not a
modules. Under imports that edge was the name-less import
extdeps.filesystem.filesystem_io; the strip removed it and NOTHING can re-derive it
from names. This is the one genuine hole in the name-derived closure story, and it
is now a declared table (BUILTIN_REQUIRED_SERVICE_KEYS) resolved through the same
services census a dotted service head uses. Rows mirror the interpreters hard
service REQUIREMENT gates only; the optional ones (Clock.UnixSecs, shell.Env.Get)
fall back to a transport and create no closure obligation. A missing row never
fabricates - the builtins own gate still refuses, typed and located, which is
exactly how this row was found (CI 29722434993 batch 3, via interp_recorded_fixture
nested replay). Verified: closure 1 module -> 7, witness_read_via_builtin_roundtrip
PASS.
…ion is PRE-EXISTING, not a regression

An audit flagged the nullary-variant parent stamp for mis-emitting a standalone
struct literal whose name collides with a nullary variant arm of some coproduct
(fn make() -> Standalone emitting Coll::Standalone { a, b }). Reproduced it, then
tested the attribution: with the stamp redirect forced OFF (main-equivalent), the
emission is BYTE-IDENTICAL. The defect lives on the parent_enum/emit path
(lookup_variant_parent_enum feeding ExprRecordLit.parent_enum), which this branch
does not touch - it is pre-existing on main and belongs in its own typed row, not
here. The guard I had added therefore fixed nothing and is reverted; probes
(variant join, fold-lambda join, collision) all recompile clean without it.
…ing, CONFIRMED)

The nullary-variant parent stamp applied unconditionally, so a name that is a
GENUINE top-level declaration AND a nullary variant arm of some coproduct got
stamped as the coproduct. Reproduced with a main-parity control: type Color = Red |
Blue + type Red { hue: Int } + if f { Red { hue: 5 } } else { Blue } -> main REFUSES
(Product(Red) vs Coproduct(Color)); the branch emitted 0 diagnostics and invalid
Rust (Color::Red { hue } on a nullary arm, E0559, plus a duplicate pub struct Red).
My first attribution of this to a pre-existing emit path was WRONG - that probe used
a non-discriminating shape; the paired redirect-disabled control settles it.

Fix reuses the existing single authority rather than adding a second rule: the
redirect now fires only when binding_declares_name is FALSE for the literal's name -
exactly the predicate lookup_type_by_name already uses to decide declaration vs
variant-arm projection (04_env.dag). Both arms verified: the wall refuses again at
main parity, and the motivating variant-join probes (nullary-vs-payload if-join,
fold-lambda join) stay clean. Regen byte-stable, workspace builds, fmt clean.

Audited-by: adversarial workflow wf_cc7dd19e-87e (two independent reproductions).
…stored in credentials.dag while running the gcp_oauth discriminating control (the control was NEGATIVE - restoring the import does not fix the mock-key failure, so the strip is exonerated for that witness)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…e the widen arm

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
# Conflicts:
#	dag/gunbc/host_identity_adopt.dag
#	dag/gunbc/host_identity_assimilation.dag
#	dag/gunbc/tools/review.dag
#	dag/test/claim/grounded_principal_witness_test.dag
#	src/v2/test/fixture/transport_script_scan/bare_string_literal/plant.dag
#	src/v2/test/fixture/transport_script_scan/let_bound_literal/plant.dag
…the shared tier caused

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

gunbai-bot Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by #6934. This PR sits on namespace-wave1-reland, which was squash-merged as #6848, so its diff is the whole of that PR (>300 files) and the modeling-coherence check cannot run. The actual fix — dropping two stale non-fold-residue roster rows — is on a clean branch off main in #6934.

@gunbai-bot gunbai-bot Bot closed this Jul 20, 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