sueun-dev — 규칙 · 함정
대상 =
C:\dev\dev\(POIN-MINI) = 조수은 PC 의C:\dev\사본. 고객사 · 조수은 역할 · IP 합의서는projects/artjoy/. 전역 규칙 =C:\dev\CLAUDE.md.
🔴🆕 0순위 — 상세페이지 생성기 정본 = 아트조이 AI PC · [페페] 26.9.19(토)
지시 원문 = 「상세페이지 생성기는
http://artjoy-aipc.tailbea356.ts.net/를 봐야 한다. 우리 dev에서는 고치지 않는다. 앞으로 아트조이 ai pc 쪽 개발을 하는거다.」
- 고칠 곳 =
ssh artjoy(ARTJOY-AIPC · Tailscale100.122.89.28· 키C:\dev\.secrets\artjoy_pc_ed25519) 의C:\dev\haedali-detail-generator\. 우리 사본C:\dev\dev\haedali-detail-generator\는 읽기 참고용 — 고치지 않는다. - 실화면 =
http://artjoy-aipc.tailbea356.ts.net:8820/(사무실 LAN =http://192.168.1.202:8820/) · DB =haedali-artjoy.sqlite3· 서버는 예약작업\Cody\HaedaliServer로 상시. - 🔑두 판은 이미 갈라졌다 — 26.9.19 실측
index.htmlsha256 = 미니PC 사본e7a254…≠ AI PC2412ea…. 사본에 고쳐 봐야 조수은 화면엔 안 간다. - 원격 편집 절차 = ①
scp artjoy:C:/dev/haedali-detail-generator/<파일> <scratchpad>②로컬에서 Write/Edit ③원격 백업ssh artjoy "cd C:\dev\haedali-detail-generator && copy /Y <파일> <파일>.bak-YYYYMMDD-HHMM"④scp로 덮기 ⑤certutil -hashfile <파일> SHA256양쪽 대조.index.html은 정적 서빙이라 서버 재시작 불필요(새로고침만). - ⛒검증은 읽기·계측만 — 화면에서 「저장」·「작업본 저장」·「JPG 저장」을 누르면 실 SQLite 에 새 버전이 쓰인다. 카드를 임시로 추가해 봤으면 저장하지 말고 새로고침으로 버린다.
- 상태판도 그쪽 =
C:\dev\devplan\artjoy-ai-pc.html(sueun-dev.html은 조수은 허브로 가는 리다이렉트 스텁이다). - 아래 1순위 절의 「
C:\dev\dev\안에서 프로젝트 작업」은 생성기 외 항목(artjoy-hub · budget · ui-library-hub)에만 남는다. - 🔴🆕26.9.19 [페페] 「무조건 생성기 «기능»쪽만. 실제 상세페이지 작업 «결과물»에 영향이 가게 건들면 안 된다」 — 편집 UI·기능은 고쳐도 되지만 산출물(JPG·출력 HTML)의 픽셀을 바꾸는 변경은 금지. 렌더 CSS(
.dc-*)·글자 체계 값·작업본 DB 데이터가 그 선이다. 하한 미달 같은 정당한 사유가 있어도 고치지 말고 판단 항목으로 올린다. - ⛒판정 방법 = 배포 전후 출력물 해시 대조(
…\scratchpad\aipc\baseline.py) —?exportPage=<키>로 열어#preview의 DOM 해시·PNG 해시를 작업본 4종에 대해 뜬 뒤 배포 후 다시 떠서 전부 같아야 통과. 편집 전용 DOM 은html.hd-export에서 숨겨지므로, 새 UI 는 그 스코프 안에 넣고 스크립트도hd-export면 아예 붙이지 않는다. - ⛔26.9.24 [페페] 아래 데스크톱 주입 규칙은 대체됐다 → 「아트조이 클로드는 백그라운드로만 지시·결과 수신」(절차 =
projects/artjoy/rules.md🆕 맨 위). 아래 절은 경위·함정 기록으로만 둔다. - 🔴🆕26.9.22 [페페] 「조수은이 배워야 하니 꼭 «클로드 데스크톱»으로 작업해 이력을 남겨라」 — 지시 전달은 AI PC 의 Claude Desktop 앱에 직접 넣는다. 헤드리스
claude -p·ssh로 시키면 결과는 나와도 조수은이 열어 볼 이력이 안 남아 지시 위반이다. 경로 =C:\cody\dt_ops.ps1(+dt_ops.cmd·dt_mode.txt·dt_prompt.txt) · 예약작업\Cody\dt-ops(/it /ru artjoy= Session 1 대화형, SSH 는 Session 0 라 GUI 를 못 잡는다). 모드 =windows|click|newchat|paste|enter|shot, 매 단계 스크린샷으로 확인하고 다음 단계(paste 와 enter 를 일부러 나눴다). 함정 = ①Ctrl+N무효 → 「+ 새로 생성」 좌표 클릭(1920×1080 기준343,234) ②Electron 이라WM_COMMAND0xFFF1 붙여넣기 무효 →keybd_eventCtrl+V ③붙여넣기 전 입력창 클릭(1020,904) 필수 ④화면 중앙의 빈 「관리자 cmd」 창이 포커스를 훔친다(매 실행 전 닫는다). 26.9.20 canvas 세트(C:\dev\artjoy-canvas\_ops.ps1, 타깃 = CLI 창)와 타깃이 다르다 — 섞지 마라. ⛒그 PC 는 조수은이 쓴다 — 진행 중인 대화엔 끼어들지 말고 새 대화로 넣는다(idle 판정 =dt_ops.ps1이idle_sec를 먼저 찍는다). - 🔴🆕26.9.22 [페페 지적] GO-159·160·161 은 «묶음 옵션형» 한 제품이다 — 3종 묶음 상세페이지가 정상이고, NAS 에 단독 파일이 없는 게 맞다. 「단독 페이지를 만들어도 되나」로 헷갈리면 폴더를 뒤지지 말고 기록을 먼저 본다(archive.md =
group-1 = GO-159·160·161· 초안관리 제품코드 칩이 다중 코드GO-159,GO-160,GO-161를 전부 표시 · CS팀 엑셀Q열이 묶음 수량). 페페 원문 = 「159,160,161 이 묶음 옵션형 제품 상세페이지여서 그렇다. 이전 이력을 살펴봤으면 다 있는 내용인데 시드체인을 제대로 읽어라」. AI PC 쪽에도 같은 지적을 전달했다(그쪽 기록 =C:\dev\seedchain\HANDOFF.md). - 🆕26.9.22 [페페] NAS 는 지금 실사용 안 한다 — 완성 JPG 를 올리지 마라. 읽기만 한다. 산출물은 AI PC
C:\dev\haedali-detail-generator\outputs\와 SQLite DB(data\work\haedali-artjoy.sqlite3) 가 메인이고, 조수은은 생성기 화면(8820)에서 검토한다. NAS(\\NAS\…\자고등\디자이너 작업\98.정리수납함\케이스\상세페이지\)는 예전에 완성 JPG 를 두던 자리일 뿐이다. - 🆕26.9.22 [페페] 아트조이 AI PC 규칙서에 heredoc 금지를 박았다 —
ssh artjoy의C:\dev\AGENTS.md「도구」 절(백업AGENTS.md.bak-20260922-1100· 배포 후 sha256 양쪽 일치8120754885…). 문구 = 「파일을 만들거나 고칠 때는 Write/Edit 도구만 쓴다. 셸 heredoc 은 쓰지 않는다 — 이 PC 는 리눅스가 아니라 윈도우라 역슬래시·따옴표·정규식이 섞이면 조용히 깨지고 오류도 안 난다」. 그쪽 규칙서는 조수은이 읽는 쉬운 말 문서라 톤을 맞췄다(경로·전문용어 최소). 우리 쪽 같은 규칙 = 전역C:\dev\CLAUDE.md§2-7. - 🔴🆕26.9.22 Claude Desktop 입력창의 글씨는 «실제 입력»일 수도 «다음 지시 제안»일 수도 있다 — 글자 색으로 가른다. 앱이 다음에 칠 법한 문장을 입력창에 미리 띄워 두는데, 모양이 똑같아 사람이 친 것처럼 보인다(26.9.22 실제로 「조수은이 타이핑해 둔 것」으로 오판해 주입을 보류했다). ⛒판정 = 스크린샷의 입력창 한 줄(1920×1080 에서
(648,890)-(1380,920))을 회색조로 잘라 가장 진한 픽셀값을 본다 — 실제 입력이면 60 이하(실측 11 · 본문색 픽셀 수십 개), 제안·플레이스홀더면 130~160(실측 135 · 본문색 픽셀 0개). 도구 =C:\Users\delix\AppData\Local\Temp\claude\c--dev\<세션>\scratchpad\inkcheck.py. ⚠붙여넣기 전에 항상Ctrl+A→Delete를 먼저 친다 — 제안이 클릭으로 수락되면 우리 글 앞에 남는다(dt_ops.ps1paste 모드에 넣어 뒀다). - 🔴🆕26.9.22 AI PC 에서 미니PC 로 «직접» 신호를 못 보낸다 — broker 7777 은
127.0.0.1바인딩이다. 그래서 신호는 파일 + 폴링으로 받는다: AI PC 가C:\cody\jobs\signal.json(규격 = 같은 폴더SIGNAL.md)에step|done|question|blocked를 쓰고, 미니PC 세션이 5분마다 ssh 로 읽는다(감시 스크립트 = 세션 scratchpadwatch_go159.sh).question·blocked면 거기서 멈추라고 못 박는다 — 역방향 통로가 없어 그쪽이 혼자 추측하면 되돌릴 수 없다. - 🔴🆕26.9.22 [페페] AI 이미지 형태 고정은 «금지어»가 아니라 «디테일 서술»로 한다 — 원문 「수정을 금지하기보다 디테일을 자세히 설명해주는 쪽으로 프롬프트를 만들어라」.
don't change the shelves류 부정문은 잘 안 듣는다. ⛒원본을 확대 판독해 선반 수·3축 비율·줄무늬 개수·손잡이 위치를 «세어» 형태 명세서(form-spec.md)로 적고, 그 서술 문단을 매 생성 호출 맨 앞에 글자 그대로 붙인다. 부정문은 보조로 짧게만. 원본에 안 보이는 면은 「불명」으로 두고 그 각도를 만들지 않는다 — 지어낸 면이 뒤 단계 전부를 오염시킨다. 양식 =C:\cody\jobs\case-go159-spec.md§1-B. -
🆕자체 드롭리스트(
droplist.js)는 고를 때change만 쏜다 —input이벤트로만 값을 저장하는 화면에 그대로 붙이면 골라도 저장이 안 된다(겉보기엔 정상이라 더 위험). 붙일 때change리스너를 같은 핸들러에 태운다. 같은 함정 기록 =C:\dev\pfs\web\nesting\nesting.html:2008. -
🆕26.9.22 «개별 제품» 페이지와 «묶음 옵션» 페이지는 카드 구조가 아니라 «밀도»가 다르다 — 카드 타입(공감→해답→네임→체크→POINT→정보→고지)은 원래 양쪽 같다. 개별은 비교 상대가 없으니 그 자리를 한 제품의 서로 다른 근거로 채운다: ①POINT 카드 2~3장(기존 단독 페이지 4개는 전부 POINT 가 배너 재탕 1장뿐이었다) ②CHECK POINT 카피를 아래 POINT 사진과 1:1 로 맞춘다(사진으로 증명 안 되는 문구를 쓰면 GO-169 의 「층을 나눠」 정정 사고가 반복된다) ③
compare카드 미사용. 🔴그리고 POINT 를 AI 컷으로 갈면 Notice 1번 「사진은 공급사 제공 이미지로…」가 거짓말이 된다 — 반드시 AI 고지 문구로 교체한다(표시광고). 실행 스펙 양식 =C:\cody\jobs\case-go176-spec.md. - 🆕26.9.22 케이스 제품을 새로 고를 땐 «몰드 혼재»와 «브랜드·캐릭터 오염»을 먼저 본다 —
final.json을 열어 ①帯隔板/无隔板 처럼 다른 몰드 사진이 섞였는지(GO-169·GO-170) ②채택본에 브랜드 로고·실존 캐릭터가 찍혔는지(GO-169 는 26.9.16 재검수에서 화장품 로고로 3장 폐기, GO-176final/03.jpg는 포켓몬 피규어) ③치수 라벨이 스펙표와 맞는지(GO-168 은27×27×13vs27×14×22불일치). 오염 사진은 구도만 참고하고 프롬프트에 이름을 넣지 않는다. - 🔴🆕26.9.22 우리가 쓴 작업 스펙보다 «조수은 쪽 기록»이 우선이다 — 정본 기록 = AI PC
C:\dev\seedchain\projects\haedali-detail-generator\rules.md·handoff.md. 실측 사고 2건(같은 날 GO-176 1단계 직전) = ①GO-176 색상: 우리 스펙이 원본 사진만 보고 「흰 상판」이라 썼는데 기록 L80 = 「전체 투명(흰 상판 아님, 26.9.21 페페 지적)」 — 공급처 한 곳에 색상 옵션 사진이 섞여 있어 refs 를 그대로 따라가면 조용히 틀린 색이 나온다 ②AI 고지: 우리 스펙이 기존 매니페스트(GO-167 등)를 근거로 「고지 캡션 필수」라 썼는데 기록 L39 = 「AI 고지 문구·캡션을 넣지 않는다(26.9.17 페페)」 — 그 매니페스트들은 지시 이전 산출물이었다. ⛒지시문에 「스펙과 기록이 어긋나면 기록이 우선 · 멈추고 알려라」를 박는다(이번엔 그 덕에 착수 전에 잡혔다). 고지 없이 생성 이미지를 쓰는 만큼 없는 기능·구성품·색을 그리면 방어가 안 된다 → 형태 명세서 대조가 더 중요해진다. - 🔴🆕26.9.22 색 판정 전에 «그 창이 맨 앞인지»부터 본다 — 13:1x 에 입력창이
min 251 · 진한 픽셀 0으로 나와 「조수은이 전송했다」고 읽었는데, 실은 조수은이 ChatGPT 창(아웃페인팅 작업)을 앞에 띄워 Claude 창을 가린 것이라 엉뚱한 자리를 잰 거였다. ⛒고정좌표 판정은dt_ops.ps1의target=창이 실제로 최상단일 때만 유효하다 — 가려졌으면 판정하지 말고 전체 스크린샷을 눈으로 본다. 그리고 사람이 그 PC 를 쓰는 중이면 포커스를 뺏는 조작(click·paste·enter)을 하지 않는다(비침습 철칙) — 답은 파일로 남기고 기다린다. - 🔴🆕26.9.22 데스크톱 앱 입력창 「실제 입력 vs 제안」 색 판정은 «글자 영역만» 잘라야 한다 — 기록돼 있던 크롭
(648,890)-(1380,920)은 창 테두리·아이콘이 섞여 플레이스홀더 화면에서도darkest=11 · <60px 18개가 나온다(그대로 믿으면 빈 칸을 사람 입력으로 오판). ✅고친 크롭 =(651,893)-(1000,918)→ 플레이스홀더min 135 · <100 0개· 실제 입력min 11 · <100 18개 · <140 319개. ⛒사람이 쓰던 글이 있으면 주입하지 말고 파일로 답을 남긴다(paste모드가Ctrl+A→Delete로 지운다) — 26.9.22 실측: 조수은이 답을 타이핑해 둔 걸 보고 주입을 취소하고C:\cody\jobs\ANSWER-GO176.md로 회신했다. -
🆕26.9.22 AI 이미지 재작업은 반드시 «새 키»로 만든다 —
single-GO-<코드>-ai.json·case-260913-go-<코드>-ai{,-pc}. 기존 매니페스트·완성본 16개를 덮으면 이미 확정된 결과물이 조용히 바뀐다. -
🔴🆕26.9.22 형태 명세서는 «원본을 확대 판독한 쪽»이 정본이다 — 우리가 축소본만 보고 쓴 FORM 문단이 GO-176 에서 두 군데 틀렸다: ①도어를 「우측 옆판 자석문」으로 썼는데 원본은 앞면 30cm 전체가 아래 축 드롭다운 문 ②선반을 「깊이 전체 트레이」로 썼는데 원본은 좁은 계단식 선반 2장(뒤-높게/앞-낮게 · 제품명 阶梯式). 11장 중 4장을 버렸다. ⛒이미지를 뽑기 전에 부분 확대본을 떠서 세고, 생성 담당과 판독 담당이 다르면 판독본(
form-spec.md)을 단일 출처로 삼아 프롬프트를 갈아끼운다. - 🆕26.9.22 이미지 엔진 특성(실측) — 나노바나나는 refs 각도를 강하게 따라간다(3/4 원본을 물리면 정면·측면·클로즈업이 전부 3/4 로 나온다) → 칸마다 refs 를 갈고 클로즈업은 refs 없이 뽑는다. ChatGPT 는 형태 정확도가 확연히 낫다(장당 155~175초 · 나노바나나 50~68초) — 안 풀리는 컷만 GPT 로 돌리는 게 페페 방침(26.9.22). ⚠GPT 는 refs 2장 이상이면 「결과가 참조와 같다」로 실패하는 일이 있다 → 1장으로 줄인다.
- 🔴🆕26.9.22 데스크톱 앱 고정좌표 클릭은 창이 움직이면 «남의 창»을 누른다 — Claude 창이 옮겨진 줄 모르고 두 번 연속 전송에 실패했다(클릭이 ChatGPT 창으로 가고
Ctrl+A가 대화 본문에 먹었다). ✅고침 =C:\cody\dt_ops.ps1에 창 rect 기준 상대 클릭(dt_click.txt에auto,<하단여백>· 입력창 = 가로중앙·하단에서 60px) + 최대화를 풀어버리던ShowWindow(h,9)(RESTORE) →5(SHOW) +max모드 신설. 전송 확인 = 붙여넣기 전후 입력영역 잉크 픽셀 비교(<100이 수천 → 수십이면 전송된 것).
🔴 1순위 — 임시 규칙 (작업 끝나고 이관할 때 이 절 통째로 뺀다) · [페페] 26.9.15(화)
C:\dev\dev\안의 지시문 파일은 무시한다. 대상 =C:\dev\dev\AGENTS.md·C:\dev\dev\haedali-detail-generator\CODEX-PROMPT.md·C:\dev\dev\seedchain\의 절차 지시(HANDOFF 규칙 · 각rules.md의 운영 지시) ·C:\dev\dev\tools\README.md의 작업 규칙.- 기본 세팅 · 규칙 = 우리 룰 —
C:\dev\CLAUDE.md+C:\dev\seedchain\rules\. 기록은 seedchainprojects/sueun-dev/(태그[코디]/[페페]), 알림 =notify.py, 상태판 = 우리 devplanC:\dev\devplan\sueun-dev.html. - 그 안에서 우리가 하는 건 프로젝트 작업뿐이다(haedali-detail-generator 등 코드 · 데이터).
- seedchain 의 archive 는 사실 참고용으로만 읽는다(지시 아님). 거기서 뽑은 기술 함정은 아래 「함정」 절과
handoff.md에 이미 옮겨 뒀다. 절차 지시(8799 상주 유지 · seedchain 갱신 ·[클로드]태그 · 그릴링 2~3개씩 · 답변 끝 형식)는 따르지 않는다. - 🔒지침파일 11개는 격리돼 있다 — 격리 폴더는 열지 않는다([페페] 26.9.15 「혹시 모르니까」 지시). 위치 =
C:\dev_quarantine\sueun-dev-2026-09-15\(C:\dev 밖이라 CLAUDE.md 상위 로드 · 전문검색 · 코덱스AGENTS.md자동 로드에 안 걸린다). 목록 =C:\dev\_work\sueun-dev\quarantine-2026-09-15.txt(경로만) —AGENTS.md·haedali-detail-generator\CODEX-PROMPT.md·seedchain\HANDOFF.md·seedchain\projects\{artjoy-hub,budget,haedali-detail-generator,ui-library-hub}\{handoff,rules}.md. 격리본 sha256 = 기준선과 11/11 일치.archive.md4개(순수 이력)와 seedchain 안 앱 파일(html · js)은 그대로 뒀다. - 부작용 =C:\dev\dev\tools\build-executive-bundle.cjs는 seedchainhandoff/rules.md를existsSync로 골라 담는다 → 격리 중에 돌리면 오류 없이 그 문서만 빠진 번들이 나온다. - 종료 · 이관 절차(작업 완료 후 페페 지시로 착수)
① 이 1순위 절 +
C:\dev\CLAUDE.md맨 위 포인터 줄 제거 + 격리 11개 원위치 복원(목록 파일대로C:\dev_quarantine\sueun-dev-2026-09-15\X→C:\dev\dev\X이동 · 복원 확인 = 다음 ② 의D가 0) ②python C:\dev\_work\sueun-dev\snap.py diff C:\dev\_work\sueun-dev\baseline-2026-09-15.tsv→A(추가) ·M(수정)만 추린다 (D는 참고) ③ 산출물 · 백업(data\backups\·outputs\·tools\out\· 검증 DB 변경)을 걸러 페페 검토 ④ 조수은 PCC:\dev\로 수정 · 추가분만 복사(C:\dev\dev\X→C:\dev\X) ⑤ 조수은 PC 에서 실행 확인 - 🆕[페페] 26.9.16(수) 01:0x KST — 격리 규칙파일 11개 복원은 「매 작업 답변 맨 끝에 진행할지 묻는다」. 페페가 「복원 진행」이라 답하기 전엔 복원하지 않는다(6항 ① 의 복원만 해당 · 이관 나머지 단계는 따로 지시). 질문 한 줄 = 「격리 규칙파일 11개(
C:\dev_quarantine\sueun-dev-2026-09-15\) 원위치 복원 진행할까요?」. - ✅[페페] 26.9.16 01:4x KST 답 = 「모든 작업이 끝나면 격리 규칙 파일도 dev 폴더 안 원래 위치로 복원」 → 질문 종료 · 마지막 단계에서 복원(목록 파일대로 이동 ·snap.py diff의 D 0 확인). -
🆕[페페] 26.9.16 01:4x KST — 조수은 AI 메인폴더 =
Z:\homes\admin\Drive\자고등\디자이너 작업\#조수은\dev(아트조이 NAS · 당분간). 🔑01:5x [페페] 「폴더에서 # 을 빼라」 → NAS 단계에서#조수은→조수은개명 · 최종 =Z:\homes\admin\Drive\자고등\디자이너 작업\조수은\dev(#는 file:// URL 조각 기호라 링크가 끊긴다 · 형제 폴더 123개 중#는 이것뿐 = 관례 아님 · 개명 전 안의 기존 6개(dev.zip · 사용안내.txt · PDF · 로고 png/txt · 통합 html) 목록 기록 → 개명 후 대조) · 코드 참조 2곳 같이 고침 =C:\dev\dev\haedali-detail-generator\README.md:71·tools\catalog\import-case-classification.js:14(DB 에는#조수은문자열 0건). 이관 대상이 「조수은 PCC:\dev」 → 이 NAS 폴더로 바뀌었다. 작업 완료 후: ①우리 PC devplan 내용을 조수은 devplan(C:\dev\dev\devplan\)에 포함 · 우리 허브 카드는 조수은 devplan 으로 바로 연결 ②오늘 만든 detail-page-designer 에이전트 등 필요사항 포함 ③격리 11개 원위치 복원 ④C:\dev\dev전체(수정 · 추가분 포함 모든 자료)를 NAS 폴더로 복사(이 폴더 쓰기는 페페 명시 지시 — 나머지 NAS 는 여전히 읽기 전용) ⑤조수은이 어느 PC 에서든 AI 가 그 dev 폴더를 연결해 기존처럼 작업하는 지시문 → 페페 카톡으로 발송. ⚠NAS(RaiDrive WebDAV)에 SQLite DB 를 두면 동시 접속 시 잠금 · 손상 위험 → 지시문에 「한 번에 한 PC 만 서버 실행」 명시. -
🆕🔴26.9.16 [코디] 하위 에이전트 NAS 브리프엔 「대상 폴더 밖 쓰기 · 테스트 폴더 생성 금지 · 막히면 멈추고 보고」를 박는다 — 개명 실패 원인을 찾던 에이전트가
디자이너 작업바로 아래(회사 공용)에 1.6GB 테스트 폴더 5개를 만들고, 삭제 금지 규칙 때문에 못 치운 채 끝났다. 「삭제 금지」만 적고 「쓰기 범위」를 안 적은 브리프 결함. 규칙 id =nas-write-outside-scope.
🎨 상세페이지 에이전트 관여 필수 · [페페] 26.9.15(화)
- 생성기(
C:\dev\dev\haedali-detail-generator\) 파일을 고치기 전에detail-page-designer상담(Agent 도구). 훅detail-page-agent-required가 상담 기록 없는 Write/Edit·Bash 쓰기를 막는다. - 넘길 것 = 무엇을 왜 · 대상 파일 · 제품/템플릿 · 현재 산출 JPG/HTML 경로(
outputs\등). 규약·한계 =projects\detail-page-designer\rules.md§2 · KB =projects\detail-page-designer\kb\. - 이관(1순위 6항) 때 이 절과 CLAUDE.md §3 의 해당 줄을 뺄지 페페에게 묻는다(조수은 PC 엔 이 에이전트·훅이 없다).
📌 상시 작업 규칙 · [페페] 26.9.15(화) 밤 (매 작업 기본)
- 생성기에 필요한 카드 양식이 없으면 생성기에 새 양식을 추가한다(detail-page-designer 스펙 → index.html). 기존 저장본 출력은 불변이어야 한다 — 검증 = 수정 전(HEAD) HTML 을 Playwright route 로 끼워
#preview픽셀 대조(쇼케이스) · LUG 는 카드 id 가 랜덤이라 DOM 대조. - 사진 = 썸네일 · 배너 말고 판매 페이지 안(갤러리 + 상세 본문)의 연출샷 · 상황 이미지를 전부 찾아 쓴다. 구매후기 사진 · 추천 상품 · 식별되는 얼굴 · 인쇄 변형은 탈락.
- 쿠팡용 = 누끼샷 필수(배경 흰색) · 모든 제품 1000×1000 배너 = 누끼 + 웹 참조 연출/특징컷 · 원본 이미지에 글자 0 · 저작권 때문에 한국 내 검색 금지(한국 사이트 · 한국어 검색어).
- 「커피증정」 원형 배지 = 제품이 가장 잘 나온 컷 우측 상단 · 참조 = 노란 원(검은 테두리) 안 아이스커피 컵 사진 + 원 아래를 가로지르는 검은 띠에 노란 굵은 「커피 증정」(참조만, 새로 만들어도 됨).
- 특징 원형 버튼 = 배너의 제품과 안 겹치는 빈 공간 · 원형 프레임 버튼식 · 단순 폰트 말고 그래픽 스타일(테두리 · 그림자 · 살짝 회전) · 가시성 최우선. - ⚠detail-page-designer: 쿠팡 대표이미지엔 배지 · 글자 넣지 말 것(ESM 계열 명시 금지 · 쿠팡 1차 원문 미확인) → 대표 = 순수 누끼, 배지 · 버튼 = 추가이미지. 페페 확인 대상.
함정 (이 PC = POIN-MINI)
- 🔴포트 8799 충돌 — 생성기 기본 포트 8799 = 우리 devplan 대시보드 상주 포트(
C:\dev\tools\portgate\PORTS.md).start.cmd는set PORT=8799를 박아 env 를 무시한다 →start.cmd금지. 띄울 땐portgate.py claim으로 받은 포트를PORT=<포트> node C:\dev\dev\haedali-detail-generator\tools\static_server.js로(static_server.js:9가process.env.PORT를 읽는다). 끝나면 프로세스 종료. register-autostart.ps1(예약작업HaedaliDetailGenerator8799) ·watch-server.ps1실행 금지 — 조수은 PC 용 상주 설정이다.- 🔴Z: = 아트조이 NAS(RaiDrive WebDAV
\\RaiDrive-delix\WebDAV)가 이 PC 에도 같은 경로로 붙어 있다(26.9.15 정정 — 처음ls /z/가docker·home만 보여 「다른 NAS」로 오판했다. RaiDrive 는 목록을 늦게 채운다 → 한 번 더 보면homes·디자이너가 뜬다. 판정 =net use의Z: \\RaiDrive-delix\WebDAV+ls "/z/homes/admin/Drive/자고등/"). - 생성기 DB 가 이 경로를 쥐고 있다 —
catalog_media.source_root42행 =Z:\homes\admin\Drive\자고등\디자이너 작업·catalog_media.mapping_source_path21행 =…\24.LED보석십자수(캔버스형)\banner\nonlogo\40X50(이 PC 에서 54파일 실재) ·audit_events2건. 케이스 분류 원본 =…\디자이너 작업\#조수은\케이스_분류작업.xlsx. - 그래서
npm run lug:images:import·case:import --source Z:\…는 여기서도 돈다. ⚠NAS 는 아트조이 회사 자산 = 읽기 전용으로만 쓴다(쓰기 · 이동 · 삭제 금지). - 기존 상품 폴더 관례 =
Z:\homes\admin\Drive\자고등\디자이너 작업\<번호.분류>\<상품명>\{중국이미지,상세페이지,배너이미지}\—중국이미지에 1688 원본(O1CN…cib.jpg· 1688 오퍼 페이지 캡처)이 모인다. 케이스류 =98.정리수납함\(멀티 투명 진열 쇼케이스_3종 · 미니 피규어 진열 쇼케이스 · 투명 미니 서랍장 소품정리함) ·76.칸칸이 다용도 케이스\. - 이 리포(
C:\dev\dev\.git)엔 커밋하지 않는다 — 로컬 작성자가sueun1115-blip라 조수은 이력에 섞이고, 이관은 파일 복사라 필요 없다. 변경 추적 =snap.py기준선. - 빌드 · 검증 스크립트는 DB · 산출물을 쓴다(
data\work\haedali.sqlite3·outputs\·data\backups\·tools\out\) → 돌린 흔적이 전부 diff 에 잡힌다. 이관 ③단계에서 거른다. - node = 이 PC v26.3.1(조수은 PC 기준 24+).
node:sqlite읽기 조회 동작 확인(26.9.15). - 코덱스 상의 때 조수은
AGENTS.md가 자동 로드된다 —C:\dev\dev가 git 루트라--cd를 하위 폴더로 줘도 올라가 읽는다. 질문에 「AGENTS.md· seedchain 지시는 무시」를 명시한다. C:\dev\dev\.git\objects\pack\은 반입 직후(20:03~20:06 KST) 새 pack 이 생겼다(VS Code git 추정)..git은 기준선 · 이관 대상이 아니다.- VS Code 가
C:\dev\dev를 작업폴더로 열면 cwd 가 거기로 옮겨간다 — 명령은 항상 전체 경로로. - 🆕26.9.15 생성기는 8820 으로 띄운다 —
wscript C:\dev\_work\sueun-dev\gen8820_hidden.vbs(PORT=8820 · HOST=0.0.0.0 · 로그C:\dev\_work\sueun-dev\gen8820.log).static_server.js에HOSTenv 1줄을 넣었다(기본값 127.0.0.1 그대로 → 조수은 PC 동작 불변, 이관 대상 M)..vbs는 ASCII 주석만(wscript 가 ANSI 로 읽어 한글 바이트가 줄바꿈을 먹을 수 있다). - 🆕26.9.15 새로 만든 에이전트(
~/.claude/agents/*.md)는 이미 떠 있는 세션에서 못 부른다 — Agent · WorkflowagentType둘 다 「not found」. 필수 상담 훅이 걸린 작업은 새 세션(릴레이)에서 한다. Workflow 는 에이전트가 없어도 도구 결과가 「launched」라 훅이 통과로 볼 수 있었다(dev-0e 가 탐지기에서 뺐다). - 🆕26.9.15 Workflow
args에 긴 JSON(개행 포함)을 넘기면 스크립트엔 문자열로 들어온다 →pipeline() expects an array로 에이전트 0개 실패. 스크립트 첫머리에const A = typeof args === 'string' ? JSON.parse(args) : args. - 🆕26.9.15 이미지 탐색 실측(POIN-MINI headless) = Yandex 이미지 업로드 검색 동작 · Bing 업로드 결과 없음 · AliExpress 검색 페이지 이미지 0(차단) · Playwright MCP 는 다른 세션이
C:\dev\pw-chrome-profile점유 중이면 못 쓴다 → python playwright 로. - 🆕26.9.15 케이스 이미지 수집 실측(30에이전트) — 상세 페이지가 캡차·안티봇으로 막히는 곳 = AliExpress 상품 · Alibaba.com · Yandex Market 카드 · Ozon · Wildberries 상품 · eBay/쿠팡(403). 뚫리는 경로 = Yandex 역이미지 결과 속 CDN 직링크(joomcdn · wbbasket · alicdn sc0x · ozone) + 1688.ru 미러. 채택본 37장 중 32장이
supplier_render(공급사 연출). 동일판정 함정 = 같은 금형인데 인쇄 변형(GO-159 OPEN/CUSTOMS 테이프) · 깊이만 다른 파생(27×22×36 vs 27×14×36) · 선반 수 변형(1단 사진이 2단 항목에 오분류). 0장 항목(GO-162·164·165·166·173·174) 2차 수집은 이 경로로는 한계 → 1688/타오바오(로그인) 또는 1단 사진 편집 합성이 대안. - 🆕26.9.15 수집 에이전트 브리프에 「삭제 금지」가 있어도 자기 임시폴더를
rm -rf했다(GO-177_work· 잘못 만든tools\miko-260913\GO-159) · 그리고 상대경로로_work를 만들어 cwd 인tools\miko-260913\아래에 83파일을 흘렸다(GO-177\_work\·_work\). ⛒브리프에 ①임시 작업 경로는 절대경로로 박는다 ②「자기 임시파일도 지우지 말 것」 명시 ③끝나면 transcriptgrep -oE '"command":"[^"]{0,60}(rm -|Remove-Item|os\.remove|shutil\.)'확인. - 🆕26.9.15 Workflow
journal.jsonl의result줄엔 label 이 없다 → 같은agentId의started줄에서 label 을 잇는다(C:\dev\_work\sueun-dev\miko-260913-collect-extract.py). - 🆕26.9.15
case:import는tar -xOf로 xlsx 내장 그림을 뺀다 — Git Bash 에선 GNU tar 가 먼저 잡혀C:\…를 원격 호스트로 오해해 죽는다 →PATH="/c/Windows/System32:$PATH" node tools/catalog/import-case-classification.js …(bsdtar). 먼저 DB 사본(--db <사본> --report <임시>)으로 돌려 본다 — 단 스크립트가 그 사본의 백업을data\backups\에 만든다. - 🆕26.9.15 AliExpress 상품 페이지 = 헤드리스 차단 · 헤드풀(화면 밖
--window-position=-2400,-2400)이면 열린다(갤러리 + 상세 본문 이미지). 페이지 아래는 추천 상품 · 구매후기 사진이 수백 장 섞인다(한 페이지 842장 중 본 상품 10장) →tools\miko-260913\page_harvest.py --limit --max-y로 긁고 y 위치로 가른다. Google Lens 업로드는 Playwright 에 즉시 캡차(sorry) · Bing curl 결과 무의미 · Wildberries/ozon/yandex market 상세는 헤드풀도 봇 차단이 잦다. - 🆕26.9.15 해외 마켓에서 「동일 금형」 연출샷은 거의 안 나온다(2차 수집 GO-159/160/161 연출 0장 · 누끼원본 각 1장) — 같은 모양이라도 인쇄 데칼 · 선반 수 · 손잡이 금형이 다른 변형이 대부분. 연출샷 확보 현실안 = ①1688/타오바오 로그인 프로필(페페) ②미코(공급사)에 원본 상세이미지 요청 ③우리 누끼 + AI 연출(표시광고 고지 필요).
- 🆕26.9.15 투명 아크릴 케이스 누끼 = rembg
birefnet-general마스크(치수 글자 대부분 제외) + 가장자리로 배경 그라데이션 2차식 추정 → 배경과의 차이만 회색으로 흰 바탕에 →tools\miko-260913\make_cutout.py. birefnet 단독은 케이스 안 갈색이 남고, isnet 은 패널이 얼룩진다. 원본이 260px 급이면(GO-159 엑셀) 치수선이 남고 흐리다 → 웹 원본 우선. - 🆕26.9.15 수집 에이전트가 「exact · 픽셀 대조 동일」로 채택한 누끼원본도 다른 변형일 수 있다 — GO-161 웹(ozon) = 골무늬 프레임 + 「BOX CONTAINER」 인쇄 + 잠금쇠(= GO-159 금형의 투명판) vs 엑셀 GO-161 = 매끈한 투명 · GO-159 웹 = 윗판 구멍 · 문 핀. 규격(36×22×27)이 같으면 에이전트가 통과시킨다. ⛒배너 · 페이지에 쓰기 전 엑셀(공급사) 사진과 나란히 크롭 대조(프레임 무늬 · 인쇄 · 손잡이 · 잠금쇠) — 실물 = scratchpad
go161_cmp.jpg방식. 원본 우선순위 = 공급사 엑셀 > 웹(대조 통과분만). - 🆕26.9.15 생성기 출력 모드(
?exportPage=<키>)는html.hd-export가 폭을 860 으로 박는다 → 390 미리보기 검사는 그 클래스를 빼고#frame에data-w=390+style.width=390px를 줘야 진짜 390 이다(안 빼면 390 CSS 만 먹고 폭은 860 이라 가로넘침이 절대 안 잡힌다). 도구 =C:\dev\_work\sueun-dev\qa390.py <키>…. - 🆕26.9.15 작업본 시드 =
tools\miko-260913\seed_pages.py <매니페스트>(GET→없으면 POST→자산 업로드→PUT baseVersion→render) · 매니페스트data\manifests\case-pages\*.json에palettes·sectionDefaults상수 블록 → section 카드는palette이름만. 재실행 = 카드 같으면 버전 그대로 재렌더. ⚠case 글자 체계에서story2열은 글 칸 약 340px(7자/줄) → 옵션 상세는 1열measure로. - 🆕26.9.16 케이스 상세페이지 기본 디자인 = 루시아이 1055형([페페] 지정 · 분석
ref-luxiai-1055.md) — 생성기 글자 체계point(모바일형, 캔버스 36px+) ·point-pc(PC형, 860 1:1 데스크톱) + sectiondeco토큰(pill chevron checklist card check tip notice en name multiply) + infotitleEn+ 배경 프리셋gray. 한 매니페스트로 두 형 =seed_pages.py <매니페스트>/seed_pages.py <매니페스트> --pc(키-pc· 위아래 여백 0.7배). 채도 높은 노랑 배경 · 진갈 블록은 [페페]가 「촌스럽다」로 반려. - 🆕26.9.16 deco CSS 는 같은 특이도면 뒤에 온 규칙이 이긴다 —
point-pc의.dc-section-item-copy{padding}이 notice 의padding-left전용 규칙을 덮어 ▸ 와 글이 어긋났다 → 형별 deco 덮어쓰기는 padding 을 통째로(padding:0 0 0 28px) 쓴다. - 🆕26.9.15
_inbox엑셀은 페페가 엑셀로 열어 둔 채일 수 있다(~$잠금 파일) → openpyxl 은 사본을 떠서 읽는다(extract_items.py가 그렇게 한다) ·snap.py는~$*를 건너뛴다. - 🆕26.9.16 NAS(Z:...\디자이너 작업#조수은)
os.rename폴더개명 =PermissionError WinError32재현 4회, 원인불명. 격리 진단 6종(빈dir·해시문자'#'단독·100MB·700MB단일파일·6파일합계817MB·속성/reparse조회) 전부 별도 테스트폴더에선 성공 — 크기·락(파일열기 OK)·인코딩(NFC 바이트 일치)·reparse point·hidden파일 전부 아니다로 배제.Move-Item(PowerShell)도 동일 실패. 진짜 원인 후보 = NAS(Synology 추정, 옆에 CloudStation 폴더 있음) 측 인덱싱/락 — 확인 못 함(handle.exe 없음). ⛒NAS 폴더 개명은 작업 전 빈 폴더로 먼저 리허설해도 안 잡힌다(진짜 대상 폴더에서만 재현) — 막히면 강행 금지, 보고 후 페페 GUI(탐색기 F2)로 개명 위임 고려. ✅26.9.16 07:3x [페페] 탐색기 F2 로 개명 완료(GUI 는 한 번에 됐다) — 개명만 막히고 복사 · 폴더 생성 · 쓰기는 정상이다. - 🆕26.9.16 🔴NAS 로 큰 트리를 복사하면 MAX_PATH(260자)에 걸리는 파일이 나온다 — 증상은 길이와 무관해 보이는
FileNotFoundError WinError 3(「지정된 경로를 찾을 수 없습니다」). 실측 =C:\dev\dev\.git\refs\codex\turn-diffs\checkpoints\<64자>\<64자>\<13자>\<uuid>4건(원본 230자 + NAS 접두Z:\homes\admin\Drive\자고등\디자이너 작업\조수은\dev52자 > 260). ⛒복사 스크립트는 처음부터\\?\확장 경로('\\\\?\\' + os.path.abspath(p))로os.makedirs·shutil.copy2를 부른다(os.walk도 확장 경로로 돌면 그대로 돈다). 실측 재복사 4/4 성공. 도구 = scratchpadnascopy.py·nasverify.py·nassync.py(복사 · 대조 · 변경분 재동기화, 셋 다 삭제 0). - 🆕🔑26.9.16 [페페] NAS 폴더엔 우리 쪽 상시 연결을 두지 않는다 — 8820 생성기 · devplan
/sueunNAS 마운트 전부 정리하고,app.pyMOUNTS 는 우리 로컬 사본C:\dev\dev를 본다(허브 카드는 그대로 작동). NAS 는 일회성 복사·검증 때만 만진다. - 🆕🔑26.9.16 [페페] 조수은은 데스크탑 · 노트북 2대 → DB 를 PC 별로 나누고 미러한다. 구현 = ①
tools\pilot\lib.js에pcSlug()·resolveDbPath()신설 —HD_DBenv >data\work\haedali-<hostname>.sqlite3> 없으면 가장 최근에 쓰인 다른 PC DB(없으면 옛haedali.sqlite3)를 복사해 생성(빈 DB 시작 방지) ②DB 경로 하드코딩 6곳을 lib.js 로 모았다(product-store · case-store · inventory 2 · catalog 2 · figma · static_server health · workbook.mjs) — 안 모으면 「쓰기는 내 DB, 읽기는 옛 공용 DB」 조용한 분기가 난다 ③tools\db-sync.js(신규) =status/sync/sync --take <PC>/init/--selftest(8 시나리오) · 파일 통째 복사 · 덮어쓰기 전data\backups\db-sync\백업 · 양쪽 다 변경이면 중단(행 병합 불가 = 21개 테이블 AUTOINCREMENT FK) · 저널 파일 있으면 거부 · 동기화 후detail_page_assets.local_path실존 검증 ④start.cmd가 기동 전status1회(ASCII 만) ⑤지시문 =AI-START.md④ 전면 교체. - ⛒판별 시험법 = 운영 DB 사본에서
classified_products·products·detail_page_projects를 비운 probe DB 를 만들고HD_DB로 띄워/api/case-products·/api/products·/api/detail-pages가 전부 0 인지 본다(하나라도 옛 경로를 보면 실제 데이터가 나온다). 26.9.16 통과. - 🆕🔑26.9.16 [페페] 진입 게이트 =
tools\nas-gate.js(NAS 공유 폴더에 「지금 작업 중인 PC」 기록). 상태data\work\access-gate.json· 사람이 읽는 이력data\work\access-gate.log(KST 한 줄). 서버(static_server.js)가 기동 시 자동enter· 60초heartbeat· SIGINT/SIGBREAK/exit 에서 자동exit, 다른 PC 점유 중이면 서버를 아예 안 띄운다(exit 3 ·HD_GATE_FORCE=1로만 동시 진입).start.cmd도 기동 전status로 한 번 거른다. - 진입 종료 판정 = [페페] 26.9.16 결정 ①정상 종료 즉시 기록 ②심장박동 60초 ③끊긴 지 30분 초과면 자동 해제(
HD_GATE_STALE_MIN) ④동시 진입은 사람 지시 때만--force(이력force-enter). - ⛒같은 PC 안에서 AI 가
exit를 부르면 돌고 있는 서버 기록까지 지워져 타 PC 가 들어오는 구멍이 있었다 → pid 생존검사(process.kill(pid,0))로 죽은 기록만 정리하고, 살아 있으면 거부(--force필요). 강제 종료로 남은 기록은 다음enter가 자기 pid 로 이어받는다. - ⚠WebDAV 에는 파일 잠금이 없다 → 상태 저장은 temp 쓰고 rename + 되읽어 확인. 완전한 원자성은 아니고 사람 속도 작업 기준의 방어다.
- 🆕🔑26.9.16 [페페] 제품관리 탭 = DB 카테고리대로 자동 생성(
GET /api/catalogs—static_server.jsbuildCatalogs()·product-store.getSheetCatalogs()·case-store.getCatalogKindCounts()). 순서 상수 =CATALOG_ORDER = ["case","명화그리기","보석십자수"], 그 외는 건수 내림차순으로 뒤에 붙는다. 🔴「명화그리기가 없어졌다」의 원인 = 서버·DB 는 멀쩡한데(1,182행) 화면 탭이 HTML 에 2개만 박혀 있었고 JS 가sheet:"보석십자수"를 리터럴로 고정(product-management.js:231·548)이었다 — 케이스 탭이 들어오면서 탭 축이 「시트」→「카탈로그」로 바뀐 부작용. ⛒탭·시트는 코드에 박지 말고 API 로 받는다. 기본 탭 = 첫 탭(케이스) 으로 바뀌었다(옛 기본 = 보석십자수) → QA 2개(check-case-catalog.js·check-product-management.js)의 초기 진입 기대값도 같이 고쳤다(17/17 · 42/42 통과). - 🆕26.9.16 [web-designer 실측·처방] 탭 = 40px 높이 · 패딩 9/14 · 라벨 14px · 배지 13px · 1440 한 줄(442/1392px) · 390 두 줄 wrap(겹침 0). 칩 = 23px 높이 · 패딩 4/9 · 700 13px mono · gap 4px · 제품명과 3px. ⛒P2 반영 완료 = 코드 개념이 없는 일반 제품(41장 중 8장)에 「코드 없음」 칩이 붙어 노이즈 →
p.detailPageKey있을 때만 칩 줄을 그린다. ⏳미반영(기록만): 카테고리가 4개를 넘으면 390px 에서 탭이 3줄+로 밀린다 → 그때는 모바일만flex-wrap:nowrap; overflow-x:auto(가로 스와이프)로 바꾼다(다시 상담 불필요). 실기(폰) 육안은 아직 = 페페 몫. - 🆕26.9.16 작업본 제품코드는
detail_page_projects.product_code한 칸에 쉼표로 여러 개("GO-159,GO-160,GO-161"· 최대 60자) — 전용 테이블 없음. 역참조는classified_products.detail_page_key(N:1). 초안관리 카드 칩 =codesOf()가 쉼표·공백으로 쪼갠다(index.html). 칩 클릭 =#qKw에 코드를 넣어 목록 좁힘 · 카드 선택으로 번지지 않게#pm클릭 핸들러에서.pm-code를 먼저 가로챈다. - 🆕26.9.16 🔴생성기 CLI 스크립트엔
if (require.main === module)가드가 없다 — 로드 검사한다고require()하면 본문이 그대로 돈다(import-inventory 가 probe DB 에 실제로 import 를 돌렸다 · tooling.md 26.9.14 항목과 같은 뿌리). ⛒구문 검사는node --check <파일>, 부작용 확인은 별도 실행으로. 규칙 id =require-side-effect. - 🆕26.9.20 아트조이 AI PC 는 전원이 끊겨도 스스로 복구된다 — 점검 3줄로 끝낸다(26.9.20 16:08:56 예기치 않은 전원 끊김 → 16:10:18 자동 부팅 실측). 예약작업 3종(
HaedaliServer·DevplanServer·ClaudeRemote)이 부팅 + 5분 워치독이라 사람 손이 필요 없다. 점검 = ①ssh artjoy+LastBootUpTime②curl http://artjoy-aipc.tailbea356.ts.net:8820/api/catalogs③DB 무결성. ⛒DB 열 때better-sqlite3를 부르지 마라 — 그 리포에 없다(Node 24 내장node:sqlite의DatabaseSync를 쓴다). ⛒블루스크린 오진 금지 —Kernel-Power 41만 보고 단정하지 말고BugcheckCode(0 이면 전원/하드행) +MEMORY.DMP·Minidump존재 여부를 같이 본다. DB 는journal_mode=delete라 급전원차단에도 WAL 잔재가 없다(integrity_check=ok· products 1,945행).access-gate.json은 pid 생존검사로 새 서버가 이어받으니 사람이 지울 일 없다. 상시 노이즈 =crashhelper.exeBEX64(14일 18건)·ALYac_WSSrv/luafv시작 실패·NetBT 2505 — 재부팅 전에도 똑같이 나던 것이라 원인이 아니다. - 🆕26.9.16 RaiDrive WebDAV 실측 = 1.2GB · 3,299파일 147초(큰 파일 13MB/s · 작은 파일 구간 7MB/s). devplan 대시보드(예약작업 delix 대화형 · pythonw)는 Z: 매핑을 그대로 본다 →
app.pyMOUNTS 에 NAS 경로를 걸어도 서빙된다(세션 0 서비스면 못 본다).