From a7f62e5e630095957526680d7cd29396cc7d384e Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Sun, 2 Aug 2026 22:52:13 +0000 Subject: [PATCH] runtime: publish GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z --- ...DIRECT-QGA-PORTFOLIO-20260802T224432Z.json | 38 +++++++++++++++++++ ...-DIRECT-QGA-PORTFOLIO-20260802T224432Z.txt | 34 +++++++++++++++++ runtime/latest.json | 26 ++++++------- runtime/latest.txt | 24 ++++++------ 4 files changed, 97 insertions(+), 25 deletions(-) create mode 100644 runtime/history/GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z.json create mode 100644 runtime/history/GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z.txt diff --git a/runtime/history/GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z.json b/runtime/history/GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z.json new file mode 100644 index 0000000..b2412ba --- /dev/null +++ b/runtime/history/GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "change", + "component": "gram1-site-usdc-atomic-direct-qga-portfolio", + "started_at_utc": "2026-08-02T22:52:05Z", + "finished_at_utc": "2026-08-02T22:52:12Z", + "reference_register_checked": true, + "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", + "error_register_checked": true, + "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", + "command_sha256": "057b4b66e92c1a595f3a37722e83311db20836a037db4233596e94e5f1282bc4", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "change_declared": true, + "result_contract_valid": true, + "result_contract_status": "OK", + "result_contract_error": null, + "command_rc": 0, + "changes_made": true, + "rollback_started": false, + "rollback_restored": null, + "mutation_outcome": "MUTATED", + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "2ca7dc07264823da8a6eaa7156183d1fbbaa973bfe0f79ebecdd9ffe73c71b55", + "sanitized_output_sha256": "2ca7dc07264823da8a6eaa7156183d1fbbaa973bfe0f79ebecdd9ffe73c71b55", + "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\":true,\"command_id\":\"GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z\",\"mutation_outcome\":\"MUTATED\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"already_target\":false,\"backup_created\":true,\"backup_dir\":\"/var/lib/homelab-change-rollback/GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z\",\"baseline_sha256\":{\"app.py\":\"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d\",\"compose.yaml\":\"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8\",\"templates/index.html\":\"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2\",\"worker.py\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"},\"before_source\":{\"app.py\":\"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d\",\"compose.yaml\":\"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8\",\"templates/index.html\":\"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2\",\"worker.py\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"},\"candidate_checks\":{\"alerts_keep_shared_ids\":true,\"alerts_keep_shared_set\":true,\"fixed_usdc_price\":true,\"holding_uses_portfolio_set\":true,\"portfolio_coins_exactly_once\":true,\"portfolio_market_exactly_once\":true,\"positions_do_not_use_shared_ids\":true,\"positions_use_portfolio_ids\":true,\"shared_coins_exactly_four\":true,\"state_has_separate_sets\":true,\"top_cards_keep_shared_ids\":true,\"usdc_cap_is_not_faked\":true,\"usdc_cap_renders_dash\":true},\"changes_made\":true,\"command_id\":\"GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z\",\"commands\":[{\"duration_ms\":33,\"rc\":0,\"stage\":\"compose-config-services\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":11,\"stdout_sha256\":\"eef9f2ae690badd252b6332992b53a6658f483425b294de9826500063f55de9f\"},{\"duration_ms\":7,\"rc\":0,\"stage\":\"inspect-crypto-portfolio\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":12670,\"stdout_sha256\":\"7f19b523d625932c8cd34e520913087333f14bf2c10de32312130f75017a2407\"},{\"duration_ms\":7,\"rc\":0,\"stage\":\"inspect-crypto-portfolio-worker\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":10792,\"stdout_sha256\":\"ff1345dd2cf83f368e02dff11123f1e10dc6212d8caf30cb8ecdf3979694d428\"},{\"duration_ms\":90,\"rc\":0,\"stage\":\"source-hashes-crypto-portfolio\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":262,\"stdout_sha256\":\"ada0aa78b4a0c5b6b44e7d076e7307359471e2c06065f5fa85e8e9fe549f5bf3\"},{\"duration_ms\":109,\"rc\":0,\"stage\":\"source-hashes-crypto-portfolio-worker\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":86,\"stdout_sha256\":\"572f389d914e2ebb95fb6d85531efd753e4e9de54d1ac2e866c4e26605624de5\"},{\"duration_ms\":25,\"rc\":0,\"stage\":\"candidate-python-compile\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},{\"duration_ms\":18,\"rc\":0,\"stage\":\"tag-rollback-web-image\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},{\"duration_ms\":2103,\"rc\":0,\"stage\":\"build-web-image\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":1303,\"stdout_sha256\":\"3f74e0c070a149f14101978fea9eda4b106daa4fea78526871517266affab06b\"},{\"duration_ms\":7,\"rc\":0,\"stage\":\"inspect-built-web-image\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":4132,\"stdout_sha256\":\"d7ad0201b8aa0b9945bdb668166a4c8352a30e91b9f2820e1de6a48c83132735\"},{\"duration_ms\":310,\"rc\":0,\"stage\":\"validate-built-image\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":178,\"stdout_sha256\":\"6842d3abb40d60576895a8f2374cb1a9eb0925da3489fc6bf7c250c3c0861af2\"},{\"duration_ms\":724,\"rc\":0,\"stage\":\"deploy-web\",\"stderr_bytes\":152,\"stderr_sha256\":\"1dcb2a16346ec12f0cfcb8401261b5802af16448378d340c38c10a23b03ca98e\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},{\"duration_ms\":7,\"rc\":0,\"stage\":\"inspect-crypto-portfolio\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":12671,\"stdout_sha256\":\"d69c30f4d140a26cc276125b872be107f1dba89fa4b3b546422df16e2261223f\"},{\"duration_ms\":7,\"rc\":0,\"stage\":\"inspect-crypto-portfolio-worker\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":10792,\"stdout_sha256\":\"ff1345dd2cf83f368e02dff11123f1e10dc6212d8caf30cb8ecdf3979694d428\"},{\"duration_ms\":100,\"rc\":0,\"stage\":\"source-hashes-crypto-portfolio\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":262,\"stdout_sha256\":\"1b3cb6b7f006708869afd28f262505a7d78090bc6134b97797196350f7deddf5\"},{\"duration_ms\":81,\"rc\":0,\"stage\":\"source-hashes-crypto-portfolio-worker\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":86,\"stdout_sha256\":\"572f389d914e2ebb95fb6d85531efd753e4e9de54d1ac2e866c4e26605624de5\"},{\"rc\":0,\"stage\":\"web-health-probe\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":42,\"stdout_sha256\":\"c0a09902aba0bcc30a0ac9a3a2558bd73dd04158923e3d1a0c620de33bd27e67\"},{\"duration_ms\":512,\"rc\":0,\"stage\":\"validate-runtime-state\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":120,\"stdout_sha256\":\"0d555272a0c94ee97dc70fca13b40c8bfcd8a275b78fecf767dc6a1b53eb8c53\"}],\"control_plane_error\":null,\"database_before\":{\"alerts_count\":4,\"alerts_sha256\":\"5ddd511a4ec70ecfb27cae7f09ee251d69e0a7929396c4c94d67d995791b363d\",\"holdings_count\":4,\"holdings_sha256\":\"19b32c5ab2a5766d4d5c7eef2b391fbcba5b000b4e3bcbe27a04aabd0d934edc\",\"quick_check\":\"ok\",\"usdc_holding_rows\":0},\"deployment\":{\"health\":{\"status\":\"OK\",\"type\":\"crypto-portfolio\"},\"portfolio_state\":{\"portfolio_coin_count\":5,\"shared_coin_count\":4,\"usdc_in_history\":false,\"usdc_in_shared_market\":false,\"usdc_price\":1.0},\"web\":{\"image_id\":\"sha256:168d8c204bea3f166e47dbcd11d5983687db6d3e16c8b3c46a317e8172c2a800\",\"restart_count\":0,\"running\":true},\"web_source_hashes\":{\"/app/app.py\":\"8a81d075297856c2dd843da34e6dd1cb6baa1d9c36d24dbee6865e02aa625e25\",\"/app/templates/index.html\":\"6ce3a065ba677a74e4b73db15613a1114a1167dc9af40bc76a29ced556aabe36\",\"/app/worker.py\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"},\"worker\":{\"restart_count\":0,\"running\":true,\"unchanged\":true},\"worker_source_hashes\":{\"/app/worker.py\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"}},\"duration_ms\":6618,\"error\":null,\"error_type\":null,\"gitea_changed\":false,\"mutation_outcome\":\"MUTATED\",\"private_addresses_included\":false,\"production_site_changed\":true,\"rc\":0,\"rollback_details\":null,\"rollback_restored\":null,\"rollback_started\":false,\"sanitized\":true,\"schema\":1,\"scope\":{\"alerts\":false,\"charts\":false,\"database_migration\":false,\"positions\":true,\"sharp_moves\":false,\"top_coin_cards\":false,\"totals\":true,\"usdc_price_usd\":1.0,\"worker\":false},\"secrets_included\":false,\"status\":\"OK\",\"target_sha256\":{\"app.py\":\"8a81d075297856c2dd843da34e6dd1cb6baa1d9c36d24dbee6865e02aa625e25\",\"compose.yaml\":\"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8\",\"templates/index.html\":\"6ce3a065ba677a74e4b73db15613a1114a1167dc9af40bc76a29ced556aabe36\",\"worker.py\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"},\"worker_changed\":false}\n" +} diff --git a/runtime/history/GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z.txt b/runtime/history/GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z.txt new file mode 100644 index 0000000..90c22ec --- /dev/null +++ b/runtime/history/GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z.txt @@ -0,0 +1,34 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z +STATUS=OK +RC=0 +HOST=pve01 +MODE=change +COMPONENT=gram1-site-usdc-atomic-direct-qga-portfolio +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 +COMMAND_SHA256=057b4b66e92c1a595f3a37722e83311db20836a037db4233596e94e5f1282bc4 +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGE_DECLARED=true +RESULT_CONTRACT_VALID=true +RESULT_CONTRACT_STATUS=OK +RESULT_CONTRACT_ERROR=NONE +COMMAND_RC=0 +CHANGES_MADE=true +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=MUTATED +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=2ca7dc07264823da8a6eaa7156183d1fbbaa973bfe0f79ebecdd9ffe73c71b55 +SANITIZED_OUTPUT_SHA256=2ca7dc07264823da8a6eaa7156183d1fbbaa973bfe0f79ebecdd9ffe73c71b55 +OUTPUT_BEGIN +HOMELAB_RESULT_CONTRACT={"changes_made":true,"command_id":"GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z","mutation_outcome":"MUTATED","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +{"already_target":false,"backup_created":true,"backup_dir":"/var/lib/homelab-change-rollback/GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z","baseline_sha256":{"app.py":"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d","compose.yaml":"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8","templates/index.html":"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2","worker.py":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c"},"before_source":{"app.py":"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d","compose.yaml":"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8","templates/index.html":"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2","worker.py":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c"},"candidate_checks":{"alerts_keep_shared_ids":true,"alerts_keep_shared_set":true,"fixed_usdc_price":true,"holding_uses_portfolio_set":true,"portfolio_coins_exactly_once":true,"portfolio_market_exactly_once":true,"positions_do_not_use_shared_ids":true,"positions_use_portfolio_ids":true,"shared_coins_exactly_four":true,"state_has_separate_sets":true,"top_cards_keep_shared_ids":true,"usdc_cap_is_not_faked":true,"usdc_cap_renders_dash":true},"changes_made":true,"command_id":"GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z","commands":[{"duration_ms":33,"rc":0,"stage":"compose-config-services","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":11,"stdout_sha256":"eef9f2ae690badd252b6332992b53a6658f483425b294de9826500063f55de9f"},{"duration_ms":7,"rc":0,"stage":"inspect-crypto-portfolio","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":12670,"stdout_sha256":"7f19b523d625932c8cd34e520913087333f14bf2c10de32312130f75017a2407"},{"duration_ms":7,"rc":0,"stage":"inspect-crypto-portfolio-worker","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":10792,"stdout_sha256":"ff1345dd2cf83f368e02dff11123f1e10dc6212d8caf30cb8ecdf3979694d428"},{"duration_ms":90,"rc":0,"stage":"source-hashes-crypto-portfolio","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":262,"stdout_sha256":"ada0aa78b4a0c5b6b44e7d076e7307359471e2c06065f5fa85e8e9fe549f5bf3"},{"duration_ms":109,"rc":0,"stage":"source-hashes-crypto-portfolio-worker","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":86,"stdout_sha256":"572f389d914e2ebb95fb6d85531efd753e4e9de54d1ac2e866c4e26605624de5"},{"duration_ms":25,"rc":0,"stage":"candidate-python-compile","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"duration_ms":18,"rc":0,"stage":"tag-rollback-web-image","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"duration_ms":2103,"rc":0,"stage":"build-web-image","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":1303,"stdout_sha256":"3f74e0c070a149f14101978fea9eda4b106daa4fea78526871517266affab06b"},{"duration_ms":7,"rc":0,"stage":"inspect-built-web-image","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":4132,"stdout_sha256":"d7ad0201b8aa0b9945bdb668166a4c8352a30e91b9f2820e1de6a48c83132735"},{"duration_ms":310,"rc":0,"stage":"validate-built-image","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":178,"stdout_sha256":"6842d3abb40d60576895a8f2374cb1a9eb0925da3489fc6bf7c250c3c0861af2"},{"duration_ms":724,"rc":0,"stage":"deploy-web","stderr_bytes":152,"stderr_sha256":"1dcb2a16346ec12f0cfcb8401261b5802af16448378d340c38c10a23b03ca98e","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"duration_ms":7,"rc":0,"stage":"inspect-crypto-portfolio","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":12671,"stdout_sha256":"d69c30f4d140a26cc276125b872be107f1dba89fa4b3b546422df16e2261223f"},{"duration_ms":7,"rc":0,"stage":"inspect-crypto-portfolio-worker","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":10792,"stdout_sha256":"ff1345dd2cf83f368e02dff11123f1e10dc6212d8caf30cb8ecdf3979694d428"},{"duration_ms":100,"rc":0,"stage":"source-hashes-crypto-portfolio","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":262,"stdout_sha256":"1b3cb6b7f006708869afd28f262505a7d78090bc6134b97797196350f7deddf5"},{"duration_ms":81,"rc":0,"stage":"source-hashes-crypto-portfolio-worker","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":86,"stdout_sha256":"572f389d914e2ebb95fb6d85531efd753e4e9de54d1ac2e866c4e26605624de5"},{"rc":0,"stage":"web-health-probe","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":42,"stdout_sha256":"c0a09902aba0bcc30a0ac9a3a2558bd73dd04158923e3d1a0c620de33bd27e67"},{"duration_ms":512,"rc":0,"stage":"validate-runtime-state","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":120,"stdout_sha256":"0d555272a0c94ee97dc70fca13b40c8bfcd8a275b78fecf767dc6a1b53eb8c53"}],"control_plane_error":null,"database_before":{"alerts_count":4,"alerts_sha256":"5ddd511a4ec70ecfb27cae7f09ee251d69e0a7929396c4c94d67d995791b363d","holdings_count":4,"holdings_sha256":"19b32c5ab2a5766d4d5c7eef2b391fbcba5b000b4e3bcbe27a04aabd0d934edc","quick_check":"ok","usdc_holding_rows":0},"deployment":{"health":{"status":"OK","type":"crypto-portfolio"},"portfolio_state":{"portfolio_coin_count":5,"shared_coin_count":4,"usdc_in_history":false,"usdc_in_shared_market":false,"usdc_price":1.0},"web":{"image_id":"sha256:168d8c204bea3f166e47dbcd11d5983687db6d3e16c8b3c46a317e8172c2a800","restart_count":0,"running":true},"web_source_hashes":{"/app/app.py":"8a81d075297856c2dd843da34e6dd1cb6baa1d9c36d24dbee6865e02aa625e25","/app/templates/index.html":"6ce3a065ba677a74e4b73db15613a1114a1167dc9af40bc76a29ced556aabe36","/app/worker.py":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c"},"worker":{"restart_count":0,"running":true,"unchanged":true},"worker_source_hashes":{"/app/worker.py":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c"}},"duration_ms":6618,"error":null,"error_type":null,"gitea_changed":false,"mutation_outcome":"MUTATED","private_addresses_included":false,"production_site_changed":true,"rc":0,"rollback_details":null,"rollback_restored":null,"rollback_started":false,"sanitized":true,"schema":1,"scope":{"alerts":false,"charts":false,"database_migration":false,"positions":true,"sharp_moves":false,"top_coin_cards":false,"totals":true,"usdc_price_usd":1.0,"worker":false},"secrets_included":false,"status":"OK","target_sha256":{"app.py":"8a81d075297856c2dd843da34e6dd1cb6baa1d9c36d24dbee6865e02aa625e25","compose.yaml":"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8","templates/index.html":"6ce3a065ba677a74e4b73db15613a1114a1167dc9af40bc76a29ced556aabe36","worker.py":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c"},"worker_changed":false} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index fb6a9f9..b2412ba 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,38 +1,38 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "GRAM1-SITE-USDC-V50-READ-ONLY-DIRECT-QGA-SOURCE-DIAG-20260802T223529Z", + "command_id": "GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z", "status": "OK", "rc": 0, "host": "pve01", - "mode": "verify", - "component": "gram1-site-usdc-read-only-direct-qga-source-diag", - "started_at_utc": "2026-08-02T22:40:22Z", - "finished_at_utc": "2026-08-02T22:40:22Z", + "mode": "change", + "component": "gram1-site-usdc-atomic-direct-qga-portfolio", + "started_at_utc": "2026-08-02T22:52:05Z", + "finished_at_utc": "2026-08-02T22:52:12Z", "reference_register_checked": true, "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", "error_register_checked": true, "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", - "command_sha256": "3f8cc02deb5c35249b401acfaefa0cee6e5e542ca5f32624ea159b9c0f77bf15", + "command_sha256": "057b4b66e92c1a595f3a37722e83311db20836a037db4233596e94e5f1282bc4", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, - "change_declared": false, + "change_declared": true, "result_contract_valid": true, - "result_contract_status": null, + "result_contract_status": "OK", "result_contract_error": null, "command_rc": 0, - "changes_made": false, + "changes_made": true, "rollback_started": false, "rollback_restored": null, - "mutation_outcome": "NO_MUTATION", + "mutation_outcome": "MUTATED", "sanitized": true, "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "d0630af716a246d0621840fdab6bcbd7cfc6e5a03c4accc464b597d374b9ace9", - "sanitized_output_sha256": "d0630af716a246d0621840fdab6bcbd7cfc6e5a03c4accc464b597d374b9ace9", + "raw_evidence_sha256": "2ca7dc07264823da8a6eaa7156183d1fbbaa973bfe0f79ebecdd9ffe73c71b55", + "sanitized_output_sha256": "2ca7dc07264823da8a6eaa7156183d1fbbaa973bfe0f79ebecdd9ffe73c71b55", "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-USDC-V50-READ-ONLY-DIRECT-QGA-SOURCE-DIAG-20260802T223529Z\",\"mutation_outcome\":\"NO_MUTATION\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"changes_made\":false,\"command_id\":\"GRAM1-SITE-USDC-V50-READ-ONLY-DIRECT-QGA-SOURCE-DIAG-20260802T223529Z\",\"commands\":[{\"duration_ms\":32,\"rc\":0,\"stage\":\"compose-config-services\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":11,\"stdout_sha256\":\"eef9f2ae690badd252b6332992b53a6658f483425b294de9826500063f55de9f\"},{\"duration_ms\":7,\"rc\":0,\"stage\":\"inspect-crypto-portfolio\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":12670,\"stdout_sha256\":\"f47f2e23fd203fc060cf3bdda469c6bb73ec47f9f6dfcbcd0f799ac7050b53c0\"},{\"duration_ms\":7,\"rc\":0,\"stage\":\"inspect-crypto-portfolio-worker\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":10792,\"stdout_sha256\":\"ff1345dd2cf83f368e02dff11123f1e10dc6212d8caf30cb8ecdf3979694d428\"},{\"duration_ms\":118,\"rc\":0,\"stage\":\"source-hashes-crypto-portfolio\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":262,\"stdout_sha256\":\"ada0aa78b4a0c5b6b44e7d076e7307359471e2c06065f5fa85e8e9fe549f5bf3\"},{\"duration_ms\":74,\"rc\":0,\"stage\":\"source-hashes-crypto-portfolio-worker\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":86,\"stdout_sha256\":\"572f389d914e2ebb95fb6d85531efd753e4e9de54d1ac2e866c4e26605624de5\"}],\"control_plane_error\":null,\"duration_ms\":293,\"error\":null,\"error_type\":null,\"mutation_outcome\":\"NO_MUTATION\",\"observations\":{\"compose\":{\"available\":true,\"rc\":0,\"services\":[\"web\",\"worker\"]},\"containers\":{\"crypto-portfolio\":{\"app_bind_mounted\":false,\"available\":true,\"image_id\":\"sha256:2a9339d475b2f4a01f060162f48a23b9590eb3ba4b036b46aad72adad540c40d\",\"image_ref\":\"crypto-portfolio-web\",\"restart_count\":0,\"running\":true},\"crypto-portfolio-worker\":{\"app_bind_mounted\":false,\"available\":true,\"image_id\":\"sha256:7ff5fdff7ab373e6b22dfa1a677b000d83ff9d021e4464915078e506781fd0ed\",\"image_ref\":\"crypto-portfolio-worker\",\"restart_count\":0,\"running\":true}},\"database\":{\"amounts_read\":false,\"available\":true,\"holding_rows\":4,\"quick_check\":\"ok\",\"usdc_holding_rows\":0},\"expected_v46_baseline_sha256\":{\"app.py\":\"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d\",\"compose.yaml\":\"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8\",\"templates/index.html\":\"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2\",\"worker.py\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"},\"expected_v46_target_sha256\":{\"app.py\":\"8a81d075297856c2dd843da34e6dd1cb6baa1d9c36d24dbee6865e02aa625e25\",\"compose.yaml\":\"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8\",\"templates/index.html\":\"6ce3a065ba677a74e4b73db15613a1114a1167dc9af40bc76a29ced556aabe36\",\"worker.py\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"},\"runtime_source\":{\"web\":{\"available\":true,\"rc\":0,\"sha256\":{\"/app/app.py\":\"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d\",\"/app/templates/index.html\":\"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2\",\"/app/worker.py\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"}},\"worker\":{\"available\":true,\"rc\":0,\"sha256\":{\"/app/worker.py\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"}}},\"source_classification\":\"V46_BASELINE\",\"source_files\":{\"app.py\":{\"bytes\":32843,\"exists\":true,\"gid\":0,\"is_dir\":false,\"is_file\":true,\"is_symlink\":false,\"mode\":\"0640\",\"path\":\"/opt/stacks/crypto-portfolio/app.py\",\"sha256\":\"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d\",\"uid\":0},\"compose.yaml\":{\"bytes\":1233,\"exists\":true,\"gid\":0,\"is_dir\":false,\"is_file\":true,\"is_symlink\":false,\"mode\":\"0644\",\"path\":\"/opt/stacks/crypto-portfolio/compose.yaml\",\"sha256\":\"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8\",\"uid\":0},\"templates/index.html\":{\"bytes\":38036,\"exists\":true,\"gid\":0,\"is_dir\":false,\"is_file\":true,\"is_symlink\":false,\"mode\":\"0644\",\"path\":\"/opt/stacks/crypto-portfolio/templates/index.html\",\"sha256\":\"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2\",\"uid\":0},\"worker.py\":{\"bytes\":10300,\"exists\":true,\"gid\":0,\"is_dir\":false,\"is_file\":true,\"is_symlink\":false,\"mode\":\"0640\",\"path\":\"/opt/stacks/crypto-portfolio/worker.py\",\"sha256\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\",\"uid\":0}},\"source_semantics\":{\"alerts_still_use_shared_set\":true,\"alerts_use_shared_ids\":true,\"app_readable\":true,\"fixed_usdc_price_present\":false,\"holding_accepts_portfolio_set\":false,\"portfolio_coins_declaration_count\":0,\"portfolio_market_declaration_count\":0,\"positions_use_portfolio_ids\":false,\"positions_use_shared_ids\":true,\"template_readable\":true,\"top_cards_use_shared_ids\":true},\"target_identity\":{\"docker_state\":{\"bytes\":30721152,\"exists\":true,\"gid\":0,\"is_dir\":false,\"is_file\":true,\"is_symlink\":false,\"mode\":\"0755\",\"path\":\"/usr/bin/docker\",\"sha256\":\"dcd656567975bc326ab55e8a043989a60ca336638689d9faa10ef15614709b71\",\"uid\":0},\"euid\":0,\"observed_hostname\":\"core-apps\",\"root_state\":{\"bytes\":4096,\"exists\":true,\"gid\":0,\"is_dir\":true,\"is_file\":false,\"is_symlink\":false,\"mode\":\"0750\",\"path\":\"/opt/stacks/crypto-portfolio\",\"resolved_path\":\"/opt/stacks/crypto-portfolio\",\"uid\":0},\"transport\":\"QEMU_GUEST_AGENT\",\"v46_expected_hostname\":\"core-apps\",\"v46_hostname_match\":true,\"vmid\":170}},\"private_addresses_included\":false,\"rc\":0,\"read_only\":true,\"rollback_restored\":null,\"rollback_started\":false,\"sanitized\":true,\"schema\":1,\"secrets_included\":false,\"status\":\"OK\"}\n" + "output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":true,\"command_id\":\"GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z\",\"mutation_outcome\":\"MUTATED\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"already_target\":false,\"backup_created\":true,\"backup_dir\":\"/var/lib/homelab-change-rollback/GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z\",\"baseline_sha256\":{\"app.py\":\"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d\",\"compose.yaml\":\"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8\",\"templates/index.html\":\"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2\",\"worker.py\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"},\"before_source\":{\"app.py\":\"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d\",\"compose.yaml\":\"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8\",\"templates/index.html\":\"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2\",\"worker.py\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"},\"candidate_checks\":{\"alerts_keep_shared_ids\":true,\"alerts_keep_shared_set\":true,\"fixed_usdc_price\":true,\"holding_uses_portfolio_set\":true,\"portfolio_coins_exactly_once\":true,\"portfolio_market_exactly_once\":true,\"positions_do_not_use_shared_ids\":true,\"positions_use_portfolio_ids\":true,\"shared_coins_exactly_four\":true,\"state_has_separate_sets\":true,\"top_cards_keep_shared_ids\":true,\"usdc_cap_is_not_faked\":true,\"usdc_cap_renders_dash\":true},\"changes_made\":true,\"command_id\":\"GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z\",\"commands\":[{\"duration_ms\":33,\"rc\":0,\"stage\":\"compose-config-services\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":11,\"stdout_sha256\":\"eef9f2ae690badd252b6332992b53a6658f483425b294de9826500063f55de9f\"},{\"duration_ms\":7,\"rc\":0,\"stage\":\"inspect-crypto-portfolio\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":12670,\"stdout_sha256\":\"7f19b523d625932c8cd34e520913087333f14bf2c10de32312130f75017a2407\"},{\"duration_ms\":7,\"rc\":0,\"stage\":\"inspect-crypto-portfolio-worker\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":10792,\"stdout_sha256\":\"ff1345dd2cf83f368e02dff11123f1e10dc6212d8caf30cb8ecdf3979694d428\"},{\"duration_ms\":90,\"rc\":0,\"stage\":\"source-hashes-crypto-portfolio\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":262,\"stdout_sha256\":\"ada0aa78b4a0c5b6b44e7d076e7307359471e2c06065f5fa85e8e9fe549f5bf3\"},{\"duration_ms\":109,\"rc\":0,\"stage\":\"source-hashes-crypto-portfolio-worker\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":86,\"stdout_sha256\":\"572f389d914e2ebb95fb6d85531efd753e4e9de54d1ac2e866c4e26605624de5\"},{\"duration_ms\":25,\"rc\":0,\"stage\":\"candidate-python-compile\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},{\"duration_ms\":18,\"rc\":0,\"stage\":\"tag-rollback-web-image\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},{\"duration_ms\":2103,\"rc\":0,\"stage\":\"build-web-image\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":1303,\"stdout_sha256\":\"3f74e0c070a149f14101978fea9eda4b106daa4fea78526871517266affab06b\"},{\"duration_ms\":7,\"rc\":0,\"stage\":\"inspect-built-web-image\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":4132,\"stdout_sha256\":\"d7ad0201b8aa0b9945bdb668166a4c8352a30e91b9f2820e1de6a48c83132735\"},{\"duration_ms\":310,\"rc\":0,\"stage\":\"validate-built-image\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":178,\"stdout_sha256\":\"6842d3abb40d60576895a8f2374cb1a9eb0925da3489fc6bf7c250c3c0861af2\"},{\"duration_ms\":724,\"rc\":0,\"stage\":\"deploy-web\",\"stderr_bytes\":152,\"stderr_sha256\":\"1dcb2a16346ec12f0cfcb8401261b5802af16448378d340c38c10a23b03ca98e\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},{\"duration_ms\":7,\"rc\":0,\"stage\":\"inspect-crypto-portfolio\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":12671,\"stdout_sha256\":\"d69c30f4d140a26cc276125b872be107f1dba89fa4b3b546422df16e2261223f\"},{\"duration_ms\":7,\"rc\":0,\"stage\":\"inspect-crypto-portfolio-worker\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":10792,\"stdout_sha256\":\"ff1345dd2cf83f368e02dff11123f1e10dc6212d8caf30cb8ecdf3979694d428\"},{\"duration_ms\":100,\"rc\":0,\"stage\":\"source-hashes-crypto-portfolio\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":262,\"stdout_sha256\":\"1b3cb6b7f006708869afd28f262505a7d78090bc6134b97797196350f7deddf5\"},{\"duration_ms\":81,\"rc\":0,\"stage\":\"source-hashes-crypto-portfolio-worker\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":86,\"stdout_sha256\":\"572f389d914e2ebb95fb6d85531efd753e4e9de54d1ac2e866c4e26605624de5\"},{\"rc\":0,\"stage\":\"web-health-probe\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":42,\"stdout_sha256\":\"c0a09902aba0bcc30a0ac9a3a2558bd73dd04158923e3d1a0c620de33bd27e67\"},{\"duration_ms\":512,\"rc\":0,\"stage\":\"validate-runtime-state\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":120,\"stdout_sha256\":\"0d555272a0c94ee97dc70fca13b40c8bfcd8a275b78fecf767dc6a1b53eb8c53\"}],\"control_plane_error\":null,\"database_before\":{\"alerts_count\":4,\"alerts_sha256\":\"5ddd511a4ec70ecfb27cae7f09ee251d69e0a7929396c4c94d67d995791b363d\",\"holdings_count\":4,\"holdings_sha256\":\"19b32c5ab2a5766d4d5c7eef2b391fbcba5b000b4e3bcbe27a04aabd0d934edc\",\"quick_check\":\"ok\",\"usdc_holding_rows\":0},\"deployment\":{\"health\":{\"status\":\"OK\",\"type\":\"crypto-portfolio\"},\"portfolio_state\":{\"portfolio_coin_count\":5,\"shared_coin_count\":4,\"usdc_in_history\":false,\"usdc_in_shared_market\":false,\"usdc_price\":1.0},\"web\":{\"image_id\":\"sha256:168d8c204bea3f166e47dbcd11d5983687db6d3e16c8b3c46a317e8172c2a800\",\"restart_count\":0,\"running\":true},\"web_source_hashes\":{\"/app/app.py\":\"8a81d075297856c2dd843da34e6dd1cb6baa1d9c36d24dbee6865e02aa625e25\",\"/app/templates/index.html\":\"6ce3a065ba677a74e4b73db15613a1114a1167dc9af40bc76a29ced556aabe36\",\"/app/worker.py\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"},\"worker\":{\"restart_count\":0,\"running\":true,\"unchanged\":true},\"worker_source_hashes\":{\"/app/worker.py\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"}},\"duration_ms\":6618,\"error\":null,\"error_type\":null,\"gitea_changed\":false,\"mutation_outcome\":\"MUTATED\",\"private_addresses_included\":false,\"production_site_changed\":true,\"rc\":0,\"rollback_details\":null,\"rollback_restored\":null,\"rollback_started\":false,\"sanitized\":true,\"schema\":1,\"scope\":{\"alerts\":false,\"charts\":false,\"database_migration\":false,\"positions\":true,\"sharp_moves\":false,\"top_coin_cards\":false,\"totals\":true,\"usdc_price_usd\":1.0,\"worker\":false},\"secrets_included\":false,\"status\":\"OK\",\"target_sha256\":{\"app.py\":\"8a81d075297856c2dd843da34e6dd1cb6baa1d9c36d24dbee6865e02aa625e25\",\"compose.yaml\":\"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8\",\"templates/index.html\":\"6ce3a065ba677a74e4b73db15613a1114a1167dc9af40bc76a29ced556aabe36\",\"worker.py\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"},\"worker_changed\":false}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 0cf7f9f..90c22ec 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,34 +1,34 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=GRAM1-SITE-USDC-V50-READ-ONLY-DIRECT-QGA-SOURCE-DIAG-20260802T223529Z +COMMAND_ID=GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z STATUS=OK RC=0 HOST=pve01 -MODE=verify -COMPONENT=gram1-site-usdc-read-only-direct-qga-source-diag +MODE=change +COMPONENT=gram1-site-usdc-atomic-direct-qga-portfolio REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 -COMMAND_SHA256=3f8cc02deb5c35249b401acfaefa0cee6e5e542ca5f32624ea159b9c0f77bf15 +COMMAND_SHA256=057b4b66e92c1a595f3a37722e83311db20836a037db4233596e94e5f1282bc4 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true -CHANGE_DECLARED=false +CHANGE_DECLARED=true RESULT_CONTRACT_VALID=true -RESULT_CONTRACT_STATUS=NOT_APPLICABLE +RESULT_CONTRACT_STATUS=OK RESULT_CONTRACT_ERROR=NONE COMMAND_RC=0 -CHANGES_MADE=false +CHANGES_MADE=true ROLLBACK_STARTED=false ROLLBACK_RESTORED=null -MUTATION_OUTCOME=NO_MUTATION +MUTATION_OUTCOME=MUTATED SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=d0630af716a246d0621840fdab6bcbd7cfc6e5a03c4accc464b597d374b9ace9 -SANITIZED_OUTPUT_SHA256=d0630af716a246d0621840fdab6bcbd7cfc6e5a03c4accc464b597d374b9ace9 +RAW_EVIDENCE_SHA256=2ca7dc07264823da8a6eaa7156183d1fbbaa973bfe0f79ebecdd9ffe73c71b55 +SANITIZED_OUTPUT_SHA256=2ca7dc07264823da8a6eaa7156183d1fbbaa973bfe0f79ebecdd9ffe73c71b55 OUTPUT_BEGIN -HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"GRAM1-SITE-USDC-V50-READ-ONLY-DIRECT-QGA-SOURCE-DIAG-20260802T223529Z","mutation_outcome":"NO_MUTATION","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} -{"changes_made":false,"command_id":"GRAM1-SITE-USDC-V50-READ-ONLY-DIRECT-QGA-SOURCE-DIAG-20260802T223529Z","commands":[{"duration_ms":32,"rc":0,"stage":"compose-config-services","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":11,"stdout_sha256":"eef9f2ae690badd252b6332992b53a6658f483425b294de9826500063f55de9f"},{"duration_ms":7,"rc":0,"stage":"inspect-crypto-portfolio","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":12670,"stdout_sha256":"f47f2e23fd203fc060cf3bdda469c6bb73ec47f9f6dfcbcd0f799ac7050b53c0"},{"duration_ms":7,"rc":0,"stage":"inspect-crypto-portfolio-worker","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":10792,"stdout_sha256":"ff1345dd2cf83f368e02dff11123f1e10dc6212d8caf30cb8ecdf3979694d428"},{"duration_ms":118,"rc":0,"stage":"source-hashes-crypto-portfolio","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":262,"stdout_sha256":"ada0aa78b4a0c5b6b44e7d076e7307359471e2c06065f5fa85e8e9fe549f5bf3"},{"duration_ms":74,"rc":0,"stage":"source-hashes-crypto-portfolio-worker","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":86,"stdout_sha256":"572f389d914e2ebb95fb6d85531efd753e4e9de54d1ac2e866c4e26605624de5"}],"control_plane_error":null,"duration_ms":293,"error":null,"error_type":null,"mutation_outcome":"NO_MUTATION","observations":{"compose":{"available":true,"rc":0,"services":["web","worker"]},"containers":{"crypto-portfolio":{"app_bind_mounted":false,"available":true,"image_id":"sha256:2a9339d475b2f4a01f060162f48a23b9590eb3ba4b036b46aad72adad540c40d","image_ref":"crypto-portfolio-web","restart_count":0,"running":true},"crypto-portfolio-worker":{"app_bind_mounted":false,"available":true,"image_id":"sha256:7ff5fdff7ab373e6b22dfa1a677b000d83ff9d021e4464915078e506781fd0ed","image_ref":"crypto-portfolio-worker","restart_count":0,"running":true}},"database":{"amounts_read":false,"available":true,"holding_rows":4,"quick_check":"ok","usdc_holding_rows":0},"expected_v46_baseline_sha256":{"app.py":"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d","compose.yaml":"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8","templates/index.html":"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2","worker.py":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c"},"expected_v46_target_sha256":{"app.py":"8a81d075297856c2dd843da34e6dd1cb6baa1d9c36d24dbee6865e02aa625e25","compose.yaml":"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8","templates/index.html":"6ce3a065ba677a74e4b73db15613a1114a1167dc9af40bc76a29ced556aabe36","worker.py":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c"},"runtime_source":{"web":{"available":true,"rc":0,"sha256":{"/app/app.py":"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d","/app/templates/index.html":"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2","/app/worker.py":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c"}},"worker":{"available":true,"rc":0,"sha256":{"/app/worker.py":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c"}}},"source_classification":"V46_BASELINE","source_files":{"app.py":{"bytes":32843,"exists":true,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"mode":"0640","path":"/opt/stacks/crypto-portfolio/app.py","sha256":"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d","uid":0},"compose.yaml":{"bytes":1233,"exists":true,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"mode":"0644","path":"/opt/stacks/crypto-portfolio/compose.yaml","sha256":"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8","uid":0},"templates/index.html":{"bytes":38036,"exists":true,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"mode":"0644","path":"/opt/stacks/crypto-portfolio/templates/index.html","sha256":"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2","uid":0},"worker.py":{"bytes":10300,"exists":true,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"mode":"0640","path":"/opt/stacks/crypto-portfolio/worker.py","sha256":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c","uid":0}},"source_semantics":{"alerts_still_use_shared_set":true,"alerts_use_shared_ids":true,"app_readable":true,"fixed_usdc_price_present":false,"holding_accepts_portfolio_set":false,"portfolio_coins_declaration_count":0,"portfolio_market_declaration_count":0,"positions_use_portfolio_ids":false,"positions_use_shared_ids":true,"template_readable":true,"top_cards_use_shared_ids":true},"target_identity":{"docker_state":{"bytes":30721152,"exists":true,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"mode":"0755","path":"/usr/bin/docker","sha256":"dcd656567975bc326ab55e8a043989a60ca336638689d9faa10ef15614709b71","uid":0},"euid":0,"observed_hostname":"core-apps","root_state":{"bytes":4096,"exists":true,"gid":0,"is_dir":true,"is_file":false,"is_symlink":false,"mode":"0750","path":"/opt/stacks/crypto-portfolio","resolved_path":"/opt/stacks/crypto-portfolio","uid":0},"transport":"QEMU_GUEST_AGENT","v46_expected_hostname":"core-apps","v46_hostname_match":true,"vmid":170}},"private_addresses_included":false,"rc":0,"read_only":true,"rollback_restored":null,"rollback_started":false,"sanitized":true,"schema":1,"secrets_included":false,"status":"OK"} +HOMELAB_RESULT_CONTRACT={"changes_made":true,"command_id":"GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z","mutation_outcome":"MUTATED","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +{"already_target":false,"backup_created":true,"backup_dir":"/var/lib/homelab-change-rollback/GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z","baseline_sha256":{"app.py":"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d","compose.yaml":"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8","templates/index.html":"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2","worker.py":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c"},"before_source":{"app.py":"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d","compose.yaml":"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8","templates/index.html":"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2","worker.py":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c"},"candidate_checks":{"alerts_keep_shared_ids":true,"alerts_keep_shared_set":true,"fixed_usdc_price":true,"holding_uses_portfolio_set":true,"portfolio_coins_exactly_once":true,"portfolio_market_exactly_once":true,"positions_do_not_use_shared_ids":true,"positions_use_portfolio_ids":true,"shared_coins_exactly_four":true,"state_has_separate_sets":true,"top_cards_keep_shared_ids":true,"usdc_cap_is_not_faked":true,"usdc_cap_renders_dash":true},"changes_made":true,"command_id":"GRAM1-SITE-USDC-V51-ATOMIC-DIRECT-QGA-PORTFOLIO-20260802T224432Z","commands":[{"duration_ms":33,"rc":0,"stage":"compose-config-services","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":11,"stdout_sha256":"eef9f2ae690badd252b6332992b53a6658f483425b294de9826500063f55de9f"},{"duration_ms":7,"rc":0,"stage":"inspect-crypto-portfolio","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":12670,"stdout_sha256":"7f19b523d625932c8cd34e520913087333f14bf2c10de32312130f75017a2407"},{"duration_ms":7,"rc":0,"stage":"inspect-crypto-portfolio-worker","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":10792,"stdout_sha256":"ff1345dd2cf83f368e02dff11123f1e10dc6212d8caf30cb8ecdf3979694d428"},{"duration_ms":90,"rc":0,"stage":"source-hashes-crypto-portfolio","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":262,"stdout_sha256":"ada0aa78b4a0c5b6b44e7d076e7307359471e2c06065f5fa85e8e9fe549f5bf3"},{"duration_ms":109,"rc":0,"stage":"source-hashes-crypto-portfolio-worker","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":86,"stdout_sha256":"572f389d914e2ebb95fb6d85531efd753e4e9de54d1ac2e866c4e26605624de5"},{"duration_ms":25,"rc":0,"stage":"candidate-python-compile","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"duration_ms":18,"rc":0,"stage":"tag-rollback-web-image","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"duration_ms":2103,"rc":0,"stage":"build-web-image","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":1303,"stdout_sha256":"3f74e0c070a149f14101978fea9eda4b106daa4fea78526871517266affab06b"},{"duration_ms":7,"rc":0,"stage":"inspect-built-web-image","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":4132,"stdout_sha256":"d7ad0201b8aa0b9945bdb668166a4c8352a30e91b9f2820e1de6a48c83132735"},{"duration_ms":310,"rc":0,"stage":"validate-built-image","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":178,"stdout_sha256":"6842d3abb40d60576895a8f2374cb1a9eb0925da3489fc6bf7c250c3c0861af2"},{"duration_ms":724,"rc":0,"stage":"deploy-web","stderr_bytes":152,"stderr_sha256":"1dcb2a16346ec12f0cfcb8401261b5802af16448378d340c38c10a23b03ca98e","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"duration_ms":7,"rc":0,"stage":"inspect-crypto-portfolio","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":12671,"stdout_sha256":"d69c30f4d140a26cc276125b872be107f1dba89fa4b3b546422df16e2261223f"},{"duration_ms":7,"rc":0,"stage":"inspect-crypto-portfolio-worker","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":10792,"stdout_sha256":"ff1345dd2cf83f368e02dff11123f1e10dc6212d8caf30cb8ecdf3979694d428"},{"duration_ms":100,"rc":0,"stage":"source-hashes-crypto-portfolio","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":262,"stdout_sha256":"1b3cb6b7f006708869afd28f262505a7d78090bc6134b97797196350f7deddf5"},{"duration_ms":81,"rc":0,"stage":"source-hashes-crypto-portfolio-worker","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":86,"stdout_sha256":"572f389d914e2ebb95fb6d85531efd753e4e9de54d1ac2e866c4e26605624de5"},{"rc":0,"stage":"web-health-probe","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":42,"stdout_sha256":"c0a09902aba0bcc30a0ac9a3a2558bd73dd04158923e3d1a0c620de33bd27e67"},{"duration_ms":512,"rc":0,"stage":"validate-runtime-state","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":120,"stdout_sha256":"0d555272a0c94ee97dc70fca13b40c8bfcd8a275b78fecf767dc6a1b53eb8c53"}],"control_plane_error":null,"database_before":{"alerts_count":4,"alerts_sha256":"5ddd511a4ec70ecfb27cae7f09ee251d69e0a7929396c4c94d67d995791b363d","holdings_count":4,"holdings_sha256":"19b32c5ab2a5766d4d5c7eef2b391fbcba5b000b4e3bcbe27a04aabd0d934edc","quick_check":"ok","usdc_holding_rows":0},"deployment":{"health":{"status":"OK","type":"crypto-portfolio"},"portfolio_state":{"portfolio_coin_count":5,"shared_coin_count":4,"usdc_in_history":false,"usdc_in_shared_market":false,"usdc_price":1.0},"web":{"image_id":"sha256:168d8c204bea3f166e47dbcd11d5983687db6d3e16c8b3c46a317e8172c2a800","restart_count":0,"running":true},"web_source_hashes":{"/app/app.py":"8a81d075297856c2dd843da34e6dd1cb6baa1d9c36d24dbee6865e02aa625e25","/app/templates/index.html":"6ce3a065ba677a74e4b73db15613a1114a1167dc9af40bc76a29ced556aabe36","/app/worker.py":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c"},"worker":{"restart_count":0,"running":true,"unchanged":true},"worker_source_hashes":{"/app/worker.py":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c"}},"duration_ms":6618,"error":null,"error_type":null,"gitea_changed":false,"mutation_outcome":"MUTATED","private_addresses_included":false,"production_site_changed":true,"rc":0,"rollback_details":null,"rollback_restored":null,"rollback_started":false,"sanitized":true,"schema":1,"scope":{"alerts":false,"charts":false,"database_migration":false,"positions":true,"sharp_moves":false,"top_coin_cards":false,"totals":true,"usdc_price_usd":1.0,"worker":false},"secrets_included":false,"status":"OK","target_sha256":{"app.py":"8a81d075297856c2dd843da34e6dd1cb6baa1d9c36d24dbee6865e02aa625e25","compose.yaml":"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8","templates/index.html":"6ce3a065ba677a74e4b73db15613a1114a1167dc9af40bc76a29ced556aabe36","worker.py":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c"},"worker_changed":false} OUTPUT_END CHAT_OUTPUT_END