リポジトリ
Ctrl/Cmd+クリックでリンクを開く機能をcontenteditable切り替えで実現
Ctrl/Cmd キー押下中にエディタ内のリンク要素へ `contenteditable="false"` を動的に付け外しする `LinkOpenerExtension` が追加されました。`window.open` を直接呼び出す方式と異なり、ブラウザネイティブの動作に委譲することでホバー時のカーソル表示を含むビジュアルフィードバックが自然に機能します。タブ切り替え後の Chrome におけるイベント不整合には `mousemove` を利用した遅延再同期で対処しています。
`IO.copy_stream` が `Buffer#write` の戻り値不正とデータ破損を引き起こすバグを修正
`IO.copy_stream` と Rails のレスポンスストリームを組み合わせた際に発生する `TypeError` と、サイレントなデータ破損の2つのバグが修正されました。`Buffer#write` が `Array#push` の戻り値(配列)をそのまま返していた問題と、文字列を参照のままエンキューしていた問題を、`string.bytesize` の返却と `string.frozen?` によるガード付き `dup` で解消しています。
Minitest 6対応:Railsバージョン別の依存管理戦略
Minitest 6が`minitest/mock`を独立Gem(`minitest-mock`)に切り出したことで生じたテスト破損への対応。Rails 7.0・7.1は`minitest < 6`でピン止め、Rails 7.2はRails本体側のピン止めに委ねつつ`minitest-mock`を追加、Rails 8.0・8.1はMinitest 6採用と`minitest-mock`追加という三段階の戦略が採られた。
ドキュメント検索にシノニム・ユースケースキーワードを追加し、コンポーネントの発見性を向上
WebAwesomeのサイト内検索に `synonyms`(同義語)と `use-cases`(ユースケース)フロントマターフィールドを追加。「modal」でDialog、「sidebar」でDrawerが見つかるように。MiniSearchのブーストウェイト階層化(t:20, s:14, h:10, u:6, c:1)により既存の検索ランキングを維持しつつ、89のドキュメントファイルにキーワードを整備した。
`refresh!` メソッドの重複実装を `save_to_database` 呼び出しに統一
`cf61b719` で導入された `save_to_database` メソッドが、`refresh!` メソッド内に残っていた同一のデータベース保存ロジックを置き換えていなかった問題を修正。9行削除・1行追加の小さな変更で、保存ロジックを `save_to_database` に一本化し、コードの保守性を向上させました。
スロット述語が引き起こすコンテンツキャッシュ汚染の修正
`render_in` 実行前にスロット述語を呼び出すと `content` のキャッシュが汚染され、レンダリング時に渡したコンテンツブロックがサイレントに無視されるバグが修正されました。`render_in` メソッドに `remove_instance_variable(:@__vc_content)` の1行を追加し、評価済みフラグと合わせてキャッシュ値も完全に削除することで不整合を根本から解消しています。
TUIダッシュボードのパニッククラッシュをnil安全ガードで修正
別ターミナルから `once teardown` を実行した際にTUIがパニックしてクラッシュするバグを修正しました。`scrollToSelection` 関数に `len(m.panels) == 0` の早期リターンガードを4行追加し、teardown後の空パネル状態でのインデックスアウトオブレンジを防ぎます。リグレッションテストも合わせて追加されています。
デバッグログのブロック化によるメッセージ生成コストの最適化
デバッグが無効な場合でも文字列補間が評価される問題を解消するため、`Puma::LogWriter#debug` がブロック引数に対応しました。ブロックで渡された場合はデバッグ有効時のみ `yield` されるため、不要な文字列アロケーションを回避できます。引数形式の呼び出しとの後方互換性は維持されています。