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
-
Mission is fetched correctly ✅
SELECT "public"."Mission" WHERE "id" = '805c1d8c-1bd4-41e7-9cf1-d22631dae260' -
Attachments are fetched ✅
SELECT "public"."Attachment" WHERE "missionId" = '805c1d8c-1bd4-41e7-9cf1-d22631dae260' -
N8N deletion workflow is called ✅
Starting N8N deletion workflow Triggering n8n mission deletion workflow -
N8N responds successfully ✅
Deletion webhook response { status: 200 } Parsed deletion workflow result { success: true, hasError: false } -
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:
- Mission was created in database ✅
- N8N workflow was triggered ✅
- N8N created integrations ✅
- N8N tried to call
/api/missions/mission-created❌ - Endpoint returned 500 error (N8N_API_KEY not configured) ❌
- 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: nulloutlineCollectionId: nullrocketChatChannelId: nullgiteaRepositoryUrl: 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
-
Mission Creation:
- Mission created in database ✅
- N8N workflow triggered ✅
- N8N created integrations ✅
-
N8N Callback Fails:
- N8N tries to call
/api/missions/mission-created - Endpoint checks for
N8N_API_KEYin environment N8N_API_KEYis not set ❌- Endpoint returns 500: "Server configuration error" ❌
- IDs are never saved ❌
- N8N tries to call
-
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:
- Restart your application
- Create a new mission
- Verify IDs are saved to database
- 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
-
✅ Add N8N_API_KEY to environment
N8N_API_KEY=LwgeE1ntADD20OuWC88S3pR0EaO7FtO4 -
✅ Restart application
-
✅ Test mission creation
- Create a new mission
- Check database - IDs should be saved
- Delete mission - should work correctly
-
⚠️ Fix existing missions
- Update existing missions with their integration IDs
- Or delete and re-create them
📝 Summary
The deletion flow is working correctly, but:
- N8N_API_KEY is missing → Endpoint returns 500 error
- IDs are never saved → Mission has null integration IDs
- N8N receives empty IDs → Cannot delete integrations
- 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