C-001 검토 증거를 갱신
This commit is contained in:
parent
081d9d70fb
commit
8e58e244ad
6 changed files with 55 additions and 55 deletions
13
docs/TODO.md
13
docs/TODO.md
|
|
@ -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`나 개선관리 시트 `완료`로 바꾸지 않는다.
|
||||||
- [ ] 평가 골든셋 콘텐츠.
|
- [ ] 평가 골든셋 콘텐츠.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 1667–4199ms, 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 1667–4199ms, 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>
|
||||||
|
|
|
||||||
|
|
@ -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 |
|
||||||
|
|
|
||||||
|
|
@ -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` 준비됨, 외부 서면 증거 필요. (소유자 보류 중.)
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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": {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue