Skip to content

fix: resolve all 17 lint warnings across the codebase#13

Open
42tg wants to merge 153 commits intomainfrom
feat/jira-integration
Open

fix: resolve all 17 lint warnings across the codebase#13
42tg wants to merge 153 commits intomainfrom
feat/jira-integration

Conversation

@42tg
Copy link
Copy Markdown
Owner

@42tg 42tg commented Mar 18, 2026

Summary

  • Fix 2 React hook dependency bugs in Jira dialogs (CreateJiraTicketDialog, UpdateJiraProgressDialog) where threadId was missing from useCallback deps, causing stale closures
  • Remove 6 unused imports/declarations across ChatView, Sidebar, _chat.$threadId, DiffAnnotationCards, appSettings, ClaudeCodeAdapter
  • Eliminate all no-map-spread performance warnings in ProviderService, Sidebar, and session-logic by replacing object spread in .map() with Object.assign or direct property assignment
  • Fix publishContextBase memo instability in DiffPanel — unmemoized object literal caused publishContext useMemo to re-evaluate every render
  • Move nested truncateStrings to module scope (ProviderRuntimeIngestion) to fix consistent-function-scoping warning
  • Replace Array#sort() with Array#toSorted() in test file to avoid mutating original array
  • Use data-driven key instead of array index in ApprovalDiffView
  • Apply formatting improvements to wsServer, useDiffAnnotations, and diffAnnotations

Lint result: 0 warnings, 0 errors (down from 17 warnings)

Test plan

  • bun typecheck — 7/7 packages pass
  • bun lint — 0 errors, 0 warnings
  • bun fmt — clean
  • Jira server tests pass (9/9)
  • Jira React Query tests pass (14/14)
  • Orchestration Jira tests pass (8/8)
  • Verify Jira dialogs work correctly with the threadId dependency fix (manual test)
  • Verify DiffPanel publish button behavior isn't affected by memoization change

juliusmarminge and others added 30 commits March 5, 2026 18:12
- Add per-provider model options, defaults, and slug aliases
- Add provider-aware model normalization/resolution helpers
- Preserve Codex-only constants/functions for backward compatibility
- Extend tests to cover Claude aliases and provider-specific fallback behavior
- introduce `ClaudeCodeAdapter` service and live layer wiring
- map runtime/session/request failures into provider adapter error types
- add coverage for validation, session-not-found mapping, lifecycle forwarding, and event passthrough
Add provider-service routing coverage for explicit claudeCode sessions.

Co-authored-by: codex <codex@users.noreply.github.com>
Add restart semantics when requested provider changes and cover with tests.

Co-authored-by: codex <codex@users.noreply.github.com>
Add provider-aware model options and include provider in turn-start dispatch.

Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
- add `@anthropic-ai/claude-agent-sdk` dependency for `apps/server`
- replace placeholder Claude adapter with live session/query/event handling
- add comprehensive adapter tests for runtime events, approvals, resume, rollback, and model overrides
- Replace manual prompt async iterator with `Stream.fromQueue(...).toAsyncIterable`
- Use `Ref` for shared session context in tool approval callbacks
- Simplify timestamp/ID generation and close sessions via queue shutdown
- Stop synthesizing `resume` from generated thread IDs
- Persist resume session ID from query messages when available
- Validate resume/sessionId values as UUIDs before reuse
- Add tests for valid UUID resume passthrough and no synthesized resume
Co-authored-by: codex <codex@users.noreply.github.com>
- Do not pass `resumeCursor` when restarting a session after changing providers
- Treat synthetic Claude thread IDs (`claude-thread-*`) as unscoped during runtime ingestion
- Add tests covering provider-switch restart behavior and Claude turn lifecycle acceptance
Co-authored-by: codex <codex@users.noreply.github.com>
- Preserve active turn state when `session.started`/`thread.started` arrive mid-turn
- Emit `message.delta` from assistant text when stream deltas are missing, then complete the message
- Add Claude native SDK NDJSON observability logging and wire its log path in server layers
- Expand ingestion/adapter tests to cover mid-turn lifecycle and delta fallback behavior
- Default Claude sessions to bypass permissions when approval policy is `never`, while preserving explicit `permissionMode`
- Hide/send reasoning effort only for providers that support it in ChatView
- Add coverage for Claude permission-mode derivation and precedence, and update runtime event model docs
- add per-session `sessionSequence` on provider runtime events and persist activity `sequence`
- migrate `projection_thread_activities` with nullable `sequence` column + index
- sort server/web activity projections by sequence fallback to timestamp/id
- allow provider sessions/turns to start before a real threadId is emitted
- define `CursorAdapter` service contract and Cursor stream-json schema types
- add `CursorCliStreamEvent` decoding tests for system/thinking/tool/result/retry events
- add implementation plan for Cursor provider integration

Co-authored-by: codex <codex@users.noreply.github.com>
- Accept `cursor` as a first-class provider in orchestration, persistence, and session directory flows
- Update model/provider inference and normalization to handle Cursor model aliases
- Revamp chat provider/model picker with Cursor-specific trait controls and add coverage in tests
- add `scripts/cursor-acp-probe.mjs` to run ACP protocol probing scenarios
- update `package.json` scripts for probe execution
- include generated probe summaries/transcripts under `.tmp/acp-probe/`
42tg added 21 commits March 17, 2026 10:32
* feat: standalone PR review with auto-clone and worktree isolation

Add a standalone "Review PR" button in the sidebar Projects header that
accepts any GitHub PR URL, matches it to an existing project or clones
the repo automatically, then creates an isolated review worktree with
proper upstream tracking.

- Add git.cloneRepo endpoint (contracts, server, client bindings)
- Add git.setBranchUpstream endpoint for linking review branches to PRs
- Add projectsWorkingDirectory app setting with Settings UI
- Add StandaloneReviewPrDialog: full review flow (clone → fetch PR →
  create worktree → set upstream → create thread → navigate)
- Extract shared PR review utils to apps/web/src/lib/prReviewUtils.ts
- Extract gitRemoteOriginToGitHubUrl to @t3tools/shared/git
- Remove per-project "Review PR" buttons/context menu in favor of the
  unified standalone flow
- Fix removeWorktree to skip gracefully when worktree is already deleted
- Fix setBranchUpstream to fall back to git config when remote ref is
  not yet fetched locally

* feat: review comment system with inline diff display and GitHub publish

Add structured review comments for PR reviews: server-side CRUD storage,
WS endpoints, inline rendering below file diffs, and GitHub publish.

- Add ReviewComment contracts (schemas, WS methods, NativeApi bindings)
- Add SQLite persistence (migration 016, repository service + layer)
- Add 5 WS routes: reviewComment.add/update/delete/list/publish
- Add DiffFileReviewComments component with severity-colored cards
- Integrate review comments below each file in DiffPanel
- Enhance review prompt with structured comment tool instructions
- Add reviewCommentTools.ts MCP server (prepared for Claude SDK wiring)
- Publish to GitHub creates individual PR review comments via gh api

The MCP tool server is created but not yet wired into the Claude Code
adapter query options (TODO: resolve Effect ServiceMap test injection).
Until then, the agent uses prompt-based review comment instructions.

* fix: wire review comment MCP tools into Claude Code adapter

Pass the ReviewCommentRepository to the Claude Code adapter via options
so createReviewCommentMcpServer() is called with a real repository.
The adapter registers review_comment, update_review_comment, and
list_review_comments as MCP tools available to the agent during queries.

* fix: register review_comments migration in static loader

The migration file existed but wasn't imported in Migrations.ts,
so the table was never created on startup.

* fix: wire review comments query into DiffPanel

Fetch review comments for the active thread and pass the
reviewCommentsByFile map to all DiffFileListView instances so
comments actually render below each file's diff.

* fix: make review comments visible in diff panel

- Add 3s refetchInterval to review comments query so comments appear
  automatically after the agent creates them (no window refocus needed)
- Add standalone review comments summary section at top of diff view
  showing all comments regardless of file path matching
- Normalize file paths for comment-to-diff matching (strip ./ and a/b/)
- Clean up unused ReviewCommentRepository import

* fix: remove duplicate review comments summary, keep only per-file inline

* feat: render review comments inline in diff via @pierre/diffs annotations

Use the library's native `lineAnnotations` + `renderAnnotation` props
to render review comment cards directly at the annotated line in the
diff, instead of as a separate section below the file. Comments now
appear inline like GitHub PR conversations.

* feat: show annotated code context for all review comments in diff

- Add projects.readFile WS endpoint with git-root fallback for path
  resolution (handles monorepo subdirectory CWDs)
- For files not in the diff: fetch file content, generate synthetic
  context-only hunks (±10 lines per comment cluster), render with
  @pierre/diffs FileDiff + inline annotations; collapsible headers
- For diff files with comments on non-diff lines: append synthetic
  context hunks below the actual diff showing the referenced code
- Add comment count badge to all diff file headers
- Multi-line comments (L103-104) now render after the last line
- Show review comments in all diff views (turns, working tree, branch)
  even when there are no code changes

* refactor: generalize review comment annotations and fix code quality issues

- Always register review_comment/update_review_comment/list_review_comments
  MCP tools for every Claude Code session (not just standalone PR reviews),
  so inline diff annotations work in any agent session
- Fix reviewCommentTools.ts: replace dynamic require("effect") anti-pattern
  with static import and direct Effect.runPromise(); type threadId as ThreadId
- Fix wsServer.ts projectsReadFile: replace blocking execSync with
  Effect-based git.getRepoRoot() to avoid stalling the event loop
- Fix wsServer.ts reviewCommentPublish: remove dead Effect.ignore'd review
  creation block; resolve actual HEAD SHA via git.resolveRef() instead of
  passing literal "HEAD" to GitHub API (would have caused 422 errors)
- Add GitCore.getRepoRoot() and GitCore.resolveRef() methods
- Extract duplicated range-merge/hunk-build algorithm from DiffPanel into
  buildSyntheticContextPatch() in prReviewUtils.ts
- Smart polling: reviewCommentListQueryOptions now accepts refetchInterval
  param; DiffPanel polls at 2s only while the agent is actively running,
  stops when idle (previously polled unconditionally every 3s)

* refactor: extract unified diff annotation pipeline from DiffPanel

Replace the review-comment-specific annotation rendering with a generic,
extensible pipeline so any annotation kind (review comments, lint warnings,
AI suggestions, …) can overlay diffs through the same plumbing.

- Add `diffAnnotations.ts` — DiffAnnotation discriminated union, path
  normalization, grouping, and @pierre/diffs line-annotation builders
- Add `DiffAnnotationCards.tsx` — kind-dispatched render callback
  (replaces `DiffFileReviewComments.tsx`)
- Add `DiffFileHeader.tsx` — shared collapsible file header with
  annotation badge and diff stats
- Add `AnnotatedFileDiff.tsx` — unified component replacing both
  `AnnotatedFileContextView` and `UnmatchedCommentsContextView` via a
  shared `useSyntheticFileDiff` hook
- Simplify `DiffFileListView` props: `annotationsByFile` replaces
  `reviewCommentsByFile` + `activeCwd` + `projectCwd`
- DiffPanel converts review comments → DiffAnnotation[] at the boundary

DiffPanel shrinks from 1252 → 1019 lines; duplicated file-content
fetching and synthetic-patch logic is eliminated.

* refactor: decouple annotation pipeline from DiffPanel into reusable primitives

Extract the unified diff annotation pipeline into standalone, composable
modules so any diff view can render annotations without touching DiffPanel.

- Add DiffFileList.tsx: standalone annotation-aware diff file list that
  any view (checkpoint turns, working tree, branch diff, approval) can
  import directly. Annotations are first-class, not optional bolt-ons.
- Add useDiffAnnotations hook: aggregates all annotation sources (review
  comments today, lint/AI suggestions tomorrow) behind a single
  source-agnostic DiffAnnotation[] return. DiffPanel no longer imports
  review-comment-specific query options or conversion helpers.
- Move buildSyntheticContextPatch from prReviewUtils.ts (PR-review-
  specific) to diffAnnotations.ts (generic diff infrastructure) since
  it's needed by any annotation source that targets non-diff lines.
- Simplify DiffPanel: remove review-comment imports, use the hook,
  consolidate shared props into a single object spread, extract
  sortFilesByPath to eliminate 3 duplicated sorting expressions.

DiffPanel shrinks from 1019 → 817 lines. Adding a new annotation source
now requires zero changes to DiffPanel or DiffFileList — just add a
variant to DiffAnnotation, a card in DiffAnnotationCards, and a query
in useDiffAnnotations.

* fix: address review findings in PR review system

- Move zod from devDependencies to dependencies (used at runtime in
  MCP tool schema definitions)
- Track actual publish successes/failures instead of silently ignoring
  GitHub API errors; return { published, failed } counts
- Replace unsafe `as typeof ReviewComment.Type` blanket cast with
  proper type annotation and narrow cast only on the UUID id field
- Add path traversal protection to projectsReadFile by reusing
  resolveWorkspaceWritePath validation for each candidate root
- Wire review comment cleanup into thread deletion via the projection
  pipeline's side-effect machinery (mirrors attachment cleanup pattern)
- Remove dead buildSyntheticContextPatch re-export from prReviewUtils

* feat: per-comment "Publish to GitHub" button in diff annotations

Each review comment card now has a "Publish" button next to the
severity badge. Clicking it publishes that single comment to the
GitHub PR via gh api. The button shows a spinner while publishing
and switches to "Published" on success.

- Add optional commentId filter to reviewComment.publish endpoint
- Add onPublish callback to ReviewCommentAnnotation type
- Wire publish context (cwd + prUrl from git status) through
  useDiffAnnotations → annotation metadata → card component
- Prompt agent to check for review skills before starting

* fix: style publish button with border, hover-only visibility

- Bordered button with "Publish as GitHub Comment" label
- Hidden by default on desktop, visible on hover over the comment card
- Always visible on mobile (no hover)
- Remove accidentally committed apps/server/~/dev directory

* fix: get PR head SHA from GitHub API instead of local worktree

The local worktree git link may be broken if the clone directory was
removed. Fetch the head SHA from the PR via gh api as primary source,
with local git rev-parse as fallback.

* fix: expand ~ in clone target directory to home path

When the user configures ~/dev as the working directory, the tilde
was passed as a literal string to git clone (shells expand it, but
programmatic callers don't). Now expands ~/... to $HOME/... before
creating directories or cloning.

* fix: deduplicate worktree paths when directory already exists

When createWorktree computes the default path and it already exists
(e.g. from preparePullRequestThread or a prior review), append a
numeric suffix (-2, -3, ...) until a free path is found.

* fix: remove duplicate severity prefix from published GitHub comments

* feat: persist published state for review comments

Track publishedAt timestamp in the database so the "Published" state
survives page reloads and prevents double-publishing.

- Add published_at column to review_comments table (merged into 016)
- Update repository layer to read/write publishedAt
- Publish endpoint marks comments as published after successful gh api
- UI reads publishedAt from comment data instead of local state
- MCP list_review_comments shows (published) marker for agent visibility

* feat: GitHub icon, published URL link, and persisted publish state

- Published comments link directly to the GitHub comment (new tab)
- Store publishedUrl from gh api response in the database
- GitHub icon on both publish and published states
- Published button without URL shows static "Published" badge
- Cache invalidation after publish so UI updates immediately
- Merged published_url into migration 016

* feat: restore per-project Review PR button and fix fork PR listing

Add a per-project Review PR button (GitPullRequestIcon) to the sidebar
project action buttons, opening a simplified dialog that only shows the
selectable PR list (no free-text URL input). Also fix gh pr list
resolving to the upstream repo for forks by threading an optional
--repo owner/repo flag through the entire stack (contracts, service,
server, query, UI).
Add a notification bell in the sidebar header that shows PRs where the
user has been requested as a reviewer. Review requests are fetched via
gh search prs --review-requested=@me and persisted server-side in
SQLite so review state survives restarts.

- Add ReviewRequest contracts (schema, WS methods, NativeApi bindings)
- Add SQLite persistence (migration 017, repository service + layer)
- Add 3 WS routes: reviewRequest.list (fetch+sync), dismiss, linkThread
- Add GitHubCli.listReviewRequests() for gh search prs
- Add NotificationBell component with popover, filter tabs (Reviews/Bot/All),
  bot detection (dependabot, renovate, github-actions, etc.)
- Badge only counts pending non-bot requests
- Click pending item: opens StandaloneReviewPrDialog with auto-prefilled URL
- Click in-review item: navigates to the linked thread
- "Done" button on in-review items, hover X dismiss on all items
- Auto-dismiss stale requests when PRs are merged/closed
- StandaloneReviewPrDialog: add initialPrUrl auto-trigger and
  onThreadCreated callback for thread linking
Increase the upstream status fetch timeout from 5s to 15s and cache
failures for 60s instead of retrying immediately. Previously a slow
or unreachable remote would timeout every 15s poll cycle, spamming
the server logs.
Add a terminal picker to Settings so users can choose their preferred
terminal emulator (Terminal.app, iTerm2, Warp, Ghostty, Kitty, Alacritty)
for the "Resume in Terminal" / "Open in Terminal" button. The server
detects installed terminals and exposes them via availableTerminals in
ServerConfig; the web UI stores the preference in app settings and passes
it through to the launch handler.
Use origin/<base> for branch diffs so the diff reflects the actual
remote state, not a potentially stale local branch. Falls back to
the local ref if the remote tracking ref doesn't exist.
)

* feat: improve review popover UX with inline expand, sorting, and visual hierarchy

- Inline morph: clicking a row expands it in-place (no duplicate detail section)
  using CSS grid height animation for smooth reveal of action buttons
- Sort by status (in_review first, then pending) and PR number descending
  for stable, triage-optimized ordering
- Add sticky group headers ("In progress" / "Awaiting review") with backdrop blur
- De-emphasize repo name, promote PR title as primary visual element
- Fix nested button a11y: outer element is now div[role=button] with keyboard handlers
- Stabilize useMemo dependency with module-level empty array constant

* feat: improve notification panel mobile UX

- Larger panel: full-width on mobile, w-96 on desktop
- More height: 70dvh on mobile, 500px on desktop
- Block sidebar interaction behind open panel via z-indexed portal backdrop
- Raise popover positioner above Sheet (z-52) on mobile so it clears the sidebar drawer
- Close panel and mobile sidebar when navigating to a review
- Add positionerClassName prop to PopoverPopup for z-index overrides

* fix: suppress composer auto-focus on touch devices

Prevents the virtual keyboard from opening automatically when
navigating to a thread on mobile. focusComposer now bails early
on pointer:coarse devices, covering all call sites (navigation,
mode switches, model selection, drag-drop, terminal close).

* feat: persist and expose PR body and labels on review requests

Fetches body and labels from the GitHub CLI alongside existing PR
fields, stores them in two new columns (pr_body, pr_labels) added
via migration 018, and surfaces them through the ReviewRequest
contract so the notification panel can render PR description and
label chips in the expanded item view.
* feat: add review approve/request-changes actions in chat header

Add ReviewActionsControl component with a collapsible dropdown menu
(matching Git/Jira action patterns) that appears when the current
thread has an active PR review. Supports submitting APPROVE or
REQUEST_CHANGES via the GitHub API, then auto-dismisses the review
request locally.

* perf: reduce GitHub API rate-limit consumption

- Cache findLatestPr results per (cwd, branch) with 60s TTL, avoiding
  1-3 gh API calls every git status poll
- Cache repository clone URLs for 5 minutes (essentially static data
  fetched up to 4x per PR worktree setup)
- Cache PR head SHA for 2 minutes during review comment publishing
- Increase git status polling from 15s to 30s (stale 5s to 15s)
- Increase git branches polling from 60s to 120s (stale 15s to 30s)
- Increase review request polling from 60s to 120s (stale 30s to 60s)
- Invalidate PR cache on PR creation to ensure fresh data after mutations

* perf: further reduce GitHub API rate-limit consumption

- Extract createTtlCache to @t3tools/shared/cache (dedup GitManager + wsServer)
- Cache getDefaultBranch results for 15 minutes (essentially static)
- Server-side 60s cache for reviewRequestList (collapses multi-tab polls)
- Batch review comments into single POST /reviews call (N→1 API calls)
- Add refetchIntervalInBackground: false to all polled queries (stops
  polling when tab is in background)
- Add refetchOnWindowFocus to reviewRequestListQueryOptions
- Add stdin passthrough to GitHubCli.execute for batch API payloads
- Swipe-to-close: crisp 1px dark edge with tight depth shadow instead of
  blurry theme-color border; sidebar content live-translates under finger
- Swipe-to-open: edge indicator now uses sidebar background color, follows
  finger width directly, fades to fully opaque quickly
- Pull-to-reveal: bell icon indicator with smooth fade/scale feedback;
  PullToReveal component wired into ThreadSidebar
- NotificationBell: controlled open/onOpenChange props so pull gesture can
  drive it; mobile backdrop at z-51 blocks sidebar while panel is open;
  popover z-52 ensures it renders above the backdrop
Remove key={threadId} from ChatView so the DOM stays mounted across
thread switches (no unmount/remount blank frame). Add explicit resets
for all remaining state that isn't keyed by threadId: responding request
IDs, pending user input state, attachment preview handoffs, in-flight
send guard, and composer select lock.

On thread change, scroll the messages container to bottom synchronously
in useLayoutEffect (before paint) to avoid showing the previous thread's
scroll offset for a frame. Follow with a 120ms opacity fade-in so the
content change feels smooth rather than an abrupt swap.
- Add approved/changes_requested statuses to ReviewRequestStatus
- Show review outcome in chat header (approved, changes requested)
- Add "Done" tab in notification panel with proper outcome labels
- Fix "Go to Review" link for completed reviews with existing threads
- Unlink deleted threads from review requests on each poll
- Fix race condition: await linkThread before navigating to review thread
- Only auto-dismiss pending reviews (preserve completed review history)
- Add listReviewedPrs GitHub CLI method for future use
- Add "Restart" button next to "Done" in notification panel for in_review items
- Extract buildReviewPrompt and normalizePrReference to packages/shared/prReview
- Add implementation plan for future server-driven review flow
…eads

The query used NOT IN (alive threads), treating threads that don't exist
yet in projection_threads the same as deleted threads. This caused a race
where linkThread sets the threadId, but the next poll wipes it because the
client-side draft thread hasn't materialized on the server yet.

Changed to IN (explicitly deleted threads) so only threads that were
created and then deleted get unlinked. Also reset status back to pending
when unlinking so the UI stays consistent.
The server swallowed all gh api errors during comment publishing and
returned { published: 0 } as a success response. The client never
checked the count, so the UI always showed "Comment published to GitHub"
even when nothing was posted.

Now the server captures the actual gh error message and includes it in
the response. The client checks published count and throws with the real
error, which the existing error toast handler displays.
- ProviderRuntimeIngestion: use Effect.succeed(null) instead of
  Effect.succeed(undefined) to satisfy the effectSucceedWithVoid rule
  while preserving the truthiness check downstream
- ClaudeCodeAdapter: wrap JSON.parse in Effect.sync callback to move
  try/catch out of the generator scope (tryCatchInEffectGen rule)
- wsServer: use runProcess with allowNonZeroExit for batch comment
  publish so the GitHub API response body (stdout) is captured on 422
  errors — previously only stderr was shown, losing the actual error
  detail. Also add server-side logging for publish attempts.
Check which files are in the PR diff before attempting to publish.
If a comment targets a file outside the diff, return immediately with
a clear error message instead of hitting GitHub's 422 rejection.
Also adds file context hint to any remaining 422 errors.
The GitHub PR review API only accepts comments on files that are part of
the diff. Previously, the publish button appeared on all comments,
leading to confusing 422 errors for files not in the PR.

Now DiffPanel passes the set of branch diff file paths through to
useDiffAnnotations, which only attaches the onPublish callback (and
thus the button) to comments whose file is in the diff. Also keeps the
server-side pre-flight check as a safety net.
- Review prompt: remove /find-skills reference, condense tool docs
  to just mention review_comment tool. Keep skill check as Important.
- Timeline: normalize MCP tool labels from "Mcp__server__tool_name"
  to "Tool name" for readability (e.g. "Review comment" instead of
  "Mcp__review-comments__review_comment").
- Fix missing React hook dependencies in Jira dialogs (threadId in
  useCallback for CreateJiraTicketDialog and UpdateJiraProgressDialog)
- Remove unused imports (retainSearchParams, DiffRouteSearch,
  resolvePendingUserInputAnswer, ExternalLinkIcon, ensureNativeApi)
- Remove unused function (normalizeAppSettings)
- Remove stale eslint-disable directive (ClaudeCodeAdapter)
- Replace no-useless-spread in ChatView claudeOptions
- Move truncateStrings to module scope (consistent-function-scoping)
- Replace no-map-spread patterns with Object.assign / direct assignment
  in ProviderService, Sidebar, and session-logic
- Memoize publishContextBase in DiffPanel to fix re-render on every render
- Replace Array#sort() with Array#toSorted() in test
- Use data-driven key instead of array index in ApprovalDiffView
- Apply formatting improvements to wsServer, useDiffAnnotations,
  and diffAnnotations for better line wrapping
@github-actions github-actions bot added size:L vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Mar 18, 2026
@42tg 42tg force-pushed the main branch 7 times, most recently from 54574d8 to 18c5f27 Compare April 7, 2026 09:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants