Make the lint gates real - #8
Merged
Merged
Conversation
Three lint gates existed on paper and enforced nothing: - `ruff format --check` and `ruff check` both carried continue-on-error, so the lint job reported green over 22 errors and 13 unformatted files. - The TypeScript `lint` script had no ESLint config at all, so it exited with "No files matching the pattern src/" — it had never linted a single file, and it was not wired into CI either way. Fixed the underlying violations rather than lowering the bar: - ruff check --fix (22 errors, all auto-fixable: unused imports and similar) and ruff format across 13 files. Python tests still pass: 59 passed, 17 skipped (integration, no local database). - Added eslint.config.js (flat config, ESLint 9 + typescript-eslint 8, replacing the unused @typescript-eslint 7 packages). It lints 13 files with zero problems. Then removed continue-on-error from both ruff steps and added `npm run lint` to the TypeScript job, so all three gates now fail the build. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LVnEdm6smNC5ZJzghc7WRY
Removing continue-on-error surfaced that the lint job never ran at all:
error: Failed to spawn: `ruff`
Caused by: No such file or directory (os error 2)
`uv run ruff` was called without ruff being declared anywhere, so `uv sync
--dev` never installed it. It worked locally only because uv could resolve a
ruff from outside the project.
Added it to the dev dependency group, pinned to <0.6: a newer ruff can add
rules and turn CI red on an unrelated commit. Verified by re-running both
checks against the project's own environment (ruff 0.5.7): 15 files already
formatted, all checks passed.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LVnEdm6smNC5ZJzghc7WRY
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.
Three lint gates existed on paper and enforced nothing. This makes them fail the build, after fixing what they had been hiding.
What was broken
ruff format --checkcontinue-on-error: true— 13 files unformattedruff checkcontinue-on-error: true— 22 errorsnpm run lint(TypeScript)No files matching the pattern "src/"— it had never linted a single file. Not wired into CI either way.The lint job reported green throughout.
What this does
Fixes the violations rather than lowering the bar:
ruff check --fix(22 errors, all auto-fixable — unused imports and similar) andruff formatacross 13 files. Verified the Python suite still passes: 59 passed, 17 skipped (the skips are the integration tests, which need a database).typescript/eslint.config.js— flat config on ESLint 9 + typescript-eslint 8, replacing the@typescript-eslint7 packages that were installed but unusable without a config. Confirmed it processes 13 files with 0 problems, rather than trusting an empty output.Then removes
continue-on-errorfrom both ruff steps and addsnpm run lintto the TypeScript job.Note on the diff size
Most of it is
ruff formattouching 13 files. It is mechanical: no logic changed, and the test suite is the check on that.Follows #6 and #7. With this, every step in CI actually gates.
🤖 Generated with Claude Code
https://claude.ai/code/session_01LVnEdm6smNC5ZJzghc7WRY