When to stop and ask a human for input. Use when a PR is ready to merge, when changing CI interfaces or secrets, when a change may break consumers, or before any upstream write.
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Um comando direto ignora o prompt de revisão. Verifique a origem antes de executá-lo.
Decide when to stop for Design, Security, Breakage, or Merge review.
entry_point
docs/skills/meta/human-gates/SKILL.md
category
meta
mcp_compliance_level
partial
status
active
dependencies
[]
tags
["gates","governance","escalation"]
description
When to stop and ask a human for input. Use when a PR is ready to merge, when changing CI interfaces or secrets, when a change may break consumers, or before any upstream write.
Signal: open a breakage issue listing every affected repo before making the change.
Merge gate
The review workflow is: submit to lab → wait for ghost-lab → merge on pass, fix on fail.
ghost-labis posted on testsuite PRs and must be green before merging.
It was genuinely dead for a long stretch — every testsuite lab workflow was
rejected at Argo admission in 0s because bluefin-qa-pipeline's pipeline
template declared image-digest required with no default while pr-poller
emitted it as an empty string, and Argo normalises an empty string to absent.
projectbluefin/lab#606 fixed that, and #607/#608/#610/#611 fixed
nested-target provisioning. Statuses have posted reliably since
(observed on testsuite #724, #726, #727, #729). Any older doc, comment,
or issue telling you "nothing will arrive" is stale — do not act on it.
The gate to apply:
GitHub Actions CI green — Lint & syntax, Behave dry-run,
Quarantine age (pr-validate.yml), pytest (unit-tests.yml),
docs-validate (docs-validate.yml). These are the required checks on the
main — merge queueruleset, which also enables the merge queue, squash
method, and ALLGREEN grouping. gh api repos/projectbluefin/testsuite/branches/main/protection returning
404 Branch not protected is expected — the configuration is a ruleset, not
legacy branch protection.
ghost-lab green. The five GHA checks are not sufficient on their own:
none of them boots a VM, so GNOME Shell/AT-SPI timing, GDM state, bootc
upgrade/rollback, and oomd regressions are invisible to them. ghost-lab is
the only pre-merge signal that runs smoke,common against a real KubeVirt VM.
If it reports failure, fix the PR and let the poller re-run — do not merge
past it.
Human approval to merge. Prepare the PR, then ask; do not merge on your
own judgement.
ghost-lab is a commit status, not a check run. It therefore does not
appear in the check-runs API and is easy to miss in tooling that only reads
check runs. Query the status API directly:
The merge queue re-runs the required GHA checks on the merge commit and lands
automatically on green. Human lgtm is not required for normal test/docs/fix
PRs — only for:
A merged fix is still not a working fix. Three consecutive fixes to the lab
status reporter each merged green and each left the gate posting nothing; the
fix that actually worked was confirmed by observing statuses on four PRs, not
by reading a diff. Verify a gate by observing a real signal end to end — the
same failure class as a test suite that reports green while silently skipping
every scenario.
Upstream namespace prohibition (read-only)
NEVER create issues, PRs, comments, forks, or any other programmatic write to any
ublue-os/* repository. Read-only gh api calls are permitted. If a task requires
writing to ublue-os, stop and tell the human to report it manually.
projectbluefin/common — issues only
projectbluefin/common is a sibling factory repo, not a read-only upstream. You
MAY file an issue there to report a factory-wide learning or a needed contract
change — that is the escalation path AGENTS.md prescribes. You MAY NOT push
branches, open PRs, or edit files there: a change to common is a human
decision gate. Report it, do not make it.
KDE properties — strictly read-only, no exceptions
All KDE-owned properties are read-only for every agent and every automated process:
invent.kde.org (GitLab) and invent-registry.kde.org
bugs.kde.org, discuss.kde.org, community.kde.org
KDE Matrix rooms (#kde-qa:kde.org, #plasma:kde.org, #kde-linux:kde.org) and mailing lists
The KDE/* GitHub mirrors
Permitted: read-only HTTP GET, read-only API calls, git clone, git fetch, reading source
and documentation.
Forbidden — no exceptions, and no "draft it for review" carve-out:
Creating or editing issues, merge requests, pull requests, comments, reviews, snippets, wiki
pages, forks, branches, tags, or releases
Any authenticated write, push, or POST/PUT/PATCH/DELETE to a KDE host
Posting to KDE Matrix rooms, forums, mailing lists, or bug trackers
Registering accounts or requesting access
This applies to sub-agents, background agents, and scheduled jobs, not only the primary session.
When work identifies a genuine upstream contribution, produce the patch or report locally and
hand it to a human to submit. Describe it as a recommendation, never as an action taken or
authorized.
Rationale: KDE is an upstream community this project actively wants to collaborate with. A
single unauthorized automated write would cost more trust than any test contribution could earn.
Red Flags
Stop if you catch yourself doing any of these:
Waiting for a ghost-lab status that will never arrive. Blocking a ready PR on the dead lab gate.
Restoring a gate because its fix merged. A merged fix is not a working fix; restore only on an observed signal.
Merging your own PR without an explicit human approval, or reaching for --admin to bypass the queue.
Concluding main is unprotected because branches/main/protection returns 404 — the rules live in a ruleset.
Copying live state (PR numbers, dates, current status) into a skill file instead of the tracking issue.
Opening an issue, PR, comment, or fork in ublue-os/* or any KDE property "just as a draft".
Removing an e2e.yml input without searching for callers first.
Verification
Before asking for merge approval, confirm each of these:
gh pr checks <N> --repo projectbluefin/testsuite # Lint & syntax, Behave dry-run, pytest all pass
gh pr diff <N> --repo projectbluefin/testsuite # no secrets, no permissions widening, no e2e.yml input removal
gh api repos/projectbluefin/testsuite/commits/$(gh pr view <N> --repo projectbluefin/testsuite --json headRefOid --jq .headRefOid)/status \
--jq '.statuses[].context'# empty = lab gate still dead; `ghost-lab` = restore the lab-first gate
Real-VM-affecting change? A manual lab run result is pasted in the PR, or the PR says explicitly that it has no real-VM coverage.
Touches e2e.yml, AGENTS.md, or CODEOWNERS? A human lgtm is recorded on the PR.