Skip to content

feat(ui): task detail wired into both apps via getTask adapters (U2)#385

Merged
OBenner merged 4 commits into
developfrom
claude/ui-detail-adapters-u2b
Jul 5, 2026
Merged

feat(ui): task detail wired into both apps via getTask adapters (U2)#385
OBenner merged 4 commits into
developfrom
claude/ui-detail-adapters-u2b

Conversation

@OBenner

@OBenner OBenner commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Completes the board → detail → back flow on the shared design system in both targets, on top of the merged U1 adapters (#383) and the U2 TaskDetail screen (#384).

Web (apps/web-frontend)

  • Adapter: getTask maps the backend TaskDetail onto UiTaskDetail — per-status progress breakdown, spec body; the decorated status goes through the same suffix-stripping mapStatus (per the recorded learning).
  • /tasks-next/:id (TaskDetailNext) with i18n-injected status labels; the /kanban-next pilot now navigates there — the whole flow stays on the new UI. +3 vitest cases.

Electron (apps/frontend)

  • Adapter: mapTaskToUiTaskDetail (subtask breakdown — SubtaskStatus maps 1:1 onto the shared counts) + getTask resolving from the live store. specContent stays undefined until an IPC spec fetch is wired (noted follow-up).
  • KanbanPilotView: selecting a card opens the shared TaskDetail inline (board → detail → back) instead of hopping to the legacy modal; status labels reuse the pilot column translations. +3 vitest cases.

Recovered stranded commits

Early squash-merges of #383/#384 stranded three review-round commits, cherry-picked here: the S8786 regex removal, the css S1874 overflow-wrap fix, and the CI path-filter fix adding libs/** so libs-only PRs actually run tests/CodeQL (exactly what #384 exposed: it got only 4 checks).

Verification

Electron: vitest 11/11, tsc exit 0. Web: vitest 10/10, tsc adds no new errors over the 5 pre-existing baseline test-file errors (Terminal.test.tsx ×4, websocket.test.ts ×1; CI doesn't typecheck web-frontend).

🤖 Generated with Claude Code

OBenner and others added 4 commits July 5, 2026 14:53
The \s*(...)$ pattern backtracks super-linearly; replace with endsWith + slice. Behavior unchanged — the suffix/review vitest cases still pass (7/7).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…r css:S1874)

word-break: break-word is deprecated; overflow-wrap: anywhere is the modern equivalent. Verified in the browser: computed style overflow-wrap=anywhere, spec panel renders unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This libs-only PR exposed the gap: both workflows filter on apps/** (+tests/package files), so changes to the shared libs/ui package skipped test-frontend (which typechecks libs through the apps) and CodeQL entirely — only Sonar ran. Add libs/** to the pull_request and push path filters of ci.yml and quality-security.yml.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Completes the board->detail->back flow on the shared design system in BOTH targets, on top of the merged U1 adapters and U2 TaskDetail screen.

Web (apps/web-frontend):
- adapter: getTask maps the backend TaskDetail onto UiTaskDetail (per-status progress breakdown, spec body; the decorated status goes through the same suffix-stripping mapStatus).
- pages/TaskDetailNext.tsx at /tasks-next/:id with i18n-injected status labels; the /kanban-next pilot now navigates there, so the whole flow stays on the new UI. +3 vitest cases (detail mapping incl. decorated status, optional-field omission, client wiring).

Electron (apps/frontend):
- adapter: mapTaskToUiTaskDetail (subtask breakdown — SubtaskStatus maps 1:1) + getTask resolving from the live store; specContent stays undefined until an IPC spec fetch is wired (follow-up).
- KanbanPilotView: selecting a card opens the shared TaskDetail INLINE (board -> detail -> back), replacing the legacy modal hop; status labels reuse the pilot column translations; App no longer passes onTaskSelect. +3 vitest cases.

Also recovers three commits stranded by early squash-merges of #383/#384: the S8786 regex removal, the css S1874 overflow-wrap fix, and the ci path-filter fix adding libs/** so libs-only PRs actually run tests/CodeQL.

Verified: electron vitest 11/11 + tsc exit 0; web vitest 10/10 + tsc adds no new errors over the 5 pre-existing baseline test-file errors.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@cursor

cursor Bot commented Jul 5, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@coderabbitai

coderabbitai Bot commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@OBenner, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 18 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 01b4ffec-fb2f-44bf-961f-110994dfb8f7

📥 Commits

Reviewing files that changed from the base of the PR and between ed72993 and d1ab855.

📒 Files selected for processing (12)
  • .github/workflows/ci.yml
  • .github/workflows/quality-security.yml
  • apps/frontend/src/renderer/App.tsx
  • apps/frontend/src/renderer/__tests__/autoCodeClient.test.ts
  • apps/frontend/src/renderer/components/KanbanPilotView.tsx
  • apps/frontend/src/renderer/lib/autoCodeClient.ts
  • apps/web-frontend/src/App.tsx
  • apps/web-frontend/src/api/autoCodeClient.test.ts
  • apps/web-frontend/src/api/autoCodeClient.ts
  • apps/web-frontend/src/pages/KanbanPilot.tsx
  • apps/web-frontend/src/pages/TaskDetailNext.tsx
  • libs/ui/src/screens/TaskDetail.css
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/ui-detail-adapters-u2b

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@sonarqubecloud

sonarqubecloud Bot commented Jul 5, 2026

Copy link
Copy Markdown

@OBenner OBenner merged commit 6ffb60e into develop Jul 5, 2026
20 checks passed
OBenner added a commit that referenced this pull request Jul 6, 2026
* feat(ui): spec body in the shared TaskDetail via IPC fetch (U2)

Closes the follow-up noted in the adapter since #385: the Electron
pilot's detail view now shows the spec document.

- new task:spec:contentGet channel + readSpecContent() alongside the
  existing task:spec:* readers (same getSpecDir path validation,
  ENOENT -> null, findTaskAndProject resolution)
- preload getSpecContent(taskId) + renderer ElectronAPI typing, browser
  mock and vitest global mock kept in parity with sibling readers
- adapter: createTaskStoreAutoCodeClient gains a loadSpecContent option;
  getTask injects the body into UiTaskDetail.specContent, failures are
  swallowed (spec body is progressive enhancement)
- KanbanPilotView wires the option over window.electronAPI

Tests: 20 vitest (3 new: loader success/null/failure isolation);
electron tsc 0. Reviewed by a 3-lens adversarial workflow — integration
lens clean (handler registration verified), 2 confirmed nits fixed
(global test-mock parity, doc-block inventories).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Oleg Miagkov <mrobenner@gmail.com>

* fix(ui): empty spec.md is valid content + log spec-load failures (U2 review)

- handler: check specContent == null instead of falsy, so an
  existing-but-empty spec.md returns success with '' rather than a
  false 'Spec content not found' error
- adapter: the progressive-enhancement catch now logs a console.warn,
  so unexpected IPC failures stay diagnosable instead of vanishing

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Oleg Miagkov <mrobenner@gmail.com>

---------

Signed-off-by: Oleg Miagkov <mrobenner@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant