G8 실제 rollback 증명 종료와 비-secure origin 회기 리뷰 크래시 수정

G8 마지막 게이트인 receipt-bound 실제 image rollback을 격리 NAS
vignette-preview-20260807 에서 실행해 종료했다.

Gate6 계약 정정:
감사 대상 current API 이미지가 com.docker.compose.project/service/version
image label 을 갖고 있어 "helper 의 compose label 0개" 계약은 감사되지 않은
다른 이미지를 쓰지 않는 한 성립하지 않는다. 계약을 key 부재가 아니라
소속(membership) 으로 바꿔 launch-nas-preview-g8-helpers.py 에 구현했다.
image 상속 label 을 baseline 으로 읽고 container 의 모든 compose label 이
baseline 과 같거나 선언된 격리 override 인지 검사하며, 최종 project 는
target 이 아니고 service 는 api/web/db/proxy 가 아니어야 한다. docker run
argv 에 target label 을 주입하면 fake-runner 테스트가 먼저 깨진다 (37/37).

실행 결과:
- rollback-old  receipt nas-g8-723eeef22eab05e63e3fafb0 -> 79ec../c530..
- restore-current receipt nas-g8-2738846cf2cf4fbe8ce0fc26 -> 52e0../6fdb..
- release gate/approval 각 2회 멱등, audit.ci_lifecycle_event rollback/executed 2,
  audit.ci_human_approval_event authorize_rollback 2, silent auto-promotion 0
- HMAC journal 6-record 체인 검증, health 3/3, OpenAPI 126, auth 401, Web 200
- helper 0, listener 0, 비밀 env 파기. down/volume rm/prune 미실행, 공개 런타임 미접촉
- 계획했던 Windows SSH 터널은 NAS sshd 가 direct-tcpip 를 거부해 사용할 수 없어
  sshd 설정 변경 대신 같은 격리 계약의 NAS-side probe 컨테이너로 실행했다

비-secure origin 크래시 수정:
배포된 NAS 프리뷰(평문 HTTP, 비-localhost)에 회기 스펙을 돌려 24건 실패를 확인했고
원인은 하나였다. crypto.randomUUID 는 secure context 전용인데 제품 코드 18곳이
fallback 없이 호출했고 RuptureRepairCard 는 렌더 시점 호출이라 회기 리뷰 라우트
전체가 error boundary 로 떨어졌다. 릴리스 게이트 108/108 은 localhost 후보 스택에서만
돌아 이 경로를 밟은 적이 없다. src/lib/uuid.ts 의 randomUuid() 로 통일하고 fallback 도
crypto.getRandomValues 를 우선 사용해 idempotency key 의 예측 불가능성을 유지했다.
회귀는 insecure-context-uuid.spec.ts 6/6 으로 고정했다(직접 호출 0건 검사 포함).
이 수정은 아직 NAS 에 배포하지 않았다.

검증:
API 898, gateway 58, executor 28, probe 11, helper launcher 37, release agent 21,
ruff clean, web api-types/typecheck/build, SSOT FAIL 0, SSOT unit 5/5,
dashboard E2E 10/10, 학생 폐루프 실 DB 브라우저 4/4(일회용 클론),
crypto 수정 후 기존 스펙 회귀 70/70, 복원된 NAS 실제 브라우저 SSE->DB 리뷰 PASS.

부수 발견(열린 항목):
공개 API 가 engine=false 로 degraded 인데 워치독이 이를 감지하지 못한다. engine 판정이
게이트웨이 /health 의 ok 만 보고 claude readiness probe 를 돌리지 않기 때문이다.
같은 .env 와 같은 CLI 로 새 게이트웨이를 다른 포트에 띄우면 즉시 ready 이므로 상주
프로세스의 세션만 죽은 형태다. TODO A절과 대시보드에 기록했다.

이 커밋은 파일 단위로 담겼다. 위 파일들에는 이전 세션의 미커밋 G0~G8 작업이 함께
들어 있으며, hunk 를 쪼개면 대시보드/체커/TODO 정합성이 깨져 SSOT 체커가 실패한다.
This commit is contained in:
Yun Chan 2026-08-07 22:17:20 +09:00
parent 76d0b9ae9b
commit 93dd8f82d7
22 changed files with 10057 additions and 473 deletions

View file

@ -28,8 +28,40 @@
| [`MEMORY_KNOWLEDGE_PERSONA_DESIGN.md`](./MEMORY_KNOWLEDGE_PERSONA_DESIGN.md) | 메모리·지식·페르소나·3-AI 정보비대칭 통합 아키텍처(스키마 DDL 포함) |
| [`taxonomy.md`](./taxonomy.md) | 상담 발화 라벨 분류체계 SoT(기법/내담자상태/슈퍼바이저논평) |
| [`DESIGN_CONCEPT.md`](./DESIGN_CONCEPT.md) | 디자인 시스템·색토큰·아바타·세션UX·3역할 대시보드 SSOT |
| [`ops/video-c0schc1z71q-detailed-notes-2026-08-06.md`](./ops/video-c0schc1z71q-detailed-notes-2026-08-06.md) | 치료 동맹·성과 측정·균열 복구 영상의 타임스탬프별 상세 내용 기록과 연구 근거 분석 |
| [`design-concepts/prompts/vignette-design-prompts-2026-06-27.md`](./design-concepts/prompts/vignette-design-prompts-2026-06-27.md) | 화면 시안 이미지 생성 프롬프트·공통 시각 방향 |
## 🚀 정식 전략 실행 로드맵
| 문서 | 역할 |
|---|---|
| [`ops/vignette-outcome-alliance-os-agentic-plan-2026-08-06.md`](./ops/vignette-outcome-alliance-os-agentic-plan-2026-08-06.md) | 제약에서 출발하지 않는 Outcome & Alliance OS 에이전틱 계획 — G0~G8 정식 승격, 상태는 대시보드·할 일은 TODO I절 |
| [`ops/measurement-provenance-inventory-2026-08-06.md`](./ops/measurement-provenance-inventory-2026-08-06.md) | G0 기존 지표 provenance 전수표 — 시뮬레이션·모델추론·자기보고·운영관측 경계와 legacy adapter 계약 |
| [`ops/alliance-calibration-report-prompt-1.2.0-2026-08-06.md`](./ops/alliance-calibration-report-prompt-1.2.0-2026-08-06.md) | G1 Alliance Core 합성 gold 보정 보고서 — 9/9 방향 판정, 최종 실패 0, 근거 recall 88.9% |
| [`ops/alliance-calibration-report-prompt-1.2.0-readskewfix-2026-08-07.md`](./ops/alliance-calibration-report-prompt-1.2.0-readskewfix-2026-08-07.md) | G1 승격 기준 재보정 — 24/24 ready, 방향 9/9, 오류·재시도 0, evidence recall 94.4%·precision 73.9% |
| [`ops/alliance-pulse-live-integration-evidence-2026-08-06.md`](./ops/alliance-pulse-live-integration-evidence-2026-08-06.md) | G1 실 DB/API 통합 증거 — 자기평가 선잠금, reveal 경계, 3관점×3축, 교수자 append-only supersession |
| [`ops/outcome-trajectory-live-integration-evidence-2026-08-06.md`](./ops/outcome-trajectory-live-integration-evidence-2026-08-06.md) | G2 실 5회기 통합 증거 — 세 축·누락·safety 분리, 멱등 체크인, role-safe 관계 기억·RLS 및 실제 DB 악화/단발성 noise control |
| [`ops/rupture-repair-live-integration-evidence-2026-08-06.md`](./ops/rupture-repair-live-integration-evidence-2026-08-06.md) | G3 파열·수선 통합 증거 — Scenario Director, 실제 learner-turn 자동 감지, fast/deep reconciliation, API/DB·RLS·교수자 정정 |
| [`ops/deliberate-practice-live-integration-evidence-2026-08-06.md`](./ops/deliberate-practice-live-integration-evidence-2026-08-06.md) | G4 의도적 수련 통합 증거 — 5종 실행 처방, competency graph, 전이 mastery gate, 실제 API/DB·RLS·교수자 교정 |
| [`ops/calibration-transfer-live-integration-evidence-2026-08-06.md`](./ops/calibration-transfer-live-integration-evidence-2026-08-06.md) | G5 자기보정·전이 통합 증거 — 불가역 prediction lock/reveal, calibration error 감소, unseen transfer, 합성 subgroup drift |
| [`ops/outcome-os-g4-g5-production-caller-evidence-2026-08-07.md`](./ops/outcome-os-g4-g5-production-caller-evidence-2026-08-07.md) | G4/G5 실제 production caller 증거 — ready 평가·durable turn에서 처방 생성, prediction lock 뒤 failed 독립 관찰, model-run provenance와 replay·비승격 |
| [`ops/outcome-os-self-directed-learning-loop-ui-evidence-2026-08-07.md`](./ops/outcome-os-self-directed-learning-loop-ui-evidence-2026-08-07.md) | 학생 자기주도 전체 루프 UI 증거 — 실제 `src` 홈 추천→회기→리뷰→G4 처방 재연습, desktop/mobile 2/2와 9장 시각 QA(390×844·320×568 포함); 로그인 없는 route fixture이며 실 DB 증거와 분리 |
| [`ops/supervision-research-live-integration-evidence-2026-08-06.md`](./ops/supervision-research-live-integration-evidence-2026-08-06.md) | G6 감독·연구 OS 통합 증거 — 3클릭 attention queue, metadata-only 불일치, version drift, Phase 3 네 도메인 provenance |
| [`ops/outcome-os-g6-ledger-producer-evidence-2026-08-07.md`](./ops/outcome-os-g6-ledger-producer-evidence-2026-08-07.md) | G6 scheduled 원장 파생 증거 — G0~G5 ledger에서 attention·curriculum gap·4-domain manifest를 직접 파생하고 호출자 계산을 제거 |
| [`ops/outcome-os-g6-version-comparison-producer-evidence-2026-08-07.md`](./ops/outcome-os-g6-version-comparison-producer-evidence-2026-08-07.md) | G6 자동 version evaluator 실 DB 증거 — repo-approved synthetic baseline/candidate, measurement anchor 12개, drift/subgroup provenance와 0-duplicate replay |
| [`ops/multimodal-alliance-live-integration-evidence-2026-08-06.md`](./ops/multimodal-alliance-live-integration-evidence-2026-08-06.md) | G7 멀티모달 동맹 통합 증거 — 단일 오디오 시계, 독립 text/voice 측정과 보정 융합, 역할 경계, 동의 철회·tombstone 삭제 |
| [`ops/continuous-improvement-live-integration-evidence-2026-08-06.md`](./ops/continuous-improvement-live-integration-evidence-2026-08-06.md) | G8 지속 개선 통합 증거 — source→독립 red-team→human gate, 4종 증거, append-only 승인·rollback·incident DAG |
| [`ops/outcome-os-g8-agentic-worker-evidence-2026-08-07.md`](./ops/outcome-os-g8-agentic-worker-evidence-2026-08-07.md) | G8 실제 agentic worker 코드 증거 — source hash·PII gate, generator, 독립 red-team 2개, variant judge 3개 이상, durable pending payload와 incident→adversarial 환류 |
| [`ops/evidence/continuous-improvement-agentic-producer-live-2026-08-07.json`](./ops/evidence/continuous-improvement-agentic-producer-live-2026-08-07.json) | G8 scheduled producer 실증 — 실제 Claude 7 calls, dev PostgreSQL pending human gate, provenance/hash와 0-call replay |
| [`ops/outcome-os-g7-wss-soak-evidence-2026-08-07.md`](./ops/outcome-os-g7-wss-soak-evidence-2026-08-07.md) | G7 실제 로컬 `/voice/ws` 전송 short soak — 철회·재연결·overflow 복구와 50분 실행 옵션, 물리 마이크/public WSS 경계 명시 |
| [`ops/outcome-os-g7-external-proof-readiness-2026-08-07.md`](./ops/outcome-os-g7-external-proof-readiness-2026-08-07.md) | G7 외부 종료 증거 준비 — 선행 동의 원장, public runner v4, worker/Uvicorn·Linux topology high-water, 독립 human voice-gain과 canonical checker |
| [`ops/outcome-os-g7-g8-visual-qa-2026-08-07.md`](./ops/outcome-os-g7-g8-visual-qa-2026-08-07.md) | G7/G8 데스크톱·모바일 시각 QA — G8 승인 차단 이유 상시 노출·키보드 제출, G7 타깃·포커스 수치 회귀 |
| [`ops/outcome-os-deploy-preflight-evidence-2026-08-07.md`](./ops/outcome-os-deploy-preflight-evidence-2026-08-07.md) | G0~G8 배포 프리플라이트 — migration sentinel, G3~G8 독립 토큰, Compose fail-closed 전달 증거 |
| [`ops/outcome-os-public-deployment-evidence-2026-08-07.md`](./ops/outcome-os-public-deployment-evidence-2026-08-07.md) | G8/AOS-011 공개 종료 증거 — clean release API·Pages 승격, 119-path OpenAPI, auth/OAuth, asset·브라우저·watchdog proof와 G7 잔여 경계 |
| [`ops/outcome-os-clean-release-manifest-2026-08-07.json`](./ops/outcome-os-clean-release-manifest-2026-08-07.json) | dirty worktree의 G0~G8 릴리스 분류 manifest — related/mixed/excluded 전건 분류와 hunk-review-required 차단 |
| [`ops/outcome-os-release-hunk-map-2026-08-07.json`](./ops/outcome-os-release-hunk-map-2026-08-07.json) | 혼합 파일 4개의 exact hunk SHA·포함/제외/split 결정과 생성형 API 계약 재생성 규칙 |
| [`ops/evidence/outcome-os-release-only-2026-08-07.patch`](./ops/evidence/outcome-os-release-only-2026-08-07.patch) | clean HEAD 적용 검사를 통과한 G0~G8 release-only patch — 공식 API 타입 재생성 포함, 공개 배포 증거는 아님 |
## 🛠 개발·운영 가이드
| 문서 | 역할 |
@ -46,6 +78,9 @@
| 문서 | 역할 |
|---|---|
| [`ops/public-runtime-watchdog.md`](./ops/public-runtime-watchdog.md) | 공개 런타임 워치독 설치·복구 절차(런북) |
| [`ops/nas-preview-g8-rollback-proof-runbook.md`](./ops/nas-preview-g8-rollback-proof-runbook.md) | G8 실제 receipt-bound image rollback 런북 — Gate6 helper 격리 계약 정정(소속 기준), 실행 순서, 금지 사항, 실패 복구 |
| [`ops/evidence/nas-preview-g8-actual-rollback-2026-08-07.json`](./ops/evidence/nas-preview-g8-actual-rollback-2026-08-07.json) | G8 실제 rollback/restore 기계 판독 증거 — helper 격리, 두 executed receipt, HMAC journal 체인, DB lifecycle 집계, 정리 상태 |
| [`ops/public-db-recovery-rehearsal-2026-08-07.md`](./ops/public-db-recovery-rehearsal-2026-08-07.md) | 공개 DB 데이터 교체 사고의 RLS/volume 포렌식, 이중 dump, 격리 복구·최신 migration/API 리허설과 승인형 cutover/rollback 게이트 |
| [`ops/server-migration-runbook-draft.md`](./ops/server-migration-runbook-draft.md) | 서버 이관 런북 초안(자택→학교 정보처) — 이식성 이슈·DB dump/restore·엔진 모드 전환·검증 (초안) |
| [`ops/pilot-usage-guide-draft.md`](./ops/pilot-usage-guide-draft.md) | 파일럿 사용 지침 초안(대학원생 ~20명) — 접속·시간 기반 회기·라이브 코칭·유의사항 (초안) |
| [`ops/tailscale-vnet-runtime-2026-06-27.md`](./ops/tailscale-vnet-runtime-2026-06-27.md) | Tailnet 런타임 + 공개 vnet 외부 게이트 추적 |
@ -68,6 +103,7 @@
|---|---|
| [`decisions/backend-node-transition.md`](./decisions/backend-node-transition.md) | 백엔드 언어 방향(FastAPI 유지·Node 계약 우선 전환) |
| [`decisions/voice-s2s-poc.md`](./decisions/voice-s2s-poc.md) | 음성 s2s 2차 PoC 채택 판단 기준 |
| [`decisions/outcome-alliance-measurement-ledger.md`](./decisions/outcome-alliance-measurement-ledger.md) | Outcome & Alliance append-only 측정 원장, source/perspective 경계, 전진 복구·롤백 결정 |
## 🧪 Phase 3 파일럿 (forward — 아직 미실행)