Repository navigation
feat: the Marker draws on a snapshot of the page and sends it as one comment - #92
Conversation
…comment Marker (B) joins the review toolbar on docs, images, HTML, and apps. It freezes the page as it is, and the dock turns into its tools: marker, pen, and arrow (B, P, A), four sizes each ([ and ]), four inks, Undo (⌘Z), Cancel, and Done (Enter). Under the hold the page hears no pointer, and each :hover rule also matches [data-drop-hover] on what the pointer was over, so even a tooltip shown only by CSS stays open. Done posts one area comment anchored to what the strokes cover, quoting the words under them, and its "area-shot": the snapshot cut to the strokes, with the strokes drawn on. The note is optional when a new comment has images.
Latest result Pull request merged. Final answersSession Pull request merged. Session Waiting for GitHub merge request a32eb04b-cbd8-4bf2-bfb0-157a4cbdbf20. Session Pushed 67eee44 and resolved all five threads. Fixed Pullfrog P1 shadow-root hover and arrow bounds; Codex P1 keyboard scrolling and copied image URLs, plus the P2 canceled-session race. Regressions reproduced before repair. All 23 focused tests, focused vp lint, vp fmt --check, and git diff --check passed. Awaiting hosted checks and review. Session Pushed 67eee44 and resolved all five threads. Fixed Pullfrog P1 shadow-root hover and arrow bounds; Codex P1 keyboard scrolling and copied image URLs, plus the P2 canceled-session race. Regressions reproduced before repair. All 23 focused tests, focused vp lint, vp fmt --check, and git diff --check passed. Awaiting hosted checks and review. Session Pushed 67eee44 and resolved all five threads. Fixed Pullfrog P1 shadow-root hover and arrow bounds; Codex P1 keyboard scrolling and copied image URLs, plus the P2 canceled-session race. Regressions reproduced before repair. All 23 focused tests, focused vp lint, vp fmt --check, and git diff --check passed. Awaiting hosted checks and review. Session Waiting for running checks before the next pass. Session Waiting for running checks before the next pass. Session Waiting for running checks before the next pass. Session Waiting for running checks before the next pass. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4f99e191bc
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Important
The Marker loses valid CSS-only hover UI in shadow-DOM apps, and finished arrows can persist an area smaller than the visible mark. Both should be corrected before merging.
Reviewed changes across the Marker capture flow, frame protocol, comment composer/API contract, agent formatting, documentation, and focused tests.
- Marker runtime — adds page freezing, marker/pen/arrow drawing, marked-text extraction, screenshot composition, anchoring, and undo/done handling inside framed content.
- Viewer integration — adds toolbar controls and shortcuts, sends pen state to the frame, correlates asynchronous area screenshots, and keeps the mark visible while the comment is composed.
- Image-only comments — permits a new comment with images and no text while preserving the server requirement that at least one of those is present and keeping replies text-required.
- Output and coverage — updates MCP/copy rendering and docs, bundles runtime-selected icons, and adds composable and Playwright tests for the main light-DOM flow.
gpt-5.6-sol | 𝕏
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes since the prior Pullfrog review, covering the follow-up fix commit and its focused regressions.
- Preserved shadow-root hover state — traversed nested open shadow roots, mirrored inline and adopted
:hoverstyles in their owning roots, and cleaned up temporary state when Marker exits. - Bounded rendered arrows correctly — derived persisted areas and anchors from each SVG path's rendered geometry rather than pointer endpoints.
- Hardened capture lifecycle — rejected completions from canceled Marker sessions and locked keyboard scrolling while viewport-relative capture is active.
- Completed copied feedback — included absolute attachment URLs for comments and replies, with regression coverage for image-only feedback.
gpt-5.6-sol | 𝕏

Reviewers like to highlight what they mean, so the review dock gets a Marker. It works on docs, images, HTML, and apps, and was prototyped in Drop first: https://drop.vitehub.dev/d/k78bnxeyen9v/markup-tools-prototype (round 2 is what this builds).
How it works
:hoverrule also matches[data-drop-hover]on whatever the pointer was over, so a tooltip shown only by CSS stays open as well. That's the case bc755a5 lists as still closing.quoteholds the words under the strokes: a marker's width, a pen's line, the inside of a loop drawn with the pen, and the word an arrow points at. The picture follows as the area'sarea-shot, so it takes the same attach-and-wait path as bc755a5's tooltip pictures.read_dropand Copy feedback describe a marked area as[the area … of <element>] marking > <words>, and fetch the picture fromImages:like any comment image.Checked
pnpm fmt --check,lint,knip,typecheck,doctor(0 warnings), andpnpm test(386 passed).test/viewer/marker-browser.test.mjs(Playwright, screenshot module stubbed):area-shotcarries a WebPtest/viewer/comment-area.test.mjsfor the keys, sizes, the quote, the picture, and where the Marker stays off.nuxt dev(VPS mode) in Chromium:kind: "area"with the quote andscreenshot.webp(640×360, strokes drawn on).body: ""and the picture.Not in this PR
:hoverfreeze applies only to the Marker. The Comment tool (R) could use it too.🤖 Generated with Claude Code