homemaker-layout/tests
Claude 47079997cf
The native-vs-Perl parity tests have never run, and were self-comparing
The 39.19 objective change broke three tests. They were the right ones to
break, and how they broke matters more than the change.

test_native_fitness_score_parity and test_native_fitness_fail_set_parity read a
cached .score/.fails beside each corpus .dom and assert the native Python
fitness agrees. They are the ONLY check that the native evaluator still agrees
with the Urb oracle it was ported from, and CLAUDE.md still describes oracle.py
and the Perl tool as kept for cross-validation.

But .gitignore lines 10-11 exclude *.dom.score and *.dom.fails, and
git log --diff-filter=A over those patterns finds zero files ever added on any
branch. No oracle cache has ever existed here, so on a clean checkout all 64
parametrised cases skip.

Worse than skipping is what happens when they do not. Nothing in a .score file
records who wrote it, so a .dom left in that directory by a search run -- with
a .score written by homemaker-fitness, the NATIVE scorer -- silently becomes a
parity fixture, and the test compares the native scorer with itself. That
passes by construction whatever the native scorer says.

Three such cases were live and green: the coldstart-500000-s*.dom artefacts
committed to examples/programme-house during 39.12 and scored natively this
session. They surfaced only because 39.19 made the native scorer disagree with
its own stale output; absent an objective change, a green "native matches
oracle" would have been reported indefinitely.

Stopgap: parametrisation restricted to the Perl corpus's MD5-named files so a
session artefact cannot become a fixture again; the skip message now says
parity is UNVERIFIED rather than reading like an optional missing cache; a
guard test asserts the restriction. All 64 cases skip honestly. Regenerating
the caches with the native scorer would not have been a fix -- it would have
re-cemented the self-comparison.

Filed as homemaker-py-118 (P1): regenerate fixtures from the Perl oracle,
narrow the ignore rules so fixture caches can be tracked, and find out whether
parity still holds -- it may not, since 39.14, 39.18 and 39.19 all changed the
native objective and the oracle has none of them. If parity is being abandoned
deliberately the tests should be deleted with a note. What must not survive is
a test that looks like a guarantee and is not one.

415 passed, 64 skipped.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MJ84Feep79Hhm3E4zZJmnB
2026-09-05 19:25:18 +00:00
..
_helpers.py §39.7: access requirements become a declared usage: attribute (homemaker-py-sel) 2026-08-26 13:39:41 +00:00
test_collapse_global.py §39.7: access requirements become a declared usage: attribute (homemaker-py-sel) 2026-08-26 13:39:41 +00:00
test_collapse_insearch.py Replace the stale 15-fail acceptance target with the cold-start baseline 2026-09-04 17:16:10 +00:00
test_compose.py §39.4: tighten generic-type matching, reverting the harbor rename 2026-08-26 09:45:28 +00:00
test_conn_grade.py qi6: graded circulation-connectivity signal (§18) 2026-07-18 18:44:24 +01:00
test_cpsat.py homemaker-py-2g7.5: CP-SAT exact room-code assignment (seeder + reassign op) 2026-08-04 09:19:36 +01:00
test_dom_corpus.py The native-vs-Perl parity tests have never run, and were self-comparing 2026-09-05 19:25:18 +00:00
test_driver.py n_workers is an algorithm parameter, not noise 2026-08-29 12:52:33 +00:00
test_evolve_cli.py x3b/§13.10: productionise leaf-sharing — per-code share grain + CLI wiring 2026-06-28 22:04:35 +01:00
test_evolve_preflight.py Pre-flight: check the ground floor's frontage, not the per-storey average 2026-09-05 17:46:52 +00:00
test_fitness.py Make both failing tests assert their intent, not stale artefacts 2026-08-29 07:11:25 +00:00
test_fitness_aggregate.py A terrace is no longer worth more per m2 than a real internal room 2026-09-05 19:25:02 +00:00
test_fitness_crinkliness.py Make the crinkliness factor one-sided: stop billing the daylit wall twice 2026-09-05 07:27:02 +00:00
test_genome.py Phase 6 §11.5: structural niching + restarts — negative result (c4c.5) 2026-06-18 23:42:39 +01:00
test_geometry.py Rename package: homemaker → homemaker-layout 2026-06-14 08:18:06 +01:00
test_graph.py Missing-space cascade no longer weighted by YAML verbosity 2026-08-29 09:33:40 +00:00
test_innerloop.py Swap inner loop default from CMA-ES to Nelder-Mead (homemaker-py-d6d) 2026-06-14 08:51:22 +01:00
test_multi_use.py §39.7: access requirements become a declared usage: attribute (homemaker-py-sel) 2026-08-26 13:39:41 +00:00
test_operators.py Recover most of the cpsat test-suite cost; keep the part that is real 2026-08-29 18:55:54 +00:00
test_oracle.py Rename package: homemaker → homemaker-layout 2026-06-14 08:18:06 +01:00
test_programme.py §39.7: access requirements become a declared usage: attribute (homemaker-py-sel) 2026-08-26 13:39:41 +00:00
test_shapecurve.py Shape-curve DP models leaf-sharing, so it can fire on real runs 2026-08-29 21:36:45 +00:00
test_staging.py §39.4: tighten generic-type matching, reverting the harbor rename 2026-08-26 09:45:28 +00:00
test_superposition.py §39.7: access requirements become a declared usage: attribute (homemaker-py-sel) 2026-08-26 13:39:41 +00:00
test_terrace_value_ruling.py A terrace is no longer worth more per m2 than a real internal room 2026-09-05 19:25:02 +00:00