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

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 .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.