Task comments, files, and a less noisy timeline

Tasks now have real comments, per-comment files, clickable file mentions, and one timeline for comments, files, and task changes.

Task details got a proper activity thread.

You can add comments one by one now, and a comment can have its own files. Task-level attachments still exist, and both kinds of files share the same attachment pool. A file uploaded on the task can be mentioned from a comment, and a file uploaded with a comment can be mentioned later from the description.

File mentions are cleaner too. Type @@ while writing and Eisengrid suggests matching files. After save, the mention becomes a normal link with the trigger text hidden. User mentions use the same pattern with @.

A few annoying edges from the first pass are fixed as well. Selected files clear after save, repeated saves do not re-upload the same file, and duplicate file content is skipped.

The timeline is now the place to read what happened. Comments, attachment adds and removals, status changes, priority and effort changes, deadline changes, and description edits all land in the same feed, newest first. Deleting a comment leaves a small "Comment deleted" marker so the history still makes sense.

There is one small operator detail too: changes made through the API get an API badge in the timeline. Browser-made changes stay plain.

For Private Vault accounts, comment text and mention metadata are encrypted with the rest of the task content.