INTEGRATION-AUDIT-01 (#50) §10.4 / §10.5 housekeeping carry-over. F-4: annotate 14 remaining legacy Phase R'/Q sample-text hits across 10 src/ files with inline marker `# [legacy Phase R'/Q example -- INTEGRATION-AUDIT-01 §10.4]`. Comment-only. No string-literal / regex / sample dict value mutated. fit_verifier.py L612 marker keeps Phase Z partial-live import graph (FitAnalysis / RoleFit / redistribute / salvage) byte-precise. F-5: docs-only addendum -- §10.5.1 in INTEGRATION-AUDIT-01-REPORT.md + tests/CLAUDE.md fixture convention note. No root tests/fixtures/ dir created; existing tests/phase_z2/fixtures/ convention preserved. Documents test-only sample-reference allowance vs src/** runtime prohibition. Out of scope: Phase Z source 11 hits (phase_z2_content_extractor / failure_router / mapper / retry), production behavior change, #19 work. Verified: pytest -q tests/phase_z2/ = 157 PASS. git diff +210/-0 (35 src/docs lines + 175 new tests/CLAUDE.md). No behavioral delta. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7.4 KiB
7.4 KiB
CLAUDE.md — 매칭 시스템 작업 컨텍스트
이 파일은 Claude (AI) 가 tests/ 디렉토리에서 작업할 때 참고하는 컨텍스트입니다.
프로젝트 루트의 ../CLAUDE.md 와 함께 사용.
작업 디렉토리
- 메인 작업 디렉토리:
tests/matching/ - 데이터 / 보고서 파일도 같은 위치
- 실행 시 항상
tests/matching/에서 (스크립트 내부 상대 경로 의존)
시스템 개요
MDX 콘텐츠 ↔ Figma Frame 32 개를 매칭하는 4 단계 파이프라인 (V1~V4).
상세는 README.md / PLAN.md / PROGRESS.md 참조.
절대 규칙
1. 하드코딩 금지 (사용자 강조 사항)
- 결과물을 직접 고치지 말고 프로세스/코드를 고쳐라
- 임의 데이터 삽입 금지 (예: DECK 04 의 "제목·A 라벨·B 라벨·행 데이터" placeholder 사용 금지)
- 모든 표시값은 실제 코드 결과 (yaml / 함수 출력) 에서 가져와야 함
2. 사용자 직접 수정 보존
- 사용자가 HTML 파일을 직접 편집한 경우 반드시 pipeline 코드에 반영 후 재생성
- 코드만 고치고 재실행하면 사용자 수정이 사라짐
- 변경 시: 사용자 수정 8 개 모두 코드에 반영 → 재실행
3. 정직한 코드 동작 표시
- 임원 보고용 deck 라도 코드의 한계를 솔직히 표시
- 예: "MDX 자동 분석 결과 — 정책/요구사항 (사람이 보면 행렬형 비교)" 같은 표기
- "이 축은 사실 frame 매칭에 영향 없음" 같은 ablation 결과는 임원용에는 빼지만, 내부 문서 (PROGRESS.md) 에는 명시
4. 임원 보고용 톤
- 영문 enum 코드 (
policy_requirements) 직접 노출 금지 — 한글 (정책/요구사항) 우선 - 매칭 키워드는 5~10 개 + "등 N 개" 로 축약
- 디자인: 그라데이션 / 화려한 카드 금지. 단순 표 + 흑백 + 강조 색 1~2 가지
- 정의 / 부연 설명 최소화 (def 는 한 줄, 길게 풀어 쓰지 말 것)
명명 규칙
파이프라인 스크립트
pipeline_<숫자>_<이름>.py
- 01~07: 입력 추출 + 전처리 + 키워드
- 08: V2 (semantic) / V3 (structure r2~r5) / V4 (template_fit, r1/r2)
- 09: V2 진단
- 10: Holdout 라벨링 / 평가
- 11: templates_v1 감사
- 12: templates_v2 생성 (r1, r2, r3, final, final_r2, promote_frame13)
- 13: meeting docs / samples
- 14: single sample
- 15: bm25 / idf / logistic regression 비교
- 16: deck 페이지 생성 (DECK 1~7)
- 17: V4 full32 (32 frame 전체 평가)
- 18: V4 slot 축 ablation
결과 파일
<단계>_<설명>_result.yaml
mdx_matching_result.yaml— V1v2_semantic_rerank_result.yaml— V2v3_structure_rerank_r5_result.yaml— V3 (최종 r5)v4_full32_result.yaml— V4 (32 frame 전체)structure_ontology_v2_final_r2.yaml— Frame 32 DB
보고서
DECK_<번호>_<이름>.html — 임원 보고용 A4 페이지
ATTACH_<번호>_<이름>.html — 부속 자료
<NAME>_REPORT.html / .md — 분석 보고서
자주 쓰는 명령어
cd tests/matching/
# 매칭 시스템 전체 재실행
python pipeline_06_2_mdx_matching.py
python pipeline_08_v2_semantic_rerank.py
python pipeline_08_v3_r5_structure_rerank.py
python pipeline_17_v4_full32.py
# 보고서 재생성
python pipeline_16_deck_4pages.py # DECK 1~7
# Ablation / 검증
python pipeline_15_logistic_regression.py
python pipeline_18_slot_axis_ablation.py
파이프라인 핵심 가중치
V1 키워드 매칭 (Logistic Regression 학습)
matching_score = 0.414 × 핵심 + 0.320 × 세트 + 0.265 × 연관
V3 구조 매칭
total = 0.40 × 레이아웃 일치 + 0.35 × 콘텐츠 성격 + 0.25 × 시각 의도
V4 종합 판정
confidence = 0.25 × anchor + 0.20 × cardinality + 0.20 × relation
+ 0.15 × slot + 0.20 × content − penalty
라벨 임계값:
≥ 0.90 → use_as_is (그대로 사용)
≥ 0.75 → light_edit (가벼운 편집)
≥ 0.60 → restructure (구조 재배치)
< 0.60 → reject (사용 불가)
데이터 소스
| 데이터 | 위치 | 용도 |
|---|---|---|
| Figma 텍스트 | figma_to_html_agent/blocks/*/texts.md |
32 frame 텍스트 추출 |
| BEPS 마스터 | (별도 위치) | 키워드 보강용 |
| MDX 검증 구간 | (pipeline_01_extract_nodes.py 의 MDX_SECTIONS) |
정답 매칭 검증 |
| Frame 이미지 | data/figma_previews/<프레임번호>.png |
DECK 시각화 |
테스트 픽스처 컨벤션 (F-5, INTEGRATION-AUDIT-01 §10.5.1)
테스트 데이터 / 샘플 참조의 정식 위치 규약. tests/ 안에서만 적용되고 src/** 프로덕션 경로에는 적용되지 않음.
| 경로 | 상태 | 용도 | 비고 |
|---|---|---|---|
tests/phase_z2/fixtures/ |
존재 (정식) | Phase Z 회귀 YAML 픽스처 | test_fixtures_loader.py 가 로드. 서브디렉토리 : build_layout_css/, retry_gate/. |
tests/fixtures/ (루트) |
없음 (현재 미생성) | 비-Phase-Z / 비-YAML 픽스처 미래 후보 | 샘플 인벤토리가 tests/phase_z2/test_*.py 인라인으로 감당 못 할 때만 별도 이슈로 신설. |
samples/mdx_batch/** , samples/mdx/** |
존재 | 통합 스모크 입력 | tests/** 에서만 참조 가능. src/** 런타임 경로 하드코딩 금지. |
규칙 :
- 테스트 코드에서는
samples/mdx_batch/02.mdx같은 샘플 MDX 를 직접 참조해도 됨 (예 :tests/phase_z2/test_pz2_vu_integration.py).src/**런타임 입력은 절대 샘플 파일명 / 콘텐츠를 핀하지 말 것. - 새 YAML 회귀 픽스처는
tests/phase_z2/fixtures/아래 새 서브디렉토리로 추가. 루트tests/fixtures/신설은 금지 (별도 이슈 필요). src/**안에 등장하는 "BIM" / "건설산업 DX" / "재구성" 같은 sample-like 리터럴은 INTEGRATION-AUDIT-01 §10.4 (F-4) 에서 의도된 docstring / glossary / 예시 dict 로 분류 완료. annotation marker 가 붙어 있으면 의도된 example. 새 sample 리터럴을src/**에 도입하지 말 것.- 본 컨벤션의 anchor 정의는
docs/architecture/INTEGRATION-AUDIT-01-REPORT.md§10.5.1. 변경 시 anchor 부터 갱신.
자주 헷갈리는 것
영문 enum vs 한글 매핑
- 코드 / yaml: 영문 enum (
comparative_matrix,cycle_interrelation) - 보고서 표시: 한글 (
행렬형 비교,순환/상호 관계) - DECK 05 의 키워드 사전 표는 양쪽 다 표시 (사용자 매칭 가능)
항목수 vs 슬롯 후보 개수
- 동일 —
item_count = len(slot_candidates)(표 / subsections / bullets 어떤 형태든) - V4 의 cardinality 축과 slot.within 부분은 같은 신호의 중복 가중 (ablation 으로 확인)
V3 vs V4 구조 점수
- V3 = layout family + content_affinity + structure_intent (3 축)
- V4 = anchor + cardinality + relation + slot + content (5 축)
- 다른 모델. V3 점수와 V4 confidence 는 별도 계산
사용자가 강조한 피드백
- "코드로 돌린 결과물이지 임의 데이터 아님" — 모든 표시 정직
- "임원 보고용이야" — 부정적 부연 / 디테일 산식 빼기
- "한가지만 해" — 한 번에 한 가지만 변경
- "모든 변경은 pipeline 코드에 반영" — HTML 직접 수정은 일시적
진행 중 발견된 약점
PROGRESS.md 의 "발견된 약점" 표 참조. 8 개 모두 Phase E 작업 대상.
가장 시급:
- 02-2.2 매칭 실패 (E.5)
- MDX 분석 LLM 화 (E.1, E.2)
- 슬롯 의미 매핑 (E.3, E.4)