Skip to content

Geometry fallbacks visible (fusion, keep repair, CoACD, volume) under one SOBA_STRICT; TSDF-on-GPU claim retracted - #23

Merged
sladojevicm merged 1 commit into
developfrom
fix/geometry-fallbacks-visible
Sep 17, 2026
Merged

sladojevicm merged 1 commit into
developfrom
fix/geometry-fallbacks-visible

Conversation

@sladojevicm

Copy link
Copy Markdown
Owner

Scoped by the maintainer to sweep items 1, 3, 4, 5; everything else from the sweep is deferred until after the conference.

Recorded per object, the same way completion is (run_metrics.json steps, soba_pipeline_step_total{step,method}, run.steps on GET /api/jobs/{id}; scene.json untouched):

  • fusion: the bare except: pass in _fuse_and_seal is gone. fused (with completion_source: engine|poisson, fused_triangles) vs plain_finalize_fallback + the exception text. Only fused with completion_source: engine means the learned completion's geometry is in the final mesh; run 4's patchcomplete: 4 alone could not show that.
  • keep-band / seal repair: pymeshfix vs poisson_fallback (+reason, context).
  • CoACD: decomp.decompose_info → coacd (parts=n) vs single_hull_fallback (coacd not installed | raised … | no usable parts).
  • mass volume: mass.finalize_mesh_info → already_watertight | poisson_repair | hull_volume_fallback (+reason).

One strict flag: SOBA_STRICT=1 fails the run on any completion, generation or geometry fallback (per-kind flags still work); strict errors are re-raised through the old handlers.

TSDF claim retracted: STATUS.md, runbook §6, the guide and the run-1 log said or implied "TSDF runs on the GPU". Only the CUDA capability was checked; tsdf.fuse defaults to CPU:0 and run_assemble.py passes no device, so fusion executes on CPU. The device is not changed in this PR.

Tests: new tests/scene/test_geometry_fallbacks.py + tests/telemetry/test_steps.py; run locally under real Open3D/CoACD/pymeshfix in an ephemeral env: 103 passed (1 known failure: anthropic absent there). Repo venv: 416 passed, open3d baseline unchanged.

🤖 Generated with Claude Code

…ume) under one SOBA_STRICT; TSDF-on-GPU claim retracted

A sweep of every exception handler around an ML/geometry call found four
silent fallbacks on the demo's critical path; all four now record, per object,
which implementation actually ran (run_metrics.json `steps`,
soba_pipeline_step_total{step,method}, run.steps on the job record):

- fusion: `_fuse_and_seal`'s bare except is gone. `fused` (completion_source
  engine|poisson, fused_triangles) vs `plain_finalize_fallback` with the
  exception text: only the former means the completion reached the final mesh.
- keep-band / seal repair: pymeshfix vs poisson_fallback (+reason, context).
- CoACD: decomp.decompose_info -> coacd (parts=n) vs single_hull_fallback
  (not installed | raised | no parts).
- mass volume: mass.finalize_mesh_info -> already_watertight | poisson_repair |
  hull_volume_fallback (+reason).
SOBA_STRICT=1 (telemetry.strict; per-kind flags kept) fails the run on any
completion, generation or geometry fallback; strict errors are re-raised
through the old handlers. scene.json is untouched (invariant 1).

Docs: STATUS.md, runbook §6, the guide and the run-1 log said "TSDF runs on
the GPU". Only the CUDA capability was checked; tsdf.fuse defaults to CPU:0
and run_assemble.py passes no device, so fusion executes on CPU. Reworded,
and the scripts' S1 message no longer implies otherwise. The device is not
changed here. The rest of the sweep is deferred (maintainer decision).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@sladojevicm
sladojevicm merged commit 1a7acb2 into develop Sep 17, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant