From e1e2ddf335d7621fd9d9f7ce0a75ad27dc5ee4f1 Mon Sep 17 00:00:00 2001 From: LsMin124 Date: Fri, 26 Jun 2026 03:55:35 +0900 Subject: [PATCH] =?UTF-8?q?fix(v2):=20output=5Fformat=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8-=EC=A4=91=EB=A6=BD=20=EA=B7=9C=EC=9C=A8=20=EC=9D=BC?= =?UTF-8?q?=EB=B0=98=ED=99=94=20=E2=80=94=20'output=5Fformat=E2=86=94descr?= =?UTF-8?q?iption'=20=EC=9A=A9=EC=96=B4=20=EB=93=9C=EB=A6=AC=ED=94=84?= =?UTF-8?q?=ED=8A=B8=20=ED=95=B4=EC=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit formalizer 가 io_schema.output_format 을 LLM 자유 prose 로 저작하는데 일반(도메인) 모드엔 도메인-중립 규율이 없어(abstract 모드 전용이었음), 이른 시점에 오류 도메인 용어(예 '누적 수확량')를 쓰면 narrative 가 나중에 올바른 용어(예 '단위 수확량')를 독립 저작해 'output_format↔description' 모순 → QA ambiguity reject 되던 결함 (outputs/measure-refkind-after run1 fail_qa 실측)의 해소. - formalizer _SYSTEM_PROMPT(일반 모드): output_format 은 인쇄 구조(타입·개수·형식· 1/0-indexed·sentinel)만 서술하고 답의 도메인 의미는 narrative 가 단일 저작하도록 규율 추가. _EASY_SYSTEM_PROMPT 에도 간결 동일 규율(전 모드 일반화). - reference_kind(#176) 와 동일 버그 클래스: 이른/형식 레이어가 narrative 와 별개로 도메인 의미를 단정하던 드리프트 표면 제거 (single-IR consistency-by-construction). - DB/스키마/migration 무변경 (프롬프트 문자열 변경, output_format 은 input_format 과 같은 Text 컬럼 — 구조 불변). 측정: binary_search P1 N=3 출하율 1/3→3/3(outputs/measure-outfmt-after, $1.24). output_format 0/3 도메인 용어(전부 구조-중립; run2 는 '1-indexed 위치 의미는 지문이 정의한다' 명시=위임 내재화 증거). QA ambiguity 0·fail_synthesis 0·crash 0. N=3 은 작고 binary_search ship rate 노이즈 있으나(2/3→1/3→3/3) 중립화 메커니즘은 확증. 게이트 903 passed/mypy --strict 100/ruff green. --- ipe/v2/nodes/formalizer.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ipe/v2/nodes/formalizer.py b/ipe/v2/nodes/formalizer.py index 4490572..09ec36e 100644 --- a/ipe/v2/nodes/formalizer.py +++ b/ipe/v2/nodes/formalizer.py @@ -39,6 +39,13 @@ - 알고리즘/도메인을 **재결정하지 말 것** — 시드의 reduction_core/composition/domain 은 이미 동결되어 그대로 유지된다. 당신은 입출력 형식과 불변식만 형식화한다. - io_schema 는 정답을 노출하지 않는 **중립 형식 계약** 이어야 한다 (은닉 유지). +- **output_format 은 도메인 의미가 아니라 인쇄 구조만 서술**한다: 출력 타입·개수·형식 + (예: '한 줄에 정수 하나', '공백 구분 정수 여러 개'), 1-indexed/0-indexed 위치인지, + 해 없음 sentinel(-1 등)만 명시하라. **그 값이 도메인에서 무엇을 뜻하는지(예: '누적 + 수확량' vs '단위 수확량', '최소 비용' vs '최대 이익')는 쓰지 말 것** — 답의 도메인 + 의미는 narrative(지문)가 단일 저작한다. output_format 에 도메인 해석을 박으면 + narrative 가 같은 의미를 독립 서술해 'output_format↔description' 용어 드리프트로 QA + ambiguity reject 된다(실측). 구조만 쓰면 어떤 도메인 서술과도 모순되지 않는다. - output_invariants 는 정답 검증에 쓰일 만큼 구체적이되 풀이를 누설하지 않게. - graph 입력은 **self-contained 단일 필드** 로 모델링한다 (weighted_edges/tree_edges 는 V·E 헤더를 자체 포함 — 정점 수 V 를 별도 int 필드로 분리하지 말 것: 입력 생성기 @@ -166,6 +173,9 @@ matrix/grid 같은 복잡 구조와 graph_shape/sequence_shape/string_shape 핀을 **쓰지 말 것** — 기초 입출력·산술·조건·반복은 그런 구조가 필요 없다. - **출력은 반드시 입력에 의존**한다 — 입력과 무관한 상수 출력 금지(퇴화 → difficulty reject). +- **output_format 은 인쇄 구조만**(타입·개수·형식·sentinel) 서술하고, 그 값의 도메인 + 의미는 쓰지 말 것 — 의미는 narrative 가 단일 저작한다(output_format↔description 용어 + 드리프트 방지). - 입력을 읽어 간단히 계산(합·차·비교·카운트·누적)해 출력하는 수준. 정렬·이분탐색·그래프 같은 알고리즘을 끌어들이지 말 것(끌어들이면 입문이 아니다). - 퇴화/경계 입력의 특별 처리(빈 입력·N=0 등)를 **지어내지 말 것** — constraints 가 허용하는