You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Task capture previously required saving a task and finding its detail page before attaching a file. The Add task dialog now offers Add files, multiple selection, filename/size previews, removal, and validation against the existing supported types and 1 MB limit.
The task is saved once, then selected files upload sequentially. If an upload fails, the dialog clearly says the task was saved, retains remaining files, and offers Retry uploads. Confirmed uploads are skipped on retry. Saved task fields are locked to prevent edits that would be silently ignored; users can close and finish attachments later. The detail page shares the same upload helper, including Unicode filenames and extension fallback for files with missing or unsupported browser MIME types.
Validation:
Node 22.23.2: 197/197 tests passed.
Node 24.21.0: 197/197 tests passed.
Local real-server Chrome/Playwright at 1440x1000, 390x844, and 320x740: title-only capture and n shortcut; file chooser/multiple selection; remove; Unicode filenames and exact downloaded bytes; notes; oversized, unsupported, and empty-file rejection before task creation.
Injected create/upload failures: draft/files retained, partial upload retry sends only remaining files, rapid repeat submission and Escape blocked during save, no duplicate task, close/remove after failed upload preserves saved task.
Meaningful content, page identity, responsive layout, and screenshots checked; no runtime errors. Console errors were limited to deliberately injected HTTP 503 responses.
Generic application/octet-stream files verified through both creation and the existing detail-page picker after the review fix.
node --check public/app.js and git diff --check passed.
No database migration or API contract change. Live iPhone picker behavior is not yet tested; rollout remains after review and merge.
### Issue 1
public/app.js:1032-1034
If the browser reports a generic non-empty MIME such as `application/octet-stream` for a supported `.png`, `.txt`, or `.log` file, this function never checks the extension. The creation dialog then rejects the file as unsupported, while the detail-page uploader sends the same generic MIME for the server to reject. Use the known extension when the reported MIME is not allowlisted, not only when it is absent.
```suggestionfunction attachmentType(file) { const extensionType = ATTACHMENT_TYPES[file.name.split('.').pop().toLowerCase()]; return Object.values(ATTACHMENT_TYPES).includes(file.type) ? file.type : extensionType || 'application/octet-stream';}```---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.
Summary
The PR adds attachment selection and validation to the task-creation dialog, uploads selected files sequentially after task creation, and preserves pending uploads for retry without recreating the task.
Extracts a shared attachment-upload helper with Unicode filename handling and MIME fallback.
Adds multi-file previews, removal, per-file status, and post-save retry behavior.
Documents the task-creation attachment workflow and adds responsive presentation styles.
One MIME fallback edge case can reject supported extensions when the browser supplies a generic non-empty MIME.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Task capture previously required saving a task and finding its detail page before attaching a file. The Add task dialog now offers Add files, multiple selection, filename/size previews, removal, and validation against the existing supported types and 1 MB limit.
The task is saved once, then selected files upload sequentially. If an upload fails, the dialog clearly says the task was saved, retains remaining files, and offers Retry uploads. Confirmed uploads are skipped on retry. Saved task fields are locked to prevent edits that would be silently ignored; users can close and finish attachments later. The detail page shares the same upload helper, including Unicode filenames and extension fallback for files with missing or unsupported browser MIME types.
Validation:
No database migration or API contract change. Live iPhone picker behavior is not yet tested; rollout remains after review and merge.