---
title: Verify a generated data view reloads with its title and description
type: task
status: cancelled
description: >-
  Browser confirmation that the 2026-09-09 last-active-record fix removes the reported symptom: a
  generated data view restored on reload with an empty title and description. The unit and
  source-scan coverage is committed; only the redux-saga wiring is unverified.
base_uri: user:task/league/data-views/verify-generated-view-reload-metadata.md
created_at: '2026-09-09T15:42:37.713Z'
entity_id: 043f2b0b-b9a7-4170-82d0-82cffa1086a2
finished_at: '2026-10-17T22:10:42.624Z'
observations:
  - ████████████████████████████████████████████████
owner_identity_uri: █████████████████████████
priority: Low
public_read: true
tags:
  - user:tag/league-xo-football.md
updated_at: '2026-10-17T22:10:42.624Z'
visibility_analyzed_at: '2026-11-05T23:49:04.514Z'
---

Confirm in a browser that a generated data view reloads with its title and description intact — the user-visible symptom that prompted the fix, and the one oracle the committed specs cannot reach.

## Why this is open

The fix landed in `1d45e73d4` and its coverage in `5a4d72c3b`, both pushed with passing verify verdicts. Every rule is specced and mutation-scored, and the saga call sites are pinned by a source scan — but nothing drives redux-saga end to end. The saga tier cannot be imported from a spec at all (`ReferenceError: Cannot access 'auction_sagas' before initialization`, the circular barrel), so the wiring from a real generation through the debounced `DATA_VIEW_CHANGED` watcher into `localStorage` has been verified by reading only.

## What to do

Run `yarn dev:live` per [[███████████████████████████████-█████████]], then:

1. Generate a view from a natural-language instruction so the run renames and describes the selected view.
2. Reload the page without saving the view. The header must show the generated name and description, and the columns must match the generated ones.
3. Repeat while signed out, where `GET /api/data-views` is never issued and the restore is the only source of metadata.
4. Check the same for a view the user renames by hand through the edit modal. That path dispatches `view_state_changed: false`, so it does not re-record; it saves to the server instead, and the record repairs itself when the list lands. Confirm the transient first frame is acceptable rather than a second defect.

## Known scope exclusion

Plays views carry the same class of defect by a different mechanism and were deliberately left alone. Their last-active record stores the view id alone and their restore runs only after the server list lands, so an unsaved generated plays view is not restored at all rather than restored nameless. Decide separately whether that is worth fixing.

## Key locations

- `app/core/data-views/resolve-browser-persistence.mjs` — the extracted rule; what writes each record and when
- `app/core/data-views/resolve-initial-view-selection.mjs` — what the page restores before first paint
- `libs-shared/data-view-storage/storage.mjs` — the three localStorage keys
- `app/core/data-view-generation/sagas.js` — where a generation applies its result
- `test/data-views.browser-persistence.spec.mjs`, `test/data-views.restore-view-metadata.spec.mjs` — the committed coverage
- `docs/guides/spa.md` § "Restoring state at mount" — the written-up class
