--- title: "fix: CI test workflow references missing requirements.txt" type: fix status: active date: 2026-04-24 --- # Fix: CI Test Workflow ## Overview The scheduled CI workflow `.github/workflows/mindmodel-schedule.yml` attempts `pip install -r requirements.txt`, but this file does not exist. The project uses `uv` with `pyproject.toml` and `uv.lock`. This workflow fails silently (`|| true`) and never actually runs tests meaningfully. ## Problem Frame - Python 3.11 is hardcoded in the workflow; the project requires >=3.13 - `requirements.txt` is missing; dependencies are in `pyproject.toml` - No pytest gate on push/PR — regressions are only caught locally - The mindmodel validator runs regardless, masking the test failure ## Requirements Trace - R1. CI must install dependencies correctly using the project's package manager - R2. CI must run pytest on push and PR to main - R3. CI must use Python >=3.13 matching pyproject.toml - R4. CI must fail visibly when tests fail (no `|| true` masking) ## Scope Boundaries **Included:** - Fix existing mindmodel-schedule.yml - Add new pytest workflow for push/PR **Excluded:** - Changing test code or test dependencies - Adding new tests - Changing the mindmodel validator logic ## Key Technical Decisions - **Use `uv` in CI** — matches local development and pyproject.toml. Use `astral-sh/setup-uv` action. - **Separate workflows** — keep mindmodel schedule weekly, add pytest on push/PR - **Fail fast** — remove `|| true` from pytest step ## Implementation Units - [ ] U1. **Fix mindmodel-schedule.yml to use uv** **Goal:** Make the scheduled workflow install deps and run tests correctly. **Requirements:** R1, R3, R4 **Dependencies:** None **Files:** - Modify: `.github/workflows/mindmodel-schedule.yml` **Approach:** - Replace `actions/setup-python@v4` + `pip install` with `astral-sh/setup-uv@v5` - Use `uv sync` to install from `pyproject.toml`/`uv.lock` - Change Python version to 3.13 - Remove `|| true` from pytest step - Keep mindmodel validator as-is **Execution note:** Test-first — write a workflow validation test that checks the YAML parses correctly and references valid files. **Test scenarios:** - Happy path: Workflow YAML is valid GitHub Actions syntax - Error path: pytest step fails if tests fail (no `|| true`) - Integration: `uv sync` installs the same lockfile as local dev **Verification:** - `python -c "import yaml; yaml.safe_load(open('.github/workflows/mindmodel-schedule.yml'))"` passes - Workflow runs successfully on next schedule trigger --- - [ ] U2. **Add pytest workflow for push/PR** **Goal:** Run tests on every push and PR to main. **Requirements:** R2, R3, R4 **Dependencies:** None **Files:** - Create: `.github/workflows/pytest.yml` **Approach:** - Trigger on `push` to `main` and `pull_request` to `main` - Use `astral-sh/setup-uv@v5` with Python 3.13 - Run `uv run pytest tests/ -q` - Cache uv dependencies between runs **Execution note:** Test-first — write a test that verifies the new workflow file exists and has required fields. **Test scenarios:** - Happy path: Workflow triggers on push to main - Happy path: Workflow triggers on PR to main - Error path: pytest fails → workflow fails - Edge case: Caching speeds up repeated runs **Verification:** - New workflow appears in repo Actions tab - Pushing this plan branch triggers the workflow - All tests pass in CI --- ## Risks & Dependencies | Risk | Mitigation | |------|------------| | uv action not available or fails | Pin to known good version; test on fork first | | Tests fail in CI but pass locally | Likely env difference; debug in CI logs | | Gitea runner differences | Use standard ubuntu-latest; no Gitea-specific actions | ## Documentation / Operational Notes - Update ARCHITECTURE.md CI section if it mentions the old workflow - Note in AGENTS.md that CI runs on GitHub Actions (not Gitea CI) ## Sources & References - Existing workflow: `.github/workflows/mindmodel-schedule.yml` - Package manager: `pyproject.toml`, `uv.lock` - uv GitHub Action: https://github.com/astral-sh/setup-uv