Files
fusion/docs/triage-duplicate-detection-postmortem.md
Fusion (runfusion.ai) fc8654800d feat(FN-4774): complete Step 1 — add duplicate-detection post-mortem
Fusion-Task-Id: FN-4774
Fusion-Task-Lineage: f3b81550-fb23-441e-aee7-44ffec63d03d
2026-05-16 11:55:39 -07:00

2.3 KiB
Raw Blame History

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.