Skip to content

Live chart-prior seeding: prime the predicted surface in the live node to gate false-deep detections (live #89 equivalent) #91

Description

@rolker

Summary

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).

Prerequisite for rolker/unh_echoboats_project11#350 (Gap 3 — live outlier gating
on the boat).

Background

#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).

Sibling of #89 (offline). Unblocks rolker/unh_echoboats_project11#350 Gap 3.


Authored-By: Claude Code Agent
Model: Claude Opus 4.8 (1M context)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions