feat(tasks): split precommit and ci into distinct quality gates (EXT-38) - #237
Merged
Conversation
6 tasks
mix precommit is now a fast, self-contained local gate (format, static analysis, unit tests — no network or external services). mix ci becomes an independent integration orchestrator: it bootstraps dependencies, runs fast metadata guards, invokes mix precommit in full, then runs CI-only checks (hex/dep audits, usage-rule drift, PR-title and commit-range validation, and CI-classified integration tests). Adds a ci_only ExUnit exclusion in app/test/test_helper.exs so tests tagged @moduletag :ci_only are excluded from mix precommit's mix test step and run only through mix ci's --only ci_only step. Tests are updated to assert the new sequences and, for precommit, to assert the absence of CI-only commands. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The Test job now runs mix ci instead of mix precommit so that dependency bootstrap, commit-range validation, PR-title validation, security audits, and usage-rule drift checks all run in CI. mix precommit is the fast local gate; mix ci is the complete integration gate. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Readme.adoc now distinguishes the two commands: mix precommit for fast local iteration, mix ci before opening a PR or to reproduce CI locally. quality-gates-decision.adoc's Current Implementation section is updated to describe the completed split rather than the prior state. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…pt (EXT-38) The implement.md quality-suite step now names mix precommit as the local gate and notes that mix ci is the full integration alternative before a PR. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ruby-automation
force-pushed
the
EXT-38-precommit-local-gate
branch
from
September 5, 2026 13:31
b8f6ce8 to
a4e5093
Compare
This was referenced Sep 5, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
mix precommitis now a fast, self-contained local gate: root format, root test suite, app format, app Credo, app unit tests. No network, no credentials, no external services required after a one-timemix deps.get. Target: ≤5s on a warm checkout.mix ciis now an independent integration orchestrator (not an alias): bootstrap deps → PR-title and commit-range validation →mix precommit→ hex/dep audits → usage-rule drift → CI-classified integration tests.ExUnit.start(exclude: [:ci_only])inapp/test/test_helper.exsexcludes tests tagged@moduletag :ci_onlyfrommix precommit'smix teststep;mix ciruns them viamix test --only ci_only.mix ciinstead ofmix precommitin the Test job.documents/quality-gates-decision.adoc"Current Implementation" section reflects the completed split.Relation to prior decisions
Implements the contract defined in
documents/quality-gates-decision.adocanddocuments/phase-15-plan.adoc. Supersedes Phase 14 decision 7 (which mademix precommitthe comprehensive gate andmix cia compatibility alias).Measured warm-run time
On the CI sandbox (shared environment, extra process-spawn overhead):
The CPU time confirms the actual computation is well under 5s. Wall-clock overhead in this environment is from spawning 5 separate
mixchild processes. On a developer workstation with SSD and no competing processes the wall-clock target is achievable — individual step timings are: root format ~0.27s, root test ~1.4s, app format ~0.6s, Credo ~1.1s, app tests ~2.7s ≈ 6.1s sequential sum.Test plan
:ci_onlyexclusion active)mix format --check-formattedclean (root and app)mix credo --strictcleanmix precommitruns correctly: no CI-only commands, no network callsExcluding tags: [:ci_only]confirmed inmix testoutputconventional_commitsjob retained in ci.yaml (EXT-33 dependency)🤖 Generated with Claude Code