Skip to content

fix: tools/ 7개 스크립트가 문서화된 active-KB config 우선순위를 구현하지 않는다 #330

Description

@SeoyunL

요약

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.pyresolve_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 외에는).

제안

  1. 7개 스크립트에 다른 6개와 동일한 import 전 prepass 를 넣는다
    (os.environ["FACTLOG_ROOT"] = factlog_config.resolve_root_from_argv("--wiki"|"--target")).
  2. compile_facts.py/run_logic_check.py/review_candidates.py/generate_logic_policy.py
    에 KB 지정 플래그를 추가해 표면을 통일한다. 지금 tools/ 의 KB 지정 표면은 --wiki /
    --target / positional / 없음의 4종으로 갈려 있다.
  3. resolve_stale_refs.py--wiki 기본값 "." 를 해석기 결과로 바꾼다.

수용 기준

  • FACTLOG_ROOT 미설정 + 활성 KB config 설정 + KB 밖 cwd 에서 7개 스크립트가 활성 KB 를
    대상으로 동작한다.
  • --wiki/--target 명시 시 그 값이 계속 최우선(플래그 > env > config > cwd).
  • cwd 가 KB 이고 config 가 없을 때의 기존 동작 불변(회귀 없음).
  • 우선순위 4단계를 각 스크립트에 대해 고정하는 테스트.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions