CHAT_OUTPUT_BEGIN
COMMAND_ID=HBARHUB-DEPLOYMENT-PLAN-V1-20260729T152500Z
STATUS=OK
RC=0
HOST=pve01
MODE=verify
COMPONENT=hbarhub-deployment-plan-v1
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83
COMMAND_SHA256=1a52142d8f07c20539a890d3e04d9a92b6aea77e4b6bb41b1c9d62e154e3e3fc
DUPLICATE_FAILED_COMMAND_BLOCKED=false
EXECUTION_STARTED=true
CHANGE_DECLARED=false
RESULT_CONTRACT_VALID=true
RESULT_CONTRACT_STATUS=NOT_APPLICABLE
RESULT_CONTRACT_ERROR=NONE
COMMAND_RC=0
CHANGES_MADE=false
ROLLBACK_STARTED=false
ROLLBACK_RESTORED=null
MUTATION_OUTCOME=NO_MUTATION
SANITIZED=yes
SECRETS_INCLUDED=no
PRIVATE_ADDRESSES_INCLUDED=no
RAW_EVIDENCE_SHA256=021bdd8ff374d6f279f51e3a5229cac7da0d447adeb8c5741636daaa82fb4770
SANITIZED_OUTPUT_SHA256=021bdd8ff374d6f279f51e3a5229cac7da0d447adeb8c5741636daaa82fb4770
OUTPUT_BEGIN
HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"HBARHUB-DEPLOYMENT-PLAN-V1-20260729T152500Z","rollback_restored":null,"rollback_started":false,"status":"OK","version":1}
{"PLAN_SHA256":"1d46135831d977cba89adfc1fb03ee969d11030f9ed2b277464b2bbdff7b27df","approved_architecture":{"application":"Django","database":"PostgreSQL","notifications":["Gotify","Telegram later"],"public_proxy":"NPMplus","queue":"Redis","web_port":8040,"workers":"Celery worker + Celery beat"},"asset_baseline":{"crypto":[{"coingecko_id":"hedera-hashgraph","symbol":"HBAR"},{"coingecko_id":"polygon-ecosystem-token","symbol":"POL"},{"coingecko_id":"avalanche-2","symbol":"AVAX"},{"coingecko_id":"chainlink","symbol":"LINK"}],"tracked":{"DATA_CENTER_REITS":["VPN","CLOU","EQIX","DLR"],"URANIUM_ETF_AND_TRUST":["URA","URNM","SRUUF","NLR","URNJ","RCTR"],"URANIUM_STOCKS":["CCJ","CEG","UUUU","DNN","UEC","LEU","BWXT","SMR"]}},"changes_made":false,"command_id":"HBARHUB-DEPLOYMENT-PLAN-V1-20260729T152500Z","core_reference_paths":[{"bytes":1233,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0644","path":"/opt/stacks/crypto-portfolio/compose.yaml","sha256":"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8","uid":0},{"bytes":10343,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0640","path":"/opt/stacks/crypto-portfolio/worker.py.bak-icons-20260711T004054Z","sha256":"dcc4fcc47b8b244046ac082fc5fcfe6c35160a9b8721245eb763ad6d2e57aadf","uid":0},{"bytes":10256,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0640","path":"/opt/stacks/crypto-portfolio/worker.py","sha256":"174a14b86014535980d200a76d0057110c7af102c66f16c2e21fc3e74bb2e49e","uid":0},{"bytes":9535,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0640","path":"/opt/stacks/crypto-portfolio/worker.py.bak-currency-rebuild-20260711T002156Z","sha256":"4a2fa9348c36247ca26b8f38a5303c4ffd6c17f559223bf46e75a86929c6263b","uid":0},{"bytes":6938,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0640","path":"/opt/stacks/crypto-portfolio/app.py.bak-icons-20260711T004054Z","sha256":"3b41fb76cbd4ca18598f882e5180a0b2f41152086d52a972eedf165eece9f80e","uid":0},{"bytes":17955,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0640","path":"/opt/stacks/crypto-portfolio/app.py","sha256":"44df2b25183b7c5d87ff1516ec2d9cd1d169acde3031f7c2aa1fc4e0c7813cd2","uid":0},{"bytes":9535,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0640","path":"/opt/stacks/crypto-portfolio/worker.py.bak-usd-rub-20260711T001327Z","sha256":"4a2fa9348c36247ca26b8f38a5303c4ffd6c17f559223bf46e75a86929c6263b","uid":0},{"bytes":9507,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0640","path":"/opt/stacks/crypto-portfolio/worker.py.bak-runtime-fix-20260710T164812Z","sha256":"69703bb68857ba34460af308d6e528bffedb21a7aebed75f377af7471a3cd3e6","uid":0},{"bytes":6938,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0640","path":"/opt/stacks/crypto-portfolio/app.py.bak-icons-layout-20260711T005138Z","sha256":"3b41fb76cbd4ca18598f882e5180a0b2f41152086d52a972eedf165eece9f80e","uid":0},{"bytes":9535,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0640","path":"/opt/stacks/crypto-portfolio/worker.py.bak-currency-ui-20260711T000554Z","sha256":"4a2fa9348c36247ca26b8f38a5303c4ffd6c17f559223bf46e75a86929c6263b","uid":0},{"bytes":6910,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0640","path":"/opt/stacks/crypto-portfolio/app.py.bak-runtime-fix-20260710T164812Z","sha256":"7e10e9b285111a4c301fdc70b5e5e6b504ef613c135dd8c8374fc392c05ddda1","uid":0},{"bytes":9535,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0600","path":"/opt/stacks/crypto-portfolio/worker.py.rollback-running-20260711T003109Z","sha256":"4a2fa9348c36247ca26b8f38a5303c4ffd6c17f559223bf46e75a86929c6263b","uid":0},{"bytes":6938,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0640","path":"/opt/stacks/crypto-portfolio/app.py.bak-icons-layout-v4-20260711T005609Z","sha256":"3b41fb76cbd4ca18598f882e5180a0b2f41152086d52a972eedf165eece9f80e","uid":0},{"bytes":21619,"gid":1000,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0644","path":"/opt/stacks/gitea/data/gitea/runtime-stage/latest.txt","sha256":"1ed63fca4c6131cd9df2de81f4a2bb346dfd75f4c6b8b0cc43a42d28cbc1799f","uid":1000},{"bytes":462349,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0644","path":"/opt/stacks/gitea/data/gitea/public/.well-known/homelab-bootstrap.json","sha256":"7be8012c619c01d5770417d3a26ca82c7cd14935ed5cf10fd7cb6e2fa687c82f","uid":0},{"bytes":44382,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0644","path":"/opt/stacks/gitea/data/gitea/public/assets/homelab-context/command-output/cr0027-cleanup-inventory.txt","sha256":"0117d852de7cc3fc6d4eb5362cd3eba80923448042d5e80519fa8ace1cc2dcfa","uid":0},{"bytes":28566,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0644","path":"/opt/stacks/gitea/data/gitea/public/assets/homelab-context/command-output/cr0027-inventory-v2.json","sha256":"cfafce78901d4d519565bc808bd108d27d3c20134d2c0e3517bb9c2ef77998de","uid":0},{"bytes":36414,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0644","path":"/opt/stacks/gitea/data/gitea/public/assets/homelab-context/command-output/cr0027-change-inventory.json","sha256":"4d7943315d368da730cfa18c58c21c4f2ee710b9953df6901dab3fc2daeef814","uid":0},{"bytes":462349,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0644","path":"/opt/stacks/gitea/data/gitea/public/.well-known/homelab-bootstrap/7be8012c619c01d5770417d3a26ca82c7cd14935ed5cf10fd7cb6e2fa687c82f.json","sha256":"7be8012c619c01d5770417d3a26ca82c7cd14935ed5cf10fd7cb6e2fa687c82f","uid":0},{"bytes":21619,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0644","path":"/opt/stacks/gitea/data/gitea/public/.well-known/homelab-runtime/latest.txt","sha256":"1ed63fca4c6131cd9df2de81f4a2bb346dfd75f4c6b8b0cc43a42d28cbc1799f","uid":0},{"bytes":25871,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0640","path":"/opt/stacks/crypto-portfolio/__pycache__/app.cpython-313.pyc","sha256":"9753184c226c5daffeb4f08c9b2c4bb77ddf121cc94617f7caedbc878be6bf7b","uid":0},{"bytes":16784,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio"],"mode":"0640","path":"/opt/stacks/crypto-portfolio/__pycache__/worker.cpython-313.pyc","sha256":"b4888e983604909328d115c8bc322dc5764151323982038d1082db6a8c389283","uid":0},{"bytes":57521,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["hbarhub"],"mode":"0644","path":"/opt/stacks/minio/data/homelab-command-capsules/capsules/1a5e882626f26718b1864c75887be82d62fef74be679bd4a2bf053d3faae129f.hcmd/xl.meta","sha256":"ead16f70ed9bbcd82941186b37d51a48642e6bcaaf0c2181cafe69471a83c5f8","uid":0},{"bytes":36440,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["hbarhub"],"mode":"0644","path":"/opt/stacks/minio/data/homelab-command-capsules/capsules/67c4ae0ffeb3e1d143625de622933f1cc377db46c9c49edc521a4d4e7a57cb7b.hcmd/xl.meta","sha256":"edcfe97ec18e568b6477c57d50f6871964f7bd7ae4b7bddd339ee2c68baf842d","uid":0},{"bytes":18203,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["hbarhub"],"mode":"0644","path":"/opt/stacks/minio/data/homelab-command-capsules/capsules/1a6c9a82d85f5dae4d428a70f378b9cbc87035ecc92fef200f46118bef70d099.hcmd/xl.meta","sha256":"cac2f3f58bf5bf495dfae5a8040a066328f16869bacbee1a8788f4ca90490625","uid":0},{"bytes":49748,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["hbarhub"],"mode":"0644","path":"/opt/stacks/minio/data/homelab-command-capsules/capsules/ae19d40259bba21359f9976413e354adcaf8abf2e930f90ed92c8c17f51b24c0.hcmd/xl.meta","sha256":"be576d6ba217eeddcb3c094d97295b740b45a53aebdfe98ee7b30ea178fc180a","uid":0},{"bytes":34971,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["hbarhub"],"mode":"0644","path":"/opt/stacks/minio/data/homelab-command-capsules/capsules/3a67aa2bdcdbcf80e9ebc149b6976dfcc89595f5febfa1be25700fe1f9f2e4da.hcmd/xl.meta","sha256":"39aa8fb1f6ff9ca7e2451fc2fc88eea584e323499f202615e5c1d3c38bc65a07","uid":0},{"bytes":37344,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["crypto-portfolio","hbarhub"],"mode":"0644","path":"/opt/stacks/minio/data/homelab-command-capsules/capsules/8ae8cadf8a2b0574e6d8089c8d7cfee6b387ea9e35cf52ab010daec76281ec5a.hcmd/xl.meta","sha256":"b7dbfe01a3e7930a7fc9c69f1275ec726264eecd2d5f1b81b20d824fe4d46841","uid":0},{"bytes":40707,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["hbarhub"],"mode":"0644","path":"/opt/stacks/minio/data/homelab-command-capsules/capsules/879f53e67631809491953b88cd002ccf01ba0b795d4e312aa82bbddd6bacdd88.hcmd/xl.meta","sha256":"2a8ae235921978e3db577c6872a7a237d4bdb24a4b2a19290bfd302cda984866","uid":0},{"bytes":52808,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["hbarhub"],"mode":"0644","path":"/opt/stacks/minio/data/homelab-command-capsules/capsules/9c179070977758d8e4d29f6da15bd6e2917689c9b1ff42c71b3b36825b504f49.hcmd/xl.meta","sha256":"fe7027b2332d2fa7c5fe4f231629d0b8b33e6f4a1f860987889e4a7df53bdd7c","uid":0},{"bytes":17062,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"matched":["hbarhub"],"mode":"0644","path":"/opt/stacks/minio/data/homelab-command-capsules/capsules/5a765cefe1152f198acc281306a1818e061a38036992c015de3e008b90fe43ea.hcmd/xl.meta","sha256":"6cab87a42c84e3ffbe1ca5509aeec423e69ae6f3312f506c74aa190194817403","uid":0}],"deployment_gate":"READY_WITH_EXISTING_ASSET_REVIEW","edge_reference":{"crypto_portfolio_refs":[],"hbarhub_refs":[],"nginx_test":{"rc":0,"stderr_sha256":"9cb221b6993277a11765b15bdded4e9b090f1c2a8f5ed573e907ae3b6921f27c","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"npmplus":{"health":"healthy","image":"docker.io/zoeyvid/npmplus:2026-06-17-b1","mounts":[{"destination":"/data","source":"/opt/npmplus","type":"bind"}],"status":"running"}},"existing_hbarhub_paths":[{"bytes":4096,"gid":0,"is_dir":true,"is_file":false,"is_symlink":false,"mode":"0755","path":"/opt/stacks/minio/data/homelab-evidence/portal/HBARHUB-PVE-CLI-READONLY-DIAG-20260729T101639Z","uid":0},{"bytes":4096,"gid":0,"is_dir":true,"is_file":false,"is_symlink":false,"mode":"0755","path":"/opt/stacks/minio/data/homelab-evidence/portal/HBARHUB-PVE-IPC-NAMESPACE-DIAG-20260729T104500Z","uid":0},{"bytes":4096,"gid":0,"is_dir":true,"is_file":false,"is_symlink":false,"mode":"0755","path":"/opt/stacks/minio/data/homelab-evidence/portal/HBARHUB-READONLY-INVENTORY-V1-20260729T145500Z","uid":0},{"bytes":4096,"gid":0,"is_dir":true,"is_file":false,"is_symlink":false,"mode":"0755","path":"/opt/stacks/minio/data/homelab-evidence/portal/HBARHUB-AUTO-DISCOVERY-FIX2-20260729T104000Z","uid":0},{"bytes":4096,"gid":0,"is_dir":true,"is_file":false,"is_symlink":false,"mode":"0755","path":"/opt/stacks/minio/data/homelab-evidence/portal/HBARHUB-AUTO-DISCOVERY-FIX4-20260729T105500Z","uid":0},{"bytes":4096,"gid":0,"is_dir":true,"is_file":false,"is_symlink":false,"mode":"0755","path":"/opt/stacks/minio/data/homelab-evidence/portal/HBARHUB-CLUSTER-DISCOVERY-PLAN-FIX1-20260729T101000Z","uid":0},{"bytes":4096,"gid":0,"is_dir":true,"is_file":false,"is_symlink":false,"mode":"0755","path":"/opt/stacks/minio/data/homelab-evidence/portal/HBARHUB-READONLY-INVENTORY-V2-20260729T151000Z","uid":0}],"gitea_hbarhub_search":{"body_sha256":"45b93ccefd22e5ec4796dc8d5173e3060566fec357528dfe20b3bd814d9bc430","count":0,"full_names":[],"http":200},"hard_checks":{"all_guests_readable":true,"all_vms_running":true,"core_docker":true,"core_port_8040_free":true,"edge_npmplus_healthy":true,"monitoring_ready":true,"no_existing_public_proxy":true,"no_mutation":true},"implementation_stages":[{"name_ru":"Репозиторий и исходный каркас","order":1,"scope":"Gitea only"},{"name_ru":"Локальный стек на core-apps","order":2,"scope":"web, worker, scheduler, PostgreSQL, Redis; port 8040; no public proxy"},{"name_ru":"Рыночные данные и Hedera","order":3,"scope":"HBAR, POL, AVAX, LINK; prices, market cap, supply, network status"},{"name_ru":"Русские новости","order":4,"scope":"source allowlist, deduplication, summaries, provenance"},{"name_ru":"Радар токенизации","order":5,"scope":"18 tracked assets, evidence and status state machine"},{"name_ru":"Сигналы","order":6,"scope":"paper and notification-only; no exchange keys"},{"name_ru":"Публичный домен","order":7,"scope":"NPMplus and TLS after local health passes"},{"name_ru":"Мониторинг и резервирование","order":8,"scope":"Uptime Kuma, Gotify, backup and restore check"}],"monitoring_reference":{"containers":{"alertmanager":{"health":null,"image":"prom/alertmanager:v0.33.0","mount_destinations":["/alertmanager","/etc/alertmanager/alertmanager.yml"],"status":"running"},"gotify":{"health":"healthy","image":"gotify/server:latest","mount_destinations":["/app/data"],"status":"running"},"ntfy":{"health":null,"image":"binwiederhier/ntfy:latest","mount_destinations":["/var/cache/ntfy","/var/lib/ntfy"],"status":"running"},"prometheus":{"health":null,"image":"prom/prometheus:latest","mount_destinations":["/etc/prometheus/prometheus.yml","/etc/prometheus/rules","/prometheus"],"status":"running"},"uptime-kuma":{"health":"healthy","image":"louislam/uptime-kuma:2-slim","mount_destinations":["/app/data"],"status":"running"}},"crypto_portfolio_health_refs":[],"docker_present":true,"hbarhub_health_refs":[],"hostname_matches":true,"role":"monitoring","schema":1},"mutation_outcome":"NO_MUTATION","next_stage":"GITEA_AND_PATH_RECONCILIATION_PLAN","parent_evidence":{"PLAN_SHA256":"a6e7fa6dd20d57504d31748aeec0bd28c567c1c5fb5ce697dbbae36606cba483","capsule_sha256":"9c179070977758d8e4d29f6da15bd6e2917689c9b1ff42c71b3b36825b504f49","command_id":"HBARHUB-READONLY-INVENTORY-V2-20260729T151000Z","deployment_gate":"READY_FOR_DEPLOYMENT_PLAN","runner_json_sha256":"65ddc2b24974f12c63ba92f01f04596fb5632b34da69e2c074be8f1cff15940f","status":"OK"},"private_addresses_included":false,"reference_stack":{"health":null,"image":"crypto-portfolio-web","mount_destinations":["/data","/run/secrets/email_config","/run/secrets/password_hash","/run/secrets/session_secret"],"network_names":["crypto-portfolio_default"],"published_container_ports":["8000/tcp"],"status":"running"},"rollback_restored":null,"rollback_started":false,"sanitized":true,"schema":1,"secrets_included":false,"status":"PLAN_COMPLETE"}

OUTPUT_END
CHAT_OUTPUT_END
