Adopt the scaffolded CI shape: pre-commit for lint, and run the 67 tests - #23
Merged
Merged
Conversation
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.
Aligns with claude-shared's ci-python.yml: uv, pre-commit as the only lint step, and pytest — which this repo has never run in CI despite having a suite. ruff and ruff-format move into pre-commit, so `pre-commit run --all-files` reproduces CI exactly. The ruff-config hook makes the pyproject comment true: the shared keys are now checked against ops, not merely claimed to live there.
jehanazad
pushed a commit
that referenced
this pull request
Sep 6, 2026
main (#23) added the CI/pre-commit scaffolding and, in the same pass, ran ruff format + ruff check --fix over every source and test file. That touched the same solver files this branch rewrites, so the two lineages conflicted almost everywhere they overlap. The conflicts are only apparently deep. Reformatting 74faad1 with the pinned ruff (0.16.2) reproduces main's tree byte-for-byte, so main carries no behaviour of its own to preserve — the resolution rule is simply "branch content, main's formatting": - __init__.py, initial_guess_single.py, lm_solver_track.py, multinode_solver.py, tests/test_adsb_features.py, tests/test_enhanced_output.py — took the branch side, then reformatted. - initial_guess_2d.py, lm_solver_track_2d.py — stay deleted (Stage 4 hygiene). Dropped the two whitelist entries main added for names in lm_solver_track_2d.py. Reformatting b87b470 and diffing against this tree gives no difference under retina_geolocator/, tests/ or scripts/, which is the check that matters: the solver the server consumes is untouched, down to the byte. The dead-code gate then flagged C_M_S in the new constants.py. It is unused in this repo but retina-server's test_wgs84_equivalence.py imports it to assert the three speed-of-light constants agree, so it goes in the whitelist as a contract rather than being deleted. 111 tests pass (main had 67; none were lost — main added no tests of its own, and its 2D coverage was already repaired on the branch). pre-commit clean. Co-Authored-By: Claude Opus <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of 86cb43xya. Same change as the merged pilot, retina-custody#4.
The headline: this repo's tests have never run in CI
lint.ymlran ruff and the dead-code gate, with nopyteststep. The suite exists andpyproject.tomldeclares pytest in itsdevextra — the tests have simply never been executed by CI. They all pass. Across the fleet that is 344 tests in four repos that have been providing no signal at all.What changed
Aligns with
claude-shared's scaffoldedci-python.yml:uv,pre-commitas the single lint step, thenpytest.ruff and ruff-format move into pre-commit, so
pre-commit run --all-fileson a laptop now reproduces CI exactly, which nothing could do before.Two deliberate deviations from the scaffold: dependencies come from
-e '.[dev]'rather thanrequirements*.txt(the scaffold's line assumes files this repo does not have), andpre-commitstays pinned rather than using bareuvx, consistent with the pinning note this workflow already carried.vulture==2.14is on the install line because thedead-codehook islanguage: script— pre-commit builds no environment for it, so vulture must already be onPATH. The pilot found this the hard way when the gate correctly failed closed with exit 127.The ruff comment is now true
pyproject.tomlclaimed "see offworldlabs/ops for the canonical copy".opshad never held a ruff config — the same false claim 86cb417ty fixed for the dead-code script.opsnow shipsruff-shared.tomland aruff-confighook that checks this repo against it. Sharing by reference is impossible (ruff'sextendtakes only a local path), but pre-commit clones the hook repo locally, so the canonical file is a local path at run time.No ruff values changed here — only the comment. The check compares semantically (sets, not text), is permissive about local additions, and ignores
target-version, which legitimately tracks each package'srequires-python.Verification
🤖 Generated with Claude Code
https://claude.ai/code/session_013ZcazeseXVpu8XrYA2tE1V