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
