feat(simulation): sprint 12 server — tier system, sound events, KG access, line previewer

Implements 4 completed tickets + partial progress on 2 more:

- #93 Tier marker components (ActiveSim, BackgroundSim, StateSaved + TierPlugin)
- #138 Information tag schema (ObserverAccess enum in knowledge/types.rs)
- #124 Sound event system (SoundEventEmitter, SoundEventQueue, bridge wiring)
- #193 Line previewer CLI (line_preview binary with filter/explain/sequence modes)
- #94 Active tier simulation (in progress — With<ActiveSim> filters)
- #139 Component-level access control (in progress — filter_by_access)

Updates snapshot fixtures and test golden files for new sound_events field.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-19 13:33:23 +01:00
co-authored by Claude Opus 4.6
parent f7e5b7eb63
commit 066f8031fd
30 changed files with 1646 additions and 14 deletions
+1
View File
@@ -61,6 +61,7 @@ fn snapshot_roundtrip_over_unix_socket() {
dialogue_response: None,
blocked_entities: vec![],
scan_events: vec![],
sound_events: vec![],
};
bridge
+1
View File
@@ -47,6 +47,7 @@ fn snapshot_roundtrip_over_tcp() {
dialogue_response: None,
blocked_entities: vec![],
scan_events: vec![],
sound_events: vec![],
};
bridge
+2
View File
@@ -37,6 +37,7 @@ fn fixture_snapshot(tick: u64, entities: Vec<VisibleEntity>) -> ObserverSnapshot
dialogue_response: None,
blocked_entities: vec![],
scan_events: vec![],
sound_events: vec![],
}
}
@@ -208,6 +209,7 @@ fn generate_msgpack_fixtures() {
dialogue_response: None,
blocked_entities: vec![],
scan_events: vec![],
sound_events: vec![],
};
write_fixture(
"snapshot_v2_full",
+3 -2
View File
@@ -46,7 +46,7 @@
"pending_recognitions": [
{
"entity_id": 1,
"remaining_ticks": 1,
"remaining_ticks": 2,
"total_delay_ticks": 6,
"x": 16.5,
"y": 13.5,
@@ -65,8 +65,9 @@
"player_inventory": [],
"player_stance": "Sprint",
"scan_events": [],
"sound_events": [],
"tick": 8,
"version": 9,
"version": 10,
"visible_tiles": [
{
"tile_kind": "Wall",
+4 -1
View File
@@ -26,6 +26,7 @@ fn test_snapshot(tick: u64, entities: Vec<VisibleEntity>) -> ObserverSnapshot {
dialogue_response: None,
blocked_entities: vec![],
scan_events: vec![],
sound_events: vec![],
}
}
@@ -254,6 +255,7 @@ fn snapshot_v2_fields_roundtrip() {
dialogue_response: None,
blocked_entities: vec![],
scan_events: vec![],
sound_events: vec![],
};
let bytes = rmp_serde::to_vec_named(&snapshot).expect("serialize");
@@ -308,7 +310,7 @@ fn protocol_version_constant_matches_snapshot() {
let snapshot = test_snapshot(0, vec![]);
assert_eq!(snapshot.version, PROTOCOL_VERSION);
assert_eq!(
PROTOCOL_VERSION, 9,
PROTOCOL_VERSION, 10,
"bump this assertion when protocol version changes"
);
}
@@ -348,6 +350,7 @@ fn all_facing_direction_variants_roundtrip() {
dialogue_response: None,
blocked_entities: vec![],
scan_events: vec![],
sound_events: vec![],
};
let bytes = rmp_serde::to_vec_named(&snapshot).expect("serialize");
let decoded: ObserverSnapshot = rmp_serde::from_slice(&bytes).expect("deserialize");