Skip to content

既知バグ修正 (テストファースト) + バージョン 1.8 - #21

Merged
mrmt merged 14 commits into
mainfrom
fix/known-bugs
Jul 25, 2026
Merged

既知バグ修正 (テストファースト) + バージョン 1.8#21
mrmt merged 14 commits into
mainfrom
fix/known-bugs

Conversation

@mrmt

@mrmt mrmt commented Jul 25, 2026

Copy link
Copy Markdown
Owner

概要

デグレ防止シリーズ PR 5/5。調査で発見した既知バグをテストファースト (失敗テスト → 修正 → グリーン) で修正し、バージョンを 1.8 に bump する。

修正内容

  1. テーブル th/td 誤判定: visitTableCellcolspan > 1 でヘッダ判定していたため、通常テーブルのヘッダ行が <td>、結合セルが <th> になっていた。Table.Head 配下かで判定し、colspan は属性として出力。PR2 で記録した XCTExpectFailure を正しい期待値に反転
  2. メニュー通知の全ウィンドウブロードキャスト: Cmd-R で全ウィンドウが一斉リロード、Cmd-O でウィンドウ数ぶん NSOpenPanel が開いていた。通知 object に keyWindow を載せ受信側で照合 (WindowScopedNotification + WindowAccessor)。keyWindow が nil の場合は従来挙動にフォールバック。raw string 重複だった "ReloadMarkdownFile"Notification.Name 定数化
  3. キーモニタ多重登録: NSEvent.addLocalMonitorForEvents がウィンドウごとに登録され、j/k 等で別ウィンドウがスクロールし得た。event.window 照合で自ウィンドウのみ処理
  4. ドロップ処理のレース: 非同期解決の完了順で振り分けが不定だった。DispatchGroup で全 URL を待ち DropTargetPlanner (純関数・テスト7件) で決定的に振り分け
  5. SwiftPM ビルドの mermaid 解決: baseURL が Bundle.main 固定で swift run では mermaid.min.js が見つからなかった。ResourceBundle (SWIFT_PACKAGE で Bundle.module 切替) を導入

バージョン

  • project.yml の MARKETING_VERSION を 1.8 / CURRENT_PROJECT_VERSION を 8 に bump、README 更新履歴追記

検証

  • swift test: 95件全パス (10件 → 95件に拡充)
  • make clean && make build: 成功。バンドルの CFBundleShortVersionString = 1.8 を確認
  • swiftlint: exit 0

手動確認推奨項目 (マージ前)

  • 2ウィンドウで j/k → アクティブウィンドウのみスクロール
  • Cmd-R → アクティブウィンドウのみリロード / Cmd-O でパネルが1つだけ
  • 複数ファイル同時ドロップ (非 .md 混在)
  • テーブルヘッダ行のスタイル / mermaid 描画 (make build と swift run の両経路)

Base: #20 (refactor/split-files)

🤖 Generated with Claude Code

https://claude.ai/code/session_01YAgg3ad7Muz4ed4EYTgKU2

mrmt and others added 14 commits July 26, 2026 05:35
- HTMLFormatter の基本要素出力を固定する特性テスト20件
- 変更行ハイライト (changedLines) の挙動固定テスト9件 (DiffCalculator統合含む)
- KeyBindingHandler のディスパッチ/パススルー契約テスト10件 (Command-C/A のコピー保護)
- String.htmlEscaped テスト3件
- テーブルヘッダの th/td 誤判定バグを XCTExpectFailure で記録 (修正PRで反転予定)
- FileWatcher に監視間隔の引数注入を追加 (デフォルト0.5秒で挙動不変) し、テストの Thread.sleep 依存を短縮してフレーク対策

Co-authored-by: Claude Code <claude@anthropic.com>
- project.yml を単一情報源として pbxproj を生成 (生成物もコミット)
- Xcode側にユニットテストターゲットを新設 (従来 xcodebuild test 不可だった)
- バージョンを project.yml の MARKETING_VERSION/CURRENT_PROJECT_VERSION に一元化
  (Info.plist はビルド設定変数を参照。1.5/1.7 の二重管理不整合を解消)
- CI に xcodegen 整合性チェックと xcodebuild test を追加
- README の古い手動セットアップ手順を XcodeGen ベースに更新
- プロジェクト名/スキーム名/構成は維持し make build/install の互換性を保持

Co-authored-by: Claude Code <claude@anthropic.com>
Co-authored-by: Claude Code <claude@anthropic.com>
…eet/String拡張)

MarkdownWebView.swift は745行から258行に。未使用だった HTMLFormatter.format(_:) は削除。

Co-authored-by: Claude Code <claude@anthropic.com>
MarkdownViewerTests.swift に5スイートが連結され import が重複していたのを解消。

Co-authored-by: Claude Code <claude@anthropic.com>
colspan>1 でヘッダ判定していたため、通常テーブルのヘッダ行が <td> になり
結合セルが <th> になっていた。Table.Head 配下かどうかで判定し、
colspan は属性として出力する。

Co-authored-by: Claude Code <claude@anthropic.com>
- Cmd-R が全ウィンドウを一斉リロード、Cmd-O がウィンドウ数ぶん
  NSOpenPanel を開いていた問題を修正。通知の object に keyWindow を載せ、
  受信側 (WindowScopedNotification) で自ウィンドウと照合する
- "ReloadMarkdownFile" の raw string 重複を Notification.Name 定数に統一
- NSEvent ローカルモニタがウィンドウごとに多重登録され、別ウィンドウが
  スクロールし得た問題を event.window 照合で修正

Co-authored-by: Claude Code <claude@anthropic.com>
各ファイルの非同期解決の完了順で振り分けが変わり得た問題を、
DispatchGroup で全URL解決を待ってから DropTargetPlanner で
決定的に振り分けるよう修正。振り分けロジックは純関数としてテスト追加。

Co-authored-by: Claude Code <claude@anthropic.com>
baseURL が Bundle.main.resourcePath 固定だったため、swift run では
mermaid.min.js を解決できなかった。SWIFT_PACKAGE 時は Bundle.module を
使う ResourceBundle を導入。

Co-authored-by: Claude Code <claude@anthropic.com>
Co-authored-by: Claude Code <claude@anthropic.com>
@mrmt
mrmt changed the base branch from refactor/split-files to main July 25, 2026 21:49
@mrmt
mrmt merged commit 4254604 into main Jul 25, 2026
3 checks passed
@mrmt
mrmt deleted the fix/known-bugs branch July 25, 2026 21:54
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