Quick answer: Godot 4 RPC method called on non-host peers with default arguments instead of the sent values? Method signature mismatch between hosts - export configs must match exactly across peers.
Host sends damage_dealt.rpc(15, "crit"). Clients receive damage_dealt(0, ""). Same script on both sides.
Hash the method signatures
Add a startup check: each peer hashes the script's RPC method signatures and compares with the host. Mismatch means a stale client; disconnect early instead of silently corrupting state.
Check the export bitmask
RPC method config (authority/any-peer/sync) must match byte-for-byte. A teammate flipped call_local on one side; the codec rejects mismatched configs but only warns.
Enable RPC logging
multiplayer.set_rpc_log_enabled(true) shows you exactly what arrived. Wrong-arg cases appear as zero-arg calls with a warning that's easy to miss.
“RPC contracts are duck-typed in script - which means they're contracted in vibes.”
Generate a single RPCManager.gd that defines every method centrally. Both peers import it; signature drift becomes impossible.