docs validator: enforce source path policy for ouroboros plan links (#357) #360
Reference in New Issue
Block a user
Delete Branch "feature/issue-357-docs-source-path-validator"
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
REQ-OPS-004에 맞춰 v2/v3 원본 계획 문서 링크를docs/ouroboros/source/경로로 강제하는 자동 검증을 추가하고, 리뷰 피드백(중복 에러/fragment 처리)을 반영했습니다.Changes
scripts/validate_ouroboros_docs.pyvalidate_plan_source_link()추가ouroboros_plan_v2.txt,ouroboros_plan_v3.txt링크가 canonical target으로 resolve되는지 검사/home/...) 금지../../ouroboros_plan_v*.txt) 금지#fragment가 붙은 링크도 경로 부분을 분리해 정책 검증tests/test_validate_ouroboros_docs.pyValidation
ruff check scripts/validate_ouroboros_docs.py tests/test_validate_ouroboros_docs.pypytest -q tests/test_validate_ouroboros_docs.py(5 passed)python3 scripts/validate_ouroboros_docs.pypython3 scripts/validate_governance_assets.py origin/feature/v3-session-policy-stream...HEADScope
REQ-OPS-004TASK-OPS-004TEST-ACC-019Closes #357
PR #360 코드 리뷰
변경 요약:
validate_ouroboros_docs.py에 plan 링크 경로 정책 검증 추가 (REQ-OPS-004 / TEST-ACC-019)✅ 잘 된 점
경로 비교 방식이 올바르다.
.resolve()를 사용해../../ouroboros_plan_v2.txt같은 상위 경로 우회를 정확히 잡아낸다. 단순 문자열 비교가 아닌 실제 경로 해석이므로 링크 형태가 달라도 canonical 위치가 맞으면 통과한다.구조가 확장 가능하다.
ALLOWED_PLAN_TARGETSdict로 허용 경로를 선언적으로 관리해, v4 등이 추가될 때 한 곳만 수정하면 된다.테스트 3개 직접 확인 — 3 passed.
🟡 절대경로 링크 시 에러 2개 중복 발생
절대경로 plan 링크(
/home/...)를validate_links로 검사하면 에러가 2개 생성된다:흐름 분석:
validate_plan_source_link가 early return해도validate_links의 broken link 검사는 계속 실행된다. 기능 오류는 아니지만 사용자가 중복 에러 메시지를 받아 혼란스러울 수 있다.수정 방법:
🔵 PR 설명의
--ci플래그가 실제로 무효함Validation 항목에 다음이 기재돼 있다:
하지만
validate_ouroboros_docs.py의main()에는argparse가 없어--ci인수를 무시하고 그냥 통과한다. 코드 버그는 아니지만 문서가 오해를 유발한다. 다음번엔--ci없이 그냥 스크립트를 실행하면 된다.🔵 PLAN_LINK_PATTERN이 fragment URL을 처리하지 못함
$앵커 때문에./source/ouroboros_plan_v2.txt#section형태의 링크는 매칭되지 않아 검증을 건너뛴다. 현재 실제 사용 케이스는 없지만, 미래에 섹션 링크가 생기면 정책 우회가 가능해진다.✅ 최종 판정
기능 목적을 달성했다. 이중 에러 문제를 이번 PR에서 수정하거나 별도 이슈로 등록하면 더 좋다. Merge 가능 상태.
리뷰 반영 완료했습니다.
추가 테스트:
검증:
반영 커밋:
d1ef79f팔로업 리뷰 — commit
d1ef79f반영 확인✅ 이전 지적사항 전부 해결됨
🟡 이중 에러 → 수정됨
validate_plan_source_link가bool을 반환하도록 변경하고,validate_links에서True반환 시continue로 broken link 체크를 건너뜀.직접 검증:
반환값 의미도 명확하다:
True= "plan link로 처리했으니 이후 체크 skip",False= "plan link 아니거나 정상 → 계속 진행".🔵 fragment URL → 수정됨
link.split("#", 1)[0]으로 fragment를 제거한 뒤 경로 부분만 검증. 일반 링크에도 동일 처리가 적용되어, 존재하는 파일의 fragment 링크는 broken link 에러 없이 통과한다:🔵 PR 설명
--ci문서 오기재 → 수정됨python3 scripts/validate_ouroboros_docs.py --ci→python3 scripts/validate_ouroboros_docs.py로 교정됨.테스트 3 → 5개로 확장
test_validate_plan_source_link_accepts_canonical_source_pathtest_validate_plan_source_link_rejects_root_relative_pathtest_validate_plan_source_link_rejects_repo_root_relative_pathtest_validate_plan_source_link_accepts_fragment_suffix(신규)test_validate_links_avoids_duplicate_error_for_invalid_plan_link(신규)5 passed 직접 확인.
✅ 최종 판정
이전 리뷰에서 지적한 모든 항목이 해결됐다. Merge 가능 상태.