# Triage Duplicate Detection Post-Mortem (FN-4774) ## Summary Between 14:29 and 16:05 on 2026-05-16, three independent tasks were filed and executed for the same defect: rebase-merge done-task diff truncation in `packages/dashboard/src/routes/register-session-diff-routes.ts` (with related tests in `packages/dashboard/src/__tests__/routes-diff.test.ts`). This duplicated implementation and review effort. ## Timeline - **FN-4726** - Created: **14:29** - Merged: **14:52** - GitHub tracking: **#400** - Scope touched: `register-session-diff-routes.ts`, `routes-diff.test.ts` - **FN-4734** - Created: **14:54** - Finalization: **15:33** (auto no-op finalize) - GitHub tracking: **#414** - Scope touched: same target files - **FN-4741** - Created: **15:04** - Merged: **16:05** - GitHub tracking: **#424** - Scope touched: same target files ## Root cause 1. **Triage duplicate scan blind spot:** `fn_task_list` intentionally excludes `done` tasks (`tasks.filter((t) => t.column !== "done")` in `packages/engine/src/triage.ts`), so recently completed fixes were invisible to the duplicate check. 2. **No triage keyword search tool:** Triage had no exposed keyword search over full task history (including done/archived), despite `TaskStore.searchTasks(...)` already existing and backed by FTS5. 3. **GitHub issue duplication gap:** Tracking issue creation did not include a check for existing closed issues covering the same files/keywords. ## Decision 1. **Add `fn_task_search` triage tool** that wraps `store.searchTasks(...)` with defaults that include historical tasks (`includeArchived: true`, done tasks included by default). 2. **Strengthen duplicate-check prompt guidance** so triage must run both list and keyword search (multiple phrases from title/description/file paths/symptoms/symbol names), then inspect likely matches before filing. 3. **Record GitHub-side dedup as follow-up work** (new task) rather than expanding this fix’s scope. ## Acceptance-criteria mapping 1. **Document what happened and why:** covered by timeline + root-cause analysis above. 2. **Close triage duplicate-detection gap:** addressed by adding `fn_task_search` and prompt instructions to query done/archived history. 3. **Preserve scope discipline:** GitHub-side dedup is explicitly deferred into a follow-up task instead of being implemented here.