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/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)
[](./hooks/)
[](./install.sh)
[](#-필요조건을-말씀드립니다)
-에이전트와 사람이 남기는 커밋을 정해진 양식으로 쓰고, 누가·무엇으로·얼마를 들여
-만들었는지 자동으로 기록하고, 한 번 남긴 기록은 다시 쓰지 않게 지키는 도구입니다.
+커밋할 때마다 두 가지를 합니다. 메시지 규칙(제목 형식·길이, 태스크 번호가 든 브랜치)을
+검사해 어기면 커밋을 거부하고, 통과한 커밋 끝에 작성자·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`을 실행할 때마다 훅과 커밋 템플릿이 자동으로 심어집니다
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"
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/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..ec7de63
--- /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`와 실제 커미터의 불일치를 이력
+재작성의 증거로 쓴다는 것이었다.
+
+그 규칙은 유저가 바로 이 충돌(decision-19 vs DRAFT-19)을 두고 직접 준 것이다. 다만 규칙의
+결과가 "`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/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/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/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
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..20dded2
--- /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,59 @@
+---
+id: GF-142
+title: 이름을 coding-agent-git-commit-tool로 바꾼다 — 로컬·원격·문서 전부
+status: Done
+assignee:
+ - '@claude'
+created_date: '2026-10-03 13:10'
+updated_date: '2026-10-03 13:14'
+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
+
+- [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 재설치는 병합 뒤 운영 단계로 한다.
+
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/ 파일을 지우는 테스트는 이 저장소 자신이 아니라 이 사본에서 한다.
"""