데이터 복구 배포 증거를 동기화
This commit is contained in:
parent
dba9b75a38
commit
ffadc8bd49
7 changed files with 134 additions and 14 deletions
|
|
@ -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`,
|
||||
|
|
|
|||
114
docs/ops/evidence/google-account-data-recovery-2026-08-29.json
Normal file
114
docs/ops/evidence/google-account-data-recovery-2026-08-29.json
Normal 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"
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue