Part of #1367 (Phase 0 — Foundation).
Problem
The dependency dashboard renders interactive controls that are entirely decorative — nothing consumes them:
- Per-PR rebase checkboxes
<!-- rebase-branch=... -->(src/dashboard/dashboard-generator.ts:109-145) — no code readsrebase-branch=anywhere - "Rebase all open PRs" checkbox — marker
rebase-all-open-prsnever consumed - Footer "run again" checkbox
<!-- manual job -->(dashboard-generator.ts:421) — never consumed - Pinning is broken end-to-end: the generated workflow computes
PINbut never appends it to the CLI invocation (src/setup.ts:1534-1560); thedashboardcommand types apin?: booleanoption but never registers a--pinflag (bin/cli.ts:593);unpinIssuetargets a REST endpoint that can't pin (src/git/github-provider.ts:1553-1563)
Renovate's dashboard checkboxes work; ours only look like they do. (This also covers the dashboard half of #108 — deprecated deps are already rendered but the interaction layer is missing.)
Spec
1. Checkbox consumption
Add dashboard-checkbox detection to the update-check flow (bin/cli.ts:896) and to the unified workflow's issues: [edited] trigger:
- New
src/dashboard/dashboard-actions.ts:parseDashboardActions(body: string): { rebaseBranches: string[], rebaseAll: boolean, manualRun: boolean }— a checked box is- [x]preceding the marker comment - For each checked
rebase-branch=<branch>: resolve the open PR for that branch and run the same rebase path as the PR-body checkbox (reusecheckAndUpdatePRsWithRebaseCheckboxlogic,src/utils/helpers.ts:499) rebase-all-open-prs: iterate all open Buddy Bot PRsmanual job: trigger a full scan+update run- After acting, uncheck the boxes by rewriting the issue body (same pattern as PR checkbox unchecking)
2. Workflow trigger
generateUnifiedWorkflow (src/setup.ts) must add issues: { types: [edited] } to the trigger block, guarded to the dashboard issue (title/label match + bot-actor loop guard identical to the PR pull_request: [edited] guard).
3. Pinning
- Register
--pinon thedashboardcommand; pass through from workflow input (fix src/setup.ts:1534-1560to append the flag) - Implement pin/unpin via GraphQL (
pinIssue/unpinIssuemutations — REST cannot pin); replace the broken REST attempt ingithub-provider.ts:1553-1563 - Pin by default when
dashboard.pinis true in config (add tosrc/types.ts— README documentspin: truebut the type lacks it)
Tasks
src/dashboard/dashboard-actions.ts+ types- Wire into
update-checkand workflowissues: [edited]trigger - Uncheck-after-action body rewriting with race guard (compare
updated_at/ use conditional update) - GraphQL pin/unpin in
github-provider.ts;--pinflag; workflow passthrough fix dashboard.pinconfig option + validation + docs- Tests: parse/uncheck round-trip, rebase-all fan-out, manual-job trigger, pin mutation (mocked), loop-guard (bot edits must not re-trigger)
Acceptance criteria
- Checking a PR's box on the dashboard rebases that PR within one
update-checkcycle and the box unchecks itself - "Rebase all" updates every open Buddy Bot PR; "run again" kicks a scan
buddy-bot dashboard --pinpins the issue; configdashboard.pin: truepins on creation- No workflow trigger loops (bot's own issue edits are ignored)