Back to Memos

Plan

docs/plans/2026-04-06-memo-mentions/plan.md

0.28.04.9 KB
Original Source

Task List

Task Index

T1: Add backend mention parsing and payload extraction [M] — T2: Add mention notifications and user search APIs [L] — T3: Add frontend mention autocomplete, rendering, and inbox UI [L] — T4: Regenerate code and validate the feature [M]

T1: Add backend mention parsing and payload extraction [M]

Objective: Parse @username tokens into structured mention metadata during memo payload rebuilds. Size: M Files:

  • Create: internal/markdown/ast/mention.go
  • Create: internal/markdown/parser/mention.go
  • Create: internal/markdown/extensions/mention.go
  • Modify: internal/markdown/markdown.go
  • Modify: internal/markdown/renderer/markdown_renderer.go
  • Modify: server/runner/memopayload/runner.go
  • Modify: server/router/api/v1/memo_service.go
  • Test: internal/markdown/markdown_test.go Implementation:
  1. Add mention AST/parser/extension parallel to the existing tag implementation.
  2. Extend extracted markdown data and MemoPayload rebuild to collect normalized mentions and resolve them to users.
  3. Update memo create/update and background payload rebuild paths to use the new mention-aware payload builder. Boundaries: Do not add a relational schema migration. Dependencies: None Expected Outcome: Memo payloads carry normalized mention metadata rebuilt from markdown content. Validation: go test ./internal/markdown — expected ok

T2: Add mention notifications and user search APIs [L]

Objective: Expose mention-aware APIs and create inbox items for newly added mentions. Size: L Files:

  • Modify: proto/store/memo.proto
  • Modify: proto/store/inbox.proto
  • Modify: proto/api/v1/user_service.proto
  • Modify: server/router/api/v1/user_service.go
  • Modify: server/router/api/v1/connect_services.go
  • Modify: server/router/api/v1/acl_config.go
  • Modify: server/router/api/v1/acl_config_test.go
  • Create: server/router/api/v1/memo_mention_helpers.go
  • Modify: store/user.go
  • Modify: store/db/sqlite/user.go
  • Modify: store/db/postgres/user.go
  • Modify: store/db/mysql/user.go
  • Test: server/router/api/v1/test/user_notification_test.go
  • Test: server/router/api/v1/test/user_search_test.go Implementation:
  1. Extend proto contracts with MemoPayload.mentions, InboxMessage.MEMO_MENTION, UserNotification.MEMO_MENTION, and SearchUsers.
  2. Implement authenticated user search over username and nickname.
  3. Add mention notification side effects for memo create/update/comment flows with diffing and duplicate suppression.
  4. Convert inbox rows into either comment or mention notifications and filter unknown legacy types. Boundaries: Do not add email/push/webhook mention delivery. Dependencies: T1 Expected Outcome: Mentioned users receive inbox notifications and the editor has an API to fetch mention candidates. Validation: go test ./server/router/api/v1/... — expected ok

T3: Add frontend mention autocomplete, rendering, and inbox UI [L]

Objective: Let users insert mentions from the editor and render/read them in the UI. Size: L Files:

  • Create: web/src/components/MemoEditor/Editor/MentionSuggestions.tsx
  • Modify: web/src/components/MemoEditor/Editor/index.tsx
  • Modify: web/src/components/MemoEditor/Editor/useSuggestions.ts
  • Modify: web/src/hooks/useUserQueries.ts
  • Create: web/src/utils/remark-plugins/remark-mention.ts
  • Create: web/src/components/MemoContent/MentionContext.tsx
  • Create: web/src/components/MemoContent/Mention.tsx
  • Modify: web/src/components/MemoContent/index.tsx
  • Modify: web/src/components/MemoContent/ConditionalComponent.tsx
  • Modify: web/src/types/markdown.ts
  • Create: web/src/components/Inbox/MemoMentionMessage.tsx
  • Modify: web/src/pages/Inboxes.tsx Implementation:
  1. Add @ autocomplete backed by SearchUsers.
  2. Add markdown mention parsing/rendering and hydrate mentioned users once per memo render.
  3. Add a dedicated inbox card for memo mention notifications. Boundaries: Do not redesign the textarea editor. Dependencies: T2 Expected Outcome: Users can insert, see, and open mentions from memo content and inbox notifications. Validation: pnpm lint && pnpm build — expected success

T4: Regenerate code and validate the feature [M]

Objective: Regenerate generated code and verify backend/frontend behavior. Size: M Files:

  • Modify: proto/gen/**
  • Modify: web/src/types/proto/** Implementation:
  1. Run buf generate after proto changes.
  2. Re-run focused Go tests and frontend lint/build. Boundaries: Do not broaden into unrelated CI cleanup. Dependencies: T1, T2, T3 Expected Outcome: Generated code matches the new APIs and validations pass. Validation: buf generate, go test ./internal/markdown ./server/router/api/v1/..., pnpm lint, pnpm build

Out-of-Scope Tasks

  • Group/team mentions
  • Username alias migration
  • Email or push delivery for mentions
  • Watch/subscription semantics beyond explicit mentions