102 lines
4.6 KiB
Markdown
102 lines
4.6 KiB
Markdown
# PR-23 Move Asset Action Wizard and Fs-First Relocation
|
|
|
|
Domain Owner: `docs/packer`
|
|
Cross-Domain Impact: `docs/studio`
|
|
|
|
## Briefing
|
|
|
|
The action capability track already delivers `REGISTER` and `DELETE`.
|
|
|
|
The next operational action is `MOVE`, which must let the user relocate an asset root inside the project's `assets/` tree and optionally rename the asset directory in the same flow.
|
|
|
|
Studio should own the wizard and the interaction flow. The packer should own the validation semantics, the filesystem move, the registry update, and the point snapshot patch after durable commit.
|
|
|
|
## Objective
|
|
|
|
Deliver `AssetAction.MOVE` end to end with a Studio relocation wizard, packer-owned constraints, filesystem-first directory move, and minimal in-memory snapshot update.
|
|
|
|
## Dependencies
|
|
|
|
- [`./PR-20-asset-action-capabilities-and-register-first-delivery.md`](./PR-20-asset-action-capabilities-and-register-first-delivery.md)
|
|
- [`./PR-21-point-in-memory-snapshot-updates-after-write-commit.md`](./PR-21-point-in-memory-snapshot-updates-after-write-commit.md)
|
|
- [`./PR-22-delete-asset-action-confirmation-and-fs-first-manifest-removal.md`](./PR-22-delete-asset-action-confirmation-and-fs-first-manifest-removal.md)
|
|
|
|
## Scope
|
|
|
|
- extend the public action contract and write messages for `MOVE`
|
|
- expose `MOVE` capability from the packer
|
|
- add a Studio wizard that collects:
|
|
- destination parent directory
|
|
- destination directory name
|
|
- derived target root inside `assets/`
|
|
- add a confirmation step before execution
|
|
- add an execution/waiting step with spinner while the move is running
|
|
- allow the wizard to work as both relocate and rename of the asset directory
|
|
- enforce packer constraints that:
|
|
- the target must stay inside the project's `assets/`
|
|
- the target root must not already contain `asset.json`
|
|
- perform the actual move in the filesystem inside the packer write lane
|
|
- update `index.json` and patch the runtime snapshot minimally after commit
|
|
|
|
## Non-Goals
|
|
|
|
- no move outside the project's `assets/`
|
|
- no directory merge behavior
|
|
- no recursive validation of non-manifest file contents
|
|
- no batch move
|
|
- no frontend-local move semantics
|
|
|
|
## Execution Method
|
|
|
|
1. Extend the action contract with `MOVE` and add write request/response messages for asset relocation.
|
|
2. Add packer capability resolution for `MOVE`.
|
|
3. Build a Studio wizard dedicated to move/rename, with:
|
|
- current asset root display
|
|
- destination parent picker constrained to `assets/`
|
|
- destination directory name field
|
|
- derived target root preview
|
|
- validation feedback
|
|
- confirmation step before submit
|
|
- waiting state with spinner after submit until the write result is known
|
|
4. Enforce these constraints in the packer:
|
|
- the target root must remain under `assets/`
|
|
- the target root must not already contain `asset.json`
|
|
5. Execute the move in the packer write lane by:
|
|
- moving the asset directory in the filesystem
|
|
- updating the registry entry root when the asset is registered
|
|
- preserving `asset_uuid`
|
|
6. Patch the runtime snapshot in memory after the move, without whole-project reload in the normal path.
|
|
7. Let Studio refresh and reselect the moved asset after success.
|
|
8. Keep the wizard open in waiting state while the move is running, then close only after success; on failure, leave the wizard recoverable with feedback.
|
|
|
|
## Acceptance Criteria
|
|
|
|
- `MOVE` is exposed through the packer action capability contract
|
|
- Studio opens a wizard for `MOVE`
|
|
- the wizard has an explicit confirmation step before execution
|
|
- the wizard enters a waiting state with spinner while the move is in flight
|
|
- the wizard lets the user relocate and/or rename the asset directory
|
|
- the move target cannot be outside the project's `assets/`
|
|
- the move target cannot already contain `asset.json`
|
|
- the packer performs the filesystem move
|
|
- `index.json` is updated when needed
|
|
- the runtime snapshot is patched minimally after success
|
|
- Studio refreshes and keeps the moved asset selected
|
|
|
|
## Validation
|
|
|
|
- packer tests for move capability visibility
|
|
- packer tests for successful relocate and successful rename
|
|
- packer tests for blockers when target is outside `assets/`
|
|
- packer tests for blockers when target already contains `asset.json`
|
|
- packer tests proving snapshot patching after move
|
|
- Studio smoke validation for wizard confirmation flow, waiting state, and post-move reselection
|
|
|
|
## Affected Artifacts
|
|
|
|
- `prometeu-packer/prometeu-packer-api/src/main/java/p/packer/**`
|
|
- `prometeu-packer/prometeu-packer-v1/src/main/java/p/packer/**`
|
|
- `prometeu-packer/prometeu-packer-v1/src/test/java/p/packer/**`
|
|
- `prometeu-studio/src/main/java/p/studio/**`
|
|
- `prometeu-studio/src/main/resources/**`
|