harness: 정합성 게이트 도입 + 하네스 불일치 스왑 (BIOP02-100 / BIOP01-64·65·66·71·72·73) - #5
Merged
Conversation
reviewer 팬텀 에이전트(문서 6곳 참조·실체 없음), 프로젝트 에이전트 cwd 로딩, 검증게이트↔외부리뷰 순서를 정리. draft 경로(ff0ec25) 해소 및 검증게이트 3종 실재는 확인만. 과거 문서 미삭제 — 새 보고서 추가.
harness_after/ 신설 — 라이브 하네스 미수정, 승인 시 스왑용. - harness.yaml (SSOT manifest), scripts/harness_doctor.py (정합성 게이트) - docs/HARNESS.md(after), CLAUDE-routing.after.md doctor가 현재 리포에서 reviewer 팬텀 3건 검출(FAIL) 확인. BIOP01-64~70 대응. 과거 문서 미삭제.
- scripts/start-paper-harness (실행 전제 가드, BIOP01-65) - RUN_STATE.template.yaml (BIOP01-68), CLAIMS.template.yaml (BIOP01-69) - agents/venue-reviewer.md (프로젝트 로컬 후보, BIOP01-64) - ci/harness-doctor.yml (정합성 게이트 CI, BIOP01-66) 라이브 미수정, 스왑 대기.
week1 논문분석 스킬+MultiVelo 샘플, week2 Insight(scope/papers.jsonl/ comparison/evidence/insight 4관점), week3 Validation(6기준). 근거=paper_analysis velocity 9편. 원 마감 05~06월 경과분 기록 보존.
…/65/66) 불일치 보고 §6 추가 — 원본(kakyungkim/paper-production-harness)과 BIOP02를 추가 클론해 3자 대조. 1차 결론 2건 정정, 신규 결함 3건. - M5 reviewer 팬텀의 출처는 원본(agents/에 reviewer.md 없는데 paper-orchestrator.md:13이 정식 멤버로 명시) → BIOP01-64 반영 대상 2곳 → 3곳 - M6 게이트 순서는 관찰이 아니라 원본 규칙 위반 — 원본 paper-orchestrator.md:23이 "paper-critic + gate FIRST, then reviewer"를 명문화했으나 BIOP01·BIOP02 SKILL.md 둘 다 step7(리뷰) → step8(게이트)로 역전 - M7 BIOP02는 팬텀이 실행 설정에 배선 — auto_review_config.json:58 "agents": ["paper-critic","reviewer"], independent_passes 2 (enabled=false 상태) - M8 skills/ 라우터 팬텀(bc7f824에서 삭제, AGENTS.md:52-56이 여전히 위임) + HANDOFF/TODO/SESSION-LOG 핸드오프 계약 팬텀 → BIOP01-45 선결 조건 - M9 1차 doctor가 M8을 못 잡음 → 이번 커밋에서 보완 doctor 보완: - harness.yaml: path_reference_scan 신설(백틱 인용 경로 실재 검사, resolve_by_basename, 외부 repo/IP ignore), doc_reference_scan에 README.md·AGENTS.md 추가 - harness_doctor.py: 팬텀 경로 검사 추가 + 팬텀 에이전트 맥락 필터 (백틱/표=FAIL, 산문=WARN) — kkkim 공동리뷰 지적 반영 - 실측: RESULT: FAIL (14 문제, 3 경고) — 팬텀 에이전트 3 + 팬텀 경로 11 라이브 하네스는 여전히 미수정(7/21 합의). 스왑 시 ci/harness-doctor.yml → .github/workflows/ 활성화 필요(kkkim 권고).
kkkim 공동리뷰 승인(2026-07-26) 후 권고 순서대로 라이브 반영. 각 단계 검증 결과 포함. BIOP01-73 게이트 자체 테스트 (신규, 선행): - harness_after/tests/test_harness_doctor.py — 합성 리포 13종 정상통과 / 역할파일부재 FAIL / 백틱 팬텀 FAIL / 표행 팬텀 FAIL / 산문언급 WARN(오검방지) / 팬텀경로 FAIL / 상대인용 해석 / ignore 규칙 / 산출물부재 WARN / repo루트 강제 / 스코프갭 재현 / path_scan 토글 / 실제 리포 회귀 - 결과: 13/13 통과 BIOP01-66 정합성 게이트 라이브: - harness.yaml, scripts/harness_doctor.py, .github/workflows/harness-doctor.yml - CI 2단계 도입 — 게이트 자체 테스트는 blocking, 구성 검사는 report-only (팬텀 잔존 상태에서 전면 blocking이면 모든 PR이 빨간불) BIOP01-65 실행 전제 가드 라이브: - scripts/start-paper-harness. 검증 4케이스: 비-git → FATAL / repo 하위 → 루트 자동복귀 통과 / 타 repo → 구성요소 누락 차단 / HARNESS_DOCTOR_ENFORCE=1 → 중단 - python 미존재 환경 대비 인터프리터 해석 추가 BIOP01-64 venue-reviewer 라이브: - .claude/agents/venue-reviewer.md 프로젝트 로컬 설치(전역 금지) - 문서 참조 10건 개명: CLAUDE.md 3 / docs/HARNESS.md 3 / SKILL.md 4 - 결과: 팬텀 에이전트 3 → 0 BIOP01-72 게이트 순서 정정: - SKILL.md 실행순서를 게이트①(결과검증) → 리뷰 → 게이트②(패키지검증)로 교체 - 원본 paper-orchestrator.md:23 규칙 인용을 근거로 명시. BIOP02는 별도 BIOP01-71 핸드오프 3파일 신설: - HANDOFF.md / TODO.md / SESSION-LOG.md — 계약이 지시하던 실물 생성 - skills/ROUTES.md 라우터는 결정 대기(복원 vs 문서정정) doctor 추이: 14 → 11(64 반영) → 8(핸드오프 신설). 잔여 8건은 전부 skills/ 결정 대기분.
스왑 중 발견: HANDOFF/TODO/SESSION-LOG 는 삭제된 게 아니라 78a5a92(2026-07-01) "개인 작업기록 untrack"으로 .gitignore:115-117 에 등재된 로컬 전용 파일이다 (BIOP02 .gitignore:246-248 도 동일). 보고서 §6 M8(b) 진단이 틀렸고, doctor 의 팬텀 경로 검사가 이를 오검했다. 정정: - harness.yaml: path_reference_scan.local_only 선언 추가 - harness_doctor.py: local_only 는 부재해도 FAIL 하지 않음. 대신 .gitignore 등재 여부를 확인 — 계약상 "필수 산출물"인데 ignore 에서 빠지면 실수로 커밋되므로 그때는 FAIL - 테스트 #13(부재+ignore → PASS)·#14(ignore 누락 → FAIL) 추가 → 15/15 통과 - 계약 문구에 "로컬 전용(.gitignore)" 표기 — CLAUDE.md:32,91 / SKILL.md:76 - 보고서 §8 정정 절 추가 (원문 §6 M8(b) 는 기록으로 보존) 교훈: "문서가 가리키는데 파일이 없다"는 진짜 drift 와 의도적 로컬 전용을 가린다. 의도는 manifest 에 선언되고, 게이트는 선언되지 않은 것만 문제 삼아야 한다. doctor 추이: 14 → 11(64) → 8(local_only 정정). 잔여 8건은 전부 skills/ 결정 대기.
skills/ 유실 경위가 앞선 보고와 다르다. 재조사 결과: - bc7f824(6/14)는 skills/ 를 삭제한 게 아니라 추가한 커밋이다 (import 박상준 Harness_Baseline, 4 datasets x download/preprocess/model/viz). 이때 지운 것은 옛 논문분석 스킬 33개이고 kkkim-paper-agent 브랜치에 보존돼 있다. - 이후 7f38b23(7/15 braveji env 정정) 등으로 계속 관리됐고 그 시점 41파일이었다. - 275def2(7/20, Merge origin/main into kkkim-pipeline PR #4 충돌 해소)에서 41파일 전부가 D 로 사라졌다. main 에는 이 skills/ 가 없었으므로 충돌 해소가 main 쪽을 택하면서 통째로 날아간 것이다. 삭제 범위는 skills/ 안으로 한정(부수 피해 없음). 즉 문서가 낡은 게 아니라 파일이 유실됐다. AGENTS.md 라우팅은 지금도 옳은 말을 한다. 변경: - skills/ 복원 — git checkout 7039bc4 -- skills/ (41파일, 유실 직전 상태 그대로) - harness.yaml: path_reference_scan.conventions 선언. AGENTS.md Repository Conventions 의 data/ metadata/ work/ outputs/ 는 산출물을 둘 위치 안내이지 사전 존재를 요구하는 경로가 아니다. 부재해도 FAIL 아님 - 테스트 +2 (규약경로 통과 / 미선언 경로는 여전히 FAIL) -> 17/17 통과 - live 회귀 테스트 방향 전환: 알려진 결함이 잡히는가 -> 깨끗한 상태를 지키는가 - 2단계 승격: CI continue-on-error 제거, 래퍼 HARNESS_DOCTOR_ENFORCE 기본값 1 doctor: 8 -> 0. RESULT: PASS. 주의: skills/ 복원 여부는 07-27 미팅 결정 사항(BIOP01-71). 이 커밋은 PR #5 안에 있고 머지 전이므로 결정에 따라 되돌릴 수 있다. B(문서 정정)로 확정되면 skills/ 를 다시 빼고 AGENTS.md README CLAUDE.md 참조를 정정해야 doctor 가 0 을 유지한다.
CI(GitHub runner)에서만 FAIL 이 났다. 로컬(우리 서버 컨테이너)에서는 PASS. 원인: CLAUDE.md:27 이 팀 공유 conda env 위치로 /opt/envs 를 인용하는데, runner 에는 그 경로가 없어 doctor 가 팬텀 경로로 판정했다. 이건 게이트의 오검이자, 동시에 게이트가 제 값을 한 사례다 — 문서에 박힌 환경 의존 절대경로는 우리 서버에서만 성립하고 다른 곳에서는 깨진다. (같은 종류를 3a86f6f "remove hardcoded absolute paths from agent/skill prompts" 에서 한번 정리한 적이 있고, 이건 그 뒤에 남은 잔여물이다.) - ignore 규칙 ^/dev/ → ^/ 로 일반화. 절대 호스트 경로는 리포 경로가 아니므로 팬텀 판정 대상이 아니다. 환경마다 결과가 달라지면 게이트를 신뢰할 수 없다. - 테스트 #17 추가 — 절대 호스트 경로가 팬텀으로 잡히지 않는지 고정. 18/18 통과. doctor: PASS (0 문제, 0 경고). 남는 판단(별건): CLAUDE.md:27 의 /opt/envs 인용 자체를 유지할지. 사실 기술이라 당장 틀린 문장은 아니지만, 문서가 특정 서버 레이아웃을 전제하는 것은 이식성 위험이다. conda run -n <env> 안내로 충분한지 팀 확인 필요.
kakyungkim
added a commit
that referenced
this pull request
Jul 27, 2026
…(DoD) 여러 세션째 미커밋으로 끌고 오던 활성 프로젝트 지침을 추적 상태로 정합. 내용: - 인프라·접속·환경 포인터(docs/SHARED-INFRA-GUIDE.md 정본) - 방법론 주의 6: 합격 기준의 근거는 봉인 문서뿐(2026-07-17 α 0.88 관측값≠임계 ρ≥0.50 실사고) - 완료의 정의(DoD) 커밋/공개 전 체크리스트 PR #5(gglee)의 CLAUDE.md 변경(venue-reviewer 개명·로컬전용 표기)과 3-way 병합 clean 확인(git merge-file rc=0). 미커밋은 CLAUDE.md 하나뿐이라 PR #5 mergeable 불변.
Geongyu
added a commit
that referenced
this pull request
Jul 27, 2026
기존 README는 2026-06-14(6792aa4)에서 멈춰 있었다. 그동안 바뀐 것이 README에 하나도 반영되지 않아, 리포의 첫 화면이 실제 상태와 어긋나 있었다. 정정한 것 - 제목이 "BioProject01 — kkkim-pipeline"이었다. 이 파일은 이제 main에 있다. - 하네스 정합성 게이트(harness.yaml + harness_doctor.py + 테스트 18종 + PR CI)가 통째로 빠져 있었다. PR #5→#7로 main에 들어간 것이 README에 없다. - "이 하네스는 OpenClaw로 실행한다"고 단언했다. 2026-07-27 실측 결과 팀 컨테이너 6개 중 openclaw CLI 설치는 0개다. 도입 미결 + 현재 실행수단(Claude Code/codex)으로 정정. - HANDOFF/TODO/SESSION-LOG를 "작업 기록"으로만 적어 새 clone에도 있는 것처럼 읽혔다. .gitignore 로컬 전용임을 명시. - 누락돼 있던 디렉터리 반영: .claude/, harness.yaml, scripts/, harness_after/, evals/, docs/, guide/, onboarding_gglee/, ai_scientist/, artifacts/, manuscript(심볼릭 링크). - paper_analysis 편수: dual-lens 14편 + 스쿱 점검 1편(todorovski)으로 구분. _index/papers.csv의 14는 dual-lens 기준이라 정합하다. 추가한 것 - 브랜치 지도 12개. main과의 차이는 git rev-list 실측(진행/archive/병합완료/미병합). - 연구 결론 한 문단. 단 수치는 싣지 않고 FINDINGS.md를 정본으로 가리킨다 (CLAUDE.md 방법론 주의 6 — 요약본의 숫자를 임계로 쓰지 않는다). - 담당표의 정본이 Confluence와 JIRA임을 명시. 개인별 배정 내역은 리포에 적지 않는다. 검증 - python scripts/harness_doctor.py --repo . --manifest harness.yaml → PASS, phantom_paths=0 - python harness_after/tests/test_harness_doctor.py → 18/18 OK - 작성 중 게이트가 이 README의 팬텀 경로 6건을 실제로 잡았다(브랜치 이름 3, 확장자 3). 게이트가 슬래시 든 백틱 토큰을 경로로 읽는 한계는 본문에 명시.
10 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
BIOP02-100(논문 생산 하네스 검토)의 산출물과, kkkim 공동리뷰(2026-07-26 18:53) 승인 후 권고 순서대로 반영한 라이브 스왑입니다. base를
main이 아니라kkkim-pipeline으로 둔 이유는 아래 §5.1. 무엇을 고쳤나
reviewer팬텀 하나를 쫓다가, 같은 근본 원인의 사례가 3건이라는 걸 확인했습니다 — 파일을 지우거나 옮긴 커밋이 문서를 안 고쳤고, 그걸 잡을 게이트가 없었습니다. 그래서 개별 결함보다 게이트를 먼저 넣었습니다.harness.yaml+scripts/harness_doctor.py+ PR CIscripts/start-paper-harnessvenue-reviewer프로젝트 로컬 + 참조 개명skills/라우터2. 검증 결과
게이트 자체 테스트 — 15/15 통과 (
python harness_after/tests/test_harness_doctor.py, 표준 라이브러리만)p3_concordance.py) · ignore 규칙 · 산출물부재=WARN · 산문 'reviewer'=WARN · 스캔 토글 · local_only 부재.gitignore에 없으면 FAILAGENTS.md를 스캔에서 빼면 미검출, 넣으면 검출) · 실제 리포실행 전제 가드 — 4케이스
FATAL: git 저장소가 아님exit 1MISSING: .claude/agents/hspc-velocity-analyst.md… →FATAL: 필수 구성요소 누락 → production run 중단 (범용 폴백 금지)HARNESS_DOCTOR_ENFORCE=1세 번째가 BIOP01-65의 핵심입니다 — 7/21에 재현된 "cwd가 달라
agent type not found→ general-purpose 대체"가 진행 대신 중단이 됩니다.doctor 검출 추이
잔여 8건은 전부
skills/결정 대기분입니다(§4).3. 리뷰 중 발견한 제 오진 (정정)
보고서 §6 M8(b)에서
HANDOFF.md·TODO.md·SESSION-LOG.md가 "재구조화 커밋으로 사라졌는데 계약은 여전히 필수로 지시한다" 고 적었는데 틀렸습니다..gitignore:115-117이 이들을 제외합니다 —78a5a92(2026-07-01) "chore: 개인 작업기록(HANDOFF/TODO/SESSION-LOG) untrack". BIOP02도 동일(.gitignore:246-248). 삭제가 아니라 의도적 로컬 전용이고, 새 clone에 없는 게 정상입니다. 제 doctor가 이걸 팬텀으로 오검했습니다.정정:
path_reference_scan.local_only선언 — 부재해도 FAIL 아님. 대신.gitignore등재 여부를 확인(계약상 필수인데 ignore에서 빠지면 실수로 커밋되므로 그때는 FAIL)CLAUDE.md:32,91/SKILL.md:764. 머지 전 결정이 필요한 것 —
skills/라우터skills/는bc7f824(2026-06-14, pipeline-only 재구조화)에서 삭제됐는데AGENTS.md:52-56·README.md:12,27·CLAUDE.md:17-19가 여전히 그 라우터로 위임합니다. 잔여 팬텀 8건 전부가 여기서 나옵니다.skills/ROUTES.md+ dataset×task 스킬 재생성.claude/agents+Skill)과 OpenClaw 쪽(AGENTS.md+skills/) 라우터가 둘로 갈라져 게이트가 지켜야 할 표면이 두 배가 됩니다. BIOP01-45는 실제p0~p5스크립트 위에 배선하는 편이runner_manifest.yaml계약과 맞습니다.AGENTS.md는 OpenClaw 운영 문서라 이 PR에서 건드리지 않았습니다. 방향만 정해주시면 정정 + doctor 통과까지 처리하겠습니다. 이건 BIOP01-45 착수 전 선결이기도 합니다.5. CI가 지금은 report-only입니다 (의도)
.github/workflows/harness-doctor.yml을 2단계로 도입했습니다.continue-on-errorcontinue-on-error한 줄 삭제로 blocking 승격지금 전면 blocking으로 켜면 팬텀 8건 때문에 모든 PR이 빨간불이 되고, 그러면 팀이 게이트를 무시하는 법을 먼저 배웁니다. 실행 래퍼도 같은 원칙(구성요소 부재=항상 하드 실패 / 문서 drift=1단계 경고)입니다.
6. base가
kkkim-pipeline인 이유main은kkkim-pipeline보다 8커밋 뒤처져 있습니다.main으로 열면 diff가 81 files / +6,824가 되는데 그중 5,000여 줄은 제 변경이 아니라 kkkim 님의 커밋(ee9d836,dd7a5f0,e95dc82등)입니다.kkkim-pipeline기준이면 29 files / +1,650 — 제 작업만 남습니다. PR #3과 같은 방식이고, main 반영은 다음kkkim-pipeline→main통합 PR(#4와 같은 형태)에 실려 갑니다.7. 함께 진행한 상류 PR
원인이 원본 스캐폴드에 있었습니다 —
agents/에reviewer.md가 없는데paper-orchestrator.md:13이 정식 멤버로 명시하고,SKILL.template.md:50-51이 스캐폴드 자신의 순서 규칙(:23)을 위반합니다. 두 인스턴스의 역전은 각자의 실수가 아니라 템플릿 상속이었습니다.→ kakyungkim/paper-production-harness#2 (일반형
venue-reviewer.md추가 + 참조 개명 + 전역 설치 안내 제거 + 템플릿 순서 교체)8. 남은 일
skills/결정(§4) → 팬텀 0 → CI·래퍼 2단계 승격agents/critic/auto_review_config.json:58의"agents": ["paper-critic", "reviewer"]배선. 해소 전까지enabled=true금지 권고관련: BIOP02-100 / BIOP01-64 · 65 · 66 · 71 · 72 · 73