|
FhSim
3.1.0
Marine systems simulation
|
Findings from code review that await an owner decision or an implementation. Each issue is one file in issues/details/, which holds the evidence, the effect, the possible fix, the test that would prove it and the risk. Resolved issues are kept in issues/resolved/ so that their numbers are never reused. Issues that concern a SimObject are also shown on that model's documentation page. Audit notes that are not issues are in issues/notes.md.
file:line given in the detail file, at HEAD.blocked item, get the owner's answer to "Decision needed" first, then set Status to ready.git mv the file to issues/resolved/, add a **Resolved:** <commit>, <date> paragraph after the table, delete the matching \xrefitem reviewissue "Review issues" "Review issues" \ref fhsim_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.
BUG code does something other than its documentation or sibling code saysKNOWN-LIMITATION behaviour gap by design or omission, document rather than fix silentlyARCHITECTURE structure, dependencies, build layout, dead code and stale artefactsDOCUMENTATION missing or wrong documentation or exampleTEST test coverage or infrastructureAPI public name (port, state, parameter, registration string) whose change breaks input filesSECURITY credentials and supply chain3 wrong numbers, a crash or a secret exposure reaches a user2 a documented interface does not work as documented1 tidiness, readers and tools onlyblocked needs the owner decision named in the fileready fully specified| ID | Class | Severity | Status |
|---|---|---|---|
| MARE-0429 | BUG | 2 | ready |
| MARE-0428 | TEST | 1 | ready |
| MARE-0430 | ARCHITECTURE | 1 | ready |
RbCable/Collision is registered only in a commented-out line. Resolved: feature/fix_issues, 2026-10-21. File: resolved/MARE-0001-rbcable-collision-registration-commented-out.mdRbCable/Cable maps to class CCableRM, which kept its C prefix. Resolved: 9f8db23, 2026-09-16. File: resolved/MARE-0002-rbcable-cable-class-ccablerm-prefix.mdTrawlCable's Heun_i branch is commented out while RundDorg's is live. Resolved: 5ad9efe and 19b1b0c, 2026-10-13 (feature mare-owner-rulings). Owner ruling 2026-10-13: the intended step is 0.001 s, the full integrator step, for TrawlCable and for RundDorg (as RundDorg already did); enable TrawlCable's Heun_i branch consistently, with a regression baseline. Both objects now use one rule, trawl_mooring::TakesSymplecticStep (src/trawl_mooring_interaction/SymplecticStep.h): under Euler_i and Heun_i the constraint solver's symplectic step is the integrator step, under any other integrator it keeps the solver's default 0. RundDorg is unchanged in behaviour; TrawlCable changes under Heun_i only (it took no symplectic step there). Tests: TrawlMooring.SymplecticStepUnderEulerAndHeun and the new baseline SimObject.TrawlCable_HeunRegression (the TrawlCable fixture under Heun_i, 1 ms, one solver thread, 1 s; with the former rule it fails, BottomBridleEndForce_0 RMS 2.0e2 N against 1e-8). Justification of the baseline: the ruling changes exactly these results and no test ran TrawlCable under Heun_i; it is not a physical reference. No existing baseline moved. NetStructureTest (Windows only) keeps its half step: the ruling does not cover it.. File: resolved/MARE-0003-trawlcable-heun-branch-commented-out.md2ae2738, 2026-09-22. File: resolved/MARE-0004-netstructure-panel-jacobian-forward-difference.mda1e7260, c77dfe5, 2026-09-25. File: resolved/MARE-0005-three-classes-without-documentation-page.mdCable/LumpedMass reads NumElements, but the documentation and an example say numElements. Resolved: d374a00, 2026-09-15. File: resolved/MARE-0006-cable-lumpedmass-reads-numelements.mdCable/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.mdsrc/cable/Cable.h carries two complete, divergent documentation blocks. Resolved: d374a00, 2026-09-15. File: resolved/MARE-0008-src-cable-cable-h-carries-two.mdNet/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.mdRbCable/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.md6cf95d6, 2026-09-15. File: resolved/MARE-0011-initial-condition-state-indices-are-documented.mdCable/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.mdCable/Branched documented names and widths do not match the code. Resolved: 3c30a67, 2026-09-15. File: resolved/MARE-0013-several-cable-branched-documented-names.mdCable/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.mdCable/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.mdRbCable/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.mdRbCable/Ring reads NumInputsPerConnector and Cm_IsAddedMassHack without using or documenting them. Resolved: a2c7d11, 2026-09-30. File: resolved/MARE-0017-ring-unused-parameters.md8a40f10, 2026-09-27. File: resolved/MARE-0018-opencl-sources-never-compiled.mdsrc/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.mdNet/NetStructureWithConstraints have no port or parameter documentation. Resolved: cb81dc7, 5340c40, 2026-09-25. File: resolved/MARE-0020-trawl-mooring-simobjects-undocumented-ports.mdif (false /* v3: IntegratorEngine check removed */) blocks. Resolved: 9f8db23, 2026-09-16. File: resolved/MARE-0021-dead-integratorengine-if-false-blocks.mdNetStructure family documentation tables are ??? placeholders. Resolved: 24f9aa9, aad9c4f, 2026-09-25. File: resolved/MARE-0022-netstructure-documentation-tables-placeholders.mdBouyancyFactor is misspelled, and the misspelling is load-bearing. Resolved: 9f8db23, 2026-09-16. File: resolved/MARE-0023-bouyancyfactor-misspelling-load-bearing.md9f8db23, 2026-09-16. File: resolved/MARE-0024-dead-sources-and-references.mdRbCable/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.md2ae2738, 2026-09-22. File: resolved/MARE-0026-netelement3n-force-path-not-scalar-templated.mdfeature/wake-docs (removal of NetStructureWakeEffect), 2026-10-12. (b), the last open item, is done: NetElement3NWakeEffect and its copy of the force arithmetic are deleted (owner ruling 2026-10-12, MARE-0117). File: resolved/MARE-0027-panel-force-core-followups.mdbf7cce6, 2026-09-30. File: resolved/MARE-0028-rbcable-family-zero-test-coverage.mddd57457, 2026-09-25. File: resolved/MARE-0029-trawl-mooring-rigidbarcable-zero-test-coverage.md875b0a7, 2026-09-25. File: resolved/MARE-0030-netstructure-siblings-no-jacobian-no-test.mdresolved/MARE-0031-win32-netstructuretest-family-untested.md4d707ed, 2026-09-25. File: resolved/MARE-0032-netstructure-port-jacobian-and-behaviour-untested.md397b6f0, 2026-09-30. File: resolved/MARE-0033-jacobian-only-tests-lack-behaviour-coverage.md295183c, 2026-09-24. File: resolved/MARE-0034-stale-jacobian-test-tolerance-comments.mdresolved/MARE-0035-jacobian-analysis-md-stale-disk-doc.md66ded69, 2026-09-30. File: resolved/MARE-0036-cable-jacobian-omits-compression-speed-clamp.mda4a308f, 2026-09-30. File: resolved/MARE-0037-cablebranched-fixture-checks-a-slack-cable.mdfdea835, 2026-09-24. File: resolved/MARE-0038-netstructure-inputportjacobian-global-row.mdaf4a3d4, 2026-09-24. File: resolved/MARE-0039-ring-destructor-frees-uninitialised-pointer.mdaf4a3d4, 2026-09-24. File: resolved/MARE-0040-rigidbarcable-destructor-deletes-uninitialised-pointer.mdcf73623, 2026-09-24. File: resolved/MARE-0041-netstructure-array-wake-document-unregistered-ports.mddd57457, 2026-09-25. File: resolved/MARE-0042-trawl-mooring-destructors-delete-uninitialised-vis-pointers.mdb8ac4d8, 2026-09-30. File: resolved/MARE-0043-mooringcable-ten-elements-segfaults.mda64d381, 2026-09-25. File: resolved/MARE-0044-runddorg-unknown-weighttype-left-unassigned.md1e6148b, 2026-09-25. File: resolved/MARE-0045-trawlcable-numcpucore-default-inverted.mdb3a9549, 2026-09-25. File: resolved/MARE-0046-trawlcable-zero-clump-weight-mass-crashes.md1b7d06a, 2026-09-25. File: resolved/MARE-0047-rmcable-constraint-acceleration-drops-rdotdot.mda2e6378, 2026-09-25. File: resolved/MARE-0048-trawlcable-runddorg-second-bridle-uses-first-bridle-values.md773f715, 2026-09-25. File: resolved/MARE-0049-mooringcable-bottom-chain-contact-radius-mid-rope.mdb1baf09, 2026-09-25. File: resolved/MARE-0050-mooringcable-buoy-connection-index-and-inertia.md0510a5e, 2026-09-25. File: resolved/MARE-0051-mooringcable-top-chain-second-moment-inconsistent.md0273425, 2026-09-25. File: resolved/MARE-0052-runddorg-force-ports-expose-norm-only.md1d1fac5, 2026-09-25. File: resolved/MARE-0053-trawl-mooring-inputs-set-unread-parameters.mdaf9b01b, 2026-09-25. File: resolved/MARE-0054-trawlbeam-trawl-force-projection-sign.md5f935b3, 2026-09-25. File: resolved/MARE-0055-trawlbeam-starttravel-and-saturation-limits.mdcbcf2da, 2026-09-25. File: resolved/MARE-0056-nswc-inputs-unvalidated.mdd927d41, 2026-09-25. File: resolved/MARE-0057-net-panel-weight-missing-gravity.mdbafe44c, 2026-09-25. File: resolved/MARE-0058-net-cable-appendage-end-weighting.mde5d993d, 2026-09-25. File: resolved/MARE-0059-nswc-addcableforces-openmp-race.md47c3541, 2026-09-25. File: resolved/MARE-0060-nswc-coupling-second-moment-and-solver-frequency.md3c46ef7, 2026-09-25. File: resolved/MARE-0061-trawlcable-clump-weight-inertia-from-door.md2ef9cbf, 2026-09-25. File: resolved/MARE-0062-trawl-collision-skips-gear-after-mooring.mde125f14, 2026-09-25. File: resolved/MARE-0063-trawl-environment-gravity-only-when-moving.mddd55ffe, 2026-09-30. File: resolved/MARE-0064-net-bottomcontact-port-always-zero.mdeddfba2, 2026-09-25. File: resolved/MARE-0065-net-files-set-unread-general-attributes.md8d89e6f, 2026-09-25. File: resolved/MARE-0066-net-maxacceleration-limit-inconsistent.md36799dd, 2026-09-25. File: resolved/MARE-0067-net-output-ports-overlapping-or-uninitialised.md2dab64f, 2026-09-25. File: resolved/MARE-0068-net-wakeeffect-ignores-external-and-bottom-forces.mdresolved/MARE-0069-netstructureabaqus-input-reading-defects.md2b47125, 2026-09-25. File: resolved/MARE-0070-netstructurearray-initial-conditions-zeroed.md5b4e2be, 2026-09-25. File: resolved/MARE-0071-netstructuretest-drag-current-and-sphere-defects.md7252bd5, 2026-09-25. File: resolved/MARE-0072-netstructurewakeeffect-usetagforexternalnodes-hard-coded.md7c52a04, 2026-09-25. File: resolved/MARE-0073-net-cable-disk-drag-zeroed-by-integer-division.md5ae9e52, 2026-09-25. File: resolved/MARE-0074-net-cable-disk-drag-model-unclear.mda93fe9c, 2026-09-25. File: resolved/MARE-0075-trawl-mooring-results-not-reproducible.md1a98cfb, 2026-09-25. File: resolved/MARE-0076-trawlcablejointconstraint-thread-manager-uninitialised.mdfd0f1f1, 2026-09-25. File: resolved/MARE-0077-netstructure-port-jacobian-ignores-adaptations.mdresolved/MARE-0078-netstructure-output-port-jacobian-missing.mdfc55b16, 2026-09-25. File: resolved/MARE-0079-mooringcable-straight-line-catenary-setup-slow.md1d91424, 2026-09-30. File: resolved/MARE-0080-netstructurearray-cable-elements-no-inertia.mdb0fe446, 2026-10-13 (feature mare-owner-rulings). Owner ruling 2026-10-13: approved; apply the result-changing fix. NetCableElementTest::CalcMassAndWeight now gives end A 1 − pos and end B pos of each sphere's and disk's mass and weight in water, and the disk drag is split (1 − pos) on A and pos on B, as NetCableElement since MARE-0058. Not compiled or run: src/net/Test/ builds only under WIN32, so the change was checked by careful reading only on this Linux host (pos is measured from end A, RenderUpdate; m_massInWater[i] and m_weightInWater[i] load m_conn[i], NetStructureTest.cpp:264). It changes Net/NetStructureTest and Net/NetStructureABAQUS results with spheres or disks. The MARE-0074 disk areas and coefficient are not applied (kept minimal). The Windows test proposed above is part of MARE-0031.. File: resolved/MARE-0081-netcableelementtest-appendage-end-weighting.md823625f, 2026-09-25. File: resolved/MARE-0082-cable-element-weight-doubled.mda715efa, 2026-09-25. File: resolved/MARE-0083-net-solidity-factor-scales-current-not-relative-flow.mdb3a864a, 2026-09-25. File: resolved/MARE-0084-sphere-drag-ignores-current.md991f820, 2026-09-25. File: resolved/MARE-0085-net-panel-reynolds-number-differs-from-screen-model.mdf36683d, 2026-09-25. File: resolved/MARE-0086-sphere-no-added-mass-or-froude-krylov.mdresolved/MARE-0087-readme-skip-tests-conf-name.md378a4aa, 2026-09-26. File: resolved/MARE-0088-net-hydro-measurement-data.md9671c2b, 2026-09-26. File: resolved/MARE-0089-net-hydro-local-through-flow-law.md972e04a, 2026-09-26. File: resolved/MARE-0090-net-hydro-screen-mf2022-law.mdaa2d0a7, 2026-09-26. File: resolved/MARE-0091-net-hydro-twine-cross-flow-extraction.mde89b5b2, 2026-09-26. File: resolved/MARE-0092-net-hydro-panel-load-law-variant.mdd8c000c, 2026-09-26. File: resolved/MARE-0093-net-hydro-load-law-validation-tests.md8e64e88, 2026-09-26. File: resolved/MARE-0094-net-hydro-core-split-and-netstructure-wiring.mdab7f71f, 2026-09-27. File: resolved/MARE-0095-net-hydro-withconstraints-port.mda0feeff, 2026-09-27. File: resolved/MARE-0096-net-hydro-array-port.md8a40f10, 2026-09-27. File: resolved/MARE-0097-net-hydro-delete-legacy-panel-copies.mdb8a045f, 2026-09-27. File: resolved/MARE-0098-disk-odefcn-normal-tangential-projection.md3daf95a, 2026-09-28. File: resolved/MARE-0099-net-hydro-baselines-and-towed-panel-validation.md3ada983, 2026-09-27. File: resolved/MARE-0100-net-hydro-netstructure-wake-casting.mdc568134, 2026-09-27. File: resolved/MARE-0101-net-hydro-cage-validation.md6c643bf, 2026-09-27. File: resolved/MARE-0102-net-hydro-wake-benchmark.md868d62f (merge of wp/E0-vocabulary; marenv 8493854, fhsim_environment 4ce3979), 2026-09-26. File: resolved/MARE-0103-net-hydro-vocabulary-and-adrs.md220e4a7, 2026-09-26. File: resolved/MARE-0104-net-hydro-methods-manual.md8f274c3, 3465f2e, 2026-09-27. File: resolved/MARE-0105-net-hydro-guides-and-examples.md663e2fb, 2026-09-27. File: resolved/MARE-0106-net-hydro-validation-report.md025dae5, 2026-09-27. File: resolved/MARE-0107-net-hydro-documentation-review.mdresolved/MARE-0108-twine-cross-flow-laminar-limit-asin-nan.md4714b56, 2026-09-27. File: resolved/MARE-0109-induction-factor-exceeds-one-low-solidity.mdLocalThroughFlow now takes c_l = c_d κ(Sₙ), κ = CL(45°)/CD(0°) = (1.693 Sₙ² − 0.217 Sₙ + 0.022)/(1.782 Sₙ² + 1.057 Sₙ − 0.053), Sₙ held in the fit range 0.18–0.36 (panel_formulas::Mf2022LiftToDragRatio); c_d is the law's own, so the lift keeps its Re dependence and f². No new parameter (contract C3), drag and angle form unchanged. The lift changes by −10 % (Sₙ ≤ 0.18) to +33 % (0.36) against the old Schubauer c_l. Tests: PanelLoadLaw_MF2022.L1_Eq10LiftAtRn2000_LocalThroughFlow enabled (−7.6 to +6.8 % against Eq. 10; was −25.8/−30.3/−25.3 % for N33a/N36a/N33b). The other ten stay DISABLED_ with their reasons (fhsim_environment doc/user/hydrodynamics.md Section 11.4): L2 lift fails now on N19a (83.5 N against 102 N, MF2022's text value above its own Eq. 10 trend; N33a passes, 247 N against 271 N), L6 lift 22 of 80 rows (was 31; Løland's lift is 27–46 % above MF2022's), and L4, L5, L6 drag, L8 and L9, which measure drag, ratios or normal incidence and do not move; the 60–80° angle form stays open as MARE-0131. Here: SimObject.NetStructure_Regression regenerated (the panel at Sₙ 0.160 gets 10 % less lift and sinks less: v_z 0.0443 against 0.0483 m/s at 15 s, z up to 0.062 m); the S1 twin DISABLED_S1_L2_TextLiftAt1p75 stays disabled the same way (N19a 81.2 N); the Lader cage S3 drag improves (Sn 0.43: 2 rows outside ±20 % instead of 4) but stays disabled. fhsim_fishery and fhsim_base baselines do not move.. File: resolved/MARE-0110-default-load-law-lift-and-angle-dependence.md16cc208, 2026-09-27. File: resolved/MARE-0111-net-hydro-screen-laws-no-in-plane-load.mdf639931 (fix), 32b6d65 (tests), 2026-09-27. File: resolved/MARE-0112-net-structure-array-buoyant-twine-nan-damping.mdresolved/MARE-0113-mesh-opening-solidity-unstretched-bar-length.mdc17bbf5, 2026-09-27. File: resolved/MARE-0114-withconstraints-no-wake-casting.md83ed259, 2026-09-27. File: resolved/MARE-0115-netstructure-onto-netpanelsetup.mdresolved/MARE-0116-wake-self-shadowing-under-manoeuvres.md6c7c72b, 2026-09-27; kept and deprecated by owner decision (Q3, lead ruling R37). Removed on branch feature/wake-docs, 2026-10-12 (owner ruling 2026-10-12; see Removal). File: resolved/MARE-0117-deprecate-netstructure-wake-effect.md8ce0244, 2026-09-27. File: resolved/MARE-0118-netstructurearray-onto-netpanelsetup.mdresolved/MARE-0119-withconstraints-slow-system-time.mdresolved/MARE-0120-net-file-lookup-working-directory.md#pragma omp parallel for of NetStructureWithConstraints::TakeNodeForces were removed by the MARE-0380 fix (ede966b), so no node loop of the class runs on a team any more (NumThreads 1, the default, has no other parallel region). Evidence on the feature channel (fhsim_environment 3.2.11), default thread setting, 32 cores: SimObject.NetStructureWithConstraints_SolverFrequency 200 of 200 runs passed (--gtest_repeat=200), 200 of 200 with every *NetStructureWithConstraints* test shuffled together (--gtest_repeat=200 --gtest_shuffle, 32 tests per iteration), and 100 of 100 with OMP_NUM_THREADS=8. The original failure was seen once and never reproduced, so this is absence of a failure, not proof; the test needs no change.. File: resolved/MARE-0121-withconstraints-solverfrequency-flaky.md<LinearSolver>, a model that resolves to DenseLU gets SUNDIALS DENSE with a dense Jacobian when DenseJacobianFits(n), else SPGMR and a warning). NetValidation_ZhanCylinder_VALIDATION.S6_SundialsBdfDefaultLinearSolverStepsDoNotCollapseAtARebuild is enabled (the DISABLED_ prefix removed): green with fhsim 3.3.6, the minimum step after each rebuild (t = 1.10 s and 6.20 s) equals the 0.1 s before it (ratio 1.00), 282 steps in 1.1 s wall, the same as the named-DENSE variant; red with 3.3.4 (2.0e-4 s and 3.5e-5 s, 761 steps, 11.9 s). Not cured, as FHSIM-0028 notes: the stiffer diagnostic variant (k = 1e2 N/m) and the step dip of a 0.1 s wake blend (below), neither covered by S6. The recipe still accepts fhsim [^3.3.1]; with an fhsim older than 3.3.6 this VALIDATION test fails again.. File: resolved/MARE-0122-sundials-bdf-default-linear-solver-step-collapse.mdccff439 (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.md0f1f58c, 2026-09-27. File: resolved/MARE-0124-sphere-spheremesh-unused.md11887b6, 2026-09-27. File: resolved/MARE-0125-phase-f-b6-rebenchmark.md289a12d, 2026-09-27. File: resolved/MARE-0126-phase-f-contracts-and-adrs.md9ab77f5, 2026-09-27. File: resolved/MARE-0127-phase-f-disk-sphere-cast-wakes.mda523515, 2026-09-27. File: resolved/MARE-0128-phase-f-documentation.md2d95765, 2026-09-27. File: resolved/MARE-0129-phase-f-net-lumped-wake.md31e51a7, 2026-09-27; floor raised (QG1) on wp/G5-mf2022-floor, 2026-09-27. File: resolved/MARE-0130-screen-mf2022-solidity-below-eq10-roots.mdHydroA5 parameter and the three-harmonic drag form, opt-in, default lift b4 = 0.036), 5c84229 (its baselines) and 6c898d3 (version 3.2.11), and by the baselines of this repository in 69cd149. The owner revised R1 on 2026-10-20: the three-harmonic drag refit (a3 = -0.009, a5 = 0.028) fixed no A6 test and broke MF2022 L1, L3 and L4 at 45 deg, so the drag stays a3 = 0.07 with HydroA5 (default 0) as an opt-in, and the lift is b4 = 0.036 (was 0.10), fitted to the Rudi and Loland lift data. In this repository only the lift moved: the net pins of NetCore_Pin_Test.cpp, the four NetStructure*_Regression* references, the C1 pin OldVsNew_VALIDATION.NetPanel_LiftK1 (own tolerance 11 %) and the NetStructure_Regression baseline page; HydroB4 = 0.10 gives the old values bit for bit. The three disabled S1 twins in NetValidation_TowedPanel_Test.cpp still fail, for the drag reasons their comments name (the 60 to 80 deg angle dependence of the drag stays open as a known limitation of the two-harmonic default: ENV-0120 in fhsim_environment).. File: resolved/MARE-0131-default-law-three-harmonic-angle-form.md079c3ec, 2026-09-27. File: resolved/MARE-0132-w9-private-field-not-observable.mdc8d9e6d, 2026-09-28. File: resolved/MARE-0133-net-acceleration-limit-drives-the-net.md1de224f, 2026-09-28. File: resolved/MARE-0134-jacobian-omits-bottom-contact.md6dcd350, 2026-09-28. File: resolved/MARE-0135-sundials-jacobian-unfilled-after-touchdown.md53286c4, 2026-09-28. File: resolved/MARE-0136-freeze-rearms-on-ambient-current.mdd10d5da, 2026-09-28. File: resolved/MARE-0137-harmonics-outside-sign-bounds-accepted.mdresolved/MARE-0138-validation-tests-run-by-default.mdresolved/MARE-0139-collinear-mesh-panel-nan-tension.mdb184053, 2026-09-30. File: resolved/MARE-0140-solidity-inputs-unvalidated-clamp-flags-discarded.mdff4a1bb, 2026-09-30. File: resolved/MARE-0141-cable-share-of-cast-wake-not-reported.md315b3ab, 2026-09-30. File: resolved/MARE-0142-net-hydrodynamics-test-gaps.mdresolved/MARE-0143-grid-wake-throws-on-degenerate-net.md40c4b1a, 2026-09-30. File: resolved/MARE-0144-relax-lumped-non-finite-area-throws.mdresolved/MARE-0145-nan-solidity-handled-differently-by-laws.mdresolved/MARE-0146-friction-identity-doc-ignores-mf2022-floor.mdresolved/MARE-0147-mf2022-warning-says-extrapolated-above-clamp.mdresolved/MARE-0148-law-doxygen-cites-removed-panel-functions.mdresolved/MARE-0149-stale-q12-and-menv-0008-status-text.mdresolved/MARE-0150-wakecutoff-no-effect-on-disk-and-sphere.mdresolved/MARE-0151-wake-example-comments-predate-lumped-wakes.mdresolved/MARE-0152-lumped-wake-step-at-rear-face-undocumented.mdresolved/MARE-0153-bottom-contact-flag-repeats-depth-lookup.mdresolved/MARE-0154-dead-code-after-panel-refactors.mdd387de1, 2026-09-30. File: resolved/MARE-0155-load-law-formulas-duplicated.mdresolved/MARE-0156-deprecation-warning-names-base-class.md2ecd78b, 2026-09-30. File: resolved/MARE-0157-wakeeffect-finalsetup-samples-waked-current.md1d91424, 2026-09-30. File: resolved/MARE-0158-netstructurearray-panel-and-cable-water-velocity-differ.md16e601b, 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.mdresolved/MARE-0160-adr-0001-not-marked-partly-superseded.mdresolved/MARE-0161-installed-headers-need-transitive-environment-and-coribo.mdresolved/MARE-0162-marenv-used-directly-without-requirement.mde28c9ce, 2026-10-13 (feature mare-owner-rulings). Owner ruling 2026-10-13: aquaculture's MaxAcceleration inputs must warn when given (they are ignored). A net file read through NetStructureSpec already warns (MARE-0165); SimObject.NetStructure_MaxAccelerationRemoved now also checks that warning. The migration guide has a new section, doc/user/migration_3_0.md Porting fhsim_aquaculture, listing (a)–(e), the const-override hazard and the warning rule for any file or SimObject parameter a port reads itself (removed_attributes::WarnIfPresent). The port itself remains a separate work package (fhsim_aquaculture is not in the workspace).. File: resolved/MARE-0163-fhsim-aquaculture-port-hazards.mdresolved/MARE-0164-added-drag-left-out-of-lumped-wake.md9dd4572, 2026-09-30. File: resolved/MARE-0165-removed-parameters-dropped-without-warning.mdresolved/MARE-0166-cablebranched-general-fluidrho-unused.mdresolved/MARE-0200-twinecrossflow-cn-steps-at-re-32-and-1e4.mdbdc360d, 2026-09-28. File: resolved/MARE-0201-screen-law-jacobian-at-rest-not-pinned.mdbdc360d, 2026-09-28. File: resolved/MARE-0202-knot-diameter-ratio-documented-as-twinecrossflow-only.mdresolved/MARE-0203-netstructurearray-knot-diameter-ratio-fixed.mdresolved/MARE-0204-normalforcecalc-dead-and-leaks.md7002356 (merge of da1f170), 2026-09-28. File: resolved/MARE-0205-panel-jacobian-eighteen-slots-where-twelve-suffice.mdresolved/MARE-0206-panel-load-diagnostics-computed-every-call.mdresolved/MARE-0207-lift-under-induction-placement-of-f-squared.mdresolved/MARE-0208-hydroa3-lower-bound-and-nan-accepted.md7a9aa4e, 2026-09-30. File: resolved/MARE-0209-netstructure-declares-dense-jacobian.mdresolved/MARE-0210-wave-kinematics-per-panel-dominate-rhs.mdInputReader::GetElement resolves each path component through a per-parent index of first children, bit-identical; owner ruling 2026-10-13). Nothing changes in this library. Confirmed bit-identical: the default ME ctest with fhsim 3.3.6 passes every regression baseline (NetStructure_Regression differs only by the MARE-0110 lift, by the same RMS under 3.3.4 and 3.3.6), and the states of a generated 2 048-panel net over 0.01 s (6 534 states, 11 rows) are byte-identical under 3.3.4 and 3.3.6. Timing of the net setup, Net/NetStructure with a generated net file (101 × 101 nodes, 20 000 panels; 33 × 33 nodes, 2 048 panels), RK45_i, one 1 ms step, wall time to the end of NetStructureSpec::ReadInputFile (two runs each, Release): p20k 31.5–32.4 s with fhsim 3.3.4, 0.29–0.31 s with 3.3.6 (whole run 34.2–35.9 s against 3.1–3.2 s); p2k 0.30–0.42 s against 0.04–0.07 s. p20k no longer fails in model assembly either.. File: resolved/MARE-0211-net-file-parser-quadratic-in-panels.mdresolved/MARE-0212-net-panel-and-cable-loops-single-threaded.mdresolved/MARE-0213-net-cable-density-blended-twice.mdresolved/MARE-0214-surface-piercing-buoyancy-from-end-nodes.mdresolved/MARE-0215-no-froude-krylov-or-added-mass-excitation.mdc6b0db8, 2026-09-28. File: resolved/MARE-0216-cablerm-wet-test-wrong-wave-sign.mdresolved/MARE-0217-cablerm-tangential-drag-equals-normal.mdc6b0db8, 2026-09-28. File: resolved/MARE-0218-6dofcable-buoyancy-without-g-and-scaled-axis.mdresolved/MARE-0219-disk-on-seabed-loses-weight.mdresolved/MARE-0220-net-appendage-added-mass-ca-one.mdc6b0db8, 2026-09-28. File: resolved/MARE-0221-cablerm-kelp-drag-nan-for-axial-flow.mdresolved/MARE-0222-cablerm-allocates-in-odefcn.mde2cf01c, 155cf58 (fhsim_marine_elements), fhsim_environment 9456bd5, 55abb65 (WakeReceiver), fhsim_base 2171413; 2026-10-12, feature wake-hardening. Owner ruling R-c (2026-10-12): the held composition at the cutoff tier; results may change.. File: resolved/MARE-0223-cable-flow-query-per-element-scales-with-fields.mdresolved/MARE-0224-net-cable-element-mutates-in-const-odefcn.mdresolved/MARE-0225-cable-objects-see-no-wave-velocity.mdresolved/MARE-0226-trawlcable-above-surface-treated-as-submerged.mddea65d2, 2026-09-30. File: resolved/MARE-0227-6dofcable-no-current-and-submergence-datum.md0b30a62, 2026-09-28 (the test; the model behaviour it exposed is MARE-0229). File: resolved/MARE-0228-bdf-touchdown-step-recovery-fragile.mdresolved/MARE-0229-bdf-high-order-sustains-seabed-contact-oscillation.mdf74c7b2, 2026-09-28. File: resolved/MARE-0301-external-wakes-per-step.mdfc1ecfe, 2026-09-28. File: resolved/MARE-0302-private-grid-defaults-at-1e4-panels.mdc6b8142, 2026-09-28. File: resolved/MARE-0303-wakeeffect-duplicate-flow-lookups.mdresolved/MARE-0304-frozen-net-wake-drifts.mdresolved/MARE-0305-lumped-momentum-from-mean-flow-square.mdresolved/MARE-0306-seabed-and-surface-images.mdresolved/MARE-0307-private-wake-without-seabed-image.mdresolved/MARE-0308-near-wake-solidity-snc.mdresolved/MARE-0309-lumped-wake-ambient-normalisation-and-linear-superposition.mdresolved/MARE-0310-parallel-loops-in-withconstraints-and-array.mdresolved/MARE-0311-receivers-take-external-wakes-by-the-cutoff-tier.mdresolved/MARE-0312-wake-composition-momentum-flux-rule.mdresolved/MARE-0313-surface-and-wave-excitation-not-everywhere.mda78638e, 2026-10-13 (feature mare-owner-rulings). Owner ruling 2026-10-13: yes: RbCable/Cable's rigid elements carry the normal added mass Ca rho A L (Ca = 1, DNV-RP-C205 (2021) Table A-1) of the wet part in their inertia, and the wave excitation is (1 + Ca) rho f V a_n, consistent with fhsim_base Cable (R93). Done in src/RMCable/Cable.cpp: each element's translational inverse inertia MiT = N N^T / m + (I − N N^T) / (m + m_a), m_a = Ca rho V f (TranslationalInverseMass, Cable.h), replaces 1/m in the Schur complement JMiJt, the constraint right-hand side and the accelerations; AddAboveSeabedLoad returns f, takes the Morison inertia force and the Coriolis force −Ȧ (v − u) of the turning added mass on the relative velocity (MARE-0323 rule). Not included, as in TrawlCable: an added moment of inertia, df/dt, added mass below the seabed. Tests, red before and green after: SimObject.CableRM_AddedMassIsInTheInertiaNormalToTheElements (two cables of 3 and 8 kg/m pushed sideways by a starting current: velocity ratio 2.523 before, 1.947 after, expected 1.998 ± 3 %), CableWaves.CableRMElementTakesTheMorisonInertiaForce, CableWaves.CableRMTurningAddedMassActsOnTheRelativeVelocity; CableWaves.CableRMTranslationalInverseMass. No baseline moved (ME default suite green; fishery and base have no RbCable/Cable fixture). RbCable/6DofCable and RbCable/Ring still carry no added mass: MARE-0374.. File: resolved/MARE-0314-no-added-mass-froude-krylov-only.mddea65d2, 2026-09-30. File: resolved/MARE-0315-6dofcable-ring-no-environment.mdresolved/MARE-0316-net-cable-excitation-isotropic.md65577aa, 2026-09-30. File: resolved/MARE-0317-withconstraints-solver-thread-pool.md7f702f3, 2026-09-30. File: resolved/MARE-0318-netelement3n-uninitialised-line-pointer.md8c21bea, 2026-10-13 (feature mare-ready-batch). NetStructure::OdeJacobian passes each cable element's air/water blend f rhoWater + (1 - f) rhoAir at the Jacobian's state (CableElBasics::BlendedFluidDensity, sharing WetFractionAt with CalcFoundation, bit for bit) to both drag blocks; the slope of the wet fraction stays out, as documented in NetStructure.h. Tests SimObject.NetStructure_JacobianAboveSurface (full check, net 5 m in air) and SimObject.NetStructure_JacobianAcrossSurface (every mismatch must lie in a vertical-position column, the documented slope): red with the water density (velocity blocks off by up to about 850 times in air), green with the blend.. File: resolved/MARE-0319-cable-drag-jacobian-unblended-rho.md3020afb, 2026-10-13 (feature mare-ready-batch, as planned: delete). The test is deleted; the threaded path is covered by NetStructureWithConstraints_Threads4 (NumThreads 4 against serial). Giving the fixture NumThreads with a rounding tolerance would only duplicate that test. The fixture stays (used by MaxAccelerationRemoved).. File: resolved/MARE-0321-cables-thread-independent-test-vacuous.md60f1896, 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.md8bb9abd, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-13: use the velocity relative to the water in the added-mass Coriolis term, Fossen (2011) Sec. 10.3). trawl_cable_water::InWaterForce adds +Ȧ u = ω × (A u) - A (ω × u), A = Ca rho V f (I - N N^T), u the water velocity it samples for the drag (AddedMassRelativeVelocityCorrection), so the term is -Ȧ (v - u). Test CableWaves.ElementDriftingWithTheCurrentTakesNoForceFromItsTurningAddedMass: red without the correction, green with it. No baseline moved: fhsim_marine_elements has no regression baseline of TrawlCable, MooringCable or RundDorg in current or waves, and fhsim_fishery's 258 tests pass unchanged against 3.0.3.. File: resolved/MARE-0323-added-mass-coriolis-absolute-velocity.md4140dde, 2026-10-13 (feature mare-ready-batch). Test SimObject.MooringCable_BuoyFollowsTheWaveAcceleration (fixture MooringCable_BuoyInWaves: a buoy about 15 m deep on a line that hangs slack sideways, a 2.5 s regular wave across the mooring plane): the wave-frequency amplitude of the buoy's sideways motion over the particle's is 1.72, against (1 + Ca) rho V / (m + Ca rho V) = 1.8, accepted within a factor 1.5; with 9b8b91d reverted it is 31.4 and the test fails (checked).. File: resolved/MARE-0324-mooring-buoy-waves-untested.mdInternalCable::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.md0c3bd96, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-13, option (a)). trawl_cable_water::kRhoWater is marenv::seawaterDensity, the density the Environment reports (marenv::Environment::GetDensity returns that constant; the Environment has no run-time density), and MooringCable's wet weights and buoy volume use it (m_buoyVolume / (kRhoWater / 1000), bit for bit 1.025). No result change: the full default suite passes unchanged. A configurable density in the Environment would need the read at FinalSetup the issue describes.. File: resolved/MARE-0326-trawl-cable-fixed-water-density.md49d6fbc, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-13: document the limitation). The Doxygen of NetStructure::HasJacobians and Disk::HasJacobians says it is const and stateless, sees the contact of the last OdeFcn, and that FhSim reads it at model assembly (before any OdeFcn) and at each Jacobian assembly. Pinned by NetStructureBottomContact.HasJacobiansFollowsTheLastOdeFcnNotTheStateBeforeIt and SimObject.Disk_HasJacobiansFollowsTheLastOdeFcnNotTheStateBeforeIt: on the seabed at T = 0, true before the first OdeFcn, false after it.. File: resolved/MARE-0327-hasjacobians-last-contact-state.md19286be, 2026-10-13 (feature mare-ready-batch). Both nets own their panel and cable elements by std::unique_ptr, NetStructureWithConstraints owns its ConstraintSolver by std::unique_ptr (the solver deletes its rigid elements, constraint sets including m_jointConstr, and its pool) and frees the arrays it allocated, NetStructureSpec deletes the specifications it owns (now non-copyable), and the unused m_aaiCableConn is gone. Test SimObject.NetStructureWithConstraints_TeardownLeavesNoThread (NumCpuCore 2 plus a NetStructure): thread count 44 against 36 before, unchanged after. Under LeakSanitizer (ASan build of library and tests) the same test reported 239 leaked allocations (34736 bytes) before and none after; the 209 net tests are clean under ASan.. File: resolved/MARE-0328-net-structure-teardown-leaks.md08db5fc, 2026-10-13 (feature mare-ready-batch). Test NetStructureBottomContact.PortCarriesEveryMomentComponent: one node off x = 0 and a horizontal stub friction, so every r x F term is non-zero; swapping the two M_y terms in AddBottomForces makes it fail (checked).. File: resolved/MARE-0329-bottom-contact-test-moment-axes.mdNet/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.md3a2ca11 (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.md8c92f48, 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.md218990c, 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.mdnet_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.mda952e98, 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.md3a76af8, 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.md0df0e25, 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.mdc8b854a, 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.md159c2b2, 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.md48508f2, 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.mdd51e878, 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.md9b08480, 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.md4387243, 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.md78aac71, 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.md6217c0a, 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.md3c7f08b, 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.md76b694a, 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.mdc65a30d, 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.md677389d, 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.md63591fb, 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.md417126a, 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.mdCableElBasics 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.mdmf2022.md, rudi_loland.md, l9_fit.md and the L8 part of zhan2006.md) and their part of tests/plot_validation.py moved to fhsim_environment (its doc/user/validation/, anchors fhsim_environment_validation_*, generated by its tests/plot_validation.py from its PanelLoadLaw_* tests, regenerated with the MARE-0110 law), with the guide "How to add a new load law" (its DEVELOPING.md). The SimObject-level pages stay here (zhan2006.md S2/W9/S6, lader2009.md, towed_panel_s1.md, trawl.md; anchor fhsim_marine_elements_validation kept), regenerated by this tests/plot_validation.py, which no longer reads any PanelLoadLaw_* suite. Both reports point to each other (environment doc/user/hydrodynamics.md Section 11.4 and its validation README; here the README, testing_report.md, main_marine_elements.md and DEVELOPING.md).. File: resolved/MARE-0353-law-validation-pages-without-tests.md4e3173b, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-05: document as a model limitation). Pinned by WaveHull.WaveOfTheSampleSpacingAliasesToFullBuoyancy_MARE0354: a regular wave of length d = L / sqrt(8) at SampleLevel 2 gives heave transfer 1 (the exact rectangle 0.06); the model's Short waves section names the test.. File: resolved/MARE-0354-wave-hull-short-wave-aliasing.mdNet/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.mdCable/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.mdCable/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.mdT = 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.mdCable::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.mdnet_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.mdReadNetSpec 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.mdReadNetSpec (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.mdReadNetSpec (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.md9d7abb0, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-11: document, no implementation). Documented on the Sphere, Disk and NetStructure pages and in ADR 0006; pinned by the existing NetWake.BodyInsideTheNetSeesNoWakeOfItsFrontPanels_MARE0364. Wake groups remain the route to lift it.. File: resolved/MARE-0364-attached-bodies-see-only-lumped-net-wake.md863c97e, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-13: document only, closed as a documented limitation). The TrawlCable and RundDorg pages list it under Known limitations; the law comments said so already.. File: resolved/MARE-0365-door-clump-no-wet-fraction.md863c97e, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-13: document only, closed as a documented limitation). The TrawlCable and RundDorg pages list it under Known limitations.. File: resolved/MARE-0366-door-clump-no-wave-inertia.md863c97e, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-13: option 2, keep the term and document it as a numerical damper). The TrawlCable and RundDorg pages and the DoorHydrodynamicForce / ClumpWeightHydrodynamicForce comments give the term, -c rho A² |ω| (1.28 ω_xy + 0.1 ω_z) with c = 0.35 (plate) and 0.0875 (clump weight), its dimension (a force) and that the cable elements' spin damping is a numerical damper too. No code change.. File: resolved/MARE-0367-door-clump-damping-moment-dimension.md0c3bd96, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-13, with MARE-0326). The new trawl_cable_water::kGravity is marenv::gravity, used in the cable, door and clump laws, the sediment branch and the door weight (TrawlCableConstraintSets.cpp). Bit for bit; the full default suite passes unchanged.. File: resolved/MARE-0368-trawl-cable-fixed-gravity.mdcead6fd, 2026-10-12. File: resolved/MARE-0369-clump-drag-area-lateral-surface.mdarchive/features/mare-ready-batch/docs/MARE-0370-proposed-repair.patch: constant mooring end points, the net's initial shape as Net.Pos_k, the removed state file, Euler_i at 1 ms, the cut-down fixture and smoke test) without its drawstring: the eight 0.1 m seam cables (El121–El128) are removed, so vonin2016_pelagic.xml (example and fixture copy) has no sliver panels and an open codend. The bridles of the example, its CastWake variant and the fixture have 5 elements each (220 m and 250 m: floor(L/10) ≥ 5); the ruling was read as applying to the bridles, the open point; the warps (1950 m in 2000 elements, 800 m in 40) and the mooring line keep their resolution. Verified (Release, Linux, FhSim CLI, Euler_i 1 ms): the full example is finite to 60 s (about 6.5 s wall per simulated second; at 60 s winch forces about 10 kN per side), the full-scale CastWake variant finite to 30 s, and SimObject.TrawlMooringInteraction_Smoke (100 warp elements, 30 s) passes in about 38 s wall.. File: resolved/MARE-0370-trawl-mooring-example-diverges.md4e40aff, 2026-10-13 (feature mare-owner-rulings). Owner ruling 2026-10-13: go: the vessel receives the current and the other objects' wakes through fhsim_environment's BodyFlowInteraction with WaterVelocityTerms::NoWaves (the hull model carries the wave loads), and casts a hull wake and a propeller jet as a PropelledObject, only with CastWake. Done as option 1 and 2 above: the hull damping, the propeller inflow and the rudder take nu_r = nu − nu_c; the rigid body's and added mass's equation is that of nu_r, nu' = nu_r' + (r v_c, −r u_c, 0) (Fossen 2011 Sec. 10.3); WaveHull has the hook (still water by default: Vessel/WaveHull unchanged); the Jacobian holds the water velocity of the step and covers its turn with the heading. With CastWake: hull wake from the damping at the free stream (frontal area Breadth × draught), jet <Name>/jet of (1 − ThrustDeduction) T at PropellerX/PropellerZ, advance speed the surge through the water. No fhsim_environment change. Tests (red before, green after): WavePropulsionHull.DriftsWithAUniformCurrent_MARE0371, AtRestTheCurrentDragsItAlong_MARE0371, InAHeadCurrentKeepsItsSpeedThroughTheWater_MARE0371, CastsAHullWakeAndAPropellerJet_MARE0371, and JacobianMatchesFiniteDifferencesInACurrent_MARE0371. Not tested here: the far field of the steady self-propelled vessel (the issue's momentumless check, as NorrbinTanker_steadyFarFieldIsNearlyMomentumless). No baseline moved.. File: resolved/MARE-0371-wave-propulsion-hull-no-current.md1b2b285, 2026-10-13 (feature mare-owner-rulings; owner ruling 2026-10-13: confirm, fix test-first). Confirmed at 1bea1b7: InternalCable::~InternalCable() was not virtual (src/cable/subroutines/InternalCable.h:197) while CableBranched deletes its InternalCableWithBottomContact sections through InternalCable* (CableBranched.cpp:112). The destructor is now virtual. Test CableBranched.SectionsAreDeletedThroughAVirtualDestructor (std::has_virtual_destructor_v<InternalCable>) failed before and passes; an AddressSanitizer build of this repository's tests (only fhsim_marine_elements instrumented) runs SimObject.CableBranched_* without new-delete-type-mismatch. No result changes.. File: resolved/MARE-0372-internal-cable-delete-without-virtual-destructor.md1f6bb76, 2026-10-13 (feature mare-owner-rulings; owner ruling 2026-10-13: confirm, fix test-first). Confirmed at 1bea1b7 (src/cable/subroutines/RBCEngine.cpp, every new double[...] freed with delete). Every such free is now delete[]. Red/green with an AddressSanitizer build of this repository's tests (only fhsim_marine_elements instrumented; the reports are in RBCEngine's own double arrays, which no other library allocates or frees, so the Eigen alignment caveat of a partly instrumented run does not apply to them): SimObject.RigidBarCable_Smoke gave 5728 alloc-dealloc-mismatch reports before (StateUpdate, CalcAcc, CalcLambda, MatrixCalc*, CalcEndForces, constructor, destructor) and none after. No result changes.. File: resolved/MARE-0373-rbcengine-delete-of-arrays.mdRbCable/6DofCable and RbCable/Ring carry the normal added mass Ca rho A L f (Ca = 1) as RbCable/Cable (a78638e): per-element MiT, the Morison inertia force and the Coriolis force of the turning added mass through wet_cylinder_water::FixedDragLoadOnElement (new Ca and angular velocity); Cm_IsAddedMassHack is deleted. Tests: SimObject.Cable6Dof_AddedMassIsInTheInertiaNormalToTheElements and SimObject.Ring_AddedMassIsInTheInertiaNormalToTheElements (velocity ratio of two objects of 3 and 8 kg/m: 2.03 before, 1.16 and 1.154 after, expected 1.162 within 3 %), ElementWaterLoad.ElementWithAddedMassTakesTheMorisonInertiaForce_MARE0374, ElementWaterLoad.TurningAddedMassActsOnTheRelativeVelocity_MARE0374. Only Cable6Dof and Ring results move; no file of another model and no old-vs-new pin.. File: resolved/MARE-0374-cable6dof-ring-no-added-mass.mdCableRM::ReportError reports through m_print when it is set and throws std::runtime_error otherwise; the pointless loop of ten calls (the first, [[noreturn]], never returns) is gone. Test SimObject.CableRM_FailedMatrixInversionIsReportedWithoutThePrintResource_MARE0375 (fixture CableRM_SingularMatrix, E-modulus 1e300): before, the test binary died with SIGSEGV in PrintDuringExec::WriteLog called from CableRM::calculations; after, the run ends with matrix inversion failed. No result changes.. File: resolved/MARE-0375-cablerm-null-print-on-failed-inversion.mdfeature/cable-flow, 2026-10-13 (fhsim_marine_elements 3.0.7, fhsim_environment 3.2.1 cylinder_hydro::TorsionDragMoment). Ruled by agent on owner delegation 2026-10-13: "Both current formulas lack r² dimensionally (ρ r² L ω² is kg/s², not a moment). Derivation: wall shear τ = ½ ρ C_f (ω r)² on area 2π r L at arm r gives M = π ρ C_f r⁴ L ω|ω|. cylinder_hydro's Ct is defined on the projected area D L, so C_f = Ct/π and M = −ρ Ct r⁴ L f |ω_a| ω_a, with ω_a the element's axial angular rate relative to the (non-rotating) water and Ct = TangentialDragCoefficient(Re), Re = |ω_a| r D / ν." Both RbCable::AddAboveSeabedLoad and trawl_cable_water::InWaterForce call it; it now acts whenever the element is wet, whether or not it moves through the water (the old terms only with a relative speed). ElementDragCoefficients lost its torsional coefficient. Baseline moved: TrawlCable_HeunRegression only (bridle end forces by at most 2e-3 N of 3e4-1e5 N). RbCable examples bit for bit unchanged; the trawl-mooring examples stay stable, at the same speed, and within their run-to-run scatter.. File: resolved/MARE-0376-two-cable-torsion-drag-formulas.mdresolved/MARE-0377-nswc-solidity-warning-reads-frozen-driven-nodes.mdresolved/MARE-0378-nswc-nodepos-nodevel-dead-frozen-states.mdresolved/MARE-0379-nswc-chain2-gets-chain1-angular-velocity.md#pragma omp parallel for of NetStructureWithConstraints::TakeNodeForces, not SumForcesInChunks: per Evaluate call (1200 calls, 0.2 s), TakeNodeForces took 5.8 ms and the two-thread loops 0.6 ms with them, 3 µs and 4 µs without. Removing them: NetStructureWithConstraints_RegressionThreads 7.7 s to 0.016 s (a quiet 32-core machine; 25 s when loaded), the serial NetStructureWithConstraints_Regression 0.77 s to 0.09 s. OMP_NUM_THREADS=2 also gave 0.03 s: the cause is the team size of the parallel for (the default, 32) changing against the two-thread team on every call. Results are byte-identical. Guard: the time budget of _RegressionThreads is 1 s (was 60 s); it fails with the old code.. File: resolved/MARE-0380-nswc-two-threads-slow.mdNetCore::CableHydrodynamicForce now calls UpdateNodeWaveVelocities(T, View(X), ...) first. Test NetStructureWaves.CableHydrodynamicForceTakesTheWaveVelocitiesOfItsOwnState_MARE0381: red before (the force at another (T, X) was that of the last OdeFcn), green after; results are unchanged.. File: resolved/MARE-0381-net-cable-drag-log-stale-wave-velocity.mdresolved/MARE-0382-nswc-cable-drag-ignores-spec.md16c9439, 2026-10-14 (feature trawl-rig, plan task C3). The one owner/joined lookup, trawl_mooring::JoinedRig (TrawlRig.cpp), reports TrawlCable "<name>" names no TrawlCable that owns a constraint solver ...; MooringCable and a joined TrawlCable both use it. Tests: SimObject.MooringCable_UnknownTrawlCable (red: the test binary crashed, exit 139; green with the fix) and SimObject.TrawlCable_UnknownTrawlCable (red: the old message "no CoRiBoDynamics registered!"; green). No baseline moved.. File: resolved/MARE-0383-mooringcable-unknown-trawlcable-crashes.mdSetAddedDragPerMPS stays.. File: resolved/MARE-0384-added-drag-option-overwritten.md1c9ea33, 2026-10-15. File: resolved/MARE-0385-net-cable-jacobian-omits-compression-speed-clamp.mdf823109, 2026-10-15. File: resolved/MARE-0386-cable-jacobians-ignore-length-bound.mdd8610fd, 2026-10-15. File: resolved/MARE-0387-cable-jacobians-drop-turning-at-max-tension.mdresolved/MARE-0388-jet-thrust-lags-propeller-speed.mdresolved/MARE-0389-disk-axis-lags-in-wake-group.mdresolved/MARE-0390-cats-mode-new-node-initial-position.mdCable::HasJacobians is !m_internalCable->HasForceOutsideJacobian() and OdeJacobian writes nothing while it is false, as Cable/Branched. Test SeabedContactPin.Cable_HasNoJacobianInBottomContact_MARE0391: red before (HasJacobians true in contact, the Jacobian written), green after, and true again once the cable is clear. Cable_BedRegression keeps TestJacobianMode::No, but for the drag, which is not in the analytical Jacobian in water (as Cable_Regression); its baseline moved with the soil law family (README of the baselines).. File: resolved/MARE-0391-cable-jacobian-omits-bottom-contact.mdFlatSeafloor soil) is met by marenv 2.1.5 (FlatSeafloor returns SoilState{}); in ME the water load of RbCable/Cable and of the CoRiBo cable elements now applies below the seabed too and the soil adds its load, a RigidCylinder of the shared SeafloorForces. Tests SeabedContactPin.CableRMKeepsItsWaterLoadBelowTheSeabed_MARE0392, CableRMPassesEachElementAsARigidCylinderAndAddsTheLoad_MARE0392 and SimObject.CableRM_SoilElementsRiseToTheSeabed_MARE0395; baselines CableRM_SeabedRegression, TrawlCable_BedRegression regenerated.. File: resolved/MARE-0392-cablerm-seabed-flatseafloor-sinks.mdNet/Disk passes a RigidCylinder D by T along its axis with its own velocity (the soil is at rest) to the shared SeafloorForces and adds the returned load to its weight and buoyancy; no friction on the water-relative speed, and the load grows with the penetration, so the disk neither chatters nor sinks through. Test Disk.OnTheSeabedPassesItsOwnMotionAndAddsTheSeafloorLoadToItsWeight; Disk_SeabedRegression regenerated (starts 2 mm deep).. File: resolved/MARE-0393-disk-seabed-friction-own-velocity.mdDistributeCatenary takes currentIC and writes a state only where the user has not set it, as the other branches do. Test SimObject.CableRM_UserInitialConditionOnASlackCableStandsAndTheRestIsTheCatenary_MARE0394: red before (FhSim stops with "The SimObject <C> tried to change an initial condition that was already set during the 'InitialConditionSetup' phase"), green after. No baseline moved.. File: resolved/MARE-0394-rbcable-catenary-overwrites-user-initial-conditions.mdupdateFreq [1/s] of A1: the cable no longer keeps its initial shape, and a moving chain keeps its joint gaps closed at the stock updateFreq (decided by the A1 worker within the plan, the owner to confirm: the axial rate is a rate, the input name is kept). Tests CableRM_ChainLiftedByTheSoilKeepsItsJointsClosed_MARE0395, CableRM_ChainPushedAlongTheSeabedKeepsItsJointsClosed_MARE0395, CableRM_FreeSwingingChainKeepsItsJointsClosed_MARE0395. Not what the notes below recommended: the regime is not epsilon << a with 10 to 100 1/s; with the soil's impulses the gap drifts per step in proportion to h * da / beta and a cable on the seabed ends in NaN below about 30 1/s at the 1 ms step, so the stock 1000 (up to 1/dt) is kept. The initial condition's joint gaps are MARE-0398.. File: resolved/MARE-0395-rbcable-joint-relaxation-uses-time-as-rate.mdresolved/MARE-0396-cable-elements-no-crossflow-damping-moment.mdSoilModel::dampingTime). (2) A fully buried body is pushed out by the normal force and held by the uplift U u(v), slope U/v_reg at 1 cm/s (10^5 N s/m on a bridle element): it chattered with swings of U every step (NOUPLIFT removed the swing). Fix: speed scale max(v_reg, U/(c' ℓ)), c' = 100 N s/m² (env SoilModel::upliftDampingLimit). Result: the bottom bridle end force changes by at most 1.4 kN between 10 ms rows (35 kN before). The fixture starts the whole cable inside the sediment (the slack warp's catenary hangs up to 23 m below the seabed), so what remains after 0.6 s is the expulsion from it; a fixture that starts on the bed is a follow-up.. File: resolved/MARE-0397-trawlcable-bridle-soil-oscillation.mdresolved/MARE-0398-rbcable-initial-condition-joint-gaps.mdede966b, 2026-10-20): the three #pragma omp parallel for of NetStructureWithConstraints::TakeNodeForces ran with the default team size even for NumThreads 1. On a CI runner that shows many cores but limits the CPUs of the job, the OpenMP team (one thread per visible core) is far larger than the CPU quota, and every call waits for threads that are not scheduled. That is why only the serial runs were slow and the two-thread run, which sets its own team size, was not; and why the issue could not be reproduced on an unlimited local machine. The v3.0.8 and v3.0.9 tags do not contain the fix (ede966b is not an ancestor of either).. File: resolved/MARE-0399-netstructurewithconstraints-regression-slow-on-ci.md323e92c (feature/fix_issues), 2026-10-22. File: resolved/MARE-0400-msvc-results-differ-bed-and-trawlcable-baselines.mdresolved/MARE-0401-rbcable-nan-on-msvc-release.mdresolved/MARE-0402-net-structure-jacobian-move-and-scatter-helper.mdresolved/MARE-0403-two-thread-solver-fixtures-not-reproducible.mdresolved/MARE-0404-net-sphere-cd-hard-coded.mdresolved/MARE-0405-trawlcable-bedregression-starts-in-sediment.mdresolved/MARE-0406-net-constrained-diverges-from-net-structure-test.mdresolved/MARE-0407-net-constrained-has-no-hydrodynamic-loads.mdresolved/MARE-0408-net-structure-test-projected-area-nan-zero-current.mdresolved/MARE-0409-test-reference-mode-env-ignored.md0a8076b, 2026-10-23 (option 1, owner ruling 2026-10-23: re-measure). All statistic and pin checks on MSVC 194, Release and Debug, reported with the new MARE_STATISTICS_REPORT (8262c78): 434 comparisons in Release, 374 in Debug. Only this check was over its limit. The force means differ by up to 5.0 N beyond 2 % of the reference, so kMsvcForceMean is 2 % + 15 N (2.5 times that). The other limits stay: force spreads use at most 71 % of theirs, door positions differ by up to 1.7 mm (of 30 mm), CableBranched forces by 0.094 N (of 0.25 N) and positions by 0.025 mm (of 0.1 mm), the door pin by 2.1 mm (of 20 mm).. File: resolved/MARE-0410-trawlcable-bedregression-msvc-mean-past-tolerance-after-fhsim-0066.mda142cd9, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0411-ci-tells-the-truth.mde1adcde, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0412-rbcable-vertical-slack-nan.md49645a9, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0413-rbcable-retraction-clamp.md86f0b82, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0414-rbcable-family-geometry-validation.md796489a, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0415-cable-branched-numcables-mismatch.md1971911, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0416-net-conn-node-numbers.md25baa85, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0417-net-element-def-throws-pointer.mdde04157, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0418-net-binary-parse-result-ignored.md0102723, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0419-trawl-rund-dorg-element-counts.md0bea8b3, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0420-trawl-port-or-starboard-strict.mda87d424, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0421-rigid-bar-cable-force-a-components.md4eed031, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0422-net-threads-exception-terminates.md7611c22, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0423-rigid-bar-cable-uninitialised-ports.md1d39b15, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0424-cable-segment-straight-up-quaternion.md89c3a15, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0425-ring-6dof-failed-ldlt.mdcf3f7f6, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0426-model-diagnostics-to-stdout.md1f256e1, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0427-cable-lumped-mass-internal-cable-leak.mdresolved/MARE-0431-trawlspec-reader-unbounded.md