Skip to content

#246: two proofs that proved nothing - #259

Merged
Polichinel merged 1 commit into
developmentfrom
fix/246-proofs-that-prove-nothing
Aug 12, 2026
Merged

#246: two proofs that proved nothing#259
Polichinel merged 1 commit into
developmentfrom
fix/246-proofs-that-prove-nothing

Conversation

@Polichinel

Copy link
Copy Markdown
Collaborator

Closes #246. Gate 2 of epic #241.

The tautology

assert not _unclassified_tables(base) where base was built from _TABLE_ROLE reduces to set(x) - set(x) — empty for every possible value of the map and every possible upstream registry. It shipped claiming "the real registry's tables must all classify" about a file the test never opens.

The silent direction is worth asserting; it just has to be asserted against an input the function did not derive from itself. Mutation-proven by making _unclassified_tables report everything.

registry_current had no test

It is the function tests/seam_registry.py was extracted to provide. Three tests now, plus two for registry_at's refusal branches that nothing reached.

The scratch repository differs on main, on origin/main and on disk, so preferring the wrong one is visible rather than a coin flip.

mutation before after
read HEAD (issue #196's defect) suite green fails
prefer main over origin/main green fails
drop the unreadable-blob refusal green fails
drop the TOML-parse wrapper green fails

One of my own mutations was badly chosen, and I am recording it

I first mutated the assertion to is not None — always true of a list — so it tested nothing and "survived". Mutating the instrument instead of the subject is the same error #245 produced. Redone against the function.

Also: the scratch repo runs git with -c commit.gpgsign=false -c core.hooksPath=/dev/null, which is C-91's third item arriving early.

ruff check .    # clean
pytest -q       # 420 passed, 1 skipped, 40 xfailed

🤖 Generated with Claude Code

THE TAUTOLOGY. `assert not _unclassified_tables(base)` where `base` was built from
`_TABLE_ROLE` reduces to `set(x) - set(x)`: empty for every possible value of the map and
every possible upstream registry. It shipped claiming "the real registry's tables must
all classify" about a file the test never opens. The silent direction is worth asserting;
it just has to be asserted against an input the function did not derive from itself.
Mutation-proven by making `_unclassified_tables` report everything.

REGISTRY_CURRENT HAD NO TEST — the function `tests/seam_registry.py` was extracted to
provide. Three now, plus two for `registry_at`'s refusal branches that nothing reached.
The scratch repository differs on `main`, on `origin/main` and on disk, so preferring the
wrong one is visible rather than a coin flip.

Mutation-proven four ways, each reverted: reading HEAD (issue #196's defect, which used to
leave the whole suite green), preferring `main` over `origin/main`, dropping the
unreadable-blob refusal, dropping the TOML-parse wrapper. All four fail now.

One of my five mutations was badly chosen and I am recording it rather than quietly
replacing it: I mutated the ASSERTION to `is not None`, which is always true of a list, so
it tested nothing and "survived". Mutating the assertion instead of the function is the
same instrument-not-subject error #245 already produced. Redone against the function.

The scratch repository runs git with `-c commit.gpgsign=false -c core.hooksPath=/dev/null`,
which is C-91's third item arriving early — a contributor's global signing config would
otherwise fail opaquely or block on pinentry with no timeout.

C-90 resolved and moved to Resolved Concerns; 23 open -> 22.

Suite 420 passed / 1 skipped / 40 xfailed, ruff clean.

Closes #246. Epic #241.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@Polichinel
Polichinel merged commit 4319b04 into development Aug 12, 2026
4 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