Skip to content

Automatic watching, Jira-style comments, save-on-change settings, MUI tooltips and Google account linking - #270

Open
AmrMsCLL wants to merge 2 commits into
mainfrom
feat/watching-settings-polish
Open

AmrMsCLL wants to merge 2 commits into
mainfrom
feat/watching-settings-polish

Conversation

@AmrMsCLL

@AmrMsCLL AmrMsCLL commented Nov 5, 2026

Copy link
Copy Markdown
Member

Watching, comments, settings saving, tooltips, sidebar and Files polish, plus two account fixes: email-change emails and Google sign-in for an account that already exists.

Watching

  • Watching starts by taking part: you start watching a task or page by creating, editing, completing, reopening, commenting, being mentioned, being shared with, being assigned, and now also by reacting to a comment or attaching or detaching a file.
  • Only you can stop your own watching: the watch menu lists who is watching, with Stop watching for yourself only.
  • Removed routes:
    • PUT /items/:id/watch (start watching by hand);
    • PUT /items/:id/watchers/:userId and DELETE /items/:id/watchers/:userId (add or remove someone else).
    • GET /items/:id/watchers and DELETE /items/:id/watch stay.
  • Notifications open the right board: every server notification links tasks as /tasks?task=<id>. TasksPage now looks the task up, and if it lives in a space you belong to, redirects to that space's Tasks board with the same query.
  • Integration spec: tasks.spec.ts "lets editors add and remove other watchers" asserted the removed behaviour. It is replaced by "starts watching only by taking part, and nobody can change who else is watching". The outsider check now uses DELETE /watch.

Comments

  • Jira-style layout: the avatar sits in its own column, and the name, time, text, actions and replies line up beside it. This applies to task comments (TaskTicket) and page comments (NoteComments).
  • Trailing blank lines are dropped on save: saving rich text drops empty paragraphs and line breaks after the last words (withoutTrailingLines in rich-document.ts, applied in RichTextEditor). The quick task description trims its trailing lines too.

Tasks page

  • One "more" menu: on a space's Tasks tab, the epic and view options (New epic, View, Add column, Rename epic, Move epic to trash) now fold into the space menu through the existing useSpaceMenu slot. The row no longer shows two "more" buttons. The personal Tasks page is unchanged.

Settings

  • Shared SavedForm (moved out of SpaceSettings) is now used by Profile, Preferences and every space settings form:
    • Save changes appears only when something changed;
    • it sits on the right, next to an "Unsaved changes" / "Saved" note;
    • its space is always reserved, so nothing shifts when it fades in.
  • Converted forms: Profile and Preferences now use controlled fields. MonthStartField gained onChange.
  • Profile picture: larger (7.5rem), with change and remove buttons that show on hover or focus over the picture, and always on touch screens.

Tooltips

  • New shared pieces: Tip, a MUI Tooltip wrapper with consistent delays, and a Strata IconButton that wraps the shared UI one with Tip. Every icon button in Strata now imports the local one.
  • Converted to MUI tooltips:
    • AddButton and the file upload button;
    • the filter button, panel toggle, watch, reply and reaction buttons;
    • the sidebar add buttons;
    • breadcrumbs, the back link and link addresses;
    • the assignee mark, the "shared by link" marker and avatar overflow;
    • presence avatars, journal mood buttons, new-task composer options and weather days.
  • Left as native title on purpose: draggable agenda blocks and sidebar row links. A MUI tooltip would follow the pointer while dragging or resizing.
  • Files: New folder and Upload are icon buttons, with Upload keeping its primary style.

Sidebar

  • Truncation: long titles under a space now truncate with an ellipsis. The collapsible wrapper's grid column was sizing to the full title; .reveal now uses grid-template-columns: minmax(0, 1fr).

Email change

  • One conversation: the confirmation (to the new address) and the warning (to the old one) now share the subject "Changing your Strata email" plus In-Reply-To/References headers. When both addresses land in one mailbox, they show as a single conversation.
  • Calmer warning: it reads as a normal change ("Your Strata account is moving to a new email address…"), followed by "If you did not ask for this, reset your password now."
  • Unchanged: the warning still never reveals the new address, as account.spec.ts requires.

Google sign-in for someone who already has an account

When "Continue with Google" brings a Google account that isn't linked yet:

  • Its address belongs to a Strata account: the user is asked to sign in to that account with its password (and two-step code if needed). Google is then linked. This replaces the old error.
  • The browser has signed in to Strata before (a known_devices match): this covers a Google account renamed to a new address. The user is asked "Is this your Strata account?" and can sign in to link it, or Create a new account with Google.
  • Otherwise: the account is created straight away, as before, so genuinely new users see no extra step.

How it works:

  • The waiting Google identity is sealed in the strata_google cookie for 10 minutes.
  • New endpoints: POST /auth/google/existing (reusing AuthService.login and completeTwoStep) and POST /auth/google/new.
  • Linking happens only after the password is correct, never by address alone.

Tests

  • New specs: rich-document.spec.ts.
  • Updated specs:
    • google-auth.spec.ts: email match asks for the password; known browser; linking with a two-step code; creating from the prompt.
    • account.spec.ts: threading.
    • tasks.spec.ts (integration, described above).
  • Run locally: these and the specs for auth, two-step, comment mentions, the task model, new tasks, task groups, mail templates, short URLs, calendar sync, skipped dates and the app module all passed.
  • Also checked: server and frontend type checks, oxlint, and the bundle budget (225.8 KB of 250 KB gzip).

Not verified

  • Integration specs: Docker wasn't running.
  • Real Google sign-in.
  • The UI in a browser: tooltips, the save bar animation, hover on the profile picture, the comment layout and sidebar truncation.

…s, MUI tooltips and Google account linking

- Watching: people start watching a task or page only by taking part (now also by reacting or attaching
  files) and can stop watching themselves; nobody can add or remove anyone else, and the manual "start
  watching" route is gone.
- A task link from a notification opens the board of the space the task lives in.
- Comments: the text, actions and replies line up under the author's name, beside the avatar.
- The space Tasks tab folds its epic and view options into the space menu instead of a second one.
- Settings: Profile, Preferences and every space settings form show Save changes only when something
  changed, on the right, in space that is always reserved so nothing jumps.
- Profile: a larger picture with change and remove controls on hover.
- Sidebar: long titles under a space truncate with an ellipsis.
- Saving rich text drops empty lines and line breaks after the last words.
- Tooltips: icon buttons, add buttons and other hover hints use MUI tooltips. Files' New folder and
  Upload are icon buttons.
- Email change: the confirmation and the warning share a subject and thread headers, so one mailbox
  shows them as one conversation; the warning reads as a normal change.
- Google sign-in: an unknown Google account on a browser that has signed in to Strata before, or one
  whose address an account already uses, is offered to link to that account with its password (and
  two-step code) instead of creating a duplicate account or failing.
# Conflicts:
#	app/frontend/src/pages/DrivePage.tsx
@github-actions github-actions Bot added the size/xl Over 600 changed lines, excluding lockfiles label Nov 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/xl Over 600 changed lines, excluding lockfiles

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant