2.6 KiB
title, source_type, status, related_projects, tags, created
| title | source_type | status | related_projects | tags | created | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| error / ca-gitignored-seed-divergence-at-rebase | error-note | raw |
|
|
2026-06-15 |
error: gitignored seed(docs/) 는 커밋/rebase 로 안 따라온다 — 통합 검증 전 정합 필수
Parent: raw/project-notes/ca-skeleton-operational-contract.
chore-ca-parallel-run-runtime-ops-4contracts작업의 Phase 5 통합 검증 직전 발견·회피했으며, 해당 작업은 별도 branch-note가 남아 있지 않다.
맥락
ca-skeleton 은 docs/(registries / runbooks / security 스냅샷)를 gitignore 한다 — 로컬 working artifact(SSOT 는 wiki + 시드). 계약 테스트들은 Assumptions.assumeTrue(registry != null) 로 docs 부재 시 SKIP, 존재 시 enforce.
증상
feature-operational-runbook-contract 의 RunbookCoverageContractTest(커밋된 산출물)는 docs/runbooks/*.md 의 error_codes: frontmatter 로 커버리지를 검증. f4 구현 중 mandatory 코드 커버리지를 맞추려고 34개 stub runbook 신규 생성 — 그런데 이건 gitignored 라 f4 worktree 에만 존재, 커밋엔 안 들어감(커밋 산출물은 테스트 1파일뿐).
rebase 스택을 통합 워크트리(f2)에서 ./gradlew check 하려는 순간: f2 worktree 의 docs/runbooks 는 Phase 1 에 복사된 원본 10개뿐 → 34개 신규 stub 부재 → RunbookCoverageContractTest 의 coverage/link-resolution 이 FAIL 날 상황.
해결
통합 검증 전에 시드 정합: cp -rf <f4-worktree>/docs/runbooks/. <integration-worktree>/docs/runbooks/. 이후 ./gradlew check = 1249/1249 green. FF 후 동일하게 메인 워크트리(develop) docs/runbooks 로 1회 정합(Phase 7) → develop 로컬에서도 게이트 green.
교훈
- gitignored seed 는 git 객체가 아니다 → 커밋·rebase·FF 어느 것으로도 워크트리 간 이동 안 함. worktree 마다 독립 사본(
git worktree add는 추적 파일만 체크아웃, gitignore 는 복사로 전파). - seed 의존 테스트를 다른 워크트리에서 돌릴 땐 그 워크트리에 seed 를 먼저 정합. ca-parallel 플레이북 Phase 7 의 "docs/registries 시드 1회 정합" 이 정확히 이걸 위한 단계 — 단, 통합 검증 시점(Phase 5) 에도 필요할 수 있음(이번 케이스).
- 한 계약이 신규 seed 파일을 만들면(여기선 runbook stub), 그건 커밋 diff 에 안 보이므로 controller 가 명시적으로 추적/정합해야 한다(implementer 보고의 "생성한 stub 목록"을 받아둘 것).