Skip to content

Adopt the scaffolded CI shape: pre-commit for lint, and run the 81 tests - #8

Merged
jonnyspicer merged 3 commits into
mainfrom
ci/adopt-scaffolded-workflow
Aug 12, 2026
Merged

jonnyspicer merged 3 commits into
mainfrom
ci/adopt-scaffolded-workflow

Conversation

@jonnyspicer

Copy link
Copy Markdown
Contributor

Part of 86cb43xya. Last of the five libraries; Tower-Finder follows separately.

The headline: this repo's tests have never run in CI

lint.yml ran ruff and the dead-code gate, with no pytest step. 81 tests have been sitting unexecuted. They all pass.

Worse, they couldn't have run: this repo declares retina-custody>=0.1.0, a sibling library on no package index, so pip install -e '.[dev]' fails outright with "requirements are unsatisfiable". That was latent — the workflow never installed the package at all, so nothing ever tripped over it.

CI now installs the sibling from a pinned tag first:

- run: uv pip install --system "retina-custody @ git+https://github.com/offworldlabs/retina-custody@v0.1.0"

retina-custody v0.1.0 was tagged as part of this work — it had no releases before.

The URL deliberately does not go in pyproject.toml. The dependency line stays the generic retina-custody>=0.1.0, because Tower-Finder installs all five libraries from local submodule paths in one command and a direct URL collides:

error: Requirements contain conflicting URLs for package `retina-custody`:
- ./custody
- git+https://github.com/offworldlabs/retina-custody

Keeping the spec generic lets each consumer supply the source it needs. Verified by reproducing Tower-Finder's local-path install against this branch.

One non-formatting commit, and why

ruff format reflowed this conditional so the call moved onto its own line and the trailing # noqa: S323 landed on the next line, where it suppresses nothing. ruff check passed before the sweep and failed after it.

Rewritten as a plain if statement, matching the four other _create_unverified_context() call sites in the same file — all of which survived reformatting untouched, because that shape is format-stable. Semantics are unchanged.

Committed separately from the sweep so it is visible rather than buried in 14 files of formatting.

Also

ruff and ruff-format move into pre-commit, so pre-commit run --all-files reproduces CI's lint exactly. vulture==2.14 is on the install line because the dead-code hook is language: script and needs it on PATH. The pyproject.toml ruff comment, which claimed a canonical copy in ops that never existed, is now true and enforced by the ruff-config hook.

🤖 Generated with Claude Code

https://claude.ai/code/session_013ZcazeseXVpu8XrYA2tE1V

Mechanical, produced by ruff 0.16.2 — the version pinned in the ruff-pre-commit
hook adopted in the next commit. Separated so the CI change beside it stays
readable.
ruff format reflowed this conditional so the call moved onto its own line
and the trailing `# noqa: S323` landed on the next one, where it suppresses
nothing — ruff check passed before the sweep and failed after it.

Rewritten as a plain if-statement, matching the four other
_create_unverified_context() call sites in this file, which all survived
reformatting because that shape is format-stable.
Aligns with claude-shared's ci-python.yml: uv, pre-commit as the only lint
step, and pytest — 81 tests that have never run in CI.

CI installs retina-custody from its v0.1.0 tag first. The dependency stays
generic in pyproject.toml deliberately: Tower-Finder installs these libraries
from local submodule paths, and a direct URL there collides with them.
@jonnyspicer
jonnyspicer merged commit 8768fdc into main Aug 12, 2026
2 checks passed
@jonnyspicer
jonnyspicer deleted the ci/adopt-scaffolded-workflow branch August 12, 2026 03:58
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