refactor(engine): first ambiguity burn-down batch — 302 → 198 pairs
Test / test (pull_request) Failing after 15m16s
Test / test (pull_request) Failing after 15m16s
Two structural fixes from the #143 backlog: - Game-state ordering spine: the three pre-mutation GameStateResource writers (tick_elapsed_time, sync_settings_to_game, handle_restore_prompt) are now a deterministic chain before GameMutation, and the remaining unordered readers (update_selection_hud, handle_hint_button, tick_hint_highlight, handle_right_click, snap_cards_on_window_resize, sync_pile_marker_visibility, auto_save_game_state) are ordered after it. Readers now see the current frame's moves deterministically instead of racing the mutators. - NewGameRequestWriters set: every in-cluster writer of NewGameRequestEvent (buttons, modals, mode picker, seed poller, restore prompt) is registered in a shared set marked ambiguous with itself — writer-vs-writer append order is meaningless since consumers drain the whole queue. Out-of-cluster writers (home, challenge, time-attack, win-summary, play-by-seed, difficulty, stats plugins) can join the set when the test cluster grows. AMBIGUITY_BASELINE ratchets 302 → 198. Remaining backlog is dominated by the Sprite (72) / Transform (48) visual-domain cluster, which needs per-domain set architecture — next batch. Refs #143 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -36,7 +36,7 @@ use crate::events::{
|
||||
UndoRequestEvent, WinStreakMilestoneEvent,
|
||||
};
|
||||
use crate::font_plugin::FontResource;
|
||||
use crate::game_plugin::GameMutation;
|
||||
use crate::game_plugin::{GameMutation, NewGameRequestWriters};
|
||||
#[cfg(target_os = "android")]
|
||||
use crate::input_plugin::TouchDragSet;
|
||||
use crate::layout::HUD_BAND_HEIGHT;
|
||||
@@ -478,10 +478,12 @@ impl Plugin for HudPlugin {
|
||||
.add_systems(Update, announce_auto_complete.after(GameMutation))
|
||||
.add_systems(
|
||||
Update,
|
||||
update_selection_hud.run_if(
|
||||
resource_exists_and_changed::<SelectionState>
|
||||
.or(resource_exists_and_changed::<GameStateResource>),
|
||||
),
|
||||
update_selection_hud
|
||||
.after(GameMutation)
|
||||
.run_if(
|
||||
resource_exists_and_changed::<SelectionState>
|
||||
.or(resource_exists_and_changed::<GameStateResource>),
|
||||
),
|
||||
)
|
||||
.add_systems(Update, update_hud_typography)
|
||||
.add_systems(
|
||||
@@ -503,13 +505,17 @@ impl Plugin for HudPlugin {
|
||||
.add_systems(
|
||||
Update,
|
||||
(
|
||||
handle_new_game_button,
|
||||
handle_new_game_button
|
||||
.in_set(NewGameRequestWriters)
|
||||
.ambiguous_with(NewGameRequestWriters),
|
||||
handle_undo_button,
|
||||
handle_pause_button,
|
||||
handle_help_button,
|
||||
handle_hint_button,
|
||||
handle_hint_button.after(GameMutation),
|
||||
handle_modes_button,
|
||||
handle_mode_option_click,
|
||||
handle_mode_option_click
|
||||
.in_set(NewGameRequestWriters)
|
||||
.ambiguous_with(NewGameRequestWriters),
|
||||
handle_modes_backdrop_click,
|
||||
close_modes_popover_on_escape,
|
||||
handle_menu_button,
|
||||
|
||||
Reference in New Issue
Block a user