style(13-03): apply Prettier formatting across repo
Mechanical reformat — no logic changes. 398 files changed, 19125 insertions(+), 16457 deletions(-). Prettier 3.8.4 with .prettierrc (singleQuote:true, semi:true, tabWidth:2, trailingComma:all, printWidth:100). Isolated per D-13-08 for reviewability.
This commit is contained in:
@@ -3,7 +3,7 @@ phase: 03-event-write-back-pwa-install
|
||||
plan: 06
|
||||
type: execute
|
||||
wave: 4
|
||||
depends_on: ["03-05", "03-03"]
|
||||
depends_on: ['03-05', '03-03']
|
||||
files_modified:
|
||||
- apps/pwa/src/api/client.ts
|
||||
- apps/pwa/src/store/calendarStore.ts
|
||||
@@ -17,26 +17,26 @@ user_setup: []
|
||||
|
||||
must_haves:
|
||||
truths:
|
||||
- "The EventDetailPopover footer shows Edit and Delete actions (D-10)"
|
||||
- "Tapping Edit opens EventForm pre-populated; tapping Delete opens a two-tap confirmation dialog"
|
||||
- "Confirming delete calls DELETE /api/events/:uid and shows the sync toast"
|
||||
- 'The EventDetailPopover footer shows Edit and Delete actions (D-10)'
|
||||
- 'Tapping Edit opens EventForm pre-populated; tapping Delete opens a two-tap confirmation dialog'
|
||||
- 'Confirming delete calls DELETE /api/events/:uid and shows the sync toast'
|
||||
- "After any write the SyncStateToast polls /api/events/sync-status and shows Syncing/Saved/Didn't save; on done it invalidates the events query (D-06/D-09)"
|
||||
- "A 412 conflict shows the conflict copy and re-fetches the calendar (D-08)"
|
||||
- 'A 412 conflict shows the conflict copy and re-fetches the calendar (D-08)'
|
||||
artifacts:
|
||||
- path: "apps/pwa/src/components/SyncStateToast.tsx"
|
||||
provides: "polled sync-state feedback toast (D-05/D-09)"
|
||||
- path: 'apps/pwa/src/components/SyncStateToast.tsx'
|
||||
provides: 'polled sync-state feedback toast (D-05/D-09)'
|
||||
min_lines: 40
|
||||
- path: "apps/pwa/src/components/DeleteConfirmationDialog.tsx"
|
||||
provides: "two-tap destructive delete confirmation"
|
||||
- path: 'apps/pwa/src/components/DeleteConfirmationDialog.tsx'
|
||||
provides: 'two-tap destructive delete confirmation'
|
||||
key_links:
|
||||
- from: "apps/pwa/src/components/SyncStateToast.tsx"
|
||||
to: "/api/events/sync-status"
|
||||
via: "useQuery refetchInterval while pending"
|
||||
pattern: "syncStatus|sync-status"
|
||||
- from: "apps/pwa/src/components/EventDetailPopover.tsx"
|
||||
to: "DeleteConfirmationDialog"
|
||||
via: "Delete footer button opens deleteDialog"
|
||||
pattern: "deleteDialogOpen"
|
||||
- from: 'apps/pwa/src/components/SyncStateToast.tsx'
|
||||
to: '/api/events/sync-status'
|
||||
via: 'useQuery refetchInterval while pending'
|
||||
pattern: 'syncStatus|sync-status'
|
||||
- from: 'apps/pwa/src/components/EventDetailPopover.tsx'
|
||||
to: 'DeleteConfirmationDialog'
|
||||
via: 'Delete footer button opens deleteDialog'
|
||||
pattern: 'deleteDialogOpen'
|
||||
---
|
||||
|
||||
<objective>
|
||||
@@ -154,19 +154,21 @@ Output: edit/delete footer, delete dialog, sync toast + polling, all per the UI
|
||||
</tasks>
|
||||
|
||||
<threat_model>
|
||||
|
||||
## Trust Boundaries
|
||||
|
||||
| Boundary | Description |
|
||||
|----------|-------------|
|
||||
| Boundary | Description |
|
||||
| ------------------- | ------------------------------------------------ |
|
||||
| delete action → API | A destructive operation crosses to the write API |
|
||||
|
||||
## STRIDE Threat Register
|
||||
|
||||
| Threat ID | Category | Component | Disposition | Mitigation Plan |
|
||||
|-----------|----------|-----------|-------------|-----------------|
|
||||
| T-03-17 | Tampering | accidental/irreversible delete | mitigate | Mandatory two-tap DeleteConfirmationDialog; no inline single-tap delete; no "don't ask again" (UI-SPEC) |
|
||||
| T-03-18 | Repudiation | silent data loss on failed delete sync | mitigate | failed/dead toast persists until dismissed; server-authoritative refetch restores the event; no silent loss (D-08) |
|
||||
| T-03-19 | Information Disclosure | sync-status of another member surfaced in toast | mitigate | sync-status is member-scoped server-side (Plan 03 T-03-07); toast only queries the current member's uid |
|
||||
| Threat ID | Category | Component | Disposition | Mitigation Plan |
|
||||
| --------- | ---------------------- | ----------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------ |
|
||||
| T-03-17 | Tampering | accidental/irreversible delete | mitigate | Mandatory two-tap DeleteConfirmationDialog; no inline single-tap delete; no "don't ask again" (UI-SPEC) |
|
||||
| T-03-18 | Repudiation | silent data loss on failed delete sync | mitigate | failed/dead toast persists until dismissed; server-authoritative refetch restores the event; no silent loss (D-08) |
|
||||
| T-03-19 | Information Disclosure | sync-status of another member surfaced in toast | mitigate | sync-status is member-scoped server-side (Plan 03 T-03-07); toast only queries the current member's uid |
|
||||
|
||||
</threat_model>
|
||||
|
||||
<verification>
|
||||
@@ -176,9 +178,10 @@ Output: edit/delete footer, delete dialog, sync toast + polling, all per the UI
|
||||
</verification>
|
||||
|
||||
<success_criteria>
|
||||
|
||||
- CAL-05 edit and CAL-06 delete are user-reachable from the popover.
|
||||
- Every write surfaces non-blocking polled sync feedback; 412 conflict shows the warning + re-fetch (D-08); done invalidates events (D-06).
|
||||
</success_criteria>
|
||||
</success_criteria>
|
||||
|
||||
<output>
|
||||
Create `.planning/phases/03-event-write-back-pwa-install/03-06-SUMMARY.md` when done.
|
||||
|
||||
Reference in New Issue
Block a user