From e12dc59189af082055ef003bd79855ccd40453f3 Mon Sep 17 00:00:00 2001 From: jhogyu Date: Fri, 28 Aug 2026 01:31:28 +0900 Subject: [PATCH] =?UTF-8?q?docs(stage2):=20v3=20=EA=B0=9C=EC=A0=95=20?= =?UTF-8?q?=EC=A0=84=EB=9E=B5=20=ED=99=95=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v2-1 평가와 사건종류별 규칙·요건사실 검색 흐름을 5-task DAG에 통합한다. 사해행위 자산 10종은 migration source로만 보존하고 독립 검증 2회 기록을 포함한다. --- .../YAML_Prompts/2. Stage_2/MEMORY.md | 131 ++ .../stage_2_optimal_update_strategy_v.3.md | 1201 +++++++++++++++++ .../evals/stage2_v3/round_1.md | 44 + .../evals/stage2_v3/round_2.md | 47 + .../plans/stage2-v3-strategy.md | 113 ++ 5 files changed, 1536 insertions(+) create mode 100644 Case_02_Comparison_Research/YAML_Prompts/2. Stage_2/MEMORY.md create mode 100644 Case_02_Comparison_Research/YAML_Prompts/2. Stage_2/stage_2_optimal_update_strategy_v.3.md create mode 100644 Case_02_Comparison_Research/evals/stage2_v3/round_1.md create mode 100644 Case_02_Comparison_Research/evals/stage2_v3/round_2.md create mode 100644 Case_02_Comparison_Research/plans/stage2-v3-strategy.md diff --git a/Case_02_Comparison_Research/YAML_Prompts/2. Stage_2/MEMORY.md b/Case_02_Comparison_Research/YAML_Prompts/2. Stage_2/MEMORY.md new file mode 100644 index 00000000..6d505b4c --- /dev/null +++ b/Case_02_Comparison_Research/YAML_Prompts/2. Stage_2/MEMORY.md @@ -0,0 +1,131 @@ +# MEMORY — Stage 2 개정 작업 메모리 + +> 이 파일은 CLAUDE.md 혹은 AGENTS.md와 한 벌로 짝지어진 Memory System 이다. Task당 하나의 교훈, 상단 한 줄 요약. + +## How to Write MEMORY.md + +상단에 한 줄 요약이 있는 task당 하나의 교훈을 저장하라. +수정 사항과 확인된 접근 방식을 모두 간략하게 기록하고, 왜 중요한지 포함하라. +이미 저장소나 채팅 기록에 있는 정보는 저장하지 마라. +중복을 생성하지 말고 기존 노트를 업데이트하라. +잘못된 것으로 판명된 노트는 삭제하라. + +중요한 작업 세션이 끝나면 다음으로 마무리하라: + +- 우리가 가진 세션을 되돌아보라. +- 하위 에이전트(subagents)를 사용하여 핵심 테마와 교훈을 식별하고 MEMORY.md에 섹션으로 저장하라. +- 향후 세션 시작 시 MEMORY.md의 이전 섹션을 참조하라. + +## 2026-08-28 — Stage 2 최적 개정 전략 v3 + +한 줄 요약: v2-1 평가의 M-1~M-5·m-1~m-13과 사건종류별 청구취지 규칙·요건사실 Weaviate workflow를 5-task clean-slate DAG에 통합하고, 사해행위 기존 자산 10종을 migration source로 전수 활용한 뒤 독립 검증 2회 findings를 모두 닫아 v3 전략을 확정했다. + +- 최종 문서: `stage_2_optimal_update_strategy_v.3.md`; 1,201행/78,312 bytes; SHA-256 `fd2b39fbdf51e3f7123bcb377a1bb1f0a11549861bab93dc1aa1ea0213073347`. +- 최적 흐름은 `S2_00 deterministic ingress → S2_10 dependency-wave 법률판단 → S2_20 ReliefPlan/C25/C27~C29 → S2_30 group 공동작성 → C45/S2_40 검증·조립·commit`이다. C25 규칙은 `RELIEF_ONLY`, 검수 요건사실 pack은 `CAUSE_AND_ELEMENT_CHECK`이며 검색자료가 사건 사실·증거·명령으로 승격되지 않는다. +- 137종 full release는 `manifest/module_manifest.v3.json`, `manifest/case_kind_coverage.v3.json`, `manifest/stage2_release.v3.json`을 유일 판정축으로 삼는다. exact rule+contract, 승인 corpus, renderer 포함 physical dependency, `READY 137/137`, 제외 0을 모두 요구하며 subset canary를 full release로 보고하지 않는다. +- M-3은 지정 사해행위 자산 10종을 모두 provenance가 있는 migration row로 사용하되 runtime 직접 load하지 않는다. ACTIO-01~04로 판결확정 다음 날·민법 법정이율·소촉법 배제, 수익자/전득자 피고와 채무자 non-party, 민법 제406조 제2항 두 기간, 피보전채권/공동담보/수익자 이익 3자 cap을 canonical contract·fixture에 결속했다. +- 2차 검증에서 현행 대부업법상 `registered_lender` 2분법 오류를 발견하여 비영업 사인·등록 대부업자·불법사금융업자·여신금융기관과 반사회적 불법대부계약 trigger를 분리했다. 법정수치와 계약효력은 계약시점 authority/law-value로 versioning한다. +- 독립 검증 기록: `evals/stage2_v3/round_1.md`는 MAJOR 3·MINOR 10의 13건, `round_2.md`는 MAJOR 2·MINOR 6의 8건을 기록했고 모두 `APPLIED`; 미처분 finding 0이다. Round 1 요약문의 MINOR 8 표기는 실제 finding 표 10행을 기준으로 정규화했다. +- 최종 정적검사: UTF-8, Markdown fence 46, PlantUML start/end 1:1·if/endif 2:2·fork/fork-again/end 2:2:2, 지정 10개 자산 각 1회, 구 Stage 2 v.0~v.3 runtime import edge 0, `git diff --check` PASS. +- 경계: 전략·정적 검증만 완료했다. 신규 YAML/Python/profile/manifest 구현, Weaviate 배포, live Stage 1→2·LLM·cache·E2E 실행, 137종 법률가 semantic sign-off는 미수행이다. + +## 2026-08-27 — 사건종류별 요건사실론 Weaviate 결합 workflow + +한 줄 요약: 기존 5-task DAG와 C25 exact 사건종류 binding을 유지하면서, `S2_20` 내부에 역할별 검색계획(C27)·Weaviate 필터 검색(C28)·검증된 최소 요건사실 pack 조립(C29)을 추가하여 S2_30의 청구원인 작성과 S2_40의 요건-사실-증거 추적 검증을 강화했다. + +- 최종 문서: `v.2-1_workflow_change_2.md`; 291행/17,237 bytes; SHA-256 `eb5437936d4d69c4c1009aa91010c3905efffe1e6aa4cfa4b28fe7b4da498834`. +- 반영 판단은 `예`다. 사건종류별 요건사실론은 요건·항변·재항변·증명책임·증거 gap 및 청구취지-청구원인 정합성 점검에 실질적으로 유용하다. +- 최적 순서는 `C25 exact case_kind/subtype 확정 → C27 역할별 query plan → C28 metadata-filtered hybrid retrieval → C29 출처/hash/검수상태 검증 및 Stage 1 슬롯 대조 → S2_30 공동작성 → S2_40 추적 검증`이다. semantic search로 사건종류를 역추론하거나 유사 사건을 자동 대체하지 않는다. +- 청구취지작성규칙은 `RELIEF_ONLY`, 검수된 요건사실 pack은 `CAUSE_AND_ELEMENT_CHECK` 범위로 제한한다. 어느 쪽도 Stage 1에 없는 사건 사실·증거를 만들거나 현행 법령·판례를 대체할 수 없다. +- raw 요건사실론 문서는 현재 6개/3,559행/218,175 bytes의 seed corpus이며 137종 전체 coverage를 입증하지 않는다. production 전 canonical mapping, heading-aware chunk metadata, 법률가 검수, authority 연결, collection snapshot과 retrieval receipt가 필요하다. +- 검색 누락·장애·법리 충돌은 해당 claim group을 `LAWYER_REVIEW_REQUIRED`로 분기하되 전체 사건을 자동 차단하지 않는다. 검색 결과는 동결된 pack으로 재생하고 무관 chunk·미검수 chunk·사실 창작을 금지한다. +- 경계: workflow·IO·검색계약 설계만 작성했다. Weaviate collection 배포, 137종 corpus 완성, YAML/Python 구현, live retrieval 및 E2E 법률가 sign-off는 미수행이다. + +## 2026-08-27 — 사건종류별 청구취지작성규칙 결합 workflow + +한 줄 요약: 기존 5-task DAG를 유지하면서 `S2_20` 내부에 atomic claim별 137종 사건종류 판정과 exact 규칙문서 binding을 수행하는 deterministic `C25`를 추가하고, 선택된 청구취지작성규칙만 `S2_30`에 `RELIEF_ONLY` context로 공급하는 변경 전략을 확정했다. + +- 최종 문서: `v.2-1_workflow_change_1.md`; 288행/26,384 bytes; SHA-256 `a18cd4f66b97846dbc30d1c2bb32bc5d706b6016a55671e01928c8655763593f`. +- 최적 흐름은 `S2_10 청구권·구제수단 판단 → S2_20 preliminary group → atomic claim별 case-kind/rule binding → rule contract 정합성 검사 → S2_30 case-specific 청구취지 작성 → S2_40 binding/hash/clause 검증`이다. 사건종류는 청구권 식별·실체법 profile 선택키가 아니라 후단 drafting-rule selector다. +- 복합 claim group에는 사건종류 하나를 강제하지 않고 atomic claim별 복수 binding을 허용한다. runtime directory scan·filename fuzzy match는 금지하고 registry의 exact path/version/hash만 사용한다. +- 실물 inventory는 mapping table 22행, 최상위 `Default_Agent/`의 해당 이름 패턴 Markdown 19개, 예시 문서 5개다. 버전·중복·누락이 있으므로 현 자산은 137종 production coverage가 아니며 canonical registry, rule contract와 법률가 검증이 필요하다. +- prompt caching은 S2_10에 compact 137-row classification index만 고정 segment로 넣고, S2_30에는 선택된 renderer와 rule document 조합만 넣어 cohort를 만든다. 규칙문서는 청구원인의 사실·authority 또는 frozen ReliefPlan 변경 근거로 사용할 수 없다. +- mapping 누락·모호·충돌은 claim을 소거하거나 전체 run을 중단하지 않고 `LAWYER_REVIEW_REQUIRED`로 보존한다. nearest-name 자동 대체와 미검증 generic 문안의 READY 표시는 금지한다. +- 경계: workflow·IO·자산계약 변경 전략만 작성했다. 137종 규칙문서 완성, registry/YAML/Python 구현, 법률가 sign-off와 live E2E는 미수행이다. + +## 2026-08-27 — v2-1 전략 workflow와 기존 Stage 2 흐름 비교 + +한 줄 요약: v2-1은 `Stage 1 → 청구권·구제수단 판단 → 청구취지·청구원인`이라는 기존 업무 목적과 산출물 방향은 상당히 계승하지만, 사건종류 중심 runtime 라우팅을 폐기했으므로 실행 구조의 직접 합치는 부분적이다. + +- 비교 문서: `v.2-1_strategy_workflow_overview.md`; 75행/7,642 bytes; SHA-256 `519de5163e1bda6e6b9d818e9784d356df84fe5d2cb014fe53f9dea8e1ea413b`. +- v2-1의 큰 흐름을 `Stage 1 현행 산출물 → S2_00 deterministic 정규화·bundle compile → S2_10 LLM cluster별 법률판단 → S2_20 deterministic ReliefPlan·claim group 확정 → S2_30 LLM 청구취지·청구원인 작성 → S2_40 deterministic 검증·render·commit → 최종 package`의 ASCII art로 정리했다. +- 사건종류 137종 catalog는 runtime 법리 선택키가 아니라 renderer/profile coverage와 회귀시험 기준이다. runtime은 Stage 1의 사실·증거·법률효과 구조·signal로 활성 claim cluster와 법리 profile을 선택한다. +- 실제 v.0 YAML 세부 순서는 사용자가 제시한 개념도와 달리 `Task_B 청구권 식별 → Task_C 각 청구권의 사건종류 부여`다. 이후 `Stage_2_2`가 청구권별 정보를 만들고 `Stage_2_3`이 청구취지·청구원인을 생성한다. +- 경계: 생성 문서는 v2-1 전략의 비교·시각화 자료이며, 신규 YAML/module 구현 또는 live E2E 검증 완료 증거가 아니다. + +## 2026-08-26 — v2-1 엄격 검증 (eval 보고서 생성, 감사 3회전 SUFFICIENT) + +한 줄 요약: `stage_2_optimal_update_strategy_v.2-1.md`를 7차원 직접 검증 + 독립 감사 sub-agent 3회전(NEEDS_MORE → NEEDS_MORE(정밀도) → SUFFICIENT)으로 검증하여 CRITICAL 0·MAJOR 5·MINOR 13으로 판정하고 `eval_stage_2_optimal_update_strategy_v.2-1.md`에 기록했다 — M-1~M-5(+선행 m-10) 반영 v2-2가 Phase 0 착수 기준. + +- 최종 문서: `eval_stage_2_optimal_update_strategy_v.2-1.md`; 181행/47,252 bytes; SHA-256 `d72e14ed078747411d968c537ac6075b3a9e3fa9c21bb55d74fbf16e8f33bcb8`. 대상 v2-1 hash `72440425…`는 변경하지 않았다. +- 두 restriction(상류 전제자산 삭제·법률 fail-closed 폐기) 이행을 diff·grep으로 실측 확인. 인용 법률사실(제1115조 가액지급·법률 제21454호 2026-03-17·부칙 제2·3조·2024다208261·제1112조 4호 삭제·84다카1194)은 law.go.kr 실증 허위 0. 상법 제45조·소촉법 12%는 law.go.kr 직접 fetch가 제목만 반환해 법원 공지·법률DB 검색으로만 교차확인. +- MAJOR: ① Stage 1이 이미 산출하는 `element_slots`/`opposing_fact_slots`/`defense_map`/`evidence_slot_status[]` 요건사실 계약을 Stage 2가 읽지 않음 ② 소송비용·가집행 항과 문서 수준 청구취지 조립 규칙 부재(가집행은 atom 단위: 재산권 이행 ∧ ¬형성판결 종속 ∧ ¬R03/R05/R06) ③ 사해행위 특칙 4종(가액배상 이자 판결확정 다음날·민법이율, 피고적격 수익자·전득자, 제406조②, 3자 cap) 누락 ④ cluster 간 선결·부종 co-cluster 규칙·edge 부재(Stage 1 `depends_on`은 지식층 상속이라 실행순서 근거 불가) ⑤ READY 조건 loophole(미해결 review key·P1 `blocks_final_drafting`/P4 `blocked_review_items`·TECHNICAL_INCOMPLETE cluster·DEFER_TO_LAWYER·`review_policy` 미참조). +- §9 Q&A(9.1 일반 invariant·9.2 fixture oracle) 실물 일치 확인. 보완 권고: fixture blocker code를 generic V-code에 매핑, §9 서두에 137종 일반성은 Phase 3 row fixture로 확보됨을 명시. +- 교훈: (1) 감사자 지적도 반영 전 실물 grep 재확인이 필수 — 1차에서 검증자 자신의 오독 5건(v2 STOP 분기 수, `depends_on` 의미 등), 3차에서 감사자 인용 off-by-one(DR3:43→42)이 나왔다. (2) 모범답안(`improvement_report_1.md:1548-1550`, `discrepancy_report_3.md:42-47`)이 청구취지 tail·이자 특칙의 가장 강한 oracle이므로 전략서 fixture assertion에 그대로 실어야 한다. (3) Stage 1 `domains/*/domain_config.json`의 slot·defense·depends_on 계약은 Stage 2 설계 전에 먼저 inventory해야 한다. +- 경계: eval은 정적 검증이다. 137종 법률가 sign-off, live Stage 1 산출물 대조, M-3·m-6·m-13 근거 판례·법정수치의 공식 원문 특정은 미수행(A00 재조회 대상). + +## 2026-08-26 — Stage 2 최적 개정 전략 v2-1 + +한 줄 요약: v2의 신규 Stage 1 production 전제 자산 4종과 법률 불확실성 기반 전역 no-save를 제거하고, 현행 Part 1~4 산출물만으로 조건부·대안 draft와 변호사 검토 package를 계속 생성하는 v2-1 전략을 확정했다. + +- 최종 문서: `stage_2_optimal_update_strategy_v.2-1.md`; 1,645행/141,942 bytes; SHA-256 `72440425617248d0cae727846948df3d24723cbb22ea2a16c0115144f686c553`. 원본 v2 hash `4d5cf5de...`는 변경되지 않았다. +- 삭제대상 `stage1_program_release_manifest`, `stage1_independent_review_receipt`, `stage1_s7_behavioral_receipt`, `stage1_final_program_seal` 및 외부 filing-scope approval/failure/quarantine 계약은 runtime prerequisite에서 0이다. 기존 Stage 1 registry는 P1 digest의 optional integrity recheck일 뿐 부재가 실행을 막지 않는다. +- 5-task DAG는 유지하되 법률판단을 `SUPPORTED|CONDITIONAL|UNRESOLVED|EXCLUDED`로 보존한다. 법률 미해결은 `LAWYER_REVIEW_REQUIRED` package로 저장하고, 기술적으로 일관된 파일을 만들 수 없는 affected scope만 `TECHNICAL_INCOMPLETE`다. +- 독립 검증 1회는 초안 hash `336c7872...`에 `REVISE`(major 4, minor 5)를 판정했다. 전부 반영하여 S2_10/S2_30은 per-ID immutable patch·telemetry만 쓰고 S2_20/S2_40이 ID-sort single reducer가 되며, review packet은 package hash를 통해 5-file root에 전이 결속된다. +- 자동화는 `READY_FOR_LAWYER_FILING_DECISION`까지만 선언한다. 사건별 `artifact_legal_readiness`, `artifact_technical_status`, 시스템 `deployment_validation_status`를 분리하고 최종 제출은 완전한 기록을 본 자격 있는 대한민국 변호사가 결정한다. +- §6.0에 신규 workflow YAML 5개의 exact 배포경로·entrypoint·IO와 loader binding을 추가하고 `attorney_worknote`, map patch, telemetry part schema를 명시했다. 구 Stage 2 v.0~v.3 runtime dependency는 0이다. +- 작성자 정적검사: Markdown fence 46 PASS, PlantUML start/end 1·if/endif 3·fork/end 2 PASS, CK-001~137 연속 137행, workflow/task 각 5, root catalog hash 일치. 독립 2차 PASS라고 주장하지 않는다. +- 경계: 전략서 개정만 완료했다. 신규 workflow YAML·Python·profile 구현, loader 배포, live Stage 1→2 E2E/cache telemetry, 137종 법률가 semantic sign-off는 미수행이다. +- 후속 재확인: 사용자의 재기입 요청에 따라 이 요약이 지정 경로 `YAML_Prompts/2. Stage_2/MEMORY.md`에 실제 저장되어 있음을 다시 확인하고 파일을 갱신했다. + +## 2026-08-25 — Stage 2 실행 자산 inventory + +한 줄 요약: v2 전략을 신규·상류 전제·직접 재사용·migration-only·run 산출물로 분리한 18개 자산 표로 전환하고, 독립 검증의 모든 지적을 반영해 최종 PASS를 받았다. + +- 최종 문서: `assets_for_stage_2.md`; 373행/54,214 bytes; SHA-256 `2b4ef2ae4bd79477a24e3a63fdbea63adeefd4344ad1f503181ed56f50b5f78c`. +- v.2 core execution-contract subtotal은 workflow 5, core/A00 8, prompt 3, renderer 6, substantive 22, crosscut 5, CE 17, SL 13, manifest 6, schema 18의 103개다. 이는 authority·fixture·test·loader/deployment/E2E/sign-off 보완군을 제외한 subtotal이지 grand total이 아니다. +- Stage 1 공식 6개 입력과 감사·검토 무손실면, 신규 release 전제 4종을 별도 표로 두었다. 기존 Stage 2 v.0~v.3은 dependency 0이며, 기존 module은 실물 확인된 16개 closed migration allowlist만 신규 profile seed로 이관하고 runtime 직접 load하지 않는다. +- 독립 검증에서 세계법제정보센터를 대한민국 국내법 controlling source에서 분리하고, 137종·profile fixture family, loader deployment receipt, live E2E evidence, 법률가 semantic sign-off와 검증 schema를 `TO_BE_FROZEN` missing piece로 추가했다. 최종 재검증은 BLOCKING/MAJOR/MINOR 0으로 PASS했다. +- 경계: 이 inventory는 필요한 자산과 배포 위치의 설계 목록이다. 신규 103개 core 자산의 구현, Stage 1 release 4종 PASS, 실제 loader 배포, clean live E2E 및 137종 법률가 sign-off 완료를 증명하지 않는다. + +## 2026-08-25 — Stage 2 최적 개정 전략 v2 + +한 줄 요약: 외부 평가 MAJOR 5·MINOR 12와 독립 적대적 재검증을 반영해 5-task clean-slate DAG를 유지하면서 현행법·scope·승인·구현완료·cache 계약을 보강한 v2를 정적 PASS로 확정했다. + +- 최종 문서: `stage_2_optimal_update_strategy_v.2.md`; 1,608행/130,600 bytes; SHA-256 `4d5cf5de0394f34310f9cf96f11057fba69d1493e97d93830da45f301095a539`. +- 원고 이익은 명목액 최대화가 아니라 합법성·입증·집행·회수·기한·비용을 순서화한 lawful remedy frontier와 supported claim-option conservation으로 정의했다. +- 민법 법률 제21454호 제1115조 제1항·부칙 제3조를 반영해 상속개시일 2026-03-17 이후 유류분은 `VALUE_PAYMENT_ONLY`·R01, 청구일부터 이자, CE-08→CE-01로 고정하고 구법 사건과 권리자·상실·보상적 증여 전환축을 분리했다. +- unresolved group 무승인 run은 S2_20의 구조화 plan candidate에서 멈춘다. 외부 변호사 승인은 parent run/candidate raw+binding hash, signer trust/signature/expiry, ingress/scope/group과 final seal에 결속한 새 run에서만 재사용한다. +- production coverage는 단순 137행 귀속이 아니라 모든 row의 `implementation_gap_ids=[]`, dependency `IMPLEMENTED_AND_VERIFIED`, row별 fixture PASS를 요구한다. authority cache는 excerpt뿐 아니라 시행일·부칙·헌재효력·후속입법·negative treatment 등 의미 metadata 변경에도 무효화한다. +- 정적 확인: CK-001~137 연속·source key 137개 유일, base 59/6/30/4/29/9, root catalog hash 일치, UML 1쌍·if 6쌍·fork 2쌍, Markdown fence 50개, UTF-8, 구 v.0~v.3 runtime dependency 0. 독립 sub-agent는 최종 hash 기준 `STATIC STRATEGY PASS`를 확인했다. +- 경계: 이는 전략서 정적 검증이다. 신규 YAML/module 구현·배포, live Stage 1→2 E2E, provider cache 효과, 137종 법률가 semantic sign-off는 아직 증명되지 않았다. + +## 2026-08-25 — Stage 2 Clean v1 개정 전략 + +한 줄 요약: Stage 2는 Stage 1 봉인본을 직접 소비하는 3 deterministic + 2 LLM의 5-task fail-closed DAG로 재구축하고, 구 v.0~v.3 runtime dependency는 0으로 유지한다. + +- 기준일 연구기록의 Stage 1 snapshot은 `STAGE1_NOT_RELEASE_READY`, S7 `UNBOUND`, 독립검토/final seal 미완료였다. 이를 영구 상태로 가정하지 않고 매 run S2_00이 canonical release artifact를 재검증하며, 미완료 run만 production Stage 2를 hard block한다. +- 137종은 6 renderer와 상시 X3, 22 substantive·crosscut·17 CE·SL registry로 보존하고 사건명은 runtime 법리 선택이 아닌 coverage oracle로만 쓴다. +- 공식+감사 ingress, canonical signal `ALL` 확장, review/signal/domain conservation ledger를 먼저 닫고 LLM은 법률판단과 닫힌 atom/template JSON 생성에만 사용한다. +- C45는 임시 Markdown만 만들며 C40이 독립 post-render byte 대조와 5-file commit root를 통과시킨 뒤에만 atomic 저장한다. +- DR1~4·IR1~4·IM의 9-source finding과 네 gold/mutation fixture, task별 cache lane, authority freshness를 release gate로 삼는다. +- v1의 72→94→100/100은 durable rubric/finding/receipt가 없는 역사적 자기보고이므로 release 증거로 재사용하지 않는다. 외부 eval은 별도로 CRITICAL 0·MAJOR 5·MINOR 12를 판정했고 v2에서 처리했다. +- 상세 기준: 원안 `stage_2_optimal_update_strategy.md`, 개정안 `stage_2_optimal_update_strategy_v.2.md`. + +## 2026-08-25 — 전략서 엄격 검증 (eval 보고서 생성, 감사 3회전 SUFFICIENT) + +한 줄 요약: `stage_2_optimal_update_strategy.md`를 6차원 병렬 적대적 검증 + 독립 감사 루프 3회전으로 검증하여 CRITICAL 0·MAJOR 5·MINOR 12로 판정하고 `eval_stage_2_optimal_update_strategy.md`에 기록했다 — M-1~5 반영 개정판이 Phase 0 착수 기준. + +- 인용 근거 무허위: catalog sha·인계면 6:6·분석서 앵커·전역 상태 4값·판례 3건(웹 실증)·caching 문서 3종 전부 실물 일치. 부록 A 137행 전수 일치. clean-slate grep 0건. +- MAJOR: ① 성수동 175M은 보고서 미기재 산술 파생값(trace 불가) ② 헌재 결정 권위 채널 부재 ③ C10 식별자 module/invariant 이중 사용 ④ 부록 SL ID 표기 §6.5 canonical과 7건 불일치(Phase 0 hard fail 유발) ⑤ §16 자기 검증 기록(72→94→100) 재현 불가. 단, 평가 당시의 “유류분 개선입법 미확정” 전제는 기준일 현행 법률 제21454호와 2024다208261로 대체되었고, v2는 제1115조·부칙 제3조까지 별도 반영했다. +- 교훈: 자기 검증 주장에는 산출물 경로·hash를 남겨야 한다(§16 비대칭이 MAJOR가 된 이유). 검증자 출력의 행번호 인용도 오프셋 오류가 날 수 있으니(차원⑤ +21) 후속 인용 전 재확인. diff --git a/Case_02_Comparison_Research/YAML_Prompts/2. Stage_2/stage_2_optimal_update_strategy_v.3.md b/Case_02_Comparison_Research/YAML_Prompts/2. Stage_2/stage_2_optimal_update_strategy_v.3.md new file mode 100644 index 00000000..fd219ca7 --- /dev/null +++ b/Case_02_Comparison_Research/YAML_Prompts/2. Stage_2/stage_2_optimal_update_strategy_v.3.md @@ -0,0 +1,1201 @@ +# Stage 2 작업명세서 최적 개정 전략 v3 + +> 기준일: 2026-08-28 (Asia/Seoul) +> 적용 범위: `case_kinds.md` 중 가사소송·가족관계등록·행정소송을 제외한 대한민국 민사 본안 137종 +> 문서 성격: 신규 Stage 2 YAML·Python·prompt·module을 만들기 위한 clean-slate 구현 전략 +> 구현 상태: 설계 및 정적 검증 단계. 이 문서 자체는 신규 자산의 구현·배포, live LLM 실행 또는 E2E 성능을 증명하지 않는다. + +## 0. 결론과 개정 결정 + +Stage 2는 다음 다섯 orchestration task만 둔다. + +1. `S2_00_stage1_ingress_normalize_and_bundle_compile` — deterministic Python +2. `S2_10_domain_relief_resolution_map` — LLM 법률판단, dependency wave별 제한 병렬 +3. `S2_20_canonical_relief_plan_reduce` — deterministic Python 및 고정 검색 orchestration +4. `S2_30_claim_group_draft_map` — LLM 청구취지·청구원인 공동 작성, group별 제한 병렬 +5. `S2_40_final_review_render_and_commit` — deterministic Python + +137종마다 별도 agent를 만들지 않는다. Stage 1이 산출한 사실·증거·법률효과 구조·signal을 바탕으로 법리 profile과 claim cluster를 활성화하고, 청구권·구제수단을 판단한 뒤에만 atomic claim을 137종 catalog의 정확한 `case_kind_id`에 결속한다. 그 ID는 청구취지작성규칙 선택과 요건사실론 검색범위를 제한하지만, 청구권의 존부를 새로 결정하지 않는다. + +v3는 다음 세 흐름을 하나로 통합한다. + +- **실체 판단**: Stage 1 슬롯 → dependency-aware S2_10 → 합법적 remedy frontier와 claim group +- **사건종류별 작성자료 선택**: C25 exact binding → 청구취지작성규칙 → C27~C29 검수된 요건사실 pack +- **소장 작성·검증**: S2_30 group draft → C45 문서 조립 → S2_40 provenance·요건·주문 정합성 검사 + +### 0.1 절대 목적함수 + +“원고의 최대 이익”은 명목 청구액의 극대화가 아니라, 현행 대한민국 법률과 법원의 법리 적용 방식 안에서 **승소·집행·경제적 회수 가능성을 함께 최대화하는 입증 가능한 청구 포트폴리오**다. + +우선순위는 다음과 같다. + +1. 적용시점 법령·경과규정과 공식 판례에 부합한다. +2. 당사자적격, 요건사실, 주장·증명책임, 증거와 소의 이익을 갖춘다. +3. 주위적·예비적·선택적·부대청구와 복수 책임자를 누락하지 않는다. +4. 원금·손해·이자·지연손해금·원상회복의 적법한 범위를 넓히되 중복회복을 금지한다. +5. 시효·제척기간·출소기간, 비용, 지연과 회수상한을 반영한다. + +기록에 없는 승소확률·회수확률·사실을 창작하지 않는다. 불확실한 청구는 삭제하지 않고 `CONDITIONAL` 또는 `UNRESOLVED`로 보존한다. 다만 clean pleading에는 조건문이나 미확정 숫자를 확정 사실처럼 쓰지 않는다. + +### 0.2 v2-1 평가·workflow 후보 수용표 + +| 입력 권고 | v3 결정 | 반영 위치 | +|---|---|---| +| M-1 Stage 1 요건·항변·증거 슬롯 연결 | 전면 수용 | §3, §5.2, V03~V05 | +| M-2 문서 수준 조립·소송비용·가집행 | 전면 수용 | §8, C45, V09~V11 | +| M-3 사해행위취소 특칙 4종 | 전면 수용하고 지정 자산 10종을 모두 migration source로 사용 | §9 | +| M-4 cluster 법률 의존성 | 전면 수용 | §4, §5.2 | +| M-5 readiness loophole | 전면 수용하되 draft 저장 금지로 확대하지 않음 | §10 | +| m-1~m-13 | 모두 규칙·authority·fixture·schema 계획에 반영 | §6, §8, §11~§13 | +| workflow change 1 | C25 exact case-kind/rule binding 수용 | §6 | +| workflow change 2 | A05, C27~C29, 권한분리와 retrieval receipt 수용 | §7 | +| change 2의 “S2_40 제한적 LLM 검토” | 기능 취지는 수용하되 구현은 deterministic 검사와 변호사 검토로 분리 | §5.5, §10 | + +--- + +## 1. clean-slate 경계와 source of truth + +### 1.1 허용 source + +신규 runtime이 읽을 수 있는 source of truth는 다음뿐이다. + +1. 현행 Stage 1 v.8 네 YAML의 실제 실행 산출물과 그 schema·hash·review 계약 +2. `YAML_Prompts/1. Stage_1/v.7/extension_research/ensemble_v2.md`의 registry·domain·signal·calculation 설계 +3. root `case_kinds.md`의 민사 본안 137종 catalog +4. A00가 공식 원문으로 확인하고 versioning한 법령·판례 authority registry +5. 이 문서에 따라 새로 배포할 `Default_Agent/Stage_2_Clean/v3/` 자산 +6. discrepancy/improvement 보고서에서 추출하고 사람이 승인한 gold fixture와 금지 결과 +7. §9의 지정된 사해행위취소 기존 자산 10종에서 provenance를 붙여 추출·교정한 규칙 + +### 1.2 금지 dependency + +`YAML_Prompts/2. Stage_2/v.0`~`v.3`의 YAML, 그 task명, 중간 파일명, loader 계약, prompt 또는 fallback을 신규 runtime에서 `include`, `import`, `ref`, `load`, oracle 또는 snapshot으로 사용하지 않는다. 이들은 역사 분석자료일 뿐이다. + +다음도 금지한다. + +- 사건명만으로 substantive profile을 활성화하는 것 +- 법정이율·제척기간·상한을 prompt 또는 Python에 숫자로 고정하는 것 +- semantic search가 사건종류나 청구권 존부를 결정하는 것 +- 검색 문헌을 사건의 사실·증거로 사용하는 것 +- 누락 자산에 가장 유사한 규칙문서를 fuzzy fallback으로 적용하는 것 +- LLM에게 hash, schema, 날짜·금액 산술, group reducer 또는 최종 commit을 맡기는 것 +- 구조검사 PASS를 배포·live 실행·변호사 승인으로 보고하는 것 + +### 1.3 현재 Stage 1 산출물만 사용 + +Stage 1에 다섯 번째 작업이나 별도의 production 전제 자산을 요구하지 않는다. 현재 읽을 수 있는 산출물을 대상으로 S2_00이 독립 검증·정규화한다. 상류 review flag는 신뢰도와 검토 우선순위로 승계하되 전체 실행이나 review-required draft 저장을 자동 차단하지 않는다. + +필수 소비면은 다음과 같다. + +| Stage 1 입력 | Stage 2 역할 | +|---|---| +| `BO.json` | 법률행위·당사자·목적물·증거·provenance의 BO 기준축 | +| `signals/signal_manifest.json` 및 그 canonical read set | 청구 단서·기한·계산·절차 signal | +| `legal_effect_structures.json` | domain/type/module/route/계산요청과 BO 역색인 | +| `Fact_Ledger_base.json` | fact ID와 BO·증거·법률효과·계산요청 연결 | +| `stage1_tmp/fact_ledger/fact_ledger_writer_report.json` | 원장 hash·conservation·계산 준비도·review 정보 | +| `quality_gates/stage1_part4_review_handoff.json` | 최종 review/block 채널 | +| `client_goal.json` | 원고 목표와 법적으로 지속 가능한 relief의 구분 | +| `routing/domain_activation_manifest.json` | expected runnable domains 및 계산·routing 정보 | +| Part 1~3 review handoff와 P1 digest 대상 | 상류 검토·무결성·손실 가능성 보존 | + +`Default_Agent/domains/_registry_index.json`은 현행 Stage 1 배포 참조 자산이지 신규 상류 production 산출물이 아니다. 제공되면 hash를 재검증하고, 없으면 handoff에 기록된 version/hash를 provenance로 승계하면서 warning을 남긴다. + +Stage 1 구조 필드의 schema 정본 locator도 ingress manifest에 봉인한다. + +| runtime schema path | 보존할 field locator | repository reference location | +|---|---|---| +| `Default_Agent/platform/schemas/fact_ledger_base.schema.json` | `/items/properties/calculation_requests/items/properties/missing_operands`, `/items/properties/calculation_requests/items/properties/law_version_refs` | `YAML_Prompts/1. Stage_1/v.7/extension_research/Default_Agent/platform/schemas/fact_ledger_base.schema.json` | +| `Default_Agent/platform/schemas/fact_ledger_candidate_bundle.schema.json` | `/properties/fact_ledger_candidate_bundle/properties/rows/items/properties/calculation_requests/items/properties/missing_operands`, `/properties/fact_ledger_candidate_bundle/properties/rows/items/properties/calculation_requests/items/properties/law_version_refs` | `YAML_Prompts/1. Stage_1/v.7/extension_research/Default_Agent/platform/schemas/fact_ledger_candidate_bundle.schema.json` | +| `Default_Agent/signals/_common/signal_item.schema.json` | `/properties/law_version_refs` | `YAML_Prompts/1. Stage_1/v.7/extension_research/Default_Agent/signals/_common/signal_item.schema.json` | + +S2_00은 배포된 runtime schema의 raw SHA-256을 직접 계산해 `stage1_input_manifest.json`에 기록한다. repository reference와 배포본이 다르면 배포본을 무조건 정본으로 추정하지 않고 expected/observed hash, producer handoff, 영향 field를 issue ledger에 남긴다. `missing_operands`나 `law_version_refs`를 YAML 본문에 없다는 이유로 삭제하지 않는다. + +--- + +## 2. 최적 workflow DAG + +### 2.1 ASCII overview + +```text +[Current Stage 1 v.8 outputs] [Frozen v3 registries/authority/corpus] + \ / + v v + +------------------------------------------------+ + | S2_00 deterministic ingress & normalization | + | hash/schema/join + slot crosswalk + issue sets | + | co-cluster rules + dependency DAG + slices | + +----------------------+-------------------------+ + | + dependency-free clusters / wave 0 + v + +------------------------------------------------+ + | S2_10 LLM legal resolution, wave by wave | + | claim options + remedy + slot/evidence status | + +----------------------+-------------------------+ + | + prior verdict slices feed next wave + v + +------------------------------------------------+ + | S2_20-A deterministic preliminary ReliefPlan | + | compatibility / duplicate recovery / calculus | + +----------------------+-------------------------+ + | + v + +------------------------------------------------+ + | C25 atomic claim exact binding | + | case_kind_id + subtype_id + relief-rule hash | + +-------------+--------------------+-------------+ + | | + | +--> [RELIEF_ONLY rule docs] + v + +------------------------------------------------+ + | C27 query plan -> C28 filtered hybrid search | + | -> C29 verified requirement-fact pack | + +----------------------+-------------------------+ + | + v + +------------------------------------------------+ + | S2_20-C deterministic final group slices | + | frozen plan + rules + pack + gaps + receipts | + +----------------------+-------------------------+ + | + v + +------------------------------------------------+ + | S2_30 LLM joint drafting per claim group | + | relief atoms + cause atoms + worknote atoms | + +----------------------+-------------------------+ + | + v + +------------------------------------------------+ + | C45 document assembler + S2_40 final validator | + | numbering/cost/provisional execution/dedupe | + | provenance/slot/math/authority/package seal | + +----------------------+-------------------------+ + | + +-------------+--------------+ + v v + [READY_FOR_LAWYER_FILING_DECISION] [LAWYER_REVIEW_REQUIRED] + \ / + +---- stored professional draft ------+ +``` + +### 2.2 PlantUML execution contract + +```plantuml +@startuml +title Stage 2 Clean v3 — five-task execution DAG +start +:S2_00 current Stage 1 ingress\n[deterministic Python]; +if (minimum readable case record exists?) then (yes) + :verify and normalize;\nbuild slot crosswalk, co-clusters, dependency DAG; +else (no) + :write ingress_status=TECHNICAL_INCOMPLETE\nand diagnostic; + stop +endif + +repeat + fork + :S2_10 cluster A in current wave\n[LLM -> immutable part]; + fork again + :S2_10 cluster B..n in current wave\n[LLM -> immutable parts]; + end fork + :deterministically reduce current-wave receipts; +repeat while (dependent wave remains?) is (yes) + +:S2_20-A reduce lawful remedy frontier; +:C25 exact atomic-claim case-kind/rule binding; +:C27 query planning; +:C28 exact-filtered Weaviate retrieval; +:C29 verified requirement-fact pack; +:S2_20-C freeze group slices and canonical ReliefPlan; + +fork + :S2_30 claim group A\n[LLM -> immutable draft part]; +fork again + :S2_30 claim group B..n\n[LLM -> immutable draft parts]; +end fork + +:C45 deterministic document assembly; +:S2_40 validate, render, seal, commit\n[deterministic Python]; +if (all READY predicates pass?) then (yes) + :READY_FOR_LAWYER_FILING_DECISION; +else (no) + :LAWYER_REVIEW_REQUIRED\nwith resumable issue packet; +endif +stop +@enduml +``` + +병렬 map은 공용 ledger나 telemetry에 직접 쓰지 않는다. 각 cluster/group ID별 immutable part만 생성하고, S2_20 또는 S2_40의 단일 writer가 ID 정렬 후 합친다. 이 규칙으로 data race와 비결정적 출력 순서를 없앤다. + +--- + +## 3. S2_00 입구·슬롯·review 보존 계약 + +### 3.1 보존 조인축 + +```text +fact_id + -> source_bo_id / BO_ID + -> LES structure_id / domain_id / type_id / route_id + -> signal_id / calculation_id / operand_state / law_version_refs + -> element_slot_id / opposing_fact_slot_id / defense_id + -> evidence_slot_status / evidence_ref / event_ref + -> review_key / client_goal +``` + +S2_00은 원문에서 이 연결을 다시 추론하지 않는다. Stage 1의 canonical ID를 보존하고 신규 ID는 namespace·source ref와 함께 추가한다. + +### 3.2 M-1 slot crosswalk + +각 활성 substantive profile은 다음을 가져야 한다. + +```yaml +profile_id: E-13 +stage1_slot_namespace: e13 +element_slots: [] +opposing_fact_slots: [] +defense_map: [] +slot_crosswalk_version: S2SLOT-v3 +``` + +S2_00은 Stage 1 registry/profile의 `element_slots`, `opposing_fact_slots`, `defense_map`과 signal의 `evidence_slot_status[]`를 `cluster_slice.json`에 그대로 포함한다. S2_10이 출력하는 `required_cause_elements[]`는 활성 profile의 slot ID 부분집합이어야 한다. LLM이 새로운 요건을 제안하려면 `proposed_new_slot=true`, 공식 authority ref와 검토 사유를 붙이고 기존 slot처럼 가장할 수 없다. + +각 slot은 다음 상태 중 하나다. + +- `SUPPORTED`: Stage 1 사실과 증거가 연결됨 +- `CONDITIONAL`: 특정 가정·추가사실이 성립할 때 충족 +- `UNRESOLVED`: 상충·누락으로 판단 보류 +- `NOT_APPLICABLE`: 선택된 법률 branch에서 비활성 + +항변은 `defense_id -> opposing_fact_slot_id -> rebuttal_slot_id -> evidence_ref`로 추적한다. 청구원인에 넣지 않을 항변도 worknote와 gap matrix에서 소거하지 않는다. + +### 3.3 무결성·보존식 + +S2_00은 raw hash, schema, transaction ID, BO↔LES↔Ledger join, signal manifest, writer report와 P1~P4 review 채널을 독립 재검사한다. Stage 1 수치를 복사하여 PASS하지 않는다. + +필수 보존식: + +1. `set(Fact_Ledger.source_bo_id) == set(BO.BO_ID)` +2. LES expected structures와 actual structures의 domain/type별 수가 일치 +3. attached + unattached BO·route·signal 수가 각 canonical total과 일치 +4. BO별 `domain_effects`가 LES 역조인 집합과 일치 +5. BO별 `calculation_requests`가 LES+SG-11 재조인과 일치 +6. `used_SG11 ∪ unused_SG11 == total_SG11`, 양 집합은 서로소 +7. `expected_review_keys == resolved ∪ conditional ∪ unresolved ∪ excluded` +8. 위 네 review disposition 집합의 모든 교집합은 공집합 +9. 모든 활성 profile의 slot ID가 crosswalk에 존재하고 중복되지 않음 + +P1 `blocks_final_drafting`와 P4 `blocked_review_items` 등 어휘 차이는 canonical review schema로 mapping하되 원문 key와 source locator를 보존한다. 불일치는 `issue_ledger.base.json`에 남기고 복구 가능한 join은 복구한다. 읽을 수 있는 자료로 분석을 계속하며, 물리적으로 읽거나 계산할 수 없는 영향범위만 `TECHNICAL_INCOMPLETE`다. + +--- + +## 4. claim cluster와 법률 dependency + +### 4.1 반드시 함께 묶을 관계 + +다음이 동일 채무·목적물·당사자관계 또는 동일 LES route를 공유하면 하나의 cluster로 co-cluster한다. + +| 관계 | 예시 | +|---|---| +| 주채무 ↔ 부종·중첩 책임 | 원채무·보증·연대보증·채무인수·상호속용 영업양수인 | +| 피보전채권 ↔ 보전청구 | 채권자취소권·채권자대위권과 그 선결 채권 | +| 물권·점유 ↔ 반환·사용이익 | 유치권·인도·차임 상당 부당이득 | +| 동일 급부의 변제·상계·충당 | 원금·이자·복수 채권과 변제충당 대상 | +| 주위적 청구 ↔ 법률상 대안 | 계약이행·해제 원상회복·손해배상 등 | + +Stage 1 domain registry의 `depends_on`은 지식 상속 관계이므로 runtime 청구순서로 직접 사용하지 않는다. + +### 4.2 잔여 dependency edge + +co-cluster할 수 없는 관계는 `cluster_plan.json`에 다음 edge로 기록한다. + +- `claim_precondition`: 선행 claim의 성립·범위가 전제 +- `accessory_of`: 주채무 등 주된 관계에 부종 +- `incompatible_with`: 동시에 인용될 수 없음 + +S2_10은 edge 없는 cluster를 wave 0에서 병렬 실행한다. 후속 wave에는 선행 verdict 전체가 아니라 `status`, `operatives`, `constraints`, `basis_refs`만 dynamic slice로 넣는다. cycle 또는 미해결 선행관계는 사실로 단정하지 않고 `CONDITIONAL` 전제 branch로 보존한다. + +### 4.3 claim option 관계 + +S2_10의 모든 option은 아래 필드를 가진다. + +```yaml +claim_option_id: CO-0001 +relation: primary # primary|alternative_subsidiary|alternative_selective|ancillary +incompatible_with: [] +precondition_refs: [] +same_underlying_recovery_group_id: RG-001 +decision: SUPPORTED # SUPPORTED|CONDITIONAL|UNRESOLVED|EXCLUDED +``` + +S2_20은 이 관계를 법률상 양립성, 중복회복, 당사자·급부 동일성, 공식 authority constraint로 검증한다. 자동 tie-break가 불가능하면 `DEFER_TO_LAWYER`로 남긴다. 민사소송법 제70조형 예비적·선택적 공동소송은 복수 피고 청구가 법률상 양립할 수 없는 경우에만 그 route를 허용하고, 그렇지 않으면 단순병합 또는 별소 대안을 제시한다. + +--- + +## 5. 다섯 task의 상세 명세 + +### 5.1 task/IO 표 + +| Task | 유형 | 핵심 작업 | 주요 입력 | 주요 출력 | +|---|---|---|---|---| +| `S2_00_stage1_ingress_normalize_and_bundle_compile` | deterministic Python | Stage 1 current outputs 검증·정규화, slot crosswalk, issue inventory, co-cluster와 dependency DAG, bundle/cache plan | §1.3 입력, v3 registry/schema | `intake_report.json`, `ingress_status.json`, `case_context.json`, `cluster_plan.json`, `cluster_slices/*.json`, `issue_ledger.base.json`, `bundle_plan.json` | +| `S2_10_domain_relief_resolution_map` | LLM | wave별 청구권·항변·구제수단·적법성·slot 상태 판단 | cluster slice, active profiles, common authority, prior-verdict slice | `domain_verdicts/.json`, immutable issue/assumption/usage parts | +| `S2_20_canonical_relief_plan_reduce` | deterministic Python + 고정 검색 orchestration | verdict reduce, 산술, 중복회복·양립성, C25 binding, C27~C29 retrieval/pack, group freeze | S2_10 parts, registries, Weaviate snapshot | `canonical_relief_plan.json`, `claim_groups.json`, bindings, calculation report, requirement packs, final group slices | +| `S2_30_claim_group_draft_map` | LLM | group별 청구취지·청구원인·worknote atom 공동 작성 | frozen group slice, selected rule docs, requirement pack | `draft_parts/.json`, immutable usage/issue parts | +| `S2_40_final_review_render_and_commit` | deterministic Python | C45 조립, V01~V14 검사, scope→run 기술상태 집계, readiness 산정, review packet과 package seal, 원자적 commit | plan, draft parts, manifests, receipts | `run_status.json`, clean pleading, worknotes, validation report, lawyer review packet, sealed package | + +### 5.2 S2_10 판단 범위 + +S2_10은 다음을 판단한다. + +- 청구권의 법적 근거, 성립요건, 소멸·저지 사유 +- 원고·피고의 당사자적격과 standing +- 주위적·예비적·선택적·부대청구 후보 +- 항변·재항변과 주장·증명책임 +- 청구취지 renderer에 필요한 operative type·object·party role +- 활성 slot별 `SUPPORTED/CONDITIONAL/UNRESOLVED/NOT_APPLICABLE` +- 시효·제척기간·출소기간의 event와 authority ID +- 계산 요청과 누락 operand + +S2_10은 사건종류 문서 전체, raw 요건사실론 corpus 또는 청구취지 rule 문서를 읽지 않는다. compact 137 classification index와 활성 profile만 읽고 `case_kind_candidate_ids[]`를 제안할 수 있다. 최종 exact binding은 C25가 수행한다. + +### 5.3 S2_20 reducer와 계산 + +S2_20-A는 다음 순서로 처리한다. + +1. cluster verdict schema·hash 검증 및 ID 정렬 reduce +2. claim precondition과 accessory 관계 적용 +3. 산술·날짜·이율·상한 계산 +4. 동일 급부의 중복회복 graph 구성 +5. 법률상 양립성·소송형태 검증 +6. non-dominated remedy frontier와 preliminary group 작성 +7. C25~C29 실행 후 final group slice 동결 + +Python 계산은 코드와 data를 분리한다. 알고리즘은 고정 `.py`, 법정수치·event rule·rounding·cap source는 versioned YAML/JSON data다. 미확정 operand에는 임의 default를 넣지 않고 범위·시나리오·missing operand를 출력한다. + +### 5.4 S2_30 공동 작성 + +S2_30은 claim group마다 한 번 호출하여 `relief_atoms[]`, `cause_atoms[]`, `worknote_atoms[]`를 함께 만든다. 이로써 주문과 청구원인의 청구권·당사자·금액·기간이 서로 어긋나는 것을 줄인다. + +권한 경계: + +- Stage 1 fact/evidence: 사건 사실을 주장할 수 있는 유일한 source +- S2_10/S2_20 frozen plan: 청구권·상대방·금액·관계의 유일한 source +- 청구취지작성규칙: `RELIEF_ONLY`; 주문 문형·branch·금지표현에만 사용 +- requirement-fact pack: `CAUSE_AND_ELEMENT_CHECK`; 요건·항변·증명책임·구조 점검에만 사용 +- authority excerpt: 법률명제의 source; 사건 사실을 만들 수 없음 + +`CONDITIONAL` atom은 clean relief에 조건절 문장으로 쓰지 않는다. 법적으로 특정 가능한 예비적 청구항으로 승격하거나, clean pleading 밖의 `[검토]` placeholder/worknote로만 남긴다. + +### 5.5 S2_40 검토 범위 + +S2_40은 deterministic 검사만 담당한다. 의미상 최종 법률 판단은 자격 있는 대한민국 변호사에게 남기며, 별도의 제3 LLM 호출을 필수 workflow로 만들지 않는다. 필요한 semantic quality는 S2_10·S2_30의 output contract, gold fixture, mutation test와 변호사 review로 검증한다. + +--- + +## 6. C25 사건종류·청구취지작성규칙 exact binding + +### 6.1 원칙 + +C25는 preliminary group 안의 각 atomic claim을 독립적으로 다음 signature로 분류한다. + +```text +operative_type + cause_type + object_type + party_role ++ registration_type + remedy_mode + liability_basis + subtype_features +``` + +S2_10 후보 ID와 signature를 137종 catalog의 controlled predicate에 exact match한 후, versioned registry에서 청구취지작성규칙의 exact path·version·SHA-256을 얻는다. group 전체에 사건종류 하나를 강제하지 않는다. + +### 6.2 배포 계약 + +```text +Default_Agent/Stage_2_Clean/v3/ + manifest/case_kind_catalog.v3.yml + manifest/case_kind_relief_rule_registry.v3.yml + claim_relief_rules//.md + rule_contracts//.yml + schemas/case_kind_rule_binding.schema.json + schemas/relief_rule_contract.schema.json +``` + +binding 최소 구조: + +```yaml +atomic_claim_id: AC-001 +case_kind_id: CK-001 # illustrative valid catalog ID; runtime uses exact CK-001..CK-137 +subtype_id: null +classification_basis_refs: [] +relief_rule: + rule_id: CRR-CK001-001 + exact_path: Default_Agent/Stage_2_Clean/v3/claim_relief_rules/... + version: 3.0.0 + sha256: "..." + scope: RELIEF_ONLY +binding_status: BOUND # BOUND|UNRESOLVED|CONFLICT +``` + +누락·중복·모호성은 해당 atomic claim을 `LAWYER_REVIEW_REQUIRED`로 보존한다. 유사 문서를 임의 적용하지 않는다. 137개 장문 rule 문서를 prompt에 모두 싣지 않고, C25가 선택한 문서만 S2_30에 제공한다. + +### 6.3 structured contract와 Markdown 분리 + +- raw Markdown: LLM이 읽는 문형·decision tree·금지규칙·최종 점검 context +- structured YAML contract: S2_20/S2_40이 검사하는 필수 slot, branch condition, companion relief, 금지 clause, 비용·가집행·별지 규칙 + +Markdown이 frozen ReliefPlan을 변경하거나 새 사실·금액·법률요건을 추가할 수 없다. structured contract와 Markdown hash는 한 registry row에서 함께 봉인한다. + +--- + +## 7. 요건사실론 Weaviate corpus와 C27~C29 + +### 7.1 A05 offline corpus release + +`A05_requirement_fact_corpus_release`는 사건별 runtime task가 아니라 배포 전 corpus release 작업이다. raw 문서를 heading/논증 단위로 chunking하고, 법률가 검수 후 frozen Weaviate snapshot과 manifest를 만든다. 현재 raw 예시 6종은 seed일 뿐 137종 production coverage를 증명하지 않는다. + +최소 metadata: + +```yaml +chunk_id: RF-... +source_doc_id: RFD-... +case_kind_id: CK-... +subtype_ids: [] +doctrine_role: element # element|defense|rebuttal|burden|evidence|procedure|relief_cause_link +element_ids: [] +party_role: null +authority_refs: [] +source_path: "..." +source_sha256: "..." +section_path: [] +char_start: 0 +char_end: 0 +as_of_date: "YYYY-MM-DD" +review_status: APPROVED +reviewed_at: "..." +corpus_snapshot_id: RFS-v3-... +``` + +### 7.2 C27 query planner + +C27은 C25가 확정한 `case_kind_id`와 필요 시 `subtype_id`를 사용해 다음 용도별 query를 만든다. + +1. 필수 요건 +2. 항변 +3. 재항변 +4. 주장·증명책임과 증거 역할 +5. 청구취지-청구원인 연결 + +복합 사건의 companion 검색은 registry의 `allowed_companion_case_kind_ids[]`에 명시된 ID만 허용한다. + +### 7.3 C28 filtered retriever + +C28은 exact metadata filter를 먼저 적용하고 그 범위 안에서 hybrid search와 선택적 reranking을 수행한다. 실행 전 `retrieval/retrieval_config.v3.yml`의 `retrieval_config_id`와 raw hash를 봉인한다. config는 최소 다음을 포함한다. + +```text +collection/tenant, corpus_snapshot_id, +hybrid alpha, vector/BM25 top_k, final top_k, +embedding model ID/version/digest, index type/build parameters, +reranker ID/version/digest, distance/score normalization, +seed support and seed value(or UNSUPPORTED), timeout/retry policy, +tie_break = (normalized_score DESC, chunk_uuid ASC) +``` + +receipt에는 위 config ref와 query, filters, method, raw pre-rerank result, score, UUID, chunk hash, 실행시각과 오류를 기록한다. ANN 또는 reranker가 완전 결정론을 보장하지 못해도 선택 결과를 receipt에 동결하며, C29 이후 검증·재실행은 live 검색이 아니라 raw receipt replay를 사용한다. timeout·부분결과에는 filter를 완화하거나 다른 사건종류로 fallback하지 않고 해당 group을 `LAWYER_REVIEW_REQUIRED`로 보존한다. semantic similarity로 exact filter를 완화하지 않는다. + +### 7.4 C29 requirement-fact pack + +C29는 다음을 deterministic하게 수행한다. + +1. `APPROVED` 상태·source hash·snapshot 및 `source_doc_id/section_path/char_start/char_end/as_of_date` 검증 +2. 중복·충돌 chunk 제거 및 최신 authority 우선 +3. doctrine role별 균형과 token budget 적용 +4. Stage 1 element/opposing/defense/evidence slot과 대조 +5. 충족·조건부·결손을 표시한 gap matrix 생성 + +출력 `requirement_fact_pack.json`은 `CAUSE_AND_ELEMENT_CHECK` 권한만 가진다. retrieval이 불완전하거나 충돌하면 해당 group을 review-required로 보존하고, raw corpus 전체나 다른 사건종류로 fallback하지 않는다. S2_30 이후에는 retrieval을 다시 실행하지 않고 frozen pack을 replay한다. + +검색된 본문은 신뢰되지 않은 **data**일 뿐 실행 명령이 아니다. chunk 안의 system/prompt 변경, tool 호출, 다른 문서 로드, filter 완화 또는 비밀정보 요구 문구는 모두 무시하고 `retrieval_receipt`에 injection indicator로 기록한다. C29는 허용된 metadata와 인용 대상 텍스트만 pack에 직렬화하며, embedded instruction이 serializer·tool·workflow control로 승격되지 않는지를 mutation fixture로 검사한다. + +### 7.5 S2_30 bundle 순서 + +```text +[P00 immutable system contract] +[P30 immutable drafting contract] +[P32 common authority excerpts] +--- breakpoint 1: cross-run/cross-group common prefix --- +[P31 renderer + selected relief rules + verified requirement-fact pack] + rule scope=RELIEF_ONLY; pack scope=CAUSE_AND_ELEMENT_CHECK +--- breakpoint 2: identical renderer/rule/pack cohort --- +[S30 frozen dynamic group slice + Stage 1 facts/evidence] +``` + +--- + +## 8. C45 소장 문서 조립 규칙 + +### 8.1 atom의 문서 위치 + +모든 draft atom은 다음 `output_section` 중 하나를 가져야 한다. + +```text +relief_main +relief_cost +relief_provisional_execution +cause_parties +cause_facts +cause_law +cause_conclusion +worknote_only +``` + +C45는 LLM이 생성한 자유 형식 문서를 그대로 연결하지 않고, 검증된 atom을 다음 순서로 조립한다. + +1. 청구취지 본안 항: 주위적·예비적·선택적 관계와 번호 부여 +2. 소송비용 부담 항 +3. 허용되는 atom만 참조한 가집행 항 +4. 청구원인의 당사자관계 +5. 공통 사실관계와 group별 사실관계 +6. 법률적 주장: 청구권별 요건→사실→증거→항변·재항변 +7. 결론 + +공통 당사자·계약·timeline은 한 번만 쓰고, group별 절에서는 `common_section_ref`로 참조한다. dedupe가 필수 사실이나 서로 다른 법률평가를 소거해서는 안 된다. + +### 8.2 청구취지 표현 + +- 동일 원채권의 원채무자·보증인·영업양수인 등은 `liability_group_id`를 보존하여 “공동하여”, “연대하여”, “각자” 등 법률관계에 맞는 표현만 선택한다. +- atomic claim별 피고, 목적물, 금액, 기산일, 종료일과 renderer branch는 frozen ReliefPlan과 exact match해야 한다. +- 예비적 청구는 주위적 청구와 양립 불가능한 범위 및 전제관계를 표시한다. +- `CONDITIONAL` 내용을 “만약 …이면 지급하라” 같은 불특정 조건문으로 렌더링하지 않는다. +- 별지는 property/object registry의 identity와 hash를 참조하며 본문이 별지 대상을 임의 요약·변경하지 않는다. + +### 8.3 소송비용·가집행 + +S2_20은 atom별로 다음을 계산한다. + +```text +provisional_execution_eligible = + proprietary_claim + AND performance_atom + AND NOT dependent_on_constitutive_judgment + AND renderer_id NOT IN {R03, R05, R06} +``` + +가집행 항은 eligible atom의 청구항 번호만 참조한다. 특히 사해행위 취소를 전제로 한 가액배상, 공유물분할의 가격배상처럼 형성판결에 종속하는 급부에는 가집행을 붙이지 않는다. 소송비용 항과 가집행 항은 사건종류 rule contract의 branch와 대조하되 LLM이 임의 생성하지 않는다. + +A00는 [민사소송법 제213조](https://www.law.go.kr/lsLinkCommonInfo.do?chrClsCd=010202&lsJoLnkSeq=1031931243)를 `AUTH-CPL-213`으로, [민사집행법 제263조](https://www.law.go.kr/LSW/lsSideInfoP.do?docCls=jo&joBrNo=00&joNo=0263&lsiSeq=268837&urlMode=lsScJoRltInfoR)를 `AUTH-CEA-263`으로 봉인한다. 모든 `provisional_execution_eligible` receipt는 제213조 authority ref를, R03 의사표시·등기 확정판결 종속 판단은 제263조 authority ref를 가져야 한다. fixture는 eligible R01 atom에는 전자를, R03 및 형성판결 종속 atom에는 가집행 부재와 그 배제 authority ref를 assert한다. + +### 8.4 평가서 MINOR 규칙 + +- **상법 제45조**: 영업양도 또는 광고 후 2년 경과에 따른 양도인의 제3자 채무 소멸 여부는 제척기간·직권조사·중단 불가 성질과 `case_filed_at`을 CE-03 fixture로 검증한다. +- **이율 전환**: 물품대금 등 fixture는 `complaint_service_date`를 이율 전환 event로 명시한다. +- **확인의 이익·보충성**: 동일 권리에 집행력 있는 이행청구가 가능하면 적극적 R05 확인 atom을 원칙적으로 대안으로 낮춘다. 채무부존재 같은 소극적 확인 또는 확인이 분쟁의 근본 해결에 가장 유효·적절한 경우는 예외 근거를 기록한다. +- **전면적 가격배상 공유물분할**: E-12/CE-11 profile은 `AUTH-SC-2023DA217916`인 [대법원 2023. 6. 29. 선고 2023다217916](https://www.law.go.kr/LSW/precInfoP.do?mode=0&precSeq=237047)을 authority 후보로 봉인한다. 특정 공유자에게 목적물을 귀속시키는 것이 상당하고 다른 공유자에게 지분가격을 취득시키는 것이 실질적 공평을 해치지 않는 특별한 사정, 그리고 사실심 변론종결일에 가까운 객관적 시장가격 산정을 fixture로 검증하기 전에는 `AUTHORITY_REFRESH_REQUIRED`다. +- **약정이자·대부계약 효력**: E-02/CE-01은 등록 여부 하나가 아니라 `lender_regulatory_status`, 영업성·반복성, 차주 유형, 계약일, 계약과 추심의 위법 trigger를 판정한다. 적용시점별 이자제한법과 [대부업법 제8조](https://www.law.go.kr/lsLinkCommonInfo.do?lsJoLnkSeq=1016051907)·[제8조의2](https://www.law.go.kr/lsLinkCommonInfo.do?chrClsCd=010202&lsJoLnkSeq=1028639157)·[제11조](https://www.law.go.kr/LSW/lsLinkCommonInfo.do?chrClsCd=010202&lsJoLnkSeq=1031456885)·[제15조](https://www.law.go.kr/LSW/lsLinkCommonInfo.do?chrClsCd=010202&lsJoLnkSeq=1031456747)의 versioned `rate_cap_law_value_id`와 효력 rule을 적용한다. 불법사금융업자의 이자약정 무효와 반사회적 불법대부계약의 원본·이자 효과를 단순 초과이자 무효 branch와 혼합하지 않는다. + +--- + +## 9. 사해행위취소 M-3 특칙과 기존 자산 10종의 의무적 활용 + +### 9.1 canonical 법리 계약 + +사해행위취소 atomic claim은 E-13, CE-01, CE-03, CE-10, R06과 필요한 R01/R03 companion을 함께 활성화한다. 최소 네 특칙은 다음과 같이 machine-readable하게 구현한다. + +#### ACTIO-01 가액배상 지연손해금 + +```yaml +obligation_accrual_event: fraudulent_transfer_judgment_finalized +delay_start_rule: next_day +rate_law_value_id: CIVIL_ACT_STATUTORY_RATE_AT_PERIOD +litigation_promotion_act_rate_applicable: false +``` + +가액배상의무는 취소판결 확정 시 성립하고 그 다음 날부터 이행지체가 된다. 적용 이율은 하드코딩하지 않고 민법 법정이율의 `law_value_id`를 조회한다. 소송촉진 등에 관한 특례법상 이율을 적용하지 않는다. authority 후보는 [대법원 2009. 1. 15. 선고 2007다61618](https://www.law.go.kr/LSW/precInfoP.do?precSeq=133423)과 이를 재확인한 **대법원 2019. 4. 11. 선고 2018다203715**이다. CE-01 receipt는 `start_event`, `rate_law_value_id`, 적용기간, authority ID와 계산 hash를 함께 보존한다. + +#### ACTIO-02 피고적격 + +```yaml +allowed_defendant_roles: [BENEFICIARY, SUBSEQUENT_TRANSFEREE] +debtor_role_for_actio_atom: NON_PARTY +``` + +사해행위취소 claim 자체는 수익자 또는 전득자를 상대로 하고 채무자를 피고로 삼지 않는다. 다만 같은 소송에서 채무자에 대한 별도의 피보전채권 이행청구가 병합되면 그 별도 atomic claim의 피고가 될 수 있다. 대법원 2004. 8. 30. 선고 2004다21923을 authority로 봉인한다. + +#### ACTIO-03 민법 제406조 제2항 제척기간 + +```yaml +deadline_rules: + - start_event: creditor_knew_avoidance_cause + duration_law_value_id: CIVIL_ACT_406_2_KNOWLEDGE_PERIOD + - start_event: fraudulent_act_date + duration_law_value_id: CIVIL_ACT_406_2_ACT_PERIOD +required_result: BOTH_WITHIN_PERIOD +``` + +현재 민법 제406조 제2항의 1년·5년 기간을 각각 계산한다. “취소원인을 안 날”은 단순 처분 인지일과 같다고 추정하지 않고 해당 법적 요건의 인식 사실을 별도 slot으로 둔다. 접수예정일·실제 소제기일 양쪽을 보존한다. + +#### ACTIO-04 가액배상 상한 + +```text +selected_relief_amount = min( + preserved_claim_cap_at_close, + joint_collateral_cap_at_close, + beneficiary_or_transferee_gain_cap +) +``` + +- `preserved_claim_cap_at_close`: 사실심 변론종결 시까지의 피보전채권 원금·이자·지연손해금 중 법적으로 포함되는 범위 +- `joint_collateral_cap_at_close`: 변론종결 시 목적물 가치에서 일반채권자의 공동담보가 아니었던 우선권·담보 부담 등을 법리에 따라 공제한 값 +- `beneficiary_or_transferee_gain_cap`: 해당 피고가 취득한 이익의 한도 + +세 값을 하나의 `beneficiary_gain_or_common_collateral_value` 필드로 합치지 않는다. 각 operand·기준시점·공제근거·authority·계산 receipt를 독립 보존한다. 원물반환과 가액배상 route도 먼저 확정한다. + +공식 근거는 다음을 A00가 기준일·원문 hash와 함께 봉인한다. + +- [민법 제406조 전체](https://law.go.kr/lsLinkCommonInfo.do?chrClsCd=010202&lsJoLnkSeq=900140979): 제1항 수익자·전득자와 제2항 1년·5년 기간 +- [대법원 2007다61618](https://www.law.go.kr/LSW/precInfoP.do?precSeq=133423): 판결 확정 다음 날, 민법상 법정이율 및 소송촉진법 이율 배제 +- [대법원 2004다21923](https://www.law.go.kr/LSW/precInfoP.do?precSeq=83422): 피고적격과 채무자 배제 +- [대법원 2018다203715](https://www.law.go.kr/LSW/precInfoP.do?precSeq=208412): 판결 확정 시 의무 성립, 변론종결 시 가액 및 전득자 이익 한도 +- [대법원 2023다249739](https://www.law.go.kr/LSW/precInfoP.do?precSeq=240311): 담보·우선권을 반영한 공동담보 범위 + +### 9.2 지정 자산 10종 migration matrix + +아래 파일은 모두 한 번 이상 rule·test·routing의 migration source로 사용한다. 신규 runtime은 원본 파일을 직접 읽지 않고, 법률가 검수와 official authority 대조를 거친 canonical v3 자산만 읽는다. + +| 기존 자산 | 추출·재사용할 내용 | 반드시 교정·폐기할 내용 | v3 canonical destination | +|---|---|---|---| +| `actio_pauliana_calc_v1.txt` | route 선분리(35~71), actual debt·사후부담 정책(154~179), 변론종결 가치·selected amount(181~229) | 자연어 실행엔진, legacy task/path, J/B 결합 2항 cap, 전면 저장차단 | `registry/calculations/CE-10_actio_insolvency_value.yml`, `runtime/calculators/actio_pauliana.py`, CE-10 fixtures | +| `actio_pauliana_calc_v3_mini_v1.json` | valuation·encumbrance·benefit operand 후보(93~168), actual-debt 우선(182~199) | legacy schema/module ID, `beneficiary_gain_or_common_collateral_value` 병합과 2항 cap | `schemas/actio_value_compensation.schema.json`, `registry/calculations/CE-10_*.yml` | +| `actio_pauliana_case_type_determination.csv` | 근저당권설정·경매배당·원상회복 불능·부담부 이전 route 후보(2~8) | BOM, 오래된 파일명, CSV free-text path lookup, route 모순 | `routing/actio_pauliana_route_registry.v3.yml` | +| `actio_pauliana_mortgage_actio_calc_both_v1.txt` | primary/auxiliary 분업(5~20), misroute·금액충돌 탐지(67~110) | legacy loader와 자유형 module 호출, 전면 저장차단 | `routing/actio_pauliana_mortgage_route.v3.yml`, route mutation fixtures | +| `actio_pauliana_mortgage_v1.txt` | target mortgage row, 실제 피담보채무, 말소·배당·remedy 분기(32~47, 154~219) | 법정수치 하드코딩, route 불명확, prompt형 계산, 2항 cap | `profiles/overlays/ACTIO-MORTGAGE.yml`, `runtime/calculators/actio_pauliana.py` | +| `mortgage_fraudulent_act_module_v1_mini_v1.json` | route gate, 담보채무/최고액, 경매·배당 field(34~65, 129~220) | 과도한 `defendant_scope`, 1년/5년 Boolean만 존재, old schema/ID | `profiles/overlays/ACTIO-MORTGAGE-CREATION.yml`, subtype fixtures | +| `부담부_부동산소유권이전_사해행위_가액배상_모듈.md` | 부담부 이전 route, actual debt, 사후부담, 이자 seed(95~203) | 사실 단정, 특정사건 금액, 2항 cap, 고정 `5_percent`, strict no-save | `profiles/overlays/ACTIO-ENCUMBERED-TRANSFER.yml`, approved context Markdown | +| `사해행위취소_가액배상_최종화게이트_모듈.md` | selected amount·cap/route/bundle 정합 검사(87~180) | 법률상 결손만으로 no-save하는 strict block, old C40 경로, M-3 검증 누락 | `validators/actio_value_compensation_invariants.yml`, V07/V09 tests | +| `사해행위취소_피보전채권번들_검증_모듈.md` | 복수채권·채권별 이자/변제·담보부족 trace(83~128) | 사해행위 당시 금액과 변론종결 cap 금액의 혼동, 특정사건 ID | `profiles/overlays/ACTIO-PRESERVED-CLAIM-BUNDLE.yml`, CE-10 fixtures | +| `사해행위취소_항변통합_모듈.md` | 충분담보·상계·선의의 당사자/시점 및 cap 비변경(111~160, 219~235) | 사건특정 결론, legacy source, 공식 authority·slot ID 미결속 | `profiles/overlays/ACTIO-DEFENSE-MAP.yml`, E-13 slot/defense crosswalk | + +### 9.3 migration acceptance gate + +각 원본에 대해 `source_path`, raw SHA-256, 추출 rule ID, official authority ref, 변경·폐기 사유, reviewer와 target asset hash를 `migration/actio_assets_v3_receipt.json`에 남긴다. 다음을 모두 충족해야 runtime registry에 승격한다. + +1. 지정 10개 source 모두 receipt row 1개 이상 +2. old Stage 2 YAML/task/path import 0개 +3. ACTIO-01~04 모두 profile·schema·validator·fixture assertion에 존재 +4. 고정 숫자 이율 대신 `law_value_id` +5. cap 세 항목의 별도 field와 `min` 계산 receipt +6. 채무자에게 별도 underlying claim이 없는 한 actio relief의 피고로 렌더링되지 않음 +7. 제척기간 두 clock 모두 계산되고 하나라도 불명확하면 review issue 생성 +8. 원물반환형, 일반 가액배상형, 부담부 소유권이전형, 근저당권설정형의 route mutation test 통과 +9. authority fixture에서 사건번호·선고일·official URL의 registry identity가 공식 원문과 exact match + +### 9.4 benchmark fixture + +`discrepancy_report_3.md` 사건은 특정 사건용 runtime 규칙이 아니라 일반 invariant의 회귀 fixture로만 사용한다. fixture는 최소 다음을 검증한다. + +- 복수 피보전채권 bundle을 한 채권으로 축소하지 않음 +- 사해행위 당시 담보, 사후 말소, 존속 담보, 변론종결 시 가치가 모두 계산 graph에 존재 +- amount는 세 cap 중 최솟값으로부터만 나옴 +- 피고는 해당 수익자이고 채무자는 actio atom의 non-party +- 취소 한도와 지급액이 동일한 selected cap을 참조 +- 지연손해금은 판결 확정 다음 날·민법상 versioned 법정이율 +- 가집행 항 없음 +- 명의신탁·충분담보·상계 항변과 재항변이 slot/evidence에 연결 + +--- + +## 10. 상태·readiness·저장 정책 + +### 10.1 법률상 불확실성과 기술 실패 분리 + +각 cluster/group은 `scope_technical_status: OK | TECHNICAL_REVIEW_REQUIRED | TECHNICAL_INCOMPLETE`를 가진다. `TECHNICAL_INCOMPLETE`에는 `error_code`, `failed_operation`, `affected_outputs[]`, `retry_receipt_ref`가 필수다. S2_40은 scope 상태를 다음처럼 run 상태로 집계한다. + +```text +run_technical_status = + TECHNICAL_INCOMPLETE if 일관된 final package를 만들 수 없음 + TECHNICAL_REVIEW_REQUIRED else if any scope is TECHNICAL_REVIEW_REQUIRED + CONSISTENT otherwise +``` + +일관된 package가 존재할 때는 다음 두 artifact 상태축도 갖는다. + +- `artifact_legal_readiness`: `READY_FOR_LAWYER_FILING_DECISION | LAWYER_REVIEW_REQUIRED` +- `artifact_technical_status`: `CONSISTENT | TECHNICAL_REVIEW_REQUIRED` + +`READY_FOR_LAWYER_FILING_DECISION`은 자동 제출허가가 아니라 자격 있는 대한민국 변호사가 완전한 기록을 보고 최종 제출판단을 할 수 있는 professional draft라는 뜻이다. 배포·E2E 상태는 별도 `deployment_validation_status`로 관리한다. + +법률적 미해결·missing operand·authority 충돌이 있어도 clean draft, 대안, worknote와 review packet을 저장한다. 오직 parse 불가, 필수 case identity 부재, 계산코드 예외, renderer가 일관된 byte를 만들 수 없음, atomic write 실패처럼 package 자체를 물리적으로 만들 수 없을 때만 `run_technical_status=TECHNICAL_INCOMPLETE`다. 이 경우 artifact 상태는 존재하지 않고 `run_status.json`과 복구 가능한 중간물만 저장한다. + +상태 producer와 retrieval 오류 mapping은 다음처럼 고정한다. + +| event | scope status | run/artifact 효과 | +|---|---|---| +| S2_00 입력검사 결과 | `OK | TECHNICAL_REVIEW_REQUIRED | TECHNICAL_INCOMPLETE` | S2_00은 immutable `ingress_status.json`만 작성; 최종 `run_status.json`은 쓰지 않음 | +| C28 timeout·부분결과·live 결과 재현성 부족 | `TECHNICAL_REVIEW_REQUIRED` | filter를 완화하지 않고 해당 group을 review-required로 저장; S2_40이 run을 `TECHNICAL_REVIEW_REQUIRED`로 집계 | +| retrieval receipt/hash replay mismatch | `TECHNICAL_REVIEW_REQUIRED`; 검증 가능한 pack을 만들 수 없으면 `TECHNICAL_INCOMPLETE` | 불일치 pack은 사용하지 않으며 진단·재시도 ref를 보존 | +| renderer·calculator 예외 또는 atomic write 실패로 일관 package 생성 불가 | `TECHNICAL_INCOMPLETE` | artifact 상태 없음; S2_40이 최종 `run_status.json`과 복구 가능한 중간물만 작성 | + +허용 조합은 `(run=CONSISTENT, artifact_technical=CONSISTENT, legal=READY|REVIEW)`, `(run=TECHNICAL_REVIEW_REQUIRED, artifact_technical=TECHNICAL_REVIEW_REQUIRED, legal=LAWYER_REVIEW_REQUIRED)`, `(run=TECHNICAL_INCOMPLETE, artifact 없음)`뿐이다. 따라서 기술 검토가 남은 artifact에 READY 라벨을 줄 수 없다. + +### 10.2 READY의 필요충분 predicate + +다음을 **모두** 충족할 때만 READY를 부여한다. + +1. `unresolved_keys == ∅` +2. 모든 P1 `blocks_final_drafting=true`와 P4 blocked item이 `RESOLVED(basis_refs≠∅)` 또는 근거 있는 `EXCLUDED` +3. 모든 `scope_technical_status=OK`이고 `run_technical_status=CONSISTENT` +4. `undrafted_claim_groups == ∅` +5. `DEFER_TO_LAWYER` decision 0개 +6. 모든 활성 coverage row의 `review_policy == AUTO_ELIGIBLE` +7. `AUTHORITY_REFRESH_REQUIRED == 0` +8. `E_AUTHORITY_VERSION_UNRESOLVED == 0` +9. V01~V14 전부 PASS +10. placeholder·conditional relief sentence 0개 +11. review-key 4집합 보존식 PASS +12. review packet hash가 package dependency seal에 결속 + +하나라도 실패하면 `LAWYER_REVIEW_REQUIRED`로 저장한다. 이는 strict fail-closed drafting 금지가 아니라 READY 라벨의 정확성 규칙이다. + +### 10.3 review packet + +`lawyer_review_packet.json`은 package보다 먼저 동결한다. 각 issue에는 다음을 넣는다. + +```text +issue_id, affected_claim/group, disposition, +source_refs, competing_positions, current_assumption, +deadline_effect, amount_effect, evidence_needed, +reversal_conditions, recommended_next_action +``` + +package는 packet의 path·schema·raw SHA-256을 dependency seal에 포함한다. 이후 packet 변조는 final commit root에서 탐지되어야 한다. + +--- + +## 11. 모듈·renderer·실행 자산 구조 + +### 11.1 canonical deployment root + +```text +Default_Agent/Stage_2_Clean/v3/ +``` + +`assets_for_stage_2_v.1.md`와 `yml_assets_classification_v.1.md`는 설계 입력·migration inventory일 뿐 v3 runtime manifest가 아니다. 실제 존재·완성·배포 여부는 v3 manifest와 파일 hash로 판정한다. + +### 11.2 workflow YAML 5개 + +| 파일 | entrypoint | 유형 | +|---|---|---| +| `workflows/S2_00_stage1_ingress_normalize_and_bundle_compile.yml` | `runtime/s2_00_ingress.py` | deterministic | +| `workflows/S2_10_domain_relief_resolution_map.yml` | LLM prompt serializer/runner | LLM 직접 추론 | +| `workflows/S2_20_canonical_relief_plan_reduce.yml` | `runtime/s2_20_reduce.py` | deterministic + search orchestration | +| `workflows/S2_30_claim_group_draft_map.yml` | LLM prompt serializer/runner | LLM 직접 추론 | +| `workflows/S2_40_final_review_render_and_commit.yml` | `runtime/s2_40_commit.py` | deterministic | + +YAML은 code를 담지 않는다. workflow YAML은 entrypoint, input/output schema, module IDs, retry·timeout·state policy를 선언하고 고정 `.py`가 실행한다. Python은 사건별 결과에 맞춰 새로 작성되지 않으며 입력 data에 따라 고정 branch를 선택한다. + +#### production 판정 manifest 3종 + +137종 readiness는 설명문이나 directory scan으로 판정하지 않고 다음 정본만 읽는다. + +| canonical path | 역할 | 필수 schema | +|---|---|---| +| `manifest/module_manifest.v3.json` | workflow, EC/E/X/CE/SL/ACTIO profile, renderer, rule, schema, calculator, validator의 physical path·raw hash·version·review·implementation status | `schemas/module_manifest.schema.json` | +| `manifest/case_kind_coverage.v3.json` | 137개 row별 renderer, rule Markdown+contract, corpus snapshot, substantive/crosscut/calculation/SL dependency의 exact file/hash/review/status 결속 | `schemas/case_kind_coverage.schema.json` | +| `manifest/stage2_release.v3.json` | 앞 두 manifest와 authority/corpus/config release hash를 묶고 subset/full release 판정을 기록하는 유일한 배포 oracle | `schemas/stage2_release.schema.json` | + +`stage2_release.v3.json`은 `release_scope_case_kind_ids[]`, `excluded_case_kind_ids[]`, `full_137_ready`, 앞의 두 manifest 및 authority/corpus/config release의 dependency hash와 gate별 receipt ref를 가진다. `full_137_ready=true`는 coverage row 137개가 정본 catalog와 exact equality이고, 모든 physical dependency가 `IMPLEMENTED_AND_VERIFIED`, 모든 row가 `READY`, 제외 0개일 때만 허용한다. + +### 11.3 profile family + +| family | 구성 | 역할·배포 위치 | +|---|---:|---| +| 계약총론·실체 법리 | EC-00 및 E-01~E-21 | 계약총론·계약·불법행위·등기·담보·사해행위·상속 등 `registry/substantive/` | +| residual·cross-cut | E-00 및 X1~X4 | 잔여 법률효과 탐지와 당사자/증거/절차·시점/항변 통합 `profiles/crosscut/` | +| 계산 | CE-01~CE-13 및 approved extension | 이자·충당·기한·평가·손해·가액배상 등 `registry/calculations/` | +| 특별법 overlay | SL-* | 자동차·산재·임대차·노동·IP·소비자 등 `profiles/special_law/` | +| renderer | R01~R06 | 금전, 인도, 의사표시·등기, 특별 비금전, 확인, 형성·불복 `renderers/` | +| 사해행위 overlay | ACTIO-* | §9의 route·피보전채권·항변·cap `profiles/overlays/` | + +실체 profile은 Stage 1 slot namespace를 보존한다. 특별법·계산 profile은 적용 단서, required authority와 law-value dependency를 명시한다. logical module 수와 실제 구현 파일 수를 혼동하지 않으며, registry row와 hash가 없는 profile은 `PLANNED`이지 구현 완료가 아니다. + +계산 profile 17종의 canonical manifest는 다음과 같다. 모두 S2_20이 `runtime/calculators/*.py`의 고정 executor로 해석하는 formula/scenario data이며 LLM worker가 아니다. 별도 상위 task인 `C30`은 두지 않는다. + +| ID | brief | relative path | initial status | +|---|---|---|---| +| `CE-01_interest_delay` | 원금·이자·지연손해금·기간분할 | `registry/calculations/CE-01_interest_delay.yml` | `NEW_REQUIRED` | +| `CE-02_allocation_setoff_balance` | 변제충당·상계·잔액 | `registry/calculations/CE-02_allocation_setoff_balance.yml` | `NEW_REQUIRED` | +| `CE-03_limitation_deadline` | 소멸시효·제척기간 timeline | `registry/calculations/CE-03_limitation_deadline.yml` | `NEW_REQUIRED` | +| `CE-04_valuation` | 사용이익·목적물 가치 | `registry/calculations/CE-04_valuation.yml` | `NEW_REQUIRED` | +| `CE-05_personal_injury` | 일실수입·치료비·과실상계 | `registry/calculations/CE-05_personal_injury.yml` | `NEW_REQUIRED` | +| `CE-06_construction_defect` | 기성·추가공사·하자 | `registry/calculations/CE-06_construction_defect.yml` | `NEW_REQUIRED` | +| `CE-07_lease_use_gain` | 임대차 공제·사용이익 | `registry/calculations/CE-07_lease_use_gain.yml` | `NEW_REQUIRED` | +| `CE-08_inheritance_reserved_share` | 상속분·유류분·temporal remedy | `registry/calculations/CE-08_inheritance_reserved_share.yml` | `NEW_REQUIRED` | +| `CE-09_wage_severance` | 임금·수당·퇴직금 | `registry/calculations/CE-09_wage_severance.yml` | `NEW_REQUIRED` | +| `CE-10_actio_insolvency_value` | 무자력·공동담보·가액배상 3항 cap | `registry/calculations/CE-10_actio_insolvency_value.yml` | `MIGRATION_REQUIRED` | +| `CE-11_distribution_share_division` | 배당·지분·분할 | `registry/calculations/CE-11_distribution_share_division.yml` | `NEW_REQUIRED` | +| `CE-12_insurance` | 보험가액·중복보험·공제 | `registry/calculations/CE-12_insurance.yml` | `NEW_REQUIRED` | +| `CE-13_court_value_cost` | 소가·인지·송달비용 | `registry/calculations/CE-13_court_value_cost.yml` | `NEW_REQUIRED` | +| `CE-R1_ip_damage` | 지식재산 손해액 | `registry/calculations/CE-R1_ip_damage.yml` | `NEW_REQUIRED` | +| `CE-R2_org_liquidation` | 회사·조합 청산·분배 | `registry/calculations/CE-R2_org_liquidation.yml` | `NEW_REQUIRED` | +| `CE-R3_transport_maritime` | 운송·해상 손해·책임제한 | `registry/calculations/CE-R3_transport_maritime.yml` | `NEW_REQUIRED` | +| `CE-R4_financial_instrument` | 금융상품·계좌·정산 | `registry/calculations/CE-R4_financial_instrument.yml` | `NEW_REQUIRED` | + +특별법 overlay 13종의 canonical manifest는 다음과 같다. + +| ID | brief | relative path | initial status | +|---|---|---|---| +| `SL-AUTO_motor_vehicle` | 자동차 손해 특칙 | `profiles/special_law/SL-AUTO_motor_vehicle.yml` | `NEW_REQUIRED` | +| `SL-INDUSTRIAL_ACCIDENT` | 산재·민사 조정 | `profiles/special_law/SL-INDUSTRIAL_ACCIDENT.yml` | `NEW_REQUIRED` | +| `SL-PRODUCT_LIABILITY` | 제조물책임 특칙 | `profiles/special_law/SL-PRODUCT_LIABILITY.yml` | `NEW_REQUIRED` | +| `SL-RESIDENTIAL_LEASE` | 주택임대차 특칙 | `profiles/special_law/SL-RESIDENTIAL_LEASE.yml` | `NEW_REQUIRED` | +| `SL-COMMERCIAL_LEASE` | 상가임대차 특칙 | `profiles/special_law/SL-COMMERCIAL_LEASE.yml` | `NEW_REQUIRED` | +| `SL-LABOR` | 노동관계 특별법 | `profiles/special_law/SL-LABOR.yml` | `NEW_REQUIRED` | +| `SL-STATE_LIABILITY` | 국가배상·공법경계 | `profiles/special_law/SL-STATE_LIABILITY.yml` | `NEW_REQUIRED` | +| `SL-IP-PATENT` | 특허·실용신안 | `profiles/special_law/SL-IP-PATENT.yml` | `NEW_REQUIRED` | +| `SL-IP-COPYRIGHT` | 저작권 | `profiles/special_law/SL-IP-COPYRIGHT.yml` | `NEW_REQUIRED` | +| `SL-IP-OTHER` | 상표·디자인·부정경쟁·영업비밀 | `profiles/special_law/SL-IP-OTHER.yml` | `NEW_REQUIRED` | +| `SL-MEDIA` | 언론중재·정정·반론 | `profiles/special_law/SL-MEDIA.yml` | `NEW_REQUIRED` | +| `SL-TRANSPORT_MARITIME` | 운송·해상 | `profiles/special_law/SL-TRANSPORT_MARITIME.yml` | `NEW_REQUIRED` | +| `SL-CONSUMER_CONTRACT` | 약관·할부·전자상거래 등 소비자계약 | `profiles/special_law/SL-CONSUMER_CONTRACT.yml` | `NEW_REQUIRED` | + +특별법 overlay는 사건명만으로 켜지지 않는다. 당사자 지위·거래목적·목적물 용도·거래방식과 적용 제외 단서를 먼저 판정하고, 불명확하면 `CONDITIONAL` 또는 `UNRESOLVED`다. + +### 11.4 6개 renderer와 137종 base coverage + +| ID | base 사건 수 | 역할 | +|---|---:|---| +| `R01_MONEY_PAYMENT` | 59 | 금전 지급 | +| `R02_DELIVERY_POSSESSION` | 6 | 물건·토지·건물 인도·점유 | +| `R03_DECLARATION_REGISTRY` | 30 | 의사표시·이전/말소/회복/경정 등기 | +| `R04_SPECIAL_NONMONEY_PERFORMANCE` | 4 | 방해제거·보도·허가협력 등 | +| `R05_DECLARATORY` | 29 | 채권·물권·지위·권리 확인 | +| `R06_CONSTITUTIVE_JUDGMENT_CHALLENGE` | 9 | 경계·분할·이의·재심·사해행위·결의취소 | +| 합계 | **137** | 명시 134 + generic category 3 | + +각 catalog row는 base renderer 정확히 하나, allowed companion, substantive profile, 계산·특별법 후보, review policy와 implementation status를 가진다. 복합 사건은 atomic relief별 renderer를 하나씩 정하고 conservation한 후 group에서 조립한다. + +`HUMAN_REVIEW_REQUIRED`는 법률가 검토정책이지 자산 누락 면제표가 아니다. “137종 전체 지원” release는 다음을 모두 만족해야 한다. + +1. `case_kind_id` 137/137에 exact 청구취지 Markdown과 structured rule contract가 있고 hash가 registry에 봉인 +2. 137/137에 법률가 승인된 requirement-fact corpus coverage와 current snapshot row가 존재 +3. 각 row의 renderer와 substantive/crosscut/calculation/special-law dependency가 `manifest/module_manifest.v3.json`의 실제 file/hash로 해석 +4. `implementation_status=READY` 137/137, `PLANNED|MIGRATION_REQUIRED|MISSING` 0 +5. silently unrouted, fuzzy fallback, 임의 companion search 0 + +개발·canary는 명시적 `release_scope_case_kind_ids[]`의 부분집합으로 할 수 있으나 `FULL_137_PRODUCTION_READY`라고 표시할 수 없다. 최종 full release에서는 scope 제외 0건이어야 한다. + +--- + +## 12. authority·법정수치·prompt caching + +### 12.1 A00 authority release + +authority 우선순위는 현행 법령·경과규정 → 대법원·헌법재판소 공식 원문 → 하급심 공식 원문 → 공신력 있는 보조자료다. 보조자료만 있는 proposition은 `UNVERIFIED`로 남긴다. + +각 authority row: + +```text +authority_id, proposition_id, court/statute, +case_number_or_article, decision/effective date, +temporal_scope, official_url, retrieved_at, +source_sha256, supersedes, status +``` + +법정이율·최고이자율·기간·최저임금 같은 변경 가능한 값은 `law_values/*.yml`에서 versioning하고 Python/prompt에 숫자로 고정하지 않는다. m-6의 공유물분할 전면적 가격배상, m-13 이자 상한, M-3 사해행위 근거는 Phase 0에서 공식 원문을 다시 조회·봉인한다. + +### 12.2 cache layout + +S2_10: + +```text +[P00 common system] +[P10 common legal decision contract] +[P12 common authority excerpts] +--- breakpoint 1 --- +[P11 active-profile static cohort] +--- breakpoint 2 --- +[S10 dynamic cluster slice + prior-verdict slice] +``` + +S2_30은 §7.5 순서를 따른다. breakpoint 1까지는 같은 prompt/authority release를 쓰는 모든 group이 run 내 재사용할 수 있다. breakpoint 2까지의 재사용은 동일 renderer, rule-doc hash, corpus snapshot과 selected chunk hash를 쓰는 cohort에서만 가능하다. group-specific rule/pack은 common authority 뒤에 두고, 사건별 fact/evidence는 항상 마지막 dynamic segment에 둔다. + +명시적 cache provider에서는 S2_10의 P12 끝·P11 끝과 S2_30의 P32 끝·P31 끝에 각각 두 breakpoint를 사용하고 provider의 최소 cacheable prefix 길이를 preflight한다. 같은 run에서 공통 authority는 P12/P32에, cluster/group 특유 authority는 S10/S30 dynamic slice에 둔다. 따라서 run 내 재사용은 공통 prefix 중심이고, profile/rule bundle 전체 재사용은 동일 cohort 또는 cross-case에서 발생한다. + +`bundle_plan.json`은 lane별 `ordered_segment_ids`, 각 segment의 canonical byte hash, `breakpoint_1_hash`, `breakpoint_2_hash`와 cohort key를 가진다. S2_10 cohort key는 model/effort, P00/P10/P12 hash, active-profile set/hash로 구성하고, S2_30 cohort key는 model/effort, P00/P30/P32 hash, renderer ID/hash, selected rule-doc+contract hash, corpus snapshot과 selected chunk hash로 구성한다. serializer가 생성한 실제 byte prefix의 hash가 plan과 다르면 cache를 쓰지 않고 diagnostic을 남긴다. + +정렬·공백·Unicode normalization·JSON serialization을 canonicalize하고 static asset raw bytes를 run 중 변경하지 않는다. cache miss를 줄이기 위해 137개 rule 문서나 raw corpus 전체를 주입하지 않는다. + +--- + +## 13. machine invariants와 regression suite + +### 13.1 V01~V14 + +| ID | invariant | +|---|---| +| V01 | ingress manifest의 모든 path/hash/schema가 실제 input과 일치 | +| V02 | BO↔LES↔Ledger↔signal conservation 및 canonical ID 보존 | +| V03 | 활성 profile의 필수 element slot이 cause atom 또는 명시적 conditional/unresolved gap에 존재 | +| V04 | defense_map의 defense/rebuttal/evidence ref가 보존 | +| V05 | claim dependency·precondition·incompatibility와 wave verdict가 모순 없음 | +| V06 | 모든 atomic claim에 exact C25 binding 또는 명시적 unresolved 상태 | +| V07 | 계산 값은 approved calculator receipt와 law-value refs에서만 유래 | +| V08 | 동일 recovery group의 중복회복 없음, 주위·예비·선택 관계 적법 | +| V09 | relief atom의 당사자·목적물·금액·기간이 frozen plan 및 rule contract와 일치 | +| V10 | 비용·가집행·번호·별지·청구원인 절 순서와 dedupe 규칙 충족 | +| V11 | 청구취지와 청구원인의 claim/party/amount/interest exact cross-match | +| V12 | 검색 chunk는 approved snapshot/hash·원문 locator·`as_of_date`를 가지며 사건 사실·증거로 사용되지 않고, embedded instruction은 untrusted data로서 실행되지 않음 | +| V13 | authority version·temporal scope·law-value dependency가 모두 해소 | +| V14 | review packet, validation report, clean pleading, worknotes와 package dependency seal이 결속 | + +### 13.2 필수 fixture family + +1. 물품대금 + 원채무자/상호속용 영업양수인 중첩 책임 +2. 담보·등기·부당이득 및 변제충당 +3. §9 사해행위취소·가액배상 +4. 유치권·인도·사용이익 +5. 임대차보증금·사용이익 +6. 유류분 신·구법 temporal branch +7. 공유물분할 방식과 확인의 이익 +8. 137종 catalog 전수 route/schema smoke fixture + +각 gold 값은 `source_locator`, `value_origin=EXPLICIT|DERIVED`, operand refs, calculator ID와 formula를 가진다. DERIVED 값은 operand나 identity가 바뀌면 무효화한다. + +평가서의 시간·이율 결함은 다음 named boundary fixture로 고정한다. + +| fixture ID | 핵심 입력 | 예상 결과 | +|---|---|---| +| `FX-COMM45-BEFORE` | `business_transfer_date=2024-07-05`, `case_filed_at=2026-07-04`, 양수인의 제42조 책임 branch | `transferor_liability_deadline=2026-07-05`, 양도인 책임 기간 내 | +| `FX-COMM45-AFTER` | 같은 양도일, `case_filed_at=2026-07-06` | 양도인 제3자 채무의 기간 경과 disposition; 양수인 책임과 혼동 금지 | +| `FX-MERCH-RATE-SWITCH` | 상사 물품대금, `complaint_service_date`, 적용기간별 official law-value snapshot | 송달일까지 `COMMERCIAL_STATUTORY_RATE_AT_PERIOD`, 다음 날부터 `LITIGATION_PROMOTION_RATE_AT_PERIOD`; receipt에 switch event·authority ref | +| `FX-INTEREST-CAP-NONBUSINESS-PRIVATE` | 계약일, 약정이율, `lender_regulatory_status=NONBUSINESS_PRIVATE`, 영업성·반복성 없음 | 적용시점 이자제한법 branch와 초과부분의 효력·충당·반환 disposition | +| `FX-LOAN-REGISTERED` | 계약일, 차주 유형, `lender_regulatory_status=REGISTERED_LOAN_BUSINESS` | 대부업법 제8조의 적용범위·versioned 상한·초과이자 무효/충당/반환 branch | +| `FX-LOAN-ILLEGAL-FINANCE` | 계약일, 사실상 대부업 영위, `lender_regulatory_status=ILLEGAL_PRIVATE_FINANCE`, 제8조의2 trigger 없음 | 적용시점 대부업법 제11조에 따른 이자약정 효력과 원본 존부를 각각 판정 | +| `FX-LOAN-ANTISOCIAL-CONTRACT` | 대부제공자 status, 계약일, 대부업법 제8조의2 각 trigger와 증거 | 적용시점 제8조의2의 계약 무효·원본/이자 청구 및 기지급액 반환 효과를 별도 disposition으로 기록 | +| `FX-LOAN-CREDIT-FINANCIAL` | 계약일, 차주 유형, `lender_regulatory_status=CREDIT_FINANCIAL_INSTITUTION` | 대부업법 제15조와 제8조 준용 branch, versioned 상한·연체이자·초과분 효과 | +| `FX-COOWN-FULL-PRICE` | 공유관계 발생원인·지분·이용상황·당사자 희망, 변론종결 근접 시가자료 | 2023다217916의 특별한 사정·실질적 공평 요건과 변론종결 시점 객관적 지분가격을 모두 충족할 때만 전면적 가격배상 route | + +상법 제45조 fixture의 `deadline` 당일 포함 여부 같은 법정기간 계산은 CE-03의 공식 기간계산 rule이 판정하며, 위 두 fixture는 경계 전·후를 사용해 그 쟁점을 우회하지 않고 안정적으로 분기한다. 이자·대부 fixture는 `lender_regulatory_status ∈ {NONBUSINESS_PRIVATE, REGISTERED_LOAN_BUSINESS, ILLEGAL_PRIVATE_FINANCE, CREDIT_FINANCIAL_INSTITUTION}`뿐 아니라 영업성·반복성, 차주 유형, 계약일과 제8조의2 trigger를 입력으로 받는다. 금리 숫자는 fixture 본문에 복제하지 않고 당시 `law_value_id` snapshot의 기대값과 hash를 assert한다. + +mutation tests: + +- 날짜를 제척기간 경계 전후로 이동 +- 피고 role을 채무자·수익자·전득자로 교체 +- 사후 말소 담보와 존속 담보를 교체 +- preserved claim, collateral, gain의 최솟값 순서를 변경 +- 소장 송달일과 판결 확정일을 교체 +- rule-doc hash·corpus snapshot·chunk hash 변조 +- retrieved chunk 본문에 system 변경·tool 호출·filter 완화 지시 삽입 +- Stage 1 slot 하나 또는 evidence ref 하나 제거 +- primary/alternative 관계와 dependency edge 역전 + +특정 fixture의 ID·금액·당사자를 일반 profile에 하드코딩하지 않는다. + +--- + +## 14. 전체 IO와 schema 구조 + +### 14.1 run IO tree + +```text +stage2_runs// +├── ingress/ +│ ├── stage1_input_manifest.json +│ ├── accepted_inputs/ # path/hash refs; 원본 복제 여부는 배포정책 +│ ├── intake_report.json +│ ├── technical_diagnostic.json +│ └── ingress_status.json +├── context/ +│ ├── case_context.json +│ ├── slot_crosswalk.json +│ ├── cluster_plan.json +│ ├── cluster_impact_manifest.json +│ ├── cluster_slices/.json +│ └── bundle_plan.json +├── map_s2_10/ +│ ├── domain_verdicts/.json +│ ├── issue_patches/.json +│ ├── assumption_parts/.json +│ └── usage_parts/.json +├── plan/ +│ ├── canonical_relief_plan.json +│ ├── claim_groups.json +│ ├── calculation_report.json +│ ├── plan_review_report.json +│ ├── case_kind_rule_bindings.json +│ ├── rule_context_packs/.json +│ ├── query_plans/.json +│ ├── retrieval_results/.json +│ ├── retrieval_receipts/.json +│ ├── requirement_fact_packs/.json +│ ├── element_evidence_gap/.json +│ └── group_slices/.json +├── map_s2_30/ +│ ├── draft_parts/.json +│ ├── issue_patches/.json +│ └── usage_parts/.json +├── review/ +│ ├── issue_ledger.base.json +│ ├── issue_ledger.json +│ ├── assumption_ledger.json +│ ├── lawyer_judgment_record.json +│ ├── worknotes/.json +│ └── llm_usage.jsonl +└── final/ + ├── run_status.json + ├── claim_relief.md + ├── claim_cause.md + ├── pleading_draft.md + ├── attorney_worknotes.json + ├── lawyer_review_packet.json + ├── stage2_final_validation_report.json + ├── stage2_package.json + └── stage2_final_commit_receipt.json +``` + +Map task는 자기 ID의 part만 쓴다. `S2_20`이 S2_10 parts와 plan ledger를, `S2_40`이 S2_30 parts·worknotes·telemetry를 단독 reduce한다. + +### 14.2 final seal 순서 + +1. `claim_relief.md`, `claim_cause.md`, `pleading_draft.md`, `attorney_worknotes.json`, `lawyer_review_packet.json` 동결 +2. 위 5종과 모든 dependency manifest를 검사한 `stage2_final_validation_report.json` 동결 +3. validation 결과와 scope 집계로 `run_status.json`을 S2_40이 단 한 번 작성·동결 +4. 1~3의 7종 path/schema/raw SHA-256과 상태축을 담은 `stage2_package.json` 동결 +5. 앞 8종을 정렬한 hash list와 root digest를 `stage2_final_commit_receipt.json`에 기록 +6. temporary directory에서 같은 filesystem의 `final/`로 원자적 rename + +commit receipt는 법률적 완전성을 선언하지 않고 byte 결속과 commit 성공만 증명한다. package는 review packet의 hash를 직접 포함하므로 packet이 final root에 전이적으로 봉인된다. + +### 14.3 필수 schema manifest + +| 영역 | 필수 schema | +|---|---| +| ingress/context | `stage1_input_manifest`, `intake_report`, `technical_diagnostic`, `ingress_status`, `run_status`, `case_context`, `slot_crosswalk`, `cluster_plan`, `cluster_impact_manifest`, `cluster_slice`, `bundle_plan` | +| S2_10 | `domain_verdict`, `claim_option`, `issue_patch`, `assumption_part`, `llm_usage_part` | +| plan | `canonical_relief_plan`, `claim_groups`, `calculation_report`, `plan_review_report`, `case_kind_rule_binding`, `rule_context_pack` | +| retrieval | `query_plan`, `retrieval_result`, `retrieval_receipt`, `requirement_fact_pack`, `element_evidence_gap` | +| S2_30 | `group_slice`, `draft_part`, `relief_atom`, `cause_atom`, `attorney_worknote` | +| review/final | `issue_ledger`, `assumption_ledger`, `lawyer_judgment_record`, reduced `llm_usage`, `attorney_worknotes` container, `lawyer_review_packet`, `final_validation_report`, `stage2_package`, `final_commit_receipt` | +| deployment | `module_manifest`, `case_kind_coverage`, `stage2_release` | +| strategy audit | `strategy_validation_receipt` | + +JSON/YAML structured output은 `schema_id`, `schema_version`, `producer_task`, `run_id`, `input_dependency_hashes`, `created_at`을 공통 envelope로 가진다. Markdown 3종은 이 envelope 대상이 아니며 `document_id`, `run_id`, `package_id`, `source_plan_hash`를 가진 YAML front matter 계약을 별도로 따른다. `llm_usage.jsonl`은 append하지 않고 part reduce 후 한 번 작성한다. + +전략 검증 receipt의 정본 경로는 `Case_02_Comparison_Research/evals/stage2_v3/round_.md`이고, sidecar JSON을 둘 경우 `strategy_validation_receipt.schema.json`을 따른다. receipt는 대상 path/hash/bytes/lines, validator, 기준 문서 hash, finding ID·등급·locator, disposition, 수정 locator와 수정본 hash를 포함한다. + +--- + +## 15. 구현 순서와 phase exit gate + +### Phase 0 — 정본·법리·migration lock + +- root 137종 catalog의 row identity와 source hash 승인 +- A00 authority/law-value registry 생성 및 M-2(민사소송법 제213조·민사집행법 제263조), M-3, m-1, m-3, m-6, m-12, m-13 공식 원문 봉인 +- 사해행위 기존 자산 10종 migration receipt 작성 +- `manifest/module_manifest.v3.json`, `manifest/case_kind_coverage.v3.json`, `manifest/stage2_release.v3.json` schema·naming·producer lock + +Exit: catalog 137 row exact, 지정 10개 source receipt 100%, old YAML runtime edge 0, M-3 authority·contract review PASS. + +### Phase 1 — deterministic spine + +- S2_00, S2_20 reducer/C25/C27~C29 orchestration, C45, S2_40 구현 +- fixed Python unit/property tests +- schema validation, ID conservation, atomic writer와 package seal + +Exit: LLM을 mock으로 대체한 E2E에서 V01~V14, race test, replay test PASS. + +### Phase 2 — LLM contracts와 우선 법리 + +- S2_10·S2_30 prompt, serializer, output repair 1회 경계 구현 +- E-02/03/04/08/09/10/11/13/15, CE-01/02/03/04/07/08/10/11, X1~X4 우선 +- R01~R06와 discrepancy gold fixtures 구현 + +Exit: benchmark 사건에서 금지결과 0, provenance/slot coverage PASS, 변호사 blind review 기준 충족. + +### Phase 3 — 137종 rule/corpus coverage + +- case-kind별 청구취지 rule Markdown+structured contract 작성·검수 +- 요건사실론 corpus를 case kind/subtype별 확장·검수하고 snapshot release +- E-05~07, E-12, E-14, E-16~21, 나머지 CE와 SL overlay 확장 + +Exit: 개발대상 row마다 exact rule binding과 승인 corpus가 있고 silently unrouted 0. 부분 release는 `release_scope_case_kind_ids[]`와 제외 gap을 공개하며 full-137 완료로 보고하지 않음. + +### Phase 4 — regression·성능·운영 검증 + +- gold/mutation/metamorphic fixture 전수 실행 +- current Stage 1 실제 산출물 contract test +- 모델·effort·tool lane별 정확성·비용·cache hit 평가 +- adversarial prompt/context contamination 및 retrieval replay test + +Exit: 법률가 승인 threshold, deterministic reproducibility, token/cache 목표, 보안·감사 기준 PASS. + +### Phase 5 — 배포 + +- immutable v3 asset release와 loader binding +- canary run, rollback manifest, monitoring +- 자격 있는 변호사의 filing decision workflow 연결 + +Full-137 production exit: §11.4의 5개 gate 전부 PASS하고 `manifest/stage2_release.v3.json`에서 `release_scope_case_kind_ids`가 137개 정본 ID와 exact equality, `excluded_case_kind_ids=[]`, `full_137_ready=true`여야 한다. Phase 5 loader는 이 manifest만 full-release oracle로 읽으며 directory 존재나 문서 선언으로 대체하지 않는다. 그렇지 않으면 승인된 subset canary일 뿐이다. + +이전 phase의 설계 PASS를 다음 phase의 구현·live PASS로 표현하지 않는다. + +--- + +## 16. 요구사항 추적표 + +| 요구/결함 | 구현 계약 | 검증 | +|---|---|---| +| Stage 1 현재 outputs 직접 소비 | §1.3, §3 | V01~V04, current-output contract test | +| 137종 coverage | §6, §11.4 | catalog row 137, unrouted 0, C25 전수 fixture | +| 모범답안 discrepancy 해소 | §8, §9, §13 | gold + mutation fixtures | +| 최소 workflow·token economy | 5 task, §12.2 | task count=5, prompt call count, cache telemetry | +| M-1 slots | §3.2 | V03/V04 | +| M-2 document assembly | §8 | V09~V11 | +| M-3 actio 4 rules/10 assets | §9 | migration gate + actio fixture | +| M-4 dependency | §4 | V05, cycle/wave mutation | +| M-5 readiness | §10.2 | predicate mutation test | +| m-1/m-8/m-13 rates/deadlines/대부계약 효력 | §8.4, §12 | boundary fixtures, lender status matrix, law-value refs | +| m-2/m-3/m-4 claim relation | §4.3, §8.2 | relation/renderer mutation | +| m-5 caching | §12.2 | breakpoint/cache cohort telemetry | +| m-6/m-12 special admissibility | §8.4 | authority gate + fixture | +| m-7 reproducible validation | §17 | draft/final hash와 round receipt | +| m-9 schema source paths | §1.3, §14.3 | schema manifest path/hash | +| m-10 four-set conservation | §3.3, §10 | V02/readiness test | +| m-11 missing schemas | §14.3 | every emitted path has schema | +| workflow change 1 | §6 | exact binding/no fuzzy fallback | +| workflow change 2 | §7 | filter/receipt/pack/replay tests | + +--- + +## 17. 검증·잔여 경계 + +### 17.1 독립 검증 계획 + +v3 초안을 동결한 뒤 독립 sub-agent가 다음을 두 차례 검증한다. + +1. **1차**: eval M-1~M-5·m-1~m-13, change 1/2, 10개 사해행위 source, clean-slate와 IO 정합성을 traceability 방식으로 감사 +2. 1차 finding만 incremental revision +3. **2차**: 수정본의 finding closure, 회귀·신규 모순·금지 dependency·상태 과장 여부를 재감사 +4. 2차 finding만 incremental revision하고 최종 hash·receipt 기록 + +각 회차 receipt는 `Case_02_Comparison_Research/evals/stage2_v3/round_1.md`, `round_2.md`에 immutable하게 보존한다. 검증 대상 SHA-256, bytes/lines, validator, 기준 문서 hash, finding ID/등급/locator, disposition, 수정 locator와 수정본 SHA-256을 기록하고, structured sidecar를 만들면 §14.3의 `strategy_validation_receipt.schema.json`을 따른다. 검증자가 전략 파일을 직접 수정하지 않는다. + +### 17.2 현재 남아 있는 구현 경계 + +- `Default_Agent/Stage_2_Clean/v3/`의 파일은 이 전략에 의해 **계획**되었을 뿐 아직 구현·배포되었다고 볼 수 없다. +- 137종 청구취지 rule과 요건사실 corpus의 production coverage는 별도 작성·법률가 검수·hash 봉인이 필요하다. +- §9 기존 자산 10종은 migration source이며 runtime-ready authority가 아니다. +- Weaviate snapshot, retrieval quality, prompt cache hit, live model 품질과 E2E 산출물은 실행 전에는 검증되지 않았다. +- 공식 authority는 적용시점마다 freshness check가 필요하다. 법령·판례가 변경되면 cached legal value와 proposition을 재봉인한다. +- 최종 산출물은 자격 있는 대한민국 변호사의 완전한 기록 검토와 제출 결정을 대체하지 않는다. + +### 17.3 v3 완료 기준 + +이 전략 문서의 설계 완료는 다음을 뜻한다. + +- 단일 5-task DAG, task 유형, IO, module·schema·renderer 계약이 서로 일치 +- 평가서의 필수 개선과 두 workflow 후보가 추적 가능하게 반영 +- 사해행위 지정 자산 10종의 사용처와 폐기 경계가 모두 명시 +- old Stage 2 YAML 지시를 신규 runtime이 읽는 dependency가 없음 +- 설계·구현·배포·live 검증의 상태가 분리됨 + +그 이상의 production 준비 완료는 Phase 0~5 exit gate를 실제로 통과한 뒤에만 선언한다. diff --git a/Case_02_Comparison_Research/evals/stage2_v3/round_1.md b/Case_02_Comparison_Research/evals/stage2_v3/round_1.md new file mode 100644 index 00000000..afc2497a --- /dev/null +++ b/Case_02_Comparison_Research/evals/stage2_v3/round_1.md @@ -0,0 +1,44 @@ +# Stage 2 v3 전략 독립 검증 기록 — Round 1 + +## 1. 검증 식별정보 + +| 항목 | 값 | +|---|---| +| 검증 대상 | `YAML_Prompts/2. Stage_2/stage_2_optimal_update_strategy_v.3.md` | +| 검증 전 SHA-256 | `b89b2f277466967efa21cc65610df3602ea44ceb17379a325afff03ca79cf3b1` | +| 검증 전 크기 | 58,320 bytes / 1,055 lines | +| 독립 검증자 | `/root/validate_v3_round1` | +| 검증 방식 | 대상 파일 비수정, finding·locator·개정 요구만 반환 | +| 기준 자료 | v2-1 전략, v2-1 평가보고서, workflow change 1·2, 사용자 지정 사해행위취소 자산 10종, 루트 규칙과 Stage 2 MEMORY | +| 최초 판정 | `REVISE` | + +검증 결과 본문의 finding 표에는 `MAJOR` 3건과 `MINOR` 10건, 합계 13건이 열거되었다. 검증자 요약문에 적힌 `MINOR 8`은 표의 실제 행 수와 불일치하므로 이 기록에서는 표를 정본으로 삼아 `MINOR 10`으로 정규화한다. + +## 2. Finding 처분표 + +| ID | 등급 | 검증 finding | 처분 | 수정 위치·내용 | +|---|---|---|---|---| +| R1 | MAJOR | `2018다203715` 선고일 오류 | `APPLIED` | §9.1 ACTIO-01에서 `2019. 4. 11.`로 바로잡고 공식 판례 식별자를 유지 | +| R2 | MAJOR | scope 단위 기술상태와 run 집계 규칙 부재 | `APPLIED` | §2, §5, §10, §14에 `scope_technical_status`, `run_technical_status`, `run_status.json`과 집계식 추가 | +| R3 | MAJOR | 137종 production gate가 선언적이며 계산 profile·소멸시효 module 완전성 불명확 | `APPLIED` | §11.3~§11.4에 CE-01~CE-13, CE-R1~R4, SL-01~SL-13 물리 자산·역할·상태 및 137/137 exact rule/corpus/READY gate 추가 | +| R4 | MINOR | Stage 1 source schema 경로·필드 locator 미기재 | `APPLIED` | §1.3에 현행 Stage 1 schema의 정본 경로와 소비 필드 명시 | +| R5 | MINOR | C28 검색 파라미터·동률해소·재현 receipt가 부족 | `APPLIED` | §7.3에 봉인된 retrieval config, exact filter, hybrid/rerank 값, tie-break, raw receipt replay 계약 추가 | +| R6 | MINOR | S2_30 prompt caching의 두 breakpoint 및 권위자료 배치가 모호 | `APPLIED` | §7.5·§12.2에서 common prefix와 renderer/rule/pack cohort의 두 breakpoint 및 dynamic tail 순서 확정 | +| R7 | MINOR | `rate_source`와 법정수치 ID 용어 불일치 | `APPLIED` | §9.1 ACTIO-01 및 계산 receipt를 `rate_law_value_id`로 통일 | +| R8 | MINOR | 민법 제406조 인용 링크가 조문 전체를 직접 가리키지 않음 | `APPLIED` | §9.1 ACTIO-03에서 국가법령정보센터 제406조 전체 링크 사용 | +| R9 | MINOR | 민사소송법 제213조·민사집행법 제263조의 권위자료와 fixture 부족 | `APPLIED` | §8.3·§12.1·§13.2에 공식 조문 ID·링크와 판결종류/집행가능성 fixture 연결 | +| R10 | MINOR | m-1·m-8·m-13 경계 fixture가 이름과 oracle 수준으로 고정되지 않음 | `APPLIED` | §13.2에 `FX-COMM45-BEFORE/AFTER`, `FX-MERCH-RATE-SWITCH`, `FX-INTEREST-CAP-NONLENDER/LENDER` 추가 | +| R11 | MINOR | 공통 envelope schema와 Markdown 산출물 경계 불명확 | `APPLIED` | §14.3에 필수 schema manifest를 확장하고 JSON/YAML envelope와 Markdown front matter 계약을 분리 | +| R12 | MINOR | 근저당권 route의 migration 목적지 불일치 | `APPLIED` | §9.2를 `routing/actio_pauliana_mortgage_route.v3.yml`로 통일 | +| R13 | MINOR | 검증 receipt 정본 경로·필드 계약 부재 | `APPLIED` | §14.3·§17.1에 `evals/stage2_v3/round_.md`와 receipt 필수 필드·sidecar schema 계약 추가 | + +## 3. 증분 개정 결과 + +| 항목 | 값 | +|---|---| +| 수정 후 SHA-256 | `978ff8864c927a39feb5fb2bc8ee06a970f6ad88fb55f66e3b5a610f90fdaead` | +| 수정 후 크기 | 70,843 bytes / 1,159 lines | +| 미처분 finding | 0 | +| 회차 결론 | Round 1 finding 전부 반영; Round 2 독립 폐쇄 검증 필요 | + +이 회차는 전략 문서의 정적 설계 검증이다. YAML/Python 구현, Weaviate 배포, live LLM 호출, 137종 법률가 승인 또는 E2E 실행을 입증하지 않는다. diff --git a/Case_02_Comparison_Research/evals/stage2_v3/round_2.md b/Case_02_Comparison_Research/evals/stage2_v3/round_2.md new file mode 100644 index 00000000..3f4bee54 --- /dev/null +++ b/Case_02_Comparison_Research/evals/stage2_v3/round_2.md @@ -0,0 +1,47 @@ +# Stage 2 v3 전략 독립 검증 기록 — Round 2 + +## 1. 검증 식별정보 + +| 항목 | 값 | +|---|---| +| 검증 대상 | `YAML_Prompts/2. Stage_2/stage_2_optimal_update_strategy_v.3.md` | +| 검증 전 SHA-256 | `978ff8864c927a39feb5fb2bc8ee06a970f6ad88fb55f66e3b5a610f90fdaead` | +| 검증 전 크기 | 70,843 bytes / 1,159 lines | +| 독립 검증자 | `/root/validate_v3_round2` | +| 검증 방식 | Round 1 폐쇄 및 신규 법률·machine-contract 모순 검사; 대상 파일 비수정 | +| 최초 판정 | `REVISE` | +| finding 집계 | `CRITICAL 0 / MAJOR 2 / MINOR 6` | + +## 2. Finding 처분표 + +| ID | 등급 | 검증 finding | 처분 | 수정 위치·내용 | +|---|---|---|---|---| +| R2-F01 | MAJOR | 137종 release를 판정할 physical manifest·schema 부재, renderer 누락, `EC-00/E-00` family 오분류 | `APPLIED` | §11.2~§11.4·§14.3·Phase 0/5에 `module_manifest.v3.json`, `case_kind_coverage.v3.json`, `stage2_release.v3.json`과 schema·유일 release-oracle 계약을 추가하고 family와 renderer 결속 교정 | +| R2-F02 | MAJOR | m-13이 `registered_lender` 2분법이라 2025년 개정 대부업법상 불법사금융업자·반사회적 불법대부계약 효력을 오판 | `APPLIED` | §8.4·§13.2에 lender 4상태, 영업성·차주·계약일·위법 trigger, 대부업법 제8조·제8조의2·제11조·제15조별 fixture와 official link 추가 | +| R2-F03 | MINOR | S2_00/S2_40의 `run_status.json` 이중 producer와 retrieval 오류의 기술상태 mapping 부재 | `APPLIED` | §2·§5·§10·§14에서 S2_00 `ingress_status.json`, S2_40 final `run_status.json`으로 분리하고 retrieval/error 상태표·허용 조합·single-writer seal 추가 | +| R2-F04 | MINOR | Stage 1 schema locator가 root array와 candidate bundle 구조를 정확히 반영하지 않음 | `APPLIED` | §1.3에 실물 schema로 확인한 완전한 JSON Pointer 5개를 기재 | +| R2-F05 | MINOR | retrieval chunk의 원문 위치·적용시점·party/procedure metadata와 prompt-injection 방어 부재 | `APPLIED` | §7·V12·mutation suite에 `source_doc_id`, section/char/as-of/party/procedure 필드, untrusted-data 규칙과 injection fixture 추가 | +| R2-F06 | MINOR | 전면적 가격배상 공유물분할 authority 후보 미특정 | `APPLIED` | §8.4·§13.2에 `AUTH-SC-2023DA217916`, 대법원 2023다217916 공식 링크, 특별한 사정·실질적 공평·변론종결 근접 시가 fixture 추가 | +| R2-F07 | MINOR | 정의되지 않은 계산 executor `C30` | `APPLIED` | §11.3에서 별도 C30을 폐기하고 S2_20이 `runtime/calculators/*.py` 고정 executor로 CE data를 해석하도록 교정 | +| R2-F08 | MINOR | P12/P32 등 cache segment와 실제 breakpoint byte 계약 미정의 | `APPLIED` | §7.5·§12.2에 P00/P10/P11/P12/S10, P00/P30/P31/P32/S30 순서와 breakpoint hash·cohort key·serializer byte 검사를 명시 | + +추가 정적검사에서 예시 binding의 비정본 ID `CK-000`을 발견하여 유효 예시 `CK-001`과 `CRR-CK001-001`로 교정했다. 이는 새 workflow를 추가하지 않는 문서 정합성 cleanup이다. + +## 3. Round 1 폐쇄 재판정 + +Round 2가 `PARTIAL`로 남긴 Round 1의 R2·R3·R4·R6·R10은 각각 R2-F03·F01·F04·F08·F02 수정으로 폐쇄되었다. 나머지 R1·R5·R7·R8·R9·R11·R12·R13은 Round 2 검증에서 `PASS`였다. 따라서 Round 1 R1~R13과 Round 2 R2-F01~F08의 미처분 finding은 0건이다. + +## 4. 증분 개정 결과 + +| 항목 | 값 | +|---|---| +| 수정 후 SHA-256 | `fd2b39fbdf51e3f7123bcb377a1bb1f0a11549861bab93dc1aa1ea0213073347` | +| 수정 후 크기 | 78,312 bytes / 1,201 lines | +| 미처분 finding | 0 | +| 회차 결론 | 지정된 두 번째 검증-개정 회차 종료; 최종 정적검사 대상으로 고정 | + +법률 재확인은 [현행 대부업법](https://law.go.kr/LSW/lsInfoP.do?ancYnChk=0&chrClsCd=010202&efYd=20260102&lsiSeq=277259&urlMode=lsInfoP), [제8조의2](https://www.law.go.kr/lsLinkCommonInfo.do?chrClsCd=010202&lsJoLnkSeq=1028639157), [제11조](https://www.law.go.kr/LSW/lsLinkCommonInfo.do?chrClsCd=010202&lsJoLnkSeq=1031456885), [대법원 2023다217916](https://www.law.go.kr/LSW/precInfoP.do?mode=0&precSeq=237047) 공식 원문을 기준으로 했다. + +이 기록 역시 전략 문서의 정적 설계 검증이다. 신규 YAML/Python 구현, Weaviate 배포, live LLM/E2E 실행 또는 137종 법률가 승인을 입증하지 않는다. + +커밋 직전 Markdown 의미를 바꾸지 않는 trailing-whitespace 7 bytes를 제거하고 위 최종 hash·크기를 재계산했다. diff --git a/Case_02_Comparison_Research/plans/stage2-v3-strategy.md b/Case_02_Comparison_Research/plans/stage2-v3-strategy.md new file mode 100644 index 00000000..c9befc8e --- /dev/null +++ b/Case_02_Comparison_Research/plans/stage2-v3-strategy.md @@ -0,0 +1,113 @@ +# Stage 2 최적 개정 전략 v3 작성 + +## Objective + +`stage_2_optimal_update_strategy_v.2-1.md`를 기준으로 평가보고서의 개선사항, `v.2-1_workflow_change_2.md`의 workflow, `change_1`의 사건종류별 청구취지 규칙 결합, 사해행위취소 기존 자산 10개의 유효 법리·계산 계약을 통합한 clean-slate `stage_2_optimal_update_strategy_v.3.md`를 작성한다. + +## Deliverables + +- `YAML_Prompts/2. Stage_2/stage_2_optimal_update_strategy_v.3.md` +- sub-agent 검증 2회 및 각 회차 후 incremental revision +- `YAML_Prompts/2. Stage_2/MEMORY.md` 압축 요약 + +## Scope and Non-Scope + +- 범위: Stage 2 전략·DAG·작업 계약·IO·자산·검증·회귀시험·prompt caching 설계. +- 비범위: 신규 YAML/Python 구현, Weaviate 실제 배포, live LLM/E2E 실행, 137종 법률가 sign-off. +- 구 `v.0~v.3` YAML은 runtime dependency가 아니며, 사용자 지정 사해행위취소 자산 10개도 분석·이관 seed로만 사용한다. + +## Known Inputs + +- Stage 2 MEMORY와 루트 AGENTS/workflow/evidence 규칙 +- `stage_2_optimal_update_strategy_v.2-1.md` +- `eval_stage_2_optimal_update_strategy_v.2-1.md` +- `v.2-1_workflow_change_1.md`, `v.2-1_workflow_change_2.md` +- `assets_for_stage_2_v.1.md`, `yml_assets_classification_v.1.md` +- `사해행위취소소송관련기존자산/`의 사용자 지정 10개 파일 + +## Material Assumptions + +- 대한민국 민사소송 및 관련 실체법을 대상으로 하며 전략서 기준일은 2026-08-28이다. +- 평가보고서의 법률 명제는 전략에 반영하기 전 원문·기존 자산·필요 시 공식 권위자료와 대조한다. +- `change_2`의 Weaviate corpus는 설계안이며 현재 6개 raw 문서는 137종 production coverage가 아니다. + +## Questions That Could Change the Outcome + +- 평가보고서 M-1~M-5와 선행 minor 항목의 정확한 acceptance criteria. +- 사해행위취소 10개 자산 중 유지할 법리·계산·검증 계약과 폐기할 legacy workflow 의존성. +- 사건종류별 규칙문서 및 요건사실 RAG를 어느 task 내부에 넣어 5-task 구조와 cache economy를 유지할지. + +## Workstreams and Dependencies + +1. 입력 inventory와 평가 finding matrix 작성. +2. 10개 사해행위 자산의 계약·상수·분기·출처·중복 분석. +3. v3 clean-slate DAG 및 작업/IO/자산/검증 전략 작성. +4. sub-agent round 1 검증 → incremental revision. +5. sub-agent round 2 검증 → incremental revision. +6. 정적 검증·MEMORY 갱신. + +## Source and Tool Plan + +- 로컬 원문을 최우선으로 사용하며 `rg`, `sed`, `wc`, `shasum`으로 locator와 무결성을 확인한다. +- 현행법 여부가 전략의 실질 명제를 좌우하는 경우 국가법령정보센터·대법원 등 공식 출처로 한정해 확인한다. +- sub-agent에는 정해진 검증표와 대상 파일을 주고 finding·locator·개선문안만 반환하도록 한다. + +## Validation Plan + +- 평가보고서 finding 전수 추적표: ACCEPTED / MODIFIED / REJECTED 및 v3 locator. +- change 2의 C25/C27/C28/C29, S2_30/S2_40 경계와 5-task DAG 보존 확인. +- 사해행위취소 M-3 4종 및 지정 10개 자산 provenance/이관 경계 확인. +- 구 YAML runtime dependency 문자열·경로 0 확인. +- Markdown fence, heading, UTF-8, internal identifier, IO conservation, hash 검증. +- 독립 sub-agent 검증 2회와 각 회차 후 incremental revision. + +## Approval Boundaries + +- 로컬 문서 생성·수정과 비파괴 검증만 수행한다. +- 외부 배포·모델 실행·DB 변경·production 구현은 하지 않는다. + +## Progress + +- [x] MEMORY·AGENTS·필수 workflow 규칙 확인 +- [x] 입력 문서 및 자산 inventory 완료 +- [x] v3 초안 작성 +- [x] round 1 검증·수정 +- [x] round 2 검증·수정 +- [x] 최종 검증·MEMORY 갱신 + +## Decision Log + +| Date/Stage | Decision | Basis | Consequence | +|---|---|---|---| +| 2026-08-28 / intake | 기존 5-task orchestration을 기본 골격으로 유지 | v2-1 및 change 2의 token economy·책임 경계 | 신규 기능은 S2_20 내부 deterministic substeps 중심으로 배치 | +| 2026-08-28 / intake | legacy YAML과 사용자 지정 10개 자산을 구분 | 전자는 dependency 0, 후자는 M-3 해결에 반드시 활용하라는 명시 | 10개 자산의 유효 규칙만 신규 canonical profile로 재작성하고 runtime 직접 load 금지 | +| 2026-08-28 / draft | change 1/2 기능을 새 top-level task 없이 C25·C27~C29로 흡수 | 5-task 단순성·cache economy와 exact-filter 원칙 | 사건종류 판정 후 rule/RAG 선택, S2_30에서 권한 분리 | +| 2026-08-28 / draft | M-3의 네 특칙을 E-13·CE-01·CE-03·CE-10·R06 공동 계약으로 둠 | 민법 제406조 및 대법원 공식 판례, 10개 자산 전수 감사 | 기존 자산의 부분 규칙은 provenance를 붙여 정규화하고 고정 이율·2항 cap·legacy path 폐기 | +| 2026-08-28 / draft | S2_40의 제한적 LLM 검토를 mandatory third call로 채택하지 않음 | LLM 2회 경계·결정론적 final commit·변호사 최종 판단 | 의미 검토는 S2_10/S2_30 contract, fixture, 인간 검토로 분리 | +| 2026-08-28 / round 1 | 독립 검증의 13개 finding을 전부 증분 반영 | MAJOR 3, MINOR 10; 검증자 요약의 MINOR 수 오기는 finding 표를 기준으로 정규화 | 기술상태 집계, 137종 gate, retrieval 재현성, cache breakpoint, 법정수치 ID, schema·fixture·receipt 계약을 강화 | +| 2026-08-28 / round 2 | 최종 독립 검증의 8개 finding을 전부 증분 반영 | MAJOR 2, MINOR 6; 현행 대부업법과 실제 Stage 1 schema 재검증 | canonical release manifest 3종, lender 4상태·계약효력 branch, single-writer status, provenance/injection, 공유물분할 authority, cache byte 계약을 보강 | + +## Evidence Ledger + +| Claim/Issue | Source or Test | Status | Notes | +|---|---|---|---| +| v2-1 평가 finding | `eval_stage_2_optimal_update_strategy_v.2-1.md` §3 | VERIFIED | M-1~M-5 및 m-1~m-13을 v3 §3~§16에 추적 | +| change 2 workflow | `v.2-1_workflow_change_2.md` | VERIFIED | C25→C27→C28→C29→S2_30→S2_40 | +| 사해행위취소 10개 자산 | 지정 폴더 inventory와 독립 asset audit | VERIFIED | 10종 모두 migration source; 네 특칙은 기존 자산만으로 불완전 | +| M-3 공식 법리 | 민법 제406조, 대법원 2004다21923·2018다203715·2023다240311 | VERIFIED | 피고·기간·의무발생·cap/담보 법리 확인; 이율값은 law-value로 versioning | +| round 1 독립 검증 | `Case_02_Comparison_Research/evals/stage2_v3/round_1.md` | CLOSED | 13건 전부 APPLIED; 수정본 SHA-256 `978ff886...` | +| round 2 독립 검증 | `Case_02_Comparison_Research/evals/stage2_v3/round_2.md` | CLOSED | 8건 전부 APPLIED; 최종 전략 SHA-256 `fd2b39fb...` | +| clean-slate dependency 0 | v3 exact text search | VERIFIED | 구 `v.0~v.3`은 §1.2 금지선언 1건만 존재; runtime import edge 0 | +| 최종 문서 구조 | UTF-8, fence/UML/task/asset count, `git diff --check` | VERIFIED | fence 46; UML 1:1, if 2:2, fork 계열 2:2:2; 지정 자산 10종 각 1회 | + +## Risks and Failure Modes + +- 평가 finding 일부를 문장으로만 수용하고 executable contract·test oracle로 연결하지 못할 위험. +- legacy 자산을 그대로 runtime dependency로 만들어 global constraint를 위반할 위험. +- Weaviate 검색자료를 사건 사실·증거 또는 controlling authority로 오인할 위험. +- 사해행위취소 특칙의 법정이율·기산일·피고적격·기간·cap을 서로 다른 모듈에 중복·불일치시킬 위험. +- 정적 전략서를 구현·배포 완료로 과장할 위험. + +## Results and Residual Uncertainty + +`stage_2_optimal_update_strategy_v.3.md`를 1,201행/78,312 bytes, SHA-256 `fd2b39fbdf51e3f7123bcb377a1bb1f0a11549861bab93dc1aa1ea0213073347`로 확정했다. 독립 검증 2회에서 Round 1의 13건과 Round 2의 8건을 전부 증분 반영했고 회차별 receipt를 `evals/stage2_v3/`에 보존했다. 남은 불확실성은 설계 결함이 아니라 실제 YAML/Python/manifest/corpus 구현, live Stage 1→2 E2E·cache telemetry 및 137종 법률가 sign-off가 아직 수행되지 않았다는 구현·검증 경계다.