fix(workstation): surface failed issue/PR detail fetches instead of dropping them - #2036
Merged
gfargo-horizon-agent[bot] merged 2 commits intoAug 2, 2026
Conversation
…ropping them The debounced issue/PR detail hydration effects discarded a failed forge fetch without writing anything to context, so the triage preview pane stayed on the "Loading…" placeholder forever and re-cursoring the row never retried (the effect's cache-skip guard only checked the success cache). Cache the failure message alongside the detail (mirroring the #1633 list-loader treatment) so the preview pane can render it, and clear the cached error on mutation invalidation so a resolved transient failure retries.
Contributor
Author
There was a problem hiding this comment.
🔎 Agent review (sonnet) — CONCERNS
REVIEW: CONCERNS
RESOLVES: full
The PR faithfully implements the approved plan — dual error caches, both hydration effects, preview formatters, invalidation mirroring, and new tests all verified against origin/main, and build/lint/tests pass locally. One inconsistency with the codebase's established ascii-mode convention is worth a follow-up but isn't blocking.
1 concern — 1 inline on the diff
Reviewer flagged that the emoji bypasses the theme.ascii fallback convention used elsewhere in this surface, and formatIssueTriagePreview/ formatPullRequestTriagePreview don't receive theme to guard it. Simplest fix is to drop the glyph — the "Failed to load details:" prefix already makes the line self-explanatory. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Contributor
Author
There was a problem hiding this comment.
🔎 Agent re-review (sonnet, delta) — LGTM
REVIEW: LGTM
RESOLVES: full
The revise commit (0e35107) cleanly drops the hardcoded ⚠ glyph from both preview-pane error lines, exactly resolving the prior finding with a minimal, side-effect-free diff. No new problems introduced.
gfargo-horizon-agent
Bot
deleted the
agent/coco-1770-coco-1863-ws-9-fix-workstation-failed-is
branch
August 2, 2026 14:11
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
The two debounced issue/PR detail hydration effects in
useDetailHydration.tsdiscarded a failedforge.getIssueDetail/forge.getPullRequestDetailresult without writing anything to context. Because nothing was written, the triage preview pane stayed on the "Loading…" placeholder forever, and the effect's cache-skip guard (which only checked the success cache) never re-fired on re-cursor, so there was no retry either.Why
Closes #1863
Plane: OSS-1770
How
issueDetailErrorByNumber/pullRequestDetailErrorByNumbercaches toLogInkContext, mirroring the existing detail caches.useDetailHydration.tsnow write the forge'smessageinto the error cache on failure (frame-tagged like the success path), and the cache-skip guard treats a cached error the same as a cached detail (stops silent infinite re-fetching).formatIssueTriagePreview/formatPullRequestTriagePreview(previewPane.ts) accept an optionalerrorand render it in place of the "Loading…" placeholder when a detail fetch failed;detail/index.ts's two preview-panel renderers thread the cached error through.useForgeTriageWorkflowActions.ts's post-mutation cache invalidation now clears the matching error-cache entry alongside the detail-cache entry, so a resolved transient failure (e.g. rate limit) retries after the user acts on the row.Testing
npm run build)npm run test:jesttargeted + fullnpm testsuite — 419/419 suites, 0 failures; added preview-pane cases for the error branch)npm run lint)🤖 Generated by the harbor agent loop. Reviewed by a human before merge.
Closes #1863