4 KiB
Sprint pitch: bug-report pipeline — inbound classification + auto-close
Vision issues
- #388 — end-to-end bug-report management — inbound classification, reproduction routing, and auto-close loop
What this enables
After this sprint, bug-reports flow through a cheap classification gate before reaching the expensive reproduce-agent. Inspection-class bugs (stack trace cited, cause obvious from code) go straight to dev-agent — saving the full Playwright/MCP environment spin-up. The auto-close loop fires reliably, and upstream Codeberg reporters get notified when their bug is fixed.
Today: every bug-report → reproduce-agent (expensive). After: only ambiguous bugs → reproduce-agent; obvious bugs → dev-agent directly.
What exists today
The pipeline is 80% built:
| Component | Status | Location |
|---|---|---|
| Gardener bug-report detection + enrichment | Complete | formulas/run-gardener.toml:79-134 |
| Reproduce-agent (Playwright MCP, exit gates) | Complete | formulas/reproduce.toml, docker/reproduce/ |
| Triage-agent (6-step root cause) | Complete | formulas/triage.toml |
Dev-poll label gating (skips bug-report) |
Complete | dev/dev-poll.sh |
| Auto-close decomposed parents | Complete (not firing) | formulas/run-gardener.toml:224-269 |
| Issue templates (bug.yaml, feature.yaml) | Complete | .forgejo/ISSUE_TEMPLATE/ |
| Manifest action system | Complete | gardener/pending-actions.json |
Reusable infrastructure: formula-session.sh, agent-sdk.sh, issue-lifecycle.sh label helpers, parse-deps.sh dependency extraction, manifest-driven mutation pattern.
Complexity
- 5-6 sub-issues estimated
- ~8 files touched across formulas, lib, and gardener
- Mostly gluecode — extending existing gardener formula, adding a classification step, wiring auto-close reliability, adding upstream notification
- One new formula step (inbound classifier in run-gardener.toml or a dedicated pre-check)
- No new containers or services — classification runs inside existing gardener session
Risks
- Classification accuracy — the cheap pre-check might route ambiguous bugs to dev-agent, wasting dev cycles on bugs it can't fix without reproduction. Mitigation: conservative skip-reproduction criteria (all four pre-check questions must be clean).
- Gardener formula complexity — run-gardener.toml is already the most complex formula. Adding classification logic increases cognitive load. Mitigation: classification could be a separate formula step with clear entry/exit gates.
- Upstream Codeberg notification — requires Codeberg API token in
.env.vault.enc. Currently in.netrcon host but not in containers. Needs vault action for the actual notification (AD-006 compliance). - Auto-close timing — if gardener runs are infrequent (every 6h), auto-close feedback loop is slow. Not a sprint problem per se, but worth noting.
Cost — new infra to maintain
- One new gardener formula step (inbound classification) — maintained alongside existing grooming step
- Bug taxonomy labels (bohrbug, heisenbug, mandelbug, schrodinbug or simplified equivalents) — 2-4 new labels
- No new services, cron jobs, or agent roles — everything runs within existing gardener cycle
- Codeberg notification vault action template — one new TOML in
vault/examples/
Recommendation
Worth it. The infrastructure is 80% built. This sprint fills the two concrete gaps (classification gate + auto-close reliability) with minimal new maintenance burden. The biggest value is avoiding unnecessary reproduce-agent runs — each one costs a full Claude session with Playwright MCP for bugs that could be triaged by reading code. The auto-close fix is nearly free (the logic exists, just needs the gardener to run reliably). Upstream notification is a small vault action addition.
Defer the statistical reproduction mode (Heisenbug handling) and bulk deduplication to a follow-up sprint — they add complexity without proportional value at current bug volume.