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

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. Audit notes that are not issues are in issues/notes.md.

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_fishery_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 (0)

| ID | Class | Severity | Status | |—|—|—|—|

Resolved issues (107)

  • FISH-0001 (TEST) — Revive the test suite: no SimObject has any automated coverage. Resolved: pending, 2026-09-17. File: resolved/FISH-0001-test-suite-has-no-tests.md
  • FISH-0002 (BUG) — SeineConnector Pos and Vel select from opposite sources for the same Connected flag. Resolved: pending, 2026-09-25. File: resolved/FISH-0002-seineconnector-pos-vel-opposite-connected-sense.md
  • FISH-0003 (BUG) — Crowfoot ExternalVel output is always zero. Resolved: pending, 2026-09-17. File: resolved/FISH-0003-crowfoot-externalvel-always-zero.md
  • FISH-0004 (BUG) — TrawlDoorAddedFoil discards its computed foil force and applies a hard-coded roll moment. Resolved: pending, 2026-09-25. File: resolved/FISH-0004-trawldooraddedfoil-discards-foil-force.md
  • FISH-0005 (BUG) — TrawlDoorAddedFoil FoilEnergyConsumed output is always zero. Resolved: pending, 2026-09-25. File: resolved/FISH-0005-trawldooraddedfoil-foilenergyconsumed-always-zero.md
  • FISH-0006 (BUG) — TrawlDoorAddedFoil interpolates the foil polar with the wrong array length. Resolved: pending, 2026-09-25. File: resolved/FISH-0006-trawldooraddedfoil-polar-interpolation-length.md
  • FISH-0007 (DOCUMENTATION) — TrawlDoorAddedFoil documented input ports do not match the registered ones. Resolved: 82c8f64, 2026-09-15. File: resolved/FISH-0007-trawldooraddedfoil-documented-input-ports.md
  • FISH-0008 (DOCUMENTATION) — TrawlDoorAddedFoil header example uses a wrong LibName and a lowercase type string. Resolved: 82c8f64, 2026-09-15. File: resolved/FISH-0008-trawldooraddedfoil-header-example-uses-a-wrong.md
  • FISH-0009 (DOCUMENTATION) — examples/input/ValuesDisplay.xml references a stale instance name C. Resolved: 09db4fa, 2026-09-15. File: resolved/FISH-0009-examples-input-valuesdisplay-xml-references.md
  • FISH-0010 (DOCUMENTATION) — ValuesDisplay documents NumSignals and a single In port; neither exists. Resolved: 81fc225, 2026-09-15. File: resolved/FISH-0010-valuesdisplay-documents-numsignals-and-a-single.md
  • FISH-0011 (BUG) — SeineOperation overwrites MinWarpLength with a literal 20 after reading it. Resolved: pending, 2026-09-17. File: resolved/FISH-0011-seineoperation-minwarplength-overwritten.md
  • FISH-0012 (BUG) — SeineOperation hauls warps at a hard-coded 0.7 m/s while scheduling on WinchHaulSpeed. Resolved: pending, 2026-09-25. File: resolved/FISH-0012-seineoperation-hardcoded-haul-speed.md
  • FISH-0013 (ARCHITECTURE) — Remove the de-registered NetWithAttractor sources and the stale commented-out includes. Resolved: pending, 2026-09-25. File: resolved/FISH-0013-remove-netwithattractor-sources.md
  • FISH-0014 (KNOWN-LIMITATION) — Crowfoot header describes a state-based solution the code does not implement, and Example.xml passes three dead attributes. Resolved: pending, 2026-09-25. File: resolved/FISH-0014-crowfoot-numlines-validation.md
  • FISH-0015 (DOCUMENTATION) — ToTrawlDoor's Roll, Pitch and AngleOfAttack output ports are undocumented. Resolved: 65e4104, 2026-09-15. File: resolved/FISH-0015-totrawldoors-roll-pitch-and-angleofattack-output.md
  • FISH-0016 (ARCHITECTURE) — Crowfoot and TrawlDoorAddedFoil leak their heap allocations. Resolved: cca19cd, 2026-09-15. File: resolved/FISH-0016-crowfoot-and-trawldooraddedfoil-leak-their-heap.md
  • FISH-0017 (DOCUMENTATION) — No shipped input exercises Seine/Cable. Resolved: pending, 2026-09-25. File: resolved/FISH-0017-no-seine-example-input.md
  • FISH-0018 (BUG) — Example.xml: a Door output at t=0 depends on process memory layout. Resolved: pending, 2026-09-25. File: resolved/FISH-0018-example-xml-door-output-nondeterministic.md
  • FISH-0019 (DOCUMENTATION) — Every shipped trawl example references Environment/Basic from base, which no 3.x library registers. Resolved: pending, 2026-09-17. File: resolved/FISH-0019-trawl-examples-reference-environment-basic.md
  • FISH-0020 (BUG) — ValuesDisplay deletes an uninitialized pointer when RenderInit never runs. Resolved: 55db44d, 2026-09-15. File: resolved/FISH-0020-valuesdisplay-deletes-uninitialized-pointer.md
  • FISH-0021 (BUG) — PIDController Out port publishes uninitialised memory before the first accepted step. Resolved: pending, 2026-09-17. File: resolved/FISH-0021-pidcontroller-out-uninitialised-before-first-step.md
  • FISH-0022 (TEST) — TrawlDoor angle of attack lands on the reverse-flow +/-pi branch, whose sign is decided by round-off. Resolved: pending, 2026-09-17. File: resolved/FISH-0022-trawldoor-angleofattack-reverse-flow-branch.md
  • FISH-0023 (BUG) — CenterWeight requires an Environment but damps against absolute velocity, ignoring the current. Resolved: cc0d115, 2026-09-21. File: resolved/FISH-0023-centerweight-drag-ignores-current.md
  • FISH-0024 (BUG) — SeineOperation reads m_buoyPos and m_lastCall before they are ever written. Resolved: pending, 2026-09-17. File: resolved/FISH-0024-seineoperation-buoypos-read-before-written.md
  • FISH-0025 (BUG) — SeineOperation integrates warp length on solver call intervals instead of a state. Resolved: pending, 2026-09-17. File: resolved/FISH-0025-seineoperation-warplength-not-a-state.md
  • FISH-0026 (BUG) — Actuator Power port publishes an uninitialised member until the first OdeFcn call. Resolved: pending, 2026-09-17. File: resolved/FISH-0026-actuator-power-uninitialised-until-first-odefcn.md
  • FISH-0027 (ARCHITECTURE) — Outports hand out pointers to members that nothing requires the constructor to initialise. Resolved: pending, 2026-09-25. File: resolved/FISH-0027-outport-backing-members-uninitialised-at-tstart.md
  • FISH-0028 (ARCHITECTURE) — Input files require the base SimObject library, which the package does not depend on. Resolved: pending, 2026-09-25. File: resolved/FISH-0028-fhsim-base-not-a-dependency.md
  • FISH-0029 (BUG) — TrawlDoor AngleOfAttack samples the last ODE evaluation, not the observer's state. Resolved: pending, 2026-09-17. File: resolved/FISH-0029-angleofattack-sampled-from-last-odefcn-evaluation.md
  • FISH-0030 (TEST) — CenterWeight regression baseline fails after a dependency update, and is not run-to-run reproducible. Resolved: pending, 2026-09-24. File: resolved/FISH-0030-centerweight-regression-baseline-stale.md
  • FISH-0031 (DOCUMENTATION) — DEVELOPING.md's TOutput example silently produces a three-row result file. Resolved: 39a45c4, 2026-09-24. File: resolved/FISH-0031-developing-md-toutput-example-is-a-three-time-list.md
  • FISH-0032 (BUG) — Jacobian callbacks are indexed with global state offsets, so they are wrong for any object that is not first. Resolved: pending, 2026-09-24. File: resolved/FISH-0032-jacobian-callbacks-indexed-with-global-state-offsets.md
  • FISH-0033 (KNOWN-LIMITATION) — Auv thrust does not fall off with speed. Resolved: pending, 2026-09-25. File: resolved/FISH-0033-auv-thrust-is-independent-of-speed.md
  • FISH-0034 (KNOWN-LIMITATION) — Auv yaw and pitch rate damping are independent of the forward speed. Resolved: pending, 2026-09-25. File: resolved/FISH-0034-auv-cross-flow-damping-has-no-speed-coupling.md
  • FISH-0035 (DOCUMENTATION) — PidController's error sign is inverted twice and the net convention is undocumented. Resolved: 1322f17, 2026-09-24. File: resolved/FISH-0035-pid-error-sign.md
  • FISH-0036 (TEST) — Environment.RandomSeed defaults to a wall-clock seed, so any fixture with a default seafloor is irreproducible. Resolved: pending, 2026-09-24. File: resolved/FISH-0036-environment-randomseed-defaults-to-wall-clock.md
  • FISH-0037 (KNOWN-LIMITATION) — The undulation climbs and dives at 0.7 of u sin(DiveAngle), and the pitch loop needs 40 s to get there. Resolved: pending, 2026-09-25. File: resolved/FISH-0037-undulation-vertical-speed-falls-short-of-the-dive-angle.md
  • FISH-0038 (BUG) — Auv output ports dereference a null environment during InitialConditionSetup. Resolved: already fixed in 722fcfa; confirmed 2026-09-24. File: resolved/FISH-0038-auv-outports-crash-during-initial-condition-setup.md
  • FISH-0039 (KNOWN-LIMITATION) — Echosounder Altitude is the beam projection, not the vertical clearance, over sloping ground. Resolved: pending, 2026-09-25. File: resolved/FISH-0039-echosounder-altitude-is-the-beam-projection-on-a-slope.md
  • FISH-0040 (BUG) — The echosounder upward beam bins one range bin above the sea surface. Resolved: pending, 2026-09-25. File: resolved/FISH-0040-echosounder-up-beam-last-bin-samples-above-the-surface.md
  • FISH-0041 (ARCHITECTURE) — SimObject render teardown runs after the Ogre root is destroyed. Resolved: pending, 2026-09-25. File: resolved/FISH-0041-render-teardown-runs-after-ogre-is-gone.md
  • FISH-0042 (KNOWN-LIMITATION) — The AuvSurvey mackerel field fills the Calanus band, so the 38 kHz channel over the plankton layer is mackerel. Resolved: pending, 2026-09-25. File: resolved/FISH-0042-auv-survey-mackerel-ambient-masks-calanus-at-38khz.md
  • FISH-0043 (TEST) — No test or build step ever parses examples/input/FMU/AuvSurvey.xml. Resolved: pending, 2026-09-25. File: resolved/FISH-0043-fmu-scenario-xml-is-never-parsed.md
  • FISH-0044 (BUG) — The AuvSurvey FMU's ocean fields are not bundled: –autocopy misresolves the ConfigFile paths. Resolved: pending, 2026-09-25. File: resolved/FISH-0044-auv-fmu-autocopy-does-not-bundle-the-ocean-fields.md
  • FISH-0045 (TEST) — ToVessel (Trawl/Vessel) has no test; its inherited Jacobian is never checked. Resolved: pending, 2026-09-25. File: resolved/FISH-0045-tovessel-no-test-coverage.md
  • FISH-0046 (TEST) — TrawlDoorAddedFoil and ValuesDisplay have no automated test. Resolved: pending, 2026-09-25. File: resolved/FISH-0046-trawldooraddedfoil-valuesdisplay-no-test.md
  • FISH-0047 (TEST) — TrawlDoorBase's partial Jacobian is disabled rather than scoped, so it is never checked. Resolved: pending, 2026-09-25. File: resolved/FISH-0047-trawldoorbase-jacobian-unverified.md
  • FISH-0048 (TEST) — PIDController, Actuator, Crowfoot and TrawlDoor tests assert only a regression baseline. Resolved: pending, 2026-09-25. File: resolved/FISH-0048-regression-tests-lack-closed-form-assertions.md
  • FISH-0049 (API) — The AuvSurvey FMU exports no Valid flag for the SilCam or the echosounder. Resolved: pending, 2026-09-25. File: resolved/FISH-0049-auv-fmu-exports-no-validity-flags.md
  • FISH-0050 (TEST) — Every build of a scenario truncates the Echosounder echogram, so the tests that read it cannot run the Jacobian check. Resolved: pending, 2026-09-25. File: resolved/FISH-0050-echosounder-echogram-truncated-by-every-model-build.md
  • FISH-0051 (BUG) — ToTrawlDoor.AngleOfAttack dereferences the environment, which is null during InitialConditionSetup. Resolved: pending, 2026-09-25. File: resolved/FISH-0051-environment-null-during-initial-condition-setup.md
  • FISH-0052 (BUG) — review_issues.py takes the package name from the directory, so a run in a git worktree renames every issue file. Resolved: pending, 2026-09-25. File: resolved/FISH-0052-review-issues-script-package-from-directory.md
  • FISH-0053 (DOCUMENTATION) — The sensor pages still say fhsim_base is outside the package's closure. Resolved: pending, 2026-09-25. File: resolved/FISH-0053-sensor-notes-say-fhsim-base-is-outside-the-closure.md
  • FISH-0054 (BUG) — SeineOperation sizes the towing phase from the haul time, hauls for a fixed 100 s, and never reads TowTime. Resolved: pending, 2026-09-25. File: resolved/FISH-0054-seineoperation-phase-durations-swapped.md
  • FISH-0055 (BUG) — sfh::math::Interp1D interpolates on the wrong table segment, so TrawlDoorAddedFoil reads wrong coefficients. Resolved: pending, 2026-09-25. File: resolved/FISH-0055-interp1d-picks-the-wrong-segment.md
  • FISH-0056 (BUG) — TrawlDoorAddedFoil computes the foil force from the previous evaluation's inflow angle and speed. Resolved: pending, 2026-09-25. File: resolved/FISH-0056-trawldooraddedfoil-uses-stale-inflow.md
  • FISH-0057 (TEST) — The AuvSurvey Cod field ends 60 m above the seabed, so the echosounder warns every run. Resolved: pending, 2026-09-25. File: resolved/FISH-0057-auvsurvey-cod-field-domain-ends-below-the-echosounder-beams.md
  • FISH-0058 (BUG) — InternalCableWithAttractor::AddElementForce is non-const and never overrides the const base. Resolved: see commit "Resolve FISH-0058: InternalCableWithAttractor::AddElementForce overrides the const base", 2026-09-29. File: resolved/FISH-0058-internalcablewithattractor-addelementforce-hides-base.md
  • FISH-0059 (BUG) — TrawlVessel's default WarpPosPrt lies on the starboard side. Resolved: pending, 2026-09-25. File: resolved/FISH-0059-trawlvessel-warpposprt-default-on-starboard.md
  • FISH-0060 (BUG) — Auv/CTD lag states open at zero, not at the field values: the environment is unresolved in InitialConditionSetup. Resolved: commit "Resolve FISH-0060: CTD lag states open at the field values", 2026-10-06. FHSIM-0025 is resolved in fhsim f4090d17, contained in fhsim 3.3.1 (tag v3.3.1), the FhSim this package requires (fhsim/[^3.3.1]) and the build resolves (fhsim/3.3.1@sintef/stable). The comments in SensorCtd.cpp and SensorCtd.h now say that LagT and LagS open at the field values. Test SimObject.Auv_CtdDefaultLagOpensAtTheFieldValues (fixture tests/in/Auv/Auv_CtdDefaultLag_in.xml: default time constants, the sensor at 30 m, 8.975 degC and 34.34 PSU there) passes; with the environment left unresolved in InitialConditionSetup (the behaviour before FHSIM-0025, reproduced by commenting out its ResolveEnvironment) it fails with LagT_0, LagS_0, Temperature_0 and Salinity_0 all 0 at t = 0. No baseline moves (Auv_CtdStatic has zero time constants, Auv_CtdRamp a zero field at the start).. File: resolved/FISH-0060-ctd-lag-states-open-at-zero.md
  • FISH-0061 (DOCUMENTATION) — README's test instructions name a Conan conf that does not exist (tools.build:skip_tests). Resolved: pending, 2026-09-25. File: resolved/FISH-0061-readme-skip-tests-conf-name.md
  • FISH-0062 (BUG) — ValuesDisplay examples cannot load in a headless build. Resolved: pending, 2026-09-25. File: resolved/FISH-0062-valuesdisplay-examples-fail-headless.md
  • FISH-0063 (BUG) — The AuvSurvey FMU export bundles a leftover echogram and redirects the echogram into resources. Resolved: pending, 2026-09-25. File: resolved/FISH-0063-auv-fmu-bundles-a-leftover-echogram.md
  • FISH-0064 (BUG) — Echosounder down beam's last bin samples below the seabed. Resolved: 3e73dff, 2026-10-02 (owner ruling R131: a down beam that ends on the bottom keeps its samples RayTolerance (vertical, BottomClearance) short of the hit, SensorEchosounder::DownSampleRangeOf; test SimObject.SensorEchosounder_TheDownBeamSamplesStayRayToleranceAboveTheSeabedHit_FISH0064 did not compile before (no such functions), green after; the Echosounder, Auv, Ctd and SilCam tests (135) pass with no echogram baseline moved. The rough-seabed case, where the search returns the crossing nearest its start rather than the first along the beam, is split off as FISH-0099 (blocked)). File: resolved/FISH-0064-echosounder-down-beam-last-bin-samples-below-the-seabed.md
  • FISH-0065 (BUG) — TrawlVessel and Seine/Cable leak heap arrays their destructors never free. Resolved: see commit "Resolve FISH-0065: TrawlVessel frees its output-port arrays", 2026-09-29. File: resolved/FISH-0065-trawlvessel-and-seine-cable-leak-their-heap.md
  • FISH-0066 (BUG) — Seine/Operation's RenderUpdate calls setText on an uninitialised TextRenderer. Resolved: pending, 2026-09-26. File: resolved/FISH-0066-seineoperation-renderupdate-uninitialised-textrenderer.md
  • FISH-0067 (BUG) — Trawl/Vessel and Seine/Vessel default to a mesh that is not shipped, so a visualised run aborts. Resolved: 20173ce, 2026-09-26. File: resolved/FISH-0067-vessel-default-mesh-not-shipped.md
  • FISH-0068 (BUG) — Without MeshName the vessel hull is drawn flattened and about 8 m above the water. Resolved: 17ebed2, 2026-09-26. File: resolved/FISH-0068-default-vessel-mesh-flattened-above-water.md
  • FISH-0069 (BUG) — Trawl door models default Mesh to "fhSphere.mesh" and append ".mesh", so a visualised run without Mesh aborts. Resolved: a1cabc4, 2026-09-26. File: resolved/FISH-0069-trawldoor-default-mesh-not-found.md
  • FISH-0070 (BUG) — The vis and no-vis builds share build/Release/generators, so the last conan install decides both. Resolved: see commit "Resolve FISH-0070: move the generators folder with the no-vis build folder", 2026-09-29. File: resolved/FISH-0070-shared-conan-generators-folder.md
  • FISH-0071 (DOCUMENTATION) — 6DOFTrawlDoor.xml draws the traaldoer mesh about ten times the door's size. Resolved: see commit "Resolve FISH-0071: 6DOFTrawlDoor.xml and the header excerpts draw the door at 0.001", 2026-09-29. File: resolved/FISH-0071-traaldoer-example-scale-oversized.md
  • FISH-0072 (DOCUMENTATION) — Auv and CTD headers name tests and files that do not exist and promise seeded CTD lags. Resolved: see commit "Resolve FISH-0072: correct the Auv/CTD header doc slips", 2026-09-29. File: resolved/FISH-0072-auv-header-doc-slips.md
  • FISH-0073 (DOCUMENTATION) — SeineOperation header derives L2 with a factor 2 the code does not use, and calls the isosceles path equilateral. Resolved: commit "Resolve FISH-0073 and FISH-0074: Seine/Operation leg lengths and net speeds", 2026-10-06 (owner ruling 2026-10-06: the code's leg lengths are intended). SeineOperation.h now says isosceles triangle with apex angle α, sin(α/2) = (L2/2)/L1, L2 = L/(1 + 1/sin(α/2)), L1 = L2/(2 sin(α/2)); the stale commented-out formula in SeineOperation.cpp is deleted. doc/images/SeineOperation.jpg shows a general isosceles triangle with α at the apex, which agrees. Documentation only: no test, no baseline moves.. File: resolved/FISH-0073-seine-operation-leg-length-derivation.md
  • FISH-0074 (BUG) — SeineOperation::CalcOutput tests Phase_SetFirstLeg twice when zeroing the net speeds. Resolved: commit "Resolve FISH-0073 and FISH-0074: Seine/Operation leg lengths and net speeds", 2026-10-06 (owner ruling 2026-10-06: zero in Phase_NotSet and Phase_SetFirstLeg). CalcOutput tests PhaseAt(dT) (FISH-0104) against Phase_NotSet || Phase_SetFirstLeg. Test SimObject.SeineOperation_NetSpeedsAreZeroBeforeTheNetIsSet runs SeineOperation_in.xml for 40 s with Fileoutput and reads the file: before the fix the 20 Not set rows had a normal speed of 0.5; after it every Not set and Setting first leg row is 0 and every later row 0.5 (normal) and 0 (tangential). No baseline moves (the regression output has no net speeds).. File: resolved/FISH-0074-seine-operation-duplicate-phase-test.md
  • FISH-0075 (DOCUMENTATION) — testing_report.md says no test is _NEEDS_GUI; seven are. Resolved: see commit "Resolve FISH-0075: testing_report.md lists the seven _NEEDS_GUI tests", 2026-09-29. File: resolved/FISH-0075-testing-report-needs-gui-stale.md
  • FISH-0076 (DOCUMENTATION) — ValuesDisplay excerpt is malformed XML and SimpleTrawlVessel.xml sets a Depth the vessel never reads. Resolved: see commit "Resolve FISH-0076: fix the ValuesDisplay excerpt's XML and SimpleTrawlVessel.xml's Depth", 2026-09-29. File: resolved/FISH-0076-trawl-example-slips.md
  • FISH-0077 (DOCUMENTATION) — ToVessel, TrawlDoorBase and ToTrawlDoor document parameters and ports as Description here. Resolved: see commit "Resolve FISH-0077: write real descriptions for ToVessel, TrawlDoorBase and ToTrawlDoor", 2026-09-29. File: resolved/FISH-0077-trawl-description-placeholders.md
  • FISH-0078 (DOCUMENTATION) — The 11 trawl inputs under data/ still reference Environment/Basic, which no 3.x library registers. Resolved: commit "Resolve FISH-0078: port the data/trawl inputs to FhSim 3", 2026-10-06 (owner ruling 2026-10-06: port them as FISH-0019; TrawlPrepare.xml drops InitialStatesFile and starts from its initial conditions). All 11 files: the Environment block of fhsim_environment (Waves.NumWaves 0, Bathymetry.Depth = the old MeanDepth, Current.Model Constant with the vector the Environment.CurrentVel connection set, which is deleted); unknown <Integrator> attributes LogStates/UseRSSNorm removed. Also: Trawl/Crowfoot DampingRatio/EigenFrequency/IntegratorGain, Cable/LumpedMass Length, ValuesDisplay DisplayBox/Material, Src/Sine TrigoFunc and the net's Scale="1" (all unread) removed; apspeed corrected to ApSpeed (case-sensitive; the value was ignored); LibName="marine" → "fishery" in TrawlMovie.xml; FoilControl.xml connects the now-required Door.FoilRelativeAoaRate to 0. TrawlMovie.xml runs 600–730 s (FhSim 3 starts at the time stored in the states file; camera times shifted by 600 s) and resumes from TrawlPrepareStates1.txt, which TrawlPrepare.xml writes in the working directory; a comment says so. Verified headless (playpen bin as working directory, scratch copies with a short TEnd): flume, flume3, FoilControl, Trawl, TrawlSimple, TrawlPrepare run 5 s and exit 0 without NaN, and TrawlMovie resumes from TrawlPrepare's states and runs on; only visual parameters stay unqueried (meshes, scales, vessel MeshName/*Scale/Pitch, ValuesDisplay FilterFrames, camera settings). Not runnable: TrawlDoorControl, TrawlDoorControl2, TrawlDoorControlMovie and flume2 use Trawl/TrawlDoorWarpControl, which no library or branch has (FISH-0013); a header comment in each says so. With Trawl/TrawlDoor substituted (and its WarpControl* parameters, ControlLine1Length inputs and WarpPosLocal initial conditions removed) each ran 3 s cleanly, so the rest of these files is ported. TrawlDoorControl2.xml still reads states.txt (written by TrawlDoorControl.xml) and TrawlDoorControlMovie.xml its own moviestates.txt; left as they were.. File: resolved/FISH-0078-data-inputs-reference-environment-basic.md
  • FISH-0079 (TEST) — No settled steady-tow scenario of a trawl, so no net-drag estimate; the D3 cold start sat at the 1 MN warp clamp. Resolved: 8684bcf, 2026-09-27. File: resolved/FISH-0079-steady-tow-trawl-scenario.md
  • FISH-0080 (BUG) — The morenot520 net file sets MaxAcceleration 10, which makes every trawl input built on it self-excite into the warp clamp. Resolved: 67a4d3e, 2026-09-28. File: resolved/FISH-0080-morenot520-net-acceleration-limit.md
  • FISH-0081 (TEST) — Every default ctest, conan build and conan create runs the slow SteadyTow VALIDATION entries. Resolved: 8d7d84d (docs 21ba7fc), 2026-09-28. File: resolved/FISH-0081-validation-tests-run-by-default.md
  • FISH-0082 (BUG) — TrawlDoorBase uses Rho for its hydrodynamic forces but a hard-coded 1025 for buoyancy (CenterWeight: resolved). Resolved: commit "Resolve FISH-0082: TrawlDoorBase buoyancy uses Rho", 2026-10-06 (owner ruling 2026-10-06: buoyancy from Rho). TrawlDoorBase::AddInternalForces uses m_rhoWater * wet; the header's Buoyancy section says Rho. Test SimObject.TrawlDoorBase_BuoyancyUsesRho (fixture TrawlDoorBase_FreeDoorRho998_in.xml, the free door with Rho and Density 998): before, the door rose (LocalVel_2 = -0.0265 m/s after 0.1 s); after, it stays at rest (|LocalVel| < 1e-6). At the default 1025 the result is identical: SimObject.TrawlDoorBase and every other door test pass against their unchanged references. The CenterWeight part was resolved earlier in cbdf038 (FISH-0102).. File: resolved/FISH-0082-trawl-door-buoyancy-and-centerweight-hard-code-1025.md
  • FISH-0083 (BUG) — Seine/Cable reads the General-level FluidRho but never uses it; per-element FluidRho defaults to 1025. Resolved: see commit "Resolve FISH-0083: Seine/Cable's General FluidRho reaches the element density", 2026-09-29. File: resolved/FISH-0083-seine-cable-general-fluidrho-unused.md
  • FISH-0084 (DOCUMENTATION) — SteadyTow_Test.cpp says the suites are run by fhsim_fishery_VALIDATION, a ctest entry that does not exist. Resolved: 21ba7fc (merged with K5), 2026-09-28. File: resolved/FISH-0084-steady-tow-header-names-a-missing-ctest-entry.md
  • FISH-0085 (TEST) — The SteadyTow rig files are copied to the playpen only at configure time, so an edit without reconfiguring runs stale copies. Resolved: see commit "Resolve FISH-0085: configure_file for the SteadyTow rig files", 2026-09-29. File: resolved/FISH-0085-steady-tow-rig-files-copied-at-configure-only.md
  • FISH-0086 (BUG) — CenterWeight reports HasJacobians() true although its analytical Jacobian omits the bottom contact that OdeFcn adds. Resolved: commit "Resolve FISH-0086: no analytical Jacobian in bottom contact (CenterWeight)", 2026-10-06, with fhsim_marine_elements ab508bb ("Cable/Branched: no analytical Jacobian while in bottom contact (FISH-0086)"; no separate MARE issue, this issue is its record). Owner ruling 2026-10-06: R41's gate extends to both. CenterWeight::HasJacobians is false while the seafloor force was non-zero at the last OdeFcn state; CableBranched::HasJacobians while any node (sphere) or element (cylinder, InternalCableWithBottomContact) got a seafloor force there. MARE-0135 / review F1: the SUNDIALS Jacobian callback calls OdeJacobian (which differences the blocks without an analytical Jacobian) even when a model withdraws its claim during the run: FHSIM-0030, fhsim e8f634d6, merged in 94fd477f, in fhsim 3.3.1 (FhIntegratorSundials.cpp:396-403 at v3.3.1), which both packages require. Tests: fishery SimObject.CenterWeight_NoJacobianInBottomContact (the CenterWeight case checked to TEnd = 10 s, on the 55 m seafloor) failed before with the system check at t = 10.01 s (maxRelErr 1.03, the missing contact stiffness) and passes after, the weight's block still checked in mid-water; ME SimObject.CableBranched_NoJacobianWithANodeInBottomContact and ..._WithAnElementInBottomContact failed before (CB block maxRelErr 1.0 to 1.9) and pass after; CableBranched_JacobianClearOfTheSeabed keeps the CB block. No baseline moves.. File: resolved/FISH-0086-centerweight-jacobian-omits-bottom-contact.md
  • FISH-0087 (ARCHITECTURE) — Seine/Cable reads StepSafetyFactor twice and AttractorName once per section, and CreateStates never sets m_iStateBase. Resolved: see commit "Resolve FISH-0087: remove the duplicate reads and set m_iStateBase", 2026-09-29. File: resolved/FISH-0087-seine-cable-duplicate-reads-and-state-base.md
  • FISH-0088 (ARCHITECTURE) — The branch is versioned 3.4.0, but it drops ME 3 / environment 3, silently ignores MaxAcceleration and changes net loads. Resolved: commit "Resolve FISH-0088: 3.5.0 stays a minor version", 2026-10-06 (owner ruling 2026-10-06: closed as "kept a minor version"). The 3.5.0 CHANGELOG states why under Dependencies: fishery's own SimObject interface and registration names are unchanged, the dependency floors are raised (fhsim_marine_elements 5, fhsim_environment 5, fhsim_base 5), and the owner chose to minimise version bumps. No code or test change.. File: resolved/FISH-0088-version-3-4-0-against-input-and-behaviour-break.md
  • FISH-0089 (TEST) — The SteadyTow runs' fixed 3600 s wall-clock budget is close to the reported 25-29 min under parallel load. Resolved: see commit "Resolve FISH-0089: widen the SteadyTow wall-clock budget's margin", 2026-09-29. File: resolved/FISH-0089-steady-tow-wall-clock-budget-tight.md
  • FISH-0090 (BUG) — TrawlDoorBase's inertia is a fixed 5000 kg and 5000 kg·m² in every DOF, independent of Mass, with no added mass. Resolved: see commit "TrawlDoorBase inertia from Mass plus added mass, damping on the relative velocity (R70)", 2026-09-28. File: resolved/FISH-0090-trawl-door-inertia-fixed-5000.md
  • FISH-0091 (DOCUMENTATION) — TrawlDoorBase's linear damping acts on the absolute velocity, not the velocity relative to the water. Resolved: see commit "TrawlDoorBase's linear damping is a numerical stabiliser on the absolute velocity (R75)", 2026-09-28; the R70 change it reverts: "TrawlDoorBase inertia from Mass plus added mass, damping on the relative velocity (R70)". File: resolved/FISH-0091-trawl-door-damping-on-absolute-velocity.md
  • FISH-0092 (KNOWN-LIMITATION) — TrawlDoorBase's buoyancy is linear in depth over the door height against the mean surface. Resolved: see commit "TrawlDoorBase's buoyancy follows its plate area under the wave surface (R66)", 2026-09-28. File: resolved/FISH-0092-trawl-door-submergence-against-mean-surface.md
  • FISH-0093 (BUG) — TrawlDoorBase integrates its body-frame velocities without the rigid-body ω × terms. Resolved: see commit "TrawlDoorBase and Auv integrate with the rigid-body omega terms (R100)", 2026-09-28. File: resolved/FISH-0093-trawl-door-missing-rigid-body-omega-terms.md
  • FISH-0094 (TEST) — The steady tow on the seabed ends on one of several door cycles, chosen by the path. Resolved: see commit "SteadyTow_VALIDATION checks statistical stationarity and reports a second start (R101-R103)", 2026-09-28. File: resolved/FISH-0094-steady-tow-ends-on-path-chosen-cycle.md
  • FISH-0095 (TEST) — The AUV closed-loop fixtures miss their heading envelope once the rigid-body ω terms are in (R100). Resolved: see commit "Auv carries the Munk moment with slender-body hull lift (R112)", 2026-09-29. File: resolved/FISH-0095-auv-closed-loop-envelopes-after-omega-terms.md
  • FISH-0096 (BUG) — In a current, the added-mass part of the ω terms acts on the body's velocity instead of the velocity relative to the water. Resolved: see commit "TrawlDoorBase and Auv take the added-mass omega terms on the relative velocity (R107)", 2026-09-29. File: resolved/FISH-0096-added-mass-omega-terms-use-body-velocity-in-current.md
  • FISH-0097 (TEST) — The TrawlDoor trim fixture is an unstable equilibrium, so the angle-of-attack test passed by its time window. Resolved: see commit "TrawlDoorBase and Auv take the added-mass omega terms on the relative velocity (R107)", 2026-09-29. File: resolved/FISH-0097-trawldoor-trim-fixture-unstable-equilibrium.md
  • FISH-0098 (BUG) — InternalCableWithAttractor's second AddEndForces call is unconditional and hardcodes the density. Resolved: see commit "Resolve FISH-0098: scope the net-bin element force and use the cable's own FluidRho". File: resolved/FISH-0098-internalcablewithattractor-netbin-force-unscoped-and-hardcoded-density.md
  • FISH-0099 (KNOWN-LIMITATION) — Echosounder down beam takes the seabed crossing nearest the search start, not the first along the beam. Resolved: dd0e186, 2026-10-02 (owner ruling R132: the bottom hit is the first seabed crossing along the beam; fixed in the ray search, marenv MENV-0062 (BathymetryField::ComputeRayIntersection marches from the origin), and fhsim_environment (ParametricBathymetry and NetCdfSeafloorBathymetry use it); test SimObject.Auv_EchoRidge_TheDownBeamReportsTheFirstSeabedCrossing_FISH0099 (a Parametric ridge between the transducer and the flat-seabed estimate) red before (141.42 m, the crossing at the estimate, against 62.95 m), green after; the fishery suite passes 196/196 with every Echosounder, Auv and AuvSurvey test unchanged; marenv 8b699a1 311/311, fhsim_environment c87a89a 265/265 (its test ParametricBathymetry.RayIntersectionIsTheFirstCrossingAlongTheRay_MENV0062 red before, 141.42 m, green after)). File: resolved/FISH-0099-echosounder-bottom-hit-nearest-crossing.md
  • FISH-0100 (BUG) — Echosounder on the bottom reads bottom lost; RayStepSize unbounded. Resolved: 3956d22, 2026-10-02 (owner ruling R133: a transducer at or inside the seabed reads a valid 0 m, MeasureBottom accepts range >= 0; RayStepSize below RayTolerance and a non-finite RayStepSize or RayTolerance are parameter errors (SensorEchosounder::IsValidRaySearch), the cost ~ altitude / (RayStepSize cos(tilt)) is documented; test SimObject.Auv_EchoOnBottom_ATransducerAtOrInsideTheSeabedReadsAValidZero_FISH0100 red before (with marenv MENV-0063: Valid 0 for the transducer 5 mm above the seabed), green after; SimObject.SensorEchosounder_TheRaySearchSettingsMustBeFiniteWithAStepNotBelowTheTolerance_FISH0100 did not compile before (no IsValidRaySearch), green after; the fishery suite passes 198/198 with every Echosounder, Auv and AuvSurvey test unchanged). File: resolved/FISH-0100-echosounder-on-the-bottom-reads-lost.md
  • FISH-0101 (BUG) — Echosounder: MaxRangeDown and MaxRangeUp are not checked for finiteness, and the FISH-0100 test accepts any exception. Resolved: a63adb2, 2026-10-02 (SensorEchosounder::IsValidMaxRange (positive and finite) replaces <= 0 for both ranges; test SimObject.SensorEchosounder_TheMaxRangesMustBeFiniteAndPositive_FISH0101: the predicate refuses 0, negative, NaN and infinity, and the fixture Auv_EchoZeroRange stops the model with an error that names MaxRangeUp; the FISH-0100 test now checks that its error names RayStepSize; the predicate test did not compile before; the parameter reader already rejects inf, nan, 1e999 and 1/0, so a model file cannot reach the non-finite case and the check is defensive, only its sign test can fire today, and it runs in the creator constructor only (gate review of batch P0); 199/199 fishery tests pass). File: resolved/FISH-0101-echosounder-max-range-not-checked-for-finite.md
  • FISH-0102 (ARCHITECTURE) — CenterWeight copies the sphere drag law and casts no wake. Resolved: cbdf038, 2026-10-04 (the drag and its Jacobian are environment::sphere_hydro::DragForce and DragJacobian; new parameters Rho (default 1025) and DragCoefficient (default 1.2); with CastWake the weight casts through an environment::wake::BodyWake and a sphere_hydro::SphereCaster, and it reads its water velocity through BodyWake::WaterVelocity. Tests CenterWeight.RhoAndDragCoefficientSetTheDragAndTheBuoyancy, CenterWeight.WithoutCastWakeTheWeightCastsNothingAndReadsTheEnvironmentsFlow and CenterWeight.UpstreamWeightsWakeSlowsTheDownstreamWeight; before the change they did not compile (no waterVelocity, no CastWake). SimObject.CenterWeight's output equals CenterWeight_ref.csv at every printed digit: no baseline moves. 202/202 fishery tests pass.). File: resolved/FISH-0102-centerweight-casts-no-wake.md
  • FISH-0103 (KNOWN-LIMITATION) — Trawl/TrawlDoorControlledLiftAndMass was not ported from environment_from_marenv. Resolved: commit "Resolve FISH-0103: port Trawl/TrawlDoorControlledLiftAndMass", 2026-10-06 (owner ruling 2026-10-06: port it). TrawlDoorControlledLiftAndMass (src/trawl/TrawlDoorControlledLiftAndMass.{h,cpp}) is TrawlDoorControlledLift with WeightModel::Mass: parameters MassMin (positive) and MassMax in place of WeightMin, WeightMax and WeightcontrolPID; input MassGoal in place of BottomForceGoal; state Mass (default (MassMin + MassMax) / 2) in place of IntegratedBottomforceError, d(mass)/dt = clamp(MassGoal, MassMin, MassMax) − mass, used as the inertia; weight 9.81 × 0.87 × mass. Registered once, as Trawl/TrawlDoorControlledLiftAndMass. The lift, drag, seafloor and spread logic, with the 3.x fixes of TrawlDoorControlledLift, are shared. Test SimObject.TrawlDoorControlledLiftAndMass_MassFollowsTheGoal (fixture tests/in/TrawlDoorControlledLiftAndMass/): MassGoal 15000 kg from 12500 kg, and 30000 kg bounded to 20000 kg; the mass is goal + (12500 − goal) e^(−t) and the weight 9.81 × 0.87 × mass at every output time. Before the port the model did not exist; the TrawlDoorControlledLift tests pass unchanged.. File: resolved/FISH-0103-trawl-door-controlled-lift-and-mass-not-ported.md
  • FISH-0104 (BUG) — Seine/Vessel, Trawl/Vessel and Seine/Operation port values depend on the order of the calls. Resolved: commit "Resolve FISH-0104: seine and vessel port values are functions of (T, X)", 2026-10-06. The vessels read Vel/Heading at (T, X) wherever they use them; Seine/Operation::PhaseAt(T) is a pure function of time used by every port; BuoyPos is latched in PreOdeFcn (the vessel position at the start of the last step that starts in Phase_NotSet; PreOdeFcn follows a port reset, AcceptedStep does not); an attractor gives its motion at the reader's (T, X) (AttractorBase::MotionAt, from Seine/Vessel's states and speed command and Seine/Operation's strength ramp), which Seine/Cable takes in OdeFcn and its port calculation (fhsim_marine_elements CableBranched::PrepareSections); Seine/Cable also applies its Length inputs in OdeFcn (as MARE-0037). Tests SeineCallOrder.* (tests/SeineCallOrder_Test.cpp): all five failed before the fix (vessel Vel 5 instead of 2; VesselSpeed at 5 s gave 4 instead of 2; BuoyPos (7, 8) instead of (1, 2); cable derivatives changed after a port read and after a vessel port read at another state) and pass after it. The SeineOperation and SeineCable baselines moved (commit "Baselines for FISH-0104 (SeineOperation, SeineCable)"): the vessel from the Phase_SetFirstLeg start at 10 s (position RMS 8.6e-2 m in SeineOperation, 1.5e-3 m in SeineCable); the Seine/Cable warp tensions from t = 1 s (a few percent before 10 s, up to 1.3 kN of 4.6 kN at 12 s, within 0.2 % at 60 s; Tension1 RMS 228 N), as the cable now applies its Length inputs in OdeFcn and sees the vessel's command of its own stage.. File: resolved/FISH-0104-seine-vessel-port-values-depend-on-call-order.md
  • FISH-0105 (BUG) — CrowfootMath puts the collecting point of two taut lines off their circle. Resolved: 14c30f3, 2026-10-07. CalcPosForTwoStretched removes the force direction's component along the line between the fastening points. CrowfootMath.TwoTautLinesMeetOnTheirCircle_FISH0105 is green (red at af6d6ed); the Crowfoot baseline holds; Trawl/TrawlDoorWarpControl (8aaf758) relies on it (SimObject.TrawlDoorWarpControl_ControlLineTensionBalancesTheWarp).. File: resolved/FISH-0105-crowfoot-two-lines-off-their-circle.md
  • FISH-0106 (BUG) — TrawlDoorWarpControl: the warp end flips with the collecting point. Resolved: 7ec7c74, 2026-10-07. Option A: Pos1 and Vel1 are the door's WarpPos; the warp force acts at the collecting point solved at (T, X); new output CollectingPoint. SimObject.TrawlDoorWarpControl_SlackWarpEndStaysAtWarpPos_FISH0106 is green (red at 46e0833: Pos1 1.0 m off WarpPos). In TrawlDoorControl.xml (200 s, after 60 s) a slack control line gives the Trawl/TrawlDoor warp tension (mean 68 kN, max 102 kN) and no collecting-point jumps.. File: resolved/FISH-0106-warp-control-collecting-point-flips.md
  • FISH-0107 (BUG) — TrawlGeometryController: every Net<N>Width port returns one shared member. Resolved: 3a6f548, 2026-10-08. m_outNetWidth holds one value per net; SimObject.TrawlGeometryController_NetWidthsAreSeparate_FISH0107 is green (red at 3b91f75: Net1Width read 30 m after Net2Width). Warp<N>Length and MinBottomContact were checked and are not affected.. File: resolved/FISH-0107-geometry-controller-net-width-shared.md