fix(simulation): PR #176 review round — all 12 findings + 2 recommendations addressed
H1 demux: ShapeProbe defensive multi-shape rejection (union frames now Err, not first-match; +2 tests) and doc claim made honest. H2/T1 SystemIndex.reset_test_state() folded into SimBridge.reset_test_state() (load() inline per autoload rule) + has_pending_request() accessor. H3 no-op tests now assert the replay flag both directions. H4 retry test actually ingests a failure and asserts the retry semantic. H5 error fixture uses the normalized status string. H6 bridge_tcp e2e sends all five frame shapes over real TCP (star-map + city-names buffers asserted). H7 positive replay-on-CONNECTED test via the test_local_bridge test-mode-flip precedent (stub bridge captures + decodes the request bytes). H8/T2 stale PLACEHOLDER doc replaced with the confirmed contract. H9 is_capital doc matches the COALESCE reality. T-r1 demux ceiling written down (next shape = tagged envelope). T-r2 AtlasLayerResponse governance ceiling comment. Lead item: the four cargo-fmt-formatted files from the gate round are now committed (layer_proxy/plugin/bridge-mod/main). H10 note for the record: the 13 snapshot_*.msgpack fixtures in commit 845737617 were regenerated because they were stale against their own generator (pre-existing version-key removal) — verified harmless, no client reads that key.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -346,10 +346,14 @@ fn single_tick_drains_all_ready_inbound_frames() {
|
||||
let listener = TcpListener::bind("127.0.0.1:0").expect("failed to bind");
|
||||
let server_addr = listener.local_addr().expect("failed to get local address");
|
||||
|
||||
// Client: three frames back-to-back in one tick window — two input
|
||||
// batches plus one atlas request (the D-225 demux path). Returns the
|
||||
// stream so it stays open until assertions complete (no EOF race).
|
||||
// Client: five frames back-to-back in one tick window — two input
|
||||
// batches plus one of EACH request shape (atlas, star-map, city-names:
|
||||
// the full D-225/T-949 demux surface over the real framing/poll path —
|
||||
// PR #176 review H6). Returns the stream so it stays open until
|
||||
// assertions complete (no EOF race).
|
||||
let client_handle = thread::spawn(move || {
|
||||
use settled_reach_server::atlas::atlas_data_proxy::{CityNamesRequest, StarMapRequest};
|
||||
|
||||
let mut stream = TcpStream::connect(server_addr).expect("failed to connect");
|
||||
for tick in [20u64, 21] {
|
||||
let inputs = vec![PlayerInput {
|
||||
@@ -365,6 +369,15 @@ fn single_tick_drains_all_ready_inbound_frames() {
|
||||
};
|
||||
let payload = rmp_serde::to_vec_named(&req).expect("failed to serialize");
|
||||
write_framed(&mut stream, &payload).expect("write atlas frame");
|
||||
let sm = StarMapRequest { star_map: true };
|
||||
let payload = rmp_serde::to_vec_named(&sm).expect("failed to serialize star map");
|
||||
write_framed(&mut stream, &payload).expect("write star map frame");
|
||||
let cn = CityNamesRequest {
|
||||
city_names: true,
|
||||
body_id: "GJ1c".into(),
|
||||
};
|
||||
let payload = rmp_serde::to_vec_named(&cn).expect("failed to serialize city names");
|
||||
write_framed(&mut stream, &payload).expect("write city names frame");
|
||||
stream
|
||||
});
|
||||
|
||||
@@ -397,6 +410,18 @@ fn single_tick_drains_all_ready_inbound_frames() {
|
||||
1,
|
||||
"the atlas request must drain in the same tick"
|
||||
);
|
||||
assert_eq!(
|
||||
world.resource::<StarMapRequestBuffer>().0.len(),
|
||||
1,
|
||||
"the star-map request must drain in the same tick (H6: real wire path)"
|
||||
);
|
||||
let city_names = &world.resource::<CityNamesRequestBuffer>().0;
|
||||
assert_eq!(
|
||||
city_names.len(),
|
||||
1,
|
||||
"the city-names request must drain in the same tick (H6: real wire path)"
|
||||
);
|
||||
assert_eq!(city_names[0].body_id, "GJ1c");
|
||||
assert!(
|
||||
world.resource::<ServerRunning>().0,
|
||||
"draining must not shut the server down"
|
||||
|
||||
Reference in New Issue
Block a user