diff --git a/docs/TODO.md b/docs/TODO.md index 03b8007..5b182fa 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -10,7 +10,7 @@ --- -## 개선관리 워크북 동기화 (2026-08-28) +## 개선관리 워크북 동기화 (2026-08-29) > 이 표는 워크북 ID와 현행 구현을 잇는 얇은 추적표다. 내부 기술 DONE의 focused 증거는 > `guides/testing.md`, 상세 계약은 SSOT `dev_dashboard.html`이 소유한다. C-001은 기술 사전검증과 외부 @@ -21,19 +21,21 @@ | 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-003 | **DONE · 내부 기술** | 종료 회기 4건 미만 insufficient, 이후 최다 페르소나 비중 0.75 이상 훈련 집중 주의; 임상·공정성 판정 아님 | -| REQ-001 | **DONE · 내부 기술 · 공개 UI 미승격** | provider가 이메일을 검증한 모든 Google 계정은 도메인·사전등록 없이 learner·approved로 즉시 로그인. 로그인은 단일 `Google 계정으로 로그인` CTA이며 Google 계정 선택기(`prompt=select_account`)를 유지하고 `hd`를 보내지 않는다. 관리자 exact-email 연구참여자 사전등록 create는 pending 고정, 승인은 별도 PATCH. 로컬 desktop/mobile 직접 영향 32/32, 인증 시각·경계폭 2/2, 전체 7폭 15/15, 세션 8/8, API auth 41/41을 통과했으며 단일 CTA 번들은 아직 공개 미배포다. | +| REQ-001 | **READY · 공개 UI 승격 GATE** | provider가 이메일을 검증한 모든 Google 계정은 도메인·사전등록 없이 learner·approved로 즉시 로그인하며 원본 기능 범위는 공개 실증했다. 후속 수락기준인 단일 `Google 계정으로 로그인` CTA는 Google 계정 선택기(`prompt=select_account`)를 유지하고 `hd`를 보내지 않는다. 로컬 desktop/mobile 직접 영향 32/32, 인증 시각·경계폭 2/2, 전체 7폭 15/15, 세션 8/8, API auth 41/41을 통과했지만 현재 공개 Pages는 구 UI다. 새 Pages 승격 뒤 public 단일 CTA DOM과 실제 Gmail callback을 확인하기 전에는 개선관리 상태를 `검토`로 유지한다. | | REQ-002 | **DONE · 내부 기술** | admin protocol draft→active→retired, 라이선스 C/D 외부 LLM 금지, evaluator-only RAG·rollback; migration 17 owner-run/readiness-only | | REQ-003 | **DONE · 내부 기술** | 페르소나 주호소가 JSON 키 순서나 surface 상태보다 우선 | | REQ-004 | **DONE · 내부 기술** | learner 현재 설정 AND 세션 snapshot. OFF는 AI 파생 API 403/UI 무요청·혼합 결과 redaction, 사용자 입력·privacy 보존; teacher/admin 유지 | | REQ-005 | **DONE · 내부 기술·운영 실증** | 새 회기는 승인 페르소나 `persona_id/version` 고정. P20의 `suicide_ideation_stage=0.9 → int(0) → DB 1..5` 장애를 clamp로 제거했고, 공개 P20 회기 생성·실제 AI 응답·종료·평가를 확인 | | REQ-006 | **DONE · 내부 기술** | prompt와 구조화 결과의 상담자/내담자 identity를 `[COUNSELOR]`/`[CLIENT]`로 역할 마스킹 | | REQ-007 | **DONE · 내부 기술** | 회기 종료를 평가보다 먼저 영속화해 옛 평가 실패 뒤에도 새 회기 생성·턴 진행 가능 | -| REQ-008 | **DONE · 내부 기술** | 기본 엔진+live-client readiness, 구조화 done 없는 SSE EOF는 `client_stream_incomplete`로 실패. 복구 launcher는 전역 mutex·단계별 상한·프로세스 트리 종료·전체 다운 즉시복구로 보강 | +| REQ-008 | **READY · 실제 재부팅 GATE** | 원본 응답 생성 실패는 기본 엔진+live-client readiness, 구조화 done 없는 SSE EOF의 `client_stream_incomplete` 복원과 공개 P20 실제 응답으로 닫았다. 후속 재부팅 복구는 전역 mutex·단계별 상한·프로세스 트리 종료·전체 다운 즉시복구와 PowerShell 5.1 timed `WaitForExit`의 process handle 선확보를 적용했다. 실제 PS5.1 계약 32 passed, detached-clean `44b7835c…`·tree `06133249…`, 5174 자동복구·HTTP 200, watchdog result 0/failcount 0까지 확인했지만 실제 Windows 재부팅 smoke 전에는 개선관리 상태를 `검토`로 유지한다. PC 비종속 상시 호스트 이전도 별도 운영 게이트다. | 현재 공개 API/engine/web/STT/TTS/cloudflared와 Pages production `1f1ddf18-9d5c-4d83-95a7-8cd71245e646`의 서비스 소스는 clean `2a396361…89c`다. 재부팅 복구용 -로그온·watchdog 작업은 detached-clean `99779a6a…fbc8`·tree `57da86aa…6b91`로 별도 승격했고, -60분 상한·`IgnoreNew`·복구 mutex·전체 다운 즉시복구를 고정한 뒤 두 작업 수동 실행 결과 0을 확인했다. +로그온·watchdog 작업은 detached-clean `44b7835c…`·tree `06133249…`로 별도 승격했고, +60분 상한·`IgnoreNew`·복구 mutex·전체 다운 즉시복구·PowerShell 5.1 build 종료코드 판정을 고정했다. +watchdog의 명시 복구 실행 뒤 웹 5174 HTTP 200, `LastTaskResult=0`, failcount 0과 local/public +`status=ok·db=true·engine=true`를 확인했다. 새 학습자 라포 헤더 번들은 준비됐지만 Pages 승격은 명시 승인 전이라 아직 공개되지 않았다. --- @@ -59,6 +61,11 @@ 고정했고, detached-clean `a73bcd24…`·tree `b02b3a1b…`로 API/cloudflared를 fresh 승격했다. receipt `47388d58…9b08` passed, public health 3/3·db/engine true·OpenAPI 126·local voice exact, watchdog·로그온 boot 명시 실행 result 0을 확인했다. + 2026-08-29에는 Windows PowerShell 5.1에서 `Start-Process -PassThru`의 process handle을 열기 전에 timed + `WaitForExit()`를 호출하면 정상 web build 뒤에도 `ExitCode=$null`로 남아 복구를 실패로 오판하는 경계를 수정했다. + 실제 PowerShell 5.1 계약 32 passed, detached-clean `44b7835c…`·tree `06133249…`에 두 task를 같은 핀으로 + 재등록했다. watchdog 3회차 복구로 5174가 자동 기동했고 후속 실행은 `LastTaskResult=0`·failcount 0, + local/public health `status=ok·db=true·engine=true`다. 실제 Windows 재부팅 smoke는 아직 남아 있다. 2026-08-18에는 06:30~10:05 KST 엔진 readiness 장애(고효율 프로브 타임아웃 실패가 1800초 캐시 + 구독 사용량 소진)를 수정했다. 실패 전용 캐시 TTL 30초 분리·프로브 타임아웃 45초로 교정하고 detached-clean `4771b97c…c880`으로 API/게이트웨이/task를 재승격·재등록해 `LastTaskResult=0`, diff --git a/docs/ops/backlog-2026-06-26.md b/docs/ops/backlog-2026-06-26.md index bb40c7f..689af8c 100644 --- a/docs/ops/backlog-2026-06-26.md +++ b/docs/ops/backlog-2026-06-26.md @@ -12,12 +12,13 @@ > 섹션과 상세 근거 `docs/ops/source-docs-gap-analysis-2026-06-26.md`에서 추적한다. C1~C3/H·M 구조는 코드로 > 선제 구축했고, 임상 문안·평가기준·골든셋 콘텐츠는 임상팀(구훈정·어유경) 외부 정의로 받는다. > -> **개선관리 워크북(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, -> 공개 P20 생성→응답→종료→평가 폐루프까지 -> 운영 실증했으므로 열린 백로그에 중복하지 않는다. C-001은 v2 합성 사례 6건·상태별 canonical 판정기와 자동 +> **개선관리 워크북(2026-08-29)** — C-002·C-003과 REQ-002~007은 내부 기술·요구 실증 DONE이다. REQ-001은 +> generic Google callback까지 완료했지만 단일 CTA Pages 승격, REQ-008은 recovery task `44b7835c…`·tree +> `06133249…`와 5174 자동복구까지 완료했지만 실제 Windows 재부팅 smoke가 남아 둘 다 `검토`다. C-001은 +> v2 합성 사례 6건·상태별 canonical 판정기와 자동 > 안전 게이트의 기술 사전검증까지 완료됐다. 사례별 5필드 30개·청소년 답변 6개·검토자 이름/소속/자격을 포함한 > 승인 10필드와 서명 증거가 없어 B4 외부 GATE로 유지하며, `review_complete=true` 전에는 완료로 닫지 않는다. +> 현재 개선관리 집계는 완료 8·검토 3·총 11이다. > > **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과 @@ -55,6 +56,11 @@ 조기 종료 결함을 복구했다. fresh dump `9cbda31e…0ce5`(7,532,625 bytes·TOC 1,492)를 먼저 고정하고 detached-clean `a73bcd24…`·tree `b02b3a1b…`로 fresh 승격해 receipt `47388d58…9b08`, public health 3/3, OpenAPI 126·local voice exact와 watchdog/boot result 0을 재확인했다. + 2026-08-29에는 Windows PowerShell 5.1의 timed `WaitForExit()`가 process handle 선확보 없이는 성공한 web + build의 `ExitCode`를 null로 남기는 오판을 제거했다. 실제 PS5.1 계약 32 passed, detached-clean + `44b7835c…`·tree `06133249…`에 boot/watchdog을 동일 핀으로 재등록했고, 5174 자동복구·HTTP 200, + `LastTaskResult=0`·failcount 0, local/public health `status=ok·db=true·engine=true`를 확인했다. 실제 Windows + 재부팅 smoke와 PC 비종속 상시 호스트 이전은 계속 열린 환경 게이트다. 상세: `docs/ops/public-db-recovery-rehearsal-2026-08-07.md`. - [ ] **DB 백업 운영화** — 검증형 one-shot custom dump와 실제 일회용 restore drill은 통과했다. 예약 실행, 실패 알림, NAS/off-host 암호화 복제, restore drill 주기와 보존 정책을 운영 게이트로 남긴다. diff --git a/docs/ops/evidence/c-001-clinical-technical-preflight-2026-08-28.json b/docs/ops/evidence/c-001-clinical-technical-preflight-2026-08-28.json index 435d138..2009f17 100644 --- a/docs/ops/evidence/c-001-clinical-technical-preflight-2026-08-28.json +++ b/docs/ops/evidence/c-001-clinical-technical-preflight-2026-08-28.json @@ -1,6 +1,6 @@ { "evidence_id": "c-001-clinical-technical-preflight-2026-08-28", - "generated_at": "2026-08-28T12:28:11Z", + "generated_at": "2026-08-29T06:04:31Z", "base_commit": "081d9d70fb4a831412ceb937a976c9bb56906047", "worktree_boundary": "이 증거는 아래 파일 해시와 081d9d70 런타임 패키지에 고정된 내부 기술 사전검증이다. 외부 임상 검토나 승인을 대신하지 않는다.", "scope": "P1 합성 자살사고·자해 신호 훈련의 기계 판독 검토 패킷, 런타임 안전 상한, 공식 source pack", @@ -91,7 +91,7 @@ }, { "path": "outputs/01a04217-f73b-7303-b597-401fa7f5d290/Vignette_개선관리_완료.xlsx", - "sha256": "b334e313c64b530b3525bb9253fef17282df361224d408f3e67a526af0ef55aa" + "sha256": "0a64d1bcdfd0c1727ebd4279b58b3077227ecba2e30d68009cf9ba8d310b1177" } ], "verification": [ @@ -113,7 +113,7 @@ }, { "command": "artifact-tool workbook rebuild, inspect, formula error scan, six-sheet render", - "result": "formula errors 0; summary complete=10, review=1, total=11; ten independent external approval inputs G13:G22; 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=b334e313c64b530b3525bb9253fef17282df361224d408f3e67a526af0ef55aa" + "result": "formula errors 0; summary complete=8, review=3, total=11; REQ-001 public single-CTA promotion and REQ-008 actual reboot smoke remain review gates; ten independent external approval inputs G13:G22; 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=0a64d1bcdfd0c1727ebd4279b58b3077227ecba2e30d68009cf9ba8d310b1177" } ] }