From idh
Anti-rubber-stamp merge gate. Validates every ticket exit criterion and every review comment against the actual diff. Emits APPROVED / REROLL / ESCALATE with explicit evidence. Never merges.
npx claudepluginhub minhhaduong/imperialdragonharnessThis skill uses the workspace's default tool permissions.
The last line of defence before merge. A gate with teeth: **cannot approve without
Provides Ktor server patterns for routing DSL, plugins (auth, CORS, serialization), Koin DI, WebSockets, services, and testApplication testing.
Conducts multi-source web research with firecrawl and exa MCPs: searches, scrapes pages, synthesizes cited reports. For deep dives, competitive analysis, tech evaluations, or due diligence.
Provides demand forecasting, safety stock optimization, replenishment planning, and promotional lift estimation for multi-location retailers managing 300-800 SKUs.
The last line of defence before merge. A gate with teeth: cannot approve without
concrete per-criterion evidence. Designed to be called by /verify at phase 6, but
standalone-callable for debugging.
/review,
/review-pr, human authors) is either ADDRESSED (commit changed the cited file, OR
the comment was marked resolved, OR a ticket was opened with the rationale) or
UNRESOLVED. No "I'll get to it later."/simplify is either
applied (diff shows the change) or explicitly justified in a PR comment that the gate
agent validates.blocking entry from /verify-adherence
is a REROLL trigger.Either:
<pr-number> (standalone mode): the gate resolves ticket, diff, comments itself./verify (preferred): {pr, ticket, diff, phase_outputs, round}.Both paths produce the same verdict shape.
For each ticket exit criterion, the gate searches:
A criterion cannot be ADDRESSED solely on "the PR says so." Either a commit touched the relevant file, or a test exists that covers the behaviour, or a rationale is posted.
For each review comment, the gate searches:
resolved/outdated flag).A comment is UNRESOLVED if none of the above applies.
verdict: APPROVED | REROLL | ESCALATE
round: 1 | 2
pr: <pr-number>
ticket: <ticket-id>
per_exit_criterion:
- criterion: "<verbatim text from ticket>"
status: ADDRESSED | MISSING
evidence: "<commit SHA + file:line | test_id | PR body statement>"
unresolved_review_comments:
- comment_ref: <url or id>
author: <login>
thread_excerpt: "<short>"
why_unresolved: "<reason>"
unresolved_simplify_findings:
- finding: "<verbatim>"
severity: must-fix | nice-to-have
status: NOT_APPLIED | APPLIED_PARTIAL | WAIVED_WITHOUT_RATIONALE
unresolved_adherence_violations:
- rule_ref: "<.claude/rules/foo.md#bar>"
file: <path>
line: <n>
severity: blocking | nit
rationale: |
<one paragraph: what is the strongest remaining reviewer attack on this PR?
if APPROVED, state why the evidence holds up to adversarial reading.>
second_round_needed:
# populated only if verdict == REROLL
- <each item from the unresolved lists, prioritised>
MISSING in per_exit_criterion → REROLL (round 1) / ESCALATE (round 2).UNRESOLVED review comment from a human author → REROLL (round 1) / ESCALATE (round 2).UNRESOLVED review comment from /review-pr labelled severity ≥ medium →
REROLL (round 1) / ESCALATE (round 2).NOT_APPLIED must-fix simplify finding without rationale → REROLL (round 1) /
ESCALATE (round 2).blocking adherence violation → REROLL (round 1) / ESCALATE (round 2).If round == 2 and any trigger fires → upgrade to ESCALATE. Never a third round.
| Pattern | Why it fails |
|---|---|
| "Test suite passes" as sole evidence | No link from test to criterion; tests could pre-exist |
| "Simplify ran, no findings" | Simplify finds nits, not ticket completion; orthogonal |
| "Reviewer concern filed as follow-up" with no ticket ID | Unverifiable; ticket must exist |
| "Addressed in PR body" without commit | PR body is narrative; need the actual change |
| "Edge case out of scope" without Scope audit confirmation | The Scope phase is Phase 7; gate cannot waive unilaterally |
/verify-gate <pr-number> can be called without /verify having run first. In that mode
the gate uses only existing PR state (comments, commits, reviews) — no phase 2–5 outputs.
This is useful for sanity-checking a PR the human is considering, or for re-running the
gate after manual fixes.
Standalone mode is always round=1 regardless of history. The retry-budget semantics
apply only when called from /verify.
Structured verdict returned to the caller (for /verify consumption).
A PR comment posted with a human-readable summary of the verdict. Template:
/verify-gate round=<n> verdict=<V>
Exit criteria: <n_addressed>/<n_total> addressed
Review comments: <n_unresolved> unresolved
Simplify: <n_unresolved> must-fix not applied
Adherence: <n_blocking> blocking violations
Top reasons (if not APPROVED):
- <ranked list>
Rationale: <paragraph>
gh pr merge./verify-adherence runs them.