| name | apply-ui-design |
| description | Write the merged Pencil design reference back into a UI implementation Issue's description so the implementation session can use it as input. Takes the Issue number as argument, resolves the merged design PR on the `cc-ui-design-<Issue number>` branch, collects the `.pen` and snapshot paths it added, and appends (or replaces) the `## UIãã¶ã€ã³` section at the end of the Issue body using a lost-update-safe edit. |
| argument-hint | [issue-number] |
| disable-model-invocation | true |
| hooks | {"Stop":[{"matcher":"","hooks":[{"type":"command","command":"node \"${CLAUDE_PLUGIN_ROOT}/scripts/stop-servers.mjs\""}]}]} |
Apply UI Design
ããŒãžæžã¿ã®ãã¶ã€ã³PRã®å
容ããå®è£
Issue $0 ã® description ã«ããã¶ã€ã³åç
§ã»ã¯ã·ã§ã³ããšããŠæžãæ»ãã¹ãã«ã§ããexec-issue 㯠description ãå¯äžã®å
¥åãšããŠå®è£
ãããããããã§åç
§ãæ®ããªããšåææžã¿ãã¶ã€ã³ãå®è£
ã»ãã·ã§ã³ã«å±ããªãã
ãã®ã¹ãã«ã¯ã³ãŒãã .pen ã倿Žããªããè¡ãã®ã¯Issue description ã®æŽæ°ã®ã¿ã
Instructions
å®è¡ã¢ãŒãã®å¶çŽ
æ¬ã¹ãã«åºæã®ãªã¹ã¯: æ¬ã¹ãã«ã¯ claude-task-worker ã® apply-ui-design ã¯ãŒã«ãŒïŒcc-ui-design-pr-created ã©ãã«ïŒããèªåèµ·åãããã¯ãŒã«ãŒã¯ã¹ãã«ããã»ã¹ã®åæå®äºãæ ¹æ ã«ã©ãã«é·ç§»ïŒcc-ui-design-ready + cc-exec-issue ã®ä»äžïŒãé²ãããdescription ã®æŽæ°ãæªå®ã®ãŸãŸã¿ãŒã³ãçµãããšããã¶ã€ã³åç
§ãç¡ããŸãŸå®è£
ãã§ãŒãºãžæµããåææžã¿ãã¶ã€ã³ãšç¡é¢ä¿ãªå®è£
PRãäœãããç¶æ
å£ããèµ·ããïŒã¯ãŒã«ãŒåŽã® onCompleted ã¯ãããæ€åºã㊠cc-need-human-check ã«èœãšãïŒã
ã©ãã«æäœã¯ã¯ãŒã«ãŒåŽãè¡ããæ¬ã¹ãã«ã¯ gh issue edit --add-label / --remove-label ãå®è¡ããªãã
ãã§ãŒãº0: äºåãã§ãã¯
gh issue view $0 --json number,title,body,state ã§Issueã OPEN ã§ããããšã確èªãããCLOSEDãªã äžæ
- descriptionïŒ
bodyïŒã¯åŸç¶ãã§ãŒãºã§äžžããšä¿æããããã倿°ã«æ§ããŠãã
å®äºæ¡ä»¶: Issue OPENãçŸåšã® description ãååŸæžã¿ã
ãã§ãŒãº1: ãã¶ã€ã³PRãšãã¶ã€ã³ææç©ã®ç¹å®
1-1. ãã¶ã€ã³PRã®ç¹å®
gh pr list --head "cc-ui-design-$0" --state all --json number,url,state,mergedAt
--limit 1 ã¯ä»ããªããåäžheadãã©ã³ãã«æªããŒãžPRãšMERGED PRãæ··åšãããããããŸãå
šä»¶ååŸããããã§ state == "MERGED" ã®ãã®ã ããéžå¥ããã
- éžå¥çµæã 0ä»¶ ãŸãã¯ è€æ°ä»¶ ã®å Žåã¯ äžæ ããïŒ0ä»¶ã¯ããŒãžåŸ
ã¡ã head äžäžèŽãè€æ°ä»¶ã¯ãã©ã³ãã®åå©çšã»éçšãã¹ã®çãããããããããèªå倿ãã¹ãã§ãªãïŒãçç±ãåºåããã¯ãŒã«ãŒåŽã§ã®
cc-need-human-check ä»äžãä¿ãæšãæçµå ±åã«å«ããŠçµäºãã
- éžå¥çµæã1ä»¶ã®ã¿ã®å Žåã«éãããã®
number ãš url ãæçµå ±åãš description ã«äœ¿ãããä¿æãã
1-2. ããŒãžãããææç©ã®ãã¹ååŸ
gh pr diff <ãã¶ã€ã³PRçªå·> --name-only
åºåãã以äžãåé¡ããã
.pen ãã¡ã€ã«: ãã¶ã€ã³ãã¡ã€ã«ïŒéåžž1ä»¶ïŒ
snapshots/ é
äžã® .png: ã¹ãããã·ã§ãã
.pen ã1ä»¶ãç¡ãå Žåã¯ äžæ ããïŒãã¶ã€ã³PRãšããŠæç«ããŠããªãïŒã.pen ã¯ãã£ãŠã snapshots/ é
äžã« .png ã1ä»¶ãç¡ãå Žåã äžæ ããïŒã¹ãããã·ã§ããåºååã®äžéå端ãªPRãåç
§å
ã«ã§ããªãããïŒã
å®äºæ¡ä»¶: ãã¶ã€ã³PRçªå·ã»URLã».pen ãã¹ã»1件以äžã®ã¹ãããã·ã§ãããã¹ã確å®ããŠããããšã
ãã§ãŒãº2: description ãžã®ãã¶ã€ã³åç
§ã»ã¯ã·ã§ã³ã®è¿œèš
2-1. 远èšããã»ã¯ã·ã§ã³ã®çµã¿ç«ãŠ
以äžã®ãã©ãŒãããã§çµã¿ç«ãŠãããã¹ã¯å¿
ããã§ãŒãº1-2ã§ååŸããå®ãã¹ã«çœ®ãæããã
## UIãã¶ã€ã³
æ¬Issueã®å®è£
ã¯ã以äžã®UIãã¶ã€ã³ã**åç
§å
**ãšããŠè¡ãããšããã¶ã€ã³ãšç°ãªãå®è£
ãå¿
èŠã«ãªã£ãå Žåã¯ãå®è£
ãé²ããåã«Issueã«ã³ã¡ã³ãã§çç±ãæ®ãããšã
- ãã¶ã€ã³ãã¡ã€ã«: `<.pen ã®å®ãã¹>`
- ã¹ãããã·ã§ãã: `<snapshots/ é
äžã® PNG ãã¹ãè€æ°ããã°åæ>`
- ãã¶ã€ã³PR: #<ãã¶ã€ã³PRçªå·>ïŒããŒãžæžã¿ïŒ
### å®è£
æã®é²ãæ¹
1. `.pen` ã¯æå·åãã€ããªã®ããçŽæ¥èªãŸãªãã`inspect-pencil-node` ã¹ãã«ã§å¯Ÿè±¡Nodeã®æ§é ã»ã¹ã¿ã€ã«ãååŸãã
2. UIã®å®è£
㯠`frontend-implementer` ãšãŒãžã§ã³ãã«å§è²ããäžèšãã¶ã€ã³ãåç
§å
ãšããŠå®è£
ãã
3. ãã¶ã€ã³åŽã®ä¿®æ£ãå¿
èŠã«ãªã£ãå Žå㯠`.pen` ãå®è£
PRã§çŽæ¥ç·šéãããIssueã«ã³ã¡ã³ããæ®ã
2-2. ãã¹ãã»ã¢ããããŒã察çä»ãã®æžãæ»ã
æ¢åæ¬æã¯å¿
ãä¿æããããã§ã« ## UIãã¶ã€ã³ ã»ã¯ã·ã§ã³ãããå Žåã¯ãéè€è¿œèšãã眮æããïŒã»ã¯ã·ã§ã³èŠåºããããæ¬¡ã®åã¬ãã«èŠåºãïŒè¡é ã ## ã§å§ãŸãèŠåºãïŒã®çŽåãŸã§ããŸãã¯èªã»ã¯ã·ã§ã³ãçæããå®åå
容ïŒäžèš2-1ã®ãã©ãŒãããïŒã®çµç«¯ãŸã§ãå·®ãæ¿ãããã»ã¯ã·ã§ã³æ«å°Ÿã«äººéã远èšããã³ã¡ã³ãçã¯ãã®å®åå
容ã®å€åŽãšã¿ãªãã眮æå¯Ÿè±¡ã«å«ããä¿æããïŒã
åºå®ãã¹ã¯åäžIssueãžã®äžŠè¡å®è¡ã§è¡çªããããã mktemp ã§äžæãªäžæãã¡ã€ã«ã確ä¿ãããããã«ãæ¬æã®ååŸïŒviewïŒãšæžãæ»ãïŒeditïŒã®éã«äººéãŸãã¯å¥ããã»ã¹ãæ¬æãæŽæ°ããŠããå¯èœæ§ããããããedit çŽåã«æ¬æãåååŸããŠå·®åãæ€èšŒããã
BODY_FILE="$(mktemp -t issue-$0-body-XXXXXX.md)"
trap 'rm -f "$BODY_FILE"' EXIT
ORIGINAL_BODY="$(gh issue view $0 --json body --jq .body)"
<çµã¿ç«ãŠåŠç>
LATEST_BODY="$(gh issue view $0 --json body --jq .body)"
if [ "$LATEST_BODY" != "$ORIGINAL_BODY" ]; then
attempt=1
while [ "$attempt" -le 2 ]; do
ORIGINAL_BODY="$LATEST_BODY"
<çµã¿ç«ãŠåŠçïŒLATEST_BODYåºæºïŒ>
if gh issue edit $0 --body-file "$BODY_FILE"; then
LATEST_BODY_AFTER="$(gh issue view $0 --json body --jq .body)"
break
fi
LATEST_BODY="$(gh issue view $0 --json body --jq .body)"
attempt=$((attempt + 1))
done
if [ "$attempt" -gt 2 ]; then
echo "å€éšå€æŽãšã®ç«¶åã2åã®å詊è¡åŸãåæããªãã£ãããæŽæ°ãæå¿µ" >&2
exit 1
fi
else
gh issue edit $0 --body-file "$BODY_FILE"
fi
å€éšå€æŽãæ€ç¥ããå Žåã¯ãäžæžãããææ°æ¬æãèµ·ç¹ã« BODY_FILE ãåæ§ç¯ããŠãã gh issue edit ãå詊è¡ããïŒæå€§2åãŸã§ïŒã2åç®ã LATEST_BODY ãåååŸã®ãã³ã«å€åãç¶ããçã§åæããªãå Žåã¯ãæŽæ°ã諊ãããã®æšãšçç±ãæçµå ±åã«æèšããŠå€±æãšããŠçµäºããïŒã¯ãŒã«ãŒåŽã® onCompleted ãæ€åºã㊠cc-need-human-check ã«èœãšãåæïŒã
2-3. æŽæ°ã®æ€èšŒ
gh issue view $0 --json body --jq .body | grep -F '## UIãã¶ã€ã³'
gh issue view $0 --json body --jq .body | grep -F '.pen'
äž¡æ¹ããããããªãå Žåã¯æŽæ°ãåæ ãããŠããªããããäžåºŠã ã 2-2 ã詊è¡ããããã§ãåæ ãããªããã°çç±ãæçµå ±åã«å«ããŠçµäºããïŒã¯ãŒã«ãŒã® onCompleted ãæ€åºã㊠cc-need-human-check ã«èœãšãïŒã
å®äºæ¡ä»¶: description ã« ## UIãã¶ã€ã³ ã»ã¯ã·ã§ã³ãš .pen ã®ãã¹ãå«ãŸããŠããããšãæ¢åæ¬æã倱ãããŠããªãããšã
ãã§ãŒãº3: æçµå ±å
以äžã1-4è¡ã§å ±åããŠçµäºããã
- ãã¶ã€ã³PRçªå·ãšURL
- description ã«æžãæ»ãã
.pen ãã¹ã»ã¹ãããã·ã§ãããã¹
- æ¢åã»ã¯ã·ã§ã³ã眮æããããæ°èŠã«è¿œèšããã
- ïŒè©²åœæïŒæŽæ°ã§ããªãã£ãçç±
äžææ¡ä»¶
以äžã®ããããã«è©²åœããå Žåã®ã¿ãçç±ã1-2è¡ã§åºåããŠå³äžæããã
- åŒæ°ã空ããŸã㯠Issue çªå·ãšããŠè§£éã§ããªã
gh issue view ã§IssueãèŠã€ãããªãããŸã㯠CLOSED
cc-ui-design-$0 ã head ãšããPRã®ãã¡ MERGED ãªãã®ã0ä»¶ããŸãã¯è€æ°ä»¶
- ãã¶ã€ã³PRã®å·®åã«
.pen ãå«ãŸããŠããªã
- ãã¶ã€ã³PRã®å·®åã«
snapshots/ é
äžã® .png ãå«ãŸããŠããªã
- æ¬ææžãæ»ãã®å€éšå€æŽç«¶åãå詊è¡2å以å
ã«åæããªã
泚æäºé
- æ¢åã® description ãæ¶ããªã: 远èšã»çœ®æã®ãããã§ãã
## UIãã¶ã€ã³ ã»ã¯ã·ã§ã³ä»¥å€ã®æ¬æã¯å®å
šã«ä¿æãã
- ã©ãã«ãæäœããªã:
cc-ui-design-ready / cc-exec-issue ã®ä»äžã¯ã¯ãŒã«ãŒã®è²¬åãæ¬ã¹ãã«ã¯ description ã®æŽæ°ã®ã¿ãè¡ã
.pen ãèªãŸãªãã»ç·šéããªã: ãã¹ã®ååŸã¯ gh pr diff --name-only ã§è¡ãããã¡ã€ã«èªäœã«ã¯è§Šããªã
- æªå®ã®åŠçãæ®ãããŸãŸå®äºå ±åããŠã¿ãŒã³ãçµããªã: description æªæŽæ°ã®ãŸãŸçµäºãããšããã¶ã€ã³ãªãã§å®è£
ãå§ãŸãç¶æ
å£ãã«ã€ãªãã
- ãŠãŒã¶ãŒã«å€æãæ±ããªã: äžææ¡ä»¶ä»¥å€ã¯ãã¹ãŠæ¬ã¹ãã«å
ã®ã«ãŒã«ã§èªå決å®ãã