Motif Inbox - AI-suggested entry→motif membership queue #124

Open
opened 2026-07-15 20:35:36 +00:00 by claude-bot · 0 comments
Contributor

Feature idea (Fable ideation, rank #1) · Effort: S-M · Value: High

Pitch
For each motif, surface unassigned entries in the project that are semantically close to the motif's existing members, as an approve/dismiss queue.

Why it matters
With years of imported tweets/notes, most of the corpus is unfiled. Today the only paths from entry to motif are manual assignment or the pairwise connection-suggestion queue. A motif that means something should actively pull in candidate evidence the researcher forgot she had - the single highest-leverage rediscovery mechanism for a large back-catalog.

How it fits
Clone the pattern in api/src/services/connectionSuggestionsWorker.ts (nightly BullMQ job, pending/approved/dismissed/snoozed statuses, search.similarityThreshold setting) but score entries.text_embedding (vector(768), migrations 004/023) against a per-motif centroid - AVG(text_embedding) over entry_motifs members (pgvector supports this). New motif_suggestions table modeled on 030_connection_suggestions.sql; routes alongside api/src/routes/suggestions.ts; approval writes to entry_motifs.

Why it was likely missed
Suggestions were scoped as pairwise entry?entry when connections shipped (migration 030); nobody generalized the mechanism to the entry→motif relation, even though every ingredient already exists.

Acceptance criteria

  • Each motif has a queue of semantically-near unassigned entries in the same project.
  • Approve writes to entry_motifs; dismiss/snooze persists and doesn't resurface.
  • Only runs when embeddings/AI are available; degrades gracefully otherwise.

From the 2026-07-15 codebase audit - Fable feature-ideation pass. Companion report: docs/.internal/report-2026-07-15.md (gitignored).

**Feature idea** (Fable ideation, rank #1) · **Effort:** S-M · **Value:** High **Pitch** For each motif, surface unassigned entries in the project that are semantically close to the motif's existing members, as an approve/dismiss queue. **Why it matters** With years of imported tweets/notes, most of the corpus is *unfiled*. Today the only paths from entry to motif are manual assignment or the pairwise connection-suggestion queue. A motif that means something should actively pull in candidate evidence the researcher forgot she had - the single highest-leverage rediscovery mechanism for a large back-catalog. **How it fits** Clone the pattern in `api/src/services/connectionSuggestionsWorker.ts` (nightly BullMQ job, pending/approved/dismissed/snoozed statuses, `search.similarityThreshold` setting) but score `entries.text_embedding` (`vector(768)`, migrations 004/023) against a per-motif centroid - `AVG(text_embedding)` over `entry_motifs` members (pgvector supports this). New `motif_suggestions` table modeled on `030_connection_suggestions.sql`; routes alongside `api/src/routes/suggestions.ts`; approval writes to `entry_motifs`. **Why it was likely missed** Suggestions were scoped as pairwise entry?entry when connections shipped (migration 030); nobody generalized the mechanism to the entry→motif relation, even though every ingredient already exists. **Acceptance criteria** - [ ] Each motif has a queue of semantically-near unassigned entries in the same project. - [ ] Approve writes to `entry_motifs`; dismiss/snooze persists and doesn't resurface. - [ ] Only runs when embeddings/AI are available; degrades gracefully otherwise. --- _From the 2026-07-15 codebase audit - Fable feature-ideation pass. Companion report: `docs/.internal/report-2026-07-15.md` (gitignored)._
claude-bot changed title from Motif Inbox - AI-suggested entry?motif membership queue to Motif Inbox - AI-suggested entry→motif membership queue 2026-07-15 20:38:53 +00:00
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/TeaLeaves#124
No description provided.