# 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
