You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add a live equivalent of import_bag --prior (#89): a parameter that primes the
live CUBE node's predicted surface from a Chart (contour) prior at activate-time,
so live runs reject false-deep detections the same way the offline importer now
does. Today the gating is offline-only — the live node has no chart-prior/seed param,
so live cubing has no predicted surface to gate against and false-deep detections
pass through (corrupting both live bathy and the co-estimated backscatter).
#89 added predicted-only chart-prior seeding to the offline path: import_bag --prior <store_dir> loads a store's Chart layer and primes the
predicted surface via cube::loadIntoSheet(..., SourceLayer::Chart, sheet, /*seed_settled=*/false)before the soundings, turning on CUBE's
predicted-surface blunder gate (Node::insert is a pass-through when predicted_depth_ is NaN). The machinery is reusable as-is; only the live node's
wiring is missing.
Proposed change
In cube_bathymetry_node.cpp:
New param, e.g. prior_store_dir (default "" = off): path to a bathy store
whose Chart layer seeds the predicted surface.
On configure/activate, load that store and call cube::loadIntoSheet(prior, SourceLayer::Chart, *geo_map_sheet_, /*seed_settled=*/false) — predicted-only, so the coarse contour gates but is
never settled into the survey/Draft layer (no contamination of bathy or
co-estimated backscatter; honest holes, query-time overlay fills at read).
Order it correctly relative to the existing draft warm-start prime
(seedSettledDepth, settled=true from the node's own draft_dir): the chart prior
sets the predicted surface (external prior), the draft warm-start sets settled
hypotheses (own accumulation) — complementary, both should coexist.
Reuse import_bag: seed CUBE predicted surface from the Chart (contour) prior to reject false-deep detections #89's validation: refuse/warn loudly on 0 Chart tiles and on
all-wrong-GGGS-level charts (chart must be at the survey level — level 10 / 1 m
cells — to coincide with survey nodes and gate). Open design point: a lifecycle
node should probably warn loudly + continue ungated rather than fail the
configure transition (don't take down the live perception stack because the prior
is misconfigured) — but make the un-gated state impossible to miss in the log.
Bonus
The same chart-derived predicted surface is the input the live slope correction
(#15 / producer #59) needs — so this also unblocks live slope-aware incidence
without self-bootstrapping circularity (the external chart prior is preferred over a
self-derived surface).
Acceptance
prior_store_dir param primes the predicted surface from the Chart layer at activate, predicted-only (no settled fill).
A false-deep detection that survives without the prior is rejected with it (live-path test, mirroring #89's SeededPredictedSurfaceRejectsDeepBlunder).
Coexists with the existing draft warm-start prime.
Loud, unmissable log when the prior is missing / 0-tile / level-mismatched (un-gated state never silent).
Summary
Add a live equivalent of
import_bag --prior(#89): a parameter that primes thelive CUBE node's predicted surface from a Chart (contour) prior at activate-time,
so live runs reject false-deep detections the same way the offline importer now
does. Today the gating is offline-only — the live node has no chart-prior/seed param,
so live cubing has no predicted surface to gate against and false-deep detections
pass through (corrupting both live bathy and the co-estimated backscatter).
Prerequisite for rolker/unh_echoboats_project11#350 (Gap 3 — live outlier gating
on the boat).
Background
#89added predicted-only chart-prior seeding to the offline path:import_bag --prior <store_dir>loads a store'sChartlayer and primes thepredicted surface via
cube::loadIntoSheet(..., SourceLayer::Chart, sheet, /*seed_settled=*/false)before the soundings, turning on CUBE'spredicted-surface blunder gate (
Node::insertis a pass-through whenpredicted_depth_is NaN). The machinery is reusable as-is; only the live node'swiring is missing.
Proposed change
In
cube_bathymetry_node.cpp:prior_store_dir(default""= off): path to a bathy storewhose
Chartlayer seeds the predicted surface.cube::loadIntoSheet(prior, SourceLayer::Chart, *geo_map_sheet_, /*seed_settled=*/false)— predicted-only, so the coarse contour gates but isnever settled into the survey/Draft layer (no contamination of bathy or
co-estimated backscatter; honest holes, query-time overlay fills at read).
(
seedSettledDepth, settled=true from the node's owndraft_dir): the chart priorsets the predicted surface (external prior), the draft warm-start sets settled
hypotheses (own accumulation) — complementary, both should coexist.
all-wrong-GGGS-level charts (chart must be at the survey level — level 10 / 1 m
cells — to coincide with survey nodes and gate). Open design point: a lifecycle
node should probably warn loudly + continue ungated rather than fail the
configure transition (don't take down the live perception stack because the prior
is misconfigured) — but make the un-gated state impossible to miss in the log.
Bonus
The same chart-derived predicted surface is the input the live slope correction
(
#15/ producer#59) needs — so this also unblocks live slope-aware incidencewithout self-bootstrapping circularity (the external chart prior is preferred over a
self-derived surface).
Acceptance
prior_store_dirparam primes the predicted surface from the Chart layer at activate, predicted-only (no settled fill).#89'sSeededPredictedSurfaceRejectsDeepBlunder).Sibling of
#89(offline). Unblocks rolker/unh_echoboats_project11#350 Gap 3.Authored-By:
Claude Code AgentModel:
Claude Opus 4.8 (1M context)