# Phase 20.1.1: Notes History Popover + Recipient Detail Sidebar - Discussion Log

> **Audit trail only.** Do not use as input to planning, research, or execution agents.
> Decisions are captured in CONTEXT.md — this log preserves the alternatives considered.

**Date:** 2026-04-15
**Phase:** 20.1.1 - change-the-i-button-on-cards-to-show-a-scrollable-history-of
**Areas discussed:** (i) button role + popover shape, Note entry model, New-note composer, Card face reclaim, Notes data source / offline, Recipient-detail sidebar

---

## (i) Button Role + Popover Shape

### (i) button role

| Option | Description | Selected |
|--------|-------------|----------|
| (i) = notes only; Rx moves to name/avatar click | Rx stays on card, triggered by name/avatar | |
| (i) = notes only; Rx gets its own new icon | Second icon on card for Rx | |
| Merge: one popover with tabs | Notes + Rx share one popover with tabs | |
| (i) = notes; drop Rx summary entry on card | Rx not reachable from card tile | ✓ (modified) |

**User's choice:** (i) = notes only. Rx moves to a **new sidebar in the Recipients tab**, styled like the product-detail sidebar. Rx not accessible from the dashboard card directly.

### Popover shape

| Option | Description | Selected |
|--------|-------------|----------|
| Popover anchored to (i) button | Matches summary-popup pattern | ✓ |
| Full modal, centered | Centered, dims dashboard | |
| Side drawer from right edge | Slides in from right | |
| Inline expansion on the card | Card expands in place | |

**User's choice:** Popover anchored to (i) button.

### Empty/many-notes handling

| Option | Description | Selected |
|--------|-------------|----------|
| Fixed height, scroll when overflow | Fixed popover; "No notes yet" empty state | ✓ |
| Grows with content up to a cap | Small when empty; grows until max | |
| Fixed height + lazy-load older notes | Newest load first; older on scroll | |

**User's choice:** Fixed height, scroll when overflow.

---

## Note Entry Model

### Note metadata

| Option | Description | Selected |
|--------|-------------|----------|
| Author + relative time | Author + "2h ago"; hover for absolute | ✓ |
| Author + absolute datetime | Inline full date/time | |
| Relative time only | No author | |
| Author + relative + day dividers | With "Today"/"Yesterday" separators | |

**User's choice:** Author + relative time.

### Sort order

| Option | Description | Selected |
|--------|-------------|----------|
| Newest at top, scroll down for older | Latest visible immediately | ✓ |
| Oldest at top, newest at bottom (chat) | Chronological; auto-scroll to bottom | |

**User's choice:** Newest at top.

### Mutability

| Option | Description | Selected |
|--------|-------------|----------|
| Append-only | Immutable audit trail | ✓ |
| Edit + delete own notes | Full mutability via pending_edit | |
| Delete only (no edit) | Remove mistakes only | |

**User's choice:** Append-only.

---

## New-Note Composer

### Composer position

| Option | Description | Selected |
|--------|-------------|----------|
| Top of popover, above history | Always visible at top | |
| Bottom of popover, below history | Chat-style pinned bottom | |
| Top, collapses into 'Add note' button when empty | Small button expands on click | ✓ |

**User's choice:** Top, collapses into 'Add note' button when empty.

### Submit mechanic

| Option | Description | Selected |
|--------|-------------|----------|
| Enter submits, Shift+Enter newline | Chat-style | |
| Ctrl+Enter submits, Enter = newline | GH/Slack-style | ✓ |
| Explicit Send button only | No keyboard submit | |
| Send button + Ctrl+Enter | Both | |

**User's choice:** Ctrl+Enter submits, Enter = newline.

### Sync UX

| Option | Description | Selected |
|--------|-------------|----------|
| Optimistic — note appears instantly, silent flush | No visible pending indicator | ✓ |
| Optimistic with subtle 'syncing' dot on the note | Small pending indicator | |
| Block until confirmed | Disabled composer until GH confirms | |

**User's choice:** Optimistic, silent flush.

---

## Card Face Reclaim

### Space usage

| Option | Description | Selected |
|--------|-------------|----------|
| Grow squares proportionally, same count | Enlarge squares; card height unchanged | ✓ |
| Grow squares + grow product-related text | Larger squares and bigger text | |
| Show more squares (more density) | More squares visible, same size | |
| Shrink card height | More compact cards, more fit on screen | |

**User's choice:** Grow squares proportionally, same count.

### Row 6 (Missing label)

| Option | Description | Selected |
|--------|-------------|----------|
| No change — stays suppressed | Leave as-is | |
| Remove entirely | Delete the row | |

**User's choice:** User asked what Row 6 was. Explained: it's a stale comment referencing a warning that was already removed in Phase 20.1 (SC02). Treated as "no change needed" — the comment can be cleaned up opportunistically during the card.slint restructure.

---

## Notes Data Source / Offline

### Read source

| Option | Description | Selected |
|--------|-------------|----------|
| SQLite only (offline-first rule) | Sync cycle pulls; popover reads SQLite | |
| SQLite with on-demand GH refresh when opened | SQLite first + targeted fetch on popover open | ✓ |

**User's choice:** SQLite with on-demand GH refresh on popover open.

### Pending UI

| Option | Description | Selected |
|--------|-------------|----------|
| Indistinguishable from confirmed notes | No visual difference | ✓ |
| Subtle 'pending' indicator | Small dot/muted styling until confirmed | |
| No visual difference, toast on failure | Failures surface only | |

**User's choice:** Indistinguishable from confirmed notes. (Failures surface via existing toast system — this is implicit.)

### Offline behavior

| Option | Description | Selected |
|--------|-------------|----------|
| Queue in pending_edit, flush when online | Matches Phase 20 offline-first model | ✓ |
| Block note submission while offline | Composer disabled offline | |

**User's choice:** Queue in pending_edit, flush when online.

---

## Recipient-Detail Sidebar

### Sidebar fields

| Option | Description | Selected |
|--------|-------------|----------|
| Exact current summary-popup content | Verbatim port from popover | |
| Current content + expanded room for more | Same + room to grow | ✓ (specified) |
| Trimmed — essentials only | Drop Recipient Products | |

**User's choice:** Current content + extras to match product-detail sidebar. Specified layout: avatar at top, name beside it in large font, links to Shopify profile and (future phase addition) ww-recipient issue, Discord username, Shopify email address.

### Selection

| Option | Description | Selected |
|--------|-------------|----------|
| Click any recipient tile in Recipients grid | Tile-click opens sidebar | |
| Click recipient name on a card tile (dashboard) | Opens sidebar from dashboard card | |
| Both — Recipients tab tile click AND card name click | Two entry points | ✓ (modified) |

**User's choice:** Both — with a nuance: card name click **shifts the user over to the Recipients tab** and selects that recipient there. It does NOT open the sidebar from within the dashboard.

### Dismiss/edit

| Option | Description | Selected |
|--------|-------------|----------|
| Matches product-detail sidebar exactly | Same animation, close affordances, edit patterns | ✓ |
| Matches product-detail + explicit Close/back | Plus prominent close | |

**User's choice:** Matches product-detail sidebar exactly.

---

## Claude's Discretion

- Exact popover dimensions (width/height)
- Product-square scaling factor and whether product text needs a small bump for balance
- Implementation of targeted per-card ww-note GH refresh on popover open (new client method vs. reusing existing sync primitives)
- Whether name-click-to-tab-nav needs a new callback on RecipientCard or reuses existing navigation wiring
- In-memory representation of optimistic notes before flush confirmation

## Deferred Ideas

- Edit/delete of existing notes (append-only for now)
- Per-note pending/sync indicator
- ww-recipient GH Issues integration (placeholder link reserved)
- Lazy-loading large note histories
- Increasing product-square count on the card (chose grow-same-count instead)
