Build GPUI Apps
Build native GPUI software that is correct before it is glossy, genuinely
platform-aware before it is Apple-styled, and verified in the running app
before it is called complete.
This is a routed umbrella skill. Read only the reference layers needed for the
task, but always follow the core contract and workflow below.
Core contract
- Inspect the target checkout before changing it: branch, dirty state,
manifests, lockfile, pinned GPUI source, app entrypoint, root view, theme,
components, assets, tests, and platform code.
- Treat the target checkout as the API authority. GPUI is pre-1.0; examples
from
gpui.rs, Zed main, crates.io, or this skill can differ from the pinned
revision.
- Preserve working state ownership, commands, shortcuts, persistence, window
behavior, and platform integration. A visual request is not permission to
replace the app architecture.
- Keep render work deterministic and cheap. Move blocking I/O and CPU-heavy
work off the application thread, then update a live entity through the
appropriate async context.
- Give interactive elements stable IDs, semantic roles, keyboard access,
visible focus, disabled behavior, and immediate input feedback.
- Use glass as a functional navigation or control layer, not as decoration on
every surface. Never describe a flat translucent rectangle as native Liquid
Glass.
- Respect reduced motion, reduced transparency, increased contrast, and
differentiate-without-color. Provide an opaque fallback.
- Validate compilation, behavior, launch, and visuals.
cargo check alone
does not prove focus, fonts, window chrome, scale factor, clipping, motion,
or material behavior.
- Do not rasterize text, controls, panels, or whole screens to fake fidelity.
- Preserve unrelated changes and report every unverified platform or runtime
path plainly.
- Treat text input, clipboard, menus, drag/drop, and window lifecycle as OS
contracts. Preserve Unicode range units, composition, focus, command state,
and stable ownership.
- For a new application, establish product identity, a pinned toolchain and
GPUI revision, observable startup, storage policy, CI, and packaging gates
before calling the starter production-ready.
Route the task
| Task |
Read first |
Also read when relevant |
| Set up or harden a production-ready starter app |
production-starter.md |
project-versioning.md, testing-qa.md |
| Orient a GPUI checkout or choose dependency features |
project-versioning.md |
testing-qa.md |
| Design state, events, actions, or component boundaries |
architecture-state.md |
async-performance.md |
| Build views, controls, layout, themes, overlays, or lists |
components-layout.md |
worked-patterns.md |
| Add Apple-like glass, translucency, depth, or macOS material |
apple-glass.md |
accessibility-platform.md |
| Add animation, drag, momentum, springs, or gesture behavior |
motion-input.md |
accessibility-platform.md |
| Add focus, keyboard, screen-reader, typography, or platform behavior |
accessibility-platform.md |
components-layout.md |
| Add editable text, IME, clipboard, drag/drop, menus, multi-window behavior, or restoration |
input-windows.md |
accessibility-platform.md, testing-qa.md |
| Add async loading, background work, virtualization, or performance fixes |
async-performance.md |
architecture-state.md |
| Add or review tests, launch checks, screenshots, or release gates |
testing-qa.md |
visual-validation.md |
| Use Paper.design inside broader GPUI app or architecture work |
paper-to-gpui.md |
paper-mcp.md, visual-validation.md |
| Faithfully translate a selected Paper.design frame as the primary task |
Use the standalone paper-to-gpui skill |
Return here only for broader app architecture or production work |
| Need complete, copyable patterns |
worked-patterns.md |
The domain reference for the pattern |
| Verify why a rule exists or refresh time-sensitive claims |
sources.md |
Current target source and official docs |
Workflow
1. Establish scope and current truth
Run the read-only inspector:
scripts/inspect_gpui_project.sh /path/to/project
Then inspect directly:
- Read repository instructions and determine whether the request authorizes
edits or only diagnosis/review.
- Confirm the owning crate and the smallest surface that can satisfy the task.
- Record the GPUI declaration and exact lockfile version or Git revision.
- Find a similar component that compiles in this checkout.
- Identify current theme access, asset loading, focus conventions, actions,
overlay system, async patterns, and test support.
- Note the platform and minimum OS versions. Do not silently make a
cross-platform component macOS-only.
Read project-versioning.md before creating a
new app, changing startup, changing GPUI versions, or copying an upstream API.
For a greenfield or starter-hardening request, read
production-starter.md before choosing the
crate layout. It uses
lassejlv/gpui-starter as a concrete
minimal example, then adds the missing production contracts without pretending
every app needs every subsystem.
2. Write the behavioral contract
Before implementation, state:
- source of truth for state;
- user actions and resulting events/state transitions;
- loading, empty, disabled, error, and cancellation states;
- focus owner, tab order, shortcuts, pointer and touch behavior;
- text index units, composition, clipboard, menu, and window ownership when in
scope;
- resize and scrolling behavior;
- material tier and fallbacks;
- reduced-motion, opaque, and high-contrast behavior;
- target platforms and what must be verified on each.
For a visual translation, add the exact source frame, viewport, theme, fonts,
assets, and screenshot evidence.
3. Choose the smallest correct GPUI register
Use:
- an ordinary element tree for normal layout and styling;
RenderOnce for stateless, value-like reusable components;
- an
Entity<T> implementing Render for independently changing state;
- a project model entity for shared domain state;
canvas or a custom Element only when ordinary layout or painting cannot
meet the requirement;
- a narrow platform bridge only for behavior GPUI cannot supply.
Do not create an entity for every wrapper. Do not keep meaningful state in
ephemeral render-local values. Read
architecture-state.md and
components-layout.md.
4. Implement one vertical slice
Build one end-to-end path before broad extraction:
- Domain state or model operation
- Typed action or event
- Entity update
cx.notify() or emitted event
- Rendered default state
- Pointer, keyboard, focus, and accessibility behavior
- Error/cancellation state
- Targeted test
Only extract a reusable component or token after a repeated semantic or visual
pattern is proven. Keep public APIs narrow and predictable.
5. Apply Apple design without lying about capability
Select the material tier in this order:
- Existing system or project component
- Native macOS 26+
NSGlassEffectView behind an availability boundary
NSVisualEffectView or GPUI whole-window blur when that is the actual need
- Cross-platform GPUI approximation using semantic tint, border, highlight,
shadow, and opacity
- Opaque/high-contrast fallback
Do not stack glass on glass. Keep content surfaces mostly solid. Use concentric
geometry, restrained tint, adaptive light/dark tokens, and clear elevation.
Read apple-glass.md.
6. Make interaction physical and interruptible
- Respond on press/down, then commit on release/click.
- Keep direct manipulation 1:1 and preserve the grab offset.
- Carry velocity from gesture to settling motion.
- Retarget from current presentation state and velocity.
- Keep input active while motion runs.
- Use symmetric enter/exit paths and anchor presentations to their source.
- Prefer
AnimationExt::with_animation for decorative finite motion when the
pinned version supports it; it integrates with GPUI reduced-motion state.
- Use explicit state plus frame requests for interactive springs. The bundled
spring.rs is a pure-Rust starting point, not a substitute
for target-version integration.
Read motion-input.md before implementing custom
animation or gestures.
For editable text, native command surfaces, drag/drop, or more than one window,
read input-windows.md. Prefer a maintained editor
component over implementing the platform input contract from scratch.
7. Protect lifecycle and performance
- Hold a returned
Task when dropping it should cancel work; detach only when
app-lifetime completion is deliberate and errors are observed.
- Hold a
Subscription when the observer has an owner; detach only when entity
lifetime semantics are correct.
- Capture
WeakEntity in long-running work.
- Use
background_spawn for blocking/CPU work and cx.spawn or
cx.spawn_in for application-thread orchestration.
- Virtualize large collections with
list or uniform_list.
- Avoid filesystem, network, sleep, parsing, and unbounded allocation in
render.
- Request animation frames only while something is changing.
Read async-performance.md.
8. Validate in widening rings
Run repository-native checks first, then adapt this baseline:
cargo fmt --check
cargo check -p <owning-crate>
cargo test -p <owning-crate>
cargo clippy -p <owning-crate> --all-targets -- -D warnings
Also:
- launch the real app;
- exercise mouse, keyboard, focus, resize, scroll, and relevant touch paths;
- verify light, dark, inactive-window, reduced-motion, opaque, and
high-contrast states where supported;
- capture matching screenshots for visual work;
- check at 1x and a high-DPI scale;
- inspect logs and task/error states;
- run at least one targeted
#[gpui::test] when behavior uses GPUI input,
focus, actions, timing, or windows.
Read testing-qa.md and
visual-validation.md.
This skill includes a compile-checked, exact-revision fixture at
assets/reference-app. It demonstrates startup, actions, entity events,
owned async work, accessibility, menus, multiple windows, virtualization,
preference-aware material fallbacks, and spring orchestration. It is a pattern
fixture, not a production component framework. Validate it with:
scripts/validate_reference_app.sh
Production starter path
For “create a GPUI app,” “set up a starter,” or “make this starter
production-ready”:
- Gather the product name, package/binary slug, owned application ID,
supported platforms, minimum OS versions, distribution route, durable data,
and update owner.
- Inspect the target and the exact starter/example commit. Never copy over an
existing checkout or delete its Git history without authorization.
- Keep the minimal
desktop/ui split until domain code proves a separate
headless crate.
- Pin the Rust toolchain and GPUI Git revision, commit
Cargo.lock, and make
the first clean CI baseline reproducible.
- Rename identity across crates, binary, action namespace, app ID, menus,
storage, icons, packaging, and update metadata.
- Add observable startup, configuration/migrations, secret storage,
lifecycle-owned async work, accessible controls, diagnostics, and recovery
only where the product requires them.
- Replace the demo with one real vertical slice and test it from domain state
through action, GPUI update, persistence/error state, restart, and release
launch.
- Build, sign, install, upgrade, and exercise real artifacts on every claimed
platform. Report cross-compilation separately.
Do not call a raw release binary, a green cargo check, or the unmodified
minimal example production-ready. Use the complete acceptance matrix in
production-starter.md.
Paper.design path
Use this path when Paper is one input to broader GPUI app, architecture, or
production work. When faithful translation of a selected Paper frame is the
primary task, route to the standalone paper-to-gpui skill instead.
For Paper input within broader work:
- Require a live Paper MCP connection and one exact selected frame or node ID.
- Verify the open file with
get_basic_info and intent with get_selection.
- Capture a 2x screenshot, hierarchy, JSX as structural evidence, computed
styles, fonts, tokens, and actual exportable assets.
- Preserve the GPUI app architecture and translate layout semantics, not DOM
wrapper count.
- Implement geometry, typography, paint, assets, and interactions in that
order.
- Compare Paper and native screenshots at matching logical bounds.
If Paper is unavailable, stop the design extraction path and explain how to
connect it. Do not recreate the design from memory. Read
paper-to-gpui.md and
paper-mcp.md.
Review standard
Rank findings by user impact and confidence. Require evidence for claims about:
- stale or dropped tasks/subscriptions;
- missed
cx.notify() calls;
- unstable or duplicate element IDs;
- focus traps or pointer-only controls;
- blocking application-thread work;
- unbounded render allocation;
- incorrect fixed sizing or clipping;
- unsupported blur/material claims;
- missing accessibility role, label, state, or action;
- animation that ignores reduced motion;
- platform API use without availability guards;
- green compilation presented as visual or runtime proof.
Do not turn style preferences into correctness findings.
Completion report
Report:
- GPUI version/revision and target platforms;
- files and architectural boundaries changed;
- material tier and fallback behavior;
- interaction, focus, accessibility, async, and performance behavior;
- text/IME, command, window lifecycle, and restoration behavior when relevant;
- tests, builds, launch, and visual comparisons actually performed;
- remaining deltas, unverified platforms, and version-sensitive assumptions.
For the research snapshot behind this skill, read
sources.md. Refresh upstream APIs when the target
revision differs or the snapshot is no longer current.
After substantial suite changes, run the realistic prompts and reviewer-only
rubrics in forward-tests.md with fresh agents. Fix
routing or instruction gaps before publishing.
1---2name: build-gpui-apps3description: Build, scaffold, refactor, debug, review, and visually validate production Rust desktop interfaces with GPUI. Use for production-ready GPUI starter apps; new GPUI apps or components; Entity, Context, action, async, and lifecycle architecture; Apple-style macOS UI, materials, motion, gestures, focus, accessibility, text input, IME, clipboard, drag and drop, menus, multi-window behavior, restoration, packaging, CI, performance, testing, and broader app work that may use Paper.design as one input. When the primary task is faithfully translating a selected Paper.design frame into an existing GPUI view, use paper-to-gpui instead. Covers published GPUI and pinned Zed revisions, platform boundaries, narrow AppKit interop, and stability audits.4---56# Build GPUI Apps78Build native GPUI software that is correct before it is glossy, genuinely9platform-aware before it is Apple-styled, and verified in the running app10before it is called complete.1112This is a routed umbrella skill. Read only the reference layers needed for the13task, but always follow the core contract and workflow below.1415## Core contract16171. Inspect the target checkout before changing it: branch, dirty state,18 manifests, lockfile, pinned GPUI source, app entrypoint, root view, theme,19 components, assets, tests, and platform code.202. Treat the target checkout as the API authority. GPUI is pre-1.0; examples21 from `gpui.rs`, Zed main, crates.io, or this skill can differ from the pinned22 revision.233. Preserve working state ownership, commands, shortcuts, persistence, window24 behavior, and platform integration. A visual request is not permission to25 replace the app architecture.264. Keep render work deterministic and cheap. Move blocking I/O and CPU-heavy27 work off the application thread, then update a live entity through the28 appropriate async context.295. Give interactive elements stable IDs, semantic roles, keyboard access,30 visible focus, disabled behavior, and immediate input feedback.316. Use glass as a functional navigation or control layer, not as decoration on32 every surface. Never describe a flat translucent rectangle as native Liquid33 Glass.347. Respect reduced motion, reduced transparency, increased contrast, and35 differentiate-without-color. Provide an opaque fallback.368. Validate compilation, behavior, launch, and visuals. `cargo check` alone37 does not prove focus, fonts, window chrome, scale factor, clipping, motion,38 or material behavior.399. Do not rasterize text, controls, panels, or whole screens to fake fidelity.4010. Preserve unrelated changes and report every unverified platform or runtime41 path plainly.4211. Treat text input, clipboard, menus, drag/drop, and window lifecycle as OS43 contracts. Preserve Unicode range units, composition, focus, command state,44 and stable ownership.4512. For a new application, establish product identity, a pinned toolchain and46 GPUI revision, observable startup, storage policy, CI, and packaging gates47 before calling the starter production-ready.4849## Route the task5051| Task | Read first | Also read when relevant |52|---|---|---|53| Set up or harden a production-ready starter app | [production-starter.md](references/production-starter.md) | [project-versioning.md](references/project-versioning.md), [testing-qa.md](references/testing-qa.md) |54| Orient a GPUI checkout or choose dependency features | [project-versioning.md](references/project-versioning.md) | [testing-qa.md](references/testing-qa.md) |55| Design state, events, actions, or component boundaries | [architecture-state.md](references/architecture-state.md) | [async-performance.md](references/async-performance.md) |56| Build views, controls, layout, themes, overlays, or lists | [components-layout.md](references/components-layout.md) | [worked-patterns.md](references/worked-patterns.md) |57| Add Apple-like glass, translucency, depth, or macOS material | [apple-glass.md](references/apple-glass.md) | [accessibility-platform.md](references/accessibility-platform.md) |58| Add animation, drag, momentum, springs, or gesture behavior | [motion-input.md](references/motion-input.md) | [accessibility-platform.md](references/accessibility-platform.md) |59| Add focus, keyboard, screen-reader, typography, or platform behavior | [accessibility-platform.md](references/accessibility-platform.md) | [components-layout.md](references/components-layout.md) |60| Add editable text, IME, clipboard, drag/drop, menus, multi-window behavior, or restoration | [input-windows.md](references/input-windows.md) | [accessibility-platform.md](references/accessibility-platform.md), [testing-qa.md](references/testing-qa.md) |61| Add async loading, background work, virtualization, or performance fixes | [async-performance.md](references/async-performance.md) | [architecture-state.md](references/architecture-state.md) |62| Add or review tests, launch checks, screenshots, or release gates | [testing-qa.md](references/testing-qa.md) | [visual-validation.md](references/visual-validation.md) |63| Use Paper.design inside broader GPUI app or architecture work | [paper-to-gpui.md](references/paper-to-gpui.md) | [paper-mcp.md](references/paper-mcp.md), [visual-validation.md](references/visual-validation.md) |64| Faithfully translate a selected Paper.design frame as the primary task | Use the standalone `paper-to-gpui` skill | Return here only for broader app architecture or production work |65| Need complete, copyable patterns | [worked-patterns.md](references/worked-patterns.md) | The domain reference for the pattern |66| Verify why a rule exists or refresh time-sensitive claims | [sources.md](references/sources.md) | Current target source and official docs |6768## Workflow6970### 1. Establish scope and current truth7172Run the read-only inspector:7374```sh75scripts/inspect_gpui_project.sh /path/to/project76```7778Then inspect directly:7980- Read repository instructions and determine whether the request authorizes81 edits or only diagnosis/review.82- Confirm the owning crate and the smallest surface that can satisfy the task.83- Record the GPUI declaration and exact lockfile version or Git revision.84- Find a similar component that compiles in this checkout.85- Identify current theme access, asset loading, focus conventions, actions,86 overlay system, async patterns, and test support.87- Note the platform and minimum OS versions. Do not silently make a88 cross-platform component macOS-only.8990Read [project-versioning.md](references/project-versioning.md) before creating a91new app, changing startup, changing GPUI versions, or copying an upstream API.9293For a greenfield or starter-hardening request, read94[production-starter.md](references/production-starter.md) before choosing the95crate layout. It uses96[lassejlv/gpui-starter](https://github.com/lassejlv/gpui-starter) as a concrete97minimal example, then adds the missing production contracts without pretending98every app needs every subsystem.99100### 2. Write the behavioral contract101102Before implementation, state:103104- source of truth for state;105- user actions and resulting events/state transitions;106- loading, empty, disabled, error, and cancellation states;107- focus owner, tab order, shortcuts, pointer and touch behavior;108- text index units, composition, clipboard, menu, and window ownership when in109 scope;110- resize and scrolling behavior;111- material tier and fallbacks;112- reduced-motion, opaque, and high-contrast behavior;113- target platforms and what must be verified on each.114115For a visual translation, add the exact source frame, viewport, theme, fonts,116assets, and screenshot evidence.117118### 3. Choose the smallest correct GPUI register119120Use:121122- an ordinary element tree for normal layout and styling;123- `RenderOnce` for stateless, value-like reusable components;124- an `Entity<T>` implementing `Render` for independently changing state;125- a project model entity for shared domain state;126- `canvas` or a custom `Element` only when ordinary layout or painting cannot127 meet the requirement;128- a narrow platform bridge only for behavior GPUI cannot supply.129130Do not create an entity for every wrapper. Do not keep meaningful state in131ephemeral render-local values. Read132[architecture-state.md](references/architecture-state.md) and133[components-layout.md](references/components-layout.md).134135### 4. Implement one vertical slice136137Build one end-to-end path before broad extraction:1381391. Domain state or model operation1402. Typed action or event1413. Entity update1424. `cx.notify()` or emitted event1435. Rendered default state1446. Pointer, keyboard, focus, and accessibility behavior1457. Error/cancellation state1468. Targeted test147148Only extract a reusable component or token after a repeated semantic or visual149pattern is proven. Keep public APIs narrow and predictable.150151### 5. Apply Apple design without lying about capability152153Select the material tier in this order:1541551. Existing system or project component1562. Native macOS 26+ `NSGlassEffectView` behind an availability boundary1573. `NSVisualEffectView` or GPUI whole-window blur when that is the actual need1584. Cross-platform GPUI approximation using semantic tint, border, highlight,159 shadow, and opacity1605. Opaque/high-contrast fallback161162Do not stack glass on glass. Keep content surfaces mostly solid. Use concentric163geometry, restrained tint, adaptive light/dark tokens, and clear elevation.164Read [apple-glass.md](references/apple-glass.md).165166### 6. Make interaction physical and interruptible167168- Respond on press/down, then commit on release/click.169- Keep direct manipulation 1:1 and preserve the grab offset.170- Carry velocity from gesture to settling motion.171- Retarget from current presentation state and velocity.172- Keep input active while motion runs.173- Use symmetric enter/exit paths and anchor presentations to their source.174- Prefer `AnimationExt::with_animation` for decorative finite motion when the175 pinned version supports it; it integrates with GPUI reduced-motion state.176- Use explicit state plus frame requests for interactive springs. The bundled177 [spring.rs](assets/spring.rs) is a pure-Rust starting point, not a substitute178 for target-version integration.179180Read [motion-input.md](references/motion-input.md) before implementing custom181animation or gestures.182183For editable text, native command surfaces, drag/drop, or more than one window,184read [input-windows.md](references/input-windows.md). Prefer a maintained editor185component over implementing the platform input contract from scratch.186187### 7. Protect lifecycle and performance188189- Hold a returned `Task` when dropping it should cancel work; detach only when190 app-lifetime completion is deliberate and errors are observed.191- Hold a `Subscription` when the observer has an owner; detach only when entity192 lifetime semantics are correct.193- Capture `WeakEntity` in long-running work.194- Use `background_spawn` for blocking/CPU work and `cx.spawn` or195 `cx.spawn_in` for application-thread orchestration.196- Virtualize large collections with `list` or `uniform_list`.197- Avoid filesystem, network, sleep, parsing, and unbounded allocation in198 `render`.199- Request animation frames only while something is changing.200201Read [async-performance.md](references/async-performance.md).202203### 8. Validate in widening rings204205Run repository-native checks first, then adapt this baseline:206207```sh208cargo fmt --check209cargo check -p <owning-crate>210cargo test -p <owning-crate>211cargo clippy -p <owning-crate> --all-targets -- -D warnings212```213214Also:215216- launch the real app;217- exercise mouse, keyboard, focus, resize, scroll, and relevant touch paths;218- verify light, dark, inactive-window, reduced-motion, opaque, and219 high-contrast states where supported;220- capture matching screenshots for visual work;221- check at 1x and a high-DPI scale;222- inspect logs and task/error states;223- run at least one targeted `#[gpui::test]` when behavior uses GPUI input,224 focus, actions, timing, or windows.225226Read [testing-qa.md](references/testing-qa.md) and227[visual-validation.md](references/visual-validation.md).228229This skill includes a compile-checked, exact-revision fixture at230`assets/reference-app`. It demonstrates startup, actions, entity events,231owned async work, accessibility, menus, multiple windows, virtualization,232preference-aware material fallbacks, and spring orchestration. It is a pattern233fixture, not a production component framework. Validate it with:234235```sh236scripts/validate_reference_app.sh237```238239## Production starter path240241For “create a GPUI app,” “set up a starter,” or “make this starter242production-ready”:2432441. Gather the product name, package/binary slug, owned application ID,245 supported platforms, minimum OS versions, distribution route, durable data,246 and update owner.2472. Inspect the target and the exact starter/example commit. Never copy over an248 existing checkout or delete its Git history without authorization.2493. Keep the minimal `desktop`/`ui` split until domain code proves a separate250 headless crate.2514. Pin the Rust toolchain and GPUI Git revision, commit `Cargo.lock`, and make252 the first clean CI baseline reproducible.2535. Rename identity across crates, binary, action namespace, app ID, menus,254 storage, icons, packaging, and update metadata.2556. Add observable startup, configuration/migrations, secret storage,256 lifecycle-owned async work, accessible controls, diagnostics, and recovery257 only where the product requires them.2587. Replace the demo with one real vertical slice and test it from domain state259 through action, GPUI update, persistence/error state, restart, and release260 launch.2618. Build, sign, install, upgrade, and exercise real artifacts on every claimed262 platform. Report cross-compilation separately.263264Do not call a raw release binary, a green `cargo check`, or the unmodified265minimal example production-ready. Use the complete acceptance matrix in266[production-starter.md](references/production-starter.md).267268## Paper.design path269270Use this path when Paper is one input to broader GPUI app, architecture, or271production work. When faithful translation of a selected Paper frame is the272primary task, route to the standalone `paper-to-gpui` skill instead.273274For Paper input within broader work:2752761. Require a live Paper MCP connection and one exact selected frame or node ID.2772. Verify the open file with `get_basic_info` and intent with `get_selection`.2783. Capture a 2x screenshot, hierarchy, JSX as structural evidence, computed279 styles, fonts, tokens, and actual exportable assets.2804. Preserve the GPUI app architecture and translate layout semantics, not DOM281 wrapper count.2825. Implement geometry, typography, paint, assets, and interactions in that283 order.2846. Compare Paper and native screenshots at matching logical bounds.285286If Paper is unavailable, stop the design extraction path and explain how to287connect it. Do not recreate the design from memory. Read288[paper-to-gpui.md](references/paper-to-gpui.md) and289[paper-mcp.md](references/paper-mcp.md).290291## Review standard292293Rank findings by user impact and confidence. Require evidence for claims about:294295- stale or dropped tasks/subscriptions;296- missed `cx.notify()` calls;297- unstable or duplicate element IDs;298- focus traps or pointer-only controls;299- blocking application-thread work;300- unbounded render allocation;301- incorrect fixed sizing or clipping;302- unsupported blur/material claims;303- missing accessibility role, label, state, or action;304- animation that ignores reduced motion;305- platform API use without availability guards;306- green compilation presented as visual or runtime proof.307308Do not turn style preferences into correctness findings.309310## Completion report311312Report:313314- GPUI version/revision and target platforms;315- files and architectural boundaries changed;316- material tier and fallback behavior;317- interaction, focus, accessibility, async, and performance behavior;318- text/IME, command, window lifecycle, and restoration behavior when relevant;319- tests, builds, launch, and visual comparisons actually performed;320- remaining deltas, unverified platforms, and version-sensitive assumptions.321322For the research snapshot behind this skill, read323[sources.md](references/sources.md). Refresh upstream APIs when the target324revision differs or the snapshot is no longer current.325326After substantial suite changes, run the realistic prompts and reviewer-only327rubrics in [forward-tests.md](tests/forward-tests.md) with fresh agents. Fix328routing or instruction gaps before publishing.