---
title: Iterate on the Past generations panel in the view generation control
type: task
status: completed
description: >-
  UX/UI iteration on the Past generations panel shipped 2026-09-28: fix the entry disappearing after
  a reopen and the awkward Show more paging, and review the panel end to end for further friction
  and gaps.
base_uri: user:task/league/data-views/iterate-past-generations-panel.md
created_at: '2026-09-28T16:39:37.135Z'
entity_id: 084b3633-c882-4763-b2fb-7b9971fc5562
finished_at: '2026-09-28T18:03:10.290Z'
observations:
  - ████████████████████████████████████████████████
owner_identity_uri: █████████████████████████
priority: Medium
public_read: true
relations:
  - relates [[█████████████████████-█████████-███-████████-████-█████████████]]
tags:
  - user:tag/league-xo-football.md
updated_at: '2026-10-17T22:10:44.772Z'
visibility_analyzed_at: '2026-11-05T23:48:53.826Z'
---

# Iterate on the Past generations panel

The view generation control on the data views and plays pages carries a **Past generations** panel (shipped 2026-09-28, deployed at league `bc0d8f1b2`; commits `a4cfd5087`, `dc15c49a9`, `af99f01ee`). It lists the signed-in account's completed runs for that page from `GET /api/view-generations`, searchable over instruction and view name, keyset-paged; opening a row places the run's view as a new draft and attaches the control to the run (instruction, result, Save, Share). This task is the UX/UI iteration on that first cut.

## Operator-reported friction (2026-09-28)

- After clicking a past generation, the Past generations entry is no longer visible.
- Loading more with the "Show more" button is awkward.

## Findings (production as user 1, 2026-09-28, both pages)

- **Entry after a reopen**: present on both pages at every wait up to 10s — no remount, no live state hides it. It renders as grey 12px text directly beside the grey "Enter to build" hint, so it reads as part of the hint, not as a way back. Nothing else on a reopened run points back to the list.
- **Reopen loses your place**: the list unmounts on a pick, so going back resets the search and scroll to the top of about 490 runs.
- **Show more**: a text button below a 360px scrolling list, about seven rows visible at a time.
- **Rows**: refinement chains repeat one view name (three "QB EPA and Volume Since 2019" rows in a row). The instruction — the only thing that differs — is the grey, one-line, truncated secondary line.
- **Timeline on a reopened run**: works on production (emit entry, tool-call count, duration all arrive through the collect).
- **Plays parity**: identical behaviour.
- **Out of scope, seen in passing**: the reopened QB EPA view shows a filter-scope notice rendering `[object Object]`.

## Agreed design (operator approved 2026-09-28)

The first proposal (a back link inside the generation control) was rejected: the operator wants past generations reachable from the page itself, and flagged the overlap with the Current View picker, which already has search, a section rail and a scrolling view list.

- Past generations become a **Generated** section in the Current View picker's rail, beside All, Mine, Shared, System and By author. One place to find any view.
- Rows use the picker's own two columns: view name and age on the left, the instruction in the description column. Consecutive runs with the same name show the name once.
- The picker's Filter Views box searches generations server-side. The list pages itself on scroll inside the picker's existing tall list.
- Picking a run opens its view as a new draft and opens the generation panel attached to it, showing the instruction, timeline, Save and Share.
- The Past generations button and list are removed from the generation control entirely.
- Needs a react-table extension point: a caller-supplied rail section with its own label, count and list renderer, following the existing `render_system_views` pattern.
- Plays already shows the rail for a signed-in reader, so it gets the section with no extra work.

## Plan

- [x] Reproduce both reports against production as the operator, and name the cause of each
- [x] Review the whole surface end to end and write down the friction and gaps found
- [x] Propose the iteration to the operator and agree it before changing code
- [x] Implement, spec, and browser-verify on both pages (react-table `9b84c6e`, league `87a35ff15`)
- [x] Deploy — shipped at league `c71c0c30d` in the █████████████████████████████ session's deploy:all, verified on xo.football on both pages
