← 코드 아키텍처 맵  /  런타임 해부  /  개선 과정  /  데이터 라이프사이클 & 배치 카탈로그  ·  메트릭 발견·근거 →

데이터 라이프사이클 & 배치 카탈로그

① 각 테이블의 컬럼이 워크플로우의 어느 국면(phase)에서 저장되는지 ② live DB에 실제 존재하는 평가 배치 전수. 수치는 eval_ph1 DB 실측(기준 2026-07-08 15:17 KST).

7 phase 저장 타임라인runs=2회 분할기록events=스트리밍 중batch 전용 테이블 없음실제 배치 164종

1저장 타임라인 — 7개 국면(phase)

핵심 구분: 시작 시 박는 "조건" · 스트리밍 중 쌓는 "흔적" · 끝난 뒤 계산해 덮는 "결과" · 사후 별도 명령 · 안 채움.

phase트리거테이블 → 채워지는 것코드
0init-db_schema_migrations · message_types(seed)migrations/001
1load-gaiatasks 전 컬럼(question·gold_answer·file_name·requires_web·annotator_meta)gaia/loader
2run 시작(배치당 1회)teams(team_id·agents·topology·prompt_bundle_hash·config_full)registry.ensure_team_record
3run(task별 직전)runs INSERT — status=running + 실행 "조건"runner.py:208
4run_stream 소비 중events 전 행(이벤트 1개당 1+행)TraceLogger.log_stream
5스트림 종료 직후runs UPDATE — completed/crashed + 집계·채점 결과runner.py:283 / _mark_crashed
6배치 종료materialized views REFRESH(mv_batch_summary 등)db.refresh_views
7사후 별도 명령research_grounding·cppx_grounding·experimentsgrounding-score / propose 등

2runs — 한 행이 두 번에 나눠 채워진다

이게 "run할 때 저장 vs 수행 후 계산"의 핵심. INSERT(시작)와 UPDATE(종료)가 컬럼을 양분한다.

컬럼언제성격
run_id·team_id·task_id·attempt·batch_id3 INSERT식별자
model_name·temperature·seed·max_messages3 INSERT실행 "조건" 스냅샷 — settings에서 박음(재현성 비교용)
status='running'·started_at3 INSERT시작 표시
total_turns·total_tokens·input/output_tokens·latency_ms5 UPDATElogger가 스트리밍 중 누산종료 시 한 번에 기록(계산=during, 저장=after)
overhead_tokens (020, 신규 run)5 UPDATEclient.total_usage()−events합산 = selector 등 events 미포함 모델 비용. 구버전 run은 NULL
terminated_by5 UPDATETaskResult.stop_reason → approve/max_messages/error
final_answer5 UPDATElogger가 뽑은 답
success·format_valid5 UPDATE스트림 종료 후 scorer가 별도 계산 ← "수행 후 따로 계산"의 대표
ended_at5 UPDATEnow()
크래시 경로(_mark_crashed)는 status='crashed', terminated_by='error', ended_at만 쓰고 success는 NULL로 남긴다 → CHECK(status='completed' OR success IS NOT NULL)을 위반하지 않음.

3events — 전부 스트리밍 중(phase 4), 컬럼은 타입별 부분집합

이벤트가 도착할 때마다 즉시 INSERT. ts는 DB 기본값이 아니라 logger가 도착 시각을 박고, latency_ms도 그 자리에서(직전 대비) 계산.

message_type채워지는 컬럼
agent_messagecontent·content_truncated·tokens·input/output_tokens·latency_ms
tool_calltool_call_id·tool_name·tool_args·tokens…
tool_resulttool_call_id·tool_name·tool_result·tool_result_hash
tool_errortool_call_id·tool_name·tool_error
selector_decisionselected_next_agent·selector_reason
final_answercontent (agent_name=NULL)
evaluator_scorecontent·eval_meta (FabricMAS xverify 팀만)

공통: event_id(BIGSERIAL)·run_id·seq·agent_name·ts. 자세한 행 단위 변환은 런타임 해부 §E.

4절대 안 채워지는 컬럼 (Tier 2 / 스키마만)

코드에 쓰는 곳이 0곳임을 grep으로 확인(SPEC §0.3: 자동 라벨링·LLM-judge 구현 금지).

5batch_id의 정체 — 전용 테이블이 없다

--batch로 넣는 값은 별도 엔티티가 아니라 runs 행에 붙는 자유 텍스트 컬럼 하나.

runs.batch_id  TEXT NOT NULL          # FK 아님, 카탈로그 없음, 아무 문자열이나 허용
UNIQUE (batch_id, task_id, attempt)   # ← 재개(resume)의 키
CREATE INDEX idx_runs_batch ON runs(batch_id);

6배치 카탈로그 — 실제 존재하는 평가 배치

live DB runs를 batch_id로 묶은 전수(기준 2026-07-08 15:17 KST). test-runner-*(97) · test-resume-*(97) 단발 CI 픽스처는 제외. n=run · ok=성공 · p@1=완료분 pass@1 · cr=크래시.

총 358종 = 실제 평가 164종(2703 run) + 테스트 픽스처 test-runner-* 97 test-resume-* 97(각 1-run CI 흔적, 제외).
GAIA — v1→v6 본선 28 배치 · 689 run
날짜batch_idteam(s)nokp@1cr
06-10m6_devv1-baseline1530.200
06-10m6_dev_smoke_20260610T212837v1-baseline510.200
06-10m6_dev_smoke_20260610T213009v1-baseline510.200
06-10m6_dev_smoke_20260610T213114v1-baseline510.200
06-10m6_real_20260610T214855v1-baseline510.200
06-10m6_real_20260610T215356v1-baseline31200.650
06-10m6_real_20260610T220800v1-baseline33220.670
06-10m6_final_20260610T222108v1-baseline33240.730
06-10m6_clean_20260610T223541v1-baseline15140.930
06-10m6_clean_20260610T224342v1-baseline15151.000
06-10gaia_l1_real_20260610v1-baseline2790.362
06-11gaia_l1_v3_20260611v3-prompt-fix2590.392
06-11gaia_v2_attach_20260611v2-attach-path27110.442
06-11gaia_l1_t0_v1_20260611v1-baseline27110.421
06-11gaia_l1_v4_20260611v4-prompt-fix25100.432
06-11gaia_l1_t0_v2_20260611v2-attach-path27120.482
06-11ab_v5_l1_20260611v5-multitool27150.581
06-11ab_v4ctl_l1_20260611v4-prompt-fix27130.522
06-11v5_l2_20260611v5-multitool1660.432
06-11v5_l1_k3_20260611v5-multitool81420.589
06-11v5_mm16_20260611v5-multitool24130.540
06-15gaia_l2_slice_20260615v1-baseline410.250
06-15gaia_l2_base_20260615v1-baseline3550.206
06-15exp_b_v1v1-baseline2070.350
06-15gaia_l2_web_20260615v2-gaia-web8610.3383
06-15exp_b_v6v6-verify-gate2080.400
06-15gaia_l2_webdiag_20260615v2-gaia-web400.001
06-15gaia_l2_webclean_20260615v2-gaia-web2550.200
Research + 이종 교차검증 19 배치 · 283 run
날짜batch_idteam(s)nokp@1cr
06-12research_smoke_20260612v1-research-pipeline221.000
06-12research_base_20260612v1-research-pipeline30290.970
06-12research_grounded_20260612v2-research-grounded30290.970
06-12research_fast_20260612v2-research-fast3020.070
06-12research_hard_base_20260612v1-research-pipeline30240.800
06-12research_hard_disambig_20260612v2-research-disambig3080.270
06-12research_hard_cleanret_20260612v2-research-cleanret30260.870
06-13research_decoy_v1k3_20260613v1-research-pipeline30280.930
06-13research_decoy_v2k3_20260613v2-research-cleanret30290.970
06-13xverify_smokeresearch-xverify-observe111.000
06-13ab_basev2-research-grounded551.000
06-14ab_observeresearch-xverify-observe551.000
06-14ab_gateresearch-xverify-gate551.000
06-14abh_basev2-research-grounded540.800
06-14abh_observeresearch-xverify-observe540.800
06-14abh_gateresearch-xverify-gate551.000
06-14flk_basev2-research-grounded320.670
06-14flk_observeresearch-xverify-observe211.000
06-30ab_baseline_v6v6-analyst-web551.000
Analysis (analyst-web v2→v6) 8 배치 · 42 run
날짜batch_idteam(s)nokp@1cr
06-13analysis_stale_20260613v2-analyst-deep331.000
06-13analysis_grounded_20260613v3-analyst-web331.000
06-13analysis_lite_20260613v4-analyst-web331.000
06-13analysis_cited_20260613v5-analyst-web331.000
06-13analysis_dedup_20260613v6-analyst-web331.000
06-13analysis_v6_k3_20260613v6-analyst-web980.890
06-14remeasure_base_20260614v2-analyst-deep991.000
06-14remeasure_web_20260614v3-analyst-web991.000
cppx (Expert NP-hard) 5 배치 · 119 run
날짜batch_idteam(s)nokp@1cr
06-14tvq_s1_solocppx-solo111.000
06-14tvq_s2_panelcppx-panel111.000
06-14cppx_all_solocppx-solo39391.000
06-14cppx_all_panelcppx-panel39391.000
06-14cppx_all_panel_v2cppx-panel-v239391.000
Extract / SQL 6 배치 · 56 run
날짜batch_idteam(s)nokp@1cr
06-15extract_base_20260615v1-extract-solo830.380
06-15extract_v2_20260615v2-extract-validated850.620
06-15sql_base_20260615v1-sql-solo1080.800
06-15sql_v2_20260615v2-sql-executed1091.001
06-15sql_v2b_20260615v2-sql-executed1090.900
06-15sql_v3_20260615v3-sql-grounded1080.800
Role 팀 (회의·OCR·코딩·리서치) 11 배치 · 62 run
날짜batch_idteam(s)nokp@1cr
06-16role_meeting_base_20260616role-meeting661.000
06-16role_ocr_base_20260616role-ocr661.000
06-16role_research_base_20260616role-research300.000
06-16role_research_v2_20260616role-research-v2320.670
06-16role_meeting_hard_base_20260616role-meeting551.000
06-16role_meeting_hard_v2_20260616role-meeting-v2551.000
06-16role_ocr_hard_base_20260616role-ocr650.830
06-16role_ocr_hard_v2_20260616role-ocr-v2650.830
06-16role_ocr_hard_v3_20260616role-ocr-v312110.920
06-16role_coding_base_20260616role-coding551.000
06-16role_codetest_base_20260616role-codetest520.400
HQ Teams 6 배치 · 46 run
날짜batch_idteam(s)nokp@1cr
06-16hq_research_k3_20260616hq-research-v1991.000
06-16hq_research_v2_k3_20260616hq-research-v2971.002
06-16hq_coding_k2_20260616hq-coding-v11070.700
06-16hq_content_k2_20260616hq-content-v1600.000
06-16hq_invest_k2_20260616hq-invest-v1661.000
06-16hq_content_v2_k2_20260616hq-content-v2661.000
Metric 축 프로그램 6 배치 · 60 run
날짜batch_idteam(s)nokp@1cr
06-15metric_fmt_base_20260615gaia-raw-solo1000.000
06-15metric_fmt_fix_20260615gaia-fmt-solo1010.100
06-15metric_loop_base_20260615gaia-loop-base1000.000
06-15metric_loop_stop_20260615gaia-loop-stop1020.200
06-15metric_grounding_web_20260615gaia-web-solo1030.300
06-15metric_ma_20260615gaia-retrieve-answer1000.000
전체평가 perf_ 프로그램 (최근) 42 배치 · 947 run
날짜batch_idteam(s)nokp@1cr
06-18perf_learn_solo_v1learn-algo-tutor-solo860.750
06-18perf_learn-algo-tutor-sololearn-algo-tutor-solo870.880
06-18perf_learn-algo-tutor-xexamlearn-algo-tutor-xexam870.880
06-18perf_v1-extract-solov1-extract-solo830.380
06-18perf_v2-extract-validatedv2-extract-validated850.620
06-18perf_role-codetestrole-codetest540.800
06-18perf_hq-coding-v1hq-coding-v1540.800
06-18perf_role-codingrole-coding551.000
06-18perf_v1-sql-solov1-sql-solo1080.800
06-18perf_v2-sql-executedv2-sql-executed10101.000
06-18perf_v3-sql-groundedv3-sql-grounded10101.000
06-18perf_role-meetingrole-meeting11111.000
06-18perf_role-meeting-v2role-meeting-v211111.000
06-18perf_role-ocrrole-ocr12100.830
06-18perf_role-ocr-v2role-ocr-v212121.000
06-18perf_role-ocr-v3role-ocr-v312110.920
06-18perf_hq-content-v1hq-content-v1900.000
06-18perf_hq-content-v2hq-content-v2991.000
06-18perf_hq-invest-v1hq-invest-v1991.000
06-18perf_hq-research-v1hq-research-v1991.000
06-18perf_hq-research-v2hq-research-v2991.000
06-18perf_role-researchrole-research900.000
06-18perf_role-research-v2role-research-v2930.330
06-18perf_v1-analyst-solov1-analyst-solo900.000
06-18perf_v2-analyst-deepv2-analyst-deep991.000
06-18perf_v3-analyst-webv3-analyst-web991.000
06-18perf_v4-analyst-webv4-analyst-web991.000
06-18perf_v5-analyst-webv5-analyst-web991.000
06-18perf_v6-analyst-webv6-analyst-web991.000
06-18perf_brain-digest-corpus-observebrain-digest-corpus-observe30301.000
06-18perf_research-xverify-gateresearch-xverify-gate30301.000
06-18perf_research-xverify-observeresearch-xverify-observe30301.000
06-18perf_v1-research-pipelinev1-research-pipeline30301.000
06-18perf_v2-research-cleanretv2-research-cleanret30301.000
06-18perf_v2-research-disambigv2-research-disambig30130.430
06-19perf_v2-research-fastv2-research-fast3080.270
06-19perf_v2-research-groundedv2-research-grounded30301.000
06-19perf_cppx-panelcppx-panel39391.000
06-19perf_cppx-panel-v2cppx-panel-v239391.000
06-19perf_cppx-solocppx-solo39391.000
06-19perf_gaia-fmt-sologaia-fmt-solo165400.242
06-19perf_gaia-loop-basegaia-loop-base165450.2910
Personal MAS (학습·brain) 4 배치 · 4 run
날짜batch_idteam(s)nokp@1cr
06-18learn_smoke_sololearn-algo-tutor-solo111.000
06-18learn_smoke_glm52learn-algo-tutor-solo111.000
06-18learn_smoke_xexamlearn-algo-tutor-xexam111.000
06-18brain_smokebrain-digest-corpus-observe111.000
기타 / 스모크 29 배치 · 395 run
날짜batch_idteam(s)nokp@1cr
06-13fresh_demo_20260613v1-baseline,v1-research-pipeline,v320.670
06-13fresh_v5gaia_20260613v5-multitool111.000
06-13fresh_v2res_20260613v2-research-cleanret111.000
06-13fresh_v6anl_20260613v6-analyst-web111.000
06-13fresh_v6anl2_20260613v6-analyst-web111.000
06-15test_semi_v6_20260615v6-analyst-web111.000
06-15test_semi_v6_fc_20260615v6-analyst-web111.000
06-24smoke_s1learn-algo-tutor-xexam111.000
06-24eval_s1_sololearn-algo-tutor-solo860.750
06-24eval_s1_xexamlearn-algo-tutor-xexam870.880
06-24eval_s2_brainbrain-digest-corpus-observe551.000
06-24eval_s2_brain_2hopbrain-digest-corpus-observe441.000
06-24eval_s2_brain_2hop_v2brain-digest-corpus-observe-v2441.000
06-24eval_s2_brain_2hop_v3brain-digest-corpus-observe-v3431.001
06-24verify_citedbrain-digest-corpus-observe-v3111.000
06-25test-v7-3ca98888v7-deep-verify111.000
06-25exp_fm33_v5_20260625v5-multitool24170.710
06-25exp_fm33_v7_20260625v7-deep-verify24160.670
06-29dr_m1_probev1-deep-research551.000
06-30dr_m3_probev1-deep-research-xverify331.000
06-30hotpot_groundedv2-research-grounded1280.670
06-30hotpot_validatev2-research-grounded111.000
06-30hotpot_ab_v1v1-research-pipeline30220.730
06-30hotpot_ab_v2v2-research-grounded30210.700
07-01hotpot_full_v1v1-research-pipeline100670.681
07-01hotpot_full_v2v2-research-grounded100690.701
07-02tooldoc_smoke_20260702tooldoc-rich111.000
07-02tooldoc_sparse_20260702tooldoc-sparse1060.600
07-02tooldoc_rich_20260702tooldoc-rich10101.000

재생성

# 데이터가 늘면 이 스크립트를 다시 돌려 최신화(정적 서빙, 무재시작)
cd /home/hm/eval_ph1 && .venv/bin/python /home/hm/vps-srv/apps/eval-codemap/_gen_catalog.py
# 직접 조회
SELECT DISTINCT batch_id FROM runs ORDER BY batch_id;