Skip to content

RCICD coverage and cost matrix (2026)

This document implements the RCICD audit plan: what is covered where, what belongs in CI versus vox ci pre-push, known gaps, and cost hotspots.

  • Merge gate: .github/workflows/ci.yml on pull_request and push to main.
  • Shift-left: Prefer vox ci pre-push (and crate-scoped tests) for deterministic checks developers can run before push; keep environment-heavy work in Actions.
  • Single bundle: vox ci ssot-drift runs check-docs-ssot, check-codex-ssot, command-compliance, SQL/query guards, operations verify, contracts index, docs-reality-audit verify, exec policy, completion audit (verify path), scientia contracts, and data SSOT guards — see run_ssot_drift in crates/vox-cli/src/commands/ci/run_body_helpers/docs.rs.
WorkflowTrigger (summary)RoleCost tier
ci.ymlPR + push mainBuild, lint, guards, nextest, llvm-cov, audits, integration lanesHigh
docs-quality.ymlPath-filtered PR/mainDoc lint, doctest-md, Starlight buildMedium
docs-deploy.ymlPath-filtered push mainSite deployMedium
link_checker.ymlPR + push mainExternal linksMedium
ssot-drift.ymlPR + push mainCrate version / dashboard SSOT (overlaps theme with ci.yml, not identical steps)Low–medium
mutation-pr.ymlPath-filtered PR (vox-compiler, vox-codegen)cargo mutantsHigh
mutation-nightly.yml / bench-nightly.yml / qwen35-native-nightly.ymlScheduleNightly quality / perfHigh (scheduled)
mobile-e2e-android.ymlPath-filtered PR/push (apps/vox-mental-tracker/**)Android emulator E2EHigh
deploy-hetzner.ymlPush main, workflow_dispatchCoolify deploy + health probes; Gate 1 is minimal ubuntu build onlyLow (smoke) + deploy wall time
Tag/release workflowsTags / releaseArtifactsVariable

For runner labels and exceptions, see runner-contract.md and github-hosted-exceptions.md.

AreaCI location (typical)Local / test-suite equivalent
Line endings, manifest, fmt, denyguards-fastvox ci pre-push (fast), vox ci manifest, cargo deny
Docs/codex SSOT + registry parityguards-fastssot-driftvox ci ssot-drift or vox ci pre-push --complete
Retired symbolsguards-fastvox ci retired-symbol-check
Data / telemetry SSOT (inside ssot-drift) + secretsguards-fastssot-drift + later secrets stepsvox ci ssot-drift; vox ci secrets-parity
Clippy / rustdoc / driftlintscargo clippy, vox ci pre-push --complete
Workspace tests + coveragetestsvox ci pre-push --full, cargo llvm-cov nextest
Compiler gates (golden strict-parse, @test runner, WebIR)compiler-gatesSee crate tests under vox-compiler, vox-integration-tests
Audits (TOESTUB, mens-gate, build-timings, all-features matrix)audits, matricesPartial local; GPU/time budgets stay CI
  • Ignored tests: Inventory in contracts/reports/test-inventory.v1.json; governance via vox ci ignored-test-age, test-inventory. Large ignored counts hide regressions if ignored-only lanes are skipped.
  • Mutation scope: PR mutation gate is limited to compiler/codegen paths; other crates rely on unit/integration coverage only.
  • GitLab vs GitHub: .gitlab-ci.yml vox-ci-guards uses the same retired-symbol-check then ssot-drift bundle as GitHub guards-fast (plus GitLab-only extras such as data-storage-guard). Full parity with the entire ci.yml matrix is still not guaranteed — track drift when adding GitHub jobs.
  1. guards-fast: Removed standalone check-codex-ssot, check-docs-ssot, and command-compliance before ssot-drift (they run inside run_ssot_drift).
  2. compiler-gates: Removed redundant first web_ir_lower_emit_test nextest invocation; the VOX_WEBIR_VALIDATE=1 ignored-only run executes the full ignored set including the former filtered test.
  3. mobile-e2e-android.yml: Path filters so macOS emulator jobs run only when apps/vox-mental-tracker/ or the workflow file changes.
  4. guards-fast: Removed standalone data-ssot-guards after ssot-drift (already invoked at end of run_ssot_drift).
  5. deploy-hetzner.yml Gate 1: Dropped duplicate cargo fmt / cargo clippy; kept cargo build -p vox-cli --locked on ubuntu-latest only (merge already validated by ci.yml).
  6. .gitlab-ci.yml: Replaced separate check-codex-ssot, check-docs-ssot, command-compliance with retired-symbol-check + ssot-drift to match GitHub bundling.
  • Re-add explicit ci command-compliance (and codex/docs steps) in ci.yml if ssot-drift is split or reordered without preserving those calls.
  • Re-add standalone ci data-ssot-guards in guards-fast only if ssot-drift stops calling run_data_ssot_guards.
  • Restore deploy-hetzner fmt/clippy smoke if branch protection no longer requires green ci.yml before merge.
  • Restore global on: [push, pull_request] on mobile workflow only if cross-repo coupling requires every PR to exercise Android.