|
FhSim
3.1.0
Marine systems simulation
|
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.
file:line given in the detail file, at HEAD.blocked item, get the owner's answer to "Decision needed" first, then set Status to ready.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.
BUG code does something other than its documentation or sibling code saysKNOWN-LIMITATION behaviour gap by design or omission, document rather than fix silentlyARCHITECTURE structure, dependencies, build layout, dead code and stale artefactsDOCUMENTATION missing or wrong documentation or exampleTEST test coverage or infrastructureAPI public name (port, state, parameter, registration string) whose change breaks input filesSECURITY credentials and supply chain3 wrong numbers, a crash or a secret exposure reaches a user2 a documented interface does not work as documented1 tidiness, readers and tools onlyblocked needs the owner decision named in the fileready fully specified| ID | Class | Severity | Status |
|---|---|---|---|
| FHSIM-0072 | TEST | 2 | ready |
| FHSIM-0073 | DOCUMENTATION | 2 | ready |
| FHSIM-0108 | KNOWN-LIMITATION | 2 | blocked |
| FHSIM-0152 | BUG | 2 | blocked |
| FHSIM-0070 | BUG | 1 | ready |
| FHSIM-0074 | TEST | 1 | ready |
| FHSIM-0113 | BUG | 1 | ready |
| FHSIM-0115 | BUG | 1 | ready |
| FHSIM-0119 | BUG | 1 | ready |
| FHSIM-0147 | TEST | 1 | ready |
| FHSIM-0148 | BUG | 1 | ready |
| FHSIM-0167 | KNOWN-LIMITATION | 1 | ready |
| FHSIM-0174 | KNOWN-LIMITATION | 1 | ready |
| FHSIM-0175 | TEST | 1 | ready |
<Var Value=""> is exported as a Real parameter with no valuesSize_<port> with std::stoi, so Size_y="2x" reads 202eaf6b8, 2026-09-22. File: resolved/FHSIM-0001-fmu-export-metadata-is-not-reproducible.mde34a721b, 2026-09-22. File: resolved/FHSIM-0002-simobject-vis-suffix-ignores-no-bundled-vis.md39bb410e, 2026-09-21. File: resolved/FHSIM-0003-visual-fmu-omits-plain-simobject-modules.md111e4922, 2026-09-22. File: resolved/FHSIM-0004-expression-evaluator-mangles-json-attributes.md6d769bef, 2026-09-22. File: resolved/FHSIM-0005-odefcn-local-state-indexing-is-unchecked.mde34a721b, 2026-09-22. File: resolved/FHSIM-0006-port-jacobian-workspace-not-cleared-for-direct-links.mdc0430cd5, 2026-09-22. File: resolved/FHSIM-0007-jacobian-callbacks-write-outside-their-block-unchecked.mdd8b3b0ff, 2026-09-23. File: resolved/FHSIM-0008-autocopy-resolves-model-file-references-against-two-directories.mdb4a0809d, 2026-09-23. File: resolved/FHSIM-0009-visual-simobject-module-needs-an-ogre-codec-outside-its-runpath.mdb005ec27, 2026-09-24. File: resolved/FHSIM-0010-jacobian-check-samples-only-near-initial-state.mdb005ec27, 2026-09-24. File: resolved/FHSIM-0011-jacobian-check-cannot-exempt-documented-partial-blocks.mdb005ec27, 2026-09-24. File: resolved/FHSIM-0012-jacobian-check-never-uses-nonzero-state-offset.mdb5dce5b1, 2026-09-24. File: resolved/FHSIM-0013-jacobian-check-reads-stale-port-caches.mdd509dcea, 2026-09-24. File: resolved/FHSIM-0014-implicit-euler-analytic-jacobian-reads-stale-port-caches.md9a8e820c, 2026-09-24. File: resolved/FHSIM-0015-sundials-jacobian-port-cache-state-unverified.md8c9e382b, 2026-09-24. File: resolved/FHSIM-0016-fmu-documentation-build-key-and-archive-can-disagree.mde8948f3e, 2026-09-24. File: resolved/FHSIM-0017-jacobian-offset-shift-guard-does-not-check-layout.md2556f64d, 2026-09-24. File: resolved/FHSIM-0018-jacobian-override-on-stateless-object-accepted.md8a90bca5, 2026-09-24. File: resolved/FHSIM-0019-jacobian-scope-override-cannot-tighten-cross-coupling.md7af90b83, 2026-09-24. File: resolved/FHSIM-0020-sundials-jacobian-probe-proves-values-not-buffer-liveness.md09476238, 2026-09-29. File: resolved/FHSIM-0021-harness-rms-hides-non-finite-and-subnormal-samples.mdresolved/FHSIM-0022-no-check-that-published-port-samples-are-finite.md82b4652a, 2026-09-29. File: resolved/FHSIM-0023-simobject-renderrelease-hook.mdf1d3bf1d, 2026-09-29. File: resolved/FHSIM-0024-jacobian-checker-rebuilds-clobber-simobject-file-output.mdf4090d17, 2026-09-29. File: resolved/FHSIM-0025-shared-resources-unresolved-during-initial-condition-setup.mddc1c7db5, 2026-09-29. File: resolved/FHSIM-0026-autocopy-warns-on-repeated-reference.md50f9fece, 2026-09-29. File: resolved/FHSIM-0027-rtf-tooltip-names-f4-for-sim-controls.mdtests/integrator/sundials/SundialsLinearSolverSelection_test.cpp, 2026-10-13. Owner ruling 2026-10-13: option (a). Without a <LinearSolver> element, a model whose linear solver resolves to DenseLU runs the SUNDIALS DENSE direct solver when <Jacobian Type> is dense (the default) and DenseJacobianFits(n); otherwise SPGMR stays and a warning names why (ChooseLinearSolver in SundialsSolverBuilder.cpp, for CVODES and ARKODE DIRK; SundialsSettings::linearSolverGiven records the element). An explicit <LinearSolver Type="SPGMR"/> is kept. Test SundialsLinearSolverSelection.NoLinearSolverElement_DenseLuModel_RunsSundialsDense (40-state dense model, BDF, no <LinearSolver>): failed before with 147 linear iterations and no DENSE in the log, passes with 0 linear iterations and at least one Jacobian evaluation; ExplicitSpgmr_DenseLuModel_KeepsSpgmr pins the explicit choice. Moved baseline: tests/golden/IntegratorConfig/IntegratorConfig_Adams.csv (Adams without <LinearSolver>, now DENSE; same 29 output rows at different internal-step times), in the separate commit "Baselines for FHSIM-0028". Not cured (recorded by the ruling): the two DENSE observations under "Reproduction and numbers", the stiffer variant (k = 1e2) that aborts at t = 2.59 s and the 0.1 s blend that still dips to 5e-4 … 1.5e-3 s, remain undiagnosed.. File: resolved/FHSIM-0028-sundials-bdf-default-spgmr-unpreconditioned-dense.mdtests/integrator/sundials/SundialsLinearSolverSelection_test.cpp, 2026-10-13. Owner ruling 2026-10-13: log the SUNDIALS solver created plus the model's resolved type, and warn at the silent path. The summary line is now Linear solver : SPGMR (maxl 5, unpreconditioned); model solver type DenseLU (or preconditioner <name>); DENSE and BAND print as before (FhIntegratorSundials::DescribeLinearSolver). SetupSpgmrPreconditioner logs a warning when the model's solver type has no structural preconditioner and SPGMR runs unpreconditioned. Test SundialsLinearSolverSelection.ExplicitSpgmr_DenseLuModel_LogNamesSpgmrAndTheModelSolverType: failed before (the log read Linear solver : DenseLU, no warning), passes after.. File: resolved/FHSIM-0029-sundials-log-names-model-solver-not-sundials-solver.mde8f634d6, 2026-09-28. File: resolved/FHSIM-0030-sundials-jacobian-callback-leaves-j-unfilled-when-claim-withdrawn.mdce8d0484, 2026-09-28. File: resolved/FHSIM-0031-model-above-46340-states-fails-assembly.md3a187c5b, 2026-09-28. File: resolved/FHSIM-0032-every-model-allocates-n-squared-jacobian-buffers.mdint, which overflows above 46 340 states. Resolved: a9aca817, 2026-09-28. File: resolved/FHSIM-0033-dense-jacobian-paths-index-with-int.mdd8fcf7f2, 2026-09-28. File: resolved/FHSIM-0034-numerical-jacobian-pass-perturbs-every-column.md77262664, 2026-09-29. File: resolved/FHSIM-0035-reverse-colouring-is-quadratic-and-unused.mdtests/integrator/sundials/SundialsLinearSolverSelection_test.cpp, 2026-10-13. Owner ruling 2026-10-13: fix as a plain bug, no broader DENSE rule. Cause: NearTridiagonalAdapter (src/engine/integrator/linear/LinearSolverAdapters.h) had no FactorizeFromModel, so the ILinearSolver default returned false and FhIntegratorSundials::PrecSetup, which calls only FactorizeFromModel and RefactorizeWithGamma, returned -1 on its first call (CV_LSETUP_FAIL). The detection is not at fault: DetectStructure prefers the coarsest chain, so bandwidth=0, extra_blocks=0 is a valid two-block chain. Fix: NearTridiagonalAdapter::FactorizeFromModel evaluates the dense Jacobian through IJacobianSystem::OdeJacobian and factorizes it as Factorize does; PrecSetup logs an error naming the preconditioner, t and gamma when a setup fails. Test SundialsLinearSolverSelection.NoLinearSolverElement_NearTridiagonalModel_RunsToTheEndAccurately (40-state ring, BDF, no <LinearSolver>): failed before with CVode() failed with flag = -6 at t = 0, passes after and matches exp(A t) x0 to 1e-5; PrecSetupFailure_LogsThePreconditionerName pins the log.. File: resolved/FHSIM-0036-sundials-neartridiagonal-preconditioner-lsetup-fail-at-t0.md34d71a51, 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.md060e9e23, 2026-10-07 (red before the fix: InputReaderResolutionTest.AbsoluteFileName_OutsideBothSearchDirs_OpensThatFile failed with the path <cwd>//<absolute path>; green after it; testFhSim 685/685, full ctest 334/334). File: resolved/FHSIM-0038-inputreader-absolute-path.md5630a0f9 and 9424e96c, 2026-10-08 (the 4-object ring: 0.09 s on 1 core, 44.0 s on 8 before; 0.09 s on both after, output byte-identical. Model-scale Alfredo3 trawl: 77 s on 1 core, 2290 s on 8 before; 74 s and 70 s after. fhsim-parallel-perf 8 cores 1.0x serial; testFhSim 718/718 (685 before, 33 new), full ctest 335/335; trawlwriter's 8-core byte-identity tests pass. Table in fhsim_workspace/features/threadpool/FEATURE.md). File: resolved/FHSIM-0039-numcores-small-models-slow.mda4663c51, 2026-10-08 (1 ms spin and chained wake-ups: eight 170 us SimObjects 2.4 s on 8 cores, 4.0 s before, 14.8 s on one; sixteen 4.5 s, 6.3 s before. Thresholds: 4-object floor removed; 250 us kept, joined by a 1.5x speed-up bound; trawl models unchanged and 1- and 8-core output byte-identical. ThreadManager removed, Task kept. testFhSim 724/724, ctest 335/335. Tables in fhsim_workspace/features/threadpool-tuning/FEATURE.md). File: resolved/FHSIM-0040-parallel-thresholds-pool-spin.mdac758259, 2026-10-10 (option 1, owner decision: ReleaseSimulation_, shared by Terminate, Reset and the destructor, joins the worker after fpFreeContext and before m_dll.Unload(); Reset restarts it; SingleThreadWork::retire is idempotent. Test fmu-single-thread-work. Linux Release no-vis ctest 336/336, -L fmu 255/255, FMU directional-derivative and lifecycle tests --repeat until-fail:20 142/142; Debug no-vis the same: 336/336, 255/255, 142/142. The Windows crash was never reproduced, so the fix is unverified there; the libxml2 callback still runs asynchronously on a thread-pool thread, so a short window after the join remains, as noted under Possible fix). File: resolved/FHSIM-0041-fmu-unloads-simdll-before-worker-exits.mdtests/fmu/FhsimDllBridge_test.cpp, 2026-10-11 (as proposed: Load calls Unload() before it throws on missing exports, FhsimDllBridge.h documents that a throw leaves the bridge unloaded, and the unreachable IsLoaded() check after Load in ExitInitializationMode is removed. Test fmu-dll-bridge, which loads fhsim_partial_export_library, a module exporting only InitFromFile and FreeFhSimContext; it failed before the fix with IsLoaded() true and fpInitFromFileNoVis/fpFreeContext set). File: resolved/FHSIM-0042-fmu-dllbridge-load-leaves-handle-on-missing-exports.mdInputReaderPerf.DISABLED_ReadingEveryElement_ScalesLinearlyWithTheElementCount (tests/core/fhUtilities/InputReader_test.cpp), 2026-10-13. Owner ruling 2026-10-13 (MARE-0211): fix upstream in fhsim, bit-identical. fhsim::xml::detail::IndexedFirstChildElement(doc, parent, name) (internal header src/simobject/utilities/XmlChildIndex.h, not installed; no public API change) returns exactly parent.FirstChildElement(name): on the first call for a parent it indexes the first child element of each name, and a name missing from the index falls back to the scan (so children added later with AddChild, which appends, are found). InputReader::GetElement (both overloads) resolves every path component through it. The index lives in the libxml2 document's _private field and is freed by ~XmlDoc and the move assignment, so neither InputReader nor XmlDoc changes layout: consumer binaries built against 3.3.5, which Conan's semver_mode treats as compatible, stay valid. A cache of only the last resolved path, as MARE-0211 first proposed, would not be enough: each El<i> is a new path, and resolving it from the root still scans i siblings. Timing, InputReaderPerf (two integer attributes read from each of n sibling elements, best of three, Release): before 5 000 elements 0.276 s, 20 000 elements 4.35 s (ratio 15.8, quadratic); after 0.0015 s and 0.0072 s (ratio 4.8). The test fails before (ratio above 8) and passes after; it is DISABLED_ in fhsim and runs in the ctest entry fhsim-inputreader-perf (label perf). InputReaderElementLookup.* pins the semantics: the first of duplicate sibling names, a child added after a lookup, every element of 500 siblings read in reverse order.. File: resolved/FHSIM-0043-inputreader-getelement-quadratic-in-siblings.mdDISABLED_ from FmuPortMappingReader.RemovedEngineElement_ThrowsNamingFhSim3 and RemovedSundialsElement_ThrowsNamingFhSim3 (tests/fmu/FmuPortMappingReader_test.cpp), 2026-10-15. Owner rulings 2026-10-15, E9-Q0 = a and E9-Q1 = 1. FmuPortMappingReader::Read throws std::runtime_error(fhsim::removedIntegratorElementMessage(tag)) when the simulation element has <Engine> or <Sundials>; the engine reports the same text (moved into src/engine/core/SimulationElementResolver.h by the preceding refactor commit, pinned whole by FhsimNextIntegrationTest.RemovedEngineElement_ThrowsWithMigrationHint). Every export and --print-build-key passes through Read. Red before (both tests: <no throw>), green after. The dead dialect branches in the exporter and the runtime stay until plan E9 task 10.. File: resolved/FHSIM-0044-exporter-accepts-removed-integrator-dialect.mdDISABLED_ from InterfaceGuessingService.FhSim3InputSelectingPorts_AddsFmiOutputObject (tests/fmu/InterfaceGuessingService_test.cpp, ctest fmu-interface-guessing), 2026-10-15. Owner ruling 2026-10-15, E9-Q5 = 1. When the simulation element has neither <Engine> nor <Sundials>, GuessOutputInterface takes the selection from the Select of the first <OBSERVERS><FileOutput>; the objects:all, port and state checks apply to it unchanged (FhSim3InputSelectingAllObjects_Returns2AndAddsNothing). Red before (returned 3), green after. doc/user/using-the-api/fmu-export.md says where the selection is read.. File: resolved/FHSIM-0045-guess-output-interface-fails-for-fhsim3-input.mdDISABLED_ from FmuPortMappingReader.FixedStepMethodWithoutStep_ExportThrows (tests/fmu/FmuPortMappingReader_test.cpp), 2026-10-15. Owner ruling 2026-10-15, E9-Q2 = 3. FmuPortMappingReader::Read throws when <Integrator Method> (attribute name matched in any case, as the engine does) names a method that runs only with a fixed step and <StepControl Step> is missing or not positive. The list is fhsim::methodNeedsFixedStep in the header-only src/engine/core/FixedStepMethods.h, which the exporter compiles without the engine; IntegratorConfigFactory.Registry_FixedStepMethods_MatchTheSolvers (fhsim) compares it with every row and alias of the engine's method table and the solver each Engine row builds (a list missing the alias StableSolver fails it). Red before (<no throw>), green after. Variable-step methods keep the start value 0.0 (VariableStepMethodWithoutStep_PublishesZeroAsDefault, green before and after); doc/user/using-the-api/fmu-export.md documents it as "the integrator's own step control".. File: resolved/FHSIM-0046-fmu-publishes-zero-integrator-timestep.mdFmuPortMappingReader.InitialStatesFileInAnySpelling_PublishesIt and FmuResourceCopier.InitialStatesFileInOtherSpelling_IsBundledAndRewritten, 2026-10-15. fhsim::isInitialStatesFileAttribute / initialStatesFileAttributeName (src/engine/core/SimulationElementResolver.h, later in the model input module) apply the engine's rule (any case, InitialStatesFile or initial_states_file, last match counts). The exporter reads the file by it and --autocopy rewrites the attribute under the name the model uses; the runtime writes the host's state_file under that name too, or InitialStatesFile when there is none. Red before (state_file start { "" } for the other spellings; file not bundled), green after.. File: resolved/FHSIM-0047-exporter-runtime-read-initial-states-file-by-one-spelling.mdDISABLED_ from FmuPortMappingReader.VariableInInitialStatesFile_PublishesTheSubstitutedFile and VariableInMethod_FixedStepMethodWithoutStepThrows, 2026-10-15. Owner ruling 2026-10-15. fhsim::ModelInput reads <Integrator Method> and the initial states file after the engine's $Name substitution (fhsim::substituteVariables, moved from Parse::SubstituteVariable by the preceding refactor commit; the <VARIABLES> map by the engine's rule, Var/var, first definition counts). An undefined name throws Undefined variable: <text>. So the exporter publishes the substituted state_file, --autocopy bundles the substituted file, and the fixed-step rule sees the substituted method. Red before ({ "$ic" }; <no throw>), green after; ModelInput.IntegratorAttributes_* red before, green after. In the engine the reads see text Parse has already substituted, so the second pass changes nothing unless a variable's value itself holds a $.. File: resolved/FHSIM-0048-exporter-does-not-substitute-variables-in-integrator-attributes.mdPolicy="hybrid" and no model Jacobian the line reads hybrid (resolved: numeric (SUNDIALS built-in)). Test SolverPlanSummary.HybridPolicyWithoutAnySimObjectJacobian_NamesTheNumericSourceThatRuns: failed before (hybrid (resolved: hybrid)), passes after; table row Bdf_PolicyHybrid_NoneDense updated in the same commit.. File: resolved/FHSIM-0049-hybrid-policy-summary-names-a-source-that-does-not-run.mdCreateStructuralSolver (LinearSolverFactory) returns nullptr when the solver it built (after its fallbacks) cannot factorize from the model; the solver plan then takes the existing "Preconditioner setup failed, falling back to the Jacobi diagonal preconditioner" path. Test PrecSetupPerAdapter.StructuralTypeWithoutPattern_FallsBackToJacobiAndRunsToTheEnd: failed before (preconditioner "DenseLU", CVode flag -6 at t = 0), passes after. Plan E8 phase 2 (IStructuralSolver) makes the rule a compile-time one.. File: resolved/FHSIM-0050-structural-preconditioner-type-without-pattern-installs-denselu.mdSundialsMatrixCopy::CopyIntoSunMatrix in SundialsMatrixCopy.h/.cpp, tests in SundialsMatrixCopy_test.cpp; the no-entries sparse case is pinned as is: J is left untouched). File: resolved/FHSIM-0051-copyintosunmatrix-free-function.mdIJacobianSystem::GetPortJacobianLinks() and GetSelfPortCouplingLinks(), implemented by JacobianAssembler, which is what GetJacobianSystem() returns; the two tests keep their cast). File: resolved/FHSIM-0052-portjacobianblockchecker-concrete-cast.mdresolved/FHSIM-0053-solverplan-lineartext-compares-string.mdunknown CVODE/ARKODE option: <key>. Test: tests/integrator/options/Sundials_OptionApplier_test.cpp.. File: resolved/FHSIM-0054-sundials-legacy-keys-misleading-error.mdresolved/FHSIM-0055-adjoint-sensitivity-leaves-result-unzeroed-without-states.mdresolved/FHSIM-0056-compress-threshold-only-in-dense-pass.mdresolved/FHSIM-0057-fill-path-fd-own-block-differs.mdJacobianFillPathDifferences.MixedOwnershipBlock_PathsAgree is enabled and MixedOwnershipBlock_EveryPassGivesTheTotal replaces the pin. Not covered: a mixed diagonal block, filed as FHSIM-0059.. File: resolved/FHSIM-0058-mixed-ownership-blocks-only-in-dense-pass.mdresolved/FHSIM-0059-mixed-diagonal-block-self-coupling-dense-only.mdresolved/FHSIM-0060-nonanalytical-block-adds-analytical-self-coupling-again.mdresolved/FHSIM-0061-shifted-offset-check-loses-input-path.mdresolved/FHSIM-0062-test-observer-stores-every-step.mdresolved/FHSIM-0063-capturing-observer-stores-every-step.mdnumericalPassFollows argument and its test are gone; JacobianBlockPlan.MixedBlockExists_ThenSomeColumnIsDifferenced stays as the proof that the two rules agree.. File: resolved/FHSIM-0064-dense-pass-numerical-guard-always-true.mdresolved/FHSIM-0065-b1-sensitivity-stale-caches.mdresolved/FHSIM-0066-accepted-step-stale-ports.mdresolved/FHSIM-0067-b2-assembly-stale-caches.mdresolved/FHSIM-0068-error-ratio-drops-nan.md3e5ed8c5 and 0a0888c9, 2026-10-22 (option 2: slow process, not a hang). Every test timeout now comes from fh_test_timeout, with a base of at least 240 s, so CI's scale and the Debug factor apply to all of them. Settled by the Windows Release runs of conan create (ctest --parallel 24, nothing else on the machine): hud-layout, which uses no threads, ran its 27 checks in 0 ms each yet took 16.6 s, 45.6 s and 98.5 s in three runs, and provider-observer timed out at 25 s with every check finished in under 0.3 s. The time is spent outside the code under test. With the new timeouts, both Release configurations pass (272 of 272 and 273 of 273).. File: resolved/FHSIM-0069-fmu-dll-bridge-hangs-under-load.mdb87d79f3, 2026-10-22 (option 1, ADR 0012 step b: every libxml2 call of the FMU module runs on the instance's worker, which calls xmlCleanupParser for the module's copy before the last instance's worker is retired). Verified on Windows with libxml2 2.15.4: the FMPy host test passes 3 runs out of 3 and removes every extraction folder; the FMU test suite has no crash. fhsim requires libxml2/[~2.15] on every platform again.. File: resolved/FHSIM-0071-fmu-dll-libxml2-215-host-thread-crash.md5350e7bf, 2026-10-23; on main through the typed shared resources of ADR 0013 (merged into the same release). FhVis, fhVisDll and FhSimUI register the key with FhSimMgr::SetTypedPtr<T> (FhVisualization or FhVisualizationSDL); a SimObject reads it with ISimObjectCreator::GetSharedResource<T>, which gives nullptr for the other host's type and reports it as an error. NFhSim.h lists which host registers which type. Test: VisualizationKey.* (testFhVisSDL, the real types, no display). The probe API this fix first added (FindTypedSharedResource, FhSimMgr::GetTypedPtr) was dropped in the merge with ADR 0013, which covers the same need.. File: resolved/FHSIM-0075-fhvisualization-key-holds-two-unrelated-types.mdresolved/FHSIM-0076-fmu-setfmustate-after-terminate.mdresolved/FHSIM-0077-fmu-exporter-ignores-savetofile.mdresolved/FHSIM-0078-fmu-exporter-resource-copy-failures.mdresolved/FHSIM-0079-fmu-exporter-zip-patch-unchecked.mdresolved/FHSIM-0080-fmu-ctor-leaks-live-instance-count.mdresolved/FHSIM-0081-dll-abi-null-names-throw.mdRunAndCapture in 05262ed3 (R1), test 30544212, 2026-10-24. File: resolved/FHSIM-0082-install-simulationmanagerfactory-and-observer-plugin-headers.mdfeature/fhsim-review-fixes-numerics, 2026-10-24. File: resolved/FHSIM-0083-sparse-newton-matrix-misses-unlisted-diagonal.mdresolved/FHSIM-0084-fmu-exporter-unchecked-page-writes.mdresolved/FHSIM-0090-fixed-step-nan-not-checked.mdresolved/FHSIM-0091-ukf-sqrt-negative-variance-gives-nan.mdresolved/FHSIM-0092-kalman-period-truncated-to-whole-steps.mdInputValueError in 78ab24c3 (R3, tests 29b9bbb8, 88b87d67); strict reads in a3b33f6f, 065767da, 67ed534a, eee97cc9, 697f3bde (R4, tests e286a2e8); library exceptions reported by the engine in cd4c0929 and fd068029; <SundialsExtra> overflow/inf kept in 65f6bb3e (R6). The model-library exception after construction is left open as FHSIM-0102, 2026-10-24. File: resolved/FHSIM-0093-lenient-number-reads-remain.mdresolved/FHSIM-0094-strict-parameter-text.mdresolved/FHSIM-0095-input-files-fail-loudly.mdresolved/FHSIM-0100-observer-printer-thread-lifetime.mdresolved/FHSIM-0101-batchpool-stopworkers-thread-count-flaky.mdresolved/FHSIM-0102-model-library-exception-after-construction.md36c5feb3, 2026-10-25. File: resolved/FHSIM-0103-licenser-internals-beside-main.md3b5f4588, 2026-10-25. File: resolved/FHSIM-0104-licence-checks-untested.md11b69270, 2026-10-25. File: resolved/FHSIM-0105-licence-allows-one-instance-too-many.md0f56cd9b, 2026-10-25. File: resolved/FHSIM-0106-licence-manager-untested-and-short-name-wraps.md02f259cd, 2026-10-25. File: resolved/FHSIM-0107-licence-reader-trusts-every-read.md04a40b52, 2026-10-25. File: resolved/FHSIM-0109-licenser-exits-without-message-and-destroys-file.md9b11e91b, 2026-10-25. File: resolved/FHSIM-0110-licenser-days-argument-throws-outside-try.md5--3 gives 2). Resolved: feature r2-wrong-numbers, commit "Behaviour change: ExpressionEvaluator folds a run of signs into one (R4-01, FHSIM-0111)", 2026-10-25. File: resolved/FHSIM-0111-expression-sign-run-after-minus.md<Var> text that starts with a number is exported as that number (FMU export). Resolved: feature r2-wrong-numbers, commit "Behaviour change: FMU export reads a whole number only (R5-01, FHSIM-0112)", 2026-10-25. File: resolved/FHSIM-0112-var-text-with-numeric-prefix.mdresolved/FHSIM-0114-set-fmu-state-keeps-old-parameters.mdresolved/FHSIM-0116-fhexe-bad-log-path-aborts.mdresolved/FHSIM-0117-network-protocol-failure-paths.mdresolved/FHSIM-0118-network-provider-waits-forever.mdresolved/FHSIM-0120-plugin-observer-exception-outlives-plugin.mdresolved/FHSIM-0121-render-init-release-unguarded.mdresolved/FHSIM-0122-sdl-observer-leaves-dangling-model.mdresolved/FHSIM-0123-fmuexport-empty-vis-block.mdresolved/FHSIM-0124-vis-package-installs-uncompilable-headers.mdresolved/FHSIM-0125-installed-headers-bare-includes.mdresolved/FHSIM-0126-cmake-lines-that-do-nothing.mdresolved/FHSIM-0127-package-config-tinyxml.mdresolved/FHSIM-0128-two-ogre-cfg-files.mdresolved/FHSIM-0129-iconfontcppheaders-unpinned.mdresolved/FHSIM-0130-externallink-mock-tests.mdresolved/FHSIM-0131-fmitesthelper-stale-comment.mdresolved/FHSIM-0132-handmade-gtest-entries-can-run-nothing.mdresolved/FHSIM-0133-gtest-skip-hides-broken-install.mdresolved/FHSIM-0134-inputreader-missingfile-accepts-anything.mdresolved/FHSIM-0135-golden-test-count-two-type-labels.mdresolved/FHSIM-0136-editable-helper-writes-into-checkout.mdresolved/FHSIM-0137-sidecar-no-is-a-file-name.mdresolved/FHSIM-0138-diagnostic-file-open-failure-silent.mdresolved/FHSIM-0139-factory-from-xml-drops-input-path.mdresolved/FHSIM-0140-cli-output-path-overrides-every-fileoutput.mdresolved/FHSIM-0141-replay-csv-read-leniently.mdresolved/FHSIM-0142-factory-provider-message-and-model-input-errors.mdresolved/FHSIM-0143-fmu-var-named-like-builtin.mdresolved/FHSIM-0144-second-visualization-accepted-headless.mdresolved/FHSIM-0145-jacobian-image-claims-written.mdresolved/FHSIM-0146-two-log-level-scales.mdresolved/FHSIM-0150-preodefcn-state-write-ignored-by-sundials.mdresolved/FHSIM-0151-singular-preconditioner-unrecoverable.mdresolved/FHSIM-0153-evaluateports-no-cache-reset.mdresolved/FHSIM-0154-setxcurr-without-reinit.mdresolved/FHSIM-0160-model-exit-reported-as-failure.mdresolved/FHSIM-0161-esc-in-fhvis-reported-as-failure.md--help exits 1, and a cancelled run exits 1 in FhSim but 0 in FhSimUI. Resolved: 07ef8290, 2026-10-25. File: resolved/FHSIM-0162-help-and-cancel-exit-codes-differ.mdresolved/FHSIM-0163-dll-duplicate-setobjectptr-kills-context.mdresolved/FHSIM-0164-fmu-dostep-missing-output-is-discard.mdresolved/FHSIM-0165-fmu-exporter-errors-on-stdout.mdresolved/FHSIM-0166-single-thread-work-polls-and-retire-waits.mdresolved/FHSIM-0170-newton-test-uses-largest-state.mdresolved/FHSIM-0171-linear-solvers-do-not-report-singular-matrix.mdresolved/FHSIM-0172-self-connection-refused-for-every-method.mdresolved/FHSIM-0173-solverplan-comment-says-sparselu-not-offered.mdresolved/FHSIM-0180-stepcontrol-values-dropped.mdresolved/FHSIM-0181-stepmin-above-stepmax-unchecked.mdresolved/FHSIM-0182-kalman-ignores-outside-state-change.mdresolved/FHSIM-0183-adaptive-step-accepts-inf-state.mdresolved/FHSIM-0184-nan-trial-step-uses-up-state-print.mdresolved/FHSIM-0190-r10-01-doxygen-skips-include.mdresolved/FHSIM-0191-r10-02-docs-say-variable-rules-opposite.mdresolved/FHSIM-0192-r10-03-two-hooks-undocumented.mdresolved/FHSIM-0193-r10-04-value-rules-undocumented.mdresolved/FHSIM-0194-r10-09-integrator-attributes-substitution.mdresolved/FHSIM-0195-r10-11-jacobian-result-types-undocumented.md| names | do not match the parameters. Resolved: 9d8b5412, 2026-10-26. File: resolved/FHSIM-0196-r10-08-dllwrapper-param-names.md |
resolved/FHSIM-0197-r10-12-troubleshooting-duplicates.mdresolved/FHSIM-0198-r10-13-semver-text.mdresolved/FHSIM-0199-r2-14-overshoot-rule-not-recorded.mdresolved/FHSIM-0200-r4-03-creator-pointer-lifetime.mdresolved/FHSIM-0201-r4-14-initialconditionsetup-comment.mdresolved/FHSIM-0202-r6-04-simulate-return-value-and-threads.mdresolved/FHSIM-0203-r1-14-engine-folders-are-one-module.md