Skip to content

Commit e68354b

Browse files
committed
feat: v1.10.0 - compat auto-update, reset filters, report analysis polish, unified confidence, i18n coverage
1 parent 09b0dec commit e68354b

18 files changed

Lines changed: 401 additions & 136 deletions

CHANGELOG.md

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,20 @@
22

33
All notable changes to Proton Pulse should be recorded here.
44

5+
## v1.10.0
6+
7+
- Compat tool auto-update now runs at startup for both Proton-GE and CachyOS Proton, throttled to once per 24h
8+
- Advanced Settings shows compat tool auto-update status with full timestamps and next check time
9+
- Per-report analysis modal: score pill and What's this button are now horizontally aligned; EXCELLENT tier label sits below
10+
- Reset Filters button added to the report filter row
11+
- GPU architecture shown under GPU tier in report details
12+
- Log viewer inline preview fills the full available space
13+
- Filters modal has a single Close button
14+
- Confidence badge in Manage This Game header now matches the Analysis tab
15+
516
## v1.9.0
617

7-
- GPU architecture badge (e.g. RDNA2, Ada Lovelace) on each report card next to the GPU model
8-
- GPU architecture filter in the report view so you can narrow results to your GPU family
9-
- Compatibility tool picker in the profile editor: choose tool type (Proton, Wine, etc.) and version in separate rows
10-
- Proton-CachyOS added to the compatibility tool selector
11-
- Per-report analysis modal: press Y on any report card to see a full confidence breakdown for that report
12-
- Release notes modal: Steam-style overlay that surfaces GitHub release notes on update and lets you browse version history with L/R
13-
- Scroll-on-focus in the Analysis tab with readable tier badges
14-
- Show build version in developer update labels (v1.9.0-<commit>) on Settings > Updates
15-
- Fix: "vDeveloper" label on Settings > Updates page across all locales
18+
- Replace filter dropdowns with Filters modal button
1619

1720
## v1.7.5
1821

@@ -147,6 +150,8 @@ All notable changes to Proton Pulse should be recorded here.
147150

148151
## Unreleased
149152

153+
- Sync header confidence badge with Analysis tab by using computeGameStats
154+
150155
## v1.7.2 pre-release
151156

152157
- Bump to 1.7.2 -- updater pre-release channel fix

metrics/ui-string-scan.json

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,96 @@
5858
"kind": "jsx",
5959
"text": "Open Compatibility Platform"
6060
},
61+
{
62+
"file": "src/components/PerReportAnalysisModal.tsx",
63+
"line": 183,
64+
"column": 16,
65+
"kind": "jsx",
66+
"text": "What's this?"
67+
},
68+
{
69+
"file": "src/components/PerReportAnalysisModal.tsx",
70+
"line": 190,
71+
"column": 36,
72+
"kind": "jsx",
73+
"text": "pts"
74+
},
75+
{
76+
"file": "src/components/ReportDetailModal.tsx",
77+
"line": 592,
78+
"column": 37,
79+
"kind": "string",
80+
"text": "GPU Arch"
81+
},
82+
{
83+
"file": "src/components/ReportDetailModal.tsx",
84+
"line": 1659,
85+
"column": 32,
86+
"kind": "string",
87+
"text": "GPU Arch"
88+
},
89+
{
90+
"file": "src/components/ScoringGuideModal.tsx",
91+
"line": 116,
92+
"column": 108,
93+
"kind": "jsx",
94+
"text": "Report Score Tiers"
95+
},
6196
{
6297
"file": "src/components/tabs/ConfigureTab.tsx",
63-
"line": 278,
98+
"line": 261,
99+
"column": 91,
100+
"kind": "jsx",
101+
"text": "Filters"
102+
},
103+
{
104+
"file": "src/components/tabs/ConfigureTab.tsx",
105+
"line": 275,
64106
"column": 37,
65107
"kind": "jsx",
66108
"text": "Architecture"
109+
},
110+
{
111+
"file": "src/components/tabs/ConfigureTab.tsx",
112+
"line": 1530,
113+
"column": 21,
114+
"kind": "jsx",
115+
"text": "Reset Filters"
116+
},
117+
{
118+
"file": "src/components/tabs/GeneralSettingsTab.tsx",
119+
"line": 194,
120+
"column": 15,
121+
"kind": "jsx",
122+
"text": "Compat Tool Auto-Update"
123+
},
124+
{
125+
"file": "src/components/tabs/GeneralSettingsTab.tsx",
126+
"line": 207,
127+
"column": 40,
128+
"kind": "jsx",
129+
"text": "Auto-update"
130+
},
131+
{
132+
"file": "src/components/tabs/GeneralSettingsTab.tsx",
133+
"line": 212,
134+
"column": 43,
135+
"kind": "jsx",
136+
"text": "Last checked"
137+
},
138+
{
139+
"file": "src/components/tabs/GeneralSettingsTab.tsx",
140+
"line": 213,
141+
"column": 43,
142+
"kind": "jsx",
143+
"text": "Next check at"
144+
},
145+
{
146+
"file": "src/components/tabs/GeneralSettingsTab.tsx",
147+
"line": 1505,
148+
"column": 13,
149+
"kind": "jsx",
150+
"text": "Compat Tools"
67151
}
68152
]
69153
}

metrics/ui-string-scan.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,16 @@ Potential hardcoded UI strings found outside the translation tree.
55
| `src/components/BrandLogoWide.tsx` | 23 | jsx | Proton |
66
| `src/components/BrandLogoWide.tsx` | 23 | jsx | Pulse |
77
| `src/components/BrandLogoWide.tsx` | 26 | jsx | Open Compatibility Platform |
8-
| `src/components/tabs/ConfigureTab.tsx` | 278 | jsx | Architecture |
8+
| `src/components/PerReportAnalysisModal.tsx` | 183 | jsx | What's this? |
9+
| `src/components/PerReportAnalysisModal.tsx` | 190 | jsx | pts |
10+
| `src/components/ReportDetailModal.tsx` | 592 | string | GPU Arch |
11+
| `src/components/ReportDetailModal.tsx` | 1659 | string | GPU Arch |
12+
| `src/components/ScoringGuideModal.tsx` | 116 | jsx | Report Score Tiers |
13+
| `src/components/tabs/ConfigureTab.tsx` | 261 | jsx | Filters |
14+
| `src/components/tabs/ConfigureTab.tsx` | 275 | jsx | Architecture |
15+
| `src/components/tabs/ConfigureTab.tsx` | 1530 | jsx | Reset Filters |
16+
| `src/components/tabs/GeneralSettingsTab.tsx` | 194 | jsx | Compat Tool Auto-Update |
17+
| `src/components/tabs/GeneralSettingsTab.tsx` | 207 | jsx | Auto-update |
18+
| `src/components/tabs/GeneralSettingsTab.tsx` | 212 | jsx | Last checked |
19+
| `src/components/tabs/GeneralSettingsTab.tsx` | 213 | jsx | Next check at |
20+
| `src/components/tabs/GeneralSettingsTab.tsx` | 1505 | jsx | Compat Tools |

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "decky-proton-pulse",
3-
"version": "1.9.0",
3+
"version": "1.10.0",
44
"description": "Decky plugin that ranks ProtonDB reports by system compatibility and applies launch options.",
55
"type": "module",
66
"scripts": {
@@ -44,4 +44,4 @@
4444
"react-icons": "^5.3.0",
4545
"tslib": "^2.7.0"
4646
}
47-
}
47+
}

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "decky-proton-pulse"
3-
version = "1.8.0"
3+
version = "1.9.0"
44
requires-python = ">=3.11"
55
dependencies = [
66
"aiohttp>=3.9",

scripts/deploy.sh

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -553,19 +553,18 @@ if [[ "$GH_RELEASE" == "dev" ]]; then
553553
gh release delete "$DEV_TAG" --repo mdeguzis/decky-proton-pulse --yes --cleanup-tag
554554
fi
555555

556-
# Rename the asset to embed the commit sha so downloads from the release
557-
# page have a unique filename per build. The plugin updater extracts based
558-
# on the zip's top-level dir name (which stays "decky-proton-pulse") so
559-
# renaming the outer file doesn't break install
560-
DEV_ZIP_NAME="decky-proton-pulse-dev-${COMMIT_SHA}.zip"
556+
# Use a consistent zip name so the download URL never goes 404 between
557+
# a check_for_update call and the actual install. The SHA is in the release
558+
# title and notes; the zip content is identical either way.
559+
DEV_ZIP_NAME="decky-proton-pulse-dev.zip"
561560
cp "./${ZIP_NAME}" "./${DEV_ZIP_NAME}"
562561

563562
echo "Creating dev release at ${COMMIT_SHA} with ${DEV_ZIP_NAME}..."
564563
gh release create "$DEV_TAG" "./${DEV_ZIP_NAME}" \
565564
--repo mdeguzis/decky-proton-pulse \
566565
--title "$DEV_TITLE" \
567566
--notes-file "$DEV_NOTES_FILE" \
568-
--target main \
567+
--target dev \
569568
--prerelease
570569

571570
echo "Done: https://github.com/mdeguzis/decky-proton-pulse/releases/tag/${DEV_TAG}"

src/components/LogViewer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export function LogViewer() {
4242

4343
return (
4444
<div style={{
45-
maxHeight: 200,
45+
height: 340,
4646
overflowY: 'auto',
4747
background: 'rgba(0,0,0,0.4)',
4848
borderRadius: 4,

src/components/LogViewerModal.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ export function LogViewerModal({ logs, entryCount, closeModal }: Props) {
153153
display: 'flex',
154154
flexDirection: 'column',
155155
height: 'calc(100vh - 88px)',
156-
padding: '12px 16px 20px',
156+
padding: '12px 16px 0',
157157
boxSizing: 'border-box',
158158
}}
159159
>

src/components/PerReportAnalysisModal.tsx

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
// schema on proton-pulse.com/confidence.html so users can cross-reference.
2020

2121
import { ModalRoot, Focusable, DialogButton, showModal } from '@decky/ui';
22+
import scoringInfo from '../data/scoring-info.json';
23+
import { ScoringGuideModal } from './ScoringGuideModal';
2224
import { computeGameStats } from '../lib/gameStats';
2325
import { computeConfidenceBreakdown } from '../lib/scoring';
2426
import { useFocusableScroll } from '../lib/useFocusableScroll';
@@ -132,18 +134,22 @@ function PerReportAnalysisModal({ report, allReports, configs, sysInfo, closeMod
132134
const ratingColor = RATING_COLORS[report.rating] ?? '#888';
133135
const contributionColor = contributionDelta > 0 ? '#4caf50' : contributionDelta < 0 ? '#e57373' : '#9bb5cc';
134136

137+
// Qualitative tier derived from scoring-info.json (shared with web app)
138+
const scoreTier = [...scoringInfo.reportScoreTiers.tiers]
139+
.sort((a, b) => b.min - a.min)
140+
.find((tier) => breakdown.total >= tier.min) ?? scoringInfo.reportScoreTiers.tiers[scoringInfo.reportScoreTiers.tiers.length - 1];
141+
const scoreLabel = scoreTier.label;
142+
const scoreLabelColor = scoreTier.color;
143+
135144
return (
136145
<ModalRoot onCancel={closeModal}>
137146
<Focusable
138147
onCancelButton={closeModal}
139148
style={{
140149
display: 'flex',
141150
flexDirection: 'column',
142-
width: 720,
151+
width: '100%',
143152
maxHeight: '85vh',
144-
background: '#0f1822',
145-
border: '1px solid rgba(102, 192, 244, 0.18)',
146-
borderRadius: 6,
147153
overflow: 'hidden',
148154
}}
149155
>
@@ -168,14 +174,23 @@ function PerReportAnalysisModal({ report, allReports, configs, sysInfo, closeMod
168174
{formatProtonLabel(report.protonVersion)} . {t().common.daysAgo(report.recencyDays)}
169175
</div>
170176
</div>
171-
{/* Total confidence pill on the right (matches the card's pill style) */}
172-
<span style={{
173-
background: 'rgba(102, 192, 244, 0.18)',
174-
color: '#e0ebf3',
175-
fontSize: 13, fontWeight: 700,
176-
padding: '4px 14px', borderRadius: 999,
177-
border: '1px solid rgba(102, 192, 244, 0.35)',
178-
}}>{breakdown.total}</span>
177+
{/* Total confidence score + help button */}
178+
<div style={{ display: 'flex', flexDirection: 'column', alignItems: 'flex-end', gap: 3 }}>
179+
<div style={{ display: 'flex', alignItems: 'center', gap: 6 }}>
180+
<DialogButton
181+
style={{ width: 'auto', height: 28, minWidth: 0, padding: '0 10px', borderRadius: 999, fontSize: 10, fontWeight: 700, display: 'flex', alignItems: 'center', justifyContent: 'center', whiteSpace: 'nowrap' }}
182+
onClick={() => showModal(<ScoringGuideModal />)}
183+
>{t().extras!.perReportWhatsThis!()}</DialogButton>
184+
<span style={{
185+
background: 'rgba(102, 192, 244, 0.18)',
186+
color: '#e0ebf3',
187+
fontSize: 13, fontWeight: 700,
188+
padding: '4px 14px', borderRadius: 999,
189+
border: '1px solid rgba(102, 192, 244, 0.35)',
190+
}}>{breakdown.total} pts</span>
191+
</div>
192+
<span style={{ fontSize: 9, color: scoreLabelColor, fontWeight: 700, textTransform: 'uppercase', letterSpacing: '0.06em', marginRight: 10 }}>{scoreLabel}</span>
193+
</div>
179194
</div>
180195

181196
{/* Scrollable body */}

src/components/ReportCard.tsx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -159,11 +159,6 @@ export function ReportCard({ report, selected, focused = false, systemGpuVendor,
159159
<span style={{ fontSize: 11, color: gpuMismatch ? '#f59e0b' : '#d9e8f4' }}>
160160
{report.gpuTier.toUpperCase()}
161161
</span>
162-
{report.gpuArchitecture ? (
163-
<span style={{ fontSize: 10, color: '#6ba4d4', background: 'rgba(100,160,220,0.15)', border: '1px solid rgba(100,160,220,0.3)', borderRadius: 999, padding: '1px 6px', marginTop: 2 }}>
164-
{report.gpuArchitecture}
165-
</span>
166-
) : null}
167162
<div style={{ display: 'flex', alignItems: 'center', gap: 6, marginTop: 2 }}>
168163
<span
169164
role="button"

0 commit comments

Comments
 (0)