154 lines
5.1 KiB
Markdown
154 lines
5.1 KiB
Markdown
---
|
|
id: PLN-0017
|
|
ticket: studio-editor-document-vfs-boundary
|
|
title: Add Studio project-session ownership for `prometeu-vfs`
|
|
status: review
|
|
created: 2026-03-31
|
|
completed:
|
|
tags:
|
|
- studio
|
|
- vfs
|
|
- project-session
|
|
- shell
|
|
- lifecycle
|
|
---
|
|
|
|
## Briefing
|
|
|
|
Move `prometeu-vfs` ownership into the Studio project session so document state survives workspace focus changes and is not owned by `EditorWorkspace`.
|
|
|
|
## Objective
|
|
|
|
Create a project-session integration path in Studio that constructs, passes, and disposes `prometeu-vfs` state outside workspace focus transitions.
|
|
|
|
## Background
|
|
|
|
DEC-0009 requires `prometeu-vfs` to live at project-session scope rather than editor-workspace scope. The current project-open path builds a `MainView` directly from `ProjectReference` and has no dedicated project-session service layer for editor document runtime state.
|
|
|
|
## Dependencies
|
|
|
|
- DEC-0009 accepted and normatively locked
|
|
- PLN-0016 accepted or otherwise completed enough to provide the `prometeu-vfs` contract
|
|
|
|
## Scope
|
|
|
|
### Included
|
|
|
|
- add a Studio-side project-session owner for `prometeu-vfs`
|
|
- construct that session during project open
|
|
- keep the session alive while the project window is open
|
|
- dispose the session when the project window closes
|
|
- pass the session or a focused `prometeu-vfs` facade down to `MainView` and workspace consumers
|
|
|
|
### Excluded
|
|
|
|
- editor behavior changes beyond consuming the new session-owned dependency
|
|
- public event API exposure
|
|
- watchers
|
|
- shared product-wide session framework beyond what this boundary needs
|
|
|
|
## Non-Goals
|
|
|
|
- move packer ownership into the same session abstraction
|
|
- create a multi-project global VFS cache
|
|
- redesign the project launcher UX
|
|
|
|
## Execution Method
|
|
|
|
### Step 1 - Introduce a Studio Project-Session Holder for `prometeu-vfs`
|
|
|
|
**What:**
|
|
Create the Studio-side owner that keeps `prometeu-vfs` alive for the lifetime of an opened project window.
|
|
|
|
**How:**
|
|
Add a project-session abstraction or holder in `prometeu-studio` that stores:
|
|
|
|
- the `ProjectReference`
|
|
- the session-owned `prometeu-vfs` instance or facade
|
|
- shutdown/close behavior
|
|
|
|
This holder must not be tied to workspace focus.
|
|
|
|
**File(s):**
|
|
- new `prometeu-studio/src/main/java/p/studio/projectsessions/**`
|
|
- `prometeu-studio/src/main/java/p/studio/Container.java`
|
|
|
|
### Step 2 - Wire Session Creation into the Project Open Path
|
|
|
|
**What:**
|
|
Construct and dispose the project-session-owned `prometeu-vfs` at the same level where the project window lifecycle is managed.
|
|
|
|
**How:**
|
|
Update project-open flow so `StudioWindowCoordinator` creates the project session before the main window is shown and closes it when the project window is torn down.
|
|
|
|
**File(s):**
|
|
- `prometeu-studio/src/main/java/p/studio/window/StudioWindowCoordinator.java`
|
|
- `prometeu-app/src/main/java/p/studio/AppContainer.java`
|
|
|
|
### Step 3 - Pass the Session into the Main Shell
|
|
|
|
**What:**
|
|
Make the project-session-owned `prometeu-vfs` available to shell consumers without making the container globally own per-project state.
|
|
|
|
**How:**
|
|
Update `MainView` construction and related shell wiring so project-scoped consumers receive the session-owned dependency explicitly.
|
|
|
|
**File(s):**
|
|
- `prometeu-studio/src/main/java/p/studio/window/MainView.java`
|
|
- new `prometeu-studio/src/main/java/p/studio/projectsessions/**`
|
|
|
|
### Step 4 - Add Session Lifecycle Tests
|
|
|
|
**What:**
|
|
Verify that `prometeu-vfs` lifecycle follows project-window lifetime rather than workspace focus changes.
|
|
|
|
**How:**
|
|
Add tests that cover:
|
|
|
|
- session creation on project open
|
|
- session reuse while switching workspaces
|
|
- session shutdown on project window close
|
|
|
|
**File(s):**
|
|
- new `prometeu-studio/src/test/java/p/studio/projectsessions/**`
|
|
- new `prometeu-studio/src/test/java/p/studio/window/**`
|
|
|
|
## Test Requirements
|
|
|
|
### Unit Tests
|
|
|
|
- session holder lifecycle behavior
|
|
- shutdown behavior
|
|
|
|
### Integration Tests
|
|
|
|
- coordinator-level test for project-open and project-close lifecycle
|
|
|
|
### Manual Verification
|
|
|
|
- open a project, switch between workspaces, and confirm document state is not recreated by workspace focus changes
|
|
- close the project window and confirm project-session resources are released
|
|
|
|
## Acceptance Criteria
|
|
|
|
- [ ] `prometeu-vfs` is owned by a Studio project session rather than `EditorWorkspace`
|
|
- [ ] opening a project creates the session before normal editor consumption
|
|
- [ ] workspace focus changes do not destroy the project-document state
|
|
- [ ] closing the project window releases session-owned resources
|
|
|
|
## Affected Artifacts
|
|
|
|
- `prometeu-studio/src/main/java/p/studio/Container.java`
|
|
- `prometeu-app/src/main/java/p/studio/AppContainer.java`
|
|
- `prometeu-studio/src/main/java/p/studio/window/StudioWindowCoordinator.java`
|
|
- `prometeu-studio/src/main/java/p/studio/window/MainView.java`
|
|
- new `prometeu-studio/src/main/java/p/studio/projectsessions/**`
|
|
- new `prometeu-studio/src/test/java/p/studio/projectsessions/**`
|
|
- new `prometeu-studio/src/test/java/p/studio/window/**`
|
|
|
|
## Risks
|
|
|
|
- letting the container own per-project state globally would collapse window boundaries
|
|
- placing ownership too low in the shell would recreate the same focus-coupling problem under a different name
|
|
- weak disposal semantics would leak project-session resources after window close
|