From 4f0c5bb80896b6f07b435f78d21eed5cf93d33df Mon Sep 17 00:00:00 2001 From: funman300 Date: Mon, 6 Jul 2026 21:14:50 -0700 Subject: [PATCH] docs(changelog): record the July 6 evening arc CI gate, ambiguity gate + same-day 302-to-zero burn-down, 36% smaller browser canvas, Quaternions API adoption, sync/auth concurrency fixes, bounded exit push, server auth hardening. Co-Authored-By: Claude Fable 5 --- CHANGELOG.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5c6015..a48a623 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,45 @@ project follows [Semantic Versioning](https://semver.org/). ## [Unreleased] +### Added + +- **CI workspace gate.** New `test.yml` workflow runs clippy (deny warnings) + and the full test suite on every master push and PR — previously no CI ran + tests at all. Caught its own first bug (missing Bevy native deps) on its + own PR. (#135) +- **Schedule ambiguity gate.** A headless test builds the gameplay plugin + cluster with Bevy ambiguity detection promoted to error. The initial + measurement found 302 system pairs with conflicting data access and no + ordering; four burn-down batches (PRs #146–#149) took it to ZERO the same + day, and the gate now enforces 0. Keyboard consumption, board painting, + and HUD updates all have deterministic order for the first time. + +### Changed + +- **Browser canvas 36% smaller.** `canvas_bg.wasm` shrank 36.2 MB → 23.2 MB + via a size-focused `wasm-release` profile (fat LTO, single codegen unit, + opt-level "s"); verified visually identical in production. (#134) +- **Quaternions API adoption.** Canonical `FOUNDATIONS`/`TABLEAUS` consts in + `solitaire_core` replace five scattered enum lists; upstream + `Suit::SUITS`/`Rank::RANKS` replace nine hand-rolled arrays, with the + texture-atlas indexing re-keyed through tested canonical helpers. Net + −177 lines. (#137) + +### Fixed + +- **Sync push race.** The server's load→merge→store cycle now runs in one + transaction; concurrent pushes from two devices can no longer overwrite + each other's merge. (#136) +- **Refresh-token rotation is single-use under concurrency** — rotation + gates on the DELETE's row count, so a stolen-then-replayed refresh token + loses the race and gets 401. (#136) +- **Exit sync push actually completes.** Was a detached task killed by + process teardown; now a bounded 2-second blocking wait on the app's final + frame. (#138) +- **Server auth hardening.** Login timing no longer reveals whether a + username exists; concurrent duplicate registration returns 409 instead of + 500; avatar uploads are magic-byte checked. (#144, issues #139–#141) + ## [0.41.1] — 2026-07-06 ### Fixed -- 2.47.3