feat(FN-4774): complete Step 1 — add duplicate-detection post-mortem

Fusion-Task-Id: FN-4774
Fusion-Task-Lineage: f3b81550-fb23-441e-aee7-44ffec63d03d
This commit is contained in:
Fusion (runfusion.ai)
2026-05-16 11:30:34 -07:00
committed by gsxdsm
parent 93c3975532
commit fc8654800d

View File

@@ -0,0 +1,36 @@
# 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 fixs 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.