funman300
8325bf6cf7
chore: rename app from Solitaire Quest to Ferrous Solitaire
...
Replace all display-name occurrences across web pages, Rust source,
docs, and Cargo metadata. Update localStorage token key from sq_token
to fs_token. Tagline "Klondike Solitaire" retained as genre descriptor.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-13 17:04:45 -07:00
funman300
41d75b50de
feat/fix/perf(engine,data,assetgen): ambient audio, sync bug fixes, hot-path cleanup
...
**ambient_loop.wav (task 5)**
- solitaire_assetgen: add ambient_loop() synthesizer — 5 s seamless loop,
55 Hz drone with 2nd/3rd harmonics, 0.2 Hz LFO breath, 16-bit mono 44100 Hz
- audio_plugin: load ambient_loop.wav via include_bytes!() replacing the
card_flip.wav placeholder; decouple start_ambient_loop() from SoundLibrary
**sync bug fixes (task 11)**
- sync_plugin: LocalOnlyProvider returning UnsupportedPlatform now sets
SyncStatus::Idle instead of displaying a misleading "Sync not configured" error
- sync_client: extract_pull_body / extract_push_body now return SyncError::Auth
only for HTTP 401/403; all other non-2xx statuses return SyncError::Network
- sync_plugin: push_on_exit now logs a warn! on failure instead of silently
discarding the result
**hot-path performance (task 12)**
- card_plugin: card_positions() now returns &Card references (lifetime-bound to
GameState) instead of owned Card clones — eliminates 52 Card clones per
sync_cards() call (runs every animation frame)
- input_plugin: card_position() takes &PileType instead of PileType, eliminating
PileType copies at every drag hit-test call site
- animation_plugin: eliminate intermediate AnimSpeed clone in handle_win_cascade()
**docs (tasks 11, 13)**
- docs/sync_test_runbook.md: manual test runbook for cross-machine sync
- docs/android_investigation.md: cargo-mobile2 port investigation and effort estimate
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-28 23:51:58 +00:00