Skip to content

feat: Epic 13 (Structured Questions) + Epic 14 (Native STT) - #8

Merged
donpetry-bot merged 283 commits into
mainfrom
worktree-implement-sprint-1
Oct 30, 2026
Merged

donpetry-bot merged 283 commits into
mainfrom
worktree-implement-sprint-1

Conversation

@don-petry

@don-petry don-petry commented Mar 24, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Epic 13 (FR57-FR59): Structured Question Input — When the agent responds with numbered questions, they're detected by a renderer-side parser and presented as interactive Question Card Stack in the right panel with per-question input, suggestion chips, dot navigation, and review-before-submit
  • Epic 14 (FR60-FR62): Native STT with sherpa-onnx — Replaced non-functional Web Speech API (Google servers unreachable in Electron) with sherpa-onnx local streaming speech recognition. Audio captured via getUserMedia, streamed as 16kHz PCM to main process via IPC, transcribed in real-time with endpoint detection
  • Bug fix: Removed hard-coded option cards — Option cards are now agent-driven only, not hard-coded on load

Commits (stacked)

  1. docs: Spec updates — PRD v2.4 (FR57-FR62), UX spec v1.3 (Journey 7), Epics (Epic 13 stories), Sprint status
  2. feat: Epic 13 implementation — question-parser.ts, QuestionCardStack, QuestionReview, SuggestionChips, E2E tests
  3. feat: Epic 14 implementation — sherpa-onnx-node adapter, IPC audio pipeline, mic permission handlers

New Files

File Purpose
src/shared/types/domain/question-parser.ts Pure parser: detects numbered questions in agent text
src/renderer/components/session/QuestionCardStack.tsx Card stack with useReducer, dot nav, chips
src/renderer/components/session/QuestionReview.tsx Review overlay with aggregated submission
src/renderer/components/session/SuggestionChips.tsx Selectable pill chips
src/main/speech/sherpa-onnx-stt.ts Main-process STT adapter using sherpa-onnx OnlineRecognizer
src/main/ipc/speech-ipc-handler.ts IPC bridge for audio streaming
src/renderer/speech/ipc-speech-stt.ts Renderer-side STT via getUserMedia + IPC

Test plan

  • 78 unit/component tests passing (question parser, card stack, review, ConversationView)
  • TypeScript clean (tsc --noEmit)
  • ESLint clean (--max-warnings 0)
  • Pre-commit hooks passing (lint-staged + tsc + vitest related)
  • E2E: structured-questions.spec.ts (requires built app + Claude subscription)
  • Manual: mic button → sherpa-onnx transcription → agent message
  • Manual: agent multi-question response → card stack appears → answer → submit

🤖 Generated with Claude Code

Copilot AI review requested due to automatic review settings March 24, 2026 23:58

Copilot AI 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.

Pull request overview

This PR scaffolds the TalkTerm Electron (Forge + Vite) application and establishes the initial shared domain/port types, renderer UI components (setup + overlay/display primitives), speech adapters, and CI/tooling configuration.

Changes:

  • Add project build/test/tooling configuration (Vite configs, TS strict config, ESLint/Prettier/Husky, Vitest + coverage, Tailwind/PostCSS, GitHub Actions).
  • Introduce shared domain + port types (sessions, writeback, IPC envelopes/channels, agent events/errors, value objects).
  • Implement initial renderer components/hooks and main-process stubs/utilities with accompanying unit tests.

Reviewed changes

Copilot reviewed 147 out of 162 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
vitest.config.ts Adds Vitest configuration with coverage thresholds.
vite.renderer.config.ts Configures PostCSS pipeline for the renderer build.
vite.preload.config.ts Adds preload Vite config placeholder.
vite.main.config.ts Adds main-process Vite resolution settings.
tsconfig.json Enables strict TypeScript options and path mapping.
test/setup-renderer.ts Adds Testing Library jest-dom matchers for Vitest.
tailwind.config.ts Defines design tokens (colors/type/spacing) for Tailwind.
src/shared/types/ports/text-to-speech.ts Defines TextToSpeech port contract.
src/shared/types/ports/speech-to-text.ts Defines SpeechToText port contract.
src/shared/types/ports/agent-backend.ts Defines AgentBackend port + session config.
src/shared/types/ports/.gitkeep Keeps ports directory in VCS.
src/shared/types/domain/writeback.ts Adds writeback target types + default selection by origin.
src/shared/types/domain/writeback.test.ts Tests default writeback selection.
src/shared/types/domain/value-objects.ts Adds branded value objects + constructors.
src/shared/types/domain/value-objects.test.ts Tests value-object validation.
src/shared/types/domain/user-profile.ts Adds UserProfile type + factory.
src/shared/types/domain/user-profile.test.ts Tests UserProfile factory behavior.
src/shared/types/domain/session.ts Adds Session type + factory.
src/shared/types/domain/session.test.ts Tests Session factory behavior.
src/shared/types/domain/project.test.ts Sanity tests for TS strictness flags.
src/shared/types/domain/preference.ts Adds preference threshold utilities/constants.
src/shared/types/domain/preference.test.ts Tests preference threshold logic.
src/shared/types/domain/launch-state.ts Adds setup-step routing helper.
src/shared/types/domain/launch-state.test.ts Tests setup-step routing priority.
src/shared/types/domain/ipc-message.ts Adds IPC message envelope + factory.
src/shared/types/domain/ipc-message.test.ts Tests IPC message factory timestamping.
src/shared/types/domain/ipc-channels.ts Defines canonical IPC channel constants + type.
src/shared/types/domain/ipc-channels.test.ts Tests channel naming + uniqueness.
src/shared/types/domain/electron-api.ts Declares preload bridge contract type for renderer.
src/shared/types/domain/avatar-persona.ts Adds MVP persona roster.
src/shared/types/domain/avatar-persona.test.ts Tests persona roster shape/uniqueness.
src/shared/types/domain/audit-entry.ts Adds AuditEntry type + factory.
src/shared/types/domain/audit-entry.test.ts Tests AuditEntry factory behavior.
src/shared/types/domain/api-key-state.ts Defines API key state + validation result types.
src/shared/types/domain/agent-event.ts Adds AgentEvent union for streaming events.
src/shared/types/domain/agent-error.ts Adds error classification + user-friendly messaging.
src/shared/types/domain/agent-error.test.ts Tests error classification and message safety.
src/shared/types/domain/.gitkeep Keeps domain directory in VCS.
src/renderer/types/web-speech.d.ts Adds Web Speech API window typings.
src/renderer/types/.gitkeep Keeps renderer types directory in VCS.
src/renderer/styles/global.css Adds Tailwind directives + global font/body styles.
src/renderer/speech/web-speech-tts.ts Implements TTS adapter using Web Speech API.
src/renderer/speech/web-speech-tts.test.ts Tests WebSpeechTts behavior under jsdom mocks.
src/renderer/speech/web-speech-stt.ts Implements STT adapter using Web Speech API.
src/renderer/speech/web-speech-stt.test.ts Tests WebSpeechStt behavior under jsdom mocks.
src/renderer/speech/barge-in-controller.ts Adds barge-in state controller (TTS stop + STT start).
src/renderer/speech/barge-in-controller.test.ts Tests barge-in state transitions and calls.
src/renderer/speech/.gitkeep Keeps speech directory in VCS.
src/renderer/renderer.tsx Adds React entrypoint mounting App.
src/renderer/hooks/useLayoutState.ts Adds reducer-driven layout mode hook.
src/renderer/hooks/useLayoutState.test.ts Tests layout mode transitions.
src/renderer/hooks/useDisplayMode.ts Adds display-mode selection state hook.
src/renderer/hooks/useDisplayMode.test.ts Tests display-mode state updates.
src/renderer/hooks/useAvatarState.ts Adds avatar animation-state reducer hook.
src/renderer/hooks/useAvatarState.test.ts Tests avatar state transitions.
src/renderer/hooks/.gitkeep Keeps hooks directory in VCS.
src/renderer/context/.gitkeep Keeps context directory in VCS.
src/renderer/components/setup/WorkspaceSelection.tsx Adds workspace selection UI.
src/renderer/components/setup/WorkspaceSelection.test.tsx Tests workspace selection callbacks.
src/renderer/components/setup/ProfileSetup.tsx Adds profile setup UI.
src/renderer/components/setup/ProfileSetup.test.tsx Tests profile setup interactions.
src/renderer/components/setup/AvatarSelection.tsx Adds avatar selection UI using MVP personas.
src/renderer/components/setup/AvatarSelection.test.tsx Tests avatar selection callback.
src/renderer/components/setup/ApiKeySetup.tsx Adds API key entry/validation UI (stub validation).
src/renderer/components/setup/ApiKeySetup.test.tsx Tests API key setup basic rendering.
src/renderer/components/setup/AdminBlockScreen.tsx Adds blocking admin-privileges screen UI.
src/renderer/components/setup/AdminBlockScreen.test.tsx Tests admin block screen rendering and buttons.
src/renderer/components/overlay/ActionPanel.tsx Adds action panel container (listbox) UI.
src/renderer/components/overlay/ActionPanel.test.tsx Tests action panel rendering and selection.
src/renderer/components/overlay/ActionCard.tsx Adds action card UI with option semantics.
src/renderer/components/overlay/ActionCard.test.tsx Tests action card semantics and interactions.
src/renderer/components/display/TaskProgress.tsx Adds task progress display mode.
src/renderer/components/display/TaskProgress.test.tsx Tests task progress rendering.
src/renderer/components/display/DocumentView.tsx Adds basic document display mode.
src/renderer/components/display/DocumentView.test.tsx Tests document rendering/path display.
src/renderer/components/display/ComparisonTable.tsx Adds comparison table display mode.
src/renderer/components/display/ComparisonTable.test.tsx Tests comparison table expand behavior.
src/renderer/components/display/ClusteredCards.tsx Adds clustered cards display mode.
src/renderer/components/display/ClusteredCards.test.tsx Tests clustered cards expand/priority tags.
src/renderer/components/display/ActivityFeed.tsx Adds activity feed display mode.
src/renderer/components/display/ActivityFeed.test.tsx Tests activity feed visibility/rendering.
src/renderer/components/avatar/TextInput.tsx Adds text input w/ Enter-to-send and mic button.
src/renderer/components/avatar/TextInput.test.tsx Tests text input send/newline/mic behavior.
src/renderer/components/avatar/StatusIndicator.tsx Adds avatar status pill.
src/renderer/components/avatar/StatusIndicator.test.tsx Tests status pill rendering and role=status.
src/renderer/components/avatar/CaptionBar.tsx Adds caption bar w/ delayed hide logic.
src/renderer/components/avatar/CaptionBar.test.tsx Tests caption bar basic rendering conditions.
src/renderer/components/.gitkeep Keeps components directory in VCS.
src/renderer/App.tsx Adds minimal App shell.
src/preload/preload.ts Adds preload bridge stub via contextBridge.
src/main/storage/.gitkeep Keeps storage directory in VCS.
src/main/security/admin-check.ts Adds admin privilege check helper + instructions.
src/main/security/admin-check.test.ts Tests admin privilege check across platforms.
src/main/security/.gitkeep Keeps security directory in VCS.
src/main/main.ts Adds Electron main window creation and lifecycle wiring.
src/main/ipc/.gitkeep Keeps IPC directory in VCS.
src/main/agent/fake-agent-backend.ts Adds FakeAgentBackend test double.
src/main/agent/fake-agent-backend.test.ts Tests FakeAgentBackend event streaming/cancel.
src/main/agent/agent-message-router.ts Adds router forwarding backend events to handler.
src/main/agent/agent-message-router.test.ts Tests router event forwarding and cancel.
src/main/agent/.gitkeep Keeps agent directory in VCS.
postcss.config.js Adds PostCSS config for Tailwind/autoprefixer.
package.json Adds dependencies, scripts, lint-staged config.
index.html Adds renderer entry HTML.
forge.config.ts Configures Electron Forge + Vite plugin + makers.
eslint.config.mjs Adds ESLint flat config with strict TS + React rules.
.prettierrc Adds Prettier config.
.prettierignore Adds Prettier ignore rules.
.husky/pre-commit Adds pre-commit quality gate commands.
.gitignore Adds repo ignore rules (build artifacts/coverage).
.github/workflows/release.yml Adds release workflow for tag builds.
.github/workflows/ci.yml Adds CI workflow with 3-OS matrix quality gates.
_bmad-output/implementation-artifacts/*.md Adds planning/implementation artifacts for stories.

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

Comment thread src/main/security/admin-check.test.ts Resolved
Comment thread src/shared/types/domain/ipc-message.ts Resolved
Comment thread .github/workflows/ci.yml Resolved
Comment thread .github/workflows/release.yml Resolved
Comment thread src/shared/types/domain/agent-error.ts Resolved
Comment thread src/shared/types/domain/agent-event.ts Resolved
@coderabbitai

coderabbitai Bot commented Mar 26, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 216 files, which is 116 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

Run configuration
Commits

Reviewing files that changed from the base of the PR and between d8b656a and c4d78cf.

Files ignored due to path filters: 14
  • _bmad-output/implementation-artifacts/sprint-status.yaml is excluded by !_bmad-output/**
  • _bmad-output/implementation-artifacts/tests/test-summary.md is excluded by !_bmad-output/**
  • _bmad-output/planning-artifacts/architecture.md is excluded by !_bmad-output/**
  • _bmad-output/planning-artifacts/epics.md is excluded by !_bmad-output/**
  • _bmad-output/planning-artifacts/prd.md is excluded by !_bmad-output/**
  • _bmad-output/planning-artifacts/ux-design-specification.md is excluded by !_bmad-output/**
  • _bmad-output/test-artifacts/ci-validation-report.md is excluded by !_bmad-output/**
  • _bmad-output/test-artifacts/system-test-design.md is excluded by !_bmad-output/**
  • _bmad-output/test-artifacts/test-review-report.md is excluded by !_bmad-output/**
  • _bmad-output/test-artifacts/traceability-report.md is excluded by !_bmad-output/**
  • _bmad/_config/bmad-help.csv is excluded by !**/*.csv, !_bmad/**
  • _bmad/_config/skill-manifest.csv is excluded by !**/*.csv, !_bmad/**
  • _bmad/bmm/config.yaml is excluded by !_bmad/**
  • package-lock.json is excluded by !**/package-lock.json
Files selected for processing: 216
  • .env.example
  • .gitattributes
  • .github/workflows/ci.yml
  • .github/workflows/release.yml
  • .github/workflows/sonarcloud.yml
  • .gitignore
  • .gitleaksignore
  • .husky/pre-commit
  • .nvmrc
  • .prettierignore
  • .prettierrc
  • CLAUDE.md
  • assets/avatars/README.md
  • eslint.config.mjs
  • forge.config.ts
  • index.html
  • package.json
  • playwright.config.ts
  • playwright.electron.config.ts
  • postcss.config.js
  • sonar-project.properties
  • src/main/agent/.gitkeep
  • src/main/agent/agent-message-router.test.ts
  • src/main/agent/agent-message-router.ts
  • src/main/agent/claude-sdk-backend.test.ts
  • src/main/agent/claude-sdk-backend.ts
  • src/main/agent/fake-agent-backend.test.ts
  • src/main/agent/fake-agent-backend.ts
  • src/main/ipc/.gitkeep
  • src/main/ipc/agent-ipc-handler.test.ts
  • src/main/ipc/agent-ipc-handler.ts
  • src/main/ipc/ipc-registrar.ts
  • src/main/ipc/session-ipc-handler.test.ts
  • src/main/ipc/session-ipc-handler.ts
  • src/main/ipc/settings-ipc-handler.test.ts
  • src/main/ipc/settings-ipc-handler.ts
  • src/main/ipc/speech-ipc-handler.test.ts
  • src/main/ipc/speech-ipc-handler.ts
  • src/main/ipc/validate-string.test.ts
  • src/main/ipc/validate-string.ts
  • src/main/main.ts
  • src/main/security/.gitkeep
  • src/main/security/admin-check.test.ts
  • src/main/security/admin-check.ts
  • src/main/security/safe-storage-key-manager.test.ts
  • src/main/security/safe-storage-key-manager.ts
  • src/main/speech/sherpa-onnx-stt.test.ts
  • src/main/speech/sherpa-onnx-stt.ts
  • src/main/storage/.gitkeep
  • src/main/storage/database-initializer.test.ts
  • src/main/storage/database-initializer.ts
  • src/main/storage/electron-config-store.test.ts
  • src/main/storage/electron-config-store.ts
  • src/main/storage/memory-index-store.test.ts
  • src/main/storage/memory-index-store.ts
  • src/main/storage/sqlite-audit-repository.test.ts
  • src/main/storage/sqlite-audit-repository.ts
  • src/main/storage/sqlite-session-repository.test.ts
  • src/main/storage/sqlite-session-repository.ts
  • src/preload/preload.ts
  • src/renderer/App.test.tsx
  • src/renderer/App.tsx
  • src/renderer/components/.gitkeep
  • src/renderer/components/avatar/AvatarCanvas.test.tsx
  • src/renderer/components/avatar/AvatarCanvas.tsx
  • src/renderer/components/avatar/CaptionBar.test.tsx
  • src/renderer/components/avatar/CaptionBar.tsx
  • src/renderer/components/avatar/FileDropZone.test.tsx
  • src/renderer/components/avatar/FileDropZone.tsx
  • src/renderer/components/avatar/StatusIndicator.test.tsx
  • src/renderer/components/avatar/StatusIndicator.tsx
  • src/renderer/components/avatar/TextInput.test.tsx
  • src/renderer/components/avatar/TextInput.tsx
  • src/renderer/components/display/ActivityFeed.test.tsx
  • src/renderer/components/display/ActivityFeed.tsx
  • src/renderer/components/display/ClusteredCards.test.tsx
  • src/renderer/components/display/ClusteredCards.tsx
  • src/renderer/components/display/ComparisonTable.test.tsx
  • src/renderer/components/display/ComparisonTable.tsx
  • src/renderer/components/display/DocumentView.test.tsx
  • src/renderer/components/display/DocumentView.tsx
  • src/renderer/components/display/OutputPanel.test.tsx
  • src/renderer/components/display/OutputPanel.tsx
  • src/renderer/components/display/PlanPreview.test.tsx
  • src/renderer/components/display/PlanPreview.tsx
  • src/renderer/components/display/TaskProgress.test.tsx
  • src/renderer/components/display/TaskProgress.tsx
  • src/renderer/components/layout/AppLayout.test.tsx
  • src/renderer/components/layout/AppLayout.tsx
  • src/renderer/components/overlay/ActionCard.test.tsx
  • src/renderer/components/overlay/ActionCard.tsx
  • src/renderer/components/overlay/ActionPanel.test.tsx
  • src/renderer/components/overlay/ActionPanel.tsx
  • src/renderer/components/overlay/ConfirmPlan.test.tsx
  • src/renderer/components/overlay/ConfirmPlan.tsx
  • src/renderer/components/overlay/ErrorRecovery.test.tsx
  • src/renderer/components/overlay/ErrorRecovery.tsx
  • src/renderer/components/session/AuditLog.test.tsx
  • src/renderer/components/session/AuditLog.tsx
  • src/renderer/components/session/ConversationView.test.tsx
  • src/renderer/components/session/ConversationView.tsx
  • src/renderer/components/session/QuestionCardStack.test.tsx
  • src/renderer/components/session/QuestionCardStack.tsx
  • src/renderer/components/session/QuestionReview.test.tsx
  • src/renderer/components/session/QuestionReview.tsx
  • src/renderer/components/session/SessionGreeting.test.tsx
  • src/renderer/components/session/SessionGreeting.tsx
  • src/renderer/components/session/SuggestionChips.test.tsx
  • src/renderer/components/session/SuggestionChips.tsx
  • src/renderer/components/setup/AdminBlockScreen.test.tsx
  • src/renderer/components/setup/AdminBlockScreen.tsx
  • src/renderer/components/setup/ApiKeySetup.test.tsx
  • src/renderer/components/setup/ApiKeySetup.tsx
  • src/renderer/components/setup/AvatarSelection.test.tsx
  • src/renderer/components/setup/AvatarSelection.tsx
  • src/renderer/components/setup/ProfileSetup.test.tsx
  • src/renderer/components/setup/ProfileSetup.tsx
  • src/renderer/components/setup/WorkspaceSelection.test.tsx
  • src/renderer/components/setup/WorkspaceSelection.tsx
  • src/renderer/context/.gitkeep
  • src/renderer/hooks/.gitkeep
  • src/renderer/hooks/useAvatarState.test.ts
  • src/renderer/hooks/useAvatarState.ts
  • src/renderer/hooks/useDisplayMode.test.ts
  • src/renderer/hooks/useDisplayMode.ts
  • src/renderer/hooks/useLayoutState.test.ts
  • src/renderer/hooks/useLayoutState.ts
  • src/renderer/hooks/useNetworkStatus.test.ts
  • src/renderer/hooks/useNetworkStatus.ts
  • src/renderer/hooks/useSetupRouter.test.ts
  • src/renderer/hooks/useSetupRouter.ts
  • src/renderer/renderer.tsx
  • src/renderer/speech/.gitkeep
  • src/renderer/speech/barge-in-controller.test.ts
  • src/renderer/speech/barge-in-controller.ts
  • src/renderer/speech/ipc-speech-stt.test.ts
  • src/renderer/speech/ipc-speech-stt.ts
  • src/renderer/speech/web-speech-stt.test.ts
  • src/renderer/speech/web-speech-stt.ts
  • src/renderer/speech/web-speech-tts.test.ts
  • src/renderer/speech/web-speech-tts.ts
  • src/renderer/styles/global.css
  • src/renderer/types/.gitkeep
  • src/renderer/types/web-speech.d.ts
  • src/shared/types/domain/.gitkeep
  • src/shared/types/domain/agent-error.test.ts
  • src/shared/types/domain/agent-error.ts
  • src/shared/types/domain/agent-event.ts
  • src/shared/types/domain/api-key-state.ts
  • src/shared/types/domain/audit-entry.test.ts
  • src/shared/types/domain/audit-entry.ts
  • src/shared/types/domain/avatar-persona.test.ts
  • src/shared/types/domain/avatar-persona.ts
  • src/shared/types/domain/electron-api.ts
  • src/shared/types/domain/ipc-channels.test.ts
  • src/shared/types/domain/ipc-channels.ts
  • src/shared/types/domain/ipc-message.test.ts
  • src/shared/types/domain/ipc-message.ts
  • src/shared/types/domain/launch-state.test.ts
  • src/shared/types/domain/launch-state.ts
  • src/shared/types/domain/preference.test.ts
  • src/shared/types/domain/preference.ts
  • src/shared/types/domain/project.test.ts
  • src/shared/types/domain/question-parser.test.ts
  • src/shared/types/domain/question-parser.ts
  • src/shared/types/domain/render-markdown.test.ts
  • src/shared/types/domain/render-markdown.ts
  • src/shared/types/domain/session.test.ts
  • src/shared/types/domain/session.ts
  • src/shared/types/domain/user-profile.test.ts
  • src/shared/types/domain/user-profile.ts
  • src/shared/types/domain/value-objects.test.ts
  • src/shared/types/domain/value-objects.ts
  • src/shared/types/domain/writeback.test.ts
  • src/shared/types/domain/writeback.ts
  • src/shared/types/ports/.gitkeep
  • src/shared/types/ports/agent-backend.ts
  • src/shared/types/ports/audit-repository.ts
  • src/shared/types/ports/session-repository.ts
  • src/shared/types/ports/speech-to-text.ts
  • src/shared/types/ports/text-to-speech.ts
  • stryker.config.mjs
  • tailwind.config.ts
  • test/README.md
  • test/e2e/accessibility.spec.ts
  • test/e2e/conversation-patterns.spec.ts
  • test/e2e/design-tokens.spec.ts
  • test/e2e/electron-app.spec.ts
  • test/e2e/error-recovery.spec.ts
  • test/e2e/keyboard-navigation.spec.ts
  • test/e2e/setup-flow.spec.ts
  • test/e2e/structured-questions.spec.ts
  • test/integration/agent-message-flow.test.ts
  • test/integration/api-key-lifecycle.test.ts
  • test/integration/audit-trail.test.ts
  • test/integration/conversation-thread.test.ts
  • test/integration/error-pipeline.test.ts
  • test/integration/file-operations.test.ts
  • test/integration/ipc-roundtrip.test.ts
  • test/integration/retry-backoff.test.ts
  • test/integration/session-crash-recovery.test.ts
  • test/integration/session-lifecycle.test.ts
  • test/setup-renderer.ts
  • test/support/factories/index.ts
  • test/support/factories/session.factory.ts
  • test/support/fixtures/database.ts
  • test/support/fixtures/index.ts
  • test/support/fixtures/ipc.ts
  • test/support/fixtures/repositories.ts
  • test/support/fixtures/security.ts
  • test/support/fixtures/speech.ts
  • tsconfig.json
  • vite.main.config.ts
  • vite.preload.config.ts
  • vite.renderer.config.ts
  • vitest.config.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch worktree-implement-sprint-1
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
3 Security Hotspots
0.0% Coverage on New Code (required ≥ 80%)
D Reliability Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

@don-petry don-petry changed the title Implement TalkTerm: All 12 epics across 4 sprints feat: Epic 13 (Structured Questions) + Epic 14 (Native STT) Mar 30, 2026
Comment thread .github/workflows/release.yml Fixed
@github-actions

Copy link
Copy Markdown
Contributor

Auto-rebase failed — merge conflict — this branch has conflicts with main that must be resolved manually.

Please resolve the conflicts and push:

git fetch origin
git merge origin/main
# resolve conflicts, then:
git add .
git commit
git push

@don-petry

Copy link
Copy Markdown
Contributor Author

@claude Please address all open review comments on this PR from CodeRabbit and Copilot.

@claude

claude Bot commented May 6, 2026 •

Copy link
Copy Markdown

Claude finished @don-petry's task in 5m 30s —— View job


Addressing Open Review Comments

Finding: All 7 Copilot review items were already addressed in prior commits (the PR has 36 commits made after the review was posted). One gap remained: ActionPanel.tsx had keyboard navigation logic added in response to the review, but ActionPanel.test.tsx had no tests for those branches.

Tasks

  • Gather context and read relevant files
  • Verify admin-check.test.ts — vi.unstubAllGlobals() already in afterEach ✓
  • Verify ipc-message.ts — channel already typed as IPCChannel ✓
  • Verify agent-error.ts — TTS check already before STT ✓
  • Verify agent-event.ts — RecoveryOption already imported from agent-error.ts (no duplication) ✓
  • Verify ActionPanel.tsx — keyboard nav (ArrowDown/Up, Enter, Space) already implemented ✓
  • Verify CaptionBar.test.tsx — fake timer tests for 3s hide already present ✓
  • Verify AdminBlockScreen.test.tsx — @vitest-environment jsdom already on first line ✓
  • Add keyboard nav tests to ActionPanel.test.tsx — committed dddc998
  • Push to remote branch

What was committed (dddc998):
Added 10 new tests to src/renderer/components/overlay/ActionPanel.test.tsx covering:

  • ArrowDown moves focus to next enabled card
  • ArrowUp moves focus to previous enabled card
  • ArrowDown wraps from last to first
  • ArrowUp wraps from first to last
  • Enter selects the focused card
  • Space selects the focused card
  • Disabled cards are skipped during navigation
  • Enter does not fire onSelect when focused card is disabled
  • All-disabled no-op (no throw)
  • aria-label prop and default title-as-accessible-name

Cannot address (GitHub App permissions restrict .github/workflows/ edits):

  • ci.yml — expand push trigger to all branches
  • release.yml — add GitHub Release creation step + explicit permissions block
    | Branch

@don-petry
don-petry requested a review from a team as a code owner May 6, 2026 11:37
@don-petry
don-petry enabled auto-merge (squash) May 12, 2026 01:41
@don-petry
don-petry force-pushed the worktree-implement-sprint-1 branch from dddc998 to 11dd524 Compare May 13, 2026 17:23
@donpetry-bot donpetry-bot added the needs-human-review Requires human review label May 14, 2026
@don-petry
don-petry marked this pull request as draft May 19, 2026 04:13
auto-merge was automatically disabled May 19, 2026 04:13

Pull request was converted to draft

@don-petry

Copy link
Copy Markdown
Contributor Author

@dev-lead - please fix this PR

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6d3401c757

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/renderer/App.tsx Resolved
… restore session after key recovery, and keep raw table values

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 611398e2ac

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/renderer/App.tsx Resolved

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/main/ipc/speech-ipc-handler.ts Resolved
Comment thread src/main/agent/claude-sdk-backend.ts Resolved
…op, preserve escaped table pipes, and require SDK session ID for continue

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6dfac483c8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/renderer/speech/ipc-speech-stt.ts Resolved
Comment thread src/renderer/App.tsx Resolved
… admin retry, and preserve snake_case in stripMarkdown
@github-actions

Copy link
Copy Markdown
Contributor

CI Failure: SonarCloud Code Analysis

Step: SonarCloud Quality Gate (static analysis on new code)
Root cause: Lint/style

The quality gate failed on the condition "Reliability Rating on New Code" (C, required ≥ A). The check annotations point to three issues in src/shared/types/domain/question-parser.ts (line 24, reported twice, and line 132). The annotation text does not include the rule names, so the exact rules are unconfirmed. Sonar reliability issues are usually bug-type findings, such as regex or logic problems in parsing code.

Suggested fix: Open the three issues linked from the SonarCloud PR dashboard for question-parser.ts (lines 24 and 132), fix the flagged reliability bugs, and push so the gate re-evaluates.

View run logs

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c83b940c39

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/main/agent/claude-sdk-backend.ts Resolved
Comment thread src/main/agent/claude-sdk-backend.ts Resolved
…ogress, and remove inherited API key in subscription mode

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5b634ec90d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/renderer/speech/web-speech-tts.ts Resolved
Comment thread src/main/ipc/settings-ipc-handler.ts Resolved
Comment thread src/main/main.ts Resolved
…es, validate workspace dirs, and stop STT on window close

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 13f74df651

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/main/main.ts Resolved
@github-actions

Copy link
Copy Markdown
Contributor

CI Failure: SonarCloud

Step: SonarCloud quality gate (static analysis)
Root cause: Lint/style

SonarCloud reported 1 new high-severity security alert: "I/O function calls should not be vulnerable to path injection attacks" (Path Traversal via unsanitized user input) at src/main/ipc/settings-ipc-handler.ts:128. A value from user/IPC input appears to reach a filesystem call without being validated, so the quality gate failed.

Suggested fix: In src/main/ipc/settings-ipc-handler.ts near line 128, resolve the user-supplied path with path.resolve against a fixed base directory and reject it (throw) unless the result starts with that base plus path.sep, before passing it to the fs call.

View run logs

@github-actions

Copy link
Copy Markdown
Contributor

CI Failure: SonarCloud Code Analysis

Step: Quality Gate (Security Rating on New Code)
Root cause: Lint/style

The SonarCloud quality gate failed because the Security Rating on New Code is E (required ≥ A). Sonar flagged an issue at src/main/ipc/settings-ipc-handler.ts:128, which is the only annotation on the check. The annotation has no message text, so the exact rule is not visible here. The PR diff exceeds 20000 lines, so I could not fetch it through the API.

Suggested fix: Open the flagged issue, read the rule at src/main/ipc/settings-ipc-handler.ts:128, and fix that vulnerability. If it is a false positive, mark it Safe in SonarCloud.

View run logs

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c77243a630

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/main/agent/claude-sdk-backend.ts Resolved
Comment thread src/main/agent/claude-sdk-backend.ts Resolved
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@sonarqubecloud

Copy link
Copy Markdown

@donpetry-bot

Copy link
Copy Markdown
Contributor

Advisory bots were rate-limited; auto-approval is withheld until they recover. pr-review-sweep will re-review this PR after 2026-10-30T03:44:33Z.

donpetry-bot
donpetry-bot previously approved these changes Oct 30, 2026
@donpetry-bot
donpetry-bot dismissed their stale review October 30, 2026 02:56

Dismissing approval due to a PR issue comment lacking a verified disposition (#1813)

@donpetry-bot
donpetry-bot merged commit 51e17ec into main Oct 30, 2026
66 of 87 checks passed
@donpetry-bot
donpetry-bot deleted the worktree-implement-sprint-1 branch October 30, 2026 02:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dev-lead:needs-human dev-lead could not complete this issue; needs human attention needs-human-review Requires human review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants