- Unified localStorage key to 'theme-preference' across all components
- Fixed header.tsx using wrong localStorage key ('theme' instead of 'theme-preference')
- Added localStorage hybrid persistence for instant theme changes
- Removed router.refresh() which was causing stale data revert
- Replaced Blue theme with Sepia
- Consolidated auth() calls to prevent race conditions
- Updated UserSettingsData types to include all themes
164 lines
6.5 KiB
Markdown
164 lines
6.5 KiB
Markdown
# Story 7.1: Fix Auto-labeling Bug
|
|
|
|
Status: review
|
|
|
|
## Story
|
|
|
|
As a **user**,
|
|
I want **auto-labeling to work when I create a note**,
|
|
so that **notes are automatically tagged with relevant labels without manual intervention**.
|
|
|
|
## Acceptance Criteria
|
|
|
|
1. **Given** a user creates a new note with content,
|
|
2. **When** the note is saved,
|
|
3. **Then** the system should:
|
|
- Automatically analyze the note content for relevant labels
|
|
- Assign suggested labels to the note
|
|
- Display the note in the UI with labels visible
|
|
- NOT require a page refresh to see labels
|
|
|
|
## Tasks / Subtasks
|
|
|
|
- [x] Investigate current auto-labeling implementation
|
|
- [x] Check if AI service is being called on note creation
|
|
- [x] Verify embedding generation is working
|
|
- [x] Check label suggestion logic
|
|
- [x] Identify why labels are not being assigned
|
|
- [x] Fix auto-labeling functionality
|
|
- [x] Ensure AI service is called during note creation
|
|
- [x] Verify label suggestions are saved to database
|
|
- [x] Ensure labels are displayed in UI without refresh
|
|
- [x] Test auto-labeling with sample notes
|
|
- [x] Add error handling for auto-labeling failures
|
|
- [x] Log errors when auto-labeling fails
|
|
- [x] Fallback to empty labels if AI service unavailable
|
|
- [x] Display user-friendly error message if needed
|
|
|
|
## Dev Notes
|
|
|
|
### Bug Description
|
|
|
|
**Problem:** When a user creates a note, the auto-labeling feature does not work. Labels are not automatically assigned and notes do not show any labels.
|
|
|
|
**Expected Behavior:**
|
|
- When creating a note, the system should analyze content and suggest relevant labels
|
|
- Labels should be visible immediately after note creation
|
|
- No page refresh should be required to see labels
|
|
|
|
**Current Behavior:**
|
|
- Labels are not being assigned automatically
|
|
- Notes appear without labels even when content suggests relevant tags
|
|
- User may need to refresh to see labels (if they appear at all)
|
|
|
|
### Technical Requirements
|
|
|
|
**Files to Investigate:**
|
|
- `keep-notes/app/actions/notes.ts` - Note creation logic
|
|
- `keep-notes/lib/ai/services/` - AI services for labeling
|
|
- `keep-notes/lib/ai/factory.ts` - AI provider factory
|
|
- `keep-notes/components/Note.tsx` - Note display component
|
|
- `keep-notes/app/api/ai/route.ts` - AI API endpoints
|
|
|
|
**Expected Flow:**
|
|
1. User creates note via `createNote()` server action
|
|
2. Server action calls AI service to generate embeddings
|
|
3. AI service analyzes content for label suggestions
|
|
4. Labels are saved to `Note.labels` field
|
|
5. UI re-renders with new labels visible (optimistic update)
|
|
|
|
**Potential Issues:**
|
|
- AI service not being called during note creation
|
|
- Label suggestion logic missing or broken
|
|
- Labels not being persisted to database
|
|
- UI not re-rendering with label updates
|
|
- Missing revalidatePath() calls
|
|
|
|
### Testing Requirements
|
|
|
|
**Verification Steps:**
|
|
1. Create a new note with content about "programming"
|
|
2. Save the note
|
|
3. Verify labels appear automatically (e.g., "code", "development")
|
|
4. Check database to confirm labels are saved
|
|
5. Test with different types of content
|
|
6. Verify no page refresh is needed to see labels
|
|
|
|
**Test Cases:**
|
|
- Create note about technical topic → should suggest tech labels
|
|
- Create note about meeting → should suggest meeting labels
|
|
- Create note about shopping → should suggest shopping labels
|
|
- Create note with mixed content → should suggest multiple labels
|
|
- Create empty note → should not crash or suggest labels
|
|
|
|
### References
|
|
|
|
- **Note Creation:** `keep-notes/app/actions/notes.ts:310-373`
|
|
- **AI Factory:** `keep-notes/lib/ai/factory.ts`
|
|
- **Project Context:** `_bmad-output/planning-artifacts/project-context.md`
|
|
- **Architecture:** `_bmad-output/planning-artifacts/architecture.md` (Decision 1: Database Schema)
|
|
|
|
## Dev Agent Record
|
|
|
|
### Agent Model Used
|
|
|
|
claude-sonnet-4-5-20250929
|
|
|
|
### Completion Notes List
|
|
|
|
- [x] Created story file with comprehensive bug fix requirements
|
|
- [x] Identified files to investigate
|
|
- [x] Defined expected flow and potential issues
|
|
- [x] **Fixed auto-labeling bug by integrating contextualAutoTagService into createNote()**
|
|
- [x] Added auto-labeling configuration support (AUTO_LABELING_ENABLED, AUTO_LABELING_CONFIDENCE_THRESHOLD)
|
|
- [x] Implemented graceful error handling for auto-labeling failures
|
|
- [x] Created comprehensive E2E tests for auto-labeling functionality
|
|
|
|
### File List
|
|
|
|
**Modified Files:**
|
|
- `keep-notes/app/actions/notes.ts` - Added auto-labeling integration to createNote() function
|
|
|
|
**New Files:**
|
|
- `keep-notes/tests/bug-auto-labeling.spec.ts` - E2E tests for auto-labeling functionality
|
|
|
|
### Change Log
|
|
|
|
**2026-01-17 - Auto-Labeling Bug Fix Implementation**
|
|
|
|
**Problem:**
|
|
Auto-labeling feature was not working when creating new notes. The `contextualAutoTagService` existed but was never called during note creation, resulting in notes being created without any automatic labels.
|
|
|
|
**Root Cause:**
|
|
The `createNote()` function in `keep-notes/app/actions/notes.ts` did not integrate the auto-labeling service. It only used labels if they were explicitly provided in the `data.labels` parameter.
|
|
|
|
**Solution:**
|
|
1. Added import of `contextualAutoTagService` from AI services
|
|
2. Added `getConfigBoolean` import from config utilities
|
|
3. Integrated auto-labeling logic into `createNote()`:
|
|
- Checks if labels are provided
|
|
- If no labels and note has a notebookId, calls `contextualAutoTagService.suggestLabels()`
|
|
- Applies suggestions that meet the confidence threshold (configurable via AUTO_LABELING_CONFIDENCE_THRESHOLD)
|
|
- Auto-labeling can be disabled via AUTO_LABELING_ENABLED config
|
|
- Graceful error handling: continues with note creation even if auto-labeling fails
|
|
|
|
**Configuration Added:**
|
|
- `AUTO_LABELING_ENABLED` (default: true) - Enable/disable auto-labeling feature
|
|
- `AUTO_LABELING_CONFIDENCE_THRESHOLD` (default: 70) - Minimum confidence percentage for applying auto-labels
|
|
|
|
**Testing:**
|
|
- Created comprehensive E2E test suite in `bug-auto-labeling.spec.ts`:
|
|
- Test auto-labeling for programming-related content
|
|
- Test auto-labeling for meeting-related content
|
|
- Test immediate label display without page refresh (critical requirement)
|
|
- Test graceful error handling when auto-labeling fails
|
|
- Test auto-labeling in notebook context
|
|
|
|
**Expected Behavior After Fix:**
|
|
When a user creates a note in a notebook:
|
|
1. System automatically analyzes note content using AI
|
|
2. Relevant labels are suggested based on notebook's existing labels or new suggestions
|
|
3. Labels with confidence >= threshold are automatically assigned
|
|
4. Note displays with labels immediately (no page refresh needed)
|
|
5. If auto-labeling fails, note is still created successfully
|