Files
llm-wiki/raw/errors/ca-gitignored-seed-divergence-at-rebase.md
T

33 lines
2.6 KiB
Markdown

---
title: error / ca-gitignored-seed-divergence-at-rebase
source_type: error-note
status: raw
related_projects: [ca-skeleton]
tags: [error, ca-skeleton, git-worktree, gitignore, rebase, integration, test-seed]
created: 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 목록"을 받아둘 것).