Repository navigation
[docs] 프로젝트 목적 재정의와 git-logbook 개명 (GF-138) - #39
Merged
Merged
Conversation
전제가 "git이 에이전트 작업의 로그"라면 이력 재작성은 기록 수정이다. 실측으로 지금 깨져 있는 것을 확인했다 - main의 커밋들이 Signed-off-by: cpu-once를 달고 있는데 실제 committer는 coralstay다. rebase-merge가 커밋을 다시 만들면서 트레일러가 거짓이 됐다. decision-24: 커밋 후 객체를 다시 만들지 않는다. 금지선은 커널 문서와 같이 push된 이력에 둔다. 병합은 머지 커밋, rebase는 로컬만, cherry-pick 금지, amend 금지, revert는 권장. doc-19: 연산별 판별 방법을 실측으로 정리했다. 핵심은 cherry-pick과 rebase가 훅 인자로 구분되지 않고 rebase-merge/ 디렉터리 하나로만 갈린다는 것이다. REBASE_HEAD는 rebase 재생 중 존재하지 않았다 - 초기 조사가 틀렸다. 아직 태스크가 아니다 - 승격은 별도 커밋으로 남긴다. Task-Id: GF-137 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> AI-Tool: claude-code AI-Tool-Version: 2.1.267 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5 Tokens-Used: 43399706 Tool-Calls: 27 Hooks-Commit: 6a72e3b Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
이력을 만들거나 바꾸는 git 명령을 훑어 정책이 닿지 않는 곳을 doc-19에 정리했다. 다섯 부류로 나온다. 가장 큰 구멍은 GitHub 병합 버튼이다 - 로컬 훅을 전혀 거치지 않는다. 실측으로 이 저장소는 rebase-merge와 squash-merge가 둘 다 켜져 있고 브랜치 보호도 없다. decision-24는 훅만으로 달성할 수 없다. 판별 불가 경로도 찾았다. cherry-pick -n 후 수동 커밋은 상태 파일이 하나도 남지 않아 평범한 커밋과 구별되지 않는다. 오탐도 둘 찾았다. rebase -i의 reword가 rebase 안에서 source=commit을 만들어서, amend 거부를 그것만으로 하면 rebase -i가 깨진다. commit -C도 source=commit이라 $3이 HEAD인지로 구분해야 한다. Task-Id: GF-137 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> AI-Tool: claude-code AI-Tool-Version: 2.1.267 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5 Tokens-Used: 20719965 Tool-Calls: 10 Hooks-Commit: 21f7c00 Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
--no-verify는 로컬 훅을 건너뛸 수 있어 로컬만으로는 정책이 완결되지 않는다. 계층을 나눠 기록했다. github.com에는 pre-receive 훅을 설치할 수 없다 - GitHub Enterprise 전용 기능이다. rulesets와 저장소 설정이 그 자리를 대신한다. 적용: allow_rebase_merge와 allow_squash_merge를 끄고 merge commit만 남겼다. ruleset으로 force push와 브랜치 삭제를 막았다. 두 계층이 맞물리는 지점: --no-verify로 로컬 재작성은 막을 수 없지만, 다시 쓴 결과는 fast-forward가 아니라 원격이 거부한다. 금지선을 공개된 이력에 둔 것과 일치한다. required_linear_history는 켜면 안 된다 - merge commit을 금지하는 규칙이다. Task-Id: GF-137 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> AI-Tool: claude-code AI-Tool-Version: 2.1.267 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5 Tokens-Used: 12109931 Tool-Calls: 6 Hooks-Commit: d1526c8 Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
main-protection ruleset을 활성화했다. 규칙은 제가 만든 것과 동일했고 결정적으로 적용 대상 브랜치가 비어 있었다 - 그대로 켜면 아무 브랜치에도 적용되지 않는다. 대상을 채워 켜고 중복 ruleset은 지웠다. doc-20에 현재 걸려 있는 설정과 그 이유, 켜면 안 되는 규칙 (required_linear_history는 merge commit을 금지한다), 아직 켜지 않은 것과 그 조건, 확인·변경 명령, 함정 셋을 적었다. decision-24와 doc-19에 상호 링크를 걸었다. Task-Id: GF-137 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> AI-Tool: claude-code AI-Tool-Version: 2.1.267 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5 Tokens-Used: 9178237 Tool-Calls: 5 Hooks-Commit: 8685bbf Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
force push만 막는 것으로는 부족하다. rulesets에 커밋 메시지 패턴 규칙이 아예 없어서 원격은 트레일러가 참인지 검사할 수단이 없다. DRAFT-19: 트레일러 정합성을 CI에서 검사한다. 유저가 제안한 "트레일러를 뜯어 정합성 최종 검사"의 자리가 여기다 - post-commit은 커밋 후라 막을 수 없고, CI는 완성된 객체를 보면서 required status check으로 병합을 막을 수 있는 유일한 자리다. Signed-off-by와 실제 committer 불일치가 이력 재작성의 증거가 된다. DRAFT-20: 보호 범위 확대 검토. task 브랜치가 보호되지 않아 force push로 다시 쓸 수 있고, 그 상태로 merge되면 main은 append-only인데 작업 기록은 이미 위조됐다. PR 필수, 서명, 태그, 저장소 설정 되돌림 감지도 함께. 둘 다 아직 태스크가 아니다. Task-Id: GF-137 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> AI-Tool: claude-code AI-Tool-Version: 2.1.267 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5 Tokens-Used: 44727008 Tool-Calls: 26 Hooks-Commit: 59590de Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
이 브랜치의 커밋들이 GF-137을 참조하는데 그 태스크가 존재하지 않았다. append-only라 커밋을 고치지 않고 번호를 실재하게 만든다. 브랜치의 실제 작업은 정책 결정과 문서화, 원격 강제 적용이다. 훅 구현은 DRAFT-18이 맡는다. Task-Id: GF-137 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> AI-Tool: claude-code AI-Tool-Version: 2.1.267 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5 Tokens-Used: 5653750 Tool-Calls: 2 Hooks-Commit: 1a6200f Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
Task-Id: GF-137 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5-5 Tokens-Used: 0 Tool-Calls: 0 Hooks-Commit: d873f64 Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
Task-Id: GF-137 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5-5 Tokens-Used: 0 Tool-Calls: 0 Hooks-Commit: 9e89516 Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
Task-Id: GF-137 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5-5 Tokens-Used: 1252972 Tool-Calls: 6 Hooks-Commit: c7ab8ab Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
Task-Id: GF-137 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5-5 Tokens-Used: 1017085 Tool-Calls: 3 Hooks-Commit: 20109cd Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
Task-Id: GF-138 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5-5 Tokens-Used: 1795920 Tool-Calls: 7 Hooks-Commit: d11bd25 Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
Task-Id: GF-138 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5-5 Tokens-Used: 1252467 Tool-Calls: 4 Hooks-Commit: 8fce8d1 Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
Task-Id: GF-138 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5-5 Tokens-Used: 1467624 Tool-Calls: 5 Hooks-Commit: f401596 Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
Task-Id: GF-138 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5-5 Tokens-Used: 0 Tool-Calls: 0 Hooks-Commit: 61f0eac Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
Task-Id: GF-138 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5-5 Tokens-Used: 330458 Tool-Calls: 1 Hooks-Commit: 2638bd7 Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
Task-Id: GF-138 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5-5 Tokens-Used: 1893921 Tool-Calls: 5 Hooks-Commit: 5f76777 Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
Task-Id: GF-138 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5-5 Tokens-Used: 0 Tool-Calls: 0 Hooks-Commit: 9a5d93d Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
Task-Id: GF-138 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5-5 Tokens-Used: 3106161 Tool-Calls: 8 Hooks-Commit: 9ddab80 Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
Task-Id: GF-138 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5-5 Tokens-Used: 4117165 Tool-Calls: 10 Hooks-Commit: e892c22 Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
Task-Id: GF-138 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude <noreply@anthropic.com> AI-Model: claude-opus-5-5 Tokens-Used: 2484918 Tool-Calls: 6 Hooks-Commit: af8de8d Signed-off-by: cpu-once <231006716+cpu-once@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
요약
프로젝트 목적을 다시 정의하고 이름을 git-logbook으로 바꿉니다(GF-138, decision-25).
gitformat.*이전(GF-133 AC), Signed-off-by 유지(GF-128 AC)이 PR에는
task/GF-137의 커밋도 들어 있습니다(decision-24, doc-19·doc-20 등). decision-25가 decision-24를 참조하기 때문입니다.바꾸지 않은 것
gitformat.*: 바꾸면 기존 설치가 깨집니다. GF-133에서 다룹니다.검증
python3 -m unittest discover -s tests: 93개 통과git grep -i git-format -- ':!backlog'결과: README의 개명 안내 줄과tests/isolated_repo.py:1(예전 파일명 언급)만 남음. 둘 다 의도한 예외입니다.머지 후 GitHub 저장소를
coralstay/git-logbook으로 rename합니다(GF-138 AC#8).🤖 Generated with Claude Code