Skip to content

Release v1.11.0#96

Open
mdeguzis wants to merge 85 commits into
mainfrom
dev
Open

Release v1.11.0#96
mdeguzis wants to merge 85 commits into
mainfrom
dev

Conversation

@mdeguzis

Copy link
Copy Markdown
Owner

Promotes the accumulated dev work to a stable release so the type-agnostic cloud app_id fix (#95) is in users' hands before the web app flips user_proton_configs.app_id to text.

Highlights:

  • Manage This Game button in the QAM sidebar and game header
  • GOG and Epic (Heroic) non-Steam submissions
  • Restore from cloud pulls down every config, not just games already tracked locally, and fetches by linked account
  • Game requirements cached 7 days with offline fallback
  • Cache stats overlay redesign
  • Type-agnostic cloud app_id handling ahead of the web schema change (Make cloud config app_id comparisons type-agnostic ahead of app_id text migration #95)
  • Assorted library badge, scroll, compat tool, and translation fixes

After this merges and the stable release publishes, the web app applies the user_proton_configs.app_id text migration (proton-pulse-web #131).

mdeguzis added 30 commits June 13, 2026 14:01
- Replace cramped GPU/Architecture/Config dropdown row with single Filters button
- Filters button shows active filter count (e.g. Filters (2)) and sliders icon
- ReportFiltersModal gives each filter its own labeled row with full-width dropdown
- Remove GPU architecture pill from report card rows; show arch in detail modal under GPU Tier row instead
- Report Analysis modal: fix double background and width pushing right
- Report Analysis score pill now shows pts label and Excellent/Good/Fair/Low tier
- Score tiers driven from scoring-info.json (shared source of truth with web app)
- Add What's this? button next to score pill that opens ScoringGuideModal
- ScoringGuideModal now includes Report Score Tiers section from scoring-info.json
- Add hourly bucket tracking (last 24h) to metrics: hit rate, fetch
  latency, and fetch volume recorded per hour with automatic eviction
- New CacheStatsModal with CSS bar charts for hit rate, CDN avg latency,
  and request volume per hour
- Stats button in Manage Cache header opens the stats modal via showModal
- CDN 404 no-data spans excluded from latency averages so they dont skew
  the timing charts
mdeguzis added 24 commits June 14, 2026 21:33
…mpatToolsSection, archFilter, resetFilters to 19 locales
…atToolsSection, archFilter, resetFilters across all 19 locales
…h fallbacks

Adds scripts/sync-missing-translations.mjs which finds keys present in
i18n.ts but absent from language files and inserts English fallbacks.
Wired into the build so missing keys are impossible going forward.

Backfills gpuArch and perReportWhatsThis into the 19 translation files
that were missing them.
…n errors

- Cache Steam appdetails responses for 7 days to avoid 429 rate limiting
- Serve stale cache on network errors instead of returning empty
- Removed --retry-all-errors from curl_json (was multiplying 429 requests)
- Added from_cache and error fields to result dict
- Tests cover disk cache hit, save, stale fallback, and error paths
…announcements

Native GitHub-Discord webhook fires on all release sub-events (deleted, created,
prereleased, published) producing 3 blank embeds per dev release. New workflow
triggers only on published to post a single formatted embed.
- Python: detect GOG product ID and Epic game ID from Heroic shortcut
  launch options (heroic://launch/gog/<id>) with library JSON fallback
- gameSource.ts: add gog_product_id, epic_game_id fields to GameSourceInfo;
  add appTypeFromSource() and nativeAppIdFromSource() helpers
- userConfigs.ts: add appType field (steam/gog/epic/nonsteam), VALID_APP_TYPES,
  validation, and app_type in POST body
- NativePulseReportModal: accept gameSource prop, derive prefixed app_id
  (gog:<id> / epic:<id>) and appType from it; allow Heroic GOG/Epic submissions
- ConfigEditorModal: resolve game source before opening modal for shortcuts;
  pass gameSource through; block only unidentified shortcuts
- Migration: 20260623000000_add_app_type_to_user_configs.sql applied
…cked locally

restoreCloudConfigs skipped any cloud row whose app_id was not already
tracked on this device, which meant a fresh device or a reinstall
restored nothing and only games you already had locally came back. Pull
every fetched cloud config down via the addTrackedConfig upsert instead.
fetchCloudConfigs already dedupes by app_id (newest wins), so there is no
skip case left. Failed inserts now log the appId, appName, and reason.
…ext column (refs #95)

user_proton_configs.app_id is moving from bigint to text on the web side, so
the API will return app_id as a string. getCloudSyncStatus and the ManageTab
cloud-row lookups compared it to a numeric appId with ===, which would break
sync badges and the publish/restore actions once the column flips. Normalize
both sides with String() and key the fetch dedup map on the string form.
No behavior change while the column is still bigint.
Promote accumulated dev work to a stable release: Manage This Game QAM
button, GOG/Epic non-Steam submissions, cloud restore pulls down all
configs and fetches by linked account, game requirements disk cache,
cache stats overlay redesign, type-agnostic cloud app_id handling, and
assorted badge/scroll/compat/i18n fixes.
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

mdeguzis added 2 commits June 30, 2026 06:30
PR #96 failed the 95% diff-coverage gate. Cover the changed-but-untested lines:
gameSource.ts (new file, 0 -> 100%), userConfigs invalid appType branch, cloudSync
no-linked-user fetch + pushPluginSettings error/throw paths, metrics badge counters
and hourly-bucket load, and the game_requirements.py / game_source.py disk-cache and
Heroic native-id resolution. TS 693 + Python 336 tests pass.
Two fixes in the Native Pulse report modal:

- resolveAppName() in steamApps.ts falls back through SteamClient,
  appStore, and collectionStore before erroring on missing title, so a
  freshly added game whose overview has not populated yet still resolves
  a name.

- New Save draft button next to Submit persists every form answer to
  localStorage under pp:report-draft:{appId}[:{configKey}]. Reopening the
  modal restores where you left off; successful submit clears it.
@github-actions

github-actions Bot commented Jul 5, 2026

Copy link
Copy Markdown
Messages
📖 i18n: all 28 languages at 100% coverage (704 keys).

Generated by 🚫 dangerJS against b14b24b

mdeguzis added 2 commits July 5, 2026 13:50
Twelve keys were showing "same as English" placeholders in one or more
translation files -- enough to keep the Danger translation-coverage
check at 98.4-99.1% instead of the required 100%. Backfilled all of
them with real per-locale translations. Now every language reports
100% PASS.

Keys covered: autoUpdateStatus, compatToolsSection, lastChecked,
nextCheckAt, archFilter, resetFilters, gpuArch, manageOnWeb,
manageOnWebDesc, perReportWhatsThis, libraryBadgeShowNoData,
libraryBadgeShowNoDataDescription.

Ships a small scripts/backfill-translations.mjs so future placeholder
gaps can be closed the same way -- consumes a key -> lang -> string
map and rewrites each translation file in place, handling backtick,
single- and double-quoted arrow-function bodies.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant