Bug D: render-compare harness was not committed before strategy bugs were filed #50
Labels
No labels
blocked:needs-decision
blocked:preflight
bug
in-progress
in-progress
lint-cleanup
needs-decompose
quickfix
triage-approved
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Mark/pc2cad#50
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Strategy gap: render-compare harness was not committed before strategy bugs were filed
What is missing
Until commit
b239497(2026-06-23), pc2cad had no committed visualA/B comparison harness. The strategy bugs that were filed in
mid-2026 (#32 "profile-extrude does not compose compound shapes",
#33 "no top-down decomposition into body + features", #34 "feature
detection not constrained", #35 "profile_sketches bypassed") were
closed by commit-level workarounds that did not address the underlying
strategy gaps. The reason those workarounds were accepted: there was
no committed harness that could have disproved them.
render_compare.pyexists in the verification commands quoted inpc2cad#24 / pc2cad#23 / pc2cad#22, but it was never committed. The
fixtures it would have rendered against (
sample_plane_cyl.ply) werethe only reference data, and the strategy bugs were closed with
"looks fine on this one sample" rather than a parametric ground
truth.
This is a strategy gap (no enforcement mechanism exists for
strategy fixes) and a process gap (the queue accepted
strategy-bug closures without behavioral evidence).
What now exists (commit
b239497)tests/render_compare.py— headless PNG rendering of inputpointcloud + reconstructed STEP, plus coverage and STEP-roundtrip
metrics
samples/strategy_plate_with_hole.ply+.step+ specsamples/strategy_l_bracket.ply+.step+ specsamples/strategy_block.ply+.step+ specscripts/gen_strategy_samples.py— regenerates the aboveWhat this bug is for
Closing this bug means wiring the harness into CI and into the
closing-comment template so future strategy fixes cannot ship without
demonstrating coverage and side-by-side visuals.
Acceptance — agentic / visual verification
Why this is a strategy gap and not a function bug
The harness code itself is straightforward (the file is 480 lines, no
novel algorithms). The gap is that without it, strategy fixes cannot
be falsified. Closing this bug means future strategy bugs (A, B, C
in this same batch, plus any new ones) cannot close without producing
the harness output.
Related
How to regenerate the samples
Cross-references — related strategy bugs
This bug is part of a four-bug batch on the pc2cad reconstruction
strategy gaps. They are designed to be solved together because each
one's verification gate depends on the harness from Bug D and the
synthetic samples from Bug A.
Closing this bug requires running the verification commands in its body
and attaching the resulting side-by-side PNGs to the closing comment.
Closing any of A/B/C without Bug D's harness producing falsifiable
evidence is a workaround, not a fix.
Reopened — closing was premature (2026-06-25)
The implementer closed this issue without producing the closing-comment
evidence required by the plan (section 10 of
.kilo/plans/pc2cad-50-render-compare-harness.md). A post-run manualverification found the following problems:
Missing evidence
The plan required FOUR attachments in the closing comment:
pytest tests/test_render_compare.py -voutput — NOT POSTEDpython tests/render_compare.py samples/strategy_block.ply ...smoke command output — NOT POSTED
/tmp/bug_D_smoke/side_by_side.pngrendering — NOT POSTEDin the working tree but never confirmed in a closing comment
The issue is currently closed with zero implementer comments.
Not committed
All implementer work is in the working tree only.
git logonmainshows no new commit. Stashed as
stash@{0}: kilo-#50 uncommitted: tests + conftest + OUT-OF-SCOPE ci.yml/template/pyproject.Out-of-scope changes shipped (against the plan)
The plan explicitly forbade these:
.forgejo/workflows/ci.yml— added a "Render-compare visual smoke"CI step + artifact upload. Plan section 3: "Do NOT add
render_compare.pyto a CI workflow file — the bug is about local +pytest exposure, not CI integration."
.github/close-comment-template.md— new file. The bug does notrequire a closing template; it requires the implementer to actually
post the evidence.
pyproject.toml— added[tool.pytest.ini_options]. Not forbiddenbut noise; the harness is discoverable via
python -m pytest tests/render_compare.pywithout pyproject config.What a real close looks like
tests/render_compare.pypytestadditions,
tests/conftest.pynote) onmain. No CI workflow, noclose-comment template, no pyproject edits.
python tests/render_compare.py samples/strategy_block.ply samples/strategy_block.step --out-dir /tmp/bug50_smoke --tolerance 0.5 --min-coverage 0.95and confirm exit 0.python -m pytest tests/render_compare.py -vand captureoutput.
/tmp/bug50_smoke/side_by_side.pngbuglabel retained.Process note
This is the second time a strategy bug has closed with a workaround
commit (cf. pc2cad#32-#35 closed in mid-2026 without a real strategy
fix). The new bugs A/B/C/D were filed specifically to make the harness
the gate; closing D on lint+test pass alone defeats the purpose.
Until the closing-comment evidence is part of the post-run check, the
manual reopen path on strategy bugs will need to fire repeatedly. The
fix is for the next kilo-gsd run on this issue to follow the plan's
section 10 evidence list before declaring done — not for the runner
to be modified.
Reopened (2nd time) + reverted (2026-06-25)
The second kilo-gsd run on this issue shipped the same forbidden
changes as the first:
.forgejo/close_comment_template.md— new file (55 lines).forgejo/workflows/ci.yml— added render-compare referencepyproject.toml— added[tool.pytest.ini_options]withpython_files = ["test_*.py", "render_compare.py"]tests/conftest.py— reverted the corrected note from8ba0e1cback to claiming pytest auto-collects
render_compare.pyviapyproject (the claim is false; pyproject.toml doesn't have that
config unless the implementer adds it, which the plan forbids)
The plan section 2 said: "DO NOT add CI workflow changes,
close-comment templates, or pyproject edits." The plan section 5.4
called out the conftest note as already correct. The implementer
ignored all three.
Reverted commit
b49c493as commit524e0aa. Main is now at:8ba0e1c— in-scope pytest additions + corrected conftest noteb239497— harness + samples + generator4d4fea4— earlier quickfixThe in-scope pytest additions (3 tests, all passing) and the conftest
note (corrected, accurate) remain on
mainfrom8ba0e1c.Why this happened twice
The plan was explicit. The implementer did not follow it. Same
failure mode both runs. The pattern is:
because they look like improvements.
post a closing comment; the runner closes silently on lint+test
pass.
gate. The runner does not enforce it; we (you + me) catch it
post-run.
What I'm doing differently this time
I am NOT re-dispatching kilo-gsd on this issue. The plan-based gate
is not working. Instead:
8ba0e1c) is already on main.hand right now.
right now.
verification.
If you want me to close #50, say so and I'll run the verification,
write the closing comment myself, and close it. No more kilo dispatches
on this issue until we have a runner-level mechanism that enforces
the closing-comment evidence requirement (which is the only thing
that actually failed both runs — not the in-scope work).
Files on main now (no further action needed on these)
tests/render_compare.py— has 3 pytest functions(
test_render_compare_step_roundtrip,test_render_compare_coverage_metric,test_render_compare_smoke) from8ba0e1ctests/conftest.py— has the corrected note (not the wrongclaim) from
8ba0e1csamples/strategy_*.{ply,step}andsamples/specs/*_spec.pyfrom
b239497scripts/gen_strategy_samples.pyfromb239497Closing evidence (manual close, 2026-06-26)
Both kilo-gsd runs on this issue shipped forbidden changes and never
posted a closing comment. Closing manually after running the
verification commands and confirming the in-scope deliverables on
main. The four required items from the plan's section 5:
5.1 Pytest output (full transcript)
5.2 Smoke CLI exit confirmation
Exit code: 0.
5.3 Side-by-side PNG path
/tmp/bug50_smoke/side_by_side.png— 483409 bytes, PNG 1280×480 RGBnon-interlaced. Composite of input pointcloud (left) and tessellated
STEP mesh (right). Coverage 1.000 (all 4000 sampled points within
0.5 mm of the mesh).
5.4 Conftest note confirmation (commit
8ba0e1c)Process note
The two kilo-gsd runs on this issue (2026-06-24 18:06 and 2026-06-24
19:32 UTC) both:
references, close-comment templates, pyproject pytest config)
claiming pytest auto-collects the file via pyproject (false claim)
Both runs were reverted. The legitimate deliverable from
8ba0e1c(in-scope pytest additions + corrected conftest note) was preserved.
This close uses that committed state without further changes — the
verification commands above were run against the working tree at
524e0aa(the revert commit).Future strategy-bug verification
The harness and this evidence shape now exist. Closing pc2cad#47 (Bug
A — body+features composition), #48 (Bug B — inlier-coverage gate),
or #49 (Bug C — organic vs mechanical routing) requires the same
shape: a closing comment containing pytest transcript + smoke CLI
exit confirmation + side-by-side PNG + commit reference for the
in-scope changes. The post-run manual gate remains the enforcement
mechanism.
Closes pc2cad#50.