ci: add an aggregate gate, CodeQL and the AI review configuration - #14
ci: add an aggregate gate, CodeQL and the AI review configuration#14gabrielspadon wants to merge 4 commits into
Conversation
PR Summary by Qodoci: add Required CI aggregate gate, CodeQL, and AI review configs
AI Description
Diagram
High-Level Assessment
Files changed (6)
|
Code Review by Qodo
Context used✅ Compliance rules (platform):
20 rules 1.
|
|
Removed The upload failed with:
CodeQL default setup is already configured on this repository, and it covers more than the workflow I added:
So the right move is to keep default setup and drop the advanced config, rather than disable default setup to make my file work. The pull request title still mentions CodeQL; the remaining substance is the |
|
Both Qodo findings were correct and are fixed in 1. The gate did not actually self-maintain. The script enumerated It now takes the whole context as Exercised against five scenarios before pushing:
The fourth row is the one that mattered: under the old script that combination passed. 2. Key paths are no longer excluded from review.
|
|
A follow-up audit caught that my earlier commit fixed three of four places, not four.
[ignore]
regex = [
".*\\.key$",
]So Qodo still could not see any Removed. |
Brings CiteForge to the same CI shape as its five sibling repositories, without changing its toolchain. CiteForge deliberately stays on GitHub Actions and gains no
.circleci/; pip, the--require-hasheslock install and mypy are all kept exactly as they were. Matching the siblings means matching structure and naming, not forcing a different toolchain onto a repository that made its own choices.tests.ymlAdds what the house pattern has and this file lacked: a top-level
permissions: contents: read, a concurrency block that cancels only on pull requests,timeout-minutesand a display name on every job, andpersist-credentials: falseon both checkouts.The substantive addition is a
Required CIaggregate gate withif: always()and aneedslist naming every other job. That single check is what branch protection should require, so a job added later is covered automatically and a renamed job cannot silently stop being required. Verified by set difference on the job keys that the needs list covers every non-gate job with no extras, and the gate script was extracted and executed againstsuccess,failure,skippedandcancelled.The coverage floor is preserved at 68, not reinvented. Note it currently has 0.48 points of headroom (the suite reports 68.48%), so a small untested addition will break the build.
One extra fix: the pip cache key hashed only
pyproject.tomlwhile the install readsrequirements-dev.lock, so the key never rotated when the lock was regenerated. It now hashes both. Performance only, since--require-hashesmeant correctness was never at risk.codeql.yml(new)CiteForge is the only public repository in the group, which makes GitHub Advanced Security free here and unavailable on the five private siblings. CodeQL runs for Python on pull requests, pushes to
main, and weekly, withsecurity-events: writegranted per job rather than at the top level.AI review configuration
.coderabbit.yaml,greptile.jsonand.pr_agent.toml, adapted from the siblings rather than copied. Rust, SQL, TypeScript, Helm and CircleCI rules are dropped; the required check is retargeted toRequired CI. The invariants are quoted fromCLAUDE.mdrather than invented: the Three-Way Fix Pattern, determinism throughsorted(),_norm_doi()with its 0.55 title-similarity threshold, the 0.95 orphan-safety bound, the 13-source trust hierarchy, and the ban on automated audit modules..pre-commit-config.yaml(new)Python-only hooks; no Rust or SQL copied across.
ruff-formatis deliberately omitted becausepyproject.tomlconfigures ruff for linting only and CI never runs a format check, so adding it would reformat the tree.The mypy hook is
language: systemrather thanmirrors-mypy. In an isolated hook venvrapidfuzzandunidecodeare absent, soignore_missing_importstypes themAnyandwarn_return_anyfires two errors CI never sees. Running against the same interpreter keeps the hook and CI honest, and pins the version by the lock instead of a second drifting rev.Verification
All seven distinct action SHAs re-resolved against their real repositories; none fabricated.
actionlintreports zero diagnostics ontests.ymlandcodeql.yml, and the only output is two pre-existing style notes inmonthly-refresh.yml, which is untouched. Every workflow command was executed for real against the hash-pinned lock:ruff checkclean,mypyclean across 33 files,pytest810 passed with 68.48% coverage.Two things for the maintainer
Required CIwill exist as a check but is not yet required — no ruleset on this repository carries arequired_status_checksrule at all. It only gates once added to the ruleset.Separately, running the test suite mutates tracked files under
data/api_cache/.