{ "name": "session.hello \u2014 a client built against protocol 2.x is refused", "description": "Major mismatch fails loudly at connect rather than subtly at the tenth field. The GUI renders this as 'Velox needs updating'.", "request": { "jsonrpc": "2.0", "id": 100, "method": "session.hello", "params": { "clientType": "gui", "clientName": "velox-gui 9.9.9", "protocolVersion": "2.0.0" } }, "response": { "jsonrpc": "2.0", "id": 100, "error": { "code": -32001, "message": "protocol major version mismatch: daemon speaks 1.x, client speaks 2.x", "data": { "expected": "$any", "actual": "2.0.0" } } }, "assertions": [ "the connection is closed after this reply; no method is served on a mismatched major", "a differing minor or patch is accepted, never refused", "the message is safe to show a user verbatim", "the version check is transport-independent; this is replayed on the Unix socket so it is not masked by -32002", "data.expected is the daemon's own current protocol version string (kProtocolVersion), not a bare major and not pinnable in a golden file -- the conformance compare on error payloads is on `code` only, structural elsewhere, so echoing the live version is fine" ], "transport": "uds", "closesConnection": true }