요약
프로젝트 스크립트가 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"}
문제
-
"검증 불가"와 "검증 통과"가 응답에서 구분되지 않는다. status: warning 은 dpi·물리폭 초과와 같은 등급으로 묶여 나온다. 물리폭·dpi 는 working figure 라 의도적으로 무시하는 경고인데, 그 목록에 형상 검증 부재가 섞여 들어가면 묻힌다.
-
실제 겹침이 통과했다. 같은 렌더 산출물을 육안으로 보면 겹침이 최소 3건 있다.
- 축 밖으로 나간 주석 1건 (axes fraction 밖으로 밀린 텍스트)
- 평균값 라벨이 데이터 마커 위에 얹힘 1건
- 주석 텍스트가 산점 위에 얹힘 1건
geometry_diagnostics 가 unavailable 이라 line_text_crossings · artist_pair_iou 가 한 번도 돌지 않았다.
-
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
요약
프로젝트 스크립트가
save_journal_fig()대신 일반fig.savefig()로 저장하면 sidecar 가 없어 형상 검증이 전부 빠지는데, 응답은status: "warning"+artifact정상 생성으로 성공과 구분되지 않는다. 실제로 라벨 겹침이 3건 있는 그림이 아무 지적 없이 통과했다.관련: #231 (sidecar 는 나오는데 malformed 판정), #230 (겹침 미검출). 이 이슈는 sidecar 부재 시의 처리를 다룬다.
재현
스크립트 마지막 줄이
fig.savefig(OUT, dpi=200, facecolor="white")—save_journal_fig미사용.관측값
형상 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"}문제
"검증 불가"와 "검증 통과"가 응답에서 구분되지 않는다.
status: warning은 dpi·물리폭 초과와 같은 등급으로 묶여 나온다. 물리폭·dpi 는 working figure 라 의도적으로 무시하는 경고인데, 그 목록에 형상 검증 부재가 섞여 들어가면 묻힌다.실제 겹침이 통과했다. 같은 렌더 산출물을 육안으로 보면 겹침이 최소 3건 있다.
geometry_diagnostics가 unavailable 이라line_text_crossings·artist_pair_iou가 한 번도 돌지 않았다.enforcement: "required"인 항목이 조용히 빠지는데 응답 어디에도 "이 렌더는 형상 검증을 받지 않았다"는 단일 신호가 없다. 판단하려면measurements[].availability를 사람이 직접 뒤져야 한다.기대
status: "unverified"또는evidence.geometry.status: "skipped_no_sidecar"같은 최상위 필드. 최소한 dpi·폭 같은 정책 경고와 다른 버킷으로 분리.enforcement: required검사가not_applicable로 빠질 때 응답 최상위에 요약 1줄 ("3 required geometry checks were not evaluated").save_journal_fig미사용을 렌더 시점에 감지해 명시적 안내. 지금은 경고 문자열 하나뿐이라 스크립트 작성자가 알아채기 어렵다.환경
style_policy: neutral,validation_target: nature,workflow.intent: explorationmcp_project_jobs/actuation-status-260812e