You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
factlog init 이 만든 KB 는 사용자가 아무것도 잘못하지 않아도 tools/validate.py 를 영구히 통과하지 못한다(rc=1, 오류 5건). init 스캐폴드가 만드는 산출물과 validate 가
요구하는 산출물이 어긋나 있고, 사용자가 두 파일을 손으로 채우기 전까지 매 sync 마다 Fact sync validation failed 가 출력된다.
#190 은 같은 상황(무정책 KB)에서 check 가 하드 실패하던 것을 graceful 하게 고쳤다.
그 수정은 _load_logic_policy_from 한 곳에만 들어갔고 validate 는 갱신되지 않았다.
재현 (upstream/main c6d359d, macOS, Python 3.12 로 실측)
Fact sync validation failed:
- missing or empty policy/logic-policy.dl
- decisions/open-questions.md should keep a '중복' review section
- decisions/open-questions.md should keep a '모호' review section
- decisions/open-questions.md should keep a '출처' review section
- decisions/open-questions.md should keep a '충돌' review section
rc=1
문서가 안내하는 복구 절차를 따라도 낫지 않는다.
python3 tools/generate_logic_policy.py;echo"rc=$?"# policy/logic-policy.md has no compilable policies: no supported policy bullets# rc=1 <- .dl 을 만들어 주지 않는다
python3 tools/validate.py /tmp/kb;echo"rc=$?"# - policy/logic-policy.dl does not match policy/logic-policy.md: ... no supported policy bullets# - decisions/open-questions.md should keep a '중복' review section (…4건)# rc=1
finalize.py 로 정상 sync 를 한 바퀴 돌려도 같은 5건이 그대로 출력된다(그리고 finalize
자체는 rc=0 으로 끝나므로, 실패는 화면에만 남고 종료 코드로는 드러나지 않는다).
근거
(a) 정책 축 — init 이 쓰는 policy/logic-policy.md 는 규칙 불릿이 없는 산문 스텁이다.
tools/generate_logic_policy.py 는 컴파일할 불릿이 없으면 .dl 을 만들지 않고 rc=1.
tools/validate.py:174-176 은 policy/logic-policy.dl 이 없거나 비면 무조건 오류.
(b) 검토 섹션 축 — tools/validate.py:212-214 는 decisions/open-questions.md 에 중복·모호·출처·충돌 네 섹션이 있기를 요구한다. 그런데 이 섹션을 스캐폴드하는
코드가 없다.
factlog init 은 decisions/open-questions.md 를 아예 만들지 않는다(init 출력의
파일 목록에 없음).
tools/merge_candidates.py:596,629 는 파일이 없으면 "# Open Questions\n" 만 만들고,
섹션 heading 은 해당 분류의 needs_review 불릿이 실제로 생길 때만 덧붙인다.
따라서 사실이 0건이거나 네 분류가 다 차지 않은 KB 는 항상 이 오류를 낸다.
영향
심각도 중간. 데이터 손상은 없으나, 첫 실행 경험이 실패로 시작한다. 새 사용자가
보는 첫 validate 결과가 rc=1 이고, 무엇이 자기 잘못이고 무엇이 스캐폴드 결함인지
구분할 근거가 화면에 없다.
validate 를 CI 게이트로 쓰려는 사용자는 빈 KB 를 통과시킬 방법이 없다.
제안
정책 축: validate 도 #190 의 결론을 따른다 — logic-policy.md 에 컴파일 가능한
불릿이 없으면 .dl 부재를 오류가 아니라 "무정책" 으로 취급한다
(logic_policy_md_has_rules 헬퍼가 이미 있으므로 재사용 가능). 불릿이 있는데 .dl 만
없는 경우는 지금처럼 fail-loud 유지.
검토 섹션 축: factlog init 이 네 섹션 heading 을 가진 decisions/open-questions.md
를 스캐폴드하거나, validate 가 "불릿이 존재하는 분류의 섹션" 만 요구하도록 좁힌다.
(전자가 문서와의 정합이 낫다 — 검토 섹션은 계약이지 산출물이 아니다.)
수용 기준
factlog init 직후 tools/validate.py 가 rc=0.
규칙이 있는 KB 에서 .dl 이 낡거나 없으면 여전히 오류로 잡힌다(진짜 드리프트 미삼킴).
요약
factlog init이 만든 KB 는 사용자가 아무것도 잘못하지 않아도tools/validate.py를영구히 통과하지 못한다(rc=1, 오류 5건). init 스캐폴드가 만드는 산출물과 validate 가
요구하는 산출물이 어긋나 있고, 사용자가 두 파일을 손으로 채우기 전까지 매 sync 마다
Fact sync validation failed가 출력된다.#190은 같은 상황(무정책 KB)에서check가 하드 실패하던 것을 graceful 하게 고쳤다.그 수정은
_load_logic_policy_from한 곳에만 들어갔고 validate 는 갱신되지 않았다.재현 (upstream/main c6d359d, macOS, Python 3.12 로 실측)
문서가 안내하는 복구 절차를 따라도 낫지 않는다.
finalize.py로 정상 sync 를 한 바퀴 돌려도 같은 5건이 그대로 출력된다(그리고 finalize자체는 rc=0 으로 끝나므로, 실패는 화면에만 남고 종료 코드로는 드러나지 않는다).
근거
(a) 정책 축 — init 이 쓰는
policy/logic-policy.md는 규칙 불릿이 없는 산문 스텁이다.tools/generate_logic_policy.py는 컴파일할 불릿이 없으면.dl을 만들지 않고 rc=1.tools/validate.py:174-176은policy/logic-policy.dl이 없거나 비면 무조건 오류.#190/PR fix(#190): 무정책 KB에서 check가 graceful하게 완주 (진짜 오류는 그대로 fail-loud) #192 이후factlog.common.load_logic_policy()는 같은 KB 에서'// no policy rules'를 정상 반환한다(실측). 즉check/ask는 무정책을 받아들이는데validate만 거부하는 비대칭이 남아 있다.(b) 검토 섹션 축 —
tools/validate.py:212-214는decisions/open-questions.md에중복·모호·출처·충돌네 섹션이 있기를 요구한다. 그런데 이 섹션을 스캐폴드하는코드가 없다.
factlog init은decisions/open-questions.md를 아예 만들지 않는다(init 출력의파일 목록에 없음).
tools/merge_candidates.py:596,629는 파일이 없으면"# Open Questions\n"만 만들고,섹션 heading 은 해당 분류의 needs_review 불릿이 실제로 생길 때만 덧붙인다.
영향
보는 첫 validate 결과가 rc=1 이고, 무엇이 자기 잘못이고 무엇이 스캐폴드 결함인지
구분할 근거가 화면에 없다.
validate를 CI 게이트로 쓰려는 사용자는 빈 KB 를 통과시킬 방법이 없다.제안
validate도#190의 결론을 따른다 —logic-policy.md에 컴파일 가능한불릿이 없으면
.dl부재를 오류가 아니라 "무정책" 으로 취급한다(
logic_policy_md_has_rules헬퍼가 이미 있으므로 재사용 가능). 불릿이 있는데.dl만없는 경우는 지금처럼 fail-loud 유지.
factlog init이 네 섹션 heading 을 가진decisions/open-questions.md를 스캐폴드하거나, validate 가 "불릿이 존재하는 분류의 섹션" 만 요구하도록 좁힌다.
(전자가 문서와의 정합이 낫다 — 검토 섹션은 계약이지 산출물이 아니다.)
수용 기준
factlog init직후tools/validate.py가 rc=0..dl이 낡거나 없으면 여전히 오류로 잡힌다(진짜 드리프트 미삼킴).