Skip to content

Refresh review board canvases automatically every 15 minutes - #5707

Merged
aaronpowell merged 9 commits into
mainfrom
aaronpowell-board-periodic-refresh
Oct 27, 2026
Merged

aaronpowell merged 9 commits into
mainfrom
aaronpowell-board-periodic-refresh

Conversation

@aaronpowell

Copy link
Copy Markdown
Contributor

Pull Request Checklist

  • I have read and followed the CONTRIBUTING.md guidelines.
  • I have read and followed the Guidance for submissions involving paid services.
  • My contribution adds a new instruction, prompt, agent, skill, workflow, or canvas extension file in the correct directory.
  • The file follows the required naming convention.
  • The content is clearly structured and follows the example format.
  • I have tested my instructions, prompt, agent, skill, workflow, or canvas extension with GitHub Copilot.
  • I have run npm start and verified that README.md is up to date.
  • I am targeting the main branch for this pull request.

Description

New PRs and external-plugin submissions currently appear only after a manual refresh. Both review boards now poll every 15 minutes while their canvas is open, using the existing read-only refresh routes and state merges.

Scheduled refreshes share in-flight fetches with manual refreshes, skip overlapping timer ticks, and stop when the canvas closes. Existing reviews, queue tokens, local decisions, manual buckets, selection, and staged feedback are preserved for items that remain on the board. Polling never starts AI reviews or performs GitHub writes. Failures use the existing logging and toast UI without clearing good board data, and subsequent polls can recover.


Type of Contribution

  • New instruction file.
  • New prompt file.
  • New agent file.
  • New plugin.
  • New skill file.
  • New agentic workflow.
  • New canvas extension.
  • Update to existing instruction, prompt, agent, plugin, skill, workflow, or canvas extension.
  • Other (please specify):

Additional Notes

Closing a canvas cancels future polls but does not abort an already running read. Existing refresh semantics still remove inactive items and update eligibility/staleness. Both board READMEs document the cadence.

Validation:

  • node --experimental-vm-modules --test --test-reporter=tap eng\board-periodic-refresh.test.mjs eng\board-state-storage.test.mjs eng\open-pr-board.test.mjs eng\external-plugin-review-board.test.mjs eng\external-plugin-review-board-state.test.mjs eng\external-plugin-review-board-ui.test.mjs eng\board-preview.test.mjs eng\board-bulk-actions.test.mjs eng\board-column-order.test.mjs eng\open-pr-board-drag.test.mjs eng\external-plugin-review-board-fixes-request.test.mjs .github\extensions\external-plugin-review-board\lib\github.test.mjs - passed, 132 tests.
  • node --check .github\extensions\open-pr-board\lib\server.mjs - passed.
  • node --check .github\extensions\external-plugin-review-board\lib\server.mjs - passed.
  • node --check .github\extensions\open-pr-board\public\app.js - passed.
  • node --check .github\extensions\external-plugin-review-board\public\app.js - passed.
  • npm start - passed after restoring missing dependencies with npm ci; generated README and marketplace outputs remain unchanged. Existing non-SPDX license warnings remain.
  • bash eng/fix-line-endings.sh - passed.
  • git diff --check - passed.

Coverage includes exact cadence, repeated open, overlap with manual refresh, slow fetches, edits/review completion during fetch, queue and decision preservation, error delivery/recovery, close/reopen, close during a fetch, and selection/draft/tab/in-flight action state on live snapshots. Tests use fake GitHub reads and accelerated clocks. A live Copilot canvas test and a real 15-minute wait were not performed.


By submitting this pull request, I confirm that my contribution abides by the Code of Conduct and will be licensed under the MIT License.

Reuse the existing refresh routes while canvases are open, preserve local review state, and surface polling errors without clearing board data.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@aaronpowell
aaronpowell requested a review from a team as a code owner October 27, 2026 00:46
Copilot AI max review requested due to automatic review settings October 27, 2026 00:46
@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

🚦 Submission status: 👀 Ready for review

Risk tier: merge-risk:high — Privileged execution, automation, or review-policy change
Required to merge: passing submission-gate checks plus 1 approval from reviewers with write access, including a maintainer with admin or maintain permission.

Why this tier
  • .github/extensions/external-plugin-review-board/README.md is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • .github/extensions/external-plugin-review-board/extension.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • .github/extensions/external-plugin-review-board/lib/server.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • .github/extensions/external-plugin-review-board/public/app.js is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • .github/extensions/open-pr-board/README.md is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • .github/extensions/open-pr-board/extension.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • .github/extensions/open-pr-board/lib/decisions.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • .github/extensions/open-pr-board/lib/github.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • .github/extensions/open-pr-board/lib/server.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • .github/extensions/open-pr-board/lib/state.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • .github/extensions/open-pr-board/public/app.js is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • eng/board-bulk-actions.test.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • eng/board-periodic-refresh.test.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • eng/board-preview.test.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • eng/external-plugin-review-board-ui.test.mjs is a high-risk path (automation, scripts, MCP config, hooks, or review policy)
  • …and 2 more

Automated checks

Check Status Details
Line endings ✅ Passed Passed · logs
Spelling ✅ Passed Passed · logs
Contributor reputation ✅ Passed Passed · logs
Duplicate resource scan ✅ Passed Passed · logs
PR quality signal ✅ Passed Passed · logs

Review

  • Approvals: 0/1
  • Assigned reviewer: not assigned yet — comment /request-review to ask for one
  • Review target date: not set
  • Still needed: 1 more approval(s); an approval from a maintainer with admin or maintain permission
  • The core-maintainers pool is not staffed yet; an approver with admin or maintain permission is required instead.

Commands

Command Who What it does
/rerun-checks PR author, maintainers Re-runs failed or incomplete checks and re-evaluates this gate
/request-review PR author, maintainers Asks the review rotation to assign a reviewer (adds needs-reviewer)

Updated for c601e5d · gate run · This comment is maintained automatically — see submission gate docs.

@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

🟡 Contributor Reputation Check: MEDIUM risk

Check Risk
Profile MEDIUM
Credential audit NONE

Maintainers: please review this contributor before merging.
See the workflow run for full details.
Automated check powered by AGT.

@github-actions github-actions Bot added needs-review:MEDIUM Contributor reputation check flagged MEDIUM risk ready-for-review Submission passed intake validation and is ready for maintainer review and removed awaiting-automation labels Oct 27, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Automatic refresh can advance approval to a commit the maintainer has not reviewed.

2 open issues
What changed in this PR

Adds automatic refresh to the repository’s two maintainer review-board canvases so new PRs and external-plugin submissions appear without manual refresh.

Changes:

  • Poll existing refresh routes every 15 minutes, skip overlapping ticks, and stop timers when canvases close.
  • Show polling failures through the existing toast UI.
  • Document polling behavior and add lifecycle and state-preservation regression coverage.
File Description
eng/​board-preview.test.mjs Checks selection, drafts, tabs, and action guards across snapshots.
eng/​board-periodic-refresh.test.mjs Adds polling cadence, concurrency, recovery, and lifecycle coverage.
.github/​extensions/​open-pr-board/​README.md Documents automatic refresh and regression tests.
.github/​extensions/​open-pr-board/​public/​app.js Displays refresh-error toasts.
.github/​extensions/​open-pr-board/​lib/​server.mjs Adds polling, overlap protection, and timer cleanup.
.github/​extensions/​external-plugin-review-board/​README.md Documents automatic refresh and regression tests.
.github/​extensions/​external-plugin-review-board/​public/​app.js Displays refresh-error toasts.
.github/​extensions/​external-plugin-review-board/​lib/​server.mjs Adds polling, overlap protection, and timer cleanup.

Review effort: Max

Comment thread .github/extensions/open-pr-board/lib/server.mjs
Comment thread .github/extensions/external-plugin-review-board/lib/server.mjs
Pin approvals to the displayed SHA and reject stale AI bulk reviews. Reload changed PR previews and invalidate plugin issue details after refresh without losing drafts.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI max review requested due to automatic review settings October 27, 2026 01:07
@github-actions github-actions Bot added awaiting-automation ready-for-review Submission passed intake validation and is ready for maintainer review and removed ready-for-review Submission passed intake validation and is ready for maintainer review awaiting-automation labels Oct 27, 2026
Comment thread .github/extensions/open-pr-board/lib/server.mjs
Comment thread .github/extensions/external-plugin-review-board/lib/server.mjs

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Bulk approval can still authorize a commit that the retained review or manual approval choice did not cover.

2 open issues
2 resolved since last review

Review effort: Max

Comment thread .github/extensions/open-pr-board/public/app.js Outdated
Comment thread .github/extensions/open-pr-board/lib/server.mjs Outdated
Capture queued-review and manual-approval heads so bulk actions cannot carry old choices onto new commits. Skip shared-server polling when no refresh handler exists.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI max review requested due to automatic review settings October 27, 2026 01:29
@github-actions github-actions Bot added awaiting-automation and removed ready-for-review Submission passed intake validation and is ready for maintainer review labels Oct 27, 2026
@github-actions github-actions Bot added ready-for-review Submission passed intake validation and is ready for maintainer review and removed awaiting-automation labels Oct 27, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread .github/extensions/open-pr-board/extension.mjs
Comment thread .github/extensions/open-pr-board/lib/server.mjs
Include head SHA and approval staleness in agent summaries, and prevent invalidated PR detail reads from overwriting current cached previews.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI max review requested due to automatic review settings October 27, 2026 03:04
@github-actions github-actions Bot added awaiting-automation ready-for-review Submission passed intake validation and is ready for maintainer review and removed ready-for-review Submission passed intake validation and is ready for maintainer review awaiting-automation labels Oct 27, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

A confirmed review-state race and changes to approval and auto-merge safeguards require fixes and final maintainer validation.

2 open issues
2 resolved since last review

Review effort: Max

Comment thread .github/extensions/open-pr-board/lib/state.mjs
Comment thread .github/extensions/open-pr-board/public/app.js
Record obsolete-head feedback in history without installing a decision that would clear newer queues, reviews, or manual moves on refresh.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI max review requested due to automatic review settings October 27, 2026 03:29
@github-actions github-actions Bot added ready-for-review Submission passed intake validation and is ready for maintainer review and removed ready-for-review Submission passed intake validation and is ready for maintainer review awaiting-automation labels Oct 27, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Polling intersects with approval and feedback writes, and the reproduced state race requires correction alongside live-canvas validation.

1 open issue
2 resolved since last review

Review effort: Max

Comment thread .github/extensions/open-pr-board/lib/state.mjs Outdated
Use commit provenance to clear old-head reviews, queues, and manual buckets while preserving state created for the current head.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI max review requested due to automatic review settings October 27, 2026 03:51
@github-actions github-actions Bot added awaiting-automation and removed ready-for-review Submission passed intake validation and is ready for maintainer review labels Oct 27, 2026
@github-actions github-actions Bot added ready-for-review Submission passed intake validation and is ready for maintainer review and removed awaiting-automation labels Oct 27, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Background refresh interacts with approval, auto-merge, and persisted review state, warranting maintainer review and live-canvas validation.

No open issues 🎉

1 resolved since last review

Review effort: Max

@aaronpowell
aaronpowell merged commit d75b418 into main Oct 27, 2026
30 of 32 checks passed
@aaronpowell
aaronpowell deleted the aaronpowell-board-periodic-refresh branch October 27, 2026 04:48

This branch was successfully deployed

1 active deployment
github-pages — c601e5dd Deployed Oct 27, 2026 by aaronpowell via deploy #1151
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-risk:high needs-review:MEDIUM Contributor reputation check flagged MEDIUM risk ready-for-review Submission passed intake validation and is ready for maintainer review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants