Skip to content

epic: Loops that Matter (LTM) -- tracking known issues and improvements #488

Description

@bpowers

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.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:

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.

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_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.

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_previous decides, 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 doc docs/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)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    engineIssues with the rust-based simulation engineepicltmLoops that Matter (LTM) analysis subsystem

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions