Skip to content

feat(v2): 품질 3-wave — BOJ 상용 수준 문제 품질 - #1

Open
LsMin124 wants to merge 3 commits into
mainfrom
feat/v2-quality-3wave
Open

feat(v2): 품질 3-wave — BOJ 상용 수준 문제 품질#1
LsMin124 wants to merge 3 commits into
mainfrom
feat/v2-quality-3wave

Conversation

@LsMin124

Copy link
Copy Markdown
Member

요약

생성 문제 품질을 BOJ 상용 저지 수준으로 끌어올리는 3-wave 개선. 4개 서브시스템 병렬 감사로 갭을 도출하고 3-wave(총 10개 병렬 워크스트림 + 통합 CI + 적대적 리뷰 2관점 + blocker 수정 루프)로 구현했다. 상세: CHANGES.md §70.

Wave 1 — 품질 4축

  • 난이도 calibration: anchors 20→44 균형화(Bronze 8/Silver 10/Gold 12/Platinum 10/Diamond 4, 오라벨 bj_1761→bj_11438 교체) + difficulty 프롬프트에 티어 rubric·최소 3-anchor 삼각측량·복잡도×n_max 교차확인·rubric↔anchor 충돌 시 anchor 우선
  • 지문 작문 기준: narrative 두 프롬프트에 '작문 품질 (BOJ 상용 수준)' 섹션 ADD-only(구성 24문단·문어체·번역투 금지·용어 일관·300800자), 위장 도메인 풀 21→42
  • 적대적 채점 데이터: _Bias 아키타입 15종(graph: path_chain/star/dense/cycle_heavy/duplicate_edges/equal_weights/extreme_weights, sequence: sorted_asc/desc/all_equal/alternating/single_element/extreme_values, string: all_same_char/periodic) — shape 핀 정합(F18), max_size+max_stress 상한 타격 2개 보장, _ADVERSARIAL_MIN_SIZE=10 규모 게이트
  • QA 5종화: presentation(지문 품질) 리뷰어 신설(P1 4종/P2 5종) — blocker 는 작문 붕괴 수준만(해석 유일성은 ambiguity 전담), 초급 완화 charter 병설. ambiguity/fairness charter 체크리스트 보강, 리뷰어 열람 확대(샘플 3개 + 채점셋 상세)

Wave 2 — 정답성/견고성

  • brute 검증자 독립화: brute 가 golden 과 동일 프롬프트·동일 AlgorithmDesign 을 공유하던 결함(P2 의 유일 정답성 게이트가 자기승인) 해소 — _BRUTE_SYSTEM_PROMPT(설계 비열람 검산자·정공법/완전탐색) + brute_mode(design 4라인 제외, 파싱 preamble 규율 유지), main_v2/api 배선(batch 는 팩토리 재사용 자동 커버)
  • 채점셋 견고화: _MIN_SURVIVAL_RATIO=0.7 생존율 게이트(카테고리별 drop 진단), golden 검증된 resolved_edgesedge_resolved:* 로 채점셋 편입, spec_bridge 가 edge_case_semantics 선언 시 퇴화 샘플 1개 보장

Wave 3 — 예제 설명/스트레스

  • sample_explainer 노드 신설: BOJ 표준 '예제 설명'을 SampleTestCase.description 에 기입(기존 0% 사용) — 인스턴스 사실만(해법 처방·형식 재서술 금지), LLM 예외 시 state 무변경(신규 실패 클래스 0), with_sample_explanations 플래그(기본 off, api/batch/CLI 프로덕션 on)
  • 스트레스 상한 분리: _MAX_STRESS_ELEMENTS=50_000(bias="max" 한정, 나머지 10k 유지), formalizer 에 생성 상한 정합 규율(복잡도별 권장 상한, 10^5+ 선언 금지 — 지문 제약↔실데이터 괴리 차단), 아키타입 하한 2 클램프(카테고리명↔입력 불일치 해소)

Test plan

  • uv run ruff check ipe tests — clean
  • uv run mypy --strict ipe — 102 files clean
  • pytest(non-e2e) — 964 passed, 10 skipped (baseline 892 → +72, 무회귀)
  • wave 별 적대적 리뷰 2관점 + high/medium blocker 수정 반영
  • real-LLM 실측(P1/P2 생성 + 산출물 품질 검수 + python -m ipe.v2.difficulty --force 재측정) — 로컬 API 키 부재로 머지 후 별도 수행 예정

후속 (범위 외, CHANGES §70.7)

in-graph 난이도 타겟팅 / special judge(다답 문제) / leakage 실코퍼스 grounding / QA back-route 구조 결함 수선 경로 / samples_engaged=0 게이트 승격

- 난이도: anchors 20→44 균형화(Bronze~Diamond) + 티어 rubric·3-anchor 삼각측량·복잡도×n_max 교차확인
- 지문: narrative 작문 품질 기준(BOJ 상용 수준) ADD-only + 위장 도메인 21→42
- 채점 데이터: adversarial 아키타입 15종(graph 7/sequence 6/string 2, shape 핀 정합) + max_stress 상한 분리(_MAX_STRESS_ELEMENTS=50k) + formalizer 생성 상한 정합 규율
- QA: presentation(지문 품질) 5번째 리뷰어 신설(P1 4종/P2 5종, 초급 완화 charter 병설) + 리뷰어 열람 확대(샘플 3개·채점셋 상세)
- 정답성: brute 검증자 독립화 — _BRUTE_SYSTEM_PROMPT(설계 비열람 검산자) + brute_mode 배선(Tier B differential 독립성 §7.4 복원)
- 채점셋 견고화: 생존율 0.7 게이트 + golden 검증 resolved_edges 채점셋 편입 + 퇴화 샘플 1개 보장
- 예제 설명: sample_explainer 노드 신설(SampleTestCase.description 채움, 은닉 규율, 예외 시 무변경) — api/batch/CLI 프로덕션 on

검증: ruff clean / mypy --strict 102 files / pytest 964 passed, 10 skipped (baseline 892, 무회귀)
한계: 로컬 API 키 부재로 real-LLM 실측 미수행(후속)
run v2-b4fd4625 (P2 dijkstra) 실측에서 QA ambiguity 게이트가 잡은 2개 blocker 클래스의 구조 수선:
- render_constraints: weighted_edges 에 E ∈ [0, 2V] 행 추가 — 생성기 실상한(backbone V-1 + extra ≤V = 2V-1)의 코드 파생. E 상한 부재로 solver 가 복잡도 설계 불가하던 결함 (routeback 으로는 구조적으로 수선 불가하던 클래스)
- formalizer: 복수 퇴화 규칙(시작==끝 × 도달불가 등) 겹침 시 우선순위까지 edge_case_semantics 에 결정하는 규율 ADD

검증: ruff / mypy --strict / pytest 965 passed (+1 회귀 가드)
run v2-54d68df4 (P2 dijkstra) 실측에서 QA 가 잡은 2개 결함 클래스의 구조 수선:
- generate_inputs/_serialize_inputs 에 distinct_index_refs(기본 False, 샘플 전용) 추가 — 같은 collection 대상 index 참조(s·t)가 크기 ≥2 일 때 rng 추가 소비 없이 산술 회피. 전 샘플 s==t 로 '항상 0 출력' trivial 해석이 가능하던 QA blocker 해소 (채점셋 경로는 byte-identical — s==t 퇴화 커버리지 유지)
- faithfulness 판정 규율에 '계약에 없는 입력 사용 규칙 창작 = distortion' ADD — narrative 가 io_schema 에 없는 필터/자격 조건(소인수·위상순서 류)을 지어내 QA 5관점 전멸로 이어지던 왜곡을 상류(모델링 단계)에서 reject, synthesis 비용 낭비 차단

검증: ruff / mypy --strict / pytest 966 passed (+1 회귀 가드)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants