Repository navigation
Add a local duplicate-resource review canvas - #5253
aaronpowell wants to merge 2 commits into
Conversation
Add persistent report triage, background-only comparisons, and confirmed GitHub acceptance and consolidation actions. Co-authored-by: Copilot App <[email protected]>
🚦 Submission status: 👀 Ready for reviewRisk tier: Why this tier
Automated checks
Review
Commands
Updated for |
|
🟡 Contributor Reputation Check: MEDIUM risk
Maintainers: please review this contributor before merging. |
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved source-validation and concurrent-state failures can compromise review decisions and publication recovery.
10 open issues
Block duplicate consolidation writes across reports · New Allow uppercase and underscore agent filenames · New Reject resource tables containing unsupported rows · New Retain recovery records for removed groups · New Reject stale editor updates using revision checks · New Update report state after successful acceptance · New Reject reconciliation after concurrent group edits · New Hide only published groups · New Preserve focus when rendering updated controls · New Preserve edits made while save is pending · New
What changed in this PR
Adds a repository-local maintainer canvas for turning duplicate-resource reports into private triage and explicitly confirmed GitHub follow-up, reusing the Open PR Board server.
Changes:
- Adds persistent kanban decisions, notes, consolidation drafts, and read-only background comparisons.
- Introduces publication previews, confirmation, freshness checks, and reconciliation.
- Documents the workflow and adds focused regression tests.
| File | Description |
|---|---|
eng/duplicate-review-board.test.mjs |
Tests parsing, persistence, background dispatch, publication, and authentication. |
.github/extensions/duplicate-review-board/README.md |
Documents usage, safeguards, recovery, and validation. |
.github/extensions/duplicate-review-board/public/styles.css |
Styles the board, controls, and dialogs. |
.github/extensions/duplicate-review-board/public/index.html |
Defines report controls, the editor, and publication confirmation. |
.github/extensions/duplicate-review-board/public/app.js |
Implements interactive triage and live board updates. |
.github/extensions/duplicate-review-board/lib/state.mjs |
Persists reports, decisions, review tokens, and publication records. |
.github/extensions/duplicate-review-board/lib/review.mjs |
Builds bounded, read-only background comparison prompts. |
.github/extensions/duplicate-review-board/lib/report.mjs |
Parses groups, fingerprints evidence, and updates acceptance checkboxes. |
.github/extensions/duplicate-review-board/lib/publish.mjs |
Manages previews, confirmed writes, and reconciliation. |
.github/extensions/duplicate-review-board/lib/github.mjs |
Provides fixed-repository GitHub CLI operations. |
.github/extensions/duplicate-review-board/extension.mjs |
Connects canvas actions, session state, background agents, and HTTP routes. |
Review effort: Max
Preserve recovery records and cross-report locks, validate complete resource tables, and protect concurrent editors and keyboard focus. Include the requested in-canvas resource viewer. Co-authored-by: Copilot App <[email protected]>
|
Regarding #5253 (comment): Acknowledged; this is an automated merge gate rather than a code-change request, and the required maintainer approval remains in place. The review fixes are pushed in 64ba48a, with all 41 focused tests and npm run build passing locally. |
|
Regarding #5253 (comment): Acknowledged; contributor reputation is a maintainer review signal, not a source-code defect, so no code change is appropriate. The linked workflow completed successfully, and the maintainer review requirement remains unchanged. |
There was a problem hiding this comment.
🟡 Changes recommended
Acceptance reconciliation can bypass evidence-freshness checks and allow stale maintainer decisions to be published.
5 open issues
10 resolved since last review
Reject stale editor updates using revision checks Retain recovery records for removed groups Reject resource tables containing unsupported rows Allow uppercase and underscore agent filenames Block duplicate consolidation writes across reports Preserve edits made while save is pending Preserve focus when rendering updated controls Hide only published groups Reject reconciliation after concurrent group edits Update report state after successful acceptance
Review effort: Max
| const groups = parseReport(body); | ||
| report.body = body; | ||
| report.sourceHash = digest(body); |
| if (!contents.has(key)) { | ||
| const request = api("resource", { number: board.selected, id: item.id, path: file }); | ||
| request.catch(() => contents.delete(key)); | ||
| contents.set(key, request); | ||
| } |
| tab.setAttribute("role", "tab"); | ||
| tab.setAttribute("aria-selected", String(resource.path === viewing)); | ||
| tab.title = resource.path; | ||
| tab.addEventListener("click", () => { viewing = resource.path; renderViewer(item); }); |
| const snapshot = await api("update", { ...edit, expectedRevision: edit.revision, ...values }); | ||
| const updated = snapshot.items.find((item) => item.id === edit.id); | ||
| if (updated) savingEdit.responseRevision = updated.revision; | ||
| receive(snapshot, { ...edit, values }); |
| if (item) renderViewer(item); | ||
| }); | ||
| $("column").addEventListener("change", () => { $("draft").hidden = $("column").value !== "consolidate"; }); | ||
| $("editor").addEventListener("input", (event) => { if (event.target.id !== "guidance") dirty = true; }); |


Pull Request Checklist
npm startand verified thatREADME.mdis up to date.mainbranch for this pull request.Description
The weekly duplicate-resource reports need an actionable review surface. This adds a repository-local maintainer canvas that imports existing reports and lets maintainers manage decisions privately before making any GitHub changes.
Type of Contribution
Additional Notes
This is a local maintainer extension under
.github/extensions/, following the existing review boards, not a marketplace plugin. It reuses the Open PR Board's authenticated loopback HTTP/SSE server. The detector's scope remains unchanged: agents, instructions, and skills only; plugins and canvases are not added to detection in this PR.Validation:
node --experimental-vm-modules --test eng\duplicate-review-board.test.mjs- passed, 19 tests covering parsing, persistence, background dispatch, publication safeguards, reconciliation, and HTTP authentication.npm start- passed afternpm cirestored missing dependencies; generated README and marketplace outputs remain unchanged. Existing external-plugin metadata warnings were reported.bash eng/fix-line-endings.sh- passed.git diff --cached --check- passed before committing.GitHub issue-body updates do not offer transactional compare-and-swap, so concurrent manual report editing should be avoided during publication. Runtimes without background-task support fail explicitly instead of falling back to foreground requests.
By submitting this pull request, I confirm that my contribution abides by the Code of Conduct and will be licensed under the MIT License.