Skip to content

Commit a6c8d13

Browse files
committed
fixed things 2
1 parent 3af610a commit a6c8d13

26 files changed

+219
-87
lines changed

docs/release/guides/reproducible-builds.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,6 @@ Lock the base image digest (e.g. `python:3.13.7-slim@sha256:...`) for full repro
162162

163163
## Related Documentation
164164

165-
- [Release Deployment Runbook](../release/release-deployment-runbook.md) – Full release process and build
166-
- [Checksum Signing](../release/checksum-signing.md) – GPG signing of SHA256SUMS
167-
- [Key Management](../release/key-management.md) – Certificate handling
165+
- [Release Deployment Runbook](../release-deployment-runbook.md) – Full release process and build
166+
- [Checksum Signing](../checksum-signing.md) – GPG signing of SHA256SUMS
167+
- [Key Management](../key-management.md) – Certificate handling

docs/roadmap.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Roadmap
2+
3+
High-level planning and roadmap are maintained in the release section:
4+
5+
- **[Maintenance Roadmap](release/maintenance-roadmap.md)** — Refactors, upgrades, tech-debt backlog, and review cadence.
6+
7+
For release planning and schedule, see [Release Schedule](release/release-schedule.md) and [Release Strategy](release/release-strategy.md).

src/cuepoint/services/onboarding_service.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,4 +188,4 @@ def _set_state(
188188
onboarding_dismissed=onboarding_dismissed,
189189
onboarding_version=onboarding_version,
190190
)
191-
)
191+
)

src/cuepoint/ui/dialogs/run_summary_dialog.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,16 @@ def _setup_ui(self) -> None:
5656
# Single line: playlist + key stats
5757
stats = (
5858
f"{self._summary.total_tracks} tracks, {self._summary.matched} matched"
59-
+ (f", {self._summary.unmatched} unmatched" if self._summary.unmatched else "")
60-
+ (f", {self._summary.low_confidence} low confidence" if self._summary.low_confidence else "")
59+
+ (
60+
f", {self._summary.unmatched} unmatched"
61+
if self._summary.unmatched
62+
else ""
63+
)
64+
+ (
65+
f", {self._summary.low_confidence} low confidence"
66+
if self._summary.low_confidence
67+
else ""
68+
)
6169
+ f" — {self._summary.duration_sec:.1f}s"
6270
)
6371
if self._summary.error_count or self._summary.warning_count:

src/cuepoint/ui/dialogs/settings_dialog.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,9 @@ def init_ui(self):
9191

9292
# Connect change signals to update Apply button state
9393
self.config_panel.settings_changed.connect(self._update_apply_button)
94-
self.config_panel.preflight_check.stateChanged.connect(self._update_apply_button)
94+
self.config_panel.preflight_check.stateChanged.connect(
95+
self._update_apply_button
96+
)
9597
self.config_panel.checkpoint_every_spin.valueChanged.connect(
9698
self._update_apply_button
9799
)

src/cuepoint/ui/main_window.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1234,7 +1234,9 @@ def create_menu_bar(self) -> None:
12341234
diagnostics_menu.addAction(report_issue_action)
12351235

12361236
test_sentry_action = QAction("Send &test event to Sentry", self)
1237-
test_sentry_action.setToolTip("Send a test error to Sentry to verify reporting is working")
1237+
test_sentry_action.setToolTip(
1238+
"Send a test error to Sentry to verify reporting is working"
1239+
)
12381240
test_sentry_action.triggered.connect(self._on_test_sentry_report)
12391241
diagnostics_menu.addAction(test_sentry_action)
12401242

@@ -1898,7 +1900,7 @@ def _on_test_sentry_report(self) -> None:
18981900
self,
18991901
"Sentry test",
19001902
"Error reporting is off.\n\n"
1901-
"Enable it in Settings → Privacy → \"Send error reports to help fix bugs\", "
1903+
'Enable it in Settings → Privacy → "Send error reports to help fix bugs", '
19021904
"then try again.",
19031905
QMessageBox.Ok,
19041906
)
@@ -3086,13 +3088,16 @@ def _download_and_install_update(self, update_info: Dict) -> None:
30863088
)
30873089
return
30883090
else:
3089-
logger.warning("Update has no checksum in appcast (e.g. EdDSA only)")
3091+
logger.warning(
3092+
"Update has no checksum in appcast (e.g. EdDSA only)"
3093+
)
30903094
reply = QMessageBox.warning(
30913095
self,
30923096
"Update Not Verified",
30933097
"This update does not include a checksum in the feed, so the download could not be verified.\n\n"
30943098
"You can install anyway (download was over HTTPS from the release server), or open the release page to download manually.",
3095-
QMessageBox.StandardButton.Ok | QMessageBox.StandardButton.Cancel,
3099+
QMessageBox.StandardButton.Ok
3100+
| QMessageBox.StandardButton.Cancel,
30963101
QMessageBox.StandardButton.Ok,
30973102
)
30983103
if reply != QMessageBox.StandardButton.Ok:
@@ -3145,9 +3150,7 @@ def _show_manual_install_dialog(
31453150
msg.setWindowTitle(title)
31463151
msg.setText(message)
31473152
msg.addButton(QMessageBox.StandardButton.Cancel)
3148-
update_btn = msg.addButton(
3149-
"Update manually", QMessageBox.ButtonRole.ActionRole
3150-
)
3153+
update_btn = msg.addButton("Update manually", QMessageBox.ButtonRole.ActionRole)
31513154
msg.exec()
31523155
if msg.clickedButton() == update_btn:
31533156
self._open_installer_folder(installer_path)
@@ -3220,8 +3223,7 @@ def _install_update(self, installer_path: str) -> None:
32203223
logging.error(f"Update installation failed: {e}")
32213224
self._show_manual_install_dialog(
32223225
"Installation Error",
3223-
f"Failed to install update:\n\n{str(e)}\n\n"
3224-
"Please install manually.",
3226+
f"Failed to install update:\n\n{str(e)}\n\nPlease install manually.",
32253227
installer_path,
32263228
)
32273229

src/cuepoint/update/update_checker.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -189,13 +189,17 @@ def _fetch_appcast(self, url: str, timeout: int) -> bytes:
189189
try:
190190
try:
191191
import certifi
192+
192193
ssl_context = ssl.create_default_context(cafile=certifi.where())
193194
except ImportError:
194195
ssl_context = ssl.create_default_context()
195196
except Exception as ssl_error:
196197
import logging
198+
197199
logger = logging.getLogger(__name__)
198-
logger.error(f"Failed to create SSL context: {ssl_error}", exc_info=True)
200+
logger.error(
201+
f"Failed to create SSL context: {ssl_error}", exc_info=True
202+
)
199203
raise UpdateCheckError(f"SSL context creation failed: {ssl_error}")
200204

201205
# Fetch with timeout
@@ -204,13 +208,18 @@ def _fetch_appcast(self, url: str, timeout: int) -> bytes:
204208
request, timeout=timeout, context=ssl_context
205209
) as response:
206210
if response.status != 200:
207-
raise UpdateCheckError(f"HTTP {response.status}: {response.reason}")
211+
raise UpdateCheckError(
212+
f"HTTP {response.status}: {response.reason}"
213+
)
208214

209215
return response.read()
210216
except TimeoutError as timeout_error:
211217
import logging
218+
212219
logger = logging.getLogger(__name__)
213-
logger.error(f"Request timeout fetching appcast from {url}: {timeout_error}")
220+
logger.error(
221+
f"Request timeout fetching appcast from {url}: {timeout_error}"
222+
)
214223
raise UpdateCheckError(f"Request timeout: {timeout_error}")
215224

216225
except urllib.error.URLError as e:
@@ -338,8 +347,10 @@ def _parse_item(self, item: ET.Element) -> Optional[Dict]:
338347
checksum = enclosure.get(f"{{{self.SPARKLE_NS}}}sha256")
339348
if checksum:
340349
checksum = checksum.strip().lower()
341-
if not checksum and signature and PackageIntegrityVerifier.is_sha256_hex(
342-
signature.strip().lower()
350+
if (
351+
not checksum
352+
and signature
353+
and PackageIntegrityVerifier.is_sha256_hex(signature.strip().lower())
343354
):
344355
checksum = signature.strip().lower()
345356
if checksum and not PackageIntegrityVerifier.is_sha256_hex(checksum):
@@ -529,7 +540,9 @@ def _find_latest_update(self, items: List[Dict]) -> Optional[Dict]:
529540
elif base_comparison == 0:
530541
# Same base version (e.g. 1.0.0 vs 1.0.0-feb10): do not offer as update.
531542
# Only offer when base version increases (e.g. 1.0.0 -> 1.0.2).
532-
logger.debug(f"Same base version: {base_candidate} == {base_current}, skipping")
543+
logger.debug(
544+
f"Same base version: {base_candidate} == {base_current}, skipping"
545+
)
533546
continue
534547
# else: base_comparison < 0, candidate is older, skip
535548

src/cuepoint/update/update_installer.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,9 +200,7 @@ def _install_windows(self, installer_path: Path) -> tuple[bool, Optional[str]]:
200200

201201
# Fallback: Launch installer directly (visible, no /S)
202202
if not launcher_ps1 or not launcher_ps1.exists():
203-
logger.info(
204-
"Launcher script not found, launching installer directly"
205-
)
203+
logger.info("Launcher script not found, launching installer directly")
206204
logger.info("Note: Installer will detect if app is running")
207205
logger.info(f"Installer path: {installer_path}")
208206
logger.info(f"Installer absolute path: {installer_path.resolve()}")

0 commit comments

Comments
 (0)