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 산출물은 커밋에서 제외했다.
78 lines
3.9 KiB
Markdown
78 lines
3.9 KiB
Markdown
# 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 연결 문자열은 증거에 기록하지 않았다.
|