요약
render_project_script 를 쓰는 과정에서 사용자가 잘못된 파일을 정본으로 오인하게 만드는 동작 3건.
환경: figops MCP surface v2, figops.health → version: "unknown", runtime_root ~/Library/Caches/FigOps.
(1) ★ 렌더 결과가 프로젝트에 반영되지 않는다 (가장 위험)
재현
figops.render_project_script(project_path="<프로젝트>", figure_id=...,
style_policy="nature", overwrite=true)
project_config.yaml 의 선언:
figures:
- id: Fig2_ChargeTransport_4panel
output: "results/figures/fig2_charge_transport/fig2_...png"
관측값
응답의 artifact.relative_path 는 project/results/figures/... 이고, 실제 파일은
~/Library/Caches/FigOps/mcp_project_jobs/<job_id>/project/results/figures/...
에만 생긴다. 원본 프로젝트 디렉토리의 output 경로는 갱신되지 않는다.
overwrite: true 를 줘도 마찬가지다. 이 인자가 무엇을 대상으로 하는지 불분명하다.
실제로 일어난 사고
같은 스크립트를 로컬에서 한 번 직접 실행한 적이 있어 프로젝트 경로에 구 버전 PNG 가 남아 있었다. 이후 figops 로 3회 렌더(b/c/d)하며 레이아웃을 고쳤는데, 프로젝트 파일은 계속 첫 로컬 실행본이었다.
- 프로젝트 파일: sha
75920f8e, 4251×2929 px, 00:38:02
- job-d 산출물: sha
90184748, 4247×2969 px, 00:41:41
응답의 sha 와 디스크의 sha 를 대조하기 전까지 알아채지 못했다. 렌더 결과를 확인했다고 믿고 검수까지 마친 상태였다.
제안
- 렌더 성공 시 job 산출물을 프로젝트의
output 경로로 반영하거나, 최소한 응답에 절대경로를 함께 반환할 것
- 반영하지 않는 것이 의도라면, 응답 요약에 "프로젝트 파일은 변경되지 않았다"를 명시할 것
overwrite 인자의 대상이 job 워크스페이스인지 프로젝트인지 문서화
(2) nature 테마가 savefig.bbox="tight" 를 켜서 물리 치수가 흔들린다
apply_journal_theme(target_format="nature") 후 rcParams:
figsize 로 180 mm 를 지정해도 tight 가 여백을 잘라 실제 폭이 매번 달라진다. 같은 figure 를 라벨만 바꿔 렌더한 결과:
| job |
폭 (mm) |
픽셀 |
| d |
179.79 |
4247×2969 |
| e |
179.79 |
4257×2969 |
| f |
178.60 |
4219×2966 |
투고 규격은 폭을 고정해야 하는데(단단 88 / 양단 180 mm), 라벨 길이에 따라 폭이 바뀐다.
save_journal_fig docstring 에 "layout-locked figures use rc_context to suppress tight" 라고 되어 있으나, GridSpec 에 절대 마진(left/right/top/bottom)을 준 figure 는 layout-locked 로 인식되지 않았다 (artists_outside_figure 의 layout_locked: false).
제안
- 저널 타깃에서는
bbox="standard" 를 기본으로 하고, tight 는 opt-in 으로
- 또는
apply_journal_theme 에 layout_locked=True 인자를 노출해 사용자가 명시할 수 있게
(3) log 축 구간이 좁으면 minor tick 라벨이 전부 켜져 겹친다
x 범위 28–338 s (약 1.08 decade) 인 log 축에서 라벨이 이렇게 나온다:
3×10¹ 4×10¹ 6×10¹ 10² 2×10² 3×10²
180 mm 폭의 3열 배치에서 각 패널 플롯이 약 43 mm 인데, 6개 라벨이 겹쳐 3×10¹ 과 4×10¹ 이 붙어 3×10⁴ 처럼 읽힌다.
matplotlib 의 LogFormatterSciNotation 기본 동작이지만, 저널 테마라면 좁은 패널에서 이를 억제하는 것이 맞다고 본다. 사용자가 매번 아래를 직접 넣어야 한다:
axd.xaxis.set_major_locator(FixedLocator([30, 100, 300]))
axd.xaxis.set_major_formatter(FixedFormatter(["30", "100", "300"]))
axd.xaxis.set_minor_formatter(NullFormatter())
또한 tick_label_overlaps[axis=3] 은 이 상태에서 빈 배열(겹침 없음) 을 보고했다 — minor tick 라벨이 검사 대상에서 빠진 것으로 보인다. (#230 의 진단 정확도 이슈와 연관)
제안
- 저널 프로파일에서 축 범위가 2 decade 미만이면 minor tick 라벨을 기본 억제
tick_label_overlaps 검사에 minor tick 라벨 포함
요약
render_project_script를 쓰는 과정에서 사용자가 잘못된 파일을 정본으로 오인하게 만드는 동작 3건.환경: figops MCP surface v2,
figops.health→version: "unknown", runtime_root~/Library/Caches/FigOps.(1) ★ 렌더 결과가 프로젝트에 반영되지 않는다 (가장 위험)
재현
project_config.yaml의 선언:관측값
응답의
artifact.relative_path는project/results/figures/...이고, 실제 파일은에만 생긴다. 원본 프로젝트 디렉토리의
output경로는 갱신되지 않는다.overwrite: true를 줘도 마찬가지다. 이 인자가 무엇을 대상으로 하는지 불분명하다.실제로 일어난 사고
같은 스크립트를 로컬에서 한 번 직접 실행한 적이 있어 프로젝트 경로에 구 버전 PNG 가 남아 있었다. 이후 figops 로 3회 렌더(b/c/d)하며 레이아웃을 고쳤는데, 프로젝트 파일은 계속 첫 로컬 실행본이었다.
75920f8e, 4251×2929 px, 00:38:0290184748, 4247×2969 px, 00:41:41응답의 sha 와 디스크의 sha 를 대조하기 전까지 알아채지 못했다. 렌더 결과를 확인했다고 믿고 검수까지 마친 상태였다.
제안
output경로로 반영하거나, 최소한 응답에 절대경로를 함께 반환할 것overwrite인자의 대상이 job 워크스페이스인지 프로젝트인지 문서화(2) nature 테마가
savefig.bbox="tight"를 켜서 물리 치수가 흔들린다apply_journal_theme(target_format="nature")후 rcParams:figsize로 180 mm 를 지정해도 tight 가 여백을 잘라 실제 폭이 매번 달라진다. 같은 figure 를 라벨만 바꿔 렌더한 결과:투고 규격은 폭을 고정해야 하는데(단단 88 / 양단 180 mm), 라벨 길이에 따라 폭이 바뀐다.
save_journal_figdocstring 에 "layout-locked figures use rc_context to suppress tight" 라고 되어 있으나, GridSpec 에 절대 마진(left/right/top/bottom)을 준 figure 는 layout-locked 로 인식되지 않았다 (artists_outside_figure의layout_locked: false).제안
bbox="standard"를 기본으로 하고, tight 는 opt-in 으로apply_journal_theme에layout_locked=True인자를 노출해 사용자가 명시할 수 있게(3) log 축 구간이 좁으면 minor tick 라벨이 전부 켜져 겹친다
x 범위 28–338 s (약 1.08 decade) 인 log 축에서 라벨이 이렇게 나온다:
180 mm 폭의 3열 배치에서 각 패널 플롯이 약 43 mm 인데, 6개 라벨이 겹쳐
3×10¹과4×10¹이 붙어3×10⁴처럼 읽힌다.matplotlib 의
LogFormatterSciNotation기본 동작이지만, 저널 테마라면 좁은 패널에서 이를 억제하는 것이 맞다고 본다. 사용자가 매번 아래를 직접 넣어야 한다:또한
tick_label_overlaps[axis=3]은 이 상태에서 빈 배열(겹침 없음) 을 보고했다 — minor tick 라벨이 검사 대상에서 빠진 것으로 보인다. (#230 의 진단 정확도 이슈와 연관)제안
tick_label_overlaps검사에 minor tick 라벨 포함