···7788## [Unreleased]
991010+### Changed
1111+- TipTap v2 → v3 coordinated upgrade (v0.62.0, #692) — bumped all 24 `@tiptap/*` packages from v2.11/v2.27 to v3.22.3 in a single coordinated release, per TipTap's guidance that mixing major versions leads to undefined behavior. Code changes required by v3:
1212+ - `@tiptap/extension-collaboration-cursor` was renamed to `@tiptap/extension-collaboration-caret` (the package was retired in v3); import and usage in `src/docs/main.ts` updated to the new `CollaborationCaret` extension.
1313+ - `@tiptap/extension-table` and `@tiptap/extension-text-style` no longer publish default exports in v3; switched to named-import form (`import { Table }`, `import { TextStyle }`).
1414+ - No StarterKit option changes needed — the docs editor already passes `history: false` (Yjs owns undo/redo), and `codeBlock: false` (handed off to `CodeBlockLowlight`); both still accepted in v3.
1515+ - No tippy.js usage in the codebase, so the v3 switch to floating-ui is transparent.
1616+ - No `editor.getCharacterCount()` call sites (character counting uses `editor.getText().length` directly).
1717+ - All 17 custom extensions (nodes, marks, extensions under `src/docs/extensions/`) continue to compile and run; the defensive `typeof getPos === 'function'` guards added previously already handle v3's possibly-undefined `getPos()` return.
1818+ - Full test suite (9219 tests) passes against v3 with zero changes to test code. (#692)
1919+1020### Added
1121- Mobile/touch viability (v0.61.0, #688) — three CSS refinements that unblock phone use of every editor. (1) `.toolbar.gdocs-toolbar` now wraps at base instead of forcing `flex-wrap: nowrap` + overflow, so narrow desktop windows (~800px) no longer cut off trailing buttons; height became `min-height: 40px` so a wrapped row can grow vertically. (2) The `@media (max-width: 768px)` block now enlarges every `.btn-icon` (topbar outline/comments/history/share/AI-chat/shortcuts buttons across all editors) to `min-width: 44px; min-height: 44px` with `0.5rem` padding — meeting Apple HIG & WCAG 2.5.5 touch-target guidance. Previously only `.tb-btn` got this treatment, leaving topbar icon buttons at the desktop 28px. (3) The same block adds `flex-wrap: wrap` + `row-gap: var(--space-xs)` to `.app-topbar` so overflowing buttons drop to a second row instead of pushing the title or action group off-screen. Also removed a stray `.toolbar { flex-wrap: nowrap }` rule inside the legacy `@media (max-width: 640px)` block that contradicted the newer 768px wrap rule. 7 new regression tests (`tests/mobile-viability.test.ts`) pin the CSS invariants so future refactors can't silently reintroduce nowrap or shrink touch targets. No JS/HTML changes — all 6 editors already had the topbar buttons and the sidebars already overlay at <=768px / go full-width at <=480px. (#688)
1222- AI chat now identifies the signed-in user in every editor's system prompt (v0.60.0, #678). A shared `fetchUserIdentity()` helper (`src/lib/user-identity.ts`) resolves the current user by first probing `/api/me` (Tailscale identity injected by the serve layer) and falling back to the `tools-username` key in localStorage for anonymous/local access. A process-wide cache (`src/lib/user-identity-cache.ts`) memoizes the promise so all 6 chat panels (docs, sheets, slides, diagrams, forms, calendar) share a single network call. `buildSystemMessage` gained a `userIdentity` option that injects a single sentence (`The signed-in user is "Name" (login). Address them by first name when appropriate.`); when name equals login, the parenthetical is dropped; when identity is `null`/missing, the line is omitted entirely. 16 new tests cover fetch fallback chain, memoization, empty-name guards, and identity-line presence across editor types. (#678)