Where to improve next

1 August 2026 · AI3D-339 follow-on · deep-research synthesis for the point-cloud team

This page retracts its own first headline. The sweep concluded that delineator recall was the dominant defect: 88 posts found where regulation spacing implies 286–572. That assumed an unrailed corridor. It isn't one — ~91% of the two-sided corridor carries guardrail, and German RPS doesn't place Leitpfosten along railed stretches. Corrected expectation: ~26–51 free-standing posts; we detect 88. The gap doesn't exist. What survives is narrower and still true: recall is unmeasured, and we now know the regulation-based proxy cannot measure it — so the label-free instruments below become the priority.
How the wrong headline survived 36 agents. The adversarial verifiers were effective within their scope — several killed techniques with live measurements. But every agent reasoned inside the verticalsigns repo. None had the domain fact that guardrails displace delineators, and none consulted the sibling repo that already measures guardrails on the same corpus. The structure tested “is this technique real?” and never “is the problem real?” — so a confident, well-evidenced, wrong headline passed 36 agents and two independent critiques, and was overturned in one sentence by someone who knows the road.

The recall question

88
delineators detected
143 segments · out_final sweep
26–51
expected, rail-corrected
RPS spacing over the unrailed 9%
91%
of corridor is guardrailed
1.82 of max 2.0 rail-m per corridor-m
0 / 88
posts within 1.5 m of a rail
median distance 23.5 m — all free-standing
The denominator was wrong, not the detector
Expected post count under two models, against 88 actually detected
0 150 300 450 600 750 286 – 572 RETRACTED — assumed no guardrail 26 – 51 expected — RPS spacing over the unrailed 9% of corridor 88 detected — above the corrected expectation, not below delineator posts over the 143-segment corridor
Detections read from out_final/segment_*/verticalsigns.json; rail coverage from the guardrails repo's out_full run on the same corpus. Both expectation bands are estimates, not surveys — but they differ by an order of magnitude, which is the whole point: a denominator this sensitive to an unstated assumption cannot support a recall claim either way.
Posts appear where a side is free of rail
Mean delineators per segment, by how many sides carry guardrail
The segment-level correlation is misleading here (Spearman ρ = +0.32, the wrong sign) because rail is nearly universal — 142 of 143 segments carry some. The contrast only appears per side. Segment 131 is the archetype: 99 m of rail on the left, none on the right, 18 posts.

Blind visual audit — 4 of 4 confirm

Four vision agents were given only the perspective renders for four segments, told neither the hypothesis nor which arm their segment was in. Every segment with a free side showed a row of free-standing posts; neither both-railed segment did.

SegmentDetectorJudge: guardrailJudge: posts
131left 99 m, right 0 m · 18 postsabsent on the post-bearing road (high)present on both verges, ≥8, plausibly 10–14 (high)
134left 99 m, right 0 m · 6 postsmedian side present, outer side bare (both high)5–8 in one regularly spaced row (medium)
019left 50 m, right 50 m · 0 postspresent on both outer verges (high)1 ambiguous candidate, none confirmed
011left 50 m, right 50 m · 0 postsreported absent — wrong, see belownone (high)

Segment 134's judge ruled out the confound that matters most, unprompted: the posts “stand inboard of and slightly taller than the guardrail beam — separate posts, not reflectors on a barrier” — the same conclusion the 1.5 m distance test reached numerically. Where counts differ the detector is higher, which is expected: the renders crop near-field verges and truncate at tile boundaries, so a judge sees a subset. No judge reported posts the detector missed.

Calibration, and a render bug. Segment 011's judge called the rails absent where the detector reports two 0.6 m w_beam runs. The detector is right — across all 367 rails in the corpus, mean height spans 0.452–0.709 m with zero at paint height. But segment 019 proves rails are visible when the framing cooperates: what differs is camera geometry. Low-oblique views along the road resolve a beam clearly; near-grazing top-down views flatten it into the shoulder, and those were all segment 011 had left — because in all four segments only about 2–4 of 9–12 renders carry usable evidence, with byte-identical blank frames in two of them. Treat a judge's “absent” on low horizontal structure as “not visible in these framings.”

Where those 88 posts come from
One cell per segment, in order 000 → 142
0 posts (114 segments) 1–2 3–6 18–25
The concentration is real and extreme: Gini 0.910, Fano factor 11.5 where Poisson would be 1.0, and 13 segments hold 80% of all posts. A uniform rate of 0.615 posts per segment would leave 77 segments empty; 114 are. But the structure is explained by guardrail coverage, not by detector failure — the empty cells are railed stretches where posts are not installed.

Two corrections to the working notes. The critique cited “54 posts from segments 131/132/134/135” and “~135 zero segments”; the measured values are 52 and 114. More seriously, it read this concentration as a recall failure. It is mostly a map of where the guardrails aren't.

What the sweep returned

Five search angles, 40 unique sources, 15 deep-read, every extracted technique put through an adversarial verifier that was told to refute by default. Of 31 techniques, 21 were killed — several by measurements the verifier ran on battlebox during review, not by argument. Nothing was rated above low payoff.

Technique verdicts by search angle
After adversarial verification · 31 techniques from 14 sources
survives (low payoff) dead unverified / extraction failed
The pattern is uniform: the literature keeps proposing things this repo has already built (the taper family), already ships (ring_fill_ratio, the p98 intensity gate), or cannot run on this data. Two extractions failed outright — both in the label-free angle, which is why the weak-supervision ideas below come from the critique pass instead.
The 13 adjudicated false positives, and which lever attacks them
From data/qc_verdicts.json · visual-QC verdicts on the 143-segment sweep
record multiplicity (static vs dynamic) plate normal vs road tangent neither — vegetation confusion
Two cheap additive features plausibly reach 9 of 13. Neither exists yet, and neither needs a label, a retrain, or a new data channel.

Recommended next steps

  1. Delineator recall audit highest magnitude
    Project detections onto the road centreline to get station, then autocorrelate per side. A 25 or 50 m peak confirms the class is being found systematically; the gaps at integer multiples enumerate the missed posts by location — a targeted worklist and a set of predicted-position weak labels, with no annotation anywhere. Then examine the three mechanical suspects: seed_min_vertical_span_m = 0.80 against a ~0.7 m usable post above the 0.30 m floor; the self-referential p98 brightness gate (one large guide panel raises segment p98 and suppresses the post class); delineator_min_points = 300.
  2. Record-multiplicity feature + split-half repeatability ~5 lines
    n_records_present, record entropy, max per-record point share — purely additive, and candidate_record_id is already computed in grid.py and carried into process_segment. Then run the detector on odd vs even records, match by XY, report agreement: that number becomes the project's standing label-free evaluation metric, and the consensus set is the auto-label seed for the rules → auto-labels → human-correction ladder.
  3. Threshold-margin census as a standing instrument
    For every accepted detection, distance to each conjunct's threshold. Tells you which of ~40 hand-tuned constants are load-bearing and which are inert — and becomes the cheap pre-filter that kills future technique proposals before they cost a research round. Phase 6 did this once and it produced the sharpest result on that branch.
  4. Plate-normal vs road-tangent scalar hours
    _plate_thickness already eigendecomposes the upper-half covariance and throws the eigenvector away. One additive |cos| scalar between plate normal and corridor tangent attacks the guardrail top, both road-paint FPs and the verge strip: a real plate faces traffic, guardrails and paint run parallel to it.
  5. Merge-splitting: deprioritize, and run the zero-code probes first payoff arithmetic
    It remains the tree path's #1 defect, but the adjudicated merged population is about six objects on a path that ships off by default. Before writing a splitter: a config-only eps/hull-margin sweep on the known-merge segments, connected components at ~0.3 m on the six dumped masks, and a footprint-bimodality census. If those say “splittable”, the paper-backed design is multi-stem flag → Dijkstra voxel-graph assignment (Hui 2022).

Experiment portfolio

Fourteen probes, sorted by cost inside four goals. Several are deliberate long shots — the brief asked for experiments that may or may not pay off, and the cheapest ones buy information either way.

Cost of each probe
Log scale, 20 minutes → 1 day · solid = expected to pay off, ring = speculative
The scanline-order probe has the best information-per-minute in the report: if acquisition order survived the exporter, scanlines give free neighbourhood topology, along-scan normals and occlusion structure, and the “no sensor geometry” blocker cited by six separate findings evaporates. If the array is shuffled, that whole family closes forever for the cost of one plot.
All 14 probes, with what each one buys
ProbeCostWhat it buys or kills
Scanline recovery — walk one run3 file in stored row order, plot consecutive-point distance periodicity~20 minUnlocks or permanently closes the entire sensor-topology family (range image, along-scan normals, ray-cast occlusion reasoning).
λ̂₁ closed form — compute linearity from the existing omnivariance and change_of_curvature columnszero new codeNormalized eigenvalues have 2 DOF, so λ̂₁ is already implicit in the dumped CSV (verified to 1e-15). Tests whether explicit linearity separates known pole FPs from accepts.
Dawid–Skene EM over the judge panels already collected~2 hPer-judge reliability and a soft consensus label. Directly tests whether “no shape feature separates conifers” — the verdict that killed four techniques — rests on reliable judges or one confident outlier. At n≈13 that verdict is no evidence, not a refutation.
Off-ground intensity bimodality — histogram candidate-point intensity against the p98 actually in use~2 hQuantifies how content-dependent the delineator brightness gate is; tests whether a mode split is stable where a percentile is not.
Nadir trajectory reconstruction — per record, take |scan_angle| ≤ 2°, test whether the XY locus is a 1D curve1–2 hSensor path → per-point range → true incidence angle. Reopens radiometrics on a defensible basis and enables ray-cast reasoning for the fusion and occlusion failure modes.
Grid-phase stability — re-run seeding at four half-cell XY offsetscheapFlags detections that exist only because of where the occupancy grid happened to land.
Point-thinning stability — keep every 2nd/4th pointcheapSeparates robust geometric cues from density artifacts — directly relevant to the conifer density band.
Multi-radius texture — recompute curvature/omnivariance at 2–3 neighbourhood radiicheapWhether scale robustness recovers any of the fence/bush confusions a single radius misses.
Road-referenced intensity normalisation — per-file median over the run4 road maskread-only passThe one surviving radiometric fragment: a label-free per-file gain reference. Reject it if it tightens one proxy population by collapsing another.
Leave-one-record-out feature jitter~half dayA free per-detection confidence score. Any detection that survives via a single record is a ghost.
Station-periodicity autocorrelation~half dayConfirms systematic detection and enumerates missed posts by location — the recall worklist.
Windowed continuity counter on the 13 curated conifer candidates~1 dayThe one taper-family variant not yet falsified: longest run of adjacent decile-pairs passing a size-monotonicity test, evaluated only on masks that already exist.
Per-record multi-view agreement — recompute cluster features per record, require consistency~daysThe correct reading of “evaluate per azimuth”. A line-of-sight-fused pair is a cone from one record and two blobs from another; a real cone is a cone from every record. Object-centric sector binning was measured saturated — 8 of 8 sectors for delineators, signs and trees alike.
Copy-paste recall probe — translate verified masks from point_masks.npz into ~20 segments at known coordinates~1 dayManufactured ground truth with zero annotation: exact recall vs range, vs record count, vs point count. The decimation variant (75/50/25% of points) prices delineator_min_points = 300 directly.
Corpus audit — does any corpus have real RGB in leaf-off? Do A1 and A4_5 overlap geographically?~hoursSeason and colour availability are perfectly confounded across corpora, so no colour result is currently separable from a season result. Geographic overlap would give repeat-epoch pairs — another free-label source. A2 and A3 are unused.

What's dead, and why

Two of these deserve promotion to repo-level constraints so they stop being re-argued per technique.

promote to constraint Multiplicative radiometric corrections
Cosine-incidence, R² range falloff, proxy-target calibration — all dead, and measured during verification. Road intensity is flat against |scan_angle| even though that binning gives a 3–4× range lever, so either the product is pre-normalised or the field is inert. More fundamentally the intensity channel is log/dB-quantised (successive representable values in a constant 1.00199 ratio, 2168 levels, 6:1 span), which makes every multiplicative operation the radiometric literature specifies undefined on it.
promote to constraint All colour work on A1
Dead upstream, before any index argument starts. Phase 6 §9.3 measured that of the 18 accepted clusters the colour rule can reach, the volumetric clause (plate_thickness_m ≥ 0.175) passes zero, and 25 threshold combinations changed no verdicts. No colour index at any threshold can alter any A1 output until that clause moves. Separately, GLI is not a second cue: it shares ExG's numerator exactly, and measures Spearman ρ = 1.000 against it.
The taper family — one technique, already built
Slice-area trunk run, adaptive-radius local taper, knee-based crown profile: four names for the thing implemented as _decile_radii / _conicity / _crown in the conifer worktree, and already measured. Caveat: that negative rests on n ≈ 11–13 objects adjudicated by blind agent judges. At that sample size it is a no-evidence result, not a refutation — which is what the Dawid–Skene probe is for.
Trunk-seeded tree delineation
Assumes urban street trees scanned at close range with clean visible stems. This is a highway corridor: embankment crests hide lower trunks, and the conifers that were actually found sit 24 and 31 m back behind verges and barriers.
Anything that changes cluster membership in place
Slice-and-link candidate building, supervoxel re-segmentation, gap-threshold region growing. All of them move every frozen FEATURE_NAMES input of the locked RF, breaking the additive-only and byte-identical regression gate. Viable only as experimental parallel paths.
Three techniques that are descriptions of shipped code
The ring-isolation gate is ring_fill_ratio; the per-segment intensity percentile is hi_intensity_all_points_percentile = 98; the billboard-size ceiling is panel_len_major_max_m. The literature sweep rediscovered existing code three times — which is itself a useful signal about where the pipeline already sits relative to published practice.

Beware the vacuous census: any tree-path-only change trivially zero-diffs the 143 A4_5 segments because tree_detection.enabled defaults false. That null is not evidence of regression safety — the gate it claims to pass was never exercised.

Sources worth keeping

SourceWhat it gives
Hui et al. 2022, Forests · 10.3390/f13081245Multi-stem under-segmentation flag + Dijkstra voxel split; F1 0.81 roadside. Fails on ground-touching branches — our own skirt failure mode.
Cabo et al. 2014, ISPRS JPRS · 10.1016/j.isprsjprs.2013.10.008Slice-and-link pole detection, the classical baseline.
Li & Oude Elberink 2013, ISPRS Annals II-5/W2Percentile-windowed continuity; N-of-M cue voting.
El-Halawany & Lichti 2013, GIScience & RS · 10.1080/15481603.2013.866815Road-pole detection; PCA linearity plus RANSAC line support.
Tao et al. 2015, ISPRS JPRS · 10.1016/j.isprsjprs.2015.10.007Shortest-path crown segmentation from ecological theory.
Li et al. 2016, ISPRS JPRS · 10.1016/j.isprsjprs.2016.07.009Dual-growing individual tree extraction from MLS.
Kashani et al. 2015, Sensors · 10.3390/s151128099Radiometric processing taxonomy — the reference for why our channel supports none of it.
Wen et al. 2016, IEEE T-ITS · 10.1109/TITS.2015.2418214Traffic-sign inspection from MLS.
Remote Sensing 2023 · 10.3390/rs15133254Vegetation-index thresholds for coloured point clouds (SCND) — superseded by phase 6's three-population fit.
JSTARS 2019 · 10.1109/JSTARS.2019.2929546Rapid roadside tree inventory; height-slice profiles.
Schwab & Kolbe 2026 · arXiv:2603.11252Radiometric fingerprinting. Needs an LoD3 semantic model and a trajectory, so dead here — but the road-surface gain-reference fragment survives.
Brunner & Houtmeyers 2022, Eur J Forest Res · 10.1007/s10342-022-01481-5Conifer crown segmentation in mixed Scots pine–Norway spruce stands.

Method & caveats

Five parallel Codex web-search agents (one per angle) → URL dedup, capped at four sources per angle → 15 deep-readers fetching and extracting techniques mapped onto concrete pipeline stages → an adversarial verifier per source, instructed to assume the technique does not transfer → two independent completeness critics, one search-grounded and one reasoning from first principles. 36 agents, ~1.8M subagent tokens.

Full working notes: docs/research/deep-research-20260801.md in the repo.