diff --git a/WORKBOARD.yaml b/WORKBOARD.yaml index b2d560c..6e2e4d2 100644 --- a/WORKBOARD.yaml +++ b/WORKBOARD.yaml @@ -29,3 +29,8 @@ items: status: complete source: INDEX.md owner: "" + - id: SVRNTY-VISION-WORK-009 + title: BTE-WORK-038 ComfyUI GX10 Restore Proof + status: blocked-on-gx10-cuda-initialization + source: docs/goal-runs/bte-work-038-comfyui-gx10-restore-proof/svrnty-vision-work-009-comfyui-gx10-restore-proof.md + owner: jp diff --git a/docs/goal-runs/bte-work-038-comfyui-gx10-restore-proof/svrnty-vision-work-009-comfyui-gx10-restore-proof.json b/docs/goal-runs/bte-work-038-comfyui-gx10-restore-proof/svrnty-vision-work-009-comfyui-gx10-restore-proof.json new file mode 100644 index 0000000..8c98597 --- /dev/null +++ b/docs/goal-runs/bte-work-038-comfyui-gx10-restore-proof/svrnty-vision-work-009-comfyui-gx10-restore-proof.json @@ -0,0 +1,101 @@ +{ + "schema": "svrnty-vision.bte-work-038-comfyui-gx10-restore-proof.v1", + "timestamp": "2026-06-20T15:53:27Z", + "work_item_id": "SVRNTY-VISION-WORK-009", + "route": "svrnty-vision", + "status": "blocked_on_gx10_cuda_initialization_no_bte_retry", + "approval_ref": "APPROVED: BTE-WORK-038 ComfyUI/GX10 restore proof and single third retry", + "authority_effect": "provider_route_health_refresh_attempted", + "product_ready_claim": false, + "provider_gateway_health": { + "route_identity": "svrnty-vision", + "url_ref": "http://localhost:8092/healthz", + "http_status": 200, + "body_status": "ok", + "version": "0.1.0" + }, + "provider_gateway_health_from_bte_runtime_namespace": { + "route_identity": "svrnty-vision", + "url_ref": "http://172.20.0.1:8092/healthz", + "http_status": 200, + "body_status": "ok", + "version": "0.1.0" + }, + "local_comfyui_gx10_health_before_refresh": { + "route_identity": "local-comfyui-gx10", + "host": "gx10-f38f", + "url_ref": "http://100.90.100.10:8188", + "system_stats_url_ref": "http://100.90.100.10:8188/system_stats", + "http_status": 0, + "reachability_method": "curl_get_system_stats_and_root", + "failure_class": "connection_refused", + "tailscale_ping": { + "packet_loss_percent": 0, + "rtt_avg_ms": 1.441 + }, + "ssh_port_open": true + }, + "local_comfyui_gx10_refresh_attempt": { + "route_identity": "local-comfyui-gx10", + "ssh_target": "svrnty@100.90.100.10", + "host": "gx10-f38f", + "existing_listener_ports": [ + 8003 + ], + "pre_existing_comfyui_process": false, + "checkout_ref": "/home/svrnty/comfyui", + "command_shape": "cd ~/comfyui && nohup python3 main.py --listen 0.0.0.0 --port 8188 --disable-auto-launch > log 2>&1 &", + "started_pid_ref": "291869", + "log_ref": "gx10-f38f:/home/svrnty/comfyui/comfyui-bte-work-038-20260620T155144Z.log", + "process_stayed_running": false, + "failure_class": "cuda_initialization_failed", + "failure_summary": "ComfyUI exited before binding port 8188 because torch CUDA initialization failed and CUDA was unavailable to the process.", + "raw_log_stored_in_proof": false + }, + "local_comfyui_gx10_health_after_refresh": { + "route_identity": "local-comfyui-gx10", + "host": "gx10-f38f", + "url_ref": "http://100.90.100.10:8188", + "system_stats_url_ref": "http://100.90.100.10:8188/system_stats", + "http_status": 0, + "reachability_method": "bounded_30_poll_curl_get_system_stats", + "failure_class": "connection_refused", + "required_for_bte_third_retry": 200 + }, + "bte_retry_gate": { + "bte_third_retry_attempted": false, + "reason": "local_comfyui_gx10_health_after_refresh.http_status was not 200", + "prior_retry_asset_ref": "5c1eedc5-e281-4c8c-82d3-bc4d764d2111", + "prior_retry_saga_ref": "ee27c2b3-a415-47a8-8d75-7bd834f6b99e", + "approval_expired_after": "first_failed_or_blocked_provider_live_effect" + }, + "source_refs": { + "bte_provider_route_handoff": "../bte/docs/BTE-WORK-038-PROVIDER-ROUTE-HANDOFF.json", + "bte_runtime_proof": "../bte/docs/goal-runs/bte-sovereign-creative-supercomputer-product-ready/proof/bte-work-038-runtime-rest-provider-proof.json", + "svrnty_vision_agent_contract": "AGENTS.md", + "network_skill_reference": "/home/svrnty/.codex/skills/network/SKILL.md" + }, + "tool_effects": { + "mutated_svrnty_vision_files": true, + "network": true, + "provider_gateway_health_checked": true, + "remote_comfyui_start_attempted": true, + "remote_comfyui_left_running": false, + "bte_rest_call": false, + "provider_call": false, + "local_generation_call": false, + "mcp_registration": false, + "profile_exposure_change": false, + "core_mutation": false, + "bte_repo_mutation_from_this_packet": false, + "archive_delete_execution": false, + "raw_payload_storage": false, + "product_ready_claim": false, + "release_claim": false, + "production_readiness_claim": false + }, + "validation": { + "validator": "tools/validate_svrnty_vision_bte_work_038_comfyui_gx10_restore.py", + "route_validator": "tools/validate_svrnty_vision_child.py" + } +} diff --git a/docs/goal-runs/bte-work-038-comfyui-gx10-restore-proof/svrnty-vision-work-009-comfyui-gx10-restore-proof.md b/docs/goal-runs/bte-work-038-comfyui-gx10-restore-proof/svrnty-vision-work-009-comfyui-gx10-restore-proof.md new file mode 100644 index 0000000..5093986 --- /dev/null +++ b/docs/goal-runs/bte-work-038-comfyui-gx10-restore-proof/svrnty-vision-work-009-comfyui-gx10-restore-proof.md @@ -0,0 +1,46 @@ +--- +type: provider-route-proof +id: SVRNTY-VISION-WORK-009 +status: blocked-on-gx10-cuda-initialization +machine_contract: svrnty-vision-work-009-comfyui-gx10-restore-proof.json +--- + +# Svrnty Vision BTE-WORK-038 ComfyUI/GX10 Restore Proof + +This packet records the provider-route side of the approved `BTE-WORK-038` +ComfyUI/GX10 restore proof. It is compact proof metadata only. + +## Result + +- `svrnty-vision` health was proven from the host path: HTTP 200, status `ok`. +- `svrnty-vision` health was proven from the BTE runtime namespace path: + HTTP 200, status `ok`. +- `gx10-f38f` was reachable over Tailscale and SSH. +- `http://100.90.100.10:8188/system_stats` and + `http://100.90.100.10:8188/` were connection-refused before refresh. +- A bounded ComfyUI start was attempted from `/home/svrnty/comfyui`. +- ComfyUI exited before binding port 8188 because CUDA initialization failed. +- A bounded 30-poll health loop still found port 8188 connection-refused. +- The BTE third retry was not attempted because ComfyUI/GX10 health was not + HTTP 200. + +## Blocker + +The blocker is `gx10-f38f` CUDA availability for the ComfyUI process, not BTE +render parameters and not the `svrnty-vision` gateway. The compact error class +is `cuda_initialization_failed`. + +## Payload Posture + +No secrets were read. +No raw prompt was stored. +No raw provider payload was stored. +No generated binary was stored in proof. +No BTE REST creative call was made. +No provider generation call was made. +No Product Ready claim was made. + +## Validation + +- `python3 tools/validate_svrnty_vision_bte_work_038_comfyui_gx10_restore.py` +- `python3 tools/validate_svrnty_vision_child.py` diff --git a/tools/validate_svrnty_vision_bte_work_038_comfyui_gx10_restore.py b/tools/validate_svrnty_vision_bte_work_038_comfyui_gx10_restore.py new file mode 100755 index 0000000..d43ebc3 --- /dev/null +++ b/tools/validate_svrnty_vision_bte_work_038_comfyui_gx10_restore.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python3 +"""Validate the Svrnty Vision BTE-WORK-038 ComfyUI/GX10 restore proof.""" + +from __future__ import annotations + +import json +from pathlib import Path +from typing import Any + + +ROOT = Path(__file__).resolve().parents[1] +PROOF = ( + ROOT + / "docs" + / "goal-runs" + / "bte-work-038-comfyui-gx10-restore-proof" + / "svrnty-vision-work-009-comfyui-gx10-restore-proof.json" +) +REPORT = PROOF.with_suffix(".md") +APPROVAL_REF = "APPROVED: BTE-WORK-038 ComfyUI/GX10 restore proof and single third retry" + + +def require(condition: bool, errors: list[str], code: str) -> None: + if not condition: + errors.append(code) + + +def load_json(path: Path, errors: list[str]) -> dict[str, Any]: + if not path.exists(): + errors.append(f"missing:{path.relative_to(ROOT)}") + return {} + try: + payload = json.loads(path.read_text(encoding="utf-8")) + except json.JSONDecodeError as exc: + errors.append(f"{path.name}:invalid_json:{exc.lineno}:{exc.colno}") + return {} + if not isinstance(payload, dict): + errors.append(f"{path.name}:not_object") + return {} + return payload + + +def main() -> int: + errors: list[str] = [] + proof = load_json(PROOF, errors) + report = REPORT.read_text(encoding="utf-8") if REPORT.exists() else "" + + require(REPORT.exists(), errors, "report:missing") + require(proof.get("schema") == "svrnty-vision.bte-work-038-comfyui-gx10-restore-proof.v1", errors, "schema") + require(proof.get("work_item_id") == "SVRNTY-VISION-WORK-009", errors, "work_item_id") + require(proof.get("route") == "svrnty-vision", errors, "route") + require(proof.get("status") == "blocked_on_gx10_cuda_initialization_no_bte_retry", errors, "status") + require(proof.get("approval_ref") == APPROVAL_REF, errors, "approval_ref") + require(proof.get("product_ready_claim") is False, errors, "product_ready_claim") + + gateway = proof.get("provider_gateway_health", {}) + require(gateway.get("http_status") == 200, errors, "gateway:http_status") + require(gateway.get("body_status") == "ok", errors, "gateway:body_status") + bte_namespace = proof.get("provider_gateway_health_from_bte_runtime_namespace", {}) + require(bte_namespace.get("http_status") == 200, errors, "bte_namespace:http_status") + require(bte_namespace.get("body_status") == "ok", errors, "bte_namespace:body_status") + + before = proof.get("local_comfyui_gx10_health_before_refresh", {}) + require(before.get("http_status") == 0, errors, "before:http_status") + require(before.get("failure_class") == "connection_refused", errors, "before:failure_class") + require(before.get("ssh_port_open") is True, errors, "before:ssh") + + refresh = proof.get("local_comfyui_gx10_refresh_attempt", {}) + require(refresh.get("host") == "gx10-f38f", errors, "refresh:host") + require(refresh.get("checkout_ref") == "/home/svrnty/comfyui", errors, "refresh:checkout") + require(refresh.get("process_stayed_running") is False, errors, "refresh:process") + require(refresh.get("failure_class") == "cuda_initialization_failed", errors, "refresh:failure_class") + require(refresh.get("raw_log_stored_in_proof") is False, errors, "refresh:raw_log") + + after = proof.get("local_comfyui_gx10_health_after_refresh", {}) + require(after.get("http_status") == 0, errors, "after:http_status") + require(after.get("failure_class") == "connection_refused", errors, "after:failure_class") + require(after.get("required_for_bte_third_retry") == 200, errors, "after:required") + + retry = proof.get("bte_retry_gate", {}) + require(retry.get("bte_third_retry_attempted") is False, errors, "retry:attempted") + require(retry.get("prior_retry_asset_ref") == "5c1eedc5-e281-4c8c-82d3-bc4d764d2111", errors, "retry:asset") + require(retry.get("approval_expired_after") == "first_failed_or_blocked_provider_live_effect", errors, "retry:expiry") + + effects = proof.get("tool_effects", {}) + require(effects.get("remote_comfyui_start_attempted") is True, errors, "effects:start_attempted") + require(effects.get("remote_comfyui_left_running") is False, errors, "effects:left_running") + for key in ( + "bte_rest_call", + "provider_call", + "local_generation_call", + "mcp_registration", + "profile_exposure_change", + "core_mutation", + "archive_delete_execution", + "raw_payload_storage", + "product_ready_claim", + "release_claim", + "production_readiness_claim", + ): + require(effects.get(key) is False, errors, f"effects:{key}") + + for snippet in ( + "ComfyUI/GX10 Restore Proof", + "HTTP 200, status `ok`", + "connection-refused", + "cuda_initialization_failed", + "BTE third retry was not attempted", + "No raw provider payload was stored.", + "No Product Ready claim was made.", + ): + require(snippet in report, errors, f"report:missing:{snippet}") + + result = { + "ok": not errors, + "validator": "svrnty-vision-bte-work-038-comfyui-gx10-restore-v1", + "checked": [str(PROOF.relative_to(ROOT)), str(REPORT.relative_to(ROOT))], + "errors": errors, + "warnings": [], + } + print(json.dumps(result, indent=2, sort_keys=True)) + return 0 if result["ok"] else 1 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tools/validate_svrnty_vision_child.py b/tools/validate_svrnty_vision_child.py index 455892f..6ae0dfe 100755 --- a/tools/validate_svrnty_vision_child.py +++ b/tools/validate_svrnty_vision_child.py @@ -41,6 +41,12 @@ VALIDATORS = [ "tools/validate_vision_host_adapter_candidates.py", "tools/validate_vision_package_docker_context.py", ] +OPTIONAL_PROOF_VALIDATORS = [ + ( + "docs/goal-runs/bte-work-038-comfyui-gx10-restore-proof/svrnty-vision-work-009-comfyui-gx10-restore-proof.json", + "tools/validate_svrnty_vision_bte_work_038_comfyui_gx10_restore.py", + ), +] def main() -> int: @@ -121,6 +127,30 @@ def main() -> int: validator_outputs[rel] = completed.stdout.strip() if completed.returncode != 0: errors.append(f"validator_failed:{rel}:{completed.stderr.strip()}") + for proof_rel, validator_rel in OPTIONAL_PROOF_VALIDATORS: + proof_path = ROOT / proof_rel + validator_path = ROOT / validator_rel + if not proof_path.exists() and not validator_path.exists(): + continue + if not proof_path.exists(): + errors.append(f"missing:{proof_rel}") + continue + if not validator_path.exists(): + errors.append(f"missing:{validator_rel}") + continue + env = os.environ.copy() + env["PYTHONDONTWRITEBYTECODE"] = "1" + completed = subprocess.run( + [sys.executable, str(validator_path)], + cwd=ROOT, + env=env, + text=True, + capture_output=True, + check=False, + ) + validator_outputs[validator_rel] = completed.stdout.strip() + if completed.returncode != 0: + errors.append(f"validator_failed:{validator_rel}:{completed.stderr.strip()}") for rel in GENERATED_ARTIFACT_DIRS: if (ROOT / rel).exists(): errors.append(f"generated_artifact_residue:{rel}")