Files
PodTui/tasks/yazi-remake/07-blocker-task-04-player-search.md
Michael Freno 6cd90ad6c0 docs(yazi-remake): mark task 07 blocked, file task 04 blocker for player/search panes
The verification gate found that Task 04's core deliverable was never
implemented: Player and Search pages are not routed through <YaziPaneRow>,
so Player renders a single full-width column and Search's three columns
sit at equal thirds (31/32/31) instead of the target 1:3:3 ratio
(~14/43/43).

- Mark task 07 status BLOCKED with a pointer to the blocker evidence
- Add 07-blocker-task-04-player-search.md documenting the missing
  implementation, evidence (player/search harness frames), failing exit
  criteria, and a fix plan for the task 04 do-over
2026-07-31 19:30:40 -04:00

4.0 KiB
Raw Permalink Blame History

07-blocker — Task 04 (Search + Player) never converted to YaziPaneRow

meta: id: yazi-remake-07-blocker feature: yazi-remake priority: P0 blocks: [yazi-remake-07] blocked_by: [yazi-remake-04] tags: [blocker, verification, tasks-required]

Problem

Task 04 (04-fit-search-and-player-panes.md) is marked complete, but its core deliverable was never implemented:

  • src/pages/Player/PlayerPage.tsx — rendered through <YaziPaneRow>
  • src/pages/Search/SearchPage.tsx — rendered through <YaziPaneRow>

grep -rn "YaziPaneRow" src/pages/Search src/pages/Player0 files.

Evidence (from task 07 harness walk-through, 100×30)

Player

src/pages/Player/PlayerPage.tsx renders a single full-width <scrollbox> (now-playing transport + controls). No parent pane, no preview pane. Frame .harness/player-current.txt:

│ Now Playing                                                  0:00 / 0:00 (0%) │
...
│ │ │[Prev]│ │[Play]│ │[Next]│   Vol 70%  Speed 1x  ... │ │

Expected (task 04 + feature exit criteria): blank | transport | notes at 1/7 : 3/7 : 3/7.

Search ⚠️ ratio wrong

src/pages/Search/SearchPage.tsx renders three custom <box flexGrow={ PANE_RATIO.* }> columns but omits flexBasis={0}, so Yoga distributes space by natural content width (the input box is width={28}). Measured column widths at 100 cols: 31 / 32 / 31 (equal thirds), NOT the target ~14 / 43 / 43 (1:3:3).

<YaziPaneRow> exists precisely to set flexBasis={0} per column and force the exact 1:3:3 ratio regardless of content (see its header comment). Routing Search through it fixes the ratio for free.

Why not patched in task 07

Task 07 is explicitly the verification gate. Its notes:

  • This is the gate for the whole feature — do not mark done if any criterion fails; open a blocker task instead
  • If the harness reveals a visual regression (e.g. parent collapses, ratios off), file it against the responsible task (02 or 03) rather than patching here

This is a missing implementation in task 04, not a regression in 02/03, so the responsible task is 04. Patches belong there.

Failing exit criteria

  • "All tabs render three stable columns at 1/7 : 3/7 : 3/7" — Player fails (not 3 columns); Search fails (wrong ratio).
  • "5 → Player: blank|transport|notes at 1:3:3" — fails.
  • "4 → Search: query|results|detail at 1:3:3" — 3 columns yes, ratio wrong.

Fix plan (task 04 do-over)

  1. src/pages/Player/PlayerPage.tsx — wrap the existing transport JSX in a <YaziPaneRow current={transport} parent={undefined} preview={notes} />. Parent should fall through to the primitive's muted placeholder (it already keeps its 1/7 slot when blank). Preview = episode description / waveform (currently inline under "Now Playing"). Keep PlayerPaneCount=1 (the visible columns are a render concern; only current=0 is focusable).
  2. src/pages/Search/SearchPage.tsx — replace the three custom <box flexGrow={PANE_RATIO.*}> columns with a single <YaziPaneRow parent={queryInput+recent} current={resultsList} preview={detail} focused={!inputFocused() ? /* results */ : false} />. Keep the inputFocused effect so the Shell yields keys to the native <input> when the query pane is focused — note inputFocused is a Search-owned signal; YaziPaneRow's focused prop only drives the accent ring + scroll focus, which for Search can stay on the current (results) column.
  3. Remove the now-dead custom ratio code from both files after the swap.
  4. Re-run: grep -rn YaziPaneRow src/pages/Search src/pages/Player → 2 files; bun run build; bun test; harness walk-through: Player shows 3 cols, Search cols measure ~14/43/43.

Verification gates (re-run task 07 after fix)

  • bun run build → "Build complete"
  • bun test → 0 fail
  • harness:
    • Player frame has 3 bordered columns (parent , current transport, preview notes/placeholder) at 1:3:3
    • Search frame columns measure ~14/43/43