Purpose
Single source of truth for known open work in the Loops that Matter (LTM) subsystem. Use this issue to find a bite-sized piece to work on without re-investigating the full subsystem state.
For a one-paragraph description of LTM, see src/simlin-engine/CLAUDE.md and docs/architecture.md. The reference paper and design notes live under docs/design/ and docs/design-plans/.
How to use this tracking issue
- Looking for something to pick up? Browse the grouped checklists below and pick an unchecked sub-issue. Each sub-issue has the
ltm label and stands alone with file:line references and a suggested fix.
- Filed something new? Add it to the appropriate group below as a tasklist item (
- [ ] #N -- short title). GitHub auto-renders the issue's open/closed state.
- Closed something? Tick the box here too -- the box is the human-readable progress signal even though the underlying issue state is the source of truth.
- Filtering on the command line:
gh issue list --label ltm --state open returns the full open set.
Recently resolved (2026-04-29 triage)
Open work
Grouped by code area. Each row links to a GitHub issue with full context.
Core algorithm -- src/simlin-engine/src/ltm.rs, src/simlin-engine/src/db_analysis.rs
Discovery / post-sim -- src/simlin-engine/src/ltm_finding.rs, src/simlin-engine/src/ltm_post.rs
Augmentation -- src/simlin-engine/src/ltm_augment.rs
Module / array umbrellas + FFI
Cross-reference: GH issue ↔ docs/tech-debt.md item
Items #20, #23, #26, #32, #34 in docs/tech-debt.md are already marked RESOLVED (kept as historical pointers to the fixing commits).
Conventions
- New LTM-related bugs/improvements: file as a normal issue with the
ltm label and add a tasklist entry above.
- Use component-prefixed titles (
ltm:, ltm-finding:, ltm-augment:, ltm-post:) so the issue list reads cleanly when grouped.
- When closing a sub-issue, tick the box here in the same PR (or a fast-follow) so the human view stays in sync.
Purpose
Single source of truth for known open work in the Loops that Matter (LTM) subsystem. Use this issue to find a bite-sized piece to work on without re-investigating the full subsystem state.
For a one-paragraph description of LTM, see
src/simlin-engine/CLAUDE.mdanddocs/architecture.md. The reference paper and design notes live underdocs/design/anddocs/design-plans/.How to use this tracking issue
ltmlabel and stands alone with file:line references and a suggested fix.- [ ] #N -- short title). GitHub auto-renders the issue's open/closed state.gh issue list --label ltm --state openreturns the full open set.Recently resolved (2026-04-29 triage)
01970ba2)c16d9a90)1272dd04)wrld3_element_level_enumeration_is_uncappedgated with#[ignore](commitfee04c61)detected.truncatedfallback branch removed; auto-flip backstop covers the dense-graph case (commit88ca6498)Open work
Grouped by code area. Each row links to a GitHub issue with full context.
Core algorithm --
src/simlin-engine/src/ltm.rs,src/simlin-engine/src/db_analysis.rsJohnsonStateper-SCC allocation sized to whole-graph node count instead ofscc.len()[low; only matters for sparse-SCC graphs]enumerate_module_pathwaystruncates at hard-coded depth 20 [low; affects deeper user modules]Unknownfor all array reducers (SUM, MEAN, STDDEV, RANK, MIN/MAX over array) [medium]Discovery / post-sim --
src/simlin-engine/src/ltm_finding.rs,src/simlin-engine/src/ltm_post.rssave_stepgranularity instead ofdt; sub-save_steptransients are missed [medium]rank_and_filtertruncates to MAX_LOOPS=200 before partition-aware filtering; small-partition dominant loops can be lost [low; comment in code already acknowledges]find_main_modelis hardcoded to canonical\"main\"; discovery cannot run on other top-level models [low; usability]LtmVariablesResult.loop_partitionsisHashMap; post-sim helpers.sort()IDs lexicographically (b1, b10, b11, ..., b2) instead of preserving emission order [low; bit-level drift only]SearchGraphclonesIdent<Canonical>in per-timestep DFS hot path; switch to NodeId indexing for 5-10x speedup [medium; perf]LOOPSCORE/PATHSCOREbuiltins so users can pin specific loops/paths [low; capability gap]rel_loop_scorenormalisation cross-pollutes independent A2A loops becausepartition_for_loopreturnsNone[medium; silent correctness for multi-A2A-loop models]Augmentation --
src/simlin-engine/src/ltm_augment.rsbuild_partial_equation_shapedparse-failure fallback returns lowercased text withoutPREVIOUS()wrapping, silently breaking ceteris-paribus [medium; silent correctness on edge cases]LTM_BENCH_TRACEruntime env-var check; production builds carry tracing eprintlns andread_rss_mib[low; build hygiene]STDDEVandRANKceteris-paribus partials silently fall back to delta-ratio (MIN/MAX are now correct) [medium; silent correctness]ltm_enabledis true and integration method is non-Euler [medium; silent correctness when both enabled]Module / array umbrellas + FFI
enrich_with_module_stockssimple-path DFS misses stocks reachable only through internal feedback cycles [low; rare topology]simlin_project_get_errorsbecause diagnostic collection compiles withltm_enabled=false[medium; UX]Cross-reference: GH issue ↔
docs/tech-debt.mditemItems #20, #23, #26, #32, #34 in
docs/tech-debt.mdare already marked RESOLVED (kept as historical pointers to the fixing commits).Conventions
ltmlabel and add a tasklist entry above.ltm:,ltm-finding:,ltm-augment:,ltm-post:) so the issue list reads cleanly when grouped.