Related: filing issues, versioning, kernel skill
aiwg-pr(runaiwg show skill aiwg-pr)
A high-quality PR is focused, verified, policy-compliant, and reaches main with green CI. This guide covers the AIWG-specific delivery rules — branching strategy, the no-attribution rule, the CI-green-before-done discipline, and the release-time obligations.
Before you create a branch or open a PR, read the project's .aiwg/aiwg.config delivery.mode. Three modes, three workflows:
| Mode | Branch | PR | Closing |
|---|---|---|---|
direct |
No — commit straight to default_branch |
No PR | Closes #N in commit message |
feature-branch |
Branch per issue | No PR | Closes #N in commit on the branch |
pr-required |
Branch per issue | Required | Closes #N in PR body |
aiwg config get --project delivery.mode
# or
cat .aiwg/aiwg.config | jq -r '.delivery.mode'If mode: direct, do not open a PR. Commit directly to main with Closes #N in the message. The delivery-policy rule (kernel rule, always loaded) is authoritative.
The AIWG repo runs in direct mode — the May-2026 fix sweep (commits 6500e167, 497fcca7, 3f2b557b, d052aa2f, a50c1d76, ac61a2b8) landed straight to main with Closes #N per commit.
Every PR closes (or refs) an issue. If you don't have one:
- Search for existing matches:
aiwg run skill steward-prep-delivery -- "<topic>" - If none match, file via filing issues before drafting the PR
git checkout -b fix/{issue-number}-{slug}
# slug: short, lowercase, hyphenated derivation of the issue titleFor direct mode, skip this step.
Stay focused on the linked issue. Anti-patterns to avoid:
- "While I'm at it" — adding unrelated changes. Split into separate PRs/commits.
- Reformatting unrelated files mid-PR — send formatting as its own PR.
- Adding new dependencies without justification — note why in the PR body.
| Check | Command | Pass criterion |
|---|---|---|
| Typecheck | npx tsc --noEmit |
Clean (no output) |
| Tests | npm test |
All pass (or only pre-existing flaky perf tests fail; document the latter) |
| Lint | npm exec markdownlint-cli2 (for docs) |
Clean |
| Build | npm run build:cli |
Succeeds (catches dist/ vs src/ path drift) |
Don't skip these. The CI-failure-then-fix cycle in 497fcca7 → 3f2b557b was caused by skipping the local test run before push. Two pushes, one wasted CI cycle, easily prevented.
Use conventional commits: type(scope): subject
fix(area): one-line subject
Body explains WHY, not just what. The diff already shows what.
Reference the linked issue; for `direct` mode include `Closes #N`
so the issue auto-closes on push.
Verification:
- npx tsc --noEmit clean
- npm test — 6306 pass, 1 pre-existing flake (cli-perf cold-start)
- Manual: <smoke-test description>
Closes #N
Conventional commit types: feat, fix, chore, docs, refactor, test, perf, ci, build. Scope is the area (e.g., steward, sdlc,release, cli,docs).
The project no-attribution rule is universal across platforms. The commit/tag/PR body must not contain:
Co-Authored-By: Claude <…>(or any AI tool)Generated with [Claude Code]/ "Generated by Codex" / "Written by GitHub Copilot"- 🤖 emoji or any tool branding
The AI is a tool. Tools don't sign their output.
# For direct mode
git push origin main
# For feature-branch / pr-required
git push origin fix/{issue-number}-{slug}Use the template at .gitea/pull_request_template.md (or .github/pull_request_template.md). Required sections:
- Summary — one paragraph: what changed and why
- Linked issues —
Closes #N/Refs #N - Changes — bullets of meaningful changes (not file count)
- Verification — filled-in checklist showing typecheck/test/CI status
- Risk and rollback — even if "low / git revert"
- Policy reminders — delivery mode + no-attribution + CI-green-before-done
The body should be agent-readable: clear sections, specific paths, no marketing speak.
A commit isn't done until CI is green. After push, wait for the run on origin (Gitea). AIWG CI takes ~2 minutes.
If it fails:
- Diagnose the failure
- Fix the underlying issue — no
|| true, nocontinue-on-error: true, no test deletion. Seeanti-lazinessanddev-pipeline-safetyrules. - Commit the fix and wait again
- Don't declare the work done until green
Never leave main in a red state.
- The linked issue auto-closes via
Closes #N - If you imported a cross-tracker report, thank the original reporter in a closing comment on the source tracker (see filing issues § import flow)
- Update
CHANGELOG.mdif the change is user-visible — for releases, theflow-releaseskill handles this; for individual PRs that ship before the release, append to the unreleased section
When the PR is part of a release sequence, the flow-release skill handles the orchestration. The PR itself follows the same rules as any other PR, but the release flow adds extra gates:
- Version bump (
package.json+CHANGELOG.md+docs/releases/v{version}-announcement.md) - UAT for stable channel:
npm run uat— all 9 tests must pass - Tag creation, push to origin, optional GitHub mirror push
- npm dist-tag promotion
See flow-release for the full sequence. The .aiwg/release.config declares which gates apply.
- AI attribution lines — never. Universal rule.
--no-verifyor--no-gpg-sign— never bypass hooks. Fix the underlying issue.continue-on-error: trueon tests — never silence the smoke detector. Seedev-pipeline-safety.- Skipping CI green wait — if CI fails, fix it before declaring done.
- Bundling unrelated changes — split into focused PRs.
- Workarounds instead of root-cause fixes — see
anti-lazinessRule 9: "real fix over workaround". Closes #Nin a PR body fordirectmode — wrong; use the commit message instead.
If the verification gates fail and you can't fix them in 3 attempts, escalate per the anti-laziness recovery protocol. Don't take destructive shortcuts (skip tests, weaken assertions, etc.).
| Need to | Run |
|---|---|
| Check delivery mode | aiwg config get --project delivery.mode |
| Verify locally before push | npx tsc --noEmit && npm test && npm run build:cli |
| Run UAT (release prep) | npm run uat |
| Fetch full PR guide | aiwg show skill aiwg-pr |
| Drive a release | aiwg show skill flow-release |
- In-context kernel skill:
aiwg-pr(always loaded; same content as this doc, accessible to agents) - Issue companion: filing issues
- Templates:
.gitea/pull_request_template.md,.github/pull_request_template.md - Rules:
delivery-policy(kernel),no-attribution(kernel),anti-laziness,dev-pipeline-safety - Release flow:
flow-release - Versioning: versioning policy
- Origin: #1269 (templates infrastructure), #1264–#1268 (tester report sweep that codified this pattern)