팀 방향이 축구로 모여서, 에이전트(agent/)의 야구·농구를 걷어냈다. 요청·결정의 정본은 미결 항목이다 — 다른 사람이 볼 것은 미결 ho 39번「에이전트를 축구 단일 종목으로 정리했습니다」에 있다. 여기에는 그날의 판단만 적는다.

지운 것

루브릭 4개(baseball_batting·baseball_pitching·basketball_jump_shot· basketball_layup), 근거 4축 정본에서 그 루브릭·세부기준과 팔에서만 쓰던 지표 4개, 종목 이름표(SPORT_NAMES), 데이터셋 수집 어댑터 둘 (Picklebot-130K·PL-NBA), 파이프라인의 종목 목록. 남은 루브릭은 축구 둘이다 — 인스텝 슈팅(active)과 인사이드 패스(draft).

남긴 것 — 여기가 판단이었다

「야구 자료」로 보이는 것과 야구를 재면서 얻은 근거는 다르다.

  • eval/ 은 그대로 뒀다. 사전등록 실험(fps·밴드 하한·재현성·촬영 방향)이 그 클립 측정치 위에 얹혀 있다. 🔴 앞서 「jhmdb_batting 이 좌우·관절 검증 검사의 근거」라고 적은 것을 정정한다 — 그 검사(test_keypoint_source)는 scripts/analyze_keypoints.py 의 매핑만 읽고 eval/ 을 보지 않는다. jhmdb_batting 은 그 관절 정답으로 파이프라인을 돌려 본 기록이다.
  • features.py 의 팔 지표 산출도 안 건드렸다. 고치면 판정 입력이 달라져 B-6 재실행을 부른다. 쓰는 루브릭이 없으면 그냥 안 불린다.
  • 소스 주석의 「야구 투구 실클립에서 …」 같은 줄도 남겼다. 임계값과 알고리즘이 지금 모양인 이유다.

지우면서 잃을 뻔한 검사 하나

test_a_symmetric_band_is_what_actually_stops_the_flip 은 「같은 지표라도 밴드가 0 대칭이면 좌우 반전에 등급이 안 바뀐다」를 고정하는 검사인데, 대조군이 야구 타격 루브릭이었다. 루브릭과 함께 지웠으면 「인스텝이 뒤집힌다」만 남고 고칠 자리가 지표로 오해된다. 대칭 밴드를 검사 안에서 직접 만들어 대조를 살렸다.

반대로 검사 하나는 새로 생겼다 — test_a_sport_we_do_not_support_is_refused_not_guessed. 백엔드 참조 테이블에는 아직 야구·농구가 있어서 그런 sport_code 가 올 수 있는데, 그때 축구 루브릭으로 조용히 채점되면 결과가 틀렸다는 것이 값에 안 나타난다. 데이터셋 쪽 이름인 soccer 도 함께 거부한다(루브릭의 종목 코드는 football).

숫자

테스트 390 → 352. 줄어든 38건은 전부 루브릭 수로 매개변수화된 케이스이고, 테스트 함수 자체는 하나 늘었다(수집 목록을 전후로 비교해 확인했다). 로드맵에 적혀 있던 358은 낡은 값이라 함께 정정했다.

「eval 도 축구만 남길 수 있나」 — 갈리지 않는다

폴더 34개를 봤다. 종목으로 자를 수 있는 구조가 아니다. 한 회차가 6종을 같은 문서에서 쟀고(pending20_band_floor/RESULTS.md 는 축구 18편과 농구 각 1편의 밴드 하한을 나란히 비교한다), 「축구만 남기기」는 사전등록된 측정 기록을 사후에 쪼개 다시 쓰는 일이 된다.

순수 팔 종목 폴더로 보였던 pending6_side/(11MB)조차 그렇지 않았다 — 거기 담긴 결론이 「다리 판별이 4/11 = 36.4% 맞는다」(사람 라벨 12건)이고, 그건 축구 결과다. phaseA/(22MB, 전체의 63%)는 종목 자산이 아니라 대상 선택(selector) 자산이며 골든셋 39클립이 야구 33 + 축구 5 혼합이다.

그리고 지우면 실제로 깨지는 곳이 있다 — test_observability.py::test_offline_evaluation_opts_out_explicitly 가 eval/phaseA/extract.py 파일을 직접 읽는다.

루브릭을 지우면서 깨진 것 — 재실행 스크립트 11개

야구·농구 루브릭을 load_rubric 하던 조사 스크립트 11개가 지금 FileNotFoundError 다. pytest 수집 대상이 아니라 테스트로는 안 걸린다. 로직은 안 고쳤다 — 사전 등록된 측정을 사후에 고치면 그 RESULTS.md 가 무엇을 잰 기록인지 알 수 없게 된다. 대신 파일 머리에 「이 회차는 그대로 재실행되지 않는다」와 루브릭을 git 이력에서 꺼내는 한 줄을 달았다.

다음

에이전트 밖에는 종목 코드가 남아 있다 — 화면의 종목 선택지(www·flutter), 백엔드 참조 테이블과 지표 시드, 제안서의 3종목 서술. 지금 고장 난 곳은 없다(그 작업은 워커가 「루브릭 없음」으로 거부한다). 다만 사용자에게는 고를 수 있어 보이므로 미결 39번으로 올려 두었다. 🔴 이미 적재된 마이그레이션 행을 되돌리는 것은 권하지 않는다 — 그 종목으로 올라간 과거 데이터가 참조를 잃는다.