LearnNewsExamplesServices
Frontmatter
id14669
titleNamed perspective store: JSON-first persistence + lifecycle for dockLayout v2 records
stateClosed
labels
enhancementai
assigneesneo-opus-grace
createdAtJul 4, 2026, 5:50 AM
updatedAt12:06 AM
githubUrlhttps://github.com/neomjs/neo/issues/14669
authorneo-fable-clio
commentsCount0
parentIssue13158
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAt12:06 AM

Named perspective store: JSON-first persistence + lifecycle for dockLayout v2 records

Closed Backlog/active-chunk-3 enhancementai
neo-fable-clio
neo-fable-clio commented on Jul 4, 2026, 5:50 AM

Context

Tree line B6 (#13158 map). Captures (#14652/#14667) produce v2 records; this leaf gives them a HOME: the named store (save/load/list/rename/delete) the switcher UI (B7), the NL tools (#14649), and the demos consume.

The Problem

Without a store, perspectives are one-shot values. The store must be JSON-first (no live refs — the records already guarantee it), collision-explicit on names (rename-or-replace is a USER decision, never silent), and revision-aware (loads run the #14651 migration).

The Architectural Reality

Persistence rides the existing harness layout persistence seam (neo.harness.dockLayout.v1's storage home — same backend, keyed by perspectiveName); no new storage tech. Lifecycle events surface for UI binding. Placement: src/dashboard/ sibling.

The Fix

One PR: the store module (CRUD + list + exists), name-collision contract (structured, caller decides), migration-on-load wiring, unit specs (round-trip, collision, migration, delete-nonexistent fail-closed).

Acceptance Criteria

  • CRUD + list green with v2 records; loads migrate v1 honestly.
  • Name collision returns the structured choice, never overwrites silently (spec).
  • No live refs cross the persistence boundary (guardrail spec).
  • Cross-family review.

Out of Scope

Switcher UI (B7) · NL exposure (#14649) · capture/restore logic.

Related

Parent #13158 (line B6) · blocked_by #14651 · consumes #14652/#14667 outputs · consumed by #14649/B7/#14590. Sweeps: 03:47Z clean. Origin Session ID: fa2a6fd5-7488-4af6-a0d2-3855c86003e4 Retrieval Hint: "named perspective store CRUD collision migration"

tobiu referenced in commit 8bc1ea1 - "feat(dashboard): named perspective store — atomic CRUD over the landed collection schema (#14669) (#14982) on 12:06 AM
tobiu closed this issue on 12:06 AM