Skip to content

[FIX] Align OpenAPI spec with API validation - #1242

Open
kaihere14 wants to merge 479 commits into
CCExtractor:GSoC-22-devfrom
kaihere14:fix/run-status-enums
Open

kaihere14 wants to merge 479 commits into
CCExtractor:GSoC-22-devfrom
kaihere14:fix/run-status-enums

Conversation

@kaihere14

@kaihere14 kaihere14 commented Oct 23, 2026 •

Copy link
Copy Markdown

Problem

Several parts of openapi-ci-api.yaml documented request values that the API rejects with a 400, so any client following the spec, including the spec's own examples, got errors. It started with GET /runs?status=, and a full pass over all 79 operations found the same mismatch elsewhere.

Filters the spec advertised but the API rejected

Endpoint Documented value API behaviour
GET /runs?status= pass, fail, incomplete 400. Only queued, running and canceled can be filtered on.
GET /runs/{run_id}/progress?status= queued 400. TestStatus has no queued value.
GET /runs/{run_id}/samples?status= skipped, running 400. derive_sample_status never produces either.
GET /runs/{run_id}/samples/{sample_id}/logs?cursor= any cursor 400 (Cannot mix cursor and offset pagination.). The route used offset pagination.

Smaller mismatches

  • validate_path_id rejects IDs above 2147483647, but no path ID in the spec had a maximum.
  • Several body fields reject an empty string (minLength: 1 in the schemas) without the spec saying so. The password fields enforce the configured 10–500 length range, which was also undocumented.
  • An unknown ccx_version returns 400, which was not documented.
  • GET /runs/{run_id}/artifacts?type= left out actual_output, although the API returns it and filters on it.

Responses that violated the spec

  • Run.status and RunSummary.status did not list error, although the API returns it (_check_completed_run_status).
  • POST /runs/{run_id}/restart returns action: restart, but RunActionResult.action only allowed cancel.
  • GET /auth/me returns 7 scopes, but scopes had maxItems: 6.

Why mostly the spec, not the code

pass, fail, error and incomplete are not stored in the database. They are computed per request from every sample's TestResult rows once a run completes, so they cannot be expressed as a SQL filter without deriving status for every run before pagination. Per-sample statuses work the same way. In each case the code already deliberately limits filters to values it can actually match, so the spec was the side that was wrong.

The code changed in three places:

  • The per-sample logs route now uses cursor pagination, as the spec documents and as /runs/{run_id}/logs already does.
  • The /progress 400 message is now built from TestStatus. It used to list queued and error as allowed, and both were rejected.
  • validate_path_id now covers the int-converted path IDs that skipped it, so oversized values return 400 instead of reaching the database.

Changes

openapi-ci-api.yaml

  • RunStatus enum narrowed to [queued, running, canceled], with example: running and a description explaining why outcome statuses cannot be filtered on.
  • Run.status and RunSummary.status: added error.
  • /runs/{run_id}/progress status: dropped queued and added a description.
  • /runs/{run_id}/samples status: narrowed to [pass, fail, missing_output, not_started], matching the /history filter.
  • maximum: 2147483647 added to all 17 integer path IDs and to the sample_id filter on /regression-tests.
  • minLength: 1 added to PATCH /auth/me name and current_password, PATCH /samples/{sample_id} tag items and version, POST /tags name, finalize version, and the password-reset mac. Both password fields now document the 10–500 length range.
  • ccx_version: documented the 400 for unknown versions.
  • Artifacts type filter: added actual_output.
  • RunActionResult.action: added restart.
  • CurrentUser.scopes: maxItems raised from 6 to 7.

Routes

  • mod_api/routes/errors_logs.py: get_sample_logs uses validate_cursor_pagination.
  • mod_api/routes/runs.py: the /progress status error lists the real TestStatus values.
  • mod_api/routes/{regression_tests,samples,auth,system}.py: validate_path_id added for output_id, variant_id, extra_id, token_id and the blocked-users user_id. An ID of 0 or one above 2147483647 now returns 400, matching every other ID route.

Tests

  • New tests/api/test_openapi_contract.py. It reads the spec, calls every GET operation with each documented enum value, boolean and pagination bound against the data BaseTestCase seeds, and fails on any 400 or 5xx. It runs with the existing nose2 suite, so it needs no new dependency.

Testing

  • The new test passes on this branch. Against this PR's first commit it fails on the /progress, /samples and sample-logs cases. Against master it also fails on /runs?status=pass|fail|incomplete.
  • The full nose2 suite passes (807 tests).
  • dodgy, isort, pydocstyle, mypy and pycodestyle pass with the CI configs.
  • The spec validates with openapi-spec-validator.

Not changed

  • Response enums that list more values than the API returns (ProgressEvent.status, RunSample.status, SampleHistoryEntry.status). Clients cannot break on these, so I left them alone.
  • /runs/{run_id}/logs defaults to 100 lines while the shared Limit parameter documents a default of 50. Nothing is rejected, so this is left for a separate change.

cfsmp3 and others added 30 commits December 27, 2025 21:51
Bumps [markdown2](https://github.com/trentm/python-markdown2) from 2.5.1 to 2.5.4.
- [Changelog](https://github.com/trentm/python-markdown2/blob/master/CHANGES.md)
- [Commits](trentm/python-markdown2@2.5.1...2.5.4)

---
updated-dependencies:
- dependency-name: markdown2
  dependency-version: 2.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
When multiple GitHub Actions workflows complete for the same commit,
the webhook handler calls queue_test() for all platforms. This caused
completed tests to have their GitHub status overwritten from SUCCESS
back to "Tests queued".

Example timeline:
1. Linux build completes → queue_test(linux) → "Tests queued"
2. Linux test completes → "All tests passed" (SUCCESS)
3. Windows build completes → queue_test(linux) called again
   → "Tests queued" overwrites the SUCCESS status!

Fix: Check if test already has progress before posting "Tests queued".
If the test has started or completed, skip the GitHub status update.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Bumps [gitpython](https://github.com/gitpython-developers/GitPython) from 3.1.41 to 3.1.45.
- [Release notes](https://github.com/gitpython-developers/GitPython/releases)
- [Changelog](https://github.com/gitpython-developers/GitPython/blob/main/CHANGES)
- [Commits](gitpython-developers/GitPython@3.1.41...3.1.45)

---
updated-dependencies:
- dependency-name: gitpython
  dependency-version: 3.1.45
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [gitdb](https://github.com/gitpython-developers/gitdb) from 4.0.11 to 4.0.12.
- [Release notes](https://github.com/gitpython-developers/gitdb/releases)
- [Commits](gitpython-developers/gitdb@4.0.11...4.0.12)

---
updated-dependencies:
- dependency-name: gitdb
  dependency-version: 4.0.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [coverage](https://github.com/coveragepy/coveragepy) from 7.3.0 to 7.13.0.
- [Release notes](https://github.com/coveragepy/coveragepy/releases)
- [Changelog](https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst)
- [Commits](coveragepy/coveragepy@7.3.0...7.13.0)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.13.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [click](https://github.com/pallets/click) from 8.1.7 to 8.3.1.
- [Release notes](https://github.com/pallets/click/releases)
- [Changelog](https://github.com/pallets/click/blob/main/CHANGES.rst)
- [Commits](pallets/click@8.1.7...8.3.1)

---
updated-dependencies:
- dependency-name: click
  dependency-version: 8.3.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [google-cloud-storage](https://github.com/googleapis/python-storage) from 2.18.2 to 3.7.0.
- [Release notes](https://github.com/googleapis/python-storage/releases)
- [Changelog](https://github.com/googleapis/python-storage/blob/main/CHANGELOG.md)
- [Commits](googleapis/python-storage@v2.18.2...v3.7.0)

---
updated-dependencies:
- dependency-name: google-cloud-storage
  dependency-version: 3.7.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [flask-migrate](https://github.com/miguelgrinberg/flask-migrate) from 4.0.7 to 4.1.0.
- [Release notes](https://github.com/miguelgrinberg/flask-migrate/releases)
- [Changelog](https://github.com/miguelgrinberg/Flask-Migrate/blob/main/CHANGES.md)
- [Commits](miguelgrinberg/Flask-Migrate@v4.0.7...v4.1.0)

---
updated-dependencies:
- dependency-name: flask-migrate
  dependency-version: 4.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [isort](https://github.com/PyCQA/isort) from 5.12.0 to 7.0.0.
- [Release notes](https://github.com/PyCQA/isort/releases)
- [Changelog](https://github.com/PyCQA/isort/blob/main/CHANGELOG.md)
- [Commits](PyCQA/isort@5.12.0...7.0.0)

---
updated-dependencies:
- dependency-name: isort
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [pymysql](https://github.com/PyMySQL/PyMySQL) from 1.1.1 to 1.1.2.
- [Release notes](https://github.com/PyMySQL/PyMySQL/releases)
- [Changelog](https://github.com/PyMySQL/PyMySQL/blob/main/CHANGELOG.md)
- [Commits](PyMySQL/PyMySQL@v1.1.1...v1.1.2)

---
updated-dependencies:
- dependency-name: pymysql
  dependency-version: 1.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
…issing

When queue_test() is called but no matching Test record exists in the
database, platform_test.id would throw AttributeError: 'NoneType' object
has no attribute 'id'.

This can happen when:
- The pull_request webhook was not received or failed
- There's a mismatch in query parameters (commit, platform, test_type, pr_nr)
- A race condition between webhook processing

The fix adds a null check with a descriptive error log before attempting
to access platform_test.id. This prevents the 500 error and provides
debugging information.

Root cause identified from webhook delivery showing 500 error at 18:26:14
on 2025-12-28 when Windows build completed for PR #1920.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix 'CommitStatus' object not subscriptable error in start_ci webhook
  handler by using attribute access (status.context) instead of dict
  syntax (status["context"]) for PyGithub CommitStatus objects

- Fix FileNotFoundError in progress_reporter by ensuring TempFiles and
  TestResults directories exist before saving/moving uploaded files

- Fix BuildError for login redirects by storing full URL path instead
  of just endpoint name, preventing crashes when endpoints require
  URL parameters (e.g., sample_id, test_id)

- Add open redirect protection to login handler

- Update tests to match new login redirect behavior

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…path

Address maintainer feedback:
- Revert to using endpoint name in login_required decorator
- Add try/except around url_for() to catch BuildError
- Redirect to home page when endpoint requires parameters we don't have
- Revert tests to original assertions

This is a safer approach than storing the full URL path, which could
introduce security risks.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update test assertions to account for additional os.path.join and
os.makedirs calls added to ensure TempFiles and TestResults directories
exist before file operations.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The progress_reporter endpoint was timing out (502 errors) when tests
completed because it synchronously waited for GCP VM deletion, which
can take 60+ seconds. This exceeded nginx's default 60s proxy timeout.

The fix makes VM deletion fire-and-forget:
- Initiate deletion but don't block waiting for completion
- The VM will be deleted eventually - we don't need confirmation
- All critical work (test results, GitHub status) completes first
- Added logging to track initiated deletions

Investigation on production server showed:
- 11% of webhook requests returned 502 errors (11 out of 100 today)
- nginx error logs showed "upstream timed out" for /progress-reporter/
- Pattern: Test completion logs showed ~60-70s between "Test completed"
  and "Test <completed>" due to wait_for_operation blocking

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Break long log line into two lines to comply with 120 char limit.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Restructure the deployment workflow into distinct phases:

1. Pre-deployment checks - validate environment, save state
2. Deploy - update code, deps, migrations, reload service
3. Verify - health check with retries
4. Rollback - automatic recovery on failure
5. Report - always log final status

Key improvements:
- Health verification before considering deployment successful
- Automatic rollback if health check fails
- Backwards compatible - falls back to legacy flow if scripts missing
- Deployment lock cleanup in final step
- Clear logging at each phase

The workflow now uses the deployment scripts from install/deploy/
when available, but includes inline fallback logic for backwards
compatibility during the transition period.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Pin the ssh-action dependency to v1.2.4 (commit 823bd89e131d8d508129f9443cad5855e9ba96f0)
instead of using @master to address SonarCloud security hotspot.

Using a branch reference like @master is a security risk as the action
could be updated with malicious code at any time.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Bumps [mypy](https://github.com/python/mypy) from 1.5.1 to 1.19.1.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](python/mypy@v1.5.1...v1.19.1)

---
updated-dependencies:
- dependency-name: mypy
  dependency-version: 1.19.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
This PR removes the last two blocking wait_for_operation calls that were
causing gunicorn workers to be blocked for extended periods:

1. delete_expired_instances() - VM deletion is now fire-and-forget
2. start_test() - VM creation is now optimistic (recorded immediately)

These blocking calls were causing 504 timeouts on webhook deliveries
because GitHub has a 10-second webhook timeout. When cron jobs were
running wait_for_operation (which can take up to 30 minutes), all
gunicorn workers could become blocked, causing webhook requests to
queue and exceed the timeout.

Changes:
- delete_expired_instances: Remove blocking wait, log operation initiation
- start_test: Check for immediate errors, then record instance optimistically
- Tests: Remove unused wait_for_operation mocks from affected tests

If VM creation ultimately fails, the test won't report progress and will
be cleaned up by the expired instances cron job.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implements a robust system to ensure GCP VMs are properly deleted:

- Add PendingDeletion model to track deletion operations
- Add delete_instance_with_tracking() to record pending deletions
- Add verify_pending_deletions() to check operation status and retry failures
- Add scan_for_orphaned_vms() as final safety net for missed deletions
- Integrate verification into start_platforms() cron flow
- Update both deletion points to use tracking
- Add database migration for pending_deletion table
- Add 11 tests for new functionality

This prevents orphaned VMs from continuing to incur billing charges
when deletion operations fail silently.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The appleboy/ssh-action no longer supports the `script_stop` parameter.
Replace with `set -e` in scripts that need to stop on first error.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The health check was failing with 301 because nginx redirects
HTTP to HTTPS. Adding -L makes curl follow the redirect and
get the actual health endpoint response.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Bumps [xmltodict](https://github.com/martinblech/xmltodict) from 0.13.0 to 1.0.2.
- [Release notes](https://github.com/martinblech/xmltodict/releases)
- [Changelog](https://github.com/martinblech/xmltodict/blob/master/CHANGELOG.md)
- [Commits](martinblech/xmltodict@v0.13.0...v1.0.2)

---
updated-dependencies:
- dependency-name: xmltodict
  dependency-version: 1.0.2
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [coverage](https://github.com/coveragepy/coveragepy) from 7.13.0 to 7.13.1.
- [Release notes](https://github.com/coveragepy/coveragepy/releases)
- [Changelog](https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst)
- [Commits](coveragepy/coveragepy@7.13.0...7.13.1)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.13.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [lxml](https://github.com/lxml/lxml) from 5.3.0 to 6.0.2.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](lxml/lxml@lxml-5.3.0...lxml-6.0.2)

---
updated-dependencies:
- dependency-name: lxml
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [google-api-python-client](https://github.com/googleapis/google-api-python-client) from 2.154.0 to 2.187.0.
- [Release notes](https://github.com/googleapis/google-api-python-client/releases)
- [Commits](googleapis/google-api-python-client@v2.154.0...v2.187.0)

---
updated-dependencies:
- dependency-name: google-api-python-client
  dependency-version: 2.187.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [gitpython](https://github.com/gitpython-developers/GitPython) from 3.1.45 to 3.1.46.
- [Release notes](https://github.com/gitpython-developers/GitPython/releases)
- [Changelog](https://github.com/gitpython-developers/GitPython/blob/main/CHANGES)
- [Commits](gitpython-developers/GitPython@3.1.45...3.1.46)

---
updated-dependencies:
- dependency-name: gitpython
  dependency-version: 3.1.46
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
pulk17 and others added 24 commits September 27, 2026 11:18
add_header in a location drops the server-level hsts header, and index.html was never revalidated after a deploy.
Compare the stored TestStatus enum, not progress_step()'s integer index, so a VM cannot overwrite a canceled or completed run.
…1 updates

Bumps the minor-and-patch group with 21 updates in the /web directory:

| Package | From | To |
| --- | --- | --- |
| [@fontsource-variable/inter](https://github.com/fontsource/font-files/tree/HEAD/fonts/variable/inter) | `5.2.8` | `5.3.0` |
| [@fontsource/jetbrains-mono](https://github.com/fontsource/font-files/tree/HEAD/fonts/google/jetbrains-mono) | `5.2.8` | `5.3.0` |
| [@radix-ui/react-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dialog) | `1.1.18` | `1.1.23` |
| [@radix-ui/react-dropdown-menu](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dropdown-menu) | `2.1.19` | `2.1.24` |
| [@radix-ui/react-popover](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/popover) | `1.1.18` | `1.1.23` |
| [@radix-ui/react-select](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/select) | `2.3.2` | `2.3.7` |
| [@radix-ui/react-switch](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/switch) | `1.3.2` | `1.3.7` |
| [@radix-ui/react-tooltip](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/tooltip) | `1.2.11` | `1.2.16` |
| [@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite) | `4.3.2` | `4.3.3` |
| [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) | `5.101.2` | `5.104.0` |
| [@tanstack/react-router](https://github.com/TanStack/router/tree/HEAD/packages/react-router) | `1.170.17` | `1.170.39` |
| [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) | `1.23.0` | `1.48.0` |
| [react](https://github.com/react/react/tree/HEAD/packages/react) | `19.2.7` | `19.3.0` |
| [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) | `19.2.17` | `19.3.0` |
| [react-dom](https://github.com/react/react/tree/HEAD/packages/react-dom) | `19.2.7` | `19.3.0` |
| [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) | `19.2.3` | `19.3.0` |
| [tailwind-merge](https://github.com/dcastil/tailwind-merge/tree/HEAD/packages/tailwind-merge) | `3.6.0` | `3.7.0` |
| [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) | `4.3.2` | `4.3.3` |
| [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) | `19.2.17` | `19.3.0` |
| [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) | `19.2.3` | `19.3.0` |
| [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) | `6.0.3` | `6.1.1` |
| [oxlint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint) | `1.72.0` | `1.85.0` |
| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) | `8.1.3` | `8.3.1` |



Updates `@fontsource-variable/inter` from 5.2.8 to 5.3.0
- [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/variable/inter)

Updates `@fontsource/jetbrains-mono` from 5.2.8 to 5.3.0
- [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/google/jetbrains-mono)

Updates `@radix-ui/react-dialog` from 1.1.18 to 1.1.23
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dialog/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dialog)

Updates `@radix-ui/react-dropdown-menu` from 2.1.19 to 2.1.24
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dropdown-menu/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dropdown-menu)

Updates `@radix-ui/react-popover` from 1.1.18 to 1.1.23
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/popover/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/popover)

Updates `@radix-ui/react-select` from 2.3.2 to 2.3.7
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/select/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/select)

Updates `@radix-ui/react-switch` from 1.3.2 to 1.3.7
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/switch/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/switch)

Updates `@radix-ui/react-tooltip` from 1.2.11 to 1.2.16
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/tooltip/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/tooltip)

Updates `@tailwindcss/vite` from 4.3.2 to 4.3.3
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.3/packages/@tailwindcss-vite)

Updates `@tanstack/react-query` from 5.101.2 to 5.104.0
- [Release notes](https://github.com/TanStack/query/releases)
- [Changelog](https://github.com/TanStack/query/blob/main/packages/react-query/CHANGELOG.md)
- [Commits](https://github.com/TanStack/query/commits/@tanstack/react-query@5.104.0/packages/react-query)

Updates `@tanstack/react-router` from 1.170.17 to 1.170.39
- [Release notes](https://github.com/TanStack/router/releases)
- [Changelog](https://github.com/TanStack/router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/TanStack/router/commits/@tanstack/react-router@1.170.39/packages/react-router)

Updates `lucide-react` from 1.23.0 to 1.48.0
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/1.48.0/packages/lucide-react)

Updates `react` from 19.2.7 to 19.3.0
- [Release notes](https://github.com/react/react/releases)
- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/react/react/commits/v19.3.0/packages/react)

Updates `@types/react` from 19.2.17 to 19.3.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

Updates `react-dom` from 19.2.7 to 19.3.0
- [Release notes](https://github.com/react/react/releases)
- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/react/react/commits/v19.3.0/packages/react-dom)

Updates `@types/react-dom` from 19.2.3 to 19.3.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

Updates `tailwind-merge` from 3.6.0 to 3.7.0
- [Release notes](https://github.com/dcastil/tailwind-merge/releases)
- [Commits](https://github.com/dcastil/tailwind-merge/commits/tailwind-merge@3.7.0/packages/tailwind-merge)

Updates `tailwindcss` from 4.3.2 to 4.3.3
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.3/packages/tailwindcss)

Updates `@types/react` from 19.2.17 to 19.3.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

Updates `@types/react-dom` from 19.2.3 to 19.3.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

Updates `@vitejs/plugin-react` from 6.0.3 to 6.1.1
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.1.1/packages/plugin-react)

Updates `oxlint` from 1.72.0 to 1.85.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxlint/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxlint_v1.85.0/npm/oxlint)

Updates `vite` from 8.1.3 to 8.3.1
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.3.1/packages/vite)

---
updated-dependencies:
- dependency-name: "@fontsource-variable/inter"
  dependency-version: 5.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: "@fontsource/jetbrains-mono"
  dependency-version: 5.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: "@radix-ui/react-dialog"
  dependency-version: 1.1.23
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: "@radix-ui/react-dropdown-menu"
  dependency-version: 2.1.24
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: "@radix-ui/react-popover"
  dependency-version: 1.1.23
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: "@radix-ui/react-select"
  dependency-version: 2.3.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: "@radix-ui/react-switch"
  dependency-version: 1.3.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: "@radix-ui/react-tooltip"
  dependency-version: 1.2.16
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: "@tailwindcss/vite"
  dependency-version: 4.3.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.103.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: "@tanstack/react-router"
  dependency-version: 1.170.36
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: "@types/react"
  dependency-version: 19.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: "@types/react"
  dependency-version: 19.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: "@types/react-dom"
  dependency-version: 19.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: "@types/react-dom"
  dependency-version: 19.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 6.1.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: lucide-react
  dependency-version: 1.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: oxlint
  dependency-version: 1.83.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: react
  dependency-version: 19.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: react-dom
  dependency-version: 19.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: tailwind-merge
  dependency-version: 3.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: tailwindcss
  dependency-version: 4.3.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: vite
  dependency-version: 8.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [pymysql](https://github.com/PyMySQL/PyMySQL) from 1.2.0 to 1.2.3.
- [Release notes](https://github.com/PyMySQL/PyMySQL/releases)
- [Changelog](https://github.com/PyMySQL/PyMySQL/blob/main/CHANGELOG.md)
- [Commits](PyMySQL/PyMySQL@v1.2.0...v1.2.3)

---
updated-dependencies:
- dependency-name: pymysql
  dependency-version: 1.2.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [source-map-js](https://github.com/7rulnik/source-map-js) from 1.2.1 to 1.2.2.
- [Release notes](https://github.com/7rulnik/source-map-js/releases)
- [Changelog](https://github.com/7rulnik/source-map-js/blob/main/CHANGELOG.md)
- [Commits](7rulnik/source-map-js@v1.2.1...v1.2.2)

---
updated-dependencies:
- dependency-name: source-map-js
  dependency-version: 1.2.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 24.13.2 to 26.6.5.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 26.6.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [motion](https://github.com/motiondivision/motion) from 12.42.2 to 14.2.0.
- [Changelog](https://github.com/motiondivision/motion/blob/main/CHANGELOG.md)
- [Commits](motiondivision/motion@v12.42.2...v14.2.0)

---
updated-dependencies:
- dependency-name: motion
  dependency-version: 13.4.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [typescript](https://github.com/microsoft/TypeScript) from 6.0.3 to 7.0.2.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Commits](microsoft/TypeScript@v6.0.3...v7.0.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-version: 7.0.2
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [pytz](https://github.com/stub42/pytz) from 2026.3.post1 to 2026.5.
- [Release notes](https://github.com/stub42/pytz/releases)
- [Commits](stub42/pytz@release_2026.3.post1...release_2026.5)

---
updated-dependencies:
- dependency-name: pytz
  dependency-version: '2026.4'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [pycodestyle](https://github.com/PyCQA/pycodestyle) from 2.14.0 to 2.15.0.
- [Release notes](https://github.com/PyCQA/pycodestyle/releases)
- [Changelog](https://github.com/PyCQA/pycodestyle/blob/main/CHANGES.txt)
- [Commits](PyCQA/pycodestyle@2.14.0...2.15.0)

---
updated-dependencies:
- dependency-name: pycodestyle
  dependency-version: 2.15.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [coverage](https://github.com/coveragepy/coveragepy) from 7.16.1 to 7.16.2.
- [Release notes](https://github.com/coveragepy/coveragepy/releases)
- [Changelog](https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst)
- [Commits](coveragepy/coveragepy@7.16.1...7.16.2)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.16.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [werkzeug](https://github.com/pallets/werkzeug) from 3.1.8 to 3.1.9.
- [Release notes](https://github.com/pallets/werkzeug/releases)
- [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst)
- [Commits](pallets/werkzeug@3.1.8...3.1.9)

---
updated-dependencies:
- dependency-name: werkzeug
  dependency-version: 3.1.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [isort](https://github.com/PyCQA/isort) from 9.0.1 to 9.0.2.
- [Release notes](https://github.com/PyCQA/isort/releases)
- [Changelog](https://github.com/PyCQA/isort/blob/main/CHANGELOG.md)
- [Commits](PyCQA/isort@9.0.1...9.0.2)

---
updated-dependencies:
- dependency-name: isort
  dependency-version: 9.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Restart only cleared progress and results, so cron still treated the test as running and never started a new VM.

Fixes CCExtractor#1224
Sonar python:S6663 failed the PR quality gate because MIMEAccept was indexed with a string. Use accept_json instead.
Bumps [mypy](https://github.com/python/mypy) from 2.3.1 to 2.4.0.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](python/mypy@v2.3.1...v2.4.0)

---
updated-dependencies:
- dependency-name: mypy
  dependency-version: 2.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [gitpython](https://github.com/gitpython-developers/GitPython) from 3.1.62 to 3.2.1.
- [Release notes](https://github.com/gitpython-developers/GitPython/releases)
- [Changelog](https://github.com/gitpython-developers/GitPython/blob/main/doc/source/changes.rst)
- [Commits](gitpython-developers/GitPython@3.1.62...3.2.1)

---
updated-dependencies:
- dependency-name: gitpython
  dependency-version: 3.2.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [google-api-python-client](https://github.com/googleapis/google-api-python-client) from 2.200.0 to 2.201.0.
- [Release notes](https://github.com/googleapis/google-api-python-client/releases)
- [Commits](googleapis/google-api-python-client@v2.200.0...v2.201.0)

---
updated-dependencies:
- dependency-name: google-api-python-client
  dependency-version: 2.201.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [markupsafe](https://github.com/pallets/markupsafe) from 3.0.3 to 3.0.4.
- [Release notes](https://github.com/pallets/markupsafe/releases)
- [Changelog](https://github.com/pallets/markupsafe/blob/main/CHANGES.rst)
- [Commits](pallets/markupsafe@3.0.3...3.0.4)

---
updated-dependencies:
- dependency-name: markupsafe
  dependency-version: 3.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [google-cloud-storage](https://github.com/googleapis/google-cloud-python) from 3.14.1 to 3.17.1.
- [Release notes](https://github.com/googleapis/google-cloud-python/releases)
- [Changelog](https://github.com/googleapis/google-cloud-python/blob/main/packages/google-cloud-documentai/CHANGELOG.md)
- [Commits](googleapis/google-cloud-python@google-cloud-storage-v3.14.1...google-cloud-storage-v3.17.1)

---
updated-dependencies:
- dependency-name: google-cloud-storage
  dependency-version: 3.17.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 8.3.1 to 8.3.4.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.3.4/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 8.3.4
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
…4 updates

Bumps the minor-and-patch group with 14 updates in the /web directory:

| Package | From | To |
| --- | --- | --- |
| [@radix-ui/react-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dialog) | `1.1.23` | `1.3.1` |
| [@radix-ui/react-dropdown-menu](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dropdown-menu) | `2.1.24` | `2.2.1` |
| [@radix-ui/react-popover](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/popover) | `1.1.23` | `1.3.1` |
| [@radix-ui/react-select](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/select) | `2.3.7` | `2.4.1` |
| [@radix-ui/react-switch](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/switch) | `1.3.7` | `1.4.1` |
| [@radix-ui/react-tooltip](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/tooltip) | `1.2.16` | `1.4.1` |
| [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) | `5.104.0` | `5.104.4` |
| [@tanstack/react-router](https://github.com/TanStack/router/tree/HEAD/packages/react-router) | `1.170.39` | `1.170.45` |
| [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) | `1.48.0` | `1.59.0` |
| [motion](https://github.com/motiondivision/motion) | `14.2.0` | `14.3.0` |
| [react](https://github.com/react/react/tree/HEAD/packages/react) | `19.3.0` | `19.3.1` |
| [react-dom](https://github.com/react/react/tree/HEAD/packages/react-dom) | `19.3.0` | `19.3.1` |
| [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) | `6.1.1` | `6.1.2` |
| [oxlint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint) | `1.85.0` | `1.88.0` |



Updates `@radix-ui/react-dialog` from 1.1.23 to 1.3.1
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dialog/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dialog)

Updates `@radix-ui/react-dropdown-menu` from 2.1.24 to 2.2.1
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dropdown-menu/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dropdown-menu)

Updates `@radix-ui/react-popover` from 1.1.23 to 1.3.1
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/popover/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/popover)

Updates `@radix-ui/react-select` from 2.3.7 to 2.4.1
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/select/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/select)

Updates `@radix-ui/react-switch` from 1.3.7 to 1.4.1
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/switch/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/switch)

Updates `@radix-ui/react-tooltip` from 1.2.16 to 1.4.1
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/tooltip/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/tooltip)

Updates `@tanstack/react-query` from 5.104.0 to 5.104.4
- [Release notes](https://github.com/TanStack/query/releases)
- [Changelog](https://github.com/TanStack/query/blob/main/packages/react-query/CHANGELOG.md)
- [Commits](https://github.com/TanStack/query/commits/@tanstack/react-query@5.104.4/packages/react-query)

Updates `@tanstack/react-router` from 1.170.39 to 1.170.45
- [Release notes](https://github.com/TanStack/router/releases)
- [Changelog](https://github.com/TanStack/router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/TanStack/router/commits/@tanstack/react-router@1.170.45/packages/react-router)

Updates `lucide-react` from 1.48.0 to 1.59.0
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/1.59.0/packages/lucide-react)

Updates `motion` from 14.2.0 to 14.3.0
- [Changelog](https://github.com/motiondivision/motion/blob/main/CHANGELOG.md)
- [Commits](motiondivision/motion@v14.2.0...v14.3.0)

Updates `react` from 19.3.0 to 19.3.1
- [Release notes](https://github.com/react/react/releases)
- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/react/react/commits/v19.3.1/packages/react)

Updates `react-dom` from 19.3.0 to 19.3.1
- [Release notes](https://github.com/react/react/releases)
- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/react/react/commits/v19.3.1/packages/react-dom)

Updates `@vitejs/plugin-react` from 6.1.1 to 6.1.2
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.1.2/packages/plugin-react)

Updates `oxlint` from 1.85.0 to 1.88.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxlint/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxlint_v1.88.0/npm/oxlint)

---
updated-dependencies:
- dependency-name: "@radix-ui/react-dialog"
  dependency-version: 1.3.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: "@radix-ui/react-dropdown-menu"
  dependency-version: 2.2.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: "@radix-ui/react-popover"
  dependency-version: 1.3.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: "@radix-ui/react-select"
  dependency-version: 2.4.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: "@radix-ui/react-switch"
  dependency-version: 1.4.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: "@radix-ui/react-tooltip"
  dependency-version: 1.4.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.104.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: "@tanstack/react-router"
  dependency-version: 1.170.45
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: lucide-react
  dependency-version: 1.59.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: motion
  dependency-version: 14.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: react
  dependency-version: 19.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: react-dom
  dependency-version: 19.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 6.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: oxlint
  dependency-version: 1.88.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
GET /runs only filters on statuses that map directly to the latest
TestProgress row (queued, running, canceled). pass, fail, error and
incomplete are not stored in the database: they are computed per
request from every sample's TestResult rows once a run completes, so
they cannot be used as a query filter. The RunStatus parameter
advertised all six values (with example: pass), so spec-conforming
clients got a 400. Narrow the enum and document why.

Run.status and RunSummary.status were missing "error", which the API
already returns when a completed run reported no results or fewer
samples than configured. Add it to both enums.
A full pass over all 79 operations found more places where the API
rejects a request the spec documents as valid:

- GET /runs/{run_id}/progress advertised status=queued, but TestStatus
  has no queued value, so it always returned 400. A queued run has no
  progress events to filter. Drop it from the enum, and build the 400
  message from TestStatus instead of listing queued and error, which
  were both rejected.
- GET /runs/{run_id}/samples advertised status=skipped and running,
  which derive_sample_status never produces and the route rejects.
  Narrow the enum to the four statuses the history filter already uses.
- GET /runs/{run_id}/samples/{sample_id}/logs documents cursor
  pagination, but the route used the offset decorator, which rejects
  any cursor. Switch it to validate_cursor_pagination.

Smaller mismatches in the same direction:

- validate_path_id rejects IDs above 2147483647, but no path ID in the
  spec had a maximum. Add it to all of them, and to the sample_id filter
  on /regression-tests. Apply validate_path_id to the int-converted IDs
  that skipped it (output_id, variant_id, extra_id, token_id, blocked
  user_id), where oversized values reached the database and raised.
- Document the minLength: 1 the schemas enforce on several body fields,
  and the configured 10-500 password bounds.
- Document the 400 for an unknown ccx_version.
- Add actual_output to the artifacts type filter; the API returns and
  filters on it.

Responses that broke the spec: restart returns action=restart, which
RunActionResult did not allow, and /auth/me returns seven scopes against
a maxItems of 6.

Add tests/api/test_openapi_contract.py, which calls every GET operation
with each documented enum, boolean and pagination bound value and fails
on a 400 or 5xx. It fails on all three bugs above against the previous
commit, and on the original /runs status bug against the one before.
@kaihere14 kaihere14 changed the title [FIX] Align run status enums in OpenAPI spec with the API [FIX] Align OpenAPI spec with API validation Oct 23, 2026
@sonarqubecloud

Copy link
Copy Markdown

@kaihere14
kaihere14 changed the base branch from master to GSoC-22-dev October 24, 2026 21:50
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.