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>
175 lines
9.3 KiB
Markdown
175 lines
9.3 KiB
Markdown
---
|
||
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 Drive’s 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>
|