From db401aa21a46c213d04a5c7446d1a30b9e3c2257 Mon Sep 17 00:00:00 2001 From: cpu-once <231006716+cpu-once@users.noreply.github.com> Date: Sat, 3 Oct 2026 21:48:45 +0900 Subject: [PATCH 1/9] =?UTF-8?q?[docs][backlog]=20decision-28=20Signed-off-?= =?UTF-8?q?by=20=EC=9C=A0=EC=A7=80=20=ED=99=95=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude AI-Model: claude-opus-5-5 Tokens-Used: in=0 out=0 (no-attributed-turn) Tool-Calls: 0 (no-attributed-turn) Hooks-Commit: 21ecabe Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com> --- ...4-decision-25-\353\263\264\354\231\204.md" | 31 +++++++++++++++++++ ...5\354\235\204-\354\260\250\353\213\250.md" | 3 +- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 "backlog/decisions/decision-28 - Signed-off-by-\354\234\240\354\247\200\353\212\224-\354\234\240\354\240\200\352\260\200-\354\247\201\354\240\221-\355\231\225\354\240\225\355\226\210\353\213\244-decision-25-\353\263\264\354\231\204.md" diff --git "a/backlog/decisions/decision-28 - Signed-off-by-\354\234\240\354\247\200\353\212\224-\354\234\240\354\240\200\352\260\200-\354\247\201\354\240\221-\355\231\225\354\240\225\355\226\210\353\213\244-decision-25-\353\263\264\354\231\204.md" "b/backlog/decisions/decision-28 - Signed-off-by-\354\234\240\354\247\200\353\212\224-\354\234\240\354\240\200\352\260\200-\354\247\201\354\240\221-\355\231\225\354\240\225\355\226\210\353\213\244-decision-25-\353\263\264\354\231\204.md" new file mode 100644 index 0000000..77e7111 --- /dev/null +++ "b/backlog/decisions/decision-28 - Signed-off-by-\354\234\240\354\247\200\353\212\224-\354\234\240\354\240\200\352\260\200-\354\247\201\354\240\221-\355\231\225\354\240\225\355\226\210\353\213\244-decision-25-\353\263\264\354\231\204.md" @@ -0,0 +1,31 @@ +--- +id: decision-28 +title: Signed-off-by 유지는 유저가 직접 확정했다 (decision-25 보완) +date: '2026-10-03 12:48' +status: accepted +--- +## Context + +decision-19(2026-09-25)가 `Signed-off-by` 제거를 정했지만, 그 실행을 맡은 GF-128이 아직 +To Do라 `post-commit`은 계속 이 트레일러를 붙여 왔다. 그 사이 decision-25(2026-10-03)가 +"문서끼리 충돌하면 최근 문서를 우선한다"는 규칙을 적용해 제거 조항을 대체하고 유지로 +정했다. 근거는 decision-24·DRAFT-19가 `Signed-off-by`와 실제 커미터의 불일치를 이력 +재작성의 증거로 쓴다는 것이었다. + +그 유지 판단은 날짜 규칙을 기계적으로 적용한 결과였고, 유저에게 `Signed-off-by` 자체를 +묻고 정한 것은 아니었다. 2026-10-03 유저가 "지웠는데 왜 남아 있나"라고 물어 경위를 +설명했고, 유저가 직접 유지를 골랐다. + +## Decision + +**`Signed-off-by`는 유지한다 — 유저가 직접 확정했다.** decision-25의 유지 조항과 근거는 +그대로이고, 이 decision은 그 판단이 유저 확인을 거쳤다는 사실만 보탠다. + +## Consequences + +- GF-128 AC #10("Signed-off-by는 계속 삽입한다")이 그대로 유효하다. 설명 본문의 + "Signed-off-by를 없앤다"는 GF-128 코멘트 #1과 이 decision으로 대체된다. +- 이 트레일러를 실제로 대조하는 코드는 아직 없다(DRAFT-19가 draft 상태). 그 전까지는 + 사람이 `git log`로 커미터와 비교할 때만 쓰인다. +- 나중에 같은 질문이 나오면 decision-19가 아니라 이 decision을 본다. + diff --git "a/backlog/tasks/gf-128 - \355\212\270\353\240\210\354\235\274\353\237\254-\354\202\275\354\236\205\354\235\204-prepare-commit-msg\353\241\234-\354\235\264\354\240\204\355\225\230\352\263\240-\355\202\244-\353\213\250\354\234\204-\354\244\221\353\263\265\354\235\204-\354\260\250\353\213\250.md" "b/backlog/tasks/gf-128 - \355\212\270\353\240\210\354\235\274\353\237\254-\354\202\275\354\236\205\354\235\204-prepare-commit-msg\353\241\234-\354\235\264\354\240\204\355\225\230\352\263\240-\355\202\244-\353\213\250\354\234\204-\354\244\221\353\263\265\354\235\204-\354\260\250\353\213\250.md" index cf6eaa8..47612d5 100644 --- "a/backlog/tasks/gf-128 - \355\212\270\353\240\210\354\235\274\353\237\254-\354\202\275\354\236\205\354\235\204-prepare-commit-msg\353\241\234-\354\235\264\354\240\204\355\225\230\352\263\240-\355\202\244-\353\213\250\354\234\204-\354\244\221\353\263\265\354\235\204-\354\260\250\353\213\250.md" +++ "b/backlog/tasks/gf-128 - \355\212\270\353\240\210\354\235\274\353\237\254-\354\202\275\354\236\205\354\235\204-prepare-commit-msg\353\241\234-\354\235\264\354\240\204\355\225\230\352\263\240-\355\202\244-\353\213\250\354\234\204-\354\244\221\353\263\265\354\235\204-\354\260\250\353\213\250.md" @@ -4,7 +4,7 @@ title: 트레일러 삽입을 prepare-commit-msg로 이전하고 키 단위 중 status: To Do assignee: [] created_date: '2026-09-25 19:33' -updated_date: '2026-10-03 03:14' +updated_date: '2026-10-03 12:48' labels: - hooks - trailers @@ -14,6 +14,7 @@ references: - decision-19 - decision-18 - decision-25 + - decision-28 documentation: - backlog/docs/doc-13 - git-format-재설계-계획-—-커밋-규칙을-prepare-commit-msg로-통합.md - backlog/docs/doc-14 - 용어-정리-—-턴-트랜스크립트-귀속-마커-구분.md From 363bf54dbd6adec38cf8b2a2e3c9ee4f65372740 Mon Sep 17 00:00:00 2001 From: cpu-once <231006716+cpu-once@users.noreply.github.com> Date: Sat, 3 Oct 2026 21:49:03 +0900 Subject: [PATCH 2/9] =?UTF-8?q?[docs][backlog]=20decision-28=20=EA=B2=BD?= =?UTF-8?q?=EC=9C=84=20=EC=84=9C=EC=88=A0=20=EC=A0=95=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude AI-Model: claude-opus-5-5 Tokens-Used: in=0 out=0 (no-attributed-turn) Tool-Calls: 0 (no-attributed-turn) Hooks-Commit: cf54725 Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com> --- ...6\210\353\213\244-decision-25-\353\263\264\354\231\204.md" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/backlog/decisions/decision-28 - Signed-off-by-\354\234\240\354\247\200\353\212\224-\354\234\240\354\240\200\352\260\200-\354\247\201\354\240\221-\355\231\225\354\240\225\355\226\210\353\213\244-decision-25-\353\263\264\354\231\204.md" "b/backlog/decisions/decision-28 - Signed-off-by-\354\234\240\354\247\200\353\212\224-\354\234\240\354\240\200\352\260\200-\354\247\201\354\240\221-\355\231\225\354\240\225\355\226\210\353\213\244-decision-25-\353\263\264\354\231\204.md" index 77e7111..ec7de63 100644 --- "a/backlog/decisions/decision-28 - Signed-off-by-\354\234\240\354\247\200\353\212\224-\354\234\240\354\240\200\352\260\200-\354\247\201\354\240\221-\355\231\225\354\240\225\355\226\210\353\213\244-decision-25-\353\263\264\354\231\204.md" +++ "b/backlog/decisions/decision-28 - Signed-off-by-\354\234\240\354\247\200\353\212\224-\354\234\240\354\240\200\352\260\200-\354\247\201\354\240\221-\355\231\225\354\240\225\355\226\210\353\213\244-decision-25-\353\263\264\354\231\204.md" @@ -12,8 +12,8 @@ To Do라 `post-commit`은 계속 이 트레일러를 붙여 왔다. 그 사이 d 정했다. 근거는 decision-24·DRAFT-19가 `Signed-off-by`와 실제 커미터의 불일치를 이력 재작성의 증거로 쓴다는 것이었다. -그 유지 판단은 날짜 규칙을 기계적으로 적용한 결과였고, 유저에게 `Signed-off-by` 자체를 -묻고 정한 것은 아니었다. 2026-10-03 유저가 "지웠는데 왜 남아 있나"라고 물어 경위를 +그 규칙은 유저가 바로 이 충돌(decision-19 vs DRAFT-19)을 두고 직접 준 것이다. 다만 규칙의 +결과가 "`Signed-off-by`가 계속 붙는다"는 점은 그때 분명히 드러내지 않았다. 2026-10-03 유저가 "지웠는데 왜 남아 있나"라고 물어 경위를 설명했고, 유저가 직접 유지를 골랐다. ## Decision From cdb8740905d39883268565e8e83b4bcfaa3761b9 Mon Sep 17 00:00:00 2001 From: cpu-once <231006716+cpu-once@users.noreply.github.com> Date: Sat, 3 Oct 2026 22:02:55 +0900 Subject: [PATCH 3/9] =?UTF-8?q?[docs][backlog]=20DRAFT-17=20=EB=B3=B4?= =?UTF-8?q?=EA=B4=80=20=E2=80=94=20=ED=86=A0=ED=81=B0=20=EC=83=81=ED=95=9C?= =?UTF-8?q?=20=EA=B0=95=EC=A0=9C=EB=8A=94=20=EB=B2=94=EC=9C=84=20=EB=B0=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 유저 판단(2026-10-03): 커밋을 토큰량으로 막는 것은 이 프로젝트가 할 일이 아니다. 이 프로젝트는 토큰을 기록할 뿐 제한하지 않는다. Co-Authored-By: Claude Opus 5.5 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude AI-Model: claude-opus-5-5 Tokens-Used: in=0 out=0 (no-attributed-turn) Tool-Calls: 0 (no-attributed-turn) Hooks-Commit: b272304 Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com> --- ...\260\213-\352\261\260\353\266\200-\352\262\200\355\206\240.md" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "backlog/drafts/draft-17 - \353\263\264\353\245\230-\355\206\240\355\201\260-\354\202\254\354\232\251\353\237\211-\352\260\225\354\240\234\354\264\210\352\263\274-\354\213\234-\354\273\244\353\260\213-\352\261\260\353\266\200-\352\262\200\355\206\240.md" => "backlog/archive/drafts/draft-17 - \353\263\264\353\245\230-\355\206\240\355\201\260-\354\202\254\354\232\251\353\237\211-\352\260\225\354\240\234\354\264\210\352\263\274-\354\213\234-\354\273\244\353\260\213-\352\261\260\353\266\200-\352\262\200\355\206\240.md" (100%) diff --git "a/backlog/drafts/draft-17 - \353\263\264\353\245\230-\355\206\240\355\201\260-\354\202\254\354\232\251\353\237\211-\352\260\225\354\240\234\354\264\210\352\263\274-\354\213\234-\354\273\244\353\260\213-\352\261\260\353\266\200-\352\262\200\355\206\240.md" "b/backlog/archive/drafts/draft-17 - \353\263\264\353\245\230-\355\206\240\355\201\260-\354\202\254\354\232\251\353\237\211-\352\260\225\354\240\234\354\264\210\352\263\274-\354\213\234-\354\273\244\353\260\213-\352\261\260\353\266\200-\352\262\200\355\206\240.md" similarity index 100% rename from "backlog/drafts/draft-17 - \353\263\264\353\245\230-\355\206\240\355\201\260-\354\202\254\354\232\251\353\237\211-\352\260\225\354\240\234\354\264\210\352\263\274-\354\213\234-\354\273\244\353\260\213-\352\261\260\353\266\200-\352\262\200\355\206\240.md" rename to "backlog/archive/drafts/draft-17 - \353\263\264\353\245\230-\355\206\240\355\201\260-\354\202\254\354\232\251\353\237\211-\352\260\225\354\240\234\354\264\210\352\263\274-\354\213\234-\354\273\244\353\260\213-\352\261\260\353\266\200-\352\262\200\355\206\240.md" From 9a4ecfb88cdbc9568d74c5aa749f19c16a21c960 Mon Sep 17 00:00:00 2001 From: coralstay <231006716+coralstay@users.noreply.github.com> Date: Sat, 3 Oct 2026 22:10:46 +0900 Subject: [PATCH 4/9] =?UTF-8?q?[docs][backlog]=20=EA=B0=9C=EB=AA=85=20?= =?UTF-8?q?=EB=93=9C=EB=9E=98=ED=94=84=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude AI-Model: claude-opus-5-5 Tokens-Used: in=0 out=0 (no-attributed-turn) Tool-Calls: 0 (no-attributed-turn) Hooks-Commit: 7cd5a02 Signed-off-by: coralstay <231006716+coralstay@users.noreply.github.com> --- ...0\354\204\234-\354\240\204\353\266\200.md" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "backlog/drafts/draft-22 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" diff --git "a/backlog/drafts/draft-22 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" "b/backlog/drafts/draft-22 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" new file mode 100644 index 0000000..5d167d6 --- /dev/null +++ "b/backlog/drafts/draft-22 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" @@ -0,0 +1,30 @@ +--- +id: DRAFT-22 +title: 이름을 coding-agent-git-commit-tool로 바꾼다 — 로컬·원격·문서 전부 +status: Draft +assignee: [] +created_date: '2026-10-03 13:10' +labels: + - docs + - chore +dependencies: [] +--- + +## Description + + +"git-trail"은 이 도구가 하는 일을 말해주지 못했다. 유저가 2026-10-03 "와닿지 않는다"며 프로젝트가 무엇을 하는지부터 다시 정리했고, 오해의 여지가 없도록 하는 일을 그대로 적은 이름으로 정했다: coding-agent-git-commit-tool. 지원 범위는 Claude 전용으로 좁히지 않는다(유저 판단 — git-claude 대신 범용 이름). + +유저 지시: 로컬·원격·문서 모두 바꾼다. + +AC 후보: +1. decision-29가 이름 변경을 기록하고 decision-26의 이름 조항만 대체한다고 명시한다(범용 유지 판단, 개명 사유 포함) +2. 표시 이름 git-trail이 README·install.sh·훅 주석·.gitmessage·CI·테스트·backlog config·doc-1·5·16·20·21에서 새 이름으로 바뀐다(gitformat.* 설정 키·파일명은 제외) +3. README 첫 설명이 "커밋 규칙을 검사하고 커밋마다 작성자·AI 모델·태스크·토큰을 자동으로 기록하는 git 훅"을 말한다 +4. 전체 테스트·ruff 통과 +5. GitHub 저장소가 coralstay/coding-agent-git-commit-tool로 rename되고 origin URL·description·topics가 갱신된다 +6. (병합 후 운영 단계) 로컬 폴더를 ~/githubs/coding-agent-git-commit-tool로 옮기고, 이 저장소와 agent-orchestartor의 core.hooksPath를 새 경로로 다시 설치하며, Claude 메모리를 새 프로젝트 경로로 복사한다 + +바꾸지 않는 것: gitformat.* 설정 키(GF-133), 태스크 접두어 GF, 지난 기록 본문. +로컬 폴더 이동을 마지막에 두는 이유: 세션 도중 옮기면 트랜스크립트 경로가 어긋나 남은 커밋의 Tokens-Used/AI-Model 측정이 끊긴다. + From 339395743e9bb0a9b94a1accaa2b0043876d2774 Mon Sep 17 00:00:00 2001 From: coralstay <231006716+coralstay@users.noreply.github.com> Date: Sat, 3 Oct 2026 22:11:01 +0900 Subject: [PATCH 5/9] =?UTF-8?q?[docs][backlog]=20DRAFT-22=EB=A5=BC=20=20?= =?UTF-8?q?=EC=8A=B9=EA=B2=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude AI-Model: claude-opus-5-5 Tokens-Used: in=0 out=0 (no-attributed-turn) Tool-Calls: 0 (no-attributed-turn) Hooks-Commit: 2df959f Signed-off-by: coralstay <231006716+coralstay@users.noreply.github.com> --- ...0\354\204\234-\354\240\204\353\266\200.md" | 30 ---------------- ...0\354\204\234-\354\240\204\353\266\200.md" | 36 +++++++++++++++++++ 2 files changed, 36 insertions(+), 30 deletions(-) delete mode 100644 "backlog/drafts/draft-22 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" create mode 100644 "backlog/tasks/gf-142 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" diff --git "a/backlog/drafts/draft-22 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" "b/backlog/drafts/draft-22 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" deleted file mode 100644 index 5d167d6..0000000 --- "a/backlog/drafts/draft-22 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" +++ /dev/null @@ -1,30 +0,0 @@ ---- -id: DRAFT-22 -title: 이름을 coding-agent-git-commit-tool로 바꾼다 — 로컬·원격·문서 전부 -status: Draft -assignee: [] -created_date: '2026-10-03 13:10' -labels: - - docs - - chore -dependencies: [] ---- - -## Description - - -"git-trail"은 이 도구가 하는 일을 말해주지 못했다. 유저가 2026-10-03 "와닿지 않는다"며 프로젝트가 무엇을 하는지부터 다시 정리했고, 오해의 여지가 없도록 하는 일을 그대로 적은 이름으로 정했다: coding-agent-git-commit-tool. 지원 범위는 Claude 전용으로 좁히지 않는다(유저 판단 — git-claude 대신 범용 이름). - -유저 지시: 로컬·원격·문서 모두 바꾼다. - -AC 후보: -1. decision-29가 이름 변경을 기록하고 decision-26의 이름 조항만 대체한다고 명시한다(범용 유지 판단, 개명 사유 포함) -2. 표시 이름 git-trail이 README·install.sh·훅 주석·.gitmessage·CI·테스트·backlog config·doc-1·5·16·20·21에서 새 이름으로 바뀐다(gitformat.* 설정 키·파일명은 제외) -3. README 첫 설명이 "커밋 규칙을 검사하고 커밋마다 작성자·AI 모델·태스크·토큰을 자동으로 기록하는 git 훅"을 말한다 -4. 전체 테스트·ruff 통과 -5. GitHub 저장소가 coralstay/coding-agent-git-commit-tool로 rename되고 origin URL·description·topics가 갱신된다 -6. (병합 후 운영 단계) 로컬 폴더를 ~/githubs/coding-agent-git-commit-tool로 옮기고, 이 저장소와 agent-orchestartor의 core.hooksPath를 새 경로로 다시 설치하며, Claude 메모리를 새 프로젝트 경로로 복사한다 - -바꾸지 않는 것: gitformat.* 설정 키(GF-133), 태스크 접두어 GF, 지난 기록 본문. -로컬 폴더 이동을 마지막에 두는 이유: 세션 도중 옮기면 트랜스크립트 경로가 어긋나 남은 커밋의 Tokens-Used/AI-Model 측정이 끊긴다. - diff --git "a/backlog/tasks/gf-142 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" "b/backlog/tasks/gf-142 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" new file mode 100644 index 0000000..a52ff2c --- /dev/null +++ "b/backlog/tasks/gf-142 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" @@ -0,0 +1,36 @@ +--- +id: GF-142 +title: 이름을 coding-agent-git-commit-tool로 바꾼다 — 로컬·원격·문서 전부 +status: To Do +assignee: [] +created_date: '2026-10-03 13:10' +updated_date: '2026-10-03 13:11' +labels: + - docs + - chore +dependencies: [] +references: + - decision-25 + - decision-26 + - GF-140 + - GF-133 +--- + +## Description + + +"git-trail"은 이 도구가 하는 일을 말해주지 못했다. 유저가 2026-10-03 "와닿지 않는다"며 프로젝트가 무엇을 하는지부터 다시 정리했고, 오해의 여지가 없도록 하는 일을 그대로 적은 이름으로 정했다: coding-agent-git-commit-tool. 지원 범위는 Claude 전용으로 좁히지 않는다(유저 판단 — git-claude 대신 범용 이름). 유저 지시: 로컬·원격·문서 모두 바꾼다. + +바꾸지 않는 것: gitformat.* 설정 키(GF-133), 태스크 접두어 GF, 지난 기록 본문. + +로컬 폴더 이동은 병합 뒤 마지막에 한다 — 세션 도중 옮기면 트랜스크립트 경로가 어긋나 남은 커밋의 Tokens-Used/AI-Model 측정이 끊긴다. 옮긴 뒤 이 저장소와 agent-orchestartor의 core.hooksPath를 새 경로로 다시 설치하고, Claude 메모리를 새 프로젝트 경로로 복사한다. 이 단계는 저장소 파일을 바꾸지 않으므로 AC가 아니라 병합 후 운영 단계로 두고 결과를 노트에 남긴다. + + +## Acceptance Criteria + +- [ ] #1 decision-29가 이름 변경을 기록하고 decision-26의 이름 조항만 대체한다고 명시한다(범용 유지 판단, 개명 사유 포함) +- [ ] #2 표시 이름 git-trail이 README·install.sh·훅 주석·.gitmessage·CI·테스트·backlog config·backlog docs에서 새 이름으로 바뀐다(gitformat.* 설정 키·파일명, 지난 decision·task 본문은 제외) +- [ ] #3 README 첫 설명이 커밋 규칙 검사와 커밋마다 작성자·AI 모델·태스크·토큰 자동 기록을 말한다 +- [ ] #4 전체 테스트와 ruff가 통과한다 +- [ ] #5 GitHub 저장소가 coralstay/coding-agent-git-commit-tool로 rename되고 origin URL·description·topics가 갱신된다 + From 71288c0381a65f0ac367055100dce6b2ed245f4b Mon Sep 17 00:00:00 2001 From: coralstay <231006716+coralstay@users.noreply.github.com> Date: Sat, 3 Oct 2026 22:11:37 +0900 Subject: [PATCH 6/9] =?UTF-8?q?[docs][backlog]=20decision-29=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EB=B3=80=EA=B2=BD=20=EA=B8=B0=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Task-Id: GF-142 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude AI-Model: claude-opus-5-5 Tokens-Used: in=0 out=0 (no-attributed-turn) Tool-Calls: 0 (no-attributed-turn) Hooks-Commit: fdba39e Signed-off-by: coralstay <231006716+coralstay@users.noreply.github.com> --- ...0\355\225\255-\353\214\200\354\262\264.md" | 44 +++++++++++++++++++ ...0\354\204\234-\354\240\204\353\266\200.md" | 5 ++- 2 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 "backlog/decisions/decision-29 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-decision-26\354\235\230-\354\235\264\353\246\204-\354\241\260\355\225\255-\353\214\200\354\262\264.md" diff --git "a/backlog/decisions/decision-29 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-decision-26\354\235\230-\354\235\264\353\246\204-\354\241\260\355\225\255-\353\214\200\354\262\264.md" "b/backlog/decisions/decision-29 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-decision-26\354\235\230-\354\235\264\353\246\204-\354\241\260\355\225\255-\353\214\200\354\262\264.md" new file mode 100644 index 0000000..7d8ae26 --- /dev/null +++ "b/backlog/decisions/decision-29 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-decision-26\354\235\230-\354\235\264\353\246\204-\354\241\260\355\225\255-\353\214\200\354\262\264.md" @@ -0,0 +1,44 @@ +--- +id: decision-29 +title: 이름을 coding-agent-git-commit-tool로 바꾼다 (decision-26의 이름 조항 대체) +date: '2026-10-03 13:11' +status: accepted +--- +## Context + +decision-26(2026-10-03)이 이름을 git-trail로 정했다. 같은 날 유저가 "와닿지 않는다"고 했고, +이름을 다시 고르기 전에 이 프로젝트가 무엇을 하는지부터 다시 정리했다. 실제로 쓰면서 +체감하는 일은 두 가지다. + +- 커밋 메시지 규칙을 검사해 어기면 커밋을 거부한다(`prepare-commit-msg`, `commit-msg`). +- 커밋마다 작성자·AI 도구·모델·태스크·토큰을 트레일러로 자동 기록한다(`post-commit`). + +trail·logbook·ledger·hallmark처럼 "지울 수 없는 기록"에 기댄 이름은, 이력 불변 기둥이 아직 +코드로 구현되지 않은 상태(DRAFT-18·19)에서 이 두 가지를 떠올리게 하지 못했다. + +후보로 git-claude도 나왔지만, 유저는 범위를 Claude 전용으로 좁히지 않고 여러 AI 도구를 +계속 지원하기로 했다. 이어서 agent-commit을 검토했으나 "에이전트가 커밋을 대신 만들어 +주는 도구"로 읽힐 수 있었다. 유저가 "헷갈리지 않게" 하는 일을 그대로 적은 이름을 골랐다. + +## Decision + +**이름을 coding-agent-git-commit-tool로 바꾼다.** 코딩 에이전트가 만드는 git 커밋을 다루는 +도구라는 뜻이다. decision-26의 이름 조항만 대체하고, decision-25의 목적 세 기둥과 decision-26의 +용어 설명(doc-21 개념 지도)은 그대로 유효하다. + +**범위는 범용으로 유지한다.** Claude Code 이외의 AI 도구 지원(`gitformat.knownModel`의 다른 +모델, `AI-Model` 게이트, decision-15·17)은 이름 때문에 버리지 않는다. + +로컬 폴더, GitHub 저장소, 문서를 모두 새 이름으로 바꾼다(유저 지시). GitHub 저장소는 +coralstay/git-trail → coralstay/coding-agent-git-commit-tool로 rename하고, 예전 이름 세 개는 +GitHub이 리다이렉트한다. + +## Consequences + +- 표시 이름만 바뀐다. 설정 키·파일명(`gitformat.*`)은 GF-133, 태스크 접두어 GF와 지난 기록 + 본문은 decision-25·26과 같은 이유로 그대로 둔다. +- 로컬 폴더가 옮겨지면 Claude Code의 프로젝트 경로가 바뀐다. 트랜스크립트와 메모리 위치가 + 경로에서 파생되므로, 이동은 병합 뒤 마지막에 하고 메모리는 새 경로로 복사한다. + `core.hooksPath`를 이 폴더로 둔 저장소(이 저장소, agent-orchestartor)는 다시 설치해야 한다. +- 이름이 길다. 명령 예시에서는 클론 위치를 짧게 잡아도 된다고 README에 안내한다. + diff --git "a/backlog/tasks/gf-142 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" "b/backlog/tasks/gf-142 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" index a52ff2c..10b9f1c 100644 --- "a/backlog/tasks/gf-142 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" +++ "b/backlog/tasks/gf-142 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" @@ -1,8 +1,9 @@ --- id: GF-142 title: 이름을 coding-agent-git-commit-tool로 바꾼다 — 로컬·원격·문서 전부 -status: To Do -assignee: [] +status: In Progress +assignee: + - '@claude' created_date: '2026-10-03 13:10' updated_date: '2026-10-03 13:11' labels: From 08dec91d2ece262c212efa537405c4c04fa7d846 Mon Sep 17 00:00:00 2001 From: coralstay <231006716+coralstay@users.noreply.github.com> Date: Sat, 3 Oct 2026 22:13:28 +0900 Subject: [PATCH 7/9] =?UTF-8?q?[chore]=20=ED=91=9C=EC=8B=9C=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=EC=9D=84=20coding-agent-git-commit-tool=EB=A1=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Task-Id: GF-142 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude AI-Model: claude-opus-5-5 Tokens-Used: in=2396973 out=6307 Tool-Calls: 10 Hooks-Commit: 59328ac Signed-off-by: coralstay <231006716+coralstay@users.noreply.github.com> --- .github/workflows/test.yml | 2 +- .gitmessage | 2 +- backlog/config.yml | 2 +- ...0-\352\260\200\354\235\264\353\223\234.md" | 20 ++++++++-------- ...5\352\263\274-\355\225\234\352\263\204.md" | 6 ++--- ...5\354\206\214-\354\204\244\354\240\225.md" | 12 +++++----- ...4\353\217\274-\354\236\210\353\202\230.md" | 14 +++++------ ...5\354\206\214-\352\265\254\354\241\260.md" | 4 ++-- hooks/gitformat.conf | 4 ++-- hooks/post-commit | 4 ++-- hooks/prepare-commit-msg | 4 ++-- install.sh | 24 +++++++++---------- tests/test_end_to_end_commit.py | 4 ++-- tests/test_install_script.py | 2 +- 14 files changed, 52 insertions(+), 52 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0d5e099..df77066 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,6 +1,6 @@ name: test -# git-trail 자체의 개발용 CI(GF-21, decision-8). 컨슈머에 배포하는 verify.yml과 +# coding-agent-git-commit-tool 자체의 개발용 CI(GF-21, decision-8). 컨슈머에 배포하는 verify.yml과 # 달리 이건 이 저장소 자신의 훅 코드 품질만 검사한다 — 훅도 테스트도 Python 표준 # 라이브러리만 쓰므로(decision-16, decision-21) 테스트 프레임워크를 따로 설치하는 # 스텝이 없다. 아래 ruff 설치는 이 저장소 자신의 Python 코드를 검사하는 개발 도구다 — diff --git a/.gitmessage b/.gitmessage index 01ad6eb..2c8bac1 100644 --- a/.gitmessage +++ b/.gitmessage @@ -39,4 +39,4 @@ # # ── 이 템플릿 사용법 ── # git config commit.template .gitmessage -# (git-trail install.sh를 사용하면 자동으로 설정됩니다 — GF-8 참고) +# (coding-agent-git-commit-tool install.sh를 사용하면 자동으로 설정됩니다 — GF-8 참고) diff --git a/backlog/config.yml b/backlog/config.yml index d496723..a36676f 100644 --- a/backlog/config.yml +++ b/backlog/config.yml @@ -1,4 +1,4 @@ -project_name: "git-trail" +project_name: "coding-agent-git-commit-tool" default_status: "To Do" statuses: ["To Do", "In Progress", "Done"] labels: [] diff --git "a/backlog/docs/doc-1 - \354\204\244\354\271\230-\352\260\200\354\235\264\353\223\234.md" "b/backlog/docs/doc-1 - \354\204\244\354\271\230-\352\260\200\354\235\264\353\223\234.md" index 1f8e62f..f422262 100644 --- "a/backlog/docs/doc-1 - \354\204\244\354\271\230-\352\260\200\354\235\264\353\223\234.md" +++ "b/backlog/docs/doc-1 - \354\204\244\354\271\230-\352\260\200\354\235\264\353\223\234.md" @@ -3,24 +3,24 @@ id: doc-1 title: 설치 가이드 type: guide created_date: '2026-09-19 05:27' -updated_date: '2026-10-03 07:30' +updated_date: '2026-10-03 13:12' --- ## 🚀 설치 ### 기존 저장소에 적용 ```sh -git clone https://github.com/coralstay/git-trail.git ~/git-trail # 원하는 위치에 한 번만 클론 +git clone https://github.com/coralstay/coding-agent-git-commit-tool.git ~/coding-agent-git-commit-tool # 원하는 위치에 한 번만 클론 cd ~/my-project -~/git-trail/install.sh +~/coding-agent-git-commit-tool/install.sh ``` -대상 디렉터리를 인자로 줘도 됩니다: `~/git-trail/install.sh ~/my-project`. +대상 디렉터리를 인자로 줘도 됩니다: `~/coding-agent-git-commit-tool/install.sh ~/my-project`. ### 앞으로 만들 모든 새 저장소에 자동 적용 ```sh -~/git-trail/install.sh --global +~/coding-agent-git-commit-tool/install.sh --global ``` `git init`/`git clone`을 실행할 때마다 훅과 커밋 템플릿이 자동으로 심어집니다 @@ -35,10 +35,10 @@ cd ~/my-project | 대상 | 명령 | 효과 | | ----------------- | -------------------------------------------------------------- | ------------------------------------------ | -| 로컬(대상 저장소) | `git config core.hooksPath /hooks` | `.git/hooks/`의 기존 로컬 훅을 완전히 대체 | -| 로컬(대상 저장소) | `git config commit.template /.gitmessage` | 커밋 에디터에 스켈레톤 표시 | -| 전역(`--global`) | `git config --global init.templateDir /template` | 이후 모든 신규 저장소에 자동 적용 | -| 전역(`--global`) | `git config --global commit.template /.gitmessage` | 위와 동일, 전역 기본값 | +| 로컬(대상 저장소) | `git config core.hooksPath /hooks` | `.git/hooks/`의 기존 로컬 훅을 완전히 대체 | +| 로컬(대상 저장소) | `git config commit.template /.gitmessage` | 커밋 에디터에 스켈레톤 표시 | +| 전역(`--global`) | `git config --global init.templateDir /template` | 이후 모든 신규 저장소에 자동 적용 | +| 전역(`--global`) | `git config --global commit.template /.gitmessage` | 위와 동일, 전역 기본값 | **실행 중 새로 생기는 파일** @@ -46,7 +46,7 @@ cd ~/my-project | ------------------------- | ---------------------------------------- | -------------------------------------------------- | ----------------------------------------------------------------------- | | `.gitformat-verified` | `<대상 저장소>/.git/` | `pre-commit` 통과 시 생성, `post-commit`이 곧 삭제 | 커밋 사이에 남지 않는 임시 마커 | | `.gitformat-token-attributed` | `<대상 저장소>/.git/` | Claude Code 실측 성공 시에만 `post-commit`이 갱신(`unavailable`일 때는 갱신 안 함) | `Tokens-Used`/`Tool-Calls` 귀속 기록(첫 줄 세션 ID, 이후 이미 귀속된 응답 키 — 세션이 바뀌면 새로 시작, GF-129), 커밋 간 유지됨. 예전 델타 커서 `.gitformat-token-cursor`는 더 쓰지 않으며 측정 성공 시 지워짐 | -| `template/hooks/*` | 이 git-trail 클론 자신의 `template/` 안 | `install.sh --global` 실행 시 | 클론 위치를 가리키는 심볼릭 링크, 커밋 안 됨(`.gitignore`) | +| `template/hooks/*` | 이 coding-agent-git-commit-tool 클론 자신의 `template/` 안 | `install.sh --global` 실행 시 | 클론 위치를 가리키는 심볼릭 링크, 커밋 안 됨(`.gitignore`) | **커밋 자체가 바뀌는 경우**: `post-commit`이 조건에 따라 `git commit --amend`로 방금 만든 커밋의 footer에 트레일러를 추가합니다(README의 "훅 생애주기" 섹션과 diff --git "a/backlog/docs/doc-16 - \355\206\240\355\201\260\302\267\355\210\264\354\275\234-\354\270\241\354\240\225-\353\260\251\353\262\225\352\263\274-\355\225\234\352\263\204.md" "b/backlog/docs/doc-16 - \355\206\240\355\201\260\302\267\355\210\264\354\275\234-\354\270\241\354\240\225-\353\260\251\353\262\225\352\263\274-\355\225\234\352\263\204.md" index 502c583..b06bc06 100644 --- "a/backlog/docs/doc-16 - \355\206\240\355\201\260\302\267\355\210\264\354\275\234-\354\270\241\354\240\225-\353\260\251\353\262\225\352\263\274-\355\225\234\352\263\204.md" +++ "b/backlog/docs/doc-16 - \355\206\240\355\201\260\302\267\355\210\264\354\275\234-\354\270\241\354\240\225-\353\260\251\353\262\225\352\263\274-\355\225\234\352\263\204.md" @@ -3,7 +3,7 @@ id: doc-16 title: 토큰·툴콜 측정 방법과 한계 type: specification created_date: '2026-09-25 19:34' -updated_date: '2026-10-03 07:30' +updated_date: '2026-10-03 13:12' --- # 토큰·툴콜 측정 방법과 한계 @@ -90,7 +90,7 @@ GF-129 이전에는 `.git/.gitformat-token-cursor`(`<세션 ID> <줄 수>`)에 | --- | --- | --- | --- | --- | | 1 | `Grep {pattern:"trailer"}` | 120,000 | 800 | 탈락 — 건드린 경로가 없다 | | 2 | `Read {file_path:"hooks/commit-msg"}` | 200,000 | 1,200 | 탈락 — 이 커밋의 파일이 아니다 | -| 3 | `Edit {file_path:"/…/git-trail/hooks/post-commit"}` | 210,000 | 5,000 | **통과** — 정규화 후 완전 일치 | +| 3 | `Edit {file_path:"/…/coding-agent-git-commit-tool/hooks/post-commit"}` | 210,000 | 5,000 | **통과** — 정규화 후 완전 일치 | | 4 | `Bash {command:"ruff check hooks/post-commit"}` | 30,000 | 400 | **통과** — 명령에 경로가 있다 | | 5 | 설계 논의 (도구 호출 0개) | 180,000 | 2,000 | 탈락 — 매칭할 입력이 없다 | @@ -109,7 +109,7 @@ GF-129 이전에는 `.git/.gitformat-token-cursor`(`<세션 ID> <줄 수>`)에 - 경로 뒤: 문자열 끝, 또는 경로를 이어 쓰는 글자(영숫자 `_ . - /`)가 아닌 것. `hooks/post-commit-old`, `a.txt.bak`는 다른 파일이다. - 하위 디렉터리 안의 파일(`hooks/post-commit`)은 경로 앞에 `/`도 허용한다 — 절대경로나 - `../git-trail/hooks/post-commit`도 잡힌다. `myhooks/post-commit`은 잡히지 않는다. + `../coding-agent-git-commit-tool/hooks/post-commit`도 잡힌다. `myhooks/post-commit`은 잡히지 않는다. - **파일명이나 파일명 앞토큰으로는 매칭하지 않는다** — `cd hooks && cat post-commit`은 귀속되지 않는다. `README.md` 같은 흔한 이름이나 `a.txt` → `a` 같은 짧은 토큰이 무관한 응답을 끌어오는 것을 막기 위해서다. diff --git "a/backlog/docs/doc-20 - GitHub-\354\233\220\352\262\251-\352\260\225\354\240\234-\354\204\244\354\240\225-\352\264\200\353\246\254-\342\200\224-rulesets\354\231\200-\354\240\200\354\236\245\354\206\214-\354\204\244\354\240\225.md" "b/backlog/docs/doc-20 - GitHub-\354\233\220\352\262\251-\352\260\225\354\240\234-\354\204\244\354\240\225-\352\264\200\353\246\254-\342\200\224-rulesets\354\231\200-\354\240\200\354\236\245\354\206\214-\354\204\244\354\240\225.md" index a94e123..05e8823 100644 --- "a/backlog/docs/doc-20 - GitHub-\354\233\220\352\262\251-\352\260\225\354\240\234-\354\204\244\354\240\225-\352\264\200\353\246\254-\342\200\224-rulesets\354\231\200-\354\240\200\354\236\245\354\206\214-\354\204\244\354\240\225.md" +++ "b/backlog/docs/doc-20 - GitHub-\354\233\220\352\262\251-\352\260\225\354\240\234-\354\204\244\354\240\225-\352\264\200\353\246\254-\342\200\224-rulesets\354\231\200-\354\240\200\354\236\245\354\206\214-\354\204\244\354\240\225.md" @@ -3,7 +3,7 @@ id: doc-20 title: GitHub 원격 강제 설정 관리 — rulesets와 저장소 설정 type: guide created_date: '2026-09-26 12:54' -updated_date: '2026-10-03 03:44' +updated_date: '2026-10-03 13:12' --- # GitHub 원격 강제 설정 관리 @@ -66,15 +66,15 @@ decision-24(append-only)는 **로컬 훅만으로 달성할 수 없다.** `--no- ```sh # 병합 방식 -gh api repos/coralstay/git-trail \ +gh api repos/coralstay/coding-agent-git-commit-tool \ --jq '{allow_merge_commit, allow_rebase_merge, allow_squash_merge}' # ruleset 목록 -gh api repos/coralstay/git-trail/rulesets \ +gh api repos/coralstay/coding-agent-git-commit-tool/rulesets \ --jq '.[] | "\(.name) | \(.enforcement) | id=\(.id)"' # 특정 ruleset 상세 -gh api repos/coralstay/git-trail/rulesets/23313297 \ +gh api repos/coralstay/coding-agent-git-commit-tool/rulesets/23313297 \ --jq '{name, enforcement, include: .conditions.ref_name.include, rules: [.rules[].type]}' ``` @@ -82,11 +82,11 @@ gh api repos/coralstay/git-trail/rulesets/23313297 \ ```sh # 병합 방식 변경 -gh api -X PATCH repos/coralstay/git-trail \ +gh api -X PATCH repos/coralstay/coding-agent-git-commit-tool \ -f allow_merge_commit=true -F allow_rebase_merge=false -F allow_squash_merge=false # ruleset 갱신 (PUT은 전체 교체다 - 기존 규칙을 빠뜨리면 사라진다) -gh api -X PUT repos/coralstay/git-trail/rulesets/23313297 --input ruleset.json +gh api -X PUT repos/coralstay/coding-agent-git-commit-tool/rulesets/23313297 --input ruleset.json ``` ## 함정 diff --git "a/backlog/docs/doc-21 - \352\260\234\353\205\220-\354\247\200\353\217\204-\342\200\224-trail\302\267provenance\302\267attestation\302\267audit\354\235\264-\354\226\264\353\224\224\354\227\220-\352\265\254\355\230\204\353\217\274-\354\236\210\353\202\230.md" "b/backlog/docs/doc-21 - \352\260\234\353\205\220-\354\247\200\353\217\204-\342\200\224-trail\302\267provenance\302\267attestation\302\267audit\354\235\264-\354\226\264\353\224\224\354\227\220-\352\265\254\355\230\204\353\217\274-\354\236\210\353\202\230.md" index ff2afa7..a8dd7fa 100644 --- "a/backlog/docs/doc-21 - \352\260\234\353\205\220-\354\247\200\353\217\204-\342\200\224-trail\302\267provenance\302\267attestation\302\267audit\354\235\264-\354\226\264\353\224\224\354\227\220-\352\265\254\355\230\204\353\217\274-\354\236\210\353\202\230.md" +++ "b/backlog/docs/doc-21 - \352\260\234\353\205\220-\354\247\200\353\217\204-\342\200\224-trail\302\267provenance\302\267attestation\302\267audit\354\235\264-\354\226\264\353\224\224\354\227\220-\352\265\254\355\230\204\353\217\274-\354\236\210\353\202\230.md" @@ -3,9 +3,9 @@ id: doc-21 title: 개념 지도 — trail·provenance·attestation·audit이 어디에 구현돼 있나 type: specification created_date: '2026-10-03 03:46' -updated_date: '2026-10-03 07:30' +updated_date: '2026-10-03 13:12' --- -git-trail이라는 이름(decision-26)과 설명에 쓰는 네 용어가 이 저장소에서 실제로 무엇을 가리키는지 +git-trail이라는 이전 이름(decision-26)과 설명에 쓰는 네 용어가 이 저장소에서 실제로 무엇을 가리키는지 정리한다. 용어마다 **뜻 → 구현 위치 → 빈 곳** 순서다. 구현 위치는 함수 이름과 파일 경로로 적는다 (줄 번호는 바뀌므로 적지 않는다). 훅이 도는 순서는 README "커밋 한 번에 훅이 도는 순서"를 본다. @@ -20,7 +20,7 @@ git-trail이라는 이름(decision-26)과 설명에 쓰는 네 용어가 이 저 ## trail — 감사 추적 -**뜻**: 누가·언제·무엇을 했는지 순서대로 남기고, 남긴 것은 고치지 않는 기록. git-trail에서는 +**뜻**: 누가·언제·무엇을 했는지 순서대로 남기고, 남긴 것은 고치지 않는 기록. coding-agent-git-commit-tool에서는 커밋 이력 자체가 trail이고, 트레일러가 그 기록의 항목이며, append-only 정책이 "고치지 않음"을 지킨다. **구현 위치** @@ -43,7 +43,7 @@ git-trail이라는 이름(decision-26)과 설명에 쓰는 네 용어가 이 저 ## provenance — 출처 기록 **뜻**: 결과물이 어디서, 무엇으로, 어떻게 만들어졌는지에 대한 기록. SLSA(공급망 보안 표준)의 용어다. -git-trail에서는 커밋마다 붙는 출처 트레일러가 provenance다. +coding-agent-git-commit-tool에서는 커밋마다 붙는 출처 트레일러가 provenance다. **구현 위치** — 모든 트레일러는 `hooks/post-commit`이 붙인다. @@ -53,7 +53,7 @@ git-trail에서는 커밋마다 붙는 출처 트레일러가 provenance다. | `AI-Tool`, `AI-Tool-Version`, `Co-Authored-By` | `trailer_ai_tool()` | `AI_AGENT` 환경변수(Claude Code가 주입) | — | | `AI-Model` | `trailer_ai_model()` → `read_transcript_model()`, `claude_transcript_path()` | Claude Code: 세션 트랜스크립트의 `message.model` / 그 외: `gitformat.aiModel` 설정 | `hooks/commit-msg`의 `enforce_ai_model_gate()` — Claude Code 외 도구는 `gitformat.knownModel` 목록에 있어야 함 | | `Tokens-Used`, `Tool-Calls` | `trailer_tokens_used()` → `measure_claude_code_token_usage()` → `read_transcript_entries()`, `group_responses()`, `commit_target_paths()`, `AttributionMatcher`, `attributed_record_load()`/`attributed_record_save()` | 세션·서브에이전트 트랜스크립트에서 이 커밋이 바꾼 파일을 건드린 응답의 `message.usage`를 응답 단위로 합산(커밋당 귀속, decision-27). 귀속 기록 `/.gitformat-token-attributed`(GF-129) | — | -| `Hooks-Commit` | `trailer_hooks_commit()` | 훅이 들어 있는 git-trail 클론의 `rev-parse --short HEAD` | — | +| `Hooks-Commit` | `trailer_hooks_commit()` | 훅이 들어 있는 coding-agent-git-commit-tool 클론의 `rev-parse --short HEAD` | — | | `Signed-off-by` | `trailer_signed_off_by()` | 커밋 시점의 커미터(`%cn <%ce>`) | — (decision-25로 유지) | 측정 방법과 한계의 상세는 doc-16, 트레일러별 레퍼런스는 doc-3, 에이전트 판정 신호는 doc-17. @@ -71,12 +71,12 @@ git-trail에서는 커밋마다 붙는 출처 트레일러가 provenance다. Sigstore, GitHub artifact attestations). "누가 그렇다고 주장했다"가 아니라 "그 주장이 위조되지 않았음을 확인할 수 있다"가 핵심이다. -**구현 위치 — git-trail 자체에는 없다.** +**구현 위치 — coding-agent-git-commit-tool 자체에는 없다.** | 무엇 | 어디 | 비고 | | --- | --- | --- | | 트레일러 | 커밋 메시지 안의 평문 | 서명되지 않은 주장. 누구나 손으로 쓸 수 있다 | -| 커밋 서명 | 사용자의 git 설정(`commit.gpgsign`, `gpg.format=ssh`) | git-trail이 설정하지 않는다. 켜져 있으면 `post-commit`의 amend로 만들어진 최종 커밋도 다시 서명되므로 트레일러까지 서명 범위에 들어간다 | +| 커밋 서명 | 사용자의 git 설정(`commit.gpgsign`, `gpg.format=ssh`) | coding-agent-git-commit-tool이 설정하지 않는다. 켜져 있으면 `post-commit`의 amend로 만들어진 최종 커밋도 다시 서명되므로 트레일러까지 서명 범위에 들어간다 | | 서명 강제 | GitHub ruleset `required_signatures` | 켜지 않았다(decision-24, DRAFT-20) | **빈 곳** diff --git "a/backlog/docs/doc-5 - \354\240\200\354\236\245\354\206\214-\352\265\254\354\241\260.md" "b/backlog/docs/doc-5 - \354\240\200\354\236\245\354\206\214-\352\265\254\354\241\260.md" index 9983468..e62a60a 100644 --- "a/backlog/docs/doc-5 - \354\240\200\354\236\245\354\206\214-\352\265\254\354\241\260.md" +++ "b/backlog/docs/doc-5 - \354\240\200\354\236\245\354\206\214-\352\265\254\354\241\260.md" @@ -3,12 +3,12 @@ id: doc-5 title: 저장소 구조 type: guide created_date: '2026-09-19 05:27' -updated_date: '2026-10-03 03:44' +updated_date: '2026-10-03 13:12' --- ## 📁 저장소 구조 ``` -git-trail/ +coding-agent-git-commit-tool/ ├── hooks/ # core.hooksPath가 가리키는 실제 훅(Python 3, decision-16) │ ├── readme.md # 훅 3개의 역할·생애주기와 python3 실행 요구사항 │ ├── prepare-commit-msg # 재생 커밋 면제, 에디터 경로 거부(decision-18) diff --git a/hooks/gitformat.conf b/hooks/gitformat.conf index 0c2130d..e57bb88 100644 --- a/hooks/gitformat.conf +++ b/hooks/gitformat.conf @@ -1,9 +1,9 @@ -# git-trail 내부 기본값 상수 파일(git config 포맷). 훅 3개(prepare-commit-msg, +# coding-agent-git-commit-tool 내부 기본값 상수 파일(git config 포맷). 훅 3개(prepare-commit-msg, # commit-msg, post-commit)가 이 파일을 `git config --file`로 읽어 값을 가져온다 — # 각 훅의 실행 로직(함수/제어흐름)은 이 파일과 무관하게 파일마다 독립적으로 # 유지된다(공유하는 건 값뿐). # -# 이 파일은 git-trail 자체의 "내부 기본값"이고, 컨슈머 저장소가 오버라이드하는 +# 이 파일은 coding-agent-git-commit-tool 자체의 "내부 기본값"이고, 컨슈머 저장소가 오버라이드하는 # `git config gitformat.taskPrefix`/`gitformat.branchExempt`/`gitformat.aiModel` # (컨슈머 저장소의 로컬/전역 git config)과는 레이어가 다르다 — 오버라이드가 있으면 # 그 값이 우선하고, 없으면 여기 기본값을 쓴다. diff --git a/hooks/post-commit b/hooks/post-commit index 3f18290..09b25c2 100755 --- a/hooks/post-commit +++ b/hooks/post-commit @@ -698,9 +698,9 @@ def trailer_tokens_used(): queue_trailer(TRAILER_TOOL_CALLS, calls_value) -# Hooks-Commit(decision-5): 이 커밋을 검증한 git-trail 훅 코드 자체의 커밋 해시. +# Hooks-Commit(decision-5): 이 커밋을 검증한 coding-agent-git-commit-tool 훅 코드 자체의 커밋 해시. # 수동 버전 문자열 대신 훅 스크립트가 위치한 저장소의 HEAD를 그대로 읽으므로 항상 -# 정확하다. hooks/가 git-trail 클론 안에 있지 않으면(예: 훅만 복사해 배포한 경우) +# 정확하다. hooks/가 coding-agent-git-commit-tool 클론 안에 있지 않으면(예: 훅만 복사해 배포한 경우) # 조회가 실패하는데, 그때는 커밋을 막지 않고 이 트레일러만 생략하는 게 의도된 # 동작이다 - 이 함수의 판단이 rev-parse 성공 여부에 달려 있으므로 예외가 아니라 # 종료 코드로 좁게 확인한다. diff --git a/hooks/prepare-commit-msg b/hooks/prepare-commit-msg index 4881ad8..2595512 100755 --- a/hooks/prepare-commit-msg +++ b/hooks/prepare-commit-msg @@ -6,7 +6,7 @@ # 옮겨온다. 그때까지 commit-msg/post-commit이 그대로 자기 일을 계속한다. # # GF-126에서 언어별 lint를 pre-commit에서 이 파일로 옮겼다가 GF-135에서 그 lint를 -# 통째로 지웠다 — 언어 lint는 git-trail의 범위(형식·출처 기록·이력 불변, decision-25) +# 통째로 지웠다 — 언어 lint는 coding-agent-git-commit-tool의 범위(형식·출처 기록·이력 불변, decision-25) # 어디에도 속하지 않는 기능이었다(decision-23). 남은 것은 검증마커 기록뿐이고 그 이유는 # write_verified_marker()의 주석에 있다. # @@ -19,7 +19,7 @@ # 에디터 경로 판정에 $1의 내용을 쓴다 — $2로 에디터를 판정할 수 없는 이유는 아래 # has_author_message()의 주석에 적었다. # -# template/(GF-9)로 설치된 저장소는 .git/hooks/prepare-commit-msg 자체가 git-trail +# template/(GF-9)로 설치된 저장소는 .git/hooks/prepare-commit-msg 자체가 coding-agent-git-commit-tool # 클론을 가리키는 심볼릭 링크다. 링크가 놓인 .git/hooks/가 아니라 링크가 가리키는 # 실제 위치를 기준으로 gitformat.conf를 찾아야 한다(GF-16) — realpath가 링크 체인을 # 따라간다. diff --git a/install.sh b/install.sh index 3f0d604..4b28fef 100755 --- a/install.sh +++ b/install.sh @@ -1,10 +1,10 @@ #!/bin/sh -# git-trail 설치 스크립트: 기존 저장소에 core.hooksPath와 commit.template을 설정하고 +# coding-agent-git-commit-tool 설치 스크립트: 기존 저장소에 core.hooksPath와 commit.template을 설정하고 # (decision-2), 훅 실행에 필요한 python3 존재를 확인한다(decision-16). 이 스크립트가 -# 위치한 git-trail 클론 자체를 훅 소스로 사용한다. +# 위치한 coding-agent-git-commit-tool 클론 자체를 훅 소스로 사용한다. # # 사용법: -# /path/to/git-trail/install.sh [target-repo-dir] +# /path/to/coding-agent-git-commit-tool/install.sh [target-repo-dir] # target-repo-dir을 생략하면 현재 디렉터리를 대상으로 한다. set -eu @@ -30,7 +30,7 @@ fi # 훅은 Python으로 실행된다(decision-16). 여기서 막지 않으면 설정은 다 끝난 # 뒤 첫 커밋에서야 훅이 실행 실패로 깨져 원인을 찾기 어렵다. if ! command -v python3 >/dev/null 2>&1; then - echo "install.sh: python3을 찾을 수 없습니다 - git-trail 훅은 Python으로 실행됩니다." >&2 + echo "install.sh: python3을 찾을 수 없습니다 - coding-agent-git-commit-tool 훅은 Python으로 실행됩니다." >&2 exit 1 fi @@ -56,7 +56,7 @@ fi git -C "$TARGET" config core.hooksPath "$HOOKS_DIR" git -C "$TARGET" config commit.template "$GITMESSAGE" -echo "git-trail: ${TARGET} 설정 완료" +echo "coding-agent-git-commit-tool: ${TARGET} 설정 완료" echo " core.hooksPath = ${HOOKS_DIR}" echo " commit.template = ${GITMESSAGE}" @@ -88,10 +88,10 @@ case "$GLOBAL_MODE" in sync_template git config --global init.templateDir "$TEMPLATE_DIR" git config --global commit.template "$GITMESSAGE" - echo "git-trail: 전역 init.templateDir/commit.template 설정 완료 (앞으로 만드는 새 저장소에 자동 적용)" + echo "coding-agent-git-commit-tool: 전역 init.templateDir/commit.template 설정 완료 (앞으로 만드는 새 저장소에 자동 적용)" ;; no) - echo "git-trail: 전역 설정은 건너뜁니다." + echo "coding-agent-git-commit-tool: 전역 설정은 건너뜁니다." ;; ask) if [ -t 0 ]; then @@ -102,18 +102,18 @@ case "$GLOBAL_MODE" in sync_template git config --global init.templateDir "$TEMPLATE_DIR" git config --global commit.template "$GITMESSAGE" - echo "git-trail: 전역 init.templateDir/commit.template 설정 완료." + echo "coding-agent-git-commit-tool: 전역 init.templateDir/commit.template 설정 완료." ;; *) - echo "git-trail: 전역 설정은 건너뜁니다. 나중에: ${SELF_DIR}/install.sh --global" + echo "coding-agent-git-commit-tool: 전역 설정은 건너뜁니다. 나중에: ${SELF_DIR}/install.sh --global" ;; esac else - echo "git-trail: 비대화형 환경이라 전역 설정은 건너뜁니다. --global로 자동 적용 가능." + echo "coding-agent-git-commit-tool: 비대화형 환경이라 전역 설정은 건너뜁니다. --global로 자동 적용 가능." fi ;; esac -echo "git-trail: 참고 - git push --no-verify는 로컬 훅으로 탐지할 수 없습니다." +echo "coding-agent-git-commit-tool: 참고 - git push --no-verify는 로컬 훅으로 탐지할 수 없습니다." echo " push된 이력은 원격 설정이 지킵니다 - 대상 저장소의 원격(GitHub rulesets·병합 방식)을" -echo " 직접 구성하세요 (예시: git-trail 저장소의 backlog doc-20)." +echo " 직접 구성하세요 (예시: coding-agent-git-commit-tool 저장소의 backlog doc-20)." diff --git a/tests/test_end_to_end_commit.py b/tests/test_end_to_end_commit.py index f49e3f2..1d5906a 100644 --- a/tests/test_end_to_end_commit.py +++ b/tests/test_end_to_end_commit.py @@ -26,7 +26,7 @@ def test_언어_도구가_거부할_파일도_커밋이_통과한다(self): """[GF-135] 언어별 검사가 제거돼 ruff가 거부할 파일도 커밋을 막지 않는다 GF-135 전에는 pyproject.toml이 있는 저장소의 `import os`(F401)가 - checks/python.py의 ruff에 걸려 커밋이 막혔다. 지금은 git-trail이 언어 + checks/python.py의 ruff에 걸려 커밋이 막혔다. 지금은 coding-agent-git-commit-tool이 언어 도구를 전혀 실행하지 않는다(decision-23) — 이 단언이 없으면 lint가 슬그머니 돌아와도 스위트가 똑같이 통과한다. """ @@ -63,7 +63,7 @@ def test_template_심볼릭_링크_설치에서도_훅이_자기_설정을_찾 new_repo = self.temp_dir() self.make_repo(path=new_repo, hooks_path=None, env=env) - # init.templateDir이 .git/hooks/*를 git-trail 클론을 가리키는 심볼릭 링크로 + # init.templateDir이 .git/hooks/*를 coding-agent-git-commit-tool 클론을 가리키는 심볼릭 링크로 # 채웠는지부터 확인한다 — 이게 아니면 GF-16 시나리오 자체가 재현 안 된다. linked_hook = new_repo / ".git" / "hooks" / "prepare-commit-msg" self.assertTrue( diff --git a/tests/test_install_script.py b/tests/test_install_script.py index 1daf3b8..b0a5513 100644 --- a/tests/test_install_script.py +++ b/tests/test_install_script.py @@ -27,7 +27,7 @@ def setUp(self): self.run_cmd_ok(["git", "init", "-q"], cwd=self.repo) def fake_root(self): - """install.sh와 hooks/만 들어 있는 git-trail 클론 사본. + """install.sh와 hooks/만 들어 있는 coding-agent-git-commit-tool 클론 사본. 실제 hooks/ 파일을 지우는 테스트는 이 저장소 자신이 아니라 이 사본에서 한다. """ From 73613e60ca37bb2fb5ade99384b4b6a49904f7de Mon Sep 17 00:00:00 2001 From: coralstay <231006716+coralstay@users.noreply.github.com> Date: Sat, 3 Oct 2026 22:13:28 +0900 Subject: [PATCH 8/9] =?UTF-8?q?[docs][readme]=20=EC=83=88=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=EA=B3=BC=20=ED=95=98=EB=8A=94=20=EC=9D=BC=20=EC=A4=91?= =?UTF-8?q?=EC=8B=AC=EC=9D=98=20=EC=B2=AB=20=EC=84=A4=EB=AA=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Task-Id: GF-142 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude AI-Model: claude-opus-5-5 Tokens-Used: in=568007 out=652 Tool-Calls: 2 Hooks-Commit: ab8f17e Signed-off-by: coralstay <231006716+coralstay@users.noreply.github.com> --- README.md | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index ca76772..368204f 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,18 @@
-# 👣 git-trail +# 🤖 coding-agent-git-commit-tool -**git 이력을 감사 추적(audit trail)으로 만드는 도구 — 커밋 형식 · 출처 기록(provenance) · 이력 불변** +**코딩 에이전트의 git 커밋을 검사하고, 누가·어떤 모델로·무슨 태스크로·얼마를 들여 만들었는지 커밋에 자동으로 기록하는 git 훅** [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE) [![Hooks: Python 3](https://img.shields.io/badge/hooks-Python%203-3776ab.svg)](./hooks/) [![Installer: POSIX sh](https://img.shields.io/badge/installer-POSIX%20sh-89e051.svg)](./install.sh) [![Requires: git + python3](https://img.shields.io/badge/requires-git%20%2B%20python3-brightgreen.svg)](#-필요조건을-말씀드립니다) -에이전트와 사람이 남기는 커밋을 정해진 양식으로 쓰고, 누가·무엇으로·얼마를 들여 -만들었는지 자동으로 기록하고, 한 번 남긴 기록은 다시 쓰지 않게 지키는 도구입니다. +커밋할 때마다 두 가지를 합니다. 메시지 규칙(제목 형식·길이, 태스크 번호가 든 브랜치)을 +검사해 어기면 커밋을 거부하고, 통과한 커밋 끝에 작성자·AI 도구와 모델·태스크·토큰 +사용량을 트레일러로 자동으로 붙입니다. 한 번 남긴 이력은 다시 쓰지 않는다는 원칙도 +지향하지만, 지금은 GitHub 원격 설정으로만 지키고 있습니다. `core.hooksPath` · `git interpret-trailers` 등 **git 자체 기능**으로 동작합니다. 훅은 Python 3 표준 라이브러리만 쓰므로 설치할 패키지는 없지만, `python3` 자체는 필요합니다([필요조건](#-필요조건을-말씀드립니다)). @@ -66,7 +68,7 @@ Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com> | `Tokens-Used` | 이 커밋에 든 토큰(`in=<입력> out=<출력>`). 작업 비용을 이력에서 읽게 합니다 | `post-commit` · 이 커밋이 바꾼 파일을 건드린 응답의 토큰 합(귀속), 델타 아님(decision-27) | 서버 발급 사실(Claude Code 한정), **측정 방법론은 실험 단계** | | `Tool-Calls` | 이 커밋의 파일을 건드린 도구 호출 수 | `post-commit` · 귀속된 응답에서 대상 파일을 건드린 `tool_use` 블록 개수 | 위와 동일 | | `Co-Authored-By` | 공동저자 귀속 | `post-commit` · `AI-Tool`이 `claude-code`일 때만 | 자동 | -| `Hooks-Commit` | 이 커밋을 검사한 git-trail 자체의 버전. 훅에 버그가 있었을 때 어느 커밋들이 그 훅을 거쳤는지 역추적합니다 | `post-commit` · 훅 클론의 `rev-parse --short HEAD` | 완전 자동, 모든 커밋 | +| `Hooks-Commit` | 이 커밋을 검사한 coding-agent-git-commit-tool 자체의 버전. 훅에 버그가 있었을 때 어느 커밋들이 그 훅을 거쳤는지 역추적합니다 | `post-commit` · 훅 클론의 `rev-parse --short HEAD` | 완전 자동, 모든 커밋 | | `Signed-off-by` | 커미터 정보(DCO 관례) | `post-commit` · `git log -1 --format='%cn <%ce>'` | 완전 자동, 모든 커밋 | | `Verify-Bypassed` | `--no-verify`로 검사를 건너뛴 사실. 우회를 막지는 못하니 대신 기록합니다(decision-3) | `post-commit` · `prepare-commit-msg`가 남긴 검증 마커의 **부재** | 자동 | | `Fixes` | 이 버그를 만든 커밋 | **사람이 씀**(원인 커밋을 아는 경우만) · `commit-msg`가 해시 실재를 검증 | 검증됨 | @@ -79,10 +81,10 @@ Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com> ## 🪝 커밋 한 번에 훅이 도는 순서 > 공식 문서: [githooks(5)](https://git-scm.com/docs/githooks). git이 제공하는 훅은 28개이고, -> git-trail의 훅은 지금 커밋 단계만 다룹니다. push된 이력의 보호는 원격 설정이 맡습니다 +> coding-agent-git-commit-tool의 훅은 지금 커밋 단계만 다룹니다. push된 이력의 보호는 원격 설정이 맡습니다 > ([다루는 범위](#-다루는-범위)). -| 순서 | 훅 | 커밋 객체가 있는가 | `--no-verify`로 건너뛰나 | git-trail이 하는 일 | +| 순서 | 훅 | 커밋 객체가 있는가 | `--no-verify`로 건너뛰나 | coding-agent-git-commit-tool이 하는 일 | | ---- | ------------------------------------------------ | ------------------ | ------------------------ | ------------------------------------------------------------------------------------ | | 1 | [`prepare-commit-msg`](hooks/prepare-commit-msg) | 아직 없음 | **건너뛸 수 없음** | 재생·병합 커밋 면제, 에디터 경로 거부, 검증 마커 기록 | | 2 | (에디터) | 아직 없음 | — | 사람이 메시지를 씁니다. 훅보다 **뒤**라서 1번은 최종 메시지를 볼 수 없습니다 | @@ -116,10 +118,10 @@ attestation(서명된 증명)은 아직 없고, audit(사후 검사)은 커밋 **언어별 lint는 다루지 않습니다**(decision-23) — 세 기둥 어디에도 속하지 않고, 컨슈머에게 npm/ruff/clang-format 같은 도구를 전제하게 만듭니다. 언어 검사가 필요하면 CI에서 돌리시기 -바랍니다. git-trail이 `core.hooksPath`를 점유하므로 그 저장소의 `.git/hooks/*`는 +바랍니다. coding-agent-git-commit-tool이 `core.hooksPath`를 점유하므로 그 저장소의 `.git/hooks/*`는 무시되고, 자기 훅과 함께 쓰는 방법은 아직 정하지 않았습니다. -> 이름은 git-format → git-logbook → git-trail 순으로 바뀌었습니다(decision-25, decision-26). 설정 키와 파일명 +> 이름은 git-format → git-logbook → git-trail → coding-agent-git-commit-tool 순으로 바뀌었습니다(decision-25, decision-26, decision-29). 설정 키와 파일명 > (`gitformat.*`, `gitformat.conf`, `.gitformat-*`)은 기존 설치를 깨지 않도록 아직 예전 이름입니다(GF-133). 구성은 Python 훅 + 설정 파일 하나(`hooks/gitformat.conf`) + POSIX sh 설치 @@ -156,17 +158,18 @@ python3는 이런 환경에서 보이지 않을 수 있습니다. ### 기존 저장소에 적용하는 방법입니다 ```sh -git clone https://github.com/coralstay/git-trail.git ~/git-trail # 원하는 위치에 한 번만 클론 +git clone https://github.com/coralstay/coding-agent-git-commit-tool.git ~/coding-agent-git-commit-tool # 원하는 위치에 한 번만 클론 cd ~/my-project -~/git-trail/install.sh +~/coding-agent-git-commit-tool/install.sh ``` -대상 디렉터리를 인자로 주셔도 됩니다: `~/git-trail/install.sh ~/my-project`. +대상 디렉터리를 인자로 주셔도 됩니다: `~/coding-agent-git-commit-tool/install.sh ~/my-project`. +클론 위치와 폴더 이름은 자유롭게 정하셔도 됩니다 — `install.sh`는 자기가 놓인 클론의 `hooks/`를 씁니다. ### 앞으로 만들 모든 새 저장소에 자동 적용하는 방법입니다 ```sh -~/git-trail/install.sh --global +~/coding-agent-git-commit-tool/install.sh --global ``` `git init`/`git clone`을 실행할 때마다 훅과 커밋 템플릿이 자동으로 심어집니다 From eb9373d99ebc74c19efc5008030ec3834f590b8a Mon Sep 17 00:00:00 2001 From: coralstay <231006716+coralstay@users.noreply.github.com> Date: Sat, 3 Oct 2026 22:14:12 +0900 Subject: [PATCH 9/9] =?UTF-8?q?[docs][backlog]=20GF-142=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Task-Id: GF-142 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude AI-Model: claude-opus-5-5 Tokens-Used: in=0 out=0 (no-attributed-turn) Tool-Calls: 0 (no-attributed-turn) Hooks-Commit: f502892 Signed-off-by: coralstay <231006716+coralstay@users.noreply.github.com> --- ...0\354\204\234-\354\240\204\353\266\200.md" | 36 +++++++++++++++---- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git "a/backlog/tasks/gf-142 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" "b/backlog/tasks/gf-142 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" index 10b9f1c..20dded2 100644 --- "a/backlog/tasks/gf-142 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" +++ "b/backlog/tasks/gf-142 - \354\235\264\353\246\204\354\235\204-coding-agent-git-commit-tool\353\241\234-\353\260\224\352\276\274\353\213\244-\342\200\224-\353\241\234\354\273\254\302\267\354\233\220\352\262\251\302\267\353\254\270\354\204\234-\354\240\204\353\266\200.md" @@ -1,11 +1,11 @@ --- id: GF-142 title: 이름을 coding-agent-git-commit-tool로 바꾼다 — 로컬·원격·문서 전부 -status: In Progress +status: Done assignee: - '@claude' created_date: '2026-10-03 13:10' -updated_date: '2026-10-03 13:11' +updated_date: '2026-10-03 13:14' labels: - docs - chore @@ -29,9 +29,31 @@ references: ## Acceptance Criteria -- [ ] #1 decision-29가 이름 변경을 기록하고 decision-26의 이름 조항만 대체한다고 명시한다(범용 유지 판단, 개명 사유 포함) -- [ ] #2 표시 이름 git-trail이 README·install.sh·훅 주석·.gitmessage·CI·테스트·backlog config·backlog docs에서 새 이름으로 바뀐다(gitformat.* 설정 키·파일명, 지난 decision·task 본문은 제외) -- [ ] #3 README 첫 설명이 커밋 규칙 검사와 커밋마다 작성자·AI 모델·태스크·토큰 자동 기록을 말한다 -- [ ] #4 전체 테스트와 ruff가 통과한다 -- [ ] #5 GitHub 저장소가 coralstay/coding-agent-git-commit-tool로 rename되고 origin URL·description·topics가 갱신된다 +- [x] #1 decision-29가 이름 변경을 기록하고 decision-26의 이름 조항만 대체한다고 명시한다(범용 유지 판단, 개명 사유 포함) +- [x] #2 표시 이름 git-trail이 README·install.sh·훅 주석·.gitmessage·CI·테스트·backlog config·backlog docs에서 새 이름으로 바뀐다(gitformat.* 설정 키·파일명, 지난 decision·task 본문은 제외) +- [x] #3 README 첫 설명이 커밋 규칙 검사와 커밋마다 작성자·AI 모델·태스크·토큰 자동 기록을 말한다 +- [x] #4 전체 테스트와 ruff가 통과한다 +- [x] #5 GitHub 저장소가 coralstay/coding-agent-git-commit-tool로 rename되고 origin URL·description·topics가 갱신된다 + +## Implementation Plan + + +1. decision-29 기록 +2. 표시 이름 일괄 치환(문서는 backlog doc update로), README 제목·첫 설명·이름 변천 문장 수정 +3. 테스트·ruff·shellcheck +4. GitHub rename, origin URL·description·topics 갱신 (push 훅이 Done을 요구하므로 PR 전에) +5. PR 머지 후 운영 단계: 로컬 폴더 이동, hooksPath 재설치(이 저장소·agent-orchestartor), 메모리 복사 + + +## Implementation Notes + + +검증: unittest 106건 OK, ruff·shellcheck 통과. git-trail 잔존은 README의 이름 변천 문장과 doc-21의 "이전 이름" 서술뿐(의도). GitHub: coralstay/coding-agent-git-commit-tool, 옛 URL 301 리다이렉트 확인, ruleset 23313297 active 유지, origin URL 갱신. 승격 커밋 3393957 제목에서 태스크 번호가 빠졌다(셸이 $id로를 변수명으로 읽음) — amend 금지라 그대로 둔다. backlog 문서는 처음에 파일로 직접 고쳤다가 되돌리고 backlog doc update로 다시 적용했다. + + +## Final Summary + + +이름을 git-trail에서 coding-agent-git-commit-tool로 바꿨다(decision-29, decision-26의 이름 조항 대체, 범용 범위 유지). README·install.sh·훅 주석·.gitmessage·CI·테스트·backlog config·doc-1·5·16·20·21의 표시 이름을 바꾸고, README 첫 설명을 하는 일(규칙 검사 + 작성자·모델·태스크·토큰 자동 기록) 중심으로 다시 썼다. GitHub 저장소를 rename하고 origin URL·description·topics를 갱신했다. 검증: 테스트 106건·ruff·shellcheck 통과, 옛 URL 301 리다이렉트와 ruleset 유지 확인. 로컬 폴더 이동과 hooksPath 재설치는 병합 뒤 운영 단계로 한다. +