vignette/docs/ops/outcome-os-g0-g1-g3-local-hardening-evidence-2026-08-07.md
Yun Chan 16e791e044 G0~G8 성과·동맹 측정 OS 작업 일괄 고정
8월 7일까지 워킹트리에만 남아 있던 미커밋 작업을 커밋한다. 여러 사본
폴더(worktree·clone)에 흩어져 있던 중간 스냅샷을 정리하기 전에 원본을
git 이력으로 고정하는 것이 목적이다.

- contracts/routes/services: measurement, outcome_trajectory, rupture_repair,
  deliberate_practice, calibration_transfer, supervision_research,
  multimodal_alliance, continuous_improvement 계열 신규 모듈과 테스트
- infra/db/init: 07~16 마이그레이션(측정 기반~calibration transfer 실행)
- apps/web: 세션 리뷰 카드·관리 화면·E2E 스펙 추가
- docs/ops: G0~G8 라이브 통합·배포·롤백 증거 문서와 evidence JSON/PNG
- scripts: smoke·ledger·릴리스 에이전트·NAS 프리뷰 운영 스크립트

engine.public 로그 .bak과 apps/web/test-results 산출물은 커밋에서 제외했다.
2026-08-08 01:30:53 +09:00

78 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Outcome & Alliance OS G0/G1/G3 로컬 하드닝 증거 (2026-08-07)
## 결론
- G0 자동 provenance census가 RLS evaluator 컨텍스트에서 provenance-bearing 테이블 28개를 자동 탐색했다. 중앙 G0 계약과 G7 table-local 계약을 분리하고 null/blank, unknown source/perspective, incompatible pair, orphan instrument/model-run/evidence, 필수 model-run 누락을 fail-closed로 검사했다. 실데이터 93개 `measurement_event`, 19개 `model_run`, 18개 rupture observation을 포함한 최종 결과는 위반 0건이다.
- G0 마이그레이션은 고유 임시 DB에서 01~06 선행 적용, `07_measurement_foundation.sql` 트랜잭션 적용, 롤백 원상복귀, 재적용 성공까지 실증했다. 임시 DB는 종료 시 제거됐다.
- 기존 영속 fixture의 `session_state.rapport_credit=0.625`, `case_profile.alliance_level=0.375`, `SessionEvaluation.distribution=7.0`을 기존 read와 새 legacy adapter read로 비교했고 세 값 모두 무손실이었다. G0 적용 뒤 기존 행도 변하지 않았다.
- G1 동일 payload 재전송은 HTTP 202와 동일 `pulse_id`, `idempotent_replay=true`를 반환하고 agent job을 재예약하지 않는다. 변경 payload는 409다. 다른 학습자와 다른 코호트 교수자는 모두 404이며, 정상 상태 감사 이력은 `awaiting_agents → ready`다.
- G3는 한 실제 회기에서 서로 다른 세 episode를 `missed`, `partial`, `resolved`로 만들었다. API read model과 PostgreSQL terminal state가 모두 일치했고 8개 observation event의 `sequence_no`가 episode별 1부터 연속이었다.
## 실행 증거
### G0 provenance census
```powershell
py -3.11 scripts/check-measurement-provenance-census.py `
--out docs/ops/evidence/measurement-provenance-census-live-2026-08-07.json
```
- registered/discovered producer tables: `28/28`
- unknown/missing producer tables: `0/0`
- null/blank provenance: `0`
- unknown source/perspective 및 incompatible pair: `0`
- orphan instrument/model-run/evidence: `0`
- model/agent producer의 필수 model-run 누락: `0`
### G0 migration 및 legacy rehearsal
```powershell
py -3.11 scripts/rehearse-measurement-migration.py `
--out docs/ops/evidence/measurement-migration-rehearsal-2026-08-07.json
```
- G0 객체 5종 apply 전: 모두 없음
- transaction 내부 apply 후: 모두 있음
- rollback 후: 모두 없음
- committed forward apply 후: 모두 있음
- temporary database removed: `true`
- legacy old/new numeric projection lossless: `true`
- legacy rows unchanged: `true`
### G1 live API/PostgreSQL
증거 파일: `docs/ops/evidence/alliance-pulse-live-hardening-2026-08-07.json`
- session: `4d98dada-928d-45cc-b389-4043837d0b28`
- pulse: `7c6b1b76-139b-4fdf-80c4-4771bb92c793`
- same payload: `202`, stable ID, `idempotent_replay=true`
- changed payload: `409`
- other learner / cross-cohort teacher: `404 / 404`
- terminal 3×3 read: 9 measurements
- supervisor 포함 latest 4×3 read: 12 measurements
- PostgreSQL append-only events: 15, model runs: 2 ready
### G3 live API/PostgreSQL
증거 파일: `docs/ops/evidence/rupture-repair-live-three-state-2026-08-07.json`
- session: `811d904f-64eb-4602-81d4-e4f7309feb03`
- state coverage: `missed`, `partial`, `resolved`
- episode count: 3
- append-only observation event count: 8
- episode별 sequence 연속성: `true`
- API/DB terminal-state equality: `true`
- other learner / cross-cohort teacher deny: `true / true`
## 회귀 검증
- focused provenance/G0/G1/G3 tests: `91 passed`
- full API tests: `767 passed`
- `npm run check:api-types`: PASS
- `npm run check:measurement-contract`: PASS
- `npm run typecheck`: PASS
## 경계
- 이 작업은 로컬 DB/API만 사용했다. 공개 배포·원격 DB 변경은 하지 않았다.
- 실서버 fixture는 기존 정책대로 고유 `dev:e2e` identity와 ID만 보존하며 transcript, 이메일, 토큰, DB 연결 문자열은 증거에 기록하지 않았다.