Skip to content

fix(settings): prevent titlebar content bleed - #3315

Merged
steipete merged 1 commit into
steipete:mainfrom
LeoLin990405:fix/settings-header-opaque-backing
Sep 3, 2026
Merged

steipete merged 1 commit into
steipete:mainfrom
LeoLin990405:fix/settings-header-opaque-backing

Conversation

@LeoLin990405

@LeoLin990405 LeoLin990405 commented Aug 31, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Fixes #3235. The Settings window uses a transparent full-size titlebar while each detail pane hides its grouped-Form scroll background. The sidebar already supplies material behind the titlebar, but the detail column did not, so scrolled content composited through the native title and controls.

Fix

Apply the repair once at the shared PreferencesView detail boundary:

  • add a windowBackground visual-effect backing that extends through the safe area;
  • cover the detail-side titlebar strip with headerView material so scrolling content frosts underneath it while the native title remains above it;
  • size that strip from NSWindow.frame.height - contentLayoutRect.height. A GeometryReader inside the detail column observes zero because SwiftUI converts the top safe area into the scroll view's content inset.

This keeps the edge-to-edge transparent-titlebar sidebar design and changes no provider behavior.

The implementation and commit authorship remain @LeoLin990405's; maintainer work here is limited to rebase, review, automated coverage, and signed VM proof.

No changelog entry is included; release notes are generated at release time.

Verification

  • swift test --filter SettingsWindowAppearanceTests — 13/13 passed.
  • Full isolated local suite — 997 selections across 84 groups, all first-pass green with retries disabled, zero failed groups, and zero timeouts.
  • make check — passed, including SwiftFormat and strict SwiftLint.
  • Signed packaged-app VM comparison of this exact PreferencesView implementation at the same General-pane scroll offset and dark appearance: current main shows “Preferred Currency” bleeding through “General”; the candidate keeps the native title clean above a 32-pt detail material strip.
  • Final complete-candidate review found no actionable P0-P2 defects.

Before and after at the same scroll offset

@clawsweeper

clawsweeper Bot commented Aug 31, 2026

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Aug 31, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-08-31T09:19:39.575975Z 8d42c07 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@clawsweeper clawsweeper Bot added P2 Normal priority bug or improvement with limited blast radius. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Aug 31, 2026
@clawsweeper

clawsweeper Bot commented Aug 31, 2026 •

Copy link
Copy Markdown

Codex review: needs maintainer review before merge. Reviewed September 3, 2026, 12:34 AM ET / 04:34 UTC.

ClawSweeper review

What this changes

The PR adds AppKit material views to the Settings detail column and sizes a titlebar cover from the window layout inset so scrolled form content no longer appears behind the native title.

Merge readiness

✅ Ready for maintainer review

Keep open: this is a focused, proof-backed fix for the still-open Settings titlebar overlap, and current main lacks the shared detail backing it adds.

Priority: P2
Reviewed head: 325b49488dba674e4c8cfd26dd6e25bda2cc4cfa

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) A focused shared-layout repair with direct before/after packaged-app evidence and no confirmed correctness or security defect.
Proof confidence 🦞 diamond lobster (5/6) ✨ media proof bonus Sufficient (screenshot): The changed production owner is PreferencesView’s shared Settings detail layout; the captured PR evidence maps it to a signed packaged-app VM comparison of the General-pane scroll state and reports the after-fix titlebar strip remains clean rather than showing the “Preferred Currency” content.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Verification

Check Result Evidence
Real behavior Verified Sufficient (screenshot): The changed production owner is PreferencesView’s shared Settings detail layout; the captured PR evidence maps it to a signed packaged-app VM comparison of the General-pane scroll state and reports the after-fix titlebar strip remains clean rather than showing the “Preferred Currency” content.
Evidence reviewed 6 items Current main lacks the repair: The main-parent implementation frames the shared detail view and immediately adds only the resize-handle overlay; it has no detail material backing or titlebar cover.
Introduced repair is at the shared pane boundary: The verified PR delta adds a detail background, an AppKit-derived titlebar inset reader, and a noninteractive header-material overlay around the shared detail view, so all selected Settings panes receive the same treatment.
Existing window configuration creates the affected layout: The Settings window is intentionally configured with a transparent titlebar and full-size content view, matching the condition addressed by the repair.
Findings None None.
Security None None.

How this fits together

CodexBar’s Settings window presents a sidebar and a detail pane of grouped SwiftUI forms. The window’s transparent titlebar overlays those panes, so the detail pane needs its own backing material to keep scrolled content legible.

flowchart LR
    A[Settings window] --> B[Detail form pane]
    B --> C[Transparent titlebar]
    C --> D[Titlebar inset measurement]
    D --> E[Material cover]
    E --> F[Legible native title]
    B --> G[Detail background material]
Loading

Before merge

None.

Agent review details

Security

None.

Review metrics

Metric Value Why it matters
Production versus test delta production +118, tests +0 The added code is three small AppKit/SwiftUI layout helpers at one shared rendering seam; the PR supplies direct packaged-app visual proof.

Root-cause cluster

Relationship: fixed_by_candidate
Canonical: #3235
Summary: This PR is the concrete candidate repair for the reported Settings titlebar content bleed.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Technical review

Best possible solution:

Land the shared detail-boundary material repair after normal maintainer review, preserving the transparent-titlebar sidebar design while preventing form content from obscuring the Settings title.

Do we have a high-confidence way to reproduce the issue?

Yes: current source establishes a transparent full-size titlebar over detail forms with hidden scroll backgrounds, and the supplied VM before/after comparison exercises the affected General-pane scroll state.

Is this the best way to solve the issue?

Yes: applying the backing at PreferencesView’s shared detail boundary is the narrowest maintainable repair because it covers affected panes without changing provider, settings, or persistence behavior.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 01da8fc6ea2d.

Labels

Label justifications:

  • P2: This repairs a user-visible Settings-window legibility defect with a limited, localized blast radius.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (screenshot): The changed production owner is PreferencesView’s shared Settings detail layout; the captured PR evidence maps it to a signed packaged-app VM comparison of the General-pane scroll state and reports the after-fix titlebar strip remains clean rather than showing the “Preferred Currency” content.
  • proof: sufficient: Contributor real behavior proof is sufficient. The changed production owner is PreferencesView’s shared Settings detail layout; the captured PR evidence maps it to a signed packaged-app VM comparison of the General-pane scroll state and reports the after-fix titlebar strip remains clean rather than showing the “Preferred Currency” content.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. The changed production owner is PreferencesView’s shared Settings detail layout; the captured PR evidence maps it to a signed packaged-app VM comparison of the General-pane scroll state and reports the after-fix titlebar strip remains clean rather than showing the “Preferred Currency” content.

Evidence

What I checked:

  • Current main lacks the repair: The main-parent implementation frames the shared detail view and immediately adds only the resize-handle overlay; it has no detail material backing or titlebar cover. (Sources/CodexBar/PreferencesView.swift:110, 01da8fc6ea2d)
  • Introduced repair is at the shared pane boundary: The verified PR delta adds a detail background, an AppKit-derived titlebar inset reader, and a noninteractive header-material overlay around the shared detail view, so all selected Settings panes receive the same treatment. (Sources/CodexBar/PreferencesView.swift:125, 325b49488dba)
  • Existing window configuration creates the affected layout: The Settings window is intentionally configured with a transparent titlebar and full-size content view, matching the condition addressed by the repair. (Sources/CodexBar/PreferencesView.swift:402, 325b49488dba)
  • Scrollable forms hide their own backgrounds: Several Settings panes, including General, use hidden scroll backgrounds, making the common detail backing the appropriate ownership boundary. (Sources/CodexBar/PreferencesGeneralPane.swift:226, 325b49488dba)
  • Captured real-behavior proof: The supplied PR body ties a before/after screenshot to a signed packaged-app VM comparison at the same General-pane scroll offset, reporting that the candidate preserves a clean native title above a 32-point detail material strip.
  • Settings history routing: Feature history shows Peter Steinberger’s prior merged work on the edge-to-edge Settings sidebar and resizable Settings layout, making this a suitable routing candidate for the surrounding window behavior. (Sources/CodexBar/PreferencesView.swift:100, eb837d3d172d)

Likely related people:

  • Peter Steinberger: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Workflow

  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

History

Review history (2 earlier review cycles)
  • reviewed 2026-08-31T09:20:09.141Z sha 8d42c07 :: needs real behavior proof before merge. :: none
  • reviewed 2026-09-01T06:56:57.390Z sha eff608c :: needs maintainer review before merge. :: none

@LeoLin990405
LeoLin990405 force-pushed the fix/settings-header-opaque-backing branch from 8d42c07 to eff608c Compare September 1, 2026 06:51
@clawsweeper clawsweeper Bot added proof: sufficient Contributor real behavior proof is sufficient. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. labels Sep 1, 2026
@steipete
steipete force-pushed the fix/settings-header-opaque-backing branch from eff608c to 325b494 Compare September 3, 2026 04:29
@steipete steipete changed the title Back the settings detail titlebar region so content cannot bleed through fix(settings): prevent titlebar content bleed Sep 3, 2026
@steipete
steipete merged commit 6790f76 into steipete:main Sep 3, 2026
9 checks passed
@steipete

steipete commented Sep 3, 2026

Copy link
Copy Markdown
Owner

Maintainer closeout: the Settings detail column now owns a material backing through the full-size titlebar safe area. Scrolled Form content frosts beneath that strip while the native title stays above it; provider behavior and the edge-to-edge sidebar are unchanged.

Proof on exact head 325b49488dba674e4c8cfd26dd6e25bda2cc4cfa:

  • 13 focused Settings-window appearance tests passed.
  • Full isolated local suite: 997 selections / 84 groups, all first-pass green, zero retries and zero timeouts.
  • make check passed with clean formatting and zero lint violations.
  • Final P0-P2 review was clean.
  • A signed packaged-app comparison on macOS Tahoe reproduced the title overlap on main and verified the fix at the same scroll offset; the sanitized before/after image is embedded in the PR body.
  • CI run 33715246621 passed lint, both macOS test shards, both Linux builds/tests, musl, the aggregate gate, and security checks.

Merged as 6790f76d7a557a505022aad6687455f946cf7319; main was pulled and the merge tree verified clean locally.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P2 Normal priority bug or improvement with limited blast radius. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

overlapping title/body text due to missing opaque backing (transparency)

2 participants