Files
fusion/docs/triage-duplicate-detection-postmortem.md
Fusion (runfusion.ai) 953e2ee2ac docs(FN-4866): complete Step 1 — add incident closure addendum
Fusion-Task-Id: FN-4866
Fusion-Task-Lineage: 2188be29-febc-4610-92f6-d7c1a911359e
2026-05-17 02:46:46 -07:00

46 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.
## Incident closure (FN-4866)
FN-4866 was filed as a follow-up investigation request for the same FN-4726/FN-4734 duplicate-merge incident and is now closed against previously shipped safeguards.
- **FN-4774** — Added the `fn_task_search` triage tool over `store.searchTasks(...)` (FTS5) with historical coverage defaults (`includeArchived: true`, done tasks included by default) and updated duplicate-check prompt guidance in `packages/engine/src/triage.ts`.
- **FN-4815** — Added regression coverage in `packages/engine/src/__tests__/triage-duplicate-search-regression.test.ts` for the tool contract, duplicate-check prompt guidance, and end-to-end duplicate discovery before task creation.
- **FN-4829** — Added create-time duplicate gating (`POST /tasks/duplicate-check`, `acknowledgedDuplicates` / `bypassDuplicateCheck` on `POST /tasks`, `DuplicateWarningModal`, and `task:duplicate-warning-overridden` activity event).
FN-4866 acceptance-criteria mapping: root-cause analysis ✓ (see **Root cause** above); safeguard recommendation with linked implementation tasks ✓ (FN-4774 and FN-4829); regression test plan ✓ (FN-4815, plus explicit named-case coverage added under this closure task).