-
Notifications
You must be signed in to change notification settings - Fork 8
Description
🤖 Axon Agent @gjkim42
Summary
The axon-triage TaskSpawner classifies issues and checks validity, but stops short of completing the full triage lifecycle. This leaves 3-4 manual label operations for the maintainer on every triaged issue, creating a human bottleneck that undermines the autonomous workflow. This issue proposes concrete prompt changes to close the gap.
Problem
The current triage workflow has a disconnect between what the agent does and what's needed for the issue to flow through the system:
What triage does today:
- Adds
kind/*label, removesneeds-kind✅ - Posts a triage comment with status/evidence ✅
- Adds
axon/needs-inputlabel ✅
What's still needed for an issue to proceed (all manual):
- ❌ Priority assessment — Maintainer must decide
priority/imporant-soonvspriority/import-longtermvspriority/backlog - ❌ Actor assignment — Maintainer must decide whether to add
actor/axon(for the worker agent) or leave for a human - ❌ Triage status update — Maintainer must swap
needs-triage→triage-accepted - ❌ Remove
needs-actor— Must be cleaned up manually
Current state of open issues:
- 30 issues with
needs-triagelabel are sitting unprocessed - Many have
axon/needs-input(meaning triage ran) but still carryneeds-triage,needs-priority, andneeds-actor - Only ~10 issues have
triage-accepted— all assigned by the maintainer manually
This means the triage agent creates work for the maintainer instead of removing work from the maintainer. Each triage run requires the maintainer to:
- Read the triage comment
- Decide on priority
- Decide on actor
- Apply 3-4 label changes
With 30+ untriaged issues, this manual step is clearly the bottleneck.
Proposed Changes
1. Add priority recommendation to triage output
Add a new task to the triage prompt:
### 5. Assess priority
Based on your analysis, recommend a priority level:
- `priority/imporant-soon` — Blocks adoption, user-facing bug, or security issue
- `priority/import-longterm` — Valuable improvement but not urgent
- `priority/backlog` — Nice to have, low impact
Apply the label:
`gh issue edit {{.Number}} --add-label <priority-label> --remove-label needs-priority`
Why this is safe: Priority can always be overridden by the maintainer. A wrong priority is much better than no priority (which is the current state for 30 issues).
2. Add actor recommendation to triage output
Add actor assessment logic:
### 6. Recommend actor
Determine whether this issue can be handled autonomously by Axon:
- `actor/axon` — The issue is a concrete code change, documentation fix, or
configuration update that an AI agent can implement. The scope is clear and
the acceptance criteria are verifiable (tests pass, docs are accurate, etc).
- Leave `needs-actor` — The issue requires architectural decisions, human
judgment, community input, external dependencies, or access Axon doesn't have.
Criteria for `actor/axon`:
- Is the issue a specific bug fix, docs improvement, or feature with clear scope?
- Can the fix be verified by running `make test` or `make verify`?
- Does it NOT require: new CRD design, breaking API changes, infrastructure access,
or subjective design decisions?
If recommending `actor/axon`:
`gh issue edit {{.Number}} --add-label actor/axon --remove-label needs-actor`
Why this is safe: The axon-workers spawner already uses excludeLabels: [axon/needs-input], so even if the triage agent adds actor/axon, the worker won't pick it up until a human removes axon/needs-input. This preserves the human review checkpoint.
3. Complete the triage lifecycle labels
Update the label management at the end:
After posting the comment:
- Mark triage as complete:
`gh issue edit {{.Number}} --add-label triage-accepted --remove-label needs-triage`
- Add `axon/needs-input` so a maintainer can review:
`gh issue edit {{.Number}} --add-label axon/needs-input`
4. Update triage comment format
## Axon Triage Report
**Kind**: <kind label applied>
**Priority**: <priority label applied> — <one-line justification>
**Actor**: `actor/axon` / `needs human` — <one-line justification>
**Status**: STILL VALID / ALREADY FIXED / OUTDATED / DUPLICATE
**Evidence**:
- <concise explanation with links>
**Duplicates found**: #X (reason), #Y (reason) — or "None found"
**Recommendation**: KEEP OPEN / CLOSE (with reason)
Impact
With these changes, the maintainer's triage review becomes:
Before (current):
- Read triage comment
- Assess priority → apply label
- Assess actor → apply label
- Swap needs-triage → triage-accepted
- Remove needs-actor
- Keep or remove axon/needs-input
After (proposed):
- Read triage comment (now includes priority + actor recommendation)
- Override priority/actor if needed (usually not needed)
- Remove
axon/needs-inputto approve
This reduces manual work from 5 label operations to 1, and the remaining operation (remove axon/needs-input) is the intentional human approval gate.
Why Not Just Remove the Human Gate?
The axon/needs-input label after triage should remain. Priority and actor recommendations can be wrong, and the consequences of a wrong actor/axon (wasting an Opus task run on an issue it can't solve) are real costs. The improvement here is making the human review step trivial (just confirm or override two labels) instead of requiring fresh analysis.
Backward Compatibility
This is a prompt-only change to self-development/axon-triage.yaml. No API, CRD, or controller changes required. The only change is to the promptTemplate field.
Related Issues
- Workflow: Self-development cron spawners lack resilience and quality controls #287 — Self-development resilience (different scope: covers cron spawner retry and feedback loops, not triage completeness)
- Workflow: Spawner should prioritize work items when maxConcurrency limits selection #435 — Spawner prioritization (runtime ordering; this proposal is about triage-time classification)
- Cron task to update self-development itself #429 — Self-development update cron (complementary: the self-update agent could tune triage criteria over time)