Conversation
The only workflow ran on version tags, so a change could merge without any of the documented checks ever running in GitHub Actions. Add a Checks workflow for pull requests and pushes to main: - ruff check and ruff format --check, using the ruff pinned in uv.lock - bandit with the project config - pytest on every supported Python version (3.12, 3.13, 3.14) - gofmt, go vet and go test -race for the TUI, as in `make tui-lint` and `make tui-test` - a production build of the viewer No job changes files, and none is marked required: usestrix#1260's rollout is to land the checks, clear any baseline failure, then require each green check. Type checking stays in typecheck.yml. Refs usestrix#1260 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
| run: uv sync --frozen --python ${{ matrix.python-version }} | ||
|
|
||
| - name: pytest | ||
| run: uv run --python ${{ matrix.python-version }} pytest -q |
There was a problem hiding this comment.
The new matrix runs the full test suite on Python 3.12, 3.13, and 3.14 without excluding or marking test_resolves_common_bare_model_names, which the PR identifies as already failing on main. Every pull request will therefore receive three failed pytest checks regardless of whether it introduced a regression, making these checks poor regression signals until the known failure is fixed.
Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/checks.yml
Line: 98
Comment:
**Known Red Test Baseline**
The new matrix runs the full test suite on Python 3.12, 3.13, and 3.14 without excluding or marking `test_resolves_common_bare_model_names`, which the PR identifies as already failing on `main`. Every pull request will therefore receive three failed pytest checks regardless of whether it introduced a regression, making these checks poor regression signals until the known failure is fixed.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
| # are required yet: the issue's rollout is to land the checks, clear any | ||
| # baseline failure, and only then mark each green check required. | ||
| # | ||
| # Type checking lives in typecheck.yml, which runs mypy per platform. |
There was a problem hiding this comment.
This comment says type checking lives in typecheck.yml, but that workflow is not present in the repository and is only proposed in a separate, unmerged change. This incorrectly tells maintainers that pull requests already receive type-check coverage; please describe it as deferred instead.
| # Type checking lives in typecheck.yml, which runs mypy per platform. | |
| # Type checking is deferred to a separate workflow. |
Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/checks.yml
Line: 7
Comment:
**Missing Typecheck Workflow**
This comment says type checking lives in `typecheck.yml`, but that workflow is not present in the repository and is only proposed in a separate, unmerged change. This incorrectly tells maintainers that pull requests already receive type-check coverage; please describe it as deferred instead.
```suggestion
# Type checking is deferred to a separate workflow.
```
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.|
First CI run is in, and it matches the baseline in the description:
The single pytest failure is the same test on all three versions, and it's the known one: That's #1288. No other test fails on Linux on any supported Python, so once #1289, #1279 or #1215 lands, all five jobs should be green and ready to mark required. Two things this run confirmed that I could only argue before:
|
… price LiteLLM's cost map now lists grok-4.5 under xai/, perplexity/xai/ and openrouter/x-ai/ at identical prices, so alphabetical order resolved the bare name to openrouter and failed test_resolves_common_bare_model_names. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The workflow comment said type checking lives in typecheck.yml, which only exists in the unmerged usestrix#1301, so it implied pull requests already get type-check coverage. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Thanks — both are fair points. Missing typecheck workflow — fixed in Known red baseline — correction. I wrote that I was leaving it red, but that was out of date: |
Refs #1260 — the first slice of it. What's in and what's deferred is spelled out below.
Why
The only workflow is
Build & Release, which runs on version tags. Nothing runs the documented checks on a pull request, so a change can merge without them ever running in CI.What this adds
A
Checksworkflow on pull requests and pushes tomain:ruffruff check .andruff format --check .make lint, without--fixbanditbandit -r strix/ -c pyproject.tomlmake securitypytestpyproject.tomlclassifiestuigofmt -l,go vet,go test -racemake tui-lint,make tui-testviewernpm ciandnpm run buildmake viewer, minus the commit stepConventions match
build-release.yml: every action pinned to a full commit SHA with a version comment,persist-credentials: falseon checkout, and read-onlypermissions. Aconcurrencygroup cancels superseded runs on the same branch.No job changes files, and none is required. That follows the rollout in #1260: land the checks, clear the baseline, then require each check once it's green.
Baseline on
main, measured before writing thisI checked what each job reports on current
mainso the first run holds no surprises:uv runresolves to the ruff pinned inuv.lock(0.15.20), not the olderrevin.pre-commit-config.yaml. With that version,ruff check .passes andruff format --check .reports 226 files already formatted. One thing that tripped me up: a local venv that has drifted to a newer ruff reports errors onmainthat the pinned version doesn't. CI'suv sync --frozenavoids that.npm ci && npm run buildsucceeds, and the output matches the committedstatic/assets.main, fixed on this branch.tests/test_pricing.py::test_resolves_common_bare_model_namesfails onmainbecause of BUG: pricing resolver returns the aggregator route for equally priced models (test failing on main) #1288: LiteLLM's cost map now listsgrok-4.5underxai/,perplexity/xai/andopenrouter/x-ai/at the same price, and alphabetical order resolved the bare name to OpenRouter.76267dcsorts matches by path depth first, so the direct provider wins, and all three pytest jobs pass. It overlaps with fix(pricing): prefer the provider's own route when several are equally priced #1289, fix(pricing): prefer a native provider over aggregator re-listings #1279 and test(pricing): make bare-model resolution test deterministic #1215; if one of those merges first, the commit can be dropped from here.go-version-fileingo.mod.actionlint1.7.12 passes on the workflow, and a structural check confirms everyuses:is SHA-pinned.Deliberately deferred
static/matches a fresh build. Whether that should be enforced is a policy call for maintainers.🤖 Generated with Claude Code