{
  "schema_version": 1,
  "channel": "homelab-runtime",
  "command_id": "GRAM1-SITE-CHARTS-V32-FASTAPI-AUTH-RUNTIME-DIAG-20260801T114100Z",
  "status": "OK",
  "rc": 0,
  "host": "pve01",
  "mode": "verify",
  "component": "gram1-charts-v32-fastapi",
  "started_at_utc": "2026-08-01T11:44:20Z",
  "finished_at_utc": "2026-08-01T11:44:26Z",
  "reference_register_checked": true,
  "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e",
  "error_register_checked": true,
  "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83",
  "command_sha256": "1bdbdb8ef04fa416fbd634c95111e4d3197247bad0a987f8a8847b5340f036af",
  "duplicate_failed_command_blocked": false,
  "block_reason": null,
  "execution_started": true,
  "change_declared": false,
  "result_contract_valid": true,
  "result_contract_status": null,
  "result_contract_error": null,
  "command_rc": 0,
  "changes_made": false,
  "rollback_started": false,
  "rollback_restored": null,
  "mutation_outcome": "NO_MUTATION",
  "sanitized": true,
  "secrets_included": false,
  "private_addresses_included": false,
  "raw_evidence_retained_locally": true,
  "raw_evidence_sha256": "f70158fea58266be954d5f17da30aced8bdc80f1be8210c9b8bc7c3ef79acde4",
  "sanitized_output_sha256": "4992e98c130fd6e7a93ad99acc3e9e60682389ed4bb05f60c15bc9e48fc02634",
  "output_truncated_in_json": false,
  "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt",
  "output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"GRAM1-SITE-CHARTS-V32-FASTAPI-AUTH-RUNTIME-DIAG-20260801T114100Z\",\"mutation_outcome\":\"NO_MUTATION\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"changes_made\":false,\"command_id\":\"GRAM1-SITE-CHARTS-V32-FASTAPI-AUTH-RUNTIME-DIAG-20260801T114100Z\",\"control_plane_error\":null,\"gitea_changed\":false,\"mutation_outcome\":\"NO_MUTATION\",\"pinned_host_key_aliases\":[\"[PRIVATE_IP]\"],\"production_site_changed\":false,\"rc\":0,\"remote_result\":{\"changes_made\":false,\"command_id\":\"GRAM1-SITE-CHARTS-V32-FASTAPI-AUTH-RUNTIME-DIAG-20260801T114100Z\",\"compose_services\":[\"web\",\"worker\"],\"control_plane_error\":null,\"diagnosis\":[\"FASTAPI_APPLICATION_CONFIRMED\",\"RUNNING_AUTHENTICATED_PAGE_CONTAINS_EXACT_V29_SCRIPT\",\"ALL_LOCAL_CHART_APIS_VALID\",\"PUBLIC_AUTHENTICATED_PAGE_CONTAINS_EXACT_V29_SCRIPT:gram1.ru\",\"STATIC_AND_HTTP_PATH_VALID_BUT_NO_JS_ENGINE_AVAILABLE\"],\"duration_seconds\":5.938,\"exact_state\":{\"compose_sha256\":\"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8\",\"current_hashes\":{\"app.py\":\"ec226952cdb7fb58edbfc0173af47f4d901f3206e15169df12294983731fbc20\",\"templates/index.html\":\"e9e723c9b916383ce10dffe8f8bbdb4049b78d89c5b139e2de5ed82194a27be4\",\"worker.py\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"}},\"fastapi_runtime\":{\"apis\":{\"AVAX\":{\"bytes\":5300,\"candle_count\":72,\"first_keys\":[\"close\",\"high\",\"low\",\"open\",\"time\"],\"first_len\":null,\"first_type\":\"dict\",\"headers\":{\"content-type\":\"application/json\",\"server\":\"uvicorn\"},\"json\":true,\"sha256\":\"8b3d113dcfc9741180e5b5890fa3c9bd5b1c4f20ebc234b47c3dac3866a46415\",\"status\":200,\"status_field\":\"OK\",\"top_keys\":[\"cache_age_seconds\",\"candles\",\"interval\",\"pair\",\"source\",\"stale\",\"status\",\"symbol\"]},\"HBAR\":{\"bytes\":6619,\"candle_count\":84,\"first_keys\":[\"close\",\"high\",\"low\",\"open\",\"time\"],\"first_len\":null,\"first_type\":\"dict\",\"headers\":{\"content-type\":\"application/json\",\"server\":\"uvicorn\"},\"json\":true,\"sha256\":\"a5f0d437bd96f4721092a0166be2620246d853886675c64e14c4bb93618580f9\",\"status\":200,\"status_field\":\"OK\",\"top_keys\":[\"cache_age_seconds\",\"candles\",\"interval\",\"pair\",\"source\",\"stale\",\"status\",\"symbol\"]},\"LINK\":{\"bytes\":6821,\"candle_count\":92,\"first_keys\":[\"close\",\"high\",\"low\",\"open\",\"time\"],\"first_len\":null,\"first_type\":\"dict\",\"headers\":{\"content-type\":\"application/json\",\"server\":\"uvicorn\"},\"json\":true,\"sha256\":\"df82daf3039a6c8f70815cdbf053bc78b22e7fc74480e116038ecc550c8d73cb\",\"status\":200,\"status_field\":\"OK\",\"top_keys\":[\"cache_age_seconds\",\"candles\",\"interval\",\"pair\",\"source\",\"stale\",\"status\",\"symbol\"]},\"POL\":{\"bytes\":1951,\"candle_count\":24,\"first_keys\":[\"close\",\"high\",\"low\",\"open\",\"time\"],\"first_len\":null,\"first_type\":\"dict\",\"headers\":{\"content-type\":\"application/json\",\"server\":\"uvicorn\"},\"json\":true,\"sha256\":\"56766c005e65a6fb0cec2e596f1eece30c363fc621047255ecc58d6009b5c75c\",\"status\":200,\"status_field\":\"OK\",\"top_keys\":[\"cache_age_seconds\",\"candles\",\"interval\",\"pair\",\"source\",\"stale\",\"status\",\"symbol\"]}},\"authenticated_local\":{\"candidate\":0,\"final_url\":\"http://<PRIVATE_ADDRESS>:8000/\",\"headers\":{\"content-type\":\"text/html; charset=utf-8\",\"server\":\"uvicorn\"},\"keys\":[\"auth\"],\"page\":{\"bytes\":36137,\"chart_id_count\":1,\"no_data_count\":2,\"script_count\":6,\"sha256\":\"e9e723c9b916383ce10dffe8f8bbdb4049b78d89c5b139e2de5ed82194a27be4\",\"tvCharts_count\":4,\"v29_script_count\":1,\"v29_script_expected\":true,\"v29_script_sha256\":\"bab92747e24c2fd897c276239780a3927a49bdfa08685eea0d57a9d72462f21b\",\"v29_style_count\":1},\"status\":200},\"candidate_count\":4,\"framework\":\"fastapi.applications.FastAPI\",\"local_attempts\":[{\"candidate\":0,\"final_url\":\"http://<PRIVATE_ADDRESS>:8000/\",\"headers\":{\"content-type\":\"text/html; charset=utf-8\",\"server\":\"uvicorn\"},\"keys\":[\"auth\"],\"page\":{\"bytes\":36137,\"chart_id_count\":1,\"no_data_count\":2,\"script_count\":6,\"sha256\":\"e9e723c9b916383ce10dffe8f8bbdb4049b78d89c5b139e2de5ed82194a27be4\",\"tvCharts_count\":4,\"v29_script_count\":1,\"v29_script_expected\":true,\"v29_script_sha256\":\"bab92747e24c2fd897c276239780a3927a49bdfa08685eea0d57a9d72462f21b\",\"v29_style_count\":1},\"status\":200}],\"local_csp\":{\"inline_without_nonce_blocked\":false,\"present\":false,\"script_sources\":[]},\"middleware\":[{\"arg_count\":0,\"class\":\"SessionMiddleware\",\"kwargs_keys\":[\"https_only\",\"max_age\",\"same_site\",\"secret_key\",\"session_cookie\"]}],\"public\":[{\"csp\":{\"inline_without_nonce_blocked\":false,\"present\":false,\"script_sources\":[]},\"final_url\":\"https://gram1.ru/\",\"headers\":{\"content-type\":\"text/html; charset=utf-8\"},\"host\":\"gram1.ru\",\"page\":{\"bytes\":36137,\"chart_id_count\":1,\"no_data_count\":2,\"script_count\":6,\"sha256\":\"e9e723c9b916383ce10dffe8f8bbdb4049b78d89c5b139e2de5ed82194a27be4\",\"tvCharts_count\":4,\"v29_script_count\":1,\"v29_script_expected\":true,\"v29_script_sha256\":\"bab92747e24c2fd897c276239780a3927a49bdfa08685eea0d57a9d72462f21b\",\"v29_style_count\":1},\"status\":200}],\"routes\":[{\"methods\":[\"GET\",\"HEAD\"],\"name\":\"openapi\",\"path\":\"/openapi.json\"},{\"methods\":[\"GET\"],\"name\":\"login_page\",\"path\":\"/login\"},{\"methods\":[\"POST\"],\"name\":\"login\",\"path\":\"/login\"},{\"methods\":[\"POST\"],\"name\":\"logout\",\"path\":\"/logout\"},{\"methods\":[\"GET\"],\"name\":\"home\",\"path\":\"/\"},{\"methods\":[\"GET\"],\"name\":\"health\",\"path\":\"/health\"},{\"methods\":[\"GET\"],\"name\":\"coin_icon\",\"path\":\"/coin-icon/{coin_id}\"},{\"methods\":[\"GET\"],\"name\":\"lightweight_charts_js\",\"path\":\"/vendor/lightweight-charts.js\"},{\"methods\":[\"GET\"],\"name\":\"klines\",\"path\":\"/api/klines/{symbol}\"},{\"methods\":[\"GET\"],\"name\":\"chart_health\",\"path\":\"/api/chart-health\"},{\"methods\":[\"GET\"],\"name\":\"state\",\"path\":\"/api/state\"},{\"methods\":[\"POST\"],\"name\":\"save_holding\",\"path\":\"/api/holding\"},{\"methods\":[\"POST\"],\"name\":\"add_alert\",\"path\":\"/api/alert\"},{\"methods\":[\"DELETE\"],\"name\":\"delete_alert\",\"path\":\"/api/alert/{alert_id}\"}],\"script_syntax\":[],\"source_facts\":{\"framework_calls\":[{\"line\":49,\"name\":\"FastAPI\"}],\"session_assignments\":[{\"key\":\"auth\",\"value\":true}],\"session_keys\":[\"auth\"],\"sha256\":\"ec226952cdb7fb58edbfc0173af47f4d901f3206e15169df12294983731fbc20\"},\"vendor\":{\"CandlestickSeries\":true,\"LightweightCharts\":true,\"addCandlestickSeries\":false,\"bytes\":196203,\"createChart\":true,\"headers\":{\"cache-control\":\"public, max-age=31536000, immutable\",\"content-type\":\"application/javascript\",\"server\":\"uvicorn\"},\"html_like\":false,\"sha256\":\"c0992580867c4912cc9385b3c2728315bcc1a76c7f1087dca908430fccdf31d7\",\"status\":200}},\"gitea_changed\":false,\"mutation_outcome\":\"NO_MUTATION\",\"previous_capsule_sha256\":\"78a22642978638076248085e28b1a7d354a3ed3d32b4c01eb2b2eecef870719e\",\"previous_command_id\":\"GRAM1-SITE-CHARTS-V31-RUNTIME-PATH-DOM-DIAG-20260801T113000Z\",\"production_site_changed\":false,\"public_hosts\":[\"gram1.ru\"],\"rc\":0,\"rollback_restored\":null,\"rollback_started\":false,\"schema\":1,\"status\":\"OK\"},\"rollback_restored\":null,\"rollback_started\":false,\"schema\":1,\"selected_method\":\"ALIAS_PINNED_AS_DEBIAN\",\"ssh_method_probes\":[{\"duration_seconds\":0.117,\"identity_count\":null,\"identity_sudo_read_ok\":true,\"name\":\"ALIAS_PINNED_AS_DEBIAN\",\"rc\":0,\"stderr\":\"\"},{\"duration_seconds\":0.126,\"identity_count\":2,\"identity_sudo_read_ok\":true,\"name\":\"DIRECT_PINNED_AS_DEBIAN_NO_PROXY\",\"rc\":0,\"stderr\":\"\"}],\"status\":\"OK\"}\n"
}
