자율 개선 일일 보고 — 2026-09-11
요약. 2026-09-11에 자율 개선 에이전트가 24개 프로젝트에서 57회차를 돌려 5건을 릴리즈하고 1건은 머지만 했으며 1건은 변경이 없었고 실패는 4건이다. 에이전트 시간 12시간 19분, 추정 비용 $364.29. 릴리즈: kanpic v0.243.0, muni v0.37.0, weekly v0.296.0, Invenqor v0.2.32, AgentHub v0.244.0.
- 57회차
- 24프로젝트
- 5배포 준비 완료
- 0릴리즈 진행 중
- 1병합 완료
- 15검토 대기
- 10검증 실패
- 1변경 없음
- 25실행 오류
- $364.29비용
- 12시간 19분에이전트 시간
회차
| 시각 | 프로젝트 | 결과 |
|---|---|---|
| 00:35 | Vendra | 검증 실패 verify failed: secrets in diff |
| 01:05 | ai-admin | 검토 대기 review held, PR open PR #20 |
| 01:32 | appstore | 검토 대기 review held, PR open PR #14 |
| 02:07 | dataworks | 검토 대기 review held, PR open PR #17 |
| 02:41 | igame | 검토 대기 review held, PR open PR #15 |
| 03:12 | jikim | 검토 대기 guarded files, PR open PR #25 |
| 04:56 | jupiq | 검토 대기 review held, PR open PR #12 |
| 05:42 | kanpic | 배포 준비 완료 merged PR #17, released v0.243.0 |
| 06:14 | moina | 검토 대기 review held, PR open PR #18 |
| 06:44 | moyro | 검토 대기 review held, PR open PR #12 |
| 07:30 | muni | 배포 준비 완료 merged PR #12, released v0.37.0 |
| 08:02 | ptium | 검증 실패 verify failed: 실패한 검증: cd server && go test ./... (exit 1) |
| 08:32 | relio | 검증 실패 verify failed: 실패한 검증: go build ./... (exit 1) |
| 08:58 | umm | 검토 대기 review held, PR open PR #151 |
| 09:01 | vibe-coders | 실행 오류 error: fetch |
| 10:23 | weekly | 배포 준비 완료 merged PR #13, released v0.296.0 |
| 11:09 | Invenqor | 배포 준비 완료 merged PR #17, released v0.2.32 |
| 11:57 | AgentHub | 배포 준비 완료 merged PR #23, released v0.244.0 |
| 12:13 | Vendra | 검토 대기 review held, PR open PR #119 |
| 12:36 | ptium | 검토 대기 review held, PR open PR #19 |
| 12:49 | relio | 검토 대기 needs approval (risk=low, files=48), PR open PR #18 |
| 13:01 | vibe-coders | 실행 오류 error: fetch |
| 13:11 | vibe-coders | 실행 오류 error: fetch |
| 13:21 | vibe-coders | 실행 오류 error: fetch |
| 13:31 | vibe-coders | 실행 오류 error: fetch |
| 13:41 | vibe-coders | 실행 오류 error: fetch |
| 13:51 | vibe-coders | 실행 오류 error: fetch |
| 14:01 | vibe-coders | 실행 오류 error: fetch |
| 14:11 | vibe-coders | 실행 오류 error: fetch |
| 14:21 | vibe-coders | 실행 오류 error: fetch |
| 14:31 | vibe-coders | 실행 오류 error: fetch |
| 14:41 | vibe-coders | 실행 오류 error: fetch |
| 14:51 | vibe-coders | 실행 오류 error: fetch |
| 15:01 | vibe-coders | 실행 오류 error: fetch |
| 15:11 | vibe-coders | 실행 오류 error: fetch |
| 15:21 | vibe-coders | 실행 오류 error: fetch |
| 15:31 | vibe-coders | 실행 오류 error: fetch |
| 15:41 | vibe-coders | 실행 오류 error: fetch |
| 15:51 | vibe-coders | 실행 오류 error: fetch |
| 16:01 | vibe-coders | 실행 오류 error: fetch |
| 16:11 | vibe-coders | 실행 오류 error: fetch |
| 16:21 | vibe-coders | 실행 오류 error: fetch |
| 16:31 | vibe-coders | 실행 오류 error: fetch |
| 18:11 | relio | 병합 완료 fix-round: merged PR #19 |
| 18:50 | Kkiit | 검토 대기 CI no-ci, PR open PR #1 |
| 19:35 | Momento | 검증 실패 CI failed, PR open PR #1 |
| 20:03 | SecCheck | 검증 실패 verify failed: 실패한 검증: [ -d node_modules ] || npm ci --no-audit --no-fund (exit 1) |
| 20:31 | cutover | 검토 대기 CI no-ci, PR open PR #1 |
| 21:02 | seaton | 검토 대기 review held, PR open PR #25 |
| 21:44 | visitflow | 검증 실패 CI failed, PR open PR #11 |
| 21:50 | vibe-coders | 실행 오류 error: fetch |
| 22:09 | Momento | 검증 실패 CI failed, PR open PR #2 |
| 22:33 | SecCheck | 검증 실패 verify failed: 실패한 검증: [ -d node_modules ] || npm ci --no-audit --no-fund (exit 1) |
| 23:16 | visitflow | 변경 없음 no change |
| 23:20 | vibe-coders | 실행 오류 error: fetch |
| 23:45 | Momento | 검증 실패 CI failed, PR open PR #3 |
| 23:56 | SecCheck | 검증 실패 verify failed: 실패한 검증: [ -d node_modules ] || npm ci --no-audit --no-fund (exit 1) |
비용·사용량
| 시각 | 프로젝트 | 단계 | 시간 | 턴 | 비용 | 토큰 입력/출력 | 종료 |
|---|---|---|---|---|---|---|---|
| 00:35 | Vendra | 개선 | 0분 | 1 | $16.08 | 0 / 0 | error_max_budget_usd |
| 00:59 | ai-admin | 개선 | 20분 | 139 | $13.05 | 17.8M / 73K | success |
| 01:05 | ai-admin | review | 6분 | 41 | $2.51 | 2.4M / 21K | success |
| 01:28 | appstore | 개선 | 18분 | 128 | $11.91 | 16.3M / 71K | success |
| 01:32 | appstore | review | 4분 | 32 | $1.99 | 1.9M / 16K | success |
| 02:00 | dataworks | 개선 | 21분 | 112 | $12.05 | 16.2M / 76K | success |
| 02:07 | dataworks | review | 7분 | 49 | $3.21 | 2.9M / 24K | success |
| 02:34 | igame | 개선 | 26분 | 165 | $14.96 | 21.0M / 84K | success |
| 02:41 | igame | review | 6분 | 38 | $2.74 | 2.5M / 24K | success |
| 03:12 | jikim | 개선 | 23분 | 127 | $14.53 | 20.1M / 77K | success |
| 03:22 | AgentHub | 릴리즈 | 2분 | 22 | $0.88 | 672K / 7K | success |
| 03:33 | ai-admin | 릴리즈 | 3분 | 26 | $1.03 | 891K / 8K | success |
| 03:49 | appstore | 릴리즈 | 7분 | 52 | $2.68 | 2.9M / 20K | success |
| 04:02 | dataworks | 릴리즈 | 6분 | 42 | $2.49 | 2.7M / 14K | success |
| 04:10 | igame | 릴리즈 | 5분 | 34 | $1.92 | 1.7M / 15K | success |
| 04:50 | jupiq | 개선 | 18분 | 131 | $11.11 | 14.7M / 63K | success |
| 04:56 | jupiq | review | 6분 | 47 | $3.23 | 3.3M / 25K | success |
| 05:21 | kanpic | 개선 | 22분 | 147 | $14.77 | 21.5M / 73K | success |
| 05:26 | kanpic | review | 5분 | 46 | $2.65 | 2.4M / 21K | success |
| 05:32 | kanpic | 릴리즈 | 3분 | 27 | $1.09 | 921K / 10K | success |
| 06:09 | moina | 개선 | 20분 | 123 | $11.81 | 15.9M / 64K | success |
| 06:14 | moina | review | 5분 | 42 | $2.71 | 2.8M / 18K | success |
| 06:38 | moyro | 개선 | 18분 | 114 | $12.41 | 16.4M / 75K | success |
| 06:44 | moyro | review | 7분 | 49 | $3.44 | 3.8M / 25K | success |
| 07:13 | muni | 개선 | 25분 | 140 | $13.06 | 18.1M / 81K | success |
| 07:16 | muni | review | 3분 | 19 | $1.21 | 923K / 9K | success |
| 07:21 | muni | 릴리즈 | 3분 | 21 | $1.00 | 825K / 10K | success |
| 08:02 | ptium | 개선 | 23분 | 100 | $9.46 | 11.2M / 65K | success |
| 08:32 | relio | 개선 | 23분 | 103 | $10.52 | 12.6M / 82K | success |
| 08:55 | umm | 개선 | 16분 | 68 | $7.28 | 8.2M / 54K | success |
| 08:58 | umm | review | 2분 | 22 | $1.25 | 1.1M / 8K | success |
| 09:33 | weekly | 개선 | 25분 | 99 | $11.12 | 13.7M / 81K | success |
| 09:39 | weekly | review | 3분 | 28 | $2.15 | 2.1M / 12K | success |
| 10:09 | weekly | 릴리즈 | 22분 | 43 | $3.16 | 3.5M / 19K | success |
| 10:38 | Invenqor | 개선 | 8분 | 59 | $3.70 | 4.1M / 23K | success |
| 10:41 | Invenqor | review | 3분 | 32 | $1.71 | 1.7M / 10K | success |
| 11:02 | Invenqor | 릴리즈 | 20분 | 41 | $2.55 | 2.8M / 17K | success |
| 11:42 | AgentHub | 개선 | 23분 | 137 | $12.61 | 18.6M / 56K | success |
| 11:45 | AgentHub | review | 2분 | 21 | $1.05 | 896K / 7K | success |
| 11:49 | AgentHub | 릴리즈 | 3분 | 20 | $0.98 | 843K / 8K | success |
| 12:09 | Vendra | 개선 | 8분 | 64 | $4.12 | 5.1M / 25K | success |
| 12:13 | Vendra | review | 4분 | 32 | $2.49 | 2.6M / 13K | success |
| 12:33 | ptium | 개선 | 13분 | 75 | $6.46 | 8.3M / 34K | success |
| 12:36 | ptium | review | 3분 | 29 | $1.95 | 1.8M / 11K | success |
| 12:47 | relio | 개선 | 6분 | 57 | $3.86 | 4.7M / 21K | success |
| 12:49 | relio | review | 3분 | 24 | $1.83 | 1.6M / 10K | success |
| 16:49 | jikim | 릴리즈 | 9분 | 43 | $2.92 | 3.1M / 21K | success |
| 16:59 | jupiq | 릴리즈 | 2분 | 16 | $0.90 | 688K / 6K | success |
| 17:09 | moyro | 릴리즈 | 3분 | 26 | $1.41 | 1.3M / 10K | success |
| 17:44 | umm | 릴리즈 | 5분 | 28 | $1.66 | 1.5M / 13K | success |
| 18:07 | relio | 개선 | 8분 | 49 | $3.59 | 3.8M / 30K | success |
| 18:08 | relio | review | 1분 | 7 | $0.35 | 189K / 4K | success |
| 18:42 | Kkiit | 개선 | 21분 | 117 | $11.64 | 15.0M / 73K | success |
| 18:45 | Kkiit | review | 3분 | 26 | $1.71 | 1.6M / 10K | success |
| 19:30 | Momento | 개선 | 29분 | 121 | $11.59 | 14.8M / 84K | success |
| 19:34 | Momento | review | 3분 | 26 | $1.52 | 1.4M / 9K | success |
| 20:03 | SecCheck | 개선 | 22분 | 110 | $12.66 | 16.7M / 81K | success |
| 20:25 | cutover | 개선 | 14분 | 63 | $5.40 | 5.0M / 56K | success |
| 20:26 | cutover | review | 1분 | 14 | $0.71 | 498K / 6K | success |
| 20:59 | seaton | 개선 | 18분 | 105 | $10.85 | 13.9M / 67K | success |
| 21:02 | seaton | review | 3분 | 22 | $1.03 | 883K / 9K | success |
| 21:32 | visitflow | 개선 | 22분 | 110 | $9.80 | 12.3M / 72K | success |
| 21:35 | visitflow | review | 2분 | 16 | $1.24 | 838K / 9K | success |
| 22:04 | Momento | 개선 | 4분 | 36 | $1.69 | 1.7M / 13K | success |
| 22:05 | Momento | review | 1분 | 9 | $0.46 | 282K / 4K | success |
| 22:33 | SecCheck | 개선 | 12분 | 87 | $6.50 | 8.6M / 39K | success |
| 23:16 | visitflow | 개선 | 36분 | 47 | $2.89 | 3.2M / 21K | success |
| 23:40 | Momento | 개선 | 10분 | 29 | $1.91 | 1.5M / 22K | success |
| 23:42 | Momento | review | 2분 | 13 | $0.59 | 431K / 5K | success |
| 23:56 | SecCheck | 개선 | 6분 | 40 | $2.46 | 2.5M / 21K | success |
무엇을 왜 바꿨나 (원장 발췌)
Vendra
- 선택: 사용자·관리자 가이드를 실제로 찍은 화면과 함께 완성본으로 (가치 4 / 위험 1 / 작업량 L)
- 결과: 성공 (commit 80c085f)
- 요약: 캠페인 guides-2026-09. 가이드 두 편이 각각 58줄짜리 요약이었고 캡처가 한 장도 없었으며, 사용자 가이드의 MCP 도구 이름이
vendra_search_suppliers로 적혀 있었으나 서버가 답하는 이름은search_suppliers라 그대로 따라 쓴 사람은 도구를 찾지 못한다.scripts/guide-screenshots.mjs를 두어 데모 데이터를 넣고 headless Chrome 을 CDP 로 몰아 1440x900 으로 30장을 찍었다(추가 의존성 없음 — Node 22 의 fetch·WebSocket). 표준의 안전 규칙대로 대상 주소는 전용 변수VENDRA_GUIDE_URL에서만 읽고 없으면 멈추며, 비로컬 호스트는VENDRA_GUIDE_ALLOW_REMOTE=1없이 거절하고, 전역 설정은workflow.approval_enabled하나만 — 꺼져 있으면 상신이 즉시 승인되어 승인함이 빈 화면으로 찍힌다 — 원래 값을 읽어 두었다가 실패 경로에서도 되돌린다. 이미 데이터가 있는 배포에는 쓰지 않고 캡처만 한다. 본문은 코드에서 읽어 썼다: 환경 변수 표는internal/config의 네 개 전수와 거부 조건(bcrypt 72바이트, base64 32바이트), 설정 표는 마이그레이션이 설치하는 24개 키의 실제 기본값, 역할표는 배포되는 열 개의 코드·이름·데이터 범위(company/division/department/own), MCP 도구표는tools/list가 답한 열한 개, 비교 Matrix 점수식은recalculateSourcing의 SQL. 문서를 쓰다 이 트리에는 통화 검증(currency_mismatch)과 담당자 이관이 없다는 것을 확인하고 그 문장을 지웠다 — 두 회차 분 원장이 반려된 PR 의 것이었다. 정본을 하나로 정리했다: 옛USER_GUIDE.html·ADMIN_GUIDE.html을 지우고docs/index.html·index_en.html의 HTML 뷰어 링크를 뗐다. 검증: 캡처 30장을 모두 눈으로 확인(빈 화면 두 장 — 승인함·통합 검색 — 은 데이터와 질의를 넣어 다시 찍음), 공용 md2pdf 로 PDF 생성(26쪽·15쪽), 참조된 그림과 파일 목록을 양방향 대조해 누락·미사용 0, docker postgres:16-alpine 으로go test ./cmd/... ./internal/...전체 통과(deployment_docs_test의 OIDC 콜백 경로 가드 포함), gofmt·go vet 무결, tsc·eslint 통과,node --check로 스크립트 문법 확인. - 보류 아이디어: 초안 축출이 방금 저장한 초안 자신을 버릴 수 있음(putFormDraft의 ORDER BY updated_at DESC 동률) — 고치는 법은 AND draft_key<>$3 (3/1/S) / 업무 객체 status가 여전히 임의 문자열 — 유형별 어휘가 없어 오타 하나가 집계에서 조용히 빠짐 (3/3/M) / 업무 객체의 data jsonb 블롭에 어떤 검증도 없음 — 네 키는 결재 라우팅에도 닿음 (3/2/M) / 공급업체 담당자·조직 이관이 API로 불가능 — owner_id/organization_id를 편집이 건드리지 않아 퇴사자가 담당인 업체를 옮길 수 없음 (3/2/M) / 견적 통화가 검증되지 않아 비교 Matrix가 서로 다른 통화의 금액을 한 척도에 올림 — 포털 폼은 KRW/USD/EUR/JPY를 제안한다 (3/2/M)
ai-admin
- 선택: 화면 캡처를 실은 사용자·관리자 가이드 정본화 (캠페인 guides-2026-09) (가치 4 / 위험 1 / 작업량 L)
- 결과: 성공
- 요약: 기존
docs/user-guide.md·docs/admin-guide.md는 내용은 있었으나 화면 캡처가 한 장도 없었고, 저장소에 이미 있는scripts/capture-screenshots.mjs(44개 화면을 실제 라우트에서 찍는 도구)의 결과를 어느 쪽도 싣지 않았다. 표준(GUIDE-STANDARD.md)의 사용자 6절·관리자 7절 구성에 맞춰docs/USER_GUIDE.md·docs/ADMIN_GUIDE.md를 만들고 공용 변환기tools/guide/md2pdf.mjs로 같은 이름의 PDF를 생성했으며, 정본을 하나로 두기 위해 옛 두 문서를 지우고 README·docs/index.html·docs/llms.txt링크와scripts/verify-version.sh의 버전 표기 검사 대상을 새 파일로 옮겼다(사용자 가이드도 검사 대상에 새로 포함). 캡처는 목업이 아니라 실제로 띄운 화면이다 — PostgreSQL 16 컨테이너에 통합 테스트의 합성 레거시 스키마를 만들고 가짜 부서·사용자·앱·통계·작업 이력을 채운 뒤 v1.2.18 바이너리를 띄워, 저장소 캡처 도구로 44개 화면을 1440×1024에서 다시 찍어docs/screenshots를 갱신했다(화면에는데모 회사·hong@example.com같은 가짜 값만 남았고 도구의 마스킹 검사도 통과). 문서는 코드에서 확인해 적었다: 환경 변수 표는internal/config/config.go의 네 변수 그대로(:8080고정 포함), 상태 점검·YAML export 경로의 메서드는internal/server/server.go라우트 등록 자리에서 확인, 환경 설정·API 키 발급 창 항목과 레거시 설정 화면의 “레거시 Java 재시작 필요” 표시는web/src의 실제 문구를 따랐다(옛admin-guide.md가 적어 둔 “ai-admin 적용 / 재시작 대기 / 사용 확인 필요” 배지는 화면에 존재하지 않아 실제 표시로 고쳤다). 사용자 가이드의 “막혔을 때”에는LoginPage.tsx의 OIDC 실패 문구 10종과client.ts의 스트리밍 중단 문구를 그대로 실었다. 검증은 PDF 생성에 그치지 않고 중간 HTML을 headless Chrome으로 열어 표지·표·코드 블록·그림이 깨지지 않은 것을 확인했으며,make lint(gofmt -l·go vet ./...·verify-version.sh)·go build ./...·go test ./...·npm test(64개)를 모두 통과시켰다. 이번 세션 규칙대로 VERSION·CHANGELOG 등 릴리즈 메타데이터는 건드리지 않았고, 커밋 전git status로 빌드 산출물(internal/ui/dist재빌드분)이 섞이지 않았음을 확인했다. -
보류 아이디어:
loadGrants가 map 순회로 roles·permissions 순서를 무작위화해/api/v1/auth/me응답 순서가 요청마다 뒤바뀜 — SQL에ORDER BY r.code,p.code가 있는데 map이 그 순서를 버린다 (가치 2 / 위험 1 / S) ·listUsers의q에만 200자 상한이 없어(감사·레거시·MCP는 모두 있음) 매우 긴 검색어가 세 컬럼 ILIKE 스캔으로 들어감 (가치 2 / 위험 1 / S) ·safeCSVCell이value[0]한 byte에서"=+-@"만 검사해 OWASP가 함께 권고하는 tab(0x09)·CR(0x0D) 선행 문자를 중화하지 않음 (가치 2 / 위험 1 / S) ·decideApproval이approval_action.comment에는 trim한 값을,approval_request.decision_comment에는 원문을 길이 제한 없이 저장해 같은 결정의 두 기록이 달라짐 (가치 2 / 위험 1 / S) · 새 아이디어: 이번에 손으로 만든 합성 레거시 스키마·데모 시드를scripts/의 재사용 가능한 SQL로 승격해 캡처 재현을 자동화 — 지금은internal/server/integration_test.go의syntheticLegacySchema상수를 사람이 잘라 써야 한다 (가치 3 / 위험 1 / M) - 릴리즈: v1.2.19 (2026-09-11, run 2026-09-11-033028-ai-admin-approve)
appstore
-
(원장 항목에 비밀/내부 정보 의심 문자열이 있어 비공개 기록으로 옮김 — run 2026-09-11-011110-appstore-improve)
-
릴리즈: v2.5.8 (2026-09-11, run 2026-09-11-034149-appstore-approve)
dataworks
- 선택: 사용자·관리자 가이드를 GUIDE-STANDARD 기준 완성본으로 만들고 PDF 산출 (가치 4 / 위험 1 / 작업량 M)
- 결과: 성공
- 요약: 두 가이드 모두
.md만 있고.pdf가 없었고, 표준이 요구하는 절 중 사용자 가이드의 “처음 5분”·”자주 하는 작업”·”용어”와 관리자 가이드의 환경 변수 전수 표·운영(백업·복구·로그 위치·상태 점검·업그레이드/롤백)·장애 대응·보안 절이 빠져 있었다. 저장소의 캡처 도구(web/capture, Playwright 1440x960 headless Chromium + 데모 픽스처)로 65장을 v0.9.51 화면으로 다시 찍고, 관리자 가이드 “계정과 권한” 절에 실을 화면이 없어/admin/roles·/admin/users픽스처(서버의 기본 역할·스코프·설명을 그대로 옮긴 가짜 배포본)와역할 및 권한탭 캡처를 추가했다(desktop·mobile20-admin-roles.jpg). 사용자 가이드의 “막혔을 때”는 일반론 대신 코드에서 확인한 실제 문구를 싣는다 — 로그인 실패(invalid_credentials)와 상품 런타임 API 오류 13종을 HTTP 상태·서버 메시지·조치로 표에 정리했고,forbidden_fields는 다른 코드와 응답 형태가 달라({"error":"requested fields exceed contract scope", …}) 그대로 적었다. 관리자 가이드의 환경 변수 표는internal/config/config.go에서 추출해 만들었고 코드의 137개와 문서의 137개가 정확히 일치함을 스크립트로 대조했다. PDF 는 공용 도구aidev/tools/guide/md2pdf.mjs로 생성했다(사용자 41쪽·그림 24장, 관리자 28쪽·그림 8장). 정본이 갈라지지 않도록 GitHub Pages 용docs/user-guide.html·docs/admin-guide.html이 저장소의.md/.pdf를 정본으로 가리키게 하고 README 에 PDF 링크를 넣었다. 검증: 캡처 스펙 2개(desktop·mobile) 통과(예상 밖 네트워크 요청·콘솔 오류 0), 두 가이드의 이미지 경로 32개 모두 실제 파일 존재 확인,md2pdf중간 HTML 을 headless Chromium 으로 렌더해 표지·표·코드 블록·그림 배치를 눈으로 확인,npm run lint·npm test(14건)·npm run build통과(빌드가 지운web/dist/.gitkeep복원),go build ./...·go vet ./...(0건)·go test ./...전체 통과,go run ./cmd/api-surface-auditgap 0. Go 코드 변경은 없다. -
보류 아이디어:
internal/dataworks도메인 함수(EvaluatePublishGateV2·EvaluateRetirementCandidate) 단위 테스트 보강 / action center 가 상품이 사라진 고아 Contract Scope·Entitlement 도 그대로 집계 / 동일 API 키에 활성 엔타이틀먼트가 둘 이상일 때 운영 화면에서 경고 /npm run build가 추적 파일web/dist/.gitkeep을 삭제하는 문제를 vite 설정으로 해결(이번 회차에도 재현·수동 복원) / Playwright 캡처·e2e 를 CI 잡으로 편입해 가이드 캡처가 UI 변경과 함께 갱신되게 하기 - 릴리즈: v0.9.52 (2026-09-11, run 2026-09-11-035607-dataworks-approve)
igame
- 선택: 가이드 캠페인 guides-2026-09 — 사용자·관리자 가이드를 실제 화면 캡처가 들어간 완성본으로 (가치 5 / 위험 1 / 작업량 L)
- 결과: 성공
- 요약: 저장소에는 캡처가 한 장도 없는
docs/guide.md(69줄)만 있었고 관리자 가이드는 아예 없었다. GUIDE-STANDARD.md 구성 그대로docs/USER_GUIDE.md(19쪽 PDF)와docs/ADMIN_GUIDE.md(22쪽 PDF)를 만들고, 그림 21장을 전부 이번에 실제로 띄운v0.7.11에서 찍었다 — 릴리즈와 같은 방법으로make docker-build한 이미지와 PostgreSQL을 전용 docker 네트워크에 올린 뒤, 릴리즈 브라우저 게이트가 이미 쓰는 고정 Playwright 이미지(mcr.microsoft.com/playwright:v1.55.0-noble)에서 1440×900으로 캡처했다. 캡처 도구(scripts/capture-guide-screenshots.sh+scripts/guide-capture/)는 목록이 빈 화면이 나오지 않도록 지어낸 사용자·점수·공지·이벤트·시즌·개인 API 키·RealmGuard Draft를 먼저 채우므로 파괴적이다 — 그래서IGAME_GUIDE_CAPTURE_DISPOSABLE=yes없이는 거부하고, 대상 URL은 다른 스크립트와 공유하지 않는 전용 변수에서만 읽고, 시스템 설정은 한 줄도 쓰지 않는다(가리킨 배포의 플레이 정책·개인정보 정책·승인 흐름이 그대로 남는다). 환경 변수 표는internal/config/config.go에서, 역할표는Router()의 라우트 등록과AdminLayout의adminOnly에서, 오류 문구 표는errorMessages.ts에서 읽어 만들었다. PDF는 저장소 변환기가 아니라 공용tools/guide/md2pdf.mjs로 만들었고, 정본이 둘로 갈리지 않도록 옛docs/guide.md와docs/igame_User_Guide.pdf를 같은 커밋에서 지우고 README·한/영 쇼케이스·sitemap 둘·build-docs-pdf.sh의 링크를 새 문서로 옮겼다. 검증:gofmt -l,go vet,go build ./...,make lint,make test(Go 전체 / SDK 9 / web 221) 통과,scripts/check-release-contract.sh통과, 두 PDF를 poppler로 렌더해 표지·표·코드 블록·그림이 깨지지 않았음을 확인, 가드 없이 캡처 스크립트를 돌려 거부되는 것도 확인했다. -
보류 아이디어: 릴리즈만 dev 권고에 걸리고 CI는 –omit=dev라 PR이 끝까지 초록인 구조적 공백 / 동점일 때 row_number()와 바깥 ORDER BY가 독립적으로 정렬돼 rank 번호와 행 순서가 어긋날 수 있음(u.id tiebreaker 추가) / 잘린 감사 로그 CSV가 200과 완전한 헤더로 내려가고 audit.export가 잘린 개수를 전체인 양 기록함 / Migrate 체크섬 불일치·트랜잭션 경계 통합 테스트 — IGAME_TEST_DSN 하네스로 가능 / 자정을 넘겨 열려 있는 세션은 어느 날의 일일 한도에도 잡히지 않음
- 릴리즈: v0.7.12 (2026-09-11, run 2026-09-11-040525-igame-approve)
jikim
-
(원장 항목에 비밀/내부 정보 의심 문자열이 있어 비공개 기록으로 옮김 — run 2026-09-11-025110-jikim-improve)
-
릴리즈: v0.2.10 (2026-09-11, run 2026-09-11-164027-jikim-approve)
jupiq
- 선택: 화면 캡처가 들어간 사용자·관리자 가이드 정본 작성(캠페인 guides-2026-09) (가치 4 / 위험 1 / 작업량 L)
- 결과: 성공
- 요약: 가이드가 GitHub Pages HTML 두 장뿐이고 저장소 안에 정본이 없어, GUIDE-STANDARD.md에 맞춰
docs/USER_GUIDE.md·docs/ADMIN_GUIDE.md와 공용md2pdf.mjs로 만든 PDF 두 개를 추가했다. 캡처는 지어내지 않았다 — 로컬 PostgreSQL(postgres:16-alpine)과 v1.4.13 빌드(npm run build+go build)로 앱을 8080에 띄우고 저장소의scripts/capture-screenshots.mjs로 manifest 29장을 모두 다시 찍었으며(기존 파일은 v1.0.0~v1.1.0 시점 캡처였다), 관리자 가이드의 “계정과 권한” 절에 실을 역할 화면이 없어admin-roles.webp(관리자 설정 → 보안·키 권한) 한 장을 manifest·캡처 조건·갤러리·홈 카운트(29→30)와 함께 추가했다. 사용자 가이드는 캡처 26장과 함께 처음 5분·화면별 사용법·자주 하는 작업·막혔을 때·용어로 구성했고 오류 표는 코드의 실제 문구를 옮겼다. 관리자 가이드의 환경 변수 표는internal/config/config.go에서, 장애 대응의 로그 문구는internal/collector에서, API 메서드·경로는 라우트 등록 자리에서 읽어 썼다. 정본이 갈라지지 않도록 README 문서 링크를 새 파일로 옮기고 기존 Pages 가이드 두 장에는 “요약이며 정본은 이것”이라는 안내를 넣었다.gofmt -l,go vet ./...,go test -race ./...,scripts/check-version.sh,scripts/check-screenshots.mjs,npm run lint,npm test(18파일 59개) 모두 통과했고, PDF는 표지·표·코드 블록·그림이 정상 렌더링되는지 페이지를 이미지로 뽑아 확인했다(사용자 30쪽/그림 26, 관리자 17쪽/그림 3). 임시 컨테이너·빌드 산출물·로컬 비밀값은 커밋 전에 모두 제거했다. -
보류 아이디어: 로그인 리미터 succeeded가 ip 키를 유지하는 의도에 대한 테스트·주석 / internal/store의 DB 없이 테스트 가능한 순수 함수 경로 커버리지 보강 / internal/api 통합 테스트 실행법 문서화와 make test-integration 타깃 / auth/oidc.go가 RandomToken 오류를 무시하는 부분 정리 / queryInt가 잘못된 page·page_size를 조용히 기본값으로 바꾸는 부분을 400으로 / 감사 로그 캡처가 캡처 스크립트 자신의 settings.update로 가득 차는 문제(캡처 전 시드 이벤트 다양화)
- 릴리즈: v1.4.14 (2026-09-11, run 2026-09-11-165625-jupiq-approve)
kanpic
- 선택: 가이드 두 벌을 실제 화면 캡처가 들어간 완성본으로 (가치 4 / 위험 1 / 작업량 M)
- 결과: 성공
- 요약: 캠페인 guides-2026-09 목표. 두 가이드가 v0.18.0(2026-08-02)에 멈춰 있었고 화면 캡처가 한 장도 없이 사람이 그린 ASCII 표가 그 자리를 대신하고 있었다 — 표준이 금지하는 목업이다. 로컬 PostgreSQL 과 v0.242.0 로 빌드한 서버(BOOTSTRAP 관리자 로그인)를 띄우고, 새
web/e2e/guide-screenshots.mjs로 가짜 명단·워크북·부서·API 키를 채운 뒤 1440x900 에서 19장을 찍어docs/images/guide/에 넣었다(대상 주소와 자격 증명은 캡처 전용 환경 변수로만 받고, 값이 없으면 멈추며, 전역 설정은 읽기만 한다). 사용자 가이드에는 ‘처음 5분’ 과 화면별 캡처, 화면에 실제로 나오는 오류 문구를 그대로 실은 ‘막혔을 때’, 용어 절을 더했고, 관리자 가이드에는 구성 요소·포트·볼륨 표, docker load 부터 최초 관리자 로그인까지의 설치 절차, 코드에서 읽은 환경 변수 4개(POSTGRES_DSN·BOOTSTRAP_ADMIN_ID·BOOTSTRAP_ADMIN_PASSWORD·PORT)와 설정 키 전수 표, 상태 점검(GET /healthz·GET /api/v1/version — 라우트 등록 자리에서 메서드 확인)·업그레이드와 되돌리기, 증상 → 확인할 곳 → 로그 문구 → 조치로 적은 장애 대응, 보안 기본값 절을 더했다. PDF 는 공용 md2pdf 로 다시 만들었고(사용자 85쪽), 이미지를 버리는 옛 HTML 사본은 지우고 문서 사이트 링크를 PDF 로 옮겨 정본을 하나로 두었다. 검증: 캡처 19장을 눈으로 확인(빈 목록·스피너·실명·비밀값 없음), 문서의 이미지 참조 22곳이 모두 실제 파일을 가리키는지 확인,npm run lint,go build ./...,scripts/check-release-docs.sh,scripts/check-commit-identities.sh. 커밋 2개(af17dc6, 56be589). 서버·웹 코드는 손대지 않았다. -
보류 아이디어: parseUserCSV 는 쉼표만 보아 세미콜론으로 가른 명단을 한 열로 읽는다(워크북 쪽은 delimited.Delimiter 를 쓴다) / csvNumber 자리(formula.DecimalNumber)가 IMPORTDATA 의 “1,200”·”12%”·통화 기호를 글자로 남긴다 / 서버 formatValue 는 글자 “123” 을 수로 읽고 격자는 글자로 보아 숫자처럼 생긴 글자 값에서 두 곳이 갈린다 / IMPORTDATA 의 CSV 파싱 실패(#VALUE!)도 cache_seconds 만큼 담겨 원격이 파일을 고쳐도 회복이 늦다 / 홈 화면 워크북 카드의 미리보기가 값이 있는 워크북에서도 빈 격자로 그려진다(캡처하다 발견)
- 릴리즈: v0.243.0 (2026-09-11, run 2026-09-11-050112-kanpic-improve)
moina
- 선택: 화면 캡처가 실린 사용자·관리자 가이드 정본(MD+PDF) 완성 (가치 4 / 위험 2 / 작업량 L)
- 결과: 성공
- 요약: GUIDE-STANDARD.md대로
docs/USER_GUIDE.md·USER_GUIDE.pdf와docs/ADMIN_GUIDE.md·ADMIN_GUIDE.pdf네 개를 만들었습니다. 그림은 지어내지 않고make image로 빌드한moina:v0.1.27을 docker의 전용 PostgreSQL과 함께 127.0.0.1:18080에 띄운 뒤 저장소 캡처 도구(npm --prefix e2e run capture:web)로 136장을 새로 찍어docs/assets/screenshots를 갱신하고 그중 24장을 두 문서에 실었으며(계정은 capture-admin·”MOINA 연구소” 같은 캡처 전용 가짜 데이터), 환경 변수 표는config.go, 역할·권한 표는001_initial.sql·004_feed_snapshots.sql, 상태 점검 API의 메서드는server.go의 라우트 등록 자리에서 읽어 만들었습니다. 이미 있던docs/user-guide.html·admin-guide.html은 웹 사본으로 남기되 맨 위에 정본을 가리키는 안내를 넣고 README·llms.txt링크를 정본으로 옮겨 정본이 하나가 되게 했습니다. 검증은make check(런타임 계약·route·브랜드·Pages QA) 통과,make pages-test(3개 문서 × 2 viewport 브라우저 QA) 통과, PDF 25쪽씩 렌더링해 표지·표·코드 블록·그림이 깨지지 않은 것을 눈으로 확인했습니다. - 보류 아이디어:
deploy/docker-compose.offline.yml의image:가moina:v0.1.12로 고정돼 VERSION(v0.1.27)과 어긋남 — 릴리즈 세션의 일이라 이번에는 가이드에 “태그를 맞추라”고 적는 것으로 대신함(가치 3 / 위험 1 / S) ·updatePost가 DB 오류를 409not_editable로 보고해 원인을 감춤(가치 2 / 위험 1 / S) ·safeFilename이 확장자와 판정한 MIME의 불일치를 그대로 둬 JPEG이photo.png로 저장·다운로드됨(가치 2 / 위험 2 / S) · Makefiletest가 CI와 달리-race미사용(가치 2 / 위험 1 / S)
moyro
- 선택: 사용자·관리자 가이드를 표준에 맞춰 Markdown+PDF 정본으로 완성 (가치 4 / 위험 1 / 작업량 M)
- 결과: 성공
- 요약: 이 저장소는 드물게 이미 실제 캡처 46장과 캡처 도구(
scripts/verify-product-ui.sh+webapp/e2e/product-pages.spec.ts)를 갖고 있었지만 가이드는 GitHub Pages용 HTML 두 장뿐이었고 표준이 요구하는docs/USER_GUIDE.md|pdf·docs/ADMIN_GUIDE.md|pdf가 없었다. 릴리즈와 같은 방법으로 v0.2.27 이미지를 직접 빌드해 일회용 PostgreSQL과 함께 띄우고 캡처 스펙을 돌려(54개 시나리오 전부 통과) 42장을 이번 회차 화면으로 다시 찍은 뒤, 그 그림만으로 두 가이드를 표준 목차대로 새로 썼다. 화면·탭·버튼 이름은 캡처를 눈으로 확인하고 소스에서 되읽어 맞췄고(레일 항목이 8개가 아니라 지식·자동화를 포함한 10개, 컨텍스트 패널 탭은 스레드·요약·최근 파일·고정·멤버·정보, 운영 현황 배지는 ‘확인 필요’가 아니라 ‘미확인’, 메시지 메뉴는 ‘작업으로 만들기’·’결정으로 기록’·’나중에 알림’·’대화에서 문서 만들기’), 환경 변수 표는server/internal/config/config.go에서, 역할·권한 표는 마이그레이션 000001에서,/healthz·/metrics·/api/v4/system/ping의 메서드는 라우터 등록 자리에서 읽어 만들었다. 막혔을 때 절과 장애 대응 절에는 코드에 실제로 있는 오류 문구만 실었다. PDF는 공용tools/guide/md2pdf.mjs로 구웠고(사용자 39쪽, 관리자 23쪽) 중간 HTML을 headless Chrome으로 렌더해 표지·표·그림·한국어가 깨지지 않은 것을 확인했다. 정본이 둘이 되지 않도록 README와docs/index.md링크를 Markdown으로 바꾸고 기존 사이트 페이지 두 장에는 정본을 가리키는 줄을 넣었다. 검증:node scripts/verify-pages.mjs(5 HTML·46 캡처·15 라우트·7 브랜드 PNG) 통과,scripts/check-source-sizes.sh통과, 캡처 스펙 54개 통과. 서버·웹 소스 변경은 없다. -
보류 아이디어: (1)
getPreferenceByName이 모든 오류를 404로 뭉개 DB 장애를 ‘설정 없음’으로 위장 — 미머지 브랜치 auto/2026-09-07-0240이 같은 파일을 손댐. (2)post_reminders에 사용자당 상한·remind_at 상한이 없어 무한 적재 가능 — 미머지 브랜치 auto/2026-09-08-2109가 같은 파일을 크게 고침. (3)sidebar.Update/Create가 비멤버 채널 ID도 카테고리에 기록하도록 허용하고,replaceChannelsTx/UpdateOrder가 원소당 한 문장씩 돌아 unnest 단일 문장으로 접을 여지가 있음. (4)postacks/savedposts통합 테스트 보강 — ack 핸들러가ok, _ :=로 IsMember 오류를 삼켜 DB 장애가 403으로 나감. (5) 지식 검색(/knowledge) 화면만 캡처 카탈로그에 없어 가이드에 그림 없이 글로만 설명됨 — 캡처 스펙·카탈로그·HTML 참조를 함께 늘리면 해결. - 릴리즈: v0.2.28 (2026-09-11, run 2026-09-11-170538-moyro-approve)
muni
- 선택: 사용자 가이드와 관리자 가이드를 실제 화면 캡처와 함께 완성 (가치 5 / 위험 1 / 작업량 M)
- 결과: 성공
- 요약: muni 에는 README 와 운영 안내만 있고 화면을 쓰는 사람이 볼 문서도, 캡처도 한 장이 없었습니다. GUIDE-STANDARD 대로
docs/USER_GUIDE.md·docs/ADMIN_GUIDE.md와 두 PDF 를 쓰고, 그림 스무 장을 실제로 띄운 v0.36.0 에서 찍었습니다 — postgres 컨테이너를 새로 띄우고 프런트를 빌드해 바이너리로 기동한 뒤, 새로 만든frontend/scripts/guide-screenshots.mjs(npm run screenshots)가 데모 데이터를 채우고 1440x900 headless Chromium 으로 로그인·홈·워크스페이스·편집기·댓글·버전·내보내기·공유·검색·빠른 이동·개인 설정과 관리 화면 여덟 개를 찍습니다. 스크립트는 데모 데이터를 만들기 때문에 대상 주소를 e2e 와 공유하지 않는 전용 변수(MUNI_GUIDE_BASE_URL)로만 받고 로컬이 아니면 멈추며, 자격 증명은 환경 변수로만 받고 데모 계정 비밀번호는 실행할 때마다 새로 만들어 어디에도 적히지 않습니다. 문서의 사실은 코드에서 읽었습니다 — 환경 변수 표는internal/config와export.go, API 의 메서드와 경로는 라우트가 등록된 자리, 오류 메시지는writeError가 실제로 내는 문구입니다. 겹치는 자리는 옮겨 적지 않고 링크해서 정본을 하나로 두었습니다(백업·복구·키 교체·퇴사자 정리는 운영 안내가 정본, 관리자 가이드가 그것을 가리키고 운영 안내는 관리자 가이드를 되가리킵니다). README 에도 두 문서로 가는 길을 냈습니다. 검증은gofmt -l·go vet ./...·go test ./...·npm run lint·npm test(265) 전체 통과와scripts/check-webui-placeholder.sh(프런트 빌드 산출물이 커밋에 섞이지 않았음), PDF 는 공용md2pdf.mjs로 만들어 쪽 수와 삽입된 그림 수(사용자 16쪽·12장, 관리자 13쪽·8장)를 확인했습니다. 캡처하며 편집기를 하드 로드하면 화면이 깨지는 결함을 찾았습니다(아래 보류 첫 줄). 커밋 270acca. -
보류 아이디어: 편집기를 새로고침하거나 문서 링크로 바로 열면 “문제가 생겼습니다” — 빌드된 번들에서
TypeError: Cannot read properties of null (reading 'commands'), 목록에서 눌러 들어가는 SPA 이동만 정상 (5/2/M, 이번 회차 캡처 중 재현) / 관리자 설정을 켜야 나오는 화면(검토·승인, AI 패널, 발표자료, AI 호출 감사) 캡처 추가 — 설정을 켜고 되돌리는 형제 방식이 먼저 필요 (3/1/S) /.hwpx머리글 칸의 기본 음영 (2/3/S) /.hwpx코드 블록의 언어가 왕복에서 사라짐 (2/2/S) /.hwp표 캡션의 위치(위/아래) 읽기 (2/2/S) - 릴리즈: v0.37.0 (2026-09-11, run 2026-09-11-065112-muni-improve)
ptium
- 선택: 캠페인 guides-2026-09 — 사용자 가이드·관리자 가이드를 실제 화면 캡처가 들어간 완성본으로 (가치 5 / 위험 1 / 작업량 M)
- 결과: 성공
- 요약: 저장소에는
docs/user-guide.md(사용자 안내, 캡처 0장)와 영문 운영 문서(offline-deployment.md·security.md)만 있었고 표준이 정한 네 산출물은 하나도 없었다. 로컬에 있는 릴리즈 이미지ptium:1.69.32를 postgres:16-alpine 과 함께 버려도 되는 컨테이너로 띄우고(개발 인증,hong@example.com·홍길동, 데모 회사 브리프 4개·CSV 가져오기 1개·SVG 이미지 2개·API 키 2개를 API 로 채움), 새로 만든scripts/guide/screenshots.py(playwright, 1440×900, 대상·시크릿은PTIUM_GUIDE_URL/PTIUM_GUIDE_DEV_SECRET전용 변수에서만 읽고 없거나 로컬이 아니면 멈춤, 서비스 설정은 건드리지 않음, 시드에[가이드]표식을 붙여 재실행 시 중복 없음)로 29장을 찍었다 — 로그인·홈·프레젠테이션·새로 만들기 1/2단계·템플릿·내 이미지·편집기(본문 슬라이드)·코드 탭·버전 이력·명령·공유·품질·개인화·API 키·API 문서·사용 가이드, 관리자 개요·서비스 설정 5영역·사용자·사용 현황·오류·감사·디자인·정리할 것. 비어 있던 생성 큐·공유 링크 캡처는 표준대로 싣지 않고 스크립트에서도 뺐다(오류 화면은 정상 상태임을 alt 에 명시).docs/USER_GUIDE.md는 옛 user-guide.md 의 내용을 표준 6절(하는 일·처음 5분·화면별·자주 하는 작업·막혔을 때·용어)로 재구성하고 서버·웹 코드에서 확인한 실제 오류 문구 11개를 표로 실었다.docs/ADMIN_GUIDE.md는 구성 요소·설치(릴리즈 자산→docker load→compose/k8s→첫 관리자, 붙여 넣을 수 있는 명령)·환경 변수 전수 표(config.go 22개 + auth/config.go 의 OIDC·DEV 13개, 기본값은 코드에서)·관리자 콘솔 설정 키 30개(db/migrations.go defaultSettings)·역할·운영(상태 점검·로그·백업·업그레이드·되돌리기·정리)·장애 대응(main.go·auth·loginlimiter 의 실제 로그 문구 14건)·보안. API 메서드는 server.go 라우트 등록에서 확인(PATCH /admin/users/{id}, POST /admin/settings/changes/{id}/revert 등). PDF 는 공용 md2pdf.mjs 로 두 개 생성(21쪽·17쪽), PyMuPDF 로 표지·표·그림 쪽을 래스터해 깨지지 않은 것을 확인. 정본 정리:docs/user-guide.md는 “대체되었습니다” 스텁으로, README 링크는 새 문서로. Go/웹 코드 변경 없음이라make test는 돌리지 않았고 스크립트는py_compile. 캡처용 컨테이너·네트워크·시크릿 파일은 끝나고 지웠다. 커밋 fb37cf1. - 보류 아이디어:
seriesFromRows가 표의 값을 쉼표로 다시 쪼개 “1,200” 을 1 과 200 두 점으로 읽는 문제 (3/3/M) · 회계 음수를 막대가math.Abs로 그려 부호가 사라지는 문제 (3/3/M) ·gridOf가 행의r을 보지 않고trimGrid이 빈 행을 지워서 출처 행 번호가 어긋나는 문제 — auto/2026-09-07-0330 머지 뒤에 (3/3/M) · 가이드 후속: 생성 큐·오류 화면을 항목이 있는 상태로 찍기 — 실패 생성을 재현할 시드(예: 모델 주소를 닿지 않는 곳으로 두고 생성)가 필요하나 서비스 설정을 바꾸고 되돌려야 하므로 표준의 복원 규칙을 지켜 별도로 (2/2/S) · 숨긴 행·열(hidden="1")을 그대로 표에 넣는 문제 (2/2/M)
relio
- 선택: 사용자·관리자 가이드를 실제 화면 캡처가 실린 완성본으로 다시 쓰기 (캠페인 guides-2026-09) (가치 5 / 위험 1 / 작업량 M)
- 결과: 성공
- 요약: 두 가이드는 v1.6.0 시절의 개요 수준에 ASCII 목업만 있고 캡처는 한 장도 없었으며, 관리자 가이드는
ADMIN_GUIDE.md와admin-guide.md두 벌이었습니다. 이제docs/USER_GUIDE.md·ADMIN_GUIDE.md가 GUIDE-STANDARD 의 구성을 따르고 32장의 캡처(docs/assets/guide/*.png, 1440×900 headless Chrome)를 싣습니다 — 전부 이 소스를 compose 로 띄워 가짜 데이터(데모전자(주),hong@example.com)를 채운 실제 화면입니다. 캡처 도구scripts/guide/screenshots.mjs(puppeteer-core) 는RELIO_GUIDE_DISPOSABLE=1없이는 시작하지 않고, 자격 증명은 전용 환경 변수로만 받으며(스크립트에 글자로 적힌 비밀번호 없음), 실행 중 API 요청 한도(120/분 — 화면당 호출이 여러 개라 30개 화면을 돌면 절반이 로그인 화면으로 떨어졌음)를 잠시 0 으로 올렸다가 finally 에서 원래 값으로 되돌리고, 그 한도를 표시하는 보안 화면은 복원 뒤에 찍습니다. 관리자 가이드의 환경 변수 표는internal/config/config.go(정확히 4개), 설정 표는 migrations 의system_settings시드, Role 은007_default_signin_role.sql, API 메서드는server.go의 등록 자리에서 읽었고, 그 과정에서security.allowed_origins는 서버 코드가 읽지 않는 설정이며ClientIP가X-Forwarded-For를 읽지 않아 프록시 뒤에서는 로그인 제한·감사 IP 가 프록시 주소가 된다는 사실을 문서에 그대로 적었습니다. 정본 정리:admin-guide.md는 대체 안내로, README 는 두 가이드를 가리키고, 예전 bespoke HTML 사본(USER_GUIDE.html·ADMIN_GUIDE.html)과 랜딩 페이지의 HTML 뷰어 링크를 지웠으며generate_docs.py가 다시 만들지 않게 했습니다. PDF 는 공용md2pdf.mjs로 생성(사용자 22쪽·그림 18, 관리자 24쪽·그림 14)하고 pymupdf 로 표지·표·그림 페이지를 렌더해 확인했습니다. 검증:check-env-contract.sh,check-static-assets.sh,node --check, 커밋 대상 전체에 대한 자격 증명 리터럴 검사(문서의 예시 비밀번호도<db-password>형 자리표시자로 교체), 캡처 32장 전부가 로그인 폴백이 아님을 픽셀 검사로 확인. Go·web 코드 변경 없음. 임시 compose 스택은 볼륨까지 폐기. 커밋 880adef. - 보류 아이디어:
ClientIP가X-Forwarded-For/Forwarded를 읽지 않아 리버스 프록시 뒤에서는 로그인 리미터가 프록시 주소 하나로 묶이고 감사 로그 IP 가 무의미함 — 신뢰 프록시 설정과 함께 붙여야 하며 환경 변수 계약(4개)을 넓히지 않고 관리자 설정으로 두는 설계가 필요 (가치 4 / 위험 2 / M) ·security.allowed_origins설정은 관리자 화면에 있으나 Go 코드 어디에서도 읽지 않음 — 실제로 적용하거나 화면에서 빼야 함 (가치 3 / 위험 1 / S) ·DealsAtRisk·Coaching은 여전히 최근 갱신 열린 딜 200건만 보고 그 뒤는 조용히 빠짐 (가치 3 / 위험 2 / M) · 네 intelligence 필터의Cursor필드는 죽은 코드 (가치 3 / 위험 1 / M) · CI 에gofmt -l검사 추가 (가치 2 / 위험 1 / S)
umm
- 선택: 사용자·관리자 가이드를 실제 화면 캡처가 든 완성본으로 (캠페인 guides-2026-09) (가치 4 / 위험 1 / 작업량 M)
- 결과: 성공
- 요약:
docs/user-guide.md·docs/admin-guide.md는 있었지만 화면은 2026-08-21 v0.6.0 캡처 23장뿐이었고 구조도 표준과 달랐습니다.GUIDE-STANDARD.md대로docs/USER_GUIDE.md(제품이 하는 일 → 처음 5분 → 화면별 사용법 → 자주 하는 작업 → 막혔을 때(실제 오류 문구) → 용어)와docs/ADMIN_GUIDE.md(구성 요소 → 릴리즈 자산으로 설치 →internal/config/config.go에서 읽은 환경 변수 전수 표 → 역할 → 운영(상태 점검 엔드포인트는server.go라우트 등록에서 메서드 확인) → 로그에 실제로 찍히는 문구로 장애 대응 → 보안, 기존 상세는 부록)로 다시 쓰고, v0.71.6 바이너리를 빌드해umm-test-pg의 임시 DBumm_guide위에 띄운 뒤 헤드리스 크로뮴 1440x900으로 27장을 새로 찍어 기존 폴더docs/screenshots/에 넣었습니다(가짜 데이터데모 회사 …, 옛 캡처 삭제).scripts/capture_all.js는 비밀번호가 글자로 박혀 있고 Dream 화면을page.route로 가짜 응답으로 찍던 것을 — 캡처 전용 환경 변수UMM_CAPTURE_BASE_URL/ADMIN/ADMIN_PASSWORD필수, 루프백 아니면UMM_CAPTURE_ALLOW_REMOTE=1없이는 중단, 모킹 없음, 관리자 화면은 열기만 하고 저장하지 않음 — 으로 고쳤습니다. PDF는 공용md2pdf.mjs로 만들어(USER_GUIDE.pdf19쪽·그림 14,ADMIN_GUIDE.pdf30쪽·그림 13) PyMuPDF로 표지·표·그림을 렌더해 확인했고, 옛umm_user_guide.pdf·umm_admin_guide.pdf(docs/·docs/pdf/)는 지우고 README·docs/README.md(문서 기준 v0.8.1 → v0.71.6)·docs/index.html·compose.yaml·generate_pdf.js의 링크를 새 문서로 옮겨 정본을 하나로 했습니다. AI Gateway가 없어 Dream 후보가 있는 화면은 못 찍었고 그 사실을 문서에 적었습니다. 검증: 참조한 27개 그림 모두 존재,scripts/check-version.sh통과,node --check두 스크립트 통과, 스크립트에 비밀값 없음, 앱 종료·임시 DB 삭제·dist/제거 후 커밋(d157dc8). Go/웹 코드는 건드리지 않았습니다. 버전은 올리지 않았습니다(릴리스는 별도 세션). -
보류 아이디어:
usableSections가 서로 다른 부에 같은 제목이 오는 제안을 막지 않아 같은 이름의 부가 두 번 열림 / 업로드 라벨에 든 경로가safeFilename에서 구분자만 지워져C:\a\b.png가Cab.png로 붙음 — 마지막 조각만 취해야 함 /exportOutline의 내려받기 이름이 언제나umm-outline.md라 여러 공간의 개요를 받으면 구분할 수 없음 / 캡처 스크립트의 승인 요청 시드가 400으로 거절되어 검토·승인 화면이 빈 상태로 찍힘 —createApproval이 받는 body 형식에 맞추면 항목이 있는 화면을 실을 수 있음 /docs/features.md·umm_features_guide.pdf·umm_complete_manual.pdf가 여전히 v0.6.0 캡처를 담고 있어 새 가이드와 어긋남 — 대체 표시 또는 재생성 - 릴리즈: v0.71.7 (2026-09-11, run 2026-09-11-173844-umm-approve)
weekly
- 선택: 캠페인 guides-2026-09 — 사용자·관리자 가이드를 실제 화면 캡처가 든 완성본으로 다시 씀 (가치 4 / 위험 1 / 작업량 M)
- 결과: 성공
- 요약: 두 가이드는 있었지만 그림이 한 장도 없었고 구성도 GUIDE-STANDARD.md 순서가 아니었습니다. 릴리즈 이미지와 같은 내용물(alpine + 정적 바이너리)을
docker run으로 띄우고seed-scale.sql을 넣은 뒤, 새scripts/guide-captures.py(a11y-check 와 같은 Playwright 래퍼)가 팀원 u1·팀장 u225·관리자로 로그인해 headless Chrome 1440×900 으로 27장을 찍어docs/assets/guide/에 놓았습니다 — 상황판은 팀장이 API 로 7줄을 만들어 빈 달력을 피하고 끝나면 지우며, 대상·계정은WEEKLY_GUIDE_*전용 변수로만 받고 루프백이 아니면 멈추고, 전역 설정은 읽기만 합니다. 캡처에 제품 UI 의 예시 이메일(hkjang@koreacb.com)이 찍혀 그 문자열을 AdminPage·README·CONFLUENCE.md 에서hong@example.com으로 바꾸고 다시 빌드해 찍었습니다. USER_GUIDE.md 는 처음 5분 → 화면별(14개 화면, 20장) → 자주 하는 작업(기존 문단 이관) → 막혔을 때(코드의 실제 문구 17개) → 용어로, ADMIN_GUIDE.md 는 구성 요소 → 설치(docker load → compose → readyz) → 설정(config.go 의 환경 변수 5개 전수 표 + 관리자 화면 카드 10개) → 계정과 권한 → 운영 → 장애 대응(로그 문구 그대로) → 보안으로 다시 썼고, 문서에 적은 API 11개는 app.go 에서 메서드까지 확인했습니다. 옛 문서가 주장하던 “관리자 전체 키 즉시 폐기” 는 라우트가 없어 뺐고(사용자 개인 설정의모든 키 회전으로 고침), 원장에는 있으나 이 트리에는 없는 상황판 잘림 안내도 싣지 않았습니다. PDF 는 공용md2pdf.mjs로 굽고(26·17쪽, 표지·표·그림 확인),render-docs.py는 두 가이드에 대해 그림을 지원하는 HTML 만 만들고 PDF 는 건너뛰게 해 정본이 둘이 되지 않게 했습니다. 검증: version-check 통과(아홉 곳 0.295.0), frontend lint(tsc -b) 통과, checksdoc 시험 통과, 27장이 모두 문서에 쓰임, 스크립트에 비밀번호 글자 없음, 빌드 산출물(dist/,cmd/weekly/web/index.html)은 커밋에서 뺐습니다. 캡처용 postgres·앱 컨테이너와 네트워크는 끝나고 지웠습니다. -
보류 아이디어: 월 격자의 하루 칸이 담는 줄 수에 상한이 없어 한 날에 몰리면 나머지 칸을 밀어냅니다 (2/2/S) · 월 격자가 이웃 달 며칠까지 조회해 요약 숫자가 ‘이 달’ 보다 큽니다 (2/2/S) · failstate-check·a11y-check·scale-check 의 화면 목록 세 개가 손으로 관리돼 서로를 모릅니다 (2/1/S) · 가이드 캡처가 CI 에서 다시 찍히지 않아 화면이 바뀌면 그림이 조용히 낡습니다 — release-check 에 guide-captures 를 붙일 자리 (2/2/M) · 업무 인사이트 캡처가 씨앗 데이터에 중복이 없어 빈 결과입니다 — seed-scale 에 조직 간 유사 제목 한 쌍을 넣으면 채워집니다 (1/1/S)
- 릴리즈: v0.296.0 (2026-09-11, run 2026-09-11-091112-weekly-improve)
Invenqor
-
(원장 항목에 비밀/내부 정보 의심 문자열이 있어 비공개 기록으로 옮김 — run 2026-09-11-103112-Invenqor-improve)
-
릴리즈: v0.2.32 (2026-09-11, run 2026-09-11-103112-Invenqor-improve)
AgentHub
-
(원장 항목에 비밀/내부 정보 의심 문자열이 있어 비공개 기록으로 옮김 — run 2026-09-11-112110-AgentHub-improve)
-
릴리즈: v0.244.0 (2026-09-11, run 2026-09-11-112110-AgentHub-improve)
Kkiit
- 선택: 가이드 캠페인 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)
Momento
- 선택: 사용자·관리자 가이드를 실제 화면 캡처가 실린 완성본으로 재구성 (가치 5 / 위험 1 / 작업량 M)
- 결과: 성공
- 요약: docs/USER_GUIDE.md·ADMIN_GUIDE.md 를 GUIDE-STANDARD 구성(처음 5분·화면별 사용법·막혔을 때 / 구성 요소·설치·환경 변수 전수 표·계정과 권한·운영·장애 대응·보안)으로 다시 쓰고, v0.34.39 를 로컬 Postgres 와 함께 실제로 띄워 seed.mjs 로 가짜 데이터(데모 포털, EMP0001, hong@example.com)를 넣은 뒤 headless Chrome 1440x900 으로 49장을 찍어 docs/assets/guide/ 에 실었다. 환경 변수 표는 internal/config·internal/database 에서, 역할 표는 라우터 미들웨어에서, 오류 문구는 writeError/queryError.ts 에서 읽었고, 옛 USER_GUIDE.html/ADMIN_GUIDE.html 은 삭제하고 docs/index*.html·README 링크를 새 문서로 옮겼다. 공용 md2pdf 로 두 PDF(47쪽/27쪽)를 생성해 표지·그림이 렌더링되는 것과 문서가 참조하는 그림이 모두 존재하는 것을 확인했다. scripts/guide 는 전용 환경 변수만 받고 로컬 호스트가 아니면 멈추며 –cleanup 으로 만든 것만 지운다; 비밀값은 글자로 적지 않았다.
- 보류 아이디어: User Explorer 타임라인이 365일을 요청해 기본 정책(180일)에서 RANGE_EXCEEDS_POLICY 로 막힘 — 사이트 정책 한도를 읽어 요청하도록 수정 (가치 4 / 위험 2 / S); 대량 과거 이벤트 반입 직후 aggregate maintenance 가 deadlock(40P01)으로 실패하는 재집계 작업 — 재시도 또는 잠금 순서 정리 (가치 3 / 위험 3 / M); compose.yml 의 build: 때문에 릴리즈 이미지로 띄울 때 –no-build 가 필요 — 문서화했으나 compose 파일에 주석 추가 (가치 2 / 위험 1 / S); 캡처 스크립트를 CI 에서 릴리즈 tarball 로 돌려 가이드 그림이 최신 화면과 어긋나는지 검사 (가치 3 / 위험 2 / M).
SecCheck
- 선택: 사용자·관리자 가이드를 GUIDE-STANDARD 구조로 재작성하고 실제 화면 캡처 34장을 싣기 (가치 5 / 위험 2 / 작업량 M)
- 결과: 성공
- 요약: docs/USER_GUIDE.md·pdf, docs/ADMIN_GUIDE.md·pdf 를 표준 구성(처음 5분·화면별·자주 하는 작업·막혔을 때·용어 / 구성 요소·설치·환경 변수 전수 표·역할·운영·장애 대응·보안)으로 새로 썼고, scripts/capture_all.js 를 전용 환경 변수(URL·계정·시드 비밀번호) 필수화 + loopback 가드 + workflow·security 설정 읽고-복원 방식으로 고쳐 로컬 Postgres + go build 서버에 데모 데이터를 시드한 뒤 Playwright Chromium 1440x900 으로 docs/screenshots/*.png 34장을 찍었다. 옛 user-guide.md·admin-guide.md 는 “대체되었습니다” 안내로 새 문서를 가리키고, README·docs/README.md·docs/index.html·features.md 의 링크와 캡처 파일명을 새 이름으로 바꾸고 옛 PDF 2종은 지웠다. 검증: 캡처 스크립트 실행 성공(설정 복원 확인), md2pdf 로 PDF 2종 생성(23·29쪽, 이미지 15·18장), 참조 이미지 전수 존재 확인, node –check, CI 와 같은 gitleaks 스캔 “no leaks found”. 환경 변수 표는 internal/app/config.go 와 selftest.go 에서, 설정 기본값은 마이그레이션 SQL 에서, API 메서드는 server.go 라우트 등록에서 읽어 적었다.
- 보류 아이디어: 캡처 스크립트로 반려·승인 대기·승인자 결재 화면(approval_enabled 켠 상태)까지 추가 촬영해 승인자 절 보강 (가치 3 / 위험 1 / S); docs/features.md·seccheck_features_guide.pdf 도 새 캡처 파일명 기준으로 재생성 (가치 2 / 위험 1 / S); scripts/generate_pdf.js 를 공용 md2pdf 로 대체해 저장소 전용 변환기 제거 (가치 2 / 위험 2 / S); GUIDE PDF 생성을 CI 릴리즈 단계에 붙여 md 와 pdf 가 어긋나지 않게 하기 (가치 3 / 위험 2 / M); 캡처 스크립트에 시드 데이터 정리(생성한 사용자·심의 삭제) 옵션 추가 (가치 2 / 위험 2 / S)
cutover
- 선택: 사용자·관리자 가이드를 실제 화면 캡처가 들어간 표준 형식으로 완성 (가치 5 / 위험 1 / 작업량 M)
- 결과: 성공
- 요약: 기존 docs/USER_GUIDE.md·ADMIN_GUIDE.md(캡처 0장, 일부 내용이 코드와 불일치)를 GUIDE-STANDARD 구성으로 다시 쓰고, Playwright 기반 캡처 스크립트(scripts/guide-screenshots, 격리 데이터 파일 + 자체 dev 서버 + GUIDE_SHOT_* 전용 환경 변수)로 실제 화면 13장을 1440x900으로 찍어 docs/assets/guide/에 실었으며 공용 md2pdf로 두 PDF를 만들었다. 환경 변수 표·API 메서드·연동 규칙은 코드에서 읽어 작성했고, 운영 빌드(NODE_ENV=production)에서 Secure 쿠키 때문에 평문 HTTP LAN 주소로는 관리자 세션이 유지되지 않는 문제를 실측(LAN IP 401 / 127.0.0.1 200)으로 확인해 문서에 경고로 넣었다. 검증: eslint, tsc –noEmit, 기존 e2e 2건 통과, 캡처 스크립트 5건 통과, PDF 페이지를 렌더해 표지·표·그림 확인.
- 보류 아이디어: (1) 운영 빌드 관리자 세션 쿠키 Secure 속성을 환경 변수나 x-forwarded-proto 로 제어해 HTTP 사내망 배포에서도 관리자 로그인이 되게 한다 — 가치 5 / 위험 2 / S. (2) 삭제·상태 전파가 ID 접두사(
<부모ID>-)에 의존해 업로드한 JSON 의 자식이 고아로 남아 삭제가 400 으로 조용히 실패한다 — parentId 기반 하위 탐색으로 바꾼다 — 가치 4 / 위험 2 / S. (3) 관리자 콘솔의 PUT 실패(400/401)를 화면에 표시하고 삭제 확인창이 두 번 뜨는 중복을 제거한다 — 가치 3 / 위험 1 / S. (4) 미사용 lib/s3.ts·amplify.yml·*_bak 파일과 사용되지 않는 reset-visitor API 정리 — 가치 2 / 위험 1 / S. (5) lib/activityData.ts validateActivityImport 단위 테스트(Node test runner) 추가 — 가치 3 / 위험 1 / S.
seaton
- 선택: 사용자·관리자 가이드를 실제 화면 캡처와 함께 GUIDE-STANDARD 구성으로 정비 (가치 5 / 위험 1 / 작업량 M)
- 결과: 성공
- 요약: 릴리즈와 같은 방법(docker build → postgres + compose 환경변수)으로 SeatOn v1.4.0을 띄우고 e2e 시드로 가짜 데이터를 채운 뒤, 새
web/e2e/guide-shots.mjs(Playwright, 1440x900, 캡처 전용 환경변수·로컬 주소 가드·API 키 원문 가림과 폐기)로 22장을 찍어docs/assets/guide/에 실었다. USER_GUIDE는 처음 5분·화면별 사용법·자주 하는 작업·막혔을 때(서버·프런트 실제 문구)·용어로, ADMIN_GUIDE는 구성 요소·설치·환경변수 3개와 설정 키 32개 전수 표·계정과 권한·운영(healthz/readyz·로그·백업·복구·업그레이드)·장애 대응(실제 로그 문구)·보안으로 다시 썼고 기존 엔진 실측 절은 유지했다. PDF는 공용 md2pdf.mjs로 굽고(21쪽/21쪽, 표지·표·코드·그림 확인) build-docs.py는 두 가이드의 HTML만 만들며 그림·번호 목록 이어 세기를 지원하도록 고쳤다. 검증: tsc, vitest 76건, go test/vet, Playwright login/admin/api-keys 11건 통과. 부서 관리자 역할은 코드상 직원과 동일함을 그대로 적었고 화면에 계정 생성·비활성화가 없다는 점도 API 경로와 함께 명시했다. -
보류 아이디어: 사용자 권한 화면에 계정 비활성화 토글 추가(API는 있으나 UI 없음) / 좌석 상세 편집 창에서 조직 구역 지정(현재 API·처리필요로만 가능) / 좌석맵에서 배정 해제 단추(현재 DELETE API·퇴직자 해제만) / CI에 guide-shots 스모크(캡처 스크립트가 깨지지 않는지) 추가 / build-docs.py 파서 단위 테스트(이미지·목록 번호 이어 세기)
- 릴리즈: v1.4.1 (2026-09-12, run 2026-09-12-085250-seaton-approve)
visitflow
- 선택: 캠페인 guides-2026-09 — 사용자·관리자 가이드를 실제 화면 캡처가 들어간 완성본으로 재작성하고 PDF 산출 (가치 5 / 위험 1 / 작업량 M)
- 결과: 성공
- 요약:
docs/USER_GUIDE.md·docs/ADMIN_GUIDE.md는 있었으나 화면 캡처가 한 장도 없고 GUIDE-STANDARD.md의 구성(처음 5분·화면별 사용법·막혔을 때 / 구성 요소·설치·환경 변수 전수 표·계정과 권한·운영·장애 대응·보안)을 따르지 않았다. 기존 내용을 버리지 않고 표준 구조로 재배치하면서, 오류 메시지 표는writeError호출에서, 역할 표는types.go의CanApprove/CanAudit등에서, 환경 변수 표는platform/config.go에서, 장애 대응 표의 로그 문구는logger.Error호출에서 읽어 채웠다. 캡처는web/screenshots/guide.spec.ts(npm run screenshots, Playwright + 시스템 Chrome 1440×900)가go build한 v2.7.3 바이너리(임베디드 UI)와 docker postgres:16-alpine에 가짜 데이터(데모물산·hong@example.com·010-0000-xxxx)를 API로 심고 29개 화면(로그인·대시보드·방문 신청·상세·승인 검토·로비·QR 검증·비상 명단·관리자 8개 메뉴·설정 3탭·모바일 방문증·사전등록·키오스크)을 찍는다. 스크립트는VISITFLOW_SCREENSHOT_URL/ADMIN/PASSWORD가 없거나 루프백이 아니면 멈추고, 시스템 설정은 건드리지 않으며, 자격 증명 리터럴이 없다. PDF는 공용md2pdf.mjs로 만들었고(각 21쪽, 그림 17/12장) pymupdf로 렌더링해 표지·그림을 확인했다. README의 문서 링크에 사용자 가이드와 두 PDF를 추가했다. 검증:npm run lint, 스크립트 단독tsc --noEmit,go vet ./..., 캡처 스크립트 실제 실행 통과, 참조된 29개 이미지 전부 존재. - 보류 아이디어: bestAcceptLanguage의 q=0·q>1·잘못된 q 처리 정정(locale.go) / CSV·XLSX 가져오기 파서 엣지케이스 단위 테스트 보강(import.go) / 설정 내보내기 JSON 가져오기 경로의 서버측 스키마 검증 / 방문 이력 CSV 상한 경계에서 한 방문의 동행자가 잘리는 문제 / 가이드 캡처를 CI에서 릴리즈 이미지로 자동 갱신(스크립트는 있으나 파이프라인 연결 없음)
← 대시보드 · Atom 피드 · 원본 데이터 runs.jsonl