Repository navigation
Conversation
- A plain click on a sheet never centred it: the pointer was captured on pointerdown, which retargets the click to #desk. Capture now starts with the drag. - Switching to list view mid-flight let the next frame write a transform onto the list page. List view now halts the camera, and apply() is desk-only. - With a site open, Tab walked into the desk and focus-follow flew the camera away from the frame. The background is inert while live. - The intro's pull-back overrode input in its first 650ms and could resume a pending open early; any input now cancels it. - Safari gesture events zoomed in list view and fought touch pinch. - Item boxes were measured once, so boards that grew after load were cut off by fit and the minimap. A ResizeObserver keeps them current. - An open could resume after Escape and a quick re-press; opens carry a token. - Escape now also works with focus inside the same-origin frame. - No negative time step on the first frame. - Drop the lifted sheet's z-index, which never beat the scrim. Each of the first four has an e2e test; the click test fails without its fix.
…ibly - Links and images were allowed by string prefix, so github.com.evil, user@ hosts and /0-draft/../ paths passed. Both are now checked on parsed URLs. - Board cells link only when they open a move issue; the rest pointed back at the README and left 41 nameless tab stops on the shogi board (axe link-name). - Tables keep their header row (axe td-has-header). - sync.ts records each board image's size so boards render at their final size. - sync.ts treats an empty response as a failure and keeps the previous file, so an org rename or token change cannot empty the desk.
…layout The fallback pile for unfiled repos sat on top of the dev.to receipt, and a filed repo without a spot landed on its own heading. Tests now require a heading for every group, a spot for every filed repo, and the unfiled pile below the rest. The stamp variant is no longer called 'tape'.
The home seal was a 483 KB PNG at twice its displayed size, which put mobile LCP at 5.5 s. It is now a sized WebP with 1x/2x densities. The OGP image is a 90 KB JPEG instead of a 790 KB PNG, the unused avatar is gone, and so is its host in the CSP.
…stalled version Counting kept screenshots as targets let a run with no network go green. The image tag now follows the installed @playwright/test, as in ci.yml.
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars.
|
The blackjack table's last header is empty in the README, which left its cells without a header (Lighthouse td-has-header).
Every project site shares this origin on GitHub Pages, so an unsandboxed frame gave any of them script access to the desk through window.parent. The frame is now sandboxed to an opaque origin; all eight sites were checked to render with no errors inside it. The CSP drops the unused data: images and the duplicate frame origin, and sets object-src 'none'. Raised in the security review.
…tities Homepages and dev.to article URLs reached the page unchecked; they are now kept only as https URLs (dev.to links only on dev.to). README text decodes numeric character references, so guestbook apostrophes no longer show as ', and the image allow-list stores the parsed URL it checked. Raised in the security review.
…obs off the cache The propose job checked only a PNG's first 8 bytes before committing it for the build to decode. scripts/check_png.py (standard library only) now checks CRCs, IHDR/IEND order, trailing data and size. The shoot job no longer reads or seeds the shared pnpm cache. Raised in the security review.
Raised in the security review.
|
Review: no blocking findings. I checked the diff against injection, CSP, the shared desk/list DOM, input and focus, and sync failure modes.
Not blocking, but worth knowing:
|
An out-of-range numeric reference threw from String.fromCodePoint, which failed the games sync and silently stopped the live board refresh; and numeric references were decoded before named ones, so text could be decoded twice. Raised in Claude review on #5.
Image sizes are cosmetic; a failed fetch now leaves that image unsized. Sizes are fetched in parallel. Raised in Claude review on #5.
The sandboxed frame keeps its key events to itself, so Escape can't be heard once focus is inside the site. Pressing the darkened desk now closes it too, and the close button shows its Esc shortcut. Raised in Claude review on #5.
Raised in Claude review on #5.
Hiding the tray, minimap and top bar did not keep Tab out of them in Chromium, so a zoom or jump could move the camera under the open frame. They are now inert along with the desk; the e2e test covers it. Raised in Claude review on #5.
Raised in Claude review on #5.
kanywst
added a commit
that referenced
this pull request
Oct 24, 2026
An out-of-range numeric reference threw from String.fromCodePoint, which failed the games sync and silently stopped the live board refresh; and numeric references were decoded before named ones, so text could be decoded twice. Raised in Claude review on #5.
kanywst
added a commit
that referenced
this pull request
Oct 24, 2026
Image sizes are cosmetic; a failed fetch now leaves that image unsized. Sizes are fetched in parallel. Raised in Claude review on #5.
kanywst
added a commit
that referenced
this pull request
Oct 24, 2026
The sandboxed frame keeps its key events to itself, so Escape can't be heard once focus is inside the site. Pressing the darkened desk now closes it too, and the close button shows its Esc shortcut. Raised in Claude review on #5.
kanywst
added a commit
that referenced
this pull request
Oct 24, 2026
Raised in Claude review on #5.
kanywst
added a commit
that referenced
this pull request
Oct 24, 2026
Hiding the tray, minimap and top bar did not keep Tab out of them in Chromium, so a zoom or jump could move the camera under the open frame. They are now inert along with the desk; the e2e test covers it. Raised in Claude review on #5.
This was referenced Oct 24, 2026
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes everything a thorough audit turned up. The audit had four parts:
Results
The remaining Lighthouse/axe flag is target-size. It is measured while the desk is zoomed out to the overview, so every element is scaled down. At 100% and in list view it does not fire.
Desk (code review)
#desk. Capture now starts with the drag. The new e2e test fails without the fix.apply()only runs in desk view..liftedz-index never took effect and is gone.Security review
window.parent. All eight sites render with no errors inside the sandbox.github.com.evil,user@and/0-draft/../all passed the old check, and each now has a test.'.object-src 'none', no unuseddata:images, one frame origin.sync.tstreats an empty response as a failure, so an org rename cannot empty the desk.Accessibility and performance
Repo settings (applied separately, not part of this diff)
main.