Skip to content

feat(people): derive the People CRM from your selected chats#76

Merged
EyalDelarea merged 1 commit into
mainfrom
feat/people-from-selected-chats
Jun 12, 2026
Merged

feat(people): derive the People CRM from your selected chats#76
EyalDelarea merged 1 commit into
mainfrom
feat/people-from-selected-chats

Conversation

@EyalDelarea

Copy link
Copy Markdown
Owner

Follow-up to #75 (the People half landed after #75 was already merged, so it needs its own PR).

Why

The People (אנשים) tab stayed empty even after selecting chats. It was only populated from participants named as the owner of an extracted todo/meeting — a narrow path that usually matched nobody.

What

Broaden the derivation, scope-consistent with default-OFF (#75): a person qualifies when, in an included (non-removed) chat, they have a real message and are either

  • the counterpart of a 1:1 chat (the only non-self participant), or
  • named as the owner of a todo/meeting.

Plain group members who are neither are left out so the list doesn't flood. refreshPeople is now a pure projection rebuild (DELETE+INSERT) — excluding a chat drops its people, re-including brings them back, so nothing un-selected drives the list. GET /api/people refreshes on open, so newly-included chats show up immediately instead of waiting for the next summary run.

Verification

biome ✓ · typecheck ✓ · tests ✓ (agenda/people + extract-entities + server, incl. 3 new People cases: 1:1 counterpart without a todo, un-selected chat excluded, group members not flooded). No frontend change — listPeople shape is unchanged.

🤖 Generated with Claude Code

People was only populated from participants NAMED as the owner of an
extracted todo/meeting — a narrow path that usually yielded nobody, so
the tab stayed empty even with chats selected.

Broaden it (scope-consistent with default-off): a person now qualifies
when, in an INCLUDED (non-removed) chat, they have a real message and are
either the counterpart of a 1:1 chat or a todo/meeting owner. Plain group
members who are neither are left out so the list doesn't flood. The
projection is rebuilt each refresh (DELETE+INSERT), so excluding a chat
drops its people and re-including brings them back — nothing un-selected
drives the list. Also refresh on GET /api/people so newly-included chats
show up immediately instead of waiting for the next summary run.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@EyalDelarea EyalDelarea merged commit c445b87 into main Jun 12, 2026
5 checks passed
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.

1 participant