fix(protocol): drop PROTOCOL_VERSION lockstep — D-192 (#875)

Removes the version-mismatch guard from Protocol.decode_snapshot() and the
PROTOCOL_VERSION constant from the client (server side done in #874).

Core changes:
- protocol.gd: remove const PROTOCOL_VERSION, remove version mismatch guard,
  remove "version" from return dict, add gauntlet_mode/room_id decode
- sim_bridge.gd: remove handshake version check; relax handshake guard to
  require only a valid Dictionary (server no longer sends protocol_version);
  emit handshake_complete(0) for API compat
- loading_screen.gd: drop "· protocol N" suffix from version label
- test_harness.gd: replace Protocol.PROTOCOL_VERSION with literal 23

Test updates (21 files): replace "version": Protocol.PROTOCOL_VERSION with
"version": 23 in all snapshot bytes dicts; remove snapshot.version == N
assertions; remove version-rejection tests (test_rejects_version_6,
test_decode_snapshot_rejects_missing_version, test_decode_snapshot_rejects_old_version,
test_protocol_rejects_version_mismatch, test_sim_bridge_test_snapshot_uses_current_protocol_version).

Also includes: #872 bookmark_catalog carry-forward regression test, and
#873 merge-path flow tests (test_merge_path_flows_sprint37.gd).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-21 17:29:49 +02:00
co-authored by Claude Sonnet 4.6
parent 708ab25614
commit d72fcc7847
21 changed files with 490 additions and 193 deletions
+11 -12
View File
@@ -12,7 +12,7 @@ extends GdUnitTestSuite
func test_decode_pending_recognitions_basic() -> void:
var raw := {
"tick": 1,
"version": Protocol.PROTOCOL_VERSION,
"version": 23,
"entities": [],
"pending_recognitions": [
{"entity_id": 100, "x": 13.5, "y": 12.5, "z": 0, "remaining_ticks": 4, "total_delay_ticks": 6},
@@ -33,7 +33,7 @@ func test_decode_pending_recognitions_basic() -> void:
func test_decode_pending_recognitions_empty() -> void:
var raw := {
"tick": 1,
"version": Protocol.PROTOCOL_VERSION,
"version": 23,
"entities": [],
"pending_recognitions": [],
}
@@ -45,7 +45,7 @@ func test_decode_pending_recognitions_empty() -> void:
func test_decode_pending_recognitions_missing_defaults_empty() -> void:
var raw := {
"tick": 1,
"version": Protocol.PROTOCOL_VERSION,
"version": 23,
"entities": [],
}
var encoded = Messagepack.encode(raw)
@@ -56,7 +56,7 @@ func test_decode_pending_recognitions_missing_defaults_empty() -> void:
func test_decode_pending_recognitions_skips_malformed() -> void:
var raw := {
"tick": 1,
"version": Protocol.PROTOCOL_VERSION,
"version": 23,
"entities": [],
"pending_recognitions": [
{"entity_id": 100, "x": 13.5, "y": 12.5, "z": 0, "remaining_ticks": 4, "total_delay_ticks": 6},
@@ -76,7 +76,7 @@ func test_decode_pending_recognitions_defaults() -> void:
# remaining_ticks and total_delay_ticks default to 0 and 1
var raw := {
"tick": 1,
"version": Protocol.PROTOCOL_VERSION,
"version": 23,
"entities": [],
"pending_recognitions": [
{"entity_id": 100, "x": 5.0, "y": 5.0},
@@ -94,7 +94,7 @@ func test_decode_pending_recognitions_defaults() -> void:
func test_decode_current_dialogue() -> void:
var raw := {
"tick": 1,
"version": Protocol.PROTOCOL_VERSION,
"version": 23,
"entities": [],
"current_dialogue": {
"npc_name": "Kael",
@@ -123,7 +123,7 @@ func test_decode_current_dialogue() -> void:
func test_decode_current_dialogue_missing_is_null() -> void:
var raw := {
"tick": 1,
"version": Protocol.PROTOCOL_VERSION,
"version": 23,
"entities": [],
}
var encoded = Messagepack.encode(raw)
@@ -136,7 +136,7 @@ func test_decode_current_dialogue_options_default_fields() -> void:
# response_id and priority default when absent
var raw := {
"tick": 1,
"version": Protocol.PROTOCOL_VERSION,
"version": 23,
"entities": [],
"current_dialogue": {
"speech": "Just speech.",
@@ -158,7 +158,7 @@ func test_decode_current_dialogue_options_default_fields() -> void:
func test_decode_current_dialogue_confrontation_option() -> void:
var raw := {
"tick": 1,
"version": Protocol.PROTOCOL_VERSION,
"version": 23,
"entities": [],
"current_dialogue": {
"npc_name": "Sera",
@@ -179,7 +179,7 @@ func test_decode_current_dialogue_confrontation_option() -> void:
func test_decode_current_dialogue_skips_malformed_options() -> void:
var raw := {
"tick": 1,
"version": Protocol.PROTOCOL_VERSION,
"version": 23,
"entities": [],
"current_dialogue": {
"npc_name": "Sera",
@@ -332,7 +332,7 @@ func test_insert_color_constants_exist() -> void:
func test_full_v7_snapshot_decode() -> void:
var raw := {
"tick": 200,
"version": Protocol.PROTOCOL_VERSION,
"version": 23,
"game_time": {"day": 2, "time_of_day": 1000, "day_phase": "Evening", "tick_rate": "Full"},
"player_facing": "West",
"player_stance": "Careful",
@@ -362,7 +362,6 @@ func test_full_v7_snapshot_decode() -> void:
assert_that(snapshot).is_not_null()
assert_that(snapshot.tick).is_equal(200)
assert_that(snapshot.version).is_equal(Protocol.PROTOCOL_VERSION)
assert_that(snapshot.player_facing).is_equal("West")
assert_that(snapshot.player_stance).is_equal("Careful")
assert_that(snapshot.player_inventory.size()).is_equal(1)