Feature: Emergent observation of shared passions and interests — Phase 5: Implementation #37

Closed
opened 2026-05-28 00:42:13 +00:00 by Mark · 3 comments
Owner

Phase 5: Implementation


Decomposed from kimi_agent_kin_app_sync#32

## Phase 5: Implementation --- _Decomposed from [kimi_agent_kin_app_sync#32](https://forgejo.tail018ac4.ts.net/Mark/kimi_agent_kin_app_sync/issues/32)_
Author
Owner

⏸ Needs Decision

Blocking factors:

  • Didn't meet auto-approve criteria — scope=medium, risk=medium, spec=aligned

Scope: medium Risk: medium Spec: aligned Type: feature
Summary: Phase 5 implementation of emergent cross-person shared passion/interest detection, completing unfinished stub code and adding a UI surface.
Suggestion: Fix the existing findSharedInteractions() — it references nonexistent .description/.location on DateEvent (should be .label), then add a proper cross-person analysis function that surfaces keyword overlaps between pairs of people. Create a SharedInterestsCard component for the PersonDetail overview tab and/or a dashboard insights section. Extract extractKeywords into a pure function for testability; write unit tests.
Rationale: Medium scope (~5-8 files: utils.ts + test, new component, PersonDetail.tsx integration) because an initial stub already exists in utils.ts (imported but unused in PersonDetail.tsx) but is buggy and only does within-person keyword frequency, not truly cross-person 'emergent' detection which is what the issue title implies. Risk is medium because it touches core data query paths and the PersonDetail page but is purely additive. Aligned with the project spec as a decomposed work unit from issue #32.

Action: Review each blocking factor above. Remove blocked:needs-decision label to route back to triage.

## ⏸ Needs Decision **Blocking factors:** - **Didn't meet auto-approve criteria** — scope=medium, risk=medium, spec=aligned --- **Scope:** medium **Risk:** medium **Spec:** aligned **Type:** feature **Summary:** Phase 5 implementation of emergent cross-person shared passion/interest detection, completing unfinished stub code and adding a UI surface. **Suggestion:** Fix the existing `findSharedInteractions()` — it references nonexistent `.description`/`.location` on DateEvent (should be `.label`), then add a proper cross-person analysis function that surfaces keyword overlaps between pairs of people. Create a `SharedInterestsCard` component for the PersonDetail overview tab and/or a dashboard insights section. Extract `extractKeywords` into a pure function for testability; write unit tests. **Rationale:** Medium scope (~5-8 files: utils.ts + test, new component, PersonDetail.tsx integration) because an initial stub already exists in utils.ts (imported but unused in PersonDetail.tsx) but is buggy and only does within-person keyword frequency, not truly cross-person 'emergent' detection which is what the issue title implies. Risk is medium because it touches core data query paths and the PersonDetail page but is purely additive. Aligned with the project spec as a decomposed work unit from issue #32. **Action:** Review each blocking factor above. Remove `blocked:needs-decision` label to route back to triage.
Author
Owner

⏸ Needs Decision

What needs to be decided?

  • Is this issue still relevant? If yes, remove the blocked:needs-decision label to route back to triage.

Blocking factors:

  • Didn't meet auto-approve criteria — scope=small, risk=low, spec=partial

Scope: small Risk: low Spec: partial Type: enhancement
Summary: Phase 5 of emergent observation feature — has no body content beyond '## Phase 5: Implementation', while the core implementation (observation types, utility functions, UI rendering) has already been completed in Phases 3 and 7.
Suggestion: Close as superseded — Phase 3 (what it surfaces) and Phase 7 (mediaMentioned field) already deliver the feature. The types (EmergentObservation, DashboardObservation), utility functions (findPersonObservations, computeDashboardObservations), and UI integrations in PersonDetail and Home are all live. No remaining work beyond what's already in Phase 6 (#38, lightweight annotation) which is labeled quickfix+triage-approved.
Rationale: Body is empty (154 chars, just the heading and decomposed-from footer). The decomposition from #32 produced phases 1-7; phases 3 and 7 are already implemented and closed, phase 6 is pending with quickfix. Phase 5 appears to have been a general implementation umbrella that was superseded by these finer-grained subtasks. Scope is small because any remaining work would be minimal integration. Low risk — purely additive. Spec is partial because the issue has no requirements of its own, only a heading.

To unblock: Remove the blocked:needs-decision label. The triage will apply the appropriate outcome based on your choice above.

## ⏸ Needs Decision **What needs to be decided?** - **Is this issue still relevant?** If yes, remove the `blocked:needs-decision` label to route back to triage. **Blocking factors:** - **Didn't meet auto-approve criteria** — scope=small, risk=low, spec=partial --- **Scope:** small **Risk:** low **Spec:** partial **Type:** enhancement **Summary:** Phase 5 of emergent observation feature — has no body content beyond '## Phase 5: Implementation', while the core implementation (observation types, utility functions, UI rendering) has already been completed in Phases 3 and 7. **Suggestion:** Close as superseded — Phase 3 (what it surfaces) and Phase 7 (mediaMentioned field) already deliver the feature. The types (EmergentObservation, DashboardObservation), utility functions (findPersonObservations, computeDashboardObservations), and UI integrations in PersonDetail and Home are all live. No remaining work beyond what's already in Phase 6 (#38, lightweight annotation) which is labeled quickfix+triage-approved. **Rationale:** Body is empty (154 chars, just the heading and decomposed-from footer). The decomposition from #32 produced phases 1-7; phases 3 and 7 are already implemented and closed, phase 6 is pending with quickfix. Phase 5 appears to have been a general implementation umbrella that was superseded by these finer-grained subtasks. Scope is small because any remaining work would be minimal integration. Low risk — purely additive. Spec is partial because the issue has no requirements of its own, only a heading. **To unblock:** Remove the `blocked:needs-decision` label. The triage will apply the appropriate outcome based on your choice above.
Mark 2026-05-30 23:38:28 +00:00
Author
Owner

Implementation Complete

Added observation-based suggestion types that detect shared interests from interaction notes and topics:

  • gift_idea: Suggests themed gifts when a keyword appears in gifts or 2+ interactions
  • conversation: Suggests conversation starters for topics not discussed in 30+ days
  • shared_activity: Suggests shared activities when a keyword appears in 3+ interactions and at least one topic

The implementation extracts keywords from notes and topics, filters stop words, and generates contextual suggestions based on passion patterns detected in interaction history.

## Implementation Complete Added observation-based suggestion types that detect shared interests from interaction notes and topics: - **gift_idea**: Suggests themed gifts when a keyword appears in gifts or 2+ interactions - **conversation**: Suggests conversation starters for topics not discussed in 30+ days - **shared_activity**: Suggests shared activities when a keyword appears in 3+ interactions and at least one topic The implementation extracts keywords from notes and topics, filters stop words, and generates contextual suggestions based on passion patterns detected in interaction history.
Sign in to join this conversation.
No milestone
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
Mark/kimi_agent_kin_app_sync#37
No description provided.