vanillagreencom/kendex/skills/review-gate/SKILL.md
review-gate
Load to wire, adopt, tune, or debug a repo's review gate or its REVIEW_GATE_* settings.
- Source repository stars
- 64
- Declared platforms
- 0
- Static risk flags
- 1
- Last source update
- 2026-08-28
- Source checked
- 2026-08-28
Decision brief
What it does: where it fits
Problem with this skill? Run kendex report — it files to the owning repo automatically. Do not hand-file.
Not for
- Tasks that require unconfirmed production actions or broad system permissions.
- Environments where the pinned source and install steps cannot be inspected.
Compatibility matrix
Platform support, with evidence labels
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
Inspect first. Install second.
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/vanillagreencom/kendex --skill "skills/review-gate"Inspect the Agent Skill "review-gate" from https://github.com/vanillagreencom/kendex/blob/a96fb57807385a3f381ac836dda7c124c380d323/skills/review-gate/SKILL.md at commit a96fb57807385a3f381ac836dda7c124c380d323. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
What the source asks the agent to do
- 01
Evidence sources (.agents/skills/review-gate/scripts/review-predicate.sh)
Evidence for the CURRENT head is any of:
Review object at the exact head from a non-author, non-dismissedTrusted clean-analysis check-run or commit statusComment-form clean pass (REVIEWGATECOMMENTREVIEWERS): an issue - 02
The writer (.agents/skills/review-gate/scripts/review-writer.sh)
One workflow, defined on the default branch, is the only thing that writes the gate status. It evaluates the predicate and converges the status — nothing else.
Converge-all on every leg. Every invocation converges EVERY open PR.Relay / converge split. PR-attached legs (pullrequesttarget,The relay never exits non-zero — a pinned invariant. It holds no - 03
validate THIS repo's installation (env: none) — the consumer's CI step
.agents/skills/review-gate/scripts/validate.sh
.agents/skills/review-gate/scripts/validate.sh - 04
is the adopted workflow still the shipped template? (equality, not
Review the “is the adopted workflow still the shipped template? (equality, not” section in the pinned source before continuing.
Review and apply the “is the adopted workflow still the shipped template? (equality, not” source section. - 05
re-derivation) — usable alone when only the workflow copy changed
.agents/skills/review-gate/scripts/validate-workflow.sh
.agents/skills/review-gate/scripts/validate-workflow.sh
Permission review
Static risk signals and limitations
Runs scripts
The documentation asks the agent to run terminal commands or scripts.
git ls-files .agents/skills/review-gate/scripts/ | headRuns scripts
The documentation asks the agent to run terminal commands or scripts.
git ls-files '.github/workflows/*.yml' '.github/workflows/*.yaml' \Evidence record
Why each signal appears
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 94/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 64 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Provenance and original SKILL.md
- Repository
- vanillagreencom/kendex
- Skill path
- skills/review-gate/SKILL.md
- Commit
- a96fb57807385a3f381ac836dda7c124c380d323
- License
- MIT
- Collected
- 2026-08-28
- Default branch
- main
View the original SKILL.md
Review Gate
Problem with this skill? Run
kendex report— it files to the owning repo automatically. Do not hand-file.
The gate answers ONE question: has this exact PR head been reviewed? It posts that answer as a commit status the repo's branch rules require. It does not check CI, re-run anything, or reason about jobs.
Two greens do NOT mean a review happened. Under REVIEW_GATE_MODE = "off"
the predicate evaluates no evidence and attests only that the repo disabled
the gate; and merge-group statuses never read the mode, posting green as
"merge-queue entry: post-approval by construction". Both:
references/settings.md § REVIEW_GATE_MODE.
Decision table
| Verdict | Status | Meaning |
|---|---|---|
approved | success | Evidence exists for this head; no standing objection; no unresolved threads. Under REVIEW_GATE_MODE = "off" the predicate evaluates NO term — success there means only "gate disabled", stated in the status description. |
awaiting | pending | No review evidence for this head yet. |
threads-open | pending | Evidence exists, but review threads are unresolved. |
changes-requested | failure | A reviewer objects. Red means objection — never a build failure. |
| (exit 2, no verdict) | unchanged | A read failed or config is invalid. Take NO action; retry next pass. |
Reading the gate's own pending text. no review evidence at <sha> yet; expected from <names> is the awaiting verdict. The names are the sources
that could still open the gate at that head, resolved from the repo's own
settings and filtered the way the evidence read filters them — the PR author
never appears, and an empty trust list reads as any non-author review (or
approval under REVIEW_GATE_REVIEW_OBJECT_MIN_STATE = "approved"). Past
140 characters the sha shortens to 12 and the names that do not fit are
counted (and N more). A configured operator override is a source too, and
is named with the rest. no configured source is eligible here means every
configured login is the author and no override is set.
Act on the names, not on the pending state: where they are bots and one has already reviewed this head, dispatch the writer instead of waiting.
Working in a consumer repo
1. Read the current state before changing anything
# Is the engine vendored and committed?
git ls-files .agents/skills/review-gate/scripts/ | head
# Is anything wired to write the gate?
git ls-files '.github/workflows/*.yml' '.github/workflows/*.yaml' \
| xargs grep -l 'review-writer\.sh' 2>/dev/null
# What does the repo say about itself?
.agents/skills/review-gate/scripts/validate.sh; echo "exit $?"
validate.sh prints one verdict line per check and every FAIL line names
its own fix. Exit 0 = clean, 1 = findings, 2 = the check could not run at all
(bad arguments, not a git repository, a missing file it derives checks from —
fix that first; a 2 is never a pass). Run it after every step below.
2. Adopt, when nothing is wired
The precondition comes first: the repo needs a merge queue whose required
contexts include the test aggregate, or no held-back jobs. Held-back jobs
report skipped, which GitHub counts as satisfied, and a reviewed PR would
merge untested. Confirm which one holds before wiring anything.
# 1. vendor the engine as TRACKED files (CI checks out nothing else)
kendex refresh
git add .agents/skills/review-gate
# 2. copy the writer VERBATIM — it carries no per-repo values
cp .agents/skills/review-gate/templates/review-gate-writer.yml \
.github/workflows/review-gate-writer.yml
# 3. seed the repo's settings from the shipped example, then edit the
# handful of values this repo actually decides (table below)
$EDITOR kendex.settings.toml
# 4. prove the install answers for itself
.agents/skills/review-gate/scripts/validate.sh
Then add the validate step to the repo's CI as its own job — no needs, no
path filter, no gate condition:
review-gate-validate:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@<pinned-sha>
with:
persist-credentials: false
- run: .agents/skills/review-gate/scripts/validate.sh
Finish with the repo-side wiring — ruleset, merge queue, bypass actor — and delete the local machinery the writer supersedes, in the same PR: references/adoption.md.
3. The values a repo actually decides
Everything else has a working default. Full table: references/settings.md.
| Key | Decide |
|---|---|
REVIEW_GATE_CONTEXT | The protected commit-status name. Renaming it means updating the ruleset in the same PR. |
REVIEW_GATE_TRUSTED_STATUS_CONTEXTS | The reviewer contexts whose clean pass counts. Any context to trust needs an explicit entry. |
REVIEW_GATE_REVIEW_OBJECT_TRUSTED_LOGINS | Empty = any non-author. List logins to restrict — do that wherever outside collaborators can review. |
REVIEW_GATE_REVIEW_OBJECT_MIN_STATE | any counts COMMENTED reviews (for bots that never APPROVE); approved requires an APPROVED verdict. |
REVIEW_GATE_COMMENT_REVIEWERS | Only for a comment-form reviewer: login:binding-prefix. |
REVIEW_GATE_OVERRIDE_CONTEXT | The operator override status context. |
REVIEW_GATE_THREADS | enforce, unless a server-side zero-bypass thread ruleset is the enforcement point. |
REVIEW_GATE_CARRY_FORWARD | Off by default. Turn on docs/comments where re-review of review-inert deltas is unwanted; vendored where kendex refresh pushes should carry, with the render trees listed in REVIEW_GATE_VENDORED_PATHS. |
REVIEW_GATE_VENDORED_PATHS | The render trees vendored trusts as kendex output, e.g. .agents/*;.claude/skills/*. A hand-edit under them rides; keep hook scripts and instruction markdown in REVIEW_GATE_CARRY_FORWARD_EXCLUDE, which wins. |
REVIEW_GATE_MODE | enforce. off is the one-switch disable, and it attests rather than evaluates. |
4. Repair, when validate reports FAIL
| Verdict line | What to do |
|---|---|
| assigns REVIEW_GATE_* key(s) the engine never reads | Fix the spelling against references/settings.md. The written value is being ignored. |
| a committed setting is not legal | The indented ::error under it is the engine's own diagnosis; it names the key and the legal values. |
| carry-exclude … matches no tracked path | Fix the glob, or declare it in REVIEW_GATE_CARRY_FORWARD_EXCLUDE_PROPHYLACTIC when it guards paths that do not exist yet. |
| carry-exclude … anchored with a leading '/' | Drop the anchor: compare filenames are repository-relative. |
| prophylactic declaration … | Reconcile the ledger — every declaration names an active exclusion that still matches nothing. |
| no tracked workflow … runs review-writer.sh | Adopt (§2), or git add the workflow: Actions runs only what is committed. |
| has diverged from the shipped template | Re-copy templates/review-gate-writer.yml over the adopted file. The template carries no per-repo values, so a copy that differs is a copy someone edited; the line named under the verdict says where. Keep only the check_run opt-in's two trigger lines if that opt-in is on. |
| could not be read | A committed value the loader refuses — the indented diagnostic names the key and the shape it rejected. Fix the assignment; an unreadable value is never an empty one. |
| is not executable / does not parse | Re-run kendex refresh and commit the result. |
5. Operations
Watching one or many PRs without stalling. Never key a hand-rolled
monitor on gate-state transitions. Run
.agents/skills/review-gate/scripts/pr-watch.sh (optionally --heal) on
the harness's wake-up mechanism: silence + exit 0 means nothing needs you;
attention lines name exactly what does. See adoption.md § Watching PRs as an agent.
Reviewers are down / nothing is reviewing. Run the internal review loop: fix findings, resolve every thread, then post the override status with a real reason. It cannot bypass an objection or an open thread.
A PR that repairs the gate itself. The writer always runs the merged engine. Merge the repair PR with the ruleset's bypass actor and say so in the commit message.
A settings-change PR is judged by the OLD config — a PR adding a trusted login cannot have its own gate honor it. Merge via normal review or the bypass actor.
The engine
Evidence sources (.agents/skills/review-gate/scripts/review-predicate.sh)
Evidence for the CURRENT head is any of:
- Review object at the exact head from a non-author, non-dismissed
login — restricted to
REVIEW_GATE_REVIEW_OBJECT_TRUSTED_LOGINSwhen set, and to APPROVED reviews whenREVIEW_GATE_REVIEW_OBJECT_MIN_STATE = "approved". An approval is never superseded by a later COMMENTED from the same reviewer; only a later CHANGES_REQUESTED withdraws it. A row whose body's first line (after trimming leading whitespace and markdown quote markers) contains aREVIEW_GATE_REVIEW_OBJECT_ERROR_PATTERNSmarker is NOT-EVIDENCE, never a failure. - Trusted clean-analysis check-run or commit status
(
REVIEW_GATE_TRUSTED_STATUS_CONTEXTS) succeeding on this head — but a pass must prove analysis RAN: a success matchingREVIEW_GATE_CHECKRUN_SKIP_PATTERNS(e.g. "rate limited") is NOT-EVIDENCE, never a failure. On BOTH surfaces the NEWEST row/run per name decides: an older clean success never outlives its reviewer's newer pending/failed/skip-marked round. - Comment-form clean pass (
REVIEW_GATE_COMMENT_REVIEWERS): an issue comment by a trusted bot login — never the PR author, even if configured — binding the evidence to this head's sha (floorREVIEW_GATE_SHA_PREFIX_FLOOR). - Operator override (
REVIEW_GATE_OVERRIDE_CONTEXT, legacy nameREVIEW_GATE_OUTAGE_CONTEXT): a trusted operator's status carrying a NON-EMPTY reason, which is enforced and surfaced in the gate detail. Substitutes for MISSING evidence ONLY — it never overrides a changes-requested or an unresolved thread; fix findings and resolve threads first, then attest.
With REVIEW_GATE_CARRY_FORWARD (off by default), evidence at an ancestor
carries to head when the delta is provably in a class review would not
re-examine — docs-only, comment-only, a committed kendex render tree,
identical tree. Never a waiver: real evidence must exist, code changes
outside those classes always require fresh evidence, and the fail-closed
terms still apply.
Changes-requested and unresolved threads always fail closed. Every evidence read fails LOUD (exit 2, no verdict). Read bounds, retry budget and thread pagination: DEVELOPMENT.md § Evidence reads.
Trust model. Trust keys on names only GitHub controls: the author login
of a review or comment, or the exact check/status context on repos where
every publisher is trusted. A comment body never establishes trust — it is
read only to BIND evidence to a commit. Where PR workflows hold
statuses:write, the opt-in REVIEW_GATE_STATUS_PUBLISHER_REJECT list
rejects statuses minted by a forgeable creator (typically
github-actions[bot]) on both the trusted-context and override reads.
The writer (.agents/skills/review-gate/scripts/review-writer.sh)
One workflow, defined on the default branch, is the only thing that writes the gate status. It evaluates the predicate and converges the status — nothing else.
- Converge-all on every leg. Every invocation converges EVERY open PR.
- Relay / converge split. PR-attached legs (
pull_request_target,pull_request_review,status, an opted-incheck_run) do NOT run the engine: they run a group-less relay job that dispatches a converge pass and exits. Onlyworkflow_dispatchandschedulehold the single-writer group. The relay costs one non-evictable run per PR-attached event — size that before adopting on a capacity-limited runner pool (references/adoption.md § Updating an already-adopted copy). - The relay never exits non-zero — a pinned invariant. It holds no
statusesscope. Every fault warns and exits 0, and every wait is bounded; a sustained dispatch outage surfaces as gate staleness, healed by the cron floor andpr-watch --heal. pull_request_targetsafety: the job never executes PR-controlled code. Every checkout pins the default branch with credentials dropped and refuses an empty default-branch resolution rather than falling back.- Idempotent, and ordered. It no-ops when the current entry already
matches, and defers a
successpost to any newer run's entry. Mechanics: DEVELOPMENT.md § Write ordering.
Scripts
# validate THIS repo's installation (env: none) — the consumer's CI step
.agents/skills/review-gate/scripts/validate.sh
# is the adopted workflow still the shipped template? (equality, not
# re-derivation) — usable alone when only the workflow copy changed
.agents/skills/review-gate/scripts/validate-workflow.sh
# verdict for one head (env: GH_REPO, PR_NUMBER, HEAD_SHA[, PR_AUTHOR])
.agents/skills/review-gate/scripts/review-predicate.sh
# validate settings values alone, no evidence read, no PR required
.agents/skills/review-gate/scripts/review-predicate.sh --check-config
# converge every open PR's gate status (env: GH_REPO)
.agents/skills/review-gate/scripts/review-writer.sh
# needs-attention reducer over open PRs (env: GH_REPO) — exit 0 nothing,
# 1 attention lines on stdout, 2 read errors. Flags: --heal (one writer
# dispatch on gate-stale, reported as an informational heal-dispatched
# line), --no-evaluate (predicate-skipping mode: thread,
# queue, and gate-status reads still run, so threads-open, disarmed, and
# the threads-driven gate-stale form all fire; verdict-driven forms need
# the predicate), --awaiting-after SECS (default: PR_REVIEW_WAIT_SECS)
.agents/skills/review-gate/scripts/pr-watch.sh [PR# ...]
The offline decision-table selftest and the live sandbox replay are the ENGINE's proofs and run in the kendex repo, not in a consumer's CI: DEVELOPMENT.md.
For re-vendor PRs, suppress duplicate findings with the remedy-locus reviewer
instruction, never a reviewer path exclusion:
references/vendored-paths.md. A committed
kendex refresh tree is the same problem with no pin over it and a blast
radius of every consuming repo; it routes every finding over the render
upstream, with no carve-out:
references/rendered-paths.md.
Frequently asked questions
What to verify before installation and use
What does the review-gate source document cover?
Problem with this skill? Run kendex report — it files to the owning repo automatically. Do not hand-file.
How do I install review-gate?
The source record exposes this install command: npx skills add https://github.com/vanillagreencom/kendex --skill "skills/review-gate". Inspect the command and pinned source before running it.
Which permission-related actions were detected?
Static rules flagged exec-script in the source; the page lists the matching lines and excerpts.
Alternatives
Compare before choosing
coreyhaines31/marketingskills
ab-testing
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
garrytan/gbrain
bulk-ingestion
End-to-end discipline for turning any large data source (audio libraries, email takeouts, document corpora, chat exports, API dumps) into brain pages at scale. The lifecycle spine: SCHEMA → ACCESS → TRIAL → EVALUATE → IMPROVE → CODIFY → TEST → SKILLIFY → BULK → MONITOR. State is tracked in a durable JSON manifest (see MANIFEST-PATTERN.md) so any crash, session boundary, or subagent fan-out resumes from ground truth instead of memory.
alirezarezvani/claude-skills
app-store-optimization
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist
dotnet/skills
migrate-vstest-to-mtp
Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP). Use when user asks to "migrate to MTP", "switch from VSTest", "enable Microsoft.Testing.Platform", "use MTP runner", set OutputType=Exe only for test projects in Directory.Build.props, or mentions EnableMSTestRunner, EnableNUnitRunner, or UseMicrosoftTestingPlatformRunner. USE FOR: MTP behavioral differences vs VSTest (exit code 8, zero tests discovered, --ignore-exit-code, TESTINGPLATFORM_EXITCODE_IGNORE); centralizing