Skip to content

Issue links open in the right panel instead of switching to the Issues page #120

Closed

Description

@lukemaj

What: Clicking a GitHub Issue link in a thread opens the Issue in the thread's right panel, the way pull request links do, and leaves the main view on the thread.
Why: Both the chat link handler and the thread's linked-Issues panel call useOpenIssueInIssuesView, which navigates the whole app to the Issues page.
So what: Prism builds the fix in one PR; the user checks it in the desktop app.

Outcome

From a thread, clicking an Issue link (in chat markdown or in the linked Issues list) shows that Issue's detail in the right panel next to the thread. The main view stays on the thread. The Issues page itself keeps opening Issues in its own side panel as today.

Elon record

  • Requirements and who asked: Open Issues in the right panel like PRs, without switching the main view (user, 2026-10-01).
  • Deleted: Navigating to the Issues page from a thread.
  • Bottleneck: None; the Issue detail panel already exists on the Issues page and the right panel already hosts pull requests.
  • Checked myself: apps/web/src/components/issues/useOpenIssueOrPullRequestLink.ts:42-55 (navigates to the Issues view), its use at :77,125 for chat links and in ThreadIssueLinks.tsx:185-188 for the linked-Issues list.

Acceptance criteria

  • Clicking an Issue link in a thread's chat opens its detail in the right panel and the main view stays on the thread.
  • Clicking an Issue in the thread's linked Issues list does the same.
  • Pull request links keep their current behaviour, and the Issues page keeps its own side panel.
  • The panel can be closed, and opening another Issue replaces it.

Non-goals

  • Changing the Issues page.
  • Mobile.

Blocked by

None

Required proof

  • Focused tests for the opening logic where it is logic, plus before and after screenshots from the desktop app.

Activity

  1. lukemaj commented on Oct 1, 2026

    @lukemaj
    ContributorAuthor

    What: PR #124 implements Issue links beside their thread in one PR against main.
    Why: The inherited draft had the correct routing approach; persisted targets needed validation and the linked row's accessible label needed correction.
    So what: The coordinator verifies the installed desktop build, then merges in the stated sibling order.

    Branch: fix/120-issue-links-right-panel. Workspace: /Users/lukaszmaj/dev/toolboxmd/chromeria-worktrees/120-issue-links-right-panel. Base: 0db8b3f. Head: fbc2ad5, clean and pushed. No merge authority, no versioning by design.

    Independent reviewer: sub.sub.46b03420-8643-4703-8756-8602f14b39fb.dispatcher-1e496a050956.reviewer-65c7c19dadbe. Clean exact-head verdict, verified review/independent success by lukemaj. Opus UI takeover: sub.sub.46b03420-8643-4703-8756-8602f14b39fb.dispatcher-1e496a050956.4478c42e5994, explicitly claudeAgent / claude-opus-5-5, reviewed 670b0e7 and committed the final accessible-label correction.

    Requirements and who asked: User and #120: chat/list Issue links beside the thread, preserved PR and Issues-page behavior, replacement/close, focused proof and screenshots.
    Deleted: Whole-app navigation from thread Issue links, duplicate detail UI, mobile and version-policy changes.
    Bottleneck: Routing and final proof, using the existing detail panel and one exclusive source writer at a time.
    Checked myself: Full inherited diff, source consumers, actual baseline navigation and candidate chat/list/replacement/close/PR behavior; exact Git/GitHub head and independent status.

    Implementation proof on 670b0e7

    1. pnpm exec vp test run apps/web/src/rightPanelStore.test.ts apps/web/src/components/issues/issueLinks.logic.test.ts
      Before persistence fix: exit 1, 1 failed / 88 passed. Failure: restores valid Issue tabs and discards malformed persisted targets. Expected closed empty panel; malformed id survived.
    2. pnpm exec vp fmt apps/web/src/rightPanelStore.ts apps/web/src/rightPanelStore.test.ts apps/web/src/components/issues/ThreadIssuePanel.tsx apps/web/src/components/issues/issueLinks.logic.test.ts apps/web/src/components/issues/issueLinkOpening.logic.test.ts docs/fork-features.md
      Exit 0.
    3. pnpm exec vp test run apps/web/src/rightPanelStore.test.ts apps/web/src/components/issues/issueLinks.logic.test.ts apps/web/src/components/issues/issueLinkOpening.logic.test.ts apps/web/src/components/issues/ThreadLinksPanel.test.tsx apps/web/src/threadRoutes.test.ts apps/web/src/lib/openPullRequestLink.test.ts apps/web/src/components/ChatMarkdown.test.tsx
      Exit 0; 7 files, 210 tests passed. Node printed localStorage unavailable experimental warnings in the non-browser test environment.
    4. pnpm exec vp lint apps/web/src/components/ChatMarkdown.tsx apps/web/src/components/ChatView.tsx apps/web/src/components/RightPanelTabs.tsx apps/web/src/components/issues/IssueDetailPanel.tsx apps/web/src/components/issues/IssuesView.tsx apps/web/src/components/issues/ThreadIssueLinks.tsx apps/web/src/components/issues/ThreadIssuePanel.tsx apps/web/src/components/issues/issueLinks.logic.ts apps/web/src/components/issues/issueLinks.logic.test.ts apps/web/src/components/issues/issueLinkOpening.logic.test.ts apps/web/src/components/issues/useOpenIssueOrPullRequestLink.ts apps/web/src/rightPanelStore.ts apps/web/src/rightPanelStore.test.ts
      Exit 0; React warnings in existing ChatMarkdown, ChatView and RightPanelTabs code. No errors.
    5. pnpm exec tsc --noEmit -p apps/web/tsconfig.json
      Exit 0; web package only, no output.
    6. pnpm exec vp fmt --check apps/web/src/components/ChatMarkdown.tsx apps/web/src/components/ChatView.tsx apps/web/src/components/RightPanelTabs.tsx apps/web/src/components/issues/IssueDetailPanel.tsx apps/web/src/components/issues/IssuesView.tsx apps/web/src/components/issues/ThreadIssueLinks.tsx apps/web/src/components/issues/ThreadIssuePanel.tsx apps/web/src/components/issues/issueLinks.logic.ts apps/web/src/components/issues/issueLinks.logic.test.ts apps/web/src/components/issues/issueLinkOpening.logic.test.ts apps/web/src/components/issues/useOpenIssueOrPullRequestLink.ts apps/web/src/rightPanelStore.ts apps/web/src/rightPanelStore.test.ts docs/fork-features.md
      Exit 0; all matched files correctly formatted.
    7. git diff --check
      Exit 0 before commit.
    8. node scripts/fork-features.mjs check
      Exit 0; 19 features.
    9. git commit -m "fix(web): open thread issue links in the right panel"
      Exit 0; staged-file formatter hook passed; 15 files, 327 insertions, 31 deletions.
    10. bash scripts/fork-check.sh
      Exit 0 on candidate commit; upstream base de251fc; 49-commit merge-free fork stack; allowlist and feature ownership passed.

    Final accessible-label correction at bab5590

    • pnpm exec vp test run apps/web/src/components/issues/ThreadLinksPanel.test.tsx: 4 tests passed.
    • pnpm exec vp lint apps/web/src/components/issues/ThreadIssueLinks.tsx apps/web/src/components/issues/ThreadLinksPanel.test.tsx: no warnings or errors.
    • pnpm exec vp fmt --check apps/web/src/components/issues/ThreadIssueLinks.tsx apps/web/src/components/issues/ThreadLinksPanel.test.tsx: passed.
    • pnpm exec tsc --noEmit -p apps/web/tsconfig.json: exit 0.
    • bash scripts/fork-check.sh: passed.
    • git diff --check origin/main...HEAD: passed.

    Integrated proof and handoff

    Primary T3 Browser pass used worktree-local .t3, VACUUM INTO snapshot, sanitized projections and a normal GitHub-linked fixture repository under .t3 (partial-clone remote suffix breaks existing identity parser). Baseline click left the thread for the Issues page. Final candidate chat and linked list retain the thread URL and open Issue #120; Issue #113 replaces the singleton; closing returns to remaining tabs; PR #112 retains its panel; Issues page retains its side detail. Web and Electron-shared UI apply; mobile is excluded. Providers/contracts unchanged; remote environment behavior uses existing tested resolver, no real remote server was exercised.

    Screenshot paths and reversible assumptions are in PR #124. All six uploaded screenshots are embedded in PR #124. Installed-desktop verification remains coordinator-owned under the common brief. UI has no known in-scope gaps; Issue-body markdown links without thread context retain existing navigation outside requested entry points. CI is running. Nothing merged, installed or deployed.

    Final CI correction at fbc2ad5: removed useOpenIssueInIssuesView export after rg confirmed no external consumer, and obsolete ThreadLinksPanel test mock. Opus passed 89 tests across ThreadLinksPanel.test.tsx, issueLinkOpening.logic.test.ts, issueLinks.logic.test.ts and ChatMarkdown.test.tsx; web typecheck; touched-file lint/format; scoped knip --workspace apps/web --exports (exit 0). Exact-head independent review is success by lukemaj. Final-head CI is running with no failures yet. Dev server stopped via retained session 79006 after proof. Observer publication succeeded but sync failed twice with database is locked, so measurement cutoff is stale (19:32 UTC), recorded in PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions