Skip to content

Make the lint gates real - #8

Merged
JaviMaligno merged 2 commits into
mainfrom
fix/ci-lint-gates
Jul 29, 2026
Merged

Make the lint gates real#8
JaviMaligno merged 2 commits into
mainfrom
fix/ci-lint-gates

Conversation

@JaviMaligno

Copy link
Copy Markdown
Owner

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

Gate State
ruff format --check continue-on-error: true — 13 files unformatted
ruff check continue-on-error: true — 22 errors
npm run lint (TypeScript) No ESLint config existed. Exited with 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) and ruff format across 13 files. Verified the Python suite still passes: 59 passed, 17 skipped (the skips are the integration tests, which need a database).
  • Adds typescript/eslint.config.js — flat config on ESLint 9 + typescript-eslint 8, replacing the @typescript-eslint 7 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-error from both ruff steps and adds npm run lint to the TypeScript job.

Note on the diff size

Most of it is ruff format touching 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

JaviMaligno and others added 2 commits July 29, 2026 17:33
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
@JaviMaligno
JaviMaligno merged commit 37496c1 into main Jul 29, 2026
7 checks passed
@JaviMaligno
JaviMaligno deleted the fix/ci-lint-gates branch July 29, 2026 16:45
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