This document is the canonical central rule for when a draft pull request is published, what may wait until after publication, and what Ready for review / completion still requires. Entrypoints in this repository link here. Tool plugins add only a short pointer; they do not redefine the standard.
Session-specific review waivers are not a global default.
Use these terms only. Do not call an earlier stage finished, done, or completed.
| Term | Meaning |
|---|---|
| Draft | Open GitHub pull request with isDraft=true. Never finished, done, or completed — even when tests pass. |
| Ready for review | Leave-draft transition (gh pr ready / isDraft=false) after all required checks and reviews on the exact clean signed final head. Still not merged and still not completed. |
| Merged / completed | Only after a verified human merge. Ledger task-done, checklist closes, spine states, and Ready for review are not proof of pull-request completion. |
A draft plus local tests is still not Ready for review and not completed.
As soon as the first signed task commit exists on the feature branch, push that commit and open a draft pull request immediately through the existing activity and scoped executor flow (pr.open, then agent github pending or the equivalent knock-driven scan).
- Reuse a matching open pull request for the same session, repository, and base; do not open a second one.
- Do not wait for full local test suites, A38 author reports, live joins, or independent reviews before that first draft publication.
- Before publication, perform only the basic secret, scope, and signature checks needed to publish safely. Those are not full test gates.
- An explicit stop, or missing permission to publish, blocks draft publication and must be reported promptly. Do not invent a substitute path.
Early draft publication does not mark spine checklist keys such as local_check_pass or pushed as passed, and it does not claim tests, A38 evidence, or reviews are complete. agent allow --action pr-create already permits draft creation; no separate runtime switch is required for this rule.
The spine checklist key pushed remains final validated push bookkeeping after the applicable measured checks for that workflow step. Early draft publication via pr.open is allowed independently of that checklist close.
Work continues on the same draft. Proposal measurement for A38 migrations or bootstrap may follow publication; it is not a precondition for opening the draft.
Applicable full tests, A38 author evidence unless a report waiver applies (write collaborator, independently confirmed markdown-only, or independently confirmed guard-docs), current-base policy checks, and the live join remain required for Ready for review on the exact clean signed final head. Markdown-only and independently confirmed guard-docs waive the local suite and author report; they do not hold Ready through red CI. Independently confirmed guard-docs change sets also do not fail the .github/workflows/a38-guard.yml bytes-changed policy line; other workflow paths still need maintainer policy approval. Independently required GitHub checks and repository review gates also remain required unless a separately granted deviation says otherwise. Do not encode a one-off session waiver as the standing rule. Completion still requires human merge.
Hosted CI and other applicable checks may fail. There is no promise that CI never fails.
Red CI is a blocker owned by the author:
- Inspect the actual failing logs for the current head.
- Fix the root cause.
- Rerun the actual affected checks on the current head.
- Do not hide, skip, or override failures.
- Do not claim green from local results alone when the required hosted check is red or missing.
Pending checks must be labeled pending. Do not fabricate a pass.
The blocking A38 / report (<target>) commit status is omitted on drafts without hard_fail that are not independently confirmed markdown-only and not independently confirmed guard-docs (not pending, not failure, and not a fabricated pass). Independently confirmed markdown-only drafts without hard_fail post enforce success (pass: markdown-only change set; A38 report not required) on that context. Independently confirmed guard-docs drafts without hard_fail post enforce success (pass: guard-docs change set; A38 report not required) on that context. Other drafts without hard_fail still omit the blocking status. On hard_fail the guard posts failure on that context against the PR head even while draft, so the Checks box is red. A leftover failure whose description starts with hard_fail: is success-cleared on the next draft reconcile that is no longer hard_fail; that is not a test-pass claim. Other enforce failures on the same head stay. observe stays advisory and unchanged. Configured not_applicable exclusions may still write success on that context only to clear a wrong prior status; that is not a test-pass claim. Real red hosted CI remains a blocker. Once the pull request is Ready for review, A38 publishes success for valid author-report evidence, or for an author-report waiver: the write-collaborator waiver (author is a GitHub User who currently has write/maintain/admin on the target, or the latest User ready_for_review actor does), independently confirmed markdown-only, or independently confirmed guard-docs. Those waivers cover only the author-report gate—not policy, workflow inventory, or migration failures, except that independently confirmed guard-docs skips the bytes-changed line for .github/workflows/a38-guard.yml only. Only the write-collaborator waiver holds Ready through red CI. Only User actors can grant it; bots/apps and association strings cannot; timeline 401/403/404 yields no waiver without crashing assessment.
Ready for review does not start GitHub Actions. Where the repository opts in to bot-owned fork workflow approval, the trusted guard approves held fork runs only after a fresh A38 enforce pass on this head. That approval starts execution; it is not itself a green check. The merger does not click Approve and run workflows.
Repositories can enable the guard's continuous readiness reconciliation.
Lifecycle Draft/Ready writes run only on A38-enforced targets; excluded bases (for example a develop→main release PR) are left untouched. Exact target main is out of scope for A38 when it is not the repository default branch, not only when listed in a38.exclude. A repository whose default branch is main may list main in a38.enforce.
An open Ready PR on an enforced target returns to Draft with an explanatory comment when required CI
is missing, queued, running, blocked or failed, or GitHub confirms merge conflicts.
The visible comment names the actual blocker(s), not a canned "CI or merge conflicts" alternative.
A write collaborator holds Ready through missing or red CI only (author is a GitHub User with write on a Ready PR, or the latest User ready_for_review actor — or the matching webhook sender — has write). In that hold, lifecycle leaves the PR Ready (action: unchanged) and still records the CI reasons for audit; it does not post a draft-intent comment or call the draft transition. Confirmed merge conflicts always return Ready to Draft, including while that write hold would otherwise apply. If a lagged timeline caused an auto-draft, the next reconcile still sees the Ready actor on draft and restores Ready only when GitHub mergeable is true and there are no conflicts, even when CI is red. No-write authors who mark Ready without a valid author report still fail A38 and are still auto-drafted unless the markdown-only or guard-docs waiver applies.
After the CI authorized by the bot succeeds, it can restore Ready only with
current A38 evidence and confirmed mergeability (including a write-collaborator enforce pass without a report: author or latest User Ready actor). Required workflows, conditional
CI scope, control-workflow exclusions and the polling schedule belong to the
adopting repository. This does not rerun tests, submit review approvals or merge.
If the repository's guard integration is known to be defective, require a verified rollout of the fixed integration before Ready for review. Do not instruct merging through red statuses.
Stay draft until Ready for review is earned on the exact clean signed final head:
- Full applicable tests for that head (repository rules and, when adopted, the complete A38 policy run and local verification).
- For A38 adopters: author report publication (unless waived because the author or the latest human Ready actor currently has write/maintain/admin on the target, or the change set is independently markdown-only or independently confirmed guard-docs), current-base (or exact approved head) policy checks, and the live join required by a38.md and a38-guard.md.
- Independently required GitHub checks on this head (
skippedandcancelledare not green unless the workflow documents that skip). Independently confirmed README-only, markdown-only, or guard-docs file inventories (same fail-closed exceptions as a38-guard.md) also allow a completed required check to concludeskippedorneutral, and they accept a listed required check that is missing from the latest workflow suite (including nested E2E on another suite). A verified author A38 report on this head may treat a matching completed required check that concludedskippedorneutralas green; it does not waive a missing check. Guard-docs is an inventory waiver, not a posted-report authorization.cancelled, failed, and pending required checks still block. Inspect both the PR check rollup and the current-head workflow-run inventory:action_requiredruns may be absent from the check rollup. A38 equivalence covers only the jobs in its active policy; it does not replace independently required security or other GitHub-only checks. Bot authorization to start a run is not a successful run. - Independent required reviews and approvals per the attached skills and the target repository's written rules.
- Then the Ready comment / leave-draft steps those rules define (
isDraft=false).
agent allow --action pr-ready only checks task state when spine is attached; it is not itself the leave-draft verdict. Leaving draft is Ready for review, not pull-request completion.
A human merges. The client never merges. Report the pull request as completed only after that merge is verified.
- CONTRIBUTING.md — repository contributing contract; defers lifecycle timing to this file
- AGENTS.md — short agent entrypoint
- DESIGN.md — product rules; error-fix opens drafts under this lifecycle
- Spine and pr-review skills — checklist bookkeeping and review gates
- a38.md / a38-guard.md — A38 measurement, report, and Ready join (draft timing follows this lifecycle)