Repository navigation
Affected-set as real v2 lens: consolidate on module-graph import-closure, delete fn-arrow X - #10643
Conversation
… module-graph import-closure (§3)
Three mechanisms answered the question 'which tests are affected by this diff?':
1. v2.lens.affected_set (semantic Node-level lens) — stays as regen authority.
2. v2.lens.affected_set.corpus_dependency_view (fn-arrow Decl-level,
corpus_dependency_views_live) — DELETED. The fn-arrow DependencyView
primitives are removed outright; any dependent breaks loudly, which is
the section 3 census (delete-first: the deletion IS the census).
3. v2.lens.module_graph.entry_affected_by_touched_paths (import-closure) —
THE SURVIVOR. The Rust host mirror entry_file_touched_via_import_closure
is the certified host rendering.
Changes:
- entry_selection.dag: replaced fn-arrow DependencyView machinery with
delegation to module_graph.entry_affected_by_touched_paths_excluding.
Removed stale 'dead code' comment (the fn-arrow X is deleted, not deferred).
- corpus_dependency_view.dag: DELETED entirely (mechanism #2). No module
imported it after entry_selection.dag's delegation change, confirming
the census is clean.
- rust_stage0_gates.dag: updated comment referencing the deleted module.
- cli_run.rs: doc comments reflect consolidated §3 authority.
- Stale measurement receipt removed with deleted module. Measurement
instrument: claim_executor --source-root dag --source-root src/v2
--entry src/v2/lens/module_graph.dag --function entry_affected_by_touched_paths
with changed_paths as arg (timed externally).
Discriminating coverage: module_grain_affected_equivalence_tests certifies
the Dag-vs-Rust decision on real diffs with both positive and negative arms.
Instrument: claim_executor --source-root dag --source-root src/v2 --entry src/v2/test/claim/measure_fn_arrow_decl_facts_cost_test.dag --functions measure_decl_count Time this externally with 'time' or similar.
…h is NOT the selection path The test timed the fn-arrow parse path which is no longer the selection critical path (the fn-arrow corpus_dependency_view was deleted). The selection path uses import-resolution facts. The real measurement is already captured by module_grain_affected_equivalence_tests which runs entry_file_touched_via_import_closure against real diffs.
The function name promised 'dependency_view' semantics but delegated to import-closure - a §3 meaning-fork tell. Removed the wrapper entirely since no caller imports it. The scaffold binding now points directly to entry_affected_by_touched_paths_excluding in v2.lens.module_graph. Also tightened the comment to accurately reflect what was deleted (only the corpus_dependency_view composition, not the lower-level fn-arrow primitives which remain as general lens infrastructure).
- rust_stage0_gates.dag: consumed_input_closure_concept_note reason: updated to name the surviving authority (module_graph.entry_affected_by_touched_paths) instead of the deleted fn-arrow symbols. (§3 stale-name violation) - cli_run.rs: doc comment updated to describe actual deletion instead of a delegating shim that no longer exists.
…etion The determinism_transitive_witness walked src/v2/lens/affected_set for fn-arrow declarations, but entry_selection.dag now has zero fn declarations (only a data value). Point the subject roots at src/v2/lens/module_graph where the surviving functions live.
…dule The original subject roots src/v2/lens/affected_set are correct — the directory still contains affected_set.dag with 78 function declarations. The problem was the entry module: entry_selection.dag now has zero fn declarations (it's a data-only module), so pointing the entry there made the determinism walk fail. Changed entry to v2.lens.affected_set (the main module with all the surviving functions).
The subject roots src/v2/lens/affected_set had only one module with fn-arrow declarations (affected_set.dag, 78 functions). Broadening to src/v2/lens includes many more modules, ensuring fn_arrow_decl_facts_live returns non-empty. The entry module stays v2.lens.affected_set.
Using pool_roots=["src/v2/lens"] made the determinism transitive walk traverse the entire lens directory's call graph, hitting the per-claim CPU deadline (interrupted_before_verdict). Use pool_files targeting exactly affected_set.dag (78 fn declarations) to keep the walk scoped within budget.
the_live_subject_is_not_empty was a positive control proving the fn-arrow live-data acquisition returned non-empty declarations under the affected_set lens. After corpus_dependency_view deletion, the declaration count is environment-dependent and this check unpredictably returns Bool(false). Removed the test (the determinism_transitive_live_closure_holds test provides the clause-2 consumer coverage by returning Holds or Findings, and the fixture-based tests provide determinism logic coverage).
…bject Per DESIGN §4b(4): 'the class's discriminating RED and positive control remain enrolled.' Restored the positive control with the updated subject roots (src/v2/lens) and entry module (v2.lens.affected_set).
The determinism transitive walk from pool_roots=["src/v2/lens"] followed callee edges across 25+ lens modules and exceeded the per-claim CPU budget (interrupted_before_verdict). Narrow to pool_files targeting just affected_set.dag (78 fn declarations) with empty pool_roots. The walk then only checks intra-module declarations without following callee edges. Positive control narrowed to match (only checks fn_arrow_decl_facts_live returns non-empty).
The old closure-membership check was lost when switching to file-grain. Restored with a file-grain equivalent: check that at least one fn-arrow declaration from the entry module (v2.lens.affected_set) exists in the decls. This proves the determinism transitive walk has seeds, serving the same vacuity-guard purpose as the old check.
The determinism_transitive_live_closure_holds witness uses determinism_transitive_holds with empty closure_modules (pool_roots=[]). With no closure modules, decls_matching_callee filters out all callee targets, so the walk only returns the entry module's own 78 declarations. Each is checked intra-node by determinism_findings — a real non-vacuous check. Comment honestly explains why the transitive variant doesn't follow edges (per-claim CPU deadline exceeded with multi-module closure). Positive control restored with file-grain equivalent: checks declarations exist and belong to entry module via decl_belongs_to_module.
Transitive call-graph reachability lowered to intra-node-only. Declared the previous rung, bounded population (~25 lens modules), and restoration trigger (determinism_scoped_transitive_holds that bounds walk to reachable callees only, or per-claim budget increase enabling pool_roots walking).
|
Addressed: declared the rung drop for transitive determinism walk per DESIGN §4b(3). The transitive call-graph reachability was lowered from walking ~25 lens modules' declarations (via
The 78 declarations in affected_set.dag are still checked intra-node by — sent from crisp-carp-360 |
Per §3 meaning-fork rule: the witness was named 'transitive' but no longer followed callee edges. Renamed to determinism_live_intra_holds. Filed rung drop at dag/gunbc/rung_drop/determinism_transitive_reachability.dag with TypedDeclaration (five fields per DESIGN §4b(3)). Determinism over the fn-arrow call graph is currently unverified in the required floor. Added DeterminismTransitiveReachability arm to LegacyProseIdentity enum.
|
Addressed all three findings per your direction. 1. Witness renamed — 2. Rung drop filed —
3. Plain statement: determinism over the fn-arrow call graph is currently unverified in the required floor. The witness comment says this explicitly. — sent from crisp-carp-360 |
Required for the rostered-row-join check: every RungDrop declaration must be named in the roster or the floor refuses.
Removed the OR-arm about raising the per-claim budget (it was satisfiable by editing a number without restoring the capability). Kept only the capability arm: determinism_scoped_transitive_holds implemented and passing re-test with both pool_roots. Stated sufficiency: transitive determinism over the callee graph at corpus grain, under the 500ms safety deadline.
32060cb to
05d6125
Compare
00e40e4 to
460231c
Compare
|
Fixed — restored to the import block. It was removed inadvertently in an earlier edit when consolidating the import list, but the callsite at line 338 still references it. The symbol exists at . — sent from crisp-carp-360 |
…havior The trigger previously proposed determinism_scoped_transitive_holds, but call_reachable_decls already seeds from the entry module and follows only reachable callees. The actual problem is that the reachable callee population across ~25 lens modules exceeds the 500ms safety deadline. Rewrote trigger to name the two actual repair paths: (i) optimize determinism_findings or callees_from_node to reduce per-declaration cost, or (ii) scope pool_roots to exactly the reachable modules.
b30ecd4 to
df2466d
Compare
|
Fixed — the trigger was proposing a function () that would duplicate , which already seeds from the entry module and follows only reachable callees. Rewrote the trigger around the actual problem: the reachable-callee population across ~25 lens modules exceeds the 500ms safety deadline. Names two repair paths: (i) optimize determinism_findings/callees_from_node to reduce per-declaration cost, or (ii) scope pool_roots to exactly the reachable modules. — sent from crisp-carp-360 |
b76d410 to
c101dc5
Compare
|
Fixed — updated the stale witness name to and added a note that transitive callee-edge traversal is dropped per the rung drop. — sent from crisp-carp-360 |
Ledger-Repair-Judged: docs/design-failure-modes.md Ledger-Repair-Judged: docs/design-rung-drops.md Ledger-Rows-Repaired: docs/design-rung-drops.md determinism_transitive_reachability
Summary
Resolves the §3 fork where three mechanisms answered the question "which tests are affected?" by deleting mechanism #2 (fn-arrow corpus_dependency_view) and consolidating on mechanism #3 (module-graph import-closure).
The three mechanisms
corpus_dependency_views_livewas the selection mechanism removed. Lower-level fn-arrow primitives (fn_arrow_decl_facts_live,dependency_lens) remain as general lens infrastructure.What changed
module_graph.entry_affected_by_touched_paths_excluding. The oldentry_affected_by_dependency_viewwrapper (§3 meaning-fork tell — same name, different semantics) removed. No callers imported it.module_grain_affected_equivalence_tests.Constraints
entry_affected_by_dependency_viewremoved (name promised dependency-view but delegated to import-closure).module_grain_affected_equivalence_testscertifies Dag-vs-Rust decision on real diffs.