Search & Knowledge Linking

Memos' two core values—findable and connected—are provided by global search integration and outbound knowledge-network links. Both reuse existing pipelines without introducing new parsing code just for memos.

Global Search Integration

Memo is the fifth result type in global search, alongside tasks, drafts, documents, decisions, and Wiki:

  • The Web search dialog provides a "Memos" filter tab; results are grouped by type with icons and group labels consistent with other types; clicking a result row jumps to the /memos?date=<day> day view.
  • The server-side /api/search type whitelist includes memo (previously only four types; it used to reject type=memo).
  • CLI: backlog search --json output adds the memo summary shape; plain-text output skips memos (treated as Web-only types, consistent with Wiki results).

Because memos deliberately do not enter the ContentStore snapshot, the search index reads the backlog/memos/ corpus directly through an injected loader. Refresh is controlled by a "stat signature + 500ms corpus TTL" double gate: when the signature has not changed, only a lightweight directory scan is performed and re-reading is skipped; when the signature changes (add/modify/delete), the index is rebuilt in full in the background (reload does not block the current search). Therefore newly captured memos after startup are searchable without restarting the service: the first search after the background reload completes hits them; the search that triggered the reload may still return old results.

Memo bodies are rendered through the shared MermaidMarkdown renderer and automatically gain two existing linking mechanisms:

  • Bare entity IDs: IDs written in the body such as back-123, doc-5, decision-3 are automatically converted to clickable links via the entity index, opening the corresponding entity with client-side navigation.
  • Wiki links: path (supporting alias alias syntax) are parsed as Wiki page links.
  • IDs inside inline code are not rewritten; IDs that cannot be uniquely resolved are displayed as plain text.
  • ID ranges and slash lists: ranges like back-101~105 and slash lists like back-101/102/103 are also recognized and rendered as a single expand trigger; the dropdown lists links for each ID in the range. The #topic# closed syntax is recognized as a topic tag rather than an entity link.

Thus a casually written "related task back-123" becomes a live link in the Web interface, and a range like back-101~105 can be expanded to the whole interval with one click.

Outbound Only, Not Inbound

By design, memos are not link targets: there is no /memo/:id detail route, memo is not included in the entity-type union, and memo-to-memo links are not supported. This is a deliberate trade-off—memos are a lightweight inbox, not permanent nodes in the knowledge network; content that needs to be referenced should be promoted to a task or document.

Real-Time Sync

Memo writes from any entry point (CLI, Web, MCP, HTTP API) broadcast a memos-updated WebSocket event: the /memos page instantly refreshes the card stream and calendar counts, while other pages handle it through their own data refresh pipelines. Search index refresh does not use this broadcast; it is triggered by the signature + TTL double-gate mechanism described above.

results matching ""

    No results matching ""