Skip to content

#247: one condition, one diagnosis — and the scratch repos stop being able to hang the suite - #260

Merged
Polichinel merged 1 commit into
developmentfrom
fix/247-legible-plumbing
Aug 12, 2026
Merged

#247: one condition, one diagnosis — and the scratch repos stop being able to hang the suite#260
Polichinel merged 1 commit into
developmentfrom
fix/247-legible-plumbing

Conversation

@Polichinel

Copy link
Copy Markdown
Collaborator

Closes #247. The last story of epic #241.

One condition was producing two diagnoses, neither of them the right one

A ref this clone cannot see and a ref that is not a frozen commit shared a message that named neither cause and never said git fetch. They have different remedies. Now three branches:

condition diagnosis
the pin is blank a defect in the pin — an empty ref reads the index
this clone has no such object run git fetch — shallow, --single-branch, or older than the pin
it resolves to something that is not a commit a defect in the pin

The bogus-sha case is deliberately classified as "this clone cannot see it", because that is the truth: the reader cannot tell a bad pin from a missing fetch, and the message now says so rather than guessing.

rows() refuses a scalar row by name

[test_environment] on the live registry is top-level strings, not sub-tables. Classifying such a table CONSUMED — which the partition check's own remediation message invites — used to return an AttributeError from a dict comprehension, in the module whose stated justification is failing legibly.

The scratch repositories are hermetic

All three now run git with -c commit.gpgsign=false -c core.hooksPath=/dev/null and an explicit timeout.

Verified rather than assumed: ran the suite under a HOME whose .gitconfig sets commit.gpgsign = true and points core.hooksPath at a nonexistent directory. Four tests pass where they would previously have failed with a bare CalledProcessError — or, with a passphrase-protected key, blocked on pinentry with no timeout and hung the whole run.

Mutation-proven three ways, each reverted.

C-91 resolved and moved; 22 open → 21.

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

🤖 Generated with Claude Code

…s stop hanging

ONE CONDITION WAS PRODUCING TWO DIAGNOSES. A ref this clone cannot see and a ref that is
not a frozen commit shared a message naming neither cause, which never said `git fetch`.
Three branches now, with different remedies: a blank pin is a pin defect (an empty ref
reads the index); an object this clone has never seen is a fetch problem (shallow,
--single-branch, or older than the pin); a ref that resolves to a non-commit is a pin
defect. The bogus-sha case is deliberately the second, because that is the truth — the
reader cannot tell a bad pin from a missing fetch, and now says so instead of guessing.

ROWS() REFUSES A SCALAR ROW BY NAME. `[test_environment]` on the live registry is
top-level strings. Classifying such a table CONSUMED — which the partition check's own
remediation message invites — used to return an AttributeError from a dict comprehension,
in the module whose stated justification is failing legibly.

THE SCRATCH REPOSITORIES ARE HERMETIC. All three run git with `-c commit.gpgsign=false
-c core.hooksPath=/dev/null` and a timeout. Verified rather than assumed: ran under a HOME
whose .gitconfig sets commit.gpgsign=true and points core.hooksPath at a nonexistent
directory — four tests pass where they would have failed with a bare CalledProcessError,
or with a passphrase-protected key blocked on pinentry and hung the run.

The refusal proof's expectations moved with the split, which is the point of having it:
two of its five cases now assert different messages because the messages became more
precise.

C-91 resolved and moved to Resolved Concerns; 22 open -> 21.

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

Closes #247. Epic #241 complete.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@Polichinel
Polichinel merged commit 3a0573b 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