Repository navigation
Witnesses for the clipped coverage grid and fitted ground - #220
Draft
obvious-autobuild[bot] wants to merge 4 commits into
Draft
obvious-autobuild[bot] wants to merge 4 commits into
obvious-autobuild[bot] wants to merge 4 commits into
Conversation
Cells were half-foot steps from the floor of the fitted stretch to its end plus one cell, so a sample outside the fit could drive an observation, and a longer baseline an older scan left behind backed wall the fit never established. Cells are now clipped to the fitted extent, with partial boundary cells sampled inside their own widths; a fit that begins and ends on the grid gets exactly the cells it did before. Ground samples sat on the horizontal plane through the meter's foot and the pipeline never passed its fitted ground in, so on sloping ground the samples hung above or below the surface and visible ground read unobserved. The pipeline now passes the fit in and the samples follow the plane. Spans in scene.json, measurements, the report's ft totals, and the coverage doc follow the clipped ends; scene.json gains no fields. report.md's coverage doc gains cells_end_ft so clipped boundary cells are visible.
… change The witness pass on top of ea38351 keeps its own record in recon/results/coverage_extent_witnesses.md; this first entry pins the baseline: uv sync --locked clean, ruff check and format clean, pytest 90 passed, test_coverage_fit.py 9 passed.
…ted ground Eight witnesses run pipeline.run itself - the caller a real bundle takes - on synthetic bundles rendered from analytic planes in tests/witness_bundle.py: LiDAR depth, no model, no network, no real home capture. The oracle is what the pipeline writes (scene.json, coverage.json, geometry.json) plus the refusals it raises: exported spans stop at the fitted extent while the phone's baseline claims past it, a hole in the wall stays unobserved across a bridged fit, ground follows a falling fitted plane where the old horizontal-plane sampler cannot, and short/empty/too-thin tracks refuse. results doc records the counts, the owned CLI smoke with output hashes, and a field-level old-vs-new comparison run at c813182. Full suite: 98 passed.
tests/scene_schema_check.py validates an exported scene.json against the committed server schema and keeps the input bundle's per-keyframe depth passthrough (an app-side extension the schema does not define) on its own line instead of folding it into a pass. Receipt in the results doc: the smoke output has 0 strict errors, 5 passthrough items.
|
Important Review skippedBot user detected. To trigger a single review, invoke the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this adds
Pipeline-level witnesses on top of ea38351 (
Coverage stops at the fitted extent and samples the fitted ground), which fixed the two coverage defects in the handoff (issues #95 and #96). No behavior change here — tests, a synthetic bundle builder, a schema-compat check script, and a results record.recon/tests/witness_bundle.py— renders synthetic scan bundles from analytic planes (wall pieces, a back wall, a hole, a falling floor) with exact poses plus fixed-seed noise, into the app's bundle layout (scene.json, JPEGs, Float32 depth, UInt8 confidence). Nothing synthetic claims to be a real capture: no home, no private rule, no real-world coordinate.recon/tests/test_coverage_pipeline.py— eight witnesses throughpipeline.run, the caller a real bundle takes, with--depth lidar(no model, no network). Oracle is the written scene.json / coverage.json / geometry.json, never a test-local copy of the clipping logic: exported spans stop at the fitted extent while the phone's baseline claims past it; a hole in the wall stays unobserved across a bridged fit; ground follows a falling fitted plane (0.35 m/m) where the old horizontal-plane sampler cannot produce a 2 ft entry at all; short (0.6 m) and empty wall tracks refuse; no-keyframes, single-LiDAR-frame and too-close-tracks refuse or observe nothing.recon/tests/scene_schema_check.py— validates an exported scene.json againstserver/schemas/scene.schema.json; reports the input bundle's per-keyframedepthpassthrough (an app-side extension the schema does not define) on its own line rather than folding it into a pass.recon/results/coverage_extent_witnesses.md— baseline counts, witness table, owned smoke command with output hashes, and a field-level old-vs-new comparison run at c813182.Check commands (all run in
recon/, offline)uv sync --lockeduv run ruff check .uv run ruff format --check .uv run pytest -quv run pytest -q tests/test_coverage_pipeline.pyOwned CLI smoke (exact command, recorded in the results doc with output hashes):
Old-vs-new on the same bundle (c813182 vs head): grid now starts at the fitted extent (-3.035, was -3.5),
cells_end_ftappears and clips the boundary cell, wall span covers the full fit ([−3.0, 5.332], was [−3.0, 5.0]), overhead stops claiming past the fit ([-3.035, 5.332], was [-3.5, 5.5]), phantom last grid cell goes false → true-observed-at-real-end.Not run
--depth moge2or photo-based depth): these bundles are LiDAR-rendered by design — running the model would need its process and weights.server/tests: recon-side only; the schema-compat receipt covers the exported document against the committed schema.Assumptions
server/schemas/scene.schema.jsonas the compatibility bar for the exported scene.json; the inputdepthextension is reported separately, not hidden.recon/results/is the right home for the witness record, next to the existing ETH3D results.Handoff (from the recon handoff, done / remaining)
Review request: the repair under test touches the recon coverage area — @hunter, this will need your review.