#474(설계) · #475(② 서버) · #494(③ 화면)에 흩어진 남은 조각을 한 자리에 모은다. 설계 근거는 저 셋에 있고 여기는 「무엇이 남았고 누구 몫이고 언제냐」만 든다. 조각이 닫히면 여기서 체크한다.
main 23a6b73 기준 실측 (2026-09-11). 결정은 #475 의 ⓐ(승인 = git 커밋 · 서버 stateless)로 9/6 에 났고, 그 뒤 ②③ 구현이 0건이다.
관리자 화면 → 업로드 → 파스 → 추출 → 루브릭 후보 → 사람 승인 → YAML(PR) → CI → 배포
✅ ① ❌ ②③ ❌ ②
① ai-service — 윤지석
② server — 강희진 (#475)
② 권한·기록 — 정세현
③ web — 오준서 (#494)
안전장치 — 이미 있는 것 (새로 만들 것 없음)
_parse / all_rubrics() 깨진 yaml 하나 → 채점 전부 죽는다 → PR 의 CI 가 막는다
RiskItemCatalogMirrorsRubricsTest 거울 어긋남
assert_related_misconceptions_exist 링크가 라이브러리에 없으면 기동 경고
매 배포 --build · app/ 마운트 없음 승인본은 이미지로만 닿는다 (appliedOnDeploy 의 전제)
순서 (제안)
지금 ② 열람 프록시 + rubric:read → ③ 열람 화면 → ① draft 표시
데모 뒤 ② approve → ③ 승인 화면 → ① 템플릿 후보
앞 셋은 S-01(#406)과 무관하고 채점 경로를 안 건드린다 — 9/6 의 「데모 뒤」 근거가 안 걸린다.
관련: #474 · #475 · #494 · #473 · #476 #493 #499 · #367(u1_requires) · #284(unlinked_until) · #409(eval 사슬)
@hd0rable @gitIt-sehyeon @junseo2323
#474(설계) ·#475(② 서버) ·#494(③ 화면)에 흩어진 남은 조각을 한 자리에 모은다. 설계 근거는 저 셋에 있고 여기는 「무엇이 남았고 누구 몫이고 언제냐」만 든다. 조각이 닫히면 여기서 체크한다.main
23a6b73기준 실측 (2026-09-11). 결정은#475의 ⓐ(승인 = git 커밋 · 서버 stateless)로 9/6 에 났고, 그 뒤 ②③ 구현이 0건이다.① ai-service — 윤지석
POST /internal/rubric/propose후보 생성 (#476)GET /internal/rubrics[/{item_id}]열람 (#493)POST /internal/template/gaps아무 항목도 안 덮는 문면 (#499)status: draft가 채점에서 아무 일도 안 한다** —is_draft가 선언만 있고 호출 0건. 17종 중 7종이 draft 인 채로 confirmed 와 똑같이 채점된다. ⓐ 의 「승인 → draft」 흐름이 이 위에 선다. 갈래는#475코멘트(ⓑ:Judgment에rubric_status표시 — 계약 변경이라 @hd0rable 승인). 지금 해도 채점이 안 바뀐다#476응답 모양 ↔approve요청 모양 정합 재확인 — 제 9/6 안에 빈칸 셋(productType·name·unlinkedUntil) 있었다. 고친 모양은#475코멘트(09-11).#476쪽은 바꿀 것 없음POST /internal/template/propose항목 후보. 재현율 분모라 F-EXT-003 과 같이 (#474코멘트)② server — 강희진 (
#475)GET /products/rubrics[?productType]·/{itemId}→/internal/rubrics. @junseo2323 님이 9/6 에 이것만 먼저 달라고 했고 5일째 답이 없다AiServiceClient.proposeRubric(parsedDocument, itemIds?)+POST /products/{id}/rubric/propose프록시 (읽기 전용 · 상태 안 남김)POST /products/{id}/rubric/approve— 요청에u1Requires·status·relatedMisconceptions(비면unlinked_until) 를 사람이 채우고, 응답은{yaml, catalogDiff, warnings, appliedOnDeploy: true}. 파일 안 쓴다 · DB 안 쓴다catalogDiff에risk_item_catalog.yaml거울 줄이 같이 나가야RiskItemCatalogMirrorsRubricsTest가 안 빨개진다 — 사슬을 사람 기억에 안 맡긴다② 권한·기록 — 정세현
rbac_policy.yaml에rubric:read—#610. ❗제가 적은 「(audited) · 프록시와 같이」가 둘 다 틀렸다(정세현 실측):everyAuditedActionIsReachable이 «audited 인데 아무도 안 쓰는 action» 을 잡아 audited 는 프록시 뒤여야 하고, audited 여부 자체도 미결이다. 순서: ① permissions(#610) → ② 프록시(강희진) → ③ audited 판단(정세현, ② 위에 스택). ❗그리고#610리뷰: SELLER 를 빼야 한다 — README:92 «루브릭은 판매 직원에게 열지 않는다»rubric:approve— ADMIN·COMPL 범위. 판매 라인(SELLER)은 없다(ADR-001 과 같은 결)warnings문면 — "루브릭이 바뀌면 eval 표본이 낡는다". 응답이 들고 있어야curl로 쓰는 사람도 본다③ web — 오준서 (
#494)15-demo-mode.sh지도에/api/products/rubrics줄 — SELLER 가 없어서 ADMIN 으로 (#4949/7 코멘트)evidence.spans로 원문에 표시(P6).u1Requires를 사람이 정하는 칸과relatedMisconceptions↔unlinked_until배타를 화면이 강제한다(#284(a) 가 그 자리에서 3주)안전장치 — 이미 있는 것 (새로 만들 것 없음)
순서 (제안)
앞 셋은 S-01(
#406)과 무관하고 채점 경로를 안 건드린다 — 9/6 의 「데모 뒤」 근거가 안 걸린다.관련:
#474·#475·#494·#473·#476#493#499·#367(u1_requires) ·#284(unlinked_until) ·#409(eval 사슬)@hd0rable @gitIt-sehyeon @junseo2323