Purpose
A single, pinned index of all known open work , so anyone (human or agent) can find a bite-sized thing to pick up without re-surveying the whole tracker. This is the backlog-burndown drive: chip away, tick boxes, keep the count falling.
This is a master index . Two large clusters have their own dedicated trackers and are not re-listed here:
Everything else is grouped below by code area. Each row links a standalone issue.
How to use this tracking issue
Looking for something to pick up? Browse a section that matches your interest and grab an unchecked box. bug/hygiene items tend to be self-contained; enhancement items are larger.
Filtering on the command line: every issue now carries area labels -- gh issue list --label engine --state open, --label frontend, --label backend, --label security, --label layout, --label ci, --label docs, --label mcp, --label compat, --label hygiene.
Closed something? Tick the box here in the same PR (or a fast-follow). The box is the human-readable progress signal; the underlying issue state is the source of truth.
Filed something new? Add a - [ ] #N -- short title row to the right section (or to epic: Loops that Matter (LTM) -- tracking known issues and improvements #488 if it is LTM).
Recently triaged (2026-07-28)
Full sweep of every open issue against this index. 71 untracked issues were added. The largest new cluster is the Stella conveyor/queue engine (16 issues), which now has its own section; the second largest is build/lint tooling.
Ticked 11 rows whose issues had been closed since the last sweep: AddressSanitizer: resvg 0.47.0 type mismatch on nightly Rust #287 , engine: two divergent circular-dependency cycle-gate code paths (System A salsa vs System B model.rs:442) #568 , engine: arrayed VECTOR SORT ORDER returns flat global indices instead of per-iterated-slice 0-based ranks #585 , server: @simlin/server Jest suite intermittently fails one test under parallel pre-commit load #635 , engine: salsa::Update on compiled bytecode uses PartialEq over f64/NaN (benign missed-backdate) #642 , embed: cross-origin web component broken -- module worker chunk fetched from app.simlin.com with no CORS/fallback #688 , server: preview rendering lost worker-thread isolation; no timeout + unbounded GAE instances compound the DoS/cost surface #694 , deploy: .gcloudignore doesn't import .gitignore; gcloud app deploy uploads untracked files and trips GAE 10k-file cap #695 , Canvas view changes trigger a full engine round-trip per frame during pan/zoom #707 , rsbuild/rspack tree-shakes reset.css side-effect import out of src/app production CSS bundle #708 , diagram: component-library CSS modules hardcode light colors with no dark-mode overrides #709 .
The old "Deploy / ops / CI / build / test hygiene / CLI" bucket had grown to ~40 rows, which defeats the browse-and-pick purpose. Split into Build / lint / type-check tooling , CI / test hygiene , and Deploy / ops / release / CLI .
LTM-labeled issues ltm: every-emitted-fragment-compiles harness over a generated corpus (prevention) #782 , ltm: link-score generation materializes one full guard-form arm per element of an arrayed target (quadratic in element count) #977 and ltm: the ceteris-paribus wrap leaves a LOOKUP table argument's runtime index live in every link-score partial #984 were routed to epic: Loops that Matter (LTM) -- tracking known issues and improvements #488 per the convention below (and ltm-finding: discovery mode mints phantom from-side element keys for Bare A2A edges (mapped-dimension and scalar-source legs; loops undiscoverable) #754 /ltm: de-hoisted array-valued RANK gets diagonal-only element edges, so rank-mediated cross-element loops are not enumerated #776 ticked there), so they are deliberately absent here.
Cannot log in locally #78 , Loading Stella models - some issues #90 and FR: Simlin-engine as separate crate #91 predate this epic and were missed by the original index; they are now filed under the matching sections.
Recently triaged (2026-06-08)
Engine -- Vensim / XMILE / MDL / systems-format compat & macros
XMILE export from simlin: variable name to lowercase but not in equations #82 -- XMILE export lowercases variable names outside equations but not within
Loading Stella models - some issues #90 -- Stella .stmx import: empty <variables/>, quoted hyphenated idents, connector-supplied external data
User can proceed with importing invalid XMILE file despite an error #101 -- user can proceed past an error when importing an invalid XMILE file
Add MDL round-trip integration test for special-character identifiers #335 -- add MDL round-trip integration test for special-character identifiers
engine: GET DATA BETWEEN TIMES + implicit .dat loading blocks 2 simulation tests #347 -- GET DATA BETWEEN TIMES + implicit .dat loading (blocks 2 sim tests)
engine: C-LEARN macro expansion blocks 1 simulation test #349 -- C-LEARN macro expansion (blocks 1 sim test)
MDL writer does not reconstruct GET DIRECT calls for arrayed variables #393 -- MDL writer doesn't reconstruct GET DIRECT calls for arrayed variables
Systems format translator: duplicate source/dest flow pairs produce colliding identifiers #399 -- systems format: duplicate source/dest flow pairs collide on identifier
Systems format writer groups flows by source stock, breaking round-trip for cross-stock references #400 -- systems format writer groups flows by source stock, breaking round-trip
MDL roundtrip loses original view coordinates due to compose_views offset #401 -- MDL roundtrip loses view coordinates (compose_views offset)
MDL roundtrip doesn't preserve custom sketch display shapes #402 -- MDL roundtrip drops custom sketch display shapes
MDL writer pipe connector flags may not match Vensim originals #403 -- MDL writer pipe-connector flags may not match Vensim originals
MDL writer produces invalid output for projects with no views #404 -- MDL writer emits invalid output for projects with no views
MDL roundtrip loses per-view font metadata in multi-view models #405 -- MDL roundtrip loses per-view font metadata in multi-view models
Refactor write_view_segment in MDL writer to reduce parameter count #406 -- refactor write_view_segment to reduce parameter count
Systems translator does not reject stocks named after engine-reserved identifiers #440 -- systems translator accepts stocks named after engine-reserved identifiers
engine: test_mdl_equivalence fails on main -- native MDL parser emits 3 extra link elements for SIR.mdl #512 -- test_mdl_equivalence: native parser emits 3 extra link elements for SIR.mdl
engine: Vensim macro formal parameter named like a control variable (Final Time, etc.) is silently dropped on MDL import #552 -- Vensim macro formal param named like a control var is silently dropped
engine: single-parameter Vensim macro invocation is silently rewritten to LOOKUP on MDL import #553 -- single-parameter Vensim macro is silently rewritten to LOOKUP on import
engine: macro whose body wraps a same-canonical-name intrinsic (INIT = INITIAL(x)) causes false recursion cycle, blocking C-LEARN macro expansion #554 -- macro INIT = INITIAL(x) false-recursion cycle (blocks C-LEARN expansion)
engine: metasd COVID model not simulation-tier-eligible -- unsatisfied GET DIRECT/GET XLS DATA external data blocks full SSTATS reference validation (Phase 7 corpus scope) #555 -- metasd COVID model not sim-tier-eligible (unsatisfied GET DIRECT/GET XLS)
engine: add proptest for XMILE macro round-trip and extract/reconstruct idempotence invariants #556 -- add proptest for XMILE macro round-trip / extract-reconstruct idempotence
engine: XMILE macro-invocation argument recovery relies on undocumented Phase-4 ModuleReference emission order (latent silent-reorder bug) #557 -- XMILE macro arg recovery relies on undocumented emission order (latent bug)
engine: C-LEARN full simulation blocked by non-macro issues (circular dep, dimension mismatches, unknown dep) -- the macro epic's deferred 'tracked separately' follow-up #559 -- C-LEARN full simulation blocked by non-macro issues
engine: metasd macro corpus SIMULATION tier is empty -- enable it (Vensim DSS reference outputs starting with Theil_2011 + per-model non-macro blocker triage) #561 -- enable the metasd macro corpus SIMULATION tier
engine: Variable::Module inside a macro-body model is silently dropped by the MDL writer (project_to_mdl reject gate scans only the main model) #566 -- Variable::Module inside a macro-body model dropped by the MDL writer
engine: B2-A intentional flow-subscript divergence (eae79426) needs xmutil-gated mdl_equivalence/test_clearn_equivalence verified-or-updated before B2 PR (same class as #512) #570 -- verify B2-A intentional flow-subscript divergence vs xmutil goldens before PR
C-LEARN: residual Ref.vdf numeric divergence after element-cycle-resolution (SAMPLE UNTIL / INIT-:NA: / numeric tail / NaN-vs-NA) #591 -- C-LEARN residual Ref.vdf numeric divergence (SAMPLE UNTIL / :NA: / tail)
mdl: importer expands single apply-to-all Vensim equations into N identical per-element equations #651 -- MDL importer expands single apply-to-all equations into N identical per-element ones
engine: 2022-era models with quoted literal-period idents silently fail to simulate (no load-time canonical-data migration) #690 -- 2022-era models with quoted literal-period idents silently fail to simulate
engine: freshly imported/created period-named variables may fail to simulate at HEAD (XMILE-name + JSON ident boundaries skip name-context canonicalization, unlike the #690 serde fix) #702 -- freshly imported/created period-named variables may fail to simulate at HEAD
engine: view-element name fields skip literal-period ident handling, so a period-named variable's diagram glyph/label/selection-association can mismatch (·-vs-.-vs-‥) #704 -- view-element name fields skip literal-period ident handling (glyph/label mismatch)
engine: MDL writer round-trip is not idempotent (time_units gain, TIME BASE rewrite, NaN emission, wrong sim_specs model) #848 -- MDL writer round-trip is not idempotent (time_units gain, TIME BASE rewrite, NaN emission)
engine: MDL roundtrip harness coverage gaps let confirmed writer bugs ship undetected #851 -- MDL roundtrip harness coverage gaps let confirmed writer bugs ship undetected
engine: MDL importer subscript/dimension classification is non-deterministic across process hash seeds #859 -- MDL importer subscript/dimension classification is non-deterministic across hash seeds
engine: MDL writer dim_at can silently widen a subrange reduction on misclassified wildcard #860 -- MDL writer dim_at can silently widen a subrange reduction on a misclassified wildcard
engine: MDL export emits per-element graphical-function warnings one-per-element (should aggregate per variable) #861 -- MDL export emits per-element graphical-function warnings one-per-element
engine: MDL writer units field re-import hard-fails on non-unit-expression text #862 -- MDL writer units field re-import hard-fails on non-unit-expression text
to_mdl: initialized DELAY1/DELAY3 emitted without the I suffix (invalid Vensim) #886 -- to_mdl: initialized DELAY1/DELAY3 emitted without the I suffix (invalid Vensim)
engine: MDL parser's binary operator precedence is inverted vs Vensim, masked by xmile_compat's precedence-free emission #914 -- MDL parser binary operator precedence is inverted vs Vensim (masked by xmile_compat)
Engine -- simulation builtins & numeric semantics
Conveyors & queues (Stella conveyor/queue engine)
Conveyor engine: deferred edge-case limitations (GF leak fraction, PREVIOUS(driven_flow), JSON serialization) #865 -- deferred edge-case limitations (GF leak fraction, PREVIOUS(driven_flow), JSON serialization)
Queue engine: secondary/overflow outflow into a second conveyor bypasses that conveyor's batch/capacity rules #868 -- queue: secondary/overflow outflow into a second conveyor bypasses that conveyor's batch/capacity rules
conveyor-engine: per-element <len>/conveyor attributes in <element> blocks have no representation, contra conveyors.md section 10 #904 -- per-element <len>/conveyor attributes in <element> blocks have no representation (conveyors.md 10)
conveyor-engine: a mid-pass ConveyorTransitTooLong leaves belts 0..i already phase_a-advanced; run_to restores nothing #938 -- a mid-pass ConveyorTransitTooLong leaves belts 0..i already phase_a-advanced; run_to restores nothing
engine: conveyor/queue in a sub-model is rejected, but the limitation is undocumented and both error paths cite a phantom conveyors.md 9.3 claim #940 -- conveyor/queue in a sub-model is rejected, undocumented, and both error paths cite a phantom conveyors.md 9.3
test: sir_social_distancing_mixnot.stmx is unsimulatable by any backend (conveyor lives in a sub-model); #924's corpus gate would read the reject as expected #941 -- sir_social_distancing_mixnot.stmx is unsimulatable by any backend; wasm: drop the conveyor Unsupported reject and put conveyor fixtures under the parity harness #924 's corpus gate reads the reject as expected
engine: <leak_integers/> is silently ignored on an exponential-leak conveyor #942 -- <leak_integers/> is silently ignored on an exponential-leak conveyor
xmile: conveyor ignore_earlier_zone_losses is unreachable -- the reader hardcodes false, and nothing writes it #943 -- ignore_earlier_zone_losses is unreachable -- the reader hardcodes false and nothing writes it
engine: a direct read of a conveyor-driven leak flow is rejected, blocking a real Stella model (covid19_severity.stmx) #944 -- a direct read of a conveyor-driven leak flow is rejected, blocking covid19_severity.stmx
wasmgen: conveyor inflow spreadflow placements (even/dest/dist/source) are rejected, not lowered #946 -- wasmgen: conveyor inflow spreadflow placements (even/dest/dist/source) are rejected, not lowered
conveyor-engine: an integer leak flow into an ARRESTED destination belt can still deliver whole units #947 -- an integer leak flow into an ARRESTED destination belt can still deliver whole units
engine: conveyor container slat access (belt[1]) simulates correctly but emits a spurious Error diagnostic #948 -- container slat access (belt[1]) simulates correctly but emits a spurious Error diagnostic
test: <arrest> and <sample> have no conveyor corpus fixture (proto/XMILE round-trip untested) #949 -- <arrest> and <sample> have no corpus fixture (proto/XMILE round-trip untested)
conveyor-engine: a queue-coupled discrete conveyor's slat contents are not integral, contra conveyors.md 6.4 rule 1 #950 -- a queue-coupled discrete conveyor's slat contents are not integral (conveyors.md 6.4 rule 1)
test: the conveyor corpus has no independent numeric oracle -- a lockstep VM+wasm drift would pass every test #951 -- the corpus has no independent numeric oracle -- a lockstep VM+wasm drift would pass every test
test: no corpus fixture for the belt apportion loop or for FIFO backlog / the four batch rules (README says #949 covers them; it does not) #954 -- no corpus fixture for the belt apportion loop or for FIFO backlog / the four batch rules
Engine -- incremental compilation, salsa, cycles & architecture
further think about cycles in models #288 -- further think about cycles in models
sync_from_datamodel creates new salsa inputs on every call, defeating cache reuse #290 -- sync_from_datamodel creates new salsa inputs every call, defeating cache reuse
Thread persistent salsa DB through Project compilation for incremental patch validation #292 -- thread a persistent salsa DB through Project compilation
Route compilation dependency analysis through salsa tracked queries #294 -- route compilation dependency analysis through salsa tracked queries
Incremental compilation gaps: modules, builtins, variable layout #295 -- incremental compilation gaps (modules, builtins, variable layout)
Incremental compiler panics on C-LEARN model (catch_unwind workaround) #363 -- incremental compiler panics on C-LEARN (catch_unwind workaround)
engine: decouple module-aware parse context from per-variable parse cache #372 -- decouple module-aware parse context from the per-variable parse cache
engine: protobuf ProjectPatch/ModelPatch/ModelOperation messages are dead schema #538 -- protobuf ProjectPatch/ModelPatch/ModelOperation messages are dead schema
engine: AiInformation is silently dropped on every protobuf round-trip #539 -- AiInformation is silently dropped on every protobuf round-trip
engine: SourceVariable.model_name is a misnamed correctness trap (it is the Module reference target, empty for non-Module vars -- not the owning model) #558 -- SourceVariable.model_name is a misnamed correctness trap
engine: model.rs init/module dep split uses ASCII '.' but canonical module separator is U+00B7 (dead/incorrect branch) #567 -- model.rs init/module dep split uses ASCII . not the canonical U+00B7
engine: two divergent circular-dependency cycle-gate code paths (System A salsa vs System B model.rs:442) #568 -- two divergent circular-dependency cycle-gate code paths
engine: element-cycle dt-recurrence SCC resolution uses no-input build_var_info wiring; Phase 2 must plumb real module_input_names before consuming ResolvedScc.element_order #573 -- element-cycle dt-recurrence SCC uses no-input build_var_info wiring
engine: no init-phase cycle instrumentation + engine-consistency cross-check (init analogue of dt_cycle_sccs / dt_cycle_sccs_consistency_violation) #574 -- no init-phase cycle instrumentation / engine-consistency cross-check
engine: phase_element_order builds the SCC element graph from per-variable mini-slots -- zero cross-member edges + unsound resolution of genuine multi-variable element cycles (masked by members.len()!=1; Phase 2 Subcomponent B must remove mask) #575 -- phase_element_order SCC graph has zero cross-member edges (unsound)
C-LEARN: post-cycle-gate assemble_simulation fragment-compile failure on synthetic temp-arg helpers #580 -- C-LEARN post-cycle-gate assemble_simulation fragment-compile failure
engine: assembly-stage CompilationDiagnostics are silently discarded (IN_TRACKED_CONTEXT never set true) #581 -- assembly-stage CompilationDiagnostics silently discarded
engine: GraphicalFunctionId u8 overflow in concatenate_fragments (no cross-fragment GF de-duplication) #582 -- GraphicalFunctionId u8 overflow in concatenate_fragments
engine: TempId u8 overflow in incremental fragment assembly on large models (C-LEARN) #583 -- TempId u8 overflow in incremental fragment assembly (large models)
engine: init runlist ordering is nondeterministic for an init-time algebraic cycle through a synthetic-module stock output #595 -- init runlist ordering nondeterministic for an init-time algebraic cycle
engine: VM set_value cannot apply distinct per-instance overrides to two instances of the same shared CompiledModule #616 -- VM set_value can't apply per-instance overrides to a shared CompiledModule
engine: two offset machineries disagree on submodel size with a table-only variable (latent off-by-N) #644 -- two offset machineries disagree on submodel size (latent off-by-N)
engine: lower_implicit_var drops helper-fragment parse errors silently #666 -- lower_implicit_var drops helper-fragment parse errors silently
engine: unguarded panics on dangling module model_name in legacy from_salsa path (module_deps, topo_sort) #806 -- unguarded panics on a dangling module model_name in the legacy from_salsa path
engine: model_ltm_variables warnings duplicated across a module boundary in project error report #866 -- model_ltm_variables warnings duplicated across a module boundary in the project error report
engine: per-model sim_specs are silently lost in protobuf persistence #934 -- per-model sim_specs are silently lost in protobuf persistence
engine: StockFlow sketch compatibility is lost in protobuf persistence #936 -- StockFlow sketch compatibility is lost in protobuf persistence
engine: Vm::into_results() reports slab capacity as step_count, not rows actually saved #939 -- Vm::into_results() reports slab capacity as step_count, not rows actually saved
engine: model-level diagnostics leak the internal ModelError{code: details} Display form into user-facing messages #952 -- model-level diagnostics leak the internal ModelError{code: details} Display form to users
Engine -- performance
Engine -- hygiene, dead code, lint caps & wasm-backend debt
Layout engine
Frontend / diagram / editor
Support creating aliases #43 -- support creating aliases
snap to alignment #47 -- snap to alignment
multi-part flows #51 -- multi-part flows
if diagram is completely(ish) offscreen on current viewport (on didMount) center it #52 -- center the diagram on didMount when it's (mostly) offscreen
when moving a cloud, the flow label jumps around #53 -- flow label jumps around when moving a cloud
show error when diagram is out of sync with equations #54 -- show an error when the diagram is out of sync with equations
every character change in sim specs shouldn't result in a model save #55 -- every character change in sim specs shouldn't trigger a model save
multi-part connectors #60 -- multi-part connectors
'Cancel' not prevent equation from being edited #86 -- 'Cancel' doesn't prevent an equation from being edited
Flows are invisible on creation, if created left or up #110 -- flows are invisible on creation if created left or up
diagram: cleanup Point2D #229 -- diagram: cleanup Point2D
diagram: selection-mutating Editor handlers bypass handleSelection, skipping showDetails reset and onSelectionChanged #529 -- selection-mutating Editor handlers bypass handleSelection
Canvas view changes trigger a full engine round-trip per frame during pan/zoom #707 -- canvas pan/zoom triggers a full engine round-trip per frame
rsbuild/rspack tree-shakes reset.css side-effect import out of src/app production CSS bundle #708 -- rsbuild tree-shakes reset.css out of the production CSS bundle
diagram: component-library CSS modules hardcode light colors with no dark-mode overrides #709 -- component-library CSS hardcodes light colors with no dark-mode overrides
core: view-element fidelity fields dropped on view edits (ViewElementCompat, View.font, group MDL marker, View.name) #811 -- core: view-element fidelity fields dropped on view edits (ViewElementCompat, View.font, group MDL marker, View.name)
diagram: stale pre-edit sim curves shown (no staleness indicator) after an edit makes the model non-simulatable #813 -- stale pre-edit sim curves shown, with no staleness indicator, once an edit makes the model non-simulatable
diagram: units editor accepts Enter, inserting literal newlines into the units string #829 -- units editor accepts Enter, inserting literal newlines into the units string
Flow endpoint detach off a stock has no live preview (only valve moves) #830 -- flow endpoint detach off a stock has no live preview (only the valve moves)
diagram: adjustFlows valve-mirroring is non-idempotent for off-center valves on the min-coordinate endpoint #832 -- source-cloud grab reflects an off-center flow valve on the first drag frame
diagram: applySimSpecChange full-payload read-modify-write can silently revert a concurrent sim-specs commit (lost update) #833 -- applySimSpecChange full-payload read-modify-write can lose a concurrent sim-specs commit
diagram: Button silently drops unknown props (dead data-testid in ModuleDetails) #959 -- Button silently drops unknown props (dead data-testid in ModuleDetails)
app: NewUser marks the Username field invalid for the unrelated terms-agreement error #961 -- app: NewUser marks the Username field invalid for the unrelated terms-agreement error
diagram: sim-specs fields silently revert invalid input with no feedback #962 -- sim-specs fields silently revert invalid input with no feedback
Server / backend / auth & security
Build / lint / type-check tooling
engine: tsbuildinfo cache prevents incremental rebuild after clean #285 -- tsbuildinfo cache prevents incremental rebuild after clean
core: tsconfig.json excludes test files, breaking eslint #441 -- core tsconfig.json excludes test files, breaking eslint
codex-cli 0.121.0 fails to parse user-invokable key in SKILL.md frontmatter, blocking codex-review #462 -- codex-cli 0.121.0 can't parse user-invokable in SKILL.md frontmatter
build: factor shared cross-build infrastructure between simlin-mcp and simlin-serve into scripts/lib/ #473 -- factor shared cross-build infra between simlin-mcp and simlin-serve
docs/sdai-model.schema.json drifts from generator output (no CI gate) #475 -- sdai-model.schema.json drifts from generator output (no CI gate)
build/pysimlin: CFFI extension rebuild silently reuses a stale libsimlin.a (no static-lib dependency tracking) #682 -- CFFI extension rebuild silently reuses a stale libsimlin.a
build: React packages have no rules-of-hooks / exhaustive-deps linting #718 -- React packages have no rules-of-hooks / exhaustive-deps linting
check-docs.py validates path references against the filesystem, so local pre-commit and clean-checkout CI disagree #725 -- check-docs.py makes local pre-commit and clean-checkout CI disagree
examples/svg.mjs and scripts/debug-diagram-gen.mjs fail with ERR_MODULE_NOT_FOUND: @simlin/engine #827 -- examples/svg.mjs and scripts/debug-diagram-gen.mjs fail with ERR_MODULE_NOT_FOUND
build: no dist-level smoke check that @simlin/diagram CSS (theme.css/reset.css) lands in serve-web bundle #828 -- no dist-level smoke check that @simlin/diagram CSS lands in the serve-web bundle
build: eslint builds a full TypeScript Program (parserOptions.project) but enables zero type-aware rules #892 -- eslint builds a full TypeScript Program (parserOptions.project) but enables zero type-aware rules
build: no-undef is enabled on TypeScript files, silently masked by parserOptions.project #893 -- no-undef is enabled on TypeScript files, silently masked by parserOptions.project
build: enable typescript-eslint promise-safety rules -- ~20 real defects are invisible today #894 -- enable typescript-eslint promise-safety rules -- ~20 real defects are invisible today
build: eslint.config.shared.js mutates module-level shared objects (cross-call clobbering, fragile index lookup) #895 -- eslint.config.shared.js mutates module-level shared objects (cross-call clobbering)
build: eslint.config.shared.js requires five packages the root package.json never declares (resolves only via pnpm's virtual store) #896 -- eslint.config.shared.js requires five packages the root package.json never declares
build: TypeScript test files are never type-checked (~55 latent type errors) #899 -- TypeScript test files are never type-checked (~55 latent type errors)
serve: simlin-serve/web builds with Vite while the rest of the repo builds with Rsbuild #901 -- simlin-serve/web builds with Vite while the rest of the repo builds with Rsbuild
build: rstest 'prefer-alias' disables tsconfig paths, silently resolving unaliased @simlin/* imports to stale built lib/ #911 -- rstest prefer-alias disables tsconfig paths, resolving @simlin/* to stale built lib/
build: 108 rustdoc warnings workspace-wide with no CI gate on cargo doc #917 -- 108 rustdoc warnings workspace-wide with no CI gate on cargo doc
build: cargo-deny is blocked by RUSTSEC-2026-0204 in crossbeam-epoch #932 -- cargo-deny is blocked by RUSTSEC-2026-0204 in crossbeam-epoch
build: rstest node environment silently breaks named imports from goog-style CJS modules (google-protobuf *_pb) #956 -- rstest node environment silently breaks named imports from goog-style CJS modules (*_pb)
build: per-package needs-format/format prettier scripts glob generated lib/ output (server, diagram); server also errors on a non-matching tsx pattern #957 -- per-package prettier scripts glob generated lib/ output; server errors on a non-matching pattern
CI / test hygiene
Deploy / ops / release / CLI
MCP / AI
Docs
Deferred to dedicated trackers
Conventions
New bug/improvement: file a normal issue with area label(s) and add a - [ ] #N -- title row to the matching section (or to epic: Loops that Matter (LTM) -- tracking known issues and improvements #488 if LTM).
When closing a sub-issue, tick its box here in the same PR so the human view stays in sync.
Quick-win hunting: gh issue list --label hygiene --state open and gh issue list --label bug --state open are the most self-contained.
Purpose
A single, pinned index of all known open work, so anyone (human or agent) can find a bite-sized thing to pick up without re-surveying the whole tracker. This is the backlog-burndown drive: chip away, tick boxes, keep the count falling.
This is a master index. Two large clusters have their own dedicated trackers and are not re-listed here:
gh issue list --label ltm --state open.Everything else is grouped below by code area. Each row links a standalone issue.
How to use this tracking issue
bug/hygieneitems tend to be self-contained;enhancementitems are larger.gh issue list --label engine --state open,--label frontend,--label backend,--label security,--label layout,--label ci,--label docs,--label mcp,--label compat,--label hygiene.- [ ] #N -- short titlerow to the right section (or to epic: Loops that Matter (LTM) -- tracking known issues and improvements #488 if it is LTM).Recently triaged (2026-07-28)
Recently triaged (2026-06-08)
ErrorBoundarystays a class, by necessity); closed.layout,ci,docs,security,mcpwere created.@simlin/servelocal viewer but the full app still needs Firebase -- left open pending a decision on whether to narrow or close it.Engine -- Vensim / XMILE / MDL / systems-format compat & macros
.stmximport: empty<variables/>, quoted hyphenated idents, connector-supplied external data.datloading (blocks 2 sim tests)write_view_segmentto reduce parameter counttest_mdl_equivalence: native parser emits 3 extra link elements for SIR.mdlINIT = INITIAL(x)false-recursion cycle (blocks C-LEARN expansion)Variable::Moduleinside a macro-body model dropped by the MDL writerRef.vdfnumeric divergence (SAMPLE UNTIL / :NA: / tail)dim_atcan silently widen a subrange reduction on a misclassified wildcardto_mdl: initialized DELAY1/DELAY3 emitted without theIsuffix (invalid Vensim)Engine -- simulation builtins & numeric semantics
_maxaux can shadow user-authored variablesresource_unit/resource_unitsalias not honored during unit inferenceyearwith the implicittimeunit of stocksduplicate_unitdiagnostics emitted once per stdlib module instancenon_negativevariable flag is parsed/stored but never enforcedfull_source_lenhas no numeric end-to-end test gate:NA:mishandled as IEEE NaN (should be the finite sentinel)infcollides with the Inf builtin, silently reads +infinitySUM(m1[d1,*]) + SUM(m2[*]))Conveyors & queues (Stella conveyor/queue engine)
PREVIOUS(driven_flow), JSON serialization)<len>/conveyor attributes in<element>blocks have no representation (conveyors.md 10)ConveyorTransitTooLongleaves belts 0..i already phase_a-advanced;run_torestores nothingsir_social_distancing_mixnot.stmxis unsimulatable by any backend; wasm: drop the conveyor Unsupported reject and put conveyor fixtures under the parity harness #924's corpus gate reads the reject as expected<leak_integers/>is silently ignored on an exponential-leak conveyorignore_earlier_zone_lossesis unreachable -- the reader hardcodes false and nothing writes itcovid19_severity.stmxbelt[1]) simulates correctly but emits a spurious Error diagnostic<arrest>and<sample>have no corpus fixture (proto/XMILE round-trip untested)Engine -- incremental compilation, salsa, cycles & architecture
sync_from_datamodelcreates new salsa inputs every call, defeating cache reuseSourceVariable.model_nameis a misnamed correctness trapmodel.rsinit/module dep split uses ASCII.not the canonical U+00B7build_var_infowiringphase_element_orderSCC graph has zero cross-member edges (unsound)assemble_simulationfragment-compile failureconcatenate_fragmentsset_valuecan't apply per-instance overrides to a shared CompiledModulelower_implicit_vardrops helper-fragment parse errors silentlymodel_namein the legacyfrom_salsapathmodel_ltm_variableswarnings duplicated across a module boundary in the project error reportsim_specsare silently lost in protobuf persistenceVm::into_results()reports slab capacity asstep_count, not rows actually savedModelError{code: details}Display form into user-facing messages #952 -- model-level diagnostics leak the internalModelError{code: details}Display form to usersEngine -- performance
Ident<Canonical>viasalsa::internedto cut hashing/cloningUnitMapcheaply cloneable viaArcRuntimeView::flat_offsetfor sequential iterationsalsa::Updateon bytecode uses PartialEq over f64/NaN (benign missed-backdate)compile_project_incrementaldeep-clones CompiledSimulation each callEngine -- hygiene, dead code, lint caps & wasm-backend debt
#[allow(dead_code)]annotationsvdf.rsexceeds MAX_LINES (6001) breakingpnpm linttools/vdf_xray.pystubs dataset parsing while RustVdfDatasetFileexistsdb.rsis 1 line from the 6000-line cap; split it preemptivelycanonicalizeimplementations (@simlin/core vs /engine)Sim.getRun()returnsRun.links=[](AC1.3 deviation)getValueafterrun_topast FINAL_TIMELayout engine
classify_flow_sidesassumes left-to-right chain directionreorder_attachments_by_positionloses ordering when flows change facesgenerate_layout_with_configis nondeterministic per seed (HashMap order)Frontend / diagram / editor
Point2DhandleSelectionreset.cssout of the production CSS bundleButtonsilently drops unknown props (deaddata-testidin ModuleDetails)Server / backend / auth & security
/auth/providersenables email enumeration; add rate limiting@google-cloud/trace-agent.start()unguarded at boot; dead-end packageuuid9.0.1Build / lint / type-check tooling
tsbuildinfocache prevents incremental rebuild after cleantsconfig.jsonexcludes test files, breaking eslintuser-invokablein SKILL.md frontmattersdai-model.schema.jsondrifts from generator output (no CI gate)libsimlin.acheck-docs.pymakes local pre-commit and clean-checkout CI disagreeexamples/svg.mjsandscripts/debug-diagram-gen.mjsfail with ERR_MODULE_NOT_FOUND@simlin/diagramCSS lands in the serve-web bundleparserOptions.project) but enables zero type-aware rulesno-undefis enabled on TypeScript files, silently masked byparserOptions.projecteslint.config.shared.jsmutates module-level shared objects (cross-call clobbering)eslint.config.shared.jsrequires five packages the rootpackage.jsonnever declaressimlin-serve/webbuilds with Vite while the rest of the repo builds with Rsbuildprefer-aliasdisables tsconfig paths, resolving@simlin/*to stale builtlib/cargo doc#917 -- 108 rustdoc warnings workspace-wide with no CI gate oncargo doc*_pb)lib/output; server errors on a non-matching patternCI / test hygiene
wrld3_resource_unit_alias_should_not_conflictis order-dependent / flaky@simlin/serverJest suite intermittently fails one test under loadsd-component.js(follow-up to embed: cross-origin web component broken -- module worker chunk fetched from app.simlin.com with no CORS/fallback #688)#[ignore]d tier; 7 tests fail there today (one untracked) #915 -- nothing runs the simlin-engine#[ignore]d tier; 7 tests fail there todayDeploy / ops / release / CLI
simlin-engineto crates.io as a standalone crate (external request)print_tsv_comparisonsilently truncate on length mismatch--roundsflag for systems format modelssetuptools_scmfails on themcp-v0.1.4git tag.gcloudignoredoesn't import.gitignore; trips the GAE 10k-file cap.app.prod.yaml(validator and runtime both skip them)engines.node, non-frozen install, staged path untestedconvert -ooutput write is non-atomic and panics on IO errorsMCP / AI
Docs
docs/design-plans/docs/README.mdindexsrc/simlin-cli/CLAUDE.mdhas a banned "Last updated" lineDeferred to dedicated trackers
gh issue list --label ltm --state openConventions
- [ ] #N -- titlerow to the matching section (or to epic: Loops that Matter (LTM) -- tracking known issues and improvements #488 if LTM).gh issue list --label hygiene --state openandgh issue list --label bug --state openare the most self-contained.