Skip to content

fix(oled): full OLED coverage sweep + App Detail concurrency fix#47

Merged
The-Big-Mini merged 5 commits into
developfrom
claude/oled-coverage-and-bugfixes
Jun 28, 2026
Merged

fix(oled): full OLED coverage sweep + App Detail concurrency fix#47
The-Big-Mini merged 5 commits into
developfrom
claude/oled-coverage-and-bugfixes

Conversation

@The-Big-Mini

@The-Big-Mini The-Big-Mini commented Jun 28, 2026

Copy link
Copy Markdown
Owner

Changes

OLED coverage sweep — close every spot where a grey backdrop showed instead of pure black with OLED on:

  • Source Detail — content card had the same frame-after-background bug as App Detail: altBackground was painted on the content-sized rounded rect, then the call site expanded it with .frame(minHeight:), leaving the bottom transparent. Moved minHeight onto the card's own frame so the fill covers the full height.
  • App Extensions list — added .scrollContentBackground(.hidden) + altBackground; the default grouped grey was showing through.
  • Operations Logging list — same missing list-background pattern.

Audited and left as-is (verified): all five tab roots and the other migrated list screens already apply OLED-aware altBackground; the Authentication screen uses an intentional fixed SettingsBackground; card/icon-placeholder surfaces are deliberate elevation, not page-level leaks.

Concurrency

  • App DetailAppDetailModel's three notification observers fire on OperationQueue.main but their @Sendable blocks mutated the @MainActor appTick, tripping a Swift 6 isolation warning. Wrapped the mutation in MainActor.assumeIsolated.

Logic bugs (from a 3-area audit: Settings / tabs+detail / operations)

  • Anisette Server List — the server-list URL field fired a URLSession fetch on every keystroke (against each partial, invalid URL). Added a 300 ms debounce.
  • UpdatesprocessNextInQueue's async completion called updateQueue.removeFirst() unconditionally; guarded against an already-cleared queue to avoid a crash.

The audit otherwise found the migrated SwiftUI screens and the operation pipeline clean — no other critical/high logic bugs. One low-confidence self-update divergence (InstallAppOperation dropped an installing guard) was audited, judged a practical no-op, and documented in .claude/gotchas.md rather than touched (delicate self-update timing, near-zero upside).

🤖 Generated with Claude Code

https://claude.ai/code/session_017rnLQsvspk1uZDExv3rUxx

claude added 2 commits June 28, 2026 03:05
…creens)

Three OLED coverage gaps where a grey backdrop showed instead of pure black:

- SourceDetailView: same frame-after-background bug as AppDetailView — the content
  card painted altBackground on its content-sized rounded rect, then the call site
  expanded it with .frame(minHeight:) afterward, leaving the bottom transparent.
  Moved minHeight onto the card's own frame so the fill covers the full height.
- AppExtensionView: List had no scrollContentBackground(.hidden) + altBackground,
  so the default grouped grey showed through in OLED.
- OperationsLoggingControlView: same missing list-background pattern.

All five tab roots and other migrated list screens already apply the OLED-aware
altBackground; card/icon placeholder surfaces are left as intentional elevation.

https://claude.ai/code/session_017rnLQsvspk1uZDExv3rUxx
…vers

The three notification observers in AppDetailModel fire on OperationQueue.main but
their blocks are @sendable, so mutating the @mainactor appTick triggered a Swift 6
isolation warning ("main actor-isolated property can not be mutated from a Sendable
closure"). Since the blocks always run on the main thread, wrap the mutation in
MainActor.assumeIsolated — correct, no extra async hop, warning cleared.

https://claude.ai/code/session_017rnLQsvspk1uZDExv3rUxx
github-actions Bot added a commit that referenced this pull request Jun 28, 2026
@github-actions

github-actions Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Download the artifacts for this pull request (nightly.link):

@github-actions

Copy link
Copy Markdown
Contributor

Builds for this Pull Request are available at
MiniStore-0.6.5-pr.47.88c483e-dSYMs
MiniStore-0.6.5-pr.47.88c483e
build-logs-0.6.5-pr.47.88c483e
Have a nice day.

claude added 3 commits June 28, 2026 03:12
…eystroke

The Anisette Server List URL field's onChange fired getCurrentListOfServers() on
every keystroke, launching a URLSession request against each partial (invalid) URL.
The author had muted the toast ("don't spam") but left the fetch itself in place.
Debounce: cancel the pending fetch and wait 300ms for a typing pause before fetching.

https://claude.ai/code/session_017rnLQsvspk1uZDExv3rUxx
…ed queue

processNextInQueue's update completion runs on a later main-queue tick and calls
updateQueue.removeFirst() unconditionally. If the queue was cleared in that window
(navigation lost, a sibling failure, or cancel calling cancelRemainingQueue), the
removeFirst() would crash. Bail out when the queue is empty — cancelRemainingQueue
has already reset button states and progress.

https://claude.ai/code/session_017rnLQsvspk1uZDExv3rUxx
…ivergence

Document that InstallAppOperation.scheduleSelfUpdateBackgrounding dropped upstream's
`installing` guard flag. Audited 2026-06-28 and left as-is (practically a no-op since
installIPA blocks until the user backgrounds the app); recorded so a future session
doesn't re-discover it blind. Includes the parity-restore recipe if ever needed.

https://claude.ai/code/session_017rnLQsvspk1uZDExv3rUxx
github-actions Bot added a commit that referenced this pull request Jun 28, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Builds for this Pull Request are available at
MiniStore-0.6.5-pr.47.22f0352-dSYMs
MiniStore-0.6.5-pr.47.22f0352
build-logs-0.6.5-pr.47.22f0352
Have a nice day.

@The-Big-Mini The-Big-Mini merged commit 8da49a7 into develop Jun 28, 2026
1 check passed
@The-Big-Mini The-Big-Mini deleted the claude/oled-coverage-and-bugfixes branch July 1, 2026 04:11
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.

2 participants