| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| Invoke | /marionette:sweep |
| Category | cocode-flutter |
| Complexity | moderate |
| MCP Servers | marionette |
/marionette sweep โ ํ๋ฉด ์ ์ ์ ๊ฒ (ํ ๋ฒ์ ์ญ ํ๊ธฐ)#
ํ๋ง๋๋ก#
์ฑ์ ํ๋ฉด(๋๋ ๋ถํ)๋ค์ ํ๋ํ๋ ์๋์ผ๋ก ๋๋ฌ๋ณด๊ณ ์ฌ์ง์ ์ฐ์ด, "๋๋ ๋๋ฐ ์๋ฌด ๋ฐ์ ์๋" ๊ฒ๋ค์ ๊ณจ๋ผ๋ด๋ ์ผ๊ด ์ ๊ฒ ๋๊ตฌ์ ๋๋ค. ๋ง์น ๋งค์ฅ ์ง์์ด ์ง์ด๋ ๋ชจ๋ ์ ํ์ ๋ฒํผ์ ์ง์ ๋๋ฌ๋ณด๋ฉฐ "์ด๊ฑด ๊ณ ์ฅ๋ฌ๋ค" ํ๊ณ ํ์ํด ๋๋ ๊ฒ๊ณผ ๊ฐ์์.
๋๊ฐยท์ธ์ ์ฐ๋์#
- ํ๋ฉด์ด๋ UI ๋ถํ์ ํ๊บผ๋ฒ์ ์ ๊ฒํด ๋ฐ์ ์๋(๊ณ ์ฅ๋) ๊ณณ์ ์ฐพ์๋ด๊ณ ์ถ์ ๋
- ์ ๋ฒ์ ์ ๋ด๋ณด๋ด๊ธฐ ์ , ํ๊ท ์ ๊ฒ(์ด์ ์ ๋ฉ์ฉกํ๋ ๊ฒ ๋ง๊ฐ์ง์ง ์์๋์ง ํ์ธ)์ด ํ์ํ ๋
- ์ ๊ฒ ๋์์ ๋ ๊ฐ์ง ์ค ํ๋์
๋๋ค: ๋์์ธ ๋ถํ ๋ชจ์(
coui) ๋๋ ์ฑ์ ํ๋ฉด ๋ชฉ๋ก(routes).
๋ฌด์์ ํด์ฃผ๋์#
์ ๊ฒ์ด ๋๋๋ฉด ๊ฒฐ๊ณผ๋ฌผ์ด ํ ํด๋(.claude/docs/marionette/<run_id>/)์ ์ ๋ฆฌ๋์ด ๋จ์ต๋๋ค:
-
ํ๋ฉด ์ฌ์ง (
screens/) โ ๊ฐ ํญ๋ชฉ์ ๋๋ฅด๊ธฐ ์ (_idle.png)๊ณผ ๋๋ฅธ ํ(_after.png) ์ฌ์ง - ๋๋ฌ๋ณธ ์์ ๋ชฉ๋ก (
interactive/<ํญ๋ชฉ>.json) โ ๊ฐ ํ๋ฉด์์ ์ด๋ค ๋ฒํผยท์ ๋ ฅ์นธ์ ๊ฑด๋๋ ธ๋์ง - ๋ก๊ทธ (
logs.txt) โ ๋์ค์ ์ค๋ฅ๊ฐ ๋ ๊ฒฝ์ฐ ๊ทธ ํ์ - ์์ฝ ๋ณด๊ณ ์ (
summary.md) โ ํญ๋ชฉ๋ณ๋ก "๋ฐ์ํจ / ๋ฐ์ ์์ / ์ค๋ฅ"๋ฅผ ํ๋์ ๋ณด๋ ํ
์ด ๋๊ตฌ๋ ๋ฌธ์ ๋ฅผ ์ฐพ์ ์ฆ๊ฑฐ๋ฅผ ๋จ๊ธฐ๊ธฐ๋ง ํ ๋ฟ, ์ง์ ๊ณ ์น์ง๋ ์์ต๋๋ค. ๋ฐ๊ฒฌ๋ ๋ฌธ์ ๋ ๋ค์ ๋จ๊ณ์์ ์ด์๋ก ๋ฑ๋กํด ์ฒ๋ฆฌํฉ๋๋ค.
์ด๋ป๊ฒ ์ฐ๋์#
# ๋์์ธ ๋ถํ ๋ชจ์(coui)์ ์ ๊ฒํ๋, ์ฒ์์ 20๊ฐ๋ง (์ํ ์ผ์)
/marionette sweep --catalogue=coui --limit=20 --output=.claude/docs/marionette/coui-v2.3/
-
--catalogue(ํ์): ๋ฌด์์ ์ ๊ฒํ ์ง.coui(๋์์ธ ๋ถํ) /routes(์ฑ ํ๋ฉด ๋ชฉ๋ก) / ์ง์ ๋ง๋ ๋ชฉ๋ก ํ์ผ(YAML) ์ค ํ๋ --limit(์ ํ): ํ ๋ฒ์ ์ ๊ฒํ ๊ฐ์ ์ ํ. ์ฒ์ ์ํ ์ผ์ ๋๋ฆด ๋ ์ ์ฉ--output(์ ํ): ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ํด๋ ์์น--actions(์ ํ): ๋ถํ ์ข ๋ฅ๋ณ ๊ธฐ๋ณธ ๋์์ ๋ฐ๊พธ๊ณ ์ถ์ ๋
์์์ ๋ฌด์จ ์ผ์ด ๋ฒ์ด์ง๋์#
๋ชฉ๋ก์ ์๋ ๊ฐ ํญ๋ชฉ๋ง๋ค ์๋ ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค:
- ํด๋น ํญ๋ชฉ(ํ๋ฉดยท๋ถํ)์ผ๋ก ์ด๋ํฉ๋๋ค.
- ๊ฑด๋๋ฆฌ๊ธฐ ์ ๋ชจ์ต์ ์ฌ์ง์ผ๋ก ์ฐ์ด ๋ก๋๋ค (
_idle.png). - ๊ทธ ํ๋ฉด์์ ๋๋ฅผ ์ ์๋ ์์๋ค์ ๋ชจ๋ ์ฐพ์๋ ๋๋ค.
- ๋ฒํผ์ ๋๋ฅด๊ณ , ์ ๋ ฅ์นธ์ ๊ธ์๋ฅผ ๋ฃ๊ณ , ์ค์์น๋ ์ผ๋ ์์ผ๋ก ์ข ๋ฅ์ ๋ง๋ ๋์์ ํ ๋ฒ์ฉ ํด๋ด ๋๋ค.
- ๊ฑด๋๋ฆฐ ๋ค ๋ชจ์ต์ ๋ค์ ์ฌ์ง์ผ๋ก ์ฐ์ต๋๋ค (
_after.png). - ๋ ์ฌ์ง์ ๋น๊ตํฉ๋๋ค โ ๋๊ฐ์ผ๋ฉด "๋ฐ์ ์์"์ผ๋ก ํ์, ๋ฌ๋ผ์ง๋ฉด "์ ์", ์ค๋ฅ๊ฐ ๋ฌ์ผ๋ฉด ๋ก๊ทธ๋ฅผ ํจ๊ป ๊ธฐ๋กํฉ๋๋ค.
์ด ์ ๊ฒ์ ํ ๋ฒ์ ์ญ ํ๊ณ ๋์ ๋๋ค(๋ฐ๋ณตํ๋ฉฐ ๊ณ ์น์ง ์์). ๊ฒฐ๊ณผ ํ๋ฅผ ๋ณด๊ณ ์ด๋๊ฐ ๋ฌธ์ ์ธ์ง ํ์ ํ๋ ์ฉ๋์์.
โ๏ธ ์์ธ ์ต์ ยท์คํ ๋ช ์ธ (๊ฐ๋ฐ์ / AI ์์ด์ ํธ์ฉ)
Parameters#
| Parameter | Required | Description | Default |
|---|---|---|---|
--catalogue | โ | coui (Widgetbook), routes (app router table), or a path to a YAML manifest | โ |
--limit | โ | Cap on items processed (useful for first dry-run) | unlimited |
--output | โ | Output dir | .claude/docs/marionette/<ts>/ |
--actions | โ | Override default smoke actions per type (YAML inline) | sensible defaults |
Default Smoke Actions per Type#
| Type | Action |
|---|---|
PrimaryButton / SecondaryButton / others | tap |
Input / Textarea | enter_text("marionette-test") |
Toggle / Switch / Checkbox | tap (flip) |
Slider | tap mid-track |
TabItem | tap |
AccordionItem | tap (expand) |
Loop#
For each catalogue item:
- Navigate to the item (
tapon Widgetbook sidebar entry ORGoRouter.go(route)). take_screenshotsโscreens/<item>_idle.png.get_interactive_elementsโinteractive/<item>.json.- For each element, run the type's smoke action.
take_screenshotsโscreens/<item>_after.png.- Diff the two screenshots:
- identical โ flag as "non-responsive" in
summary.md. - changed โ record as "interactive".
- threw โ collect
get_logsexcerpt around the timestamp.
- identical โ flag as "non-responsive" in
Output#
.claude/docs/marionette/ < run_id > /
โโโ interactive/
โ โโโ < item > .json
โโโ screens/
โ โโโ < item > _idle.png
โ โโโ < item > _after.png
โโโ logs.txt
โโโ summary.md # table of items ร actions ร resultConvergence#
The sweep is one-shot โ no iteration. It produces evidence, not fixes. Use this output to open ZenHub issues; see cc-code-quality:bug-report for the next step.
Example#
/marionette sweep --catalogue=coui --limit=20 --output=.claude/docs/marionette/coui-v2.3/[1/20] PrimaryButton โ idle.png + after.png + 4 interactive elements
[2/20] SecondaryButton โ idle.png + after.png + 4 interactive elements
...
[20/20] Toggle โ idle.png + after.png + 2 interactive elements
Non-responsive: 1 (LinkButton.disabled โ expected, see ADR-12)
Threw: 0
Report: .claude/docs/marionette/coui-v2.3/summary.md