From 517fd12ca5791a4242b13f4a04cd0cf9cc989e43 Mon Sep 17 00:00:00 2001 From: "Jeong, Se-hyeon" <168955357+gitIt-sehyeon@users.noreply.github.com> Date: Thu, 10 Sep 2026 16:56:57 +0900 Subject: [PATCH 1/3] =?UTF-8?q?docs(=EB=AA=85=EC=84=B8):=20=E3=80=8C?= =?UTF-8?q?=EC=A0=9C=ED=92=88=20=ED=9D=90=EB=A6=84=20=EB=B0=96=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=E3=80=8D=20=EC=A0=88=EC=9D=84=20=EB=A7=8C=EB=93=A4?= =?UTF-8?q?=EA=B3=A0=20/console=20=EC=9D=84=20=EC=98=AC=EB=A6=B0=EB=8B=A4?= =?UTF-8?q?=20(#522=20=C2=B7=20#594=20=ED=9B=84=EC=86=8D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `#594` 리뷰에서 내 몫으로 받은 자리다. `/console` 이 머지돼서(62f1ed4) 조건이 찼다. 8절의 「번호 없는 화면 — 사용 가이드」 문단이 화면 하나만 다뤘는데, 같은 성격의 화면이 둘이 됐다. 문단을 절로 올리고 표로 갈랐다. /guide 사용 가이드 제한 없음 제품이 아니라 제품 설명이다 /console 운영 콘솔 ADMIN 운영 상태를 보는 자리다 번호를 안 주는 근거는 그대로다 — 얹으면 명세에 없는 화면이 명세 화면인 척하고, 위 표가 답하는 질문(누가 어느 순서로 무엇을 하나)에 이 둘이 섞인다. `/console` 에는 근거가 하나 더 있다. 제품 흐름에서 링크하지 않는 이유가 권한이다 — `ops:status:read` 가 ADMIN 뿐이라 판매자 화면에 걸면 누르는 사람 대부분에게 403 이다. 그리고 지금은 어디서도 안 걸린다는 사실(#600)을 같이 적었다. 이 파일은 구현 완료 시점의 명세라 「닿을 수 있다」를 안 쓴 상태로 두면 다음 사람이 링크가 있다고 읽는다. 12.1 알려진 한계에도 9번으로 올렸다 — 데모 전에 남아 있는지 목록에서 보여야 한다. 검증: server 816건 통과 (ErrorCodeContractTest 가 이 파일의 §9·「N 벌」·「N종」을 읽는다 — 8절만 바뀌어서 안 흔들린다) --- docs/functional-spec-v1.2.md | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/docs/functional-spec-v1.2.md b/docs/functional-spec-v1.2.md index 33d34dac..85e6a178 100644 --- a/docs/functional-spec-v1.2.md +++ b/docs/functional-spec-v1.2.md @@ -369,10 +369,24 @@ v1.1 대비 추가된 룰 셋: **R-00**(측정 안 된 것을 «없음»으로 | S-07 | 이해 기록 리포트 | SELLER/COMPL | 발행 · PDF 미리보기 · 내려받기 · contentHash | 구현 | | S-08 | 오해 지도 대시보드 | COMPL/MGR | 히트맵 · 선행지표 · 취약 대비 · 게이트 결정 · 코칭 정황 · 합성 워터마크 상시 | 구현 | -**번호 없는 화면 — 사용 가이드(`/guide`)**. 위 목록은 제품 흐름의 화면이고, 가이드는 **그 -화면들에 대해 쓴 문서**라 번호를 주지 않는다. 번호를 얹으면 명세에 없는 화면이 명세 화면인 -척하게 된다. 심사·시연용 목차(S-00, `/admin`)는 v1.2 개발 중 만들었다가 **지웠다** — 가이드가 -「어느 화면이 무엇을 하는가」를 대신 말하고, 목차가 하던 나머지 일은 제품 흐름의 링크가 한다. +### 제품 흐름 밖 화면 — 번호를 주지 않는다 + +위 표는 **제품 흐름의 화면**이다. 그 흐름 밖에 둘이 더 있고, 둘 다 **화면 번호가 없다.** +번호를 얹으면 명세에 없는 화면이 명세 화면인 척하게 되고, 위 표가 답하는 질문(*"고객·판매자가 +어느 순서로 무엇을 하나"*)에 이 둘이 섞인다. + +| 경로 | 무엇 | 누가 | 왜 흐름 밖인가 | +| --- | --- | --- | --- | +| `/guide` | 사용 가이드 | 제한 없음 | **그 화면들에 대해 쓴 문서**다. 제품이 아니라 제품 설명이다 | +| `/console` | 운영 콘솔 (F-OPS-001 · `GET /ops/status`) | ADMIN | **운영 상태를 보는 자리**다. 「떠 있는데 못 하는 상태」를 갈라 그린다 | + +**`/console` 을 제품 흐름에서 링크하지 않는 이유는 권한이다.** `ops:status:read` 는 ADMIN +뿐이므로(`rbac_policy.yaml`) 판매자 화면에서 걸면 **누르는 사람 대부분에게 403** 이다 — +링크가 있다는 것과 그 API 를 부를 권한이 있다는 것은 다르다. ❗**대신 지금은 어디서도 안 +걸린다**(이슈 #600) — 닿는 길이 주소 직접 입력뿐이라 `/upload` 와 같은 상태다(#406). + +심사·시연용 목차(S-00, `/admin`)는 v1.2 개발 중 만들었다가 **지웠다** — 가이드가 「어느 화면이 +무엇을 하는가」를 대신 말하고, 목차가 하던 나머지 일은 제품 흐름의 링크가 한다. --- @@ -462,6 +476,7 @@ v1.1의 미결정 5건은 전부 답이 났다 — ① 음성 제외 ② 신뢰 | 6 | 루브릭 열람 권한 — SELLER 제외(채점 정답표라 7-4에 걸린다), COMPL·MGR·ADMIN 읽기 + 감사 대상 | #494 · 프록시(#475)와 동시 | 정세현 | | 7 | `vulnerability_weights.yaml`과 감독당국 배상 가중 기준이 세 곳에서 다르다 · 데모 고객(65세·5천만원)이 임계 4에 정확히 걸린다 | 결정 로그 10.13 · 10.12 | 강희진 | | 8 | 라벨링에서 운영자·라벨러 분리가 완전하지 않다 | `guideline.md` §5 | 다음 회차 | +| 9 | 운영 콘솔(`/console`)에 진입점이 없다 — 닿는 길이 주소 직접 입력뿐이다 | #594 가 범위를 좁히며 `/guide` 한 줄을 뺐다 | 오준서 (#600) | ### 12.2 다음 라운드 고도화 — 무엇을, 왜, 어떤 조건에서 From a750eee1be9540587d1e60a90e503e793f98ea94 Mon Sep 17 00:00:00 2001 From: "Jeong, Se-hyeon" <168955357+gitIt-sehyeon@users.noreply.github.com> Date: Thu, 10 Sep 2026 17:24:36 +0900 Subject: [PATCH 2/3] =?UTF-8?q?docs(=EB=AA=85=EC=84=B8):=20=EC=9A=94?= =?UTF-8?q?=EC=95=BD=ED=91=9C=EB=8F=84=20=E3=80=8C=EB=B2=88=ED=98=B8=20?= =?UTF-8?q?=EC=97=86=EB=8A=94=20=ED=99=94=EB=A9=B4=20=EB=91=98=E3=80=8D?= =?UTF-8?q?=EB=A1=9C=20=E2=80=94=208=EC=A0=88=EB=A7=8C=20=EA=B3=A0?= =?UTF-8?q?=EC=B9=98=EB=A9=B4=20=ED=95=9C=EC=AA=BD=EC=9D=B4=20=EB=82=A1?= =?UTF-8?q?=EB=8A=94=EB=8B=A4=20(#602=20=EB=A6=AC=EB=B7=B0,=20=EA=B0=95?= =?UTF-8?q?=ED=9D=AC=EC=A7=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 8절을 둘로 바꿨는데 부록 요약표(:565)는 가이드 하나만 들고 있었다. 같은 문서 안에서 두 자리가 다른 수를 말하므로, 요약만 보는 사람은 /console 이 없는 것으로 읽는다. 8절 번호 없는 화면 둘 (/guide · /console) 요약표 번호 없는 사용 가이드(/guide) ← 낡았다 이번 주에 같은 부류를 둘 밟았다 — #583(에러 코드 수) · #599(볼륨 목록). 한 값이 두 곳에 있고 한쪽만 고쳐지는 모양이다. 진입점(#600)은 요약표에 안 적는다. 그 표는 «무엇이 있나» 이고 진입점은 «닿을 수 있나» 라 층이 다르다 — 한 칸에 적으면 진입점이 생겼을 때 고칠 자리가 둘이 된다. 그건 12.1 알려진 한계 9번이 든다. 검증: server 816건 통과 --- docs/functional-spec-v1.2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/functional-spec-v1.2.md b/docs/functional-spec-v1.2.md index 85e6a178..085a6e29 100644 --- a/docs/functional-spec-v1.2.md +++ b/docs/functional-spec-v1.2.md @@ -562,7 +562,7 @@ v1.1의 미결정 5건은 전부 답이 났다 — ① 음성 제외 ② 신뢰 | 권한 | 역할표 | `rbac_policy.yaml` **20 action × 범위** · 12 audited · «없는 역할» 문면 · 정책 파일이 유일한 근거 | | 평가 | 계획 | **QWK +0.828 달성** · 미탐 U4→U1 0건 · 수치의 출처(프롬프트·문맥 판)를 산출물이 들고 다닌다 | | API | 13 초안 | **32 경로** · 봉투 · 오류 코드 14종 여섯 벌 대조 | -| 화면 | S-01~S-08 | S-01 은 범위 밖 · 번호 없는 사용 가이드(`/guide`) | +| 화면 | S-01~S-08 | S-01 은 범위 밖 · 번호 없는 화면 둘(`/guide` · `/console`) | | 배포 | — | alpha 최종 · OIDC/SSM · MySQL · 외부 노출 web 하나 | | 정답지 | 핵심설명서 | 공시문서 집합(ADR-007) | | 미구현으로 남긴 것 | — | OCR · S-01 업로드 · 미분류 오해 큐 · 열람/삭제 API · MOBILE 인증 · 성명 사전 | From d256a5cc078fd3c3d5920a206f4685f15d1108f0 Mon Sep 17 00:00:00 2001 From: "Jeong, Se-hyeon" <168955357+gitIt-sehyeon@users.noreply.github.com> Date: Fri, 11 Sep 2026 11:14:01 +0900 Subject: [PATCH 3/3] =?UTF-8?q?docs(=EB=AA=85=EC=84=B8):=20=ED=9D=90?= =?UTF-8?q?=EB=A6=84=20=EB=B0=96=20=ED=99=94=EB=A9=B4=EC=9D=B4=20=EC=85=8B?= =?UTF-8?q?=EC=9D=B4=EB=8B=A4=20=E2=80=94=20/audit=20=EC=9D=B4=2016?= =?UTF-8?q?=EB=B6=84=20=EC=B0=A8=EC=9D=B4=EB=A1=9C=20=EB=B9=A0=EC=A1=8C?= =?UTF-8?q?=EB=8B=A4=20(#602=20=EB=A6=AC=EB=B7=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 이 브랜치가 main 을 머지한 것이 08:54Z 이고 #604(/audit)가 머지된 것이 09:10Z 라, 절을 쓰는 동안 화면이 하나 더 들어왔다. main 을 다시 머지하고 다섯 자리를 맞춘다. 374행 "둘이 더 있고, 둘 다" → 셋 표 /audit 행 추가 (COMPL · S-08 탭으로 안 두는 이유) 383행 링크 안 하는 이유를 둘로 /console ADMIN · /audit COMPL 479행 §12.1 9번을 한 행으로 묶음 원인도 담당도 같다 (#600) 565행 "번호 없는 화면 둘" → 셋 9번 행을 나누지 않고 묶은 것은, 둘 다 「범위를 좁히며 링크를 안 낸」 같은 원인이고 같은 사람(#600)이 끌고 가기 때문이다. 나누면 같은 일을 두 번 추적한다. /guide 가 셋 중 유일하게 권한 제한이 없다는 것을 문단에 적었다 — 나머지 둘은 「안 건 것이 판단」이고 /guide 는 「안 건 것이 결과」라 원인이 다르다. 라우트 전수 확인: 흐름 밖 셋 · /upload 는 S-01(번호 있음) · 나머지 일곱이 S-02~S-08. server 825건 · npm run build 통과. --- docs/functional-spec-v1.2.md | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/docs/functional-spec-v1.2.md b/docs/functional-spec-v1.2.md index 7846ebb9..cccd497b 100644 --- a/docs/functional-spec-v1.2.md +++ b/docs/functional-spec-v1.2.md @@ -371,19 +371,24 @@ v1.1 대비 추가된 룰 셋: **R-00**(측정 안 된 것을 «없음»으로 ### 제품 흐름 밖 화면 — 번호를 주지 않는다 -위 표는 **제품 흐름의 화면**이다. 그 흐름 밖에 둘이 더 있고, 둘 다 **화면 번호가 없다.** +위 표는 **제품 흐름의 화면**이다. 그 흐름 밖에 셋이 더 있고, 셋 다 **화면 번호가 없다.** 번호를 얹으면 명세에 없는 화면이 명세 화면인 척하게 되고, 위 표가 답하는 질문(*"고객·판매자가 -어느 순서로 무엇을 하나"*)에 이 둘이 섞인다. +어느 순서로 무엇을 하나"*)에 이 셋이 섞인다. | 경로 | 무엇 | 누가 | 왜 흐름 밖인가 | | --- | --- | --- | --- | | `/guide` | 사용 가이드 | 제한 없음 | **그 화면들에 대해 쓴 문서**다. 제품이 아니라 제품 설명이다 | | `/console` | 운영 콘솔 (F-OPS-001 · `GET /ops/status`) | ADMIN | **운영 상태를 보는 자리**다. 「떠 있는데 못 하는 상태」를 갈라 그린다 | +| `/audit` | 감사 기록 (F-CMN-002 · `GET /dashboard/audit-summary`·`audit-verify`) | COMPL | **그 기록을 믿을 수 있는가**를 보는 자리다. S-08 안의 탭으로 두지 않는다 — 그쪽은 `aggregate:*`(COMPL `org` · MGR `branch`)이고 여기는 COMPL 뿐이라, 얹으면 **MGR 에게 상시 403 인 탭**이 생긴다 | -**`/console` 을 제품 흐름에서 링크하지 않는 이유는 권한이다.** `ops:status:read` 는 ADMIN -뿐이므로(`rbac_policy.yaml`) 판매자 화면에서 걸면 **누르는 사람 대부분에게 403** 이다 — -링크가 있다는 것과 그 API 를 부를 권한이 있다는 것은 다르다. ❗**대신 지금은 어디서도 안 -걸린다**(이슈 #600) — 닿는 길이 주소 직접 입력뿐이라 `/upload` 와 같은 상태다(#406). +**`/console` · `/audit` 을 제품 흐름에서 링크하지 않는 이유는 권한이다.** `ops:status:read` +는 ADMIN 뿐이고 `audit:read`·`audit:verify` 는 COMPL 뿐이므로(`rbac_policy.yaml`) 판매자 +화면에서 걸면 **누르는 사람 대부분에게 403** 이다 — 링크가 있다는 것과 그 API 를 부를 권한이 +있다는 것은 다르다. ❗**대신 지금은 둘 다 어디서도 안 걸린다**(이슈 #600) — 닿는 길이 주소 +직접 입력뿐이라 `/upload` 와 같은 상태다(#406). + +`/guide` 는 다르다. 권한 제한이 없으므로 **링크를 안 건 것이 판단이 아니라 결과**다 — `#594` +가 범위를 좁히며 그 한 줄을 뺐고, 그것이 `#600` 이 추적하는 일이다. 심사·시연용 목차(S-00, `/admin`)는 v1.2 개발 중 만들었다가 **지웠다** — 가이드가 「어느 화면이 무엇을 하는가」를 대신 말하고, 목차가 하던 나머지 일은 제품 흐름의 링크가 한다. @@ -476,7 +481,7 @@ v1.1의 미결정 5건은 전부 답이 났다 — ① 음성 제외 ② 신뢰 | 6 | 루브릭 열람 권한 — SELLER 제외(채점 정답표라 7-4에 걸린다), COMPL·MGR·ADMIN 읽기 + 감사 대상 | #494 · 프록시(#475)와 동시 | 정세현 | | 7 | `vulnerability_weights.yaml`과 감독당국 배상 가중 기준이 세 곳에서 다르다 · 데모 고객(65세·5천만원)이 임계 4에 정확히 걸린다 | 결정 로그 10.13 · 10.12 | 강희진 | | 8 | 라벨링에서 운영자·라벨러 분리가 완전하지 않다 | `guideline.md` §5 | 다음 회차 | -| 9 | 운영 콘솔(`/console`)에 진입점이 없다 — 닿는 길이 주소 직접 입력뿐이다 | #594 가 범위를 좁히며 `/guide` 한 줄을 뺐다 | 오준서 (#600) | +| 9 | 제품 흐름 밖 화면에 진입점이 없다 — `/console` · `/audit` 둘 다 닿는 길이 주소 직접 입력뿐이다 | #594 가 범위를 좁히며 `/guide` 한 줄을 뺐고, `#604`(`/audit`)도 같은 상태로 들어왔다 | 오준서 (#600) | ### 12.2 다음 라운드 고도화 — 무엇을, 왜, 어떤 조건에서 @@ -562,7 +567,7 @@ v1.1의 미결정 5건은 전부 답이 났다 — ① 음성 제외 ② 신뢰 | 권한 | 역할표 | `rbac_policy.yaml` **20 action × 범위** · 12 audited · «없는 역할» 문면 · 정책 파일이 유일한 근거 | | 평가 | 계획 | **QWK +0.828 달성** · 미탐 U4→U1 0건 · 수치의 출처(프롬프트·문맥 판)를 산출물이 들고 다닌다 | | API | 13 초안 | **32 경로** · 봉투 · 오류 코드 15종 여섯 벌 대조 | -| 화면 | S-01~S-08 | S-01 은 범위 밖 · 번호 없는 화면 둘(`/guide` · `/console`) | +| 화면 | S-01~S-08 | S-01 은 범위 밖 · 번호 없는 화면 셋(`/guide` · `/console` · `/audit`) | | 배포 | — | alpha 최종 · OIDC/SSM · MySQL · 외부 노출 web 하나 | | 정답지 | 핵심설명서 | 공시문서 집합(ADR-007) | | 미구현으로 남긴 것 | — | OCR · S-01 업로드 · 미분류 오해 큐 · 열람/삭제 API · MOBILE 인증 · 성명 사전 |