Repository navigation
feat: 10-minute stats during the v0.14.0 launch; exclude updater assets from totals - #30
Conversation
…er assets from totals - collect-stats runs every 10 min; a cadence step collects every time until WINDOW_END (2026-10-27), afterwards only when the last sample is ~6 h old. Concurrency group + rebase before push so runs don't race the Play workflow. - data/launch-events.csv: timestamped launch posts to line up with the samples. - Headline downloads exclude Tauri updater assets (latest.json polls, .sig, .app.tar.gz); they stay in stats-assets.csv as their own signal.
|
@greptileai review |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
… add updater_checks()
|
| concurrency: | ||
| group: collect-stats | ||
| cancel-in-progress: false |
There was a problem hiding this comment.
The new collect-stats group covers only stats runs, not the Play Console workflow. With stats now pushing every ten minutes, a stats commit can land while Play collects its daily data. Play then pushes from its older checkout without pulling, so its push is rejected and the collected Android data never reaches the repository.
The new git pull --rebase protects only the stats side. Give both workflows the same concurrency group, or make both writers pull and retry rejected pushes.
Knowledge Base Used: Collection automation
There was a problem hiding this comment.
Fixed in 07c0318 and the follow-up: both workflows push with rebase-and-retry.
| def test_updater_assets_are_excluded_from_downloads(): | ||
| assert is_updater_asset("latest.json") | ||
| assert is_updater_asset("activitywatch-tauri-0.14.0-darwin-aarch64.app.tar.gz") | ||
| assert is_updater_asset("activitywatch-tauri-0.14.0-linux-aarch64.AppImage.sig") | ||
| assert not is_updater_asset("activitywatch-v0.14.0-windows-x86_64-setup.exe") | ||
| assert not is_updater_asset("activitywatch-tauri-0.14.0-linux-x86_64.AppImage") | ||
| assert not is_updater_asset("activitywatch-v0.14.0-macos-arm64.dmg") |
There was a problem hiding this comment.
Tests never check download totals
test_updater_assets_are_excluded_from_downloads only checks is_updater_asset(). It would still pass if the skip in downloads() were removed and updater counts returned to the headline total.
Add a test that replaces downloads_by_asset() with mixed updater and installer rows, then checks the exact total from downloads().
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
There was a problem hiding this comment.
Fixed in 07c0318: test_downloads_total_excludes_updater_assets checks the total (320).
|
Addressed in 07c0318: collect-play now rebases onto master before pushing (no shared concurrency group, since a pending run in a shared group would replace the daily Play run), and a test checks that @greptileai review |
|
Addressed in 2d9adda: both workflows now push with a retry loop (push; on rejection back off, @greptileai review |
For the v0.14.0 launch (Discord Tue, Reddit/X Wed, Product Hunt Thu, …) we want to see each post's effect on downloads, so:
WINDOW_END(2026-10-27), afterwards only if the last sample instats.csvis ~6 h old, which keeps today's cadence without a second edit. GitHub may delay scheduled runs, so rows carry their own timestamps. Added a concurrency group andgit pull --rebasebefore push so runs can't race each other or the Play Console workflow.data/launch-events.csv: timestamped (UTC) posts per channel to correlate with the samples.releases/latest/download/latest.json, and updates fetch.sig/.app.tar.gz; v0.14.0'slatest.jsonalready has 51 "downloads" after half a day. Those stay instats-assets.csv(useful on their own: update checks ≈ active Tauri installs) but no longer inflatedownloads. Historical effect is ~150 counts across the betas. Note: the Linux Tauri updater fetches the AppImage itself, which can't be told apart from a fresh download.Per-asset rows (
stats-assets.csv) are appended only when a count changes, so the 10-min cadence gives per-version, per-platform time series at the same resolution.Tested the cadence step locally (window open, window closed + fresh sample → skip, closed + stale → collect) and added unit tests for
is_updater_asset.Also in
analyze_stats.py: per-platform and per-version series drop updater assets by default (.sig/.app.tar.gzwere counted under macos/linux), andupdater_checks()gives the latest.json series per release.