Repository navigation
Badges, an enforced coverage floor, and two exports that were not API - #23
Merged
Merged
Conversation
Presentation, in the three places a visitor actually looks. **Badges.** CI was alone; now the licence and the four versions that decide whether somebody cares about the repository at all sit beside it, each linked to the file that states the version rather than to a vendor's home page. Six is a row, not a wall. No test-count badge and no coverage badge on purpose: both are numbers that rot, and this repository has already had two rounds of stale counts corrected. **The coverage floor is enforced instead.** CI ran `--cov` and printed the result, which nothing could fail on. It now runs `--cov-fail-under=90`, so the green CI badge means the floor held rather than merely that the suite passed. Actual coverage is 96.46%, leaving headroom for a change to be mid-flight; the lowest modules are database.py at 76% and health.py at 79%, both failure paths. Checked that the gate bites, not just that it passes: pytest exits 1 at a 99% floor and 0 at 90. **The opening says what the project refuses to do.** "No external services" was abstract; the absent map tile server is concrete, and it is the line that separates this from every other training log. Code: `IMPLAUSIBLE_SPEED_MS` and `GRID_POINTS` were exported from utils/track.js and imported by nobody. Both are used only inside their own module, so the export was speculative API surface. Now plain constants. Nothing else was found to delete. No orphan modules, no unused CSS, no dead backend definitions, no unreferenced images, every declared dependency imported, and the four empty __init__.py files are package markers rather than litter. A CHANGELOG was considered and left out: with no tags and no releases it would restate the git log and the feature list, and the question it would answer — whether a pull needs a backfill — the Updating section already answers. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019mNxXmXqwMZf6MG8PoWbq4
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.
Presentation
Badges. CI was alone up there. The licence and the four versions that decide whether somebody cares about the repository at all now sit beside it — each linked to the file that states the version rather than to a vendor's home page, so a reader can check the claim in one click. Six is a row, not a wall.
Deliberately no test-count badge and no coverage badge: both are numbers that rot, and this repository has already had two rounds of stale counts corrected. Which leads to the more useful change.
The coverage floor is enforced instead of advertised. CI already ran
--cov— and printed it, so nothing could fail on it. It now runs--cov-fail-under=90, which means the green CI badge says the floor held, not merely that the suite passed. Actual coverage is 96.46%, so 90 leaves headroom for a change to be mid-flight; the lowest modules aredatabase.pyat 76% andhealth.pyat 79%, both failure paths.I checked that the gate bites, rather than only that it passes:
pytestexits1at a 99% floor and0at 90. A guard I hadn't seen fail is a guard I hadn't tested.The opening now says what the project refuses to do. "No external services" is abstract; the absent map tile server is concrete, and it is the line that actually separates this from every other training log — drawing your routes over a borrowed basemap means telling a stranger where you exercise.
Code
IMPLAUSIBLE_SPEED_MSandGRID_POINTSwere exported fromutils/track.jsand imported by nobody. Both are used only inside their own module, so theexportwas speculative API surface. Now plain constants.Nothing else was found to delete
I looked, and I would rather report an empty result than manufacture a diff:
src/is reached.panel26 uses,.muted59,.table-scroll3__init__.pyfiles are package markers, not litterOne thing did go: a stray
node_modules/at the repo root holding nothing but a.vitecache — my own leftover from an earlier session. It was gitignored, so this PR doesn't show it.A CHANGELOG was considered and left out. With no tags and no releases it would restate the git log and the feature list, and the question it would actually answer — does this pull need a backfill? — the Updating section already answers.
Verified
343 backend tests with the gate satisfied, 232 frontend,
ruff check,ruff format --check,eslintand the production build all clean. The badge markdown was rendered to HTML to confirm six images, each wrapped in a link, each with alt text, on one paragraph so GitHub lays them out as a row.One thing I could not verify: the egress proxy here returns 403 for
img.shields.io, so I could not fetch the badge images to confirm they render. The URLs follow shields' documented static form and a missing logo slug degrades to a badge without a logo rather than a broken image — but worth a glance at the rendered README rather than my word.Generated by Claude Code