NeahNew/MISSION_DELETION_FLOW_ANALYSIS.md
2026-01-09 11:19:32 +01:00

7.9 KiB

Mission Deletion Flow - Complete Analysis from Logs

🔍 Analysis of Your Deletion Flow

Based on your logs, here's what's happening:


What's Working

  1. Mission is fetched correctly

    SELECT "public"."Mission" WHERE "id" = '805c1d8c-1bd4-41e7-9cf1-d22631dae260'
    
  2. Attachments are fetched

    SELECT "public"."Attachment" WHERE "missionId" = '805c1d8c-1bd4-41e7-9cf1-d22631dae260'
    
  3. N8N deletion workflow is called

    Starting N8N deletion workflow
    Triggering n8n mission deletion workflow
    
  4. N8N responds successfully

    Deletion webhook response { status: 200 }
    Parsed deletion workflow result { success: true, hasError: false }
    
  5. Mission is deleted from database

    DELETE FROM "public"."Mission" WHERE "id" = '805c1d8c-1bd4-41e7-9cf1-d22631dae260'
    Mission deleted successfully from database
    

Critical Problems

Problem 1: N8N_API_KEY Not Set

N8N_API_KEY is not set in environment variables
API key present { present: false }

Impact: N8N workflow runs but may not have proper authentication.

Problem 2: All Integration IDs Are NULL/Empty

What N8N Receives:

{
  "missionId": "805c1d8c-1bd4-41e7-9cf1-d22631dae260",
  "name": "libra",
  "repoName": "",                    // ❌ EMPTY
  "leantimeProjectId": 0,            // ❌ ZERO
  "documentationCollectionId": "",   // ❌ EMPTY
  "rocketchatChannelId": "",         // ❌ EMPTY
  "giteaRepositoryUrl": null,        // ❌ NULL
  "outlineCollectionId": null,       // ❌ NULL
  "rocketChatChannelId": null,       // ❌ NULL
  "penpotProjectId": null            // ❌ NULL
}

Root Cause: The mission was created without integration IDs being saved because:

  1. Mission was created in database
  2. N8N workflow was triggered
  3. N8N created integrations
  4. N8N tried to call /api/missions/mission-created
  5. Endpoint returned 500 error (N8N_API_KEY not configured)
  6. IDs were never saved to database

Problem 3: N8N Cannot Delete Integrations

Because N8N receives empty IDs:

  • Cannot delete Gitea repository (no repoName)
  • Cannot close Leantime project (no leantimeProjectId)
  • Cannot delete Outline collection (no documentationCollectionId)
  • Cannot close RocketChat channel (no rocketchatChannelId)

Result: External integrations remain orphaned even though mission is deleted.


🔄 Complete Flow Breakdown

Step 1: Frontend Calls DELETE

DELETE /api/missions/805c1d8c-1bd4-41e7-9cf1-d22631dae260

Step 2: Backend Fetches Mission

SELECT "Mission" WHERE "id" = '805c1d8c-1bd4-41e7-9cf1-d22631dae260'

Result: Mission found, but all integration IDs are null:

  • leantimeProjectId: null
  • outlineCollectionId: null
  • rocketChatChannelId: null
  • giteaRepositoryUrl: null

Step 3: Backend Prepares Deletion Data

{
  repoName: "",                    // Extracted from null giteaRepositoryUrl
  leantimeProjectId: 0,            // null || 0 = 0
  documentationCollectionId: "",   // null || '' = ''
  rocketchatChannelId: ""         // null || '' = ''
}

Step 4: N8N Workflow Called

POST https://brain.slm-lab.net/webhook-test/mission-delete

Headers:

  • x-api-key: (empty - N8N_API_KEY not set)

Body: (with empty IDs as shown above)

Step 5: N8N Workflow Executes

  • Receives request
  • Cannot delete integrations (no IDs)
  • Returns success (but didn't actually delete anything)

Step 6: Mission Deleted from Database

DELETE FROM "Mission" WHERE "id" = '805c1d8c-1bd4-41e7-9cf1-d22631dae260'

CASCADE deletes:

  • MissionUsers
  • Attachments

But external integrations remain:

  • Gitea repository still exists
  • Leantime project still exists
  • Outline collection still exists
  • RocketChat channel still exists

🎯 Root Cause Summary

Why IDs Are NULL

  1. Mission Creation:

    • Mission created in database
    • N8N workflow triggered
    • N8N created integrations
  2. N8N Callback Fails:

    • N8N tries to call /api/missions/mission-created
    • Endpoint checks for N8N_API_KEY in environment
    • N8N_API_KEY is not set
    • Endpoint returns 500: "Server configuration error"
    • IDs are never saved
  3. Mission Deletion:

    • Mission has no integration IDs (all null)
    • N8N receives empty IDs
    • Cannot delete integrations
    • Integrations remain orphaned

Solutions

Solution 1: Fix N8N_API_KEY (IMMEDIATE)

Add to environment variables:

N8N_API_KEY=LwgeE1ntADD20OuWC88S3pR0EaO7FtO4

Then:

  1. Restart your application
  2. Create a new mission
  3. Verify IDs are saved to database
  4. Delete mission - should work correctly

Solution 2: Fix Existing Missions (MIGRATION)

For missions that already exist without IDs:

Option A: Manual Update

UPDATE "Mission" 
SET 
  "giteaRepositoryUrl" = 'https://gite.slm-lab.net/alma/repo-name',
  "leantimeProjectId" = '123',
  "outlineCollectionId" = 'collection-id',
  "rocketChatChannelId" = 'channel-id'
WHERE "id" = 'mission-id';

Option B: Query External Services

  • Query Gitea API to find repositories
  • Query Leantime API to find projects
  • Query Outline API to find collections
  • Query RocketChat API to find channels
  • Update database with found IDs

Option C: Re-create Missions

  • Delete missions without IDs
  • Re-create them (with N8N_API_KEY fixed, IDs will be saved)

Solution 3: Make N8N Callback More Resilient

Modify /api/missions/mission-created endpoint to handle missing API key more gracefully:

// Instead of returning 500, log warning and continue
if (!expectedApiKey) {
  logger.warn('N8N_API_KEY not configured, but continuing anyway', {
    missionId: body.missionId
  });
  // Continue without API key validation (less secure but works)
  // OR require API key but provide better error message
}

Not recommended for production (security risk), but could work for development.


📊 Current State vs Desired State

Current State (Your Logs)

Mission in DB:
  - leantimeProjectId: null
  - outlineCollectionId: null
  - rocketChatChannelId: null
  - giteaRepositoryUrl: null

N8N Receives:
  - repoName: ""
  - leantimeProjectId: 0
  - documentationCollectionId: ""
  - rocketchatChannelId: ""

Result:
  - Mission deleted ✅
  - Integrations NOT deleted ❌

Desired State

Mission in DB:
  - leantimeProjectId: "123"
  - outlineCollectionId: "collection-456"
  - rocketChatChannelId: "channel-789"
  - giteaRepositoryUrl: "https://gite.slm-lab.net/alma/repo-name"

N8N Receives:
  - repoName: "repo-name"
  - leantimeProjectId: 123
  - documentationCollectionId: "collection-456"
  - rocketchatChannelId: "channel-789"

Result:
  - Mission deleted ✅
  - Integrations deleted ✅

🔧 Immediate Actions Required

  1. Add N8N_API_KEY to environment

    N8N_API_KEY=LwgeE1ntADD20OuWC88S3pR0EaO7FtO4
    
  2. Restart application

  3. Test mission creation

    • Create a new mission
    • Check database - IDs should be saved
    • Delete mission - should work correctly
  4. ⚠️ Fix existing missions

    • Update existing missions with their integration IDs
    • Or delete and re-create them

📝 Summary

The deletion flow is working correctly, but:

  1. N8N_API_KEY is missing → Endpoint returns 500 error
  2. IDs are never saved → Mission has null integration IDs
  3. N8N receives empty IDs → Cannot delete integrations
  4. Integrations remain orphaned → External resources not cleaned up

Fix: Add N8N_API_KEY to environment variables, then new missions will work correctly. Existing missions need manual update or re-creation.


Document Created: $(date) Status: Deletion flow works, but integration cleanup fails due to missing IDs