Skip to content

sidecar 없이 렌더하면 형상 검증이 통째로 스킵되는데 응답이 성공과 구분되지 않음 (실제 라벨 겹침 3건 통과) #239

Description

@moonweave

요약

프로젝트 스크립트가 save_journal_fig() 대신 일반 fig.savefig() 로 저장하면 sidecar 가 없어 형상 검증이 전부 빠지는데, 응답은 status: "warning" + artifact 정상 생성으로 성공과 구분되지 않는다. 실제로 라벨 겹침이 3건 있는 그림이 아무 지적 없이 통과했다.

관련: #231 (sidecar 는 나오는데 malformed 판정), #230 (겹침 미검출). 이 이슈는 sidecar 부재 시의 처리를 다룬다.


재현

figops.render_project_script(
    project_path=<project>, figure_id="status_overview",
    style_policy="neutral", validation_target="nature")

스크립트 마지막 줄이 fig.savefig(OUT, dpi=200, facecolor="white")save_journal_fig 미사용.

관측값

"status": "warning",
"artifact": { "relative_path": "...status_overview.png", "byte_size": 412032, ... },
"measurements": [
  {"id":"geometry_diagnostics","availability":"unavailable",
   "reason":"geometry_diagnostics_unavailable: no sidecar emitted"}
],
"warnings": [
  "Width 406.4mm exceeds journal max 183.0mm",
  "200x200 DPI (min: 600)",
  "geometry_diagnostics_unavailable: no sidecar emitted",
  ...
]

형상 3항목은 not_applicable + "exactly one style geometry observation is required":

{"check_id":"minimum_font_size",    "status":"not_applicable","enforcement":"required"}
{"check_id":"minimum_line_width",   "status":"not_applicable","enforcement":"required"}
{"check_id":"maximum_figure_height","status":"not_applicable","enforcement":"required"}

문제

  1. "검증 불가"와 "검증 통과"가 응답에서 구분되지 않는다. status: warning 은 dpi·물리폭 초과와 같은 등급으로 묶여 나온다. 물리폭·dpi 는 working figure 라 의도적으로 무시하는 경고인데, 그 목록에 형상 검증 부재가 섞여 들어가면 묻힌다.

  2. 실제 겹침이 통과했다. 같은 렌더 산출물을 육안으로 보면 겹침이 최소 3건 있다.

    • 축 밖으로 나간 주석 1건 (axes fraction 밖으로 밀린 텍스트)
    • 평균값 라벨이 데이터 마커 위에 얹힘 1건
    • 주석 텍스트가 산점 위에 얹힘 1건

    geometry_diagnostics 가 unavailable 이라 line_text_crossings · artist_pair_iou 가 한 번도 돌지 않았다.

  3. enforcement: "required" 인 항목이 조용히 빠지는데 응답 어디에도 "이 렌더는 형상 검증을 받지 않았다"는 단일 신호가 없다. 판단하려면 measurements[].availability 를 사람이 직접 뒤져야 한다.

기대

  • sidecar 부재를 별도 상태로 승격 — 예: status: "unverified" 또는 evidence.geometry.status: "skipped_no_sidecar" 같은 최상위 필드. 최소한 dpi·폭 같은 정책 경고와 다른 버킷으로 분리.
  • enforcement: required 검사가 not_applicable 로 빠질 때 응답 최상위에 요약 1줄 ("3 required geometry checks were not evaluated").
  • 또는 save_journal_fig 미사용을 렌더 시점에 감지해 명시적 안내. 지금은 경고 문자열 하나뿐이라 스크립트 작성자가 알아채기 어렵다.

환경

  • figops MCP surface, style_policy: neutral, validation_target: nature, workflow.intent: exploration
  • 프로젝트: matplotlib 4패널, 산점 + 텍스트 주석 다수
  • job: mcp_project_jobs/actuation-status-260812e

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions