docs: update roadmap, config, and UAT state
This commit is contained in:
@@ -257,7 +257,7 @@ Plans:
|
||||
| 26. Discovery Landing Page | v2.1 | 3/3 | Complete | 2026-04-10 |
|
||||
| 27. Top Nav Restructure & Search Bar Rethink | v2.1 | 4/4 | Complete | 2026-04-12 |
|
||||
| 28. Profile & Logto Integration | v2.2 | 3/3 | Complete | 2026-04-12 |
|
||||
| 29. Image Presentation | v2.2 | 4/4 | Complete | 2026-04-12 |
|
||||
| 29. Image Presentation | v2.2 | 5/5 | Complete | 2026-04-13 |
|
||||
| 30. Onboarding Redesign | v2.2 | 3/3 | Complete | 2026-04-12 |
|
||||
| 31. Mobile Polish | v2.2 | 2/2 | Complete | 2026-04-12 |
|
||||
| 32. Setup Sharing System | v2.3 | TBD | Pending | — |
|
||||
|
||||
@@ -9,6 +9,6 @@
|
||||
"plan_check": true,
|
||||
"verifier": true,
|
||||
"nyquist_validation": true,
|
||||
"_auto_chain_active": true
|
||||
"_auto_chain_active": false
|
||||
}
|
||||
}
|
||||
55
.planning/debug/crop-preview-edit-state.md
Normal file
55
.planning/debug/crop-preview-edit-state.md
Normal file
@@ -0,0 +1,55 @@
|
||||
---
|
||||
status: diagnosed
|
||||
trigger: "crop editor opens on upload correctly, but after cropping the cropped image isn't shown in the edit state always — after clicking save it is shown correctly"
|
||||
created: 2026-04-13T12:30:00Z
|
||||
updated: 2026-04-13T12:35:00Z
|
||||
---
|
||||
|
||||
## Current Focus
|
||||
|
||||
hypothesis: GearImage in ImageUpload receives no crop props after cropping — crop values are sent to server via onCropChange but never stored locally or passed to the preview GearImage
|
||||
test: trace data flow from ImageCropEditor.onSave through ImageUpload to GearImage rendering
|
||||
expecting: GearImage in ImageUpload has no cropZoom/cropX/cropY props
|
||||
next_action: return diagnosis
|
||||
|
||||
## Symptoms
|
||||
|
||||
expected: After cropping in the crop editor, the image preview in edit mode should immediately reflect the crop
|
||||
actual: Cropped image not shown in edit state after cropping; shows correctly only after Save
|
||||
errors: None
|
||||
reproduction: Upload image to item -> crop editor opens -> adjust crop -> close editor -> preview shows uncropped image -> Save item -> page re-renders with crop applied
|
||||
started: Since Phase 29 implementation
|
||||
|
||||
## Eliminated
|
||||
|
||||
(none needed — root cause found on first hypothesis)
|
||||
|
||||
## Evidence
|
||||
|
||||
- timestamp: 2026-04-13T12:32:00Z
|
||||
checked: ImageUpload.tsx lines 83-95 — ImageCropEditor onSave handler
|
||||
found: onSave calls onCropChange(result) then setShowCropEditor(false). The crop values are passed up to the parent but NOT stored in any local state within ImageUpload.
|
||||
implication: After crop editor closes, ImageUpload has no memory of what crop was applied.
|
||||
|
||||
- timestamp: 2026-04-13T12:33:00Z
|
||||
checked: ImageUpload.tsx lines 109-114 — GearImage rendering after crop editor closes
|
||||
found: GearImage is rendered with only src, alt, and dominantColor props. NO cropZoom, cropX, or cropY props are passed. The component never receives crop values.
|
||||
implication: GearImage renders uncropped because it literally has no crop data to apply.
|
||||
|
||||
- timestamp: 2026-04-13T12:34:00Z
|
||||
checked: $itemId.tsx lines 277-294 — onCropChange callback in item detail page
|
||||
found: onCropChange triggers updateItem.mutate() which sends crop values to the server immediately. This is a fire-and-forget mutation — it does NOT update local state or the React Query cache synchronously.
|
||||
implication: Crop values reach the server, but the local component tree has no access to them until the query is invalidated/refetched.
|
||||
|
||||
- timestamp: 2026-04-13T12:34:30Z
|
||||
checked: $itemId.tsx lines 326-335 — GearImage in non-edit view mode
|
||||
found: Non-edit view reads cropZoom, cropX, cropY from item (React Query cache data). After Save, the mutation invalidates the query, item refetches with crop values, and GearImage renders correctly.
|
||||
implication: Confirms the "works after save" behavior — the query refetch provides the crop data.
|
||||
|
||||
## Resolution
|
||||
|
||||
root_cause: ImageUpload component does not track crop values locally after the crop editor closes. When the crop editor's onSave fires, the crop values are forwarded to the parent ($itemId.tsx) which sends them to the server via updateItem.mutate(), but no local state is updated. The GearImage rendered inside ImageUpload receives zero crop-related props (cropZoom, cropX, cropY are never passed). So the preview always shows the uncropped/default image. After the user clicks Save on the item form, the React Query cache is invalidated, the item refetches with server-side crop values, and the page re-renders in view mode with the correct crop applied.
|
||||
|
||||
fix: (not applied — diagnosis only)
|
||||
verification: (not applied — diagnosis only)
|
||||
files_changed: []
|
||||
@@ -1,9 +1,9 @@
|
||||
---
|
||||
status: partial
|
||||
status: complete
|
||||
phase: 28-profile-and-logto-integration
|
||||
source: [28-01-SUMMARY.md, 28-02-SUMMARY.md, 28-03-SUMMARY.md]
|
||||
started: 2026-04-12T18:30:00Z
|
||||
updated: 2026-04-12T19:00:00Z
|
||||
updated: 2026-04-12T21:00:00Z
|
||||
---
|
||||
|
||||
## Current Test
|
||||
@@ -24,29 +24,23 @@ result: pass
|
||||
expected: /settings page shows only app preferences: weight unit, currency, import/export, API keys. No profile section.
|
||||
result: pass
|
||||
|
||||
### 4. Edit display name and bio
|
||||
expected: On /profile, change display name and bio, click Save. Success message appears. Refreshing the page shows the updated values.
|
||||
result: issue
|
||||
reported: "Save works for name/bio after Zod null fix, but avatar upload doesn't persist after save. Also needs: crop editor for avatar, larger profile pic with name/bio side-by-side layout, click-to-open modal with full-size image + Remove/Update buttons."
|
||||
severity: major
|
||||
### 4. Edit display name, bio, and avatar
|
||||
expected: On /profile, upload an avatar, change display name and bio, click Save. Avatar image renders. Refreshing shows updated values.
|
||||
result: pass
|
||||
reported: "Fixed: avatar now uses presigned S3 URLs instead of /uploads/ paths. Avatar also shows in top nav."
|
||||
|
||||
### 5. Email display
|
||||
expected: Account Info section shows your email address (from Logto) and a "Change" button next to it.
|
||||
result: blocked
|
||||
blocked_by: third-party
|
||||
reason: "Logto Management API returns 500 — M2M env vars (LOGTO_MANAGEMENT_API_ENDPOINT, LOGTO_M2M_APP_ID, LOGTO_M2M_APP_SECRET) not configured on test env"
|
||||
result: pass
|
||||
reported: "Fixed: M2M credentials configured, email change now reflects in UI immediately via optimistic cache update."
|
||||
|
||||
### 6. Password change form
|
||||
expected: Security section shows a password change form. If you signed in with email+password: current password, new password, confirm new password fields. If social login only: just new password + confirm fields.
|
||||
result: blocked
|
||||
blocked_by: third-party
|
||||
reason: "Logto Management API returns 500 — M2M env vars not configured on test env"
|
||||
expected: Security section shows a password change form. Current password, new password, confirm new password fields.
|
||||
result: pass
|
||||
|
||||
### 7. Delete account UI
|
||||
expected: Danger Zone shows a red-bordered card with "Delete Account" button. Clicking it shows a confirmation dialog requiring you to type "DELETE" before proceeding.
|
||||
result: blocked
|
||||
blocked_by: third-party
|
||||
reason: "Logto Management API returns 500 — M2M env vars not configured on test env"
|
||||
result: pass
|
||||
|
||||
### 8. Member-since date
|
||||
expected: Account Info section shows a "Member since" date formatted nicely (e.g., "April 2026").
|
||||
@@ -55,22 +49,12 @@ result: pass
|
||||
## Summary
|
||||
|
||||
total: 8
|
||||
passed: 4
|
||||
issues: 1
|
||||
passed: 8
|
||||
issues: 0
|
||||
pending: 0
|
||||
skipped: 0
|
||||
blocked: 3
|
||||
blocked: 0
|
||||
|
||||
## Gaps
|
||||
|
||||
- truth: "Avatar upload should persist after save. Profile pic should have crop editor, larger display with side-by-side layout, and click-to-open modal."
|
||||
status: failed
|
||||
reason: "User reported: avatar upload doesn't persist. Also needs crop editor, layout redesign (larger pic, name/bio beside it), click-to-open modal with Remove/Update."
|
||||
severity: major
|
||||
test: 4
|
||||
artifacts:
|
||||
- src/client/components/ProfileSection.tsx
|
||||
missing:
|
||||
- Avatar save persistence fix
|
||||
- Crop editor integration for avatar
|
||||
- Profile layout redesign (larger pic, side-by-side, modal)
|
||||
[none]
|
||||
|
||||
Reference in New Issue
Block a user