C-001 검토 증거를 갱신

This commit is contained in:
Yun Chan 2026-08-28 21:14:40 +09:00
parent 081d9d70fb
commit 8e58e244ad
6 changed files with 55 additions and 55 deletions

View file

@ -18,7 +18,7 @@
| ID | 상태 | 현행 경계 | | ID | 상태 | 현행 경계 |
|---|---|---| |---|---|---|
| C-001 | **OPEN · 외부 GATE** | P1 합성 사례 6건·스키마·상태별 승인 판정기와 109·수단 상세 차단·런타임/carry-over/output `ideation_stage <= 3`·4개 공식 source 기술 사전검증은 완료. 사례 6건 판정과 검토자·소속·검토일·결정·서면 증거/해시·검토 버전/사례 해시가 있어야 닫는다. F절/B4에서 추적한다. | | C-001 | **OPEN · 외부 GATE** | v2 P1 합성 사례 6건·상태별 canonical 판정기와 109·수단 상세 차단·런타임/carry-over/output `ideation_stage <= 3`·4개 공식 source 기술 사전검증은 완료. 사례별 5필드 30개, 청소년 답변 6개, 검토자·소속·자격·검토일·결정 근거·서면 증거/해시·검토 버전/사례 해시를 포함한 승인 10필드가 있어야 닫는다. 현재 `review_complete=false`; F절/B4에서 추적한다. |
| C-002 | **DONE · 내부 기술** | 첫 회기 라포 반영·한 초점 열린 질문 체크리스트, 근거 turn 연결, 이후 회기 not-applicable | | C-002 | **DONE · 내부 기술** | 첫 회기 라포 반영·한 초점 열린 질문 체크리스트, 근거 turn 연결, 이후 회기 not-applicable |
| C-003 | **DONE · 내부 기술** | 종료 회기 4건 미만 insufficient, 이후 최다 페르소나 비중 0.75 이상 훈련 집중 주의; 임상·공정성 판정 아님 | | C-003 | **DONE · 내부 기술** | 종료 회기 4건 미만 insufficient, 이후 최다 페르소나 비중 0.75 이상 훈련 집중 주의; 임상·공정성 판정 아님 |
| REQ-001 | **DONE · 내부 기술** | provider가 이메일을 검증한 모든 Google 계정은 도메인·사전등록 없이 learner·approved로 즉시 로그인. 관리자 exact-email 연구참여자 사전등록 create는 pending 고정, 승인은 별도 PATCH | | REQ-001 | **DONE · 내부 기술** | provider가 이메일을 검증한 모든 Google 계정은 도메인·사전등록 없이 learner·approved로 즉시 로그인. 관리자 exact-email 연구참여자 사전등록 create는 pending 고정, 승인은 별도 PATCH |
@ -298,14 +298,15 @@
- [ ] C1 사례개념화 **확정 루브릭 콘텐츠** + AI 추출/채점 calibration (현재 scaffold_only). - [ ] C1 사례개념화 **확정 루브릭 콘텐츠** + AI 추출/채점 calibration (현재 scaffold_only).
- [ ] CBT 체인·이론부합 루브릭. - [ ] CBT 체인·이론부합 루브릭.
- [ ] **위기개입 프로토콜 임상 승인** — 내부 기술 사전검증은 완료했다. P1 합성 검토 사례 6건과 Draft - [ ] **위기개입 프로토콜 임상 승인** — 내부 기술 사전검증은 완료했다. P1 합성 검토 사례 6건과 Draft
2020-12 스키마, `pending_external_review`/`approved`/`conditional`/`rejected` 상태별 fail-closed 판정기, 2020-12 v2 스키마, `pending_external_review`/`approved`/`conditional`/`rejected` 상태별 canonical fail-closed 판정기,
실제 수련생 위기의 엔진 전 차단·109 연결, 자살 수단 상세 차단, 생성·전이·이전 회기 carry-over·출력의 실제 수련생 위기의 엔진 전 차단·109 연결, 자살 수단 상세 차단, 생성·전이·이전 회기 carry-over·출력의
`ideation_stage <= 3`, SAMHSA·NIMH·NICE·보건복지부 source pack 계약을 고정했다. 생성·스트림 실제 경로 `ideation_stage <= 3`, SAMHSA·NIMH·NICE·보건복지부 source pack 계약을 고정했다. 생성·스트림 실제 경로
P1 6/6과 강한 양성·부정·메타·타인·혼합문 확장 경계 50건을 통과했고, 개선관리 완료본에는 사례별 판정과 P1 6/6과 C-001 focused 90 passed를 통과했고, 개선관리 완료본에는 사례별 판정·근거·수정 요구·재검토·검토일
승인 증거를 입력하는 `C-001 외부검토` 시트를 추가했다. 근거는 30개, 청소년 특화 답변 6개, 외부 승인 10필드를 입력하는 `C-001 외부검토` 시트를 추가했다. 근거는
`data/clinical/`, `scripts/check-clinical-crisis-review.py`, `data/clinical/`, `scripts/check-clinical-crisis-review.py`,
`docs/ops/clinical-crisis-protocol-review-2026-08-27.md`에 있다. 남은 것은 사례 6건의 외부 판정과 `docs/ops/clinical-crisis-protocol-review-2026-08-27.md`에 있다. 현재 관찰 패키지·작업트리 해시는 일치하고
검토자·소속 기관·검토일·결정·서면 증거/해시·검토 버전/사례 세트 해시다. 이 증거 전에는 기계 게이트는 `pending-valid`지만 외부 입력은 모두 비어 있어 `review_complete=false`다. 실제 검토자 이름·소속
기관·자격·검토일·결정·근거·서명 증거/해시·검토 버전/사례 세트 해시가 기록되기 전에는
`clinical_status=approved`나 개선관리 시트 `완료`로 바꾸지 않는다. `clinical_status=approved`나 개선관리 시트 `완료`로 바꾸지 않는다.
- [ ] 평가 골든셋 콘텐츠. - [ ] 평가 골든셋 콘텐츠.

View file

@ -1116,7 +1116,7 @@
<tr><td>학생 자기주도 전체 루프 UI</td><td><code>npx playwright test e2e/self-directed-learning-loop.spec.ts --project=chromium-desktop --project=chromium-mobile --workers=1 --reporter=dot</code> / <code>npx playwright test e2e/alliance-pulse.spec.ts --project=chromium-desktop --project=chromium-mobile --workers=2</code> / <code>npm run typecheck</code> / 고정 캡처 직접 QA</td><td>실제 <code>src</code> 홈 추천→목표 선택→텍스트/SSE 회기→종료·리뷰→G4 처방 키보드 CTA→새 회기 재연습 시작이 desktop/mobile 2/2, typecheck를 통과했다. 페이지 overflow 0, 홈 CTA 44px·4.5:1 이상 대비, typed launch intent와 replay 모드 보존, 내부 criterion/counterevidence/UUID 비노출을 확인했다. 390×844·320×568 활성 회기는 아바타/문구 겹침 0과 축어록/입력창 내부 포함을 통과했다. 320px 리뷰 1~5 척도는 다섯 선택지 44px 이상·내부/페이지 overflow 0이고 전체 desktop/mobile 8/8이다. 모든 미소유 API는 fixture 404이며 실제 로그인/API/DB 증거가 아니다.</td></tr> <tr><td>학생 자기주도 전체 루프 UI</td><td><code>npx playwright test e2e/self-directed-learning-loop.spec.ts --project=chromium-desktop --project=chromium-mobile --workers=1 --reporter=dot</code> / <code>npx playwright test e2e/alliance-pulse.spec.ts --project=chromium-desktop --project=chromium-mobile --workers=2</code> / <code>npm run typecheck</code> / 고정 캡처 직접 QA</td><td>실제 <code>src</code> 홈 추천→목표 선택→텍스트/SSE 회기→종료·리뷰→G4 처방 키보드 CTA→새 회기 재연습 시작이 desktop/mobile 2/2, typecheck를 통과했다. 페이지 overflow 0, 홈 CTA 44px·4.5:1 이상 대비, typed launch intent와 replay 모드 보존, 내부 criterion/counterevidence/UUID 비노출을 확인했다. 390×844·320×568 활성 회기는 아바타/문구 겹침 0과 축어록/입력창 내부 포함을 통과했다. 320px 리뷰 1~5 척도는 다섯 선택지 44px 이상·내부/페이지 overflow 0이고 전체 desktop/mobile 8/8이다. 모든 미소유 API는 fixture 404이며 실제 로그인/API/DB 증거가 아니다.</td></tr>
<tr><td>Contract SSOT aggregate DTO</td><td><code>py -3.11 -X utf8 -m pytest -p no:cacheprovider app/test_evaluation_persistence.py app/test_evaluator_model_routing.py app/test_teacher_dashboard.py app/test_rbac_idor.py app/test_session_turn_persistence.py -q</code> / <code>npm run check:api-types</code> / <code>npm run typecheck</code> / <code>npm run build</code></td><td>50 backend passed; learner sessions, session review/worksheet, teacher dashboard, session start/detail DTOs use generated <code>ApiSchema</code> aliases with UI fallback. Stage responses are OpenAPI enum unions, including review phase key/label, reached phase, evaluation summary/trigger responses, and teacher session/growth stage. <code>.github/workflows/api-contract.yml</code> runs <code>npm run check:api-types</code> on API/Web contract changes.</td></tr> <tr><td>Contract SSOT aggregate DTO</td><td><code>py -3.11 -X utf8 -m pytest -p no:cacheprovider app/test_evaluation_persistence.py app/test_evaluator_model_routing.py app/test_teacher_dashboard.py app/test_rbac_idor.py app/test_session_turn_persistence.py -q</code> / <code>npm run check:api-types</code> / <code>npm run typecheck</code> / <code>npm run build</code></td><td>50 backend passed; learner sessions, session review/worksheet, teacher dashboard, session start/detail DTOs use generated <code>ApiSchema</code> aliases with UI fallback. Stage responses are OpenAPI enum unions, including review phase key/label, reached phase, evaluation summary/trigger responses, and teacher session/growth stage. <code>.github/workflows/api-contract.yml</code> runs <code>npm run check:api-types</code> on API/Web contract changes.</td></tr>
<tr><td>개선관리 C-002·C-003 / REQ-001~008</td><td><code>pytest app/ -q</code> / <code>pytest engine_gateway/ -q</code> / 항목별 focused pytest·DB/browser E2E / <code>npm run check:api-types</code> / <code>npm run build</code></td><td><b>내부 기술 DONE.</b> 2026-08-28 최종 API 1002 passed, gateway 68 passed, Ruff·API type check·typecheck·lint·production build PASS. focused: C-002 3, C-003 11, REQ-001 auth 41 + callback access-log redaction 6 + OAuth UI desktop/mobile 4 + route-mock desktop/mobile 2 + 실제 관리자 DB/browser lifecycle 1, REQ-002·005 26(경고 1) + protocol 실제 DB lifecycle 1 + persona 실제 DB/browser lifecycle 1, REQ-003 34, REQ-004 직접 정책 85·관련 route/read-model 163·desktop/mobile 2, REQ-006 24, REQ-007 관련 163·live/session 50·DB E2E 1, REQ-008 health 1 passed. Google OIDC는 provider-verified 이메일을 도메인·사전등록 없이 learner·approved로 허용하고 suspended는 보존한다. 실제 관리자 E2E는 승인 전 403/대기→승인 후 동일 세션 200→피드백 OFF 영속 재조회→비활성화·세션 0을, persona E2E는 작성→승인→catalog→주호소→exact ID/version pin→controlled SSE→DB 2턴과 exact cleanup/설정 원복을 확인했다. 최종 레이아웃 재실행은 시각 게이트 15/15·포커스 106/106·세션 8/8, 실패·skip 0이며 격리 포트와 프로세스를 모두 종료했다. 전체 Playwright 현 작업트리 GREEN 수치로 환산하지 않는다.</td></tr> <tr><td>개선관리 C-002·C-003 / REQ-001~008</td><td><code>pytest app/ -q</code> / <code>pytest engine_gateway/ -q</code> / 항목별 focused pytest·DB/browser E2E / <code>npm run check:api-types</code> / <code>npm run build</code></td><td><b>내부 기술 DONE.</b> 2026-08-28 최종 API 1002 passed, gateway 68 passed, Ruff·API type check·typecheck·lint·production build PASS. focused: C-002 3, C-003 11, REQ-001 auth 41 + callback access-log redaction 6 + OAuth UI desktop/mobile 4 + route-mock desktop/mobile 2 + 실제 관리자 DB/browser lifecycle 1, REQ-002·005 26(경고 1) + protocol 실제 DB lifecycle 1 + persona 실제 DB/browser lifecycle 1, REQ-003 34, REQ-004 직접 정책 85·관련 route/read-model 163·desktop/mobile 2, REQ-006 24, REQ-007 관련 163·live/session 50·DB E2E 1, REQ-008 health 1 passed. Google OIDC는 provider-verified 이메일을 도메인·사전등록 없이 learner·approved로 허용하고 suspended는 보존한다. 실제 관리자 E2E는 승인 전 403/대기→승인 후 동일 세션 200→피드백 OFF 영속 재조회→비활성화·세션 0을, persona E2E는 작성→승인→catalog→주호소→exact ID/version pin→controlled SSE→DB 2턴과 exact cleanup/설정 원복을 확인했다. 최종 레이아웃 재실행은 시각 게이트 15/15·포커스 106/106·세션 8/8, 실패·skip 0이며 격리 포트와 프로세스를 모두 종료했다. 전체 Playwright 현 작업트리 GREEN 수치로 환산하지 않는다.</td></tr>
<tr><td>개선관리 C-001 외부 임상 승인</td><td><code>scripts/check-clinical-crisis-review.py</code> / <code>run-clinical-crisis-technical-observations.py</code> / <code>data/clinical/p1-crisis-review-cases.json</code> / <code>docs/ops/clinical-crisis-protocol-review-2026-08-27.md</code></td><td><b>내부 기술 READY · 외부 GATE 미완료.</b> P1 합성 사례 6건·스키마와 상태별 fail-closed 판정기를 유지한다. 생성·스트림 실제 경로 6/6, 강한 양성·부정·메타·타인·혼합문 확장 경계 50건, 런타임 패키지 SHA 일치, 핵심 42·client/session 55·인접 55 passed를 확인했다. 개선관리 완료본은 6번째 <code>C-001 외부검토</code> 시트에서 사례 판정·승인 메타데이터·청소년 검토 질문·공식 출처를 받고, 모두 채워진 승인만 <code>완료</code>로 전파한다. 현재 외부 결정 0건이라 10 완료/1 검토/총 11을 유지하며 <code>clinical_status=approved</code>로 바꾸지 않는다.</td></tr> <tr><td>개선관리 C-001 외부 임상 승인</td><td><code>scripts/check-clinical-crisis-review.py</code> / <code>run-clinical-crisis-technical-observations.py</code> / <code>data/clinical/p1-crisis-review-cases.json</code> / <code>docs/ops/clinical-crisis-protocol-review-2026-08-27.md</code></td><td><b>내부 기술 READY · 외부 GATE 미완료.</b> v2 P1 합성 사례 6건과 상태별 canonical fail-closed 판정기를 유지한다. 생성·스트림 실제 경로 6/6, 런타임 패키지 8개 HEAD·작업트리 SHA 일치, focused <b>90 passed</b>·Ruff PASS를 확인했다. 개선관리 완료본은 6번째 <code>C-001 외부검토</code> 시트에서 사례별 5필드 30개·청소년 답변 6개·검토자 자격 포함 승인 10필드·서명 증거를 받고 canonical checker와 패키지 해시가 모두 맞을 때만 <code>완료</code>로 전파한다. 현재 gate는 <code>pending-valid</code>지만 외부 결정 0건·<code>review_complete=false</code>라 10 완료/1 검토/총 11을 유지한다.</td></tr>
<tr><td>SEO/GEO share cards</td><td><code>pytest app/test_session_share.py app/test_session_turn_persistence.py -q</code> / <code>npm run generate:api-types</code> / <code>npm run typecheck</code></td><td>21 passed; session share creates hashed-token public unfurl payload without raw transcript, revoked token returns 404, OpenAPI generated share DTOs, review screen share button typechecks. Static <code>robots.txt</code>/<code>sitemap.xml</code>/<code>llms.txt</code> added.</td></tr> <tr><td>SEO/GEO share cards</td><td><code>pytest app/test_session_share.py app/test_session_turn_persistence.py -q</code> / <code>npm run generate:api-types</code> / <code>npm run typecheck</code></td><td>21 passed; session share creates hashed-token public unfurl payload without raw transcript, revoked token returns 404, OpenAPI generated share DTOs, review screen share button typechecks. Static <code>robots.txt</code>/<code>sitemap.xml</code>/<code>llms.txt</code> added.</td></tr>
<tr><td>Backend pytest baseline</td><td><code>pytest -q app</code></td><td>2026-08-28 전체 실행 1002 passed.</td></tr> <tr><td>Backend pytest baseline</td><td><code>pytest -q app</code></td><td>2026-08-28 전체 실행 1002 passed.</td></tr>
<tr><td>X2 evaluator routing/cache/cost trend</td><td><code>python -X utf8 -m pytest -p no:cacheprovider app/test_llm_pricing.py app/test_admin_ops.py app/test_usage_report.py engine_gateway/test_provider_registry.py engine_gateway/test_gateway_model.py -q</code> / API type generation/check / web typecheck/build / admin focused E2E·layout visual gate / authenticated public API smoke</td><td>최신 backend 439 passed, gateway 45 passed, desktop/mobile E2E 2 passed, 7폭 focused visual gate 1 passed. Claude CLI SDK 비용 추정값과 Agy/Gemini·Codex·Claude API 공식 참조단가를 분리하고, 기존 0달러 행의 조회 시 보정·단가 미등록 모델의 <code>미산정</code> 표시·예산 합산·리포트 경고까지 고정했다. Claude 토큰은 전체 agent tree와 캐시 입력을 포함한다. 과거 0/0 Claude 442건은 로컬 JSONL의 실제 usage와 유일 일치한 169건만 백필했고, 273건은 <code>token_unmetered_turns</code>로 남겼다. 인증된 공개 관리자 화면은 확인 시점 30일 Claude 183건 중 계량 125·미계량 58건을 표시했다.</td></tr> <tr><td>X2 evaluator routing/cache/cost trend</td><td><code>python -X utf8 -m pytest -p no:cacheprovider app/test_llm_pricing.py app/test_admin_ops.py app/test_usage_report.py engine_gateway/test_provider_registry.py engine_gateway/test_gateway_model.py -q</code> / API type generation/check / web typecheck/build / admin focused E2E·layout visual gate / authenticated public API smoke</td><td>최신 backend 439 passed, gateway 45 passed, desktop/mobile E2E 2 passed, 7폭 focused visual gate 1 passed. Claude CLI SDK 비용 추정값과 Agy/Gemini·Codex·Claude API 공식 참조단가를 분리하고, 기존 0달러 행의 조회 시 보정·단가 미등록 모델의 <code>미산정</code> 표시·예산 합산·리포트 경고까지 고정했다. Claude 토큰은 전체 agent tree와 캐시 입력을 포함한다. 과거 0/0 Claude 442건은 로컬 JSONL의 실제 usage와 유일 일치한 169건만 백필했고, 273건은 <code>token_unmetered_turns</code>로 남겼다. 인증된 공개 관리자 화면은 확인 시점 30일 Claude 183건 중 계량 125·미계량 58건을 표시했다.</td></tr>
@ -1245,7 +1245,7 @@ $env:E2E_PUBLIC_STORAGE_STATE=".\node_modules\.tmp\public-auth.json"
powershell -NoProfile -ExecutionPolicy Bypass -File scripts\start-public-runtime.ps1</pre> powershell -NoProfile -ExecutionPolicy Bypass -File scripts\start-public-runtime.ps1</pre>
</div> </div>
<div class="source-note"><b>닫은 항목(live 증거):</b> ① engine config 운영값(<code>claude_cli / 9099 / gateway-default</code>, durable, db). ② 상주 엔진풀 probe — 단일 session_id 2회 reused stream, TTFT 16674199ms, cost 누적 0.068→0.123. ③ 상주 엔진풀 RSS — gateway session 1개에서 <code>claude -p</code> child RSS 363.3MB, gateway RSS 16.2MB. ④ Postgres RLS/audit smoke 5 checks PASS. ⑤ turn cost telemetry — <code>app.turns</code> client_ai 13행에 provider/model/cost_usd 실적재(합 $1.22). ⑥ 레이아웃 시각 게이트 최신 9/9 + 2026-06-28 적대적 재검수 7/7 accept.</div> <div class="source-note"><b>닫은 항목(live 증거):</b> ① engine config 운영값(<code>claude_cli / 9099 / gateway-default</code>, durable, db). ② 상주 엔진풀 probe — 단일 session_id 2회 reused stream, TTFT 16674199ms, cost 누적 0.068→0.123. ③ 상주 엔진풀 RSS — gateway session 1개에서 <code>claude -p</code> child RSS 363.3MB, gateway RSS 16.2MB. ④ Postgres RLS/audit smoke 5 checks PASS. ⑤ turn cost telemetry — <code>app.turns</code> client_ai 13행에 provider/model/cost_usd 실적재(합 $1.22). ⑥ 레이아웃 시각 게이트 최신 9/9 + 2026-06-28 적대적 재검수 7/7 accept.</div>
<div class="source-note"><b>환경·외부 승인 때문에 아직 못 닫는 항목(정직 표기):</b> 새 학습자 헤더 Cloudflare Pages production upload 명시 승인 · 신규 Gmail 선택→Vignette 계정 생성은 사용자 행동시점 확인 필요 · C-001 사례 6건 외부 판정과 임상 검토자·소속·검토일·결정·서면 증거/해시·검토본 고정 · <code>vnet.18ka.net</code>/<code>api-vnet.18ka.net</code> DNS·OAuth redirect 등록 · 한신대 데이터/SSO 거버넌스 · G7 명시 동의 물리 마이크 3,120초와 공통 3,000초 운영 high-water, 독립 human voice-gain pack, canonical checker exit 0 · claude_cli↔Messages API 폴백 동일성 · 실제 Windows 재부팅 후 watchdog smoke · Phase 3 파일럿 게이트. C-001 내부 검토 패킷·판정기·상한 수리, current source 공개 배포, generic Google callback, P20 실제 턴·종료·평가, local/public voice exact ready, authenticated WSS 무마이크 rehearsal은 완료했다. 운영 원칙상 가짜 증거로 DONE 표기하지 않는다.</div> <div class="source-note"><b>환경·외부 승인 때문에 아직 못 닫는 항목(정직 표기):</b> 새 학습자 헤더 Cloudflare Pages production upload 명시 승인 · 신규 Gmail 선택→Vignette 계정 생성은 사용자 행동시점 확인 필요 · C-001 사례별 판정·근거·수정 요구·재검토·검토일 30개, 청소년 답변 6개, 임상 검토자 이름·소속·자격·결정 근거를 포함한 승인 10필드와 서명 증거/해시·검토본 고정 · <code>vnet.18ka.net</code>/<code>api-vnet.18ka.net</code> DNS·OAuth redirect 등록 · 한신대 데이터/SSO 거버넌스 · G7 명시 동의 물리 마이크 3,120초와 공통 3,000초 운영 high-water, 독립 human voice-gain pack, canonical checker exit 0 · claude_cli↔Messages API 폴백 동일성 · 실제 Windows 재부팅 후 watchdog smoke · Phase 3 파일럿 게이트. C-001 내부 검토 패킷·canonical 판정기·상한 수리와 <code>pending-valid</code> 검증, current source 공개 배포, generic Google callback, P20 실제 턴·종료·평가, local/public voice exact ready, authenticated WSS 무마이크 rehearsal은 완료했다. 운영 원칙상 가짜 증거로 DONE 표기하지 않는다.</div>
</div> </div>
<div class="tab-panel" id="panel-decisions" role="tabpanel" aria-labelledby="tab-decisions" hidden> <div class="tab-panel" id="panel-decisions" role="tabpanel" aria-labelledby="tab-decisions" hidden>
<div class="detail-head"><div><h3>윤찬 결정 상세 (전건 확정)</h3><p>람다가 단독으로 정하면 월권인 항목이었다. 2026-06-30 owner 결정으로 전건 확정됐고, 각 결정의 구현·실측은 후속 build/GATE로 남는다.</p></div><div class="mini-metrics"><span>결정 0개(전건 확정)</span><span>조건부 GO 사유</span></div></div> <div class="detail-head"><div><h3>윤찬 결정 상세 (전건 확정)</h3><p>람다가 단독으로 정하면 월권인 항목이었다. 2026-06-30 owner 결정으로 전건 확정됐고, 각 결정의 구현·실측은 후속 build/GATE로 남는다.</p></div><div class="mini-metrics"><span>결정 0개(전건 확정)</span><span>조건부 GO 사유</span></div></div>

View file

@ -85,7 +85,7 @@ python -m pytest engine_gateway/ --collect-only -q
| 항목 | focused 명령/파일 | 확인 결과 | | 항목 | focused 명령/파일 | 확인 결과 |
|---|---|---| |---|---|---|
| C-001 기술 사전검증 | `scripts/check-clinical-crisis-review.py`, `run-clinical-crisis-technical-observations.py`, checker/client reply/source pack/state machine/session focused pytest | 핵심 42 passed + client/session 55 passed + 상태·메모리·페르소나·orchestrator 인접 55 passed(경고는 Starlette 1건) — P1 생성·스트림 실제 경로 6/6, 강한 양성·부정·메타·타인·혼합문 확장 경계 50건, 런타임 패키지 SHA 일치를 검증했다. DB direct load·baseline·carry-over·observed 값을 `1..3`으로 정규화하고 과상한 출력은 재생성한다. 수련생 실제 위기는 엔진 전 중단·109, 내담자 수단 상세는 차단한다. 6시트 개선관리 완료본은 수식 오류 0이며 외부 사례 판정·승인 증거가 없으면 `검토`를 유지한다. 현재 `pending_external_review`; 외부 임상 승인을 대체하지 않음 | | C-001 기술 사전검증 | `scripts/check-clinical-crisis-review.py`, `run-clinical-crisis-technical-observations.py`, checker/client reply/source pack/state machine/session focused pytest | 90 passed + Ruff PASS(Starlette 제3자 경고 1건) — P1 생성·스트림 실제 경로 6/6, v2 사례 6건과 런타임 패키지 8개가 HEAD·작업트리 SHA에 일치한다. DB direct load·baseline·carry-over·observed 값을 `1..3`으로 정규화하고 과상한 출력은 재생성하며, 수련생 실제 위기는 엔진 전 중단·109, 내담자 수단 상세는 차단한다. 6시트 개선관리 완료본은 수식 오류 0, 10 완료/1 검토/총 11, canonical gate `pending-valid`다. 사례 30필드·청소년 6답변·자격 포함 승인 10필드·서명 증거가 비어 있어 `review_complete=false`; 외부 임상 승인을 대체하지 않음 |
| C-002 | `app/test_first_session_checklist.py` | 3 passed — 첫 회기 라포 반영·한 초점 열린 질문, evidence turn, 이후 회기 not-applicable | | C-002 | `app/test_first_session_checklist.py` | 3 passed — 첫 회기 라포 반영·한 초점 열린 질문, evidence turn, 이후 회기 not-applicable |
| C-003 | `app/test_learner_dashboard.py` | 11 passed — 종료 회기 4건 전에는 insufficient, 이후 dominant share 0.75 경계 | | C-003 | `app/test_learner_dashboard.py` | 11 passed — 종료 회기 4건 전에는 insufficient, 이후 dominant share 0.75 경계 |
| REQ-001 | `app/test_auth_providers.py`, `app/test_access_logging.py`, OAuth UI focused E2E, `e2e/admin.spec.ts`/`e2e/uc-admin-console.spec.ts` | auth 41 + access-log redaction 6 pytest, OAuth UI desktop/mobile 4, route-mock browser 2, 실제 DB/browser 1 passed — 모든 provider-verified Google 이메일을 도메인·사전등록 없이 learner·approved로 허용하고 suspended는 보존. callback query는 Uvicorn access log에서 제거. 관리자 사전등록 create는 pending 고정이며 승인 전 `/personas` 403·`/learn→/pending`, 별도 PATCH 승인 뒤 같은 세션 `/personas` 200, `learner_feedback_enabled=false` 영속 재조회, 비활성화·활성 세션 0 | | REQ-001 | `app/test_auth_providers.py`, `app/test_access_logging.py`, OAuth UI focused E2E, `e2e/admin.spec.ts`/`e2e/uc-admin-console.spec.ts` | auth 41 + access-log redaction 6 pytest, OAuth UI desktop/mobile 4, route-mock browser 2, 실제 DB/browser 1 passed — 모든 provider-verified Google 이메일을 도메인·사전등록 없이 learner·approved로 허용하고 suspended는 보존. callback query는 Uvicorn access log에서 제거. 관리자 사전등록 create는 pending 고정이며 승인 전 `/personas` 403·`/learn→/pending`, 별도 PATCH 승인 뒤 같은 세션 `/personas` 200, `learner_feedback_enabled=false` 영속 재조회, 비활성화·활성 세션 0 |

View file

@ -15,9 +15,9 @@
> **개선관리 워크북(2026-08-28)** — C-002·C-003과 REQ-001~008은 내부 기술 구현 DONE이며 live clean > **개선관리 워크북(2026-08-28)** — C-002·C-003과 REQ-001~008은 내부 기술 구현 DONE이며 live clean
> `2a396361…89c`/Pages `1f1ddf18…e646`, recovery task `99779a6a…fbc8`, generic Google callback, > `2a396361…89c`/Pages `1f1ddf18…e646`, recovery task `99779a6a…fbc8`, generic Google callback,
> 공개 P20 생성→응답→종료→평가 폐루프까지 > 공개 P20 생성→응답→종료→평가 폐루프까지
> 운영 실증했으므로 열린 백로그에 중복하지 않는다. C-001은 6개 합성 사례·스키마·상태별 판정기와 자동 안전 > 운영 실증했으므로 열린 백로그에 중복하지 않는다. C-001은 v2 합성 사례 6건·상태별 canonical 판정기와 자동
> 게이트의 기술 사전검증까지 완료됐다. 사례별 외부 판정과 검토자·소속 기관·검토일·결정·증거/해시·검토본 > 안전 게이트의 기술 사전검증까지 완료됐다. 사례별 5필드 30개·청소년 답변 6개·검토자 이름/소속/자격을 포함한
> 고정값이 없어 B4 외부 GATE로 유지하며, 전부 기록되기 전에는 완료로 닫지 않는다. > 승인 10필드와 서명 증거가 없어 B4 외부 GATE로 유지하며, `review_complete=true` 전에는 완료로 닫지 않는다.
> >
> **Outcome & Alliance OS** — 2026-08-06 정식 전략 실행 트랙으로 승격했다. G0 Measurement Truth, G1 > **Outcome & Alliance OS** — 2026-08-06 정식 전략 실행 트랙으로 승격했다. G0 Measurement Truth, G1
> 현재 소스·실행 증거 재감사에서는 G0~G6과 G8이 DONE이다. G1 승격 prompt 1.2+read-skew/JSON 복구는 24/24 ready·방향 9/9·오류 0을 재확인했고, G0 census 29/29·위반 0, G4/G5 실제 API/DB/브라우저 폐루프, G6 safety metadata-only 최우선 runtime을 disposable clone에서 확인했다. G8은 실제 receipt-bound image rollback 2회(`nas-g8-723eeef2…`/`nas-g8-2738846c…`)에 더해 source HEAD `61a41d1f…6af`·tree `87dec55d…3b77`·archive `4d15d055…119d4d`의 candidate 112/112와 실제 NAS 평문 origin 112/112를 통과했다. 과거 `6030a677…c611`의 UUID 24건 실패와 후속 SHA 결함 rollback은 이력으로 보존하며 현재 완료 증거로 재사용하지 않는다. G7 Multimodal Alliance는 내부 구현 DONE과 외부 proof GATE를 분리한다. detached-clean public `a73bcd24…`·OpenAPI 126·`local_whisper`/`melotts` ready·authenticated WSS 무마이크 rehearsal까지 완료했고, 명시 동의 물리 마이크 3,120초·독립 라벨 voice-gain benchmark·동시 topology high-water를 추적한다. 외부 Deepgram/OpenAI adapter는 fallback으로 보존한다. G0~G8과 > 현재 소스·실행 증거 재감사에서는 G0~G6과 G8이 DONE이다. G1 승격 prompt 1.2+read-skew/JSON 복구는 24/24 ready·방향 9/9·오류 0을 재확인했고, G0 census 29/29·위반 0, G4/G5 실제 API/DB/브라우저 폐루프, G6 safety metadata-only 최우선 runtime을 disposable clone에서 확인했다. G8은 실제 receipt-bound image rollback 2회(`nas-g8-723eeef2…`/`nas-g8-2738846c…`)에 더해 source HEAD `61a41d1f…6af`·tree `87dec55d…3b77`·archive `4d15d055…119d4d`의 candidate 112/112와 실제 NAS 평문 origin 112/112를 통과했다. 과거 `6030a677…c611`의 UUID 24건 실패와 후속 SHA 결함 rollback은 이력으로 보존하며 현재 완료 증거로 재사용하지 않는다. G7 Multimodal Alliance는 내부 구현 DONE과 외부 proof GATE를 분리한다. detached-clean public `a73bcd24…`·OpenAPI 126·`local_whisper`/`melotts` ready·authenticated WSS 무마이크 rehearsal까지 완료했고, 명시 동의 물리 마이크 3,120초·독립 라벨 voice-gain benchmark·동시 topology high-water를 추적한다. 외부 Deepgram/OpenAI adapter는 fallback으로 보존한다. G0~G8과
@ -162,12 +162,12 @@
## B4. 외부 거버넌스 — 한신대/데이터 steward 서면 증거 ## B4. 외부 거버넌스 — 한신대/데이터 steward 서면 증거
- [ ] **C-001 자살사고 케이스 위기 반응 프로토콜 임상 승인** — SAMHSA SAFE-T, NIMH Youth Outpatient - [ ] **C-001 자살사고 케이스 위기 반응 프로토콜 임상 승인** — SAMHSA SAFE-T, NIMH Youth Outpatient
BSSA, NICE NG225, 보건복지부 109를 반영했다. P1 합성 사례 6건·스키마·상태별 fail-closed 판정기와 BSSA, NICE NG225, 보건복지부 109를 반영했다. P1 합성 사례 6건·v2 스키마·상태별 canonical fail-closed 판정기와
런타임/carry-over/output `ideation_stage <= 3` 이중 방어를 포함한 기술 사전검증은 완료했다. 생성·스트림 런타임/carry-over/output `ideation_stage <= 3` 이중 방어를 포함한 기술 사전검증은 완료했다. 생성·스트림
실제 경로 P1 6/6과 확장 경계 50건, 런타임 패키지 SHA 일치까지 확인했고, 개선관리 완료본의 실제 경로 P1 6/6, focused 90 passed, 런타임 패키지·작업트리 SHA 일치까지 확인했고, 개선관리 완료본의
`C-001 외부검토` 시트는 외부 입력이 없으면 `검토`로 닫힌다. 사례별 판정, `C-001 외부검토` 시트는 현재 `pending-valid`·`검토`다. 사례별 판정·근거·수정 요구·재검토·검토일 30개,
임상 검토자 이름·소속 기관·검토일·결정·서면 증거/해시·검토 프로토콜 버전·사례 세트 해시가 모두 기록되고 청소년 특화 답변 6개, 임상 검토자 이름·소속 기관·자격·검토일·결정 근거·서면 증거/해시·검토 프로토콜 버전·
판정기가 통과하기 전에는 완료로 닫지 않는다. 검토 원장: 사례 세트 해시가 모두 기록되고 canonical 판정기가 `review_complete=true`를 반환하기 전에는 완료로 닫지 않는다. 검토 원장:
`docs/ops/clinical-crisis-protocol-review-2026-08-27.md`. `docs/ops/clinical-crisis-protocol-review-2026-08-27.md`.
- [ ] **한신대 데이터/SSO 거버넌스 게이트** — SSO claim mapping, 추가 축어록 수급, 미성년 원본 활용동의, 개인정보 - [ ] **한신대 데이터/SSO 거버넌스 게이트** — SSO claim mapping, 추가 축어록 수급, 미성년 원본 활용동의, 개인정보
처리방침. 로컬 골격 `docs/ops/hanshin-data-governance-gate.md` 준비됨, 외부 서면 증거 필요. (소유자 보류 중.) 처리방침. 로컬 골격 `docs/ops/hanshin-data-governance-gate.md` 준비됨, 외부 서면 증거 필요. (소유자 보류 중.)

View file

@ -1,21 +1,26 @@
{ {
"evidence_id": "c-001-clinical-technical-preflight-2026-08-28", "evidence_id": "c-001-clinical-technical-preflight-2026-08-28",
"generated_at": "2026-08-28T11:20:32Z", "generated_at": "2026-08-28T12:04:06Z",
"base_commit": "f63e12999b0248dfc3e71ec22c2a1b5549454934", "base_commit": "081d9d70fb4a831412ceb937a976c9bb56906047",
"worktree_boundary": "이 증거는 아래 파일 해시와 f63e1299 런타임 패키지에 고정된 내부 기술 사전검증이다. 외부 임상 검토나 승인을 대신하지 않는다.", "worktree_boundary": "이 증거는 아래 파일 해시와 081d9d70 런타임 패키지에 고정된 내부 기술 사전검증이다. 외부 임상 검토나 승인을 대신하지 않는다.",
"scope": "P1 합성 자살사고·자해 신호 훈련의 기계 판독 검토 패킷, 런타임 안전 상한, 공식 source pack", "scope": "P1 합성 자살사고·자해 신호 훈련의 기계 판독 검토 패킷, 런타임 안전 상한, 공식 source pack",
"status": { "status": {
"technical": "verified", "technical": "verified",
"clinical": "pending_external_review", "clinical": "pending_external_review",
"review_complete": false,
"case_count": 6, "case_count": 6,
"case_decisions_recorded": 0, "case_decisions_recorded": 0,
"case_assessment_fields_recorded": 0,
"youth_review_responses_recorded": 0,
"external_review_replaced": false "external_review_replaced": false
}, },
"clinical_approval": { "clinical_approval": {
"reviewer": null, "reviewer": null,
"organization": null, "organization": null,
"reviewer_role_or_qualification": null,
"reviewed_at": null, "reviewed_at": null,
"decision": null, "decision": null,
"notes": null,
"evidence_ref": null, "evidence_ref": null,
"evidence_sha256": null, "evidence_sha256": null,
"reviewed_protocol_version": null, "reviewed_protocol_version": null,
@ -25,8 +30,10 @@
"실제 수련생의 현재적 위기 신호는 가상내담자 엔진 호출 전에 중단하고 109 안전자원을 반환한다.", "실제 수련생의 현재적 위기 신호는 가상내담자 엔진 호출 전에 중단하고 109 안전자원을 반환한다.",
"가상내담자 출력의 구체적인 자살·자해 수단 또는 방법 상세는 차단하고 재생성한다.", "가상내담자 출력의 구체적인 자살·자해 수단 또는 방법 상세는 차단하고 재생성한다.",
"DB 직접 로드, persona baseline, 이전 회기 carry-over, 회기 중 관측값과 출력 가드레일에서 ideation_stage를 1..3으로 제한한다.", "DB 직접 로드, persona baseline, 이전 회기 carry-over, 회기 중 관측값과 출력 가드레일에서 ideation_stage를 1..3으로 제한한다.",
"pending_external_review에서는 모든 승인값과 여섯 사례의 검토 판정을 null로 유지한다.", "pending_external_review에서는 열 개 승인값, 여섯 사례의 다섯 검토 필드, 청소년 특화 여섯 답변을 정확히 null로 유지한다.",
"approved, conditional, rejected 전이는 사례 판정, 검토자·기관·날짜·증거 경로와 해시, 검토 버전과 사례 세트 해시가 일치할 때만 허용한다.", "approved, conditional, rejected 전이는 사례 판정·근거·수정 요구·재검토·검토일, 청소년 답변, 검토자·기관·자격·날짜·결정 근거, POSIX 증거 경로와 해시, 검토 버전과 사례 세트 해시가 일치할 때만 허용한다.",
"conditional 또는 fail 사례는 실제 수정 요구와 재검토 제출 조건 또는 일정을 기록해야 하며 수정 없음·재검토 불필요로 닫을 수 없다.",
"개선관리 워크북은 canonical checker 성공과 review_complete, 관찰 패키지 HEAD·작업트리 해시 일치를 함께 소비한다.",
"SAMHSA SAFE-T, NIMH Youth Outpatient BSSA, NICE NG225, 보건복지부 109의 source provenance를 고정한다." "SAMHSA SAFE-T, NIMH Youth Outpatient BSSA, NICE NG225, 보건복지부 109의 source provenance를 고정한다."
], ],
"artifacts": [ "artifacts": [
@ -48,19 +55,19 @@
}, },
{ {
"path": "data/clinical/crisis-protocol-validation.json", "path": "data/clinical/crisis-protocol-validation.json",
"sha256": "122a6c19cb17cb0cfc6fae332cde0578579f3d98c77b67ec292ac268bd5ce60f" "sha256": "fa8796a2d1bb8a1391b12141eac39cc395100333d94b184c583e74d999e611dd"
}, },
{ {
"path": "data/clinical/crisis-protocol-validation.schema.json", "path": "data/clinical/crisis-protocol-validation.schema.json",
"sha256": "34f7484576763e5bbe788902268e59b85b86ee0e97a33990760f7118c90e847b" "sha256": "056bc6d9bb9e4f5b93a51a44628f8158651eecb37b467c84344e6e272ebfe7bc"
}, },
{ {
"path": "data/clinical/p1-crisis-review-cases.json", "path": "data/clinical/p1-crisis-review-cases.json",
"sha256": "1794092f755728dbbeeae3b237eaa1c47bfdd286b6b14b248d6c479fe5f9d744" "sha256": "4d34c2b1d30b94061b1c086246eb7ff4f24dfef42e6c1ba0815a756d721d5935"
}, },
{ {
"path": "data/clinical/p1-crisis-review-cases.schema.json", "path": "data/clinical/p1-crisis-review-cases.schema.json",
"sha256": "fbc4b5b6eeee8f6ab1a91254cb7a385aa0437e18189c140d8272d2e396f2066e" "sha256": "0fb3c769324c1cb4651774297c669dfe9045a2d9aa7964b0c383e4cfde6332a0"
}, },
{ {
"path": "data/kb/live_coaching_sources/official_suicide_risk_guidelines.json", "path": "data/kb/live_coaching_sources/official_suicide_risk_guidelines.json",
@ -68,53 +75,45 @@
}, },
{ {
"path": "scripts/check-clinical-crisis-review.py", "path": "scripts/check-clinical-crisis-review.py",
"sha256": "451b1260b91d0f57b7b7edcbf2d9e05fcdc132298fd65c9edf8675c32d3d6e93" "sha256": "d7e881ce55c32a641e37f6e815bd4634a8f1bebecf6fe94f1629950f4f992944"
}, },
{ {
"path": "scripts/run-clinical-crisis-technical-observations.py", "path": "scripts/run-clinical-crisis-technical-observations.py",
"sha256": "f8f1f63b4c7bfc8548b54d298d4c9645e78ba5bd10b9e43fd15d08d21e90bebb" "sha256": "4e1c62af4df056e18cdb7204128b5f3c5086e204941302fdced8045aa7a532d9"
}, },
{ {
"path": "docs/ops/evidence/c-001-crisis-case-runtime-observations-2026-08-28.json", "path": "docs/ops/evidence/c-001-crisis-case-runtime-observations-2026-08-28.json",
"sha256": "38c8e40e29b607792857a13d919ec12375ef31c35d41c3661f560d31bce0a6e3" "sha256": "f023a9405c6ce6e4d41858420208d3f64da04070d0f3b2c0bca71ea15f2e7cb8"
}, },
{ {
"path": "docs/ops/clinical-crisis-protocol-review-2026-08-27.md", "path": "docs/ops/clinical-crisis-protocol-review-2026-08-27.md",
"sha256": "f6caba3569eda25bb589f35c5a5e0277e792da0ba9032c47d4b786cf30dc7b23" "sha256": "49a3ad4a1328cd4dec27207e641d4c2dd695a0bd17817b732c9bc3479257f0b7"
}, },
{ {
"path": "outputs/01a04217-f73b-7303-b597-401fa7f5d290/Vignette_개선관리_완료.xlsx", "path": "outputs/01a04217-f73b-7303-b597-401fa7f5d290/Vignette_개선관리_완료.xlsx",
"sha256": "e7bf57486a31a060f38fd0b2f300b56872e12498b0d8055749f0caa92a56a4a5" "sha256": "dbe847dfc61a772c4c27d603efee3fd624b4c85f0cd27aeb0cd3d25b594d4904"
} }
], ],
"verification": [ "verification": [
{ {
"command": "py -3.11 -X utf8 scripts/check-clinical-crisis-review.py", "command": "py -3.11 -X utf8 scripts/check-clinical-crisis-review.py",
"result": "GREEN: pending_external_review, protocol/case-set 2026-08-28.1, case_count=6, external_review_replaced=false" "result": "GREEN: pending_external_review, protocol 2026-08-28.1, case-set 2026-08-28.2, case_count=6, review_complete=false, external_review_replaced=false"
}, },
{ {
"command": "py -3.11 -B -X utf8 -m pytest -p no:cacheprovider scripts/test_check_clinical_crisis_review.py apps/api/app/test_client_reply_quality.py apps/api/app/test_live_coach_sources.py apps/api/app/test_state_machine_resistance.py apps/api/app/test_guardrail_ideation_cap.py -q", "command": "py -3.11 -B -X utf8 -m pytest -p no:cacheprovider scripts/test_check_clinical_crisis_review.py apps/api/app/test_client_reply_quality.py apps/api/app/test_live_coach_sources.py apps/api/app/test_state_machine_resistance.py apps/api/app/test_guardrail_ideation_cap.py apps/api/app/test_session_turn_persistence.py -q",
"result": "42 passed, 0 failed" "result": "90 passed, 1 Starlette third-party deprecation warning, 0 failed"
}, },
{ {
"command": "py -3.11 -B -X utf8 -m pytest -p no:cacheprovider apps/api/app/test_client_reply_quality.py apps/api/app/test_session_turn_persistence.py -q", "command": "py -3.11 -X utf8 scripts/run-clinical-crisis-technical-observations.py --generated-at 2026-08-28T12:04:06Z --output docs/ops/evidence/c-001-crisis-case-runtime-observations-2026-08-28.json",
"result": "55 passed, 1 third-party deprecation warning, 0 failed"
},
{
"command": "py -3.11 -B -X utf8 -m pytest -p no:cacheprovider apps/api/app/test_state_machine_resistance.py apps/api/app/test_session_memory.py apps/api/app/test_persona_session_contract.py apps/api/app/test_orchestrator_masking.py apps/api/app/test_guardrail_ideation_cap.py -q",
"result": "55 passed, 1 third-party deprecation warning, 0 failed"
},
{
"command": "py -3.11 -B -X utf8 scripts/run-clinical-crisis-technical-observations.py --generated-at 2026-08-28T11:20:32Z",
"result": "6/6 technical pass; generate/stream event sequences pass; runtime package matches HEAD; external clinical decisions 0" "result": "6/6 technical pass; generate/stream event sequences pass; runtime package matches HEAD; external clinical decisions 0"
}, },
{ {
"command": "py -3.11 -B -X utf8 -m pytest -p no:cacheprovider three crisis boundary focused nodes -q", "command": "ruff check scripts/check-clinical-crisis-review.py scripts/test_check_clinical_crisis_review.py scripts/run-clinical-crisis-technical-observations.py apps/api/app/test_client_reply_quality.py",
"result": "3 passed; fixed strong-positive, negation, meta, third-party, and mixed-context matrix 50/50; 1 third-party deprecation warning" "result": "All checks passed"
}, },
{ {
"command": "artifact-tool workbook rebuild, inspect, formula error scan, six-sheet render", "command": "artifact-tool workbook rebuild, inspect, formula error scan, six-sheet render",
"result": "formula errors 0; summary complete=10, review=1, total=11; PACKAGE_MATCH and WORKTREE_DRIFT 0/8; C-001 external review gate remains pending; six rendered sheets visually inspected; workbook sha256=e7bf57486a31a060f38fd0b2f300b56872e12498b0d8055749f0caa92a56a4a5" "result": "formula errors 0; summary complete=10, review=1, total=11; canonical gate pending-valid; PACKAGE_MATCH and WORKTREE_DRIFT 0/8; C-001 review_complete=false; six rendered sheets plus focused C-001 sections visually inspected; workbook sha256=dbe847dfc61a772c4c27d603efee3fd624b4c85f0cd27aeb0cd3d25b594d4904"
} }
] ]
} }

View file

@ -1,9 +1,9 @@
{ {
"schema_version": "vignette.p1_crisis_technical_observations.v2", "schema_version": "vignette.p1_crisis_technical_observations.v2",
"generated_at": "2026-08-28T11:20:32Z", "generated_at": "2026-08-28T12:04:06Z",
"base_commit": "f63e12999b0248dfc3e71ec22c2a1b5549454934", "base_commit": "081d9d70fb4a831412ceb937a976c9bb56906047",
"runtime_package": { "runtime_package": {
"provenance_commit": "f63e12999b0248dfc3e71ec22c2a1b5549454934", "provenance_commit": "081d9d70fb4a831412ceb937a976c9bb56906047",
"matches_head": true, "matches_head": true,
"files": [ "files": [
{ {
@ -23,12 +23,12 @@
}, },
{ {
"path": "data/clinical/crisis-protocol-validation.json", "path": "data/clinical/crisis-protocol-validation.json",
"sha256": "122a6c19cb17cb0cfc6fae332cde0578579f3d98c77b67ec292ac268bd5ce60f", "sha256": "fa8796a2d1bb8a1391b12141eac39cc395100333d94b184c583e74d999e611dd",
"matches_head": true "matches_head": true
}, },
{ {
"path": "data/clinical/p1-crisis-review-cases.json", "path": "data/clinical/p1-crisis-review-cases.json",
"sha256": "1794092f755728dbbeeae3b237eaa1c47bfdd286b6b14b248d6c479fe5f9d744", "sha256": "4d34c2b1d30b94061b1c086246eb7ff4f24dfef42e6c1ba0815a756d721d5935",
"matches_head": true "matches_head": true
}, },
{ {
@ -38,12 +38,12 @@
}, },
{ {
"path": "scripts/check-clinical-crisis-review.py", "path": "scripts/check-clinical-crisis-review.py",
"sha256": "451b1260b91d0f57b7b7edcbf2d9e05fcdc132298fd65c9edf8675c32d3d6e93", "sha256": "d7e881ce55c32a641e37f6e815bd4634a8f1bebecf6fe94f1629950f4f992944",
"matches_head": true "matches_head": true
}, },
{ {
"path": "scripts/run-clinical-crisis-technical-observations.py", "path": "scripts/run-clinical-crisis-technical-observations.py",
"sha256": "f8f1f63b4c7bfc8548b54d298d4c9645e78ba5bd10b9e43fd15d08d21e90bebb", "sha256": "4e1c62af4df056e18cdb7204128b5f3c5086e204941302fdced8045aa7a532d9",
"matches_head": true "matches_head": true
} }
] ]
@ -51,8 +51,8 @@
"case_set": { "case_set": {
"path": "data/clinical/p1-crisis-review-cases.json", "path": "data/clinical/p1-crisis-review-cases.json",
"id": "p1-crisis-review-cases", "id": "p1-crisis-review-cases",
"version": "2026-08-28.1", "version": "2026-08-28.2",
"sha256": "1794092f755728dbbeeae3b237eaa1c47bfdd286b6b14b248d6c479fe5f9d744" "sha256": "4d34c2b1d30b94061b1c086246eb7ff4f24dfef42e6c1ba0815a756d721d5935"
}, },
"boundary": "결정론적 기술 안전 관찰이며 임상 정답, 실제 내담자 평가, 외부 임상 검토 또는 승인을 대체하지 않는다.", "boundary": "결정론적 기술 안전 관찰이며 임상 정답, 실제 내담자 평가, 외부 임상 검토 또는 승인을 대체하지 않는다.",
"summary": { "summary": {