ax-biz — 규칙 · 함정
고객 제안서 · 카탈로그를 만들 때 반복해서 밟는 것만 둔다(전 고객 공통). 전역 규칙은
C:\dev\CLAUDE.md. 고객사별 고유 사실 · 금기는 그 프로젝트로 — 아트조이((주)자고등) =projects/artjoy/rules.md(26.9.15 분리).
고객 문서 만들 때
- 데이터만 고치고 빌더를 돌린다. 아트조이 =
C:\dev\_work\ax-biz\ax_artjoy.py(단일 출처,ax_data.py가 import) · 빌더build_artjoy.py(HTML → Playwright → PDF + 자체검사). 카탈로그 =build_catalog.py. - 금지어 검사는 빌더가 assert 로 막는다(내부 별칭 · 프로젝트명). 「조수은」은 허용 — 고객사 유지보수 주체로 문서에 나온다.
- 화면·인쇄물을 만들거나 고치면
web-designer상담이 착수 전 필수(전역 규칙). 처방을 받아 반영한 뒤 빌드한다.
🆕 신규
- 2026-09-18 [코디] 🔴소스 «주석»이 고객 산출물로 그대로 새어 나간다 — 굽기 전에 떼라. 단일 HTML 프레젠테이션을 굽는데 CSS · JS 에 적어둔 작업 메모(「페페 26.9.18」 등)가 산출 파일에 그대로 들어갔다. 금지어 자체검사는 태그를 뗀 본문만 보는데
<style>·<script>내용은 태그가 아니라 남는다 → 검사에 걸린 뒤에야 발견. ⛒처방 = ①빌드에서 CSS · JS 블록주석 + 줄 전체 주석을 제거하고 인라인 ②뗀 뒤node --check로 문법을 되읽어 문자열 안//를 잘못 지웠는지 확인 ③금지어 검사 대상에서 주석 ·<style>·<script>· base64 페이로드를 먼저 제거(안 그러면 base64 안의 우연한PFS같은 문자열이 오탐으로 걸린다). 구현 =C:\dev\_work\ax-biz\deck\build.py의strip_comments(). -
2026-09-18 [코디] 단일 HTML 산출물은 «소스 분할 + 빌드»로 간다 — 1파일 직접 편집은 못 버틴다. 산출 1MB 중 95%가 base64(폰트 · 이미지)라 편집기가 못 연다. 그리고 폰트 서브셋은 매 빌드마다 본문 글자로 다시 잘라야 한다 — 글을 한 글자 고친 순간 서브셋에 없는 글자가 시스템 폰트로 조용히 폴백한다(타이포가 주인공인 문서에선 치명적). 구조 =
deck\src\{index.html,deck.css,deck.js,chapters\NN-*.html}+build.py·check.py·make_pdf.py. 검증은 실제 브라우저로 되읽는다(chromium + webkit). 기법 전집 =C:\dev\design-refs\dark-scroll-deck-2026-09\README.md. -
2026-09-14 [코디] 🔴한 페이지를 고치려고 «전역 셀렉터»에 제한을 걸면 다른 페이지가 조용히 망가진다 — 스코프를 좁혀라. 05 사례의 빈 페이지를 없애려고
figure img{max-height:96mm→44mm}를 전역으로 걸었는데, 같은 셀렉터에 걸린 표지 실물 화면 사진이 절반 이하로 눌렸다(1740×1000 이라 폭 182mm 면 자연 세로 105mm 인데 44mm 로 압축). 빈 페이지·쪽수·금지어 자체검사는 전부 통과해서 아무 경보도 안 울렸고, 페페가 「사진이 작게 나왔다」고 지적할 때까지 몰랐다. ⛒처방 =.figs figure img{…}로 그 섹션만. ⚠CSS 값을 바꾼 뒤엔 그 셀렉터가 걸리는 «다른» 페이지를 반드시 같이 본다(대조표만 보면 표지는 원래 그림이 커서 「작아진 것」을 눈치채기 어렵다). 표지처럼 설득력이 걸린 그림은.cover>div:first-child{flex:1}+.cover-fig{flex:1}로 프레임을 하단까지 늘려 최대 크기로 쓴다. - 2026-09-14 [코디] 🔴devplan
media/에 «같은 이름으로 덮어쓰는» 산출물은 링크에?v=<mtime>을 붙인다 — 안 붙이면 페페 화면엔 옛 판이 계속 보인다. 제안서 PDF 를 새로 구워 복사하고 카탈로그까지 재빌드했는데 「갱신이 안 된 것 같다」는 지적이 왔다. 서버는 최신을 주고 있었다(curl md5 일치) — 범인은 브라우저 PDF 캐시(같은 URL). 처방은 이미 리포 안에 있던 패턴 재사용 =theme_href = '/assets/theme.css?v=%d' % int(os.path.getmtime(THEME))를 PDF 에도(build_catalog.py의pdf_href). ⛒빌드 순서 = PDF 굽기 → media 복사 → 카탈로그 빌드 (거꾸로 하면 옛 mtime 이 박힌다). 진단 3줄 = ①md5sum 원본 사본②curl -s -o /tmp/x -w "%{http_code} %{size_download}"로 서버가 주는 것을 받아 md5 대조 ③그래도 다르면 캐시. - 2026-09-14 [코디] 🔴고객 문서의 «사례 화면»은 고객 업종 자산으로만 채운다 — 금지어 검사가 못 잡는다. 아트조이 제안서 v2 의 사례 6번째가 내부 콘텐츠 계정의 고양이 정보 카드(
insta-card)였다. 「카드 자동 만들기」라는 기능 사례로는 맞지만, DIY 취미 키트 유통사 대표가 받는 문서에 고양이 카드가 실린다.FORBIDDEN검사는 태그를 제거한 텍스트만 보므로<img src>키는 통과한다 → 케이스 이미지 키는 빌드 후 눈으로 대조한다. 교체 =aj-design(1단계 디자인 자료실 실물) 처럼 그 고객 자료로. - 2026-09-14 [코디] 🔴PDF 빈 페이지는 대조표 육안으로 못 잡는다 —
fitz로 페이지별 텍스트 길이를 찍는다. 머리글·꼬리말만 남은 페이지는 축소판에서 「여백 많은 정상 페이지」로 보인다(13쪽 중 3장이 그랬다). 판정 =for i,p in enumerate(d,1): print(i, len((p.get_text() or '').strip()))— 500자 미만이면 의심. 원인은section{break-after:page}+table,figure{break-inside:avoid}조합이라 내용이 한 장에 다 들어가도pagefoot한 줄이 다음 장으로 밀리면 빈 페이지가 생긴다. 처방 = 그 섹션에서 몇 mm 를 덜어낸다(이미지max-height축소 · 중복 열 삭제 · 각주 압축). - 2026-09-14 [코디] 실무형 대표용 문서는 「큰 제목만 봐도 답」 구조로 뒤집는다 — 첫 장을 숫자판 4블록(효과 · 비용 · 절감 · 수익)으로. 레이아웃은 2×2 균등이 아니라 상단 2 짧게(64mm) · 하단 2 표(112mm) 비대칭(스탯형과 표형은 밀도가 달라 균등 칸이면 위가 휑하고 아래가 빽빽해진다). 추정치는 확정 금액과 시각적으로 갈라 놓는다 — 확정 = 13.5pt 레드 900 + 레드 밑줄(흑백 출력에도 남는다), 추정 · 측정예정 = 무채색 400. 「추정」 각주는 기각(대표가 각주를 안 읽어 확정 수치로 오인 → 나중에 클레임).