CHAT_OUTPUT_BEGIN
COMMAND_ID=GRAM1-SITE-AVAX-LINK-V19-COMPACT-EXACT-MUTATION-PLAN-20260731T214500Z
STATUS=OK
RC=0
HOST=pve01
MODE=verify
COMPONENT=gram1-site-avax-link-v19-compact-exact-mutation-plan
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83
COMMAND_SHA256=1ed1362093ed14fe34af9efeda65578674716b88c7e52e396995974f093fb0aa
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=7fc7bae7e40690157caeec045fa657f44d1c5cedd22f4060067ea3cce02703bf
SANITIZED_OUTPUT_SHA256=7fc7bae7e40690157caeec045fa657f44d1c5cedd22f4060067ea3cce02703bf
OUTPUT_BEGIN
HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"GRAM1-SITE-AVAX-LINK-V19-COMPACT-EXACT-MUTATION-PLAN-20260731T214500Z","mutation_outcome":"NO_MUTATION","rollback_restored":null,"rollback_started":false,"status":"OK","version":1}
{"changes_made":false,"command_id":"GRAM1-SITE-AVAX-LINK-V19-COMPACT-EXACT-MUTATION-PLAN-20260731T214500Z","compact_plan":{"anchors_exact":true,"app":{"assignments":[{"end_line":13,"line":13,"literal":{"hedera-hashgraph":"HBAR","polygon-ecosystem-token":"POL"},"names":["COINS"],"source":"COINS = {\"hedera-hashgraph\": \"HBAR\", \"polygon-ecosystem-token\": \"POL\"}"},{"end_line":139,"line":139,"literal":{"HBAR":"HBARUSDT","POL":"POLUSDT"},"names":["KLINE_SYMBOLS"],"source":"KLINE_SYMBOLS = {\"HBAR\": \"HBARUSDT\", \"POL\": \"POLUSDT\"}"},{"end_line":128,"line":128,"literal":{"binancecoin":"BNB","bitcoin":"₿","cardano":"ADA","chainlink":"LINK","dogecoin":"Ð","ethereum":"Ξ","hedera":"HBAR","hedera-hashgraph":"HBAR","ripple":"XRP","solana":"S","toncoin":"TON"},"names":["symbols"],"source":"symbols = {\"bitcoin\":\"₿\",\"ethereum\":\"Ξ\",\"solana\":\"S\",\"binancecoin\":\"BNB\",\"ripple\":\"XRP\",\"cardano\":\"ADA\",\"hedera-hashgraph\":\"HBAR\",\"hedera\":\"HBAR\",\"chainlink\":\"LINK\",\"toncoin\":\"TON\",\"dogecoin\":\"Ð\"}"}],"chart_health_loops":[{"iter_literal":["HBAR","POL"],"line":317,"source":"(\"HBAR\", \"POL\")"}]},"compose":{"compose_file":"compose.yaml","config_rc":0,"services":["web","worker"],"stderr":""},"duration_seconds":0.011,"files":[{"bytes":17955,"exists":true,"gid":0,"mode":"0o640","path":"app.py","sha256":"44df2b25183b7c5d87ff1516ec2d9cd1d169acde3031f7c2aa1fc4e0c7813cd2","uid":0},{"bytes":10256,"exists":true,"gid":0,"mode":"0o640","path":"worker.py","sha256":"174a14b86014535980d200a76d0057110c7af102c66f16c2e21fc3e74bb2e49e","uid":0},{"bytes":29469,"exists":true,"gid":0,"mode":"0o644","path":"templates/index.html","sha256":"e497a36d8549654c6d451360a11a2ad714e19c23e6d384330a5436f7d32267cb","uid":0},{"bytes":1233,"exists":true,"gid":0,"mode":"0o644","path":"compose.yaml","sha256":"6d344e46b3de94ad86131a914df2ff3ff25e9d82f7ce0557cbffa468b8cdc1b8","uid":0},{"bytes":465,"exists":true,"gid":0,"mode":"0o644","path":"Dockerfile","sha256":"a5d546ddb9b4fac44cc00a43c18a18a8cdb246afea4dfc945089759d0dec0fcb","uid":0},{"bytes":123,"exists":true,"gid":0,"mode":"0o644","path":"requirements.txt","sha256":"5dec3868a6a71a7dc8810b57acae9de25b99cae6978cd1750f4b0c01b27055a2","uid":0}],"hashes_match_v18":true,"hostname":"core-apps","next_decision":"ONE_ATOMIC_TRANSACTION_WITH_BACKUP_CANDIDATE_TEST_APPLY_VERIFY_ROLLBACK","planned_files":["app.py","worker.py"],"provider_probe":{"binance":{"AVAXUSDT":true,"LINKUSDT":true},"coingecko":{"found":{"avalanche-2":"AVAX","chainlink":"LINK"},"ok":true}},"rc":0,"root":"/opt/stacks/crypto-portfolio","root_exists":true,"schema":1,"status":"OK","target":{"binance_symbols":{"AVAX":"AVAXUSDT","HBAR":"HBARUSDT","LINK":"LINKUSDT","POL":"POLUSDT"},"chart_health_symbols":["HBAR","POL","AVAX","LINK"],"coingecko_coins":{"avalanche-2":"AVAX","chainlink":"LINK","hedera-hashgraph":"HBAR","polygon-ecosystem-token":"POL"},"fallback_icon_addition":{"avalanche-2":"AVAX"}},"template":{"anchors":[{"line":3,"text":"<style>:root{--bg:#071018;--p:#0f1d29;--p2:#0a1620;--l:#213644;--t:#f3f7fb;--m:#8fa5b6;--g:#63e6be;--r:#ff6b81;--b:#69a7ff}*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 85% 0,#17395a55,transparent 32%),var(--bg);color:var(--t);font:14px system-ui}.app{max-width:1500px;margin:auto;padding:24px}.top{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.top-actions{display:flex;align-items:center;gap:10px}.currency-switch{display:flex;gap:4px;padding:4px;border:1px solid var(--l);border-radius:12px;background:#091722}.currency-btn{border:0;border-radius:8px;padding:7px 10px;background:transparent;color:var(--m);font-weight:800;cursor:poin"},{"line":6,"text":"<section id=\"coins\" class=\"coins\"></section><section class=\"layout\"><div class=\"panel\"><div class=\"title\"><div><h2 id=\"chartTitle\">График цены</h2><span class=\"muted\">7 дней</span></div><span id=\"marketStatus\" class=\"status\">Загрузка</span></div><svg id=\"chart\" class=\"chart\" viewBox=\"0 0 900 270\" preserveAspectRatio=\"none\"></svg></div><div class=\"panel sharp-moves-panel\"><div class=\"title\"><h2>Резкие движения</h2></div><div id=\"moves\" class=\"moves\"></div></div></section>"},{"line":9,"text":"<script>let state=null;let selected=\"hedera-hashgraph\";let currency=localStorage.getItem(\"portfolio_currency\")===\"RUB\"?\"RUB\":\"USD\";const fx=()=>Number(state&&state.market&&state.market.usd_rub||0);const cv=n=>Number(n||0)*(currency===\"RUB\"?fx():1);const money=(n,d=2)=>new Intl.NumberFormat(currency===\"RUB\"?\"ru-RU\":\"en-US\",{style:\"currency\",currency:currency,minimumFractionDigits:d,maximumFractionDigits:d}).format(cv(n));const compactMoney=n=>(currency===\"RUB\"?\"₽\":\"$\")+new Intl.NumberFormat(currency===\"RUB\"?\"ru-RU\":\"en-US\",{notation:\"compact\",maximumFractionDigits:2}).format(cv(n));const inputPrice=n=>Number((Number(n||0)*(currency===\"RUB\"?fx():1)).toFixed(currency===\"RUB\"?2:8));const coin=()"},{"line":25,"text":"statusEl.setAttribute(\"aria-live\",\"polite\");"},{"line":31,"text":"const ids=Object.keys(state.coins);"},{"line":46,"text":"coin_id:String(coinEl.value||\"\"),"},{"line":54,"text":"if(!payload.coin_id){statusEl.className=\"bad full\";statusEl.textContent=\"Не выбрана монета\";return;}"},{"line":84,"text":"return idIsNew&&a.coin_id===payload.coin_id&&a.kind===payload.kind&&Number(a.threshold)===payload.threshold&&String(a.email)===payload.email;"},{"line":132,"text":"const symbol=(data.coins&&data.coins[alert.coin_id])||alert.coin_id;"},{"line":152,"text":"const holding=(data.holdings&&data.holdings[alert.coin_id])||{};"},{"line":217,"text":"<style id=\"TRADINGVIEW_THREE_CHARTS_STYLE_V1\">#chart{display:none!important}#tvCharts{display:grid;grid-template-columns:1fr;gap:18px;margin-top:12px}.tv-card{min-height:470px;border:1px solid var(--l);border-radius:16px;overflow:hidden;background:#081823}.tv-card-head{padding:12px 14px 0;font-weight:800}.tv-widget-slot{height:430px;width:100%}@media(max-width:750px){.tv-widget-slot{height:370px}}</style>"},{"line":218,"text":"<script src=\"/vendor/lightweight-charts.js\"></script>"},{"line":219,"text":"<script id=\"LOCAL_TRADINGVIEW_CHARTS_V1\">"},{"line":221,"text":"const symbols=[\"HBAR\",\"POL\"];"},{"line":224,"text":"const response=await fetch(\"/api/klines/\"+encodeURIComponent(symbol)+\"?limit=1000&interval=1M\",{cache:\"no-store\"});"},{"line":232,"text":"if(!window.LightweightCharts)throw new Error(\"Локальная библиотека не загрузилась\");"},{"line":233,"text":"chart.style.display=\"none\";"},{"line":234,"text":"const panel=chart.closest(\".panel\");"},{"line":236,"text":"chartTitle.textContent=\"Графики монет\";"},{"line":237,"text":"const note=chartTitle.parentElement.querySelector(\".muted\");"},{"line":239,"text":"let root=document.getElementById(\"tvCharts\");"},{"line":240,"text":"if(!root){root=document.createElement(\"div\");root.id=\"tvCharts\";chart.insertAdjacentElement(\"afterend\",root)}"},{"line":245,"text":"card.innerHTML=`<div class=\"tv-card-head\">${symbol} / USDT</div><div class=\"tv-widget-slot\"></div><div class=\"tv-chart-error muted\" style=\"padding:0 14px 12px\">Загрузка...</div>`;"},{"line":248,"text":"const error=card.querySelector(\".tv-chart-error\");"},{"line":249,"text":"const api=LightweightCharts.createChart(box,{width:box.clientWidth||900,height:430,layout:{background:{type:LightweightCharts.ColorType.Solid,color:\"#081823\"},textColor:\"#8fa5b6\"},grid:{vertLines:{color:\"rgba(143,165,182,.08)\"},horzLines:{color:\"rgba(143,165,182,.08)\"}},rightPriceScale:{borderColor:\"rgba(143,165,182,.2)\"},timeScale:{borderColor:\"rgba(143,165,182,.2)\",timeVisible:false,secondsVisible:false}});"},{"line":250,"text":"const series=api.addSeries(LightweightCharts.CandlestickSeries,{upColor:\"#63e6be\",downColor:\"#ff6b81\",wickUpColor:\"#63e6be\",wickDownColor:\"#ff6b81\",borderVisible:false,priceFormat:{type:\"price\",precision:8,minMove:.00000001}});"},{"line":261,"text":"}catch(chartError){"},{"line":262,"text":"item.error.textContent=\"Ошибка: \"+String(chartError.message||chartError);"},{"line":268,"text":"console.error(\"Local TradingView chart error\",error);"},{"line":269,"text":"const note=chartTitle.parentElement.querySelector(\".muted\");"},{"line":276,"text":"<script id=\"MOVE_CHARTS_TO_BOTTOM_ALLTIME_V1\">(()=>{const move=()=>{const chart=document.getElementById(\"chart\");const panel=chart&&chart.closest(\".panel\");const main=document.querySelector(\"main\");if(!panel||!main)return;main.appendChild(panel);panel.style.gridColumn=\"1 / -1\";const title=document.getElementById(\"chartTitle\");if(title)title.textContent=\"Графики монет\";const note=panel.querySelector(\".muted\");if(note)note.textContent=\"Свечи Binance · 1 месяц · весь доступный период\"};document.addEventListener(\"DOMContentLoaded\",move);window.addEventListener(\"load\",move);setTimeout(move,300);setTimeout(move,1500);setTimeout(move,4000)})();</script></body></html>"}],"bytes":29469,"contains_avax_and_link":false,"contains_hbar_and_pol":true,"dynamic_coin_rendering":true,"sha256":"e497a36d8549654c6d451360a11a2ad714e19c23e6d384330a5436f7d32267cb"},"template_change_required":false,"worker":{"assignments":[{"end_line":11,"line":11,"literal":{"hedera-hashgraph":"HBAR","polygon-ecosystem-token":"POL"},"names":["COINS"],"source":"COINS = {\"hedera-hashgraph\": \"HBAR\", \"polygon-ecosystem-token\": \"POL\"}"}]}},"control_plane_error":null,"gitea_changed":false,"mutation_outcome":"NO_MUTATION","next_decision":"BUILD_AND_RUN_ONE_ATOMIC_AVAX_LINK_MUTATION_CAPSULE","previous_capsule_sha256":"9900070f7be5328505fd0132f5654699221c7448dce3c1e3163872ef41aef127","previous_command_id":"GRAM1-SITE-AVAX-LINK-V18-EXACT-SOURCE-PLAN-CHUNKED-20260731T213100Z","previous_output_sha256":"93760d077a34d34cc5f4c7732bd2c880e502a987805d58263deedaf35e3bd91a","previous_runner_document_rc":0,"previous_runner_json_sha256":"410ce3f04d5e435798d87c153d1d3f13c8b009112ac3a56668dd183b23831464","previous_runner_rc":1,"previous_runner_text_sha256":"77daa994aee633b485242b723f34c6fe763d0dc4e85fc9a882bee4a59e30fbb3","previous_state_status":"FAIL","previous_wrapper_matches_document":false,"production_site_changed":false,"rc":0,"rollback_restored":null,"rollback_started":false,"schema":1,"selected_method":"ALIAS_PINNED_AS_DEBIAN","ssh_method_probes":[{"duration_seconds":0.122,"identity_and_sudo_read_ok":true,"identity_count":null,"name":"ALIAS_PINNED_AS_DEBIAN","rc":0,"stderr":""},{"duration_seconds":0.116,"identity_and_sudo_read_ok":true,"identity_count":2,"name":"DIRECT_PINNED_AS_DEBIAN_NO_PROXY","rc":0,"stderr":""}],"status":"OK"}

OUTPUT_END
CHAT_OUTPUT_END
