docs: 심사 가이드 다이어그램 — archify workflow 5번째, 운영자 관점의 심사 절차
docs/operations/review-guide.md 의 6단계를 3레인(읽기·근거 확인 / 판정 / 기준 DB 에 남는 것) workflow 로: 한 줄 요약 → 점수 구성 → 증거 열기 → 근거 표시 → 판정 → 다음 미심사. 분기는 미수행 하한(보류 후 재분석)과 판정 뒤 DB(주의 후보 자동 · 클리어 기준 등록 수동). 첫 안은 4레인·3항목 카드로 1440x900 에서 127px 넘쳐 레인 병합·제목 한 줄·카드 2항목으로 압축했고, 노드 폭 148 로 높이 예산(종횡비 1.52)을 맞췄다. validate 9/9 showcase, visual-check 4개 뷰포트 containment pass, manifest 5종 갱신. rebuild 스크립트·manifest 갱신기 목록에 등록, PROJECT_MAP 표 추가. 문서·다이어그램만 변경. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BStHFrjQj2VypecSG9ex1V
This commit is contained in:
parent
1db2c30885
commit
29534f441a
7 changed files with 304 additions and 0 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
# Project INDEX
|
# Project INDEX
|
||||||
|
|
||||||
|
- 2026-09-23 · **심사 가이드 다이어그램** — `docs/diagrams/review-guide.html` (archify workflow v2, 5번째 다이어그램). 문서의 6단계를 3레인(읽기·근거 확인 / 판정 / 기준 DB 에 남는 것)으로: 한 줄 요약 → 점수 구성 → 증거 열기 → 근거 표시 → 판정 → 다음 미심사, 분기는 미수행 하한(→ 보류 후 재분석)과 판정 뒤 DB(주의 후보 자동 · 클리어 기준 등록 수동). 첫 안은 4레인·3항목 카드로 1440×900 에서 127px 넘쳐 레인 병합·제목 한 줄·카드 2항목으로 압축(노드 폭 148 로 종횡비 1.52 충족). validate 9/9 showcase · visual-check 4뷰포트 containment pass · manifest 5종. rebuild 스크립트·manifest 갱신기에 등록, PROJECT_MAP 표 추가.
|
||||||
- 2026-09-23 · **심사 가이드 v2** — `docs/operations/review-guide.md`. 기존 `operator-review-workflow` 다이어그램은 시스템 흐름(폴더→분석→채점)이라 "어떻게 심사하고 무엇을 보는가"에 답하지 못했다. 운영자 관점으로 다시 썼다: 한 건 심사 6단계(한 줄 읽기 → 점수 구성 → 동일→부분→페이지 순 증거 → 사용/무관/오탐 표시 → A/H/R → N), 한 줄 요약의 신호 9종과 판정 무게(라벨은 권리와 무관, 미수행은 안전 아님), 승인/보류/반려 기준과 **뒤에 일어나는 일**(보류·반려 → 주의 후보, 승인은 DB 에 안 남으니 `클리어 기준 등록` 별도), 반려 사유 프리셋, 키보드, 일괄 처리, 헷갈리는 것 5개, 종료 루틴(내보내기·통계·임계 재검토). 콘솔 라벨은 실제 index.html 문자열로 대조.
|
- 2026-09-23 · **심사 가이드 v2** — `docs/operations/review-guide.md`. 기존 `operator-review-workflow` 다이어그램은 시스템 흐름(폴더→분석→채점)이라 "어떻게 심사하고 무엇을 보는가"에 답하지 못했다. 운영자 관점으로 다시 썼다: 한 건 심사 6단계(한 줄 읽기 → 점수 구성 → 동일→부분→페이지 순 증거 → 사용/무관/오탐 표시 → A/H/R → N), 한 줄 요약의 신호 9종과 판정 무게(라벨은 권리와 무관, 미수행은 안전 아님), 승인/보류/반려 기준과 **뒤에 일어나는 일**(보류·반려 → 주의 후보, 승인은 DB 에 안 남으니 `클리어 기준 등록` 별도), 반려 사유 프리셋, 키보드, 일괄 처리, 헷갈리는 것 5개, 종료 루틴(내보내기·통계·임계 재검토). 콘솔 라벨은 실제 index.html 문자열로 대조.
|
||||||
|
|
||||||
- 2026-09-22 · **한 줄 요약(headline) — 운영자의 첫 1초를 사유 원문 덤프에서 사실·규모로.** 코퍼스 DB 로 실 콘솔을 띄워 보니 큐의 '상위 근거' 칸이 `구글 visually s... 구글 페이지 with ...`(사유 원문 둘을 잘라 붙인 것)이었고 증거 제목도 `구글 full image match found` 로 절반 영어였다. 스코어러가 점수 계산과 별개로 집계(`_Tally`)해 `riskBreakdown.headline` 에 `웹 완전일치 사본 4곳 · 식별 가능 인물 · 이름 있는 검색 승격 2건 · 라벨 9개` 를 싣는다 — 순서는 예산표, 웹은 가장 강한 뷰만 **호스트 수(곳)** 로, 등록 일치·클리어 이력·미수행·실패·신뢰 출처 제외까지 한 줄. 큐 행과 케이스 요약 보드의 첫 줄이 이것으로 바뀌고 옛 케이스(headline 없음)만 예전 배치. `formatReason` 에 Vision 매치 4종·검색결과 사본·기준 DB 유사도 한국어 매핑 추가. 실렌더(claude-in-chrome, 코퍼스 20장)로 큐·케이스 확인 — 점수·밴드 변화 없음(SCORER_VERSION 유지).
|
- 2026-09-22 · **한 줄 요약(headline) — 운영자의 첫 1초를 사유 원문 덤프에서 사실·규모로.** 코퍼스 DB 로 실 콘솔을 띄워 보니 큐의 '상위 근거' 칸이 `구글 visually s... 구글 페이지 with ...`(사유 원문 둘을 잘라 붙인 것)이었고 증거 제목도 `구글 full image match found` 로 절반 영어였다. 스코어러가 점수 계산과 별개로 집계(`_Tally`)해 `riskBreakdown.headline` 에 `웹 완전일치 사본 4곳 · 식별 가능 인물 · 이름 있는 검색 승격 2건 · 라벨 9개` 를 싣는다 — 순서는 예산표, 웹은 가장 강한 뷰만 **호스트 수(곳)** 로, 등록 일치·클리어 이력·미수행·실패·신뢰 출처 제외까지 한 줄. 큐 행과 케이스 요약 보드의 첫 줄이 이것으로 바뀌고 옛 케이스(headline 없음)만 예전 배치. `formatReason` 에 Vision 매치 4종·검색결과 사본·기준 DB 유사도 한국어 매핑 추가. 실렌더(claude-in-chrome, 코퍼스 20장)로 큐·케이스 확인 — 점수·밴드 변화 없음(SCORER_VERSION 유지).
|
||||||
|
|
|
||||||
|
|
@ -213,6 +213,7 @@ app-shell CSP(`script-src 'self'`, `http_app.py:514`)가 인라인 스크립트
|
||||||
| `system-architecture.html` | 시스템 구성. 폐쇄망 경계와 그 밖의 외부 검색 API, SSRF 가드 앞의 호출 게이트 | architecture |
|
| `system-architecture.html` | 시스템 구성. 폐쇄망 경계와 그 밖의 외부 검색 API, SSRF 가드 앞의 호출 게이트 | architecture |
|
||||||
| `operator-review-workflow.html` | 운영자 심사 4레인(제출·자동·심사·차단). 비상 차단 시 심사가 이어지는 경로 포함 | workflow v2 |
|
| `operator-review-workflow.html` | 운영자 심사 4레인(제출·자동·심사·차단). 비상 차단 시 심사가 이어지는 경로 포함 | workflow v2 |
|
||||||
| `submission-lifecycle.html` | 제출물 상태 전이. 분석 실패·보류가 종료가 아니라 분석으로 복귀하는 두 고리 | lifecycle |
|
| `submission-lifecycle.html` | 제출물 상태 전이. 분석 실패·보류가 종료가 아니라 분석으로 복귀하는 두 고리 | lifecycle |
|
||||||
|
| `review-guide.html` | 심사 가이드(운영자 관점). 한 줄 요약 → 점수 구성 → 동일→부분→페이지 → 근거 표시 → 판정 → 다음. 미수행 하한 분기와 기준 DB 에 남는 것(주의 후보 자동 · 클리어 기준 등록 수동). 본문은 `docs/operations/review-guide.md` | workflow |
|
||||||
|
|
||||||
## 알려진 부채
|
## 알려진 부채
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,14 @@
|
||||||
"htmlSha256": "e51d09c4251fb762c63142e870d6b58aef7d8f5ca6857875248dc9ee56ae0e7f",
|
"htmlSha256": "e51d09c4251fb762c63142e870d6b58aef7d8f5ca6857875248dc9ee56ae0e7f",
|
||||||
"htmlBytes": 818466
|
"htmlBytes": 818466
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "workflow",
|
||||||
|
"spec": "review-guide.workflow.json",
|
||||||
|
"html": "review-guide.html",
|
||||||
|
"specSha256": "588cc3dc2fbd223776bcf0a4f040b4b1b71d784036d25948c09db7efc9f952b3",
|
||||||
|
"htmlSha256": "40b96cae655186f9cf7f339259a5a4a64f1b94b347e99f4d7e37efc5b0f5f042",
|
||||||
|
"htmlBytes": 814047
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "lifecycle",
|
"type": "lifecycle",
|
||||||
"spec": "submission-lifecycle.lifecycle.json",
|
"spec": "submission-lifecycle.lifecycle.json",
|
||||||
|
|
|
||||||
BIN
docs/diagrams/review-guide.html
generated
Normal file
BIN
docs/diagrams/review-guide.html
generated
Normal file
Binary file not shown.
292
docs/diagrams/review-guide.workflow.json
Normal file
292
docs/diagrams/review-guide.workflow.json
Normal file
|
|
@ -0,0 +1,292 @@
|
||||||
|
{
|
||||||
|
"schema_version": 2,
|
||||||
|
"diagram_type": "workflow",
|
||||||
|
"meta": {
|
||||||
|
"title": "심사 가이드",
|
||||||
|
"output": "docs/diagrams/review-guide.html",
|
||||||
|
"quality_profile": "showcase",
|
||||||
|
"views": [
|
||||||
|
{
|
||||||
|
"id": "one-case",
|
||||||
|
"label": "한 건 심사",
|
||||||
|
"focus": [
|
||||||
|
"headline",
|
||||||
|
"breakdown",
|
||||||
|
"evidence",
|
||||||
|
"mark",
|
||||||
|
"decide",
|
||||||
|
"next"
|
||||||
|
],
|
||||||
|
"note": "한 줄 요약에서 다음 미심사 건까지, 보통 1~2분."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "unchecked",
|
||||||
|
"label": "검색이 안 돌았을 때",
|
||||||
|
"focus": [
|
||||||
|
"breakdown",
|
||||||
|
"unchecked",
|
||||||
|
"decide"
|
||||||
|
],
|
||||||
|
"note": "증거가 적은 것이 안전하다는 뜻이 아니다 — 중간 하한으로 올라오고 보류 후 재분석한다."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "after",
|
||||||
|
"label": "판정 뒤에 남는 것",
|
||||||
|
"focus": [
|
||||||
|
"decide",
|
||||||
|
"watchlist",
|
||||||
|
"cleared"
|
||||||
|
],
|
||||||
|
"note": "보류·반려는 기준 DB 에 자동으로 남고, 승인은 직접 등록해야 남는다."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"legend": {
|
||||||
|
"mode": "auto",
|
||||||
|
"entries": {
|
||||||
|
"frontend": {
|
||||||
|
"label": "운영자가 보는 것"
|
||||||
|
},
|
||||||
|
"backend": {
|
||||||
|
"label": "운영자가 하는 것"
|
||||||
|
},
|
||||||
|
"database": {
|
||||||
|
"label": "기준 DB"
|
||||||
|
},
|
||||||
|
"security": {
|
||||||
|
"label": "커버리지 공백"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lanes": [
|
||||||
|
{
|
||||||
|
"id": "read",
|
||||||
|
"label": "읽기 · 근거 확인"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "judge",
|
||||||
|
"label": "판정"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "kb",
|
||||||
|
"label": "기준 DB 에 남는 것",
|
||||||
|
"variant": "exception"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"phases": [
|
||||||
|
{
|
||||||
|
"id": "p-read",
|
||||||
|
"label": "무엇이 나왔나",
|
||||||
|
"fromCol": 0,
|
||||||
|
"toCol": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "p-check",
|
||||||
|
"label": "무엇을 보나",
|
||||||
|
"fromCol": 2,
|
||||||
|
"toCol": 3,
|
||||||
|
"variant": "emphasis"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "p-judge",
|
||||||
|
"label": "어떻게 판정하나",
|
||||||
|
"fromCol": 4,
|
||||||
|
"toCol": 5
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"groups": [
|
||||||
|
{
|
||||||
|
"id": "g-kb",
|
||||||
|
"label": "다음에 같은 이미지가 오면",
|
||||||
|
"lane": "kb",
|
||||||
|
"fromCol": 4,
|
||||||
|
"toCol": 5,
|
||||||
|
"variant": "dashed"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mainPath": [
|
||||||
|
"headline",
|
||||||
|
"breakdown",
|
||||||
|
"evidence",
|
||||||
|
"mark",
|
||||||
|
"decide",
|
||||||
|
"next"
|
||||||
|
],
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"id": "headline",
|
||||||
|
"lane": "read",
|
||||||
|
"col": 0,
|
||||||
|
"type": "frontend",
|
||||||
|
"label": "한 줄 요약",
|
||||||
|
"sublabel": "웹 사본 N곳 · 인물 · 검색",
|
||||||
|
"tag": "첫 1초",
|
||||||
|
"width": 148
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "breakdown",
|
||||||
|
"lane": "read",
|
||||||
|
"col": 1,
|
||||||
|
"type": "frontend",
|
||||||
|
"label": "점수 구성",
|
||||||
|
"sublabel": "몇 점이 어디서 왔나",
|
||||||
|
"width": 148
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "unchecked",
|
||||||
|
"lane": "judge",
|
||||||
|
"col": 2,
|
||||||
|
"type": "security",
|
||||||
|
"label": "미수행 · 실패",
|
||||||
|
"sublabel": "중간 30 하한",
|
||||||
|
"width": 148
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "evidence",
|
||||||
|
"lane": "read",
|
||||||
|
"col": 2,
|
||||||
|
"type": "frontend",
|
||||||
|
"label": "증거 열기",
|
||||||
|
"sublabel": "동일 → 부분 → 페이지 순",
|
||||||
|
"width": 148
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "mark",
|
||||||
|
"lane": "read",
|
||||||
|
"col": 3,
|
||||||
|
"type": "backend",
|
||||||
|
"label": "근거 표시",
|
||||||
|
"sublabel": "사용 · 무관 · 오탐",
|
||||||
|
"tag": "리스코어",
|
||||||
|
"width": 148
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "decide",
|
||||||
|
"lane": "judge",
|
||||||
|
"col": 4,
|
||||||
|
"type": "backend",
|
||||||
|
"label": "판정",
|
||||||
|
"sublabel": "A 승인 · H 보류 · R 반려",
|
||||||
|
"tag": "반려는 사유 필수",
|
||||||
|
"width": 148
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "next",
|
||||||
|
"lane": "judge",
|
||||||
|
"col": 5,
|
||||||
|
"type": "frontend",
|
||||||
|
"label": "다음 미심사",
|
||||||
|
"sublabel": "N · 승인·보류는 자동",
|
||||||
|
"width": 148
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "cleared",
|
||||||
|
"lane": "kb",
|
||||||
|
"col": 4,
|
||||||
|
"type": "database",
|
||||||
|
"label": "클리어 기준 등록",
|
||||||
|
"sublabel": "승인만으로는 안 남는다",
|
||||||
|
"width": 148
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "watchlist",
|
||||||
|
"lane": "kb",
|
||||||
|
"col": 5,
|
||||||
|
"type": "database",
|
||||||
|
"label": "주의 후보",
|
||||||
|
"sublabel": "보류 · 반려는 자동",
|
||||||
|
"width": 148
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"edges": [
|
||||||
|
{
|
||||||
|
"id": "e-headline-breakdown",
|
||||||
|
"from": "headline",
|
||||||
|
"to": "breakdown",
|
||||||
|
"variant": "emphasis"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "e-breakdown-evidence",
|
||||||
|
"from": "breakdown",
|
||||||
|
"to": "evidence",
|
||||||
|
"variant": "emphasis"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "e-evidence-mark",
|
||||||
|
"from": "evidence",
|
||||||
|
"to": "mark",
|
||||||
|
"variant": "emphasis"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "e-mark-decide",
|
||||||
|
"from": "mark",
|
||||||
|
"to": "decide",
|
||||||
|
"label": "근거 행을 사용으로",
|
||||||
|
"variant": "emphasis"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "e-decide-next",
|
||||||
|
"from": "decide",
|
||||||
|
"to": "next",
|
||||||
|
"variant": "emphasis"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "e-breakdown-unchecked",
|
||||||
|
"from": "breakdown",
|
||||||
|
"to": "unchecked",
|
||||||
|
"label": "검색이 안 돌았으면",
|
||||||
|
"variant": "security",
|
||||||
|
"role": "branch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "e-unchecked-decide",
|
||||||
|
"from": "unchecked",
|
||||||
|
"to": "decide",
|
||||||
|
"label": "보류 후 다음 날 재분석",
|
||||||
|
"variant": "security",
|
||||||
|
"role": "branch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "e-decide-cleared",
|
||||||
|
"from": "decide",
|
||||||
|
"to": "cleared",
|
||||||
|
"label": "승인 후 직접",
|
||||||
|
"variant": "dashed",
|
||||||
|
"role": "branch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "e-decide-watchlist",
|
||||||
|
"from": "decide",
|
||||||
|
"to": "watchlist",
|
||||||
|
"label": "보류 · 반려",
|
||||||
|
"variant": "default",
|
||||||
|
"role": "branch"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"cards": [
|
||||||
|
{
|
||||||
|
"dot": "emerald",
|
||||||
|
"title": "무엇을 보는가",
|
||||||
|
"items": [
|
||||||
|
"웹 완전일치 사본이 가장 중요한 사실 — 동일 그룹의 출처 하나가 나머지 70행보다 중요하다",
|
||||||
|
"라벨은 무엇이 찍혔는지만 말한다 — 권리 판단에 쓰지 않는다"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dot": "rose",
|
||||||
|
"title": "판정 뒤에 남는 것",
|
||||||
|
"items": [
|
||||||
|
"보류 · 반려 → 주의 후보 자동 등록, 같은 이미지가 다시 오면 잡힌다",
|
||||||
|
"승인은 DB 에 남지 않는다 — 반복 제출되는 정상 이미지는 클리어 기준 등록"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dot": "cyan",
|
||||||
|
"title": "키보드",
|
||||||
|
"items": [
|
||||||
|
"J / K 이동 · N 다음 미심사 · A 승인 · H 보류 · R 반려 · ? 도움말",
|
||||||
|
"입력칸에 커서가 있으면 단축키가 먹지 않는다 — Esc"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -56,6 +56,7 @@ $diagrams = @(
|
||||||
@{ Type = 'architecture'; Base = 'system-architecture' },
|
@{ Type = 'architecture'; Base = 'system-architecture' },
|
||||||
@{ Type = 'dataflow'; Base = 'evidence-dataflow' },
|
@{ Type = 'dataflow'; Base = 'evidence-dataflow' },
|
||||||
@{ Type = 'workflow'; Base = 'operator-review-workflow' },
|
@{ Type = 'workflow'; Base = 'operator-review-workflow' },
|
||||||
|
@{ Type = 'workflow'; Base = 'review-guide' },
|
||||||
@{ Type = 'lifecycle'; Base = 'submission-lifecycle' }
|
@{ Type = 'lifecycle'; Base = 'submission-lifecycle' }
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ DIAGRAMS = [
|
||||||
("architecture", "system-architecture"),
|
("architecture", "system-architecture"),
|
||||||
("dataflow", "evidence-dataflow"),
|
("dataflow", "evidence-dataflow"),
|
||||||
("workflow", "operator-review-workflow"),
|
("workflow", "operator-review-workflow"),
|
||||||
|
("workflow", "review-guide"),
|
||||||
("lifecycle", "submission-lifecycle"),
|
("lifecycle", "submission-lifecycle"),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue