Skip to content

Agent Labels

Autumn edited this page Oct 17, 2026 · 23 revisions

These are the labels the issue pipeline uses. ops.mjs creates these labels on each repo it runs on (ensureLabels). It puts them on issues and their PRs. The status labels are in the LABELS table (apps/issue-pipeline/src/labels.ts) and the stop labels in the STOPS table (src/stops.ts); test/labels.test.mjs pins the label names and the stops' order, so a rename updates that test too. When either table changes, update this page.

Status labels

Label Meaning What you do
(no agent: label) The issue is queued. Each lane takes the oldest waiting issue, one at a time. Nothing. Close the issue to keep the pipeline off it.
agent:working A lane has claimed the issue, or is racing other lanes for it (see the claim comments and Claims). Its stage and lease are in the state comment on the issue. Nothing. Don't push to its branch while it works.
agent:needs-info Triage posted questions it needs answered before work can start. Answer on the issue. A reply from an allowed user (allowedUsers) puts it back in the queue. If the PR's branch already holds work, the answered issue goes to review with every limit reset; otherwise it goes back through triage. Running the issue by number does not skip the wait.
agent:split The spec writer split the issue into 2 to 5 sub-issues. The pipeline closes the parent once every sub-issue merges. Nothing. Each sub-issue is worked on separately.
agent:merged The pipeline merged the PR (or found it merged) and finished its cleanup, or, for a change that lives only in the wiki, published the wiki and closed the issue. Nothing.

Stop labels

A stop means the issue failed a control: a limit or check it didn't pass. The issue and its PR get agent:stopped-<control>. Each stop also posts a coordinator comment on both, naming the control, what it checks, the reason, details, and how to resume. Sweeps leave a stopped issue alone. So do runs named or pinned to the issue, unless launched with takeStopped: true, and stage jobs (#251). Removing the label resumes the issue.

To resume any stop, do what the comment says, then remove the label. You may push to the branch first. The next sweep finds the issue's open PR by its branch name (agent/issue-<n>). It resumes at the stage that stopped, with the saved state carried and every limit reset, so no finished stage runs again (every-role-resumes, Axlog, 2026-10-16). A specced issue goes straight back to implement, which reads the earlier session's handoff and builds on the branch; it doesn't go through triage and spec again. A stage after review (rebase, checks, acceptance, security, merge) stands only on a review of the branch's current head: if anyone pushed since, or the claim kept unpushed commits, it goes back to review. A stop at review or fix whose review still stands goes on to rebase and verify. The plan and spec carry over, with the spec's files, which the orchestrator's file holds read. A state with no stopped stage saved, such as a lost one, restarts as before: at review if the branch holds work, or at rebase and verify if the review stands. Commits on the wiki's agent/issue-<n> that the wiki lacks count as branch work too, so such an issue continues at review even with no open PR or only the draft (#213). With no such wiki commits and no open PR, or only the draft PR's empty start commit, it goes back to triage and the implementer builds on the branch as it is (Axlog, 2026-10-15). To run it right away, see Run one issue now.

Security stops

The security review is the last review round. It runs after acceptance and just before merge, and it reads the full final diff. It judges what a change does, never the kind of file it touches. Its findings go through the usual fix rounds. These labels mean a finding was still open after those rounds.

Label The change would What you do
agent:stopped-user-harm harm the app's users, for example by exposing, leaking or destroying their data, breaking a safety feature, or misleading them Read the finding. Fix the branch, or change the issue if it asks for the harm.
agent:stopped-rights violate users' rights, for example privacy, consent, access to or deletion of their own data, accessibility, or fair treatment Same.
agent:stopped-financial-harm cause financial harm to users or the operator, for example wrong charges, bypassed spending limits, or unbounded paid API use Same.
agent:stopped-abuse-risk add a risk of abuse, for example an endpoint without auth or rate limits, privilege escalation, injection, or exposed secrets Same.

If you judge a finding wrong, merge the PR by hand. The next merge step treats a hand-merged PR as merged and cleans up.

Limits

Label Control What you do
agent:stopped-budget Under the orchestrator, a writer session's (implementer, fixer, CI fixer or conflict resolver) context went past its role's context budget (roleBudgets, capped by sessionTokenCap), so the watchdog sent its job SIGTERM and stopped the issue once it exited (#281); the stop comment names the session, its context size and its budget. The budget bounds one session's context, not the issue's spend: there is no issue token budget or rebase allowance any more (budgets-bound-context, Axlog, 2026-10-16), so an older stop of that kind can just be resumed. Remove the label to continue, or narrow or split the issue first. The next session continues from the branch's commits.
agent:stopped-review-rounds Blocking review findings were still open after maxFixRounds (2) fix rounds. Fix or answer the findings listed in the comment.
agent:stopped-fix-loop A fixed review finding came back, so the fixes are undoing each other. Decide which way the code should go, and say so on the issue or push it.
agent:stopped-check-fixes Checks still failed after maxCiFixes (2) check-fix attempts. Fix the failing check.
agent:stopped-sync-limit The base branch kept moving, and the branch was rebased maxSyncs times without merging. Remove the label; merge order usually clears this.
agent:stopped-conflict The conflict resolver's attempts (maxConflictFixes) ran out, or its resolution was rejected. A resolver is never refused for spend (budgets-bound-context). Rebase the branch by hand, or remove the label to retry.
agent:stopped-triage-limit Triage ran maxTriages (3) times without a decision the pipeline can act on. Make the issue clearer.
agent:stopped-too-large A writer session (the implementer, fixer, CI fixer or conflict resolver) ran out of room, and so did each continuation its stage was allowed (maxContinuations, default 1). Split or narrow the issue, or raise maxContinuations. The restart resumes the stage that stopped, with its continuations reset; the session reads the handoff and keeps the branch's work.

Judgments by an agent

Label Control What you do
agent:stopped-triage-rejected Triage judged the issue unsuitable for the pipeline, for example a design debate or a production incident. Rewrite the issue as a code change, or handle it yourself.
agent:stopped-not-doable The implementer found it can't do the issue as written, or the implementation changed nothing: no code and no wiki commits. Fix what the comment names in the issue.
agent:stopped-spec-files A restart past spec found that test or stub files the spec documents (its Tests section and Files list) are missing from the branch. The spec writer is responsible for those files (Axlog, 2026-10-16), so they go to neither the implementer nor a new spec. This stop applies only to a spec whose writer wrote its tests and stubs (spec-writes-failing-tests, #305). Until then, a restart lists the missing files in the issue's log and gives them to the implementer as unfinished work. Add the files the comment names to the branch, then remove the label.
agent:stopped-acceptance The acceptance verifier found the change doesn't fully do what the issue asks, and its finding was still open after the fix rounds or the fixer disputed it (#266). Push the missing part, or narrow the issue.
agent:stopped-checks-unrelated The check fixer judged the failing checks unrelated to this change, and left them alone. Fix the check on the base branch.

Integrity and GitHub

Label Control What you do
agent:stopped-branch-changed The PR branch changed outside the pipeline, so it stopped rather than overwrite the change. Remove the label. The next attempt reviews what is on the branch.
agent:stopped-no-ci requireCi is set and the PR has no required CI checks. Add required checks, or turn off requireCi.
agent:stopped-push-rejected GitHub rejected a push of the PR branch, for example a workflow file pushed without the token's workflow scope. In a fix round or a CI fix, a push op that fails before git pushes (for example, ops.mjs couldn't read its request) is retried once in the same sweep, and a second such failure stops as agent:stopped-error (#263). Fix the cause the comment names, such as gh auth refresh -h github.com -s workflow.
agent:stopped-merge-refused GitHub refused the merge, for example because of branch protection. Fix the cause, or merge by hand.
agent:stopped-job The issue's stage job died with no outcome (or after the orchestrator stopped it for silence) once more after the orchestrator's watchdog had restarted it maxResumes (2) times for that stage (#235). Read the job's runs/<owner>__<repo>/issue-<n>/job.log and session logs, fix the cause, then remove the label; the restarts count from zero again.
agent:stopped-error A pipeline step or agent session failed. Read the error and the run's logs under runs/<owner>__<repo>/issue-<n>/.

How stops get their label

The workflow sends ops.mjs a free-text reason, and for security stops a category too. ops.mjs uses the category when given, and otherwise takes the first STOPS row (stopFor) whose pattern matches the reason. agent:stopped-error catches everything else. A new stop reason in workflow.js needs a matching row in STOPS, on this page, and on GitHub (ensureLabels creates missing labels on the next stop).

Clone this wiki locally