Part of #15. Issue #15 ported the node-level slope-correction math (Node::setPredictedDepth + the corrected offset in Node::insert) but explicitly deferred the predicted-surface producer that drives it. With no producer, predicted_depth_ / Sounding::predicted_depth_at_touchdown stay at INVALID_DATA so the offset is 0 (correct-but-uncorrected) in production.
This issue ports the producer subsystem the port wholly lacks, as one umbrella (the two pieces only deliver value together):
- External-prior load (
cube_grid_initialise analog, cube_grid.c:1665,1712,1730): load a prior bathymetry array, seed each node's predicted_depth_/variance via setPredictedDepth, and seed a base null hypothesis.
- Per-sounding touchdown interpolation (
cube_grid_interpolate + the mapsheet_cube.c:2434 range overwrite): bilinearly blend the 4 surrounding nodes' predicted_depth_ at each sounding's touchdown (de,dn) and set Sounding::predicted_depth_at_touchdown (returns the no-correction sentinel if any corner is no-data).
The Grid-vs-GeoGrid interpolation geometry decision (regular bilinear vs the GGGS-cell analog) belongs here, with a per-node seed API on Grid/GeoGrid. Once landed, slope correction is active end-to-end; until then, deployed behaviour remains uncorrected (#15 is honest about this).
Authored-By: Claude Code Agent
Model: Claude Opus 4.8 (1M context)
Part of #15. Issue #15 ported the node-level slope-correction math (
Node::setPredictedDepth+ the corrected offset inNode::insert) but explicitly deferred the predicted-surface producer that drives it. With no producer,predicted_depth_/Sounding::predicted_depth_at_touchdownstay atINVALID_DATAso the offset is 0 (correct-but-uncorrected) in production.This issue ports the producer subsystem the port wholly lacks, as one umbrella (the two pieces only deliver value together):
cube_grid_initialiseanalog,cube_grid.c:1665,1712,1730): load a prior bathymetry array, seed each node'spredicted_depth_/variance viasetPredictedDepth, and seed a base null hypothesis.cube_grid_interpolate+ themapsheet_cube.c:2434rangeoverwrite): bilinearly blend the 4 surrounding nodes'predicted_depth_at each sounding's touchdown(de,dn)and setSounding::predicted_depth_at_touchdown(returns the no-correction sentinel if any corner is no-data).The Grid-vs-GeoGrid interpolation geometry decision (regular bilinear vs the GGGS-cell analog) belongs here, with a per-node seed API on
Grid/GeoGrid. Once landed, slope correction is active end-to-end; until then, deployed behaviour remains uncorrected (#15 is honest about this).Authored-By:
Claude Code AgentModel:
Claude Opus 4.8 (1M context)