ADMIN_GUIDE.md 병합 뒤 방문 추적 절(docs/TRACKING.md)을 가이드로 옮기고 /admin/tracking 캡처를 실어 PDF 재생성
4/1/S
대기
docs/ADMIN_GUIDE.md 와 PDF 는 main 에 없고 미병합 브랜치 auto/2026-09-11-1821(ff19bc7) 에만 있어 이번 회차에는 add/add 충돌을 피하려고 별도 문서로 두었다. 가이드 PR 병합 뒤 scripts/guide-screenshots.mjs 에 /admin/tracking 을 더해 캡처하고 md2pdf 로 다시 굽는다
2026-09-12
승인 대기열 정책 카드에 조건(min_amount·service_types 등) 표시
3/1/S
대기
현재 카드는 이름·resource_type·우선순위만 보여 편집을 열어야 조건을 알 수 있음. admin-approvals.png 에서 확인. 2026-09-12 코드 기준 여전히 유효(AdminPage.tsx ApprovalAdmin 카드)
2026-09-12
정지된 계정 로그인 거부 문구를 README 의 설명과 맞추기
3/2/S
대기
login 쿼리가 status='active' 로 거르므로 정지 계정도 invalid_credentials 를 받음. README '계정에 가해진 조치' 절은 로그인 거부 화면에서 알린다고 적음. 계정 열거 위험을 고려해 문구 설계 필요
openapi_test.go 가 라우터와 docs/openapi.yaml 을 맞추고 있으니 가이드·docs/TRACKING.md 의 API 표도 같은 방식으로 검사 가능. 가이드가 main 에 병합된 뒤에 의미 있음
2026-09-12
Node 24 요구사항을 Makefile/문서에서 검사·명시
2/1/S
대기
README 는 Node 24+ 를 요구하고 Dockerfile 은 node:24 를 쓰지만 make check 는 버전을 확인하지 않음. 2026-09-12 회차에서 Node 22.23 으로 npm ci·lint·build 가 모두 통과했으므로 요구 문구를 22.12+ 로 낮추는 쪽이 사실에 가까움
2026-09-12
Momento 프록시 응답의 상류 Content-Security-Policy·Set-Cookie 헤더 제거와 프록시 타임아웃 명시
2/1/S
대기
httputil.ReverseProxy 가 수집기의 응답 헤더를 그대로 넘기므로 수집기가 CSP 나 쿠키를 보내면 페이지 정책과 무관하게 브라우저에 도달한다. ModifyResponse 로 제거하고 Transport 에 ResponseHeaderTimeout 을 두면 수집기 장애가 페이지 로딩을 오래 붙들지 않는다
표준이 메모리 고리 버퍼(100건)를 명시하고, 기록은 감사 자료가 아니라 스니펫을 고치는 동안의 진단 보조이므로 저장소에 두지 않는다
2026-09-12
원장 (에이전트가 남긴 기록)
2026-09-11
선택: 가이드 캠페인 guides-2026-09 — 사용자·관리자 가이드를 실제 화면 캡처와 함께 완성 (가치 5 / 위험 1 / 작업량 M)
결과: 성공
요약: 저장소에는 가이드가 없고 docs/ 에 architecture·mcp·openapi 만 있었으므로 GUIDE-STANDARD 구성대로 docs/USER_GUIDE.md·docs/ADMIN_GUIDE.md 를 새로 쓰고 공용 md2pdf.mjs 로 두 PDF(22쪽·20쪽)를 만들었다. 캡처 도구가 없어 scripts/guide-screenshots.mjs 를 추가했다 — ReSSO 의 CDP 방식을 따라 의존성 없이 headless Chrome 을 1440x900 으로 띄우고, 버릴 수 있는 인스턴스(postgres:16-alpine 컨테이너 + go build 바이너리, 커밋된 internal/ui/dist 사용)에 REST API 로 가짜 데이터(판매자 2, 구매자 1, 상품 7, 완료·진행·분쟁·미결제 주문, 대화, 후기, 문의, 찜, RFQ+견적, 조직+예산, API 키, 쿠폰, 신고, 승인 정책+대기 요청, 운영 메모)를 채워 39장을 찍었다. 스크립트는 KKIIT_GUIDE_URL 이 루프백일 때만 돌고 관리자·데모 비밀번호는 전용 환경 변수로만 받으며(글자로 적힌 자격 증명 없음), 모든 시드 단계가 이미 만든 것을 먼저 찾으므로 재실행해도 데이터가 늘지 않는다(승인 정책은 요청이 거쳐 가면 서버가 삭제를 거부하므로 이름으로 재사용). 환경 변수 표 5개는 config.go·main.go 에서, 역할·권한과 설정 키 기본값은 마이그레이션에서, “막혔을 때”·장애 대응의 문구는 핸들러와 slog 호출에서 그대로 옮겼고, 화면 문구(주문하기/로그인하고 주문하기/지금은 주문 마감, 상태 배지 14종, 보류 해제 등)는 TSX 에서 확인했다. README 에 두 가이드 링크와 디렉터리 설명을 추가했다(옛 가이드는 없었음). 검증: 시드 중 API 400 세 건(seller_type=team, service_type=AI, 옵션 additional_days≥0, 쿠폰 usage_limit)을 코드로 확인해 고치고 DB 를 초기화한 뒤 한 번의 깨끗한 실행으로 39장을 다시 찍어 주요 화면 12장을 눈으로 확인(스피너·빈 목록·중복 정책 없음), node --check, go vet·go test ./cmd/... ./internal/... 통과, 두 PDF 가 그림 누락 없이 생성됨. 캡처 뒤 컨테이너·임시 바이너리를 지웠고 커밋 트리는 깨끗하다.
보류 아이디어: 승인 대기열 정책 카드에 조건(min_amount 등)이 표시되지 않아 운영자가 편집을 열어야 조건을 알 수 있음 (가치 3 / 위험 1 / S) · 정지된 계정 로그인이 아이디 또는 비밀번호가 올바르지 않습니다. 로 나와 README 의 “정지 사실은 로그인 거부 화면에서” 와 어긋남 — 전용 문구 또는 README 수정 (가치 3 / 위험 2 / S) · docs/openapi.yaml 과 라우터 일치 테스트가 있으니 가이드의 API 메서드 표기도 같은 테스트로 지키기 (가치 2 / 위험 1 / S) · 대시보드 누적 결제 가 결제 3건·구매확정 1건 상태에서 0원으로 표시됨 — 집계 기준(정산 완료만?) 확인 (가치 3 / 위험 2 / S) · README 에 make check 의 npm ci 가 Node 24 를 요구하는데 Makefile·문서에 버전 검사가 없음 (가치 2 / 위험 1 / S)
2026-09-12
선택: 추적 캠페인 tracking-2026-09 — 관리자가 화면에서 방문 추적 스크립트를 붙이는 체계(nonce CSP·출처 추출·차단 기록·Momento 프록시) (가치 5 / 위험 2 / 작업량 M)
결과: 성공
요약: TRACKING-STANDARD 를 kanpic 참조 구현 구조대로 Go 에 옮겼다. 새 패키지 internal/analytics(설정 analytics.tracking 한 객체, provider 는 momento 첫 자리·기본값, momento_proxy 기본 켜짐, 스니펫 렌더링·모든 <script> 에 nonce 부착·스니펫 http(s) 출처 추출·allowed_hosts·차단 기록 고리 버퍼 100건)와 httpapi 쪽(securityHeaders 가 요청마다 nonce 를 만들어 정책에 넣고 SPA 셸 index.html 에 placement 대로 삽입, /api·/health·/mcp·/momento 는 default-src 'none', 켜진 동안만 report-uri, POST /analytics/csp-report(비인증·8KB·분당 60·CSRF 예외), 관리자용 violations 목록·비우기·allow, /momento/* ReverseProxy 는 Momento 켜진 동안만 열리고 Cookie·Authorization 제거, putSetting 이 8KB 초과·잘못된 provider·주소 없이 켜기를 400 으로 거부하고 10초 캐시를 무효화), 마이그레이션 040(기본 꺼짐), React 관리 화면 /admin/tracking(제공자별 칸, 막힌 출처 목록과 “허용 목록에 추가”), docs/TRACKING.md·README·openapi 를 추가했다. 꺼진 상태의 페이지 정책은 이전과 의미가 같은 문자열(script-src 'self' 만 명시적으로 추가)이고 'unsafe-inline' 은 style-src 의 기존 항목 외에 넣지 않았다. 검증: analytics 단위 테스트 9개·httpapi 테스트 8개(꺼짐 시 원래 정책, 켜면 nonce·출처·report-uri, body 삽입, admin 제외, 비화면 경로 좁은 정책, 프록시가 쿠키 없이 전달, 신고 중복 집계, 8KB 거부) 추가 후 go vet·go test ./cmd/... ./internal/... 통과, 통합 테스트 전체(postgres:16 임시 컨테이너, 60초) 통과, npm run lint·npm run build 통과. 임시 Postgres 로 서버를 띄워 curl 로 정책 헤더·스니펫·프록시(가짜 수집기 200)·신고→목록→allow→정책 반영→끄면 원복을 확인했고, headless Chrome 으로 /admin/tracking 을 열어 SPA 가 nonce 정책 아래 콘솔 오류 없이 렌더되고 /momento/tracker.js 가 프록시로 200 을 받는 것을 캡처했다. internal/ui/dist 는 저장소가 추적하는 embed 대상이라 다시 빌드해 함께 커밋했다(Node 22 로 빌드됨). 주의: docs/ADMIN_GUIDE.md 와 PDF 는 main 에 없고 미병합 브랜치 auto/2026-09-11-1821(ff19bc7) 에만 있어, 그 파일을 만들면 add/add 충돌이 나므로 CSP·설정 설명은 docs/TRACKING.md 로 두었다. 가이드 PR 이 병합되면 이 문서를 ADMIN_GUIDE 의 한 절로 옮기고 PDF 를 다시 구워야 한다.
보류 아이디어: ADMIN_GUIDE.md 병합 뒤 방문 추적 절(docs/TRACKING.md)을 옮기고 /admin/tracking 캡처를 실어 PDF 재생성 (가치 4 / 위험 1 / S) · 승인 대기열 정책 카드에 조건(min_amount·service_types 등) 표시 (가치 3 / 위험 1 / S) · 정지된 계정 로그인 거부 문구를 README 설명과 맞추기 (가치 3 / 위험 2 / S) · 운영 대시보드 ‘누적 결제’ 집계 기준 확인·라벨 수정 (가치 3 / 위험 2 / S) · Momento 프록시 응답의 상류 CSP·Set-Cookie 헤더 제거와 프록시 타임아웃 명시 (가치 2 / 위험 1 / S)
릴리즈: v0.2.0 (2026-09-12, run 2026-09-12-173013-Kkiit-approve)