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

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_marine_elements_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 (23)

ID Class Severity Status
MARE-0001 BUG 2 blocked
MARE-0003 BUG 2 blocked
MARE-0081 BUG 2 blocked
MARE-0110 KNOWN-LIMITATION 2 ready
MARE-0122 KNOWN-LIMITATION 2 blocked
MARE-0131 KNOWN-LIMITATION 2 blocked
MARE-0163 DOCUMENTATION 2 blocked
MARE-0211 ARCHITECTURE 2 ready
MARE-0314 KNOWN-LIMITATION 2 blocked
MARE-0319 BUG 2 ready
MARE-0354 KNOWN-LIMITATION 2 ready
MARE-0027 ARCHITECTURE 1 blocked
MARE-0031 TEST 1 ready
MARE-0121 TEST 1 blocked
MARE-0223 ARCHITECTURE 1 ready
MARE-0321 TEST 1 ready
MARE-0323 KNOWN-LIMITATION 1 ready
MARE-0324 TEST 1 ready
MARE-0326 KNOWN-LIMITATION 1 ready
MARE-0327 KNOWN-LIMITATION 1 ready
MARE-0328 BUG 1 ready
MARE-0329 TEST 1 ready
MARE-0353 DOCUMENTATION 1 ready

Resolved issues (235)

  • MARE-0002 (API) — RbCable/Cable maps to class CCableRM, which kept its C prefix. Resolved: 9f8db23, 2026-09-16. File: resolved/MARE-0002-rbcable-cable-class-ccablerm-prefix.md
  • MARE-0004 (KNOWN-LIMITATION) — The panel block of the NetStructure Jacobian is itself a forward difference. Resolved: 2ae2738, 2026-09-22. File: resolved/MARE-0004-netstructure-panel-jacobian-forward-difference.md
  • MARE-0005 (DOCUMENTATION) — Three registered classes have no documentation page. Resolved: a1e7260, c77dfe5, 2026-09-25. File: resolved/MARE-0005-three-classes-without-documentation-page.md
  • MARE-0006 (BUG) — Cable/LumpedMass reads NumElements, but the documentation and an example say numElements. Resolved: d374a00, 2026-09-15. File: resolved/MARE-0006-cable-lumpedmass-reads-numelements.md
  • MARE-0007 (DOCUMENTATION) — Cable/LumpedMass documents an input port velWater that does not exist. Resolved: d374a00, 2026-09-15. File: resolved/MARE-0007-cable-lumpedmass-documents-an-input-port.md
  • MARE-0008 (ARCHITECTURE) — src/cable/Cable.h carries two complete, divergent documentation blocks. Resolved: d374a00, 2026-09-15. File: resolved/MARE-0008-src-cable-cable-h-carries-two.md
  • MARE-0009 (DOCUMENTATION) — Net/Disk documents an output port ForceB where the code registers Velocity. Resolved: 4a78912, 2026-09-15. File: resolved/MARE-0009-net-disk-documents-an-output-port.md
  • MARE-0010 (KNOWN-LIMITATION) — RbCable/RBCable has no force output for end A, and the RbCable group's force-port case is unsettled. Resolved: 78fa902, 2026-09-30. File: resolved/MARE-0010-rbcable-force-ports-end-a-and-case.md
  • MARE-0011 (DOCUMENTATION) — Initial-condition state indices are documented as 1…N but generated 0-based. Resolved: 6cf95d6, 2026-09-15. File: resolved/MARE-0011-initial-condition-state-indices-are-documented.md
  • MARE-0012 (BUG) — Cable/Branched registers its Length<i> output port with width 3 over a scalar. Resolved: 3c30a67, 2026-09-15. File: resolved/MARE-0012-cable-branched-registers-its-length.md
  • MARE-0013 (DOCUMENTATION) — Several Cable/Branched documented names and widths do not match the code. Resolved: 3c30a67, 2026-09-15. File: resolved/MARE-0013-several-cable-branched-documented-names.md
  • MARE-0014 (BUG) — Cable/RigidBarCable binds both ForceB\<i\>a and ForceB\<i\>b to the same slot, and reads neither. Resolved: db0563a, 2026-09-30. File: resolved/MARE-0014-rigidbarcable-forceb-ports-same-slot.md
  • MARE-0015 (DOCUMENTATION) — Cable/RigidBarCable documents PosR/VelR as 1-based and misspells its own parameter. Resolved: e14a2bb, 2026-09-15. File: resolved/MARE-0015-cable-rigidbarcable-documents-posr-velr.md
  • MARE-0016 (BUG) — RbCable/Ring computes a modulus by NumConnectors before checking it is non-zero. Resolved: a7f8874, 2026-09-15. File: resolved/MARE-0016-rbcable-ring-computes-a-modulus.md
  • MARE-0017 (ARCHITECTURE) — RbCable/Ring reads NumInputsPerConnector and Cm_IsAddedMassHack without using or documenting them. Resolved: a2c7d11, 2026-09-30. File: resolved/MARE-0017-ring-unused-parameters.md
  • MARE-0018 (ARCHITECTURE) — The OpenCL sources are never compiled. Resolved: 8a40f10, 2026-09-27. File: resolved/MARE-0018-opencl-sources-never-compiled.md
  • MARE-0019 (ARCHITECTURE) — src/net/Test/NetSolidityMeshSpec.cpp and its header are in no source list. Resolved: 2ecd78b, 2026-09-30. File: resolved/MARE-0019-netsoliditymeshspec-in-no-source-list.md
  • MARE-0020 (DOCUMENTATION) — The trawl/mooring SimObjects and Net/NetStructureWithConstraints have no port or parameter documentation. Resolved: cb81dc7, 5340c40, 2026-09-25. File: resolved/MARE-0020-trawl-mooring-simobjects-undocumented-ports.md
  • MARE-0021 (ARCHITECTURE) — Three dead if (false /* v3: IntegratorEngine check removed */) blocks. Resolved: 9f8db23, 2026-09-16. File: resolved/MARE-0021-dead-integratorengine-if-false-blocks.md
  • MARE-0022 (DOCUMENTATION) — The NetStructure family documentation tables are ??? placeholders. Resolved: 24f9aa9, aad9c4f, 2026-09-25. File: resolved/MARE-0022-netstructure-documentation-tables-placeholders.md
  • MARE-0023 (API) — BouyancyFactor is misspelled, and the misspelling is load-bearing. Resolved: 9f8db23, 2026-09-16. File: resolved/MARE-0023-bouyancyfactor-misspelling-load-bearing.md
  • MARE-0024 (ARCHITECTURE) — Dead sources and dead references in the tree. Resolved: 9f8db23, 2026-09-16. File: resolved/MARE-0024-dead-sources-and-references.md
  • MARE-0025 (BUG) — RbCable/Cable documents the RBCABLE_CLASSIC_INTERFACE branch, but no build defines that macro. Resolved: bf7cce6, 2026-09-30. File: resolved/MARE-0025-rbcable-cable-classic-interface-macro-undefined.md
  • MARE-0026 (ARCHITECTURE) — NetElement3N force path is hard-typed on double, blocking algorithmic differentiation of the panel Jacobian. Resolved: 2ae2738, 2026-09-22. File: resolved/MARE-0026-netelement3n-force-path-not-scalar-templated.md
  • MARE-0028 (TEST) — The whole RbCable family (RMCable, RBCable, Cable6Dof, CableRM, Ring) has zero automated test coverage. Resolved: bf7cce6, 2026-09-30. File: resolved/MARE-0028-rbcable-family-zero-test-coverage.md
  • MARE-0029 (TEST) — MooringCable, TrawlCable, RundDorg and RigidBarCable have zero automated test coverage despite example scenarios. Resolved: dd57457, 2026-09-25. File: resolved/MARE-0029-trawl-mooring-rigidbarcable-zero-test-coverage.md
  • MARE-0030 (TEST) — NetStructureArray, NetStructureWakeEffect and NetStructureWithConstraints inherit none of NetStructure's Jacobian work and have no tests. Resolved: 875b0a7, 2026-09-25. File: resolved/MARE-0030-netstructure-siblings-no-jacobian-no-test.md
  • MARE-0032 (TEST) — NetStructure has no behavioural regression test. Resolved: 4d707ed, 2026-09-25. File: resolved/MARE-0032-netstructure-port-jacobian-and-behaviour-untested.md
  • MARE-0033 (TEST) — Cable/Branched has Jacobian tests only, no behavioural baseline. Resolved: 397b6f0, 2026-09-30. File: resolved/MARE-0033-jacobian-only-tests-lack-behaviour-coverage.md
  • MARE-0034 (DOCUMENTATION) — The Cable and Disk Jacobian tests' relTol comments overstate what each analytic Jacobian omits. Resolved: 295183c, 2026-09-24. File: resolved/MARE-0034-stale-jacobian-test-tolerance-comments.md
  • MARE-0035 (DOCUMENTATION) — Root JACOBIAN_ANALYSIS.md describes a Disk Jacobian bug that current Disk.cpp has already fixed. Resolved: refuted, 2026-09-24. File: resolved/MARE-0035-jacobian-analysis-md-stale-disk-doc.md
  • MARE-0036 (BUG) — The InternalCable structural-damping Jacobian ignores the compression-speed clamp, so it is wrong wherever that clamp is active. Resolved: 66ded69, 2026-09-30. File: resolved/MARE-0036-cable-jacobian-omits-compression-speed-clamp.md
  • MARE-0037 (TEST) — Until an output port runs CalcOutput, a CableBranched element keeps its default relaxed length, so the fixture's IC and shifted-offset Jacobian checks see a slack cable. Resolved: a4a308f, 2026-09-30. File: resolved/MARE-0037-cablebranched-fixture-checks-a-slack-cable.md
  • MARE-0038 (BUG) — NetStructure::InputPortJacobian indexes its local buffer with the global state offset. Resolved: fdea835, 2026-09-24. File: resolved/MARE-0038-netstructure-inputportjacobian-global-row.md
  • MARE-0039 (BUG) — RbCable/Ring's destructor frees an uninitialised visualisation pointer when visualisation was never initialised. Resolved: af4a3d4, 2026-09-24. File: resolved/MARE-0039-ring-destructor-frees-uninitialised-pointer.md
  • MARE-0040 (BUG) — Cable/RigidBarCable's destructor deletes an uninitialised visualisation pointer when visualisation was never initialised. Resolved: af4a3d4, 2026-09-24. File: resolved/MARE-0040-rigidbarcable-destructor-deletes-uninitialised-pointer.md
  • MARE-0041 (DOCUMENTATION) — Net/NetStructureArray and Net/NetStructureWakeEffect document output ports they do not register. Resolved: cf73623, 2026-09-24. File: resolved/MARE-0041-netstructure-array-wake-document-unregistered-ports.md
  • MARE-0042 (BUG) — TrawlCable, MooringCable and RundDorg delete visualisation pointers that only RenderInit assigns. Resolved: dd57457, 2026-09-25. File: resolved/MARE-0042-trawl-mooring-destructors-delete-uninitialised-vis-pointers.md
  • MARE-0043 (BUG) — MooringCable segfaults with NumElements="10". Resolved: b8ac4d8, 2026-09-30. File: resolved/MARE-0043-mooringcable-ten-elements-segfaults.md
  • MARE-0044 (BUG) — RundDorg leaves its weight type unassigned for an unrecognised WeightType. Resolved: a64d381, 2026-09-25. File: resolved/MARE-0044-runddorg-unknown-weighttype-left-unassigned.md
  • MARE-0045 (BUG) — TrawlCable's NumCpuCore default always gives the full hardware thread pool, and RundDorg has no thread setting. Resolved: 1e6148b, 2026-09-25. File: resolved/MARE-0045-trawlcable-numcpucore-default-inverted.md
  • MARE-0046 (BUG) — TrawlCable crashes when ClumpWeightMass is left at its default 0. Resolved: b3a9549, 2026-09-25. File: resolved/MARE-0046-trawlcable-zero-clump-weight-mass-crashes.md
  • MARE-0047 (BUG) — RMCable leaves the end point's acceleration term out of its constraint acceleration, so the last link drifts. Resolved: 1b7d06a, 2026-09-25. File: resolved/MARE-0047-rmcable-constraint-acceleration-drops-rdotdot.md
  • MARE-0048 (BUG) — TrawlCable's bottom bridle and RundDorg's Line2 take stiffness inputs from the top bridle and Line1. Resolved: a2e6378, 2026-09-25. File: resolved/MARE-0048-trawlcable-runddorg-second-bridle-uses-first-bridle-values.md
  • MARE-0049 (BUG) — MooringCable's bottom chain uses the mid-rope diameter as its contact radius. Resolved: 773f715, 2026-09-25. File: resolved/MARE-0049-mooringcable-bottom-chain-contact-radius-mid-rope.md
  • MARE-0050 (BUG) — MooringCable's buoy attachment: offset index, undefined behaviour outside the mid rope, fixed properties and a unit error in its inertia. Resolved: b1baf09, 2026-09-25. File: resolved/MARE-0050-mooringcable-buoy-connection-index-and-inertia.md
  • MARE-0051 (BUG) — MooringCable's top and bottom chains default to different second-moment formulas. Resolved: 0510a5e, 2026-09-25. File: resolved/MARE-0051-mooringcable-top-chain-second-moment-inconsistent.md
  • MARE-0052 (API) — RundDorg's force output ports are width 1 and give only the magnitude of the force. Resolved: 0273425, 2026-09-25. File: resolved/MARE-0052-runddorg-force-ports-expose-norm-only.md
  • MARE-0053 (DOCUMENTATION) — The MooringCable fixture and the trawl_mooring_interaction example set parameters that are never read. Resolved: 1d1fac5, 2026-09-25. File: resolved/MARE-0053-trawl-mooring-inputs-set-unread-parameters.md
  • MARE-0054 (BUG) — TrawlBeam projects the trawl force with the wrong rotation, so its east component has the wrong sign. Resolved: af9b01b, 2026-09-25. File: resolved/MARE-0054-trawlbeam-trawl-force-projection-sign.md
  • MARE-0055 (BUG) — TrawlBeam's StartTravel also seeds the controller states, and SaturationForce limits only from above. Resolved: 5f935b3, 2026-09-25. File: resolved/MARE-0055-trawlbeam-starttravel-and-saturation-limits.md
  • MARE-0056 (BUG) — NetStructureWithConstraints does not validate its inputs: default constraint parameters give NaN, and its node and panel lists are indexed unchecked. Resolved: cbcf2da, 2026-09-25. File: resolved/MARE-0056-nswc-inputs-unvalidated.md
  • MARE-0057 (BUG) — NetStructure and NetStructureWithConstraints add the net panels' wet mass in kg as a vertical force in N. Resolved: d927d41, 2026-09-25. File: resolved/MARE-0057-net-panel-weight-missing-gravity.md
  • MARE-0058 (BUG) — Net cable elements put sphere and disk mass, weight and drag on the opposite end from where they are drawn. Resolved: bafe44c, 2026-09-25. File: resolved/MARE-0058-net-cable-appendage-end-weighting.md
  • MARE-0059 (BUG) — NetStructureWithConstraints::AddCableForces runs an OpenMP loop with shared temporaries and unsynchronised force sums. Resolved: e5d993d, 2026-09-25. File: resolved/MARE-0059-nswc-addcableforces-openmp-race.md
  • MARE-0060 (BUG) — NetStructureWithConstraints uses πd⁴/4 for the coupling second area moment, and hard-codes the solver frequency at 100. Resolved: 47c3541, 2026-09-25. File: resolved/MARE-0060-nswc-coupling-second-moment-and-solver-frequency.md
  • MARE-0061 (BUG) — TrawlCable computes the clump weight's rotational inertia from the trawl-door dimensions. Resolved: 3c46ef7, 2026-09-25. File: resolved/MARE-0061-trawlcable-clump-weight-inertia-from-door.md
  • MARE-0062 (BUG) — TrawlCable's collision manager never tests trawl bodies added to the solver after the last MooringCable. Resolved: 2ef9cbf, 2026-09-25. File: resolved/MARE-0062-trawl-collision-skips-gear-after-mooring.md
  • MARE-0063 (BUG) — The trawl/mooring environment forces apply gravity and buoyancy only when the element moves relative to the water. Resolved: e125f14, 2026-09-25. File: resolved/MARE-0063-trawl-environment-gravity-only-when-moving.md
  • MARE-0064 (BUG) — The BottomContact output of the NetStructure family is always zero. Resolved: dd55ffe, 2026-09-30. File: resolved/MARE-0064-net-bottomcontact-port-always-zero.md
  • MARE-0065 (DOCUMENTATION) — Net definition files set General attributes that the Net/NetStructure reader never reads. Resolved: eddfba2, 2026-09-25. File: resolved/MARE-0065-net-files-set-unread-general-attributes.md
  • MARE-0066 (BUG) — MaxAcceleration limits the acceleration magnitude in NetStructure but each component in its siblings, and NetStructure's limit is not reached. Resolved: 8d89e6f, 2026-09-25. File: resolved/MARE-0066-net-maxacceleration-limit-inconsistent.md
  • MARE-0067 (BUG) — Net force and count output ports return overlapping slices or uninitialised memory. Resolved: 36799dd, 2026-09-25. File: resolved/MARE-0067-net-output-ports-overlapping-or-uninitialised.md
  • MARE-0068 (BUG) — NetStructureWakeEffect ignores its external force inputs and the seafloor, yet requires a SeafloorForces resource. Resolved: 2dab64f, 2026-09-25. File: resolved/MARE-0068-net-wakeeffect-ignores-external-and-bottom-forces.md
  • MARE-0069 (BUG) — NetStructureABAQUS opens the input directory instead of the file and indexes the parsed tokens and parts unchecked (Windows only). Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0069-netstructureabaqus-input-reading-defects.md
  • MARE-0070 (BUG) — NetStructureArray sets every node's initial position and velocity to zero. Resolved: 2b47125, 2026-09-25. File: resolved/MARE-0070-netstructurearray-initial-conditions-zeroed.md
  • MARE-0071 (BUG) — NetStructureTest uses a negative hydrodynamic diameter, a fixed current and a one-ended sphere force (Windows only). Resolved: 5b4e2be, 2026-09-25. File: resolved/MARE-0071-netstructuretest-drag-current-and-sphere-defects.md
  • MARE-0072 (BUG) — NetStructureWakeEffect hard-codes UseTagForExternalNodes to true. Resolved: 7252bd5, 2026-09-25. File: resolved/MARE-0072-netstructurewakeeffect-usetagforexternalnodes-hard-coded.md
  • MARE-0073 (BUG) — Net cable elements compute the disk drag coefficients with integer divisions, so disk drag is always zero. Resolved: 7c52a04, 2026-09-25. File: resolved/MARE-0073-net-cable-disk-drag-zeroed-by-integer-division.md
  • MARE-0074 (DOCUMENTATION) — The net cable disk drag model uses a friction coefficient on the edge area and an unusual cable correction. Resolved: 5ae9e52, 2026-09-25. File: resolved/MARE-0074-net-cable-disk-drag-model-unclear.md
  • MARE-0075 (KNOWN-LIMITATION) — TrawlCable, MooringCable and RundDorg results are not reproducible between runs (constraint-solver thread pool). Resolved: a93fe9c, 2026-09-25. File: resolved/MARE-0075-trawl-mooring-results-not-reproducible.md
  • MARE-0076 (BUG) — TrawlCableJointConstraint reads its thread-manager pointer and group ID uninitialised. Resolved: 1a98cfb, 2026-09-25. File: resolved/MARE-0076-trawlcablejointconstraint-thread-manager-uninitialised.md
  • MARE-0077 (BUG) — NetStructure keeps its analytical InputPortJacobian when MassFactor or MaxAcceleration turns its state Jacobian off, and that port Jacobian leaves both out. Resolved: fd0f1f1, 2026-09-25. File: resolved/MARE-0077-netstructure-port-jacobian-ignores-adaptations.md
  • MARE-0078 (BUG) — NetStructure reports analytical port Jacobians but has no OutputPortJacobian for its state-dependent output ports. Resolved: pending, 2026-09-30. File: resolved/MARE-0078-netstructure-output-port-jacobian-missing.md
  • MARE-0079 (BUG) — MooringCable takes 18 s to set up a straight line, because the catenary solve converges very slowly. Resolved: fc55b16, 2026-09-25. File: resolved/MARE-0079-mooringcable-straight-line-catenary-setup-slow.md
  • MARE-0080 (BUG) — NetStructureArray gives its cable elements no inertia, so a node on cables only has zero mass. Resolved: 1d91424, 2026-09-30. File: resolved/MARE-0080-netstructurearray-cable-elements-no-inertia.md
  • MARE-0082 (BUG) — Cable/LumpedMass gives each end node of an element the element's whole weight in water, so the cable weighs twice its weight. Resolved: 823625f, 2026-09-25. File: resolved/MARE-0082-cable-element-weight-doubled.md
  • MARE-0083 (BUG) — The net panel drag scales the current by the solidity factor instead of the flow relative to the net, so a free panel outruns the current. Resolved: a715efa, 2026-09-25. File: resolved/MARE-0083-net-solidity-factor-scales-current-not-relative-flow.md
  • MARE-0084 (BUG) — Net/Sphere reads the water velocity but takes its drag on its own velocity, so it ignores the current. Resolved: b3a864a, 2026-09-25. File: resolved/MARE-0084-sphere-drag-ignores-current.md
  • MARE-0085 (BUG) — The net panel twine Reynolds number uses |snFactor · U_rel|, while the wake-effect screen model uses U_rel / (1 − S_n). Resolved: 991f820, 2026-09-25. File: resolved/MARE-0085-net-panel-reynolds-number-differs-from-screen-model.md
  • MARE-0086 (KNOWN-LIMITATION) — Net/Sphere has no added mass or Froude–Krylov force. Resolved: f36683d, 2026-09-25. File: resolved/MARE-0086-sphere-no-added-mass-or-froude-krylov.md
  • MARE-0087 (DOCUMENTATION) — README names the conf tools.build:skip_tests, which Conan rejects; the recipe reads tools.build:skip_test. Resolved: see commit "Name the Conan test switch tools.build:skip_test in the README", 2026-09-26. File: resolved/MARE-0087-readme-skip-tests-conf-name.md
  • MARE-0088 (TEST) — Net hydrodynamics: measurement data files and CSV reader for the validation tests. Resolved: 378a4aa, 2026-09-26. File: resolved/MARE-0088-net-hydro-measurement-data.md
  • MARE-0089 (KNOWN-LIMITATION) — Net hydrodynamics: LocalThroughFlow (default) and ScreenKF2012 panel load laws. Resolved: 9671c2b, 2026-09-26. File: resolved/MARE-0089-net-hydro-local-through-flow-law.md
  • MARE-0090 (API) — Net hydrodynamics: ScreenMF2022 panel load law. Resolved: 972e04a, 2026-09-26. File: resolved/MARE-0090-net-hydro-screen-mf2022-law.md
  • MARE-0091 (ARCHITECTURE) — Net hydrodynamics: extract the twine cross-flow law into TwineCrossFlow. Resolved: aa2d0a7, 2026-09-26. File: resolved/MARE-0091-net-hydro-twine-cross-flow-extraction.md
  • MARE-0092 (API) — Net hydrodynamics: PanelLoadLaw variant, dispatch and ReadPanelLoadLaw parser. Resolved: e89b5b2, 2026-09-26. File: resolved/MARE-0092-net-hydro-panel-load-law-variant.md
  • MARE-0093 (TEST) — Net hydrodynamics: load-law tests L1-L9 against MF2022, Zhan 2006, Rudi/Loland. Resolved: d8c000c, 2026-09-26. File: resolved/MARE-0093-net-hydro-load-law-validation-tests.md
  • MARE-0094 (ARCHITECTURE) — Net hydrodynamics: split the panel core, caller-owned solidity, wire NetStructure to the load laws. Resolved: 8e64e88, 2026-09-26. File: resolved/MARE-0094-net-hydro-core-split-and-netstructure-wiring.md
  • MARE-0095 (ARCHITECTURE) — Net hydrodynamics: port NetStructureWithConstraints to the shared panel core. Resolved: ab7f71f, 2026-09-27. File: resolved/MARE-0095-net-hydro-withconstraints-port.md
  • MARE-0096 (ARCHITECTURE) — Net hydrodynamics: port NetStructureArray / FNetElement to the shared panel core. Resolved: a0feeff, 2026-09-27. File: resolved/MARE-0096-net-hydro-array-port.md
  • MARE-0097 (ARCHITECTURE) — Net hydrodynamics: delete NetStructureWakeEffect, ScreenElement3N and the OpenCL panel copies. Resolved: 8a40f10, 2026-09-27. File: resolved/MARE-0097-net-hydro-delete-legacy-panel-copies.md
  • MARE-0098 (BUG) — Net/Disk drag uses an element-wise product instead of the normal projection of the relative velocity. Resolved: b8a045f, 2026-09-27. File: resolved/MARE-0098-disk-odefcn-normal-tangential-projection.md
  • MARE-0099 (TEST) — Net hydrodynamics: towed-panel validation S1 and one regeneration of the regression baselines. Resolved: 3daf95a, 2026-09-28. File: resolved/MARE-0099-net-hydro-baselines-and-towed-panel-validation.md
  • MARE-0100 (KNOWN-LIMITATION) — Net hydrodynamics: NetStructure casts its wake into the environment (NetWakeCaster). Resolved: 3ada983, 2026-09-27. File: resolved/MARE-0100-net-hydro-netstructure-wake-casting.md
  • MARE-0101 (TEST) — Net hydrodynamics: SimObject validation S2-S4, S6 and the S7 trawl harness. Resolved: c568134, 2026-09-27. File: resolved/MARE-0101-net-hydro-cage-validation.md
  • MARE-0102 (TEST) — Net hydrodynamics: benchmark of load laws and wake evaluation; propose the default WakeGrid. Resolved: 6c643bf, 2026-09-27. File: resolved/MARE-0102-net-hydro-wake-benchmark.md
  • MARE-0103 (DOCUMENTATION) — Net hydrodynamics: CONTEXT.md and ADRs 0001-0005 (vocabulary for all lanes). Resolved: 868d62f (merge of wp/E0-vocabulary; marenv 8493854, fhsim_environment 4ce3979), 2026-09-26. File: resolved/MARE-0103-net-hydro-vocabulary-and-adrs.md
  • MARE-0104 (DOCUMENTATION) — Net hydrodynamics: methods manual doc/user/net_hydrodynamics_methods.md. Resolved: 220e4a7, 2026-09-26. File: resolved/MARE-0104-net-hydro-methods-manual.md
  • MARE-0105 (DOCUMENTATION) — Net hydrodynamics: implementation guide, user guide, parameter tables and XML examples. Resolved: 8f274c3, 3465f2e, 2026-09-27. File: resolved/MARE-0105-net-hydro-guides-and-examples.md
  • MARE-0106 (DOCUMENTATION) — Net hydrodynamics: generated validation report doc/user/validation/. Resolved: 663e2fb, 2026-09-27. File: resolved/MARE-0106-net-hydro-validation-report.md
  • MARE-0107 (DOCUMENTATION) — Net hydrodynamics: documentation review against the finished code. Resolved: 025dae5, 2026-09-27. File: resolved/MARE-0107-net-hydro-documentation-review.md
  • MARE-0108 (BUG) — TwineCrossFlow evaluates asin(Re/lamLimit), NaN for Re > lamLimit = 2e5, and lamLimit (2e5) < turbLimit (3.4e5). Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0108-twine-cross-flow-laminar-limit-asin-nan.md
  • MARE-0109 (KNOWN-LIMITATION) — Default law induction factor exceeds 1 below Sₙ ≈ 0.082. Resolved: 4714b56, 2026-09-27. File: resolved/MARE-0109-induction-factor-exceeds-one-low-solidity.md
  • MARE-0111 (KNOWN-LIMITATION) — Screen load laws give no in-plane load, so panels in grazing flow have no drag along the panel. Resolved: 16cc208, 2026-09-27. File: resolved/MARE-0111-net-hydro-screen-laws-no-in-plane-load.md
  • MARE-0112 (BUG) — NetStructureArray: buoyant twine (BarRho < Rho) gives a NaN damping coefficient and NaN node forces. Resolved: f639931 (fix), 32b6d65 (tests), 2026-09-27. File: resolved/MARE-0112-net-structure-array-buoyant-twine-nan-damping.md
  • MARE-0113 (KNOWN-LIMITATION) — MeshOpening solidity uses the unstretched bar length while loads use the deformed area. Resolved: wontfix by owner decision (Q15, lead ruling R28), 2026-09-27. File: resolved/MARE-0113-mesh-opening-solidity-unstretched-bar-length.md
  • MARE-0114 (KNOWN-LIMITATION) — NetStructureWithConstraints does not cast a wake. Resolved: c17bbf5, 2026-09-27. File: resolved/MARE-0114-withconstraints-no-wake-casting.md
  • MARE-0115 (ARCHITECTURE) — Port NetStructure setup onto NetPanelSetup.h. Resolved: 83ed259, 2026-09-27. File: resolved/MARE-0115-netstructure-onto-netpanelsetup.md
  • MARE-0116 (KNOWN-LIMITATION) — Self-shadowing possible under manoeuvres between wake rebuilds. Resolved: pending, 2026-09-30. File: resolved/MARE-0116-wake-self-shadowing-under-manoeuvres.md
  • MARE-0117 (ARCHITECTURE) — Deprecate NetStructureWakeEffect and NetElement3NWakeEffect (kept for 4.x). Resolved: 6c7c72b, 2026-09-27; kept and deprecated by owner decision (Q3, lead ruling R37). File: resolved/MARE-0117-deprecate-netstructure-wake-effect.md
  • MARE-0118 (ARCHITECTURE) — Port NetStructureArray setup onto NetPanelSetup.h. Resolved: 8ce0244, 2026-09-27. File: resolved/MARE-0118-netstructurearray-onto-netpanelsetup.md
  • MARE-0119 (KNOWN-LIMITATION) — NetStructureWithConstraints runs are slow for their size, dominated by system time. Resolved: pending, 2026-09-30. File: resolved/MARE-0119-withconstraints-slow-system-time.md
  • MARE-0120 (BUG) — Net files are looked up in the working directory, not next to the input file. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0120-net-file-lookup-working-directory.md
  • MARE-0123 (BUG) — Owner answers to Q19 (R32): cable Rho, Disk DiskMesh, area-weighted wake frame. Resolved: ccff439 (a), 2309157 (b), c7701fc and da441fd (d); shared-file edits a3cfd61, 2026-09-27. File: resolved/MARE-0123-owner-q19-cable-rho-diskmesh-wake-frame.md
  • MARE-0124 (BUG) — Sphere reads SphereMesh but never uses it. Resolved: 0f1f58c, 2026-09-27. File: resolved/MARE-0124-sphere-spheremesh-unused.md
  • MARE-0125 (TEST) — Net hydrodynamics: B6 re-benchmark after lumped external wakes (Q12). Resolved: 11887b6, 2026-09-27. File: resolved/MARE-0125-phase-f-b6-rebenchmark.md
  • MARE-0126 (DOCUMENTATION) — Net hydrodynamics phase F: contract text C3/C4/C5 and ADRs for lumped external wakes. Resolved: 289a12d, 2026-09-27. File: resolved/MARE-0126-phase-f-contracts-and-adrs.md
  • MARE-0127 (API) — Disk and Sphere cast wakes through WakeCastingObject. Resolved: 9ab77f5, 2026-09-27. File: resolved/MARE-0127-phase-f-disk-sphere-cast-wakes.md
  • MARE-0128 (DOCUMENTATION) — Net hydrodynamics phase F: wake manual, methods manual, CHANGELOG, OpenWiki, validation pages. Resolved: a523515, 2026-09-27. File: resolved/MARE-0128-phase-f-documentation.md
  • MARE-0129 (API) — Net wake casting: private per-panel field for self-shading, one registered lumped source per net. Resolved: 2d95765, 2026-09-27. File: resolved/MARE-0129-phase-f-net-lumped-wake.md
  • MARE-0130 (KNOWN-LIMITATION) — ScreenMF2022 below the fit range: negative Eq. 10 drag, clamped where C_D(θ) ≥ 0 (Q5, QG1). Resolved: 31e51a7, 2026-09-27; floor raised (QG1) on wp/G5-mf2022-floor, 2026-09-27. File: resolved/MARE-0130-screen-mf2022-solidity-below-eq10-roots.md
  • MARE-0132 (TEST) — W9 cannot read a net's internal flow since the per-panel field is private (phase F). Resolved: 079c3ec, 2026-09-27. File: resolved/MARE-0132-w9-private-field-not-observable.md
  • MARE-0133 (KNOWN-LIMITATION) — MaxAcceleration breaks the balance of action and reaction: a net whose nodes reach the limit drives itself. Resolved: c8d9e6d, 2026-09-28. File: resolved/MARE-0133-net-acceleration-limit-drives-the-net.md
  • MARE-0134 (BUG) — Net/NetStructure and Net/Disk offer an analytical Jacobian that omits seafloor contact. Resolved: 1de224f, 2026-09-28. File: resolved/MARE-0134-jacobian-omits-bottom-contact.md
  • MARE-0135 (BUG) — Under Sundials BDF a net that touches the seabed gets an unfilled Newton Jacobian until FhSim 3.3.1 is consumed. Resolved: 6dcd350, 2026-09-28. File: resolved/MARE-0135-sundials-jacobian-unfilled-after-touchdown.md
  • MARE-0136 (BUG) — Freeze re-arms the net wakes when the ambient current at the structure changes. Resolved: 53286c4, 2026-09-28. File: resolved/MARE-0136-freeze-rearms-on-ambient-current.md
  • MARE-0137 (BUG) — HydroA3 above 0.25 or |HydroB4| above 0.5 accepted silently: negative drag at grazing angles, reversed lift. Resolved: d10d5da, 2026-09-28. File: resolved/MARE-0137-harmonics-outside-sign-bounds-accepted.md
  • MARE-0138 (TEST) — Every default ctest, conan build and conan create runs the slow VALIDATION entry. Resolved: 9f86cbf (docs cc158ae), 2026-09-28. File: resolved/MARE-0138-validation-tests-run-by-default.md
  • MARE-0139 (BUG) — A panel with collinear mesh coordinates (meshDet = 0) is accepted for every law but TwineCrossFlow and gives NaN twine tension. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0139-collinear-mesh-panel-nan-tension.md
  • MARE-0140 (BUG) — KnotFactor and Solidity are not validated, and the load laws' clamp flags are discarded, so run-time clamps leave no trace. Resolved: b184053, 2026-09-30. File: resolved/MARE-0140-solidity-inputs-unvalidated-clamp-flags-discarded.md
  • MARE-0141 (KNOWN-LIMITATION) — The cable and float share of a casting net's drag is left out of the lumped wake and never reported, although QF9 asked for it. Resolved: ff4a1bb, 2026-09-30. File: resolved/MARE-0141-cable-share-of-cast-wake-not-reported.md
  • MARE-0142 (TEST) — Test gaps in the regimes the net-hydrodynamics branch targets: per-law structure Jacobian, KF2012 Re upper clamp and Sn floor, QF6 widening, zero relative flow, relaxed M. Resolved: 315b3ab, 2026-09-30. File: resolved/MARE-0142-net-hydrodynamics-test-gaps.md
  • MARE-0143 (BUG) — In Grid mode, std::invalid_argument escapes PreOdeFcn on a fully degenerate net. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0143-grid-wake-throws-on-degenerate-net.md
  • MARE-0144 (BUG) — NetWakeCaster::RelaxLumped passes a non-finite frontal area to MakeLumpedSource, which throws out of PreOdeFcn. Resolved: 40c4b1a, 2026-09-30. File: resolved/MARE-0144-relax-lumped-non-finite-area-throws.md
  • MARE-0145 (BUG) — A NaN solidity gives a NaN force with flags 0 under LocalThroughFlow and ScreenMF2022, but a clamped finite force under TwineCrossFlow. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0145-nan-solidity-handled-differently-by-laws.md
  • MARE-0146 (DOCUMENTATION) — "Screen-law friction equals TwineCrossFlow{} − TwineCrossFlow{ct=0} for any state" is false for ScreenMF2022 below Sn = 0.1005. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0146-friction-identity-doc-ignores-mf2022-floor.md
  • MARE-0147 (DOCUMENTATION) — The ScreenMF2022 fit-range warning says "extrapolated" for Sn > 0.5, where Evaluate clamps to 0.5. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0147-mf2022-warning-says-extrapolated-above-clamp.md
  • MARE-0148 (DOCUMENTATION) — TwineCrossFlow.h and KF2012Common.h cite net_element_forces::CalcHydroDynamicForces, CalcVelocities and CalcSolidity as present code. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0148-law-doxygen-cites-removed-panel-functions.md
  • MARE-0149 (DOCUMENTATION) — Remaining stale status text: CHANGELOG and the migration page list MENV-0008 as open, and the WakeCutoff option still says "owner question Q12". Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0149-stale-q12-and-menv-0008-status-text.md
  • MARE-0150 (DOCUMENTATION) — WakeCutoff is documented as the kernel cutoff deficit for Disk and Sphere, but has no effect there. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0150-wakecutoff-no-effect-on-disk-and-sphere.md
  • MARE-0151 (DOCUMENTATION) — The wake example inputs describe the wake as it was before the lumped-wake rework (phase F). Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0151-wake-example-comments-predate-lumped-wakes.md
  • MARE-0152 (DOCUMENTATION) — The lumped wake starts as a step at the rear face, so an object crossing a cage's rear-face plane sees a jump in inflow; not documented for cage users. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0152-lumped-wake-step-at-rear-face-undocumented.md
  • MARE-0153 (ARCHITECTURE) — AnyNodeInBottomContact repeats the bathymetry lookup for every node on every OdeFcn. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0153-bottom-contact-flag-repeats-depth-lookup.md
  • MARE-0154 (ARCHITECTURE) — Dead code left after the panel refactors, and an audit note that quotes the removed maxAcceleration guard as current code. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0154-dead-code-after-panel-refactors.md
  • MARE-0155 (ARCHITECTURE) — The KF2012 cylinder polynomial and the induction factor r = min(1.08 − 0.97 Sn, 1) are implemented several times. Resolved: d387de1, 2026-09-30. File: resolved/MARE-0155-load-law-formulas-duplicated.md
  • MARE-0156 (BUG) — The NetStructureWakeEffect deprecation warning always names Net/NetStructureWakeEffect, also for a derived Netcage or NetCageWakeEffect. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0156-deprecation-warning-names-base-class.md
  • MARE-0157 (BUG) — NetStructureWakeEffect queries the waked current in FinalSetup, so its wake polynomials depend on FinalSetup order. Resolved: 2ecd78b, 2026-09-30. File: resolved/MARE-0157-wakeeffect-finalsetup-samples-waked-current.md
  • MARE-0158 (BUG) — NetStructureArray gives its panels the waked flow with waves at the centroid, but its cables the current without waves at end node A. Resolved: 1d91424, 2026-09-30. File: resolved/MARE-0158-netstructurearray-panel-and-cable-water-velocity-differ.md
  • MARE-0159 (ARCHITECTURE) — Wake logic is duplicated across marenv, fhsim_environment and NetWakeCaster (composition, relaxation, rear-face kernel, kMinRelativeFlow). Resolved: 16e601b, 2026-10-01 (characterisation test e30faf2; NetWakeCaster: Composition is gone, the panels compose with marenv's WakeAccumulator (R95); LumpedFieldKernel and the kMinRelativeFlow copy are gone (marenv LumpedKernel, kMinRelativeFlow); the other wakes are selected by pointer through SelectReachingWakeFields(region of the centroids, own lumped field) at the exact tier; the Direct march mirrors with MirrorImages and ImageMap::QueryDepth, as the published field; Rebuild is split into CollectPanels, MakeFrame, MarchPrivateSources, PublishPrivate, PublishLumped and LogRebuild; BodyFlowInteraction excludes the body's field with LumpedWakeCaster::OwnQuery(); the test DirectMarchSeesThePublishedPrivateField pins march = published (3e-16; 1.1e-4 with the march's images dropped); bit-identical: the M3 hexfloat probe is identical, 350 SimObject result files unchanged, 383/383 suite tests pass. Left: RelaxLumped repeats fhsim_environment's private LumpedWakeCaster::Relax, which has no shared helper to call). File: resolved/MARE-0159-wake-logic-duplicated-across-layers.md
  • MARE-0160 (DOCUMENTATION) — ADR 0001 still says every consumer sees a net's wake and that NetStructureWakeEffect is deleted, contradicted by ADR 0006 and R6/R37. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0160-adr-0001-not-marked-partly-superseded.md
  • MARE-0161 (ARCHITECTURE) — Installed headers include fhsim_environment, marenv and fhsim_coribo headers, but those requirements are not transitive_headers. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0161-installed-headers-need-transitive-environment-and-coribo.md
  • MARE-0162 (ARCHITECTURE) — fhsim_marine_elements uses the marenv API directly but declares no marenv requirement. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0162-marenv-used-directly-without-requirement.md
  • MARE-0164 (DOCUMENTATION) — AddedDragPerMPS is applied in OdeFcn but not in EvaluatePanel, so a casting net's lumped M leaves it out. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0164-added-drag-left-out-of-lumped-wake.md
  • MARE-0165 (KNOWN-LIMITATION) — Removed input attributes such as MaxAcceleration are dropped without a warning (File= attributes) or with only an Info line. Resolved: 9dd4572, 2026-09-30. File: resolved/MARE-0165-removed-parameters-dropped-without-warning.md
  • MARE-0166 (BUG) — Cable/Branched reads the General-level FluidRho but never uses it; per-element FluidRho defaults to 1025. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0166-cablebranched-general-fluidrho-unused.md
  • MARE-0200 (KNOWN-LIMITATION) — TwineCrossFlow normal drag steps by −35 % where the Reynolds number drops below 32 and by +5 % above 10^4. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0200-twinecrossflow-cn-steps-at-re-32-and-1e4.md
  • MARE-0201 (TEST) — The finiteness of the screen laws' Jacobian at zero relative velocity rests on an fhlib convention no test pinned. Resolved: bdc360d, 2026-09-28. File: resolved/MARE-0201-screen-law-jacobian-at-rest-not-pinned.md
  • MARE-0202 (DOCUMENTATION) — knotDiameterRatio was documented as a TwineCrossFlow parameter, but it sets the in-plane friction of every law. Resolved: bdc360d, 2026-09-28. File: resolved/MARE-0202-knot-diameter-ratio-documented-as-twinecrossflow-only.md
  • MARE-0203 (KNOWN-LIMITATION) — NetStructureArray fixes the knot diameter at 2 BarD, so a non-default knotDiameterRatio gives it different friction and knot drag from NetStructure. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0203-netstructurearray-knot-diameter-ratio-fixed.md
  • MARE-0204 (ARCHITECTURE) — NormalForceCalc is compiled and installed but never used, and its destructor leaks m_numForcesAdded. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0204-normalforcecalc-dead-and-leaks.md
  • MARE-0205 (ARCHITECTURE) — The AD panel Jacobian carries eighteen gradient slots where twelve give the same Jacobian, and costs about 40 times the force. Resolved: 7002356 (merge of da1f170), 2026-09-28. File: resolved/MARE-0205-panel-jacobian-eighteen-slots-where-twelve-suffice.md
  • MARE-0206 (ARCHITECTURE) — Every panel evaluation computes load diagnostics (drag, lift, theta, Re, localCd, friction projections) that the force path never reads. Resolved: won't fix, 2026-09-30. File: resolved/MARE-0206-panel-load-diagnostics-computed-every-call.md
  • MARE-0207 (KNOWN-LIMITATION) — Under induction the lift is Schubauer(f² c_d), not f² Schubauer(c_d): the two differ by 2-3 % above Sn = 0.36. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0207-lift-under-induction-placement-of-f-squared.md
  • MARE-0208 (BUG) — HydroA3 has no lower bound, and a NaN HydroA3 or HydroB4 passes the harmonic bounds. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0208-hydroa3-lower-bound-and-nan-accepted.md
  • MARE-0209 (ARCHITECTURE) — NetStructure declares a dense Jacobian, so implicit runs pay a dense LU and every finite-difference Jacobian costs one RHS per state. Resolved: 7a9aa4e, 2026-09-30. File: resolved/MARE-0209-netstructure-declares-dense-jacobian.md
  • MARE-0210 (KNOWN-LIMITATION) — In waves the particle velocity is evaluated once per panel and cable at every RHS and costs 3.4 times the whole panel force. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0210-wave-kinematics-per-panel-dominate-rhs.md
  • MARE-0212 (ARCHITECTURE) — A net's panel and cable loops run on one thread, so one large cage cannot use more than one core. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0212-net-panel-and-cable-loops-single-threaded.md
  • MARE-0213 (BUG) — Net cable elements blend the air/water density twice, and an element with node 1 exactly at z = 0 gets air density. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0213-net-cable-density-blended-twice.md
  • MARE-0214 (KNOWN-LIMITATION) — Surface-piercing buoyancy of net cables and their floats uses the mean surface and the element's end nodes, not the body's shape or the wave surface. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0214-surface-piercing-buoyancy-from-end-nodes.md
  • MARE-0215 (KNOWN-LIMITATION) — No marine-elements model uses the water particle acceleration: no Froude-Krylov or added-mass excitation in waves. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0215-no-froude-krylov-or-added-mass-excitation.md
  • MARE-0216 (BUG) — RbCable/Cable took an element as wet when z > eta, the wrong sign of the wave elevation. Resolved: c6b0db8, 2026-09-28. File: resolved/MARE-0216-cablerm-wet-test-wrong-wave-sign.md
  • MARE-0217 (BUG) — RbCable/Cable applies the normal drag coefficient along the axis (Ct = Cd), and the axial drag steps 7-fold near 1.7° where Re passes 10^6. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0217-cablerm-tangential-drag-equals-normal.md
  • MARE-0218 (BUG) — RbCable/6DofCable subtracted its buoyancy as a mass, and projected the tangential velocity on an axis of length L/2. Resolved: c6b0db8, 2026-09-28. File: resolved/MARE-0218-6dofcable-buoyancy-without-g-and-scaled-axis.md
  • MARE-0219 (BUG) — Net/Disk on the seabed replaces its weight by a mass in kg: weightless on a flat seafloor, pushed up on soil with a density. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0219-disk-on-seabed-loses-weight.md
  • MARE-0220 (KNOWN-LIMITATION) — A float or disk on a net cable carries the full displaced mass as added mass (Ca = 1), where Net/Sphere uses 0.5 and Net/Disk none. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0220-net-appendage-added-mass-ca-one.md
  • MARE-0221 (BUG) — RbCable/Cable kelp drag was NaN for relative flow along the element axis. Resolved: c6b0db8, 2026-09-28. File: resolved/MARE-0221-cablerm-kelp-drag-nan-for-axial-flow.md
  • MARE-0222 (ARCHITECTURE) — RbCable/Cable allocates in every OdeFcn and repeats the depth lookup in its seabed branch. Resolved: pending, 2026-09-30. File: resolved/MARE-0222-cablerm-allocates-in-odefcn.md
  • MARE-0224 (BUG) — Net cable elements update cached state inside the const OdeFcn, so with AdaptationPeriod set the force depends on the previous RHS call. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0224-net-cable-element-mutates-in-const-odefcn.md
  • MARE-0225 (KNOWN-LIMITATION) — Cable/LumpedMass and Cable/Branched sample the current and wakes but not the wave particle velocity. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0225-cable-objects-see-no-wave-velocity.md
  • MARE-0226 (KNOWN-LIMITATION) — TrawlCable and MooringCable treat elements above the sea surface as submerged: the air branch is commented out. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0226-trawlcable-above-surface-treated-as-submerged.md
  • MARE-0227 (KNOWN-LIMITATION) — RbCable/6DofCable sees no current or wake, uses a component-wise quadratic drag and takes its centre depth as the depth of its lowest point. Resolved: dea65d2, 2026-09-30. File: resolved/MARE-0227-6dofcable-no-current-and-submergence-datum.md
  • MARE-0228 (TEST) — BDF step recovery after touchdown hangs on rounding: a 1e-14 relative change of the panel Jacobian keeps the steps collapsed on the seabed. Resolved: 0b30a62, 2026-09-28 (the test; the model behaviour it exposed is MARE-0229). File: resolved/MARE-0228-bdf-touchdown-step-recovery-fragile.md
  • MARE-0229 (KNOWN-LIMITATION) — BDF of order 3 to 5 sustains the undamped seabed-contact oscillation of a net at rest: the step can stay near 1 % of StepMax. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0229-bdf-high-order-sustains-seabed-contact-oscillation.md
  • MARE-0301 (ARCHITECTURE) — Nets and bodies re-compose the other objects' wakes at every RK stage and Jacobian evaluation. Resolved: f74c7b2, 2026-09-28. File: resolved/MARE-0301-external-wakes-per-step.md
  • MARE-0302 (KNOWN-LIMITATION) — The default private wake grid and cutoff are inaccurate at 10⁴ panels. Resolved: fc1ecfe, 2026-09-28. File: resolved/MARE-0302-private-grid-defaults-at-1e4-panels.md
  • MARE-0303 (ARCHITECTURE) — Legacy NetStructureWakeEffect makes 4 environment lookups per panel where 2 give the same numbers. Resolved: c6b8142, 2026-09-28. File: resolved/MARE-0303-wakeeffect-duplicate-flow-lookups.md
  • MARE-0304 (BUG) — Under Freeze a moored cage's frozen wakes drift at the transient's residual velocity. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0304-frozen-net-wake-drifts.md
  • MARE-0305 (KNOWN-LIMITATION) — The lumped M is normalised by the square of the mean flow, not the mean dynamic pressure. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0305-lumped-momentum-from-mean-flow-square.md
  • MARE-0306 (API) — The net wakes need their seabed image plane from the caster. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0306-seabed-and-surface-images.md
  • MARE-0307 (KNOWN-LIMITATION) — A net's private wake field mirrors at the seabed; the owner keeps only the surface image there (R82). Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0307-private-wake-without-seabed-image.md
  • MARE-0308 (KNOWN-LIMITATION) — The panel wake sources hand the law's Sₙ (with the knot factor, without the bar overlap) to the MF2022 Eq. 11 near wake. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0308-near-wake-solidity-snc.md
  • MARE-0309 (API) — Net wake casting follows marenv's ambient normalisation (R87) and linear superposition (R88). Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0309-lumped-wake-ambient-normalisation-and-linear-superposition.md
  • MARE-0310 (ARCHITECTURE) — Net/NetStructureWithConstraints and Net/NetStructureArray keep serial panel and cable loops. Resolved: pending, 2026-09-30. File: resolved/MARE-0310-parallel-loops-in-withconstraints-and-array.md
  • MARE-0311 (KNOWN-LIMITATION) — Receivers took the other objects' wakes by the exact tier only; R47 accepts the cutoff tier. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0311-receivers-take-external-wakes-by-the-cutoff-tier.md
  • MARE-0312 (API) — Net wake casting follows marenv's momentum-flux-conserving composition (R95). Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0312-wake-composition-momentum-flux-rule.md
  • MARE-0313 (KNOWN-LIMITATION) — The wave surface (R66) and the wave excitation (R67) do not reach every model. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0313-surface-and-wave-excitation-not-everywhere.md
  • MARE-0315 (KNOWN-LIMITATION) — RbCable/6DofCable and RbCable/Ring are not connected to the Environment, so R104's wave surface and excitation cannot reach them. Resolved: dea65d2, 2026-09-30. File: resolved/MARE-0315-6dofcable-ring-no-environment.md
  • MARE-0316 (BUG) — Net cable elements took the rope's wave excitation along the full water acceleration, axis included (R108). Resolved: see Resolution, 2026-09-29. File: resolved/MARE-0316-net-cable-excitation-isotropic.md
  • MARE-0317 (ARCHITECTURE) — NetStructureWithConstraints builds its constraint solver on a hardware_concurrency-sized thread pool, which costs small runs seconds of system time. Resolved: 65577aa, 2026-09-30. File: resolved/MARE-0317-withconstraints-solver-thread-pool.md
  • MARE-0318 (BUG) — NetElement3N destructor deletes uninitialised pointers when the element is never rendered. Resolved: 7f702f3, 2026-09-30. File: resolved/MARE-0318-netelement3n-uninitialised-line-pointer.md
  • MARE-0322 (BUG) — The low-Reynolds cable drag correlation has 0.01646 in RbCable/Cable and 0.1646 in TrawlCable. Resolved: 60f1896, 2026-10-01. Both families call cable_hydrodynamics::NormalDragCoefficient (cable/subroutines/CableHydrodynamics.h) with the offset 0.01646. Test: tests/CableHydrodynamics_Test.cpp, TrawlAndRbCableTakeTheSameDragAtLowReynoldsNumber (fails with the old trawl copy), and the fit against the cylinder-drag curve.. File: resolved/MARE-0322-cable-drag-correlation-constant-mismatch.md
  • MARE-0325 (BUG) — Cable/* node inertia lags the wet fraction by one evaluation. Resolved: ed373b1, 2026-10-07 (owner: fix now). The node inertia is that of the evaluated state: InternalCable::CalcDerivatives and AddEndForcesAndInertia read the element masses that AddElementForce (CalcFoundation) has just computed at that state, through NodeInertia, instead of the copy UpdateInertia made in UpdateCable, from the previous evaluation; m_inertiaA/m_inertiaB and UpdateInertia are gone. With NumCores > 1 a port read at another state, out of the water, changed the next OdeFcn. Test CableBranched.OdeFcnDoesNotDependOnAPrecedingPortReadAtAnotherState_MARE0325, red before (junction node accelerations 456.25 against 429.61 m/s²), green after. The analytical Jacobians still take the masses of the last evaluated state (MARE-0356). The stiffness factor's lagged density and the per-call stopwatch went with MARE-0357.. File: resolved/MARE-0325-cable-node-inertia-lags-wet-fraction.md
  • MARE-0330 (BUG) — The mean-tension filter advances on a retried step at the same time. Resolved: ed373b1, 2026-10-07, with MARE-0357. Net/NetStructure, Net/NetStructureWithConstraints and Net/NetStructureWakeEffect advance the mean tension in PreOdeFcn only at a time later than the last (T <= m_meanTensionTime skips it), as Cable/LumpedMass and Cable/Branched now do (InternalCable::AdvanceMeanTension). FhSim's integrators call PreOdeFcn once per accepted step with increasing time, so this changes no run; a retry from an earlier time still does not roll the filter back. Test NetStructure.PreOdeFcnAdvancesTheMeanTensionOncePerTime_MARE0330, red before (a second call at T = 0.1 changed the node acceleration from 1505.808 to 1505.761 m/s²), green after.. File: resolved/MARE-0330-mean-tension-filter-retried-step.md
  • MARE-0331 (BUG) — The cable normal-drag correlation is discontinuous at Re = 14. Resolved: fhsim_environment 3a2ca11 (fix, tests, doc) and 104da2a (ENV-0106, CHANGELOG), 2026-10-04 (owner delegation 2026-10-04, feature fluid-body-interaction): cylinder_hydro::NormalDragCoefficient takes White's circular-cylinder correlation 1 + 10 Re^(−2/3) (F. M. White, Viscous Fluid Flow, 3rd ed., 2006, eq. (3-225), 1 ≤ Re ≤ 2·10⁵; cited from memory, not checked against the book) below kLowReynolds = 20.582841580981793, the exact crossing with the middle branch, so Cd is continuous there; Re is clamped to 1 below 1 (Cd = 11, slope 0). The 2515 edge stays (0.8811 against 0.8778, 0.38 %). fhsim_environment CylinderHydro_Test red on 5 tests before the change, all 492 pass after. No baseline moved here: full ctest (2 entries) and the 20 VALIDATION cases pass unchanged; fhsim_base full ctest (191) passes unchanged. Corrected 2026-10-04 by fhsim_environment 2f4335f (fix, tests, doc) and e2c49fd (ENV-0106, CHANGELOG): the clamp at Re = 1 (Cd = 11) underestimated Stokes-range drag about 3× against the digitised White/Wiley curve (33.3 at Re = 0.2, 16.4 at 0.5). White's correlation now applies below Re = 1 too (30.2 at 0.2, 16.9 at 0.5, 11 at 1), down to the floor kMinimumReynolds = 1e-6 (Cd = 1 + 1e5, slope 0), which only keeps Cd finite in axial flow; the normal drag ∝ |v_n|^(4/3) tends to 0 regardless, and force and Jacobian stay finite for v_n = 0 and 1e-20 m/s. CylinderHydro_Test red on 3 tests before, all pass after. fhsim_base e0aa58f: CableAddedMass.NeutralRopeFollowsTheWaterAcceleration made drag negligible with a 1e-9 m hydrodynamic diameter, where Cd is now about 1800, and went red (7.9e-6 against 2.6e-6 m/s²); it takes 1e-15 m (below the floor). No baseline moved: here full ctest (2 entries) and the 20 VALIDATION cases, fhsim_base (191) and fhsim_fishery (1 entry) pass, all rebuilt against the corrected header.. File: resolved/MARE-0331-cable-drag-correlation-discontinuous-at-re-14.md
  • MARE-0332 (API) — NetWakeCaster and the wake tests use the deprecated marenv wake API, and a Grid rebuild deep-copies the private grid to snap the velocity. Resolved: 8c92f48, 2026-10-01 (WakeBuilder(frame, grid, params) and Finish(published): a snapped Grid rebuild no longer copies its grid; the private Direct and the lumped field are BlendedSourceSetWake(params) publishing SourceSets with Publish(sources, velocity, t0, blendTime, seabedDepth); the tests place their discs the same way; no deprecation warning from ME; bit-identical: the M3 hexfloat probe of NetWakeCaster is identical, 350 SimObject result files unchanged, 383/383 suite tests pass). File: resolved/MARE-0332-net-wake-caster-deprecated-marenv-wake-api.md
  • MARE-0333 (ARCHITECTURE) — The wake and flow wiring is copied between NetStructure and NetStructureWithConstraints. Resolved: 218990c, 2026-10-01 (src/net/NetFlowInteraction.{h,cpp}, the net counterpart of BodyFlowInteraction: it reads the wake parameters, registers the NetWakeCaster with CastWake, rebuilds and takes the other wakes at the panel centroids and cable midpoints in PreOdeFcn (R46, R47) and answers the waked current plus the node-averaged waves at a point (R62); WakePanelSource gains NumCables/CableNodes (defaults: none); both nets keep only their node accessor and node wave velocities; bit-identical: the M3 hexfloat probe is identical, 339 SimObject result files unchanged (11 cable outputs that differ run to run without any net excluded), 383/383 suite tests pass). File: resolved/MARE-0333-net-flow-wiring-duplicated.md
  • MARE-0334 (ARCHITECTURE) — Dead net_panel_setup::WaterVelocity helpers teach GetWakedFlow for the panel inflow. Resolved: 595f1b2, 2026-10-01 (both net_panel_setup::WaterVelocity overloads and the header sentence that said the setup samples the waked flow are gone; the header names NetFlowInteraction; build and 383/383 suite tests pass, the M3 probe is identical). File: resolved/MARE-0334-dead-net-panel-water-velocity-helpers.md
  • MARE-0335 (API) — The net-only wake attributes are ignored silently without CastWake, and WakeCutoff is read twice. Resolved: a952e98, 2026-10-01 (net_wake::ReadWakeSettings takes the grid cutoff from WakeSettings::cutoffGiven (WakeCutoff is read once) and, without CastWake, logs WakeEvaluation, WakeLength, WakeGrid and WakeXStartFactor as ignored when given (LogParameterInfo, one line each, as ENV-0070); test ReadWakeSettingsLogsIgnoredNetAttributesAndReadsWakeCutoffOnce red before (no line, 2 WakeCutoff queries), green after; 384/384 suite tests pass, the M3 probe is identical). File: resolved/MARE-0335-net-wake-attributes-ignored-silently.md
  • MARE-0336 (BUG) — A net's wake caster builds silently from a zero current where the current lookup fails, and treats a clamped current as failed. Resolved: 3a76af8, 2026-10-01 (NetWakeCaster accepts a usable (marenv::IsUsable) current at the source and the panels; where a current field fails at a panel it keeps the partial sum for the private field, publishes an empty lumped field, both at once without a blend, does not count the build (so Freeze cannot converge or freeze on it), logs once per episode and once at the recovery, and while failing only re-checks the lookups; decision (A) above; tests ClampedCurrentIsUsable_R122, FailedCurrentLookupCastsNoLumpedWakeUntilItRecovers_R122 and FailedCurrentLookupDuringAFreezeRoundWaitsForTheBlend_R122 red before (the clamped current zeroed: no lumped source; the failed build counted, cast and unlogged), green after; PanelInflowKeepsThePartialCurrentSum_R122 pins R122 (i) through NetFlowInteraction (green before and after, via fhsim_environment ENV-0064); the post-freeze case is MARE-0339; 388/388 suite tests pass, the M3 probe is identical). File: resolved/MARE-0336-net-wake-caster-failed-current-lookup.md
  • MARE-0337 (BUG) — Under Freeze a net converges on its private field only, so rows 3 and later of a farm freeze on stale upstream wakes. Resolved: 0df0e25, 2026-10-01 (the net's Freeze change is max(max|dR|, |dM|/M) of the lumped source (the schedule's label names both; the rebuild line gives both parts; NetWakeCaster::LastChange replaces LastRatioChange); the lumped source is built before Conclude (bit-identical for Off and Periodic: the M3 probe differs only in the Freeze cases); test FarmRowsFreezeOnTheConvergedUpstreamWakes_R121 (rows A-D of screens, Sn 0.4, 6 m apart, WakeIterations 4, against one Off build per row in flow order) red before: rows C and D froze after 2 builds at M 0.623 and 0.595 m^2 against 1.013 and 0.961 (-38.5 %, -38.1 %); green after: every row equal (row k freezes after k + 2 builds), and with WakeIterations 2 rows C and D log 'without converging'; the two single-net SimObject Freeze tests follow in 'Tests for R121', fa0b3e9). File: resolved/MARE-0337-net-freeze-ignores-lumped-change.md
  • MARE-0338 (DOCUMENTATION) — The net wake docs contradict the code: WakeCutoff roles, GetWakedFlow for the panel inflow, farm guidance, stand-in recipe. Resolved: c8b854a, 2026-10-01 (main_marine_elements.md: both WakeCutoff roles (the 'Disk or Sphere applies none' sentence is gone), the R121 WakeTolerance and WakeIterations rows, the ignored-without-CastWake sentence, the farm rule in Schedule (WakeIterations >= N rows) and the stand-in recipe (M, area, rear centre from the rebuild line, WakeXStartFactor 0); NetStructure.h and NetStructureWithConstraints.h: GetWakedCurrent with the net's query plus the node-averaged waves (R62, now also on the WithConstraints page), the WakeCutoff, WakeTolerance and WakeIterations options, the R121 Freeze measure and the R122 failed-lookup behaviour; NetHydroCageFarm.xml: the farm rule and the stand-in recipe in its comment; migration_3_0.md and net_hydrodynamics_methods.md name GetWakedCurrent plus the node-averaged waves; docs only, 389/389 suite tests pass). File: resolved/MARE-0338-net-wake-docs-contradict-code.md
  • MARE-0339 (KNOWN-LIMITATION) — A current lookup that fails after a net's wake froze (or after its Off build) is not seen, and nothing rebuilds when it recovers. Resolved: 159c2b2, 2026-10-01 (widened by the E3/M3 review, docs/review/wake-audit/REVIEW-env-E3-me-M3.md P1-1, P2-1 to P2-3, to the semantics of fhsim_environment's LumpedWakeCaster, ENV-0082: NetWakeCaster::Update checks the current lookups at the source and the panel centroids before WakeSchedule::Due on every step, also frozen, after the Off build and between Periodic rebuilds, and skips Due for the episode; HoldForFailedLookup logs once per episode and makes the MARE-0336 build without a lumped wake once, when no blend runs (WakeSchedule::Blending) and a build is or was due; that build resets m_lastLumpedSource and m_previousMomentum; EndFailedLookup calls WakeSchedule::RebuildDueAt in every mode when the episode emptied a published lumped wake. CollectPanels no longer reports the failure (P2-8), MakeFrame no longer sets m_lastFrame. Tests FailedLookupAfterAFreezeDropsTheLumpedWakeAndRebuildsAtTheRecovery_MARE0339, FailedLookupAfterTheOffBuildDropsTheLumpedWakeAfterItsBlendAndRebuildsAtTheRecovery_MARE0339, FailedLookupBetweenPeriodicRebuildsDropsTheLumpedWakeAndRebuildsAtTheRecovery_MARE0339 and FailedCurrentLookupDuringAFreezeRoundWaitsForTheBlend_R122 (updated: new round at the recovery) red before, green after; RepeatedFailedLookupsMidRoundRestartTheFreezeRoundEachTime_MARE0339 (three episodes under Freeze mid-round) added; a hexfloat probe of Off, Periodic (relaxed) and Freeze, Grid and Direct, with a moving net, is identical before and after; 393/393 suite tests and the validation suite (20 passed, 1 skipped) pass). File: resolved/MARE-0339-net-wake-failed-lookup-after-freeze.md
  • MARE-0340 (ARCHITECTURE) — NetWakeCaster copies the lumped relaxation and |dM|/M, and three loops compute the panel centroids. Resolved: 48508f2, 2026-10-02 (the casters' formulas move upstream: marenv RelaxLumpedSource (MENV-0061, pinned bit for bit there against a verbatim copy of RelaxLumped, speed guard kept) and fhsim_environment MomentumChange (ENV-0083, unit-tested there); PanelCentroid replaces the three centroid loops with the same expression (c0 + c1 + c2) / 3.0; a hexfloat dump of NetWakeCaster (two screens, Grid and Direct, Periodic and Freeze, WakeRelaxation 1 and 0.4, a moving net with a varying solidity: every lumped source, the schedule's change, the private and lumped field at 3,500 points each fifth step, the rebuild lines without the timing; 68,808 lines) is byte-identical before and after (/tmp/nethydro-build/c1b/probe-me-{before,after}.txt); the type is renamed to marenv's SourceSetWake (MENV-0060) in the same commit; the default ctest and the VALIDATION suite pass with the same counts as before). File: resolved/MARE-0340-net-wake-caster-copies-lumped-math-and-centroids.md
  • MARE-0341 (ARCHITECTURE) — NetWakeCaster keeps its own copy of the failed-lookup episode and two copies of M_prev. Resolved: d51e878, 2026-10-02 (fhsim_environment ENV-0084; the five failed-lookup tests (FailedCurrentLookupCastsNoLumpedWakeUntilItRecovers_R122, FailedCurrentLookupDuringAFreezeRoundWaitsForTheBlend_R122, FailedLookupAfterAFreezeDropsTheLumpedWakeAndRebuildsAtTheRecovery_MARE0339, FailedLookupBetweenPeriodicRebuildsDropsTheLumpedWakeAndRebuildsAtTheRecovery_MARE0339, RepeatedFailedLookupsMidRoundRestartTheFreezeRoundEachTime_MARE0339), updated to the one wording, red against the old caster, green after; a hexfloat dump of NetWakeCaster with failed lookups (Grid and Direct, Off, Freeze and Periodic, WakeRelaxation 1 and 0.4, WakeBuildTime 0 and 0.75 s, five failure episodes including one before the first build and one during a blend; every lumped source, change, rebuild count, Freeze state and both fields at 612 points each every third step, 382,776 lines) is byte-identical before and after with the log lines left out, which map one to one onto the new wording (/tmp/nethydro-build/f1/probe-me-{before,after}.txt); 393/393 tests pass outside *_VALIDATION). File: resolved/MARE-0341-net-wake-failed-lookup-episode-copied.md
  • MARE-0342 (ARCHITECTURE) — A net with CastWake off and no other wake field computes its sample points and takes an empty composition at every step. Resolved: 9b08480, 2026-10-02 (NetFlowInteraction::TakeExternalWakes computes the sample points only when fhsim_environment's ExternalWakes::NeedsTake (ENV-0088) says a registered field other than the net's own exists; test NetFlowInteraction.PreOdeFcnReadsNoNodeWithoutAnyWakeField_MARE0342 red before (8 node position reads, expected 0), green after, and PreOdeFcnTakesTheWakesOfAnotherObject_MARE0342 guards the other side; characterisation dumps C1 to C9 identical before and after). File: resolved/MARE-0342-net-take-without-other-field.md
  • MARE-0343 (ARCHITECTURE) — A net without waves still queries the wave field at every node and cable end in every right-hand side. Resolved: 4387243, 2026-10-02 (cable_surface::WavesWithElevation gives a null wave field when MaxWaveElevation() is not above 0, marenv MENV-0064; UpdateNodeWaveVelocities and AddCableForceRange of Net/NetStructure and Net/NetStructureWithConstraints use it, so the node wave velocities are zero-filled and the cable wave acceleration is not queried; test NetStructureWaves.NoWavesAreNotQueriedInOdeFcn_MARE0343 red before (3 velocity queries for the panel net, 4 queries for the cable net, expected 0), green after, with XDot equal bit for bit to that of a field with an unknown bound; characterisation dumps C1 to C9 identical before and after; the OdeJacobian's own wave excitation term is unchanged). File: resolved/MARE-0343-net-wave-kinematics-without-waves.md
  • MARE-0344 (ARCHITECTURE) — The receiver cutoff, the body submergence with its gated surface queries and the sphere drag are written here, though they need only fhsim_environment. Resolved: 78aac71, 2026-10-02 (batch B2: ExternalWakeCutoff.h, hydrodynamics/BodySubmergence.h and the gated half of cable/subroutines/CableSurface.h forward to fhsim_environment (ENV-0089, ENV-0090); SphereBase::DragForce and kAddedMassCoefficient forward to environment::sphere_hydro (ENV-0091); NetFlowInteraction and BodyFlowInteraction call environment::wake::ReceiverCutoff; the 7 BodySubmergence tests moved to fhsim_environment; tests EnvironmentForwarders.*_MARE0344 red before (the old names were separate functions: 3 of 4 failed), green after; characterisation dumps C1 to C9 identical before and after). File: resolved/MARE-0344-receiver-cutoff-body-submergence-sphere-drag-below-me.md
  • MARE-0345 (DOCUMENTATION) — The nets' docs and tests describe the own private field as sampled live in every evaluation; with R135 it is held per step. Resolved: 6217c0a, 2026-10-02 (batch B3, owner ruling R135, with fhsim_environment ENV-0092: the C3 parameter ExternalWakeUpdate documented in NetStructure.h, NetStructureWithConstraints.h, doc/user/main_marine_elements.md, doc/user/net_hydrodynamics_methods.md and NetFlowInteraction; test SimObject.NetStructure_WakeOwnFieldHeldPerStepDiffersLittleFromLive_R135 red before (with the B2 set Step and Evaluation give the same states, difference 0, expected > 1e-10; B3-me-red.log), green after with ENV-0092 (1.6e-5); NetStructure_WakeOwnFieldHeldPerStepIsLiveForEuler_R135 guards Euler_i bit for bit). File: resolved/MARE-0345-net-own-private-field-held-per-step.md
  • MARE-0346 (ARCHITECTURE) — NetWakeCaster holds a copy of the marching wake build that fhsim_environment now owns. Resolved: 3c7f08b, 2026-10-02 (batch B4, design R5: NetWakeCaster wraps fhsim_environment's WakeCaster (ENV-0093) over a panel adapter; net_wake::WakeSettings, WakeEvaluation, ReadWakeSettings are the environment's; the Norm/Require/Format copies are gone (fhsim_environment WakeCommon.h, now installed). Test EnvironmentForwarders.TheNetWakeSettingsAreTheEnvironmentOnes_MARE0346 failed before (B4-me-red.log, 2 of 3 checks), passes after; NetWakeCaster_Test (43) unchanged and passing; characterisation dumps C1 to C9 identical to the post-R135 reference /tmp/char/B4-base). File: resolved/MARE-0346-net-wake-caster-wraps-environment-wake-caster.md
  • MARE-0347 (ARCHITECTURE) — NetFlowInteraction and BodyFlowInteraction each wire the wake caster, the take and the cutoff by hand. Resolved: 76b694a, 2026-10-02 (batch B6, design R3 §3.4: both are fhsim_environment's BodyWake (ENV-0095) plus their wave parts; net_wake::PanelSourceSet is public in NetWakeCaster.h with the sample points of the panels, then the cables. Test NetFlowInteraction.PanelSourceSetSamplesThePanelsThenTheCables_MARE0347 did not compile before (no PanelSourceSet, B6-me-red-build.log), passes after; BodyFlowInteraction_Test, BodyWake_Test, NetFlowInteraction_Test (2) and NetWakeCaster_Test unchanged and passing; characterisation dumps C1 to C9 identical to /tmp/char/B6-base). File: resolved/MARE-0347-flow-interactions-wire-wakes-by-hand.md
  • MARE-0348 (DOCUMENTATION) — The net docs describe the wake wiring of before BodyWake, and NetWakeCaster's status and WakeEvaluation None are undocumented. Resolved: c65a30d, 2026-10-02 (batch B7, B6 review P2 and design §2.1 C3 (b): the net headers, NetWakeCaster.h, the methods manual and the user guide name NetFlowInteraction, BodyWake::Update and BodyWake::Query(); NetWakeCaster is documented as kept for its tests and outside code and removed in 5.0; WakeEvaluation None is documented for both nets; the bench comment names fhsim_environment's WakeCaster. Test NetWakeCaster.WithoutAPrivateFieldTheNetCastsItsUnshadedForce_MARE0348 pins the documented None behaviour of a net; it passes with fhsim_environment from ENV-0094 on, so it has no red run). File: resolved/MARE-0348-net-docs-describe-pre-bodywake-wiring.md
  • MARE-0349 (DOCUMENTATION) — The nets' and bodies' docs describe the held wakes without the live blend weight of R136, and MARE-0122 does not record what R135 and R136 did to its collapse. Resolved: 677389d, 2026-10-02 (batch B8, owner ruling R136, with fhsim_environment ENV-0099 and marenv MENV-0066: the C3 parameter ExternalWakeUpdate in NetStructure.h (class comment and @addoption), NetStructureWithConstraints.h, Disk.h, Sphere.h, doc/user/main_marine_elements.md and doc/user/net_hydrodynamics_methods.md says the held samples take the blend weight of each evaluation's time; MARE-0122 gains a note with the S6 numbers of B2, B3 and B8; CHANGELOG. No code change in this library; its suite and *_VALIDATION pass with the B8 environment; the moved numbers are in "Baselines for R136"). File: resolved/MARE-0349-held-wakes-live-blend-weight-docs.md
  • MARE-0350 (ARCHITECTURE) — NetFlowInteraction::FlowAt asks the panel adapter for a point's nodes through two virtual calls at every evaluation. Resolved: 63591fb, 2026-10-03 (batch C-perf: NetFlowInteraction::FinalSetup holds each sample point's nodes, from PanelSourceSet::SamplePointCarriers, and FlowAt reads them; the net's topology is fixed before FinalSetup. Test NetFlowInteraction.FlowAtAveragesTheWavesOverThePointsNodesWithoutReadingTheTopology_MARE0350 red before (FlowAt read the topology twice, /tmp/nethydro-build/Cperf-me-red.log), green after; PreOdeFcnTakesTheWakesOfAnotherObject_MARE0342 now expects each of the 4 nodes read once (fhsim_environment ENV-0100) instead of 8 reads; characterisation C1 to C7 identical to /tmp/char/B9-base). File: resolved/MARE-0350-net-flow-reads-topology-per-evaluation.md
  • MARE-0351 (ARCHITECTURE) — The library keeps copies and forwarders of the laws and the casting path fhsim_environment now owns. Resolved: 417126a, 992af6a, 7194757 (both reverted by 1d82b7b), c310ee3, 7a74300, 2026-10-04 (feature fluid-body-interaction batch B3). 417126a: the library includes fhsim_environment's laws and casting path; the copies, forwarders and duplicated tests are deleted (src/hydrodynamics/, net/NetSolidity.h, net/DiskDrag.h, the drag of DiskBase.h and the forwards of SphereBase.h, cable/subroutines/CableSurface.h and CableHydrodynamics.h, net/ExternalWakeCutoff.h, net/BodyFlowInteraction.*, net/NetWakeCaster.*); Net/Sphere/Net/Disk hold SphereCaster/DiskCaster and BodyFlowInteraction; NetWakePanels<Net> replaces the two adapters, with a shared Environment lookup naming the class; the net cables' edge-on disc drag is disk_hydro::DragForceTangential (the face-on annulus of MARE-0074 stays inline: disk_hydro::DragForceNormal has the face area π/4 D (D − d/π), owner question whether fhsim_environment should gain the annulus); RbCable/Cable takes NormalDragCoefficientWithLift. Bit for bit except the rounding of the Net/Sphere Jacobian (owner: bit identity dropped); no baseline moved. Tests 422 (22 disabled) → 263 (11 disabled), 0 failures; the 20 VALIDATION cases pass. 992af6a (owner ruling 2026-10-04, since withdrawn): CableSegmentWaterForce.h, CableRMWaterLoad.h (water branch) and ElementWaterLoad.h took Cd |v_n| v; 7194757 moved the SimObject.RundDorg_Smoke baseline for it. Both are reverted by 1d82b7b (owner ruling 2026-10-04, superseding: the independence principle); no result change remains from them. c310ee3: tests CableModelsHydrodynamics.{TrawlCable,RbCable,RbCableElement}DragFollowsTheIndependencePrinciple_MARE0351 replace the tests of the withdrawn law: red with 992af6a's assembly (3 failed), green on the restored one. SimObject.RundDorg_Smoke is checked at 30 s, settled, instead of 1 s in the clump's initial fall (owner-accepted recommendation; line-end direction asserts restored, the mirror symmetry kept, the settled end forces pinned: Line1ForceVector (200.667, −37.4005, 53.6619) N, Line2 its mirror, MainForceVector x −654.697 N, z 4945.58 N; 7a74300). Full ctest 266 (11 disabled), 0 failures; VALIDATION 20 passed. Left open: MARE-0353 (the law validation pages). MARE-0352 (CableElBasics and the CableRM air branch under the withdrawn ruling): won't fix.. File: resolved/MARE-0351-b3-consume-environment-laws.md
  • MARE-0352 (KNOWN-LIMITATION) — The net cables, cable/Cable and CableBranched apply the normal drag to v_n only, unlike the 2026-10-04 cable drag ruling. Resolved: won't fix, 2026-10-04. The ruling it would have extended (the normal cable drag Cd·|v_n| on the full relative velocity v) was withdrawn the same day; the superseding owner ruling is the independence principle, normal drag Cd·|v_n|·v_n plus a separate axial skin friction Ct·|v_t|·v_t (DNV-RP-C205, Morison, OrcaFlex), and the three assemblies that had taken the withdrawn law are reverted to it (MARE-0351). Both models named below already follow it: CableElBasics applies the normal drag to each end's v_n and the skin friction |v_t| v_t to the element mean (src/cable/subroutines/CableElBasics.cpp:451-470), the air branch of RbCable/Cable takes Cd |V_n| V_n + Ct |V_t| V_t (src/RMCable/CableRMWaterLoad.h:117). Nothing to change; the local branch wip/cableelbasics-drag-on-v, which held only tests for the withdrawn ruling, is deleted.. File: resolved/MARE-0352-net-cable-drag-on-normal-velocity.md
  • MARE-0355 (BUG) — NetStructure BottomContact filter advances on every port read. Resolved: 2026-10-06 (owner ruling: a first-order filter with a time constant in seconds, default 0.01 s). Net/NetStructure filters BottomContact in AcceptedStep with the new parameter BottomContactTimeConstant (0 is no filter); the port only returns the filtered value. Net/NetStructureWithConstraints and the deprecated Net/NetStructureWakeEffect never compute a contact (their port is always zero), so their per-read filter is left as is. Tests NetStructureBottomContact.ReadingThePortDoesNotChangeIt, FilterHasTheGivenTimeConstant, NegativeTimeConstantIsRejected.. File: resolved/MARE-0355-net-bottomcontact-filter-per-read.md
  • MARE-0356 (BUG) — Cable/Branched OdeJacobian reads its input ports with the local state slice. Resolved: ddf9ed7, 2026-10-07 (owner instruction 2026-10-07: investigate and choose; no FhSim core change needed). Option 1: Cable/LumpedMass, Cable/Branched and Net/Disk read their input ports in OdeJacobian with the model's state vector, rebuilt from the slice with their first state index (as NetStructure); Cable/LumpedMass no longer runs its common calculation there (MARE-0359 evaluates the elements directly), and Trawl/TrawlBeam no longer runs it, as its Jacobian uses none of it. Valid wherever FhSim calls OdeJacobian: JacobianAssembler and SimObjectJacobianBlock pass state + offset of the model vector, and the checker's state-offset samples rebuild the model with the padding object first, so the object's first state index includes the padding and the vector is the padded one (all Jacobian tests pass with the shift). The trace above was wrong: the source's initial state had a sign error (G x = (0, 5.106, −10.426), which is what the probe printed); with x = (−0.4255, 0.8511, 2.5532) a BDF run (dense, SUNDIALS) of the wired input saw the right end at all 46 OdeJacobian calls at fec163f (max relative deviation 7e-15), and CheckJacobiansFromXml passes it before and after the fix: FhSim evaluates the model at the Jacobian's state first (the checker primes the ports; the assembler calls OdeFcn when it differences any column; CVODE calls f before lsetup), so the ports are cached and no result changed. Tests Cable.OdeJacobianReadsItsPortsWithTheModelState_MARE0356, CableBranched.OdeJacobianReadsItsPortsWithTheModelState_MARE0356, Disk.OdeJacobianReadsItsPortWithTheModelState_MARE0356 (the port read with the slice, red before), TrawlBeam.OdeJacobianLeavesTheCommonCalculationOfItsPorts_MARE0356 (ShipForce 201.1 instead of 0.7 after OdeJacobian, red before), and SimObject.CableBranched_JacobianWithAWiredEnd_MARE0356 (the wired input through the checker; green before and after).. File: resolved/MARE-0356-cable-jacobian-reads-ports-with-local-state.md
  • MARE-0357 (BUG) — Cable/* advance the dynamic-stiffness mean tension at every evaluation. Resolved: ed373b1, 2026-10-07 (owner ruling: the net's pattern, R64 and MARE-0224). Cable/LumpedMass and Cable/Branched advance the mean tension in PreOdeFcn (new InternalCable::AdvanceMeanTension), once per new time, from the step's start state after applying the Length inputs at it; OdeFcn and the port calculations only read it. CableElDynStiff::UpdateLength no longer advances it and the per-call stopwatch is gone. The stiffness factor takes the unblended water density (m_rhoWaterFull), so it depends on the element length alone. Cable/LumpedMass's OdeFcn applies its Length input at its own (T, X), as Cable/Branched does since MARE-0037. Tests Cable.OdeFcnDoesNotDependOnPortReadsWithinTheStep_MARE0357 and Cable.PreOdeFcnAdvancesTheMeanTensionOncePerStep_MARE0357, red before (the derivatives after three port reads at other times and states differed from those without; a second step did not change the mean tension, as PreOdeFcn did nothing), green after.. File: resolved/MARE-0357-cable-mean-tension-per-evaluation.md
  • MARE-0358 (BUG) — The dynamic-stiffness mean tension moves away from the real tension. Resolved: 7b317e4, 2026-10-07 (owner ruling 2026-10-07: alternative B, replacing option A of 316d8bd). The mean tension is a first-order filter towards the element's own tension, T = eps · eFactor · EA + (1 − eFactor) · m (bounded to [0, MaxTension]; the difference bounded at a tenth of MaxTension, as before), with the time constant AdaptationPeriod, m += (1 − exp(−Δt/AdaptationPeriod)) · (T − m), exact for a tension constant over the step, starting at MeanTension; a step of zero leaves it. The PID controller is gone. Under a constant load the mean tension reaches the load with the time constant AdaptationPeriod and the strain becomes load / EA. Option A (target strain · EA, 316d8bd) has the same end state but under a load the time constant eFactor · AdaptationPeriod (1.8 ms for FhSim_trawlwriter's bridles) and overshoots: the middle bridle of Alfredo5_2 peaked at 100 kN, the MaxTension/10 bound. Tests CableElDynStiff.MeanTensionStartsAtItsSetting_MARE0358 (red before both: 0 instead of 5000) and CableElDynStiff.MeanTensionReachesAConstantLoadWithTheAdaptationPeriod_MARE0358 (end B a massless node in equilibrium with 1000 N, AdaptationPeriod 2 s, steps of 0.01 s: 632.1 N after one period, the load after ten; red with option A: 1000 N after one period). No baseline of this library, fhsim_fishery or FhSim_trawlwriter compares a result with AdaptationPeriod ≠ 0; the effect on the trawlwriter systems (bridles with 0.1 s) is in the workspace's FEATURE.md.. File: resolved/MARE-0358-mean-tension-filter-diverges.md
  • MARE-0359 (BUG) — InternalCable's Jacobian takes the masses of the last evaluation and leaves out the mean tension. Resolved: 6887a93, 2026-10-07. Cable::OdeJacobian and CableBranched::OdeJacobian evaluate the elements at their own state first (InternalCable::EvaluateElementsAt; Cable/Branched also applies its Length inputs and PrepareSections there and sums its junction inertias from InternalCable::EndInertia); the Jacobian's tension is eps · eFactor · EA + (1 − eFactor) · meanTension, signed, as in AddStructuralForces, with no derivative of the mean tension (held through the step). The four tests below are green; the Jacobian checks of Cable/LumpedMass, Cable/Branched, Net/Disk and Trawl/TrawlBeam pass at their tolerances, and a BDF run of the wired Cable/Branched input ends normally and agrees with a tight RK45 run at 0.05 s to 5e-5 relative in the positions and 0.2 % in the velocities.. File: resolved/MARE-0359-internalcable-jacobian-masses-and-mean-tension.md
  • MARE-0360 (BUG) — An absolute BinaryFile is joined to the input file's directory. Resolved: 240424e, 2026-10-07. Both readers open the path net_input::NetFilePath gives: an absolute BinaryFile as it is, a relative one in the input file's directory. The two tests below are green (the absolute one red at the issue's HEAD).. File: resolved/MARE-0360-net-binaryfile-absolute-path.md
  • MARE-0361 (BUG) — A panel whose aft and front edges are both under 20 meshes meshes into two-node elements. Resolved: c03d0e0, 2026-10-08. Fix 1 (owner ruling 2026-10-08, option A): ReadNetSpec refuses a panel of only one section, codend included, whose end edges are both under m_dMinNodeSeparation = 20 meshes (T1 and T2 times MeshCountFactor), naming the file and line of the section. That is exactly the case of two-node elements: a belly element loses its front side node only on the panel's front section and its back side node only on section 0 (CTrawlNetAssembler.cpp:1209-1227), splitter and wing elements always keep at least three. A splitter with no wing section in front, which read past the wing nodes (PanelNodes_PRTWING[0] of an empty vector) and crashed, is refused too (MARE-0362). Tests TrawlNetSpecReader.OneSectionPanel_BothEndEdgesUnder20Meshes_IsRefused_MARE0361 and ..._EdgesUnder20MeshesAfterMeshCountFactor_IsRefused_MARE0361 (red at 09bc894, green), ..._OneEndEdgeOf20Meshes_MeshesIntoTriangles_MARE0361 and TrawlNetSpecReader.TwoSectionPanel_NarrowEndEdges_MeshesIntoTriangles_MARE0361 (accepted, elements of three nodes). No accepted net changes.. File: resolved/MARE-0361-trawlspec-narrow-end-edges-degenerate.md
  • MARE-0362 (BUG) — A splitter with no wing section in front of it crashes the mesher. Resolved: c03d0e0, 2026-10-08. ReadNetSpec (TrawlNetSpecReader.cpp, CheckMeshable) refuses a splitter as the panel's front section, naming the file and line of the section. Test TrawlNetSpecReader.SplitterWithoutWingSections_IsRefused (crashed at 09bc894, green).. File: resolved/MARE-0362-trawlspec-splitter-without-wings.md
  • MARE-0363 (BUG) — A splitter as a panel's aft section with an aft edge under 20 meshes gives elements with one node twice. Resolved: a50950d, 2026-10-08. Fix 1 (owner ruling 2026-10-08): ReadNetSpec (CheckMeshable) refuses a panel whose section 0 is the splitter with T2 (times MeshCountFactor) under m_dMinNodeSeparation = 20 meshes, naming the file and line of the section. That is exactly the case of a repeated node: HasTriangularAft joins the first side nodes to the centre node (CTrawlNetAssembler.cpp:195-198), and only the splitter elements (:1238-1290) take the aft side nodes without a check; a belly section 0 drops them (bIsAftTriangle), and wing sections are never section 0. Tests TrawlNetSpecReader.AftSplitterWithNarrowAftEdge_IsRefused_MARE0363 (red at f232ad2, green) and TrawlNetSpecReader.AftSplitterWithAftEdgeOf20Meshes_MeshesWithoutARepeatedNode_MARE0363 (accepted, no element with a repeated node).. File: resolved/MARE-0363-trawlspec-aft-splitter-narrow-edge.md