diff --git a/docs/goal-runs/bte-product-ready-local-vlm-provider-refresh/svrnty-vision-work-008-local-vlm-provider-proof.json b/docs/goal-runs/bte-product-ready-local-vlm-provider-refresh/svrnty-vision-work-008-local-vlm-provider-proof.json new file mode 100644 index 0000000..a7e7d4b --- /dev/null +++ b/docs/goal-runs/bte-product-ready-local-vlm-provider-refresh/svrnty-vision-work-008-local-vlm-provider-proof.json @@ -0,0 +1,69 @@ +{ + "schema": "svrnty-vision.bte-product-ready-local-vlm-provider-proof.v1", + "timestamp": "2026-06-19T20:16:43Z", + "work_item_id": "SVRNTY-VISION-WORK-008", + "route": "svrnty-vision", + "goal": "Prove the configured local VLM provider is reachable for the BTE Product Ready provider-call chain without claiming readiness.", + "approval": { + "name": "BTE Product Ready local VLM provider proof refresh", + "expires_after_report": true + }, + "provider_route_resolution": { + "registered_ollama_provider_route_found": false, + "adapter_owner_route_used_for_proof": "svrnty-vision", + "reason": "svrnty-vision owns the configured VLM adapter endpoint used by BTE through /vlm/analyze" + }, + "configured_provider": { + "kind": "local_ollama_openai_compatible", + "base_url": "http://100.88.167.87:11434", + "expected_model": "qwen3-vl:32b" + }, + "health_proof": { + "ollama_tags": { + "url": "http://100.88.167.87:11434/api/tags", + "http_status": 200, + "duration_seconds": 0.004933, + "expected_model_present": true + }, + "openai_models": { + "url": "http://100.88.167.87:11434/v1/models", + "http_status": 200, + "duration_seconds": 0.001439, + "expected_model_present": true + } + }, + "gateway_recheck": { + "host_healthz": { + "url": "http://localhost:8092/healthz", + "http_status": 200, + "duration_seconds": 0.001575, + "body_status": "ok", + "version": "0.1.0" + }, + "bte_runtime_namespace_healthz": { + "url": "http://localhost:8092/healthz", + "http_status": 200, + "duration_seconds": 0.000823, + "body_status": "ok", + "version": "0.1.0" + } + }, + "downstream_bte_result_ref": "../bte/docs/goal-runs/bte-product-ready-local-vlm-provider-refresh/bte-work-020-successful-provider-call.json", + "route_validator": { + "command": "python3 tools/validate_svrnty_vision_child.py", + "status": "pass" + }, + "tool_effects": { + "provider_health_probe_performed": true, + "provider_start_or_refresh_performed": false, + "direct_model_inference_performed": false, + "gateway_runtime_started": false, + "bte_provider_call_performed_by_bte_route": true, + "profile_exposure_changed": false, + "mcp_registered": false, + "archive_delete_performed": false, + "raw_payload_storage_created_by_this_route": false, + "product_ready_claim_made": false + }, + "status": "local_vlm_provider_health_proven" +} diff --git a/docs/goal-runs/bte-product-ready-local-vlm-provider-refresh/svrnty-vision-work-008-local-vlm-provider-proof.md b/docs/goal-runs/bte-product-ready-local-vlm-provider-refresh/svrnty-vision-work-008-local-vlm-provider-proof.md new file mode 100644 index 0000000..3a747c7 --- /dev/null +++ b/docs/goal-runs/bte-product-ready-local-vlm-provider-refresh/svrnty-vision-work-008-local-vlm-provider-proof.md @@ -0,0 +1,25 @@ +# SVRNTY-VISION-WORK-008 Local VLM Provider Proof + +Status: local VLM provider health proven. + +Approval: `BTE Product Ready local VLM provider proof refresh`. + +Proof: + +- No separate registered Ollama provider route was found; `svrnty-vision` owns the adapter endpoint used by BTE through `/vlm/analyze`. +- `GET http://100.88.167.87:11434/api/tags`: HTTP `200`; `qwen3-vl:32b` present. +- `GET http://100.88.167.87:11434/v1/models`: HTTP `200`; `qwen3-vl:32b` present. +- `GET http://localhost:8092/healthz`: HTTP `200`, status `ok`, version `0.1.0`. +- From the BTE runtime namespace, `GET http://localhost:8092/healthz`: HTTP `200`, status `ok`, version `0.1.0`. + +Boundary: + +- No provider start or refresh was needed. +- No direct model inference was performed from this route. +- No credentials, secrets, raw model payloads, or image payloads were recorded. +- No Profile Exposure, MCP registration, archive/delete, raw payload storage, release claim, or Product Ready claim happened. + +Validators: + +- `python3 tools/validate_svrnty_vision_child.py`: PASS. +- `python3 tools/validate_svrnty_vision_bte_local_vlm_provider_proof.py`: PASS. diff --git a/tools/validate_svrnty_vision_bte_local_vlm_provider_proof.py b/tools/validate_svrnty_vision_bte_local_vlm_provider_proof.py new file mode 100644 index 0000000..510ad47 --- /dev/null +++ b/tools/validate_svrnty_vision_bte_local_vlm_provider_proof.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +"""Validate the Svrnty Vision local VLM provider proof packet.""" + +from __future__ import annotations + +import json +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +PROOF = ROOT / "docs/goal-runs/bte-product-ready-local-vlm-provider-refresh/svrnty-vision-work-008-local-vlm-provider-proof.json" +MD = ROOT / "docs/goal-runs/bte-product-ready-local-vlm-provider-refresh/svrnty-vision-work-008-local-vlm-provider-proof.md" + + +def require(condition: bool, errors: list[str], message: str) -> None: + if not condition: + errors.append(message) + + +def main() -> int: + errors: list[str] = [] + proof = json.loads(PROOF.read_text(encoding="utf-8")) + md = MD.read_text(encoding="utf-8") + + require(proof.get("schema") == "svrnty-vision.bte-product-ready-local-vlm-provider-proof.v1", errors, "schema") + require(proof.get("work_item_id") == "SVRNTY-VISION-WORK-008", errors, "work_item_id") + require(proof.get("route") == "svrnty-vision", errors, "route") + + route = proof.get("provider_route_resolution", {}) + require(route.get("registered_ollama_provider_route_found") is False, errors, "registered_route") + require(route.get("adapter_owner_route_used_for_proof") == "svrnty-vision", errors, "adapter_owner") + + provider = proof.get("configured_provider", {}) + require(provider.get("expected_model") == "qwen3-vl:32b", errors, "expected_model") + + health = proof.get("health_proof", {}) + for key in ("ollama_tags", "openai_models"): + probe = health.get(key, {}) + require(probe.get("http_status") == 200, errors, f"{key}:http_status") + require(probe.get("expected_model_present") is True, errors, f"{key}:model_present") + + gateway = proof.get("gateway_recheck", {}) + for key in ("host_healthz", "bte_runtime_namespace_healthz"): + probe = gateway.get(key, {}) + require(probe.get("http_status") == 200 and probe.get("body_status") == "ok", errors, f"{key}:healthz") + + effects = proof.get("tool_effects", {}) + require(effects.get("provider_health_probe_performed") is True, errors, "provider_health_probe") + require(effects.get("bte_provider_call_performed_by_bte_route") is True, errors, "bte_provider_call") + for key in ( + "provider_start_or_refresh_performed", + "direct_model_inference_performed", + "gateway_runtime_started", + "profile_exposure_changed", + "mcp_registered", + "archive_delete_performed", + "raw_payload_storage_created_by_this_route", + "product_ready_claim_made", + ): + require(effects.get(key) is False, errors, f"forbidden_effect:{key}") + + for snippet in ( + "local VLM provider health proven", + "qwen3-vl:32b", + "No direct model inference", + "No credentials", + "Product Ready claim", + ): + require(snippet in md, errors, f"md_missing:{snippet}") + + result = { + "ok": not errors, + "validator": "svrnty-vision-bte-local-vlm-provider-proof-v1", + "checked": [str(PROOF.relative_to(ROOT)), str(MD.relative_to(ROOT))], + "errors": errors, + } + print(json.dumps(result, indent=2)) + return 0 if not errors else 1 + + +if __name__ == "__main__": + raise SystemExit(main())