chore: 이전 세션이 남긴 변경을 커밋한다
이번 파이프라인 작업과 무관하게 작업 트리에 남아 있던 것을 그대로 올린다. 사용자가 「전부 커밋」으로 정했고, 이번 작업과 섞이지 않게 커밋만 나눴다. 대부분은 clean-architecture-backend-template 의 그림 정본 재배치다 — final/assets/diagrams/<이름>/ 에 있던 것이 CLAUDE.md 가 적은 배치인 final/assets/<이름>/ 로 옮겨졌고 .techviz/<이름>/ 이 함께 들어왔다. 삽입 줄의 대부분(3.15M)이 그 .techviz context.json 이다. 그 밖에 ca-tmpl·document-haness 의 정리, .claude/agents/ 열한 개, writing-practitioner-guides 스킬, .playwright-mcp 세션 산출물, scripts/check-ssot-facts.py 와 그 시험이 들어 있다. 이 커밋의 내용은 내가 만든 것이 아니라 이전 세션이 남긴 것이고 검증하지 않았다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
2109f726fe
commit
ab59130196
@@ -15,6 +15,22 @@ lint 는 의미(관계가 이어져 있는가)를 보고 `check-figure-text.py`
|
||||
|
||||
renderer 가 배경 사각형을 정확한 좌표로 남기므로 글자 폭을 어림하지 않는다 —
|
||||
`edge-label-bg` 와 `group-label-bg` 가 그 라벨이 실제로 차지하는 자리다.
|
||||
|
||||
## 그 방법이 성립하는 범위 — 「안 겹친다」와 「못 봤다」는 다른 출력이다
|
||||
|
||||
상자를 알아보는 근거는 **techviz 렌더러가 붙인 `class`** 다(`node-shape`·`group-box`·
|
||||
`edge-label-bg`·`group-label-bg`). 손으로 그린 SVG 에는 그 class 가 없으므로 `boxes()` 가
|
||||
**빈 목록**을 돌려주고, 겹칠 짝이 없으니 겹침도 0 이 된다.
|
||||
|
||||
그래서 고치기 전의 이 검사기는 `그림 182 · 겹친 그림 0` 을 찍었지만 **실제로 본 것은 18장**
|
||||
이었다. 나머지 164장은 안 겹친 것이 아니라 **볼 수 없었던 것**이다. CLAUDE.md 가 그 상태를
|
||||
이렇게 적는다 — 「이 검사기는 techviz 가 만든 SVG 에서만 유효하다. 손으로 고친 SVG …는
|
||||
겹침이 있어도 없다고 답한다」.
|
||||
|
||||
**그러면 출력이 그 사실을 말해야 한다.** 못 본 그림을 따로 세어 요약 줄에 싣는다. 결함으로
|
||||
세지는 않는다 — 손그림이 있는 것 자체는 잘못이 아니다. 다만 초록으로 보이면 안 된다.
|
||||
숫자를 되찾으려면 그 그림을 techviz 로 다시 만들어야 하고, `verify-project-layout.py` 의
|
||||
「techviz 정본이 없는 그림」이 같은 모집단을 센다.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
@@ -114,6 +130,19 @@ def _near(lbls, box, limit=2) -> str:
|
||||
return " · ".join(hit[:limit])
|
||||
|
||||
|
||||
def is_measurable(path: str) -> bool:
|
||||
"""이 그림의 좌표를 읽을 수 있나. 읽을 수 없으면 판정 자체가 성립하지 않는다.
|
||||
|
||||
근거는 techviz 렌더러가 붙인 `class` 하나뿐이다(모듈 독스트링). 그것이 없으면
|
||||
`boxes()` 가 비고, 겹칠 짝이 없어 **겹침 0** 이 나온다 — 「안 겹친다」가 아니라
|
||||
「못 봤다」다. 부르는 쪽이 그 둘을 갈라 세라고 따로 낸다.
|
||||
"""
|
||||
try:
|
||||
return bool(boxes(open(path, encoding="utf-8").read()))
|
||||
except OSError:
|
||||
return False
|
||||
|
||||
|
||||
def check(path: str) -> list[str]:
|
||||
try:
|
||||
svg = open(path, encoding="utf-8").read()
|
||||
@@ -169,7 +198,12 @@ def main() -> int:
|
||||
return 0
|
||||
|
||||
bad = 0
|
||||
unseen: list[str] = []
|
||||
for path in files:
|
||||
if not is_measurable(path):
|
||||
# 좌표를 읽을 수 없다. 「안 겹친다」로 세면 안 본 것을 봤다고 하는 것이다
|
||||
unseen.append(os.path.relpath(path, ROOT))
|
||||
continue
|
||||
hits = check(path)
|
||||
if not hits:
|
||||
continue
|
||||
@@ -180,7 +214,19 @@ def main() -> int:
|
||||
print(f" · {line}")
|
||||
if len(hits) > args.samples:
|
||||
print(f" … 외 {len(hits) - args.samples}건")
|
||||
print(f"FIGURE OVERLAP: {'FAIL' if bad else 'PASS'} — 그림 {len(files)} · 겹친 그림 {bad}")
|
||||
|
||||
if unseen:
|
||||
print(f"! 못 본 그림 {len(unseen)}장 — techviz 가 만든 것이 아니라 배경 사각형이 없다. "
|
||||
"겹침이 있어도 이 검사기는 답하지 못한다")
|
||||
for rel in unseen[:args.samples]:
|
||||
print(f" · {rel}")
|
||||
if len(unseen) > args.samples:
|
||||
print(f" … 외 {len(unseen) - args.samples}장")
|
||||
|
||||
seen = len(files) - len(unseen)
|
||||
tail = f" · 못 본 그림 {len(unseen)}" if unseen else ""
|
||||
print(f"FIGURE OVERLAP: {'FAIL' if bad else 'PASS'} — 그림 {len(files)} · "
|
||||
f"본 그림 {seen} · 겹친 그림 {bad}{tail}")
|
||||
return 1 if bad else 0
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user