bug(compose): hallucinated cylinder + through-hole on flat strategy_l_bracket (coverage 0.756) #75

Open
opened 2026-09-19 01:46:17 +00:00 by Mark · 0 comments
Owner

Summary

The compose engine adds features to the reconstruction that are
not present in the input pointcloud: a vertical cylindrical boss
on the base plate and a circular through-hole — neither exists in
the scan.

Coverage: 0.756 at 1mm tolerance (target ≥0.80).

Reproduction

cd /home/b/Projects/pc2cad
.venv/bin/python pc2cad_cli.py samples/strategy_l_bracket.ply \
    --out /tmp/strategy_l_bracket.step --engine compose --deterministic-ransac --seed 42
.venv/bin/python tests/render_compare.py samples/strategy_l_bracket.ply /tmp/strategy_l_bracket.step \
    --out-dir /tmp/render --tolerance 1.0
# coverage: 0.756 (3782/5000 within 1.0 mm) — below 0.80 spec floor

Input (strategy_l_bracket)

Flat L-bracket: 100×10×50 horizontal base + 100×100×50 vertical wall
joined at 90°. 5000 surface points. No cylindrical boss, no hole.

Expected

Reconstruction captures the L-profile (vertical wall + horizontal base)
faithfully, with no features that aren't in the input.

Actual

Output includes a vertical cylindrical boss on the base plate and a
circular through-hole in the base. Neither feature exists in the
pointcloud. Coverage 0.756 < 0.80 spec floor.

Side-by-side: docs/visual-bug-evidence-2026-09-18/strategy_l_bracket_side_by_side.png

Relationship to other issues

  • Related to #72 (synth_bracket coverage 0.229): the same compose
    engine path, same shape class. Both issues stem from the compose
    engine mis-classifying or hallucinating features.
  • The earlier fix that brought L-bracket coverage to 0.815 (#58
    closure via d43b5abe34) regressed in the post-#70 sweep.

Acceptance

samples/strategy_l_bracket.ply reconstruction matches the input
geometry without adding features; render_compare reports coverage
≥0.85 at 1mm tolerance.

Refs: visual-regression sweep 2026-09-18, post-#70 close-out sweep.

## Summary The compose engine adds features to the reconstruction that are not present in the input pointcloud: a vertical cylindrical boss on the base plate and a circular through-hole — neither exists in the scan. Coverage: **0.756** at 1mm tolerance (target ≥0.80). ## Reproduction ```bash cd /home/b/Projects/pc2cad .venv/bin/python pc2cad_cli.py samples/strategy_l_bracket.ply \ --out /tmp/strategy_l_bracket.step --engine compose --deterministic-ransac --seed 42 .venv/bin/python tests/render_compare.py samples/strategy_l_bracket.ply /tmp/strategy_l_bracket.step \ --out-dir /tmp/render --tolerance 1.0 # coverage: 0.756 (3782/5000 within 1.0 mm) — below 0.80 spec floor ``` ## Input (strategy_l_bracket) Flat L-bracket: 100×10×50 horizontal base + 100×100×50 vertical wall joined at 90°. 5000 surface points. No cylindrical boss, no hole. ## Expected Reconstruction captures the L-profile (vertical wall + horizontal base) faithfully, with no features that aren't in the input. ## Actual Output includes a vertical cylindrical boss on the base plate and a circular through-hole in the base. Neither feature exists in the pointcloud. Coverage 0.756 < 0.80 spec floor. Side-by-side: `docs/visual-bug-evidence-2026-09-18/strategy_l_bracket_side_by_side.png` ## Relationship to other issues - Related to #72 (synth_bracket coverage 0.229): the same compose engine path, same shape class. Both issues stem from the compose engine mis-classifying or hallucinating features. - The earlier fix that brought L-bracket coverage to 0.815 (#58 closure via `d43b5abe34`) regressed in the post-#70 sweep. ## Acceptance `samples/strategy_l_bracket.ply` reconstruction matches the input geometry without adding features; `render_compare` reports coverage ≥0.85 at 1mm tolerance. Refs: visual-regression sweep 2026-09-18, post-#70 close-out sweep.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Mark/pc2cad#75
No description provided.