compiler-explorer / compiler-explorer/ce-mcp
CI has been red on main since Sep 2025: three stacked causes (all diagnosed, fixes verified)
- Dominant language
- Python
- Stars
- 7
- Forks
- 4
- PR merge metrics
- No merged PRs in 30d
Description
Context: this repo is largely deprecated now Compiler Explorer has a built-in MCP, so this issue documents the diagnosis (all findings locally verified, fixes tested) rather than demanding urgent work — for whoever next touches the repo.
## 1. `test` job: aioresponses is incompatible with aiohttp ≥ 3.14, and CI ignores the lock file
The `TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'` failures come from **aioresponses** (`core.py:197`), not the tests themselves. aiohttp **3.14.0 (2026-06-01)** made `stream_writer` required; even the newest aioresponses 0.7.9 is broken with it despite declaring `aiohttp<4.0`.
The repo *has* a `uv.lock` (aiohttp 3.12.14) — but CI never uses it: both jobs do `uv venv` + `uv pip install -e ".[dev]"` (test job via `setup.sh`), resolving fresh from PyPI each run against the loose `aiohttp>=3.9.0` in pyproject. So main broke on 2026-06-01 with **zero commits** (none since 2026-03-21). The lock is also stale (pyproject later gained `packaging>=23.0`), so `uv sync --locked` currently refuses.
Verified: CI-style install (aiohttp 3.14.1) reproduces the 9 failures; pinning aiohttp to 3.13.5 → **107 passed**.
**Fix:** constrain `"aiohttp>=3.9.0,<3.14"` in pyproject until aioresponses catches up, rerun `uv lock`, and switch CI to `uv sync --locked --all-extras` so PyPI releases can't break main silently again.
## 2. `lint-and-format` job: one mis-sorted import
Commit `2633bf6` ("cmake support", 2026-03-21) inserted `generate_cmake_share_url,` after `compare_compilers,` in `ce_mcp/server.py`'s `.tools` import block instead of its alphabetical slot after `find_compilers,`. Both locked isort 6.0.1 and current 8.0.1 flag it. **Fix:** `isort ce_mcp/ tests/` — a one-line move (verified passing).
## 3. The original Sep–Nov 2025 reds: live-network integration tests without `continue-on-error`
Last green 2025-09-25 01:10; first red 18 minutes later on a commit touching only unrelated scripts. That era's dependency versions pass today's unit tests locally, so those reds were almost certainly the **"Run all tests" step**, which re-runs the integration tests against live godbolt.org *without* the `continue-on-error` that the dedicated integration step has. **Fix:** drop that step or scope it to `-m "not integration"`.
Minor: the CI cache key hashes only `pyproject.toml` — hash `uv.lock` once CI actually uses it.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with pyproject.toml, uv.lock, ce_mcp/server.py, and the CI job setup referenced in the issue. Reproduce the CI-style install and run the test and lint commands, then verify the dependency constraint, refreshed lockfile, sorted imports, integration-test handling, and cache behavior leave all CI jobs passing.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- github-actions, python
- Domain
- ci-cd, testing
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 52/100