From bed1fd933f94afcfedd14d6224bddb4d9829f564 Mon Sep 17 00:00:00 2001 From: DongHyeonka Date: Thu, 10 Sep 2026 11:07:35 +0900 Subject: [PATCH] =?UTF-8?q?docs(CLAUDE):=20=EA=B2=80=EC=82=AC=EA=B8=B0?= =?UTF-8?q?=EA=B0=80=20=E3=80=8C=EB=B3=BC=20=EA=B2=83=EC=9D=B4=20=EC=97=86?= =?UTF-8?q?=EC=96=B4=EC=84=9C=20=ED=86=B5=EA=B3=BC=E3=80=8D=EB=A5=BC=20?= =?UTF-8?q?=E3=80=8C=EB=AC=B8=EC=A0=9C=20=EC=97=86=EC=9D=8C=E3=80=8D?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=93=B0=EC=A7=80=20=EC=95=8A=EA=B2=8C=20?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 겹침 검사기의 적용 범위를 적는다 — 판정에 쓰는 것은 뿐이라 techviz 가 만든 SVG 에서만 유효하다. 손댄 SVG 는 배경 사각형이 안 따라 바뀌어 겹침이 있어도 없다고 답한다. 그리고 관문의 종료 코드를 셋으로 가른다. 「대상이 성립하지 않는다」를 exit 2 로 두어 오타 한 번에 관문이 조용히 무효가 되는 것을 막는다. __pycache__ 는 .gitignore 에 이미 있는데 이 .pyc 하나만 추적되고 있어 두 세션의 작업 트리를 계속 더럽혔다. 추적에서 뺀다. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01GksxvQvM6A85xy8viYtWk6 --- CLAUDE.md | 23 ++++++++++++++++++ .../test_render_terminal.cpython-312.pyc | Bin 4550 -> 0 bytes 2 files changed, 23 insertions(+) delete mode 100644 scripts/terminal-evidence/tests/__pycache__/test_render_terminal.cpython-312.pyc diff --git a/CLAUDE.md b/CLAUDE.md index 9e28133..4f53d5c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -342,6 +342,17 @@ python3 scripts/verify-pipeline.py # 위 셋을 모든 프로 python3 -m unittest discover -s scripts/tests # 파서·검사기·생성기 ``` +**검사기는 「볼 것이 없어서 통과」를 「문제 없음」이라고 쓰지 않는다.** 셋을 가른다. + +| 상태 | 종료 코드 | 문구 | +|---|---|---| +| 봤고 괜찮다 | 0 | `문제 없음` · `error 0` | +| 대상이 성립하지 않는다 (프로젝트 없음 · 계약 없음) | **2** | `대상이 성립하지 않는다 — <이유>` | +| 볼 것이 아직 없다 (계약은 있고 기록이 0건) | 0 | `기록 0건 — 계약의 글감 N개가 아직 안 쓰였다` | + +가운데는 error 로 센다. 아래는 error 가 아니다 — **아직 안 쓴 것은 결함이 아니다.** 다만 +초록으로 보이면 안 된다. 오타 한 번에 관문이 조용히 무효가 되는 것을 이 구분이 막는다. + 게시 전에는 아래 둘을 돌린다. 하나는 파서를, 하나는 문장을 본다. **본문이 Studio 파서를 통과하는지.** Studio가 쓰는 파서를 그대로 부르므로 통과하면 저장도 통과한다. @@ -378,6 +389,18 @@ python3 scripts/check-figure-overlap.py <프로젝트> # 상자와 라벨이 라벨이 상자에 먹혀도 통과한다. 겹침 검사는 렌더러가 남긴 배경 사각형의 좌표를 그대로 읽으므로 글자 폭을 어림하지 않는다. `verify-project-layout.py` 가 이 검사를 함께 돈다. +**그 방법이 성립하는 범위가 따로 있다.** 「글자 폭을 어림하지 않는다」는 **방법**이고, +아래는 그 방법의 **적용 범위**다. 둘은 다른 문장이다. + +`check-figure-overlap.py` 가 겹침을 판정할 때 보는 것은 `` 뿐이다. `` 는 겹친 +자리에 무엇이 있었는지 이름을 대는 데만 쓰고 판정에는 안 쓴다. 그래서 배경 사각형이 그 글자가 +실제로 차지하는 자리와 같을 때만 겹침이 겹침으로 나타난다. + +**이 검사기는 techviz 가 만든 SVG 에서만 유효하다.** 손으로 고친 SVG, 다른 도구가 만든 SVG, +렌더한 뒤 글자만 바꾼 SVG 는 **겹침이 있어도 없다고 답한다** — 배경 사각형이 안 따라 바뀌기 +때문이다. 실측 예: 글자를 60자로 늘렸는데 배경은 131.9px 그대로였고 `check-figure-overlap` +은 통과시켰다. 그런 SVG 는 눈으로 본다. + **그래도 마지막에는 눈으로 본다.** 글자가 상자 밖으로 조금 나가거나 화살표가 라벨을 지나는 것은 좌표로 안 잡힌다. diff --git a/scripts/terminal-evidence/tests/__pycache__/test_render_terminal.cpython-312.pyc b/scripts/terminal-evidence/tests/__pycache__/test_render_terminal.cpython-312.pyc deleted file mode 100644 index 84b2461b278fcf6f58a7ec927598d0b33d2230a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4550 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 oQNx?h5iPAhE@*0N%jqaZR1#C2Dm;e9(