Add managed Desktop workspace storage requirements (#55965)

## What changed

- Add `application.storage.default_project_parent` and `application.storage.projectless_workspace_root` requirements for new Desktop workspaces. Require absolute paths and reject unknown storage keys.
- Apply managed paths to `desktop.defaultProjectParent` and `desktop.projectlessWorkspaceRoot`, overriding local preferences and rejecting writes to managed settings or their containing table while preserving unrelated Desktop settings.
- Expose storage requirements through `config/requirements/read` and update generated JSON schemas, TypeScript types, and Python models.

## Testing

Add coverage for storage validation, per-setting layer precedence, config overrides, write protection, and requirements API responses. Adjust daemon shutdown test deadlines and TUI test synchronization, paste handling, and future allocation.

GitOrigin-RevId: 44b93fe69e6a471c3f485cbf5f9c9ebd34ac3234
This commit is contained in:
acrognale-oai
2026-10-21 19:06:57 +00:00
committed by copyberry
parent 067249a283
commit 57232f111c
25 changed files with 571 additions and 41 deletions
@@ -6950,11 +6950,16 @@ class ApplicationNetworkRequirements(BaseModel):
]
class ApplicationRequirements(BaseModel):
class ApplicationStorageRequirements(BaseModel):
model_config = ConfigDict(
populate_by_name=True,
)
network: ApplicationNetworkRequirements | None = None
default_project_parent: Annotated[
LegacyAppPathString | None, Field(alias="defaultProjectParent")
] = None
projectless_workspace_root: Annotated[
LegacyAppPathString | None, Field(alias="projectlessWorkspaceRoot")
] = None
class AppsConfig(BaseModel):
@@ -10792,6 +10797,14 @@ class AppListUpdatedNotification(BaseModel):
data: list[AppInfo]
class ApplicationRequirements(BaseModel):
model_config = ConfigDict(
populate_by_name=True,
)
network: ApplicationNetworkRequirements | None = None
storage: ApplicationStorageRequirements | None = None
class AppsListResponse(BaseModel):
model_config = ConfigDict(
populate_by_name=True,