fix(simulation): address PR #85 review — warnings and polish items

- Ticker rotation: document sliding-window semantics (vs modulus-aligned)
- Ticker zone ID: add warning about Gauntlet vs production zone ID mismatch
- Proof-room movement profile: respect archetype instead of hardcoding smuggler
- Storyteller tie-break: use exact f32 equality (inputs are discrete integers)
- Observer: .map().flatten() → .and_then() (clippy strict)
- Content loader: remove dangling doc comment before section header
- Tests: replace assert!(false, ...) with TODO comments in ignored tests
- Tests: add frame limiter note on 302-update loop in tell expiry test

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-05 10:59:38 +01:00
co-authored by Claude Opus 4.6
parent 37c38c0441
commit 9ed6094d69
7 changed files with 27 additions and 21 deletions
+9
View File
@@ -16,6 +16,10 @@ use crate::bridge::types::TickerLine;
///
/// Must match the zone_id used in the production location YAML
/// when the transit district ZoneMap is populated.
///
/// WARNING: Gauntlet assigns zone IDs sequentially and may differ from
/// production. This constant is for production use only; Gauntlet tests
/// should query the ContentStore for the correct zone ID.
pub const LAST_SHIFT_ZONE_ID: u16 = 1;
/// How often the displayed headline rotates, in ticks.
@@ -56,6 +60,11 @@ impl TickerPool {
/// Advance to a new headline using SimRng if `TICKER_ROTATION_TICKS` have elapsed.
///
/// Uses sliding-window timing: the next rotation fires `TICKER_ROTATION_TICKS`
/// after the last rotation, not on a fixed modulus boundary. This means the first
/// headline persists for 200 ticks from tick 0, then each subsequent headline
/// persists for 200 ticks from the moment it was selected.
///
/// Called each tick by `tick_news_ticker`. Deterministic: same seed → same rotation.
pub fn maybe_rotate(&mut self, current_tick: u64, rng: &mut crate::simulation::rng::SimRng) {
if self.lines.is_empty() {