You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Single source of truth for open work in the Loops that Matter (LTM) subsystem -- find a bite-sized piece to work on without re-investigating subsystem state. For an LTM overview see src/simlin-engine/CLAUDE.md and docs/architecture.md; reference and design docs live under docs/reference/ and docs/design/.
How to use this tracking issue
Picking up work? Browse the clusters below; every entry is an open issue with the ltm label that stands alone with file:line references and a suggested fix.
Filing something new? Add it to the cluster whose root cause it shares, as a one-line entry: - [ ] #N -- short title [severity]. Expository detail belongs in the issue, not here.
Closing something? Tick the box and move the line to the Done section at the bottom.
Command line:gh issue list --label ltm --state open returns the full open set.
Strategy
Issue-by-issue fixing produced a roughly flat open count across PRs #740, #761, and #775: the LTM shape space (subscript form x reducer kind x module boundary x scoring surface) is combinatorial, and each per-shape fix carves out newly-visible neighbors. So the plan is root-cause phases that each close an entire cluster, not more single-issue batches:
Phase 2 (next) -- module state & pathway visibility (closes cluster B): module-internal state (stocks AND lags) counted consistently by the gates, pin validation, partitioning, and pathway/composite emission.
Phase 3 -- FFI / surface parity sweep (closes cluster C): mechanical plumbing of data the engine already computes out through libsimlin, TS, pysimlin, and MCP.
Standing invariants, non-negotiable in every phase:
No silent wrong numbers. An un-scoreable shape degrades to one loud warning plus dropped loop scores -- never garbage values, never quiet zeros.
Two-surface decisions share one predicate. Detected/scored/pinned surfaces must agree by construction (one model_is_stateless, one element-correspondence helper), not by parallel reimplementation.
The scoreboard is the open medium+ count and the silent-wrong-number count (currently ~0) -- not the raw issue count.
Prevention beats archaeology. Extend the generated-corpus invariants (the element_graph_proptest pattern) so new defect classes fail in CI instead of being filed from review. Tracked in cluster I.
Open work, clustered by root cause
A. Read-slice / shape expressiveness (Phase 1 residuals)
Phase 1 (PR #784) replaced the identical-whole-extent-slice assumption with the per-axis AxisRead vocabulary. The residuals filed during that work were closed out by PRs #795 and #796; see the Done section.
B. Module state & pathway visibility (Phase 2 target)
Module-internal state and module-boundary edges are invisible to one or more of: the stateless gate, pin validation, partitioning, link-score emission, pathway/composite scoring.
Gated on engine #756 (executed A2A lowering resolves element maps positionally; see also #753) -- both engine-labeled and tracked in #733, listed here for visibility. Once fixed, also re-enable the element-map carve-outs recorded in the mapped_element_correspondence rustdocs.
No open entries: the one LTM-side follower (#754) closed with PR #795. The cluster stays as the marker for the carve-out re-enablement still owed once #756 lands.
wrap_non_matching_in_previous decides, per argument, what is held at its previous value. Getting that wrong yields silently wrong partials rather than a loud skip.
Compact record; expository detail lives in issue/PR history. The old GH-issue/tech-debt cross-reference table is removed -- every row referenced closed items (historical detail in issue/PR history).
Purpose
Single source of truth for open work in the Loops that Matter (LTM) subsystem -- find a bite-sized piece to work on without re-investigating subsystem state. For an LTM overview see
src/simlin-engine/CLAUDE.mdanddocs/architecture.md; reference and design docs live underdocs/reference/anddocs/design/.How to use this tracking issue
ltmlabel that stands alone with file:line references and a suggested fix.- [ ] #N -- short title [severity]. Expository detail belongs in the issue, not here.gh issue list --label ltm --state openreturns the full open set.Strategy
Issue-by-issue fixing produced a roughly flat open count across PRs #740, #761, and #775: the LTM shape space (subscript form x reducer kind x module boundary x scoring surface) is combinatorial, and each per-shape fix carves out newly-visible neighbors. So the plan is root-cause phases that each close an entire cluster, not more single-issue batches:
AxisRead/read_slice_rowsas the single per-axis access vocabulary retired the 10 per-shape carve-outs (ltm: iterated+literal mixed subscript keeps the cross-product element expansion -- phantom cross-element loops carry silent nonzero scores (rescoped: hard compile failure fixed) #525 ltm-augment: is_other_dep_iterated_dim_subscript collapse is magnitude-imprecise for a transposed non-live array dep #526 ltm: arrayed co-agg frozen bare in agg→target partial when a target hoists two arrayed reducers (fragment fails compile, stubs to 0) #751 ltm: subscripted reverse-declared mapped reference classifies DynamicIndex, keeping the cross-product despite the compiler's diagonal #757 ltm: variable-backed partial reducers with broadcast or permuted axes keep the conservative cross-product (loop scores stub to 0) #764 ltm: cross-dimensional partial-reduce link scores ignore Pinned axes in the co-reduced slice (inflated divisor + garbage unread-row scores) #765 ltm: compute_read_slice maps a StarRange over a proper subdimension to Reduced over the full parent extent #766 ltm: extend multi-source agg hoisting to feeder-sub-slice combinations (co-source-closure loops stay warned-zero) #767 ltm: FixedIndex reference into a disjoint-dim ApplyToAll target is loud-skipped though recoverable via the #510 per-element construction #769 ltm: enumerate_agg_nodes hoists whole-extent array-valued RANK into a scalar agg node that cannot compile (agg-routed loop scores zeroed) #771); design docdocs/design-plans/2026-06-11-ltm-shape-expressiveness.md.Standing invariants, non-negotiable in every phase:
model_is_stateless, one element-correspondence helper), not by parallel reimplementation.element_graph_proptestpattern) so new defect classes fail in CI instead of being filed from review. Tracked in cluster I.Open work, clustered by root cause
A. Read-slice / shape expressiveness (Phase 1 residuals)
Phase 1 (PR #784) replaced the identical-whole-extent-slice assumption with the per-axis
AxisReadvocabulary. The residuals filed during that work were closed out by PRs #795 and #796; see the Done section.B. Module state & pathway visibility (Phase 2 target)
Module-internal state and module-boundary edges are invisible to one or more of: the stateless gate, pin validation, partitioning, link-score emission, pathway/composite scoring.
C. FFI / TS / pysimlin surface parity (Phase 3 target, mechanical)
The engine already computes the data; it never reaches one or more external surfaces.
D. Engine element-map execution followers
Gated on engine #756 (executed A2A lowering resolves element maps positionally; see also #753) -- both engine-labeled and tracked in #733, listed here for visibility. Once fixed, also re-enable the element-map carve-outs recorded in the
mapped_element_correspondencerustdocs.No open entries: the one LTM-side follower (#754) closed with PR #795. The cluster stays as the marker for the carve-out re-enablement still owed once #756 lands.
E. Discovery & post-sim quality
F. Performance & scale
G. Capability features (deliberate backlog, not bugs)
H. Doc / decide
I. Prevention -- generated-corpus harnesses
The invariants that keep a defect class from being re-filed from review. See the "prevention beats archaeology" invariant above.
J. Ceteris-paribus wrap correctness
wrap_non_matching_in_previousdecides, per argument, what is held at its previous value. Getting that wrong yields silently wrong partials rather than a loud skip.Done
Compact record; expository detail lives in issue/PR history. The old GH-issue/tech-debt cross-reference table is removed -- every row referenced closed items (historical detail in issue/PR history).
PR #796 (rank element loops, 2026-06)
PR #795 (Phase 1 residual closeout, 2026-06)
PR #784 (Phase 1: shape-expressiveness generalization, 2026-06)
One per-axis access model (
AxisRead/read_slice_rows); design docdocs/design-plans/2026-06-11-ltm-shape-expressiveness.md.PR #775 (scoring-correctness and visibility batch, 2026-06)
PR #761 (core-algorithm batch, 2026-06)
PR #740 (reviewer-finding batch, 2026-06)
Triage 2026-06-10
Earlier work (2026-04/05 triage + LTM arrays hardening + review batches)