diff --git a/runtime/history/HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z.json b/runtime/history/HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z.json new file mode 100644 index 0000000..12f9830 --- /dev/null +++ b/runtime/history/HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z", + "status": "FAIL", + "rc": 1, + "host": "pve01", + "mode": "verify", + "component": "hbarhub-standard-local-deployment-plan-v4", + "started_at_utc": "2026-08-03T09:25:05Z", + "finished_at_utc": "2026-08-03T09:25:06Z", + "reference_register_checked": true, + "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", + "error_register_checked": true, + "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", + "command_sha256": "7e96109fc1ec6a4c01907f9bbdf0a4a567ccfc27b25736e9bf7b41a0cc60c439", + "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": 1, + "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": "83f8961230bac64031c24e21208ca7b7e6fa042fff0024fbaf29265561f3e19c", + "sanitized_output_sha256": "83f8961230bac64031c24e21208ca7b7e6fa042fff0024fbaf29265561f3e19c", + "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\":\"HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z\",\"mutation_outcome\":\"NO_MUTATION\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"FAIL\",\"version\":1}\n{\"PLAN_SHA256\":null,\"candidate_plan_sha256\":\"7b2c0997d18e5d76cbc083272a9242518f7ac9c3863fda1452f04b574d8667a9\",\"capacity\":{\"disk\":{\"available_bytes\":76467351552,\"gate\":true,\"required_available_bytes\":10737418240,\"total_bytes\":126605975552},\"memory\":{\"available_bytes\":2744389632,\"required_available_bytes\":2147483648,\"standard_gate\":true,\"swap_free_bytes\":6714781696,\"swap_total_bytes\":8589930496,\"total_bytes\":10435301376}},\"changes_made\":false,\"checks\":{\"archive_bytes_exact\":false,\"archive_sha256_exact\":false,\"compose_config_valid\":false,\"compose_services_exact\":false,\"core_hostname\":true,\"disk_gate\":true,\"docker_available\":true,\"no_hbarhub_containers\":true,\"no_hbarhub_images\":true,\"no_hbarhub_networks\":true,\"no_hbarhub_volumes\":true,\"only_main_branch\":true,\"port_8040_free\":true,\"python_syntax_valid\":true,\"read_only\":true,\"requirements_exact\":true,\"safe_manifest_exact\":true,\"source_available\":true,\"source_commit_exact\":true,\"source_tree_exact\":true,\"standard_memory_gate\":true,\"target_env_absent\":true,\"target_path_absent\":true,\"tracked_file_count_exact\":true,\"tracked_total_bytes_exact\":true,\"tree_listing_exact\":true,\"tree_path_set_exact\":true},\"command_audit\":[{\"duration_ms\":0,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-candidate-1-is-bare\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":5,\"stdout_sha256\":\"a17fcf0a2f50e2d495e4f90ce263410edc183add6c62699a2facbccf60410f74\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":0,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-main-head\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":41,\"stdout_sha256\":\"dc0f064e529250268d3ff6232078a19aca8a12b3abc0291e79756ffde77303ed\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":0,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-main-tree\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":41,\"stdout_sha256\":\"59f30ea418f3e638f5c0294f375feeda787f7da9acc07ac67f8276032be811a2\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":0,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-branches\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":5,\"stdout_sha256\":\"6403203dd5a0867eb14d104ee8a73730bd72dd9ad92e78d996a6dba0a5dcfc01\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":0,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-main-ls-tree\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":2095,\"stdout_sha256\":\"8119f9a0c680eca043b5d648b8bf90567c90e5a6ae4f503779f4e8b66fcaa954\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":5,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-main-archive\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":9760,\"stdout_sha256\":\"a7fcc963703dfcf71e1c72410e4af8836ced830b35eff10dbcc59f333bbd0a9e\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":10,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-server-version\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":13,\"stdout_sha256\":\"8484e7b831ba500ccf015246dc0a7b3f98de3c11519b347437ff8e91db018257\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":30,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-compose-version\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":9,\"stdout_sha256\":\"9a98539f27de5f629edafed2968b89d8ca06b9b39c9469ed2c22f3ca265bb6f9\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":7,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-hbarhub-containers\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":7,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-hbarhub-networks\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":7,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-hbarhub-volumes\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":12,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-hbarhub-images\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":28,\"output_within_limit\":true,\"rc\":16,\"stage\":\"docker-compose-config\",\"stderr_bytes\":34,\"stderr_sha256\":\"ba21762623983ad018d6304d027d71b6daf31b7c183482acf2579424be4cc326\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"timed_out\":false,\"tool\":\"docker\"}],\"command_id\":\"HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z\",\"container_environment_requested\":false,\"control_plane_error\":null,\"diagnosis\":\"DOCKER_COMPOSE_CONFIG_FAILED\",\"diagnostic_complete\":false,\"docker\":{\"available\":true,\"compose_config\":{\"attempted\":true,\"config_bytes\":0,\"config_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"rc\":16,\"secret_file_read\":false,\"services\":[],\"services_match\":false,\"stderr_bytes\":34,\"stderr_sha256\":\"ba21762623983ad018d6304d027d71b6daf31b7c183482acf2579424be4cc326\",\"valid\":false},\"compose_version\":\"2.26.1-4\",\"container_environment_requested\":false,\"containers\":[],\"images\":[],\"networks\":[],\"server_version\":\"26.1.5+dfsg1\",\"volumes\":[]},\"duration_ms\":116,\"failed_checks\":[\"archive_bytes_exact\",\"archive_sha256_exact\",\"compose_config_valid\",\"compose_services_exact\"],\"failures\":[\"DOCKER_COMPOSE_CONFIG_FAILED\"],\"gate\":\"DEPLOYMENT_PLAN_DIAGNOSTIC_INCOMPLETE\",\"identity\":{\"expected_hostname\":\"core-apps\",\"hostname_short\":\"core-apps\",\"matches\":true},\"mutation_outcome\":\"NO_MUTATION\",\"plan\":{\"acceptance\":[\"all five services are present\",\"postgres and redis are healthy\",\"web is healthy and /health/live returns success\",\"/health/ready returns success after migrations\",\"worker and scheduler are running\",\"Gitea main remains unchanged\",\"public proxy remains unchanged\"],\"apply_operations\":[\"create /opt/stacks/hbarhub from the verified in-memory git archive\",\"generate deployment secrets locally and write .env mode 0600\",\"validate docker compose config again\",\"build only the hbarhub application image\",\"start postgres and redis, then run Django migrations\",\"start web, worker, and scheduler\",\"verify local live and ready health on port 8040\"],\"apply_preconditions\":[\"all source locks match exactly\",\"only main branch is present\",\"target path and target .env are absent\",\"no hbarhub containers, networks, volumes, or images exist\",\"port 8040 has no listener\",\"standard memory and disk gates pass\",\"docker compose config validates the exact source\"],\"forbidden\":[\"modify Gitea refs or repository content\",\"modify NPMplus, DNS, TLS, or any public proxy\",\"modify monitoring, backups, or other compose projects\",\"read, print, publish, or return generated secret values\",\"write outside the new stack and Docker resources labeled project hbarhub\"],\"next_stage\":\"STANDARD_LOCAL_DEPLOYMENT_APPLY\",\"operation\":\"HBARHUB_FRESH_STANDARD_LOCAL_DEPLOYMENT\",\"parent_inventory\":{\"capsule_sha256\":\"f481eb2474abce05efc6dda22d3be0fafc18d2e214880d44ecb8d78b2cd9dc88\",\"command_id\":\"HBARHUB-READONLY-INVENTORY-V3-20260803T084243Z\",\"output_sha256\":\"7b70a290dc7df9007fe86173b4a78b52de6c6ed8036da67ae5aaf34f3efcaed5\",\"runner_json_sha256\":\"ccb1be4794c46e97a51678bf8b810edc40699ef49dd7bbdd980eb9fbf66409cf\"},\"profile\":{\"health_endpoints\":[\"/health/live\",\"/health/ready\"],\"minimum_available_disk_bytes\":10737418240,\"minimum_available_memory_bytes\":2147483648,\"name\":\"STANDARD\",\"services\":[\"postgres\",\"redis\",\"scheduler\",\"web\",\"worker\"]},\"rollback\":{\"operations\":[\"capture sanitized failure evidence\",\"docker compose down --volumes --remove-orphans\",\"remove only application images created by this apply\",\"remove only /opt/stacks/hbarhub created by this apply\",\"verify no hbarhub resources remain and port 8040 is free\"],\"preexisting_data_preserved\":\"preconditions require no preexisting stack or project resources\",\"trigger\":\"any failed post-mutation check\"},\"schema\":1,\"source_lock\":{\"archive_bytes\":10084,\"archive_sha256\":\"25fb04b8dd74d4da2f50ba3aef76680b1813799a61fbd26c55bfcc1466cf82ac\",\"branch\":\"main\",\"commit\":\"57d2704dc4dc4f1e00c3e1bda67fc0bc2bef6957\",\"delivery\":\"local bare repository git archive; no Git credentials\",\"repository\":\"homelab-admin/hbarhub\",\"tree\":\"7e13a2e1b5ab35046dbe172383a814151c16cce0\"},\"target\":{\"compose_project\":\"hbarhub\",\"hostname\":\"core-apps\",\"local_port\":8040,\"public_proxy\":false,\"role\":\"core-apps\",\"stack_path\":\"/opt/stacks/hbarhub\",\"vmid\":170}},\"port_listener\":{\"addresses_read_from_output\":false,\"errors\":[],\"kernel_tables_read\":2,\"listener_entry_count\":0,\"listener_present\":false,\"port\":8040},\"private_addresses_included\":false,\"rc\":1,\"read_only\":true,\"ready_for_apply\":false,\"rollback_restored\":null,\"rollback_started\":false,\"sanitized\":true,\"schema\":1,\"secret_files_read\":false,\"secrets_included\":false,\"source\":{\"archive_bytes\":9760,\"archive_member_count\":33,\"archive_member_set_sha256\":\"2bb39282d17b0cbcb368739c4cbd947b72c43585b527b3e685937b6e6dd2b142\",\"archive_sha256\":\"a7fcc963703dfcf71e1c72410e4af8836ced830b35eff10dbcc59f333bbd0a9e\",\"available\":true,\"branch_names\":[\"main\"],\"env_example_key_count\":12,\"env_example_key_set_sha256\":\"730754b06ebb1f8d8855881238d6d5ed290120bb911b1f22cc68c12b4759085e\",\"invalid_utf8_path_count\":0,\"main_head\":\"57d2704dc4dc4f1e00c3e1bda67fc0bc2bef6957\",\"main_tree\":\"7e13a2e1b5ab35046dbe172383a814151c16cce0\",\"published_path_candidates\":[{\"bare_repository\":true,\"bytes\":4096,\"exists\":true,\"gid\":1000,\"git_rc\":0,\"kind\":\"directory\",\"mode\":\"0755\",\"path\":\"/opt/stacks/gitea/data/git/repositories/homelab-admin/hbarhub.git\",\"uid\":1000},{\"exists\":false,\"kind\":null,\"path\":\"/opt/stacks/gitea/data/gitea-repositories/homelab-admin/hbarhub.git\"}],\"python_compile_failures\":[],\"python_file_count\":13,\"requirements\":[\"Django==6.0.7\",\"celery==5.6.3\",\"gunicorn==26.0.0\",\"psycopg[binary]==3.3.4\",\"redis==8.0.1\"],\"requirements_match\":true,\"safe_manifest\":{\".dockerignore\":{\"bytes\":82,\"exists\":true,\"expected_sha256\":\"3870cba2def4ee4e45c8ef33cb7239c6d391a9b57ff17e9b26d7bbdaf03501fa\",\"matches\":true,\"sha256\":\"3870cba2def4ee4e45c8ef33cb7239c6d391a9b57ff17e9b26d7bbdaf03501fa\"},\".env.example\":{\"bytes\":419,\"exists\":true,\"expected_sha256\":\"0c93f24bb448c384a430b65bebcd54b86b570c62df88aa073e1342f7a3eba5b3\",\"matches\":true,\"sha256\":\"0c93f24bb448c384a430b65bebcd54b86b570c62df88aa073e1342f7a3eba5b3\"},\"Dockerfile\":{\"bytes\":477,\"exists\":true,\"expected_sha256\":\"9c0be49681f983c329937f486427dbf002b826973a48d5c1851de7f55a6ce1ab\",\"matches\":true,\"sha256\":\"9c0be49681f983c329937f486427dbf002b826973a48d5c1851de7f55a6ce1ab\"},\"README.md\":{\"bytes\":1429,\"exists\":true,\"expected_sha256\":\"3b6de9c4d5c9f76d51280bb395f86e3cf51b69c982ea6a5a8d3740d09739cfff\",\"matches\":true,\"sha256\":\"3b6de9c4d5c9f76d51280bb395f86e3cf51b69c982ea6a5a8d3740d09739cfff\"},\"compose.yaml\":{\"bytes\":2980,\"exists\":true,\"expected_sha256\":\"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc\",\"matches\":true,\"sha256\":\"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc\"},\"config/assets.json\":{\"bytes\":2787,\"exists\":true,\"expected_sha256\":\"dfa2fc55e610dc5bb341169c24d45aaaf4143a1b8c9d021db37a8a8725cd15ff\",\"matches\":true,\"sha256\":\"dfa2fc55e610dc5bb341169c24d45aaaf4143a1b8c9d021db37a8a8725cd15ff\"},\"docs/ARCHITECTURE.md\":{\"bytes\":1214,\"exists\":true,\"expected_sha256\":\"cf219e2f0ee4be0e4881afc7035afff4c79b167579486ecf2eb601fd925d0e8e\",\"matches\":true,\"sha256\":\"cf219e2f0ee4be0e4881afc7035afff4c79b167579486ecf2eb601fd925d0e8e\"},\"docs/OPERATIONS.md\":{\"bytes\":957,\"exists\":true,\"expected_sha256\":\"5b41e7fcb4527eea3e5ab2496ec2239d8021ae8843c302a9f5371d77fdd043a7\",\"matches\":true,\"sha256\":\"5b41e7fcb4527eea3e5ab2496ec2239d8021ae8843c302a9f5371d77fdd043a7\"},\"hbarhub/__init__.py\":{\"bytes\":65,\"exists\":true,\"expected_sha256\":\"8974a9c493587f508e73f358876ade4f3ab0369012b29ffb14280dbe30f721ce\",\"matches\":true,\"sha256\":\"8974a9c493587f508e73f358876ade4f3ab0369012b29ffb14280dbe30f721ce\"},\"hbarhub/celery.py\":{\"bytes\":223,\"exists\":true,\"expected_sha256\":\"b33bfae9785e01372e6b3c88a5747275013831fa5b323cfc60ada4f361551a47\",\"matches\":true,\"sha256\":\"b33bfae9785e01372e6b3c88a5747275013831fa5b323cfc60ada4f361551a47\"},\"hbarhub/settings.py\":{\"bytes\":3614,\"exists\":true,\"expected_sha256\":\"662118548cce23f916be7ed66a468255a3405a3430b301bfe5adba4b764a1f88\",\"matches\":true,\"sha256\":\"662118548cce23f916be7ed66a468255a3405a3430b301bfe5adba4b764a1f88\"},\"hbarhub/urls.py\":{\"bytes\":165,\"exists\":true,\"expected_sha256\":\"ddcebb4348c298dd8047df40cd1698603523f8a4ced6b518ad58f4b724db8cac\",\"matches\":true,\"sha256\":\"ddcebb4348c298dd8047df40cd1698603523f8a4ced6b518ad58f4b724db8cac\"},\"hbarhub/wsgi.py\":{\"bytes\":168,\"exists\":true,\"expected_sha256\":\"03ee75d6dd996de897b4a1c221584459e3b41c507d21f010d5b0372c4da8a630\",\"matches\":true,\"sha256\":\"03ee75d6dd996de897b4a1c221584459e3b41c507d21f010d5b0372c4da8a630\"},\"manage.py\":{\"bytes\":284,\"exists\":true,\"expected_sha256\":\"f9cca66c33a7b629895d0637299fa3aa2396ab6759bcade14ed28a6e2d306b5a\",\"matches\":true,\"sha256\":\"f9cca66c33a7b629895d0637299fa3aa2396ab6759bcade14ed28a6e2d306b5a\"},\"portal/__init__.py\":{\"bytes\":0,\"exists\":true,\"expected_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"matches\":true,\"sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},\"portal/apps.py\":{\"bytes\":174,\"exists\":true,\"expected_sha256\":\"9308f2f4d7e9d110253fe8574aa42edeabd35a7316ab740d9e5e6ac0ee5498a2\",\"matches\":true,\"sha256\":\"9308f2f4d7e9d110253fe8574aa42edeabd35a7316ab740d9e5e6ac0ee5498a2\"},\"portal/assets.py\":{\"bytes\":911,\"exists\":true,\"expected_sha256\":\"ce231cb3af3460166ef2a23c1456e3f704e44d9f19db42ce030af8a4bea71019\",\"matches\":true,\"sha256\":\"ce231cb3af3460166ef2a23c1456e3f704e44d9f19db42ce030af8a4bea71019\"},\"portal/tasks.py\":{\"bytes\":192,\"exists\":true,\"expected_sha256\":\"8b4402ff2ac1c8603bc9c0821ca16b3b6d610facad7eccf76b83076ee912f0b2\",\"matches\":true,\"sha256\":\"8b4402ff2ac1c8603bc9c0821ca16b3b6d610facad7eccf76b83076ee912f0b2\"},\"portal/templates/portal/home.html\":{\"bytes\":3478,\"exists\":true,\"expected_sha256\":\"bad177066fedee2f8e427cb81ba9c32db4ae36ce533ce0f2090e60b6970378ae\",\"matches\":true,\"sha256\":\"bad177066fedee2f8e427cb81ba9c32db4ae36ce533ce0f2090e60b6970378ae\"},\"portal/tests.py\":{\"bytes\":1371,\"exists\":true,\"expected_sha256\":\"42420399fd48c97ce5ab4872d95b5490e0d3a266df8677d31d0ee1987852c9ff\",\"matches\":true,\"sha256\":\"42420399fd48c97ce5ab4872d95b5490e0d3a266df8677d31d0ee1987852c9ff\"},\"portal/urls.py\":{\"bytes\":260,\"exists\":true,\"expected_sha256\":\"164665d9a442ab79bc4c0f250d1e3d76a096b4f93825e9900fab5bde0d53a088\",\"matches\":true,\"sha256\":\"164665d9a442ab79bc4c0f250d1e3d76a096b4f93825e9900fab5bde0d53a088\"},\"portal/views.py\":{\"bytes\":1449,\"exists\":true,\"expected_sha256\":\"b1166fa6008792a83701740f560f93a3b74b3203003bc738c35a5f56454c1f14\",\"matches\":true,\"sha256\":\"b1166fa6008792a83701740f560f93a3b74b3203003bc738c35a5f56454c1f14\"},\"requirements.txt\":{\"bytes\":81,\"exists\":true,\"expected_sha256\":\"9838729f64d26b126c20f47836bcedfc97262a46059c6f810e088b1b7bf02ffa\",\"matches\":true,\"sha256\":\"9838729f64d26b126c20f47836bcedfc97262a46059c6f810e088b1b7bf02ffa\"}},\"safe_manifest_all_match\":true,\"safe_manifest_scope\":\"PUBLISHED_23_SOURCE_FILES\",\"secret_file_read\":false,\"selected_path\":\"/opt/stacks/gitea/data/git/repositories/homelab-admin/hbarhub.git\",\"tracked_file_count\":27,\"tracked_total_bytes\":26067,\"tree_listing_sha256\":\"8119f9a0c680eca043b5d648b8bf90567c90e5a6ae4f503779f4e8b66fcaa954\",\"tree_path_set_sha256\":\"245c3f22584759bed02f493855facb68662333953100f036716afffc1f65e83f\"},\"stack\":{\"root\":{\"exists\":false,\"kind\":null,\"path\":\"/opt/stacks/hbarhub\"},\"secret_env_metadata_only\":{\"content_read\":false,\"exists\":false,\"kind\":null,\"path\":\"/opt/stacks/hbarhub/.env\"}},\"status\":\"FAIL\",\"unexpected_exception\":{}}\n" +} diff --git a/runtime/history/HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z.txt b/runtime/history/HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z.txt new file mode 100644 index 0000000..9402522 --- /dev/null +++ b/runtime/history/HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z.txt @@ -0,0 +1,34 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z +STATUS=FAIL +RC=1 +HOST=pve01 +MODE=verify +COMPONENT=hbarhub-standard-local-deployment-plan-v4 +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 +COMMAND_SHA256=7e96109fc1ec6a4c01907f9bbdf0a4a567ccfc27b25736e9bf7b41a0cc60c439 +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=1 +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=83f8961230bac64031c24e21208ca7b7e6fa042fff0024fbaf29265561f3e19c +SANITIZED_OUTPUT_SHA256=83f8961230bac64031c24e21208ca7b7e6fa042fff0024fbaf29265561f3e19c +OUTPUT_BEGIN +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z","mutation_outcome":"NO_MUTATION","rollback_restored":null,"rollback_started":false,"status":"FAIL","version":1} +{"PLAN_SHA256":null,"candidate_plan_sha256":"7b2c0997d18e5d76cbc083272a9242518f7ac9c3863fda1452f04b574d8667a9","capacity":{"disk":{"available_bytes":76467351552,"gate":true,"required_available_bytes":10737418240,"total_bytes":126605975552},"memory":{"available_bytes":2744389632,"required_available_bytes":2147483648,"standard_gate":true,"swap_free_bytes":6714781696,"swap_total_bytes":8589930496,"total_bytes":10435301376}},"changes_made":false,"checks":{"archive_bytes_exact":false,"archive_sha256_exact":false,"compose_config_valid":false,"compose_services_exact":false,"core_hostname":true,"disk_gate":true,"docker_available":true,"no_hbarhub_containers":true,"no_hbarhub_images":true,"no_hbarhub_networks":true,"no_hbarhub_volumes":true,"only_main_branch":true,"port_8040_free":true,"python_syntax_valid":true,"read_only":true,"requirements_exact":true,"safe_manifest_exact":true,"source_available":true,"source_commit_exact":true,"source_tree_exact":true,"standard_memory_gate":true,"target_env_absent":true,"target_path_absent":true,"tracked_file_count_exact":true,"tracked_total_bytes_exact":true,"tree_listing_exact":true,"tree_path_set_exact":true},"command_audit":[{"duration_ms":0,"output_within_limit":true,"rc":0,"stage":"git-candidate-1-is-bare","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":5,"stdout_sha256":"a17fcf0a2f50e2d495e4f90ce263410edc183add6c62699a2facbccf60410f74","timed_out":false,"tool":"git"},{"duration_ms":0,"output_within_limit":true,"rc":0,"stage":"git-main-head","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":41,"stdout_sha256":"dc0f064e529250268d3ff6232078a19aca8a12b3abc0291e79756ffde77303ed","timed_out":false,"tool":"git"},{"duration_ms":0,"output_within_limit":true,"rc":0,"stage":"git-main-tree","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":41,"stdout_sha256":"59f30ea418f3e638f5c0294f375feeda787f7da9acc07ac67f8276032be811a2","timed_out":false,"tool":"git"},{"duration_ms":0,"output_within_limit":true,"rc":0,"stage":"git-branches","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":5,"stdout_sha256":"6403203dd5a0867eb14d104ee8a73730bd72dd9ad92e78d996a6dba0a5dcfc01","timed_out":false,"tool":"git"},{"duration_ms":0,"output_within_limit":true,"rc":0,"stage":"git-main-ls-tree","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":2095,"stdout_sha256":"8119f9a0c680eca043b5d648b8bf90567c90e5a6ae4f503779f4e8b66fcaa954","timed_out":false,"tool":"git"},{"duration_ms":5,"output_within_limit":true,"rc":0,"stage":"git-main-archive","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":9760,"stdout_sha256":"a7fcc963703dfcf71e1c72410e4af8836ced830b35eff10dbcc59f333bbd0a9e","timed_out":false,"tool":"git"},{"duration_ms":10,"output_within_limit":true,"rc":0,"stage":"docker-server-version","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":13,"stdout_sha256":"8484e7b831ba500ccf015246dc0a7b3f98de3c11519b347437ff8e91db018257","timed_out":false,"tool":"docker"},{"duration_ms":30,"output_within_limit":true,"rc":0,"stage":"docker-compose-version","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":9,"stdout_sha256":"9a98539f27de5f629edafed2968b89d8ca06b9b39c9469ed2c22f3ca265bb6f9","timed_out":false,"tool":"docker"},{"duration_ms":7,"output_within_limit":true,"rc":0,"stage":"docker-hbarhub-containers","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","timed_out":false,"tool":"docker"},{"duration_ms":7,"output_within_limit":true,"rc":0,"stage":"docker-hbarhub-networks","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","timed_out":false,"tool":"docker"},{"duration_ms":7,"output_within_limit":true,"rc":0,"stage":"docker-hbarhub-volumes","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","timed_out":false,"tool":"docker"},{"duration_ms":12,"output_within_limit":true,"rc":0,"stage":"docker-hbarhub-images","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","timed_out":false,"tool":"docker"},{"duration_ms":28,"output_within_limit":true,"rc":16,"stage":"docker-compose-config","stderr_bytes":34,"stderr_sha256":"ba21762623983ad018d6304d027d71b6daf31b7c183482acf2579424be4cc326","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","timed_out":false,"tool":"docker"}],"command_id":"HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z","container_environment_requested":false,"control_plane_error":null,"diagnosis":"DOCKER_COMPOSE_CONFIG_FAILED","diagnostic_complete":false,"docker":{"available":true,"compose_config":{"attempted":true,"config_bytes":0,"config_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","rc":16,"secret_file_read":false,"services":[],"services_match":false,"stderr_bytes":34,"stderr_sha256":"ba21762623983ad018d6304d027d71b6daf31b7c183482acf2579424be4cc326","valid":false},"compose_version":"2.26.1-4","container_environment_requested":false,"containers":[],"images":[],"networks":[],"server_version":"26.1.5+dfsg1","volumes":[]},"duration_ms":116,"failed_checks":["archive_bytes_exact","archive_sha256_exact","compose_config_valid","compose_services_exact"],"failures":["DOCKER_COMPOSE_CONFIG_FAILED"],"gate":"DEPLOYMENT_PLAN_DIAGNOSTIC_INCOMPLETE","identity":{"expected_hostname":"core-apps","hostname_short":"core-apps","matches":true},"mutation_outcome":"NO_MUTATION","plan":{"acceptance":["all five services are present","postgres and redis are healthy","web is healthy and /health/live returns success","/health/ready returns success after migrations","worker and scheduler are running","Gitea main remains unchanged","public proxy remains unchanged"],"apply_operations":["create /opt/stacks/hbarhub from the verified in-memory git archive","generate deployment secrets locally and write .env mode 0600","validate docker compose config again","build only the hbarhub application image","start postgres and redis, then run Django migrations","start web, worker, and scheduler","verify local live and ready health on port 8040"],"apply_preconditions":["all source locks match exactly","only main branch is present","target path and target .env are absent","no hbarhub containers, networks, volumes, or images exist","port 8040 has no listener","standard memory and disk gates pass","docker compose config validates the exact source"],"forbidden":["modify Gitea refs or repository content","modify NPMplus, DNS, TLS, or any public proxy","modify monitoring, backups, or other compose projects","read, print, publish, or return generated secret values","write outside the new stack and Docker resources labeled project hbarhub"],"next_stage":"STANDARD_LOCAL_DEPLOYMENT_APPLY","operation":"HBARHUB_FRESH_STANDARD_LOCAL_DEPLOYMENT","parent_inventory":{"capsule_sha256":"f481eb2474abce05efc6dda22d3be0fafc18d2e214880d44ecb8d78b2cd9dc88","command_id":"HBARHUB-READONLY-INVENTORY-V3-20260803T084243Z","output_sha256":"7b70a290dc7df9007fe86173b4a78b52de6c6ed8036da67ae5aaf34f3efcaed5","runner_json_sha256":"ccb1be4794c46e97a51678bf8b810edc40699ef49dd7bbdd980eb9fbf66409cf"},"profile":{"health_endpoints":["/health/live","/health/ready"],"minimum_available_disk_bytes":10737418240,"minimum_available_memory_bytes":2147483648,"name":"STANDARD","services":["postgres","redis","scheduler","web","worker"]},"rollback":{"operations":["capture sanitized failure evidence","docker compose down --volumes --remove-orphans","remove only application images created by this apply","remove only /opt/stacks/hbarhub created by this apply","verify no hbarhub resources remain and port 8040 is free"],"preexisting_data_preserved":"preconditions require no preexisting stack or project resources","trigger":"any failed post-mutation check"},"schema":1,"source_lock":{"archive_bytes":10084,"archive_sha256":"25fb04b8dd74d4da2f50ba3aef76680b1813799a61fbd26c55bfcc1466cf82ac","branch":"main","commit":"57d2704dc4dc4f1e00c3e1bda67fc0bc2bef6957","delivery":"local bare repository git archive; no Git credentials","repository":"homelab-admin/hbarhub","tree":"7e13a2e1b5ab35046dbe172383a814151c16cce0"},"target":{"compose_project":"hbarhub","hostname":"core-apps","local_port":8040,"public_proxy":false,"role":"core-apps","stack_path":"/opt/stacks/hbarhub","vmid":170}},"port_listener":{"addresses_read_from_output":false,"errors":[],"kernel_tables_read":2,"listener_entry_count":0,"listener_present":false,"port":8040},"private_addresses_included":false,"rc":1,"read_only":true,"ready_for_apply":false,"rollback_restored":null,"rollback_started":false,"sanitized":true,"schema":1,"secret_files_read":false,"secrets_included":false,"source":{"archive_bytes":9760,"archive_member_count":33,"archive_member_set_sha256":"2bb39282d17b0cbcb368739c4cbd947b72c43585b527b3e685937b6e6dd2b142","archive_sha256":"a7fcc963703dfcf71e1c72410e4af8836ced830b35eff10dbcc59f333bbd0a9e","available":true,"branch_names":["main"],"env_example_key_count":12,"env_example_key_set_sha256":"730754b06ebb1f8d8855881238d6d5ed290120bb911b1f22cc68c12b4759085e","invalid_utf8_path_count":0,"main_head":"57d2704dc4dc4f1e00c3e1bda67fc0bc2bef6957","main_tree":"7e13a2e1b5ab35046dbe172383a814151c16cce0","published_path_candidates":[{"bare_repository":true,"bytes":4096,"exists":true,"gid":1000,"git_rc":0,"kind":"directory","mode":"0755","path":"/opt/stacks/gitea/data/git/repositories/homelab-admin/hbarhub.git","uid":1000},{"exists":false,"kind":null,"path":"/opt/stacks/gitea/data/gitea-repositories/homelab-admin/hbarhub.git"}],"python_compile_failures":[],"python_file_count":13,"requirements":["Django==6.0.7","celery==5.6.3","gunicorn==26.0.0","psycopg[binary]==3.3.4","redis==8.0.1"],"requirements_match":true,"safe_manifest":{".dockerignore":{"bytes":82,"exists":true,"expected_sha256":"3870cba2def4ee4e45c8ef33cb7239c6d391a9b57ff17e9b26d7bbdaf03501fa","matches":true,"sha256":"3870cba2def4ee4e45c8ef33cb7239c6d391a9b57ff17e9b26d7bbdaf03501fa"},".env.example":{"bytes":419,"exists":true,"expected_sha256":"0c93f24bb448c384a430b65bebcd54b86b570c62df88aa073e1342f7a3eba5b3","matches":true,"sha256":"0c93f24bb448c384a430b65bebcd54b86b570c62df88aa073e1342f7a3eba5b3"},"Dockerfile":{"bytes":477,"exists":true,"expected_sha256":"9c0be49681f983c329937f486427dbf002b826973a48d5c1851de7f55a6ce1ab","matches":true,"sha256":"9c0be49681f983c329937f486427dbf002b826973a48d5c1851de7f55a6ce1ab"},"README.md":{"bytes":1429,"exists":true,"expected_sha256":"3b6de9c4d5c9f76d51280bb395f86e3cf51b69c982ea6a5a8d3740d09739cfff","matches":true,"sha256":"3b6de9c4d5c9f76d51280bb395f86e3cf51b69c982ea6a5a8d3740d09739cfff"},"compose.yaml":{"bytes":2980,"exists":true,"expected_sha256":"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc","matches":true,"sha256":"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc"},"config/assets.json":{"bytes":2787,"exists":true,"expected_sha256":"dfa2fc55e610dc5bb341169c24d45aaaf4143a1b8c9d021db37a8a8725cd15ff","matches":true,"sha256":"dfa2fc55e610dc5bb341169c24d45aaaf4143a1b8c9d021db37a8a8725cd15ff"},"docs/ARCHITECTURE.md":{"bytes":1214,"exists":true,"expected_sha256":"cf219e2f0ee4be0e4881afc7035afff4c79b167579486ecf2eb601fd925d0e8e","matches":true,"sha256":"cf219e2f0ee4be0e4881afc7035afff4c79b167579486ecf2eb601fd925d0e8e"},"docs/OPERATIONS.md":{"bytes":957,"exists":true,"expected_sha256":"5b41e7fcb4527eea3e5ab2496ec2239d8021ae8843c302a9f5371d77fdd043a7","matches":true,"sha256":"5b41e7fcb4527eea3e5ab2496ec2239d8021ae8843c302a9f5371d77fdd043a7"},"hbarhub/__init__.py":{"bytes":65,"exists":true,"expected_sha256":"8974a9c493587f508e73f358876ade4f3ab0369012b29ffb14280dbe30f721ce","matches":true,"sha256":"8974a9c493587f508e73f358876ade4f3ab0369012b29ffb14280dbe30f721ce"},"hbarhub/celery.py":{"bytes":223,"exists":true,"expected_sha256":"b33bfae9785e01372e6b3c88a5747275013831fa5b323cfc60ada4f361551a47","matches":true,"sha256":"b33bfae9785e01372e6b3c88a5747275013831fa5b323cfc60ada4f361551a47"},"hbarhub/settings.py":{"bytes":3614,"exists":true,"expected_sha256":"662118548cce23f916be7ed66a468255a3405a3430b301bfe5adba4b764a1f88","matches":true,"sha256":"662118548cce23f916be7ed66a468255a3405a3430b301bfe5adba4b764a1f88"},"hbarhub/urls.py":{"bytes":165,"exists":true,"expected_sha256":"ddcebb4348c298dd8047df40cd1698603523f8a4ced6b518ad58f4b724db8cac","matches":true,"sha256":"ddcebb4348c298dd8047df40cd1698603523f8a4ced6b518ad58f4b724db8cac"},"hbarhub/wsgi.py":{"bytes":168,"exists":true,"expected_sha256":"03ee75d6dd996de897b4a1c221584459e3b41c507d21f010d5b0372c4da8a630","matches":true,"sha256":"03ee75d6dd996de897b4a1c221584459e3b41c507d21f010d5b0372c4da8a630"},"manage.py":{"bytes":284,"exists":true,"expected_sha256":"f9cca66c33a7b629895d0637299fa3aa2396ab6759bcade14ed28a6e2d306b5a","matches":true,"sha256":"f9cca66c33a7b629895d0637299fa3aa2396ab6759bcade14ed28a6e2d306b5a"},"portal/__init__.py":{"bytes":0,"exists":true,"expected_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","matches":true,"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"portal/apps.py":{"bytes":174,"exists":true,"expected_sha256":"9308f2f4d7e9d110253fe8574aa42edeabd35a7316ab740d9e5e6ac0ee5498a2","matches":true,"sha256":"9308f2f4d7e9d110253fe8574aa42edeabd35a7316ab740d9e5e6ac0ee5498a2"},"portal/assets.py":{"bytes":911,"exists":true,"expected_sha256":"ce231cb3af3460166ef2a23c1456e3f704e44d9f19db42ce030af8a4bea71019","matches":true,"sha256":"ce231cb3af3460166ef2a23c1456e3f704e44d9f19db42ce030af8a4bea71019"},"portal/tasks.py":{"bytes":192,"exists":true,"expected_sha256":"8b4402ff2ac1c8603bc9c0821ca16b3b6d610facad7eccf76b83076ee912f0b2","matches":true,"sha256":"8b4402ff2ac1c8603bc9c0821ca16b3b6d610facad7eccf76b83076ee912f0b2"},"portal/templates/portal/home.html":{"bytes":3478,"exists":true,"expected_sha256":"bad177066fedee2f8e427cb81ba9c32db4ae36ce533ce0f2090e60b6970378ae","matches":true,"sha256":"bad177066fedee2f8e427cb81ba9c32db4ae36ce533ce0f2090e60b6970378ae"},"portal/tests.py":{"bytes":1371,"exists":true,"expected_sha256":"42420399fd48c97ce5ab4872d95b5490e0d3a266df8677d31d0ee1987852c9ff","matches":true,"sha256":"42420399fd48c97ce5ab4872d95b5490e0d3a266df8677d31d0ee1987852c9ff"},"portal/urls.py":{"bytes":260,"exists":true,"expected_sha256":"164665d9a442ab79bc4c0f250d1e3d76a096b4f93825e9900fab5bde0d53a088","matches":true,"sha256":"164665d9a442ab79bc4c0f250d1e3d76a096b4f93825e9900fab5bde0d53a088"},"portal/views.py":{"bytes":1449,"exists":true,"expected_sha256":"b1166fa6008792a83701740f560f93a3b74b3203003bc738c35a5f56454c1f14","matches":true,"sha256":"b1166fa6008792a83701740f560f93a3b74b3203003bc738c35a5f56454c1f14"},"requirements.txt":{"bytes":81,"exists":true,"expected_sha256":"9838729f64d26b126c20f47836bcedfc97262a46059c6f810e088b1b7bf02ffa","matches":true,"sha256":"9838729f64d26b126c20f47836bcedfc97262a46059c6f810e088b1b7bf02ffa"}},"safe_manifest_all_match":true,"safe_manifest_scope":"PUBLISHED_23_SOURCE_FILES","secret_file_read":false,"selected_path":"/opt/stacks/gitea/data/git/repositories/homelab-admin/hbarhub.git","tracked_file_count":27,"tracked_total_bytes":26067,"tree_listing_sha256":"8119f9a0c680eca043b5d648b8bf90567c90e5a6ae4f503779f4e8b66fcaa954","tree_path_set_sha256":"245c3f22584759bed02f493855facb68662333953100f036716afffc1f65e83f"},"stack":{"root":{"exists":false,"kind":null,"path":"/opt/stacks/hbarhub"},"secret_env_metadata_only":{"content_read":false,"exists":false,"kind":null,"path":"/opt/stacks/hbarhub/.env"}},"status":"FAIL","unexpected_exception":{}} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 1f7a252..12f9830 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1 +1,38 @@ -{"schema_version":1,"channel":"homelab-runtime","command_id":"CONTEXT-AUTO-20260803T091701Z","status":"OK","rc":0,"host":"pve01","mode":"read-only","component":"cluster-context","started_at_utc":"2026-08-03T09:17:01Z","finished_at_utc":"2026-08-03T09:17:02Z","reference_register_checked":true,"reference_sha256":"5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e","error_register_checked":true,"error_register_sha256":"24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83","changes_made":false,"sanitized":true,"secrets_included":false,"private_addresses_included":false,"output":"AUTOMATIC_CLUSTER_CONTEXT_REFRESH=OK"} +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z", + "status": "FAIL", + "rc": 1, + "host": "pve01", + "mode": "verify", + "component": "hbarhub-standard-local-deployment-plan-v4", + "started_at_utc": "2026-08-03T09:25:05Z", + "finished_at_utc": "2026-08-03T09:25:06Z", + "reference_register_checked": true, + "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", + "error_register_checked": true, + "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", + "command_sha256": "7e96109fc1ec6a4c01907f9bbdf0a4a567ccfc27b25736e9bf7b41a0cc60c439", + "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": 1, + "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": "83f8961230bac64031c24e21208ca7b7e6fa042fff0024fbaf29265561f3e19c", + "sanitized_output_sha256": "83f8961230bac64031c24e21208ca7b7e6fa042fff0024fbaf29265561f3e19c", + "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\":\"HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z\",\"mutation_outcome\":\"NO_MUTATION\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"FAIL\",\"version\":1}\n{\"PLAN_SHA256\":null,\"candidate_plan_sha256\":\"7b2c0997d18e5d76cbc083272a9242518f7ac9c3863fda1452f04b574d8667a9\",\"capacity\":{\"disk\":{\"available_bytes\":76467351552,\"gate\":true,\"required_available_bytes\":10737418240,\"total_bytes\":126605975552},\"memory\":{\"available_bytes\":2744389632,\"required_available_bytes\":2147483648,\"standard_gate\":true,\"swap_free_bytes\":6714781696,\"swap_total_bytes\":8589930496,\"total_bytes\":10435301376}},\"changes_made\":false,\"checks\":{\"archive_bytes_exact\":false,\"archive_sha256_exact\":false,\"compose_config_valid\":false,\"compose_services_exact\":false,\"core_hostname\":true,\"disk_gate\":true,\"docker_available\":true,\"no_hbarhub_containers\":true,\"no_hbarhub_images\":true,\"no_hbarhub_networks\":true,\"no_hbarhub_volumes\":true,\"only_main_branch\":true,\"port_8040_free\":true,\"python_syntax_valid\":true,\"read_only\":true,\"requirements_exact\":true,\"safe_manifest_exact\":true,\"source_available\":true,\"source_commit_exact\":true,\"source_tree_exact\":true,\"standard_memory_gate\":true,\"target_env_absent\":true,\"target_path_absent\":true,\"tracked_file_count_exact\":true,\"tracked_total_bytes_exact\":true,\"tree_listing_exact\":true,\"tree_path_set_exact\":true},\"command_audit\":[{\"duration_ms\":0,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-candidate-1-is-bare\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":5,\"stdout_sha256\":\"a17fcf0a2f50e2d495e4f90ce263410edc183add6c62699a2facbccf60410f74\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":0,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-main-head\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":41,\"stdout_sha256\":\"dc0f064e529250268d3ff6232078a19aca8a12b3abc0291e79756ffde77303ed\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":0,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-main-tree\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":41,\"stdout_sha256\":\"59f30ea418f3e638f5c0294f375feeda787f7da9acc07ac67f8276032be811a2\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":0,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-branches\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":5,\"stdout_sha256\":\"6403203dd5a0867eb14d104ee8a73730bd72dd9ad92e78d996a6dba0a5dcfc01\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":0,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-main-ls-tree\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":2095,\"stdout_sha256\":\"8119f9a0c680eca043b5d648b8bf90567c90e5a6ae4f503779f4e8b66fcaa954\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":5,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-main-archive\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":9760,\"stdout_sha256\":\"a7fcc963703dfcf71e1c72410e4af8836ced830b35eff10dbcc59f333bbd0a9e\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":10,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-server-version\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":13,\"stdout_sha256\":\"8484e7b831ba500ccf015246dc0a7b3f98de3c11519b347437ff8e91db018257\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":30,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-compose-version\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":9,\"stdout_sha256\":\"9a98539f27de5f629edafed2968b89d8ca06b9b39c9469ed2c22f3ca265bb6f9\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":7,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-hbarhub-containers\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":7,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-hbarhub-networks\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":7,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-hbarhub-volumes\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":12,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-hbarhub-images\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":28,\"output_within_limit\":true,\"rc\":16,\"stage\":\"docker-compose-config\",\"stderr_bytes\":34,\"stderr_sha256\":\"ba21762623983ad018d6304d027d71b6daf31b7c183482acf2579424be4cc326\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"timed_out\":false,\"tool\":\"docker\"}],\"command_id\":\"HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z\",\"container_environment_requested\":false,\"control_plane_error\":null,\"diagnosis\":\"DOCKER_COMPOSE_CONFIG_FAILED\",\"diagnostic_complete\":false,\"docker\":{\"available\":true,\"compose_config\":{\"attempted\":true,\"config_bytes\":0,\"config_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"rc\":16,\"secret_file_read\":false,\"services\":[],\"services_match\":false,\"stderr_bytes\":34,\"stderr_sha256\":\"ba21762623983ad018d6304d027d71b6daf31b7c183482acf2579424be4cc326\",\"valid\":false},\"compose_version\":\"2.26.1-4\",\"container_environment_requested\":false,\"containers\":[],\"images\":[],\"networks\":[],\"server_version\":\"26.1.5+dfsg1\",\"volumes\":[]},\"duration_ms\":116,\"failed_checks\":[\"archive_bytes_exact\",\"archive_sha256_exact\",\"compose_config_valid\",\"compose_services_exact\"],\"failures\":[\"DOCKER_COMPOSE_CONFIG_FAILED\"],\"gate\":\"DEPLOYMENT_PLAN_DIAGNOSTIC_INCOMPLETE\",\"identity\":{\"expected_hostname\":\"core-apps\",\"hostname_short\":\"core-apps\",\"matches\":true},\"mutation_outcome\":\"NO_MUTATION\",\"plan\":{\"acceptance\":[\"all five services are present\",\"postgres and redis are healthy\",\"web is healthy and /health/live returns success\",\"/health/ready returns success after migrations\",\"worker and scheduler are running\",\"Gitea main remains unchanged\",\"public proxy remains unchanged\"],\"apply_operations\":[\"create /opt/stacks/hbarhub from the verified in-memory git archive\",\"generate deployment secrets locally and write .env mode 0600\",\"validate docker compose config again\",\"build only the hbarhub application image\",\"start postgres and redis, then run Django migrations\",\"start web, worker, and scheduler\",\"verify local live and ready health on port 8040\"],\"apply_preconditions\":[\"all source locks match exactly\",\"only main branch is present\",\"target path and target .env are absent\",\"no hbarhub containers, networks, volumes, or images exist\",\"port 8040 has no listener\",\"standard memory and disk gates pass\",\"docker compose config validates the exact source\"],\"forbidden\":[\"modify Gitea refs or repository content\",\"modify NPMplus, DNS, TLS, or any public proxy\",\"modify monitoring, backups, or other compose projects\",\"read, print, publish, or return generated secret values\",\"write outside the new stack and Docker resources labeled project hbarhub\"],\"next_stage\":\"STANDARD_LOCAL_DEPLOYMENT_APPLY\",\"operation\":\"HBARHUB_FRESH_STANDARD_LOCAL_DEPLOYMENT\",\"parent_inventory\":{\"capsule_sha256\":\"f481eb2474abce05efc6dda22d3be0fafc18d2e214880d44ecb8d78b2cd9dc88\",\"command_id\":\"HBARHUB-READONLY-INVENTORY-V3-20260803T084243Z\",\"output_sha256\":\"7b70a290dc7df9007fe86173b4a78b52de6c6ed8036da67ae5aaf34f3efcaed5\",\"runner_json_sha256\":\"ccb1be4794c46e97a51678bf8b810edc40699ef49dd7bbdd980eb9fbf66409cf\"},\"profile\":{\"health_endpoints\":[\"/health/live\",\"/health/ready\"],\"minimum_available_disk_bytes\":10737418240,\"minimum_available_memory_bytes\":2147483648,\"name\":\"STANDARD\",\"services\":[\"postgres\",\"redis\",\"scheduler\",\"web\",\"worker\"]},\"rollback\":{\"operations\":[\"capture sanitized failure evidence\",\"docker compose down --volumes --remove-orphans\",\"remove only application images created by this apply\",\"remove only /opt/stacks/hbarhub created by this apply\",\"verify no hbarhub resources remain and port 8040 is free\"],\"preexisting_data_preserved\":\"preconditions require no preexisting stack or project resources\",\"trigger\":\"any failed post-mutation check\"},\"schema\":1,\"source_lock\":{\"archive_bytes\":10084,\"archive_sha256\":\"25fb04b8dd74d4da2f50ba3aef76680b1813799a61fbd26c55bfcc1466cf82ac\",\"branch\":\"main\",\"commit\":\"57d2704dc4dc4f1e00c3e1bda67fc0bc2bef6957\",\"delivery\":\"local bare repository git archive; no Git credentials\",\"repository\":\"homelab-admin/hbarhub\",\"tree\":\"7e13a2e1b5ab35046dbe172383a814151c16cce0\"},\"target\":{\"compose_project\":\"hbarhub\",\"hostname\":\"core-apps\",\"local_port\":8040,\"public_proxy\":false,\"role\":\"core-apps\",\"stack_path\":\"/opt/stacks/hbarhub\",\"vmid\":170}},\"port_listener\":{\"addresses_read_from_output\":false,\"errors\":[],\"kernel_tables_read\":2,\"listener_entry_count\":0,\"listener_present\":false,\"port\":8040},\"private_addresses_included\":false,\"rc\":1,\"read_only\":true,\"ready_for_apply\":false,\"rollback_restored\":null,\"rollback_started\":false,\"sanitized\":true,\"schema\":1,\"secret_files_read\":false,\"secrets_included\":false,\"source\":{\"archive_bytes\":9760,\"archive_member_count\":33,\"archive_member_set_sha256\":\"2bb39282d17b0cbcb368739c4cbd947b72c43585b527b3e685937b6e6dd2b142\",\"archive_sha256\":\"a7fcc963703dfcf71e1c72410e4af8836ced830b35eff10dbcc59f333bbd0a9e\",\"available\":true,\"branch_names\":[\"main\"],\"env_example_key_count\":12,\"env_example_key_set_sha256\":\"730754b06ebb1f8d8855881238d6d5ed290120bb911b1f22cc68c12b4759085e\",\"invalid_utf8_path_count\":0,\"main_head\":\"57d2704dc4dc4f1e00c3e1bda67fc0bc2bef6957\",\"main_tree\":\"7e13a2e1b5ab35046dbe172383a814151c16cce0\",\"published_path_candidates\":[{\"bare_repository\":true,\"bytes\":4096,\"exists\":true,\"gid\":1000,\"git_rc\":0,\"kind\":\"directory\",\"mode\":\"0755\",\"path\":\"/opt/stacks/gitea/data/git/repositories/homelab-admin/hbarhub.git\",\"uid\":1000},{\"exists\":false,\"kind\":null,\"path\":\"/opt/stacks/gitea/data/gitea-repositories/homelab-admin/hbarhub.git\"}],\"python_compile_failures\":[],\"python_file_count\":13,\"requirements\":[\"Django==6.0.7\",\"celery==5.6.3\",\"gunicorn==26.0.0\",\"psycopg[binary]==3.3.4\",\"redis==8.0.1\"],\"requirements_match\":true,\"safe_manifest\":{\".dockerignore\":{\"bytes\":82,\"exists\":true,\"expected_sha256\":\"3870cba2def4ee4e45c8ef33cb7239c6d391a9b57ff17e9b26d7bbdaf03501fa\",\"matches\":true,\"sha256\":\"3870cba2def4ee4e45c8ef33cb7239c6d391a9b57ff17e9b26d7bbdaf03501fa\"},\".env.example\":{\"bytes\":419,\"exists\":true,\"expected_sha256\":\"0c93f24bb448c384a430b65bebcd54b86b570c62df88aa073e1342f7a3eba5b3\",\"matches\":true,\"sha256\":\"0c93f24bb448c384a430b65bebcd54b86b570c62df88aa073e1342f7a3eba5b3\"},\"Dockerfile\":{\"bytes\":477,\"exists\":true,\"expected_sha256\":\"9c0be49681f983c329937f486427dbf002b826973a48d5c1851de7f55a6ce1ab\",\"matches\":true,\"sha256\":\"9c0be49681f983c329937f486427dbf002b826973a48d5c1851de7f55a6ce1ab\"},\"README.md\":{\"bytes\":1429,\"exists\":true,\"expected_sha256\":\"3b6de9c4d5c9f76d51280bb395f86e3cf51b69c982ea6a5a8d3740d09739cfff\",\"matches\":true,\"sha256\":\"3b6de9c4d5c9f76d51280bb395f86e3cf51b69c982ea6a5a8d3740d09739cfff\"},\"compose.yaml\":{\"bytes\":2980,\"exists\":true,\"expected_sha256\":\"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc\",\"matches\":true,\"sha256\":\"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc\"},\"config/assets.json\":{\"bytes\":2787,\"exists\":true,\"expected_sha256\":\"dfa2fc55e610dc5bb341169c24d45aaaf4143a1b8c9d021db37a8a8725cd15ff\",\"matches\":true,\"sha256\":\"dfa2fc55e610dc5bb341169c24d45aaaf4143a1b8c9d021db37a8a8725cd15ff\"},\"docs/ARCHITECTURE.md\":{\"bytes\":1214,\"exists\":true,\"expected_sha256\":\"cf219e2f0ee4be0e4881afc7035afff4c79b167579486ecf2eb601fd925d0e8e\",\"matches\":true,\"sha256\":\"cf219e2f0ee4be0e4881afc7035afff4c79b167579486ecf2eb601fd925d0e8e\"},\"docs/OPERATIONS.md\":{\"bytes\":957,\"exists\":true,\"expected_sha256\":\"5b41e7fcb4527eea3e5ab2496ec2239d8021ae8843c302a9f5371d77fdd043a7\",\"matches\":true,\"sha256\":\"5b41e7fcb4527eea3e5ab2496ec2239d8021ae8843c302a9f5371d77fdd043a7\"},\"hbarhub/__init__.py\":{\"bytes\":65,\"exists\":true,\"expected_sha256\":\"8974a9c493587f508e73f358876ade4f3ab0369012b29ffb14280dbe30f721ce\",\"matches\":true,\"sha256\":\"8974a9c493587f508e73f358876ade4f3ab0369012b29ffb14280dbe30f721ce\"},\"hbarhub/celery.py\":{\"bytes\":223,\"exists\":true,\"expected_sha256\":\"b33bfae9785e01372e6b3c88a5747275013831fa5b323cfc60ada4f361551a47\",\"matches\":true,\"sha256\":\"b33bfae9785e01372e6b3c88a5747275013831fa5b323cfc60ada4f361551a47\"},\"hbarhub/settings.py\":{\"bytes\":3614,\"exists\":true,\"expected_sha256\":\"662118548cce23f916be7ed66a468255a3405a3430b301bfe5adba4b764a1f88\",\"matches\":true,\"sha256\":\"662118548cce23f916be7ed66a468255a3405a3430b301bfe5adba4b764a1f88\"},\"hbarhub/urls.py\":{\"bytes\":165,\"exists\":true,\"expected_sha256\":\"ddcebb4348c298dd8047df40cd1698603523f8a4ced6b518ad58f4b724db8cac\",\"matches\":true,\"sha256\":\"ddcebb4348c298dd8047df40cd1698603523f8a4ced6b518ad58f4b724db8cac\"},\"hbarhub/wsgi.py\":{\"bytes\":168,\"exists\":true,\"expected_sha256\":\"03ee75d6dd996de897b4a1c221584459e3b41c507d21f010d5b0372c4da8a630\",\"matches\":true,\"sha256\":\"03ee75d6dd996de897b4a1c221584459e3b41c507d21f010d5b0372c4da8a630\"},\"manage.py\":{\"bytes\":284,\"exists\":true,\"expected_sha256\":\"f9cca66c33a7b629895d0637299fa3aa2396ab6759bcade14ed28a6e2d306b5a\",\"matches\":true,\"sha256\":\"f9cca66c33a7b629895d0637299fa3aa2396ab6759bcade14ed28a6e2d306b5a\"},\"portal/__init__.py\":{\"bytes\":0,\"exists\":true,\"expected_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"matches\":true,\"sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},\"portal/apps.py\":{\"bytes\":174,\"exists\":true,\"expected_sha256\":\"9308f2f4d7e9d110253fe8574aa42edeabd35a7316ab740d9e5e6ac0ee5498a2\",\"matches\":true,\"sha256\":\"9308f2f4d7e9d110253fe8574aa42edeabd35a7316ab740d9e5e6ac0ee5498a2\"},\"portal/assets.py\":{\"bytes\":911,\"exists\":true,\"expected_sha256\":\"ce231cb3af3460166ef2a23c1456e3f704e44d9f19db42ce030af8a4bea71019\",\"matches\":true,\"sha256\":\"ce231cb3af3460166ef2a23c1456e3f704e44d9f19db42ce030af8a4bea71019\"},\"portal/tasks.py\":{\"bytes\":192,\"exists\":true,\"expected_sha256\":\"8b4402ff2ac1c8603bc9c0821ca16b3b6d610facad7eccf76b83076ee912f0b2\",\"matches\":true,\"sha256\":\"8b4402ff2ac1c8603bc9c0821ca16b3b6d610facad7eccf76b83076ee912f0b2\"},\"portal/templates/portal/home.html\":{\"bytes\":3478,\"exists\":true,\"expected_sha256\":\"bad177066fedee2f8e427cb81ba9c32db4ae36ce533ce0f2090e60b6970378ae\",\"matches\":true,\"sha256\":\"bad177066fedee2f8e427cb81ba9c32db4ae36ce533ce0f2090e60b6970378ae\"},\"portal/tests.py\":{\"bytes\":1371,\"exists\":true,\"expected_sha256\":\"42420399fd48c97ce5ab4872d95b5490e0d3a266df8677d31d0ee1987852c9ff\",\"matches\":true,\"sha256\":\"42420399fd48c97ce5ab4872d95b5490e0d3a266df8677d31d0ee1987852c9ff\"},\"portal/urls.py\":{\"bytes\":260,\"exists\":true,\"expected_sha256\":\"164665d9a442ab79bc4c0f250d1e3d76a096b4f93825e9900fab5bde0d53a088\",\"matches\":true,\"sha256\":\"164665d9a442ab79bc4c0f250d1e3d76a096b4f93825e9900fab5bde0d53a088\"},\"portal/views.py\":{\"bytes\":1449,\"exists\":true,\"expected_sha256\":\"b1166fa6008792a83701740f560f93a3b74b3203003bc738c35a5f56454c1f14\",\"matches\":true,\"sha256\":\"b1166fa6008792a83701740f560f93a3b74b3203003bc738c35a5f56454c1f14\"},\"requirements.txt\":{\"bytes\":81,\"exists\":true,\"expected_sha256\":\"9838729f64d26b126c20f47836bcedfc97262a46059c6f810e088b1b7bf02ffa\",\"matches\":true,\"sha256\":\"9838729f64d26b126c20f47836bcedfc97262a46059c6f810e088b1b7bf02ffa\"}},\"safe_manifest_all_match\":true,\"safe_manifest_scope\":\"PUBLISHED_23_SOURCE_FILES\",\"secret_file_read\":false,\"selected_path\":\"/opt/stacks/gitea/data/git/repositories/homelab-admin/hbarhub.git\",\"tracked_file_count\":27,\"tracked_total_bytes\":26067,\"tree_listing_sha256\":\"8119f9a0c680eca043b5d648b8bf90567c90e5a6ae4f503779f4e8b66fcaa954\",\"tree_path_set_sha256\":\"245c3f22584759bed02f493855facb68662333953100f036716afffc1f65e83f\"},\"stack\":{\"root\":{\"exists\":false,\"kind\":null,\"path\":\"/opt/stacks/hbarhub\"},\"secret_env_metadata_only\":{\"content_read\":false,\"exists\":false,\"kind\":null,\"path\":\"/opt/stacks/hbarhub/.env\"}},\"status\":\"FAIL\",\"unexpected_exception\":{}}\n" +} diff --git a/runtime/latest.txt b/runtime/latest.txt index 0f1004a..9402522 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,164 +1,34 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=CONTEXT-AUTO-[PRIVATE_IP]701Z -STATUS=OK -RC=0 +COMMAND_ID=HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z +STATUS=FAIL +RC=1 HOST=pve01 -COMPONENT=cluster-context -REFERENCE_SHA[PRIVATE_IP]f8edc75fcf[PRIVATE_IP]c[PRIVATE_IP]cc112ceccb6cf[PRIVATE_IP]a4deb8e -ERROR_REGISTER_SHA[PRIVATE_IP]c7fa[PRIVATE_IP]583c4aefac[PRIVATE_IP]1736ed[PRIVATE_IP]ab83 +MODE=verify +COMPONENT=hbarhub-standard-local-deployment-plan-v4 +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 +COMMAND_SHA256=7e96109fc1ec6a4c01907f9bbdf0a4a567ccfc27b25736e9bf7b41a0cc60c439 +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=1 +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=83f8961230bac64031c24e21208ca7b7e6fa042fff0024fbaf29265561f3e19c +SANITIZED_OUTPUT_SHA256=83f8961230bac64031c24e21208ca7b7e6fa042fff0024fbaf29265561f3e19c OUTPUT_BEGIN -GENERATED_AT_UTC=[PRIVATE_IP]T09:17:01Z -Cluster information -------------------- -Name: homelab -Config Version: 3 -Transport: knet -Secure auth: on +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z","mutation_outcome":"NO_MUTATION","rollback_restored":null,"rollback_started":false,"status":"FAIL","version":1} +{"PLAN_SHA256":null,"candidate_plan_sha256":"7b2c0997d18e5d76cbc083272a9242518f7ac9c3863fda1452f04b574d8667a9","capacity":{"disk":{"available_bytes":76467351552,"gate":true,"required_available_bytes":10737418240,"total_bytes":126605975552},"memory":{"available_bytes":2744389632,"required_available_bytes":2147483648,"standard_gate":true,"swap_free_bytes":6714781696,"swap_total_bytes":8589930496,"total_bytes":10435301376}},"changes_made":false,"checks":{"archive_bytes_exact":false,"archive_sha256_exact":false,"compose_config_valid":false,"compose_services_exact":false,"core_hostname":true,"disk_gate":true,"docker_available":true,"no_hbarhub_containers":true,"no_hbarhub_images":true,"no_hbarhub_networks":true,"no_hbarhub_volumes":true,"only_main_branch":true,"port_8040_free":true,"python_syntax_valid":true,"read_only":true,"requirements_exact":true,"safe_manifest_exact":true,"source_available":true,"source_commit_exact":true,"source_tree_exact":true,"standard_memory_gate":true,"target_env_absent":true,"target_path_absent":true,"tracked_file_count_exact":true,"tracked_total_bytes_exact":true,"tree_listing_exact":true,"tree_path_set_exact":true},"command_audit":[{"duration_ms":0,"output_within_limit":true,"rc":0,"stage":"git-candidate-1-is-bare","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":5,"stdout_sha256":"a17fcf0a2f50e2d495e4f90ce263410edc183add6c62699a2facbccf60410f74","timed_out":false,"tool":"git"},{"duration_ms":0,"output_within_limit":true,"rc":0,"stage":"git-main-head","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":41,"stdout_sha256":"dc0f064e529250268d3ff6232078a19aca8a12b3abc0291e79756ffde77303ed","timed_out":false,"tool":"git"},{"duration_ms":0,"output_within_limit":true,"rc":0,"stage":"git-main-tree","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":41,"stdout_sha256":"59f30ea418f3e638f5c0294f375feeda787f7da9acc07ac67f8276032be811a2","timed_out":false,"tool":"git"},{"duration_ms":0,"output_within_limit":true,"rc":0,"stage":"git-branches","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":5,"stdout_sha256":"6403203dd5a0867eb14d104ee8a73730bd72dd9ad92e78d996a6dba0a5dcfc01","timed_out":false,"tool":"git"},{"duration_ms":0,"output_within_limit":true,"rc":0,"stage":"git-main-ls-tree","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":2095,"stdout_sha256":"8119f9a0c680eca043b5d648b8bf90567c90e5a6ae4f503779f4e8b66fcaa954","timed_out":false,"tool":"git"},{"duration_ms":5,"output_within_limit":true,"rc":0,"stage":"git-main-archive","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":9760,"stdout_sha256":"a7fcc963703dfcf71e1c72410e4af8836ced830b35eff10dbcc59f333bbd0a9e","timed_out":false,"tool":"git"},{"duration_ms":10,"output_within_limit":true,"rc":0,"stage":"docker-server-version","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":13,"stdout_sha256":"8484e7b831ba500ccf015246dc0a7b3f98de3c11519b347437ff8e91db018257","timed_out":false,"tool":"docker"},{"duration_ms":30,"output_within_limit":true,"rc":0,"stage":"docker-compose-version","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":9,"stdout_sha256":"9a98539f27de5f629edafed2968b89d8ca06b9b39c9469ed2c22f3ca265bb6f9","timed_out":false,"tool":"docker"},{"duration_ms":7,"output_within_limit":true,"rc":0,"stage":"docker-hbarhub-containers","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","timed_out":false,"tool":"docker"},{"duration_ms":7,"output_within_limit":true,"rc":0,"stage":"docker-hbarhub-networks","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","timed_out":false,"tool":"docker"},{"duration_ms":7,"output_within_limit":true,"rc":0,"stage":"docker-hbarhub-volumes","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","timed_out":false,"tool":"docker"},{"duration_ms":12,"output_within_limit":true,"rc":0,"stage":"docker-hbarhub-images","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","timed_out":false,"tool":"docker"},{"duration_ms":28,"output_within_limit":true,"rc":16,"stage":"docker-compose-config","stderr_bytes":34,"stderr_sha256":"ba21762623983ad018d6304d027d71b6daf31b7c183482acf2579424be4cc326","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","timed_out":false,"tool":"docker"}],"command_id":"HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-V4-20260803T091507Z","container_environment_requested":false,"control_plane_error":null,"diagnosis":"DOCKER_COMPOSE_CONFIG_FAILED","diagnostic_complete":false,"docker":{"available":true,"compose_config":{"attempted":true,"config_bytes":0,"config_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","rc":16,"secret_file_read":false,"services":[],"services_match":false,"stderr_bytes":34,"stderr_sha256":"ba21762623983ad018d6304d027d71b6daf31b7c183482acf2579424be4cc326","valid":false},"compose_version":"2.26.1-4","container_environment_requested":false,"containers":[],"images":[],"networks":[],"server_version":"26.1.5+dfsg1","volumes":[]},"duration_ms":116,"failed_checks":["archive_bytes_exact","archive_sha256_exact","compose_config_valid","compose_services_exact"],"failures":["DOCKER_COMPOSE_CONFIG_FAILED"],"gate":"DEPLOYMENT_PLAN_DIAGNOSTIC_INCOMPLETE","identity":{"expected_hostname":"core-apps","hostname_short":"core-apps","matches":true},"mutation_outcome":"NO_MUTATION","plan":{"acceptance":["all five services are present","postgres and redis are healthy","web is healthy and /health/live returns success","/health/ready returns success after migrations","worker and scheduler are running","Gitea main remains unchanged","public proxy remains unchanged"],"apply_operations":["create /opt/stacks/hbarhub from the verified in-memory git archive","generate deployment secrets locally and write .env mode 0600","validate docker compose config again","build only the hbarhub application image","start postgres and redis, then run Django migrations","start web, worker, and scheduler","verify local live and ready health on port 8040"],"apply_preconditions":["all source locks match exactly","only main branch is present","target path and target .env are absent","no hbarhub containers, networks, volumes, or images exist","port 8040 has no listener","standard memory and disk gates pass","docker compose config validates the exact source"],"forbidden":["modify Gitea refs or repository content","modify NPMplus, DNS, TLS, or any public proxy","modify monitoring, backups, or other compose projects","read, print, publish, or return generated secret values","write outside the new stack and Docker resources labeled project hbarhub"],"next_stage":"STANDARD_LOCAL_DEPLOYMENT_APPLY","operation":"HBARHUB_FRESH_STANDARD_LOCAL_DEPLOYMENT","parent_inventory":{"capsule_sha256":"f481eb2474abce05efc6dda22d3be0fafc18d2e214880d44ecb8d78b2cd9dc88","command_id":"HBARHUB-READONLY-INVENTORY-V3-20260803T084243Z","output_sha256":"7b70a290dc7df9007fe86173b4a78b52de6c6ed8036da67ae5aaf34f3efcaed5","runner_json_sha256":"ccb1be4794c46e97a51678bf8b810edc40699ef49dd7bbdd980eb9fbf66409cf"},"profile":{"health_endpoints":["/health/live","/health/ready"],"minimum_available_disk_bytes":10737418240,"minimum_available_memory_bytes":2147483648,"name":"STANDARD","services":["postgres","redis","scheduler","web","worker"]},"rollback":{"operations":["capture sanitized failure evidence","docker compose down --volumes --remove-orphans","remove only application images created by this apply","remove only /opt/stacks/hbarhub created by this apply","verify no hbarhub resources remain and port 8040 is free"],"preexisting_data_preserved":"preconditions require no preexisting stack or project resources","trigger":"any failed post-mutation check"},"schema":1,"source_lock":{"archive_bytes":10084,"archive_sha256":"25fb04b8dd74d4da2f50ba3aef76680b1813799a61fbd26c55bfcc1466cf82ac","branch":"main","commit":"57d2704dc4dc4f1e00c3e1bda67fc0bc2bef6957","delivery":"local bare repository git archive; no Git credentials","repository":"homelab-admin/hbarhub","tree":"7e13a2e1b5ab35046dbe172383a814151c16cce0"},"target":{"compose_project":"hbarhub","hostname":"core-apps","local_port":8040,"public_proxy":false,"role":"core-apps","stack_path":"/opt/stacks/hbarhub","vmid":170}},"port_listener":{"addresses_read_from_output":false,"errors":[],"kernel_tables_read":2,"listener_entry_count":0,"listener_present":false,"port":8040},"private_addresses_included":false,"rc":1,"read_only":true,"ready_for_apply":false,"rollback_restored":null,"rollback_started":false,"sanitized":true,"schema":1,"secret_files_read":false,"secrets_included":false,"source":{"archive_bytes":9760,"archive_member_count":33,"archive_member_set_sha256":"2bb39282d17b0cbcb368739c4cbd947b72c43585b527b3e685937b6e6dd2b142","archive_sha256":"a7fcc963703dfcf71e1c72410e4af8836ced830b35eff10dbcc59f333bbd0a9e","available":true,"branch_names":["main"],"env_example_key_count":12,"env_example_key_set_sha256":"730754b06ebb1f8d8855881238d6d5ed290120bb911b1f22cc68c12b4759085e","invalid_utf8_path_count":0,"main_head":"57d2704dc4dc4f1e00c3e1bda67fc0bc2bef6957","main_tree":"7e13a2e1b5ab35046dbe172383a814151c16cce0","published_path_candidates":[{"bare_repository":true,"bytes":4096,"exists":true,"gid":1000,"git_rc":0,"kind":"directory","mode":"0755","path":"/opt/stacks/gitea/data/git/repositories/homelab-admin/hbarhub.git","uid":1000},{"exists":false,"kind":null,"path":"/opt/stacks/gitea/data/gitea-repositories/homelab-admin/hbarhub.git"}],"python_compile_failures":[],"python_file_count":13,"requirements":["Django==6.0.7","celery==5.6.3","gunicorn==26.0.0","psycopg[binary]==3.3.4","redis==8.0.1"],"requirements_match":true,"safe_manifest":{".dockerignore":{"bytes":82,"exists":true,"expected_sha256":"3870cba2def4ee4e45c8ef33cb7239c6d391a9b57ff17e9b26d7bbdaf03501fa","matches":true,"sha256":"3870cba2def4ee4e45c8ef33cb7239c6d391a9b57ff17e9b26d7bbdaf03501fa"},".env.example":{"bytes":419,"exists":true,"expected_sha256":"0c93f24bb448c384a430b65bebcd54b86b570c62df88aa073e1342f7a3eba5b3","matches":true,"sha256":"0c93f24bb448c384a430b65bebcd54b86b570c62df88aa073e1342f7a3eba5b3"},"Dockerfile":{"bytes":477,"exists":true,"expected_sha256":"9c0be49681f983c329937f486427dbf002b826973a48d5c1851de7f55a6ce1ab","matches":true,"sha256":"9c0be49681f983c329937f486427dbf002b826973a48d5c1851de7f55a6ce1ab"},"README.md":{"bytes":1429,"exists":true,"expected_sha256":"3b6de9c4d5c9f76d51280bb395f86e3cf51b69c982ea6a5a8d3740d09739cfff","matches":true,"sha256":"3b6de9c4d5c9f76d51280bb395f86e3cf51b69c982ea6a5a8d3740d09739cfff"},"compose.yaml":{"bytes":2980,"exists":true,"expected_sha256":"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc","matches":true,"sha256":"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc"},"config/assets.json":{"bytes":2787,"exists":true,"expected_sha256":"dfa2fc55e610dc5bb341169c24d45aaaf4143a1b8c9d021db37a8a8725cd15ff","matches":true,"sha256":"dfa2fc55e610dc5bb341169c24d45aaaf4143a1b8c9d021db37a8a8725cd15ff"},"docs/ARCHITECTURE.md":{"bytes":1214,"exists":true,"expected_sha256":"cf219e2f0ee4be0e4881afc7035afff4c79b167579486ecf2eb601fd925d0e8e","matches":true,"sha256":"cf219e2f0ee4be0e4881afc7035afff4c79b167579486ecf2eb601fd925d0e8e"},"docs/OPERATIONS.md":{"bytes":957,"exists":true,"expected_sha256":"5b41e7fcb4527eea3e5ab2496ec2239d8021ae8843c302a9f5371d77fdd043a7","matches":true,"sha256":"5b41e7fcb4527eea3e5ab2496ec2239d8021ae8843c302a9f5371d77fdd043a7"},"hbarhub/__init__.py":{"bytes":65,"exists":true,"expected_sha256":"8974a9c493587f508e73f358876ade4f3ab0369012b29ffb14280dbe30f721ce","matches":true,"sha256":"8974a9c493587f508e73f358876ade4f3ab0369012b29ffb14280dbe30f721ce"},"hbarhub/celery.py":{"bytes":223,"exists":true,"expected_sha256":"b33bfae9785e01372e6b3c88a5747275013831fa5b323cfc60ada4f361551a47","matches":true,"sha256":"b33bfae9785e01372e6b3c88a5747275013831fa5b323cfc60ada4f361551a47"},"hbarhub/settings.py":{"bytes":3614,"exists":true,"expected_sha256":"662118548cce23f916be7ed66a468255a3405a3430b301bfe5adba4b764a1f88","matches":true,"sha256":"662118548cce23f916be7ed66a468255a3405a3430b301bfe5adba4b764a1f88"},"hbarhub/urls.py":{"bytes":165,"exists":true,"expected_sha256":"ddcebb4348c298dd8047df40cd1698603523f8a4ced6b518ad58f4b724db8cac","matches":true,"sha256":"ddcebb4348c298dd8047df40cd1698603523f8a4ced6b518ad58f4b724db8cac"},"hbarhub/wsgi.py":{"bytes":168,"exists":true,"expected_sha256":"03ee75d6dd996de897b4a1c221584459e3b41c507d21f010d5b0372c4da8a630","matches":true,"sha256":"03ee75d6dd996de897b4a1c221584459e3b41c507d21f010d5b0372c4da8a630"},"manage.py":{"bytes":284,"exists":true,"expected_sha256":"f9cca66c33a7b629895d0637299fa3aa2396ab6759bcade14ed28a6e2d306b5a","matches":true,"sha256":"f9cca66c33a7b629895d0637299fa3aa2396ab6759bcade14ed28a6e2d306b5a"},"portal/__init__.py":{"bytes":0,"exists":true,"expected_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","matches":true,"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"portal/apps.py":{"bytes":174,"exists":true,"expected_sha256":"9308f2f4d7e9d110253fe8574aa42edeabd35a7316ab740d9e5e6ac0ee5498a2","matches":true,"sha256":"9308f2f4d7e9d110253fe8574aa42edeabd35a7316ab740d9e5e6ac0ee5498a2"},"portal/assets.py":{"bytes":911,"exists":true,"expected_sha256":"ce231cb3af3460166ef2a23c1456e3f704e44d9f19db42ce030af8a4bea71019","matches":true,"sha256":"ce231cb3af3460166ef2a23c1456e3f704e44d9f19db42ce030af8a4bea71019"},"portal/tasks.py":{"bytes":192,"exists":true,"expected_sha256":"8b4402ff2ac1c8603bc9c0821ca16b3b6d610facad7eccf76b83076ee912f0b2","matches":true,"sha256":"8b4402ff2ac1c8603bc9c0821ca16b3b6d610facad7eccf76b83076ee912f0b2"},"portal/templates/portal/home.html":{"bytes":3478,"exists":true,"expected_sha256":"bad177066fedee2f8e427cb81ba9c32db4ae36ce533ce0f2090e60b6970378ae","matches":true,"sha256":"bad177066fedee2f8e427cb81ba9c32db4ae36ce533ce0f2090e60b6970378ae"},"portal/tests.py":{"bytes":1371,"exists":true,"expected_sha256":"42420399fd48c97ce5ab4872d95b5490e0d3a266df8677d31d0ee1987852c9ff","matches":true,"sha256":"42420399fd48c97ce5ab4872d95b5490e0d3a266df8677d31d0ee1987852c9ff"},"portal/urls.py":{"bytes":260,"exists":true,"expected_sha256":"164665d9a442ab79bc4c0f250d1e3d76a096b4f93825e9900fab5bde0d53a088","matches":true,"sha256":"164665d9a442ab79bc4c0f250d1e3d76a096b4f93825e9900fab5bde0d53a088"},"portal/views.py":{"bytes":1449,"exists":true,"expected_sha256":"b1166fa6008792a83701740f560f93a3b74b3203003bc738c35a5f56454c1f14","matches":true,"sha256":"b1166fa6008792a83701740f560f93a3b74b3203003bc738c35a5f56454c1f14"},"requirements.txt":{"bytes":81,"exists":true,"expected_sha256":"9838729f64d26b126c20f47836bcedfc97262a46059c6f810e088b1b7bf02ffa","matches":true,"sha256":"9838729f64d26b126c20f47836bcedfc97262a46059c6f810e088b1b7bf02ffa"}},"safe_manifest_all_match":true,"safe_manifest_scope":"PUBLISHED_23_SOURCE_FILES","secret_file_read":false,"selected_path":"/opt/stacks/gitea/data/git/repositories/homelab-admin/hbarhub.git","tracked_file_count":27,"tracked_total_bytes":26067,"tree_listing_sha256":"8119f9a0c680eca043b5d648b8bf90567c90e5a6ae4f503779f4e8b66fcaa954","tree_path_set_sha256":"245c3f22584759bed02f493855facb68662333953100f036716afffc1f65e83f"},"stack":{"root":{"exists":false,"kind":null,"path":"/opt/stacks/hbarhub"},"secret_env_metadata_only":{"content_read":false,"exists":false,"kind":null,"path":"/opt/stacks/hbarhub/.env"}},"status":"FAIL","unexpected_exception":{}} -Quorum information ------------------- -Date: Mon Aug [PRIVATE_IP] 2026 -Quorum provider: corosync_votequorum -Nodes: 3 -Node ID: [PRIVATE_IP] -Ring ID: 1.db -Quorate: Yes - -Votequorum information ----------------------- -Expected votes: 3 -Highest expected: 3 -Total votes: 3 -Quorum: 2 -Flags: Quorate - -Membership information ----------------------- - Nodeid Votes Name -[PRIVATE_IP] [PRIVATE_IP].11 (local) -[PRIVATE_IP] [PRIVATE_IP].13 -[PRIVATE_IP] [PRIVATE_IP].12 - -Membership information ----------------------- - Nodeid Votes Name - 1 1 pve01 (local) - 2 1 pve03 - 3 1 pve02 -[{"cpu":[PRIVATE_IP][PRIVATE_IP],"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/110","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":511799,"vmid":110},{"cpu":[PRIVATE_IP][PRIVATE_IP],"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/111","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":511884,"vmid":111},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/112","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":511844,"vmid":112},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/113","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":511888,"vmid":113},{"cpu":[PRIVATE_IP]7986,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"edge-vm","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":511829,"vmid":130},{"cpu":[PRIVATE_IP]82286,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/150","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"nextcloud","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":511796,"vmid":150},{"cpu":[PRIVATE_IP]293857,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/160","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"forum-prod","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"qemu","uptime":511881,"vmid":160},{"cpu":[PRIVATE_IP]24485,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/170","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"core-apps","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":511792,"vmid":170},{"cpu":[PRIVATE_IP]03521,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/171","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"monitoring","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":511789,"vmid":171},{"cpu":[PRIVATE_IP]66958,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/180","maxcpu":2,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"cluster-admin","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"qemu","uptime":511878,"vmid":180},{"cpu":[PRIVATE_IP]741608,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/190","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"homelab-ops-worker","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":511825,"vmid":190},{"cpu":0,"disk":0,"diskread":0,"diskwrite":0,"id":"qemu/9130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":0,"memhost":0,"name":"edge-cold-standby","netin":0,"netout":0,"node":"pve02","status":"stopped","template":0,"type":"qemu","uptime":0,"vmid":9130},{"cgroup-mode":2,"cpu":[PRIVATE_IP]12157,"disk":[PRIVATE_IP],"id":"node/pve02","level":"","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve02","status":"online","type":"node","uptime":511921},{"cgroup-mode":2,"cpu":[PRIVATE_IP]3454,"disk":[PRIVATE_IP],"id":"node/pve01","level":"","maxcpu":24,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve01","status":"online","type":"node","uptime":511901},{"cgroup-mode":2,"cpu":[PRIVATE_IP]38302,"disk":[PRIVATE_IP],"id":"node/pve03","level":"","maxcpu":8,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve03","status":"online","type":"node","uptime":511847},{"content":"rootdir,images","disk":[PRIVATE_IP],"id":"storage/pve02/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"rootdir,images","disk":[PRIVATE_IP],"id":"storage/pve01/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"rootdir,images","disk":[PRIVATE_IP],"id":"storage/pve03/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"vztmpl,import,backup,iso","disk":[PRIVATE_IP],"id":"storage/pve02/local","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"vztmpl,import,backup,iso","disk":[PRIVATE_IP],"id":"storage/pve01/local","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"vztmpl,import,backup,iso","disk":[PRIVATE_IP],"id":"storage/pve03/local","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"id":"network/pve02/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve02","status":"ok","type":"network"},{"id":"network/pve01/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve01","status":"ok","type":"network"},{"id":"network/pve03/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve03","status":"ok","type":"network"}] -Name Type Status Total (KiB) Used (KiB) Available (KiB) % -local dir active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 13.96% -local-lvm lvmthin active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 27.30% - UNIT LOAD ACTIVE SUB DESCRIPTION -● homelab-backup-matrix-refresh.service loaded failed failed Generate unified homelab backup matrix state -● homelab-crypto-portfolio-chart-health.service loaded failed failed Crypto portfolio chart health check -● skladchik-reports-monitor-supervisor.service loaded failed failed Skladchik reports monitor full supervisor - -Legend: LOAD → Reflects whether the unit definition was properly loaded. - ACTIVE → The high-level unit activation state, i.e. generalization of SUB. - SUB → The low-level unit activation state, values depend on unit type. - -3 loaded units listed. -NEXT LEFT LAST PASSED UNIT ACTIVATES -Mon [PRIVATE_IP] 12:17:26 MSK 23s Mon [PRIVATE_IP] 12:16:26 MSK 36s ago homelab-cluster-admin-webpanel-sync.timer homelab-cluster-admin-webpanel-sync.service -Mon [PRIVATE_IP] 12:17:26 MSK 23s Mon [PRIVATE_IP] 12:16:26 MSK 36s ago homelab-private-vpn-hosts-health.timer homelab-private-vpn-hosts-health.service -Mon [PRIVATE_IP] 12:17:38 MSK 35s Mon [PRIVATE_IP] 12:12:25 MSK 4min 36s ago homelab-health-metrics.timer homelab-health-metrics.service -Mon [PRIVATE_IP] 12:17:41 MSK 38s Mon [PRIVATE_IP] 12:12:14 MSK 4min 47s ago homelab-crypto-portfolio-chart-health.timer homelab-crypto-portfolio-chart-health.service -Mon [PRIVATE_IP] 12:17:59 MSK 57s Mon [PRIVATE_IP] 12:16:57 MSK 5s ago homelab-router-watchdog.timer homelab-router-watchdog.service -Mon [PRIVATE_IP] 12:18:26 MSK 1min 24s Mon [PRIVATE_IP] 12:13:26 MSK 3min 35s ago homelab-smartctl-textfile.timer homelab-smartctl-textfile.service -Mon [PRIVATE_IP] 12:18:41 MSK 1min 39s Mon [PRIVATE_IP] 12:16:39 MSK 22s ago homelab-cluster-admin-inventory-sync.timer homelab-cluster-admin-inventory-sync.service -Mon [PRIVATE_IP] 12:19:26 MSK 2min 23s Mon [PRIVATE_IP] 12:04:26 MSK 12min ago homelab-disk-space-health.timer homelab-disk-space-health.service -Mon [PRIVATE_IP] 12:20:21 MSK 3min 19s Mon [PRIVATE_IP] 12:05:21 MSK 11min ago homelab-pve03-staging-capacity-health.timer homelab-pve03-staging-capacity-health.service -Mon [PRIVATE_IP] 12:20:21 MSK 3min 19s Mon [PRIVATE_IP] 12:05:21 MSK 11min ago prometheus-node-exporter-nvme.timer prometheus-node-exporter-nvme.service -Mon [PRIVATE_IP] 12:20:26 MSK 3min 23s Mon [PRIVATE_IP] 12:15:26 MSK 1min 36s ago netbird-peers-health.timer netbird-peers-health.service -Mon [PRIVATE_IP] 12:26:14 MSK 9min Mon [PRIVATE_IP] 12:16:14 MSK 47s ago skladchik-reports-monitor-supervisor.timer skladchik-reports-monitor-supervisor.service -Mon [PRIVATE_IP] 12:29:41 MSK 12min Mon [PRIVATE_IP] 11:58:47 MSK 18min ago homelab-reference-refresh.timer homelab-reference-refresh.service -Mon [PRIVATE_IP] 12:30:00 MSK 12min Mon [PRIVATE_IP] 12:15:14 MSK 1min 47s ago homelab-incident-journal.timer homelab-incident-journal.service -Mon [PRIVATE_IP] 12:30:15 MSK 13min Mon [PRIVATE_IP] 12:15:47 MSK 1min 15s ago homelab-external-probe-vps-health.timer homelab-external-probe-vps-health.service -Mon [PRIVATE_IP] 12:30:29 MSK 13min Mon [PRIVATE_IP] 12:16:36 MSK 26s ago homelab-duty-admin-v2.timer homelab-duty-admin-v2.service -Mon [PRIVATE_IP] 12:30:32 MSK 13min Mon [PRIVATE_IP] 12:01:14 MSK 15min ago homelab-mkdocs-auto-refresh.timer homelab-mkdocs-auto-refresh.service -Mon [PRIVATE_IP] 12:31:14 MSK 14min Mon [PRIVATE_IP] 12:16:14 MSK 47s ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service -Mon [PRIVATE_IP] 12:31:24 MSK 14min Mon [PRIVATE_IP] 12:15:14 MSK 1min 47s ago homelab-forum-snuffleupagus-health.timer homelab-forum-snuffleupagus-health.service -Mon [PRIVATE_IP] 12:38:49 MSK 21min Mon [PRIVATE_IP] 05:11:57 MSK 7h ago apt-daily.timer apt-daily.service -Mon [PRIVATE_IP] 14:08:25 MSK 1h 51min Mon [PRIVATE_IP] 08:08:25 MSK 4h 8min ago homelab-vps-identity-audit.timer homelab-vps-identity-audit.service -Mon [PRIVATE_IP] 14:20:25 MSK 2h 3min Sun [PRIVATE_IP] 14:20:25 MSK 21h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service -Tue [PRIVATE_IP] 00:00:00 MSK 11h Mon [PRIVATE_IP] 00:00:06 MSK 12h ago dpkg-db-backup.timer dpkg-db-backup.service -Tue [PRIVATE_IP] 00:05:03 MSK 11h Mon [PRIVATE_IP] 00:15:28 MSK 12h ago homelab-storage-capacity.timer homelab-storage-capacity.service -Tue [PRIVATE_IP] 00:07:51 MSK 11h Mon [PRIVATE_IP] 00:02:07 MSK 12h ago homelab-evidence-catalog.timer homelab-evidence-catalog.service -Tue [PRIVATE_IP] 00:08:11 MSK 11h Mon [PRIVATE_IP] 00:11:14 MSK 12h ago homelab-quality-gate.timer homelab-quality-gate.service -Tue [PRIVATE_IP] 00:08:26 MSK 11h Mon [PRIVATE_IP] 00:49:14 MSK 11h ago logrotate.timer logrotate.service -Tue [PRIVATE_IP] 00:13:28 MSK 11h Mon [PRIVATE_IP] 00:05:50 MSK 12h ago homelab-docker-health.timer homelab-docker-health.service -Tue [PRIVATE_IP] 00:14:17 MSK 11h Mon [PRIVATE_IP] 10:50:38 MSK 1h 26min ago man-db.timer man-db.service -Tue [PRIVATE_IP] 01:23:37 MSK 13h Mon [PRIVATE_IP] 01:28:07 MSK 10h ago pve-daily-update.timer pve-daily-update.service -Tue [PRIVATE_IP] 03:50:00 MSK 15h Mon [PRIVATE_IP] 03:50:07 MSK 8h ago filebrowser-offhost-sync.timer filebrowser-offhost-sync.service -Tue [PRIVATE_IP] 04:41:55 MSK 16h Mon [PRIVATE_IP] 04:50:29 MSK 7h ago homelab-edge-vm-offhost-freshness.timer homelab-edge-vm-offhost-freshness.service -Tue [PRIVATE_IP] 05:14:52 MSK 16h Mon [PRIVATE_IP] 05:06:55 MSK 7h ago homelab-sops-edge-secret-coverage.timer homelab-sops-edge-secret-coverage.service -Tue [PRIVATE_IP] 06:52:59 MSK 18h Mon [PRIVATE_IP] 06:53:14 MSK 5h 23min ago apt-daily-upgrade.timer apt-daily-upgrade.service -Tue [PRIVATE_IP] 07:03:42 MSK 18h Mon [PRIVATE_IP] 07:05:50 MSK 5h 11min ago homelab-drift-check.timer homelab-drift-check.service -Tue [PRIVATE_IP] 07:39:24 MSK 19h Mon [PRIVATE_IP] 07:21:25 MSK 4h 55min ago homelab-service-registry-check.timer homelab-service-registry-check.service -Tue [PRIVATE_IP] 07:45:52 MSK 19h Mon [PRIVATE_IP] 07:50:14 MSK 4h 26min ago homelab-alerting-health.timer homelab-alerting-health.service -Tue [PRIVATE_IP] 07:54:16 MSK 19h Mon [PRIVATE_IP] 07:52:50 MSK 4h 24min ago homelab-desired-state-sync.timer homelab-desired-state-sync.service -Tue [PRIVATE_IP] 07:55:52 MSK 19h Mon [PRIVATE_IP] 07:50:25 MSK 4h 26min ago homelab-dependency-map-check.timer homelab-dependency-map-check.service -Tue [PRIVATE_IP] 07:56:48 MSK 19h Mon [PRIVATE_IP] 07:46:38 MSK 4h 30min ago homelab-runbook-generate.timer homelab-runbook-generate.service -Tue [PRIVATE_IP] 07:59:39 MSK 19h Mon [PRIVATE_IP] 08:11:07 MSK 4h 5min ago homelab-duty-admin-report.timer homelab-duty-admin-report.service -Tue [PRIVATE_IP] 08:03:48 MSK 19h Mon [PRIVATE_IP] 08:19:07 MSK 3h 57min ago homelab-overall-health.timer homelab-overall-health.service -Tue [PRIVATE_IP] 08:12:24 MSK 19h Mon [PRIVATE_IP] 08:23:50 MSK 3h 53min ago homelab-final-readiness-gate.timer homelab-final-readiness-gate.service -Tue [PRIVATE_IP] 08:16:32 MSK 19h Mon [PRIVATE_IP] 08:21:25 MSK 3h 55min ago homelab-kuma-monitor-policy.timer homelab-kuma-monitor-policy.service -Tue [PRIVATE_IP] 08:36:17 MSK 20h Mon [PRIVATE_IP] 08:42:03 MSK 3h 34min ago homelab-secret-exposure-guard.timer homelab-secret-exposure-guard.service -Tue [PRIVATE_IP] 08:36:39 MSK 20h Mon [PRIVATE_IP] 08:32:47 MSK 3h 44min ago homelab-capacity-risk.timer homelab-capacity-risk.service -Tue [PRIVATE_IP] 08:50:00 MSK 20h Mon [PRIVATE_IP] 08:47:23 MSK 3h 29min ago homelab-golden-state-index.timer homelab-golden-state-index.service -Tue [PRIVATE_IP] 08:52:29 MSK 20h Mon [PRIVATE_IP] 08:53:07 MSK 3h 23min ago homelab-cluster-passport.timer homelab-cluster-passport.service -Tue [PRIVATE_IP] 08:54:34 MSK 20h Mon [PRIVATE_IP] 08:51:27 MSK 3h 25min ago immich-media-offhost-sync.timer immich-media-offhost-sync.service -Tue [PRIVATE_IP] 09:06:42 MSK 20h Mon [PRIVATE_IP] 09:20:50 MSK 2h 56min ago memos-offhost-sync.timer memos-offhost-sync.service -Tue [PRIVATE_IP] 10:15:00 MSK 21h Mon [PRIVATE_IP] 10:15:05 MSK 2h 1min ago skladchik-reports-monitor-monthly-selftest-watch.timer skladchik-reports-monitor-monthly-selftest-watch.service -Sun [PRIVATE_IP] 03:10:38 MSK 5 days Sun [PRIVATE_IP] 03:10:25 MSK 1 day 9h ago xfs_scrub_all.timer xfs_scrub_all.service -Sun [PRIVATE_IP] 03:10:48 MSK 5 days Sun [PRIVATE_IP] 03:10:50 MSK 1 day 9h ago e2scrub_all.timer e2scrub_all.service -Mon [PRIVATE_IP] 00:03:56 MSK 6 days Mon [PRIVATE_IP] 00:11:50 MSK 12h ago homelab-secret-sanity.timer homelab-secret-sanity.service -Mon [PRIVATE_IP] 01:11:21 MSK 6 days Mon [PRIVATE_IP] 01:17:56 MSK 10h ago fstrim.timer fstrim.service -- - - - prometheus-node-exporter-ipmitool-sensor.timer prometheus-node-exporter-ipmitool-sensor.service -- - - - prometheus-node-exporter-mellanox-hca-temp.timer prometheus-node-exporter-mellanox-hca-temp.service -- - - - prometheus-node-exporter-smartmon.timer prometheus-node-exporter-smartmon.service - -58 timers listed. -- Обрезанная, повреждённая или частично вставленная команда считается невыполненной; сначала проводится side-effect audit. -- Хвост parse-ошибки закрывается только после доказательства отсутствия изменений и временных артефактов. -- Proof: /var/lib/homelab-change-sets/operator-command-size-guard-v[PRIVATE_IP]T182653Z/report.txt - -## HOMELAB_ADMIN_CLI_CONTRACT_[PRIVATE_IP] -- Поддерживаемые команды: version, status, lint TASK_DIR, validate TASK_DIR, run TASK_DIR PHASE. -- Отдельная команда --help отсутствует. Неизвестный аргумент печатает usage и штатно возвращает RC=64. -- Нельзя трактовать RC=64 от --help как неисправность runner. -- Для проверки доступности runner использовать homelab-admin version; для структуры CLI использовать зафиксированную usage-строку. -- Proof: /var/lib/homelab-change-sets/homelab-admin-cli-contract-fix-v[PRIVATE_IP]T183338Z/report.txt - -AUTOMATIC_CLUSTER_CONTEXT_REFRESH_[PRIVATE_IP] -Collector: /usr/local/sbin/homelab-context-collect -Scheduler: hourly at minute 17 via /etc/cron.d/homelab-context-refresh -Destination: immutable Gitea runtime history with CONTEXT-AUTO UTC command IDs. - -AUTOMATIC_CLUSTER_CONTEXT_REFRESH_DIRECT_[PRIVATE_IP] -Publisher: /usr/local/sbin/homelab-context-refresh-direct -Schedule: hourly at minute 17. -Destination: immutable assistant-runtime history with CONTEXT-AUTO UTC IDs. -ANTI_REGRESSION_TOKEN=HOMELAB_VM_2CLOUD_444_OUTER_LAUNCHER_BOUNDARY_REQUIRED -- Anti-regression: validate the complete outer launcher with a shell syntax check and verify the wrapper argument boundary before issuing it. -- Infrastructure action executed: none. -- Backup payload impact: none. -- Production impact: none. -- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. -- Registered at: [PRIVATE_IP]T11:20:32Z - -## ERROR_[PRIVATE_IP]_HOMELAB_VM_2CLOUD_DRAIN_CLOSURE_PREFLIGHT_446 -COMMAND_ID=HOMELAB-VM-2CLOUD-DRAIN-CLOSURE-PREFLIGHT-446 -- Symptom: homelab-chat-run-linked printed Usage and skipped result-feed publication as invalid input. -- Root cause: the diagnostic script was piped to wrapper stdin and the mandatory double-dash command separator was omitted. -- Correction: invoke homelab-chat-run-linked as COMMAND_ID MODE COMPONENT -- command arguments; stdin is not its command interface. -ANTI_REGRESSION_TOKEN=HOMELAB_CHAT_RUN_COMMAND_REQUIRES_DOUBLE_DASH -- Anti-regression: treat wrapper Usage as the authoritative CLI contract and syntax-check the complete launcher, not only its inner payload. -- Infrastructure action executed: none. -- Backup payload impact: none. -- Production impact: none. -- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. -- Registered at: [PRIVATE_IP]T11:20:32Z OUTPUT_END CHAT_OUTPUT_END