Remove the top chrome strip from styled documents #6

Open
opened 2026-09-13 13:34:40 +00:00 by kayg · 31 comments
Owner

Request and current status

Earlier toolbar modifier did not establish a fix. Background-only top-safe-area candidatea1a8b163 reviewed, not visually verified.

Acceptance

Use public native APIs; preserve toolbar, traffic lights, tabs, drag regions and text layout. Verify an actual styled note/background image in active/inactive and resized windows. Empty-viewer screenshots cannot close this issue.

Keep open until the user-facing outcome is verified in a delivered build. Source review or a successful build alone is not completion.

## Request and current status Earlier toolbar modifier did not establish a fix. Background-only top-safe-area candidatea1a8b163 reviewed, not visually verified. ## Acceptance Use public native APIs; preserve toolbar, traffic lights, tabs, drag regions and text layout. Verify an actual styled note/background image in active/inactive and resized windows. Empty-viewer screenshots cannot close this issue. Keep open until the user-facing outcome is verified in a delivered build. Source review or a successful build alone is not completion.
Author
Owner

Candidate delivery update:

  • Candidate commit: a1a8b163 (Extend note background through top safe area) on wave16/document-background-edge.
  • File: App/Sources/Viewer/ViewerView.swift.
  • Scope: only NoteBackgroundView receives .ignoresSafeArea(.container, edges: .top); the note card frame, editor/text layout, padding, tabs, controls, and toolbar geometry are unchanged.
  • Source check: git diff --check passed.
  • Runtime status: pending an actual styled note/background-image VM render in active and inactive windows, including resize. Empty-viewer screenshots and source review do not close this issue.
Candidate delivery update: - Candidate commit: `a1a8b163` (`Extend note background through top safe area`) on `wave16/document-background-edge`. - File: `App/Sources/Viewer/ViewerView.swift`. - Scope: only `NoteBackgroundView` receives `.ignoresSafeArea(.container, edges: .top)`; the note card frame, editor/text layout, padding, tabs, controls, and toolbar geometry are unchanged. - Source check: `git diff --check` passed. - Runtime status: pending an actual styled note/background-image VM render in active and inactive windows, including resize. Empty-viewer screenshots and source review do not close this issue.
Author
Owner

Root integrated the reviewed focus/multiselection stack66c43fa4, margin reductiona876821f, explicit-return repaircb9b7b85 and styled-background candidatea1a8b163. Integration tip37c5d40d now contains all four with clean cherry-picks. Text's compounded inset is reduced while preserving a stable handle gutter. Source review is complete; compile/mounted/runtime verification of this combined tip is pending. Build waits for the exclusive compiler-idle performance capture to finish. No desktop replacement or UI acceptance claim yet.

Root integrated the reviewed focus/multiselection stack66c43fa4, margin reductiona876821f, explicit-return repaircb9b7b85 and styled-background candidatea1a8b163. Integration tip37c5d40d now contains all four with clean cherry-picks. Text's compounded inset is reduced while preserving a stable handle gutter. Source review is complete; compile/mounted/runtime verification of this combined tip is pending. Build waits for the exclusive compiler-idle performance capture to finish. No desktop replacement or UI acceptance claim yet.
Author
Owner

Build pipeline update — /root/build_pipeline_recover (sole builder)
Marker: BUILD-HOLD-37C5-ISSUE6-20260913

  • Worktree/branch: /Users/kayg/Developer/calternal-app/.worktrees/editor-overnight-combined / wave14/editor-overnight-combined
  • Current state: exact inputs prepared; compile intentionally held while the exclusive 6ca85fd2 performance capture is active. No compiler or test process was started for this revision.
  • Integration revision: 37c5d40de40a2d0b279aad8d13d6f68837533c2d; tree a4ab6f472e41dc4ad43e6f4af3aade68fcee5713; 259 verified inputs. Background safe-area commit is exact tip 37c5d40de40a2d0b279aad8d13d6f68837533c2d, parent c02320f963b6c6e76cdd19996e63114c4fb990e0.
  • Immutable source archive SHA-256: 927b248d34f322259770c52b9c2690878a532b82ce49d843117e3fd8d13f3480; source manifest SHA-256: 18252bbb20e8639297a378b0f4175fc26090b66d6f34741a42ecf77ccfd5ac46.
  • The queued package selectors exercise selection/hover/drag behavior; they do not prove styled-document top chrome.
  • Next action: after the hold clears and focused package gates pass, build/stage the exact Release for styled-note active/inactive/resized VM and user preview checks.

Limitations: no compile, Release, styled-note screenshot, active/inactive/resized-window check, VM QA, or user acceptance exists for this exact integration. The issue remains open.

**Build pipeline update — `/root/build_pipeline_recover` (sole builder)** Marker: `BUILD-HOLD-37C5-ISSUE6-20260913` - Worktree/branch: `/Users/kayg/Developer/calternal-app/.worktrees/editor-overnight-combined` / `wave14/editor-overnight-combined` - Current state: **exact inputs prepared; compile intentionally held** while the exclusive 6ca85fd2 performance capture is active. No compiler or test process was started for this revision. - Integration revision: `37c5d40de40a2d0b279aad8d13d6f68837533c2d`; tree `a4ab6f472e41dc4ad43e6f4af3aade68fcee5713`; 259 verified inputs. Background safe-area commit is exact tip `37c5d40de40a2d0b279aad8d13d6f68837533c2d`, parent `c02320f963b6c6e76cdd19996e63114c4fb990e0`. - Immutable source archive SHA-256: `927b248d34f322259770c52b9c2690878a532b82ce49d843117e3fd8d13f3480`; source manifest SHA-256: `18252bbb20e8639297a378b0f4175fc26090b66d6f34741a42ecf77ccfd5ac46`. - The queued package selectors exercise selection/hover/drag behavior; they do **not** prove styled-document top chrome. - Next action: after the hold clears and focused package gates pass, build/stage the exact Release for styled-note active/inactive/resized VM and user preview checks. Limitations: no compile, Release, styled-note screenshot, active/inactive/resized-window check, VM QA, or user acceptance exists for this exact integration. The issue remains open.
Author
Owner

Build started — /root/build_pipeline_recover (sole builder)
Marker: BUILD-START-37C5-ISSUE6-20260913

  • Worktree/branch: /Users/kayg/Developer/calternal-app/.worktrees/editor-overnight-combined / wave14/editor-overnight-combined.
  • Performance owner released the exclusive compiler hold. Package compile has now started on agents@mbp; no local build and no central mutation.
  • Exact revision: 37c5d40de40a2d0b279aad8d13d6f68837533c2d; tree: a4ab6f472e41dc4ad43e6f4af3aade68fcee5713; 259 verified inputs.
  • Source archive SHA-256: 927b248d34f322259770c52b9c2690878a532b82ce49d843117e3fd8d13f3480; manifest SHA-256: 18252bbb20e8639297a378b0f4175fc26090b66d6f34741a42ecf77ccfd5ac46.
  • Focused selectors: testFocusClickAndModifierClicksUseNativeFullBlockSelections, testBlockHandleAppearsOnlyForHoverAndStaysReachableDuringInteraction, and testBlockDragPreviewTargetGeometryAndFeedbackCleanup.
  • Next action: run all three focused tests after compile, then produce and stage the exact Release only if all pass. Build, runtime verification, delivery, and user acceptance remain distinct.
**Build started — `/root/build_pipeline_recover` (sole builder)** Marker: `BUILD-START-37C5-ISSUE6-20260913` - Worktree/branch: `/Users/kayg/Developer/calternal-app/.worktrees/editor-overnight-combined` / `wave14/editor-overnight-combined`. - Performance owner released the exclusive compiler hold. Package compile has now started on `agents@mbp`; no local build and no central mutation. - Exact revision: `37c5d40de40a2d0b279aad8d13d6f68837533c2d`; tree: `a4ab6f472e41dc4ad43e6f4af3aade68fcee5713`; 259 verified inputs. - Source archive SHA-256: `927b248d34f322259770c52b9c2690878a532b82ce49d843117e3fd8d13f3480`; manifest SHA-256: `18252bbb20e8639297a378b0f4175fc26090b66d6f34741a42ecf77ccfd5ac46`. - Focused selectors: `testFocusClickAndModifierClicksUseNativeFullBlockSelections`, `testBlockHandleAppearsOnlyForHoverAndStaysReachableDuringInteraction`, and `testBlockDragPreviewTargetGeometryAndFeedbackCleanup`. - Next action: run all three focused tests after compile, then produce and stage the exact Release only if all pass. Build, runtime verification, delivery, and user acceptance remain distinct.
Author
Owner

QA plan for the pending exact 37c VM candidate is recorded at /tmp/qa-runs/20260913-37c-prep/37c-plan.md (shared summary will be copied with candidate evidence). This is a plan only; no outcome is claimed before the artifact is hash-verified and a fresh native post-action frame proves the target state.

Issue-specific acceptance for #6 will be exercised with a synthetic/disposable launch only. Each route uses fresh window-local screenshot coordinates with foreground delivery and a post-action screenshot plus viewer/editor state. Virtualized offscreen AX rows and driver return values are insufficient evidence.

QA plan for the pending exact 37c VM candidate is recorded at `/tmp/qa-runs/20260913-37c-prep/37c-plan.md` (shared summary will be copied with candidate evidence). This is a plan only; no outcome is claimed before the artifact is hash-verified and a fresh native post-action frame proves the target state. Issue-specific acceptance for #6 will be exercised with a synthetic/disposable launch only. Each route uses fresh window-local screenshot coordinates with foreground delivery and a post-action screenshot plus viewer/editor state. Virtualized offscreen AX rows and driver return values are insufficient evidence.
Author
Owner

Preview build provenance for the current integrated UI candidate, produced by build worker /root/build_pipeline_recover:

  • Exact source 37c5d40de40a2d0b279aad8d13d6f68837533c2d; tree a4ab6f472e41dc4ad43e6f4af3aade68fcee5713; 259 verified inputs from .worktrees/editor-overnight-combined.
  • Source archive SHA-256 927b248d34f322259770c52b9c2690878a532b82ce49d843117e3fd8d13f3480; manifest SHA-256 18252bbb20e8639297a378b0f4175fc26090b66d6f34741a42ecf77ccfd5ac46.
  • Release arm64 compile/package PASS on agents@mbp. Zip SHA-256 72a344ce72ec1d848703af89f71c11ac3255077df24e0cf155168bbdcd6b6dfa; executable SHA-256 53d72abd06aca991ea8dfde7be807dd0959185da601fc83461c8b8e6daa2ae51; strict codesign after fresh unzip and byte-for-byte bundle diff PASS.
  • Local artifact /Users/Shared/CalternalBuilds/37c5d40de40a-150324a1/Calternal-37c5d40de40a-Release-arm64.zip; VM artifact /Users/lume/CalternalQA/37c5d40de40a-150324a1/Calternal-37c5d40de40a-Release-arm64.zip.
  • Receipt /Users/Shared/CalternalBuilds/37c5d40de40a-150324a1/archive-verify.json.

This build worker ran no chrome-specific UI test and no GUI. Actual styled-note active/inactive/resized chrome still needs VM visual verification and user review. State is built/staged only; keep the issue open.

<!-- BUILD-RESULT-37C5-ISSUE6-20260913 --> Preview build provenance for the current integrated UI candidate, produced by build worker `/root/build_pipeline_recover`: - Exact source `37c5d40de40a2d0b279aad8d13d6f68837533c2d`; tree `a4ab6f472e41dc4ad43e6f4af3aade68fcee5713`; 259 verified inputs from `.worktrees/editor-overnight-combined`. - Source archive SHA-256 `927b248d34f322259770c52b9c2690878a532b82ce49d843117e3fd8d13f3480`; manifest SHA-256 `18252bbb20e8639297a378b0f4175fc26090b66d6f34741a42ecf77ccfd5ac46`. - Release arm64 compile/package PASS on `agents@mbp`. Zip SHA-256 `72a344ce72ec1d848703af89f71c11ac3255077df24e0cf155168bbdcd6b6dfa`; executable SHA-256 `53d72abd06aca991ea8dfde7be807dd0959185da601fc83461c8b8e6daa2ae51`; strict codesign after fresh unzip and byte-for-byte bundle diff PASS. - Local artifact `/Users/Shared/CalternalBuilds/37c5d40de40a-150324a1/Calternal-37c5d40de40a-Release-arm64.zip`; VM artifact `/Users/lume/CalternalQA/37c5d40de40a-150324a1/Calternal-37c5d40de40a-Release-arm64.zip`. - Receipt `/Users/Shared/CalternalBuilds/37c5d40de40a-150324a1/archive-verify.json`. This build worker ran no chrome-specific UI test and no GUI. Actual styled-note active/inactive/resized chrome still needs VM visual verification and user review. State is built/staged only; keep the issue open.
Author
Owner

37c5 preliminary VM result: launch control passed, but the available empty viewer and ordinary event viewer are not styled-document evidence. Active/inactive/resized styled-background top-edge acceptance was not exercised; no top-chrome pass is claimed. Evidence: .agents/native-break/37c5-vm-qa/06-initial.png, 09-after-sidebar.png.

37c5 preliminary VM result: launch control passed, but the available empty viewer and ordinary event viewer are not styled-document evidence. Active/inactive/resized styled-background top-edge acceptance was not exercised; no top-chrome pass is claimed. Evidence: `.agents/native-break/37c5-vm-qa/06-initial.png`, `09-after-sidebar.png`.
Author
Owner

Root delivery verified: desktop ~/Applications/Calternal.app now runs exact37c5d40de40a2d0b279aad8d13d6f68837533c2d, executable SHA25653d72abd06aca991ea8dfde7be807dd0959185da601fc83461c8b8e6daa2ae51. Native Quit then atomic replacement, prior bundle retained, no user source/settings writes; expected Calternal Space/window restored. Receipt .agents/desktop-install/37c5d40d/install-receipt.json.

User QA now available: hover-only six-dot handle with tighter margins; first unfocused block click selection, focused edit, Cmd/Shiftselection; styled-note top background candidate; cold sidebar overlap candidate. VM basic launch and eventselection passed; actual editor gestures/stylednote and exact collapsed-preview overlap remain unverified, and focus headless test is NOTPASSED. No performance/stable/useracceptance claim.

Next56e61 build contains reviewed imageQuickLook/transcription/inspector and testharnessfix. Eventdate/title/code/list refinements continue separately; this delivery does not close issues.

Root delivery verified: desktop ~/Applications/Calternal.app now runs exact37c5d40de40a2d0b279aad8d13d6f68837533c2d, executable SHA25653d72abd06aca991ea8dfde7be807dd0959185da601fc83461c8b8e6daa2ae51. Native Quit then atomic replacement, prior bundle retained, no user source/settings writes; expected Calternal Space/window restored. Receipt `.agents/desktop-install/37c5d40d/install-receipt.json`. User QA now available: hover-only six-dot handle with tighter margins; first unfocused block click selection, focused edit, Cmd/Shiftselection; styled-note top background candidate; cold sidebar overlap candidate. VM basic launch and eventselection passed; actual editor gestures/stylednote and exact collapsed-preview overlap remain unverified, and focus headless test is NOTPASSED. No performance/stable/useracceptance claim. Next56e61 build contains reviewed imageQuickLook/transcription/inspector and testharnessfix. Eventdate/title/code/list refinements continue separately; this delivery does not close issues.
Author
Owner

37c5 VM result: the disposable editor was successfully mounted, but its no-image/plain document is not valid styled-background evidence. No styled note/background image active/inactive/resized capture was performed; do not treat the basic launch or empty-viewer frame as top-chrome verification. Keep #6 open.

37c5 VM result: the disposable editor was successfully mounted, but its no-image/plain document is not valid styled-background evidence. No styled note/background image active/inactive/resized capture was performed; do not treat the basic launch or empty-viewer frame as top-chrome verification. Keep #6 open.
Author
Owner

37c5 VM styled-note verification FAILS #6 acceptance. A disposable note used an existing valid calternal.background.asset frontmatter format and a local bundled PNG; the mounted editor visibly loaded the background and dotted style (.agents/native-break/37c5-style/08-styled-active.png). Active, inactive (15-styled-inactive-terminal.png), and resized (13-styled-resized.png) frames all retain a flat opaque top-center strip above the styled content, rather than continuing the styled document/background into that band. Traffic lights, toolbar actions, tabs, and inspector remain present; this is a runtime visual result, not an empty-viewer inference. Fixture restored byte-for-byte after normal quit (18-fixture-restore.txt).

37c5 VM styled-note verification **FAILS #6 acceptance**. A disposable note used an existing valid `calternal.background.asset` frontmatter format and a local bundled PNG; the mounted editor visibly loaded the background and dotted style (`.agents/native-break/37c5-style/08-styled-active.png`). Active, inactive (`15-styled-inactive-terminal.png`), and resized (`13-styled-resized.png`) frames all retain a flat opaque top-center strip above the styled content, rather than continuing the styled document/background into that band. Traffic lights, toolbar actions, tabs, and inspector remain present; this is a runtime visual result, not an empty-viewer inference. Fixture restored byte-for-byte after normal quit (`18-fixture-restore.txt`).
Author
Owner

Root independently inspected .agents/native-break/37c5-style/08-styled-active.png: styled image/color fills the document area but a flat opaque band remains across the top center. This confirms the previous ignoresSafeArea background change did not fix the reported chrome. Issue stays open.

Assigned document_chrome_repair (Sol high) to trace actual window/root-host/split-view/toolbar clipping with public APIs in isolated worktree from27bdc009. No further blind modifier-only acceptance; candidate needs same active/inactive/resize native fixture. Event/title build remains ahead of this lane.

Root independently inspected `.agents/native-break/37c5-style/08-styled-active.png`: styled image/color fills the document area but a flat opaque band remains across the top center. This confirms the previous ignoresSafeArea background change did not fix the reported chrome. Issue stays open. Assigned document_chrome_repair (Sol high) to trace actual window/root-host/split-view/toolbar clipping with public APIs in isolated worktree from27bdc009. No further blind modifier-only acceptance; candidate needs same active/inactive/resize native fixture. Event/title build remains ahead of this lane.
Author
Owner

Repair investigation started — /root/document_chrome_repair

  • Owned worktree/branch: /Users/kayg/Developer/calternal-app/.worktrees/document-chrome-repair / wave18/document-chrome-repair, based on 27bdc009.
  • Current state: investigating the confirmed 37c5d40d VM failure. The styled document/background loads correctly below the titlebar, while an opaque center band remains in active, inactive, and resized windows.
  • Scope: main-window configuration, SwiftUI root hosting, split-view/top-safe-area propagation, and document background layout only. Editor algorithms and inspector controls are excluded.
  • Plan: compare the public window setup with the working Mailternal configuration; identify the native titlebar/background owner; implement the smallest public AppKit/SwiftUI repair; run source checks; request reviewer inspection; hand the candidate to the sole builder for the same styled active/inactive/resized VM fixture.
  • Validation status: the previous .ignoresSafeArea change is runtime-failed. No repair, build, performance result, or user acceptance is claimed yet.

Next action: create the isolated worktree at the assigned base and trace the live window/content/split-view hierarchy against the captured failing frames.

**Repair investigation started — `/root/document_chrome_repair`** - Owned worktree/branch: `/Users/kayg/Developer/calternal-app/.worktrees/document-chrome-repair` / `wave18/document-chrome-repair`, based on `27bdc009`. - Current state: investigating the confirmed `37c5d40d` VM failure. The styled document/background loads correctly below the titlebar, while an opaque center band remains in active, inactive, and resized windows. - Scope: main-window configuration, SwiftUI root hosting, split-view/top-safe-area propagation, and document background layout only. Editor algorithms and inspector controls are excluded. - Plan: compare the public window setup with the working Mailternal configuration; identify the native titlebar/background owner; implement the smallest public AppKit/SwiftUI repair; run source checks; request reviewer inspection; hand the candidate to the sole builder for the same styled active/inactive/resized VM fixture. - Validation status: the previous `.ignoresSafeArea` change is runtime-failed. No repair, build, performance result, or user acceptance is claimed yet. Next action: create the isolated worktree at the assigned base and trace the live window/content/split-view hierarchy against the captured failing frames.
Author
Owner

Root cause and implementation plan — /root/document_chrome_repair

  • Worktree/branch remains /Users/kayg/Developer/calternal-app/.worktrees/document-chrome-repair / wave18/document-chrome-repair, base 27bdc009.
  • Finding: the failed background modifier is below the AppKit split-item boundary. The center/detail NSSplitViewItem keeps its default non-full-height layout, so its physical view frame begins below the unified titlebar. The flat band in all three VM frames is the window backdrop visible above that clipped detail item. A descendant safe-area modifier cannot escape the split item's frame.
  • Corroboration: the sidebar reaches the titlebar through native full-height split-item behavior; Mailternal's public AppKit-owned splits use NSSplitViewItem.allowsFullHeightLayout; Calternal already configures a full-size content window and hides the public toolbar backing. The missing step is the detail split item's full-height participation, not another toolbar/titlebar mutation.
  • Planned change: add a narrow public NSViewRepresentable at the root detail seam. It resolves only enclosing public NSSplitViewController/NSSplitViewItem objects and sets the containing detail item(s) allowsFullHeightLayout = true. SwiftUI remains the owner of document/session state. The existing content safe area keeps the editor card below native toolbar controls, while the existing document background may extend through that safe area.
  • Lifecycle check: reapply idempotently when the bridge moves to a window/superview so NavigationSplitView or inspector reconstruction cannot lose the setting. No private class names, private selectors, titlebar subview mutation, toolbar replacement, or hand-drawn chrome.

Next action: implement this root-layout bridge, run source/diff checks, then queue the bounded diff for reviewer inspection before handing it to the sole builder.

**Root cause and implementation plan — `/root/document_chrome_repair`** - Worktree/branch remains `/Users/kayg/Developer/calternal-app/.worktrees/document-chrome-repair` / `wave18/document-chrome-repair`, base `27bdc009`. - Finding: the failed background modifier is below the AppKit split-item boundary. The center/detail `NSSplitViewItem` keeps its default non-full-height layout, so its physical view frame begins below the unified titlebar. The flat band in all three VM frames is the window backdrop visible above that clipped detail item. A descendant safe-area modifier cannot escape the split item's frame. - Corroboration: the sidebar reaches the titlebar through native full-height split-item behavior; Mailternal's public AppKit-owned splits use `NSSplitViewItem.allowsFullHeightLayout`; Calternal already configures a full-size content window and hides the public toolbar backing. The missing step is the detail split item's full-height participation, not another toolbar/titlebar mutation. - Planned change: add a narrow public `NSViewRepresentable` at the root detail seam. It resolves only enclosing public `NSSplitViewController`/`NSSplitViewItem` objects and sets the containing detail item(s) `allowsFullHeightLayout = true`. SwiftUI remains the owner of document/session state. The existing content safe area keeps the editor card below native toolbar controls, while the existing document background may extend through that safe area. - Lifecycle check: reapply idempotently when the bridge moves to a window/superview so NavigationSplitView or inspector reconstruction cannot lose the setting. No private class names, private selectors, titlebar subview mutation, toolbar replacement, or hand-drawn chrome. Next action: implement this root-layout bridge, run source/diff checks, then queue the bounded diff for reviewer inspection before handing it to the sole builder.
Author
Owner

Source candidate ready for review — /root/document_chrome_repair

  • Worktree/branch: /Users/kayg/Developer/calternal-app/.worktrees/document-chrome-repair / wave18/document-chrome-repair.
  • Candidate: 2fa87bb0 (Extend document split beneath titlebar), parent/base 27bdc009.
  • Change: the existing root split bridge now resolves its enclosing public NSSplitViewController, identifies the sibling detail item in the known two-column shell, and sets allowsFullHeightLayout = true when mounted or updated. The existing styled-document background remains the only content painter and the native safe area continues to inset editor controls.
  • Scope: one file, App/Sources/Shell/MainWindowRoot.swift, 32 inserted lines. No editor/session algorithms, inspector controls, toolbar items, traffic lights, drag regions, titlebar subviews, private API, or persisted data changed.
  • Source validation: git diff --check passed; worktree is clean. API availability was checked against the active macOS SDK. No local app build, GUI run, performance result, or user acceptance is claimed; the sole builder owns compilation and Release staging.
  • Required runtime acceptance after review/build: reuse the exact styled note plus background-image fixture; capture active, inactive, and resized states; confirm the background reaches the center titlebar band while the card/text stay below native controls; verify toolbar actions, tabs, traffic lights, inspector, sidebar collapse/restore, and window drag remain intact.

Next action: reviewer inspects 27bdc009..2fa87bb0; any finding is resolved before build handoff.

**Source candidate ready for review — `/root/document_chrome_repair`** - Worktree/branch: `/Users/kayg/Developer/calternal-app/.worktrees/document-chrome-repair` / `wave18/document-chrome-repair`. - Candidate: `2fa87bb0` (`Extend document split beneath titlebar`), parent/base `27bdc009`. - Change: the existing root split bridge now resolves its enclosing public `NSSplitViewController`, identifies the sibling detail item in the known two-column shell, and sets `allowsFullHeightLayout = true` when mounted or updated. The existing styled-document background remains the only content painter and the native safe area continues to inset editor controls. - Scope: one file, `App/Sources/Shell/MainWindowRoot.swift`, 32 inserted lines. No editor/session algorithms, inspector controls, toolbar items, traffic lights, drag regions, titlebar subviews, private API, or persisted data changed. - Source validation: `git diff --check` passed; worktree is clean. API availability was checked against the active macOS SDK. No local app build, GUI run, performance result, or user acceptance is claimed; the sole builder owns compilation and Release staging. - Required runtime acceptance after review/build: reuse the exact styled note plus background-image fixture; capture active, inactive, and resized states; confirm the background reaches the center titlebar band while the card/text stay below native controls; verify toolbar actions, tabs, traffic lights, inspector, sidebar collapse/restore, and window drag remain intact. Next action: reviewer inspects `27bdc009..2fa87bb0`; any finding is resolved before build handoff.
Author
Owner

Reviewer: ui_fixes_review_medium
Worktree/branch: .worktrees/document-chrome-repair / wave18/document-chrome-repair
Reviewed exact revision: 2fa87bb0227e7cd898e5a31cc7e7b42d7c1f1ebc against 27bdc009
State: SOURCE REJECTED. No build or GUI run.

P1 — App/Sources/Shell/MainWindowRoot.swift:527-537: the bridge identifies the sibling center/detail NSSplitViewItem and sets allowsFullHeightLayout = true. AppKit documents that this property applies only to split items whose behavior is .sidebar or .inspector; it defaults true for those roles. The center detail item produced by this two-column NavigationSplitView is the default/content-list role, so assigning this property is expected to be a no-op. It cannot make the detail item's physical frame enter the titlebar, and the already-confirmed opaque band should remain.

Official API contract: https://developer.apple.com/documentation/appkit/nssplitviewitem/allowsfullheightlayout

Scoped repair direction: place the selected document's existing background painter at a SwiftUI/AppKit root ancestor that already spans the window's full-size content view, behind NavigationSplitView. The native sidebar and inspector surfaces can continue covering their own regions, while the detail-local card/editor remains safe-area-aware below toolbar controls. Reuse the session's existing background state/cache; do not mutate SwiftUI-generated split constraints or private titlebar views. A root background may coexist with the current detail-local background so only the previously exposed titlebar band changes.

The responder-chain/controller lookup is bounded, public, and idempotent, and this patch does not directly alter toolbar items, tabs, traffic lights, drag regions, editor layout, or persistence. Those properties do not salvage the candidate because the selected API has no effect on a detail item.

Next action: replace this no-op with the bounded root-background seam, obtain source review, then build and run the exact styled active/inactive/resized fixture. Source review cannot establish the visual result; keep issue #6 open through native verification, delivery, and user acceptance.

Reviewer: ui_fixes_review_medium Worktree/branch: `.worktrees/document-chrome-repair` / `wave18/document-chrome-repair` Reviewed exact revision: `2fa87bb0227e7cd898e5a31cc7e7b42d7c1f1ebc` against `27bdc009` State: SOURCE REJECTED. No build or GUI run. P1 — `App/Sources/Shell/MainWindowRoot.swift:527-537`: the bridge identifies the sibling center/detail `NSSplitViewItem` and sets `allowsFullHeightLayout = true`. AppKit documents that this property applies only to split items whose behavior is `.sidebar` or `.inspector`; it defaults true for those roles. The center detail item produced by this two-column `NavigationSplitView` is the default/content-list role, so assigning this property is expected to be a no-op. It cannot make the detail item's physical frame enter the titlebar, and the already-confirmed opaque band should remain. Official API contract: https://developer.apple.com/documentation/appkit/nssplitviewitem/allowsfullheightlayout Scoped repair direction: place the selected document's existing background painter at a SwiftUI/AppKit root ancestor that already spans the window's full-size content view, behind `NavigationSplitView`. The native sidebar and inspector surfaces can continue covering their own regions, while the detail-local card/editor remains safe-area-aware below toolbar controls. Reuse the session's existing background state/cache; do not mutate SwiftUI-generated split constraints or private titlebar views. A root background may coexist with the current detail-local background so only the previously exposed titlebar band changes. The responder-chain/controller lookup is bounded, public, and idempotent, and this patch does not directly alter toolbar items, tabs, traffic lights, drag regions, editor layout, or persistence. Those properties do not salvage the candidate because the selected API has no effect on a detail item. Next action: replace this no-op with the bounded root-background seam, obtain source review, then build and run the exact styled active/inactive/resized fixture. Source review cannot establish the visual result; keep issue #6 open through native verification, delivery, and user acceptance.
Author
Owner

2fa87bb0 rejected; replacement plan awaiting review — /root/document_chrome_repair

Proposed implementation, pending plan review:

  1. Supersede the rejected split-item bridge in a follow-up commit.
  2. Make the root shell the single owner of the selected session's downsampled background image. Key its existing loadBackgroundImage() call by session ID plus backgroundAssetIdentifier, clear the root state before each new load, and keep the existing session cache/security/downsampling path. This avoids two concurrent callers canceling one another.
  3. Publish the center ViewerHost bounds with a SwiftUI anchor preference before the native inspector modifier. Read that anchor on NavigationSplitView with backgroundPreferenceValue.
  4. Render one noninteractive document background behind NavigationSplitView, positioned to the resolved center-column bounds and extended upward by the root GeometryProxy.safeAreaInsets.top. Remove the detail-local duplicate painter/task. The single image therefore uses one continuous aspect-fill canvas from the titlebar edge through the document viewport.
  5. Leave ViewerHost/card/editor geometry, toolbar items/background visibility, traffic lights, tabs, inspector/sidebar surfaces, drag regions, and all persistence unchanged. When no selected document image exists, the root painter is clear and the ordinary WindowBackdrop remains visible.

Risks and required checks:

  • Anchor must resolve to the center content before the inspector wrapper so the image does not paint the inspector width.
  • Root background must stay behind the generated split surfaces and never intercept hits.
  • Switching documents/assets must not flash the prior image; inspector toggle, sidebar collapse/restore, resize, and activation must update geometry without starting duplicate image work.
  • Runtime acceptance remains the exact styled active/inactive/resized fixture, plus plain/no-image state and native toolbar/tabs/traffic-lights/drag/inspector/sidebar checks. No performance claim from screenshots.

No source edit for this replacement has begun. Next action: designated reviewer approves or corrects this plan before implementation.

**`2fa87bb0` rejected; replacement plan awaiting review — `/root/document_chrome_repair`** - Worktree/branch: `/Users/kayg/Developer/calternal-app/.worktrees/document-chrome-repair` / `wave18/document-chrome-repair`. - Rejected candidate: `2fa87bb0`. Do not build or integrate it. Reviewer P1 is correct: Apple's current `NSSplitViewItem.allowsFullHeightLayout` contract says it applies only to `.sidebar` and `.inspector`; the root center item is the default/detail behavior, so the assignment is a no-op. Official contract: https://developer.apple.com/documentation/appkit/nssplitviewitem/allowsfullheightlayout - Public replacement seam: SwiftUI documents that a background at an ancestor can ignore the safe area independently of foreground content, and that `anchorPreference` plus `backgroundPreferenceValue` resolves a descendant's geometry in an ancestor without mutating generated constraints. References: https://developer.apple.com/documentation/swiftui/adding-a-background-to-your-view, https://developer.apple.com/documentation/swiftui/view/anchorpreference(key:value:transform:), https://developer.apple.com/documentation/swiftui/view/backgroundpreferencevalue(_:alignment:_:) Proposed implementation, pending plan review: 1. Supersede the rejected split-item bridge in a follow-up commit. 2. Make the root shell the single owner of the selected session's downsampled background image. Key its existing `loadBackgroundImage()` call by session ID plus `backgroundAssetIdentifier`, clear the root state before each new load, and keep the existing session cache/security/downsampling path. This avoids two concurrent callers canceling one another. 3. Publish the center `ViewerHost` bounds with a SwiftUI anchor preference before the native inspector modifier. Read that anchor on `NavigationSplitView` with `backgroundPreferenceValue`. 4. Render one noninteractive document background behind `NavigationSplitView`, positioned to the resolved center-column bounds and extended upward by the root `GeometryProxy.safeAreaInsets.top`. Remove the detail-local duplicate painter/task. The single image therefore uses one continuous aspect-fill canvas from the titlebar edge through the document viewport. 5. Leave ViewerHost/card/editor geometry, toolbar items/background visibility, traffic lights, tabs, inspector/sidebar surfaces, drag regions, and all persistence unchanged. When no selected document image exists, the root painter is clear and the ordinary WindowBackdrop remains visible. Risks and required checks: - Anchor must resolve to the center content before the inspector wrapper so the image does not paint the inspector width. - Root background must stay behind the generated split surfaces and never intercept hits. - Switching documents/assets must not flash the prior image; inspector toggle, sidebar collapse/restore, resize, and activation must update geometry without starting duplicate image work. - Runtime acceptance remains the exact styled active/inactive/resized fixture, plus plain/no-image state and native toolbar/tabs/traffic-lights/drag/inspector/sidebar checks. No performance claim from screenshots. No source edit for this replacement has begun. Next action: designated reviewer approves or corrects this plan before implementation.
Author
Owner

Reviewer: ui_fixes_review_medium
Worktree/branch: .worktrees/document-chrome-repair / wave18/document-chrome-repair
Plan reviewed: public root-background replacement after rejected 2fa87bb0
State: PRE-CODE PLAN REJECTED pending two bounded lifecycle corrections. No source edit, build, or GUI run reviewed.

P2 — root image state must be keyed, not a naked NSImage?. A SwiftUI .task(id:) begins after a body update can render, so switching sessions/assets can display the previous image for one frame before the task clears it. Store the loaded result with its exact (sessionID, backgroundAssetIdentifier) key and render it only when that key equals the current synchronous key. Capture the key for the async load and require it still matches before assigning completion. Clearing state inside the task remains useful but is not the rendering fence.

P2 — background cache cancellation must move with ownership. App/Sources/Viewer/ViewerView.swift:826-829 currently calls session.clearBackgroundImageCache() from the detail page's onDisappear. If the detail subtree is reconstructed during split/inspector/navigation lifecycle while the root still owns the same key, that child can cancel the sole root load; because the root task ID has not changed, no new load is guaranteed to start. Remove that child-owned clear when removing the child painter/task. Let the root keyed lifecycle end old-key ownership and clear/cancel the old session deliberately, without clearing a newly started same-session load.

The remaining plan is appropriately narrow and public:

  • Publishing the ViewerHost anchor before the inspector modifier should describe the center content width rather than the inspector.
  • Reading it behind NavigationSplitView and extending only the noninteractive background by the root safe-area top leaves card/editor foreground geometry unchanged.
  • The root painter sits above the existing AppKit WindowBackdrop and below the split/overlay, preserving toolbar, tabs, traffic lights, drag regions, and hit testing.
  • One root loader removes the current duplicate-call cancellation risk and can reuse the session's containment/downsampling/cache path.

Source cannot establish that the generated detail surface is transparent enough after the detail-local painter is removed. The root background is expected to appear in the exposed titlebar band, but it may be occluded below it by a generated split surface, causing a discontinuity. Treat a mounted root/split render or the exact styled active/inactive/resized VM fixture as a mandatory fail gate; do not infer visual success from anchor geometry. Plain/no-image, inspector toggle, sidebar collapse/restore, activation, resize, and rapid note/asset switching must remain in runtime acceptance.

Official basis remains Apple's restriction of allowsFullHeightLayout to sidebar/inspector items: https://developer.apple.com/documentation/appkit/nssplitviewitem/allowsfullheightlayout

Next action: amend the plan with keyed rendering and root-owned cache teardown, then implement and source-review the bounded replacement. Keep issue #6 open through native verification and user acceptance.

Reviewer: ui_fixes_review_medium Worktree/branch: `.worktrees/document-chrome-repair` / `wave18/document-chrome-repair` Plan reviewed: public root-background replacement after rejected `2fa87bb0` State: PRE-CODE PLAN REJECTED pending two bounded lifecycle corrections. No source edit, build, or GUI run reviewed. P2 — root image state must be keyed, not a naked `NSImage?`. A SwiftUI `.task(id:)` begins after a body update can render, so switching sessions/assets can display the previous image for one frame before the task clears it. Store the loaded result with its exact `(sessionID, backgroundAssetIdentifier)` key and render it only when that key equals the current synchronous key. Capture the key for the async load and require it still matches before assigning completion. Clearing state inside the task remains useful but is not the rendering fence. P2 — background cache cancellation must move with ownership. `App/Sources/Viewer/ViewerView.swift:826-829` currently calls `session.clearBackgroundImageCache()` from the detail page's `onDisappear`. If the detail subtree is reconstructed during split/inspector/navigation lifecycle while the root still owns the same key, that child can cancel the sole root load; because the root task ID has not changed, no new load is guaranteed to start. Remove that child-owned clear when removing the child painter/task. Let the root keyed lifecycle end old-key ownership and clear/cancel the old session deliberately, without clearing a newly started same-session load. The remaining plan is appropriately narrow and public: - Publishing the `ViewerHost` anchor before the inspector modifier should describe the center content width rather than the inspector. - Reading it behind `NavigationSplitView` and extending only the noninteractive background by the root safe-area top leaves card/editor foreground geometry unchanged. - The root painter sits above the existing AppKit `WindowBackdrop` and below the split/overlay, preserving toolbar, tabs, traffic lights, drag regions, and hit testing. - One root loader removes the current duplicate-call cancellation risk and can reuse the session's containment/downsampling/cache path. Source cannot establish that the generated detail surface is transparent enough after the detail-local painter is removed. The root background is expected to appear in the exposed titlebar band, but it may be occluded below it by a generated split surface, causing a discontinuity. Treat a mounted root/split render or the exact styled active/inactive/resized VM fixture as a mandatory fail gate; do not infer visual success from anchor geometry. Plain/no-image, inspector toggle, sidebar collapse/restore, activation, resize, and rapid note/asset switching must remain in runtime acceptance. Official basis remains Apple's restriction of `allowsFullHeightLayout` to sidebar/inspector items: https://developer.apple.com/documentation/appkit/nssplitviewitem/allowsfullheightlayout Next action: amend the plan with keyed rendering and root-owned cache teardown, then implement and source-review the bounded replacement. Keep issue #6 open through native verification and user acceptance.
Author
Owner

Replacement plan v2 — lifecycle corrections applied; pre-code approval requested — /root/document_chrome_repair

  • Worktree/branch remains /Users/kayg/Developer/calternal-app/.worktrees/document-chrome-repair / wave18/document-chrome-repair; rejected 2fa87bb0 remains excluded from build/integration.
  • Reviewer P2 corrections are accepted. No replacement source edit has begun.

Exact keyed state and ownership plan:

  1. Define the synchronous current key as (sessionID, backgroundAssetIdentifier) only when both an opened session and asset exist. Store a loaded result as { key, image }; paint only when loaded.key == currentKey. A prior note/asset image is therefore rejected during the body update before the new .task(id:) starts.
  2. Capture the exact key and session at load start. After await session.loadBackgroundImage(), assign only when the task is not cancelled, the current synchronous key still equals the captured key, and the root's owner is still that same session object. No stale completion can publish.
  3. Root ownership changes only inside the key-driven task. When moving to a different session or to no document image, clear the previous session cache before replacing/nilling the owner. For an asset change within the same session, do not clear separately: the existing loadBackgroundImage() generation increment cancels the prior asset load before starting the new one.
  4. Add no cancellation-handler/deferred cache clear. A cancelled old task cannot clear a newer same-session load. Root disappearance performs a final owner clear; normal detail/inspector subtree reconstruction does not.
  5. Remove session.clearBackgroundImageCache() from NoteEditorSurface.onDisappear together with the detail-local painter/task. Its presentation/session flush and registry ownership behavior stays unchanged. A transient detail rebuild can no longer cancel the unchanged root task ID.

Geometry/rendering plan remains:

  • Publish ViewerHost bounds with anchorPreference before .inspector; resolve them in backgroundPreferenceValue behind NavigationSplitView.
  • Render one hit-test-disabled image canvas at the center bounds, extended upward by the root GeometryProxy.safeAreaInsets.top; foreground card/editor geometry remains safe-area-aware.
  • No private APIs, generated-constraint mutation, toolbar/titlebar mutation, or persistence changes.
  • Mounted transparency is a hard runtime gate: if the generated detail surface occludes the root painter or a seam remains, fail the candidate. Repeat styled active/inactive/resized, plain/no-image, rapid note/asset switching, inspector toggle, sidebar collapse/restore, activation, tabs/toolbar/traffic lights/drag checks.

Next action: reviewer gives pre-code PASS or remaining bounded corrections. Implementation starts only after PASS.

**Replacement plan v2 — lifecycle corrections applied; pre-code approval requested — `/root/document_chrome_repair`** - Worktree/branch remains `/Users/kayg/Developer/calternal-app/.worktrees/document-chrome-repair` / `wave18/document-chrome-repair`; rejected `2fa87bb0` remains excluded from build/integration. - Reviewer P2 corrections are accepted. No replacement source edit has begun. Exact keyed state and ownership plan: 1. Define the synchronous current key as `(sessionID, backgroundAssetIdentifier)` only when both an opened session and asset exist. Store a loaded result as `{ key, image }`; paint only when `loaded.key == currentKey`. A prior note/asset image is therefore rejected during the body update before the new `.task(id:)` starts. 2. Capture the exact key and session at load start. After `await session.loadBackgroundImage()`, assign only when the task is not cancelled, the current synchronous key still equals the captured key, and the root's owner is still that same session object. No stale completion can publish. 3. Root ownership changes only inside the key-driven task. When moving to a different session or to no document image, clear the previous session cache before replacing/nilling the owner. For an asset change within the same session, do not clear separately: the existing `loadBackgroundImage()` generation increment cancels the prior asset load before starting the new one. 4. Add no cancellation-handler/deferred cache clear. A cancelled old task cannot clear a newer same-session load. Root disappearance performs a final owner clear; normal detail/inspector subtree reconstruction does not. 5. Remove `session.clearBackgroundImageCache()` from `NoteEditorSurface.onDisappear` together with the detail-local painter/task. Its presentation/session flush and registry ownership behavior stays unchanged. A transient detail rebuild can no longer cancel the unchanged root task ID. Geometry/rendering plan remains: - Publish `ViewerHost` bounds with `anchorPreference` before `.inspector`; resolve them in `backgroundPreferenceValue` behind `NavigationSplitView`. - Render one hit-test-disabled image canvas at the center bounds, extended upward by the root `GeometryProxy.safeAreaInsets.top`; foreground card/editor geometry remains safe-area-aware. - No private APIs, generated-constraint mutation, toolbar/titlebar mutation, or persistence changes. - Mounted transparency is a hard runtime gate: if the generated detail surface occludes the root painter or a seam remains, fail the candidate. Repeat styled active/inactive/resized, plain/no-image, rapid note/asset switching, inspector toggle, sidebar collapse/restore, activation, tabs/toolbar/traffic lights/drag checks. Next action: reviewer gives pre-code PASS or remaining bounded corrections. Implementation starts only after PASS.
Author
Owner

Reviewer: ui_fixes_review_medium
Worktree/branch: .worktrees/document-chrome-repair / wave18/document-chrome-repair
Plan reviewed: “Replacement plan v2 — lifecycle corrections applied”
State: PRE-CODE PLAN PASS. No implementation, build, or GUI result reviewed.

The revised state machine resolves both prior P2 findings:

  • The loaded image is tagged with exact (sessionID, backgroundAssetIdentifier) and is synchronously painted only when that tag equals the current key, preventing a previous image from appearing during the render before a replacement .task(id:) begins.
  • Async publication additionally requires the captured key, captured session object, current key, current owner, and noncancelled task to match.
  • A different-session or no-image transition clears only the prior owner. Same-session asset changes remain serialized by NoteEditorSession.loadBackgroundImage()'s generation and task cancellation, avoiding a second clear that could cancel the replacement.
  • Removing the child onDisappear cache clear moves cancellation to the root owner, so inspector/detail reconstruction cannot cancel an unchanged root task.
  • Final root teardown should nil the owner and loaded state before clearing the prior session cache so any in-flight completion fails its owner gate.

The geometry plan is the smallest public seam found after AppKit's detail-item restriction: publish ViewerHost bounds before .inspector, resolve the anchor in a root backgroundPreferenceValue, and extend only the hit-test-disabled painter by the root top safe-area inset. Foreground card/editor layout remains unchanged, and the painter stays above the existing window backdrop but behind split content and overlays.

Validation limits remain material. Source structure cannot prove that SwiftUI's generated detail surface is transparent enough for one continuous root canvas. The exact styled active/inactive/resized fixture, plain/no-image state, rapid session and asset switching, inspector/sidebar transitions, activation, tabs, toolbar, traffic lights, and drag regions are mandatory runtime fail gates. A source pass or build alone cannot close issue #6.

Official basis for rejecting the previous path remains: https://developer.apple.com/documentation/appkit/nssplitviewitem/allowsfullheightlayout

Next action: implement the bounded v2 plan, freeze an exact candidate, and request source review before the sole builder runs it.

Reviewer: ui_fixes_review_medium Worktree/branch: `.worktrees/document-chrome-repair` / `wave18/document-chrome-repair` Plan reviewed: “Replacement plan v2 — lifecycle corrections applied” State: PRE-CODE PLAN PASS. No implementation, build, or GUI result reviewed. The revised state machine resolves both prior P2 findings: - The loaded image is tagged with exact `(sessionID, backgroundAssetIdentifier)` and is synchronously painted only when that tag equals the current key, preventing a previous image from appearing during the render before a replacement `.task(id:)` begins. - Async publication additionally requires the captured key, captured session object, current key, current owner, and noncancelled task to match. - A different-session or no-image transition clears only the prior owner. Same-session asset changes remain serialized by `NoteEditorSession.loadBackgroundImage()`'s generation and task cancellation, avoiding a second clear that could cancel the replacement. - Removing the child `onDisappear` cache clear moves cancellation to the root owner, so inspector/detail reconstruction cannot cancel an unchanged root task. - Final root teardown should nil the owner and loaded state before clearing the prior session cache so any in-flight completion fails its owner gate. The geometry plan is the smallest public seam found after AppKit's detail-item restriction: publish `ViewerHost` bounds before `.inspector`, resolve the anchor in a root `backgroundPreferenceValue`, and extend only the hit-test-disabled painter by the root top safe-area inset. Foreground card/editor layout remains unchanged, and the painter stays above the existing window backdrop but behind split content and overlays. Validation limits remain material. Source structure cannot prove that SwiftUI's generated detail surface is transparent enough for one continuous root canvas. The exact styled active/inactive/resized fixture, plain/no-image state, rapid session and asset switching, inspector/sidebar transitions, activation, tabs, toolbar, traffic lights, and drag regions are mandatory runtime fail gates. A source pass or build alone cannot close issue #6. Official basis for rejecting the previous path remains: https://developer.apple.com/documentation/appkit/nssplitviewitem/allowsfullheightlayout Next action: implement the bounded v2 plan, freeze an exact candidate, and request source review before the sole builder runs it.
Author
Owner

Root-background implementation ready for exact diff review — /root/document_chrome_repair

  • Worktree/branch: /Users/kayg/Developer/calternal-app/.worktrees/document-chrome-repair / wave18/document-chrome-repair.
  • Candidate: a969f8efc719a046e98be86470b06c1a85836b0c; review the net range 27bdc009..a969f8ef. This follow-up removes every rejected allowsFullHeightLayout detail-item change from 2fa87bb0.
  • State: implementation complete, source review pending. No build or GUI run was performed.

Implemented public root seam:

  1. ViewerHost publishes its bounds before the native inspector modifier. NavigationSplitView resolves that anchor in a root background and paints one noninteractive image canvas across the center width, extended by the root top safe-area inset.
  2. The editor card and host keep their existing safe-area-aware foreground frames. The local NoteBackgroundView painter/task is removed so only the root owns image loading.
  3. Root state stores {(sessionID, assetIdentifier), image} and synchronously paints only an exact current-key match. Completion also requires the captured key, uncancelled task, and exact root-owned session object.
  4. Session replacement/no-image teardown clears the root owner and displayed state before cancelling the prior session cache. Same-session asset replacement does not issue a separate clear; the session loader's generation owns cancellation. Root disappearance performs final teardown.
  5. The detail page no longer clears the background cache on onDisappear, so a transient detail/inspector reconstruction cannot cancel an unchanged root-owned load.

Source evidence:

  • rtk git diff --check: PASS.
  • Rejected split-item API use and child painter are absent from the resulting source.
  • Worktree is clean at the candidate commit.
  • No compilation or runtime result is claimed; the sole builder owns those stages.

Required next gates remain: exact net diff review, then Release build and mounted VM styled active/inactive/resized checks. Plain/no-image, rapid session/asset switch, inspector and sidebar transitions, activation, tabs, toolbar, traffic lights, and drag behavior remain runtime requirements. Generated split-surface transparency is still a hard visual fail gate.

**Root-background implementation ready for exact diff review — `/root/document_chrome_repair`** - Worktree/branch: `/Users/kayg/Developer/calternal-app/.worktrees/document-chrome-repair` / `wave18/document-chrome-repair`. - Candidate: `a969f8efc719a046e98be86470b06c1a85836b0c`; review the net range `27bdc009..a969f8ef`. This follow-up removes every rejected `allowsFullHeightLayout` detail-item change from `2fa87bb0`. - State: implementation complete, source review pending. No build or GUI run was performed. Implemented public root seam: 1. `ViewerHost` publishes its bounds before the native inspector modifier. `NavigationSplitView` resolves that anchor in a root background and paints one noninteractive image canvas across the center width, extended by the root top safe-area inset. 2. The editor card and host keep their existing safe-area-aware foreground frames. The local `NoteBackgroundView` painter/task is removed so only the root owns image loading. 3. Root state stores `{(sessionID, assetIdentifier), image}` and synchronously paints only an exact current-key match. Completion also requires the captured key, uncancelled task, and exact root-owned session object. 4. Session replacement/no-image teardown clears the root owner and displayed state before cancelling the prior session cache. Same-session asset replacement does not issue a separate clear; the session loader's generation owns cancellation. Root disappearance performs final teardown. 5. The detail page no longer clears the background cache on `onDisappear`, so a transient detail/inspector reconstruction cannot cancel an unchanged root-owned load. Source evidence: - `rtk git diff --check`: PASS. - Rejected split-item API use and child painter are absent from the resulting source. - Worktree is clean at the candidate commit. - No compilation or runtime result is claimed; the sole builder owns those stages. Required next gates remain: exact net diff review, then Release build and mounted VM styled active/inactive/resized checks. Plain/no-image, rapid session/asset switch, inspector and sidebar transitions, activation, tabs, toolbar, traffic lights, and drag behavior remain runtime requirements. Generated split-surface transparency is still a hard visual fail gate.
Author
Owner

Reviewer: ui_fixes_review_medium
Worktree/branch: .worktrees/document-chrome-repair / wave18/document-chrome-repair
Exact candidate: a969f8efc719a046e98be86470b06c1a85836b0c
Net range: 27bdc009..a969f8ef
Verdict: SOURCE PASS — no P1–P3 findings.

The implementation follows the approved v2 lifecycle:

  • Rendering is synchronously fenced by exact (sessionID, backgroundAssetIdentifier) equality, so a prior image cannot paint during the body update before the new task begins.
  • Async publication requires the current key, the uncancelled task, and identity equality with the root-owned session. Session replacement and root disappearance nil owner/display state before clearing the prior cache, so an old completion fails its owner gate.
  • Same-session asset replacement avoids an extra root clear and relies on the session loader's existing generation/task cancellation. Nil-asset and window-root disappearance paths release the owner. The removed detail-local cache clear can no longer cancel a root load during detail or inspector reconstruction.
  • The ViewerHost anchor is attached before .inspector, and only the background painter extends by the root top safe-area inset. The painter is behind the split content, disables hit testing, and does not alter foreground card/editor geometry.
  • The rejected NSSplitViewItem.allowsFullHeightLayout path and the child NoteBackgroundView are absent from the net source. The two-file scope is clean and git diff --check passes.

Validation limit: no build or GUI was reviewed. Source cannot establish whether the generated NavigationSplitView detail surface remains transparent enough to reveal this root painter continuously. The exact styled active/inactive/resized native fixture remains a hard fail gate, along with plain/no-image, rapid session/asset switching, inspector/sidebar transitions, activation, toolbar/tab/traffic-light/drag checks. Issue #6 should remain open through runtime and user acceptance.

Reviewer: `ui_fixes_review_medium` Worktree/branch: `.worktrees/document-chrome-repair` / `wave18/document-chrome-repair` Exact candidate: `a969f8efc719a046e98be86470b06c1a85836b0c` Net range: `27bdc009..a969f8ef` Verdict: **SOURCE PASS** — no P1–P3 findings. The implementation follows the approved v2 lifecycle: - Rendering is synchronously fenced by exact `(sessionID, backgroundAssetIdentifier)` equality, so a prior image cannot paint during the body update before the new task begins. - Async publication requires the current key, the uncancelled task, and identity equality with the root-owned session. Session replacement and root disappearance nil owner/display state before clearing the prior cache, so an old completion fails its owner gate. - Same-session asset replacement avoids an extra root clear and relies on the session loader's existing generation/task cancellation. Nil-asset and window-root disappearance paths release the owner. The removed detail-local cache clear can no longer cancel a root load during detail or inspector reconstruction. - The `ViewerHost` anchor is attached before `.inspector`, and only the background painter extends by the root top safe-area inset. The painter is behind the split content, disables hit testing, and does not alter foreground card/editor geometry. - The rejected `NSSplitViewItem.allowsFullHeightLayout` path and the child `NoteBackgroundView` are absent from the net source. The two-file scope is clean and `git diff --check` passes. Validation limit: no build or GUI was reviewed. Source cannot establish whether the generated `NavigationSplitView` detail surface remains transparent enough to reveal this root painter continuously. The exact styled active/inactive/resized native fixture remains a hard fail gate, along with plain/no-image, rapid session/asset switching, inspector/sidebar transitions, activation, toolbar/tab/traffic-light/drag checks. Issue #6 should remain open through runtime and user acceptance.
Author
Owner

Reviewed candidate handed to integration — /root/document_chrome_repair

  • Candidate a969f8efc719a046e98be86470b06c1a85836b0c, net range 27bdc009..a969f8ef, is frozen in .worktrees/document-chrome-repair.
  • ui_fixes_review_medium returned SOURCE PASS with no P1–P3 findings and recorded the verdict above.
  • Root has accepted the handoff and is integrating the reviewed net change with the current combined candidate. Root also has the exact 37c styled-note route and prior failure evidence.
  • Local evidence remains source-only: clean worktree and git diff --check PASS. No local build, GUI, performance, delivery, or user-acceptance claim is made.
  • Issue remains open. Compile is next; after a build, the exact styled active/inactive/resized route and plain/switch/inspector/sidebar/native-chrome checks remain hard runtime gates. A seam, occlusion, or opaque center band fails the candidate.
**Reviewed candidate handed to integration — `/root/document_chrome_repair`** - Candidate `a969f8efc719a046e98be86470b06c1a85836b0c`, net range `27bdc009..a969f8ef`, is frozen in `.worktrees/document-chrome-repair`. - `ui_fixes_review_medium` returned SOURCE PASS with no P1–P3 findings and recorded the verdict above. - Root has accepted the handoff and is integrating the reviewed net change with the current combined candidate. Root also has the exact 37c styled-note route and prior failure evidence. - Local evidence remains source-only: clean worktree and `git diff --check` PASS. No local build, GUI, performance, delivery, or user-acceptance claim is made. - Issue remains open. Compile is next; after a build, the exact styled active/inactive/resized route and plain/switch/inspector/sidebar/native-chrome checks remain hard runtime gates. A seam, occlusion, or opaque center band fails the candidate.
Author
Owner

Execution blocker: multiple implementation/reviewer agents stopped with Codex usage-limit errors. No further source or runtime acceptance is claimed. Desktop26eb1552 is installed and native launch/prior note verified. Central3e881860 contains next editor changes but is compile-blocked on nonisolated code painter helpers; isolated096a2725 repair is awaiting mandatory reviewer. Source-approved candidates pending combined integration: cross-event1fb74e92 (three-commit chain), imagecontrolsabb397be, chrome net27bd..a969f8ef. Event test cleanupd745 is integrated but shared XCTest async-teardown abort remains under investigation; title owner needs exact pre-feature-control PID52796 crash stack before choosing test-only fix. Layout centered760pt cap remains settled, exact alignment still pending. Preserve all active worktrees and uncommitted work; resume from these issues, do not restart or claim completion.

Execution blocker: multiple implementation/reviewer agents stopped with Codex usage-limit errors. No further source or runtime acceptance is claimed. Desktop26eb1552 is installed and native launch/prior note verified. Central3e881860 contains next editor changes but is compile-blocked on nonisolated code painter helpers; isolated096a2725 repair is awaiting mandatory reviewer. Source-approved candidates pending combined integration: cross-event1fb74e92 (three-commit chain), imagecontrolsabb397be, chrome net27bd..a969f8ef. Event test cleanupd745 is integrated but shared XCTest async-teardown abort remains under investigation; title owner needs exact pre-feature-control PID52796 crash stack before choosing test-only fix. Layout centered760pt cap remains settled, exact alignment still pending. Preserve all active worktrees and uncommitted work; resume from these issues, do not restart or claim completion.
Author
Owner

Work resumed at user request. Individual agent tasks must record their task name, worktree/branch, exact candidate revision, current status, next check and blockers in each relevant issue, with readback. Active dispatch: /root/block_drag_finish integrates source-approved #6 a969f8ef net, #12 abb397be, #15 1fb74e92 chain in an isolated checkout; /root/code_block_polish repairs #9 remaining actor-isolated scalar access, /root/ui_fixes_review_medium reviews; /root/title_completion and /root/event_date_completion investigate/correct awaited test fixture teardown in #5/#1. Central remains3e881860; desktop26eb1552 remains installed. No new build or acceptance yet. Prior usage blocker is historical: resumed agents are responding.

Work resumed at user request. Individual agent tasks must record their task name, worktree/branch, exact candidate revision, current status, next check and blockers in each relevant issue, with readback. Active dispatch: /root/block_drag_finish integrates source-approved #6 a969f8ef net, #12 abb397be, #15 1fb74e92 chain in an isolated checkout; /root/code_block_polish repairs #9 remaining actor-isolated scalar access, /root/ui_fixes_review_medium reviews; /root/title_completion and /root/event_date_completion investigate/correct awaited test fixture teardown in #5/#1. Central remains3e881860; desktop26eb1552 remains installed. No new build or acceptance yet. Prior usage blocker is historical: resumed agents are responding.
Author
Owner

Task identity: /root/block_drag_finish

Isolated integration candidate:

  • Worktree: /Users/kayg/Developer/calternal-app/.worktrees/editor-final-combined
  • Branch: wave16/editor-final-combined
  • Base: 3e8818608b7981a0670d229f322985f3474dbe58
  • Tip: 68885f1c4b8dceb4a59b35cc07b8516ffd0d4362

Integrated the complete reviewed change chain for this issue without editing central. Shared BlockEditorView conflicts were resolved by preserving both the image-toolbar anchor update and the existing coalesced block-handle hover reconciliation during scroll/layout. Stable patch parity is exact for all commits except the first image-controls commit, whose deliberate two-call conflict resolution accounts for the patch-ID difference.

Source checks completed: clean worktree, no conflict markers, git diff --check clean. No local build or GUI run. Exact merged interaction review is now requested. Current central/base still has the separately owned known Swift 6 code-painter isolation compiler blocker; this candidate does not claim to repair or compile past it.

Task identity: `/root/block_drag_finish` Isolated integration candidate: - Worktree: `/Users/kayg/Developer/calternal-app/.worktrees/editor-final-combined` - Branch: `wave16/editor-final-combined` - Base: `3e8818608b7981a0670d229f322985f3474dbe58` - Tip: `68885f1c4b8dceb4a59b35cc07b8516ffd0d4362` Integrated the complete reviewed change chain for this issue without editing central. Shared `BlockEditorView` conflicts were resolved by preserving both the image-toolbar anchor update and the existing coalesced block-handle hover reconciliation during scroll/layout. Stable patch parity is exact for all commits except the first image-controls commit, whose deliberate two-call conflict resolution accounts for the patch-ID difference. Source checks completed: clean worktree, no conflict markers, `git diff --check` clean. No local build or GUI run. Exact merged interaction review is now requested. Current central/base still has the separately owned known Swift 6 code-painter isolation compiler blocker; this candidate does not claim to repair or compile past it.
Author
Owner

Merged interaction source review — exact isolated tip 68885f1c4b8dceb4a59b35cc07b8516ffd0d4362 against base 3e8818608b7981a0670d229f322985f3474dbe58: PASS (no P1–P3 findings).

The reviewed #6 public SwiftUI background/titlebar chain retains identical stable patches. The NavigationSplitView extends beneath the titlebar through public safe-area behavior, and the selected document background is painted from MainWindowRoot behind the viewer bounds with hit testing disabled. Session/asset identity fences the async load; cancellation, selection changes, and disappearance release the prior cache owner. Viewer content, editor layout, title projection, selection/caret, list/code painters, and inspector interaction frames are not shifted by the background layer.

This source verdict does not claim the styled top strip is visually correct; VM/user rendering remains the acceptance gate.

Merged interaction source review — exact isolated tip `68885f1c4b8dceb4a59b35cc07b8516ffd0d4362` against base `3e8818608b7981a0670d229f322985f3474dbe58`: **PASS (no P1–P3 findings)**. The reviewed #6 public SwiftUI background/titlebar chain retains identical stable patches. The NavigationSplitView extends beneath the titlebar through public safe-area behavior, and the selected document background is painted from `MainWindowRoot` behind the viewer bounds with hit testing disabled. Session/asset identity fences the async load; cancellation, selection changes, and disappearance release the prior cache owner. Viewer content, editor layout, title projection, selection/caret, list/code painters, and inspector interaction frames are not shifted by the background layer. This source verdict does not claim the styled top strip is visually correct; VM/user rendering remains the acceptance gate.
Author
Owner

Root took over the existing sole compiler controller after /root/build_pipeline_recover hit usage limits. Exact704b347e26c7c48f3652a4cf7cd235f7815b7364 SwiftPM Release compile PASSED and VM test runtime staged. Tests executed:0 so far. Build log SHA6d41a977d4e100e63c9f20ecfb6c500b5545d25cf17d83bb48ae25b13d6d67a9; runtime manifest8ad650319b90b9e89070f07fabace4d39b9bc276127c2f47615d5c73f70b2fb7. /root/image_preview_qa assigned exact runtime tests. Separately source-reviewed combined chrome/image-controls/cross-event candidate68885 merged cleanly with painter repair as9a69a955; that newer revision is not built. Each thread owns updates in its relevant issues. Desktop remains26eb1552.

Root took over the existing sole compiler controller after /root/build_pipeline_recover hit usage limits. Exact704b347e26c7c48f3652a4cf7cd235f7815b7364 SwiftPM Release compile PASSED and VM test runtime staged. Tests executed:0 so far. Build log SHA6d41a977d4e100e63c9f20ecfb6c500b5545d25cf17d83bb48ae25b13d6d67a9; runtime manifest8ad650319b90b9e89070f07fabace4d39b9bc276127c2f47615d5c73f70b2fb7. /root/image_preview_qa assigned exact runtime tests. Separately source-reviewed combined chrome/image-controls/cross-event candidate68885 merged cleanly with painter repair as9a69a955; that newer revision is not built. Each thread owns updates in its relevant issues. Desktop remains26eb1552.
Author
Owner

Root integrated exact source-reviewed test lifecycle fixes: title3817c269c524898647b8265ac8755a2c22d4b359 as82ff556e and eventabcd17f50f7cb7c0d4f5ac72bb215a0bd36b8c1f as3171535b. Root independently matched event binary diff SHA0c241a51. Exact3171535be7f04e038f80799074104de68c4f5015 archive and265-input manifest are now building through the existing agents@mbp sole controller. Includes source-reviewed #6/#12/#15 combined changes. /root/image_preview_qa handles preceding704b focused runtime; root handles compiler while build subagent is usage-blocked. No new desktop delivery; no new test result yet.

Root integrated exact source-reviewed test lifecycle fixes: title3817c269c524898647b8265ac8755a2c22d4b359 as82ff556e and eventabcd17f50f7cb7c0d4f5ac72bb215a0bd36b8c1f as3171535b. Root independently matched event binary diff SHA0c241a51. Exact3171535be7f04e038f80799074104de68c4f5015 archive and265-input manifest are now building through the existing agents@mbp sole controller. Includes source-reviewed #6/#12/#15 combined changes. /root/image_preview_qa handles preceding704b focused runtime; root handles compiler while build subagent is usage-blocked. No new desktop delivery; no new test result yet.
Author
Owner

Task /root/editor_polish_inventory — next-combined-preview acceptance handoff (planning only; no GUI/build).

Already established: public root-background candidate a969f8ef and its combined integration passed source review. No styled native rendering has established that generated split surfaces reveal it.

Remaining VM checks, owned by /root on the next exact combined build: open the fixture's local-image styled note and require uninterrupted background through the center top/titlebar strip while active, inactive, resized wide/narrow, inspector shown/hidden, sidebar collapsed/expanded, and another tab/document selected then returned. Verify toolbar, traffic lights, tabs, window drag, editor hit testing, and scroll remain usable. Switch rapidly styled→plain→different styled asset and require no stale flash; a plain/no-image note must show no leaked prior image. Record an actual styled note, since an empty viewer is not proof. Any opaque center band or foreground shift fails. Keep #6 open.

Task `/root/editor_polish_inventory` — next-combined-preview acceptance handoff (planning only; no GUI/build). Already established: public root-background candidate `a969f8ef` and its combined integration passed source review. No styled native rendering has established that generated split surfaces reveal it. Remaining VM checks, owned by `/root` on the next exact combined build: open the fixture's local-image styled note and require uninterrupted background through the center top/titlebar strip while active, inactive, resized wide/narrow, inspector shown/hidden, sidebar collapsed/expanded, and another tab/document selected then returned. Verify toolbar, traffic lights, tabs, window drag, editor hit testing, and scroll remain usable. Switch rapidly styled→plain→different styled asset and require no stale flash; a plain/no-image note must show no leaked prior image. Record an actual styled note, since an empty viewer is not proof. Any opaque center band or foreground shift fails. Keep #6 open.
Author
Owner

Root installed and launched exact3bbb28a6fcf7bac1dae310bd07ea8e7a0ace6b68 as the only ~/Applications/Calternal.app. ExecutableSHA56e57a8fc553ce7ce82f6b72dbf04f2e2d442aefb53402b943adca14c208f408; zipSHAa8b1175bc354b455426351b0b7bfc9efb826071ddf0b4b69779cac0add9adb95; strict signature/arm64/Release/revision verified. Prior26eb quit via native menu; rollback retained. Space content inventory matched before/after replacement. Native current app restored the previously open note and Style inspector without editing its content. Receipt .agents/desktop-install/3bbb28a6/install-receipt.json.

User QA preview only. Pass: basic native launch/selection; package lists2/hover1/cross-event3; separate f907event7/7. Fail/open: actual mounted code gutter7assertions, imageFit/Fill4, imageQuickLookgesture8, hostedtitle4allocatoraborts. StyledVMdeeplink did not reach note; nativeUIfallback assigned. Each failure has independent author+reviewer, not closed. No stable or performance acceptance; latest imageprovider repair and diagnostics are NOT in this desktoppreview.

User test focus: centered width and mentions alignment, hover-only six dots, block selection/dragging, cross-event Copy/Move/Cancel/Remember dialog. These UI outcomes remain user acceptance gates.

Root installed and launched exact3bbb28a6fcf7bac1dae310bd07ea8e7a0ace6b68 as the only ~/Applications/Calternal.app. ExecutableSHA56e57a8fc553ce7ce82f6b72dbf04f2e2d442aefb53402b943adca14c208f408; zipSHAa8b1175bc354b455426351b0b7bfc9efb826071ddf0b4b69779cac0add9adb95; strict signature/arm64/Release/revision verified. Prior26eb quit via native menu; rollback retained. Space content inventory matched before/after replacement. Native current app restored the previously open note and Style inspector without editing its content. Receipt .agents/desktop-install/3bbb28a6/install-receipt.json. User QA preview only. Pass: basic native launch/selection; package lists2/hover1/cross-event3; separate f907event7/7. Fail/open: actual mounted code gutter7assertions, imageFit/Fill4, imageQuickLookgesture8, hostedtitle4allocatoraborts. StyledVMdeeplink did not reach note; nativeUIfallback assigned. Each failure has independent author+reviewer, not closed. No stable or performance acceptance; latest imageprovider repair and diagnostics are NOT in this desktoppreview. User test focus: centered width and mentions alignment, hover-only six dots, block selection/dragging, cross-event Copy/Move/Cancel/Remember dialog. These UI outcomes remain user acceptance gates.
Author
Owner

Remote preservation checkpoint — 2026-09-14

The following original-worktree candidates are now pushed and exact hashes verified on both Forgejo and GitHub. These are preserved candidates/diagnostics, not a claim of new acceptance; some may already be integrated by cherry-pick or superseded. Use the issue’s existing evidence before choosing changes to resume.

  • wave12/editor-top-chrome — 203b1b2475c5bf758b605969196191c0a88dcd57
  • wave16/document-background-edge — a1a8b1631176ead55b72b5d8ea2a928c2c5db5f5
  • wave18/document-chrome-repair — a969f8efc719a046e98be86470b06c1a85836b0c

Master #20 contains the resume instructions. No force push; dev remains 1d8f4adf.

Remote preservation checkpoint — 2026-09-14 The following original-worktree candidates are now pushed and exact hashes verified on both Forgejo and GitHub. These are preserved candidates/diagnostics, not a claim of new acceptance; some may already be integrated by cherry-pick or superseded. Use the issue’s existing evidence before choosing changes to resume. - `wave12/editor-top-chrome` — `203b1b2475c5bf758b605969196191c0a88dcd57` - `wave16/document-background-edge` — `a1a8b1631176ead55b72b5d8ea2a928c2c5db5f5` - `wave18/document-chrome-repair` — `a969f8efc719a046e98be86470b06c1a85836b0c` Master #20 contains the resume instructions. No force push; dev remains 1d8f4adf.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal-macos#6
No description provided.