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
- Reproduce the Evidence at the
file:line given in the detail file, at HEAD.
- For a
blocked item, get the owner's answer to "Decision needed" first, then set Status to ready.
- Write the proving test, apply the fix, check the Risk paragraph.
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_coribo_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)
- CORIBO-0012 — ConstraintSolver warm-starts a 5-iteration CG from the previous call, so OdeFcn is not idempotent
- CORIBO-0023 — CollisionManager::AddPlate passes the full thickness as the plate radius, addExternalPlate half of it
- CORIBO-0024 — ConstraintSolver(double, CoreBoundThreadPool*) takes ownership through a raw pointer
Resolved issues (21)
- CORIBO-0001 (TEST) — WinchableCable has no automated behavioural test of any kind. Resolved: feature/fix_issues, 2026-10-21. File:
resolved/CORIBO-0001-no-automated-test-of-winchablecable.md
- CORIBO-0002 (TEST) — The constraint solver's analytic Jacobians are never checked against finite differences. Resolved: see commit "Check the constraint solver's Jacobians against finite differences", 2026-09-24. File:
resolved/CORIBO-0002-constraint-solver-jacobians-unverified.md
- CORIBO-0003 (DOCUMENTATION) — WinchableCable's Doxygen comment says the init-states file is named .data, code and shipped file use .dat. Resolved: see commit "Name the WinchableCable init-states file .dat in its documentation", 2026-09-24. File:
resolved/CORIBO-0003-winchablecable-init-states-filename-doc-mismatch.md
- CORIBO-0004 (BUG) — The shipped CoriboCable.xml example stops before the first step: cableStates initial conditions are incomplete. Resolved: feature/fix_issues, 2026-10-21. File:
resolved/CORIBO-0004-winchablecable-example-fails-initial-conditions.md
- CORIBO-0005 (BUG) — Winch::LoadAttachedGeometryDataFromFile tests an unsigned index for < 0, so the super-element step-back never runs. Resolved: feature/fix_issues, 2026-10-21. File:
resolved/CORIBO-0005-winch-pop-element-unsigned-underflow-check.md
- CORIBO-0006 (BUG) — Point-versus-disk face contact: the disk's rotational Jacobian has the wrong sign. Resolved: feature/fix_issues, 2026-10-21. File:
resolved/CORIBO-0006-point-disk-face-rotation-jacobian-sign.md
- CORIBO-0007 (DOCUMENTATION) — README names the Conan conf tools.build:skip_tests, which does not exist; the recipe reads tools.build:skip_test. Resolved: see commit "Name the Conan test switch tools.build:skip_test in the README", 2026-09-24. File:
resolved/CORIBO-0007-readme-skip-tests-conf-name.md
- CORIBO-0008 (DOCUMENTATION) — doc/user/testing_report.md is not a Doxygen input, so the to it from main_coribo.md does not resolve. Resolved: see commit "Give Doxygen the testing report that main_coribo.md links to", 2026-09-24. File:
resolved/CORIBO-0008-testing-report-not-in-doxygen-input.md
- CORIBO-0009 (BUG) — ConstraintSolver(double) starts hardware_concurrency threads, which makes small models many times slower; the affinity masks shift past their width. Resolved: feature/fix_issues, 2026-10-21. File:
resolved/CORIBO-0009-constraintsolver-default-thread-pool-and-affinity-mask-shifts.md
- CORIBO-0010 (ARCHITECTURE) — ConstraintSolver's default thread pool takes every hardware thread and hands each small sub-task over with a condition-variable wake-up. Resolved: see commits c155069 (test, red) and "Bind each thread-pool worker per core index; document pool size (CORIBO-0010)" (fix, 3.2.3), 2026-10-13. File:
resolved/CORIBO-0010-constraint-solver-thread-pool-hand-off-dominates-small-models.md
- CORIBO-0011 (BUG) — SparseMatrixBuilder's parallel block product reads past the vector when a sub-domain starts at the last element or the system has one element. Resolved: see commits 1f6916f (test, red under ASan) and "Bound the neighbour blocks of SparseMatrixBuilder's sub-domain product (CORIBO-0011)" (fix, 3.2.4), 2026-10-13. File:
resolved/CORIBO-0011-sparse-product-reads-past-vector-end.md
- CORIBO-0013 (BUG) — An exception that leaves a task on a CoreBoundThreadPool worker calls std::terminate. Resolved: 3c694c1, 2026-10-24, feature coribo-fail-loudly. File:
resolved/CORIBO-0013-pool-task-exception-terminates.md
- CORIBO-0014 (BUG) — ConnectionSolverTask owns a raw Cholesky solver and is copied when the island vector grows: use-after-free. Resolved: ecd1ed7, 2026-10-24, feature coribo-fail-loudly. File:
resolved/CORIBO-0014-sparse-solver-island-use-after-free.md
- CORIBO-0015 (BUG) — V4ptr writes its fourth component to ptr[4]. Resolved: fe95e5c, 2026-10-24, feature coribo-fail-loudly. File:
resolved/CORIBO-0015-v4ptr-writes-past-the-vector.md
- CORIBO-0016 (BUG) — ConjugateGradientSolver gives NaN for a zero right-hand side or an exact start guess. Resolved: 0bfd42d, 2026-10-24, feature coribo-fail-loudly. File:
resolved/CORIBO-0016-conjugate-gradient-zero-over-zero.md
- CORIBO-0017 (BUG) — A failed Cholesky factorisation and a non-finite solution are not reported. Resolved: 801f257, 2026-10-24, feature coribo-fail-loudly. File:
resolved/CORIBO-0017-solver-failures-pass-silently.md
- CORIBO-0018 (BUG) — Off-diagonal blocks are keyed by column << 16 | row in an int: wrong past element 32767. Resolved: b46af03, 2026-10-24, feature coribo-fail-loudly. File:
resolved/CORIBO-0018-index-key-16-bit.md
- CORIBO-0019 (BUG) — Winch init-states loader: reads past the cable, acos of a cosine above 1, blank lines. Resolved: 3ee5d93, 2026-10-24, feature coribo-fail-loudly. File:
resolved/CORIBO-0019-winch-init-states-loader-guards.md
- CORIBO-0020 (BUG) — CollisionManager::ObjectDistance reads an uninitialised result for chamfer, toroid and plate pairs. Resolved: 4d95c71, 2026-10-24, feature coribo-fail-loudly. File:
resolved/CORIBO-0020-collision-shape-pairs-without-distance.md
- CORIBO-0021 (BUG) — ConstraintSolver caches the symplectic step at the first WriteDynamic and accepts elements after the first UpdateElements. Resolved: e40cbbb, 2026-10-24, feature coribo-fail-loudly. File:
resolved/CORIBO-0021-symplectic-step-cached-and-late-elements.md
- CORIBO-0022 (BUG) — WinchableCable accepts Beta <= 0 or NaN, LineStructure accepts zero elements, XmlInfo dereferences a null towing block. Resolved: 0a27d39, 2026-10-24, feature coribo-fail-loudly. File:
resolved/CORIBO-0022-input-guards-beta-num-towing-block.md