You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
QuantEcon carries 266 open PRs across 209 repos (2026-08-03). A large share are mechanical — dependabot bumps, sync-generated batches, disposition debt — consuming maintainer attention far out of proportion to the judgment they require. Meanwhile the org already has the ingredients for doing this work responsibly with an agent: strong per-repo CI (quantecon-book-theme runs a 103-screenshot visual regression suite), the audit plugin family in QuantEcon/skills, the status-translations collect→JSON→Pages pattern, and prior bot-identity experience (quantecon-news-reporter[bot]).
This issue proposes a maintenance agent: a scheduled agent that triages every open PR org-wide, publishes its reasoning to an auditable GitHub-native decision log, and — only after its recommendations demonstrably track maintainer decisions — graduates to auto-merging a narrow, policy-defined class of PRs. It is a sibling of the existing automation family, and a data producer for both #328 (operational telemetry) and #321 (config reporting).
Illustrative case: book-theme #418 (webpack-dev-server 5→6, a major bump) — fully green incl. 103 visual regression tests, mergeable, untouched since Jul 27. The bottleneck is not information; it is a trusted process for saying "the checks that matter passed, the blast radius is understood, merge."
Design in brief
Judgment lives in the agent; authority lives in deterministic code. Five components:
Collector (deterministic, nightly) — GraphQL sweep of all open PRs → dated snapshot committed to a new status-maintenance repo (same shape as status-translations: cron → collector → committed JSON → Pages dashboard).
Triage agent (Claude, scheduled) — reads snapshot + policy; per PR writes a decision record (JSONL): verdict, lane, evidence (changelog delta × how the repo actually uses the package, CI nuance, advisories), risks, recommended action, policy + prompt version. Records are back-filled with the eventual human outcome, so agreement is measured with zero extra effort.
Policy file (human-owned, versioned) — maintenance-policy.yml: lanes, repo tiers, rate caps, cooldowns, promotion thresholds. The agent may propose changes via PR; it can never edit policy itself.
Actor (deterministic gate) — when enabled, re-validates in plain code every mechanical predicate of an "auto-merge eligible" claim (author, semver class, lockfile-only diff, required checks green — not skipped, cooldown, caps, no unresolved human comments) before calling the merge API. A hallucinated eligibility claim cannot merge anything.
Staged autonomy ladder: advise → measure agreement on the dashboard → delegate per-lane when a lane sustains ≥98% agreement over ≥30 decisions / 4 weeks (starting proposal) → any human revert/override freezes the lane pending review. Auto-merge is an earned end state, not a mode switch.
Safeguards for the auto-merge bar: supply-chain cooldown (released ≥5 days, no advisory since; advisory-driven bumps instead get expedited human review), per-repo/org daily merge caps, org-level kill switch variable, pre-written revert path + post-merge CI watch that auto-opens a revert PR and freezes the lane if main goes red.
Rollout
Phase 0 — prototype (no GitHub writes): scheduled Claude session produces a daily triage brief; lane definitions stabilize.
Config-drift observations the agent makes en route (e.g. dependabot groups lacking applies-to: security-updates — the cause of book-theme's eight ungrouped npm PRs) feed Centralized environment & config reporting for lecture series #321's weekly config-diff reporting.
book-theme: add an applies-to: security-updates group to dependabot.yml.
book-theme: clear the 9-PR dependabot batch as the agent's first supervised run (patch/minor transitive bumps are Lane A shape; #418 + advisory-driven ones are Lane B) — producing the first decision records.
Register the bot identity early so agent actions separate from personal PRs in every future metric.
Open questions
Merge method — squash everywhere or per-repo convention?
Lane D auto-close: ever enabled, or always human batch-approval?
Home for maintenance-policy.yml — meta or skills?
Promotion threshold (98% / 4 weeks / 30 decisions is a starting proposal).
Does the brief fold into the existing weekly report?
Translation-repo PRs: out of scope for v1, or triage-only summaries to translation leads?
Distilled from the v0.1 design document (2026-08-03, drafted with Claude in the QuantEcon Agents project — full doc has the architecture diagram, decision-record schema, data appendix with sources, and suggested first artifacts; attached below / available on request).
Summary
QuantEcon carries 266 open PRs across 209 repos (2026-08-03). A large share are mechanical — dependabot bumps, sync-generated batches, disposition debt — consuming maintainer attention far out of proportion to the judgment they require. Meanwhile the org already has the ingredients for doing this work responsibly with an agent: strong per-repo CI (quantecon-book-theme runs a 103-screenshot visual regression suite), the
auditplugin family in QuantEcon/skills, thestatus-translationscollect→JSON→Pages pattern, and prior bot-identity experience (quantecon-news-reporter[bot]).This issue proposes a maintenance agent: a scheduled agent that triages every open PR org-wide, publishes its reasoning to an auditable GitHub-native decision log, and — only after its recommendations demonstrably track maintainer decisions — graduates to auto-merging a narrow, policy-defined class of PRs. It is a sibling of the existing automation family, and a data producer for both #328 (operational telemetry) and #321 (config reporting).
The problem, measured (snapshot 2026-08-03)
Illustrative case: book-theme #418 (webpack-dev-server 5→6, a major bump) — fully green incl. 103 visual regression tests, mergeable, untouched since Jul 27. The bottleneck is not information; it is a trusted process for saying "the checks that matter passed, the blast radius is understood, merge."
Design in brief
Judgment lives in the agent; authority lives in deterministic code. Five components:
status-maintenancerepo (same shape asstatus-translations: cron → collector → committed JSON → Pages dashboard).maintenance-policy.yml: lanes, repo tiers, rate caps, cooldowns, promotion thresholds. The agent may propose changes via PR; it can never edit policy itself.Trust lanes (change class × repo tier gate every action):
Staged autonomy ladder: advise → measure agreement on the dashboard → delegate per-lane when a lane sustains ≥98% agreement over ≥30 decisions / 4 weeks (starting proposal) → any human revert/override freezes the lane pending review. Auto-merge is an earned end state, not a mode switch.
Safeguards for the auto-merge bar: supply-chain cooldown (released ≥5 days, no advisory since; advisory-driven bumps instead get expedited human review), per-repo/org daily merge caps, org-level kill switch variable, pre-written revert path + post-merge CI watch that auto-opens a revert PR and freezes the lane if main goes red.
Rollout
status-maintenancerepo + nightly collector Action + Pages dashboard; registerquantecon-maintenanceApp identity.audit-family skill from QuantEcon/skills); labels + verification comments in pilot repos (book-theme, actions, 1–2 sphinx tool repos); agreement measured continuously.Relationship to #328 and #321
groupslackingapplies-to: security-updates— the cause of book-theme's eight ungrouped npm PRs) feed Centralized environment & config reporting for lecture series #321's weekly config-diff reporting.status-maintenanceis a second instance of thestatus-*pattern Centralized environment & config reporting for lecture series #321 proposes, sharing collector/dashboard code withstatus-translations.Near-term wins (independent of the agent)
applies-to: security-updatesgroup todependabot.yml.auditskill family (the Decisions: dispositions for the 24 open lecture-proposal issues #344 motion, applied to PRs).Open questions
maintenance-policy.yml— meta or skills?Distilled from the v0.1 design document (2026-08-03, drafted with Claude in the QuantEcon Agents project — full doc has the architecture diagram, decision-record schema, data appendix with sources, and suggested first artifacts; attached below / available on request).