{"record":{"id":"47b19689b7c9ca9b","repo":"Pumpkin-MC/Pumpkin","slug":"unsupported-forwarding-version-0-expected-1","errorCode":null,"errorMessage":"Unsupported forwarding version {0}. Expected {1}","messagePattern":"Unsupported forwarding version (.+?)\\. Expected (.+?)","errorType":"error_code","errorClass":"VineError","httpStatus":null,"severity":"error","filePath":"crates/pumpkin/src/net/proxy/vine.rs","lineNumber":38,"sourceCode":"pub const VINE_PLAYER_INFO_CHANNEL: &str = \"vine:player_info\";\npub const VINE_FORWARDING_VERSION: i32 = 1;\npub const MAX_TIMESTAMP_DRIFT_SECS: i64 = 30;\n\n#[derive(Error, Debug)]\npub enum VineError {\n    #[error(\"No response data received\")]\n    NoData,\n    #[error(\"Vine response data too short (minimum 89 bytes)\")]\n    DataTooShort,\n    #[error(\"No public key or secret configured for Vine proxy\")]\n    MissingKeyConfig,\n    #[error(\"Invalid Ed25519 public key\")]\n    InvalidPublicKey,\n    #[error(\"Failed to verify Ed25519 signature\")]\n    InvalidSignature,\n    #[error(\"Failed to read forward version\")]\n    FailedReadForwardVersion,\n    #[error(\"Unsupported forwarding version {0}. Expected {1}\")]\n    UnsupportedForwardVersion(i32, i32),\n    #[error(\"Vine timestamp expired or desynchronized: skew of {0}s exceeds limit of {1}s\")]\n    TimestampExpired(i64, i64),\n    #[error(\"Vine challenge nonce mismatch\")]\n    ChallengeMismatch,\n    #[error(\"Missing expected challenge from pending connection\")]\n    MissingChallenge,\n    #[error(\"Failed to read address\")]\n    FailedReadAddress,\n    #[error(\"Failed to parse address\")]\n    FailedParseAddress,\n    #[error(\"Failed to read game profile name\")]\n    FailedReadProfileName,\n    #[error(\"Failed to read game profile UUID\")]\n    FailedReadProfileUUID,\n    #[error(\"Failed to read game profile properties\")]\n    FailedReadProfileProperties,\n}","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/Pumpkin-MC/Pumpkin/blob/8d4639e25a57c15e47448ec327c780d41bbf2356/crates/pumpkin/src/net/proxy/vine.rs#L20-L56","documentation":"VineError::UnsupportedForwardVersion is raised when the decoded forwarding version in the Vine payload differs from VINE_FORWARDING_VERSION (1) supported by this server (vine.rs:173-178). The signature was valid, so the proxy is authentic but speaks a different protocol revision. The error carries the received and expected versions for diagnosis.","triggerScenarios":"receive_vine_plugin_response reads version != 1 from the payload: the proxy was built for a newer/older Vine forwarding spec, or a custom implementation hardcodes a different version constant.","commonSituations":"The proxy was upgraded to a newer Vine protocol before the server, or vice versa; a forked proxy implementation uses its own version number; experimental/nightly builds of either side diverged.","solutions":["Upgrade the server (or proxy) so both sides implement the same Vine forwarding version (currently 1)","Pin both proxy and server to compatible release versions","If a fork sends a different version, align it with the standard VINE_FORWARDING_VERSION = 1"],"exampleFix":"// before (proxy side)\nconst FORWARDING_VERSION: i32 = 2; // newer than server supports\n// after\nconst FORWARDING_VERSION: i32 = 1; // matches server's VINE_FORWARDING_VERSION","handlingStrategy":"try-catch","validationCode":"fn check_version_compatibility(payload_version: i32, supported: i32) -> bool {\n    payload_version == supported // Vine has no backward compatibility window; exact match required\n}","typeGuard":null,"tryCatchPattern":"match receive_vine_plugin_response(port, &config, response, challenge) {\n    Err(VineError::UnsupportedForwardVersion(got, expected)) => {\n        tracing::error!(\"Proxy speaks Vine forwarding v{}, server needs v{} — upgrade the older side\", got, expected);\n        disconnect(DisconnectReason::UnsupportedForwardingVersion);\n    }\n    result => result?,\n}","preventionTips":["Pin proxy and server versions together and upgrade both in lockstep","Subscribe to Vine protocol changes and check VINE_FORWARDING_VERSION before upgrading one side alone","Record both sides' versions in monitoring so mismatches are visible immediately","Reject mismatched versions early with a clear player-facing message"],"tags":["protocol-version","compatibility","minecraft","proxy-forwarding"],"backgroundTag":"invalid-enum-value","analyzedSha":"8d4639e25a57c15e47448ec327c780d41bbf2356","analyzedAt":"2026-09-09T15:32:22.916Z","contentChangedAt":"2026-09-09T15:32:22.916Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}