Objective
Retire Beads as the durable task control plane and replace it with GitHub Issues, including migration of every existing record, pipeline/worker cutover, comment-driven follow-up, human pause mentions, and PR-linked closure.
Approach
Added research.pipeline.github as the task provider, persisted pipeline envelopes on git refs, and claimed work with fenced worker leases rather than assignee-only locks. Migrated 367 Beads records to labeled issues with native sub-issue and blocked_by links, then deleted the Beads datastore, hooks, adapters, wrappers, and skill. Workers, discovery, dashboard, PR helpers, and agent docs now speak issue numbers.
Web plan:
- canonical section: not a public catalog surface; operator local dashboard under existing reports CLI
- no new top-level public site section
Browser evidence: tests/test_github_tasks_dashboard.py and tests/test_github_tasks_dashboard_browser.py Static/local boundary: public site keeps 301 aliases for old task JSON/JS paths; live queue/lease UI is python3 -m research.reports github-tasks Exception: a public catalog page would expose private issue titles, owners, and worker leases. Audience is operators. Path is the local dashboard plus gh/research.pipeline.github. Reconsider if a redacted public status board is requested.
Files changed
research/pipeline/github.py,research/pipeline/github_migrate.py,research/pipeline/__main__.py,research/pipeline/runtime.pyresearch/scripts/run-github-worker.sh,research/scripts/run-github-watchdog-worker.sh,research/scripts/open_pr.sh,research/scripts/pr_body.py,research/merge_pr.shresearch/reports/github_tasks.py,research/reports/assets/github-tasks.js.github/workflows/task-events.yml,.github/ISSUE_TEMPLATE/.omp/AGENTS.md,.omp/skills/github-issues/SKILL.md- focused GitHub provider, migrate, worker, dashboard, PR-body, and OMP workflow tests
Validation
python3 -m pytest -qon GitHub provider, migrate, worker, dashboard, PR body, research pipeline, OMP workflow, discover-new, and changelog tests — 130 passedpython3 -m research.artifacts check --mode full --offline— currentpython3 research/scripts/check_static_reports.py docs— 1424 files, 183 canary routes- Live canary: comment on closed #904 created labeled sub-issue #1272
- Migration parity: 367/367 mapped, 153 sub-issue links, 96 blocked-by links, 0 errors
Results
GitHub Issues is the only durable task surface. Dead-worker leases expire and can be reclaimed. Trusted comments on open or closed issues queue follow-up. PRs fail closed without exactly one Closes #<issue>. Beads runtime files are gone.