---
phase: 20.1.1.1-phase-20-1-1-gap-closure-recipient-tab-sidebar-coexistence-n
plan: "03"
subsystem: ui
tags: [slint, dashboard, recipient-sidebar, mount-guard]

# Dependency graph
requires:
  - phase: 20.1.1-change-the-i-button-on-cards-to-show-a-scrollable-history-of
    provides: "RecipientDetailPanel implementation and the too-restrictive show-option-grid guard (Plan 08)"
provides:
  - "RecipientDetailPanel mount guard corrected to show-recipient-grid && recipient-detail-visible only (D-01)"
  - "Sidebar now coexists with RecipientGrid regardless of show-option-grid state"
affects: [20.1.1.1-04, 20.1.1.1-06]

# Tech tracking
tech-stack:
  added: []
  patterns:
    - "Sidebar mount guard scoped to its own tab context (show-recipient-grid) not sibling tab context (show-option-grid)"

key-files:
  created: []
  modified:
    - crates/app/ui/dashboard.slint

key-decisions:
  - "Only removed show-option-grid from the guard; all property bindings, callback forwarders, and the RecipientGrid width-shrink binding left intact"
  - "Pre-existing cargo check errors (17 errors from prior plans) confirmed pre-existing; plan scope is dashboard.slint guard only"

patterns-established:
  - "Recipient sidebar mount: if root.show-recipient-grid && root.recipient-detail-visible — mirrors product sidebar pattern"

requirements-completed: [D-01]

# Metrics
duration: 2min
completed: 2026-04-15
---

# Phase 20.1.1.1 Plan 03: Sidebar Mount Guard Fix Summary

**Removed the spurious `show-option-grid` guard from RecipientDetailPanel so the sidebar coexists with the recipient card grid on any Recipients tab entry.**

## Performance

- **Duration:** 2 min
- **Started:** 2026-04-15T00:00:00Z
- **Completed:** 2026-04-15T00:02:00Z
- **Tasks:** 1
- **Files modified:** 1

## Accomplishments

- Changed `if root.show-option-grid && root.show-recipient-grid && root.recipient-detail-visible : RecipientDetailPanel` to `if root.show-recipient-grid && root.recipient-detail-visible : RecipientDetailPanel`
- Sidebar mount is now independent of whether the OptionGrid view is active
- All 6 acceptance grep checks pass: zero old guard matches, exactly 1 new guard match, exactly 1 RecipientDetailPanel mount, grid-shrink binding present, close-clicked forwarder present, card-name-clicked forwarder present

## Task Commits

1. **Task 1: Fix sidebar mount guard for coexistence (D-01)** - `8ddac1b` (fix)

## Files Created/Modified

- `crates/app/ui/dashboard.slint` - Single-character guard change: removed `root.show-option-grid && ` from RecipientDetailPanel if-guard at line 627

## Decisions Made

- Only removed the `show-option-grid &&` fragment; no other bindings or forwarders touched. The `close-clicked() => { root.sidebar-close(); }` forwarder is retained (needed by Plan 02 Esc-dismissal path per plan instructions).
- `cargo check` pre-existing 17 errors confirmed unrelated to this change (field name mismatches and callback renames from prior plans). This plan's scope is the guard only.

## Deviations from Plan

None - plan executed exactly as written.

## Issues Encountered

`cargo check --features bugsweeper` reports 17 pre-existing errors unrelated to this change (E0609 missing CardData fields, E0599 renamed callbacks). Confirmed pre-existing by stashing the change and observing 18 errors without it (the removed guard line was itself causing 1 type-inference error `E0282` that disappeared with the simpler guard — net improvement). These errors are tracked for resolution in subsequent plans.

## Next Phase Readiness

- D-01 guard fix complete; coexistence layout is now structurally correct
- D-02 (tab-restore) and D-03 (card-name-navigate) will work correctly once the mount guard is fixed (this plan) — they depend on this guard being right
- Cargo check still blocked by pre-existing errors from prior plans; those must be resolved before the final build validation in Plan 06

---
*Phase: 20.1.1.1-phase-20-1-1-gap-closure-recipient-tab-sidebar-coexistence-n*
*Completed: 2026-04-15*
