Skip to content

release: v0.4.18 - Sessions/Report UI, sidebar sync, status fixes#614

Merged
Kewton merged 15 commits intomainfrom
develop
Apr 2, 2026
Merged

release: v0.4.18 - Sessions/Report UI, sidebar sync, status fixes#614
Kewton merged 15 commits intomainfrom
develop

Conversation

@Kewton
Copy link
Copy Markdown
Owner

@Kewton Kewton commented Apr 2, 2026

Summary

New Features

Bug Fixes

Improvements

  • Review画面のタブ名を「Review/Report」に変更
  • summary-prompt-builderにユーザー指示のサニタイズ対応

Test plan

  • CI全パス(lint, tsc, test:unit, build, security audit)
  • 6037+ unit tests passed

🤖 Generated with Claude Code

Kewton and others added 15 commits April 2, 2026 01:49
…604)

worktree-status-helper used captureLines=100 while current-output API
used 10000. When 150+ trailing blank lines existed after a prompt in
tmux buffer, 100-line capture returned only blanks, causing false
"running" status. Extract STATUS_CAPTURE_LINES=10000 constant to
shared config and use it in both locations.

- Add src/config/status-capture-config.ts with STATUS_CAPTURE_LINES
- Update getStatusCaptureLines() default from 100 to STATUS_CAPTURE_LINES
- Replace hardcoded 10000 in current-output/route.ts with constant
- Add regression tests for trailing blank lines after prompt
- Add config constant unit test

Resolves #604

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
fix(status): unify capture line count to fix spinner stuck on ready (#604)
…ive polling (#608)

- toBranchItem() now uses deriveCliStatus() instead of hardcoded 'idle'
- useWorktreesCache polls at 5s (active sessions) or 30s (idle)
- Polling pauses when tab is hidden via visibilitychange listener
- Updated tests to verify status derivation and polling behavior

Resolves #608

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
fix(sidebar): add adaptive polling for real-time status sync (#608)
…#606)

- Add SORT_KEYS const array and derive SortKey type (including lastSent)
- Add isValidSortKey() and compareByTimestamp() utility functions
- Add lastSent + default case to sortBranches() switch
- Extract SortSelectorBase presentational component from SortSelector
- Refactor SortSelector as thin wrapper around SortSelectorBase
- Add localStorage validation for sortKey in SidebarContext
- Implement Sessions page sort (lastSent/repositoryName/status)
- Add message preview with sanitization and PC/SP truncation
- Add MESSAGE_PREVIEW_MAX_LENGTH_PC/SP constants
- All tests pass (5953 passed), coverage target met
- ESLint: 0 errors, TypeScript: 0 errors

Resolves #606

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add daily_reports table (v24 migration) with date PK, UPSERT support
- Add daily-report-db.ts with getDailyReport, saveDailyReport, updateDailyReportContent
- Add getMessagesByDateRange() to chat-db.ts for cross-worktree date queries
- Add summary-prompt-builder.ts with sanitizeMessage and buildSummaryPrompt
- Add timeoutMs option to ExecuteCommandOptions in claude-executor.ts
- Add daily-summary-generator.ts with concurrent execution control (globalThis)
- Add /api/daily-summary route (GET/POST/PUT) with input validation
- Add SUMMARY_ALLOWED_TOOLS and SUMMARY_GENERATION_TIMEOUT_MS to review-config
- Extract ReviewTab from page.tsx, add ReportTab and ReportDatePicker
- Integrate page-level tabs (Review/Report) in review page
- Update existing tests for schema version 24 and page structure changes
- Add unit tests for all new modules (6 test files)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move sanitizePreview from sessions/page.tsx to config/message-preview-config.ts
for better testability and reusability. Add comprehensive unit tests covering
control character removal, bidi mark stripping, zero-width char handling,
and whitespace normalization (28 test cases).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat(sessions): add sort options and message preview (#606)
feat(daily-summary): implement daily summary with AI report (#607)
- Add userInstruction textarea to ReportTab for customizing AI summary generation
- Propagate userInstruction through API -> generator -> prompt builder pipeline
- Add prompt injection isolation rules in system prompt for <user_instruction>
- Apply sanitizeMessage to userInstruction in buildSummaryPrompt (DR1-005)
- Add body shape validation and userInstruction validation to daily-summary API
- Change nav label from 'Review' to 'Review/Report' (Header + GlobalMobileNav)
- Change Sessions default sort to repositoryName(asc) with branchName second sort
- Add second sort key for status sort (repositoryName)
- Add MAX_USER_INSTRUCTION_LENGTH=1000 constant to review-config
- All 6037 unit tests pass, 0 ESLint errors, 0 TypeScript errors

Resolves #612

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Extract serializeReport() in daily-summary route to eliminate 3x
  duplicated report-to-JSON serialization (DRY)
- Extract STATUS_LABELS record and STATUS_BADGE_CLASSES in Sessions page
  to replace switch statement and nested ternary chain (readability)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat(report): add user instruction input and UI improvements (#612)
…me second

Repository name is now the primary (bold) line and branch name is
the secondary (gray) line, making it easier to identify worktrees
when multiple repositories share the same branch name (e.g. develop).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@Kewton Kewton merged commit 7e31da2 into main Apr 2, 2026
10 checks passed
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.

1 participant