disinto-ops/sprints/bug-report-pipeline.md

54 lines
4 KiB
Markdown

# 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 `.netrc` on 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.