refactor(engine): ambiguity burn-down batch 4 — zero ambiguities, gate enforced
Test / test (pull_request) Failing after 17m5s
Test / test (pull_request) Failing after 17m5s
Clears the final 47 pairs and turns the ratchet into a hard gate (AMBIGUITY_BASELINE = 0, assert_eq): - HudButtons: the 14 HUD button/popover handlers run as one chain, before ui_focus::FocusKeys — Esc/keyboard consumption order is now defined (restore prompt → buttons/popovers → focus navigation → settings toggle) instead of scheduler-dependent. - HUD text updaters (update_hud, update_selection_hud, update_won_previously) chained, in UiTextFx, after the new AutoComplete set (update_hud reads AutoCompleteState). - restore_hud_on_modal → apply_hud_visibility chained before UpdateOnResize: HudVisibility writes, application, and the layout read happen in a fixed order. - New writer sets UndoRequestWriters / InfoToastWriters (same self-ambiguous pattern as NewGameRequestWriters). - Logic-before-paint: check_no_moves and the AutoComplete chain order before BoardVisuals; SettingsMutation after UpdateOnResize. - MarkerVisuals set wraps the table painter chain; chrome fx declare disjointness from it. - update_hud_typography after BoardVisuals; avatar/settings-toggle interaction handlers declared disjoint from HudButtons. 302 → 198 → 171 → 47 → 0 in four batches, one day. New systems now fail CI unless they declare their ordering or their disjointness. Closes #143 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -32,13 +32,14 @@ mod tests {
|
||||
use crate::ui_focus::UiFocusPlugin;
|
||||
use crate::ui_modal::UiModalPlugin;
|
||||
|
||||
/// Legacy ambiguity backlog measured 2026-07-06 (issue #143). This
|
||||
/// number may only decrease. If your change trips this assertion you
|
||||
/// have added a pair of systems with conflicting data access and no
|
||||
/// ordering edge — add `.before`/`.after` (order matters) or
|
||||
/// `.ambiguous_with` (provably order-independent) at the registration
|
||||
/// site. When triage lowers the real count, lower this constant too.
|
||||
const AMBIGUITY_BASELINE: usize = 47;
|
||||
/// The backlog (302 pairs on 2026-07-06) was burned down to ZERO the
|
||||
/// same day (#143, PRs #146–#149) — this is now a hard gate. If your
|
||||
/// change trips this assertion you have added a pair of systems with
|
||||
/// conflicting data access and no ordering edge: add `.before`/`.after`
|
||||
/// where order matters, or `.ambiguous_with` the relevant domain set
|
||||
/// (BoardVisuals, MarkerVisuals, UiTextFx, HudButtons, writer sets)
|
||||
/// where it provably does not. Do not raise this constant.
|
||||
const AMBIGUITY_BASELINE: usize = 0;
|
||||
|
||||
fn cluster_app() -> App {
|
||||
let mut app = App::new();
|
||||
@@ -96,10 +97,12 @@ mod tests {
|
||||
}
|
||||
};
|
||||
|
||||
assert!(
|
||||
count <= AMBIGUITY_BASELINE,
|
||||
"system-order ambiguities grew: {count} > baseline {AMBIGUITY_BASELINE}. \
|
||||
Add .before/.after or .ambiguous_with at the new registration site.",
|
||||
assert_eq!(
|
||||
count, AMBIGUITY_BASELINE,
|
||||
"system-order ambiguities changed from the enforced baseline. \
|
||||
Add .before/.after or .ambiguous_with at the new registration site \
|
||||
(or, if the count legitimately dropped below a nonzero baseline, \
|
||||
lower AMBIGUITY_BASELINE).",
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user