160 lines
4.7 KiB
JSON
160 lines
4.7 KiB
JSON
{
|
|
"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
|
|
}
|
|
}
|