artjoy — 규칙 · 함정
아트조이((주)자고등) 고유 사실 · 금기만 둔다. 고객 제안서 · PDF 제작 일반 함정(전역 셀렉터 · PDF 빈 페이지 · media 캐시 · 사례 이미지)은
projects/ax-biz/rules.md. 전역 규칙은C:\dev\CLAUDE.md.
호칭 · 표기 (고객이 보는 문서)
- 법인명 = 주식회사 자고등. 브랜드 = 아트조이. 문서 표기는 「아트조이((주)자고등)」 로 통일한다(페페 지시 26.9.15).
- 페페 = 「신동승 차장」. 내부 별칭(페페 · 코디 · PFS · 해달이 · 당근)은 고객 문서에 절대 안 나간다 — 빌더가
FORBIDDENassert 로 막는다. - 「조수은」은 허용어다(고객사 유지보수 주체로 문서에 명시된다). 다만 「해달이」는 금지 — 당근 스터디 내부 닉이다. 같은 사람이라 실수하기 쉽다.
- 연락처 = 010-9426-0731 단독. 회사번호(02-6085-0106) · 주소는 26.9.14 지시로 삭제됐다.
협상 · 금액
- 🔑제시안 = B안 950만. 예산 부족 시 A안 500만으로 내려간다 — 이건 «내부 방침»이라 문서에 안 적는다. 「예산 없으면 깎아준다」를 제안서에 쓰면 협상력이 먼저 깎인다.
- 「신규 고객 소개」 조건은 전면 삭제됐다(26.9.14). 할인 근거는 사내 제작 + 1단계 결과물 재사용 + 대외비 세 가지로 다시 섰다. 되살리지 않는다.
- 제안서 발송은 페페가 직접 한다. 코디는 보내지 않는다.
자산 · 저작권
- ⚠아트조이 상품 이미지를 복사해 쓰지 않는다(페페 지시 D027). 목업 · 샘플은 나노바나나 생성분으로 채우고, 실물은 내부 페이지에서 링크만 건다.
- 조수은 개인의 지식재산권 권익 구조는
ip-agreement.md. 아트조이↔페페 용역계약서와 별개 문서다 — 섞어 쓰지 않는다.
데이터 · 연동
- 이지어드민 API = 상품 · 주문 · 재고 3그룹. 고객사 동의서 + 이용 신청이 선행(ezadmin.co.kr/api).
- 네이버 커머스API 문서(
apicenter.commerce.naver.com)는 외부 fetch 가 차단돼 있다. 필드 확인은 권한 받은 뒤 실호출로만 가능. - ⚠네이버 스마트스토어는 자동화 브라우저를 막는다 → 전용 CDP 9347(
C:\dev\tools\cdp-profiles\launch_haedali.bat· 수집 뒤 자동 종료). 포트 장부 =C:\dev\tools\portgate\PORTS.md. - 「문의 → 구매 전환율」은 조인 키 확보 전까지 약속으로 박지 않는다. 현재 수익 표는 「측정 예정」으로 열려 있다.
- 🆕2026-09-28 [코디] 상품 유사 매칭 = 치수 + 사진(CLIP) 이 본체, Jev 는 «규격 모름 & 사진 애매» 쌍만. 라벨 127쌍 AUC = 글자 바이그램 0.71 · dHash 0.52(무의미 — 쓰지 마라) · CLIP 단독 0.73 · 치수+CLIP 0.98 · +Jev 1.00. ⛒CLIP 은 open_clip
ViT-B-32-quickgelu(openai) — quickgelu 아닌 판은 활성함수가 어긋난다. Jev 를 전 쌍에 걸면 736쌍 순차 184초 → 애매 밴드(0.30~0.65) + DB 캐시로만. 코드 =C:\dev\tools\artjoy-market\compare.py·clipvec.py. - 🆕2026-09-28 [코디] Serper 로 쿠팡 섬네일·다른 몰 가격을 받을 때 함정 2개(
C:\dev\tools\artjoy-market\). ①images 결과의 상품번호 일치 = 같은 «상품»이지 같은 «도안»이 아니다 — 여러 도안을 한 번호에 묶은 명화 상품은 다른 옵션 사진이 대표로 잡힌다(1270908 「선한 목자와 양」 → 모네). 섬네일은 «대표 이미지(옵션일 수 있음)»로만 쓴다. ②shopping 검색어에 상품명 전체를 넣으면 1~2건만 나온다 → 브랜드·규격 숫자를 뺀 핵심어 3개로 줄인다(같은 상품 1건 → 다수). 과금 실측 = search 1 · images 1 · shopping 2 ·/account잔량 조회 0.
하드웨어 조달 (AI PC)
- 🔴쿠팡 미니PC 직구는 제목과 실제 옵션이 다르다. 「MS-A2 9955HX 32GB 1TB 1,363,600원」으로 보이던 리스팅이 옵션을 열자 7745HX 베어본(0GB/0GB) 이었다(26.9.15 실측). 주문 전 옵션 문자열을 반드시 육안 확인한다 — 검색 결과 제목만 믿고 견적을 짜면 통째로 틀린다.
- 쿠팡 가격 조사는 WebFetch 가 403 이다 → CDP 9335(쿠팡 프로필) 실브라우저로 긁는다. 도구 =
C:\dev\_work\artjoy-aipc\coupang_search.py(검색) ·coupang_page.py(상품 1장) ·verify_prices.py(결제 직전 재확인). - 🔴과다조회하면 쿠팡이 Akamai 「Access Denied」로 막는다(26.9.15 실측, 수십 회 뒤). 그때는
CP_PORT=9345(coupang-vpn 프로필)로 우회한다 — 즉시 풀렸다. - 🔴🔑쿠팡 가격 파싱 = 「숫자+원」 최댓값도 최솟값도 아니다. 카드엔 정가 → 할인율 → 판매가가 같이 찍히고, 옆에 「최대 5만원 쿠팡캐시 적립」·배송비까지 섞인다.
- 최댓값 → 정가를 집는다(실측: UM890 Pro 2,339,990 으로 잡혔으나 실제 1,712,000 = 37% 오차. 1차 조달안 전체가 이 오차 위에 있었다).
- 최솟값 → 적립금 50,000 / 배송비 3,000을 집는다.
- ⛒규칙 = 적립·캐시·쿠폰·배송 문맥을 먼저 버리고, 상세페이지에선 「h1 제목 뒤 첫 금액」을 판매가로 본다(상세 하단의 「추천상품」 카드가 최솟값을 오염시킨다).
- 결제 직전 목록은 반드시 상품 페이지로 재확인한다. 검색 카드 파싱만 믿지 않는다.
- 2026 램·낸드 폭등이 견적의 1순위 변수다 — 베어본+부품보다 램 포함 완제품이 싸다(제조사 번들 램은 폭등 전 단가). 미니PC 견적을 짤 땐 «완제품 먼저» 로 본다.
- 🔑중국산 미니PC 완제품은 대개 Win11 Pro 가 사전설치돼 나온다. 그래서 Home FPP 를 따로 사면 「돈 더 쓰고 기능 내려가는」 다운그레이드가 된다(26.9.15 A8 MAX 건). Home 이 잃는 것 = RDP 「호스트」 불가(원격 접속을 받을 수 없다) · BitLocker · 도메인 참가 · 그룹정책. 현장 PC 를 원격 관리할 거면 치명적이다 → Home 으로 갈 땐 설치 단계에서 Tailscale + RustDesk 를 같이 깐다. ⛒견적에 윈도우를 넣기 전에 「본체에 뭐가 깔려 나오나」를 먼저 본다.
- 조건 하나를 빼면 후보군이 통째로 바뀐다 — OCuLink 를 요구했을 땐 UM890 Pro 가 답이었는데, 조건을 빼자 기준기 A8 MAX 자체가 정답이 됐다(우회 후보는 조건 없이는 더 비싸기만 하다). 요구 조건이 바뀌면 재선정은 «후보 교체»가 아니라 «처음부터» 다.
- 최저가가 쿠팡인 품목이 더 많다 — 타몰(다나와)이 이긴 건 램 · OCuLink 카드 · Windows FPP 정도다. 파워스테이션은 쿠팡이 27만 싸다.
제안서 편집 (ax_artjoy.py + build_artjoy.py)
- 🔴🔑첫 장 숫자판(
_COST)에 행을 하나 더하면 01 요약이 넘쳐 «34자짜리 유령 페이지»가 생긴다(26.9.15 실측, 4행 → 5행). 텍스트를 줄여도 안 없어진다 — 페이지 분할이 블록 단위라 푸터 블록만 넘어간다. ⛒행 수를 4행으로 되돌려야 사라진다(관련 항목을 한 행에 합친다). 빌드 후 쪽별 글자수 점검(<511자 = 실패)은 필수다. - 고객 문서에 「AWS」를 쓰지 않는다 — 쉬운 말 규칙에 맞춰 「전용 서버」로 적는다. 비용 근거로 제조사 실적을 인용할 땐 「제조사에서 운영 중」 표현을 쓴다(
FORBIDDEN에 PFS 가 걸려 있다). - 추정을 사실로 쓰지 않는다 — 자사몰
artjoy.co.kr이 임대형으로 «보인다»는 URL 패턴 추정이다. 고객 문서엔 「~일 가능성이 큽니다 · 1주차에 확인해 확정합니다」로 적는다. - 🔑서버를 새로 열면 「월 운영비 0원」을 못 쓴다 — 26.9.15 부터 표기는 「월 유지보수비 0원 + 월 실비(서버 0~10만 · AI 22~49만)」. 고칠 자리 =
META.subtitle·_COST· 가격카드 템플릿 ·_TERMS고치는 사람 ·price_note. - 🔴🔑PDF 를 다시 구우면 «링크가 걸린 곳 전부»를 같이 고친다 — 3곳이다(26.9.15 페페 지적 「산출물 v4 링크 안 올라왔다」, 26.9.14에 이어 2회째).
①
_work/ax-biz/out/원본 ②devplan/media/ax-biz/사본 ③링크를 건 페이지. ⛒③이 함정이다 — 카탈로그(build_catalog.py)는?v=<mtime>판올림이 자동이지만devplan/artjoy.html은 손으로 쓴 정적 페이지라 자동이 아니다. 판올림 없이 열면 브라우저 PDF 캐시가 옛 판을 그대로 보여준다(파일은 최신인데 화면만 옛것 = 「안 올라왔다」로 보인다). ⛒artjoy.html 4절 링크에?v=<mtime>을 손으로 갱신하고, 판 번호·쪽수(「v4 (12쪽)」)도 같이 고친다. 확인 =curl+md5 로 서버 응답과 원본 대조. - AWS 실비용은 추측하지 말고
aws ce get-cost-and-usage로 뽑는다(26.8월 실적 $73 = EC2 26.31 + RDS 22.17 + EBS 8.20 + VPC 8.16 + Tax 6.65 + Route53 1.51).
🆕 신규
- 🆕2026-10-19 [코디] AI PC Claude Code CLI 로그인이 풀려 있었다(26.10.16 11:36 KST 부터
.credentials.json토큰이 비어 있음 ·claude auth status= loggedIn false) — 증상 =\Cody\ClaudeRemote(remote-control 상주)가 5분마다 「You must be logged in」으로 죽음(C:\cody\logs\claude_remote.log) · 헤드리스claude -p도 같이 안 됨. 데스크톱 앱 로그인과는 별개다. 재부팅 점검 때claude auth status를 꼭 같이 본다. 복구 = AI PC 화면에서claude auth login→ 브라우저 승인(사람 클릭 필요). ⚠데스크톱 앱 재로그인은 CLI 에 안 옮겨간다(실측). 창 띄우기 =schtasks /create /tn CodyClaudeLogin /tr "cmd /k cd /d C:\dev && C:\cody\npm\claude.cmd auth login" /sc once /st 23:59 /it /f→/run→ 끝나면/delete+ 그 cmd 종료. 26.10.19 10:01 KST 복구 완료 · remote-control 재연결 확인. - 🆕2026-10-19 [코디] AI PC 재부팅 후 클로드 데스크톱은 자동으로 안 뜬다(MSIX 시작작업
ClaudeStartupState=0) — 띄우기 =ssh artjoy→schtasks /create /tn CodyClaudeLaunch /tr "explorer.exe shell:AppsFolder\Claude_pzs8sxrjxfjjc!Claude" /sc once /st 23:59 /it /f→/run→/delete. 로그인 판정 =C:\Users\디자이너-2\AppData\Local\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\plan-usage-history.json마지막 항목t가 실행 직후 시각이면 인증 API 성공(config.jsonwindowSizeWasSignedIn=True 보조). logs 폴더는 비어 있어 못 쓴다. → 같은 날 [페페] 지시로 자동시작 켬 =HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Claude_pzs8sxrjxfjjc\ClaudeStartupState=2 ·UserEnabledStartupOnce=1(앱 쪽 json 엔 시작 설정 키 없음 · 다음 재부팅에서 실제로 뜨는지 확인 필요). - 🆕2026-10-06 [코디] 아트조이 NAS 파일이 「delix 사용중」으로 읽기전용 = 미니PC 엑셀이 RaiDrive
Z:로 열다 비정상 종료해 남긴~$<파일명>(165B, 주인 이름 = 오피스 UserName) 때문이다 — 실측Z:\homes\admin\Drive\자고등\오더\화이방\~$2026년 자고등 선적내역서.xlsx(26.9.15 20:18, 3주 방치) 삭제로 해결 · SMB 독점열기 시험 OK(AI PCC:\cody\nastool\lockscan.py probe <경로>, 본체.168). 재발방지 = 예약작업\Cody\nas-lockclean(10분 · pythonw)C:\dev\tools\nas-lockclean\lockclean.py— 최근문서 Z: 폴더만, 내 이름·10분+·오피스 미실행일 때만 지움, 남의 잠금은 로그만. ⚠FileStation 검색 API 는~$파일을 못 찾는다(인덱스 제외 · 0건) — 찾으려면 SMB/폴더 직접 열람. 같은 폴더~$2026년 GO 자고등 오더내역서.xlsx= 김채은 26.6.17 묵은 잠금 → 26.10.6 [페페] 「지운다」로 삭제(독점열기 OK). - 🆕2026-10-06 [코디] 살아 있는 저쪽 VS Code 세션(조수은 노트북 Remote-SSH)에 지시를 넣는 길 = 1회성 공지 파일 —
C:\dev\tools\ruleguard\notices\<session_id>.txt를 두면 그 세션의 다음 사용자 입력 때 UserPromptSubmit 훅(ruleguard.pypending_notice)이 맥락으로 붙이고.done으로 바꾼다(창 주입·SendKeys 불필요 · 백업ruleguard.py.bak-20261006). 사용자가 입력해야 전달된다. 세션 id =~\.claude\projects\C--dev\*.jsonl최신 +native-binary\claude.exe --resume=<id>. ⚠저쪽 CPU 판정에Win32_Processor.LoadPercentage쓰지 마라 — 실측 26.10.6 00:0x KST 프로세스 합 20% 인데 100 을 연속 4회 냈다(카운터\Processor(_Total)\% Processor Time은 18%). 경위 = 26.10.5 23:30 KST 글꼴 판별 OCR 4병렬이 CPU 100% → 전부 종료. - 🆕2026-10-03 [코디] 저쪽 헤드리스 잡 run.cmd 엔
set DISABLE_AUTOUPDATER=1필수 · 잡 사슬은 status.txt END 가 아니라 «성공 표식 파일»을 기다린다 — 실측 19:17 claude.exe 자동 업데이트가 15분 돌던 잡을 RC=-1(out·err 0바이트)로 죽였고, 그 END 를 보고 출발한 다음 잡은 exe 교체 순간이라 「claude.exe is not recognized」 RC=1 로 0.5초 만에 끝났다. 원본 =C:\dev\_work\artjoy-qahelper-all\run.cmd(끝에DONE.txt) ·C:\dev\_work\artjoy-joyren-minimap\run.cmd(그 파일 대기). - 🆕2026-09-30 [코디] 생성기
hd-fold클래스는 두 용도가 섞여 있다(머리띠div.hd-fold· 카드 설정 접이식details.hd-fold) — 머리띠용 규칙(sticky · flex · 높이 36)을 고치면 접이식이 같이 깨진다(26.9.30 겹침 사고 ·60ecb2e로.hd-insp details.hd-fold무효화)..hd-fold규칙을 건드릴 땐 두 요소를 다 본다. - 🆕2026-09-30 [코디] 생성기 전 검사를 SSH(세션 0)에서 돌리면
effects:check⑯ 이 매번 실패한다(3회 재현 · 대화형 세션 62/62) — 그림 그리는 환경 차이지 코드 결함이 아니다. 판정용 전 검사 · JPG 는 예약작업/it(대화형 세션)으로 돌린다(V4 =\Cody\JoyrenV4·V4b1회용). SSH 직접 돌린 결과로 FAIL 을 판정하지 마라. - 🆕🔴2026-09-30 [페페] 아트조이 작업 라우팅 전환 — 아트조이 클로드는 «지금 진행 중인 작업까지만», 이후 아트조이 작업은 다시 코디가 직접 한다. 26.9.21 「아트조이 코드 · 설정 · 기록 · 검증 = 아트조이 AI PC Claude 만」 규칙은 이것으로 대체된다(CLAUDE.md 라우팅 줄도 고침). 진행 중이던 fix6 WF3(PID 42212)만 끝까지 두고, 뒤따를 V4 자동 투입을 막으려고 실행기
runner_seq.py(PID 48144)만 종료했다(WF3 claude 는 살아서 계속 돈다 · 실행기가 없으니 240분 제한 · EXIT 줄도 없다 → 감시 = 프로세스 생존 +reports\WF3.md첫 줄). V4 이후는 코디가ssh artjoy로 직접. - 🆕2026-09-29 [코디] 저쪽 헤드리스 잡 함정 2개(fix6 실측) — ①헤드리스(
-p) 세션은 모델이 응답을 끝내는 순간 종료된다 → 담당이 전 검사를 백그라운드로 걸고 «끝나면 이어서» 하며 턴을 끝내면 보고서GATE=FAIL 진행중인 채 죽는다(W3 1차 · 수정물은 미커밋으로 남음). 머리말에 «GATE 확정 전 응답 금지 · 긴 명령은 전경에서 기다려라 · progress.md 있으면 이어받기»를 박는다. ②재투입 때--session-id를 담당 이름 uuid5 로 고정하면Session ID … is already in use로 바로 죽는다 → sid 에 시각을 섞는다(fix6\runner_seq.py). + 코디 직접 원격 작업(fix5)은 서브에이전트가 Sonnet 기본이라 항목당 30~95분 · 검사 20분 순차가 병목 → 속도가 필요하면 저쪽 opus 잡 + 전 검사 담당 끝 1회 + 포트 병렬(run_checks_par.py). - 🆕2026-09-27 [코디] 저쪽 헤드리스 클로드(
--permission-mode auto)는 생성기 서버 재시작 명령을 자동 권한에서 막힌다 — 재시작이 필요하면 실행기 스크립트 단계로 — 조이렌 2단계 K2 가 8820 node 끄기를 못 해 서버 검증이 운영에 안 들어갔다. 처방 = 잡 실행기에 사람 승인된 단계RS(전/api/gate정상 → 8820 LISTENING pid taskkill →schtasks /run \Cody\HaedaliServer→ 후 gate · 새 pid ·reports\RS.md) =C:\dev\_work\artjoy-joyren-audit\fix3\runner_seq.pyrestart(). 지시문엔 «담당은 재시작하지 말고 RS 에 맡겨라». -
🆕2026-09-27 [코디] 저쪽 잡을 재투입하면
status.txt에 앞 회차RUNNER END가 남는다 — 감시가 «전체 종료»로 즉시 오판 —fix1\watch.sh가grep -q "RUNNER END"로 판정해 J1b 시작 2분 만에 DONE 출력. 처방 = 마지막RUNNER (START|END)줄만 본다(고침C:\dev\_work\artjoy-joyren-audit\fix1\watch.sh). 재투입형 감시는 다 같은 함정. -
🆕2026-09-26 [코디] 저쪽에서 «특정 에이전트를 opus high 로» 돌리는 법 = 헤드리스 1개 = 에이전트 1개 —
claude.cmd -p --agent web-designer --model opus --effort high …→ 에이전트 정의가model: sonnet이어도 실제claude-opus-5-5(--output-format json의modelUsage로 실측). 저쪽 에이전트는 프로젝트 단위C:\dev\.claude\agents\(web-designer · detail-page-designer 뿐 · 사용자 폴더엔 없음). 저쪽에 없는 에이전트(code-debugger 등)는 설정을 안 건드리고--agents <작업폴더>\agents.json으로 그 세션에만 싣는다(별칭 뺀 판 · 실측 통과). 여러 담당 병렬 = 실행기runner.py(동시 N · 사용량 게이트 ·--session-id로 담당별 transcript =%USERPROFILE%\.claude\projects\C--dev\<sid>.jsonl생존 판정) — 원본C:\dev\_work\artjoy-joyren-audit\job\. 저쪽 로캘 날짜 =yyyy-MM-dd(once 잡/sd 2099-12-31실측 통과). - 🆕🔴2026-09-26 [코디] 저쪽 잡을 23:59 전에 걸고 그 시각을 넘겨 돌면 «자기 삭제»로도 못 막는다 —
/sc once /st 23:59잡(테마 3판 · 23:21 시작)이 23:59 에 두 번째로 떠서status.txt를>로 덮고(START 23:59) ·out.txt가 잠겨 0.6초 만에 END RC=0 → 작업 자체 삭제. 원래 claude(PID 27216)는 살아 계속 돌았지만 END 줄 감시는 «끝남»으로 오판한다. ⛒처방 = 등록을 먼 미래 날짜 once(/sd2099년 · 날짜 형식은 그 PC 로캘에 맞춰schtasks /query로 확인)로 하고/run으로만 돌린다 · 감시는 END 줄이 아니라 원래 프로세스 생존 + report.md 로 판정(C:\dev\_work\artjoy-joyren-theme\watch3b.sh). - 🆕2026-09-25 [코디] 저쪽 생성기 포트 = 8820 · 8799 는 관리판이다 — 옛 스크립트에 8799 고정이 남아 있다 —
render-jewel-lug.js·render-pilot.js가 8799 고정이라 LUG 옵션 저장 뒤 재출력이 30초 시간초과 → 저장 JPG 가 낡아 generator:check 픽셀 대조 실패(고침0ddc00f·PORT는 사용자 환경변수 8820 을 물려받는다). 아직 8799 인 것 =check-generator-live.js·check-product-management.js·check-case-catalog.js·miko-260913\build_case_gd*.js(관리판용인지 확인 전 손대지 마라). 재출력 셋째 단계 lug:check 는 Z: 연결이 없으면 실패(서버 · ssh 세션 둘 다 Z: 없음). - 🆕2026-09-25 [코디] 조이렌 테마 =
assets\joyren-theme.css한 곳 · 공유assets\theme.css는 devplan 전체 정본이라 손대지 마라 — 미리보기 결과는.hd-frame에서 옛 토큰으로 고정(새 편집기 색을 미리보기 안에 쓰면 JPG 색이 바뀐다) · 포털 셸presentation-editor.css가html,body{background:#FFF}와body .btn-primary빨강을 깔아 테마보다 먼저 이긴다 → 더 센 선택자로 덮었다 · 새 목록 이름이 기존 전역 변수와 겹치면 스크립트 전체가 죽는다(PICK충돌 실측 →OVL) · 저쪽 브라우저 저장 키 =jr-theme·jr-mode. - ✅26.9.25
detail:check·generator:check도 실사용 주소화 끝(저쪽5e9d8a3) — 아래 26.9.24 「⏳남은 것」 해소. - 🆕2026-09-25 [코디] 저쪽 생성기에 NAS 진입 게이트 · DB 미러가 붙었다(
tools\nas-gate.js·db-mirror.js) — 작업본 저장 직후(미러 pending · 저장 1분 뒤 미러)에 layout:check 를 돌리면 임시 서버가 「두 컴퓨터 자료가 서로 달라요」 화면에 막혀 FAIL 한다(내 탓 아님) →curl http://artjoy-aipc.tailbea356.ts.net/api/gate의mirror.pending:false확인 뒤 검사. 또 그 PC 안(ssh)에선 테일스케일 이름이 안 풀려 저장 API 는http://127.0.0.1:8820로 부른다(브라우저 검사만 실사용 주소). -
🆕2026-09-25 [코디] 「배경이 두 장으로 갈라 보인다」 = 먼저 카드 수를 본다 — 인트로를 카드 2장 + 배경 조각 2장으로 만든 작업본이 16종 × 모바일/PC(저쪽
C:\dev\.tmp\edit\intro.pyPAGES). 카드 배경은 cover 라 조각 이음새는 글 길이 · 폭이 바뀌면 반드시 어긋난다 → 해법 = 카드 1장 + 배경 원본 1장 + 섹션 title2 · accent2(둘째 글 묶음). -
🆕2026-09-24 [페페] 기본규칙 — 검사는 실제 사용 주소로 · [코디] 적용 = 편집 검사 4개 브라우저 주소 =
http://artjoy-aipc.tailbea356.ts.net:<검사 포트>(이름만 임시 서버로) + blocks:check 끝에 운영 실사용 주소 읽기 점검 · 공통 모듈block-editor\tools\check-origin.js· 저쪽 커밋8c606b4. 전역 본문 =C:\dev\seedchain\rules\tooling.md맨 위. ⏳남은 것 = 생성기 쪽detail:check·generator:check(tools\server)도 같은 방식으로. -
🆕2026-09-24 [코디] 저쪽 생성기는 http 테일스케일 주소로 쓴다 = 보안 컨텍스트 아님 —
crypto.subtle·crypto.randomUUID·navigator.clipboard가 없다(적용이 「reading 'digest'」 로 멈췄다). 검사는 127.0.0.1(보안 컨텍스트)이라 못 잡는다 → 새 브라우저 API 는 폴백 필수 · blocks:check 는 subtle 을 뺀 채 돈다(addInitScript). -
🆕2026-09-24 [코디] 편집기 에셋 SVG =
filter(그림자) 금지 · 썸네일은 인라인 — FabricloadSVGFromString은<filter>를 버려 그림자가 편집기에서 사라진다 → 반투명 도형 겹침(concept_kit.Svg.shadow).<img>로 넣은 SVG 는 웹폰트를 못 읽어 검은고딕 · 도현이 기본 글꼴로 보인다 → 블록 창은 SVG 를 인라인으로(그라디언트 id 는 파일마다 고유 — 안 그러면 색이 섞인다). 검사 =_gen\check_concepts.py. -
🆕2026-09-24 [코디] ssh 로 저쪽 cmd 에
set PYTHONUTF8=1 && python …금지 —&&앞 공백까지 값이 돼Fatal Python error: invalid PYTHONUTF8→set "PYTHONUTF8=1" && …. -
🆕2026-09-24 [코디] 편집기(Fabric 7) 사진 픽셀을 구울 땐
img._originalElement에서 읽는다 — 보정 필터가 걸린 사진은getElement()가 필터 결과 캔버스라, 거기서 구워 올리면 src 교체 뒤 필터가 한 번 더 걸려 보정이 두 번 먹는다(P5a 리터치 ·retouch:check「보정 필터가 굽기에 안 섞임」 항목이 지킨다). -
🆕2026-09-24 [코디] 조수은 노트북(
book-edrtvdihh8· 100.116.149.89, 아트조이 테일넷) → AI PCC:\devVS Code 원격 개통 — 노트북은 sshd·RDP 가 없어 원격으로 못 만진다 → 설치킷을 AI PC 에서 Taildrop(tailscale file cp … book-edrtvdihh8:)으로 노트북 «다운로드»에 보내고 사람이 더블클릭. 킷 = 키(~/.ssh/artjoy_ai_ed25519, AI PCadministrators_authorized_keys주석sueun-laptop-vscode· 원본.bak-20260924) + ssh configartjoy-ai+ Remote-SSH 0.126.0 고정 + 신뢰 끄기 + 내장 Claude 끄기 + 바탕화면 바로가기 「ARTJOY AI PC - dev」. 결과 로그는 킷이 AI PCC:\Users\Public\laptop_vscode_setup.log로 올린다(RESULT OK/WARN/FAIL). ⚠AI PCartjoy계정 프로필 폴더는 한글C:\Users\디자이너-2(계정명만 영문으로 바꿨다) —~/.vscode-server·클로드 로그인이 거기 있다. 노트북 키를 끊으려면 그 한 줄만 지운다. 🔴v1 실패 원인(22:08) = PS5 에서$ErrorActionPreference='Stop'+ 네이티브 exe2>&1→ stderr 한 줄(code --install-extension의 node DeprecationWarning)이 종료 오류가 된다 → 네이티브 호출은 EAP=Continue 로 감싼Native {}함수로(v2). -
🆕2026-09-24 [코디] 저쪽 문서 「NNk」 크기는 바이트인지 글자인지 먼저 잰다 — 한글 UTF-8 은 글자당 3바이트라 「handoff 35k」 가 실제론 19,665자(한도 20,000 안)였다. 한도 규칙은 파이썬
len()글자 수. 또 ssh 로 저쪽 문서를 고칠 때 내부 별칭 금지는 이력 표기에도 걸린다 — P2 때 저쪽DESIGN.md§11 에 「[코디]」 가 들어갔다(P3 에서 「[클로드]」 로 정정). 올리기 전grep -P "페페|코디(?!네)|pepe|포인(?![트터])|귀속|회수|우리 자산"한 줄. -
🆕2026-09-24 [코디] 코디가 ssh 로 저쪽 코드를 직접 고칠 때 3가지(P2 실측) — ①올리기 =
C:\dev\_work\artjoy-block-editor\job\upload.sh <태그> <상대경로…>(있던 파일.bak-<태그>1회 복사 → scp → sha256 대조 · 새 폴더 자동 생성). ②커밋 메시지는 UTF-8 파일로 올려git commit -F— ssh 명령줄에 한글을 넣으면 cp949 로 깨질 수 있다 ·git add는 파일 이름 지정만. ③저쪽 검사가 실패하면 «내 탓인지» 먼저 A/B — 바꾼 파일을.bak로 잠깐 되돌려 같은 검사를 돌린다(26.9.24 generator:check 점 대조 1.28 = 되돌려도 같은 값 → 기존 드리프트로 판정). 회귀 0 을 픽셀로 증명하려면 배포 전 옛 코드로 기준선을 먼저 떠 둔다(layout:check --make-baseline). -
🔴🆕2026-09-24 [페페] 기본규칙 「아트조이 클로드 주간 사용량 80% 이상이면 작업을 중간에 끊고, 나머지는 코디가 이어받는다」 — 「아트조이 작업은 저쪽 클로드만」(CLAUDE.md)의 유일한 예외다. 장치(원본 =
C:\dev\_work\artjoy-block-editor\job\) = ①claude_usage.py [--gate 80]— 그 PC 로그인 토큰으로/api/oauth/usage조회, 주간 %·5시간 %만 출력(토큰 출력 0 · 0=GO 1=STOP 2=UNKNOWN) ②run.cmd가 시작 전 게이트(80%+ 면USAGE_STOP_BEFORE_START로 안 돈다) ③usage_watch.py가 5분마다 조회 → 80%+ 면STOP_USAGE파일 + status 줄 → 지시문(공통 머리말)이 «단위 사이마다 그 파일을 보고 progress.md·보고서GATE=FAIL USAGE_STOP+「인계」 절 쓰고 종료» → 15분 유예 뒤에도 안 끝나면 헤드리스(-p) 클로드만 강제 종료(사람이 쓰는 대화형 세션은 안 건드린다) ④코디 인수 = 저쪽progress.md·보고서 「인계」를 읽고 ssh 로 그 PC 파일을 직접(scp 로 받아 Edit → .bak 백업 후 scp 로 올림 · 검사는 ssh 로npm run …) 이어서 한다. 우리 계정 토큰을 저쪽 PC 에 두는 방식은 안 쓴다(고객 PC 자격증명 노출). 실측 26.9.24 18:20 = 우리 27% · 아트조이 49%(리셋 26.9.25(금) 12:59 KST). -
🔴🆕2026-09-24 20:45 [페페] 「5시간 한도 풀리기가 너무 늦게 끝난다. 나머지는 코디가 받아와서 진행해」 — 편집기 P2 · P3 · P5 는 코디가 ssh 로 직접 한다(80% 규칙의 인수 방법 그대로: scp 받기 → 로컬 Edit → 원격
.bak-YYYYMMDD백업 후 scp 올리기 · 검사 · 커밋은 ssh). 저쪽 클로드 잡은 이 범위에선 더 안 넣는다. 5시간 한도(주간이 아니어도)로 저쪽 진행이 오래 막히면 같은 판단을 한다. 작업 원칙(생성기 무관 파일 안 건드림 · 제품 사진 · DB 우리 쪽 복사 금지 · 저쪽 devplanblock-editor.html갱신 · 귀속 얘기 저쪽 문서 금지)은 그대로. - 🆕2026-09-24 [코디] 저쪽 편집기 캡처(
shots\)엔 아트조이 제품 사진이 들어 있다 → 자료 보관 대상에서 뺀다(mirror.py수정 · 그림 파일은 「그림 확인 필요」로 출력). 검수로 받아 본 캡처도 보고 나면 이름으로 지운다(D027). - 🆕2026-09-24 [코디] 에셋 SVG 는 860 에 넣었을 때 글자 크기로 판정한다 — 서브에이전트가 만든 1차분 글자 중앙값이 13~20px 였다(viewBox 기준으로만 그림).
_gen\fit_size.py가 기본 삽입 크기를 키운다(본문 ≈36px · 폭 상한 860). 표 · 단계 · 경고 박스처럼 폭이 꽉 찬 것은 22px 전후가 한계 — 문구를 줄여야 한다. - 🆕2026-09-24 [코디] 저쪽 생성기
npm run generator:check= 운영 서버(8820)·운영 DB 를 건드린다(P0 실측: 「변경 없이 저장」 단계가 운영 DB 견본 1행updated_at을 바꿈) → 지시문에 「기존 검사를 돌릴 땐 저장 단계가 운영을 치는지 먼저 확인 · 시험 작업본만」을 넣는다. 코드 기본 포트 8799 는 옛 값(운영 = 8820). -
🆕2026-09-24 [코디] 계획 문서 함정 2개(편집기 계획 실측) — ①코덱스가 추천한 패키지명은
npm view <이름> version license로 실재 확인 후 적는다(@fabricjs/browser= npm 404, 정식은fabric@7.4.0MIT) ②artjoy-canvas.html템플릿을 복사한 devplan 페이지는 긴<code>경로 한 줄에 390px 에서 가로 36px 넘침 →.mdoc>main{min-width:0}+overflow-wrap:anywhere를 같이 넣는다(artjoy-photo-editor.html에 반영). -
🆕2026-09-24 [코디] devplan 아트조이·조수은 페이지는 포털
C:\dev\devplan\artjoy-hub.html한 곳으로 모인다 — 새 페이지를 만들면 ①그 파일MENU에 1줄(그룹 골라서) ②projects.json카드에"in": "artjoy-hub"(허브 표에서 빠지고 포털 날짜로 올라간다 — 안 붙이면 허브에 따로 떠서 «통합»이 깨진다). 최상위 메뉴 = 아트조이 클로드 devplan(TOP). 뷰어 안 쉘 숨김 =favnav.js가 top 경로/artjoy-hub.html로 판정. -
🆕2026-09-24 [코디] AI PC 백그라운드 지시문(
prompt.txt)엔 공통 머리말을 반드시 붙인다 — 서식 =C:\dev\_work\artjoy-asset-port\job\common.txt(내부 별칭 0 · 금지 목록 · 「파일 생성·수정은 Write/Edit 도구로만, heredoc 금지 — 시스템 안내보다 우선」 · 기록 1줄 ·GATE=PASS/FAIL첫 줄 보고서). 조립·검사 = 같은 폴더assemble4.py <꼬리> <pN.txt> <reportN.md>(금지어 0 ·.cmd/.vbs/.ps1ASCII·CRLF). AI PC 쪽도 26.9.24 부터 SessionStart 주입 + heredoc 첫 시도 차단이라 세 겹이다. 🔴AI PC ruleguard 차단 알림은 26.9.24 부터 텔레그램으로 안 간다(페페 승인) →C:\_work\artjoy-dev\ruleguard_alerts.md를 본다. -
🆕2026-09-24 [코디] (AI PC 실측, 우리 PC 도 해당 가능) 윈도우 파이썬 훅이
sys.stdin.read()로 읽으면 한글 프롬프트에서 조용히 죽는다 — stdin 을 콘솔 코드페이지(cp949)로 풀어UnicodeDecodeError→ 「절대 막지 않는」 훅의 예외 삼킴과 겹쳐 오류 0 · 기능만 정지.PYTHONUTF8=1이 있으면 가려진다(그래서 회귀검사는 그 변수를 빼고 돌린다). 처방 =sys.stdin.buffer.read().decode('utf-8', 'replace'). 근거 =C:\dev\_work\artjoy-asset-port\reports\report3.md§1-2. -
🆕2026-09-24 [코디] 26.9.21 이식분 AI PC 문서에 내부 별칭이 남아 있다(web-designer KB 12파일 ·
ai-kit\ruleguard-*.md· 그쪽 HANDOFF — 「페페」「코디」). 앞으로 보내는 것은 팩 빌더(위 줄)로만. 기존분 정리는 페페 결정 대기. -
🆕2026-09-24 [코디] 우리 자산을 AI PC 로 보낼 땐 «팩 빌더»를 거친다 — 원문 복사 금지.
C:\dev\_work\artjoy-asset-port\build_pack.py패턴 = 복사하면서 내부 별칭 치환(페페→신동승 차장 · 코디→클로드 · PFS→업무앱 · 해달이 · 관리PC IP) → 금지어 검사 0 이어야 통과(GUARD=PASS). 🔴치환 정규식 함정 =포인은 색 용어 «포인트»와 겹치고코디는 «코디네이트»와 겹친다 →포인(?![트터])·코디(?!네). 우리 design-refs 텍스트 12파일에 별칭이 실제로 섞여 있었다(26.9.24 실측). 지시문 3장도assemble.py로 같은 검사 +.cmd/.ps1/.vbsASCII·CRLF 확인. 또 🔴AI PCC:\dev에는 CLAUDE.md 가 없었다(26.9.24) — 26.9.24 이전 원격 지시는 공통 규칙이 자동 로드되지 않은 상태에서 돌았다는 전제로 결과를 읽는다. -
🔴🆕2026-09-24 [페페] 기본규칙 「아트조이 클로드 사용은 백그라운드로만 지시 및 결과 보고 받는다」 — 26.9.22 「클로드 데스크톱 앱에 주입해 이력을 남겨라」(
projects/sueun-dev/rules.md)를 대체한다. 표준 절차(26.9.24 세션감사로 실측) = ①작업 폴더C:\cody\jobs\<작업명>\에prompt.txt(내부 별칭 0 — 페페·코디·pepe·포인 금지, 그쪽 세션 기록에 남는다) ·run.cmd(ASCII ·cd /d C:\dev→C:\cody\npm\claude.cmd -p --model opus --permission-mode auto --output-format text < prompt.txt > out.txt 2> err.txt· 시작/끝을status.txt에) ·run_hidden.vbs(Run "cmd /c …run.cmd", 0, False) ②scp 후 sha256 양쪽 대조 ③schtasks /create /tn "\Cody\<작업명>" /tr "wscript.exe …\run_hidden.vbs" /sc once /st 23:59 /ru artjoy /it /f+/run(/it /ru artjoy라 비밀번호 불필요 · wscript 숨김이라 창 0) ④생존 =probe.ps1(시작시각 이후 생성된 jsonl 의 LastWriteTime ·CommandLine -match 'permission-mode auto'인 claude.exe 수 ·status.txtEND) 를 Monitor 로 1분 폴링, 6분+ 무활동만 이벤트 ⑤결과 = 지시문이 정한 산출 파일을 scp 로 회수. 원본 =C:\dev\_work\artjoy-session-audit\(prompt·run·vbs·register·probe 5종 — 다음 작업은 복사해 이름만 바꾼다). ⛒--output-format text는 끝날 때 한 번에 쓰니out.txt0바이트가 정상이다. 🔴함정 2개(첫 실행 실측) — ①claude.cmd는 배치파일이라call없이 부르면 돌아오지 않는다 →status.txt에 END 가 영영 안 찍혀 감시기가 «프로세스 없음 + END 없음 = 사망»으로 오판(실제론DONE정상 완료) ②/sc once /st 23:59는 그날 밤 23:59 에 한 번 더 돈다(실측 「다음 실행 시간: 2026-09-24 오후 11:59」) →run.cmd끝에schtasks /delete /tn <작업> /f로 자기 삭제. 둘 다 원본run.cmd에 반영함. - 🔴🆕2026-09-24 [코디] Google Custom Search JSON API 는 «신규 고객에게 닫혔다» — 축① 자동화는 이 경로로 영영 안 된다. 어제부터 잡던 403
This project does not have the access to Custom Search JSON API.는 설정 문제가 아니라 정책이다(구글 공식 고지 = closed to new customers · 기존 고객도 2027-01-01 종료). 키·엔진·활성화·결제계정 무엇을 고쳐도 안 풀린다 → 어제 남긴 「콘솔 결제계정 확인」 수순은 실행하지 마라. - 🔑판별법(재사용) = 구글 API 403 은 두 종류다. ①
reason: SERVICE_DISABLED+activationUrl+ 프로젝트 번호 = 진짜 미활성(켜면 된다) ②domain: global / reason: forbidden+ 서비스 고유 문구 = 백엔드가 그 프로젝트를 거절(정책·자격). 구분법 = 같은 키로 아무 기본 비활성 API 를 한 번 때려 본다(Books 등) — ①이 나오면 키·프로젝트·키제한은 정상이고, 문제는 그 API 하나다. 실측 = 키 소속project 560040648640(xenon-effect-483708-g4) 확인까지 그 한 방으로 끝났다. - 대안 실측(26.9.24) = 🥇
Serper.dev(구글 SERP JSON · 가입 시 2,500 크레딧 무료·카드 불필요 · 1크레딧=10건 · 이후 $1/1k) · ⚠Brave Search API(무료 2,000/월 26.2 폐지, 월 $5 크레딧) · 🚫쿠팡 파트너스 Open API(공식이라 차단은 없지만 검색 시간당 10회·1회 10건 상한 + 키 발급 조건이 누적 판매 150만원 초과 후 승인, 한도초과 3회면 계정 영구 제한) · ✅코디 WebSearch(0원·미국 색인, 어제 7%/0% 가 이 값). - ⛒
C:\dev\_work\artjoy-discover\의cse_*.py6종은 전부 사장됐다(cse_search.py머리에 표시함). 되살리지 마라. 후임 =serper_search.py(같은 폴더 ·--selftest). - 💰26.9.24 [코디] 금액은 «표시가만 대략» 된다 — 와우가·베스트는 구조적으로 못 얻는다([페페] 질문 「쿠팡 베스트 선정·와우 할인가·제품 할인가까지 금액 파악 가능한가」). 실측 = 구글 스니펫에 표시가가 41/160건(26%) 딸려 온다(상품 단위 38/139) · 할인율+정가+판매가 형태 9건 · 추가 비용 0(이미 받던 응답에 있었는데 버리고 있었다). 🔴와우 회원가 = 회수 0 — 로그인 상태에서만 보이는 값이라 공개 색인에 아예 없다. 얻으려면 회원 세션 조회가 필요하고 그건 금지선. 🔴「베스트」 배지·랭킹 = 불가(쿠팡 내부 랭킹 · 재현율 6.8%가 증거). 구글 쇼핑 탭도 쿠팡 2/40(5%). ⛒한계 3개를 반드시 같이 적는다 = ①시점 보장 없음(색인 시점 값) ②어느 «옵션»의 값인지 모름 ③정확도 미검증(쿠팡 실측과 겹치는 표본 0). 그래서 가격«감시»는 여전히 §11 URL 고정추적 몫이고, 벤더 3질문에 4번째가 붙었다 = 「와우가·쿠폰가까지 잡히나, 비로그인 표시가만인가」(= 수집 경로 질문과 한 몸 — 와우가를 잡는다면 누군가의 로그인 세션을 쓴다는 뜻).
- 🔴26.9.24 [코디] 「구글 상위 10건」은 그 판의 전부가 아니라 «표본»이다 — 엔진·지역을 바꾸면 거의 딴 목록이 나온다. 같은 쿼리(
site:coupang.com/vp/products <어휘>)·같은 어휘 16개인데 미국 색인 116개 vs 한국 색인 141개가 11개(8%)만 겹쳤다(합집합 246). ⛒그러니 발굴 결과를 「경쟁사 N개」로 확정해 말하지 마라 — 한 번 돌린 값은 하한이다. 필요한 건 어휘·지역을 바꿔 여러 번 돌린 합집합이고, 브랜드 수도 제목 첫 토큰 추정이라 «후보»로만 쓴다(같은 회사가 채널별 상호로 갈린다). 가격은 SERP 에 아예 없다 — 그건 §11 URL 고정추적 몫. -
✅같은 날 Serper 로 갈아타 재측정 완료 — 🔑엔진을 바꿔도 축①은 추적용이 못 된다(재현율 2.7%→6.8%). 대신 발굴 품질이 올랐다: 노이즈가 사라지고(숫자유화 10/10 무관 → 0/10) 고유 상품 116→141, 후보 168→265개. ⛒어제 적은 「어휘를 좁게 쓸수록 노이즈가 는다」는 «미국 색인의 성질»이었다 — 쿼리문이 같아도
gl=kr·hl=ko면 안 그렇다. 한국 상품을 구글로 훑을 땐 지역·언어를 반드시 KR 로 박는다(코디 WebSearch 도구는 US 고정이라 이 검증에 못 쓴다). -
🔑🆕2026-09-23 [코디] 아트조이는 «한 브랜드»로 DIY 취미와 문구·잡화를 같이 판다 — 「주력 10개」는 기준에 따라 통째로 갈린다. 쿠팡 「아트조이」 단독 검색(판매량순) 상위 20건이 전량 문구·잡화(필통·파우치·롤링카트·피젯토이)라 동명 브랜드가 둘인 줄 알고 그렇게 적었다가, [페페] 지적(「자고등은 검색해도 안 나온다, 모든 제품이 아트조이 이름으로 등록돼 있다」)으로 재확인해 정정했다 — 명화그리기
1271013과 곤충채집세트8562249831이 같은vendorId A00264402(상품페이지 브랜드샵 링크). 실측 60개 = DIY 취미 15 · 문구·잡화 37. ⛒그러니 「가장 잘 팔리는 10개」를 물으면 기준을 먼저 확정한다 — 쿠팡 판매량순 = 전량 문구·잡화(최근 실판매), 리뷰 누적 = 전량 DIY 취미(역대, 명화 1위 17,736 vs 문구 1위 882). 🔑덤 = 쿠팡은 「상품 1개 = 도안 수십 개 옵션」 이라 같은productId가 도안만 바꿔 여러 행으로 보인다 — 화이트리스트 단위는 도안이 아니라 productId(모든 벤더 요금 단위가 «상품 수»라 이 구분이 곧 견적이다). - 🔑🆕2026-09-23 [코디] 쿠팡 「사용권한이 없습니다」 차단은 «우리 쿠키»에 저장된다 — 쿠키 1회 삭제로 즉시 풀린다([페페] 「차단 기록을 쿠팡이 저장하는 게 아니라 우리 브라우저에 저장하는 것 아니냐」 지적으로 실측). 같은 IP·같은 크롬·같은 프로필에서 카드 0 →
Network.clearBrowserCookies→ 카드 60(캐시·스토리지까지 지워도 결과 동일 = 쿠키만으로 충분). 26.9.4 실측 「빈 프로필이면 즉시 통과」의 정체가 이것이었다 — 프로필을 통째로 새로 만들 필요가 없다. 도구 =C:\dev\_work\artjoy-discover\cp_search.py --clear-cookies· 실험 = 같은 폴더cp_unblock.py. 차단까지는 검색 약 10회(26.9.23 실측 11회째 차단). ⛒단 «수동 1회»로만 쓴다. 수집 루프에 쿠키삭제를 자동으로 박으면 지속적 차단 우회가 되어 총람 #27(프록시 로테이션)·#32 계열 금지선이다. 허용 범위 = 우리 조달 조사·1회성 대조군처럼 사람이 브라우저에서 할 법한 행위. 아트조이 (C) 상시 수집은 여전히 «쿠팡 조회 0» 설계(§12)로 간다. 🔴26.9.23 2차 실측 + 문헌으로 이유가 하나 더 붙었다 — 차단은 쿠키 값 자체에 들어 있다(차단 쿠키를 되심으니 즉시 재차단, 같은 IP·프로필). 쿠키 =_abck(만료 1년)·bm_sz·ak_bmsc·bm_sv= Akamai Bot Manager 세트. 그런데 서버측엔Client Reputation(IP 단위 위험점수, Akamai 전 고객망 공유·쿠키 무관 지속)이 따로 돈다 → 쿠키 삭제를 반복하면 쿠팡이 아니라 «우리 IP 의 Akamai 전역 평판»이 깎이고 Akamai 를 쓰는 다른 사이트까지 나빠진다. 임계도 횟수 고정이 아니라 행동 점수다(낮 11회째 차단 vs 이어붙인 세션 1회째 차단). - 🔑🆕2026-09-23 [코디] (B) 네이버 「카탈로그 가격관리」는 사업자등록 문제가 아니라 «그 상품을 파는 계정» 문제다 — 아트조이 계정 없이는 우회가 없다([페페] 질문으로 조사). 스마트스토어 가입 자체는 개인 명의로 사업자등록 없이 가능하고 통신판매업 신고도 연 50회 미만·간이과세자면 면제다. 그러나 이 화면은 내가 등록·매칭한 내 판매상품의 카탈로그만 보여준다(셀러 3곳 서술 일치) — 안 파는 남의 카탈로그를 감시하는 기능은 공개자료에 없다(구조상 불가로 추정). 즉 페페 개인 스토어를 새로 만들어도 아트조이 상품이 없으니 보일 게 없다. ⚠「자동가격관리」라는 네이버 공식 내장 기능은 확인 못 했다(공식 도움말 도메인이 차단돼 원문 미확인) — 실재가 확인된 건 커머스API 제휴 대행사의 외부 유료 서비스뿐이다. 커머스API 엔 「카탈로그 조회 API」가 살아 있으나 신청에 국내 법인/사업자 조건이 걸린다는 서드파티 서술이 있다(개인 발급 가능 여부 미확인). → (B) 는 아트조이가 직접 켜야 하는 항목으로 남긴다.
- 🆕2026-09-23 [코디] 셀프라이스 실검증(공개 페이지 1차 자료) — 요금은 문서와 일치, «무료체험 14일 × 5개»가 새로 나왔다. ✅요금 = 10개 5,000원 · 5개 추가당 2,500원 · VAT 별도 · 월 선납(GPT 인용값과 일치 → 미확인 #15 해소). 🆕무료체험 14일 5개(카드등록 필요 여부는 공개 페이지에 없음) → 0원으로 실전 검증 가능. 🔑이용약관에 「자사 상품만」·경쟁사 등록 금지 조항이 없다(제품소개에 「자사」·「경쟁사」 단어 자체가 없는 중립 문구) — 다만 운영 재량으로 막을 수는 있어 전화 확인(070-4006-7978)이 남는다. 🔑설치형·확장프로그램 언급이 어디에도 없고 「URL 링크를 입력하면 바로 가격 확인」 = 벤더 서버가 조회하는 웹서비스형으로 읽힌다(미확인 #13 ②에 유리한 정황, 확언은 아님). 지원몰 = 다나와·쿠팡·스마트스토어·다음·11번가·바이즐·에누리·롯데온. 알림 = 이메일(카톡 없음) · 수집 주기는 미공개. 🔴가입 폼이 상호·사업자등록번호·대표자 인증·사업장소재지를 요구한다 — 순수 개인(무사업자) 가입 가능 여부가 공개 페이지에 없다([페페] 개인 명의 테스트 계획의 첫 관문).
- 🚫🆕2026-09-23 [코디] 「VPN 으로 지역을 옮겨가며 계속 검색」은 총람 #27 그 자체이고, 효과도 오히려 나쁘다([페페] 질문으로 조사). ①데이터센터·VPN ASN 은 구조적으로 낮은 신뢰점수 — Akamai 공식 자료가 ASN 을 4단계로 분류하고 호스팅 ASN 은 전체 트래픽 5% 미만인데 위험 트래픽의 18.1%를 차지한다고 명시한다. 가정용 IP 보다 더 빨리 걸린다. ②상용 VPN 출구는 공유라 남이 태운 평판을 물려받고 우리 행위도 뒤 이용자에게 번진다(Client Reputation = Akamai 전역 축적). ③IP 만 바꿔도 익명이 안 된다 — TLS/HTTP2 지문·sensor_data·세션 연속성으로 상관 추적된다(「IP 로테이션만으로 충분」을 지지하는 출처는 조사 범위에 전무). ④전개 = 캡차 상시화 → 개별 IP 차단 → ASN 대역 차단(다수 기술블로그 일관 서술 · NordVPN 자체 지원문서도 차단을 인정). ⑤약관·법 = 쿠팡 이용약관 §1.4 가 「automated searches… strip, scrape, or mine data」를 명시 금지하고 robots.txt 는 전 크롤러
Disallow: /. 정보통신망법 §48-1 은 야놀자 판례(대법원 2021도1533)에서 기술적 보호조치가 없어 무죄였는데 쿠팡은 Akamai 로 명시적 보호조치가 있어 사실관계가 다르다(직접 판례 없음 = 추정, 법률자문 아님). ⛒아트조이는 판매자 계정 보유 측이라 위험 등급이 한 칸 더 높다 — (C) 수요는 §11 URL 고정추적(셀프라이스)으로, 발굴은 축①(구글 CSE)로 간다. 둘 다 쿠팡 조회 0 이라 이 경로가 필요한 자리가 설계에 없다. - 🆕2026-09-23 [코디] 브랜드 전량을 보는 정답 경로 = 상품페이지 → 브랜드샵 링크. 상품 1장만 열면
shop.coupang.com/vid/brand-plus/<vendorId>/v1url/…가 나오고 디코드하면www.coupang.com/np/products/brand-shop?brandName=<브랜드>다. 브랜드 하나 = URL 하나라 어휘·검색이 필요 없다 — §12-2 가 「⚠묶기만 된다」로 낮춰 둔 축⑤ 의 실제 값은 여기다. ⚠단 브랜드샵 지면은 추천·광고 상품이 섞여 일반 셀렉터로 긁으면 갤럭시 버즈·런닝화까지 딸려 온다(26.9.23 실측) → 전용 파서가 필요하고, 급하면 검색listSize=72× 3페이지로 대신 모은다(60개 회수). - 🔴🆕2026-09-23 [코디] 쿠팡 대조군 수집은 «검색 10회»가 실측 상한이다 — 11회째에 차단된다. 클린 프로필·헤드풀·미니PC IP 로도 11번째 검색에서 「요청하신 페이지의 사용권한이 없습니다」(Ref: DA6). §12-1 의 「저빈도면 괜찮다는 성립하지 않는다」가 숫자로 재확인됐다. → 쿠팡 조회는 «대조군 1회분»으로 끝내고, 나머지는 색인(축①)으로 채운다. ⛒검색용 프로필은 신설 CDP 9349(
launch_cpsearch.bat· 로그인 0)를 쓰고 로그인 프로필 9335(지출집계·장바구니)와 절대 섞지 않는다 — 섞으면 봇 플래그가 계정 프로필로 번진다(rules\tooling.md26.9.4 실측). - 🆕2026-09-23 [코디] 구글 색인(축①)은 «발굴»용이지 «순위·가격 추적»용이 아니다 — 재현율 0~7%. 쿠팡 실제 상위(랭킹순·최저가순 각 20건)가 색인 160건 표본에 잡힌 비율 = 명화그리기 7% · 보석십자수 0% · 아트조이 자사 0%. 색인에 존재는 한다(지명 쿼리로
195468222직접 회수) — 안 되는 건 «상위 노출»이고 구글 랭킹은 쿠팡 판매순위와 무관하다. 물량은 1쿼리 = 정확히 10건(16쿼리 전부 캡), 고유화율 72%, 노이즈는 어휘가 좁을수록 는다(숫자유화 10/10 무관). ⛒구글을 스크립트로 긁는 건 첫 쿼리에 캡차(/sorry)라 자동화는 공식 CSE API 아니면 불가. 축⑤(셀러ID)는 URL 동반 2.5%뿐이라 §12-2 의 「그대로 딸려 나온다」를 하향한다. - 🆕2026-09-22 [코디] 아트조이 AI PC 의 «우리 흔적 지우기»는 Claude 세션으로 끝나지 않는다 — 정리한 세션이 삭제목록·발췌를 통째로 남긴다(꼬리 물기). 실측 =
claude -p1회로 세션 jsonl 66개 중 54개를 지웠는데 그 정리 세션 자신의 기록에 「신동승 230 · 페페 121 · pepe 69」가 그대로 남았고, 검증을 또claude -p로 돌리니 그 검증 세션이 다시 304/226 을 적었다. ⛒마지막 한 칸은 결정론적 스크립트로 친다 =C:\dev\_tmp\artjoy_purge.py(scp →C:\Python312\python.exe, dry-run 먼저 →--apply). 범위 =%USERPROFILE%\.claude전체(projects · file-history · paste-cache · history.jsonl 은 줄단위), 제외 = plugins · skills · ide · cache · settings. 🔴키워드에 「포인 · poin」을 넣지 마라 —entrypoint· 「포인트」로 오탐이 폭발한다(강한 키워드 = 신동승 · 페페 · pepe · 포인가구 · poinimos 5개면 충분). ⚠그 PC 홈은 한글 경로(C:\Users\디자이너-2) 라 경로 하드코딩 금지,%USERPROFILE%로 잡는다. ⚠AI PC ruleguard 는 해제 기능이 없는 경량판이라rm -rf· history 편집을 막는다 → 페페 승인 받고C:\dev\.claude\settings.local.json의hooks키만 잠시 들어냈다가(.prepurge백업) 끝나면 복원한다(C:\dev\_tmp\artjoy_hooks_toggle.py off|restore). 결과 = 세션 66→12(남은 건 전부entrypoint오탐 · 빈 파일), history 6→4줄, 고아 폴더 11개 제거. 기억 메모 5개(…\projects\C--dev\memory\)는 아트조이 운영 지식이라 보존했다. - 🆕2026-09-21 [코디] ✅AI PC 에
web-designer에이전트 + ruleguard 를 이식했다 — 「해제 없는 ruleguard」가 이 PC 의 형태다(페페 결정). ①web-designer = 정의C:\dev\.claude\agents\web-designer.md· KB 20개C:\dev\ai-kit\web-designer\kb\(원본 19개 + 신설00-artjoy-lens.md).00-pfs-lens.md는 일부러 뺐다 — 🔴여기 생성기는 Bootstrap 5.3.8 + jQuery 없음, devplan 은 프레임워크 자체가 없다(실측). PFS 렌즈의 「BS5 문법 안 먹는다」를 그대로 옮기면 정반대 오조언이 된다. 기존 발췌본C:\dev\ai-kit\web-ui-rules.md는 포인터로 축약하되.hd-flash클릭→이동 하이라이트 패턴만 남겼다(KB 에 없는 고유 자산). ②ruleguard =C:\dev\tools\ruleguard\(경량판 신규 작성, 원판 1676줄 → 승인 게이트 일체 제거).off·unlock·request-off·confirm이 아예 없다 — 텔레그램이 없어 작동할 수 없는 기능을 남기면 치는 순간 사고다. 규칙이 틀리면 규칙 파일을 고친다. 탐지기 8개 = 범용 5(heredoc·danger-delete·relative-path·chrome-dropdown·gui-session0) + 신설 3(ps1-korean-ascii·generator-save-click·web-designer-required), 근거문서C:\dev\ai-kit\ruleguard-rules.md. ③보고 경로 = MD + 폴링 중계. 평상시엔C:\dev\ai-kit\ruleguard-history.md에만 쌓고, 실제로 막았을 때만C:\cody\ruleguard-alerts\*.json을 떨군다 → 미니PCdevplan_watch.py(5분)가C:\cody\rg_collect.py로 주워 발신자를 「[아트조이 AI PC]」로 밝혀 페페 텔레그램에 보낸다. 🔴AI PC → 미니PC 는 못 닿는다(노드 공유가 단방향,100.108.234.45:7777ping·TCP 둘 다 False) — 그래서 푸시가 아니라 폴링이다. ⛒함정 2개 =re.sub의 repl 문자열에서 백슬래시가 이스케이프로 먹혀 doc 경로가C:\dev\ai-kit(=\abell)로 깨졌다(람다로 넘겨 고침) · 원판 탐지기selftest()는[(이름, bool)]리스트를 반환한다(True/None만 보면 전부 FAIL 로 오판). 검증 = 원격--selftest21/21, 연기시험에서 1회째 경고·2회째 deny·alert 드롭·중계 1건 실측. - 🔴2026-09-21 [코디] AI PC 원격작업에서
iphlpsvc를 재시작하지 마라 — 테일스케일이 그걸 의존해서 «우리 손이 통째로 끊긴다».(Get-Service iphlpsvc).DependentServices= Tailscale, NcaSvc.Restart-Service iphlpsvc -Force는 의존 서비스를 멈추고 다시 켜 주지는 않는다 → ssh·AnyDesk 가 전부 테일넷 위에 있어 아트조이 사무실에 사람이 가야 복구된다. 「portproxy 가 부팅 때 정말 다시 뜨나」를 보려고 이걸 하고 싶어지는데(코덱스 권고안도 이 순서였다), 대신 portproxy 행을 delete → add 하면 같은 바인드 경로를 안전하게 잰다(26.9.21 실측: svchost 가0.0.0.0:8080을 0.7초 만에 재획득 · 선점자 0). 부팅 실패 조건인 「listenaddress를 특정 IP 로 줌」은 우리가0.0.0.0이라 애초에 해당이 없다. - 🔴2026-09-21 [코디] 「HTTP 200 이면 방화벽도 정상」은 거짓 — 8080 을 실제로 여는 건
Cody-Devplan-8080이 아니라Tailscale-In이다. 그 규칙을 지워도 접속은 그대로 200 이었다(실측). 전수조사(인바운드·Enabled·Allow·TCP/Any·포트 8080 또는 Any·프로그램/패키지 미지정) 결과 남는 건Tailscale-In둘뿐인데, 포트는 Any 지만LocalAddress가 테일넷 주소(100.122.89.28/fd7a:115c:a1e0::a73a:591d)로 묶여 있어 테일넷 트래픽만 통과한다 → 공개 범위는 테일넷 전용 그대로(LAN·공인은 기본 차단), 우리 규칙은 이중잠금이다. ⛒그래서 공개범위 점검은 가용성 점검과 분리해서 매 주기 따로 돌려야 한다 — 감시기가 그렇게 짜여 있다. 판정 기준 = 「LocalAddress가 테일넷 주소인 규칙은 안전, 그 외에 8080 에 닿는 규칙이 있으면 드리프트」. - 🛡2026-09-21 [코디] devplan 8080 감시기 신설 — 절대 재부팅하지 않는다(페페 절대조건). 미니PC 예약작업
\Cody\artjoy-devplan-watch(5분) · 본체C:\dev\tools\artjoy-ai-setup\devplan_watch.py· AI PC 프로브C:\cody\devplan_probe.ps1(읽기 전용). 밖에서http://100.122.89.28:8080/devplan을 찌르고(200 + 본문 마커data-artjoy-page="devplan"— 200만 보면 엉뚱한 서버도 통과한다) 실패할 때만 ssh 로 원인을 캔다. 허용 복구는 6개 사전뿐(server·portproxy·rebind·fw_create·fw_enable·fw_narrow), 그 밖(전원·테일스케일 불통 ·iphlpsvc정지 · portproxy 이형 행 · 규칙 중복 · 8799 는 살아 있는데 HTTP 무응답인 hang)은 알림만.selftest가 소스를shutdown|Restart-Computer|Stop-Computer|logoff|Restart-Service|taskkill|Stop-Process정규식으로 훑어 한 줄만 있어도 실패시킨다. 시끄러움 제어 = 1회 실패 유예 · 복구 10분에 1번·사건당 3번(넘으면 자동복구 중단, 하루 1번만 상기) · 알림 사건당 1회(6시간 리마인더) · 복귀는 정상 2회 연속 · 정상이면 완전 무음. - 🧰2026-09-21 [코디] AI PC 를 손볼 땐 유지보수 표식을 먼저 건다 — 안 걸면 감시기가 되살려 놓고 알림까지 쏜다.
python C:\dev\tools\artjoy-ai-setup\devplan_watch.py maint 30 "사유"(최대 180분) → 작업 →… maint off(푼 뒤 10분 유예). 표식 실물 = AI PCC:\cody\MAINTENANCE.json. 고아가 되면(만료·JSON 깨짐) 확대하지 않고MAINTENANCE.expired.json으로 이름만 바꾸고 알림 1회 + 유예 후 재개한다(지우지 않는 이유 = 무엇이 있었는지 남아야 사람이 판단한다). ssh 불통이면 표식은 «없음»이 아니라 «불명» 이라 직전이 유지보수였으면 그대로 유지보수로 본다. - ⚠2026-09-21 [코디] AI PC 에 보낼
.ps1은 ASCII 로만 쓴다. Windows PowerShell 5.1 은 BOM 없는 파일을 cp949 로 읽어 한글이 섞이면TerminatorExpectedAtEndOfString파서 오류로 통째로 죽는다(26.9.21 실측). 같은 이유로 UTF-8 파일을Get-Content -Raw로 읽으면 내용이 깨진다 →[IO.File]::ReadAllText(path,[Text.Encoding]::UTF8). 그리고netsh interface portproxy show출력은 한글 헤더 cp949 라 ssh 파이프에서 깨진다 → 판정은 레지스트리HKLM\SYSTEM\CurrentControlSet\Services\PortProxy\v4tov4\tcp(값 이름0.0.0.0/8080, 데이터127.0.0.1/8799)로 읽는다. 한글을 원격에 쓸 땐 base64 →[IO.File]::WriteAllBytes. - 🔑2026-09-21 [코디] ✅devplan 이 이제 «IP 로도» 열린다 —
tailscale serve를netsh portproxy로 갈았다(정정: 26.9.19 「IP 로 부르면 404」). 발단 = 조수은 사무실 데스크톱이 26.9.21 09:48 KST 에 아트조이 테일넷에 신규 등록(artjoy·100.121.60.15· LAN192.168.1.212)됐는데http://100.122.89.28:8080/devplan이 404. 원인은 고장이 아니라 설계 —tailscale serve는 Host 헤더(MagicDNS 이름)로만 매칭해서 IP 호스트는 어떤 serve 설정에도 안 걸린다(tailscaled 가 직접 404 를 뱉어 로컬 8799 까지 가지도 않는다). ⛒그래서 「IP 를 쓰지 마라」로 넘기면 상대 PC 의--accept-dns설정에 계속 매달린다(AI PC 자신도Tailscale DNS: disabled다). 처방 = serve 를 걷어내고 같은 8080 을 포트프록시로 준다 — ①tailscale serve --http=8080 off②netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8080 connectaddress=127.0.0.1 connectport=8799③방화벽Cody-Devplan-8080(TCP 8080 · RemoteAddress100.64.0.0/10만). 🔑포트 순서가 중요하다 — serve 가100.122.89.28:8080을 잡고 있어 먼저 끄지 않으면 와일드카드 바인드가 실패한다. 🔑listenaddress는 0.0.0.0 으로 둔다 — 테일스케일 IP 로 지정하면 부팅 때iphlpsvc가 그 주소보다 먼저 떠서 바인드를 놓친다(재부팅하면 조용히 죽는 구성). 노출은 방화벽이 tailnet 으로 잠근다. 결과 = 이름·IP 둘 다 200(http://100.122.89.28:8080/devplan·http://artjoy-aipc.tailbea356.ts.net:8080/devplan/), 생성기(80→8820)의 serve 는 그대로. ⚠LAN 노출 점검은 규칙 하나만 보면 틀린다 —Tailscale-In이lport=Any remote=Any라 열려 보이지만LocalAddress=100.122.89.28로 묶여 있어 테일스케일 주소로 오는 것만 통과한다(UWP 규칙들이prog=Any로 보이는 것도 같은 착시 — 실제론PackageSID 로 묶여 있다). ⚠새 노드 이름이 하필artjoy라 우리~/.ssh/config의Host artjoy(=AI PC100.122.89.28)와 헷갈린다 — 조수은 PC 는artjoy.tailbea356.ts.net/100.121.60.15, AI PC 는artjoy-aipc. - 🔴2026-09-20 [코디] 원격 클로드 «창» 경로는 오래 못 버틴다 — 긴 작업은 헤드리스(
claude -p < 지시문.txt)로 보내라. 실측 = 대화형 창이 두 번 사라졌다(프로세스는 남고 창만 없어져MainWindowHandle=0→ 모든 주입 도구가NO TARGET). 두 번째는claude.cmd --continue로 29MB 세션을 복원하다 프로세스 트리째 증발(MAIN_RC가 아예 안 찍혔다 = 정상 종료가 아니다). ⛒긴 제작 지시는 창을 포기하고C:\cody\npm\claude.cmd -p --model opus --dangerously-skip-permissions < prompt.txt >> 로그를 예약작업(/it불필요)으로 돌린다 — 창이 없으니 포커스·IME·빈 cmd 함정이 통째로 사라진다. 진행 판정은~\.claude\projects\<슬러그>\*.jsonl의 LastWriteTime(6분+ 정체 = 스톨). 대화가 꼭 필요할 때만 창을 쓴다. - ⛒2026-09-20 [코디] 콘솔 창 핸들을
Get-Process | ? MainWindowHandle -ne 0로 찾으면 놓친다 —EnumWindows로 훑어라. 같은 창을 한쪽 도구는 보고(canvas-win) 다른 쪽은 못 봤다. 그리고 스크린샷을 예약작업으로 찍으면 자기 cmd 창이 화면을 덮는다 → 캡처 전에ShowWindow(GetConsoleWindow(), 0)로 자기 콘솔을 먼저 숨긴다. 통합 도구 =C:\dev\artjoy-canvas\_ops.ps1 -mode shot|enter|paste(EnumWindows + 자기창 숨김 + 제목 fallbackClaude Code|Artjoy-canvas). - ⛒2026-09-20 [코디] Bash
printf로 윈도우 경로가 든 배치파일을 만들지 마라 —\a·\d가 이스케이프로 먹힌다. 실측 =C:\dev\artjoy-canvas가C:\devrtjoy-canvas(\a= bell)로 조용히 바뀌어 예약작업이 「파일을 찾을 수 없다」로 죽었다. 전역 규칙(§2-7 파일 생성은 Write/Edit)이echo·heredoc 말고printf에도 그대로 걸린다. - 🔴2026-09-20 [코디] Claude Code 2.1.x 는
claude.exe네이티브 바이너리다 —node.exe로 찾으면 «안 떴다»고 평생 오판한다. 실측 =schtasks /IT로 AI PC 에 대화형 클로드 창을 띄웠고 처음부터 정상 기동하고 있었는데, 생존 판정을Get-Process node로 해서 30분 동안 「실패」로 오진했다(배치를 ASCII 로 바꾸고start로 콘솔을 분리하고 따옴표 중첩을 없애는 등 멀쩡한 것을 네 번 고쳤다). 실제 경로 =C:\cody\npm\node_modules\@anthropic-ai\claude-code\bin\claude.exe. ⛒원격 PC 에서 클로드 생존 판정은Get-CimInstance Win32_Process | ? {$_.Name -eq 'claude.exe'}로 하고, 데스크톱 앱(WindowsApps\Claude_*)과 CLI 를CommandLine -notmatch 'WindowsApps'로 갈라낸다(둘 다 이름이claude.exe라 안 가르면 앱 12개에 묻힌다).remote-control브리지 세션도 같은 이름으로 뜨니CommandLine을 봐야 구분된다. 곁가지 교훈 =MainWindowTitle은 Session 0 에서 남의 세션 걸 못 읽으니 판정 근거로 쓰지 마라(빈 문자열이 「창 없음」으로 보인다). - 🔑2026-09-20 [코디] 원격 PC 클로드 «창»에 지시문을 넣는 정답 경로 = 빈 창으로 띄우고 → 클립보드 → 콘솔 붙여넣기 명령 → Enter. 페페 지시 = 「나는 직접 작업 안 한다. 네가 할 수 있는 방법을 찾아 진행해라」. 실측으로 확정된 4단 =
①프롬프트를 인자로 주면 안 된다 —
claude … "프롬프트"는 즉시MAIN_RC=123으로 죽는다(공백 구분--allowedTools Write Edit …는 프롬프트까지 값으로 삼켜 빈 대화형으로 뜬다). ⛒인자 없이claude.cmd만 띄우면 정상 가동한다. ②클립보드에 지시문(Set-Clipboard, 배치 안에서 Session 1 클립보드에 넣는다). ③🔑붙여넣기는SendMessage(hwnd, WM_COMMAND=0x0111, 0xFFF1)— 콘솔의 「편집 > 붙여넣기」 명령이라 키보드·IME 를 아예 거치지 않는다. ⛒SendKeys('^v')는 한글 IME 상태에서ㅇㅇ로 들어간다(실측). ④Enter 는keybd_event(VK_RETURN)로 따로. 안 먹으면 포커스를 훔치는 빈관리자: …\cmd.exe창을 먼저 닫는다(실측: 그 창 때문에 Enter 가 2회 유실). ⚠창 매칭은 제목*Claude Code*로 한다 —*ARTJOY*(내가title로 준 이름)로 잡으면 이미 끝나서 cmd 프롬프트가 된 죽은 창을 잡아 지시문이 «명령»으로 입력된다(실측 1회, 무해했지만 시간 낭비). ⚠.ps1은 ASCII 로 쓴다 — BOM 없는 UTF-8 을powershell -File로 돌리면 한글 주석에서 파싱이 깨져 필터가 조용히 0건을 반환한다(NO TARGET오진의 원인). 도구 일습 =C:\dev\_work\artjoy-canvas\_inject.ps1(클립보드+붙여넣기) ·_enter.ps1(빈 창 정리+Enter) ·_shot.cmd(화면 캡처) ·_windows.cmd(창 목록).schtasks /IT+ 결과를 로그파일로 가 공통 골격이고, 막히면 스크린샷 1장이 로그 10개보다 빠르다(이번에 원인 3건을 화면이 알려줬다). - ⛒2026-09-20 [코디]
MSYS_NO_PATHCONV=1 schtasks …를 ssh 문자열 안에 넣으면 그 명령은 통째로 안 돈다. 그건 bash 변수라 Windows cmd 쪽에선 「MSYS_NO_PATHCONV=1」이 실행파일 이름이 된다 → 예약작업이 생성조차 안 되는데2>&1 | findstr로 가려 «성공»처럼 보인다(실측 2회: 창 열거·CDP 기동이 조용히 no-op). 경로 변환을 막아야 하면 ssh 바깥에서MSYS_NO_PATHCONV=1 ssh …로 붙이거나, 애초에 경로를\\로 이스케이프해 보낸다. ✅성공 판정은findstr /i "SUCCESS ERROR"로 schtasks 의 실제 출력을 찍어 확인한다. - ⛒2026-09-20 [코디] 스토어(UWP) 판 Claude 데스크톱 앱은 CDP 포트를 못 연다.
"C:\Program Files\WindowsApps\Claude_2.2553.1.0_…\app\Claude.exe" --remote-debugging-port=9350직접 실행 = rc=5 액세스 거부(WindowsApps ACL).explorer.exe shell:AppsFolder\Claude_pzs8sxrjxfjjc!Claude로는 뜨지만 인자를 못 넘긴다 → CDP 불가. 🔴앱을 죽이기 전에 이걸 먼저 알았어야 했다 — 죽였다가 fallback 으로 겨우 되살렸다(ChatGPT 앱 교훈과 같은 자리다: 남이 쓰는 앱은 되살릴 방법을 확인한 뒤에 건드린다). CDP 가 꼭 필요하면 비스토어 설치본이어야 한다. - 🔴2026-09-20 [코디] 잘림 검사를 「스크롤 0개」로 재면 «여유 1px 짜리»가 통과한다 — 기준은 «여유 N px 이상»이다. 순환맵 v2 팝업 16개가 「세로 스크롤 0」으로 통과했는데, 기준을 여유 12px 로 바꾸자 폴백 폰트에서 문모세 팝업 −32px · 계산기 −12px 로 실제로 잘리고 있던 것이 드러났다. ⛒검사는 «두 폰트 상태»를 다 재야 한다 — 만든 PC 엔 Pretendard 가 깔려 있고 발표 PC 엔 없을 수 있다(폴백은 줄바꿈이 늘어난다). 같은 이유로 「발표 PC 에서
?check=11회」가 미팅 전 마지막 관문이다. 지금 여유 = Pretendard 23px · 폴백 15px. - 2026-09-20 [코디] 화면을 고칠 땐 «스크린샷 육안»을 검사와 따로 돌려라 — 자동검사 20/20 이 통과한 화면에서 6건이 나왔다. 실측 = 팝업 본문 세로 잘림 15개 · 구간 색이 배경에 묻혀 라벨 색칩이 「빈 체크박스」로 보임(
rgba(255,255,255,.16)을 보라 배경에 얹었다) · 샤이닝이 빛이 아니라 굵은 흰 덩어리 · 패킹리스트가 헤더만 있고 빈 표. 전부 「PASS」 상태였다. ⛒색을 기능으로 쓸 땐(여기선 「대표 담당 코스는 색상 강조만으로 충분하다」) 그 색이 배경 위에서 실제로 구분되는지가 검사 항목이어야 한다. - 2026-09-20 [코디] 1단계 산출물 「ARTJOY 로고 20시안」은 «대표님 보고서 PDF 1쪽의 임베드 이미지»가 원본이다 — 파일로는 어디에도 없다. AI PC(
C:\dev·C:\artjoy-setup·생성기outputs)와 8820 에*logo*로 남은 건 playwright 아이콘과 보고서 미리보기뿐이고, SVG 원본 0건이다. 원본 =C:\dev\_work\ax-biz\kakao\pdfimg\p01_0.png(1122×1402 · 4×5 격자 · 칸당 ≈280px). 격자선 실측 = 열14/284/560/837/1106· 행67/313/559/806/1054/1305(칸마다 몇 px 다르다). 🔴남색 워드마크라 보라→핑크 글래스 배경에선 안 읽힌다 → 잘라서 남색만 흰색으로 바꾼다(빨강 포인트는 브랜드색이라 유지). ⛒알파를255 - max(채널)로 재면 빨강처럼 «채도만 높은 색»이 투명해진다 —255 - min(채널)이 맞다. 도구 =C:\dev\_work\ax-biz\cycle\make_logo.py <번호>(--demo자체검사). - 2026-09-20 [코디] 「쿠팡 박스 패킹」 앱에 CSV 를 밖에서 먹일 경로가 없다 — 헤매지 마라. 매니페스트 인텐트필터가 MAIN/LAUNCHER 뿐(VIEW·SEND 0)이고 dex 에 고정 CSV 경로 문자열도 0건 = 앱 안 SAF 파일 피커로만 들어간다. 상단 ↻ 는 블루투스 스캐너 재연결이라(누르면 「근처 기기」 권한 대화상자) 리스트는 0/0 그대로다. 한글 UI 문자열 전수에도 「CSV」·「불러오기」가 없다. → 목업엔 앱 실기 캡처 3장 + CSV 를 HTML 표로 그린 것을 쓴다. ⛒「서버업로드」·「서버 목록 확인」은 문모세 대표 운영 Firebase —
_boxpack_capture.py의BLOCK가드가 막는다(자체검사 포함). - 2026-09-20 [코디] 아트조이 NAS 는 «이름으로 찾기»가 안 된다 — FileStation Search 가 항상 0건이다. Universal Search 색인이 꺼져 있어
before-coupang·GO-171·*.jpg어떤 패턴도total 0이고, 와일드카드를 붙이면data키조차 안 온다. → 경로를 알고 들어가거나(공유 =docker·home=homes/chosueun·homes·디자이너) AI PC 로컬(C:\dev\haedali-detail-generator\outputs\)에서 찾는다. 도구 =C:\dev\_work\artjoy-nas\find_files.py(색인이 켜지면 그대로 쓴다). - 2026-09-20 [코디] 화면 검사에서 «선언값 비교»는 대비를 못 잡는다 — 합성된 픽셀을 재야 한다. 순환맵
?check=1이getComputedStyle().fill만 비교해서 흰 글자를 그라디언트 배경에 직접 얹은 3곳(3.90~4.14:1)과 하단 크레딧(2.00:1)을 통과시켰다(기준 4.5:1). 🔑글래스 카드 «안»은 문제가 없었다(7.37~7.93:1) — 위험한 곳은 유리판이 없는 자리다. 처방 = 그 글자에paint-order:stroke+ 다크 아웃라인(SVG filter 가 아니라 금지 규칙에 안 걸린다), 검사엔 canvas 픽셀 샘플링을 넣는다. - 2026-09-20 [코디] 외부요청 0 짜리 단일 HTML 은 «폰트를 뷰어 PC 에 의존»한다 — 발표 전에 확인한다.
@font-face가 없으니 Pretendard 는 설치돼 있어야만 잡힌다(실측: 미설치 → 라틴=Segoe UI · 한글=맑은 고딕 폴백, 다행히 메트릭이 맞아 육안 합격점). 임베드는 서브셋 1웨이트도 100KB+ 라 60KB 예산과 충돌 → 채택 불가. 대신console.log('Pretendard 로드:', document.fonts.check('16px "Pretendard Variable"'))한 줄로 예비 노트북에서도 즉시 진단되게 한다. - 2026-09-19 [코디] ⛒CSS 주석 안에 «주석 닫는 기호»를 글자로도 쓰지 마라 — 규칙 한 덩어리가 조용히 사라진다. 실측 = 샘플덱 컨셉06 주석이 중간에서 한 번 닫혀 있어(
*/가 두 번) 남은 줄이 셀렉터로 먹혔고, 바로 아래.glass{transform:skewY(var(--skew,0deg))}규칙이 통째로 버려졌다. 증상은 「속도 반응이 안 먹는다」뿐 — 에러도 경고도 없다. 🔴더 고약한 것: 그 함정을 설명하려고 주석에 닫는 기호를 적었다가 같은 자리에서 또 깨뜨렸다(26.9.19 2단계). 판정 =[...document.styleSheets[0].cssRules].filter(r=>r.selectorText==='.glass'&&r.style.transform)가 비면 규칙이 죽은 것이고, 살아 있는지는--skew를 강제로 6deg 넣어 computed transform 이 matrix 로 바뀌는지로 본다(skewY(0deg)는 computed 가none이라 평소엔 판정이 안 된다). - 2026-09-19 [코디] 스크롤 덱의 «잘림» 판정은 화면 중앙을 차지한 섹션 하나만 잰다 — 인접 섹션은 오탐이다. sticky 라 앞뒤 섹션이 화면 가장자리에 걸친 채 진행률이 중간값이고, 그 상태에선 통과 중인 방(
translateZ→ perspective 로 3배 확대)·아래에서 올라오는 중인 카드가 유리판 밖에 있는 게 정상이다(.stick{overflow:hidden}이 자른다). 판정식 =sr.top <= innerHeight/2 && sr.bottom >= innerHeight/2인 섹션만 검사. (앞서 기록한scrollHeight오탐과 다른 두 번째 오탐이다.) 덤 = 전환이 «끝난» 정지 상태에서 재야 한다(전환 중 슬라이드-인을 잡으면 또 오탐). -
2026-09-19 [코디] 폰트 서브셋 커버리지 assert 가 «원문 그대로 옮기기»를 막을 수 있다 — Pretendard 에
㉮㉯글리프가 없다.assets.py가 두부 위험으로 멈춰 확인했고, 구판 본문의㉮㉯를①②로 바꿔 통과시켰다(같은 섹션 안에서 번호가 겹치지 않으면 안전). ⛒두부를 눈으로 찾지 말고 assert 로 잡는 이 구조를 유지한다 — 본문을 고칠 때마다assets.py를 다시 돌리는 게 규칙인 이유다. -
2026-09-19 [코디] 🔴AI PC 헤드리스
claude -p는 «권한 요청»에 막혀 아무것도 안 하고 끝난다 —--allowedTools를 줘야 한다. 증상 = 종료코드 0 에 그럴듯한 요약까지 내놓는데 파일이 하나도 안 생긴다(실측: 「권한 요청이 두 번 막혔습니다. 계속하려면 승인하시거나 "진행"이라고 답해 주세요」 — 비대화형이라 아무도 답할 수 없다). exit 0 을 성공으로 읽으면 안 된다 — 산출물 존재를 직접 확인한다. 처방 =claude -p "…" --output-format text --permission-mode auto(🔴26.9.21 [페페] 「permission-mode auto 를 기준으로 한다」 —--allowedTools나열은 폐기. 도구를 빠뜨리면 같은 무음 실패가 또 난다). ⛒--dangerously-skip-permissions는 여전히 쓰지 마라(고객사 PC다) — 건드릴 폴더·금지사항은 지시문 본문에 못박는다(「C:\dev\artjoy-nas 밖을 고치지 마라」·「본 스캔 돌리지 마라」). 그리고--output-format text는 끝날 때 한 번에 출력하므로 진행 중 출력파일이 0바이트인 게 정상이다 — 생존 판정은 출력 크기가 아니라 원격 프로세스(Get-Process claude의 CPU·WS) 로 한다. -
2026-09-19 [코디] 🔑NAS 가 «두 개»다 — 섞으면 사고 난다. 미니PC
Z:는 «아트조이» NAS 다(우리 NAS 아님). 실측 = RaiDrive 프로세스의 established 연결이59.15.117.184:60221(WebDAV) 이고, 그 IP 는 AI PC 가 조회한 아트조이 사무실 공인 IP 와 같다(우리 미니PC 는211.177.244.214). 계정은 admin(경로가Z:\homes\admin\Drive\…). ⛒artjoy_backup.py머리 주석의 「NAS(192.168.0.101 · 포인 사무실)」 는 우리 NAS 를 가리키는 다른 맥락이라 그대로 읽으면 Z: 를 우리 NAS 로 오해한다 — 실측이 이긴다.
| 호스트 | 접근 | 자격 위치 | |
|---|---|---|---|
| 우리 NAS | 192.168.0.101(포인 사무실) |
C:\dev\tools\nasget.py SMB(순수 NTLM) |
C:\dev\.secrets\.env 의 NAS_USER/NAS_PASS |
| 아트조이 NAS 1호기 | 공인 59.15.117.184:60221 · 내부 192.168.1.93 = jagodeung |
미니PC RaiDrive Z: WebDAV |
RaiDrive 안(암호화 — 꺼낼 수 없다) |
| 아트조이 NAS 2호기 | 내부 192.168.1.168 = jagoduneg2 |
미접속 | 없음. [페페] 「백업전용으로 들었다」(26.9.19) |
🔑그래서 「아트조이 NAS 로 가는 백업 경로가 없다」는 틀렸다 — 야간백업 \Cody\ArtjoyBackup 이 Z:\homes\admin\Drive\자고등\디자이너 작업\조수은\dev 로 이미 넣고 있고, 그 Z: 가 아트조이 NAS 다. 남은 건 dev «전체» 로 넓히는 것뿐이다.
⚠AI PC 는 아직 NAS 를 못 본다 — Get-SmbMapping 0 · cmdkey 0 · artjoy.env 의 ARTJOY_NAS_USER/PW 는 주석 자리만이다. 같은 LAN(192.168.1.x)이라 자격만 생기면 SMB 직결이 WebDAV 보다 수십 배 빠르다.
⚠아트조이 LAN 의 다른 기기는 우리가 못 본다 — 테일스케일 «노드 공유」는 AI PC 한 대만 주고 서브넷 라우트를 안 준다. 그래서 NAS 를 훑는 주체는 아트조이 클로드(AI PC) 가 맞다.
⚠AI PC 에 MySQL·MariaDB 는 안 깔려 있다(Get-Command mysql 0 · 서비스 0) · 파이썬도 smbprotocol·pymysql 없음(26.9.19 실측).
-
2026-09-19 [코디] ✅아트조이 AI PC 상시 서버 2개를 테일넷에 올렸다 — 접속은 «MagicDNS 이름»으로만 된다. 현재 = 생성기
http://artjoy-aipc.tailbea356.ts.net/(→ 로컬 8820) · devplanhttp://artjoy-aipc.tailbea356.ts.net:8080/devplan/(→ 로컬 8799). 🔴서버 루트는C:\dev다 —C:\dev\devplan이 아니다(26.9.19 정정). 조수은의 관리판 링크가../seedchain/…·../haedali-detail-generator/…처럼 devplan 폴더 밖을 가리켜서, 루트를 devplan 으로 잡으면 그 링크가 전부 404 다. 대신serve_devplan.py의blocked()가 점으로 시작하는 폴더 전부 +.git·.env·.secrets·node_modules·.venv·__pycache__·.claude를 404 로 막는다(--demo자체검사 포함, 실측.env·.git/config차단 확인). 둘 다 미니PC 에서 200 실측. 🔴🔑IP 로 부르면 404 다(http://100.122.89.28/= 404) —tailscale serve는 Host 헤더로 매칭해서 IP 호스트는 어떤 serve 설정에도 안 걸린다. 공유받은 노드라도 MagicDNS 이름은 우리 쪽에서 해석된다(실측). ⛒HTTPS(--https=443)는 안 됐다 — 아트조이 테일넷에 HTTPS 인증서가 꺼져 있어 명령이 «응답 없이 멈춘다»(에러도 안 나온다, 120초 타임아웃으로 알았다).--http=80·--http=8080은 즉시 된다. Funnel(직원 공개)은 HTTPS 가 전제라 그때 admin 콘솔에서 DNS ▸ HTTPS Certificates 를 켜야 한다.tailscale serve설정은 tailscaled 상태에 저장돼 재부팅해도 살아 있다 — 별도 예약작업이 필요 없다(예약작업이 필요한 건 서버 프로세스 쪽). 🔴🔑26.9.19 [페페 지적] 「생성기 열기 버튼이 로컬이다」 — 포트가 겹쳐 있었다. 조수은의 관리판은 생성기를http://127.0.0.1:8799로 가리키고 있었는데(그쪽 기본 포트), 내가 devplan 서버를 하필 8799 에 올려서 버튼을 누르면 devplan 자신으로 돌아오는 꼴이 됐다. 게다가127.0.0.1이라 보는 사람 자기 PC 로 간다. ⛒규칙 = 남의 페이지에 서버를 붙일 땐 그 페이지가 이미 쓰는 포트를 먼저 훑는다(grep 8799|8820|localhost|127.0.0.1). 고친 결과 = 관리판의 로컬 주소를 전부 테일스케일 주소로 치환(생성기http://artjoy-aipc.tailbea356.ts.net/· 제품관리…/product-management.html), 미니PC 에서 5개 URL 200 실측, 남은127.0.0.10건. 할 일 체크리스트 페이지도 같이 만들었다 =C:\dev\devplan\artjoy-todo.html(관리판 「앞으로 할 일」 버튼). 서버 상주 규약(HaedaliServer 패턴을 그대로 복제) =wscript.exe "C:\cody\<이름>_server.vbs"+ 예약작업 SYSTEM · 부팅 트리거 + 5분 반복. vbs 는netstat | findstr ":<포트> .*LISTENING"이 잡히면 즉시 종료해서 중복 기동을 막는다(재실행 2회 후pythonw1개 유지 실측). ⚠vbs 안에서python·pythonw를 이름으로 부르지 마라 — SYSTEM 의 PATH 는 사용자 PATH 와 다르다 →C:\Python312\pythonw.exe절대경로. 서버 자체는127.0.0.1에만 바인드한다(테일스케일 serve 가 로컬로 프록시하므로 0.0.0.0 을 열 이유가 없다 = 방화벽·공인노출 걱정이 사라진다). 파일 =C:\cody\serve_devplan.py·C:\cody\devplan_server.vbs· 작업\Cody\DevplanServer. -
2026-09-19 [코디] ✅AWS 역터널 철거 완료 + AI PC 이름 영문화 — 순서와 함정. 철거 5단계(전부 실측 확인) = ①AI PC
\Cody\ArtjoyTunnel중지·삭제, 키 폴더는 지우지 말고C:\cody\_attic\artjoy-tunnel-20260919\로 이동(task XML 도 같이 보관) ②🔑\Cody\ArtjoyIPWatch도 같이 없앤다 — 2022 를 열어 두려고 만든 것이라 안 지우면 5분마다 없는 규칙을 고치려 든다 ③EC2sshd_config에서Port 2022+Match User artjoytun블록 삭제 →sshd -t통과 확인 후에만systemctl reload ssh(백업/etc/ssh/sshd_config.bak-20260919) ④userdel -r artjoytun⑤SG 규칙sgr-0e648a1832c72a3b6revoke. 순서가 중요하다 — 클라이언트(①②) 먼저, 서버(③④⑤) 나중. ⚠운영기 sshd 는 SSM 이 독립 경로라 최악에도 안 잠긴다 — 그게 이 작업의 안전망이었다. ⏳남은 잔재 = IAM 사용자ipwatch-artjoy+정책+키(실효 없음, 삭제는 승인 후). 이름 영문화 = 컴퓨터디자이너→ARTJOY-AIPC(⛒언더스코어 금지 — DNS·MagicDNS 에서 깨진다. 테일스케일 노드명artjoy-aipc와도 맞췄다) · 계정디자이너-2→artjoy(Rename-LocalUser— SID 가 안 바뀌어서 예약작업·ACL·administrators_authorized_keys가 전부 그대로 산다). 🔴프로필 폴더C:\Users\디자이너-2는 안 바뀐다 — 그대로 뒀다(폴더까지 옮기면 레지스트리ProfileImagePath·앱 절대경로·Claude/VS Code 세션이 흔들린다. 일상 경로는C:\dev·C:\cody라 지장 없다). 🔑재부팅 전에 반드시 할 것 2개 — ①생성기 게이트를 닫는다(node tools\nas-gate.js release --pc <옛이름>). 안 하면 새 이름으로 뜬 서버가 옛 항목을 「다른 PC 점유」로 읽어 30분간 8820 이 안 산다. ⛒옛 이름은 한글이라pcName()이 전부 걸러내pc였다(이름 영문화의 부수 효과 = 게이트 이름이artjoy-aipc로 제대로 찍힌다) ②우리~/.ssh/config의User를 먼저 바꾼다 — 계정 이름을 바꾸는 순간 옛 이름 SSH 가 즉시Permission denied다(실제로 한 번 맞았다). 재부팅 후 실측(00:35 KST) = 호스트ARTJOY-AIPC· 계정artjoy· 테일스케일artjoy-aipc온라인 · 8820 = 200 · 게이트artjoy-aipc단일 · AnyDeskonline·ClaudeRemote(user=artjoy) 살아서claude.exe remote-control1개. ⚠AutoAdminLogon=0이라 로그인 화면에서 멈추면ClaudeRemote만 안 뜬다(SYSTEM 작업인 8820·PoolReclaim 은 무관) — AnyDesk 로 1회 로그인하면 복구된다. ⛒원격에 보내는.ps1은 본문을 ASCII 로 — 한글이 든.ps1을 BOM 없이 보냈다가 cp949 로 읽혀 따옴표가 깨지고 파서 에러가 났다(.bat과 같은 뿌리, 이번에.ps1에서도 확인). -
2026-09-19 [코디] 아트조이 PC 의 VS Code 세팅은 SSH(Session 0)에서 다 된다 — 실기 확인만
/IT.code.cmd --install-extension·settings.json/argv.json쓰기 전부 Session 0 에서 정상 동작한다. 단 ①한글 이름 바로가기를 만드는.ps1은 UTF-8 BOM 필수(없으면 cp949 로 읽혀 이름이 깨진다) ②Claude 확장은 CLIclaude.exe와 같은 판으로 깐다(2.1.276— 판이 어긋나면 클로드 아이콘이 사라진다) ③창이 실제로 뜨는지는/IT예약작업 + 스크린샷으로만 증명된다(Session 0 는MainWindowTitle이 비어 있다). -
2026-09-19 [페페] 🔴아트조이 관련 작업은 «양쪽 dev» 에 기록이 남아야 한다 — 작성자 표기 필수. ①우리 쪽 =
C:\dev\seedchain\projects\artjoy\(+ 허브C:\dev\devplan\artjoy-ai-pc.html) ②아트조이 쪽 = AI PCC:\dev\seedchain\HANDOFF.md의## NOW(프로젝트별 상세는C:\dev\seedchain\projects\{artjoy-hub,budget,haedali-detail-generator,ui-library-hub}\handoff.md). 한쪽만 적으면 상대가 모르는 변경이 된다. 작성자 태그 = 우리 쪽은[코디]·[페페]그대로, 아트조이 쪽은 조수은이 읽는 문서라 내부 별칭을 안 쓴다 → 코디 =[클로드], 페페 =[신동승 차장](그쪽 기존 태그는[코덱스]·[나]). ⚠아트조이 쪽HANDOFF.md는 코덱스가 같이 고치는 파일이라## NOW바로 밑에 1줄 삽입만 한다(전면 재작성 금지). 도구 =C:\Windows\Temp\log_artjoy.py패턴(중복 마커 검사 후 삽입). -
2026-09-19 [코디] 아트조이 비밀값은
C:\cody\.secrets\artjoy.env한 곳 —C:\dev안에 두지 않는다. 이유 = AI PC 의C:\dev는 NAS 백업·동기화 대상이라 거기 두면 비밀값이 같이 퍼진다. 파일은 UTF-8 BOM + CRLF(구 메모장이 cp949 로 읽어 한글이 깨진다). 🔴ACL 함정 2개 — ①icacls ... /grant "%USERNAME%:(OI)(CI)F"는 계정명이 한글(디자이너-2)이면 조용히 실패한다 →whoami /user로 SID 를 뽑아*<SID>로 준다 ②폴더에(OI)(CI)로 줘도 나중에move로 넣은 파일엔 안 붙는다(그 파일은 원래 ACL 을 들고 온다) → 파일에 직접/inheritance:e+/grant하고echo.>>파일로 쓰기 실측까지 한다. 안 하면 페페가 메모장에서 저장할 때 「액세스 거부」가 난다(관리자 계정이어도 UAC 필터 토큰엔 Administrators 가 deny-only 라 못 쓴다). -
2026-09-19 [페페] 🔑아트조이 인프라 구조 확정 — 6개. 이후 설계는 전부 이걸 전제로 한다. ①AI PC 의
C:\dev가 메인 정본 — 확정·불변(NAS 사본이 아니라 AI PC 가 기준이다) ②SQLite 메인도 AI PC — 실측HD_DB(시스템 환경변수) =C:\dev\haedali-detail-generator\data\work\haedali-artjoy.sqlite3로 이미 맞다. 지금 같은 폴더에 있는haedali-book-edrtvdihh8.sqlite3(조수은 노트북분, 26.9.18 12:51, 크기 동일)는 미러 → 백업 전용으로 강등한다(양쪽 쓰기 금지) ③dev 전체를 아트조이 NAS 에 백업 ④Funnel(테일스케일 오픈 링크)은 로그인으로 관리 — 직원은 tailnet 에 안 들어오고 공개 URL 로 기능만 쓴다. ⚠Funnel 자체엔 인증이 전혀 없다 → 로그인은 앱이 직접 가져야 한다 ⑤개발은 2단계(테스트/운영) — pfs 와 같은 개념. 스테이징은 당장 안 만든다 ⑥우리 AWS 역터널은 철거하고 테일스케일 노드 공유로 AI PC 에 붙는다. 🔴그 AWS 엔드포인트가 PFS 운영서버(i-03225ba8bc12a929e=PFS-Production,13.209.147.168)라 고객사 PC 가 우리 운영기에 상시 SSH 를 물고 있던 구조다 — 철거 대상 = AI PC\Cody\ArtjoyTunnel+ 키C:\ProgramData\Cody\artjoy\· EC2artjoytun계정 ·Match User artjoytunsshd 블록 · 2022 포트. -
2026-09-19 [코디] ✅테일스케일 노드 공유 — 성공한 경로 전문(다음에 그대로 쓴다). ①AI PC 안에서
C:\cody\.secrets\artjoy.env의 토큰으로GET https://api.tailscale.com/api/v2/tailnet/-/devices→artjoy-aipc의 숫자id(2585365113882792,nodeId아님) ②POST /api/v2/device/<id>/device-invites본문[{"multiUse":false,"allowExitNode":false,"email":"delix0731@gmail.com"}]→ 응답inviteUrl③그 URL 을 우리 계정 브라우저(CDP 9334 =delix0731프로필) 로 열어Sign in with Google→ 계정 선택 →Accept invite클릭. 🔑토큰은 AI PC 안에서만 읽어 쓴다 — 코디 화면·시드·git 어디에도 안 찍는다(스크립트가 길이·앞 6자만 출력). 도구 =ts_share.py·accept_invite*.py(스크래치패드). 결과 =tailscale status에100.122.89.28 artjoy-aipc.tailbea356.ts.net mikoint@· SSM 터널 내린 상태에서ssh artjoy통과. 권한 = 그 기기 하나만 · 우리 → AI PC 한 방향(Cannot initiate new connections to your network). ⛒C:\Users\delix\.ssh\config=Host artjoy(테일스케일100.122.89.28:22) ·Host artjoy-tun(구 AWS 역터널, 철거 전 비상용)로 갈라 뒀다. -
2026-09-19 [코디] 🔴테일스케일 «노드 공유」는 CLI 로 못 한다 — admin 콘솔(또는 API 토큰)뿐이다. 실측 = AI PC tailscale 1.102.4 에
share·invite서브커맨드 없음(있는 건serve·funnel·drive). API 경로(/api/v2/device/{id}/device-invites)도 그 tailnet 의 API access token 이 필요한데 토큰 발급 자체가 콘솔이다. 그리고 공유는 노드를 «가진» tailnet 에서 거는 것이라 받는 쪽(우리)에서 시작할 수 없다. ⛒아트조이 테일스케일 계정(mikoint@) 자격은C:\dev\.secrets\에 없다 → 이 한 클릭만은 사람 몫이다. 한 번 할 때 API access token 을 같이 발급받아.secrets에 넣으면 이후 공유·ACL·Funnel 설정은 코디가 API 로 한다. 공유 노드 제약 = 그 기기 하나만 닿는다(서브넷 라우트·exit node 는 안 따라온다 — 아트조이 LAN192.168.1.x는 못 간다). -
2026-09-18 [코디] 🔴
anynet_license_expired는 «거는 쪽(미니PC)» 에러다 — 받는 PC 는 무죄. 미니PCC:\ProgramData\AnyDesk\ad_svc.trace에anynet.any_socket - Connect failed (anynet_license_expired)가 찍히고 세션이 1초 만에The socket was closed remotely로 끊긴다. 🔑판정 = 같은 시각 받는 쪽C:\ProgramData\AnyDesk\ad_svc.trace가 «완전 무음»이면 요청이 AnyDesk 백엔드에서 잘린 것이지 상대 PC 고장이 아니다(아트조이 PC 는 그 순간--get-status=online·릴레이 ESTABLISHED 였다). 원인 = 미니PC 가 계정(delix0731@gmail.com) 로그인으로 받은standard-1(유료) 라이선스를 쓰는데 백엔드가 만료로 본다 — 직전 줄이sif - Dropping out of date license response. 설치본 자체는free-1(system.confad.license.name=free-1·ad.license.expiry=0). 처방 = AnyDesk 창에서 계정 로그아웃 후 재시작(→free-1복귀, free↔free 는 붙는다). ⛒무인접속 비번은service.conf/system.conf에 있어 계정과 무관 — 로그아웃해도 안 깨진다. -
2026-09-18 [코디] 「AnyDesk 로 아트조이 PC 가 안 보인다」 = PC 를 의심하기 전에 «건 번호»부터 본다. 실측(23:3x) = AI PC 는 켜져 있고(부팅 13:51) 서비스 RUNNING ·
--get-status=online· 릴레이(64.34.83.11:443) ESTABLISHED 였는데, 미니PC 가1335176985라는 어디에도 없는 번호로 4번 걸고 있었다(AI PC =1227723932, 미니PC 자기 번호 =1232527898). 🔑판정 2줄 — ①거는 쪽%APPDATA%\AnyDesk\ad.trace의Sending a connection request for address <번호>②받는 쪽C:\ProgramData\AnyDesk\ad_svc.trace에 그 시각 아무 줄도 안 찍히면 요청이 도착조차 안 한 것(= 번호가 틀렸거나 릴레이가 못 찾은 것이지 그 PC 고장이 아니다). 받는 쪽 상태 확인은 SSH 로--get-status·--get-id한 방이면 끝난다. -
2026-09-18 [코디] 🔴생성기 진입 게이트(
data\work\access-gate.json)는 «PC별 런타임 상태»다 — 백업·동기화에서 반드시 뺀다. NAS 사본의 게이트 파일을 AI PC 로 덮으면 AI PC 가 「다른 PC(book-…)가 점유 중」으로 읽어 자기 8820 서버가 안 뜬다(조용한 고장 — 파일은 정상이고 서버만 안 산다). 같은 이유로access-gate.log·server-<PC>.log도 각자 유지한다. ⛒그리고 폴더가 둘로 갈린 뒤로 「한 PC 원칙」 게이트는 보호가 안 된다 — NAS 사본과 AI PC 사본이 게이트 파일을 «따로» 가지므로 두 곳에서 동시에 고쳐도 아무도 안 막는다. 분기 방지는 게이트가 아니라 한쪽 서버를 끄는 것이다. - 2026-09-18 [코디] Tailscale 무인 설치 = MSI +
TS_UNATTENDEDMODE=always, 그리고--hostname을 «반드시» 준다. 이 PC 호스트명이 한글(디자이너)이라 자동 머신명이 깨진다(생성기 DB 슬러그가 깨진 것과 같은 뿌리) →tailscale up --unattended --hostname=artjoy-aipc. 🔑로그인 URL 은tailscale up출력에서 긁지 마라 — SSH(Session 0)에서 그 명령은 로그인까지 «블록»돼 출력이 안 돌아온다. 백그라운드로 띄워 놓고tailscale status --json의AuthURL을 읽는 게 확실하다(BackendState로 로그인 완료도 판정 =NeedsLogin→Running). -
2026-09-18 [코디] 방화벽을 LAN 전용으로 잠가 뒀으면 Tailscale 을 깔아도 안 열린다 — 규칙
RemoteAddress에100.64.0.0/10을 더해야 tailnet 에서 닿는다(Set-NetFirewallRule -RemoteAddress @('192.168.1.0/24','100.64.0.0/10')). 서버 바인드는 이미HOST=0.0.0.0이라 앱 쪽은 손댈 게 없다 — 막히는 자리는 거의 항상 방화벽 쪽이다. -
2026-09-18 [코디] 「화면 끄기」를 걸기 전에
powercfg /a로 기기 유형부터 본다. Modern Standby(S0 저전력 대기) 기기면 화면 끄기가 곧 진짜 절전이라 원격이 끊긴다(미니PC 26.9.14 먹통 사고의 원인). 아트조이 AI PC 는 S3 기기 · S0 「미지원」이라 안전했다 — 같은 명령이라도 기기가 다르면 의미가 다르다. 절전을 «절대» 막으려면 활성 계획만으로는 부족하다:powercfg /list로 전원 계획 전부(균형·고성능·절전)에setacvalueindex/setdcvalueindex로STANDBYIDLE=0·HIBERNATEIDLE=0을 박아야 누가 계획을 바꿔도 안 걸린다. -
2026-09-18 [코디] MSI 보드의 BIOS 설정은 Windows 에서 못 읽는다.
root\wmi에MSI_BiosSetting클래스가 «있어서» 될 것 같지만 속성이Active/InstanceName뿐이라 값이 안 나온다(Dellroot\dcim\sysman· HProot\HP\InstrumentedBIOS는 아예 없음). 정전 복구(Restore after AC Power Loss)·ErP·WOL 은 BIOS 진입 육안이거나 전원 케이블 뽑았다 꽂는 실측뿐이다. 이벤트 로그의 41+6008(예고 없는 차단)은 «정전이 있었다」까지만 알려주고 자동 부팅 여부는 구분 못 한다. -
2026-09-18 [코디] 🔑아트조이 계정 클로드에 코디가 «직접» 지시할 수 있다 — 경로는 SSH + 헤드리스다. 실증 =
ssh artjoy "cd %TEMP% && claude -p \"…\" --output-format text"→ 응답 회신(PONG). 그 PC 클로드 로그인 계정 =mikoint@naver.com(아트조이) 이라 토큰·과금이 아트조이 구독에서 나간다(페페 계정 아님). ⛒cd %TEMP%필수 —C:\dev에서 돌리면 우리CLAUDE.md가 그쪽 답변에 샌다. 파일을 고치게 하려면--permission-mode(또는--dangerously-skip-permissions)가 따로 필요하다. 반대로remote-control상주(\Cody\ClaudeRemote)는 아트조이 계정 소유라 페페 claude.ai · 코디ListAgents에는 안 뜬다 — 그건 조수은이 폰·웹에서 쓰는 길이다. ⚠상주 생사 판정에wmic … name='claude.exe'출력을 앞부분만 보고 끊지 마라 — Claude 데스크톱 앱(WindowsApps\Claude.exe)이 같은 이름으로 8개쯤 먼저 나와서 「죽었다」로 오판한다(26.9.18 실측·정정). 반드시findstr /I remote-control까지 건다. - 2026-09-18 [코디] 🔴무인 제거를
subprocess.run(["cmd","/c",cmd])로 돌리지 마라 — 전부 rc 1(0초)로 죽는다. 언인스톨 명령은"C:\Program Files (x86)\…\Uninstaller.exe" --args처럼 따옴표로 시작하는데,cmd.exe가 그 따옴표를 삼켜'"C:\Program Files…"' is not recognized가 난다. 🔴증상이 「권한 부족」과 똑같아 보여서/RL HIGHEST를 붙이는 삽질을 먼저 하게 된다(그래도 안 고쳐진다). 정답 = 문자열을 그대로subprocess.run(cmd)— Windows 가 CreateProcess 로 파싱한다. 확인법 =p.stderr를 찍어보면 한 줄에 답이 있다(그전까지는 rc 숫자만 보고 헤맸다). - 2026-09-18 [코디] Adobe HDBox 언인스톨러는 ARP 에 적힌
--mode=2로는 «성공처럼 보이고 아무것도 안 한다».rc 0을 0초에 돌려주는데 제품은 그대로 남는다 — 제일 위험한 실패 모양이다.--mode=silent로 바꿔도 이 PC 에선 동일(rc 0 · 미제거). 🔑판정은 rc 가 아니라 «다시 세어 보기»로 한다(plan재실행 → 목록·합계 비교). 원인 후보 = 스크립트가 시작할 때Creative Cloud.exe를 taskkill 하는데 HDBox 는 그 프로세스에 작업을 넘기는 구조. 다음 수 = Adobe Creative Cloud Cleaner Tool(공식 무인 도구) 또는 CC 앱에서 사람이 제거. -
2026-09-18 [코디] GUI 전용 언인스톨러엔 타임아웃을 «짧게»(5분) 건다. C4D(
_uninstallNNNN.000)·Revo 는 무인 인자를 줘도 로그온 세션에 창을 띄우고 사람을 기다린다 — 30분 타임아웃이면 한 개가 정리 전체를 잡아먹는다(실제로 C4D 3개가 동시에 떠서 멈췄다). 짧게 끊고 넘어간 뒤 남은 것은plan으로 다시 세어 사람 몫으로 넘긴다. C4D 는 아예silent_cmd에서None(SKIP) 처리했다. -
2026-09-18 [코디] Claude Code 가 도는지 볼 때
node.exe를 찾지 마라 — 네이티브claude.exe다. 상주 감시·중복방지를wmic process where "name='node.exe'"로 짜면 항상 「없음」이라 5분마다 중복 기동한다(아트조이 AI PCclaude_remote.vbs실측, 좀비 1개 적발). 정답 =where "name='claude.exe'"+ 커맨드라인에remote-control. ⏱이름 필터를 꼭 건다 — 필터 없는wmic process get commandline은 이 PC 에서 15초+(0.12초 vs 15초), 그동안 예약작업이 도는지 «안 도는 것처럼» 보여 멀쩡한 걸 두 번 고치게 된다. -
2026-09-18 [코디] 숨김 상주(
SW_HIDE)가 «대화형 확인»을 요구하면 영원히 멈춘다.claude remote-control첫 실행은Enable Remote Control? (y/n)를 묻는데, 숨김 예약작업은 그 프롬프트를 화면에 띄울 수 없다 → 프로세스만 쌓인다. 처방 =schtasks /create … /it(대화형) 임시작업으로 로그온 데스크톱에 창을 강제로 올려 사람이 1회 답하고, 동의가 저장되면 임시작업을 지우고 숨김 상주로 돌린다. ⚠그 창에 쓰는.bat는 본문 전부 ASCII —chcp 65001을 첫 줄에 넣어도 bat 자신은 이미 cp949 로 읽힌 뒤라 한글이 깨진다. -
2026-09-18 [코디] 고객사 PC 에 두는 AWS 키는 «SG 1개»가 아니라 «규칙 1줄»로 묶는다. SG 단위로 묶으면 그 SG 의 다른 인바운드(운영 22번 등)까지 열고 지울 수 있다 — 아트조이가 쓰는
sg-06447a25aca214eb4는 PFS 운영기 것이라 그게 그대로 운영 리스크다. 🔑ec2:ModifySecurityGroupRules는security-group-rule/<sgr-id>를 Resource 로 받는다 → 규칙 id 하나로 못박으면 키가 유출돼도 그 줄의 CIDR 만 바뀐다(페페 결정 26.9.18 「축소」). ⚠대신 Authorize/Revoke 를 버리므로 「추가→검증→삭제」 안전순서를 못 쓴다 — 옛 IP 를 남길 자리가 없다. 자기 IP 로 나가는 터널이면 옛 IP 는 죽은 값이라 감수할 만하고, RDS 화이트리스트처럼 사람이 옛 회선에서 계속 일할 수 있는 경우엔 쓰면 안 된다(사무실PC ipwatch 는 기존 방식 유지). -
2026-09-18 [코디] 권한을 좁혔으면 «좁혀졌다»를 네거티브 테스트로 증명한다. 포지티브(내 규칙 수정 성공)만 보면 새는 걸 못 본다. ⛒값을 바꾸지 않는 네거티브가 안전하다 — 남의 규칙에 지금과 똑같은 값으로 modify 를 걸어본다(거부되면 증명 끝, 만에 하나 통과해도 무변화). 실측 3종 = 다른 규칙 modify · 새 규칙 authorize · 자기 규칙 revoke → 전부
UnauthorizedOperation, 테스트 후 SG 인바운드 줄 수 불변. -
2026-09-18 [코디] 원격 설치 명령에 «공백 있는 경로» 인자가 있으면
.bat로 보낸다. SSH →powershell Start-Process -ArgumentList로--install "C:\Program Files (x86)\AnyDesk"를 넘겼더니 따옴표가 중간에 풀려C:\Program\에 설치됐다. 🔴조용한 실패다 — 서비스는 정상 기동(Running/Automatic)해서 성공처럼 보이고, 나중에 원래 경로로 실행하면 그제서야 「지정된 경로를 찾을 수 없습니다」가 난다. 처방 = Write 로.bat작성 →scp→ssh artjoy 'cmd /c C:\Windows\Temp\x.bat'. 인용이 한 겹(cmd)뿐이라 안 깨진다. ⚠bat 안timeout /t은 SSH 에선Input redirection is not supported로 즉시 빠진다 — 대기가 필요하면ping -n. - 2026-09-18 [코디] 아트조이 AI PC 의 GUI 경로 = AnyDesk(무인). Win10 Home 이라 RDP 호스트가 없다. 번호 =
1227723932, 무인 비번은C:\dev\.secrets\artjoy_anydesk.txt(seedchain 는 git 리포라 평문 금지). 설치 =AnyDesk.exe --install <경로> --start-with-win --silent, 비번 =echo <pw>| AnyDesk.exe --set-password(설정됐는지는C:\ProgramData\AnyDesk\service.conf의ad.anynet.pwd_hash로 확인), 상태 =--get-status(=online이면 릴레이 붙음). SSH 터널과 독립이라 SSM·EC2 가 죽어도 화면은 붙는다. - 2026-09-18 [코디] 🔴
zipfile.extract는 수정시각을 복원하지 않는다 — 전개 시각이 찍힌다. 파일을 zip 으로 옮기면 받는 쪽 mtime 이 전부 «지금»이 되고, 그 뒤 증분 동기화가 매번 「전부 바뀜」으로 잡혀 GB 를 매일 다시 나른다. 🔴더 나쁜 건 그걸 «mtime 을 맞춰서» 고치려 할 때다 — 내용은 옛 것인데 시각만 새 것으로 덮어 «같다»고 오판한다(이번에 조수은 최신분 반영이 3파일로 끝날 뻔했다). ⛒처방 = 전개 직후os.utime(path, (ts, ts))로 zip 기록값 복원(info.date_time + (0,0,-1)→time.mktime). 정합성이 의심되면 mtime 을 만지지 말고 전량 재전송한다 — S3 경유면 1.8GB 가 32초다. - 2026-09-18 [코디] GB 급 파일을 원격 PC 로 옮길 땐 SSM 터널 scp 가 아니라 S3 presigned URL 이다. 실측 = presigned 다운로드 57MB/s(1.78GB 32초) vs 터널 scp 는 SSM 포트포워딩이 병목. 절차 =
aws s3 cp→aws s3 presign --expires-in 3600→ 받는 쪽urllib→ 끝나면 객체 삭제. 사설 버킷 + 짧은 만료라 공개 노출이 없다(tailscale funnel 은 URL 만 알면 누구나 받으니 이 용도로 쓰지 마라). - 2026-09-18 [코디] 아트조이 PC 의 SSH(Session 0)에서
winget은 안 된다 —0x8A15000F 원본에 필요한 데이터가 없습니다로 소스 인덱스를 못 연다. 시간 태우지 말고 공식 설치파일 직결: python/quiet InstallAllUsers=1 PrependPath=1 TargetDir=…, node·AWS CLImsiexec /i … /qn /norestart, git/VERYSILENT /NORESTART, VS Code(https://update.code.visualstudio.com/latest/win32-x64/stable)/VERYSILENT. - 2026-09-18 [코디] 설치가 이유 없이
1618(다른 설치 진행 중)이면 «멈춘 msiexec + 재부팅 대기»부터 본다. 이 PC 는 85일 무재부팅에PendingFileRenameOperations200건 + 오전부터 3시간 멈춘msiexec -Embedding세션이 있었다 → Python·Node 가 전부 튕겼다. 재부팅 한 번에 전부 풀렸다. 판정 =Get-CimInstance Win32_Process -Filter "Name='msiexec.exe'"+Component Based Servicing\RebootPending. - 2026-09-18 [코디] 원격에 보내는
.ps1은 UTF-8 BOM 으로 저장한다. BOM 이 없으면 Windows PowerShell 5.1 이 cp949 로 읽어 한글 리터럴이 깨지고, 정규식·문자열이면 파서 에러로 통째 실패한다(TerminatorExpectedAtEndOfString). 한글이 로그 문구뿐이면 «깨진 채로 돌아» 더 헷갈린다. Write 도구는 BOM 을 안 붙이므로 전송 전에utf-8-sig로 다시 쓴다. - 2026-09-18 [코디] 이 PC 호스트명이 한글(
디자이너)이라 자동 슬러그가 깨진다. 생성기resolveDbPath()가os.hostname()을[^a-z0-9-]로 치환하는데 한글은 전부 날아간다 → DB 파일명이 엉킨다. ⛒HD_DB시스템 환경변수로 못박는다(…\data\work\haedali-artjoy.sqlite3). npm 전역 경로도 같은 이유로 한글 프로필 밖(C:\cody\npm)에 둔다. - 2026-09-20 [코디] 순환맵처럼 «HTML 오버레이 + SVG» 를 겹친 화면에서 패널을 옮길 땐 SVG 그룹도 같이 옮겨야 한다.
#st-cntbox(div)를 (8,8)→(15,15)로 옮겼더니 그 안에 그려지는#st-cnt(SVG<g>)의 숫자가 패널 안에서 7px 쏠렸다 — SVG 자식 좌표가 「패널이 (8,8)에 있다」는 전제로 하드코딩돼 있기 때문이다(안쪽 여백 14/29 → 7/22 로 붕괴). 처방 =<g transform="translate(7,7)">동반 수정 + 「cntbox 위치와 동기화」 주석. ⚠div 안에 내용이 직접 있는 패널(#st-menu)은 이 문제가 없다 — 겹쳐 보인다고 다 같은 구조가 아니다. - 2026-09-20 [코디] UI 수치를 바꾸면 «자체검사의 하드코딩»부터 깨진다 — 화면보다 검사가 먼저 FAIL 난다. 로고를 26→32px 로 키우는 지시에서, 자체검사에
Math.abs(lr.height-26)<.6이 박혀 있어 고치는 순간?check=1이 즉시 빨강이 된다. 착수 전에 바꿀 수치를 소스 전문검색해서 검사·상수 쪽 사본을 같이 목록에 올려라(같은 건으로const CHROME=88(헤더 40+바 48)도 걸렸다). 검사가 빨강이면 진짜 결함과 구분이 안 돼 그 라운드를 통째로 날린다. - 2026-09-18 [코디] 아트조이 PC ↔ NAS 백업은
/MIR금지,/E /XO다. 조수은이 NAS 쪽에서도 계속 작업하므로(db-sync 기록으로 확인) 미러를 걸면 새벽 3시에 그 작업이 조용히 사라진다. 백업의 목적은 «잃지 않는 것»이라 더하기만 한다 — AI PC 에서 지운 파일이 NAS 에 남는 건 감수한다. 그리고 미니PC 가 당겨온다(아트조이 PC 는 NAS 가 안 보이고, 미니PC 는 둘 다 닿는다) · 예약작업은delix /IT대화형이어야 RaiDriveZ:가 보인다. -
2026-09-18 [코디] SG 규칙은 «adopt» 하고 시작한다. 손으로 넣어둔 규칙과 같은 CIDR+포트에
authorize하면InvalidPermission.Duplicate로 거부돼 5분마다 실패만 쌓인다.aws ec2 modify-security-group-rules로 Description 만 소유표시(AUTO-ipwatch artjoy)로 교체하면 무중단 인수된다. -
2026-09-18 [코디] SYSTEM 예약작업이 쓸 SSH 키는 «소유자»가 관건이다 — ACL 만 잠그면
bad permissions로 조용히 죽는다. Win32-OpenSSH 는 키 파일 소유자가 현재 프로세스 사용자이거나 Administrators 그룹일 때만 받는다. 설치한 관리자 개인계정(POIN-MINI\delix)이 소유자로 남으면 SYSTEM 으로 도는 ssh 에겐 「남의 키」다 — ACL 이SYSTEM:F + Administrators:F로 완벽해도 거부된다. ⛒해법 =takeown /f <key> /a(소유권을 Administrators 그룹으로). 🔴icacls /setowner 'NT AUTHORITY\SYSTEM'은 대체재가 아니다 — 승격된 관리자에서도 「액세스가 거부되었습니다」(icacls 가 소유자 변경에 필요한 권한을 활성화하지 않는다). 그리고 폴더 ACL 은 키를 복사하기 «전에» 잠근다(나중에 잠그면 파일이 이미 받은 상속 ACE 가 남는다). - 2026-09-18 [코디] 터널이 «잘 돌 때만» 리포트가 깨진다 — ssh 가
-E로그파일을 쓰기 독점한다. 자체검증에서Get-Content tunnel.log가 「다른 프로세스가 사용 중」으로 죽는다 → 성공했는데 빨강으로 보인다. 해법 =[IO.File]::Open(path,'Open','Read','ReadWrite')공유 읽기. (같은 뿌리 = danggeun 의_hidden.vbs로그 독점 사고.) - 2026-09-18 [코디] 🔴
TaskStop(백그라운드 Bash 종료)은 자식ssh.exe를 안 죽인다 — 고아가 터널을 계속 물고 있다. 이걸 모르면 ①새 터널이remote port forwarding failed for listen port 22022로 거부되고 ②「서버가 잔존 세션을 회수 못 한다」는 엉뚱한 진단으로 샌다(실제로 두 번 헛짚었다). 판정 =Get-CimInstance Win32_Process -Filter "Name='ssh.exe'". 정리 =Stop-Process -Id <pid> -Force(⚠Git Bash 에서taskkill /PID는/PID를 경로로 바꿔 먹는다). 클라이언트가 실제로 죽으면 EC2 는 22022 를 즉시 회수한다(실측) — 서버 설정 문제가 아니었다. -
2026-09-18 [코디] 터널 종단 EC2 = Ubuntu 18.04 / OpenSSH 7.6p1 →
permitlisten을 못 쓴다(7.8+ 기능). 되돌림 포트를 키 옵션으로 못 박는 대신Match User artjoytun에서AllowTcpForwarding remote로-L·-D를 막고GatewayPorts no로 루프백 바인드만 허용했다. 18.04 는 EOL 이라 apt 로 올릴 수 없다 — 운영기에 소스 빌드는 하지 않는다. -
2026-09-18 [페페] 아트조이 발표자료 색 규칙 — 🔴배경에 레드를 섞지 않는다 · 레드 글씨엔 화이트 「테두리」만. 팔레트 1차 3안이 통째로 기각된 이유 두 가지 = ①세 안의 컬러 컨셉이 사실상 같았다(「너무 똑같다」) ②미리보기 배경에 레드 글로우를 깔았다. ⛒확정 = 네이비 배경(글래스 · 폴리싱 그라디언트) + 화이트 글씨 + 라인 · 강조 글씨만 레드, 레드 글씨는
-webkit-text-stroke화이트 테두리.text-shadow글로우는 금지 — 「쉐도우로 인해 텍스트가 희뿌옇게 뭉개진다」(페페). 파생 규칙 = 본문 문단 · 배지 같은 작은 글씨엔 레드 글자 자체를 안 쓴다(형광펜 · 테두리+바탕으로 대체). 확정 팔레트 D「폴리싱 스틸」 값과 근거는presentation-v1.md. -
2026-09-18 [코디] 팔레트 안을 낼 땐 «배경 처리 방식»으로 갈라라 — 색만 조금 다른 3안은 고르는 사람 눈에 다 같다. 1차는 네이비 명도만 다른 3안이라 기각됐고, 2차를 폴리싱 메탈 / 글래스 / 새틴으로 갈라 내니 한 번에 골랐다. 그리고 칩만 보여주지 말고 «실제 한 화면»을 축소한 미리보기로 보여준다(진행판
devplan/artjoy-presentation.html이 그 형식). -
2026-09-15 [코디] 프로젝트 경계 = 고객사(artjoy) ↔ 사업 일반(ax-biz). 아트조이 건은 전부
projects/artjoy/, 세 사업 구조 · 서비스 카탈로그 · 가격 원칙 · 제작 함정은projects/ax-biz/. 두 번째 고객이 와도 같은 방식으로 프로젝트를 하나 더 판다. ⛒산출물 폴더C:\dev\_work\ax-biz\는 개명하지 않았다(페페 결정) — 시드 · 빌더 · devplan 카드에 경로가 박혀 있어 바꾸면 조용히 깨진다. 문서 프로젝트명과 코드 폴더명이 다른 상태가 정상이니 「불일치」로 보고 고치려 들지 마라.