FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
Review issues — fhsim

Findings from code review that await an owner decision or an implementation. Each issue is one file in issues/details/, which holds the evidence, the effect, the possible fix, the test that would prove it and the risk. Resolved issues are kept in issues/resolved/ so that their numbers are never reused. Issues that concern a SimObject are also shown on that model's documentation page.

How to work an item

  1. Reproduce the Evidence at the file:line given in the detail file, at HEAD.
  2. For a blocked item, get the owner's answer to "Decision needed" first, then set Status to ready.
  3. Write the proving test, apply the fix, check the Risk paragraph.
  4. git mv the file to issues/resolved/, add a **Resolved:** <commit>, <date> paragraph after the table, delete the matching \xrefitem reviewissue "Review issues" "Review issues" \ref fhsim_core_issue_<ID> lines from the headers, rerun the script and commit it all together.

New issue: --new <slug> "<title>", or add issues/details/<slug>.md with the metadata table but no ID row; the script assigns the next free number, writes the heading and renames the file to <TAG>-<ID>-<slug>.md.

Legend

  • Class
    • BUG code does something other than its documentation or sibling code says
    • KNOWN-LIMITATION behaviour gap by design or omission, document rather than fix silently
    • ARCHITECTURE structure, dependencies, build layout, dead code and stale artefacts
    • DOCUMENTATION missing or wrong documentation or example
    • TEST test coverage or infrastructure
    • API public name (port, state, parameter, registration string) whose change breaks input files
    • SECURITY credentials and supply chain
  • Severity
    • 3 wrong numbers, a crash or a secret exposure reaches a user
    • 2 a documented interface does not work as documented
    • 1 tidiness, readers and tools only
  • Status
    • blocked needs the owner decision named in the file
    • ready fully specified

Open issues (3)

ID Class Severity Status
FHSIM-0028 BUG 2 blocked
FHSIM-0036 BUG 2 ready
FHSIM-0029 BUG 1 ready
  • FHSIM-0028 — Sundials BDF defaults to unpreconditioned SPGMR (maxl 5) for dense models; Newton fails in transients and the step collapses
  • FHSIM-0036 — Auto-selected NearTridiagonal preconditioner fails at t = 0 with CV_LSETUP_FAIL (BDF, default linear solver)
  • FHSIM-0029 — The Sundials summary logs the model's resolved solver type (DenseLU) as the linear solver while SUNDIALS runs SPGMR

Resolved issues (34)

  • FHSIM-0001 (KNOWN-LIMITATION) — FMU export metadata is not reproducible. Resolved: 02eaf6b8, 2026-09-22. File: resolved/FHSIM-0001-fmu-export-metadata-is-not-reproducible.md
  • FHSIM-0002 (BUG) — copySimObjectLibraries uses hasVis where bundlesVisualization is meant. Resolved: e34a721b, 2026-09-22. File: resolved/FHSIM-0002-simobject-vis-suffix-ignores-no-bundled-vis.md
  • FHSIM-0003 (BUG) — A visual FMU omits the plain SimObject modules, so visualization=false fails. Resolved: 39bb410e, 2026-09-21. File: resolved/FHSIM-0003-visual-fmu-omits-plain-simobject-modules.md
  • FHSIM-0004 (BUG) — ExpressionEvaluator rewrites every string attribute, so a SimObject cannot receive structured text. Resolved: 111e4922, 2026-09-22. File: resolved/FHSIM-0004-expression-evaluator-mangles-json-attributes.md
  • FHSIM-0005 (KNOWN-LIMITATION) — OdeFcn writing outside its own state block is unchecked. Resolved: 6d769bef, 2026-09-22. File: resolved/FHSIM-0005-odefcn-local-state-indexing-is-unchecked.md
  • FHSIM-0006 (BUG) — Direct port links reuse an uncleared Jacobian workspace, so one link reads the previous link's numbers. Resolved: e34a721b, 2026-09-22. File: resolved/FHSIM-0006-port-jacobian-workspace-not-cleared-for-direct-links.md
  • FHSIM-0007 (KNOWN-LIMITATION) — The assembler does not check that a port-Jacobian callback wrote only inside its block. Resolved: c0430cd5, 2026-09-22. File: resolved/FHSIM-0007-jacobian-callbacks-write-outside-their-block-unchecked.md
  • FHSIM-0008 (BUG) — –autocopy resolves a model's file references against two different directories, so nothing is bundled and the export can abort. Resolved: d8b3b0ff, 2026-09-23. File: resolved/FHSIM-0008-autocopy-resolves-model-file-references-against-two-directories.md
  • FHSIM-0009 (BUG) — A visual FMU cannot initialise: a SimObject module links Ogre codecs that the FMU layout puts outside its RUNPATH. Resolved: b4a0809d, 2026-09-23. File: resolved/FHSIM-0009-visual-simobject-module-needs-an-ogre-codec-outside-its-runpath.md
  • FHSIM-0010 (TEST) — The Jacobian checker samples only states near the initial condition. Resolved: b005ec27, 2026-09-24. File: resolved/FHSIM-0010-jacobian-check-samples-only-near-initial-state.md
  • FHSIM-0011 (TEST) — A partial Jacobian in one SimObject switches the Jacobian check off for the whole scenario. Resolved: b005ec27, 2026-09-24. File: resolved/FHSIM-0011-jacobian-check-cannot-exempt-documented-partial-blocks.md
  • FHSIM-0012 (TEST) — The Jacobian checker never places the object under test at a non-zero state offset. Resolved: b005ec27, 2026-09-24. File: resolved/FHSIM-0012-jacobian-check-never-uses-nonzero-state-offset.md
  • FHSIM-0013 (BUG) — The Jacobian checker evaluates analytical Jacobians against port caches from another state. Resolved: b5dce5b1, 2026-09-24. File: resolved/FHSIM-0013-jacobian-check-reads-stale-port-caches.md
  • FHSIM-0014 (BUG) — The implicit Euler integrator evaluates the analytical Jacobian against port caches from another state. Resolved: d509dcea, 2026-09-24. File: resolved/FHSIM-0014-implicit-euler-analytic-jacobian-reads-stale-port-caches.md
  • FHSIM-0015 (BUG) — The SUNDIALS Jacobian callback assumes the port caches describe the state it is handed. Resolved: 9a8e820c, 2026-09-24. File: resolved/FHSIM-0015-sundials-jacobian-port-cache-state-unverified.md
  • FHSIM-0016 (BUG) — The FMU build key and the archive can disagree about the bundled documentation. Resolved: 8c9e382b, 2026-09-24. File: resolved/FHSIM-0016-fmu-documentation-build-key-and-archive-can-disagree.md
  • FHSIM-0017 (TEST) — The state-offset shift check assumes a layout it does not verify. Resolved: e8948f3e, 2026-09-24. File: resolved/FHSIM-0017-jacobian-offset-shift-guard-does-not-check-layout.md
  • FHSIM-0018 (TEST) — A scope override that names a stateless SimObject is accepted and exempts nothing. Resolved: 2556f64d, 2026-09-24. File: resolved/FHSIM-0018-jacobian-override-on-stateless-object-accepted.md
  • FHSIM-0019 (TEST) — A tighter scope override is not applied to cross-coupling entries, and is counted as relaxed. Resolved: 8a90bca5, 2026-09-24. File: resolved/FHSIM-0019-jacobian-scope-override-cannot-tighten-cross-coupling.md
  • FHSIM-0020 (TEST) — SUNDIALS port-cache probe proves fresh values, not that the RHS buffer is still alive. Resolved: 7af90b83, 2026-09-24. File: resolved/FHSIM-0020-sundials-jacobian-probe-proves-values-not-buffer-liveness.md
  • FHSIM-0021 (TEST) — The regression comparison RMS-es away non-finite and subnormal samples in the run or the reference. Resolved: 09476238, 2026-09-29. File: resolved/FHSIM-0021-harness-rms-hides-non-finite-and-subnormal-samples.md
  • FHSIM-0022 (ARCHITECTURE) — Nothing checks that a published port sample is finite and normal, so an uninitialised port-backing member is silent. Resolved: Will not fix, 2026-09-30 (owner decision: no run-time port-sample check will be added). File: resolved/FHSIM-0022-no-check-that-published-port-samples-are-finite.md
  • FHSIM-0023 (API) — SimObject has no render teardown hook, so a SimObject cannot release its Ogre objects before the Ogre root is gone. Resolved: 82b4652a, 2026-09-29. File: resolved/FHSIM-0023-simobject-renderrelease-hook.md
  • FHSIM-0024 (TEST) — The Jacobian checker's model rebuilds cannot suppress SimObject file output, so a file a SimObject writes during the run is clobbered or duplicated. Resolved: f1d3bf1d, 2026-09-29. File: resolved/FHSIM-0024-jacobian-checker-rebuilds-clobber-simobject-file-output.md
  • FHSIM-0025 (BUG) — Shared resources are not published until after InitialConditionSetup, so no SimObject can use one while computing its initial conditions. Resolved: f4090d17, 2026-09-29. File: resolved/FHSIM-0025-shared-resources-unresolved-during-initial-condition-setup.md
  • FHSIM-0026 (BUG) — –autocopy warns of a bundle-name clash whenever one file is referenced twice. Resolved: dc1c7db5, 2026-09-29. File: resolved/FHSIM-0026-autocopy-warns-on-repeated-reference.md
  • FHSIM-0027 (DOCUMENTATION) — The default real-time-factor tooltip names F4 for the simulation controls, which are on F3. Resolved: 50f9fece, 2026-09-29. File: resolved/FHSIM-0027-rtf-tooltip-names-f4-for-sim-controls.md
  • FHSIM-0030 (BUG) — The SUNDIALS Jacobian callback leaves J unfilled when the model withdraws its Jacobian during the run. Resolved: e8f634d6, 2026-09-28. File: resolved/FHSIM-0030-sundials-jacobian-callback-leaves-j-unfilled-when-claim-withdrawn.md
  • FHSIM-0031 (BUG) — A model with more than 46 340 states fails model assembly, whatever the integrator. Resolved: ce8d0484, 2026-09-28. File: resolved/FHSIM-0031-model-above-46340-states-fails-assembly.md
  • FHSIM-0032 (ARCHITECTURE) — Every model allocates n × n Jacobian buffers at setup, also for explicit integration. Resolved: 3a187c5b, 2026-09-28. File: resolved/FHSIM-0032-every-model-allocates-n-squared-jacobian-buffers.md
  • FHSIM-0033 (KNOWN-LIMITATION) — The dense Jacobian paths index an n × n array with int, which overflows above 46 340 states. Resolved: a9aca817, 2026-09-28. File: resolved/FHSIM-0033-dense-jacobian-paths-index-with-int.md
  • FHSIM-0034 (ARCHITECTURE) — The numerical Jacobian pass perturbs every column and overwrites zeros of analytical blocks. Resolved: d8fcf7f2, 2026-09-28. File: resolved/FHSIM-0034-numerical-jacobian-pass-perturbs-every-column.md
  • FHSIM-0035 (ARCHITECTURE) — The reverse (row) colouring costs O(n · nnz) at every model setup and nothing reads it. Resolved: 77262664, 2026-09-29. File: resolved/FHSIM-0035-reverse-colouring-is-quadratic-and-unused.md
  • FHSIM-0037 (API) — ISimObjectCreator::IsFileOutputSuppressed() is pure virtual, so every ISimObjectCreator implementer outside fhsim stops compiling. Resolved: 34d71a51, 2026-10-03 (red before the fix: ISimObjectCreator.CreatorWithoutFileOutputOverride_IsNotAbstract and _DoesNotSuppressFileOutput failed with std::is_abstract_v<CreatorWithoutFileOutputFlag> true; green after it; full ctest 334/334). File: resolved/FHSIM-0037-is-file-output-suppressed-is-pure-virtual.md