docs validator: add docs sync invariants with tests (#363) #365
Reference in New Issue
Block a user
Delete Branch "feature/issue-363-validate-docs-sync"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
#363에 따라 문서 드리프트 방지를 위한 top-level docs sync validator를 추가했습니다.Changes
scripts/validate_docs_sync.py(신규)README.md,CLAUDE.md,docs/commands.md,docs/testing.md,docs/workflow.md)docs/commands.mdAPI endpoint 테이블 중복 row 검증docs/testing.md의 동적 테스트 카운트 가이드(pytest --collect-only -q) 존재 검증tests/test_validate_docs_sync.py(신규)Validation
ruff check scripts/validate_docs_sync.py tests/test_validate_docs_sync.pypytest -q tests/test_validate_docs_sync.py(5 passed)python3 scripts/validate_docs_sync.pyScope
REQ-OPS-002,REQ-OPS-003TASK-OPS-002,TASK-OPS-003TEST-ACC-008,TEST-ACC-009Closes #363
코드 리뷰 — PR #365
개요
PR #352의 재작성 버전. 이번에는 테스트를 동반하며,
docs/README.md의존성을 제거해 독립적으로 동작한다. 5 passed, ruff clean, 직접 실행 PASS 확인.🔴 수정 필요
1. CI 게이트 미등록
validate_docs_sync.py가 추가됐지만.gitea/workflows/ci.yml과.github/workflows/ci.yml어디에도 실행 단계가 없다.현재 등록된 validator들:
validate_docs_sync.py가 없으면 PR을 머지해도 이 검증은 실행되지 않는다. 추가 필요:🟡 확인 필요
2.
validate_summary_docs_reference_core_docs— 음성 테스트 없음현재
test_validate_summary_docs_reference_core_docs는 링크가 있을 때errors == []만 확인한다. 링크가 빠졌을 때 에러가 발생하는지 검증하는 음성 케이스가 없다.동일 기능의 다른 테스트들은 음성 케이스를 포함한다:
test_validate_links_resolve_detects_absolute_and_broken_links→ 음성 ✅test_validate_commands_endpoint_duplicates_reports_duplicates→ 음성 ✅test_validate_summary_docs_reference_core_docs→ 양성만 ❌3.
validate_summary_docs_reference_core_docs— ternary 불필요required_links의 key가"README.md","CLAUDE.md"이고REQUIRED_FILES도 동일 key를 가지므로 ternary가 필요 없다:4.
workflow.md링크 검증 미포함REQUIRED_FILES에"workflow"키로docs/workflow.md가 등록됐지만,main()의validate_links_resolve호출 목록에서 빠져 있다. 존재 검증만 되고 내부 링크 무결성은 검증되지 않는다. 의도적 제외라면REQUIRED_FILES에서 제거하거나 주석으로 명시하는 것이 낫다.✅ 좋은 점
docs/README.md외부 의존 제거validate_links_resolve설계 — absolute / broken / fragment 모두 처리REPO_ROOT명명 — PR #352의ROOT보다 의도가 명확수정 사항 요약
.gitea/workflows/ci.yml,.github/workflows/ci.ymlvalidate_docs_sync.py실행 단계 추가tests/test_validate_docs_sync.pyvalidate_summary_docs_reference_core_docs음성 테스트 추가scripts/validate_docs_sync.pyREQUIRED_FILES[file_name]단순화,workflow.md링크 검증 처리 결정리뷰 반영 완료했습니다.
🔴 CI 게이트 등록
🟡 테스트 보강
🟡 코드 정리/범위 명확화
검증:
반영 커밋:
6656adc팔로업 리뷰 — PR #365 (커밋
6656adc2)이슈 해결 확인
validate_summary_docs_reference_core_docs음성 테스트 없음REQUIRED_FILES[file_name]단순화workflow.md링크 검증 미포함세부 확인
CI 게이트:
.gitea/workflows/ci.ymlline 51,.github/workflows/ci.ymlline 48에validate_docs_sync.py단계 등록 확인.음성 테스트:
test_validate_summary_docs_reference_core_docs_reports_missing_links추가. README에서docs/commands.md,docs/testing.md누락, CLAUDE에서docs/commands.md누락 → 각각 에러 발생 검증. 3개 assertion 모두 경로 포함하여 명확.ternary 제거:
doc_path = REQUIRED_FILES[file_name]으로 단순화됨.workflow.md 링크 검증:
main()에서validate_links_resolve(REQUIRED_FILES["workflow"], ...)호출 추가됨.실행 결과
pytest -q tests/test_validate_docs_sync.py: 6 passedpython3 scripts/validate_docs_sync.py: [OK]ruff check: All checks passedMerge-ready. 모든 지적 사항 해결됨.