데이터 복구 배포 증거를 동기화

This commit is contained in:
Yun Chan 2026-08-29 16:12:24 +09:00
parent dba9b75a38
commit ffadc8bd49
7 changed files with 134 additions and 14 deletions

View file

@ -13,8 +13,8 @@
> 선제 구축했고, 임상 문안·평가기준·골든셋 콘텐츠는 임상팀(구훈정·어유경) 외부 정의로 받는다.
>
> **개선관리 워크북(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은
> single Google CTA를 Pages production `ef48c0ae…`에 승격했지만 실제 Gmail callback, REQ-008은 recovery task
> `dba9b75a…`·tree `14cd4607…`와 5174 자동복구까지 완료했지만 실제 Windows 재부팅 smoke가 남아 둘 다 `검토`다. C-001은
> v2 합성 사례 6건·상태별 canonical 판정기와 자동
> 안전 게이트의 기술 사전검증까지 완료됐다. 사례별 5필드 30개·청소년 답변 6개·검토자 이름/소속/자격을 포함한
> 승인 10필드와 서명 증거가 없어 B4 외부 GATE로 유지하며, `review_complete=true` 전에는 완료로 닫지 않는다.
@ -136,11 +136,6 @@
## B3. 소유자(윤찬) 결정 — 전건 확정(2026-06-30)
- [ ] **공개 Web 후보 Pages 승격 승인**`99779a6a…fbc8`·tree `57da86aa…6b91`의 production build와
학습자 라포 헤더 desktop/mobile focused E2E 2/2, 현행 포함 최근 production 5세대 자산 보존(최종 dist
714파일·assets 164개)은 완료됐다. 실제 Pages upload는 코드 외부 전송 명시 승인이 없어 중단했다.
`Cloudflare Pages production 배포 승인`을 받으면 Pages Web만 승격하고 공개 API/DB·task·NAS runtime은 건드리지 않는다.
> 7건(평가설계 H1 κ/ICC·환각률, s2s 2차 PoC 채택, 페르소나 음성 모델·권리, fast-loop 외부 API 허용,
> 재귀학습 fine-tuning 범위, 운영 보존기간·에스컬레이션, 추가 축어록 수급 20건/1개월)은 **전건 확정**됐다.
> 결정 상세는 대시보드 "윤찬 결정 상세" 탭, ADR은 `docs/decisions/`(`voice-s2s-poc.md`,

View file

@ -0,0 +1,114 @@
{
"schema_version": 1,
"status": "awaiting_live_oauth_callback",
"captured_at_utc": "2026-08-29T07:05:31.681Z",
"scope": "Google identity alias recovery for the canonical administrator account",
"safety": {
"raw_google_subjects_in_artifact": false,
"email_auto_merge": false,
"user_rows_deleted": 0,
"learning_rows_deleted": 0,
"source_preferences_deleted": 0,
"manual_email_identity_untouched": true
},
"backup": {
"path": "D:\\workspace\\vignette-backups\\vignette-dev-db-vignette-20260829-062958Z.dump",
"sha256": "c472550091075e4b4e0cc52f7f45720fbcf2ccc11cacbebe4b61f0a7d2cef2e9",
"pg_restore_list_verified": true
},
"implementation": {
"git_commit": "dba9b75a388783b11d821257e2f91fbcc30bbe1a",
"git_tree": "14cd4607b07f93e06cef8c912694ae1da8517b8c",
"migration": "infra/db/init/19_auth_identity_alias.sql",
"migration_sha256": "e61299acde3967ea8a0d0552bd08ea53821ff74477ad7fd2461af05c7ae4cae7",
"alias_rows_for_canonical_user": 2,
"runtime_role_alias_select_verified": true,
"runtime_role_alias_write_policy_present": false
},
"transaction": {
"isolation": "serializable",
"first_backup_clone_attempt": "rolled_back_on_unexpected_source_user_preferences_reference",
"foreign_key_references_scanned": 67,
"allowed_source_references": [
"app.auth_session.user_id",
"app.user_preferences.user_id"
],
"preference_merge": "source-only notification keys merged; canonical conflicts fail closed; source row preserved",
"backup_clone_recovery_passed": true,
"backup_clone_removed": true,
"active_recovery_committed": true,
"source_sessions_revoked": 1,
"recovery_audit_events": 1
},
"postconditions": {
"canonical_sessions": 21,
"canonical_turns": 64,
"canonical_evaluations": 6,
"canonical_role": "admin",
"canonical_admin_access": true,
"source_sessions": 0,
"source_turns": 0,
"source_evaluations": 0,
"source_active_auth_sessions": 0,
"source_account_status": "suspended",
"source_preferences_preserved": 1,
"users": 1175,
"sessions": 469,
"evaluations": 65,
"orphan_sessions": 0,
"orphan_turns": 0,
"orphan_evaluations": 0,
"duplicate_external_ids": 0
},
"tests": {
"ruff": "passed",
"focused_auth_runtime": "78 passed, 1 warning",
"api_and_gateway": "1111 passed, 1 skipped, 1 warning",
"release_agent": "31 passed",
"disposable_postgresql_migration": "passed including idempotent reapply and RLS write denial"
},
"public_runtime": {
"release_root": "D:\\workspace\\vignette-public-runtime-dba9b75a3887",
"clean_detached_head": true,
"provenance_receipt": "D:\\workspace\\vignette-runtime-evidence\\dba9b75a388783b11d821257e2f91fbcc30bbe1a\\public-runtime-launch-provenance.json",
"provenance_receipt_sha256": "186529bed76c96f2fd9a7ebcde7d81584253d130812e875782c3017bda23f7a4",
"api_cwd_verified": true,
"cloudflared_cwd_verified": true,
"health": "ok",
"db": true,
"engine": true,
"voice": true,
"openapi_paths": 129,
"unauthenticated_auth_status": 401,
"boot_task_pinned": true,
"watchdog_task_pinned": true,
"watchdog_last_task_result": 0,
"watchdog_failcount": 0
},
"public_web": {
"cloudflare_pages_deployment_id": "ef48c0ae-374e-41fc-b6fd-03f69b26e946",
"environment": "production",
"source_commit": "dba9b75a388783b11d821257e2f91fbcc30bbe1a",
"deployment_url": "https://ef48c0ae.vignette-b1q.pages.dev",
"custom_domain_login_status": 200,
"custom_domain_entry": "assets/index-B1rSWL_W.js",
"custom_domain_entry_sha256": "f8411694ec12101b38aaef40c7804ba36a84030fc1818efc60e6f4db40a6b5bf",
"login_chunk": "assets/Login-DNNQ624T.js",
"login_chunk_sha256": "f010f764d64f4e4e2afdde637bbaffccdd630f9158657e5d6217bd3df47e9c1d",
"single_google_login_cta": true,
"legacy_google_account_selector_absent": true,
"dev_login_absent": true,
"custom_domain_console_warnings_or_errors": 0,
"public_auth_e2e": "1 passed",
"preserved_previous_entry": "assets/index-DJPgoeJy.js",
"preserved_previous_entry_status": 200,
"immutable_preview_static_assets_match": true,
"immutable_preview_runtime_green": false,
"immutable_preview_runtime_note": "The deployment-specific preview origin shows the fail-closed server connection diagnostic; the production custom domain is the accepted runtime origin"
},
"browser": {
"revoked_source_session_redirected_to_login": true,
"live_gmail_oauth_callback_verified": false,
"remaining_gate": "User confirmation and Google account selection are required before transmitting the Gmail identity through OAuth"
}
}