# cf-genui-e2e: end-to-end flows of the GenUI plan

Source: `data/cf-genui-plan/plan.html` and `report.md` (rounds 2-29), the fleet brief (`data/cf-genui-fleet/brief.md`, "every feature working end to end"), `docs/genui/*.md`.
A flow is a path from the owner's action to a real effect (board, fleet, worker), not one UI item.
UI items are in `data/cf-genui-dogfood2/checklist.md` (81 items).

Target: `fm/cf-genui-e2e` (`fm/cf-fix-s3` + the fix commit), run as my own copy on this host in headless Chrome, on throwaway boards, with real read data (GitHub, crewboard, omp stats, host load).
Writes go to a throwaway crewboard topic and a scratch firstmate home, never to his board, his workers or his PRs.

Status: works / broken. Each recording is a video of the live run; captions in the video name each step.
Issue: https://github.com/i098/Crewship/issues/1085.

| Id | Flow | Expected result | Before fix | After fix | Recording | Fault found |
|---|---|---|---|---|---|---|
| E01 | Open the board | Page connects, header and cards paint within 3 s; a "connecting" state shows while it waits; refresh moves nothing | broken | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/fp-final.mp4) | blank first paint; now the cached board paints at once and "Connecting to the board..." shows (before [cold](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/fp-before-cold.png), [cached](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/fp-before-cached.png); after [cold](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/fp-final-cold.png), [cached](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/fp-final-cached.png)) |
| E02 | Live data | Real PRs with checks, crew or workers, usage and host stats show, and change on the board without a reload when the source changes | works | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E02-live-data.mp4) |  |
| E03 | Ask, AI picks the view | A typed ask shows an ack at once, then a model plans and emits a fitting view (table, chart, timeline, board) on the board | works | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E03-ask.mp4) |  |
| E04 | Working on, live | While an ask or a worker runs, its steps show live on the board ("working on") and clear when done | broken | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E04-working.mp4) | crew answer listed mates only; now it lists workers too |
| E05 | Decision reaches the fleet | An open worker ask (needs-decision) shows as a decision card; a pick, then Yes, delivers the answer to that worker's inbox; the card resolves | broken | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E05-decide.mp4) | no option buttons when `Options:` had no final period; a second pick left two confirms; fixed |
| E06 | Steer a worker | Select a worker card, type an instruction, confirm: the message lands in that worker's inbox | broken | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E06-steer.mp4) | the steer confirm landed off screen; new confirm cards now come to the front |
| E07 | PR actions | Approve, decline and claim on a PR card are recorded once with the right PR number; merge runs only after a confirm and only when checks are green | broken | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E07-decisions.mp4) | a non-PR decision was recorded as `Approve #NaN` with a `gh pr merge NaN` draft; now recorded by its card |
| E08 | Crew answer comes back | A crew reply to an ask fills the ask card on the board | works | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E08-crew-reply.mp4) |  |
| E09 | Header pills build live cards | The host-stats pill and a crew pill build a card that keeps updating | broken | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E09-pills.mp4) | the pill card landed in another cluster off screen; now brought to the front |
| E10 | Ask about a selected card | Select a card and ask: the answer is about that card and lands in its cluster | broken | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E10-ask-selected.mp4) | Up next tap left the card off screen (camera did not move); now the card comes to the front |
| E11 | Draw, then ask | Pen ink, then an ask: the answer is pinned next to the drawing | works | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E11-draw-ask.mp4) |  |
| E12 | Ask in full view | Open a card in full view and ask: the answer sits under that card | works | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E12-full-view-ask.mp4) |  |
| E13 | Remove and rewind | X removes a card and the removal survives a reload; z brings it back; z after a pill tap removes the opened card | works | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E13-remove-rewind.mp4) |  |
| E14 | Move and resize persist | A resized or pinned-and-moved card keeps its size and place after a reload | works | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E14-resize-persist.mp4) |  |
| E15 | Keys | Hotkeys drive the board: 0, [ ], /, L, z, Space, Esc, and a letter types into the ask box | works | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E15-keys.mp4) |  |
| E16 | Board verbs by ask | "show all boards" spreads every cluster; "make X bigger" resizes it | broken | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E16-verbs.mp4) | "show all boards" did nothing; now opens the spread view |
| E17 | Option hover preview | Hover on a decision option shows its outcome on the cards it changes; leave animates back | works | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E17-hover-preview.mp4) |  |
| E18 | Upload | A dropped or picked file shows as a card (image, text, PDF, other = Download) | works | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E18-upload.mp4) |  |
| E19 | Phone | At 390 px: load, ask, pick and confirm all work, one column, no sideways scroll | works | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E19-phone.mp4) |  |
| E20 | Restart survives | After the board server restarts, the page reconnects and shows the same board | works | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E20-restart.mp4) |  |
| E21 | Access | Only the allowed tailnet login opens the board socket; others get 403 | works | works | [video](https://pub-c548cd7bc64c41ae8ce0d860578f3b6f.r2.dev/87ee91ada87ad0d3131f1617b0eab151c0b80c670218c5cc/cf-genui-e2e/E21-access.mp4) |  |

Notes:
- E07 merge was not run for real: Approve on a green PR records a decision and a draft `gh pr merge` command only, by design. Merge was never clicked on his PRs.
- The shared GitHub account hit its API limit twice during the runs; PR cards are empty until it resets (the feeder logs a gap). This is outside the app.
- Host load was 130 on 96 cores; cold first load took 3.6 s, cached paint is instant.

done: all 21 flows work, evidence data/cf-genui-e2e/flows.md
