- chat.SanitizeHTML/SanitizePlain decoded-then-escape text runs, so HTML
entities the browser emits (e.g. for the space after a mention chip,
or & for a typed "&") no longer render as literal " "/"&".
Re-escaping keeps output XSS-safe. Adds regression tests.
- Rename ./volumes -> ./.volumes so `go build/vet/test ./...` skip the mongo
data dir (700-perm files); Makefile lint now gofmt's tracked files only.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Mentions now insert a span carrying the user id (handles names with spaces):
the sanitizer permits <span class="mention" data-user-card="ULID">, comment
and chat notifications resolve by id and only fire for users with access,
and mentions render as clickable chips with the shared hover user-card.
- Messages composer inserts an atomic, non-editable mention chip so the
trailing space no longer collapses while typing.
- Links inside chat messages and task comments are underlined/accented so they
read as clickable.
- Atomization: hold Ctrl/Cmd while dragging an effort slider to rebalance the
sibling coefficients proportionally (sum stays ~1.00); added a hint.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>