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.
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Une commande directe contourne le prompt de vérification. Examinez la source avant de l'exécuter.
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.