Skip to content

Add durable investigation workspace and history home - #1712

Merged
nadaverell merged 7 commits into
mainfrom
feat/investigation-workspace-routes
Sep 9, 2026
Merged

nadaverell merged 7 commits into
mainfrom
feat/investigation-workspace-routes

Conversation

@nadaverell

@nadaverell nadaverell commented Sep 9, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Adds a reloadable investigations workspace that opens on investigation history instead of silently selecting the last run. Contextual resource investigations remain in the drawer, while explicit workspace routes make focused runs reloadable and shareable.

What changed

  • Adds /investigations and /investigations/:runId as the canonical history home and explicit selection routes.
  • Keeps recent investigations visible in a left rail on the workspace home, including at compact desktop widths.
  • Keeps the center in a quiet selection state; new investigations still begin from a specific issue or resource.
  • Keeps contextual drawer state in ai-run and preserves the focused run when expanding that drawer.
  • Makes Close and browser Back return through history across embedded Cloud router boundaries.
  • Preserves organization and namespace scope while keeping presentation mode out of query parameters.
  • Uses a distinct rerun icon and removes the misleading generic plus action.
  • Retains resource-run deduplication and normal follow-up questions inside focused investigations.

Testing

  • make tsc
  • make test
  • make build
  • Frontend suite: 85 files, 917 tests passed
  • git diff --check

Visual test

Attempted, but the local stack is blocked by existing database migration drift (orgs.slug missing). No remote test credential was available.

Rollout

After merge, publish the next radar-app package tag before updating the Cloud consumer. No package was published by this PR workflow.


Note

Medium Risk
Large navigation/state refactor across drawer vs workspace modes, deep links, and embedded routers; mistakes could break investigation focus, back/close behavior, or cross-view ai-run preservation.

Overview
Introduces a durable investigations workspace at /investigations and /investigations/:runId, while contextual investigations stay on the underlying page via ?ai-run. The global AI entry and expand/restore flow now route through this workspace, with return-path state so Close/Back can land back on the docked origin without leaving stray query params.

Diagnose navigation moves off direct window.history writes to React Router (navigate / location), including embedded MemoryRouter mode via forceRouterURLState and an onInvestigationFocus callback after a run is verified server-side. Primary-rail navigation uses dismissForNavigation instead of fully closing investigations when leaving a maximized workspace.

App shell threads the focused run through resource/Helm/GitOps/workload navigation (ai-run set/cleared explicitly), reads search params from React Router (not window.location), and preserves workspace URLs on cluster switch. The panel home is a dedicated InvestigationHome (optional Issues CTA), history stays visible on workspace home at narrow widths, re-run replaces the misleading “plus” action, and unavailable-run copy differs for embedded hosts.

Exports investigationWorkspaceSearch / investigationWorkspaceNavigationState for embedders; adds unit tests for workspace route helpers and UI gates.

Reviewed by Cursor Bugbot for commit cc321c4. Bugbot is set up for automated code reviews on this repo. Configure here.

@nadaverell
nadaverell requested a review from hisco as a code owner September 9, 2026 09:07
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Add durable investigation workspace navigation

✨ Enhancement 🧪 Tests 🕐 40+ Minutes

Grey Divider

AI Description

• Adds reloadable workspace routes with canonical run selection and unavailable-link handling.
• Preserves scoped drawer navigation, deep links, and browser history through React Router.
• Exposes validated focus callbacks and host-safe Expand and Restore navigation helpers.
Diagram

sequenceDiagram
  actor User
  participant Surface as Diagnose Surface
  participant Provider as Diagnose Provider
  participant Router as React Router
  participant API as Diagnose API
  participant Host as Embedded Host
  User->>Router: Open workspace URL
  Router->>Provider: Publish location
  Provider->>API: Resolve selected run
  API-->>Provider: Validated run
  Provider->>Surface: Render route state
  Provider-->>Host: Notify focused run
  User->>Surface: Expand or restore
  Surface->>Provider: Invoke navigation action
  Provider->>Router: Navigate route
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Dedicated workspace route component
  • ➕ Makes route ownership explicit and isolates workspace-specific loading logic.
  • ➕ Could simplify DiagnoseProvider by moving URL interpretation into a route boundary.
  • ➖ Risks remounting the active investigation and losing live transcript state.
  • ➖ May duplicate drawer and workspace orchestration across standalone and embedded consumers.
2. Query-only workspace mode
  • ➕ Requires fewer pathname changes and retains the existing ai-run URL model.
  • ➕ Could reduce route parsing and return-state metadata.
  • ➖ Produces less canonical full-screen links and mixes presentation with resource-page query state.
  • ➖ Makes cross-view parameter preservation and host routing contracts harder to reason about.

Recommendation: Keep the PR’s React Router-backed provider approach. It supplies canonical workspace URLs while preserving the same mounted investigation state across drawer and full-screen layouts, and it supports standalone and embedded consumers without duplicating surfaces. A dedicated route boundary should only be reconsidered if workspace-specific rendering grows independently enough to justify remount and state-transfer complexity.

Files changed (7) +411 / -96

Enhancement (6) +374 / -96
App.tsxRecognize investigations as a routable application view +5/-4

Recognize investigations as a routable application view

• Extends main-view path parsing and shortcut metadata to include '/investigations'. Clarifies that cross-view query state is read from the live URL after investigation navigation changes.

web/src/App.tsx

RadarApp.tsxExpose validated investigation focus to embedding hosts +11/-1

Expose validated investigation focus to embedding hosts

• Adds an 'onInvestigationFocus' callback to the public application props and forwards it into DiagnoseProvider. The callback lets external chrome react only after a run has been server-validated.

web/src/RadarApp.tsx

DiagnoseContext.tsxDrive investigation presentation through durable router state +328/-72

Drive investigation presentation through durable router state

• Replaces direct History API synchronization with React Router navigation for workspace paths and contextual 'ai-run' drawers. Adds preferred-run resolution, invalid-link handling, Expand/Restore return state, server-validated focus notifications, scope preservation, and a standalone BrowserRouter fallback.

web/src/components/diagnose/DiagnoseContext.tsx

DiagnoseSurface.tsxConnect Expand and Restore controls to workspace navigation +22/-13

Connect Expand and Restore controls to workspace navigation

• Adds an optional host workspace opener and routes the header control through provider navigation actions. Restore is shown only when the full-screen workspace has a valid drawer origin.

web/src/components/diagnose/DiagnoseSurface.tsx

LocalDiagnoseAction.tsxOpen the global investigation workspace +1/-1

Open the global investigation workspace

• Changes the global Diagnose button from opening the transient home panel to navigating into the durable workspace.

web/src/components/diagnose/LocalDiagnoseAction.tsx

index.tsExport investigation workspace navigation helpers +7/-5

Export investigation workspace navigation helpers

• Documents router-aware standalone behavior and exports helpers for constructing scoped workspace searches and opaque navigation state. These exports allow embedded hosts to navigate without depending on private state keys.

web/src/index.ts

Tests (1) +37 / -0
DiagnoseContext.test.tsTest investigation workspace route helpers +37/-0

Test investigation workspace route helpers

• Covers workspace path recognition, encoded run IDs, scope-preserving query construction, opaque navigation state, and malformed route rejection.

web/src/components/diagnose/DiagnoseContext.test.ts

@qodo-code-review

qodo-code-review Bot commented Sep 9, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Action required

1. Back reopens closed investigations ✗ Dismissed 🐞 Bug ≡ Correctness
Description
openWorkspace records only the drawer return path even though opening a run and then opening the
workspace adds two browser-history entries. When a user expands an app-opened drawer and closes the
workspace, close replaces only the workspace entry, so Back lands on the retained ?ai-run entry;
Restore similarly leaves a duplicate drawer entry.
Code

web/src/components/diagnose/DiagnoseContext.tsx[R831-833]

+          [WORKSPACE_RETURN_STATE]: `${current.pathname}${current.search}${current.hash}`,
+        }
+      : current.state;
Relevance

●●● Strong

History navigation regressions involving pushed entries were accepted previously, including explicit
back-navigation fixes.

PR-#618

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
openRun pushes the ?ai-run location, after which openWorkspace pushes another location but
stores no investigationReturnHistorySteps. Both exit handlers consequently take their
replace-based fallbacks instead of unwinding history: Close leaves the prior drawer URL available to
Back, and Restore replaces the workspace with a second copy of that drawer URL.

web/src/components/diagnose/DiagnoseContext.tsx[670-689]
web/src/components/diagnose/DiagnoseContext.tsx[816-840]
web/src/components/diagnose/DiagnoseContext.tsx[845-850]
web/src/components/diagnose/DiagnoseContext.tsx[858-875]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Expanding an app-opened investigation drawer does not record how many history entries must be unwound. Closing therefore leaves the drawer entry behind, while restoring creates a duplicate drawer entry.

## Issue Context
`openRun` pushes the drawer URL and `openWorkspace` pushes the workspace URL. Use the existing workspace return-history state so Close can return past both entries and Restore can return one entry to the original drawer, while preserving safe fallback behavior for direct-loaded drawer URLs.

Add navigation tests covering Open drawer → Expand → Close → Back and Open drawer → Expand → Restore → Back.

## Fix Focus Areas
- web/src/components/diagnose/DiagnoseContext.tsx[816-851]
- web/src/components/diagnose/DiagnoseContext.tsx[858-879]
- web/src/components/diagnose/DiagnoseContext.test.ts[9-36]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Embedded workspace links show no workspace ✓ Resolved 🐞 Bug ≡ Correctness
Description
RadarApp passes browserURLState={router !== "memory"}, and the provider returns before
processing location.pathname whenever that flag is false. A MemoryRouter initialized at
/investigations or /investigations/:runId therefore recognizes the page route but never opens or
maximizes the surface that is conditionally rendered by App.
Code

web/src/RadarApp.tsx[R238-240]

+                  <DiagnoseProvider
+                    browserURLState={router !== "memory"}
+                    onFocusedRun={onInvestigationFocus}
Relevance

●●● Strong

Recent PR #1585 accepted the same MemoryRouter URL-state synchronization issue.

PR-#1585

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Memory mode explicitly disables the provider's URL-state behavior, while the new route effect is
responsible for opening and maximizing the panel. App does not render the workspace surface unless
that provider state is open.

web/src/RadarApp.tsx[238-260]
web/src/components/diagnose/DiagnoseContext.tsx[696-743]
web/src/App.tsx[2464-2485]
web/src/App.tsx[123-144]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
MemoryRouter routes need to drive investigation presentation without mutating the host browser URL.

## Issue Context
`browserURLState` currently disables both browser-history writes and React Router location synchronization. Preserve the former restriction for embedded MemoryRouter consumers, but allow workspace path changes from the memory router to set the open/maximized/focused investigation state.

## Fix Focus Areas
- web/src/RadarApp.tsx[238-240]
- web/src/components/diagnose/DiagnoseContext.tsx[696-743]
- web/src/App.tsx[2464-2485]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Fleet expansion redirects users home ✗ Dismissed 🔗 Cross-repo conflict ≡ Correctness
Description
DiagnoseSurface now defaults its Expand control to openWorkspace, which navigates the standalone
fleet panel to /investigations even though Radar Hub Web provides no matching route or host
override. This occurs when a fleet user expands an investigation, reaching Hub Web’s wildcard
redirect and replacing the investigation panel with the home page.
Code

web/src/components/diagnose/DiagnoseSurface.tsx[R872-875]

+                  maximized
+                    ? d.restoreWorkspace
+                    : (onOpenWorkspace ?? d.openWorkspace)
+                }
Relevance

●● Moderate

Potential host-integration regression is plausible, but no closely matching repository precedent was
found.

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The PR makes Expand call the workspace navigator, which targets /investigations. Radar Hub Web
mounts this standalone surface inside its Hub router without an override, while that router has no
investigations route and redirects every unmatched path to /.

web/src/components/diagnose/DiagnoseSurface.tsx[868-886]
web/src/components/diagnose/DiagnoseContext.tsx[816-841]
External repo: skyhook-dev/radar-hub-web, src/diagnose/FleetDiagnoseHost.tsx [175-183]
External repo: skyhook-dev/radar-hub-web, src/diagnose/FleetDiagnoseHost.tsx [242-244]
External repo: skyhook-dev/radar-hub-web, src/App.tsx [398-429]
External repo: skyhook-dev/radar-hub-web, src/App.tsx [430-457]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Radar Hub Web's fleet-level `DiagnoseSurface` does not supply `onOpenWorkspace`, so the new default Expand action navigates its router to an unsupported `/investigations` path and the wildcard route redirects home.

## Issue Context
Coordinate the radar-app release with the prepared Radar Hub Web consumer update. Add Hub routes for `/investigations` and `/investigations/:runId` and pass the appropriate workspace navigation callback to the fleet surface; alternatively, preserve local maximize behavior for standalone surfaces unless workspace routing is explicitly enabled.

## Fix Focus Areas
- web/src/components/diagnose/DiagnoseSurface.tsx[868-886]
- web/src/components/diagnose/DiagnoseContext.tsx[816-841]
- src/diagnose/FleetDiagnoseHost.tsx[175-183]
- src/diagnose/FleetDiagnoseHost.tsx[242-244]
- src/App.tsx[398-457]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

4. A provider comment records code history ✓ Resolved 📘 Rule violation ⚙ Maintainability
Description
The comment above DiagnoseProvider says the component has historically been a standalone public
primitive instead of documenting only the compatibility constraint. Because this prose was added
with the router wrapper, it embeds change history that can become stale as the provider evolves.
Code

web/src/components/diagnose/DiagnoseContext.tsx[R1005-1007]

+// DiagnoseProvider has historically also been a standalone public primitive.
+// Preserve that API by supplying a router only when the host has not already
+// mounted one; RadarApp and Cloud continue to use their existing routers.
Relevance

●●● Strong

The finding directly matches the active rule against embedding change history in code comments.

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Compliance rule 3036538 prohibits explicit code or change history in added comments. The added
comment states that the provider has historically been a standalone primitive and describes
preserving that prior API.

Rule 3036538: Disallow references to tickets or PR history in code comments
web/src/components/diagnose/DiagnoseContext.tsx[1005-1007]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Remove the historical framing from the comment above `DiagnoseProvider` while retaining the reason for conditionally supplying a router.

## Issue Context
Code comments must not record implementation or change history. The useful invariant is that standalone consumers may lack a router while existing hosts may already provide one.

## Fix Focus Areas
- web/src/components/diagnose/DiagnoseContext.tsx[1005-1007]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


5. Saved investigations open the wrong run ✓ Resolved 🐞 Bug ≡ Correctness
Description
The base-workspace canonicalization matches preferredInvestigationRunID only against the bounded
runs list and otherwise immediately selects runs[0]. When a server-valid preferred run is older
than that list page, opening the base workspace silently replaces it with the newest listed run
instead of resolving the preferred ID as exact workspace links do.
Code

web/src/components/diagnose/DiagnoseContext.tsx[R781-783]

+    const preferredID = preferredWorkspaceRunID(location.state);
+    const selected =
+      runs.find((run) => run.id === preferredID) ?? runs[0];
Relevance

●●● Strong

Recent PR #1585 accepted preserving and directly fetching retained runs outside bounded history.

PR-#1585

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The new helper selects a preferred ID exclusively from the recent list, whereas the surrounding
implementation explicitly treats that list as bounded and directly fetches retained runs for both
refresh and exact-run navigation.

web/src/components/diagnose/DiagnoseContext.tsx[769-804]
web/src/components/diagnose/DiagnoseContext.tsx[500-559]
web/src/components/diagnose/DiagnoseContext.tsx[670-689]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
A preferred workspace run can be older than the bounded history response, yet the base route currently falls back to the newest list item without verifying that preferred run.

## Issue Context
Direct run links and existing focused-run refresh logic already fetch exact retained run IDs. Use the same resolution path for a preferred ID before falling back to the newest server-listed run; only canonicalize to the fallback after the preferred ID is unavailable or unreadable.

## Fix Focus Areas
- web/src/components/diagnose/DiagnoseContext.tsx[769-804]
- web/src/components/diagnose/DiagnoseContext.tsx[500-559]
- web/src/components/diagnose/DiagnoseContext.tsx[670-689]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 41 rules
✅ Cross-repo context — repo relationships
  Explored: repo: skyhook-dev/radar-hub-web (sha: f7365523)
Review mode: 🧠 Deep: This is a substantial routing and state-management change spanning multiple independent behaviors, with many subtle deep-link, history, validation, standalone-router, and embedding interactions that benefit from redundant review passes.

Grey Divider

Tip of the day
💡 Did you know, you can commit Qodo's fix in one click with committable suggestions (GitHub & GitLab)

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread web/src/components/diagnose/DiagnoseContext.tsx Outdated
Comment thread web/src/components/diagnose/DiagnoseContext.tsx Outdated
Comment thread web/src/RadarApp.tsx
Comment thread web/src/components/diagnose/DiagnoseContext.tsx Outdated
Comment thread web/src/components/diagnose/DiagnoseSurface.tsx

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

Comment thread web/src/components/diagnose/DiagnoseContext.tsx Outdated
Comment thread web/src/components/diagnose/DiagnoseContext.tsx
@nadaverell
nadaverell force-pushed the feat/investigation-workspace-routes branch from 496b415 to e4694fb Compare September 9, 2026 09:23

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

Comment thread web/src/components/diagnose/DiagnoseContext.tsx
Comment thread web/src/components/diagnose/DiagnoseContext.tsx Outdated
@nadaverell
nadaverell force-pushed the feat/investigation-workspace-routes branch from e4694fb to 6fd71f1 Compare September 9, 2026 09:32

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

Comment thread web/src/components/diagnose/DiagnoseContext.tsx
Comment thread web/src/components/diagnose/DiagnoseContext.tsx Outdated
@nadaverell
nadaverell force-pushed the feat/investigation-workspace-routes branch from 6fd71f1 to a988b53 Compare September 9, 2026 09:44

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

Comment thread web/src/components/diagnose/DiagnoseContext.tsx Outdated
Comment thread web/src/components/diagnose/DiagnoseContext.tsx Outdated
Comment thread web/src/components/diagnose/DiagnoseContext.tsx Outdated
@nadaverell
nadaverell force-pushed the feat/investigation-workspace-routes branch from a988b53 to a9e6575 Compare September 9, 2026 09:54

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

Comment thread web/src/components/diagnose/DiagnoseContext.tsx Outdated
@nadaverell
nadaverell force-pushed the feat/investigation-workspace-routes branch from a9e6575 to 6ea45e0 Compare September 9, 2026 10:04

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

Comment thread web/src/components/diagnose/DiagnoseSurface.tsx
@nadaverell
nadaverell force-pushed the feat/investigation-workspace-routes branch from 6ea45e0 to 59d4514 Compare September 9, 2026 10:13

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

Comment thread web/src/App.tsx Outdated
Comment thread web/src/components/diagnose/DiagnoseSurface.tsx Outdated
@nadaverell
nadaverell force-pushed the feat/investigation-workspace-routes branch from 59d4514 to 32c06b0 Compare September 9, 2026 10:24

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

Comment thread web/src/components/diagnose/DiagnoseContext.tsx
@nadaverell nadaverell changed the title Add durable investigation workspace routes Add durable investigation workspace and fresh home Sep 9, 2026

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

!!r.kind &&
!!r.name &&
(r.status === "running" || r.status === "stopping"),
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Running indicator ignores cluster runs

Medium Severity

The live-run signature now keeps only resource runs with kind and name. Cluster-scoped question runs therefore do not count as running, so the top-bar pulse undercounts and the 4s poll stops after the workspace is closed even while those investigations are still in flight.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 0628980. Configure here.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in e5efc1f. Live-run count now includes resource-free cluster questions for polling and the global indicator, while runningKeys remains resource-only for per-resource buttons.

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

Comment thread web/src/components/diagnose/DiagnoseContext.tsx
@nadaverell
nadaverell force-pushed the feat/investigation-workspace-routes branch from 07b169c to 7c10237 Compare September 9, 2026 13:56

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 5 potential issues.

There are 6 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 7c10237. Configure here.

Comment thread web/src/components/diagnose/DiagnoseContext.tsx Outdated
Comment thread web/src/components/diagnose/DiagnoseContext.tsx
Comment thread web/src/components/diagnose/DiagnoseContext.tsx Outdated
Comment thread web/src/components/diagnose/DiagnoseContext.tsx
Comment thread web/src/components/diagnose/DiagnoseContext.tsx Outdated
@nadaverell nadaverell changed the title Add durable investigation workspace and fresh home Add durable investigation workspace and history home Sep 9, 2026
@nadaverell
nadaverell force-pushed the feat/investigation-workspace-routes branch from e0f4537 to 713d8a6 Compare September 9, 2026 18:11
@nadaverell
nadaverell force-pushed the feat/investigation-workspace-routes branch from 713d8a6 to cc321c4 Compare September 9, 2026 19:34
@nadaverell
nadaverell merged commit c8b1268 into main Sep 9, 2026
8 checks passed
@nadaverell
nadaverell deleted the feat/investigation-workspace-routes branch September 9, 2026 19:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant