Skip to content

Release: Issues #299, #300, #302, #306, #308#312

Merged
Kewton merged 24 commits intomainfrom
develop
Feb 19, 2026
Merged

Release: Issues #299, #300, #302, #306, #308#312
Kewton merged 24 commits intomainfrom
develop

Conversation

@Kewton
Copy link
Owner

@Kewton Kewton commented Feb 19, 2026

Summary

Test plan

  • CI全チェックパス(Build, Lint, Type Check, Unit Tests, Security Audit)
  • UIからのgit cloneがCM_ROOT_DIR配下に作成されることを確認
  • mp4ファイルのアップロード・再生を確認
  • iPad/モバイルでのレイアウト確認
  • ルートレベルのファイル/ディレクトリ作成を確認

🤖 Generated with Claude Code

Kewton and others added 24 commits February 18, 2026 14:29
- Add video-extensions.ts config (isVideoExtension, getMimeTypeByVideoExtension, ftyp magic bytes)
- Add mp4 validator to uploadable-extensions.ts (15MB limit, ftyp magic bytes at offset 4)
- Add isVideo flag to FileContent interface in models.ts
- Add video file GET handling in files API route (Base64 data URI)
- Create VideoViewer component with loading indicator and HTML5 video controls
- Update FileViewer to render VideoViewer for video files, hide copy button
- Update FileViewerPage (page.tsx) to use shared FileContent type and video/image viewers
- Update CSP to include media-src 'self' data: for video playback
- Increase bodySizeLimit to 16mb for video upload support
- Optimize upload route: move file.size check before arrayBuffer() for memory efficiency
- Add 22 unit tests for video-extensions, 10 mp4 tests for uploadable-extensions
- Add 2 integration tests for video file GET API

Resolves #302

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…mage pattern

- Add validateVideoMagicBytes() and validateVideoContent() to video-extensions.ts
- Apply magic bytes validation to GET route for video files (closes security gap)
- Remove redundant <source> element from VideoViewer
- Expand video-extensions unit tests from 22 to 33 cases
- Update CLAUDE.md with new video-related modules

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Design policy document for mp4 upload feature
- Multi-stage issue review results (Stage 1-8)
- Multi-stage design review results (Stage 1-2)
- TDD implementation context and results
- Acceptance test results (9/9 passed)
- Refactoring results
- Progress report
- Work plan

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat(#302): mp4ファイルのアップロード・ブラウザ内再生機能
… iPad layout fixes

- Unify z-index system: Modal.tsx z-[9999] -> Z_INDEX.MODAL(50), Toast.tsx z-50 -> Z_INDEX.TOAST(60), ContextMenu.tsx z-50 -> Z_INDEX.CONTEXT_MENU(70)
- Fix z-index.ts JSDoc comments: correct layer hierarchy (add MAXIMIZED_EDITOR layer, renumber layers)
- Add isInsideScrollableElement to useSwipeGesture.ts to prevent unintended fullscreen exit during scroll
- Increase MarkdownEditor swipe threshold from 100 to 150 for more reliable gesture detection
- Replace hardcoded 768 with MOBILE_BREAKPOINT constant in SearchBar.tsx
- Add z-index hierarchy tests (15 tests) and scrollable element detection tests (5 tests)
- All inline style z-index changes use Z_INDEX constants for DRY consistency

Resolves #299

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…stability

Fix portal logic that was unreachable after an unconditional return in
MarkdownEditor. Export isInsideScrollableElement for direct unit testing
and add 6 dedicated tests covering edge cases. Clean up comment tags
and remove extra blank line.

Improvements:
- Fix unreachable portal code in MarkdownEditor (lines 884-892)
- Export isInsideScrollableElement for direct unit testing
- Add 6 unit tests for isInsideScrollableElement edge cases
- Remove [REFACTOR] comment tag in Toast.tsx
- Remove extra blank line in SearchBar.tsx

Quality Metrics:
- ESLint errors: 0 -> 0
- TypeScript errors: 0 -> 0
- Tests: 41 -> 47 (+6 new isInsideScrollableElement tests)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix(#299): iPad/スマホ レイアウト崩れ・全画面表示不具合修正
…th encoding

- Add encodePathForUrl() utility that preserves '/' separators while
  encoding individual path segments, fixing root directory creation
- Add toolbar with New File/New Directory buttons to FileTreeView
  non-empty state for root-level creation
- Replace encodeURIComponent with encodePathForUrl in all 5 file
  operation handlers (newFile, newDirectory, rename, delete, upload)
- Add 11 unit tests for encodePathForUrl covering edge cases
- Add 6 toolbar tests for FileTreeView (display, click, conditional)
- Add 1 path encoding test for WorktreeDetailRefactored

Resolves #300

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…istency

Add dark mode variant classes (dark:text-gray-300, dark:bg-gray-800,
dark:border-gray-600, dark:hover:bg-gray-700) to empty state file/directory
creation buttons to match the toolbar buttons added in Issue #300.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add design policy document for root directory creation feature
- Add multi-stage issue review results (8 stages)
- Add multi-stage design review results (4 stages)
- Add work plan and TDD implementation reports
- Update CLAUDE.md with url-path-encoder and FileTreeView module descriptions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix(#300): ルートディレクトリにディレクトリ/ファイルを追加可能にする
Implement auto-yes poller duplicate response prevention with prompt key
deduplication, 5-second cooldown after successful responses, and enhanced
tmux session health checks with structured HealthCheckResult reporting
and multi-stage false positive defense. Extract generatePromptKey() as
shared utility between client hook and server-side poller. All 163 tests
pass (27 new + 136 existing).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…rinciples

Refactoring improvements for Issue #306 implementation code:
- Extract PromptKeyInput interface (ISP) for generatePromptKey parameter type
- Promote MAX_SHELL_PROMPT_LENGTH from function-local to module-level constant
- Extract getErrorMessage() helper in auto-yes-manager (DRY with claude-session)
- Add comprehensive JSDoc (@param, @returns, @example) to all public/internal functions
- Add @internal annotations to testing-only exports

Quality Metrics:
- Tests: 163 passed (unchanged)
- ESLint errors: 0
- TypeScript errors: 0 (in target files)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix(#306): Auto-Yes Poller重複応答防止とtmuxセッション安定性改善
…mp/repos

- Inject getEnv().CM_ROOT_DIR as basePath in clone/route.ts and [jobId]/route.ts
- Add resolveDefaultBasePath() with WORKTREE_BASE_PATH deprecation warning
- Fix info disclosure: remove basePath/targetPath from error messages (D4-001/D4-003)
- Add targetDir type validation to prevent injection (D4-002)
- Add basePath resolution tests and security tests
- Update .env.example to document clone directory role

Resolves #308

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove unused imports (CloneResult, UrlNormalizer, getRepositoryByNormalizedUrl)
from clone-manager.test.ts and add @returns JSDoc tag to resolveDefaultBasePath()
for improved code documentation consistency.

Quality Metrics:
- Unit tests: 47 passed
- Integration tests: 12 passed
- TypeScript errors: 0
- ESLint errors: 0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add design policy document with 4-stage review results
- Add issue review reports (8-stage multi-stage review)
- Add multi-stage design review reports (stages 1-4)
- Add work plan for implementation
- Add pm-auto-dev progress reports
- Update CLAUDE.md with Issue #308 module descriptions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix(#308): git clone basePath修正 - CM_ROOT_DIRを使用するよう変更
@Kewton Kewton merged commit dbe02a8 into main Feb 19, 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