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
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
Adds the keyboard-2048 canvas as a standalone plugin, preserving the current source implementation and attributing it to its canonical repository. The plugin includes its preview image, runtime modules, and focused game/server tests. The gist-only preview save and legacy extension metadata are excluded.
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
Validation passed: npm run plugin:validate, npm start, npm run website:data, and node --test extensions/keyboard-2048/game.test.mjs extensions/keyboard-2048/server.test.mjs (22/22 tests). In-app testing with GitHub Copilot was not available. The source project has no standalone license file; this contribution is licensed under MIT per the repository's submission terms.
By submitting this pull request, I confirm that my contribution abides by the Code of Conduct and will be licensed under the MIT License.
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
Spawns processes or evaluates code in extensions/keyboard-2048/game.mjs
Permissions and capabilities (static analysis of modules reachable from extension.mjs)
File system access (node:fs)
Network sockets / local server (node:http, node:net, ...)
Warnings
game.test.mjs: import "node:test" is not a Node.js builtin, host-provided package, or declared dependency (module is not reachable from extension.mjs)
server.test.mjs: import "node:test" is not a Node.js builtin, host-provided package, or declared dependency (module is not reachable from extension.mjs)
Changed extension files
extensions/keyboard-2048/app.mjs
extensions/keyboard-2048/assets/preview.png
extensions/keyboard-2048/extension.mjs
extensions/keyboard-2048/game.mjs
extensions/keyboard-2048/game.test.mjs
extensions/keyboard-2048/index.html
extensions/keyboard-2048/server.mjs
extensions/keyboard-2048/server.test.mjs
extensions/keyboard-2048/style.css
Static checks compile modules without executing them. Minimum preview size is configurable with CANVAS_PREVIEW_MIN_WIDTH/CANVAS_PREVIEW_MIN_HEIGHT. Workflow run
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
Uncaught URL-parsing errors can terminate the extension before authentication, while inaccessible tile labels and insufficient dark-mode text contrast also remain unresolved.
The reason will be displayed to describe this comment to others. Learn more.
Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.
Note
This error may be related to your runner configuration. You can now configure runners for Copilot code review separately from Copilot cloud agent by creating a copilot-code-review.yml file with your setup steps. Read the docs for details.
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
Letter shortcuts can trigger unintended actions while toolbar buttons have focus, and the module bootstrap can run before the board exists, leaving the game stuck loading.
No open issues 🎉
2 previously missed issues
In code that hasn't changed since last review
Restrict letter shortcuts to board focus
extensions/keyboard-2048/app.mjs:158
The unmodified WASD, U, and N shortcuts fire even when focus is on a toolbar button rather than the board. This can cause unintended moves, undo, or restart prompts for speech-input users, and there is no way to disable or remap the shortcuts (WCAG 2.1.4). Bind this handler to the focusable board so letter shortcuts are active only while that component has focus.
Wait for board markup before loading the module
extensions/keyboard-2048/index.html:25
Dynamically inserted module scripts execute asynchronously; unlike a parser-inserted module, this does not wait for the document to finish parsing. If the module loads while the parser is still processing the body, app.mjs captures a null #board and throws at board.parentElement.append(...), leaving the game stuck on “Loading game...”. Append the module after DOMContentLoaded, or move this bootstrap below the board markup.
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
Overlapping opens for the same instance can create duplicate servers before the panel is cached, leaving one server and its store subscription running after close.
No open issues 🎉
1 previously missed issue
In code that hasn't changed since last review
Prevent duplicate servers from overlapping opens
extensions/keyboard-2048/extension.mjs:60
Two overlapping opens for the same instanceId can both pass the map check because await store() yields before the panel is cached. Each starts a server, but onClose() closes only the one retained in the map, leaving the other server and store subscription running. Cache a promise that includes store initialization before awaiting it so overlapping opens share one server.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request Checklist
npm startand verified thatREADME.mdis up to date.mainbranch for this pull request.Description
Adds the keyboard-2048 canvas as a standalone plugin, preserving the current source implementation and attributing it to its canonical repository. The plugin includes its preview image, runtime modules, and focused game/server tests. The gist-only preview save and legacy extension metadata are excluded.
Type of Contribution
Additional Notes
Validation passed:
npm run plugin:validate,npm start,npm run website:data, andnode --test extensions/keyboard-2048/game.test.mjs extensions/keyboard-2048/server.test.mjs(22/22 tests). In-app testing with GitHub Copilot was not available. The source project has no standalone license file; this contribution is licensed under MIT per the repository's submission terms.By submitting this pull request, I confirm that my contribution abides by the Code of Conduct and will be licensed under the MIT License.