feat(FN-4288): add stall surface docs and changeset
Fusion-Task-Id: FN-4288 Fusion-Task-Lineage: 09c6efc0-ea0b-443a-ab45-a89188fcf888
This commit is contained in:
5
.changeset/fn-4288-in-review-stall-dashboard-surface.md
Normal file
5
.changeset/fn-4288-in-review-stall-dashboard-surface.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@runfusion/fusion": minor
|
||||
---
|
||||
|
||||
Surface `task.inReviewStall` in the dashboard. In-review tasks whose state matches a known stall code (merge-blocker, transient-merge-status-no-owner, merge-retries-exhausted, no-worktree-no-merge-confirmed) now show a "Stall" badge on the task card and a code-specific diagnostic row in the task detail modal, with a deep-link to the most recent self-healing "In-review stall surfaced" log entry.
|
||||
@@ -117,6 +117,8 @@ Self-healing surfaces this diagnosis via task log entries in the form:
|
||||
|
||||
These entries are rate-limited per `(task, code)` over `taskStuckTimeoutMs`, so unchanged stalls are not spammed every cycle while state transitions can still surface a new code immediately.
|
||||
|
||||
**Dashboard surface:** In-review, non-paused tasks with `inReviewStall` set show a `Stall` badge on `TaskCard` and a code-specific diagnostic row in `TaskDetailModal` above the PR section. The diagnostic row includes headline/description/action copy, raw reason text, observed timestamp, and a `View activity log` deep-link that switches to Logs → Activity and highlights the most recent matching `In-review stall surfaced [<code>]: <reason>` entry. This UI is diagnostic only: neither the badge nor the jump button mutates task state.
|
||||
|
||||
Auto-completion/finalization remains owned by existing recovery passes:
|
||||
- `recoverStaleMergingStatus`
|
||||
- `finalizeNoOpReviewTasks`
|
||||
|
||||
@@ -117,6 +117,7 @@ describe("TaskDetailModal in-review stall diagnostics", () => {
|
||||
expect(screen.getByText("Open the Review tab to see which step is blocking, then fix the failure or override the step.")).toBeInTheDocument();
|
||||
|
||||
await user.click(screen.getByRole("button", { name: "View activity log" }));
|
||||
expect(screen.getByRole("button", { name: "Logs" })).toHaveClass("detail-tab-active");
|
||||
expect(screen.getByRole("button", { name: "Activity" })).toHaveClass("log-subview-btn-active");
|
||||
const highlighted = document.querySelector(".detail-log-entry--stall-highlight .detail-log-action");
|
||||
expect(highlighted?.textContent).toContain("In-review stall surfaced [merge-blocker]");
|
||||
|
||||
Reference in New Issue
Block a user