관리자 연결 복구 배포 검증 기록
This commit is contained in:
parent
fb640a75ac
commit
1f8f8ce0a8
6 changed files with 176 additions and 6 deletions
160
docs/ops/evidence/admin-openrouter-recovery-2026-09-22.json
Normal file
160
docs/ops/evidence/admin-openrouter-recovery-2026-09-22.json
Normal 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
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue