activity PR added

This commit is contained in:
bQUARKz 2026-03-12 09:03:42 +00:00
parent ebbfe311ee
commit be3eaaf4cf
Signed by: bquarkz
SSH Key Fingerprint: SHA256:Z7dgqoglWwoK6j6u4QC87OveEq74WOhFN+gitsxtkf8

View File

@ -0,0 +1,111 @@
# PR-06 Project-Scoped Studio State and Activity Persistence
Domain owner: `docs/studio`
## Briefing
Move Studio-local project persistence under each project root and make shell activity durable per project.
The target model is:
- each project owns a `.studio/` directory;
- `.studio/` is created when a new project is created;
- shell activity is stored inside that project-local directory and restored when the project is opened;
- activity retention is capped at a fixed maximum of `500` entries;
- the same `.studio/` root becomes the reserved home for future Studio project configuration.
## Objective
Make Studio state project-scoped instead of application-global where the data is inherently tied to one project, starting with activity persistence and the project-local Studio storage root.
After this change:
- opening a project reloads its recent activity feed;
- new activity entries are appended to that project's persisted history;
- persisted history is trimmed to the latest `500` entries;
- newly created projects already contain the `.studio/` structure expected by Studio.
## Dependencies
- [`../specs/1. Studio Shell and Workspace Layout Specification.md`](../specs/1.%20Studio%20Shell%20and%20Workspace%20Layout%20Specification.md)
- current project creation flow in `ProjectCatalogService`
- current shell activity mapping and rendering in `StudioActivityFeedControl`
## Scope
- define the project-local Studio storage convention under `.studio/`
- persist shell activity entries per project
- restore persisted activity when a project shell opens
- enforce a hard retention cap of `500` entries
- create `.studio/` during new-project scaffolding
- reserve `.studio/` as the home for future project-local Studio settings
- replace the current scaffolded `.workspace/` directory with `.studio/`
## Non-Goals
- no redesign of activity event semantics or severity mapping
- no cross-project merged activity history
- no migration of global launcher data such as known projects
- no broad persistence pass for every workspace in this PR
- no attempt to define every future file that may live under `.studio/`
## Execution Method
1. Define the `.studio/` storage contract for Studio-owned project data.
Proposed baseline layout:
- `.studio/activities.json` for persisted shell activity history
- `.studio/settings.json` reserved for project-local Studio configuration
2. Introduce a small project-local storage path abstraction.
It should centralize resolution of `.studio/`, activity storage, and future settings storage from `ProjectReference.rootPath()`.
3. Add an activity persistence service/repository.
Responsibilities:
- load persisted entries for a project;
- store entries after append;
- normalize malformed or missing files into an empty history;
- trim persisted and in-memory history to the latest `500` records.
4. Refactor `StudioActivityFeedControl` to become project-aware at construction time.
The control should:
- hydrate its initial list from persisted project activity;
- append new mapped entries to memory and persistence;
- preserve the existing duplicate-suppression behavior unless it conflicts with durable history expectations.
5. Update shell composition to pass the active `ProjectReference` into the activity feed.
`MainView` should instantiate the feed for the currently opened project instead of a project-agnostic global feed.
6. Update project creation scaffolding.
`ProjectCatalogService.createProject(...)` must create `.studio/` and stop creating `.workspace/`.
If needed, opening an older project may lazily create `.studio/` on first persistence write.
7. Propagate the contract to Studio specs and tests.
The shell spec should state that shell activity is project-scoped, restored on open, and retained with a bounded history.
## Acceptance Criteria
- opening a project with an existing `.studio/activities.json` restores that project's recent activity feed before new events arrive
- activity produced while a project is open is persisted under that project's `.studio/` directory
- persisted activity history never exceeds `500` entries
- newly created projects contain `.studio/`
- new-project tests no longer expect `.workspace/`
- opening a project without `.studio/activities.json` still works and initializes an empty feed
## Validation
- unit tests for project scaffolding asserting `.studio/` creation
- unit tests for activity storage load/save behavior
- unit tests for retention trimming to `500`
- unit tests for activity-feed hydration from persisted entries
- unit tests for malformed or missing activity storage fallback
- smoke validation opening two different projects and confirming isolated activity histories
## Affected Artifacts
- `prometeu-studio/src/main/java/p/studio/projects/ProjectCatalogService.java`
- `prometeu-studio/src/main/java/p/studio/window/MainView.java`
- `prometeu-studio/src/main/java/p/studio/controls/shell/StudioActivityFeedControl.java`
- new Studio project-storage service/repository classes under `prometeu-studio/src/main/java/p/studio/...`
- `prometeu-studio/src/test/java/p/studio/projects/ProjectCatalogServiceTest.java`
- new activity persistence tests under `prometeu-studio/src/test/java/p/studio/...`
- `docs/studio/specs/1. Studio Shell and Workspace Layout Specification.md`