Skip to content

test(claude): linked worktree/서브모듈 gitfile 미추종 FN 회귀 가드 (Task3 No-go)#24

Merged
ictechgy merged 2 commits into
mainfrom
feature/gitfile-fn-guard
Jun 12, 2026
Merged

test(claude): linked worktree/서브모듈 gitfile 미추종 FN 회귀 가드 (Task3 No-go)#24
ictechgy merged 2 commits into
mainfrom
feature/gitfile-fn-guard

Conversation

@ictechgy

Copy link
Copy Markdown
Owner

무엇을 / 왜

linked worktree(git worktree add)·서브모듈은 <base>/.gitgitdir: <path>를 담은 정규 파일이고 실제 HEAD는 그 gitdir(보통 main repo 하위 = <base> 밖)에 있다. understatus는 이 gitfile 추종을 의도적으로 미지원한다(현재 <base>/.git/HEAD 경로 부재로 canonicalize Err → None = 안전 false-negative).

ralplan 합의(Planner→Architect→Critic, No-go 확정):

  • (A) 절대 gitdir 추종: 임의 위치 파일 read primitive 개방(파일 존재 oracle + ref: refs/heads/X 내용 노출). 기각.
  • (C) 상대 gitdir + <base> 경계: Architect가 git worktree add 실증 → 표준 worktree·서브모듈 HEAD는 항상 <base> → (C)는 표준 케이스 0% 커버 = value 0 + 새 공격면 = 순손실. 기각.
  • 결론: v1은 미추종 안전 FN 유지. 근거는 value 미측정이 아니라 feasibility(보수적 추종은 커버 0, 전체 추종은 read primitive 개방).

문제: 이 안전 FN을 고정하는 테스트가 없어, 누가 무심코 gitfile 파싱을 추가하면 회귀를 못 잡음. Critic이 필수 산출물로 지적.

변경 (프로덕션 로직 0)

  • 테스트 2건 신규: .gitgitdir:(절대/상대 ../) 담은 정규 파일로 만들고 derive_git_branch_from_cwd·derive_git_branch 양 진입점 모두 None 반환 고정.
  • doc 강화(read_branch_from_git_dir): linked worktree + 서브모듈 gitfile 미추종 = 의도된 안전 FN, gitdir 추종 미지원 근거(공격면·gitfile 내용=신뢰 불가 입력) 명문화.
  • v2 이월(.omc, gitignored): (C') git-레이아웃 인지 화이트리스트 + value 측정 트리거.

검증

  • 4게이트 그린(~/.cargo/bin/cargo): fmt / clippy -D warnings / test 342 passed(328+14, +2) / 0 failed / build --release
  • 프로덕션 로직 변경 0 — 현 동작이 이미 None(안전 FN), 신규 테스트가 현 코드에서 그린. 버전 범프 불요.

🤖 Generated with Claude Code

ictechgy and others added 2 commits June 12, 2026 17:52
ralplan 합의 결과 No-go 확정 — 프로덕션 로직 변경 0, 현 안전 FN 동작을
회귀 테스트로 고정하고 doc을 강화한다.

변경 내용:
- src/claude.rs:404 주석 확장: linked worktree/서브모듈 gitfile 동작 설명,
  안전 FN(canonicalize Err→None) 명시, gitdir 추종 미지원 근거(공격면) 추가
- 신규 테스트 2개:
  · derive_from_cwd_gitfile_not_followed_none: cwd/.git가 정규 파일(절대/상대
    gitdir 양 케이스)이면 derive_git_branch_from_cwd가 None을 반환함을 고정
  · derive_git_branch_gitfile_worktree_not_followed_none: workspace git_worktree가
    gitfile 워크트리를 가리켜도 derive_git_branch가 None을 반환함을 고정

4게이트 그린: fmt/clippy -D warnings/test 342통과(+2)/build --release
신규 테스트는 현 코드에서 이미 그린(프로덕션 로직 추가 없이 FN 동작 확인됨).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…inel HEAD

quad-review consensus blocker(Codex HIGH/Forge Major/Claude MEDIUM): 기존
회귀 테스트가 gitdir 타깃을 비존재 경로로 써서, 미래에 gitfile 추종을
추가해도 타깃 HEAD가 부재해 여전히 None → 추종 회귀를 포착 못 함(가드 무력).

수정: gitdir 타깃 디렉터리를 실재화하고 그 안에 유효 HEAD(ref: refs/heads/
sentinel-*)를 둔다. 현재는 미추종이라 None(그린) 유지하되, 누가 gitfile
추종을 구현하면 Some("sentinel-*")을 반환해 None 단언이 깨진다 = 추종 회귀를
실제로 포착하는 mutation-resistant 가드가 됨. 절대/상대 gitdir + 양 진입점
(derive_git_branch_from_cwd, derive_git_branch) 커버.

doc 정정: canonicalize Err 원인을 ENOTDIR(.git 정규파일 하위 HEAD 탐색 불가)로
명확화, "신뢰 불가 입력"을 추종 가정법으로 표현.

quad-review-loop round 1, PR #24, consensus blocker fix.
@ictechgy ictechgy merged commit 558aafb into main Jun 12, 2026
1 check passed
@ictechgy ictechgy deleted the feature/gitfile-fn-guard branch June 12, 2026 09:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant