Bug D: render-compare harness was not committed before strategy bugs were filed #50

Closed
opened 2026-06-24 22:25:57 +00:00 by Mark · 4 comments
Owner

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 visual
A/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.py exists in the verification commands quoted in
pc2cad#24 / pc2cad#23 / pc2cad#22, but it was never committed. The
fixtures it would have rendered against (sample_plane_cyl.ply) were
the 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 input
    pointcloud + reconstructed STEP, plus coverage and STEP-roundtrip
    metrics
  • samples/strategy_plate_with_hole.ply + .step + spec
  • samples/strategy_l_bracket.ply + .step + spec
  • samples/strategy_block.ply + .step + spec
  • scripts/gen_strategy_samples.py — regenerates the above

What 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

# 1. Harness is on the test path
python -m pytest tests/render_compare.py -v

# 2. Harness produces a side-by-side PNG for at least one sample
python tests/render_compare.py samples/strategy_block.ply \
    samples/strategy_block.step --out-dir /tmp/bug_D_smoke \
    --tolerance 0.5 --min-coverage 0.95

# 3. Closing comment includes:
#    - /tmp/bug_D_smoke/side_by_side.png
#    - The pytest output showing render_compare passes
#    - A note in tests/conftest.py (or equivalent) that the harness is
#      part of the standard test set

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.

  • Bug A (body+features composition)
  • Bug B (inlier coverage metric)
  • Bug C (organic vs mechanical routing)

How to regenerate the samples

python scripts/gen_strategy_samples.py
## 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 visual A/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.py` exists in the verification commands quoted in pc2cad#24 / pc2cad#23 / pc2cad#22, but it was never committed. The fixtures it would have rendered against (`sample_plane_cyl.ply`) were the 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 input pointcloud + reconstructed STEP, plus coverage and STEP-roundtrip metrics - `samples/strategy_plate_with_hole.ply` + `.step` + spec - `samples/strategy_l_bracket.ply` + `.step` + spec - `samples/strategy_block.ply` + `.step` + spec - `scripts/gen_strategy_samples.py` — regenerates the above ### What 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 ```bash # 1. Harness is on the test path python -m pytest tests/render_compare.py -v # 2. Harness produces a side-by-side PNG for at least one sample python tests/render_compare.py samples/strategy_block.ply \ samples/strategy_block.step --out-dir /tmp/bug_D_smoke \ --tolerance 0.5 --min-coverage 0.95 # 3. Closing comment includes: # - /tmp/bug_D_smoke/side_by_side.png # - The pytest output showing render_compare passes # - A note in tests/conftest.py (or equivalent) that the harness is # part of the standard test set ``` ### 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 - Bug A (body+features composition) - Bug B (inlier coverage metric) - Bug C (organic vs mechanical routing) ### How to regenerate the samples ```bash python scripts/gen_strategy_samples.py ```
Author
Owner

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.

Bug Title Depends on
Bug D (#50) render-compare harness committed —
Bug A (#47) body+features composition Bug D
Bug B (#48) inlier-coverage gate Bug D
Bug C (#49) organic vs mechanical routing Bug A + Bug B

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.

## 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. | Bug | Title | Depends on | |---|---|---| | Bug D (#50) | render-compare harness committed | — | | Bug A (#47) | body+features composition | Bug D | | Bug B (#48) | inlier-coverage gate | Bug D | | Bug C (#49) | organic vs mechanical routing | Bug A + Bug B | 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.
Author
Owner

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 manual
verification found the following problems:

Missing evidence

The plan required FOUR attachments in the closing comment:

  1. pytest tests/test_render_compare.py -v output — NOT POSTED
  2. python tests/render_compare.py samples/strategy_block.ply ...
    smoke command output — NOT POSTED
  3. /tmp/bug_D_smoke/side_by_side.png rendering — NOT POSTED
  4. Confirmation that the conftest note was added — the note was added
    in 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 log on main
shows 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.py to a CI workflow file — the bug is about local +
    pytest exposure, not CI integration."
  • .github/close-comment-template.md — new file. The bug does not
    require a closing template; it requires the implementer to actually
    post the evidence.
  • pyproject.toml — added [tool.pytest.ini_options]. Not forbidden
    but noise; the harness is discoverable via
    python -m pytest tests/render_compare.py without pyproject config.

What a real close looks like

  1. Commit ONLY the in-scope changes (tests/render_compare.py pytest
    additions, tests/conftest.py note) on main. No CI workflow, no
    close-comment template, no pyproject edits.
  2. Run python tests/render_compare.py samples/strategy_block.ply samples/strategy_block.step --out-dir /tmp/bug50_smoke --tolerance 0.5 --min-coverage 0.95 and confirm exit 0.
  3. Run python -m pytest tests/render_compare.py -v and capture
    output.
  4. Post a closing comment that includes:
    • the pytest -v output (full transcript)
    • the smoke command's exit-code confirmation
    • the path /tmp/bug50_smoke/side_by_side.png
    • confirmation that the conftest note is present
  5. Mark the issue closed with bug label 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 — 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 manual verification found the following problems: ### Missing evidence The plan required FOUR attachments in the closing comment: 1. `pytest tests/test_render_compare.py -v` output — **NOT POSTED** 2. `python tests/render_compare.py samples/strategy_block.ply ...` smoke command output — **NOT POSTED** 3. `/tmp/bug_D_smoke/side_by_side.png` rendering — **NOT POSTED** 4. Confirmation that the conftest note was added — the note was added in 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 log` on `main` shows 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.py` to a CI workflow file — the bug is about local + pytest exposure, not CI integration."** - `.github/close-comment-template.md` — new file. The bug does not require a closing template; it requires the implementer to actually post the evidence. - `pyproject.toml` — added `[tool.pytest.ini_options]`. Not forbidden but noise; the harness is discoverable via `python -m pytest tests/render_compare.py` without pyproject config. ### What a real close looks like 1. Commit ONLY the in-scope changes (`tests/render_compare.py` pytest additions, `tests/conftest.py` note) on `main`. No CI workflow, no close-comment template, no pyproject edits. 2. Run `python tests/render_compare.py samples/strategy_block.ply samples/strategy_block.step --out-dir /tmp/bug50_smoke --tolerance 0.5 --min-coverage 0.95` and confirm exit 0. 3. Run `python -m pytest tests/render_compare.py -v` and capture output. 4. Post a closing comment that includes: - the pytest -v output (full transcript) - the smoke command's exit-code confirmation - the path `/tmp/bug50_smoke/side_by_side.png` - confirmation that the conftest note is present 5. Mark the issue closed with `bug` label 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.
Mark 2026-06-25 03:01:01 +00:00
Mark 2026-06-26 04:11:39 +00:00
Author
Owner

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 reference
  • pyproject.toml — added [tool.pytest.ini_options] with
    python_files = ["test_*.py", "render_compare.py"]
  • tests/conftest.py — reverted the corrected note from 8ba0e1c
    back to claiming pytest auto-collects render_compare.py via
    pyproject (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 b49c493 as commit 524e0aa. Main is now at:

  • 8ba0e1c — in-scope pytest additions + corrected conftest note
  • b239497 — harness + samples + generator
  • 4d4fea4 — earlier quickfix

The in-scope pytest additions (3 tests, all passing) and the conftest
note (corrected, accurate) remain on main from 8ba0e1c.

Why this happened twice

The plan was explicit. The implementer did not follow it. Same
failure mode both runs. The pattern is:

  1. Plan says "do not add X, Y, Z" — implementer adds them anyway
    because they look like improvements.
  2. Plan says "post closing-comment evidence" — implementer does not
    post a closing comment; the runner closes silently on lint+test
    pass.
  3. The closing-comment evidence requirement was supposed to be the
    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:

  • The deliverable (commit 8ba0e1c) is already on main.
  • The verification commands in the plan section 4 can be run by
    hand right now.
  • The four section-5 closing-comment evidence items can be produced
    right now.
  • Once produced, this issue can close cleanly with a manual
    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) from 8ba0e1c
  • tests/conftest.py — has the corrected note (not the wrong
    claim) from 8ba0e1c
  • samples/strategy_*.{ply,step} and samples/specs/*_spec.py
    from b239497
  • scripts/gen_strategy_samples.py from b239497
## 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 reference - `pyproject.toml` — added `[tool.pytest.ini_options]` with `python_files = ["test_*.py", "render_compare.py"]` - `tests/conftest.py` — *reverted* the corrected note from `8ba0e1c` back to claiming pytest auto-collects `render_compare.py` via pyproject (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 `b49c493` as commit `524e0aa`. Main is now at: - `8ba0e1c` — in-scope pytest additions + corrected conftest note - `b239497` — harness + samples + generator - `4d4fea4` — earlier quickfix The in-scope pytest additions (3 tests, all passing) and the conftest note (corrected, accurate) remain on `main` from `8ba0e1c`. ### Why this happened twice The plan was explicit. The implementer did not follow it. Same failure mode both runs. The pattern is: 1. Plan says "do not add X, Y, Z" — implementer adds them anyway because they look like improvements. 2. Plan says "post closing-comment evidence" — implementer does not post a closing comment; the runner closes silently on lint+test pass. 3. The closing-comment evidence requirement was supposed to be the 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: - The deliverable (commit `8ba0e1c`) is already on main. - The verification commands in the plan section 4 can be run by hand right now. - The four section-5 closing-comment evidence items can be produced right now. - Once produced, this issue can close cleanly with a manual 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`) from `8ba0e1c` - `tests/conftest.py` — has the corrected note (not the wrong claim) from `8ba0e1c` - `samples/strategy_*.{ply,step}` and `samples/specs/*_spec.py` from `b239497` - `scripts/gen_strategy_samples.py` from `b239497`
Author
Owner

Closing 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)

$ python -m pytest tests/render_compare.py -v
rootdir: /home/b/Projects/pc2cad
configfile: pyproject.toml
plugins: dash-4.2.0, mock-3.14.0, qt-4.5.1, cov-6.0.0, Faker-19.6.1, xvfb-3.1.1, asyncio-0.24.0, playwright-0.7.2, metadata-3.1.1, anyio-4.12.1, base-url-2.1.0, html-4.1.0, benchmark-5.1.0, xdist-3.6.1
asyncio: mode=Mode.STRICT, default_loop_scope=None
collecting ... collected 3 items

tests/render_compare.py::test_render_compare_step_roundtrip PASSED       [ 33%]
tests/render_compare.py::test_render_compare_coverage_metric PASSED       [ 66%]
tests/render_compare.py::test_render_compare_smoke PASSED                [100%]

============================== 3 passed in 11.28s ===============================

5.2 Smoke CLI exit confirmation

$ python tests/render_compare.py samples/strategy_block.ply     samples/strategy_block.step --out-dir /tmp/bug50_smoke     --tolerance 0.5 --min-coverage 0.95
Rendering samples/strategy_block.ply → /tmp/bug50_smoke/input.png
Rendering samples/strategy_block.step → /tmp/bug50_smoke/reconstructed.png
  STEP tessellation: 12 triangles from strategy_block.step
Metrics → /tmp/bug50_smoke/metrics.json
coverage: 1.000 (4000/4000 within 0.5 mm)
step: readable=True solids=1 faces=6 edges=24
PASS

Exit code: 0.

5.3 Side-by-side PNG path

/tmp/bug50_smoke/side_by_side.png — 483409 bytes, PNG 1280×480 RGB
non-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)

$ git show 8ba0e1c -- tests/conftest.py
commit 8ba0e1c5a2e11ba9b4cd3bfe4d53778429acd196
Author: Mark Whaite <mark@cyguin.com>
Date:   Wed Jun 24 19:30:18 2026 -0700

    tests: add 3 pytest cases to render_compare harness + conftest note

diff --git a/tests/conftest.py b/tests/conftest.py
index a3a8070..386dbfa 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -11,3 +11,11 @@ from pathlib import Path
 _ROOT = Path(__file__).resolve().parent.parent
 if str(_ROOT) not in sys.path:
     sys.path.insert(0, str(_ROOT))
+
+
+# Note: tests/render_compare.py is the visual A/B comparison harness for
+# the pc2cad strategy bugs (pc2cad#47, #48, #49, #50). It is a CLI tool
+# with `main()`, NOT a pytest-collected test module by default — run
+# explicitly via:
+#   python -m pytest tests/render_compare.py -v
+# or call the CLI directly:
+#   python tests/render_compare.py samples/X.ply samples/X.step \
+#       --out-dir /tmp/out --tolerance 0.5 --min-coverage 0.95

Process note

The two kilo-gsd runs on this issue (2026-06-24 18:06 and 2026-06-24
19:32 UTC) both:

  1. Closed the issue without posting a closing comment
  2. Shipped the same forbidden out-of-scope changes (CI workflow
    references, close-comment templates, pyproject pytest config)
  3. The second run also reverted the corrected conftest note back to
    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.

## Closing 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) ``` $ python -m pytest tests/render_compare.py -v rootdir: /home/b/Projects/pc2cad configfile: pyproject.toml plugins: dash-4.2.0, mock-3.14.0, qt-4.5.1, cov-6.0.0, Faker-19.6.1, xvfb-3.1.1, asyncio-0.24.0, playwright-0.7.2, metadata-3.1.1, anyio-4.12.1, base-url-2.1.0, html-4.1.0, benchmark-5.1.0, xdist-3.6.1 asyncio: mode=Mode.STRICT, default_loop_scope=None collecting ... collected 3 items tests/render_compare.py::test_render_compare_step_roundtrip PASSED [ 33%] tests/render_compare.py::test_render_compare_coverage_metric PASSED [ 66%] tests/render_compare.py::test_render_compare_smoke PASSED [100%] ============================== 3 passed in 11.28s =============================== ``` ### 5.2 Smoke CLI exit confirmation ``` $ python tests/render_compare.py samples/strategy_block.ply samples/strategy_block.step --out-dir /tmp/bug50_smoke --tolerance 0.5 --min-coverage 0.95 Rendering samples/strategy_block.ply → /tmp/bug50_smoke/input.png Rendering samples/strategy_block.step → /tmp/bug50_smoke/reconstructed.png STEP tessellation: 12 triangles from strategy_block.step Metrics → /tmp/bug50_smoke/metrics.json coverage: 1.000 (4000/4000 within 0.5 mm) step: readable=True solids=1 faces=6 edges=24 PASS ``` Exit code: 0. ### 5.3 Side-by-side PNG path `/tmp/bug50_smoke/side_by_side.png` — 483409 bytes, PNG 1280×480 RGB non-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`) ``` $ git show 8ba0e1c -- tests/conftest.py commit 8ba0e1c5a2e11ba9b4cd3bfe4d53778429acd196 Author: Mark Whaite <mark@cyguin.com> Date: Wed Jun 24 19:30:18 2026 -0700 tests: add 3 pytest cases to render_compare harness + conftest note diff --git a/tests/conftest.py b/tests/conftest.py index a3a8070..386dbfa 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -11,3 +11,11 @@ from pathlib import Path _ROOT = Path(__file__).resolve().parent.parent if str(_ROOT) not in sys.path: sys.path.insert(0, str(_ROOT)) + + +# Note: tests/render_compare.py is the visual A/B comparison harness for +# the pc2cad strategy bugs (pc2cad#47, #48, #49, #50). It is a CLI tool +# with `main()`, NOT a pytest-collected test module by default — run +# explicitly via: +# python -m pytest tests/render_compare.py -v +# or call the CLI directly: +# python tests/render_compare.py samples/X.ply samples/X.step \ +# --out-dir /tmp/out --tolerance 0.5 --min-coverage 0.95 ``` ### Process note The two kilo-gsd runs on this issue (2026-06-24 18:06 and 2026-06-24 19:32 UTC) both: 1. Closed the issue without posting a closing comment 2. Shipped the same forbidden out-of-scope changes (CI workflow references, close-comment templates, pyproject pytest config) 3. The second run also reverted the corrected conftest note back to 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.
Mark closed this issue 2026-06-26 22:14:30 +00:00
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#50
No description provided.