관리자 연결 복구 배포 검증 기록

This commit is contained in:
Yun Chan 2026-09-22 23:16:56 +09:00
parent fb640a75ac
commit 1f8f8ce0a8
6 changed files with 176 additions and 6 deletions

View file

@ -0,0 +1,160 @@
{
"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
}
}