Summary
The GH #758 loud-skip gate (commit 5c9c2d41 on branch ltm-fix-batch-2: skip dim-incompatible conservative link scores -- target_dims == [] with both endpoints arrayed non-module -- with one Warning, no link-score variable, and loops through the edge dropped) sweeps in a sub-case that is recoverable in principle: a FixedIndex reference into a disjoint-dimension ApplyToAll target.
Fixture shape:
pop[D1] -- source over D1; a1 is a literal element of D1
hub[D2] = pop[a1] * 0.05 -- ApplyToAll target over disjoint dimension D2
... a feedback loop closed through pop and hub
The gate loud-skips this edge: one Warning, no link-score variable, and every loop through it is dropped. That is a strict improvement over the pre-#758 behavior (a never-compiling scalar score whose dependents stubbed to warned zeros -- verified), so nothing regressed. But the shape does not need to be skipped at all.
Why it is recoverable
Every target slot genuinely reads the same pop[a1], so a per-element link-score construction -- an Equation::ApplyToAll over the target's dims holding pop[a1] live -- is well-defined for every slot. This is the GH #510 Ast::Arrayed per-element construction generalized to ApplyToAll targets. Unlike the element-mapped cross-product class the #758 gate primarily exists for, there is no wrong-slot-diagonal hazard: the literal index pins the source element uniformly across all target slots.
Why it matters
Severity: low. This is a capability gap behind a loud warning, not silent wrongness. But the shape -- literal-element cross-dimension references in feedback loops -- appears in MDL-imported models, and each occurrence currently drops every loop through the edge from LTM analysis.
Components affected
src/simlin-engine/src/db/ltm/link_scores.rs -- emit_per_shape_link_scores and try_disjoint_dim_arrayed_link_scores (both present at 5c9c2d41)
Fix direction
Extend the #510 per-element construction in try_disjoint_dim_arrayed_link_scores to accept FixedIndex references into ApplyToAll (not just Equation::Arrayed) disjoint-dim targets: emit $⁚ltm⁚link_score⁚{from}[{elem}]→{to} as an Equation::ApplyToAll over the target's dims holding {from}[{elem}] live. Edges handled this way then no longer reach the loud-skip gate's sweep, shrinking the unscoreable-edge set (which also shrinks the #768 pathway/composite residual surface).
Discovery context
Identified during adversarial review of the GH #758 work on branch ltm-fix-batch-2 (commit 5c9c2d41).
Tracking / related
Part of LTM tracking epic #488 (Core algorithm group) and array-support umbrella #273. Related but distinct:
Summary
The GH #758 loud-skip gate (commit
5c9c2d41on branchltm-fix-batch-2: skip dim-incompatible conservative link scores --target_dims == []with both endpoints arrayed non-module -- with oneWarning, no link-score variable, and loops through the edge dropped) sweeps in a sub-case that is recoverable in principle: aFixedIndexreference into a disjoint-dimension ApplyToAll target.Fixture shape:
The gate loud-skips this edge: one
Warning, no link-score variable, and every loop through it is dropped. That is a strict improvement over the pre-#758 behavior (a never-compiling scalar score whose dependents stubbed to warned zeros -- verified), so nothing regressed. But the shape does not need to be skipped at all.Why it is recoverable
Every target slot genuinely reads the same
pop[a1], so a per-element link-score construction -- anEquation::ApplyToAllover the target's dims holdingpop[a1]live -- is well-defined for every slot. This is the GH #510Ast::Arrayedper-element construction generalized to ApplyToAll targets. Unlike the element-mapped cross-product class the #758 gate primarily exists for, there is no wrong-slot-diagonal hazard: the literal index pins the source element uniformly across all target slots.Why it matters
Severity: low. This is a capability gap behind a loud warning, not silent wrongness. But the shape -- literal-element cross-dimension references in feedback loops -- appears in MDL-imported models, and each occurrence currently drops every loop through the edge from LTM analysis.
Components affected
src/simlin-engine/src/db/ltm/link_scores.rs--emit_per_shape_link_scoresandtry_disjoint_dim_arrayed_link_scores(both present at5c9c2d41)Fix direction
Extend the #510 per-element construction in
try_disjoint_dim_arrayed_link_scoresto acceptFixedIndexreferences into ApplyToAll (not justEquation::Arrayed) disjoint-dim targets: emit$⁚ltm⁚link_score⁚{from}[{elem}]→{to}as anEquation::ApplyToAllover the target's dims holding{from}[{elem}]live. Edges handled this way then no longer reach the loud-skip gate's sweep, shrinking the unscoreable-edge set (which also shrinks the #768 pathway/composite residual surface).Discovery context
Identified during adversarial review of the GH #758 work on branch
ltm-fix-batch-2(commit5c9c2d41).Tracking / related
Part of LTM tracking epic #488 (Core algorithm group) and array-support umbrella #273. Related but distinct:
Equation::Arrayed-target construction this would generalize