Repository navigation
§5 de-fork Step 1 PR-A: grounded source_root tagging at ingest (additive, inert) - #5473
Merged
Merged
Conversation
This was referenced Jun 21, 2026
Merged
briansrls
added a commit
that referenced
this pull request
Jun 21, 2026
… reconcile checkboxes to merged PRs (#5488) Operator ask: bolded inline milestones so the checkboxes line up with where we're headed in dependency order, with checkpoints verifiable along the way. - Each section opens with a **◆ Milestones** spine: the verifiable checkpoints in dep order (✓ reached · ▸ now · ○ ahead). §5 carries the critical path (de-fork Step 1 ✓ → NOW cargo-green → ... → KEYSTONE regen-verify → TERMINAL src/v1 deleted). Read L->R = the path. - Reconcile checkboxes to reality (6 merges verified merged): §5 cross-tree import -> [x] #5473; §0 construction-justification -> [x] #5476; §0 fenced cross-tree-import-activation -> [x] #5473 (escalate item closed). - Fold in bright-stag's honest line-33 de-vacuum wording (EmitHostGate ✓ #5477; 4 advisory lenses widened+bounded, whole-corpus deferred to .dag reflection) — one PR not two. - invert-hand-maintained plan §3.1: the near-term PR->checkbox status slice (a GitHub Action / drift-check over the (#NNNN) anchors) that kills the manual reconcile pain before full emit-from-.dag lands — answers the operator's 'associate a PR -> check the box' question as a slice of the same project. Co-authored-by: Brian Searls <briansrls@gunb.ai> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls
added a commit
that referenced
this pull request
Jun 21, 2026
…5484 interactions) The full run-all enumeration (761 pass / 2 fail / 89 ignored, 0 infra) surfaced two more deterministic reds beyond the wall-clock timing test — both pre-existing on origin/main, hidden by the old 3-test allowlist, untouched by this PR: - source_root_ingest_manifest_host_test::manifest_entry_admission_qualified_name_is_well_formed: #5473 source_root admission has an absolute-vs-relative contradiction (abs path rejected by admission; relative path fails the file-existence check) — proven by execution. Real #5473 API bug; routed to the source_root-tagging owner. - wet_hermetic_equivalence_test::wet_hermetic_scaffold_roster_outcomes_agree: whole-tree mock-corpus precompute can't resolve #5484's doc_reachability_witness_test.dag (doc_graph_* fns not in scope); routed to the doc-graph reachability-lens owner. Surgical #[ignore=failing] with routed reasons (bucket=source-root-ingest-admission / doc-graph-wholetree-resolve). Reason-based completeness lens covers them. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This was referenced Jun 21, 2026
briansrls
pushed a commit
that referenced
this pull request
Jun 22, 2026
…n from host tags (#5506) The remaining activation gate: prove by execution that the source_root carrier (#5473/#5486) is CONSUMED on the real grounded compile path, not merely carried. Feeds a host-tagged SourceRootIngest through the real machinery — program_assembly_fold_ingest builds the QualifiedName->SourceRootRef index, source_root_set_from_ingest builds the active-root set — then runs cross_tree_edge_decision (the exact fn admit_import_entry calls). Nothing about fundamentality is supplied; MoreFundamental/LessFundamental is derived by tree_fundamentality_order. By execution (gunbc run --claim-run): - v2-subject (V2Tree) -> dsl-target (DslTree) => EdgeCrossAdmitted (true) - tags reversed: dsl-subject -> v2-target => EdgeCrossDenied (true) Asserts the exact decision variant (not a Bool proxy) so the RED leg cannot pass for a wrong reason. Flip either source_root tag and the witness goes the wrong way (discriminating oracle). Verdict: cross-tree import is ACTIVE on current main, grounded on filesystem-truth source-root tags — the de-fork collapse fan-out is unblocked. Floor-auto-enrolled via _test.dag naming. Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls
pushed a commit
that referenced
this pull request
Jun 22, 2026
…-forks + 7 grounding cluster) (#5511) * §5 de-fork audit: re-verdict census by execution — 2 mirrors + 2 not-a-forks + 7 grounding cluster The dsl↔v2 std fork is not "mostly temp v2 mirrors": by-execution decl-set comm + shared-type-body diff shows 2 true mirrors (reducible/measure), 2 pure name-collisions (coercion/node), and 7 divergent groundings (algebra/logic/nat/ integer/float/effects/verification) — the same concept grounded on a different axis/realization per tree (e.g. EffectShape: operation-axis in dsl vs idempotency-class in v2; TestClaim simple-proposition vs grounded coproduct). The grounding cluster is a single-authority unification DESIGN downstream of the numeric tower (#5428) + model↔realization grounding, not a mechanical repoint. Also: §1 updated — cross-tree import is ACTIVATED (#5473/#5486 grounded, #5506 arbiter witness proves it live, #5504 fixed the abs-vs-rel admission bug); the former "wired but off" blocker is dissolved. Structured §2 as operator decision-input per concept (shared / shared-body-divergence / each-side-unique / grounding-entanglement). DESIGN §6: a stale doc contradicting ground-truth is parallel-representation debt. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * §5 audit: correct node/coercion to v1-artifact category (DEFER to v1-shrink) verify-before-act caught a scoping error: importer greps omitted src/v1, and src/v1 is a live consumer of dsl/std. node + coercion renames are NOT clean-lane — both cascade into the v1 seed (04_infer inference stage import + emitted Rust std_{node,coercion}.rs + a guard test). Per bright-stag's ruling, DEFER both to v1-shrink: on v1-delete node self-dissolves (dead file → delete, no rename) and coercion shrinks to a v1-free disambiguation (4 extdeps + v2). Census now has THREE categories: (a) 2 true mirrors, (b) 7 grounding divergences, (c) 2 v1-artifact collisions. Recorded the dissolution trigger. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls
added a commit
that referenced
this pull request
Jun 22, 2026
…lter allowlist (29 of 792 green tests) → run-all-unless-#[ignore]d-with-written-reason; add CI-coverage-completeness so a new test is covered by default (fail-closed); measure CI-time impact before committing the full set (#5427) * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * Widen rust gate: declare merge-landed test (lens caught it) + flag one pre-existing fixture red The coverage-completeness lens (this PR's residue) fired on its first real input after merging main: resolve_typed_cache_equivalence_test.rs landed via #5071 but was never declared in lib.rs, so it would silently not run — exactly the gap the lens exists to close (fail-closed, working as designed). Declared it. dag_emit_from_resolved_matches_compile_sources_for_v4_slice reads a removed fixture (fixtures/v2-mvp1, absent from the tree and every git ref) — a pre-existing red hidden by the old 3-filter allowlist, surfaced by the widening. Flagged with a written #[ignore] reason (FLAG-DON'T-FIX); the lens keeps the excuse reviewable. The ~20 interp_recorded_fixture/dry_run local failures were a build-ordering artifact (claim_batch bin not built locally); they pass once the floor's release --bins build is present, so they are NOT ignored (ignoring them would have been a fail-open). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Mark v4_slice ignore as draining-worklist (delete-or-restore), not permanent Parent note: a test whose fixture is gone from every git ref is DEAD — it can never pass, so a permanent ignore would calcify a coverage hole. Sharpened the reason to name the resolution (delete the dead parity receipt OR restore/retarget the fixture at a live v2 source set) and the owner routing (v2 emit slice, via bright-stag), so the completeness lens keeps it visible as work-to-drain. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Fix completeness-lens false-positive on multi-line #[ignore] reasons My own lens (every_ignore_carries_a_written_reason) went RED on the v4_slice ignore I'd just added: the detector required the closing quote on the same line as #[ignore = "..."], so a long reason wrapped with \ line-continuation left the opening line with an unterminated string and was misread as reasonless — a false-positive that fails-closed on legitimately-reasoned input. Detector now recognizes a multi-line reason: opening quote + non-empty content (sans a trailing \ continuation) is reasoned even when the string closes on a later line; an opener with no content before the break is still empty → flagged. Added detector_accepts_a_multiline_reason as the discriminating control (both the valid wrap and the empty-multiline edge), fed through the same authority. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Flag the 16 execution-confirmed pre-existing reds the widening surfaces (#[ignore=failing]) The widened gate runs the self_gen8 + census families that the old 3-filter allowlist never ran. warm-ram's opt-level run listed 32 candidates; running them to completion (--no-fail-fast, claim_batch built) confirms only 16 actually FAIL — the other 16 self_gen8 PASS (e.g. kernel_type_import). Ignoring warm-ram's superset would have excluded 16 GREEN tests (fail-open); only the execution- confirmed failures are flagged. • ownership_stage0_census (1): clone-census ratchet RED on main (non-emit .clone() 21540 > 20200+202, ~1138 over) — inert under the old allowlist while the seed drifted UP against "Rust shrinks toward zero". Do NOT bump the cap (project spirit); route to a census/substrate-migration owner. • self_gen8_* (15): pre-existing self-host emit regression (parametric-alias-RHS / reexported-type-import module resolution); route to the v2 self-host Route-A owner. All draining-worklist, not permanent; the completeness lens keeps each reason visible and reviewable. fmt-clean (rust gate runs fmt --check); parse.rs picked up a pre-existing fmt fix from the earlier ignore conversion. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Merge origin/main (ac9a7e7) — resolve pipeline.rs: accept main's deletion of dead v4_slice test main moved again (#5449 etc.) after my first sync. Conflict in pipeline.rs: main DELETED dag_emit_from_resolved_matches_compile_sources_for_v4_slice (the dead parity receipt reading the removed fixtures/v2-mvp1) — exactly the delete-or-restore resolution I'd flagged and routed. Accepted main's deletion; my interim #[ignore] on it is now moot and gone. The 16 self_gen8/census failing-ignores stay intact; completeness lens green (no undeclared test file from the merge); crate compiles. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * Cluster A construction-fix (v2_layer_roots single authority) + cluster B ignore-with-reason; fix doc-lazy-continuation 27 reds surfaced by the run-all widening: - 14 fixed-by-construction: under-scoped v2_source_roots()=[src/v2] dropped dsl, so v2-core's extdeps.communication.medium import was unresolvable. Funnel the 4 files' local copies through one helpers::v2_layer_roots()=[src/v2,dsl] authority (mirrors gunbc.ci_layer_roots; §6 dissolution marker to derive from the .dag fact later). - 13 pre-existing emit/inference reds: #[ignore=failing] with written symptom + bucket (emit/inference/lang-go/lang-python), routed as follow-ups. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * #5427: ignore 2 more pre-existing reds the widening surfaced (#5473 + #5484 interactions) The full run-all enumeration (761 pass / 2 fail / 89 ignored, 0 infra) surfaced two more deterministic reds beyond the wall-clock timing test — both pre-existing on origin/main, hidden by the old 3-test allowlist, untouched by this PR: - source_root_ingest_manifest_host_test::manifest_entry_admission_qualified_name_is_well_formed: #5473 source_root admission has an absolute-vs-relative contradiction (abs path rejected by admission; relative path fails the file-existence check) — proven by execution. Real #5473 API bug; routed to the source_root-tagging owner. - wet_hermetic_equivalence_test::wet_hermetic_scaffold_roster_outcomes_agree: whole-tree mock-corpus precompute can't resolve #5484's doc_reachability_witness_test.dag (doc_graph_* fns not in scope); routed to the doc-graph reachability-lens owner. Surgical #[ignore=failing] with routed reasons (bucket=source-root-ingest-admission / doc-graph-wholetree-resolve). Reason-based completeness lens covers them. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * #5427: cite PR #5504 (RED#1 heal-PR) in the source-root admission ignore reason #5504 (still-deer-248's de-fork-lane fix) grounds absolute --source-root via repo_relative_dag_path, fixing the abs-vs-rel admission contradiction behind the #[ignore]'d manifest_entry_admission test. #5504 is up but not yet merged, so the interim ignore stays; reason now names #5504 as the heal-PR + un-ignore trigger. When #5504 merges, a freshness-merge heals RED#1 and the ignore drops -> zero ignores. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * #5427: route rust gate through the cargo.Build model (§3), drop hand-typed argv strings run_gates() now calls the modeled extdeps.cargo_build ops — cargo.Build.Fmt(["--all","--check"]), Clippy(["--all-targets"],["-D","warnings"]), Test(["-p","v1-compiler-tests"]) — so the cargo shell-transport argv is the single authority, not a hand-typed command String. Removes the now-dead ci_rust_gate_{fmt,clippy,test}_command() String fns from ci_spec (they were §3 nicknames for cargo's already-modeled interface; tools/build.dag uses the same ops). Coverage-by-construction unchanged (run-all-except-#[ignore]d; completeness lens is the residue). EAGAIN cold-retry is transport resilience the cargo model can't yet express (env not wired to the shell transport); it relocates to the CI workflow step that runs the gate (follow-up: rust_tests job). Validated by execution: floor_effect_gate_witness rust_monolith_gate_passes resolves 78 sources and dispatches all three modeled cargo commands. Fixes the partial-snapshot break in 565a116. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Resolve merge conflict markers in rust gate cargo-modeling (ac0b732) The auto-committer captured the merge with unresolved <<<<<<< markers in rust_gates_ci.dag and ci_spec.dag. Resolution keeps the cargo.Build model routing (Task 1) over origin/main's old shell-string version (which still carried the narrow 3-filter ci_rust_gate_test_command -- exactly what this work inverts). No code change beyond marker removal. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * WIP: Widen the rust gate by construction (§1): invert the hand-picked 3-filte * Resolve merge conflict in cargo_build.dag; conform new .dag files to comment-ban The auto-committer pushed an unresolved-conflict state (<<<<<<< markers in cargo_build.dag:3,8,9) which fails to parse — fixes the BLOCKING review and the red dsl_compile_clean_gate. main's comment-ban sweep (#5537/#5543/#5539) left dsl/std, dsl/extdeps, dsl/gunbc, dsl/tools, src/v2/test/claim comment-free; this PR's new/rewritten files in those dirs re-introduced comments. Strip them to conform (code unchanged) so we match already-merged state and avoid a future re-sweep. ci.yml emit is byte-identical (comments don't affect output); drift gate green, ci_spec_witnesses green, rust gate + floor_effect_gate_witness resolve clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Fix stale source-audit literal: compile.dag gate predicate (run-all surfaced) The run-all widening (#5427) surfaced source_audit::compile_gate_keeps_infer_errors_blocking_in_stage0, red because main refactored compile.dag's emission gate from is_error_diagnostic to is_resolved_pipeline_typecheck_blocking (discovery-corpus advisory typecheck) without updating this brittle string-audit literal. The audit never ran under the 3-filter allowlist, so the drift went unseen — exactly the class this widening exists to catch. Intent is unchanged (emission is gated on type errors); update the literal to the current predicate so the audit stays live and green. Fix, not #[ignore]: a stale literal is cheaply correctable, not deep work to route. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Resolve .rs merge conflicts: keep #[ignore=reason] set, conform to .rs comment-ban The auto-committer committed an unresolved merge (3052ecd, markers in 5 test .rs files) bringing main's .rs comment-ban sweep (#5544). Resolution: restore my pre-merge versions (preserving every #[ignore = "<reason>"] — the single authority my coverage-completeness lens requires; main's bare #[ignore] would red that lens) then strip full-line // comments to conform to the ban. Code unchanged; 17 self_gen8 + diagnostics reasoned ignores intact; zero reasonless #[ignore] introduced. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Re-delete orphan profiling scaffold the merge resurrected (my own lens caught it) body_producer_infer_profile_test.rs is a manual timing-profiling scaffold (std::time::Instant, profile_* fns, bare #[ignore], never declared in lib.rs). My widening deliberately deleted it (26beeee); the auto-committer's merge (3052ecd) left main's copy in the tree via the unresolved deleted-in-HEAD/ modified-in-main conflict. The new coverage-completeness lens correctly fired on it twice — orphan file (every_test_file_is_declared_in_lib) + bare reasonless #[ignore] (every_ignore_carries_a_written_reason) — a live proof the lens has teeth. Re-delete to honor the original deletion; both lenses green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Flag contention-flaky wet/hermetic equivalence test (run-all surfaced) wet_hermetic_scaffold_roster_outcomes_agree passes isolated (~110s) but fails under the 766-test parallel load (~335s). nextest process-isolates each test, so this is resource/timing contention on the wet-execution path, not a logic bug — a non-deterministic test can't gate a merge (§5 fail-open-by-noise). Pre-existing (#5276), never run under the old 3-filter allowlist. #[ignore=reason] + route to the wet==hermetic / hermetic-testing owner; the coverage lens keeps it visible. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * cargo fmt: collapse blank lines left by .rs comment-strip The comment-strip in f05415d left double-blank-lines where comments had been; cargo fmt --all --check rejected them (the rust gate's Fmt op would red). Pure blank-line removal (105 lines), zero code change, all #[ignore]s intact. Also addresses the blank-line noise the 19:42 review flagged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Brian Searls <briansrls@gunb.ai> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
briansrls
added a commit
that referenced
this pull request
Jul 6, 2026
…d by broken regen); keep source_root_ingest V2Tree fix The #6289 witness ownership_movable_test.dag emits test_claim_ownership_movable.rs, which references v1.compiler.ownership symbols (merge_branch_licenses, MoveLicenseAccum, LiveState, move_site_key, ...) that are NOT in the committed v1_compiler_ownership.rs seed. Registering it as a GENERATED file therefore breaks the seed crate's compile (E0432/E0425/E0061) -- 'just register it' cannot land in isolation. Measured blast radius: the fresh self-compile drifts from the committed seed across 33 files (the known-broken regen, emitter bugs #6298), so pulling in the fresh v1_compiler_ownership.rs cascades into the whole regen. Not a scoped fix; parked for the regen project (or exclude the off-auto-path witness from the emit closure). KEPT: the source_root_ingest_gate_passes main-red fix -- emit_source_root_ingest_manifest now imports v2.std.cross_tree.import_model { DagTree, V2Tree }. The manifest emitter hardcodes its import block and missed this when source_root became a grounded SourceRootRef (#5473/#5486), so every witness importing the manifest failed with 'undefined variable V2Tree'. Verified locally: all 3 real_ingest witnesses + the 2 runnable closure witnesses now return true (were compile errors). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls
added a commit
that referenced
this pull request
Jul 6, 2026
…nert-gate hole #1) (#6311) * WIP: Fork of realization * WIP: Fork of realization * WIP: Fork of realization * WIP: Fork of realization * Floor affected-set: non-.dag-only diff is structural-∅, not ignorance (unblock pure-.rs PRs) floor_diff_edits_from_line_ranges refused (Err) when a diff changed only non-.dag files (saw_non_dag && !saw_dag) — reddening the discovery-corpus batch for every pure-.rs PR (seed hand-syncs, Rust-only changes). That conflated a structural-∅ .dag frontier with an ignorance state. Per the operator's arity ruling: a successful git-diff observation whose .dag subset is empty is NOMINAL (present, empty) — the SAME outcome as an empty diff (every row takes the not-affected skip). The only ignorance state is a FAILED observation (UnifiedDiffFail, floor_diff_observe.dag), refused upstream in floor_git_diff_range. This mirrors the function's own departed-.dag-path arm, which already distinguishes structural-∅ (continue) from ignorance (refuse). Fix: drop the saw_non_dag/saw_dag refusal; a non-.dag-only diff falls through to the empty frontier. Observation layer (Ok/Fail + exit code) and the shell docs-only shortcut are unchanged (already correct / downstream- safe). Red control: non_dag_only_diff_is_structural_empty_frontier_not_refusal (was Err, now Ok empty). Also fixes the compile error at 32fac2e (auto-commit captured this edit mid-flight: declarations removed, refusal block not yet dropped). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * WIP: Fork of realization * Revert roster registration of test_claim_ownership_movable.rs (blocked by broken regen); keep source_root_ingest V2Tree fix The #6289 witness ownership_movable_test.dag emits test_claim_ownership_movable.rs, which references v1.compiler.ownership symbols (merge_branch_licenses, MoveLicenseAccum, LiveState, move_site_key, ...) that are NOT in the committed v1_compiler_ownership.rs seed. Registering it as a GENERATED file therefore breaks the seed crate's compile (E0432/E0425/E0061) -- 'just register it' cannot land in isolation. Measured blast radius: the fresh self-compile drifts from the committed seed across 33 files (the known-broken regen, emitter bugs #6298), so pulling in the fresh v1_compiler_ownership.rs cascades into the whole regen. Not a scoped fix; parked for the regen project (or exclude the off-auto-path witness from the emit closure). KEPT: the source_root_ingest_gate_passes main-red fix -- emit_source_root_ingest_manifest now imports v2.std.cross_tree.import_model { DagTree, V2Tree }. The manifest emitter hardcodes its import block and missed this when source_root became a grounded SourceRootRef (#5473/#5486), so every witness importing the manifest failed with 'undefined variable V2Tree'. Verified locally: all 3 real_ingest witnesses + the 2 runnable closure witnesses now return true (were compile errors). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Red-control test for source_root_ingest manifest cross_tree import manifest_imports_grounded_source_root_constructors: asserts the emitted manifest imports v2.std.cross_tree.import_model whenever it emits a grounded source_root value -- deleting the import line reddens this test (paired with the CI witness program_assembly_real_ingest_module_roots_parse_holds as the execution oracle). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Resolve merge with main #6269 in floor_diff_edits + manifest emitter The auto-committer flushed the in-progress merge with conflict markers (0b74fe4); this resolves both: - floor_diff_edits_from_line_ranges: keep #6269's v1_attribution_index + added_paths handling; keep the structural-∅ fix (no saw_non_dag/saw_dag refusal -- a non-.dag-only diff is a nominal empty frontier). The two are orthogonal and compose. - emit_source_root_ingest_manifest: take #6269's emit_source_root_ref_import (derives the referenced SourceRootRef constructors from records) over the earlier hardcoded both-constructors line -- same source_root_ingest V2Tree fix, more precise form. Kept both red-control tests; retargeted the structural-∅ test off a src/v1/ path (which #6269 now eagerly resolves via the real workspace tree, unavailable from the unit-test cwd) onto a path-agnostic non-.dag path. Both green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * WIP: regen * WIP: regen * Revert inert selective-import filter (ancestry bypasses type_env_for_import) The type_env_for_import specific_names filter was auto-committed to this PR but is a no-op: lookup_binding_by_name reads ancestry_str_bindings, which build_type_env fills from union_parent_type_env_caches (04_infer.dag:5507) and the single-import path (:133) -- both merge each import's full parent.type_env_cache, bypassing type_env_for_import (which only feeds the unused 'parents' field). Measured: dag_collect still resolves un-imported ErrorNode with the filter built in. Reverting so #6311 does not carry a fail-closed illusion; the real fix belongs in the ancestry-cache seam. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Brian Searls <briansrls@gunb.ai> Co-authored-by: Claude Opus 4.8 (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.
§5 de-fork — Step 1 PR-A: grounded
source_roottagging at ingestFirst of two PRs to activate cross-tree import (
dsl/↔src/v2/). This one is purelyadditive tagging, inert by itself — the activation flip is PR-B.
Plan:
docs/plans/dsl-v2-defork-audit.md§1/§3.What
source_root: SourceRootReftoDagSourceReadWitness(src/v2/compiler/source_authority.dag):the filesystem truth of which
--source-rootthe host read a file from, NOT a guess from themodule's self-declared QN prefix (the DESIGN §4 concern the resolution.dag header names as its
dissolve-on).
src/v1/stage0/src/cli_run.rs) attributes each ingested file to its--source-rootbypath-prefix and emits the tag. Fail-closed on a path matching 0 or 2+ roots, or an unrecognized
root (authority:
gunbc.ci_layer_roots.witness_layer_roots = [src/v2, dsl]→SourceRootRef {V2Tree, DslTree}).source_root_set_from_ingestadded — the §4-grounded replacement for theQN-prefix
source_root_set_from_module_roots. Not yet wired (PR-B threads it in + deletes the fallback).DagSourceReadWitnessliteral sites tagged.Why the QN-prefix fallback has to die (measured receipt)
The resolution.dag
KNOWN LIMITATIONwas real, not hypothetical. Measured against the live tree:9
src/v2files declare non-v2.-prefixed modules (extdeps.shell→extdeps.shell; fixtures→
bisect.add,extdeps.fixture.*,test.claim.fold_list_generic_instantiation). The QN-prefixguess mis-tags every one as
DslTreethough they areV2Treeby filesystem. So the crutch isgenuinely unsound (mis-tags, not merely "less pure") — the FS-grounded tag fixes it.
Green by execution
source_root_token_grounds_in_filesystem_location— discriminating: tagssrc/v2/extdeps/shell.dag→
V2Tree(the exact mis-tag case), fail-closed on no-root +src/v20boundary..dagwitnesssource_root_tag_carried_and_folded_to_grounded_set(src/v2/test/claim/source_root_tagging_test.dag)— green; perturbing a tag →
false/exit 1 (discriminating).name_resolve_cross_tree_resolutionwitness still green;program_assembly_real_ingestgreen against a host-generated manifest that now carries
source_root: V2Tree.cargo fmt --check+cargo clippy -D warningsclean.Order stays
FundamentalityUnknown— no activation here. PR-B (operator-ratified): orderMoreFundamental+ full per-edgeQN→SourceRootRefgrounding throughprogram_assembly.dag+delete the QN fallback, proven by a real
v2→dslimport that was denied before.