Files
ALwrity/docs/ALwrity Researcher/DRAFT_PERSISTENCE_FIXES.md

5.3 KiB

Draft Persistence Fixes

Issues Fixed

1. Draft Not Restoring on Page Refresh

Problem: When the page refreshed after clicking "Intent & Options", the intent analysis and queries were lost.

Root Causes:

  • Draft restoration in useResearchExecution wasn't properly validating the restored data
  • Timing issues between wizard state restoration and execution hook restoration
  • Missing error handling for invalid draft data

Fixes Applied:

  • Enhanced draft restoration with proper type validation
  • Added comprehensive logging to track restoration process
  • Improved error handling for invalid draft formats
  • Ensured intentAnalysis is properly restored with all queries

2. Drafts Not Saving Immediately

Problem: Drafts were debounced (5-second delay), causing loss if page refreshed quickly.

Root Causes:

  • Database saves were debounced to reduce API calls
  • Critical saves (intent analysis completion) weren't prioritized

Fixes Applied:

  • Removed debounce for critical saves (intent analysis completion)
  • Immediate save when user clicks "Intent & Options"
  • Immediate save when user confirms intent
  • Debounce still applies for non-critical updates

3. Drafts Not Visible in Projects

Problem: User couldn't see drafts in "My Projects".

Status Logic:

  • "draft" - Only keywords entered, no intent analysis
  • "in_progress" - Intent analysis completed (after "Intent & Options")
  • "completed" - Research results available

Note: After clicking "Intent & Options", projects are saved with status "in_progress", not "draft". This is correct behavior - they should appear in the projects list.

To View Projects:

  • Projects are saved to database with status based on completion
  • Use /api/research/projects endpoint to list projects
  • Filter by status=draft for drafts, status=in_progress for active projects
  • Currently, there's no UI component to display research projects (similar to PodcastMaker's ProjectList)

Changes Made

Frontend Changes

  1. frontend/src/utils/researchDraftManager.ts:

    • Removed debounce for critical saves (intent analysis completion)
    • Added logging for save operations
    • Immediate database save when intent analysis completes
  2. frontend/src/components/Research/hooks/useResearchExecution.ts:

    • Enhanced draft restoration with type validation
    • Added comprehensive logging
    • Improved error handling for invalid draft data
    • Immediate save on intent confirmation
  3. frontend/src/components/Research/hooks/useResearchWizard.ts:

    • Enhanced logging for draft restoration
    • Better validation of restored draft data
  4. frontend/src/components/Research/ResearchWizard.tsx:

    • Added draft restoration check
    • Enhanced logging for debugging
  5. frontend/src/components/Research/steps/components/IntentConfirmationPanel/IntentConfirmationPanel.tsx:

    • Added validation to prevent execution with zero queries
    • Better error handling

Backend Changes

No backend changes needed - the save endpoint already handles drafts correctly.

How Draft Persistence Works

Save Flow

  1. User enters keywords → Saved to localStorage only
  2. User clicks "Intent & Options" → Intent analysis completes
    • Saved to localStorage immediately
    • Saved to database immediately (critical save, no debounce)
    • Status: "in_progress"
  3. User confirms intent → Confirmed intent saved
    • Saved to localStorage immediately
    • Saved to database immediately (critical save)
    • Status: "in_progress"
  4. Research completes → Results saved
    • Saved to localStorage immediately
    • Saved to database immediately
    • Status: "completed"

Restore Flow

  1. Page loadsuseResearchWizard restores wizard state from draft
  2. Execution hook initializesuseResearchExecution restores intent analysis, confirmed intent, and results
  3. UI renders → IntentConfirmationPanel shows restored intent analysis with queries

Storage Keys

  • alwrity_research_draft - Complete draft data (localStorage)
  • alwrity_research_draft_id - Project UUID for updates (localStorage)
  • alwrity_last_draft_db_save - Timestamp for debouncing (localStorage)

Testing

To verify drafts are working:

  1. Enter keywords and click "Intent & Options"

    • Check browser console for: [ResearchDraftManager] ✅ Draft saved to database
    • Check localStorage for alwrity_research_draft
  2. Refresh the page

    • Check console for: [useResearchExecution] ✅ Restored intent analysis from draft
    • IntentConfirmationPanel should show with queries
  3. Check projects list

    • Projects with intent_analysis have status "in_progress"
    • Use API endpoint: GET /api/research/projects?status=in_progress

Future Improvements

  1. Add Research Projects List UI:

    • Create ResearchProjectList component (similar to PodcastMaker/ProjectList)
    • Display drafts, in-progress, and completed projects
    • Allow users to resume drafts
  2. Auto-save on Field Changes:

    • Save draft when user modifies intent fields
    • Debounced saves for non-critical changes
  3. Draft Expiration:

    • Auto-archive old drafts (e.g., 30 days)
    • Clear localStorage drafts after successful completion
  4. Better Error Recovery:

    • Retry failed database saves
    • Show user notification if draft save fails