feat(ticket-022): add vision modality and nexu/nlp2cmd/vql vision routes - #25
Conversation
Vision routes stay on OpenAI-compatible OpenRouter models, never Cursor SDK. complete() fails closed on image parts for text routes and on missing or file/http image URLs for vision routes.
Screenshot catalog refinement is a vision consumer; keep generate as text.
The Validator rejected pytest.skip as an unsafe validation shortcut. Assert the explicit OpenRouter vision configuration (glm-4.5v) for vision-modality routes instead of skipping the direct-Z.AI assertion.
There was a problem hiding this comment.
Deterministic Validator approval for exact head b0a6954f64d1f98c17a5ea3c09c572e7dda3824e.
Ticket: ticket-022
Correlation ID: subllm-ticket-022-vision-routes-fix-20260829
Model: zai/glm-5.3
Reviewed diff chunks: 2
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 2 diff chunk(s). Chunk 1 of ticket-022 adds a vision route modality: catalogues glm-4.5v and marks gemini-3.6-flash vision-capable, registers vision routes restricted to OpenAI-compatible transports (no Cursor SDK), and fails closed in complete() on modality mismatches and non-https/non-data:image image URLs with a data-URL size cap. Docs, changelog, version bump, and ticket metadata are consistent with the code changes. | Chunk adds vision modality routing with fail-closed validation. Routes with modality='vision' are restricted to openai-compatible transports and vision-capable models via _candidate_fits_modality and validate_policy checks. Tests cover image part passthrough on vision routes, rejection of images on text routes, rejection of missing and file:// images, and policy validation rejecting cursor-sdk on vision routes. All CI checks pass.
Advisory findings: none
The LLM output above is advisory and was not used as the approval trust root.
Merge will be attempted after this approval when explicitly authorized.
Decision record (recomputable)
DECISION D-022-2457
TICKET ticket-022
HEAD_SHA b0a6954f64d1f98c17a5ea3c09c572e7dda3824e
CORRELATION_ID subllm-ticket-022-vision-routes-fix-20260829
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT author_login = "tom-sapletta-com"
INPUT observed_checks = ["CodeQL=PASS","test (3.12)=PASS","test (3.11)=PASS","test (3.13)=PASS","Analyze (python)=PASS","Analyze (actions)=PASS"]
INPUT required_checks = ["test (3.11)","test (3.12)","test (3.13)"]
INPUT required_checks_source = "protected registry (env/request)"
INPUT reviewer_login = "ifuri-validator-agent[bot]"
INPUT superseded_checks = []
VERDICT APPROVE AUTHORITY DETERMINISTIC
REJECTED REQUEST_CHANGES BECAUSE NO_UNSAFE_CHANGE_REASON_FOUND
ADVISORY llm_verdict = "APPROVE" MODEL "zai/glm-5.3"
ASSERT VERDICT_AUTHORITY != "ADVISORY"
Ticket: ticket-022
Correlation ID: ticket-022
Add a
visionroute modality so image+text completions do not land on text GLM 5.3 or Cursor SDK.z-ai/glm-4.5v; markgemini-3.6-flashas visionautogrammar-nexu/vision,autogrammar-nlp2cmd/vision,autogrammar-vql/visioncomplete()fails closed on image parts for text routes and on missing/file:/http:images for vision routes