Cast lastSendChatArgs through unknown to satisfy TypeScript's
strict type narrowing on the nullable union type.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Upgrade mergemaster prompt to resolve complex conflicts itself
instead of just reporting failure. Includes instructions to check
git history and story files for context before resolving.
- Add proxy error handler to vite config to prevent crashes on
backend ECONNREFUSED.
- Fix bug 279: auto-assign now checks that preferred agent's stage
matches the pipeline stage. Coders won't be assigned to QA/merge.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds assigned agent display to the expanded work item detail panel.
Resolved conflicts by keeping master versions of bot.rs (permission
handling), ChatInput.tsx, and fs.rs. Removed duplicate list_project_files
endpoint and tests from io.rs.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Vite only needs to watch frontend/ sources. Ignore git objects,
Rust source, Cargo files, node_modules, and vendor directories
that change in bulk during squash merges.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
TypeScript control flow analysis can't track reassignment inside vi.mock
callbacks, causing lastSendChatArgs to narrow to never. Use non-null
assertions after the explicit toBeNull() guard.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Correct lastScrollTopRef assignment in scrollToBottom to read back the
browser-capped scrollTop value instead of using scrollHeight, which was
causing handleScroll to incorrectly detect upward scrolling and disable
auto-scroll.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implement /btw side question slash command — lets users ask quick
questions from conversation context without disrupting the main chat.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The button wrapping from story 224 uses browser-default black text,
making titles invisible on the dark background.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The "calls getCurrentProject() on mount" test uses vi.resetModules() with
dynamic imports which can be slow. The per-test 10_000ms timeout was not
being respected by vitest, causing it to fail at the 5000ms default.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove duplicate inline-style JSX block that was left behind after a
merge, causing esbuild parse errors. Restore hasMergeFailure border and
background colors in the cardStyle object.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Cherry-pick from feature branch — code was never squash-merged
despite story being accepted (bug 226).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The Playwright beforeEach hook called DELETE /api/project to get a clean
selection screen. This request hit the live server via Vite's proxy and
set project_root to None, breaking every background agent operation
(server-owned completion, auto-assign, merge pipeline).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When a project path is passed on the command line, skip the project
selection screen in the frontend and go straight to the main UI.
Squash merge of feature/story-211
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add visual type indicators to pipeline stage panels so stories, bugs,
and spikes are distinguishable at a glance.
Squash merge of feature/story-198
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>