# golden-tasks.yaml — 품질 회귀 벤치마크 대표 과제 (finding: 리뷰 「권장 개선 순서」 3주차) # ============================================================================= # 목적: **plain Claude vs 이 하네스**를 같은 과제로 비교해, 하네스가 실제로 품질을 # 올리는지 증명한다. 개선이 증명 안 되는 role/fan-out/framework는 제거 근거가 된다. # (리뷰 최종 판단: "이 비교에서 개선이 증명되지 않는 것은 제거하는 편이 맞다.") # # 각 과제는 **검증 가능한 acceptance-criteria**를 가진다(주관 점수 최소화). 실행은 # benchmark.py 로 두 arm(plain/harness)의 결과를 rubric으로 채점·비교한다. # 카테고리: code-bugfix · code-feature · refactor · docs · design · decision/analysis. # ============================================================================= golden-tasks: version: 1 categories: [code-bugfix, code-feature, refactor, docs, design, decision] tasks: - id: GT-01 category: code-bugfix difficulty: low prompt: "paginate.py 의 off-by-one 버그로 각 페이지 마지막 항목이 빠진다. 원인을 규명하고 최소 변경으로 수정하라. test_paginate.py 가 통과해야 한다." # 자기완결 실행 픽스처(benchmark.py run 이 임시 복사본에서 arm 을 실행 후 verify 로 채점). fixture: fixtures/GT-01 verify: "python3 -m pytest -q" expected-changed-files: [paginate.py] # unnecessary-change-lines 채점 기준 acceptance-criteria: - "수정 후 test_paginate.py 통과(green)" - "기존 테스트 회귀 없음" - "변경은 최소(무관한 리팩터 없음 — paginate.py 만 변경)" artifacts: [fix-diff] - id: GT-02 category: code-bugfix difficulty: med prompt: "간헐 실패(flaky) 테스트의 원인(시간 의존/경쟁)을 규명하고 결정적으로 만든다." acceptance-criteria: - "근본 원인을 재현 근거로 규명(추측 아님)" - "100회 반복에서 결정적으로 통과" - "타임아웃 늘리기 같은 은폐책 아님" artifacts: [root-cause-note, fix-diff] - id: GT-03 category: code-feature difficulty: med prompt: "기존 REST 엔드포인트에 커서 기반 페이지네이션을 추가한다(계약 명세 포함)." acceptance-criteria: - "API 계약(요청/응답/에러) 문서화" - "단위+통합 테스트 통과" - "기존 오프셋 방식과 하위호환 유지" - "수용기준별 검증 근거 제시" artifacts: [api-contract, code-diff, tests] - id: GT-04 category: code-feature difficulty: high prompt: "멱등키(idempotency-key) 기반 중복요청 방지를 결제 생성 경로에 도입한다." acceptance-criteria: - "동시/재시도 시 정확히 1회 처리(경쟁 테스트로 증명)" - "키 저장소 TTL·충돌 처리 명시" - "위협모델(재생공격) 검토" artifacts: [design-note, code-diff, race-test, threat-note] - id: GT-05 category: refactor difficulty: med prompt: "600줄짜리 God 모듈을 책임 단위로 분리하되 동작을 바꾸지 않는다." acceptance-criteria: - "전 테스트 그대로 통과(행위 불변)" - "공개 인터페이스 유지 또는 명시적 마이그레이션" - "각 단위가 단일 책임" artifacts: [refactor-diff, boundary-note] - id: GT-06 category: refactor difficulty: low prompt: "중복된 검증 로직 3곳을 하나의 재사용 함수로 합친다." acceptance-criteria: - "동작 동일(테스트 통과)" - "호출부 3곳 모두 갱신" - "과도한 추상화 없음" artifacts: [refactor-diff] - id: GT-07 category: docs difficulty: low prompt: "신규 개발자용 로컬 실행 가이드를 작성한다(Diátaxis: tutorial)." acceptance-criteria: - "명령을 그대로 따라 실행 가능(검증됨)" - "선행조건·예상결과 명시" - "한 번에 이해 가능(작업기억 과부하 없음)" artifacts: [tutorial-md] - id: GT-08 category: docs difficulty: med prompt: "공개 API의 레퍼런스 문서를 실제 시그니처와 일치하게 작성한다." acceptance-criteria: - "모든 파라미터/반환/에러 문서화" - "코드와 불일치 0" - "예제가 실제 실행 가능" artifacts: [reference-md] - id: GT-09 category: design difficulty: med prompt: "대시보드 카드 컴포넌트를 디자인 시스템 토큰만으로 만든다(상태 포함)." acceptance-criteria: - "하드코딩 색 0(토큰만 소비)" - "loading/empty/error/overflow 상태 처리" - "WCAG 대비 통과 + 포커스 가시성" - "preview_ui 게이트 통과" artifacts: [component-code, preview-png] - id: GT-10 category: design difficulty: high prompt: "기존 스택을 discovery해 reuse/adapt/create를 판단하고 화면 1개를 조립한다." acceptance-criteria: - "기존 stack/tokens/components 조사 근거 제시" - "reuse/adapt/create 판단에 근거" - "기존 컨벤션 위반 없음" - "preview_ui 게이트 통과" artifacts: [discovery-note, screen-code, preview-png] - id: GT-11 category: decision difficulty: high prompt: "관측성 스택(자체구축 vs SaaS)을 근거로 하나 고른다(옵션≥2, 근거접지)." acceptance-criteria: - "옵션 2개 이상을 근거로 발산(ground)" - "비용/운영/리스크 트레이드오프 명시" - "confidence가 근거등급에서 파생(자기채점 금지)" - "반대의견(dissent) 보존" artifacts: [option-set, decision-packet] - id: GT-12 category: decision difficulty: med prompt: "모호한 기능 요청을 수용기준이 있는 PRD로 정리한다." acceptance-criteria: - "사용자문제·성공지표 명시" - "수용기준이 검증가능(모호어 없음)" - "비목표(non-goals) 명시" artifacts: [prd-md] - id: GT-R2 category: code-bugfix difficulty: low prompt: "stats.py 의 median() 이 짝수 길이 입력에서 두 중앙값의 평균이 아니라 아래쪽 값을 돌려주는 버그가 있다. 최소 변경으로 수정하라. test_stats.py 가 통과해야 한다." fixture: fixtures/GT-R2 verify: "python3 -m pytest -q" expected-changed-files: [stats.py] acceptance-criteria: - "수정 후 test_stats.py 통과(green)" - "변경은 최소(stats.py 만 변경)" artifacts: [fix-diff] # 채점은 benchmark-rubric.yaml. 각 과제를 두 arm(plain/harness)으로 실행 후 채점. # fixture+verify 가 있는 과제는 benchmark.py run 이 실제 실행·자동 채점한다(나머지는 수동 record). scoring: benchmark/benchmark-rubric.yaml