Repository navigation
feat(entities): every entity has its own page at /wiki/namespace/Name - #393
Merged
Merged
Conversation
…ame>
An entity's page is named by its name, the way a wiki names pages (spaces as underscores), and shows what it is,
its notes in the BlockSuite editor, every line that says it, the recordings, people and entities it comes up with,
the same entity in other namespaces and similar content. Any case, an old name or a merged name finds it and
switches to its own address. /entities/<id>, /notes/about/entity/<id>, @ links in notes, the graph panel, the
Entities list and the RDF URI all lead there. The API, MCP get_entity and the assistant's find_entities give the
page's address; GET /api/v1/wiki/{ns}/{address} resolves one. Nothing stored changes.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012V6irFWrfGHnWJgJtRvRSf
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012V6irFWrfGHnWJgJtRvRSf
…ce to write An entity page's notes started as a blank box with nothing saying it can be written in. It now says what to do and has a border, and the note's cost panel stays on the note's own page. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012V6irFWrfGHnWJgJtRvRSf
The graph shows an entity once something links it twice (graph.min_edge_weight), and Raspberry Pi's second link comes from the uploaded pi-episode. On CI its conversion took 45s, so graph-merge opened a graph with no entities and timed out (also on main, #388). The journey now waits, uncounted, until the entity's page says it is said in both. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012V6irFWrfGHnWJgJtRvRSf
…-2u9xmx # Conflicts: # CHANGELOG.md
Chat, the graph and a recording's page are sized to the screen less the top bar, so the update notice (Lens vX is out) pushed their bottom 75px below a phone's screen: Chat's question box needed a swipe. The notice now sets --lens-banner to its height and those pages take it off. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012V6irFWrfGHnWJgJtRvRSf
…-2u9xmx # Conflicts: # CHANGELOG.md
adeelahmad
pushed a commit
that referenced
this pull request
Oct 15, 2026
Both were red on main. The update banner pushed pages that fill the screen (Chat, the graph, a recording) below the fold, so the phone's question box needed a swipe: ported from #393, the banner sets --lens-banner to its height and those pages leave it room. Merging from the graph needs Raspberry Pi linked twice, which takes the second import's analysis: the journey now waits for the jobs to finish, as other journeys wait for background work. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KaZgCPYVesfDJhLzGCKJXX
20 of 22 tasks
adeelahmad
added a commit
that referenced
this pull request
Oct 15, 2026
The floating Ask button sat on whatever was in the bottom-right corner, such as Import on the Import page. It now finds what it would cover with the browser's own hit testing (a transparent probe just under it) and rises above any control there that scrolling can't carry clear: one in a bar fixed or stuck to the bottom, or with the page at its end. With no room to rise it steps out of sight. Dialogs, drawers and toasts drawn over it don't move it. The clicks survey fails a journey whose control the Ask button covers, and checks every page scrolled to its end. Also steadies two journeys that were red on main: the update banner leaves full-screen pages their room (ported from #393), and graph-merge waits for the imports' jobs to finish. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KaZgCPYVesfDJhLzGCKJXX
…-2u9xmx # Conflicts: # CHANGELOG.md # ci/clicks/journeys.mjs
…-2u9xmx # Conflicts: # docs/mcp.md # docs/processing.md
…h opens entity pages Matches #273's wording, and the notes search hit for an entity's page now links /entities/<id>, which opens the entity's wiki page. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012V6irFWrfGHnWJgJtRvRSf
…-2u9xmx # Conflicts: # CHANGELOG.md
Merged
16 of 22 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Adeel · project thread
Description
Before: an entity had no page of its own.
/entities/<id>sent you to the graph, and its notes lived at/notes/about/entity/<id>, a bare note with no idea of what the entity is or where it's said.After: every entity has its own page, named by its name the way a wiki names pages:
/wiki/<namespace>/<Name>with spaces as underscores (Ada Lovelace inworkis/wiki/work/Ada_Lovelace). The page shows what the entity is (type, other names, description), the notes people and the assistant keep on it in the BlockSuite (AFFiNE) editor, every line that says it with the name highlighted and a link to the moment, and on the side the recordings, the entities it comes up with (each a link to its own page), the same entity in other namespaces, who says it and similar content. Edit opens the existing side panel; renaming moves the page to the new name.How: nothing is stored for the address.
app/domain/wiki.pyreads an address the way analysis matches names (the entity key: any case, any spacing), then falls back toentity_alias, so a name it had before a rename, or the name of an entity merged into it, still opens it and the page switches to its own address.GET /api/v1/wiki/{ns}/{address}resolves an address (members only, like/entities).EntityDetail.page, MCPget_entity(url) and the assistant'sfind_entities(page) give the address./entities/<id>,/notes/about/entity/<id>,@links in notes, the graph panel's link, the entity's name on the Entities page and the RDF URI/id/entity/<id>all lead there. The notes page gained anembeddedmode (just the editor, view toggle, history and links); on an entity's page the empty notes area says what to write and has a border.Two red Clicks checks fixed on the way:
graph-mergetimed out (also on main, feat(recordings): edit an entity from a recording's Entities tab #388): the graph shows an entity once something links it twice (graph.min_edge_weight), and Raspberry Pi's second link comes from the uploaded pi-episode, whose conversion took 45s on CI. Main (fix(ui): keep the Ask button off the page's buttons #396) now waits for the imports' jobs before this journey, so this PR takes main's wait.chat-askon a phone needed a swipe once v0.10.0 was out: the update notice sat above Chat, which is sized to the screen less the top bar, so the question box ended up 75px below the screen. The notice now sets--lens-bannerto its height and the full-screen pages (Chat, the graph, recordings, home) take it off.Motivation and Context
Adeel asked that every entity have its own page with a wiki- or notes-style URL. The notes module (#118, #122, #135) already gave every thing a notes page in the BlockSuite editor, decided 2026-10-04; this makes the entity's page a real page at a readable address.
Steps to reproduce (if appropriate):
Entities → click an entity's name →
/wiki/<ns>/<Name>. Try/wiki/<ns>/<name in lowercase>, or an old name after a rename: it opens the page and the address switches.Types of changes
!in the title)Checklist:
make hookschecks it on commit).docs/accordingly.## UnreleasedinCHANGELOG.md.Done questions (AGENTS.md)
GET /api/v1/wiki/{ns}/{address},pageonGET /entities/{eid},urlon MCPget_entity,pageon the assistant'sfind_entities.entity-findstays at its baseline); the row still opens the side panel./entities; other namespaces look absent (404).openapi.jsonand the client from the generator)._vs a space share an address.🤖 Generated with Claude Code
https://claude.ai/code/session_012V6irFWrfGHnWJgJtRvRSf
Generated by Claude Code