8000 feat: assets and people, not recordings and speakers, unless it is audio by adeelahmad · Pull Request #273 · adeelahmad/lense · GitHub
[go: up one dir, main page]

Skip to content

feat: assets and people, not recordings and speakers, unless it is audio - #273

Merged
adeelahmad merged 13 commits into
mainfrom
claude/project-thread-21y264
Oct 15, 2026
Merged

adeelahmad merged 13 commits into
mainfrom
claude/project-thread-21y264

Conversation

@adeelahmad
@adeelahmad adeelahmad commented Oct 10, 2026 •
Copy link
Copy Markdown
Owner

Requested by Adeel · project thread

Description

Before: the web app, the assistant, the API descriptions and the docs talked like an audio archive: every item was a "recording", everyone recognised was a "speaker", every item's text was a "transcript", and search said where words were "said".

After:

  • An item of any kind is an asset ("Untitled asset", "3 assets", "List assets"), or a document where it is one.
  • Everyone recognised by voice or face is a person: the People page, graph nodes, filters, the assistant. Names found in text are named people where both appear together. The admin account list is Members.
  • An item's text is its text ("Text only", "Search your assets", "Found 3 times in 2 assets").
  • "Recording", "speaker" (diarized voices, who spoke when), "transcript" and talk time stay where they really mean audio or video.

How: text only. Route docstrings and Field descriptions (OpenAPI regenerated with make openapi), MCP and assistant tool titles and descriptions, prompts, error messages, emails, reports, CLI output, docs and the threat model prose. API paths (/recordings, /speakers), MCP tool names (list_recordings, list_speakers), JSON keys, enum values, Cypher labels, template variables and stored data are unchanged, so no migration is needed.

Motivation and Context

Most things in Lens are not recordings, and most people in it are not speakers.

Types of changes

  • New feature (non-breaking change which adds functionality)

Checklist:

  • The title is a Conventional Commit.
  • My code follows the code style of this project (make hooks checks it on commit).
  • I added or updated tests. (assertions on changed strings)
  • My change requires documentation updates, and I have updated docs/ accordingly.
  • Users need more than the title to understand it, so I wrote it under ## Unreleased in CHANGELOG.md.

Local on the merged head: backend 809 passed, frontend jest 96/96 suites, tsc, eslint, prettier, ruff, mkdocs --strict, threat-model validator.

🤖 Generated with Claude Code

https://claude.ai/code/session_01RZiSmgAbLXTuQkniFKmuvr

… video

The web app, assistant tool descriptions and replies, API descriptions,
error messages and docs now say asset (or document) for an item of any
kind. Recording stays for audio and video. API paths, MCP tool names
and stored data are unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RZiSmgAbLXTuQkniFKmuvr
@adeelahmad adeelahmad self-assigned this Oct 10, 2026
# Conflicts:
#	docs/notifications.md
…-21y264

# Conflicts:
#	docs/assistant.md
#	docs/mcp.md
#	threat-model.yaml
…peech

The people registry (voice and face) is People in the web app, graph,
assistant, API descriptions and docs; names found in text are named
people; admin accounts are Members. An item's text is its text unless
it came from speech. Speaker stays for diarized voices. Also rewords
find_similar and the Prometheus help that arrived from main.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RZiSmgAbLXTuQkniFKmuvr
@adeelahmad adeelahmad changed the title feat: call items assets, not recordings, unless they are audio or video feat: assets and people, not recordings and speakers, unless it is audio Oct 10, 2026
…-21y264

# Conflicts:
#	README.md
#	packaging/qnap/qpkg/qpkg.cfg
#	packaging/synology/INFO.in
…-21y264

# Conflicts:
#	README.md
#	docs/api.md
#	docs/components.md
#	docs/configuration.md
#	docs/processing.md
#	fastapi_backend/app/api/mcp.py
#	fastapi_backend/tests/api/test_conversion.py
#	nextjs-frontend/__tests__/import-documents.test.tsx
#	nextjs-frontend/components/routines/routine-model.ts
#	threat-model.md
#	threat-model.yaml
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RZiSmgAbLXTuQkniFKmuvr
…-21y264

# Conflicts:
#	docs/api.md
#	docs/configuration.md
#	docs/mcp.md
#	fastapi_backend/app/api/v1/routes/recordings.py
#	nextjs-frontend/components/recording/header.tsx
#	threat-model.md
#	threat-model.yaml
…-21y264

# Conflicts:
#	README.md
#	docs/api.md
#	docs/authentication.md
#	docs/configuration.md
#	docs/frontend.md
#	fastapi_backend/app/api/deps.py
#	fastapi_backend/app/api/v1/routes/collections.py
#	fastapi_backend/app/api/v1/routes/entities.py
#	fastapi_backend/app/api/v1/routes/namespaces.py
#	fastapi_backend/app/api/v1/routes/notes.py
#	fastapi_backend/app/api/v1/routes/pipelines.py
#	fastapi_backend/app/api/v1/routes/rdf.py
#	fastapi_backend/app/api/v1/routes/recordings.py
#	fastapi_backend/app/api/v1/routes/requests.py
#	fastapi_backend/app/api/v1/routes/speakers.py
#	fastapi_backend/app/api/v1/routes/topics.py
#	fastapi_backend/app/api/v1/routes/video.py
#	fastapi_backend/app/api/v1/routes/workflows.py
#	fastapi_backend/app/domain/evidence.py
#	nextjs-frontend/app/openapi-client/sdk.gen.ts
#	nextjs-frontend/components/app-shell/command-palette.tsx
#	nextjs-frontend/components/graph/graph-ask.tsx
#	nextjs-frontend/components/library/bulk-bar.tsx
#	nextjs-frontend/components/library/filters-bar.tsx
#	nextjs-frontend/components/public/recording-view.tsx
#	nextjs-frontend/components/recording/chat-tab.tsx
#	nextjs-frontend/components/recording/header.tsx
#	nextjs-frontend/openapi.json
#	threat-model.md
#	threat-model.yaml
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RZiSmgAbLXTuQkniFKmuvr
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RZiSmgAbLXTuQkniFKmuvr
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RZiSmgAbLXTuQkniFKmuvr
@adeelahmad
adeelahmad enabled auto-merge (squash) October 15, 2026 12:00
@adeelahmad
adeelahmad merged commit 1594adf into main Oct 15, 2026
3 of 10 checks passed
@adeelahmad
adeelahmad deleted the claude/project-thread-21y264 branch October 15, 2026 12:01
adeelahmad pushed a commit that referenced this pull request Oct 15, 2026
…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
adeelahmad added a commit that referenced this pull request Oct 15, 2026
…#393)

* feat(entities): every entity has its own page at /wiki/<namespace>/<Name>

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

* docs(entities): entity pages in the Entities docs and the changelog

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012V6irFWrfGHnWJgJtRvRSf

* fix(entities): show the empty notes area on an entity's page as a place 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

* test(clicks): wait for both imports before merging in the graph

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

* fix(web): leave the update notice room on pages that fill the screen

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

* fix(entities): call recordings assets on entity pages, and note search 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

---------

Co-authored-by: Adeel Ahmad <noreply@anthropic.com>
adeelahmad added a commit that referenced this pull request Oct 15, 2026
…pages and notes as built (#424)

Move usage analytics (#274) and assets and people (#273) out of the
README's In progress list, and add what merged since #383: a namespace's
own MCP server, chat completions and one-namespace API keys; editing and
merging entities and topics with undo, from agents too; entity pages at
wiki addresses; Connect with Google and rclone sign-in on the server;
the notes tree, today's note, pins, search and Recently deleted; backups
that keep Lens's files; and grouped, searchable settings. In progress now
lists the open feature PRs (#398, #400, #402, #408, #419), and the docs
index links usage analytics.


Claude-Session: https://claude.ai/code/session_01HDx7PPUauyjMn1LZs8JAsS

Co-authored-by: Adeel Ahmad <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

0