요약
tools/ 의 스크립트 중 7개가 active-KB config 를 읽지 않는다. 문서가 명시한 우선순위는
--wiki/--target flag > $FACTLOG_ROOT > active-KB config file > cwd
인데(SKILL.md, factlog/config.py:3-9, README), 이 7개는 config 단계를 건너뛰고 곧장 cwd 로
떨어진다. factlog use <kb> 로 활성 KB 를 지정한 사용자가 다른 디렉터리에서 이들을 실행하면
"KB 가 아니다" 로 rc=1 이 난다.
#239 는 슬래시 스킬의 LLM 단계와 게이트 훅을 config-aware 로 고치면서 "엔진/CLI 계층은
이를 지킨다" 를 전제로 삼았다. 그 전제가 tools/ 의 절반에 대해서는 성립하지 않는다.
재현 (upstream/main c6d359d, macOS, Python 3.12 로 실측)
factlog init --target /tmp/kb # "active KB set to /tmp/kb
# (ingest/ask/sync default here from any directory)"
unset FACTLOG_ROOT
cd /tmp/unrelated # KB 가 아닌 디렉터리
python3 -m factlog where # -> /tmp/kb (config 를 본다)
python3 <plugin>/tools/compile_facts.py; echo "rc=$?"
# not a factlog KB root: missing sources, pages, facts, decisions, policy
# rc=1
python3 <plugin>/tools/run_logic_check.py; echo "rc=$?" # rc=1, 같은 메시지
python3 <plugin>/tools/validate.py; echo "rc=$?" # rc=1, 디렉터리 전부 missing
python3 <plugin>/tools/finalize.py; echo "rc=$?" # rc=1, "... is not a factlog KB"
대조군 — 같은 조건에서 prepass 가 있는 스크립트는 활성 KB 를 정상적으로 찾는다.
python3 <plugin>/tools/check_conflicts.py; echo "rc=$?" # rc=0, /tmp/kb 를 대상으로 동작
python3 <plugin>/tools/coverage.py; echo "rc=$?" # rc=0
근거
config-aware prepass 를 가진 쪽 (factlog_config.resolve_root_from_argv(...) 를 import 전에 호출):
tools/ask_router.py:62 · tools/merge_candidates.py:65 · tools/check_conflicts.py:38
tools/coverage.py:46 · tools/corroboration.py:31 · tools/entity_audit.py:43
prepass 가 없는 쪽:
| 스크립트 |
현재 동작 |
tools/compile_facts.py |
얇은 래퍼. KB 지정 플래그 자체가 없고 FACTLOG_ROOT 아니면 cwd |
tools/run_logic_check.py |
동일 |
tools/review_candidates.py |
동일 |
tools/generate_logic_policy.py |
동일 |
tools/validate.py |
[root] positional, 기본값 cwd |
tools/finalize.py |
--target 기본값이 os.environ.get("FACTLOG_ROOT", ".") — config 미조회 |
tools/resolve_stale_refs.py |
--wiki 기본값이 리터럴 "." — env 도 config 도 미조회 |
factlog/config.py 의 resolve_root_from_argv docstring 은 "Every engine tool must export
FACTLOG_ROOT to this value before importing common" 이라고 규정한다. 위 7개가 그 규정을
따르지 않는다.
영향
- 심각도 중간. 데이터 손상은 아니고 fail-loud 다(잘못된 KB 에 조용히 쓰는 것이 아니라
거부한다). 다만 factlog use 가 광고하는 "어느 디렉터리에서든" 이 CLI 에서만 참이고
tools/ 에서는 절반만 참이다.
- SKILL.md 는
compile_facts.py(:534)·run_logic_check.py(:560) 를 KB 플래그 없이
호출하도록 지시한다. 지금은 같은 흐름 앞단에서 FACTLOG_ROOT 를 export 하기 때문에
가려져 있지만, 사람이 문서를 보고 직접 실행하거나 export 절을 건너뛰면 바로 드러난다.
compile_facts.py/run_logic_check.py 는 KB 를 지정할 플래그가 아예 없어서, config 를
안 보는 것을 사용자가 우회할 방법도 없다(FACTLOG_ROOT export 외에는).
제안
- 7개 스크립트에 다른 6개와 동일한 import 전 prepass 를 넣는다
(os.environ["FACTLOG_ROOT"] = factlog_config.resolve_root_from_argv("--wiki"|"--target")).
compile_facts.py/run_logic_check.py/review_candidates.py/generate_logic_policy.py
에 KB 지정 플래그를 추가해 표면을 통일한다. 지금 tools/ 의 KB 지정 표면은 --wiki /
--target / positional / 없음의 4종으로 갈려 있다.
resolve_stale_refs.py 의 --wiki 기본값 "." 를 해석기 결과로 바꾼다.
수용 기준
요약
tools/의 스크립트 중 7개가 active-KB config 를 읽지 않는다. 문서가 명시한 우선순위는인데(SKILL.md,
factlog/config.py:3-9, README), 이 7개는 config 단계를 건너뛰고 곧장 cwd 로떨어진다.
factlog use <kb>로 활성 KB 를 지정한 사용자가 다른 디렉터리에서 이들을 실행하면"KB 가 아니다" 로 rc=1 이 난다.
#239는 슬래시 스킬의 LLM 단계와 게이트 훅을 config-aware 로 고치면서 "엔진/CLI 계층은이를 지킨다" 를 전제로 삼았다. 그 전제가
tools/의 절반에 대해서는 성립하지 않는다.재현 (upstream/main c6d359d, macOS, Python 3.12 로 실측)
대조군 — 같은 조건에서 prepass 가 있는 스크립트는 활성 KB 를 정상적으로 찾는다.
근거
config-aware prepass 를 가진 쪽 (
factlog_config.resolve_root_from_argv(...)를 import 전에 호출):tools/ask_router.py:62·tools/merge_candidates.py:65·tools/check_conflicts.py:38tools/coverage.py:46·tools/corroboration.py:31·tools/entity_audit.py:43prepass 가 없는 쪽:
tools/compile_facts.pyFACTLOG_ROOT아니면 cwdtools/run_logic_check.pytools/review_candidates.pytools/generate_logic_policy.pytools/validate.py[root]positional, 기본값 cwdtools/finalize.py--target기본값이os.environ.get("FACTLOG_ROOT", ".")— config 미조회tools/resolve_stale_refs.py--wiki기본값이 리터럴"."— env 도 config 도 미조회factlog/config.py의resolve_root_from_argvdocstring 은 "Every engine tool must exportFACTLOG_ROOT to this value before importing common" 이라고 규정한다. 위 7개가 그 규정을
따르지 않는다.
영향
거부한다). 다만
factlog use가 광고하는 "어느 디렉터리에서든" 이 CLI 에서만 참이고tools/에서는 절반만 참이다.compile_facts.py(:534)·run_logic_check.py(:560) 를 KB 플래그 없이호출하도록 지시한다. 지금은 같은 흐름 앞단에서
FACTLOG_ROOT를 export 하기 때문에가려져 있지만, 사람이 문서를 보고 직접 실행하거나 export 절을 건너뛰면 바로 드러난다.
compile_facts.py/run_logic_check.py는 KB 를 지정할 플래그가 아예 없어서, config 를안 보는 것을 사용자가 우회할 방법도 없다(
FACTLOG_ROOTexport 외에는).제안
(
os.environ["FACTLOG_ROOT"] = factlog_config.resolve_root_from_argv("--wiki"|"--target")).compile_facts.py/run_logic_check.py/review_candidates.py/generate_logic_policy.py에 KB 지정 플래그를 추가해 표면을 통일한다. 지금
tools/의 KB 지정 표면은--wiki/--target/ positional / 없음의 4종으로 갈려 있다.resolve_stale_refs.py의--wiki기본값"."를 해석기 결과로 바꾼다.수용 기준
FACTLOG_ROOT미설정 + 활성 KB config 설정 + KB 밖 cwd 에서 7개 스크립트가 활성 KB 를대상으로 동작한다.
--wiki/--target명시 시 그 값이 계속 최우선(플래그 > env > config > cwd).