refactor(engine): ambiguity gate covers the full cluster — batches 1-3 #188

Merged
funman300 merged 1 commits from refactor/ambiguity-gate-cluster-v2 into master 2026-07-17 00:48:15 +00:00
Owner

Finishes the gate-extender work started 2026-07-07 (worktree agent-a58dbc29968a4285b), ported onto current master and completed.

What

  • schedule_checks::cluster_app grows from 8 to 22 plugins: mode plugins (challenge, daily, time-attack, weekly goals, play-by-seed, difficulty), replay playback + overlay, radial menu, input, touch selection, tooltip, cursor, and safe-area join the anim/stats/pause and screen-plugin batches.
  • The 585 ambiguous pairs the expansion exposed are burned to zero; the gate stays assert_eq!(count, 0).

How (highlights)

  • ReplayPlayback set: tick → auto-clear → completion chain on the pre-mutation spine; overlay chain runs between it and GameMutation so painters render post-tick state and step/scrub events are consumed same-frame.
  • ModeStart: mode-start handlers pinned between the stats abandon-recorder (AbandonRecord) and GameMutation.
  • Mode-completion chain (ChallengeCompletion < DailyCompletion < WeeklyGoalsEval) lives inside ProgressUpdate — a daily win also counts toward weekly goals, so order is pinned instead of arguing XP commutativity.
  • Writer clubs grow: MoveRequestWriters, new WarningToastWriters; UiTextFx takes the overlay/tooltip/safe-area chrome painters; SettingsAccess takes the lag-tolerant settings readers, with one-directional ambiguous_with for field-disjoint cases (avatar vs deal options).

Gate

  • cargo test --workspace green (993 engine tests)
  • cargo clippy --workspace --all-targets -- -D warnings clean
  • rustfmt applied

Supersedes the unmerged refactor/ambiguity-gate-full-cluster branch (batches 1+2 are contained in this diff).

🤖 Generated with Claude Code

Finishes the gate-extender work started 2026-07-07 (worktree agent-a58dbc29968a4285b), ported onto current master and completed. ## What - `schedule_checks::cluster_app` grows from 8 to 22 plugins: mode plugins (challenge, daily, time-attack, weekly goals, play-by-seed, difficulty), replay playback + overlay, radial menu, input, touch selection, tooltip, cursor, and safe-area join the anim/stats/pause and screen-plugin batches. - The 585 ambiguous pairs the expansion exposed are burned to zero; the gate stays `assert_eq!(count, 0)`. ## How (highlights) - **ReplayPlayback set**: tick → auto-clear → completion chain on the pre-mutation spine; overlay chain runs between it and `GameMutation` so painters render post-tick state and step/scrub events are consumed same-frame. - **ModeStart**: mode-start handlers pinned between the stats abandon-recorder (`AbandonRecord`) and `GameMutation`. - **Mode-completion chain** (`ChallengeCompletion < DailyCompletion < WeeklyGoalsEval`) lives inside `ProgressUpdate` — a daily win also counts toward weekly goals, so order is pinned instead of arguing XP commutativity. - Writer clubs grow: `MoveRequestWriters`, new `WarningToastWriters`; `UiTextFx` takes the overlay/tooltip/safe-area chrome painters; `SettingsAccess` takes the lag-tolerant settings readers, with one-directional `ambiguous_with` for field-disjoint cases (avatar vs deal options). ## Gate - `cargo test --workspace` green (993 engine tests) - `cargo clippy --workspace --all-targets -- -D warnings` clean - rustfmt applied Supersedes the unmerged `refactor/ambiguity-gate-full-cluster` branch (batches 1+2 are contained in this diff). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
funman300 added 1 commit 2026-07-17 00:43:18 +00:00
refactor(engine): ambiguity gate covers the full cluster — batches 1-3, 585 pairs burned to zero
Test / fmt (pull_request) Successful in 4s
Test / test (pull_request) Successful in 4m13s
838342649c
Port the July 7 gate-extender branch onto current master (the You-hub,
touch action bar, glass tab bar, Phase L, and hint-ghost work all landed
since) and finish batch 3. cluster_app now includes the mode, replay,
input, radial, tooltip, cursor, touch-selection, and safe-area plugins on
top of batches 1-2; the 585 ambiguous pairs the expansion exposed are
annotated down to zero and the gate stays assert_eq!(count, 0).

New ordering machinery:
- ReplayPlayback: playback driver chain on the pre-mutation spine
  (PointerInput < ReplayPlayback < overlay chain < GameMutation)
- ModeStart: mode-start handlers between the stats abandon-recorder and
  GameMutation; ChallengeCompletion < DailyCompletion < WeeklyGoalsEval
  pinned inside ProgressUpdate so `.after(ProgressUpdate)` readers see
  settled progress
- PointerInput: public set wrapping the input chain; AbandonRecord on the
  stats abandon-recorder; PendingHint around the async hint pipeline;
  HintGhostFx for the ghost chain (after the full visual spine)
- Clubs: MoveRequestWriters, WarningToastWriters join the existing
  request/toast writer clubs; UiTextFx grows the overlay/tooltip/safe-area
  chrome painters; SettingsAccess grows the lag-tolerant settings readers

Gate: cargo test --workspace green (993 engine tests), clippy
--all-targets -D warnings clean, rustfmt applied.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
funman300 merged commit b4845564af into master 2026-07-17 00:48:15 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: funman300/Ferrous-Solitaire#188