From 060daa4883b0b4f736027101701c9baaced3d1a9 Mon Sep 17 00:00:00 2001 From: saravanakumardb1 Date: Fri, 29 May 2026 07:31:55 -0700 Subject: [PATCH] docs(tracker-web): record backend enablers for UX-12.3/13.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mark UX-12.3 (rich-text) and UX-13.1 (NotificationCenter) as ๐Ÿ”’ blocked-on-backend rather than open โ€” they are excluded from the โœ… count and each now carries a one-paragraph spec of the exact platform-service change required: - UX-12.3: server-side HTML sanitization (allowlist tags/attrs; strip scripts/event-handlers/js: + data: URLs) on items.description + comments.body write paths, so RichTextEditor/RichTextViewer can be safely adopted. - UX-13.1: emit notifications into platform-service's existing notifications module on tracker events (new comment, status change, vote milestone) targeted to the item author/subscribers with productId, exposed via the /api/tracker proxy, so NotificationCenter binds a real feed. Add BACKEND_ENABLERS.md tracking both follow-ups (title, blocking item, target module, acceptance criteria, backward-compat constraint โ€” platform-service is shared by 9 products). Update the Expand tracker line and notes to show all client-only waves complete and these two backend-blocked. Docs only โ€” no source/dep/lockfile changes. Generated with [Devin](https://cli.devin.ai/docs) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .../docs/roadmaps/BACKEND_ENABLERS.md | 87 +++++++++++++++++++ .../docs/roadmaps/UX_INTEGRATION_BYTELYST.md | 61 ++++++++++--- 2 files changed, 136 insertions(+), 12 deletions(-) create mode 100644 dashboards/tracker-web/docs/roadmaps/BACKEND_ENABLERS.md diff --git a/dashboards/tracker-web/docs/roadmaps/BACKEND_ENABLERS.md b/dashboards/tracker-web/docs/roadmaps/BACKEND_ENABLERS.md new file mode 100644 index 00000000..6c01f8d4 --- /dev/null +++ b/dashboards/tracker-web/docs/roadmaps/BACKEND_ENABLERS.md @@ -0,0 +1,87 @@ +# tracker-web โ€” Backend Enablers + +> Follow-ups that **cannot ship from `dashboards/tracker-web` alone** because they require a change +> to the shared `services/platform-service`. They are the only remaining items on the +> [UX integration roadmap](UX_INTEGRATION_BYTELYST.md) and are **excluded from its โœ… count** until +> the backend enabler lands. +> +> **Hard constraint for every item below:** `platform-service` is **shared by 9 products** +> (LysnrAI, MindLyst, ChronoMind, JarvisJr, NomGap, PeakPulse, FlowMonk, NoteLett, ActionTrail, +> EffoRise, LocalMemGPT โ€” see `AGENTS.md`). Every change here **must be additive and +> backward-compatible**: no behavioural change for products that do not opt in, existing rows/reads +> keep working, and every persisted document keeps its `productId`. + +| ID | Title | Blocks | Target module | Status | +| ---- | ----------------------------------------------------- | ------------------------------ | ------------------------------------------------------------------------- | -------------- | +| BE-1 | Server-side HTML sanitization for item/comment bodies | UX-12.3 (rich-text) | `services/platform-service` โ€” items + comments write paths | ๐Ÿ”’ Not started | +| BE-2 | Tracker-event notifications feed | UX-13.1 (`NotificationCenter`) | `services/platform-service` โ€” notifications module + `/api/tracker` proxy | ๐Ÿ”’ Not started | + +--- + +## BE-1 โ€” Server-side HTML sanitization for `items.description` + `comments.body` + +- **Title:** Sanitize rich HTML on the item-description and comment-body write paths. +- **Blocking roadmap item:** [UX-12.3](UX_INTEGRATION_BYTELYST.md#ux-12--detail--board-richness-tabs--tooltip--drawer--timeline--rich-text) + โ€” adopt `@bytelyst/rich-text` `RichTextEditor` / `RichTextViewer` in tracker-web. +- **Target module:** `services/platform-service` โ€” the **items** module (`items.description`) and the + **comments** module (`comments.body`), applied **server-side before persist** (create + update). +- **Why it's blocked:** Today `TrackerItem.description` and `Comment.body` are plain `string`s + rendered with `whitespace-pre-wrap`; the `/api/tracker/*` proxy neither stores nor sanitizes rich + HTML. Adopting a rich-text editor client-side would persist attacker-controlled HTML with no + server-side sanitization (stored-XSS), so it must not be done until the backend guarantees safety. + +### Acceptance criteria + +- HTML is sanitized **on the server** (never trust the client) on every write to `items.description` + and `comments.body` (create and update). +- **Allowlist** of formatting tags only โ€” e.g. `p`, `br`, `strong`, `em`, `u`, `s`, `a`, + `ul`/`ol`/`li`, `blockquote`, `code`, `pre`, `h1`โ€“`h3`. Everything else is stripped/escaped. +- **Attribute allowlist:** only safe attributes survive; `a[href]` is restricted to + `http:` / `https:` / `mailto:` schemes (and gets `rel="noopener noreferrer"`). +- **Stripped unconditionally:** `