# PR-07b Asset Navigator and Row Subscriptions Domain owner: `docs/studio` ## Briefing Refactor the navigator side of the `Assets` workspace so the list and each asset row update through event subscriptions instead of workspace-wide rerendering. ## Objective Make navigator behavior event-directed and component-local. After this PR: - the navigator list subscribes to projection changes it actually needs; - each asset row subscribes to row-scoped summary/selection updates; - search and filters change the navigator projection without rebuilding the whole workspace; - selection styling and row patching happen without forcing a full list refresh from the workspace root. - the navigator and row patterns are implemented in a way that other Studio workspaces can reuse for list/detail navigation surfaces. ## Dependencies - [`./PR-07a-assets-event-topology-and-lifecycle-foundation.md`](./PR-07a-assets-event-topology-and-lifecycle-foundation.md) - [`../specs/4. Assets Workspace Specification.md`](../specs/4.%20Assets%20Workspace%20Specification.md) ## Scope - extract the navigator into dedicated controls - separate navigator projection calculation from visual control ownership - introduce row-scoped subscriptions and row identity handling - keep reusable list/projection primitives outside `Assets`-only naming where they are genuinely cross-workspace - publish projection updates for: - search changes - filter changes - structural asset collection changes - per-asset summary patches - selection changes - remove direct row bookkeeping from the workspace root where possible ## Non-Goals - no details-panel refactor in this slice - no final mutation confirmation flow refactor in this slice - no broad service-layer redesign beyond what navigator subscriptions require ## Execution Method 1. Introduce an `AssetNavigatorControl` or equivalent host with lifecycle-managed subscriptions. 2. Extract row rendering into an `AssetRowControl` or equivalent lifecycle-managed component. 3. Move search/filter handling to event publication plus projection recalculation. 4. Publish selection updates as typed events that row controls can consume directly. 5. Replace root-owned row maps and manual selection restyling with row-scoped update flow. ## Acceptance Criteria - asset rows are no longer rebuilt by default on every local navigator change - search and filter changes update the navigator projection only - selecting an asset updates only the controls that depend on selection - patching one asset summary updates the affected row without requiring a full workspace reload - navigator controls subscribe and unsubscribe through the lifecycle support - reusable navigator/list subscription patterns are left available for future Studio workspaces ## Validation - unit tests for navigator projection event flow - unit tests for row identity stability across patches - unit tests for selection update behavior without full projection rebuild - UI smoke validation for search, filters, and selection transitions ## Affected Artifacts - `prometeu-studio/src/main/java/p/studio/workspaces/assets/AssetWorkspace.java` - new navigator and row controls under `prometeu-studio/src/main/java/p/studio/workspaces/assets/...` - `prometeu-studio/src/main/java/p/studio/events/...` - tests for navigator projection and row update behavior