{ "schema_version": 1, "recorded_on": "2026-09-22", "scope": "관리자 OpenRouter 복구의 API/web SQL 수정, 실제 PostgreSQL 검증, 배포와 보존 census", "source": { "forgejo_commit": "d58eb67764b8e5d6c17472a845bfa4d7cc260973", "api_image_sha256": "4466081ee51a4c65ce80a927a8a604dc5212d5673a1eb2c553a5e845067cbe33", "api_container": "0cbd7fd7d3c6" }, "root_cause_and_fix": { "observed_error": "AmbiguousColumnError for the existing refresh column", "fixes": [ "기존 refresh column 참조를 명시했다.", "EXCLUDED.extra의 text 캐스트를 제거해 JSONB끼리 비교한다." ], "actual_postgresql_verification": { "method": "임시 테이블에서 AST 원본 쿼리를 3회 실행한 뒤 rollback", "passed": true } }, "pre_deploy_preservation": { "database_dump": { "name": "pre-deploy-admin-recovery-20260922.dump", "bytes": 11806566, "pg_restore_list_passed": true }, "environment_and_compose_backups_retained": true }, "deployment": { "api_replaced": true, "public_health": { "status": "ok", "db": true, "engine": true, "engine_mode": "openai", "jev_provider": "openrouter" }, "api_tests": { "passed": 1173, "skipped": 1, "failed": 0 }, "api_replacement_phase_db_engine_web_containers_unchanged": true }, "post_deploy_census": { "table_count": 133, "unchanged_table_count": 130, "activity_metadata_changes": { "app.app_user": { "rows": 1382, "row_count_unchanged": true, "digest_changed": true }, "app.auth_session": { "rows": 1746, "row_count_unchanged": true, "digest_changed": true }, "app.admin_health_event": { "before": 14040, "after": 14045 } }, "uploads": { "files": 93, "bytes": 52973, "manifest_sha256": "c6f63156cf38be0e551b2d8f64bdc4e76e76a013181a6ff732c04ff102b3a6b1", "unchanged": true }, "api_replacement_phase_non_api_containers_unchanged_assertion_passed": true }, "open_gates": [ "새 사용자 OAuth finish 성공 관측" ], "privacy": "키, 인증 코드, 개인 식별 정보, 대화 내용은 이 기록에 포함하지 않는다.", "web_verification": { "static_checks": { "typecheck": "passed", "build": "passed", "api_types": "passed", "build_entry": "index-CFb6KpZF.js" }, "focused_checks": { "initial": { "passed": 13, "failed": 3 }, "independent_recheck": { "passed": 3, "failed": 0, "duration_seconds": 6.2, "selected_total_passed": 16 }, "fixed_preconditions": [ "옵션 6에서 9로 stale assertion을 정정했다.", "인증 fixture와 API 기동 전제를 보완했다." ] }, "forgejo_web_commit": "fb640a75ac674c5bd5f7055daabd81b52112ad53", "forgejo_push_completed": true, "nas_web_image_sha256": "a6312d07af56f84a57f0858a74aa4e41b04c2e7031dbe105580b5d4456a5ad68", "nas_web_replacement": "completed", "pages_deployed": true, "whole_worktree_green": false, "web_deployment_completed": true, "nas_entry_asset": { "path": "/assets/index-DJgMn3pJ.js", "status": 200 }, "api_engine_db_containers_unchanged_assertion_passed": true, "pages_deployment_url": "https://0150d52e.vignette-b1q.pages.dev", "public_entry_asset": { "path": "/assets/index-CFb6KpZF.js", "status": 200 }, "asset_preservation": { "processed": 247, "preserved": 174, "existing": 73, "failed": 0 }, "authenticated_public_admin_ui": { "ready": true, "boot_diagnostic_visible": false, "server_recovery_visible": false, "engine": "openai", "model": "gpt-5.6-terra", "openrouter_provider_status": "not_connected" }, "public_http": { "html_status": 200, "health_status": 200, "health": { "status": "ok", "db": true, "engine": true }, "jev": { "configured": true, "live_verified": false, "provider": "openrouter" }, "watchdog_inline_source_fingerprint_verified": true, "html_verifier": { "module_entry": "index-CFb6KpZF.js", "module_entry_matched": true, "inline_bootstrap_sha256": "c707015e9142e36974b79488aa150772cac63d1b17a2415bdca17c158c4c5f4f", "inline_bootstrap_matched": true, "accepted_html_differences": [ "Cloudflare Insights script", "closing body newline" ] } } }, "oauth_observation": { "start_status": 200, "finish_observed": false } }