How we built a software factory to drive Astro’s GitHub issue count to zero¶
Summary¶
Cloudflare describes Astro’s automated issue-triage factory: a reusable agent skill runs in GitHub Actions, isolates reproduction, diagnosis, verification, and repair into sequential subagents, and passes evidence forward in report.md. The workflow stores its durable state in GitHub’s own issue labels and comments rather than in a separate database. When a fix is found, it publishes a pkg.pr.new preview for the reporter to try before opening a pull request. Over several months this process reduced Astro’s open issues from more than 200 to about 30 without bulk-closing or ignoring reports. (Source: sources/2026-08-04-cloudflare-astro-issue-triage)
Key takeaways¶
-
A narrow agent skill is a safer starting unit than an unconstrained software factory. Astro first encoded its existing manual triage procedure as a locally testable skill, then reused the exact harness inside GitHub Actions. The skill’s stages are reproduce, diagnose, verify, and fix. (Source: sources/2026-08-04-cloudflare-astro-issue-triage)
-
Stage isolation counters solution-forcing bias. Reproduction, diagnosis, verification, and fixing execute in separate subagents. Each writes findings into
report.md, so later stages receive evidence rather than an unexamined earlier conclusion. (Source: sources/2026-08-04-cloudflare-astro-issue-triage) -
GitHub labels and comments can be the workflow’s durable state store. New issues begin as
triage needed; a reporter-confirmed repair reachesfix verified. The automation reads the labels and issue-comment history to recover its position, rather than maintaining a separate state database. (Source: sources/2026-08-04-cloudflare-astro-issue-triage) -
Reporter verification is an explicit gate between a candidate repair and a pull request. The workflow publishes a preview release with
pkg.pr.new, posts logs and installation directions to the issue, and only opens the linked PR after the original reporter confirms the patch. (Source: sources/2026-08-04-cloudflare-astro-issue-triage) -
Agent mistakes are treated as maintainability telemetry. Repeated incorrect edits exposed opaque component boundaries, missing rationale comments, or insufficient tests. A Hot Module Replacement incident stopped recurring after the team added a comment explaining a fragile condition and regression coverage around it. (Source: sources/2026-08-04-cloudflare-astro-issue-triage)
-
The workflow is deliberately decoupled from the Astro monorepo. Moving it into the standalone
withastro/triagebot-actionrepository made upgrades to Flue and workflow changes testable before they affected the live project. (Source: sources/2026-08-04-cloudflare-astro-issue-triage) -
The runtime is generalized beyond GitHub. Cloudflare frames Flue as a platform- and model-agnostic durable-agent framework: GitHub issues are one event source, alongside possible Slack, cron, and webhook triggers. (Source: sources/2026-08-04-cloudflare-astro-issue-triage)
Architecture and workflow¶
GitHub issue (triage needed label)
→ reusable triage skill in GitHub Actions
→ reproduce subagent → report.md
→ diagnose subagent → report.md
→ verify subagent → report.md
→ fix subagent → failing regression test + patch
→ pkg.pr.new preview + logs + install instructions
→ reporter validates on their project
→ issue label: fix verified
→ linked pull request
The GitHub issue is both the user-facing collaboration surface and recovery record: labels select a workflow state, comments retain the evidence and next action, and a later invocation reconstructs state from those native objects. (Source: sources/2026-08-04-cloudflare-astro-issue-triage)
Operational evidence¶
| Measure | Reported value |
|---|---|
| Astro open issues before the workflow | More than 200 |
| Astro open issues at publication | About 30 |
| Repository age without reaching zero open issues | More than 5 years |
| Triage stages | 4: reproduce, diagnose, verify, fix |
| First-stage outcome | A locally testable skill reused in GitHub Actions |
| Triage deployment model | Isolated subagents running in GitHub Actions |
Systems and concepts extracted¶
- triagebot-action is Astro’s standalone, reusable GitHub Action packaging the workflow so it can be tested and upgraded independently of the application repository.
- Flue generalizes the event-triggered, isolated-agent workflow beyond GitHub and beyond a single model provider.
- pkg.pr.new is the package-preview release surface used before a candidate fix becomes a pull request.
- Issue labels as workflow state captures the use of labels plus comment history as a durable, human-auditable workflow record.
- Agent failures as codebase-quality signal captures the article’s diagnostic claim: recurring agent failure should lead to improved boundaries, documentation, or tests rather than merely better prompts.
- Sequential isolated agent stages with report handoff is the bias-containment mechanism for the triage skill.
- Preview-package reporter-verification gate keeps deployment confidence tied to the issue reporter’s actual environment.
Caveats¶
- The article does not disclose workflow throughput, success rate, time-to-fix, per-issue cost, false-positive rate, or the denominator behind the reported backlog reduction.
- It names
report.mdas the handoff artifact but not its schema, retention policy, tamper controls, or how conflicting stage conclusions are reconciled. - Labels and comments make recovery transparent but the post does not describe idempotency, concurrent-invocation control, label-transition authorization, or rate-limit handling.
- The supplied Action configuration contains distinct read and write GitHub tokens plus Cloudflare credentials, but the article does not state their permissions, secret exposure boundaries, sandbox constraints, or protections against prompt injection in issue content.
- A reporter-confirmed preview is stronger than agent-only testing, but it is not a substitute for maintainer review, CI, release policy, or compatibility testing across the broader user population.
- The claimed path to zero open issues is an expectation at publication, not a completed outcome.
Source¶
- Original: https://blog.cloudflare.com/astro-issue-triage/
- Raw markdown:
raw/cloudflare/2026-08-04-how-we-built-a-software-factory-to-drive-astros-github-issue-d71b37c2.md
Related¶
- systems/flue
- systems/astro
- systems/github-actions
- systems/triagebot-action
- systems/pkg-pr-new
- concepts/issue-labels-as-workflow-state
- concepts/agent-failures-as-codebase-quality-signal
- patterns/agentic-pr-triage
- patterns/issue-labels-as-workflow-state-machine
- patterns/sequential-isolated-agent-stages-with-report-handoff
- patterns/reproduce-to-regression-test-agent-skill
- patterns/preview-package-reporter-verification-gate