Repository navigation
Fix squid lifetime statistics tracking - #41
ViciousSquid merged 7 commits into
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughStatistics ownership moved to ChangesStatistics and neurogenesis synchronization
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant Neurogenesis
participant TamagotchiLogic
participant SquidStatistics
participant StatisticsTab
Neurogenesis->>TamagotchiLogic: neuronCreated(neuron_name)
TamagotchiLogic->>SquidStatistics: record neuron birth and live count
TamagotchiLogic->>StatisticsTab: update_statistics()
StatisticsTab->>SquidStatistics: synchronize display data
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/tamagotchi_logic.py (1)
1153-1165: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winInk-cloud follow-up is now gated on the statistics tab, not on the ink cloud actually being created.
Lines 1160-1164 (status
"fleeing!", theink_cloudmemory, and theend_ink_fleetimer) sit insideif hasattr(self.brain_window, 'statistics_tab'). They therefore run on every startle when the tab exists — even when the 25% ink-cloud roll on Line 1153 failed — and never run when the tab is missing. Those statements belong to the ink-cloud branch.🐛 Proposed fix for the nesting
if source != "startled_awake" and random.random() < 0.25: self.create_ink_cloud() - - # Track startle in statistics (was only in else block) - if hasattr(self.brain_window, 'statistics_tab'): - self.brain_window.statistics_tab.increment_stat('startles_experienced') - self.squid.status = "fleeing!" self.squid.memory_manager.add_short_term_memory( 'behaviour', 'ink_cloud', 'Startled! Created an ink cloud' ) QtCore.QTimer.singleShot(5000, self.squid.end_ink_flee) + + # Track startle in statistics + if hasattr(self.brain_window, 'statistics_tab'): + self.brain_window.statistics_tab.increment_stat('startles_experienced')🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/tamagotchi_logic.py` around lines 1153 - 1165, Move the squid fleeing follow-up from the statistics-tab guard into the branch that actually executes after create_ink_cloud(), so status, short-term memory, and the end_ink_flee timer run only when an ink cloud is created. Keep increment_stat('startles_experienced') independently guarded by the statistics_tab check.
🧹 Nitpick comments (4)
src/squid_statistics.py (2)
16-61: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueAnnotate the key maps as
ClassVarto satisfy RUF012.These are immutable lookup tables; typing them as
ClassVar[dict[str, str]]clears the three Ruff warnings and documents intent.♻️ Proposed annotation
+from typing import ClassVar + class SquidStatistics: @@ - _PERSISTENCE_KEYS = { + _PERSISTENCE_KEYS: ClassVar[dict] = { @@ - _EVENT_KEYS = { + _EVENT_KEYS: ClassVar[dict] = { @@ - _NEURON_BIRTH_KEYS = { + _NEURON_BIRTH_KEYS: ClassVar[dict] = {🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/squid_statistics.py` around lines 16 - 61, Annotate the class-level lookup maps _PERSISTENCE_KEYS, _EVENT_KEYS, and _NEURON_BIRTH_KEYS as ClassVar[dict[str, str]], adding the required ClassVar import if needed. Preserve their existing mappings and values.Source: Linters/SAST tools
118-129: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winRollover logic is now duplicated with divergent behaviour.
update_distance(Lines 102-116) keeps its own single-increment rollover branch plus the user-facing message, whileadd_distanceusesdivmodand stays silent. Depending on which caller is used, the multiplier semantics and the rollover notification differ. Consider makingupdate_distancecompute the magnitude and delegate toadd_distance.♻️ Suggested consolidation
def update_distance(self, dx, dy): '''Track distance traveled by squid with rollover protection''' - distance = math.sqrt(dx*dx + dy*dy) - self.distance_swam += distance - - # Check for rollover and reset with multiplier - if self.distance_swam >= DISTANCE_ROLLOVER_LIMIT: - self.distance_swam = self.distance_swam - DISTANCE_ROLLOVER_LIMIT - self.distance_swam_multiplier += 1 - - # Log the rollover event - if hasattr(self.squid, 'tamagotchi_logic'): - self.squid.tamagotchi_logic.show_message( - f"🌊 Distance counter rolled over! Now at {self.distance_swam_multiplier}x" - ) + previous_multiplier = self.distance_swam_multiplier + self.add_distance(math.sqrt(dx * dx + dy * dy)) + if (self.distance_swam_multiplier != previous_multiplier + and hasattr(self.squid, 'tamagotchi_logic')): + self.squid.tamagotchi_logic.show_message( + f"🌊 Distance counter rolled over! Now at {self.distance_swam_multiplier}x" + )🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/squid_statistics.py` around lines 118 - 129, Consolidate distance rollover handling by updating update_distance to calculate the distance increment and delegate it to add_distance. Remove its separate rollover arithmetic and preserve the existing user-facing rollover notification through the shared path, ensuring both update_distance and add_distance use identical multiplier semantics.src/tamagotchi_logic.py (1)
1352-1358: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueDirect attribute write bypasses the canonical-statistics API.
Every other lifetime stat now goes through an explicit
SquidStatisticsmethod, butmax_poops_cleanedis mutated in place here. Consider anobserve_poop_count(count)method on the model so the invariant (monotonic maximum) lives with the data.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/tamagotchi_logic.py` around lines 1352 - 1358, Update the SquidStatistics model to expose an observe_poop_count(count) method that enforces the monotonic max_poops_cleaned invariant, then replace the direct max_poops_cleaned assignment in the current statistics update flow with that method while preserving the existing statistics-tab refresh.src/brain_statistics_tab.py (1)
243-249: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueView reaches into a private method on
TamagotchiLogic.
self.tamagotchi_logic._observe_current_neuron_count()couples the read-only tab to logic internals. Exposing a public equivalent (e.g.refresh_neuron_count()) keeps the projection boundary intact. Also note that whensquid_statsis absent the user confirms the reset and nothing happens — a message or a mirror reset would be clearer.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/brain_statistics_tab.py` around lines 243 - 249, Replace the private TamagotchiLogic call in the statistics reset flow with a public method such as refresh_neuron_count(), adding that public equivalent to TamagotchiLogic while preserving the existing behavior. Also handle the confirmed reset path when squid_stats is absent by showing a clear user-facing message or resetting the mirrored statistics state.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/tamagotchi_logic.py`:
- Around line 1811-1820: The neuron-count logic in _observe_current_neuron_count
and the current_count calculation around lines 270-292 must exclude
brain_widget.excluded_neurons, matching the widget’s defined count; introduce or
reuse one shared helper for both sites. In src/tamagotchi_logic.py lines
1811-1820, update observe_neuron_count to use that helper; in lines 270-292,
derive current_count from the same helper. Also reconcile the model’s
current_neurons/max_neurons_reached default of 7 with the eight entries in
original_neuron_positions.
- Around line 1393-1400: Update the sleep-statistics update in the simulation
callback to scale the timer interval by self.simulation_speed before passing
elapsed_seconds to squid_statistics.update. Keep the existing
interval-to-seconds conversion and callback cadence unchanged so awake and
sleeping durations accumulate simulated in-game time.
---
Outside diff comments:
In `@src/tamagotchi_logic.py`:
- Around line 1153-1165: Move the squid fleeing follow-up from the
statistics-tab guard into the branch that actually executes after
create_ink_cloud(), so status, short-term memory, and the end_ink_flee timer run
only when an ink cloud is created. Keep increment_stat('startles_experienced')
independently guarded by the statistics_tab check.
---
Nitpick comments:
In `@src/brain_statistics_tab.py`:
- Around line 243-249: Replace the private TamagotchiLogic call in the
statistics reset flow with a public method such as refresh_neuron_count(),
adding that public equivalent to TamagotchiLogic while preserving the existing
behavior. Also handle the confirmed reset path when squid_stats is absent by
showing a clear user-facing message or resetting the mirrored statistics state.
In `@src/squid_statistics.py`:
- Around line 16-61: Annotate the class-level lookup maps _PERSISTENCE_KEYS,
_EVENT_KEYS, and _NEURON_BIRTH_KEYS as ClassVar[dict[str, str]], adding the
required ClassVar import if needed. Preserve their existing mappings and values.
- Around line 118-129: Consolidate distance rollover handling by updating
update_distance to calculate the distance increment and delegate it to
add_distance. Remove its separate rollover arithmetic and preserve the existing
user-facing rollover notification through the shared path, ensuring both
update_distance and add_distance use identical multiplier semantics.
In `@src/tamagotchi_logic.py`:
- Around line 1352-1358: Update the SquidStatistics model to expose an
observe_poop_count(count) method that enforces the monotonic max_poops_cleaned
invariant, then replace the direct max_poops_cleaned assignment in the current
statistics update flow with that method while preserving the existing
statistics-tab refresh.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: ad915d9a-d338-4293-95a6-fe293df00cf5
📒 Files selected for processing (8)
src/brain_statistics_tab.pysrc/brain_widget.pysrc/neurogenesis.pysrc/squid_statistics.pysrc/tamagotchi_logic.pytests/test_squid_statistics.pytests/test_statistics_event_wiring.pytests/test_statistics_persistence.py
|
|
||
| # Record continuous model statistics once per simulation callback. | ||
| # The timer interval is explicit so accelerated timers and pauses do | ||
| # not turn a UI refresh cadence into the source of sleep duration. | ||
| squid_statistics = getattr(self.squid, 'statistics', None) | ||
| if squid_statistics: | ||
| elapsed_seconds = self.simulation_timer.interval() / 1000.0 | ||
| squid_statistics.update(elapsed_seconds=elapsed_seconds) |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== locate file =="
git ls-files | grep -F 'src/tamagotchi_logic.py' || true
echo "== relevant sections =="
wc -l src/tamagotchi_logic.py
sed -n '1320,1420p' src/tamagotchi_logic.py
echo "== search simulation_timer and simulation_speed usages =="
rg -n "simulation_timer|simulation_speed|interval\\(|total_sleep_time|sleep" src/tamagotchi_logic.pyRepository: ViciousSquid/Dosidicus
Length of output: 11874
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== search update_sim_statistics definitions/usages =="
rg -n "update_sim_statistics|elapsed_seconds|squid_statistics|statistics update" src/tamagotchi_logic.py
echo "== inspect update_sim_statistics definition if present =="
python3 - <<'PY'
from pathlib import Path
p=Path("src/tamagotchi_logic.py")
text=p.read_text()
needle="def update_sim_statistics"
idx=text.find(needle)
print("idx", idx)
if idx!=-1:
start=max(0,idx-2000)
end=min(len(text),idx+3000)
print(text[start:end])
PYRepository: ViciousSquid/Dosidicus
Length of output: 774
Use simulated time for sleep statistics.
interval() shrinks with simulation_speed, so at 4x the callback fires four times with quarter-second increments and accumulates one second per real second. Since the rest of the update loop scales state changes by self.simulation_speed, multiply the elapsed value by self.simulation_speed so awake/sleeping durations match in-game time.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/tamagotchi_logic.py` around lines 1393 - 1400, Update the
sleep-statistics update in the simulation callback to scale the timer interval
by self.simulation_speed before passing elapsed_seconds to
squid_statistics.update. Keep the existing interval-to-seconds conversion and
callback cadence unchanged so awake and sleeping durations accumulate simulated
in-game time.
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
src/tamagotchi_logic.py (1)
2825-2829: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winDuplicate statistics-restore + sickness-resync logic across
load_gameand_apply_save_data.Both methods repeat the exact same
self.squid.statistics.load_statistics(...)followed byself._set_sickness_state(getattr(self.squid, 'is_sick', False))pairing. Consider extracting a small helper (e.g._restore_statistics_and_sickness(data)) to avoid the two call sites drifting apart in future changes.Also applies to: 3063-3064
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/tamagotchi_logic.py` around lines 2825 - 2829, Extract the duplicated statistics and sickness restoration sequence from load_game and _apply_save_data into a shared helper such as _restore_statistics_and_sickness(data). Have the helper call load_statistics with data.get('statistics', {}) and then _set_sickness_state using the squid’s is_sick value, and replace both existing call sites with the helper.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/tamagotchi_logic.py`:
- Around line 1150-1152: Consolidate ink-cloud creation in startle_squid so each
startle can invoke create_ink_cloud at most once. Remove the
_maybe_create_startle_ink_cloud(source) call from the startle flow and retain
the existing produce_ink, ink_chance, and is_first_startle decision logic,
including its established behavior and statistics updates; add or update an
integration test for startle_squid if the test structure supports it.
---
Nitpick comments:
In `@src/tamagotchi_logic.py`:
- Around line 2825-2829: Extract the duplicated statistics and sickness
restoration sequence from load_game and _apply_save_data into a shared helper
such as _restore_statistics_and_sickness(data). Have the helper call
load_statistics with data.get('statistics', {}) and then _set_sickness_state
using the squid’s is_sick value, and replace both existing call sites with the
helper.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 42a6ca39-2039-41fe-ab72-752bdb5ab416
📒 Files selected for processing (5)
src/brain_statistics_tab.pysrc/squid_statistics.pysrc/tamagotchi_logic.pytests/test_squid_statistics.pytests/test_statistics_event_wiring.py
🚧 Files skipped from review as they are similar to previous changes (1)
- tests/test_squid_statistics.py
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
src/tamagotchi_logic.py (2)
1284-1294: 🩺 Stability & Availability | 🔴 Critical | ⚡ Quick winTwo call sites use
hasattrinstead of aNone-safe check for the optionalstatistics_tab.hasattr(self.brain_window, 'statistics_tab')returnsTrueeven when the attribute holdsNone, unlike the correctedgetattr(..., None)+ truthiness pattern used intrack_startle,track_neuron_creation, andrefresh_neuron_countelsewhere in this same PR.
src/tamagotchi_logic.py#L1284-L1294: replace thehasattrcheck increate_ink_cloudwithstatistics_tab = getattr(self.brain_window, 'statistics_tab', None); if statistics_tab: ...to avoid anAttributeErrorwhen the tab isNone.src/tamagotchi_logic.py#L1333-L1345: apply the same fix intrack_poop_created, and additionally hoist thesquid_statistics.max_poops_cleanedupdate out of the tab-existence check so the canonical model updates even when the tab is absent.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/tamagotchi_logic.py` around lines 1284 - 1294, Update create_ink_cloud at src/tamagotchi_logic.py:1284-1294 to retrieve statistics_tab with getattr(..., None) and only call update_statistics when the result is truthy. Apply the same None-safe pattern in track_poop_created at src/tamagotchi_logic.py:1333-1345, while moving squid_statistics.max_poops_cleaned updates outside the tab check so the canonical model is always updated.
2908-2909: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick winPersist the legacy tab statistics on the canonical model.
highest_anxiety,lowest_happiness, andmax_short_term_memories/max_long_term_memoriesare still only updated onself.brain_window.statistics_tab.statisticsand are not mapped fromSquidStatistics;poops_thrownwrites to the canonical model, but the session age direct-tab write is inconsistent with the model-only save path. Add these fields toSquidStatistics, updateto_dict()/load_statistics()/_PERSISTENCE_KEYS, and migrate the legacy writes to the canonical model.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/tamagotchi_logic.py` around lines 2908 - 2909, Move the legacy statistics fields highest_anxiety, lowest_happiness, max_short_term_memories, max_long_term_memories, and session age into SquidStatistics, including them in to_dict(), load_statistics(), and _PERSISTENCE_KEYS. Update all legacy tab write sites to mutate self.squid.statistics instead, while preserving poops_thrown’s canonical-model behavior and keeping the statistics tab read-only.
🧹 Nitpick comments (1)
tests/test_statistics_event_wiring.py (1)
216-274: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winGood coverage of ink-cloud dedup, but
create_ink_cloudinternals stay untested.This test mocks
logic.create_ink_cloud = Mock(), so it validates the call-count/gating logic instartle_squidwell, but never exercisescreate_ink_cloud's own body — which is where thehasattr(self.brain_window, 'statistics_tab')bug flagged insrc/tamagotchi_logic.py(Lines 1284-1294) lives. Consider adding a case that letscreate_ink_cloudrun for real withstatistics_tab=Noneto catch this class of regression going forward.Want me to draft that test?
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@tests/test_statistics_event_wiring.py` around lines 216 - 274, Extend test_one_startle_creates_at_most_one_ink_cloud so at least one case invokes create_ink_cloud directly instead of mocking it, while keeping brain_window.statistics_tab set to None. Assert the real create_ink_cloud path completes without error and preserves the expected cloud behavior, covering the statistics_tab handling in create_ink_cloud while retaining the existing startle_squid gating assertions for the other cases.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/tamagotchi_logic.py`:
- Around line 1284-1294: Update create_ink_cloud at
src/tamagotchi_logic.py:1284-1294 to retrieve statistics_tab with getattr(...,
None) and only call update_statistics when the result is truthy. Apply the same
None-safe pattern in track_poop_created at src/tamagotchi_logic.py:1333-1345,
while moving squid_statistics.max_poops_cleaned updates outside the tab check so
the canonical model is always updated.
- Around line 2908-2909: Move the legacy statistics fields highest_anxiety,
lowest_happiness, max_short_term_memories, max_long_term_memories, and session
age into SquidStatistics, including them in to_dict(), load_statistics(), and
_PERSISTENCE_KEYS. Update all legacy tab write sites to mutate
self.squid.statistics instead, while preserving poops_thrown’s canonical-model
behavior and keeping the statistics tab read-only.
---
Nitpick comments:
In `@tests/test_statistics_event_wiring.py`:
- Around line 216-274: Extend test_one_startle_creates_at_most_one_ink_cloud so
at least one case invokes create_ink_cloud directly instead of mocking it, while
keeping brain_window.statistics_tab set to None. Assert the real
create_ink_cloud path completes without error and preserves the expected cloud
behavior, covering the statistics_tab handling in create_ink_cloud while
retaining the existing startle_squid gating assertions for the other cases.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: d8bedbb8-e372-4e57-acfd-16a633c642a1
📒 Files selected for processing (2)
src/tamagotchi_logic.pytests/test_statistics_event_wiring.py
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/squid_statistics.py`:
- Around line 269-271: The reset method currently loses neuron counts by
reinitializing them through __init__. Preserve current_neurons and
max_neurons_reached before reinitialization, invoke __init__(self.squid), then
restore the lifetime maximum and restore current_neurons only as needed to
maintain the minimum current-neuron invariant before statistics are serialized.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 8ba0eaf2-c4b9-4767-b13a-344ec9f3cdf6
📒 Files selected for processing (9)
src/brain_about_tab.pysrc/brain_statistics_tab.pysrc/interactions.pysrc/interactions2.pysrc/squid.pysrc/squid_statistics.pysrc/tamagotchi_logic.pytests/test_squid_statistics.pytests/test_statistics_event_wiring.py
c575b2e
into
ViciousSquid:2.6.5.0_LatestVersion
|
I merged these changes but had to revert since NONE of the stats were displaying correctly afterwards. |
|
I'm sincerely sorry for #41. My change made the Statistics tab worse, and you had to spend your time merging, testing, and reverting it. You were right to revert it. I should have tested the real desktop Qt startup lifecycle before asking you to merge the change; I did not, and that validation failure was mine. Both desktop entrypoints create The tests I submitted with #41 covered model, event, persistence, and reset behavior with fakes, but none constructed the real seven-tab window in its actual startup order. I mistook unit coverage for GUI integration coverage. I also do not want to pretend that adding the missing tab name was enough. During the repair review, we found and fixed additional ways the restored statistics could still be untruthful: partial or missing statistics files could retain values from the current session; movement used a fixed estimate and missed direct and sleeping paths; a rejected poop spawn could be counted; a click wake was not counted as a startle; and a stopped game could leave its neurogenesis listener attached. The repair now:
The offscreen regression constructs the real I'm very sorry for the extra work and for giving you a change you could not rely on. There is no excuse for asking you to be the integration test. |
|
Please submit a brief video or GIF as proof showing that the statistics have indeed been fixed and create a new PR. Thank you for your contributions! |
Summary
SquidStatisticsthe canonical source and persist it directlyTesting
python -m unittest discover -s tests -v(28 passed)python android/tests/test_engine.py(7/7 passed)python -m compileall -q src main.py testsCloses #26
Summary by CodeRabbit