| name | create-ui-design |
| description | Create or update the Pencil (`.pen`) design for a UI implementation Issue before any code is written, then open a design-only PR. Takes the Issue number as argument, extracts the design requirements from the Issue description and comments, delegates `.pen` edits to the pencil-design-updater agent, exports snapshot PNGs, pushes them on the fixed `cc-ui-design-<Issue number>` branch, and opens a PR that references the Issue with `Refs #<N>` (never a closing keyword). |
| argument-hint | [issue-number] |
| disable-model-invocation | true |
| hooks | {"Stop":[{"matcher":"","hooks":[{"type":"command","command":"node \"${CLAUDE_PLUGIN_ROOT}/scripts/stop-servers.mjs\""}]}]} |
Create UI Design
UIå®è£
Issue $0 ã«å¯ŸããŠãå®è£
ã«å
ç«ã£ãŠ Pencil ã®ãã¶ã€ã³ïŒ.penïŒãäœæã»æŽæ°ãããã¶ã€ã³ã®ã¿ã®ç¬ç«ããPRãäœãã¹ãã«ã§ããInstructionsã«åŸã£ãŠé ã«å®è¡ããåãã§ãŒãºã®ãå®äºæ¡ä»¶ããæºãããªããŸãŸæ¬¡ã®ãã§ãŒãºã«é²ãŸãªãããšã
ãã®ã¹ãã«ã¯ã³ãŒããå®è£
ããªããå·®å㯠.pen ãšã¹ãããã·ã§ãã PNG ã®ã¿ã«éå®ãããå®è£
ã¯æ¬ãã¶ã€ã³PRã®ããŒãžåŸã« exec-issue ãæ
åœããã
Instructions
å®è¡ã¢ãŒãã®å¶çŽ
æ¬ã¹ãã«åºæã®ãªã¹ã¯: æ¬ã¹ãã«ã¯ claude-task-worker ã® create-ui-design ã¯ãŒã«ãŒïŒcc-create-ui-design ã©ãã«ïŒããèªåèµ·åãããã¯ãŒã«ãŒã¯ã¹ãã«ããã»ã¹ã®åæå®äºãæ ¹æ ã«ã©ãã«é·ç§»ïŒcc-ui-design-pr-created ã®ä»äžããã¶ã€ã³PRãžã® cc-triage-scope / cc-ui-design ä»äžïŒãé²ãããåŠçãæªå®ã®ãŸãŸã¿ãŒã³ãçµãããšããã¶ã€ã³PRæªäœæã®ãŸãŸããªã¬ãŒã©ãã«ãå€ããŠIssueãåæ»ãããããã¶ã€ã³ãªãã§å®è£
ãã§ãŒãºãžæµãããããç¶æ
å£ããèµ·ããã
ããªã¢ã³ãã«ïŒ! ã€ã³ã©ã€ã³å®è¡ïŒã«å€±æãããã³ãã³ãã眮ããªãããš: ããªã¢ã³ãã«ã®ã³ãã³ãã倱æãããšãã»ãã·ã§ã³ã¯ã¢ãã«æªèµ·åã®ãŸãŸäœãåºåãã exit 0 ã§çµäºããã¯ãŒã«ãŒã空æ¯ãå®è¡ãå»¶ã
ãšç¹°ãè¿ããpencil ã®çé確èªã¯ãã§ãŒãº0ã®æ¬æã§è¡ãã
ã¹ã³ãŒããšåºåã®èŠåŸ
- IssueãèŠæ±ããŠããç»é¢ã»ç¶æ
ã ãããã¶ã€ã³ãã: ããããšè¯ããããã§ç»é¢ã»ã»ã¯ã·ã§ã³ã»ç¶æ
ããªãšãŒã·ã§ã³ãè¶³ããªãããã¶ã€ã³ãå¢ãããšãã®ãŸãŸå®è£
ã¹ã³ãŒãã®èšåŒµã«ãªããæ°ã¥ããææ¡ã¯
.pen ã«å
¥ããããã¶ã€ã³PRã®æ¬æã«1è¡ã§æããã ãã«ãã
- ææç©ã¯
.pen ãšã¹ãããã·ã§ããPNGã®ã¿ïŒã³ãŒãå®è£
㯠exec-issue ã®è²¬åïŒ
- PRæ¬æã»Issueã³ã¡ã³ãã»æçµå ±åã¯å¿
èŠãªå®è³ªã ã: åã»ã¯ã·ã§ã³1ã3è¡ãç®å®ã«ããåãå
容ã®èšãæããåãèãæžããªãã該åœããªãé
ç®ã¯ããªããã®1èªã§æžãŸãã
- å§è²ã¯
pencil-design-updater 1äœãæ€èšŒç®çã§å¥ã®ãµããšãŒãžã§ã³ããèµ·åãããææç©ã®ç¢ºèªã¯ git status --short ãšã¹ãããã·ã§ããã®ç¢ºèªã§ã¡ã€ã³ãèªåã§è¡ã
ãã§ãŒãº0: äºåãã§ãã¯
以äžãé ã«ç¢ºèªãã倿ã¯èªåã§è¡ãããŠãŒã¶ãŒã«ã¯è³ªåããªãã
0-1. äœæ¥ãã£ã¬ã¯ããªãšIssueã®ç¢ºèª
pwd ã§ .claude/worktrees/ é
äžã«ããããšã確èªãããworktreeå€ãªã äžæïŒããã©ã«ããã©ã³ãã§äœæ¥ããŠã¯ãªããªãïŒ
gh issue view $0 --json number,title,body,state,labels,comments ã§Issueã OPEN ã§ããããšã確èªãããCLOSEDãªã äžæ
git status --short ã§æªã³ããã倿Žãããã° git stash push -u -m "create-ui-design auto-stash $0" ã§èªåéé¿ãããã®æšãæçµå ±åã«æèšãã
0-2. Pencil ã®çé確èª
pencil version
pencil status
ããããã倱æããïŒæªã€ã³ã¹ããŒã«ã»æªèªèšŒãªã©ïŒå Žåã¯ããã¶ã€ã³ãäœããã«ä»¥äžãå®è¡ããŠçµäºããããã®å Žåãã¶ã€ã³PRã¯äœããªãã
- Issue ã«çç±ïŒå®è¡ããã³ãã³ããšãšã©ãŒåºåã®èŠçŽïŒãã³ã¡ã³ããã
gh issue comment $0 --body-file - <<'EOF'
`create-ui-design` 㯠Pencil CLI ãå¿
èŠã§ãããå®è¡ç°å¢ã§å©çšã§ããŸããã§ããã
~~~text
<ã³ãã³ããšãšã©ãŒåºåã®èŠçŽ>
~~~
- Pencil ãã€ã³ã¹ããŒã«ã»èªèšŒããããã§ã`cc-need-human-check` ã©ãã«ãå€ã `cc-create-ui-design` ã©ãã«ãä»ãçŽããŠãã ãã
- ãã¶ã€ã³ãªãã§å®è£
ãžé²ããå Žåã¯ã`cc-need-human-check` ã©ãã«ãå€ã `cc-ui-design-ready` ãš `cc-exec-issue` ã©ãã«ãä»ããŠãã ãã
EOF
gh issue edit $0 --add-label "cc-need-human-check" ãå®è¡ãã
- æçµå ±åã«ãPencil å©çšäžå¯ã»
cc-need-human-check ä»äžæžã¿ããšåå ãæèšããŠçµäºãã
0-3. ãã¶ã€ã³é
眮å
ã®è§£æ±º
ãªããžããªçŽäžã® claude-task-worker.json ã® uiDesign.designDir ãèªããæ¢å®å€ designs ã䜿ã£ãŠããã®ã¯ããã¡ã€ã«ãååšããªããå ŽåããŸãã¯ããã¡ã€ã«ã¯ååšãããããŒæªèšå®ïŒjq ã null ãè¿ãïŒãå Žåã®ã¿ã«éããjq ãexit codeé0ã§çµããå ŽåïŒJSONæ§æãšã©ãŒã»æš©éãšã©ãŒãªã©ã§ãã¡ã€ã«ãèªããªãå ŽåïŒã¯ãæå³ãã designDir ãšç°ãªãå Žæãžãã¶ã€ã³ææç©ãäœã£ãŠããŸãå±éºããããããæ¢å®å€ãžãã©ãŒã«ããã¯ããå®å
šåŽã«åãã
if [ ! -f claude-task-worker.json ]; then
DESIGN_DIR="designs"
elif DESIGN_DIR=$(jq -r '.uiDesign.designDir // "designs"' claude-task-worker.json); then
:
else
JQ_EXIT=$?
echo "failed to read claude-task-worker.json (jq exit ${JQ_EXIT})" >&2
DESIGN_DIR=""
fi
DESIGN_DIR ã空æååã®ãŸãŸïŒ=äžèšã® jq 倱æïŒã®å Žåã¯ããã¶ã€ã³ãäœãããã§ãŒãº0-2ãšåãæé ïŒIssueãžã®çç±ã³ã¡ã³ã + cc-need-human-check ä»äžïŒã§ã¹ãã«ãçµäºããããã®å Žåãã¶ã€ã³PRã¯äœããªãã
å®äºæ¡ä»¶: worktreeå
ã»Issue OPENã»pencil çéOKã»DESIGN_DIR ã空æååã§ãªã確å®ããŠããããšã
ãã§ãŒãº1: ãã¶ã€ã³èŠä»¶ã®æœåº
ãã§ãŒãº0-1ã§ååŸããdescriptionãšã³ã¡ã³ãå±¥æŽããã以äžãæœåºããã
- 察象ç»é¢ã»ã³ã³ããŒãã³ãïŒäœãäœã/å€ããã®ãïŒ
- æ§æèŠçŽ ïŒèŠçŽ ã®äžèЧãšéå±€ã»é
眮ïŒ
- ç¶æ
ããªãšãŒã·ã§ã³ïŒç©ºã»ããŒãã£ã³ã°ã»ãšã©ãŒã»éžæäžã»æš©éå·®ãªã©ãIssueãèŠæ±ãããã®ïŒ
- æ¢åãã¶ã€ã³ã»æ¢åå®è£
ãšã®é¢ä¿ïŒæ¢åç»é¢ã®æ¹ä¿®ãªã®ãæ°èŠãªã®ãïŒ
ãã¶ã€ã³äžèŠãšå€æããå Žå
æœåºã®çµæããã®Issueã¯UI倿Žã䌎ããªãããšå€æããå ŽåïŒãµãŒããŒãµã€ãã®ã¿ãæèšå·®ãæ¿ãã®ã¿ãã¬ã€ã¢ãŠãã«åœ±é¿ããªã埮修æ£ãªã©ïŒã¯ããã¶ã€ã³ãäœããã«ä»¥äžãå®è¡ããŠçµäºããã
- Issue ã«å€æçç±ãã³ã¡ã³ããã
gh issue comment $0 --body-file - <<'EOF'
<UI倿Žã䌎ããªããšå€æããæ ¹æ ãå
·äœçã«>
ãã¶ã€ã³PRã¯äœæããããã®ãŸãŸå®è£
ãã§ãŒãºãžé²ããŸãã
EOF
- å®è£
ããªã¬ãŒãä»äžããïŒ
cc-ui-design-ready ã¯ä»ããªããexec-issue ã®ãã§ãŒãº0ã¬ãŒãã¯åã©ãã«ããããš ## UIãã¶ã€ã³ ã»ã¯ã·ã§ã³ã®ååšãåæã«ããããããã¶ã€ã³äžèŠçµè·¯ã§ã¯ä»äžãã cc-exec-issue ã®ã¿ã§å®è£
ãžæ»ãïŒ
gh issue edit $0 --add-label "cc-exec-issue"
- æçµå ±åã«ããã¶ã€ã³äžèŠã»å®è£
ãã§ãŒãºãžåŸ©åž°ããšçç±ãæèšããŠçµäºãã
å®äºæ¡ä»¶: 察象ç»é¢ã»æ§æèŠçŽ ã»ç¶æ
ããªãšãŒã·ã§ã³ãåæã§ããŠãããããã¶ã€ã³äžèŠãšããŠçµäºããŠããããšã
ãã§ãŒãº2: æ¢åãã¶ã€ã³ã®èª¿æ»
DESIGN_DIR é
äžã® .pen ãåæãã察象ç»é¢ã«å¯Ÿå¿ããæ¢åãã¡ã€ã«ããããã確èªããã
ls -1 "${DESIGN_DIR}"/*.pen 2>/dev/null || echo "(no existing .pen)"
- 察象ç»é¢ã«å¯Ÿå¿ããæ¢å
.pen ãããå Žåã¯ãinspect-pencil-node ã¹ãã«ã§çŸç¶ã®æ§é ã»ã¹ã¿ã€ã«ãååŸããããã§ãæ°èŠäœæã§ã¯ãªãæŽæ°ãã
- ãªãå Žåã¯æ°èŠäœæãã
.pen ã¯æå·åãã€ããªã®ãã Read / Grep ã§éããªããæ§é ã®ææ¡ã¯å¿
ã inspect-pencil-node ã¹ãã«çµç±ã§è¡ãã
å®äºæ¡ä»¶: ãæŽæ°ããæ¢åãã¹ããŸãã¯ãæ°èŠäœæãããã¹ãã®ããããã確å®ããŠããããšã
- æ°èŠ:
<DESIGN_DIR>/$0-<kebab-slug>.penïŒ<kebab-slug> ã¯Issueã¿ã€ãã«ããå°ãçãè±å°æåã±ããã±ãŒã¹ïŒ
- æŽæ°: æ¢åãã¹ããã®ãŸãŸäžæžã
ãã§ãŒãº3: ãã¶ã€ã³ã®äœæã»æŽæ°
pencil-design-updater ãšãŒãžã§ã³ãã«å§è²ããïŒ.pen ã®ç·šé㯠edit-pencil-design ã¹ãã«çµç±ã§ã®ã¿è¡ããçŽæ¥ç·šéã¯çŠæ¢ïŒã
ããªãŒãã£ã³ã°ã«ã¯ä»¥äžããã¹ãŠå«ããïŒãµããšãŒãžã§ã³ãã¯äŒè©±å±¥æŽãæããªãããïŒ:
ãèæ¯ãIssue #$0ã<title>ã: <èŠçŽ 1-2è¡>
ã察象ãã¡ã€ã«ã
<æ°èŠäœæãªãäœæå
ãã¹ / æŽæ°ãªãæ¢åãã¹>ïŒæ°èŠ/æŽæ°ã®å¥ãæèšïŒ
ããã¶ã€ã³ããå
容ã
- 察象ç»é¢ã»ã³ã³ããŒãã³ã: <ãã§ãŒãº1ã®æœåºçµæ>
- æ§æèŠçŽ ãšé
眮: <èŠçŽ ã®äžèЧãšéå±€>
- ç¶æ
ããªãšãŒã·ã§ã³: <空ã»ããŒãã£ã³ã°ã»ãšã©ãŒçãç¡ããã°ããªãã>
ãæ¢åãã¶ã€ã³ãšã®é¢ä¿ã
<æŽæ°ã®å Žå㯠inspect-pencil-node ã§ææ¡ããçŸç¶æ§é ã®èŠçŽãæ°èŠãªããæ°èŠäœæã>
ãå®äºæ¡ä»¶ã
- `edit-pencil-design` ã¹ãã«çµç±ã§ `.pen` ãäœæ/æŽæ°ããããšïŒçŽæ¥ç·šéã¯çŠæ¢ïŒ
- ç·šéã»äœæããNodeã®ã¹ã¯ãªãŒã³ã·ã§ããã `<DESIGN_DIR>/snapshots/` ã« PNG åºåããããš
- `.pen` ãšã¹ãããã·ã§ãã PNG 以å€ã®ãã¡ã€ã«ã倿Žããªãããš
ãäœæ¥ãã£ã¬ã¯ããªã
<worktreeã®çµ¶å¯Ÿãã¹>
ãµããšãŒãžã§ã³ãã®å®äºå ±åãéµåã¿ã«ãããgit status --short ã§ .pen ãšã¹ãããã·ã§ãã PNG ãå®éã«çæã»æŽæ°ãããŠããããšãæ€èšŒãããçæãããŠããªããã°åå§è²ããïŒæå€§2åïŒã2å詊è¡ããŠãçæã§ããªãå Žåã¯ããã§ãŒãº0-2ãšåãæé ã§ cc-need-human-check ãä»äžãã倱æãã°ãå«ããŠçµäºããã
å®äºæ¡ä»¶: .pen ãšã¹ãããã·ã§ãã PNG ã git status --short ã«çŸããŠãããä»ã®ãã¡ã€ã«ã«å·®åããªãããšã
ãã§ãŒãº4: ãã¶ã€ã³ãã©ã³ãã®äœæãšpush
åå®è¡æã«æ¢åãã©ã³ããæ®ã£ãŠããŠã倱æããªããããå
ã«ååšç¢ºèªããŠããäœæ/åãæ¿ããåå²ããã
BRANCH="cc-ui-design-$0"
git fetch origin "${BRANCH}" 2>/dev/null || true
if git rev-parse --verify --quiet "refs/remotes/origin/${BRANCH}" >/dev/null; then
git switch -C "${BRANCH}" "origin/${BRANCH}"
elif git rev-parse --verify --quiet "refs/heads/${BRANCH}" >/dev/null; then
git switch "${BRANCH}"
else
git switch -c "${BRANCH}"
fi
git status --short | awk '{print $2}' | grep -E '\.pen$|/snapshots/.+\.png$' | xargs -r git add --
git status --short
ã¹ããŒãžããã®ã¯ .pen ãã¡ã€ã«ãš snapshots/ é
äžã®PNGãã¡ã€ã«ã®allowlistã®ã¿ãšããgit add "${DESIGN_DIR}" ã®ãããªãã£ã¬ã¯ããªäžžããšaddã¯è¡ããªããã¹ããŒãžåŸãgit status --short ãå確èªããallowlistå€ã®ãã¡ã€ã«ïŒã¹ããŒãžãããã«æ®ã£ãŠãã倿Žã»å
ã
trackedãªå€æŽãšããŠååšããŠãããã®ãããããå«ãïŒã1ä»¶ã§ãæ®ã£ãŠããå Žåã¯ããããã git restore --staged / git checkout -- ã§ç Žæ£ããŠã¯ãªããªãããŠãŒã¶ãŒã®æå³ããªãtracked倿ŽãŸã§å·»ã蟌ãã§æ¶ãå»ãå±éºããããããç Žæ£ãã以äžãå®è¡ããŠçµäºããã
NON_ALLOWED=$(git status --short | awk '{print $2}' | grep -vE '\.pen$|/snapshots/.+\.png$' || true)
NON_ALLOWED ã空ã§ãªãå Žåã¯ããã§ãŒãº0-2ãšåãæé ïŒIssueãžã®çç±ã³ã¡ã³ã + cc-need-human-check ä»äžïŒã§ã¹ãã«ãçµäºããããã®å Žåãã¶ã€ã³PRã¯äœããªããNON_ALLOWED ã空ã®å Žåã®ã¿ãã§ãŒãº4ã®ç¶ãïŒã³ãããã»pushïŒãžé²ãã
cc-ui-design-$0 ã¯æ¬ã¹ãã«ã®å®è¡ã ããæžã蟌ããã©ã³ãã®ããããªã¢ãŒãã«ååãã©ã³ããæ®ã£ãŠããŠã --force-with-lease ã§äžæžãããŠå®å
šã«åæãããã
git commit -m "design: Issue #$0 ã®UIãã¶ã€ã³ã远å "
if git ls-remote --exit-code origin "${BRANCH}" >/dev/null 2>&1; then
git fetch origin "${BRANCH}"
git push --force-with-lease -u origin "${BRANCH}"
else
LS_REMOTE_STATUS=$?
if [ "${LS_REMOTE_STATUS}" -eq 2 ]; then
git push -u origin "${BRANCH}"
else
echo "failed to check remote branch existence (exit ${LS_REMOTE_STATUS}), possibly auth/network error" >&2
exit 1
fi
fi
git ls-remote --exit-code ã¯ããªã¢ãŒãã«äžèŽããåç
§ããªããå Žåã®ã¿ exit code 2 ãè¿ãïŒèªèšŒã»ãããã¯ãŒã¯å€±æãªã©ä»ã®ç°åžžã¯ 2 以å€ïŒãexit 2 ãªããªã¢ãŒãæªååšãšç¢ºå®ã§ããããçŽ ã® push -u ã«é²ã¿ããã以å€ã¯åå äžæã®ãšã©ãŒãšããŠå³åº§ã«å€±æãããã
pushïŒãŸãã¯ãªã¢ãŒãååšç¢ºèªïŒã«å€±æããå Žåã¯ãšã©ãŒåºåãæçµå ±åã«å«ãããã§ãŒãº0-2ãšåãæé ã§ cc-need-human-check ãä»äžããŠçµäºããã
å®äºæ¡ä»¶: cc-ui-design-$0 ãã©ã³ãã remote ã«ååšããããšã
ãã§ãŒãº5: ãã¶ã€ã³PRã®äœæ
ããŒã¹ãã©ã³ãã¯å®è£
PRãšæããïŒEpicé
äžã®Issueã§ã¯ããã¶ã€ã³ãå®è£
ãã©ã³ãã«ååšããªãäºæ
ãé²ãããïŒã
BASE_BRANCH=""
if ! PARENT=$(gh issue view "$0" --json parent --jq '.parent.number // empty'); then
echo "failed to resolve issue parent" >&2
exit 1
fi
if [ -n "${PARENT}" ] && git rev-parse --verify --quiet "refs/remotes/origin/cc-epic-${PARENT}" >/dev/null; then
BASE_BRANCH="cc-epic-${PARENT}"
else
BASE_BRANCH=$(git symbolic-ref --short refs/remotes/origin/HEAD | sed 's@^origin/@@')
fi
ME=$(gh api user --jq '.login')
PRæ¬æã¯ --body-file - + heredocïŒ<<'EOF' ã¯ã©ãŒãçïŒã§æž¡ãããã¬ãŒã¹ãã«ã㯠heredoc ã«æž¡ãåã«å®å€ãžçœ®æããŠããããšã
gh pr create \
--title "design: <Issueã¿ã€ãã«>" \
--base "${BASE_BRANCH}" \
--assignee "${ME}" \
--body-file - <<'EOF'
Issue
<ãªããã®ç»é¢æ§æã«ããã®ãã1-3è¡ã§>
- <èŠçŽ ã»ã¬ã€ã¢ãŠãã®èª¬æ>
- <空ã»ããŒãã£ã³ã°ã»ãšã©ãŒçãç¡ããã°ããªãã>
- `<DESIGN_DIR>/snapshots/<node>.png`
Refs
EOF
Closes #$0 / Fixes #$0 ãªã©ã® closing keyword ã¯çµ¶å¯Ÿã«äœ¿ããªãã ãã¶ã€ã³PRã®ããŒãžã§å®è£
IssueãéããŠããŸããå®è£
ãã§ãŒãºãžé²ããªããªããããåç
§ã¯å¿
ã Refs #$0 ã«ããã
ã©ãã«ã¯ä»äžããªãïŒcc-triage-scope / cc-ui-design ã¯ã¯ãŒã«ãŒã onCompleted ã§ä»äžããïŒã
PRäœæã®æ€èšŒ
gh pr list --head "cc-ui-design-$0" --state open --json number,url
- PRãå®åšããå Žå: ãã®URLãæçµå ±åã«å«ããŠæ£åžžçµäºãã
- PRãå®åšããªãå Žå: ãã§ãŒãº0-2ãšåãæé ã§ Issue ã«PRæªäœæã®æšãšåå ãã³ã¡ã³ããã
cc-need-human-check ãä»äžããŠçµäºãã
å®äºæ¡ä»¶: cc-ui-design-$0 ã head ãšããOpen PRã®å®åšã確èªã§ããŠããããšã
ãã§ãŒãº6: æçµå ±å
以äžã1-5è¡ã§å ±åããŠçµäºããã
- äœæ/æŽæ°ãã
.pen ã®ãã¹ïŒæ°èŠ/æŽæ°ã®å¥ïŒ
- åºåããã¹ãããã·ã§ãã PNG ã®ãã¹
- ãã¶ã€ã³PRã®URLãšããŒã¹ãã©ã³ã
- ïŒè©²åœæïŒãã¶ã€ã³äžèŠãšå€æããçç±ããŸãã¯
cc-need-human-check ãä»äžããçç±
äžææ¡ä»¶
以äžã®ããããã«è©²åœããå Žåã®ã¿ãçç±ã1-2è¡ã§åºåããŠå³äžæããã
- åŒæ°ã空ããŸã㯠Issue çªå·ãšããŠè§£éã§ããªã
- worktreeå€ã§å®è¡ãããŠãã
gh issue view ã§IssueãèŠã€ãããªãããŸã㯠CLOSED
泚æäºé
- ã³ãŒããå®è£
ããªã: æ¬ã¹ãã«ã®å·®åã¯
.pen ãšã¹ãããã·ã§ãã PNG ã®ã¿ãå®è£
㯠exec-issue ã®è²¬å
.pen ãçŽæ¥ç·šéããªã: æå·åãã€ããªã®ãããç·šé㯠pencil-design-updater ãšãŒãžã§ã³ãïŒedit-pencil-design ã¹ãã«ïŒçµç±ã«éããèªã¿åã㯠inspect-pencil-node ã¹ãã«
- closing keyword ã䜿ããªã: PRæ¬æã® Issue åç
§ã¯
Refs #$0 ã®ã¿
- æªå®ã®åŠçãæ®ãããŸãŸå®äºå ±åããŠã¿ãŒã³ãçµããªã: ã¿ãŒã³ãçµãããšããã»ã¹ãæ£åžžçµäºããã¯ãŒã«ãŒããã¶ã€ã³PRæªäœæã®ãŸãŸå®äºæ±ãã§ã©ãã«é·ç§»ãé²ããŠããŸã
- ãŠãŒã¶ãŒã«å€æãæ±ããªã: äžææ¡ä»¶ä»¥å€ã¯ãã¹ãŠæ¬ã¹ãã«å
ã®ã«ãŒã«ã§èªå決å®ããææ§ãªå Žåã¯å®å
šåŽïŒãã¶ã€ã³ãäœãã
cc-need-human-check ã«èœãšãåŽïŒãéžãã§æ ¹æ ãæçµå ±åã«æèšãã