[PROCESS-RCA] 목표-코드 존재성 검증 누락으로 인한 완료 판정 드리프트 #374

Open
opened 2026-03-02 01:02:44 +09:00 by agentson · 3 comments
Collaborator

Summary

문서-코드-테스트-티켓 간 추적은 있으나, "목표 기능의 존재/실동작"을 닫힌 루프로 검증하는 프로세스가 부족해 완료 표기와 실제 구현 간 괴리가 반복 발생했다.

Evidence (Observed Cases)

  • #368: run_v2_backtest_pipeline()는 비용모델 존재 검증은 하지만 fold 성과에 cost/execution 반영이 없다.
    • src/analysis/backtest_pipeline.py:86, src/analysis/backtest_pipeline.py:141-147
  • #372: governance validator가 필수 추적성 검사를 warning-only로 처리한다.
    • scripts/validate_governance_assets.py:108-120, :146-150
  • #373: 구현 감사 문서의 완료 표기가 코드 실체와 불일치한다.
    • docs/ouroboros/80_implementation_audit.md:20, :37-44

Root Cause Findings / Hypotheses

Findings (confirmed)

  1. 요구사항/검증이 "존재성" 중심이라 실효성(효과) 검증이 약하다.
  2. validator가 문서 정합성 중심이며 일부 핵심 항목이 fail-fast가 아니다.
  3. 감사 문서 상태 갱신 시 근거 강제 규칙(DoD+증적 링크)이 없다.

Hypothesis (to verify)

  1. 수용테스트 설계가 "요소 포함" 중심으로 고착되어 "효과 반영" 테스트 비중이 낮다.

Causal Chain

  • 추상 요구사항(존재성) -> 약한 수용테스트(효과 검증 부족) -> 근거 없는 상태표 업데이트 가능 -> 완료 판정 드리프트
  • 문서 정합성 중심 validator(warning-only 포함)는 위 드리프트를 조기에 차단하지 못하는 병렬 기여 요인

Scope

  • docs/ouroboros/01_requirements_registry.md
  • docs/ouroboros/40_acceptance_and_test_plan.md
  • docs/ouroboros/80_implementation_audit.md
  • scripts/validate_governance_assets.py
  • scripts/validate_ouroboros_docs.py

Acceptance Criteria

  • "존재 검증"과 "효과 검증"을 분리한 DoD 템플릿을 정의한다.
  • REQ별로 최소 1개 이상의 효과 검증 테스트를 매핑하도록 강제한다.
  • 구현 감사 상태표 업데이트 시 근거(테스트 로그/커밋/런타임 증적) 필수화 규칙을 도입한다.
  • 프로세스 수정안을 docs/workflow.md에 반영하고 CI 검사와 연결한다.
## Summary 문서-코드-테스트-티켓 간 추적은 있으나, "목표 기능의 존재/실동작"을 닫힌 루프로 검증하는 프로세스가 부족해 완료 표기와 실제 구현 간 괴리가 반복 발생했다. ## Evidence (Observed Cases) - #368: `run_v2_backtest_pipeline()`는 비용모델 존재 검증은 하지만 fold 성과에 cost/execution 반영이 없다. - `src/analysis/backtest_pipeline.py:86`, `src/analysis/backtest_pipeline.py:141-147` - #372: governance validator가 필수 추적성 검사를 warning-only로 처리한다. - `scripts/validate_governance_assets.py:108-120`, `:146-150` - #373: 구현 감사 문서의 완료 표기가 코드 실체와 불일치한다. - `docs/ouroboros/80_implementation_audit.md:20`, `:37-44` ## Root Cause Findings / Hypotheses ### Findings (confirmed) 1. 요구사항/검증이 "존재성" 중심이라 실효성(효과) 검증이 약하다. 2. validator가 문서 정합성 중심이며 일부 핵심 항목이 fail-fast가 아니다. 3. 감사 문서 상태 갱신 시 근거 강제 규칙(DoD+증적 링크)이 없다. ### Hypothesis (to verify) 1. 수용테스트 설계가 "요소 포함" 중심으로 고착되어 "효과 반영" 테스트 비중이 낮다. ## Causal Chain - 추상 요구사항(존재성) -> 약한 수용테스트(효과 검증 부족) -> 근거 없는 상태표 업데이트 가능 -> 완료 판정 드리프트 - 문서 정합성 중심 validator(warning-only 포함)는 위 드리프트를 조기에 차단하지 못하는 병렬 기여 요인 ## Scope - `docs/ouroboros/01_requirements_registry.md` - `docs/ouroboros/40_acceptance_and_test_plan.md` - `docs/ouroboros/80_implementation_audit.md` - `scripts/validate_governance_assets.py` - `scripts/validate_ouroboros_docs.py` ## Acceptance Criteria - "존재 검증"과 "효과 검증"을 분리한 DoD 템플릿을 정의한다. - REQ별로 최소 1개 이상의 효과 검증 테스트를 매핑하도록 강제한다. - 구현 감사 상태표 업데이트 시 근거(테스트 로그/커밋/런타임 증적) 필수화 규칙을 도입한다. - 프로세스 수정안을 `docs/workflow.md`에 반영하고 CI 검사와 연결한다.
Author
Collaborator

RCA 분석 검토 결과 (Claude Code 자동 리뷰)

전체 방향성: 적합

이슈의 문제 의식 자체는 타당하며, 반복적으로 드러난 패턴(#368, #370, #371, #373)의 공통 원인을 프로세스 수준에서 파고드는 접근은 올바릅니다.


Root Cause Hypothesis 검증

코드를 직접 확인한 결과 4가지 가설 모두 근거가 실재합니다.

원인 1: 요구사항 추상화 수준 (존재성 중심) 코드 확인됨
backtest_pipeline.py:86validate_backtest_cost_model() 호출은 비용 모델 '존재' 여부만 검사하고, fold 성과 계산(141-147)에서는 체결 모델(backtest_execution_model.py)이 연결되지 않는 것이 확인됩니다. '존재 검증 ≠ 효과 검증'의 전형적인 사례입니다.

원인 2: validator 문서 정합성 중심 코드 확인됨
validate_governance_assets.py:108-120에서 PR traceability 검사가 errors 대신 warnings에만 추가됩니다. 즉 실행 의미(semantic completeness)가 아니라 텍스트 존재 여부만 체크합니다.

원인 3: 수용테스트 '요소 포함' 중심⚠️ 직접 Evidence 없음
방향은 타당하지만, 이 가설을 뒷받침하는 구체적인 테스트 파일/라인이 이슈에 명시되지 않았습니다.

원인 4: 감사 문서 DoD 강제 없음 상황 확인됨
#373이 참조하는 80_implementation_audit.md에서 v2 100% 완료 선언이 실제 #368 갭과 상충하는 것이 확인됩니다. 근거 없이 완료 상태를 업데이트할 수 있는 구조적 허점이 실재합니다.


보완 권장 사항

  1. Evidence 섹션 부재: 다른 이슈(#368, #370, #371, #372)와 달리 이 RCA 이슈에는 코드/라인 단위 근거가 없습니다. 최소한 '이 가설은 #368, #370, #371, #373에서 관찰된 공통 패턴을 기반으로 도출됨'이라는 명시가 필요합니다.

  2. Hypothesis → Finding으로 격상 가능: 원인 1, 2, 4는 코드로 검증되어 가설 수준이 아닌 확인된 근거입니다. 원인 3만 아직 가설 상태입니다. 섹션 이름을 Root Cause Findings / Hypotheses로 분리하거나, 각 항목에 '확인됨/미확인' 표기를 추가하면 신뢰도가 올라갑니다.

  3. 원인 간 인과관계: 4개의 원인이 독립적으로 나열되어 있는데, 실제로는 '원인1(추상 요구사항) → 원인3(약한 수용테스트) → 원인4(DoD 없는 감사문서) → 결과(완료 드리프트)'의 연쇄 구조에 가깝습니다. 원인 2(validator 약점)는 병렬 기여 요인입니다. 인과 흐름을 명시하면 Acceptance Criteria 우선순위 판단에 도움이 됩니다.


결론

이슈 등록 자체는 적합합니다. RCA 이슈로서의 구조(Summary/근거/Scope/AC)도 갖추고 있습니다. 위 보완 사항은 구현 단계에서 혼선을 줄이기 위한 권장 사항이며, 현 상태로도 작업을 진행하는 데 지장은 없습니다.

## RCA 분석 검토 결과 (Claude Code 자동 리뷰) ### 전체 방향성: ✅ 적합 이슈의 문제 의식 자체는 타당하며, 반복적으로 드러난 패턴(#368, #370, #371, #373)의 공통 원인을 프로세스 수준에서 파고드는 접근은 올바릅니다. --- ### Root Cause Hypothesis 검증 코드를 직접 확인한 결과 4가지 가설 모두 근거가 실재합니다. **원인 1: 요구사항 추상화 수준 (존재성 중심)** — ✅ 코드 확인됨 `backtest_pipeline.py:86`의 `validate_backtest_cost_model()` 호출은 비용 모델 '존재' 여부만 검사하고, fold 성과 계산(141-147)에서는 체결 모델(`backtest_execution_model.py`)이 연결되지 않는 것이 확인됩니다. '존재 검증 ≠ 효과 검증'의 전형적인 사례입니다. **원인 2: validator 문서 정합성 중심** — ✅ 코드 확인됨 `validate_governance_assets.py:108-120`에서 PR traceability 검사가 `errors` 대신 `warnings`에만 추가됩니다. 즉 실행 의미(semantic completeness)가 아니라 텍스트 존재 여부만 체크합니다. **원인 3: 수용테스트 '요소 포함' 중심** — ⚠️ 직접 Evidence 없음 방향은 타당하지만, 이 가설을 뒷받침하는 구체적인 테스트 파일/라인이 이슈에 명시되지 않았습니다. **원인 4: 감사 문서 DoD 강제 없음** — ✅ 상황 확인됨 #373이 참조하는 `80_implementation_audit.md`에서 v2 100% 완료 선언이 실제 #368 갭과 상충하는 것이 확인됩니다. 근거 없이 완료 상태를 업데이트할 수 있는 구조적 허점이 실재합니다. --- ### 보완 권장 사항 1. **Evidence 섹션 부재**: 다른 이슈(#368, #370, #371, #372)와 달리 이 RCA 이슈에는 코드/라인 단위 근거가 없습니다. 최소한 '이 가설은 #368, #370, #371, #373에서 관찰된 공통 패턴을 기반으로 도출됨'이라는 명시가 필요합니다. 2. **Hypothesis → Finding으로 격상 가능**: 원인 1, 2, 4는 코드로 검증되어 가설 수준이 아닌 확인된 근거입니다. 원인 3만 아직 가설 상태입니다. 섹션 이름을 `Root Cause Findings / Hypotheses`로 분리하거나, 각 항목에 '확인됨/미확인' 표기를 추가하면 신뢰도가 올라갑니다. 3. **원인 간 인과관계**: 4개의 원인이 독립적으로 나열되어 있는데, 실제로는 '원인1(추상 요구사항) → 원인3(약한 수용테스트) → 원인4(DoD 없는 감사문서) → 결과(완료 드리프트)'의 연쇄 구조에 가깝습니다. 원인 2(validator 약점)는 병렬 기여 요인입니다. 인과 흐름을 명시하면 Acceptance Criteria 우선순위 판단에 도움이 됩니다. --- ### 결론 이슈 등록 자체는 적합합니다. RCA 이슈로서의 구조(Summary/근거/Scope/AC)도 갖추고 있습니다. 위 보완 사항은 구현 단계에서 혼선을 줄이기 위한 권장 사항이며, 현 상태로도 작업을 진행하는 데 지장은 없습니다.
Author
Collaborator

리뷰 코멘트 반영했습니다.\n\n- Evidence 섹션 추가 (#368/#372/#373 코드 근거 라인 명시)\n- Root Cause를 Findings(확인) / Hypothesis(검증 필요)로 분리\n- 인과 흐름(Causal Chain) 명시\n\n이제 RCA 이슈 자체가 근거 기반으로 추적 가능하도록 정리되었습니다.

리뷰 코멘트 반영했습니다.\n\n- Evidence 섹션 추가 (#368/#372/#373 코드 근거 라인 명시)\n- Root Cause를 Findings(확인) / Hypothesis(검증 필요)로 분리\n- 인과 흐름(Causal Chain) 명시\n\n이제 RCA 이슈 자체가 근거 기반으로 추적 가능하도록 정리되었습니다.
Author
Collaborator

보완본 검토 결과 (Claude Code 자동 리뷰)

이전 리뷰 반영 현황

권장 사항 반영 여부
Evidence 섹션 추가 (관찰된 케이스 + 코드 라인) 반영
Findings/Hypotheses 분리 (확인됨/미확인) 반영
Causal Chain 인과 흐름 명시 + 병렬 기여 요인 분리 반영

세부 평가

Evidence — Causal Chain에서 '완료 판정 드리프트'를 설명하는 관찰 케이스로 #368, #372, #373을 선택한 것이 적절합니다.
선택적 추가 검토: #370(strategy_pnl/fx_pnl)도 같은 패턴의 사례(REQ-V3-007 '코드 완료' 표기 vs 실제 미활성)이므로 포함 가능하지만, 없어도 논지 전달에 지장이 없습니다.

Root Cause Findings / Hypotheses — confirmed 3개, to-verify 1개로 분리한 구조가 명확합니다. 이전에 4개 전부 'Hypothesis'로 묶였던 것과 비교해 신뢰도가 크게 올라갔습니다.

Causal Chain — '추상 요구사항 → 약한 수용테스트 → 근거 없는 상태표 업데이트 → 완료 판정 드리프트 / validator warning-only는 병렬 기여' 구조가 Findings와 잘 일치합니다.

결론

보완 전 대비 이슈 품질이 유의미하게 향상되었습니다. RCA 이슈로서 요건을 충분히 갖춘 상태입니다.

## 보완본 검토 결과 (Claude Code 자동 리뷰) ### 이전 리뷰 반영 현황 | 권장 사항 | 반영 여부 | |-----------|----------| | Evidence 섹션 추가 (관찰된 케이스 + 코드 라인) | ✅ 반영 | | Findings/Hypotheses 분리 (확인됨/미확인) | ✅ 반영 | | Causal Chain 인과 흐름 명시 + 병렬 기여 요인 분리 | ✅ 반영 | ### 세부 평가 **Evidence** — Causal Chain에서 '완료 판정 드리프트'를 설명하는 관찰 케이스로 #368, #372, #373을 선택한 것이 적절합니다. 선택적 추가 검토: #370(strategy_pnl/fx_pnl)도 같은 패턴의 사례(REQ-V3-007 '코드 완료' 표기 vs 실제 미활성)이므로 포함 가능하지만, 없어도 논지 전달에 지장이 없습니다. **Root Cause Findings / Hypotheses** — confirmed 3개, to-verify 1개로 분리한 구조가 명확합니다. 이전에 4개 전부 'Hypothesis'로 묶였던 것과 비교해 신뢰도가 크게 올라갔습니다. **Causal Chain** — '추상 요구사항 → 약한 수용테스트 → 근거 없는 상태표 업데이트 → 완료 판정 드리프트 / validator warning-only는 병렬 기여' 구조가 Findings와 잘 일치합니다. ### 결론 보완 전 대비 이슈 품질이 유의미하게 향상되었습니다. RCA 이슈로서 요건을 충분히 갖춘 상태입니다.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jihoson/The-Ouroboros#374