docs(13): add phase 13 planning artifacts — virtual local cloud operations

Plans 01–11, CONTEXT, PATTERNS, RESEARCH, REVIEW-FIX, and updated
SUMMARY and CONTEXT for the virtual-local-cloud-operations phase.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
curo1305
2026-06-23 20:34:57 +02:00
co-authored by Claude Sonnet 4.6
parent 73328eee0b
commit b67e77dd69
16 changed files with 3114 additions and 0 deletions
@@ -0,0 +1,174 @@
---
phase: "13"
plan: "10"
type: execute
wave: 7
depends_on:
- "13-02"
- "13-04"
- "13-07"
- "13-09"
files_modified:
- frontend/src/stores/cloudConnections.js
- frontend/src/views/CloudFolderView.vue
- frontend/src/components/storage/StorageBrowser.vue
- frontend/src/components/settings/SettingsCloudTab.vue
- frontend/src/components/cloud/CloudCredentialModal.vue
- frontend/src/components/settings/__tests__/SettingsCloudTab.health.test.js
- frontend/src/views/__tests__/CloudFolderRenderedFlow.test.js
- frontend/src/stores/__tests__/cloudConnections.test.js
- frontend/src/views/__tests__/CloudFolderView.test.js
autonomous: true
requirements:
- CONN-01
- CONN-02
- CONN-03
- CLOUD-04
- CLOUD-05
- CLOUD-06
- CLOUD-07
- CLOUD-09
must_haves:
truths:
- "Connection health is visible near the browser and in Settings from one shared store mapping."
- "Post-connect, post-reconnect, and credential-failure flows re-evaluate health automatically, while ordinary navigation never probes health."
- "The shared browser surfaces cloud create, rename, move, and delete results without introducing a second browser or folder picker."
artifacts:
- path: "frontend/src/stores/cloudConnections.js"
provides: "Server health mapping, reconnect refresh coordination, and no-probe-on-navigation behavior."
- path: "frontend/src/components/settings/SettingsCloudTab.vue"
provides: "Test/Reconnect/Disconnect controls and broader Google Drive consent copy."
key_links:
- from: "reconnect and credential-failure responses"
to: "browser-adjacent and Settings health state"
via: "cloudConnections store"
pattern: "health"
---
<objective>
Finish the frontend side of Phase 13 by wiring shared-browser folder mutations, actionable health UX, broader Drive consent copy, automatic post-failure health rechecks, and the explicit no-probe-on-navigation rule.
Purpose: Close the loop between the completed backend contracts and the two frontend surfaces users rely on.
Output: Passing health, rendered-flow, store, and mutation UX suites.
</objective>
<execution_context>
@$HOME/.codex/gsd-core/workflows/execute-plan.md
@$HOME/.codex/gsd-core/templates/summary.md
</execution_context>
<context>
@AGENTS.md
@.planning/phases/13-virtual-local-cloud-operations/13-CONTEXT.md
@.planning/phases/13-virtual-local-cloud-operations/13-PATTERNS.md
@frontend/src/stores/cloudConnections.js
@frontend/src/views/CloudFolderView.vue
@frontend/src/components/storage/StorageBrowser.vue
@frontend/src/components/settings/SettingsCloudTab.vue
@frontend/src/components/cloud/CloudCredentialModal.vue
</context>
## Artifacts this phase produces
- Shared browser support for cloud create, rename, move, and delete UX.
- Store-backed browser and Settings health presentation with auto-test and no-probe behavior.
- Explicit broader Google Drive consent or reconnect copy in the cloud credential and settings surfaces.
## Pattern analogs
- `frontend/src/stores/__tests__/cloudConnections.test.js` — centralized state mapping pattern.
- `frontend/src/views/__tests__/CloudFolderRenderedFlow.test.js` — rendered browser-health flow pattern.
- `frontend/src/components/settings/__tests__/SettingsCloudTab.health.test.js` — Settings control and copy assertions.
<tasks>
<task type="auto" tdd="true">
<name>Task 1: Implement store-backed health and reconnect UX with explicit no-probe-on-navigation behavior</name>
<files>frontend/src/stores/cloudConnections.js, frontend/src/views/CloudFolderView.vue, frontend/src/components/settings/SettingsCloudTab.vue, frontend/src/components/cloud/CloudCredentialModal.vue, frontend/src/components/settings/__tests__/SettingsCloudTab.health.test.js, frontend/src/stores/__tests__/cloudConnections.test.js, frontend/src/views/__tests__/CloudFolderView.test.js</files>
<read_first>
- frontend/src/stores/cloudConnections.js
- frontend/src/components/settings/SettingsCloudTab.vue
- frontend/src/components/cloud/CloudCredentialModal.vue
- frontend/src/stores/__tests__/cloudConnections.test.js
- .planning/phases/13-virtual-local-cloud-operations/13-CONTEXT.md
</read_first>
<behavior>
- Test 1: browser-adjacent and Settings health views derive from one store mapping
- Test 2: connect, reconnect, and credential-failure flows auto-test health, but ordinary folder navigation never triggers a probe
- Test 3: broader Google Drive access is explicit in consent or reconnect copy
</behavior>
<action>
Extend the cloud connection store and thin view handlers so server health states are mapped once and rendered in both the cloud browser context and Settings. Trigger automatic health re-evaluation after connect, reconnect, and credential-related failures, keep cached metadata visible while warning or reauth states are shown, and explicitly prevent ordinary folder navigation from performing a provider health probe. Update the credential and Settings surfaces so Google Drives broader Phase 13 access request is visible in user-facing copy rather than hidden in backend-only behavior.
</action>
<acceptance_criteria>
- health and store suites pass with explicit no-probe-on-navigation coverage
- browser and Settings show actionable, consistent health state from the same store mapping
- broader Drive access copy is visible wherever users connect or reconnect that provider
</acceptance_criteria>
<verify>
<automated>cd frontend && npm run test -- --run src/components/settings/__tests__/SettingsCloudTab.health.test.js src/stores/__tests__/cloudConnections.test.js src/views/__tests__/CloudFolderView.test.js</automated>
</verify>
<done>Connection health, reconnect, and consent UX now follow one store-backed truth without background probe drift.</done>
</task>
<task type="auto" tdd="true">
<name>Task 2: Surface folder mutation results through the shared browser without forking layout</name>
<files>frontend/src/views/CloudFolderView.vue, frontend/src/components/storage/StorageBrowser.vue, frontend/src/views/__tests__/CloudFolderRenderedFlow.test.js</files>
<read_first>
- frontend/src/components/storage/StorageBrowser.vue
- frontend/src/views/CloudFolderRenderedFlow.test.js
- .planning/phases/13-virtual-local-cloud-operations/13-CONTEXT.md
</read_first>
<behavior>
- Test 1: cloud create, rename, move, and delete reuse the shared browser surface and picker behavior
- Test 2: invalid destinations are disabled before submission and backend rejections are rendered clearly
- Test 3: trash-versus-permanent delete messaging and stale-refresh retry guidance are shown without duplicating layout
</behavior>
<action>
Wire the shared browser to consume the folder-mutation contract from the backend. Reuse the existing create, rename, drag-move, picker-move, and delete surfaces, but feed them cloud-specific capability, invalid-destination, stale-refresh, and trash-versus-permanent delete messages through props and emitted events only. Keep `CloudFolderView.vue` thin and avoid introducing a second folder picker, second drag state, or parallel mutation layout.
</action>
<acceptance_criteria>
- rendered-flow suite passes with the real shared browser
- invalid destinations are prevented in the UI before submission and still handled cleanly after backend rejection
- cloud create/rename/move/delete behavior stays on the shared browser surface
</acceptance_criteria>
<verify>
<automated>cd frontend && npm run test -- --run src/views/__tests__/CloudFolderRenderedFlow.test.js</automated>
</verify>
<done>The frontend now presents full cloud mutation and health behavior through the shared browser and Settings surfaces only.</done>
</task>
</tasks>
<threat_model>
## Trust Boundaries
| Boundary | Description |
|----------|-------------|
| server health/mutation results → store/UI | The UI must present backend truth without inventing probe or mutation semantics. |
| shared browser interactions → destructive actions | Delete and move UX must stay explicit and capability-aware. |
## STRIDE Threat Register
| Threat ID | Category | Component | Disposition | Mitigation Plan |
|-----------|----------|-----------|-------------|-----------------|
| T-13-30 | T | health UX | mitigate | Store and Settings tests require auto-test on connect/reconnect/failure and forbid navigation-triggered probes. |
| T-13-31 | R | destructive cloud actions | mitigate | Rendered-flow tests require explicit delete disclosure, stale-retry messaging, and invalid-destination prevention. |
| T-13-32 | I | broader-scope consent | mitigate | Settings and credential-modal tests require explicit broader Google Drive access copy. |
</threat_model>
<verification>
- Pass the health, store, view, and rendered-flow frontend suites.
- Confirm the shared browser remains the only browser surface.
- Confirm no-probe-on-navigation is explicitly asserted and implemented.
</verification>
<success_criteria>
- Users can see, test, reconnect, and recover cloud connections through one consistent frontend state model.
- Shared-browser folder mutations now satisfy the backend contracts for `CLOUD-04` through `CLOUD-07`.
- Phase 13 now concretely encodes broader Drive access and the D-13 health-testing invariant on the frontend.
</success_criteria>
<output>
Create `.planning/phases/13-virtual-local-cloud-operations/13-10-SUMMARY.md` when done
</output>