athola/quality-gate
Orchestrates the QUALITY pipeline stage for egregore work items, running code review, unbloat, and test updates. Use when running quality checks before a PR.
npx skills add https://github.com/athola/claude-night-market --skill quality-gate
make lint directly)Orchestrate the QUALITY stage of egregore's pipeline.
Each quality step runs convention checks from the codex
and invokes mapped skills.
| Step | Conventions | Skills | Modes |
|------|------------|--------|-------|
| code-review | C1,C2,C3,C4,C5 | pensive:unified-review | self, pr |
| unbloat | - | conserve:unbloat | self |
| code-refinement | - | pensive:code-refinement | self |
| update-tests | - | sanctum:update-tests | self |
| update-docs | C5 | sanctum:update-docs, scribe:slop-detector | self |
The orchestrator invokes this skill with:
When mode is "self-review":
git diff --name-only main...HEADconventions/codex.ymlconventions.pyIf blocking findings exist:
"fix-required"
if no findings:
verdict = "pass"
elif all findings are severity "warning":
verdict = "pass-with-warnings"
elif blocking findings remain after auto-fix:
verdict = "fix-required"
Record verdict in manifest decisions:
{
"step": "code-review",
"chose": "pass-with-warnings",
"why": "2 warnings (C4: noqa in hooks), 0 blocking"
}
By default the loop runs indefinitely and autonomously: a
fix-required verdict is recorded but does not, on its own,
stop the item from advancing. This preserves the historical
hands-off posture.
When config.pipeline.completion_integrity is true, the
verdict becomes a gate the agent cannot talk its way past:
fix-required verdict is reported to the orchestrator asa step failure, so the item cannot advance to the ship
stage with unresolved blocking findings. It retries in place
and, on exhausting max_attempts, is marked failed and
the overseer is alerted (never silently completed).
auto_merge:the PR is prepared but left open.
This binds "done" to the verifier (convention checks plus the
mapped review skills), not to the agent's own say-so. The
principle comes from shipped agent harnesses, stated best by
KbWen/agentic-os: an agent "can still cut a corner, it just
can't cut this one past a check it doesn't control." The
recurring patterns across those harnesses:
| Pattern | What it does | Source |
|---------|--------------|--------|
| Verifier gate as completion judge | Bind "done" to tests, lints, or result hashes the agent cannot fake | Aider, snarktank/ralph, gaasher |
| Completion promise + max-iterations cap | String-matching "done" is insufficient; pair it with an iteration ceiling and manual abort | anthropics ralph-wiggum |
| Evidence gates the agent does not control | Credential scan, test-execution validation, phase-log parsing enforced by hooks or CI | KbWen/agentic-os |
| Keep-if-better / revert-if-worse ledger | Score each change, revert regressions, log to an append-only ledger for review | gaasher/Agent-Loop-Skills |
| Legibility anchor | A persisted current-state or repo-map file that lets a human re-enter the loop | Aider repo map, agentic-os |
| Human observer checkpoint | Watch early iterations, monitor diffs, reserve loops for defined problems | anthropics, ghuntley |
Further rationale: .claude/rules/prefer-invariants-over-fallbacks.md
(evidence base) and Armin Ronacher, "The Coming Loop" (2026),
https://lucumr.pocoo.org/2026/6/23/the-coming-loop/. The flag
is off by default; enabling it is a deliberate choice to keep a
human as the final judge.
When mode is "pr-review":
gh pr diff <number> --name-onlypensive:unified-review on the diffMap findings to GitHub review:
gh api POST review withevent "APPROVE"
findings as inline comments
"REQUEST_CHANGES", blocking findings as inline
comments with "must fix" prefix
Comment format per finding:
[egregore:{convention_id}] {message}
Convention: {convention_name}
Severity: {severity}
Work items may have a quality_config field:
{
"skip": ["unbloat"],
"only": ["code-review", "update-docs"]
}
skip: list of steps to skip (run all others)only: list of steps to run (skip all others)only takes precedenceNot all conventions run on every step. The routing
table above defines which conventions apply to which
step. The quality gate filters the loaded codex
accordingly before running checks.
Take athola/quality-gate from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.