Skip to content

feat(ui): rename Issues to Stacks across the frontend#2262

Merged
ejsmith merged 15 commits into
mainfrom
rename-issues-to-stacks
May 27, 2026
Merged

feat(ui): rename Issues to Stacks across the frontend#2262
ejsmith merged 15 commits into
mainfrom
rename-issues-to-stacks

Conversation

@ejsmith
Copy link
Copy Markdown
Member

@ejsmith ejsmith commented May 27, 2026

What changed

Renames "Issues" to "Stacks" throughout the frontend UI and backend saved view type, aligning with the backend API terminology (/api/v2/stacks) and the legacy Angular app.

Route changes

  • /(app)/issues/(app)/stacks
  • /(app)/issues/[stackId=objectid]/(app)/stacks/[stackId=objectid]
  • /(app)/issues/[slug=savedview]/(app)/stacks/[slug=savedview]
  • /(app)/project/[projectId]/issues/(app)/project/[projectId]/stacks
  • /(app)/project/[projectId]/issues/[stackId]/(app)/project/[projectId]/stacks/[stackId]

Component renames

  • issue-detail-sheet.sveltestack-detail-sheet.svelte
  • issue-details.sveltestack-details.svelte

Saved view type: issuesstacks

  • ViewType validation regex updated: ^(events|stacks|stream)$
  • ValidViewTypes array and ValidColumnIds dictionary keys updated
  • Predefined saved views JSON: keys and viewType values updated
  • Frontend VIEW constant and viewToHref mapping updated

UI label changes

  • Sidebar nav: "Issues" → "Stacks" with layers icon (was bug)
  • Page titles, sheet titles: "Issue Details" → "Stack Details"
  • Stats cards, chart legends, command palette headings
  • Project settings: "Issue Management" → "Stack Management"
  • Keyboard shortcut dialog: "Go to Issues" → "Go to Stacks"

Why

"Issues" doesn't work for all event types (404s, feature usage, etc.). The backend API uses /api/v2/stacks and the legacy Angular app used "Stacks" — this aligns the new frontend and saved view data model.

Breaking changes

  • URL routes changed from /issues to /stacks
  • Saved view view_type value changed from issues to stacks — existing saved views with view_type: 'issues' will need to be re-seeded (index reset planned)

ejsmith added 2 commits May 27, 2026 14:16
- Rename route directories: /(app)/issues → /(app)/stacks
- Rename components: issue-detail-sheet → stack-detail-sheet, issue-details → stack-details
- Update sidebar nav label and icon (bug → layers)
- Update all navigation links, keyboard shortcuts, page titles
- Update chart and stats dashboard labels
- Update command palette search headings and result labels
- Update project settings: Issue Management → Stack Management
- Keep view_type 'issues' as DB-stored value for backward compatibility
@ejsmith ejsmith force-pushed the rename-issues-to-stacks branch from e5228e5 to 42c90e4 Compare May 27, 2026 19:23
@ejsmith ejsmith changed the base branch from immediate-filter-apply to main May 27, 2026 19:24
- Update ViewType validation regex and ValidViewTypes array
- Update ValidColumnIds to use 'stacks' key
- Update predefined-saved-views.json keys and viewType values
- Update frontend VIEW constant and viewToHref mapping
- Update all test data and assertions
@ejsmith ejsmith force-pushed the rename-issues-to-stacks branch from 42c90e4 to 34014a2 Compare May 27, 2026 19:26
ejsmith added 3 commits May 27, 2026 14:29
- Same day: 'May 24, 10:01 AM – 3:02 PM' (date shown once)
- Range > 1 day: omit seconds from both sides
- Different days within a day: full labels for each
The data seed now detects stale system org views (e.g., viewType
changed from 'issues' to 'stacks') and re-seeds them. Also bumps
PredefinedSavedViewsVersion to 4 so user orgs re-upsert.
@ejsmith ejsmith force-pushed the rename-issues-to-stacks branch from ca971b0 to e8dc1b8 Compare May 27, 2026 19:55
Comment thread src/Exceptionless.Core/Seed/PredefinedSavedViewsDataSeed.cs Fixed
ejsmith added 2 commits May 27, 2026 14:59
The string and number faceted filters now apply automatically after
the user stops typing for 500ms, without needing to press Enter or
close the popover. Enter still applies immediately, Escape cancels.
@ejsmith ejsmith force-pushed the rename-issues-to-stacks branch from eea0cf4 to b68a7b9 Compare May 27, 2026 20:08
ejsmith added 5 commits May 27, 2026 15:20
The keyword filter was a separate component that was missed when
adding debounce to string and number filters.
Prevents the filter from being removed when the user backspaces to
clear the input. Clearing requires an explicit action (Enter or the
clear button).
- Add isInternalFilterUpdate flag to skip URL watch when the change
  originates from user interaction (typing/clearing filters). This
  prevents the URL round-trip from re-deriving filters and destroying
  dynamically-added filters (e.g. keyword with empty value).
- Normalize empty strings to undefined in keyword and string filter
  debounce callbacks. For StringFilter this prevents producing invalid
  filter expressions like 'message:' (empty value). For KeywordFilter
  this ensures consistent undefined state.
- Remove stale empty-value guard from number filter debounce that
  prevented auto-apply when value is cleared.
- Only set the skip flag when the URL will actually change to avoid
  stale flags when the computed filter matches the current URL.
- Rename Issues icon import to Stacks across page components
- Rename totalIssues/newIssues to totalStacks/newStacks
- Rename issueSearchQuery/issueMatches to stackSearchQuery/stackMatches in navigation command
- Update validation messages from 'issue id' to 'stack id'
- Update IssueDetails/IssueDetailSheet references to Stack equivalents
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR renames the “Issues” dashboard concept to “Stacks” across the Svelte frontend and the saved-view model layer, aligning UI/routes with the backend /api/v2/stacks terminology and updating predefined saved views accordingly.

Changes:

  • Renamed frontend routes, navigation, labels, and keyboard shortcuts from /issues to /stacks.
  • Updated saved view ViewType validation and predefined saved view definitions from issues to stacks, including related backend/frontend tests.
  • Added/adjusted some shared UI behavior (debounced faceted-filter inputs, improved date-range labels, and filter/URL sync guard logic in dashboards).

Reviewed changes

Copilot reviewed 45 out of 45 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
tests/Exceptionless.Tests/Serializer/Models/SavedViewSerializerTests.cs Updates saved view serialization test to expect view_type: stacks.
tests/Exceptionless.Tests/Mapping/SavedViewMapperTests.cs Updates mapper tests to use ViewType = stacks.
tests/Exceptionless.Tests/Controllers/SavedViewControllerTests.cs Updates controller tests for predefined views + valid view types to use stacks.
src/Exceptionless.Web/Models/SavedView/NewSavedView.cs Changes allowed view types/column ids from issues to stacks.
src/Exceptionless.Web/Controllers/SavedViewController.cs Bumps predefined views version and updates docs string to mention stacks.
src/Exceptionless.Web/ClientApp/src/routes/(auth)/login/+page.svelte Changes default post-login redirect to /stacks.
src/Exceptionless.Web/ClientApp/src/routes/(app)/stacks/+page.svelte Updates stacks dashboard route/hrefs + internal URL/filter synchronization logic.
src/Exceptionless.Web/ClientApp/src/routes/(app)/stacks/[stackId=objectid]/+page.svelte Renames stack detail page UI/imports from Issue* to Stack*.
src/Exceptionless.Web/ClientApp/src/routes/(app)/stacks/[slug=savedview]/+page.svelte Adds saved-view slug route shim for stacks.
src/Exceptionless.Web/ClientApp/src/routes/(app)/routes.svelte.ts Updates main nav item from Issues→Stacks (icon, href, shortcut).
src/Exceptionless.Web/ClientApp/src/routes/(app)/project/[projectId]/stacks/+page.svelte Renames project settings page text/links to stacks management.
src/Exceptionless.Web/ClientApp/src/routes/(app)/project/[projectId]/stacks/[stackId]/+page.svelte Renames headings/error strings to Stack Details and updates back-link.
src/Exceptionless.Web/ClientApp/src/routes/(app)/project/[projectId]/routes.svelte.ts Updates project settings nav to Stack Management and /stacks.
src/Exceptionless.Web/ClientApp/src/routes/(app)/project/[projectId]/manage/+page.svelte Renames “Go To Issues” button to “Go To Stacks” + route/icon.
src/Exceptionless.Web/ClientApp/src/routes/(app)/payment/[id]/+page@.svelte Updates fallback redirects to /stacks.
src/Exceptionless.Web/ClientApp/src/routes/(app)/organization/[organizationId]/manage/+page.svelte Renames “Go To Issues” to “Go To Stacks” + route/icon.
src/Exceptionless.Web/ClientApp/src/routes/(app)/issues/[slug=savedview]/+page.svelte Removes the old issues saved-view slug shim route.
src/Exceptionless.Web/ClientApp/src/routes/(app)/events/+page.svelte Updates dashboard stats naming to stacks + adds internal URL/filter sync guard.
src/Exceptionless.Web/ClientApp/src/routes/(app)/+page.svelte Changes app root redirect to /stacks.
src/Exceptionless.Web/ClientApp/src/routes/(app)/+layout.svelte Updates shortcut handler + view-to-href mapping from issues→stacks.
src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/navigation-command.svelte Renames command-palette search group from Issues→Stacks + hrefs/query keys.
src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/sidebar-organization-switcher.svelte Updates impersonation navigation target to /stacks.
src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/navbar.svelte Updates logo/home link to /stacks.
src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/keyboard-shortcuts-dialog.svelte Renames shortcut label to “Go to Stacks”.
src/Exceptionless.Web/ClientApp/src/lib/features/stacks/components/table/options.svelte.ts Updates persisted column visibility key from issues→stacks.
src/Exceptionless.Web/ClientApp/src/lib/features/stacks/components/stack-details.svelte Renames “issue has no events” copy to “stack has no events”.
src/Exceptionless.Web/ClientApp/src/lib/features/stacks/components/stack-detail-sheet.svelte Renames sheet title/aria text + href + component import to Stack*.
src/Exceptionless.Web/ClientApp/src/lib/features/shared/url.test.ts Updates redirect sanitization tests to reference /app/stacks.
src/Exceptionless.Web/ClientApp/src/lib/features/shared/keyboard-shortcuts.ts Renames issues shortcut entry to stacks.
src/Exceptionless.Web/ClientApp/src/lib/features/shared/dates.ts Adjusts date label formatting rules and adds date-range formatting helper.
src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/formatters/date-math.svelte Uses new formatDateRangeLabel for time-range expressions.
src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/faceted-filter/faceted-filter-string.svelte Adds debounced apply behavior for string filter inputs.
src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/faceted-filter/faceted-filter-number.svelte Adds debounced apply behavior for numeric filter inputs.
src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/faceted-filter/faceted-filter-keyword.svelte Adds debounced apply behavior for keyword filter inputs.
src/Exceptionless.Web/ClientApp/src/lib/features/saved-views/use-saved-views.test.ts Updates saved views cache tests from issues to stacks.
src/Exceptionless.Web/ClientApp/src/lib/features/saved-views/slugs.ts Updates saved-view slug routing base from /issues to /stacks.
src/Exceptionless.Web/ClientApp/src/lib/features/saved-views/components/save-view-dialog.svelte Updates reserved-slug error message to mention stacks.
src/Exceptionless.Web/ClientApp/src/lib/features/saved-views/components/rename-view-dialog.svelte Updates reserved-slug error message to mention stacks.
src/Exceptionless.Web/ClientApp/src/lib/features/projects/components/table/project-actions-cell.svelte Updates project actions menu navigation target to /stacks.
src/Exceptionless.Web/ClientApp/src/lib/features/organizations/components/notifications/impersonation-notification.svelte Updates “stop impersonating” navigation to /stacks.
src/Exceptionless.Web/ClientApp/src/lib/features/events/components/events-stats-dashboard.svelte Renames metrics/props from issues→stacks in UI + tooltip copy.
src/Exceptionless.Web/ClientApp/src/lib/features/events/components/events-dashboard-chart.svelte Renames chart label from Issues→Stacks for the stacks series.
src/Exceptionless.Core/Seed/PredefinedSavedViewsDataSeed.cs Updates predefined saved view seeding logic and supports viewType rename.
src/Exceptionless.Core/Seed/predefined-saved-views.json Renames predefined saved view keys/viewType values from issues→stacks.
src/Exceptionless.Core/Models/SavedView.cs Updates ViewType regex/docs to accept stacks instead of issues.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/Exceptionless.Core/Seed/PredefinedSavedViewsDataSeed.cs
Comment thread src/Exceptionless.Web/ClientApp/src/lib/features/shared/dates.ts
Comment thread tests/Exceptionless.Tests/Controllers/SavedViewControllerTests.cs Outdated
ejsmith added 2 commits May 27, 2026 16:20
- Add legacy key fallback in PredefinedSavedViewsDataSeed for issues:* -> stacks:* migration
- Update PredefinedKey in ApplyDefinition so existing views get the new key
- Rename Bug icon import to Stacks in navigation-command
- Fix project-actions-cell: rename Issues icon/label to Stacks
- Add onDestroy cleanup for debounce timers in faceted-filter components
- Move startLabel/endLabel computation after rangeExceedsDay check in dates.ts
- Rename issuesFilter -> stacksFilter in SavedViewControllerTests
@github-actions
Copy link
Copy Markdown

Code Coverage

Package Line Rate Branch Rate Complexity Health
Exceptionless.Insulation 25% 23% 203
Exceptionless.Web 73% 62% 3920
Exceptionless.AppHost 18% 9% 82
Exceptionless.Core 69% 63% 7811
Summary 68% (13512 / 19842) 61% (7104 / 11560) 12016

@ejsmith ejsmith merged commit 72da522 into main May 27, 2026
9 checks passed
@ejsmith ejsmith deleted the rename-issues-to-stacks branch May 27, 2026 21:39
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.

2 participants