Skip to content

feat(tasks): classify fast and CI-only quality checks (EXT-37) - #242

Closed
ruby-automation wants to merge 2 commits into
mainfrom
EXT-37-classify-quality-checks
Closed

feat(tasks): classify fast and CI-only quality checks (EXT-37)#242
ruby-automation wants to merge 2 commits into
mainfrom
EXT-37-classify-quality-checks

Conversation

@ruby-automation

Copy link
Copy Markdown
Contributor

Summary

  • mix precommit is now the fast local gate: root format, root tests, app format, app Credo, app unit tests. No network, no credentials, no external services required after a one-time mix deps.get. CI-only commands (deps.get, hex.audit, deps.audit, usage_rules.sync, PR/commit validation) are removed.
  • mix ci is now an independent orchestrator (not an alias): bootstrap deps → PR-title and commit-range validation → mix precommit → hex/dep audits → usage-rule drift → CI-classified integration tests.
  • App test classification: ExUnit.start(exclude: [:ci_only]) in app/test/test_helper.exs establishes the classification mechanism. No existing tests are tagged :ci_only yet; future CI-only tests use @moduletag :ci_only.
  • Enforcement tests: precommit_test adds a negative-assertion test verifying no CI-only commands are present; ci_test verifies the strict-superset relationship (mix precommit ⊂ mix ci).
  • GitHub Actions now calls mix ci instead of mix precommit in the Test job.
  • documents/quality-gates-decision.adoc "Current Implementation" section updated to reflect the completed split.

Relation to prior work

Implements phase-15-plan.adoc step 1 (classify) and steps 2-4 (implement + rewire). Supersedes Phase 14 decision 7. Related to EXT-38 (PR #237) which also implements this split — the team should coordinate merge order.

Test plan

  • Root tests: 41 passed (1 new negative-assertion test)
  • App tests: 409 passed, Excluding tags: [:ci_only] confirmed in output
  • mix format --check-formatted clean (root and app)
  • mix credo --strict clean (612 mods/funs, no issues)
  • mix precommit runs correctly per new contract
  • mix ci sequencing verified via test assertions

🤖 Generated with Claude Code

ruby-automation and others added 2 commits September 5, 2026 09:16
Split mix precommit and mix ci into distinct, purposeful quality gates per
documents/quality-gates-decision.adoc and documents/phase-15-plan.adoc:

- mix precommit is now the fast local gate (format + unit tests only,
  no network, no external services after a one-time deps.get). Removes
  deps.get, hex.audit, deps.audit, usage_rules.sync, and the PR-title
  and commit-range validators — all CI-only work.

- mix ci is now an independent orchestrator: deps.get bootstrap, fast
  metadata guards (PR title + commit range), the full precommit sequence,
  then CI-only audits (hex.audit, deps.audit, usage_rules.sync) and
  CI-classified integration tests (mix test --only ci_only).

- app/test/test_helper.exs excludes :ci_only tagged tests by default so
  mix precommit's mix test step runs only fast unit tests. No existing
  tests are CI-only yet; this establishes the classification mechanism.

- .github/workflows/ci.yaml now calls mix ci instead of mix precommit
  so the full integration gate (audits, metadata validation) still runs
  in CI.

- Enforcement tests added: precommit_test asserts CI-only commands are
  absent; ci_test asserts the strict-superset relationship.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@bougyman bougyman closed this Sep 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants