Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use when you are about to hand off any UI change - the four-width check and the screenshot checklist that decide whether the screen is really done.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
A change that compiles and passes its tests has not been looked at. The UI you're about to hand off is not done because the build is green or because you read the JSX and it looked right — it is done when you have screenshots at four widths that prove it.
Core principle: Default assumption: the change is NOT done until the screenshots prove it. Be the skeptic here, not the advocate — look for what's still wrong, not for confirmation that it's fine.
mkdir -p /tmp/tt-<task key> && npm run dev > /tmp/tt-<task key>/dev.log 2>&1 &, then sleep 5; cat /tmp/tt-<task key>/dev.log to read the port.browser_navigate to the changed page.browser_wait_for the content that proves the page actually rendered (not a spinner, not a blank shell).browser_set_viewport with the exact args from the table below.browser_screenshot with full_page: true and no width argument (passing width here re-emulates the viewport and silently throws away the size you just set).browser_read_dom with contains: "..." for each new element, to confirm it's actually present (and whether hidden) — this is not a substitute for looking at the screenshot, it's a second signal.| Name | Width | browser_set_viewport call | Tailwind band |
|---|---|---|---|
| phone | 360 | {device: "mobile", width: 360} | below sm |
| tablet | 768 | {device: "tablet"} | md |
| laptop | 1024 | {device: "desktop", width: 1024} | lg |
| desktop | 1440 | {device: "desktop"} | xl+ |
Phone is 360, not 390, on purpose — most real overflow bugs show up between 320 and 375, and 390 is wide enough to hide some of them.
Collect every finding from every width before you touch any code. Fixing after each screenshot means re-screenshotting after each fix, which is slower and hides whether one fix broke another width. Fix everything from the batch in one pass, then re-run the full four-width check once. At most two rounds total — whatever is still open after round two goes into the closing message, honestly, rather than triggering a third silent pass.
Each item is a yes/no question with a concrete threshold — "looks okay" is not an answer to any of them.
Layout & overflow
browser_set_viewport report zero horizontal scroll and zero overflowing elements at all four widths?min-w-0, and are long words break-words not break-all?Hierarchy & rhythm
Typography
max-w-prose), are headings text-balance and body text-pretty, are numbers/prices tabular-nums?Colour & contrast
bg-primary, text-muted-foreground) — no raw palette class, no hex, in the diff?States & content resilience
focus-visible, active, and disabled all styled on every control you touched?Navigation & touch
md, does ≥5 links collapse into a menu button with aria-expanded/aria-controls, and does the panel close on link click and Escape?Consistency
Copy
lorem ipsum/placeholder text, no TODO/FIXME visible in the UI?Before calling it done, put the component under realistic stress — not just the one happy-path string from the task description: the longest name/title/URL you can plausibly expect, a zero-item list, an empty string in an optional field. If a co-located test already asserts this, reading that test counts; if not, feed it manually and look.
State, for each width checked: what you set it to, what the viewport report said, and what the screenshot showed. Name any residual issue honestly rather than omitting it — a known gap reported is not a failure, an unverified claim of "done" is.
width argument after browser_set_viewport — it silently re-emulates desktop, so the screenshot is not of the size you think it is.browser_read_dom text alone, with no screenshot actually looked at.아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use when the diff adds or changes an endpoint, resolver, RPC, job or query that takes an object id, a role check, a request binding or a tenant filter - BOLA/IDOR, function-level authorization, mass assignment and tenant scoping
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use on every UI change - semantic HTML, labels for controls, keyboard-navigable dialogs/menus, visible focus, and never color as the only signal
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use when a task changes any screen, form, dialog, menu or control - Lighthouse/axe scan of the changed screens, a keyboard walk, and the thresholds that fail a task
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
How to work a task returned with review, QA or UAT findings. Use when a task is in need_revision or PR review comments are in your context.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use when the repository keeps its alerting in code, or a person asks for alerts outside TaskTrooper - PrometheusRule YAML, a Cloud Monitoring alert policy in Terraform, a Datadog monitor, each routed to TaskTrooper's alert ingest URL so it opens an incident here
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.