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 산출물은 커밋에서 제외했다.
160 lines
7.1 KiB
Markdown
160 lines
7.1 KiB
Markdown
# G8 Continuous Improvement OS — 라이브 통합 증거
|
|
|
|
> 계획 기준일: 2026-08-06 KST
|
|
> 실제 실행: 2026-08-07 00:16:23 KST
|
|
> 대상: `http://127.0.0.1:8014` (`db=true`, `engine=true`)
|
|
> 판정: **실제 HTTP/DB 내부 제품 게이트 통과**
|
|
> SSOT 승격: 루트 통합 트랙이 별도로 수행
|
|
|
|
## 1. 증거 경계
|
|
|
|
- 이 증거는 합성 replay, 독립 red-team, coverage/drift 메타데이터만 사용한다.
|
|
- content qualification, model gate, release gate는 스스로 효과를 만들지 않는다.
|
|
- catalog 등록, model rollback, release promotion은 관리자 human approval 뒤에만 append된다.
|
|
- API projection에는 raw transcript, PII, 임상 주장, 학습자 aggregate score가 없다.
|
|
- 내부 자동화 토큰은 실행 시에만 주입했으며 증거 파일에는 저장하지 않았다.
|
|
- 고유 `dev:e2e` identity와 G8 원장은 재현·감사를 위해 보존했고 삭제하지 않았다.
|
|
|
|
## 2. 재현 명령
|
|
|
|
```powershell
|
|
$python311 = 'C:\Users\encep\AppData\Local\Programs\Python\Python311\python.exe'
|
|
$ruff = 'C:\Users\encep\AppData\Local\hermes\hermes-agent\venv\Scripts\ruff.exe'
|
|
$token = 'g8-' + ('z' * 40)
|
|
|
|
& $python311 -m py_compile scripts\smoke-continuous-improvement-api.py
|
|
& $ruff check scripts\smoke-continuous-improvement-api.py
|
|
& $python311 -X utf8 scripts\smoke-continuous-improvement-api.py `
|
|
--api-base-url http://127.0.0.1:8014 `
|
|
--internal-token $token `
|
|
--out docs\ops\evidence\continuous-improvement-live-api-2026-08-06.json
|
|
```
|
|
|
|
원본 실행 결과는
|
|
[`evidence/continuous-improvement-live-api-2026-08-06.json`](./evidence/continuous-improvement-live-api-2026-08-06.json)에 있다.
|
|
|
|
## 3. source → catalog human gate
|
|
|
|
실행마다 고유 source, draft, 두 red-team review, benchmark를 생성했다.
|
|
|
|
1. approved source provenance를 draft가 참조했다.
|
|
2. 서로 다른 reviewer agent 두 개가 safety, identity, PII, grounding,
|
|
answer leakage, cultural bias, difficulty 전 차원을 독립 검토했다.
|
|
3. benchmark는 variant `8`, pass rate `0.875`, leakage·PII·unsupported claim·safety failure·reward hacking `0`이었다.
|
|
4. content pipeline 응답은 `pending_human_approval`, `human_approval_required=true`,
|
|
`catalog_promoted=false`를 유지했다.
|
|
5. 승인 전 DB-backed projection에서 해당 qualification의 catalog row가 없음을 확인했다.
|
|
6. teacher와 learner의 approval 요청은 모두 `403`이었다.
|
|
7. admin `approve_content` 뒤에만 catalog row 한 건이 append됐고 같은 승인 재시도는 새 효과를 만들지 않았다.
|
|
|
|
라이브 식별자:
|
|
|
|
- pipeline: `3bd68d78-6a4d-448a-851f-2f85fe3ad59b`
|
|
- qualification: `69e85b39-119d-4757-a182-0f013cbfeb43`
|
|
- catalog entry: `oas-g8-catalog-live-1786029383-9f090464`
|
|
- catalog record: `bd990d35-be29-4e87-ac58-8477be5569f3`
|
|
|
|
## 4. model·release gate와 네 artifact
|
|
|
|
model change gate와 release gate 각각에 다음 네 종류 artifact를 실제 저장했다.
|
|
|
|
| artifact kind | 역할 |
|
|
|---|---|
|
|
| `baseline` | 변경 전 기준 증거 |
|
|
| `threshold` | 승격·차단 임계 계약 |
|
|
| `provenance` | 평가 결과의 원천 URI/hash |
|
|
| `rollback` | 되돌릴 대상과 실행 근거 |
|
|
|
|
두 gate 모두 projection에서 정확히 `4`건과 네 kind 전건을 확인했다.
|
|
|
|
- model candidate에는 critical miss `1`을 넣어 자동 결정이 `rollback`이 되게 했다.
|
|
- model gate 응답은 `promotion_executed=false`였고 승인 전 lifecycle effect가 없었다.
|
|
- admin `authorize_rollback` 뒤에 `rollback/executed` lifecycle event가 append됐다.
|
|
- 합성 release manifest fixture는 red-green, contract, E2E, runtime, public-proof, SSOT 필드를 모두
|
|
통과 상태로 제출했지만 응답은 여전히 `pending_human_approval`, `promotion_executed=false`였다. 여기의
|
|
`public-proof` 필드는 승인 계약을 검증하는 합성 입력이며 현재 코드를 실제 공개 배포했다는 증거가 아니다.
|
|
- admin `approve_promotion` 뒤에만 `promotion/approved` lifecycle event가 append됐다.
|
|
|
|
라이브 식별자:
|
|
|
|
- model gate: `ed449b49-2a75-4546-924f-38856800a3b0`
|
|
- rollback lifecycle effect: `1ddd167c-19b7-46a3-9ef5-37646c9d9d93`
|
|
- release gate: `3569469f-7726-4abd-bb85-14f6928ea2cb`
|
|
- promotion lifecycle effect: `1de725c2-2365-489e-81b6-b7303be6a736`
|
|
|
|
## 5. monitor·rollback·incident 회귀 폐루프
|
|
|
|
실제 lifecycle projection에서 아래 여섯 효과를 대상 gate에 연결해 확인했다.
|
|
|
|
- human effect: `promotion/approved`
|
|
- human effect: `rollback/executed`
|
|
- monitor: `healthy`
|
|
- monitor: `drift_detected`
|
|
- monitor: `rollback_recommended`
|
|
- monitor: `rollback_verified`
|
|
|
|
monitor event ID:
|
|
|
|
- healthy: `398f9ff7-cad7-458c-9fb3-47423a73ae60`
|
|
- drift detected: `f95a4ab9-67d2-457c-8422-57da829a3edc`
|
|
- rollback recommended: `00473c29-5f93-44d1-92ab-9788593a7007`
|
|
- rollback verified: `ed315e57-3bbd-492f-afac-f2d7cc37defd`
|
|
|
|
incident `659dab3e-8abe-4234-a00d-16b02597c5c4`는 DB projection에서 정확히 네 노드로 hydrate됐다.
|
|
|
|
```text
|
|
reproduction_test
|
|
└─ implementation
|
|
└─ e2e
|
|
└─ runtime_proof
|
|
```
|
|
|
|
각 dependency는 바로 앞 노드의 실제 `node_record_id`만 참조했고 reproduction은 dependency가 없었다.
|
|
incident와 projection 모두 `pii_included=false`였다.
|
|
|
|
## 6. 인증·멱등성·변경 충돌
|
|
|
|
| 검증 | 실제 결과 |
|
|
|---|---|
|
|
| 내부 GET, 헤더 누락 | `401` |
|
|
| 내부 GET, 잘못된 토큰 | `403` |
|
|
| teacher admin projection | `403` |
|
|
| learner admin projection | `403` |
|
|
| teacher approval | `403` |
|
|
| learner approval | `403` |
|
|
| 동일 content submission | 동일 qualification, `idempotent_replay=true` |
|
|
| 동일 model/release/incident submission | 동일 ID, `idempotent_replay=true` |
|
|
| 동일 approval/monitor submission | 동일 effect ID, `idempotent_replay=true` |
|
|
| 동일 submission의 변경 payload | content/model/release/incident/approval/monitor 모두 `409` |
|
|
|
|
동일 실행에서 admin human approval은 target이 서로 다른 세 건만 존재했고, catalog effect 한 건과
|
|
model/release lifecycle effect 두 건으로 분리됐다. 재시도는 approval이나 효과 row를 복제하지 않았다.
|
|
|
|
## 7. 비노출 계약
|
|
|
|
internal projection과 admin projection 전체를 재귀 검사했다.
|
|
|
|
- `raw_transcript_included=false`
|
|
- `pii_included=false`
|
|
- `clinical_claim_allowed=false`
|
|
- `silent_auto_promotion_allowed=false`
|
|
- `raw_transcript`, `transcript`, `utterance_text` key 없음
|
|
- `total_score`, `overall_score`, `global_score`, `aggregate_score` key 없음
|
|
|
|
따라서 이 결과는 콘텐츠 품질·운영 안전 원장 증거이며, 학습자 총점이나 임상 효과 판정 근거가 아니다.
|
|
|
|
## 8. 실행 결과 요약
|
|
|
|
| 항목 | 결과 |
|
|
|---|---|
|
|
| `py_compile` | 통과 |
|
|
| Ruff | `All checks passed!` |
|
|
| 실제 API/DB smoke | `ok=true` |
|
|
| model gate artifact | `4/4` |
|
|
| release gate artifact | `4/4` |
|
|
| admin approval | `3`건 |
|
|
| 대상 lifecycle event | `6`건 |
|
|
| incident regression DAG | `4/4` 노드, dependency 순서 통과 |
|
|
|
|
이 증거는 G8의 실제 HTTP/DB 통합 조건을 충족한다. 실제 배포와 공개 경로 증명은 별도 외부 게이트다.
|
|
대시보드와 TODO의 상태는 루트 통합 작업에서 이 문서와 원본 JSON을 근거로 반영한다.
|