| name | commit-to-issue |
| description | Analyze recent git commits, group them into work units, create GitHub issues with full ThakiCloud Project #5 metadata (Status, Priority, Size, Estimate, Sprint, Start/End date), and verify the result. Use when the user asks to "์ด์๋ก ๋ฑ๋ก", "commit-to-issue", "์ด๋ฒ์ฃผ ์์
์ด์ ๋ง๋ค์ด์ค", "์ด๋ฒ ์์
์ ์ด์๋ก ๋จ๊ฒจ์ค", "ํ๊ณ ์ฉ ์ด์ ์์ฑ", "์ปค๋ฐ์ ์ด์๋ก", "์์
์ด์ ๋ฑ๋ก", "๊นํ๋ธ ์ด์๋ก ๋จ๊ฒจ์ค", "project #5์ ๋ฑ๋ก", "์ค๋ ์์
์ด์ ๋ง๋ค์ด", or any retrospective issue creation from commits. Do NOT use for creating PRs (use release-ship), single ad-hoc issue creation without Project #5 linking (use `gh issue create` directly), or modifying existing issues. |
| disable-model-invocation | true |
Commit-to-Issue โ Convert commits into Project #5 issues
Convert recent git commits into tracked GitHub issues on ThakiCloud Project #5 with all 7 project fields populated.
Pipeline mode: When invoked by release-ship, eod-ship, sod-ship, or morning-ship, this skill MUST run to completion. Partial failures must be reported but never silently swallowed. See release-ship Step 4 for hard-fail rules.
Reference
All Project #5 IDs, GraphQL queries, field defaults, and the set_all_fields() Python helper live in references/project-config.md. Never hardcode IDs elsewhere โ read that file every time.
Subagent Model Routing
| Task Type | Model | Rationale |
|---|
| Exploration / search / file reading | haiku | ๋ฎ์ ๋น์ฉ, read-only ์์
|
| Analysis / implementation / generation | sonnet | ๊ท ํ ์กํ ํ์ง-๋น์ฉ ๋น์จ |
Agent tool ํธ์ถ ์ ๋ฐ๋์ model ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์ ํ๋ค.
Workflow (8 steps)
1. Detect repository
git remote -v
Extract OWNER/REPO from the origin URL. Common gotcha: ~/thaki/ai-platform-strategy points to sylvanus4/ai-strategy (personal fork), not ThakiCloud/ai-platform-strategy (which does not exist).
2. Analyze commits
git log --since="$SINCE" --oneline --no-merges
git log $(git merge-base HEAD main)..HEAD --oneline --no-merges
For pipeline-mode (called from release-ship): use only the commits created in this pipeline run, not all branch history.
3. Group commits into work units
Cluster related commits into logical work units. Heuristics:
- Same domain/scope (e.g., all
.claude/skills/foo/ changes โ one issue)
- Same TYPE prefix + adjacent timestamps
- Same logical feature (e.g., "new orchestrator + planning docs" โ one issue)
Never create 1:1 commit-to-issue mappings unless the commits are truly isolated changes โ that floods Project #5.
For each group, decide:
title: TYPE: Summary (English, โค70 chars, no trailing period)
labels: pick from repo label list (see references/project-config.md ยง Common Labels)
description: 2-5 sentence Korean summary of what shipped and why
4. Compute size + estimate
Count total files changed across all commits in the group:
git show --stat --format="" $HASH1 $HASH2 ... | grep -c "^ .*|"
Then map via auto_size(file_count) from references/project-config.md:
| Files | Size | Estimate (days) |
|---|
| โค1 | XS | 0.25 |
| 2-5 | S | 0.5 |
| 6-15 | M | 1.0 |
| 16-40 | L | 2.0 |
| >40 | XL | 3.0 |
Override these when domain knowledge says otherwise (e.g., a single config file that took half a day โ M, 1.0).
5. Resolve current sprint
gh api graphql -f query='...' | python3 -c "..."
Never hardcode sprint IDs. They rotate weekly.
6. Create issue + add to Project #5
ISSUE_URL=$(gh issue create \
--repo $OWNER/$REPO \
--title "$TITLE" \
--assignee sylvanus4 \
--label $L1 --label $L2 \
--body-file /tmp/issue-body.md)
ITEM_ID=$(gh project item-add 5 --owner ThakiCloud --url "$ISSUE_URL" --format json | jq -r .id)
Issue body template:
## Description
<2-5 sentence Korean summary>
## Commits
- `<hash1>` <commit message>
- `<hash2>` <commit message>
## Period
YYYY-MM-DD ~ YYYY-MM-DD
## Context (optional)
<why this work was done, links to related issues>
7. Set 7 fields (MANDATORY โ never partial)
Call set_all_fields(item_id, sprint_id, file_count=N, start_date=..., end_date=...) from references/project-config.md.
Field set:
- Status (default: Done for retro; In Progress for live work)
- Priority (default: P2; raise for critical work)
- Size (auto from file_count)
- Estimate (auto from file_count, 1d=1.0)
- Sprint (current iteration)
- Start date (
--date YYYY-MM-DD, NOT --text)
- End date (
--date YYYY-MM-DD, NOT --text)
If any single field set fails, retry once. After second failure, log {field: X, error: ...} but continue with remaining fields.
8. Verify
After all issues are created, run the verification query from references/project-config.md ยง Verification Query. Assert:
- Every created issue appears in Project #5
- All 7 fields are non-null for every issue
If any issue is missing or has nulls, report it in the final summary and exit non-zero.
Output
Print a summary table at the end:
Created N/N issues. Fields populated: F/F.
#<num> | <title>
URL: ...
Item ID: ...
Status: Done | Priority: P2 | Size: M | Estimate: 1.0
Sprint: 26-05-Sprint3 | Start: 2026-05-18 | End: 2026-05-22
Rules
- Every issue MUST be assigned to
sylvanus4 โ NEVER create an unassigned issue (user directive 2026-06-26). gh issue create --assignee sylvanus4 always. Unassigned cards flood the board and get deleted by the weekend cleanup; don't create them in the first place.
- Project #5 issues only for
sylvanus4/ai-strategy (Step 1 repo check). Other repos: do not create Project #5 issues.
- Board hygiene is enforced out-of-band by
scripts/skills/project5_sprint_cleanup.py (weekend com.thaki.sprint-archive). Goal = only ai-platform-strategy on my slice: my other personal-repo cards deleted from board; ai-platform current archivedโDone, current unassignedโassign me, past assignedโ26-Archive, past unassignedโdelete. Team items untouched.
- Never hardcode field IDs or option IDs โ always read references/project-config.md
- Never set Start/End via
--text โ always --date YYYY-MM-DD
- Never set only partial fields silently โ always attempt all 7
- Never skip Project #5 linking โ issue without Project #5 = invisible to team
- Always run verification (step 8) before claiming success
- For pipeline mode: NEVER prompt user for confirmation โ the caller already approved