Implements the fully-automatic autopilot pipeline for issue #16: a per-issue label lets @pm auto-delegate without the human approval gate, and grants @qa a narrow, label-gated authority to merge the resulting PR and close the issue. Removing the label at any time is the kill switch; on any bug/doubt @qa halts and removes the label itself. Default (unlabeled) behavior is unchanged.
Changes
agent.yml: read fully-automatic label fresh every run (resolves origin issue from branch on PR threads); export autopilot/issnum.
agent.yml: @pm plans+delegates in one turn when autopilot is on (skips "reply yes" gate).
agent.yml: @qa gets MERGE_PR (merge PR + close issue) and HALT_AUTOPILOT (remove label + hand back) markers; merge failures safely drop the label and report.
agent.yml: after a dev PR opens in autopilot, auto-trigger @qa on the PR thread via AGENT_TOKEN.
agent.yml: strip new markers from replies; add del_autopilot_label() helper (deletes label by ID).
AGENTS.md: narrow carve-out to the "never merge" golden rule + new Autopilot section.
NOTE: requires TOKEN_QA to be granted write+merge scope (provisioning step, not code).
## Summary
Implements the `fully-automatic` autopilot pipeline for issue #16: a per-issue label lets `@pm` auto-delegate without the human approval gate, and grants `@qa` a narrow, label-gated authority to merge the resulting PR and close the issue. Removing the label at any time is the kill switch; on any bug/doubt `@qa` halts and removes the label itself. Default (unlabeled) behavior is unchanged.
## Changes
- `agent.yml`: read `fully-automatic` label fresh every run (resolves origin issue from branch on PR threads); export `autopilot`/`issnum`.
- `agent.yml`: `@pm` plans+delegates in one turn when autopilot is on (skips "reply yes" gate).
- `agent.yml`: `@qa` gets `MERGE_PR` (merge PR + close issue) and `HALT_AUTOPILOT` (remove label + hand back) markers; merge failures safely drop the label and report.
- `agent.yml`: after a dev PR opens in autopilot, auto-trigger `@qa` on the PR thread via `AGENT_TOKEN`.
- `agent.yml`: strip new markers from replies; add `del_autopilot_label()` helper (deletes label by ID).
- `AGENTS.md`: narrow carve-out to the "never merge" golden rule + new Autopilot section.
- NOTE: requires `TOKEN_QA` to be granted write+merge scope (provisioning step, not code).
---
Resolves #16 · 🤖 @lead
I'll start by reading AGENTS.md and understanding the current state of the repository.
The task is clear: rename the label fully-automatic to auto throughout the codebase. Let me find all occurrences.
Let me look at the agent.yml context around these lines to make sure I do proper replacements, especially the jq selectors and prose.
The replacements are all straightforward string swaps of fully-automatic → auto. Since the label name string appears consistently (in jq selectors .name=="fully-automatic", prose, and backtick-quoted references), I'll do a global replace in both files.
All 19 occurrences replaced, none remaining. Let me verify the changes look correct in key spots.
All references correctly updated. Let me verify the diff and commit.
I'm on branch ai/issue-16, but this is issue #20. Per AGENTS.md, branches are named ai/issue-<N>. However, the workflow starts me on ai/issue-16 (the origin issue). Let me check the git status and the intended branch. The task references issue #16 (which this PR resolves) and issue #20 is the follow-up instruction. I'll commit on the current branch since that's where I was placed.
Done. Renamed the autopilot label from fully-automatic to auto across all 19 occurrences in agent.yml (jq label selectors, prose/comments, and agent-prompt text) and AGENTS.md (golden rule carve-out + Autopilot section). Committed and pushed to ai/issue-16.
BEGIN_PR_DESCRIPTION
Summary
Renames the autopilot opt-in label from fully-automatic to the shorter auto, as requested by the maintainer. This is a pure rename — no behavioral change to the autopilot pipeline.
Changes
agent.yml: update the label-name string in all jq selectors (.name=="auto"), the freshness-check gate, comments, del_autopilot_label helper, @qa merge/halt messages, and the @qa auto-trigger comment.
AGENTS.md: update the @qa merge carve-out in the golden rules and the Autopilot section to reference the auto label.
END_PR_DESCRIPTION
🤖 **@lead**
I'll start by reading AGENTS.md and understanding the current state of the repository.
The task is clear: rename the label `fully-automatic` to `auto` throughout the codebase. Let me find all occurrences.
Let me look at the agent.yml context around these lines to make sure I do proper replacements, especially the jq selectors and prose.
The replacements are all straightforward string swaps of `fully-automatic` → `auto`. Since the label name string appears consistently (in jq selectors `.name=="fully-automatic"`, prose, and backtick-quoted references), I'll do a global replace in both files.
All 19 occurrences replaced, none remaining. Let me verify the changes look correct in key spots.
All references correctly updated. Let me verify the diff and commit.
I'm on branch `ai/issue-16`, but this is issue #20. Per AGENTS.md, branches are named `ai/issue-<N>`. However, the workflow starts me on `ai/issue-16` (the origin issue). Let me check the git status and the intended branch. The task references issue #16 (which this PR resolves) and issue #20 is the follow-up instruction. I'll commit on the current branch since that's where I was placed.
Done. Renamed the autopilot label from `fully-automatic` to `auto` across all 19 occurrences in `agent.yml` (jq label selectors, prose/comments, and agent-prompt text) and `AGENTS.md` (golden rule carve-out + Autopilot section). Committed and pushed to `ai/issue-16`.
BEGIN_PR_DESCRIPTION
## Summary
Renames the autopilot opt-in label from `fully-automatic` to the shorter `auto`, as requested by the maintainer. This is a pure rename — no behavioral change to the autopilot pipeline.
## Changes
- `agent.yml`: update the label-name string in all jq selectors (`.name=="auto"`), the freshness-check gate, comments, `del_autopilot_label` helper, `@qa` merge/halt messages, and the `@qa` auto-trigger comment.
- `AGENTS.md`: update the `@qa` merge carve-out in the golden rules and the Autopilot section to reference the `auto` label.
END_PR_DESCRIPTION
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Implements the
fully-automaticautopilot pipeline for issue #16: a per-issue label lets@pmauto-delegate without the human approval gate, and grants@qaa narrow, label-gated authority to merge the resulting PR and close the issue. Removing the label at any time is the kill switch; on any bug/doubt@qahalts and removes the label itself. Default (unlabeled) behavior is unchanged.Changes
agent.yml: readfully-automaticlabel fresh every run (resolves origin issue from branch on PR threads); exportautopilot/issnum.agent.yml:@pmplans+delegates in one turn when autopilot is on (skips "reply yes" gate).agent.yml:@qagetsMERGE_PR(merge PR + close issue) andHALT_AUTOPILOT(remove label + hand back) markers; merge failures safely drop the label and report.agent.yml: after a dev PR opens in autopilot, auto-trigger@qaon the PR thread viaAGENT_TOKEN.agent.yml: strip new markers from replies; adddel_autopilot_label()helper (deletes label by ID).AGENTS.md: narrow carve-out to the "never merge" golden rule + new Autopilot section.TOKEN_QAto be granted write+merge scope (provisioning step, not code).Resolves #16 · 🤖 @lead
@lead please change fully-automatic to auto
🤖 @lead
I'll start by reading AGENTS.md and understanding the current state of the repository.
The task is clear: rename the label
fully-automatictoautothroughout the codebase. Let me find all occurrences.Let me look at the agent.yml context around these lines to make sure I do proper replacements, especially the jq selectors and prose.
The replacements are all straightforward string swaps of
fully-automatic→auto. Since the label name string appears consistently (in jq selectors.name=="fully-automatic", prose, and backtick-quoted references), I'll do a global replace in both files.All 19 occurrences replaced, none remaining. Let me verify the changes look correct in key spots.
All references correctly updated. Let me verify the diff and commit.
I'm on branch
ai/issue-16, but this is issue #20. Per AGENTS.md, branches are namedai/issue-<N>. However, the workflow starts me onai/issue-16(the origin issue). Let me check the git status and the intended branch. The task references issue #16 (which this PR resolves) and issue #20 is the follow-up instruction. I'll commit on the current branch since that's where I was placed.Done. Renamed the autopilot label from
fully-automatictoautoacross all 19 occurrences inagent.yml(jq label selectors, prose/comments, and agent-prompt text) andAGENTS.md(golden rule carve-out + Autopilot section). Committed and pushed toai/issue-16.BEGIN_PR_DESCRIPTION
Summary
Renames the autopilot opt-in label from
fully-automaticto the shorterauto, as requested by the maintainer. This is a pure rename — no behavioral change to the autopilot pipeline.Changes
agent.yml: update the label-name string in all jq selectors (.name=="auto"), the freshness-check gate, comments,del_autopilot_labelhelper,@qamerge/halt messages, and the@qaauto-trigger comment.AGENTS.md: update the@qamerge carve-out in the golden rules and the Autopilot section to reference theautolabel.END_PR_DESCRIPTION
@lead please change auto to autopilot
🤖 @lead — pushed an update to the PR:
🔧 activity — 22 tool calls
🔧 bash:
git branch --show-current && git status && git log --oneline -5🔧 bash:
grep -rn "auto" .gitea/workflows/agent.yml AGENTS.md 2>/dev/null | grep -iv "autopilot" | head -60🔧 bash:
grep -n '"auto"\|auto\|'"'"'auto'"'"'' .gitea/workflows/agent.yml AGENTS.md🔧 bash:
cd /workspace/ffaerber/agents && \ sed -i \ -e 's/autolabel/autopilotlabel/g' \ -e "s/'auto' label/'autopilot' label/g" \ -e 's/\.name=="auto"/.name=="autopilot"/g' \ -e 's/theauto/theautopilot/g' \ -e 's/(autolabel…🔧 bash:
cd /workspace/ffaerber/agents && grep -n '"auto"\|auto\|'"'"'auto'"'"'' .gitea/workflows/agent.yml AGENTS.md🔧 edit:
.gitea/workflows/agent.yml🔧 edit:
AGENTS.md🔧 bash:
cd /workspace/ffaerber/agents && \ echo "=== remaining bare 'auto' label refs ===" && \ grep -n '"auto"\|auto\|'"'"'auto'"'"'\|\*\*auto\*\*' .gitea/workflows/agent.yml AGENTS.md ; \ echo "=== new autopilot label refs ===" && \ grep -cn …🔧 bash:
cd /workspace/ffaerber/agents && git diff🔧 bash:
cd /workspace/ffaerber/agents && grep -n 'auto label' .gitea/workflows/agent.yml🔧 edit:
.gitea/workflows/agent.yml🔧 bash:
cd /workspace/ffaerber/agents && git add .gitea/workflows/agent.yml AGENTS.md && git commit -m "Rename autopilot label 'auto' to 'autopilot'" && git push origin ai/issue-16@lead please rebase from main
f6867ccedbtoef06da3ffe🤖 @lead — pushed an update to the PR:
🔧 activity — 54 tool calls
🔧 bash:
git branch --show-current && echo "---STATUS---" && git status && echo "---LOG---" && git log --oneline -5🔧 bash:
git fetch origin && echo "---MAIN LOG---" && git log --oneline origin/main -5 && echo "---MERGE BASE---" && git merge-base HEAD origin/main🔧 bash:
echo "=== commits on our branch not in main ===" && git log --oneline origin/main..HEAD && echo "" && echo "=== commits on main not in our branch (count) ===" && git log --oneline HEAD..origin/main | wc -l && echo "" && echo "=== files we c…🔧 bash:
echo "=== has agent.yml changed on main since merge-base? ===" && git log --oneline 25c915f..origin/main -- .gitea/workflows/agent.yml | head -40 && echo "" && echo "=== has AGENTS.md changed on main since merge-base? ===" && git log --onel…🔧 bash:
git rebase origin/main 2>&1 | head -40; echo "---RC=$?---"🔧 bash:
git diff --name-only --diff-filter=U && echo "---CONFLICT MARKERS---" && grep -n '^<<<<<<<\|^=======\|^>>>>>>>' .gitea/workflows/agent.yml | head -60🔧 read:
.gitea/workflows/agent.yml🔧 bash:
git rebase --abort && echo "aborted" && echo "---scripts dir on main---" && git ls-tree -r --name-only origin/main -- .gitea/workflows/scripts/🔧 bash:
git diff 25c915f..origin/main -- AGENTS.md | head -80🔧 bash:
git show 97ea6d9 --stat && echo "===================" && git show d4145d5 --stat && echo "===================" && git show f6867cc --stat🔧 bash:
git diff 25c915f..HEAD -- .gitea/workflows/agent.yml🔧 bash:
git show origin/main:.gitea/workflows/scripts/route.sh🔧 bash:
git show origin/main:.gitea/workflows/scripts/run-agent.sh🔧 bash:
git show origin/main:.gitea/workflows/scripts/publish.sh🔧 todowrite:
7 todos🔧 bash:
git rebase origin/main 2>&1 | tail -6; echo "---"; git status --short | head🔧 bash:
ls -la .gitea/workflows/scripts/ 2>&1 | head🔧 bash:
git checkout --theirs .gitea/workflows/agent.yml 2>&1; echo "note: --theirs during rebase = main (the rebased-onto). Verifying no conflict markers:"; grep -c '^<<<<<<<\|^>>>>>>>' .gitea/workflows/agent.yml🔧 bash:
git diff origin/main -- .gitea/workflows/agent.yml | head; echo "===should be empty above==="; grep -n 'AUTOPILOT\|steps.prep.outputs\|run-agent.sh\|publish.sh\|route.sh' .gitea/workflows/agent.yml🔧 bash:
git checkout origin/main -- .gitea/workflows/agent.yml && echo "took main's version" && git diff origin/main -- .gitea/workflows/agent.yml | head -3; echo "===empty diff means identical to main==="🔧 read:
.gitea/workflows/agent.yml🔧 edit:
.gitea/workflows/agent.yml🔧 edit:
.gitea/workflows/agent.yml🔧 read:
.gitea/workflows/scripts/route.sh🔧 edit:
.gitea/workflows/scripts/route.sh🔧 edit:
.gitea/workflows/scripts/route.sh🔧 read:
.gitea/workflows/scripts/run-agent.sh🔧 edit:
.gitea/workflows/scripts/run-agent.sh🔧 edit:
.gitea/workflows/scripts/run-agent.sh🔧 edit:
.gitea/workflows/scripts/publish.sh🔧 read:
.gitea/workflows/scripts/publish.sh🔧 read:
.gitea/workflows/scripts/publish.sh🔧 edit:
.gitea/workflows/scripts/publish.sh🔧 read:
.gitea/workflows/scripts/publish.sh🔧 edit:
.gitea/workflows/scripts/publish.sh🔧 edit:
.gitea/workflows/scripts/publish.sh🔧 bash:
grep -n 'autopilot\|fully-automatic\|auto\b\|MERGE_PR\|HALT_AUTOPILOT' AGENTS.md🔧 bash:
grep -rn 'fully-automatic\|"auto"\|auto' .gitea/workflows/ ; echo "===should be no stray label strings in scripts/yml (all should be 'autopilot')==="; echo "--- yaml lint sanity ---"; python3 -c "import yaml,sys; yaml.safe_load(open('.git…🔧 bash:
for f in route.sh run-agent.sh publish.sh; do bash -n ".gitea/workflows/scripts/$f" && echo "$f: syntax OK" || echo "$f: SYNTAX ERROR"; done🔧 bash:
git add .gitea/workflows/agent.yml .gitea/workflows/scripts/route.sh .gitea/workflows/scripts/run-agent.sh .gitea/workflows/scripts/publish.sh AGENTS.md && git status --short🔧 bash:
git rebase --continue 2>&1 | tail -15; echo "---RC/STATUS---"; git status --short | head🔧 bash:
GIT_EDITOR=true git rebase --continue 2>&1 | tail -15; echo "---STATUS---"; git status --short | head🔧 bash:
grep -n '^<<<<<<<\|^=======\|^>>>>>>>' .gitea/workflows/agent.yml🔧 bash:
git checkout --ours .gitea/workflows/agent.yml && grep -c '^<<<<<<<' .gitea/workflows/agent.yml && echo "markers gone" && grep -n 'fully-automatic\|autopilot' AGENTS.md🔧 bash:
grep -n 'fully-automatic\|autopilot\|auto\b' AGENTS.md🔧 bash:
git add .gitea/workflows/agent.yml AGENTS.md && GIT_EDITOR=true git rebase --continue 2>&1 | tail -12; echo "---STATUS---"; git status --short | head🔧 bash:
git checkout --ours .gitea/workflows/agent.yml && grep -c '^<<<<<<<' .gitea/workflows/agent.yml && echo "---AGENTS.md now:---" && grep -n 'auto\b\|autopilot' AGENTS.md🔧 bash:
grep -n 'auto\|autopilot' AGENTS.md🔧 bash:
git add .gitea/workflows/agent.yml AGENTS.md && GIT_EDITOR=true git rebase --continue 2>&1 | tail -8; echo "---STATUS---"; git status🔧 bash:
echo "=== commits on branch vs main ===" && git log --oneline origin/main..HEAD && echo "" && echo "=== files changed vs main ===" && git diff --stat origin/main...HEAD🔧 bash:
git diff origin/main...HEAD🔧 todowrite:
1 todos🔧 bash:
git push --force-with-lease origin ai/issue-16 2>&1 | tail -15🔧 todowrite:
0 todos