awase の各バージョンの変更内容。ダウンロードは GitHub Releases から。
layout/nicola.yab/nicola_us.yab: 数字段の左右親指シフトでキー「4」「5」が「6」「7」と重複していた不具合を修正4:[ 5:] 6:[ 7:] と括弧記号が重複しており、日本語の鉤括弧「」が数字段のどこにも存在しなかった4:「 5:」(無変換+4 → 「、変換+5 → 」)に修正し、6:[ 7:] はそのまま残したawase.exe は windows_subsystem = "windows" でコンソールを持たず、config.toml 未検出/TOML構文エラー・left_thumb_key/right_thumb_key の不明なキー名・キーボードフック登録失敗(セキュリティソフトのブロック等)・トレイアイコン作成失敗のいずれかで起動に失敗しても、ダブルクリックしても一瞬で消えるだけで原因が一切見えなかったMessageBoxW でエラー内容と原因別の対処法を表示するようにした。TOML構文エラーは行番号・列番号・該当行を含めて表示され、どこをどう直せばよいか分かるようにしたleft_thumb_key/right_thumb_key としてなりすまさせる設定(left_alt_impersonates_thumb_key/right_alt_impersonates_thumb_key、既定 false)を追加。PowerToys 等の外部リマップと同等のことを awase 単体で完結できるVK_SPACE(変換候補送り)を送出できるようにした(無変換/変換と異なり、composing 中の raw VK_SPACE 送出は IME の正規機能のため)space_thumb_ignore_composing_guard/space_thumb_shift_literal(既定 true)。Space が親指キーの時のみ設定画面に表示TeamsWebView、Chrome系、Vk mode)。IME: Google 日本語入力(GJI)GjiFsm::OnWarm)であるにも関わらず物理 NativeF2Down(非TSF)イベントが無条件に MarkCold+GjiCompositionReset を発行して warm 維持用タイマーを kill しており、以降の romaji が per-VK confirm レースに巻き込まれて一部消失していた(実機報告: 「5せっしょん」の一部が無音で消失)NativeF2Down を warm 中は無視するようガードを追加SuspectedLiteral 判定時に可視でも保護がなかった。可視中は backspace を保留する veto を追加し、TSF/Chrome の literal-detect ロジックも統一したOsModifierHeld bypass により NICOLA 同時打鍵判定が一切効かなくなる不具合を修正GetAsyncKeyState 由来の別経路(modifiers.alt)が物理 Alt 押下をそのまま返しており、3箇所で BypassReason::OsModifierHeld が誤発動していた。なりすまし中は modifiers.alt を補正するよう修正VK_MENU で届き、なりすましが一切発動しない不具合を修正WH_KEYBOARD_LL の vkCode が左右区別済み VK_LMENU/VK_RMENU ではなく汎用 VK_MENU で届く環境があり、直接比較のみの判定が常に false になっていた。LLKHF_EXTENDED フラグで左右を判別するよう修正awase-settings.exe の設定リロード通知が FindWindowW で存在しないウィンドウクラス名(awase_msg_window)を探しており、awase.exe(awase_tray_window)に一度も通知が届いていなかった。正しいクラス名に修正し、失敗時は log::warn! で明示的にログを残すようにしたconfig.toml パス解決が awase.exe と非対称だったバグを修正awase.exe はコマンドライン引数で明示パスを指定できるが awase-settings.exe はこれを無視しており、異なる config.toml を編集してしまう恐れがあった。優先順位を揃え、編集中のパスを画面上部に常時表示する機能も追加したWarmupKind::FreshF2/ReWarmup/ProbeWithSettle 等の ColdReason×long_idle 行列)と捨て駒キー機構(SacrificialWarmupCoro/ImeOffOnWarmupFsm)を物理削除し、romaji を1文字ずつ送って確認する per-VK confirm 方式に一本化したprobe_fsm.rs)と TSF(gji_warmup_coro.rs)で重複していた per-VK confirm ループを共通実装に統合(正味 -82行)timed-fsm に StepCoro::prime()(ダミー入力なしの self-priming)を追加awase-yab-editor を awase-settings に統合し、削除した(コードを再利用する価値はあるが、別バイナリに分ける価値は無いという判断。CI/配布物/インストーラで2バイナリを同期し続けるコストの方が実利を上回っていた)layouts_dir/config.toml のパス解決を awase::paths::resolve_relative_to_exe に一本化し、cargo run/cargo build で target/debug/ 配下から起動した場合にワークスペースルート直下の layout/nicola.yab を見つけられなかったバグを修正c3fa08e)に「配列プレビューの実装が固まっていない」として非表示にしていたタブを再表示egui::Grid が行内 add_space() によるカーソル移動を許可しないことが原因。上記2点に阻まれて実データで描画されたことが一度も無く、今まで誰も踏んでいなかった潜在バグだった)awase-settings にログファイル出力(awase-settings.log)+ panic フックを追加。GUI サブシステムでコンソールが無いため、今まで panic してもログに一切残らなかった.yab を毎回同期的に読み込んでいたためウィンドウ生成〜最初の描画までの間が延びていた問題を修正し、遅延読み込みに変更.yab Shift 面)で MS-IME の Shift 単独タップ誤検知が発火する問題を打ち消す既存の安全網は維持しつつ、hold 方式固有の ASCII パススルー層(shift_plane_halfwidth)のみを撤去したSendInput がフックにすら到達しない)、GJI では機能を無効化した(MS-IME のみ対応)。詳細は docs/known-bugs.md BUG-25、docs/experiments.md エントリ06〜09US (ANSI 104) キーボード対応
crates/awase-windows/src/scanmap.rs に US 配列専用のスキャンコード⇔物理位置テーブル(scan_to_pos_us/pos_to_scan_us)を追加し、KeyboardModel::{Jis,Us} に応じて使い分けるよう配線general.keyboard_model("jis"/"us")設定を再導入。2026-07-06 に「一度も配線されなかった」として撤去された同名フィールドを、今度は .yab パース・HookConfig(フックの scan_to_pos テーブル選択)まで実際に配線した上で復活させたKeyboardModel::Us.row_sizes() の row0 を 13→12 に修正(グレイブキーは物理キー非対応としてグリッド外扱い。旧値は一度も実行されなかった未検証コードの誤り)layout/nicola_us.yab を追加(layout/nicola.yab から JIS 専用キーの列を除去したもの。共有するスキャンコードの値はそのまま流用)keyboard_model = "us" かつ 無変換/変換キー前提の既定値(left_thumb_key/right_thumb_key/[keys] の各ホットキー)が残っている場合、起動時検証で警告するよう AppConfig::validate を拡張KeyboardModel::Jis 固定のまま)親指キーに Ctrl/Alt/Win を割り当てても機能しないことが判明(engine/tests.rs)
VK_LMENU/VK_RMENU(Alt)を親指キーの代替として一度推奨したが、
実際にはそのキーの KeyDown 自体が ModifierState::is_os_modifier_held() →
bypass_reason の OsModifierHeld に即座に該当し、PendingThumb に一切入らず
素通しされる(同時打鍵検出そのものが機能しない)ことが判明。Alt に限らず
Ctrl/Win も同様に不可test_ctrl_alt_win_thumb_key_never_enters_pending_due_to_os_modifier_bypass で
この制約を固定。Shift は is_os_modifier_held() の対象外のため PendingThumb
には到達できる(test_thumb_alone_timeout_suppressed_when_thumb_is_os_modifier
で単独タップの suppress を確認済み)が、Shift 面機能との相互作用は未検証timeout_pending_thumb に、親指キーが OS 修飾キーの場合は composing に
関わらず単独タップの生 VK 送出を suppress する防御を追加(ClassifiedEvent/
PendingThumbData に modifier_key を伝播)無変換ソロ連打による緊急 Engine OFF が誤発動しやすかったのを修正
user_enabled が false になる実機事例が発生(2026-07-08)。一度発動すると Ctrl+変換(ime_on)等の通常のキー操作では user_enabled が戻らず、「何を押しても直らない」状態になっていたSOLO_OFF_TRIGGER_COUNT, src/engine/nicola_fsm.rs)、誤発動しにくくしたCtrl+Shift+変換 で復帰できること」をその場で把握できるようにした。詳細は docs/adr/055-engine-off-solo-triple.md の追補Chrome/Edge で conv mode の一発誤読が GJI を実際にカタカナへ固定する不具合を修正(BUG-19)
GetForegroundWindow() 基準の conv 読み取り(get_ime_conversion_mode_raw_timeout)が、Chrome_WidgetWin_1 と GJI 候補ポップアップ(Windows.UI.Input.InputSite.WindowClass)の間でフォーカスが往復する際に一瞬だけ誤ったカタカナ conv を拾うことがあり、これを ConvModeMgr が無条件に確定していたsend_eager_tsf_warmup)が鵜呑みにし、VK_DBE_KATAKANA を実送信 → 一過性の誤読が GJI の本当の状態としてロックインされ、以後の入力が全部カタカナ化し、さらに KatakanaShadowOff 救済ロジックが繰り返し IME OFF/ON を往復させて先頭文字の literal 漏れを誘発していたConvModeMgr::update_from_conv に、非カタカナ→カタカナ遷移限定のデバウンス(ImeKindDebounce と同一の「2 tick 連続確認」パターン)を追加ConvModeMgr)しか保護しておらず、classify_conv_transition(belief 更新・KatakanaShadowOff 等の engine 同期)は raw conv を直接再解釈しており同じ誤読に無防備だった。classify_conv_transition の引数を conv: u32 から ConvModeMgr::get() 由来の ConvMode に変更し、warmup と belief/engine-sync が同一の確定値を参照するよう統一した。詳細は docs/known-bugs.md BUG-19KatakanaShadowOff/NativeToggleShadowOff が発火すると、UserImeSetIntent{Command} を偽装して desired_open を直接書き換えてしまい、engine が勝手に ON へ戻る別経路の再発があった。これを EngineSync::ReportOpenInference に分離し、desired_open を書き換えず ObserverReported(ObservationSource::ConvOpenInference, Medium confidence)として記録するだけに変更。実際の補正判断は既存の drift correction(BUG-20 で OFF 方向も修正済み)に委譲する。明示的なユーザー意図が一度も無い間はこの観測単独で補正を発火させない source-aware gate も追加したChrome 入力中、CLSID ベース IME 種別の単発誤検出で GjiFsm が単語ごとに再構築され cold が発火し続ける不具合を修正(BUG-17)
gji-io-monitor ワーカースレッドが 2 秒ごとにポーリングする ITfInputProcessorProfileMgr::GetActiveProfile の単発フリップを WM_IME_KIND_CHANGED としてそのまま main スレッドへ伝播しており、set_active_ime_kind が種別変化のたびに warmup 戦略(GjiFsm/MsImeStrategy)を無条件で新規生成 → 確立済みの OnWarm/OnComposing を破棄していたVK_IME_OFF→VK_IME_ON トグルを送信すること自体が誤検出の引き金となり、「reinit → 誤検出 → GjiFsm 再構築 → 次の単語も cold → 再度 reinit → …」という自己増幅ループを形成していた(実機ログで cold_seq が単語ごとに 392→401 と climb、2 回の "StartComposition while engine off" 警告が CLSID ポーリング周期とほぼ一致する 2146ms 間隔で観測)tsf/gji_monitor.rs に ImeKindDebounce を追加し、同じ新種別が 2 tick 連続で観測されるまで確定させないようにした。詳細は docs/known-bugs.md BUG-17cold_warmup.rs::preamble()(cold warmup のたびに実行)が conv_mode.get() を無条件に real IME へ書き戻していたため、一度誤って確定した belief がフォーカス往復のたびに再アサートされ続けて自己増幅する経路が残っていた。ConvModeMgr::needs_conv_restore_write/mark_conv_restore_written を追加し、同じ確定 mode への復元書き込みを1回だけに制限したcold_warmup.rs/probe_io.rs の IMM32 書き戻し経路にしか配線されておらず、根本原因分析自体が名指ししていた output/mod.rs::send_eager_tsf_warmup(確定キーのたびに高頻度で発火する eager warmup の charset 選択)だけが無防備なまま残っていた。ここにも同じスロットルを適用し、確定済み mode への charset-changing warmup キー(F1/F0 系)送信を1回に制限したDIAG_FORCE_HIRAGANA_CHARSET 診断フラグを新設し、charset 追従ロジック(F1/F0 warmup・IMM32 conv_target 書き戻し・F1 leading warmup 前置)を丸ごと無効化して常に Hiragana 扱いにする実験を開始した(観測・ログ自体は継続、行動への反映だけを止める)IME を ON にした直後の最初の1文字で、正しく変換されているのに不要な BS 訂正が発生する不具合を修正(BUG-24)
is_partial_literal()(tsf/warmup/literal_detect_fsm.rs)は、今回送った romaji 自身の確認信号(候補ウィンドウ SHOW / GJI I/O 変化)ではなく、送信前に確定していた無関係な代理指標 nc_fired/gji_resumed(別の F2 warmup キーへの応答有無)で部分リテラルを判定していた。ColdReason::requires_settle()(FocusChange/NativeF2Consumed/SetOpenTrue — IME が既に ON の状態でも発生しうる)直後は、DIAG_DISABLE_PROACTIVE_TSF_WARMUP(cold-start の予防的 warmup を丸ごと無効化し reactive 検出のみに委ねる診断フラグ)下でこの代理指標の元になる確認送信自体が無条件でスキップされるため、nc_fired が構造的に常に false になり、実機で確実に再現していたcomposition_fsm.rs::ConfirmKeyDown と platform.rs::on_reinject_key が、warm な確定キー(Enter/Space/Escape)でも無条件に MarkCold/GjiCompositionReset を発行していた副作用も特定・修正(連続 typing 中の余分な cold 化が literal-detect の露出機会を増やしていた)tsf/observer.rs の literal_session_confirmed 系、DIAG_LITERAL_SESSION_SKIP)を追加し、反応速度を落とさないようにしたis_partial_literal() を初めて通る文字)は直っていなかったため、最終的にセッション最初の1文字に限り romaji の VK を1つずつ送信し、送信した VK 自身への CompositionConfirmed/SuspectedLiteral を確認してから次の VK を送る設計(ProbeAction::TransmitSingleVk、gji_warmup_coro.rs)に変更した。2つの VK をまとめて送るために生じていた「どちらの VK の効果か区別できない」問題は、VK 送信の間に意図的な確認ポイントを挟むことで構造的に解消した。実機で症状の解消を確認済みTeamsWebView が IMM32_UNAVAILABLE_CLASSES に未掲載で Standard 分類のまま扱われ、Chrome 系と同じ Chromium ベースにもかかわらず信頼できない IMM32 open status 読み取りが試みられていた。Chrome_* と同様に Imm32Unavailable / TsfNative に分類するよう追加kp_stage_focus_probe の完了処理に sanitize_focus_probe_open_status() を追加し、apply 時点の current_app_profile が IMM32 open status 非対応(Imm32Unavailable/TsfNative)なら probe.ime_on を強制的に破棄するよう防御を追加。分類が後から変わるアプリでも stale な probe.ime_on を信用しなくなるImmCapabilityStore(ImmGetDefaultIMEWnd=NULL 検出・IME 検出ミス閾値超えから学習し cache.toml に永続化)は従来、学習・保存するだけで挙動を変える消費者が存在しなかったStandard かつ学習値が Unavailable のクラスを Imm32Unavailable に降格するようにした(静的リスト未掲載の IMM-broken アプリで無駄な SendMessageTimeoutW を踏まなくなる)Works 回復学習で降格は自己解除。降格は [imm-learning] profile 降格 の INFO ログで監査可能、誤学習は cache.toml の [imm_capability] を手編集で解除WM_PROCESS_DEFERRED / WM_IME_KEY_DETECTED)、構築サイトゼロの enum variant 群(ImeEffect::RequestRefresh、ActivationState::Pending+PendingReason、InactiveReason::NonTextFocus、DecisionOrigin、DetectionSource::UiaAsync、ConvModeAuthority::TemporarilyUnowned、ColdReason::SessionExpired、ChordKind::CtrlHenkanImeOn+ImeEvent::ChordStarted)を撤去win32-async::AtomicWatcher + notify_all、write-only の composition_probe カウンタ)を撤去(待機はポーリング方式に置換済みだった)used_eager_path)、恒真化していた EffectOrigin/SetOpen.origin の畳み込み、dead write(GjiState::OnCold.saw_native_f2)の除去MsImeStrategy は「MS-IME は常にウォーム」前提で cold-start 保護がなく、IME OFF→ON 遷移直後 ~130-300ms(実測)の送信で先頭 VK がリテラル化していたImeModeFsm が NATIVE 未確認のとき romaji を MsImeReadyCoro に defer し、IMC_GETCONVERSIONMODE ポーリング(10ms 間隔)で NATIVE ビットを確認した瞬間に送信MS_IME_READY_CONFIRM_MS (400ms) は安全弁のみ(IMC が読めない環境では強制送信 + give-up latch で毎キー probe 化を防止)WM_IME_KIND_CHANGED で HKCU\Software\Microsoft\IME\15.0\IMEJP\MSIME の IsKeyAssignmentEnabled / KeyAssignmentMuhenkan / KeyAssignmentHenkan を読み取り、競合時は警告ポップアップを表示。「はい」で ms-settings:regionlanguage-jpnime(Microsoft IME 設定ページ)を直接開くkeyboard_model: レイアウトパースが JIS 固定で一度も配線されていなかった(設定画面の jis/us 選択は無効だった)output_mode: アプリごとの自動注入方式選択(InjectionMode)に置換済みで、書き込みのみの死に設定だったhook_mode: Relay に一本化(Filter は relay 系機能の登場以降テストされていないレガシー経路のため実装ごと削除)confirm_mode は生きた設定として存続(デフォルト wait のまま)。n-gram 系の詳細設定は「n-gram 予測」モード選択時のみ有効化されるよう UI を連動app_overrides(force_text / force_bypass / force_vk / force_tsf)と post_bypass(tmux prefix 等の素通し)を GUI から編集可能にengine_off_solo_triple(単独3連打でエンジン OFF、Ctrl スタック時の緊急脱出用)を追加config.toml の直接編集に委ねるconfig.toml の app_overrides / post_bypass / レイアウト設定は従来どおり有効VkCode::from_name にも VK_F13〜VK_F24 のパースを追加write_focus_probe(false) の偽観測を毎リフレッシュ注入していた(「非TSFウィンドウには日本語IMEが存在しない」という誤前提、ce45b82 の revert)write_focus_probe の呼び出し箇所を実 probe 経路に固定post_to_main_thread の PostMessageW(NULL) は「呼び出しスレッド自身への投函」であり、gji-io-monitor 発の WM_IME_KIND_CHANGED が消失 → MS-IME 環境でも warmup 戦略がデフォルトの GjiFsm のまま迷走していた(検出層は正しいのに出力層だけ壊れる split-brain)PostThreadMessageW(engine_thread_id()) 化 + メッセージループ開始時の IME 種別 pull 同期。実機で MicrosoftIme 検出の 3ms 後に MsImeStrategy 切替を確認f2_warmup_owned)に限定し、MS-IME では物理キーを素通しLLKHF_INJECTED 付き VK_KANA を hook で swallow し、全 VK_KANA 到達に注入元特定用の診断ログを追加is_roman_reliable=true の文脈のみ発火する仕様に変更(TsfNative idle 経路では実質無効)。経緯は docs/experiments.md エントリ 03 参照UnicodeColdWarmupFsm が飛行中に新たな Unicode 文字が来ると FSM が上書きされ deferred_chars が失われていたpush_deferred_unicode_chars を TickableFsm に追加し、飛行中 FSM に追記できるようにして上書きを回避WM_IME_KIND_CHANGED を起動時に送信せず、MsImeStrategy の切り替えが遅延していたWM_IME_KIND_CHANGED を post し、起動直後から正しい warmup 戦略を適用start_unicode_cold_warmup / flush_unicode_cold_deferred_chars を WindowsPlatform に追加し、send_keys と dispatch_gji_response の重複コードを統合fmt_conv() / store_gji_warmup_if_probing() で probe_io.rs の重複ブロックを集約observer::gji_idle_ms() で 2行の idle 計算を関数化(6箇所削減)dispatch_gji_event() で gji_on_event + dispatch_gji_response の 4行パターンを 1行化(5メソッド)Output::on_f22_f21_sent() で IME OFF→ON 通知の 3行パターンを 1行化(2箇所)KeyInjector::format_vk_run() で VK 列フォーマットを関数化(send_vk_runs* 3メソッド共用)SendInput 7箇所を既存の win32::send_input_safe() に統一し unsafe ブロックを撤去settle_until) を配線し、Engine/ImeEffect::SetOpen の全呼び出し経路(キーボード入力・フォーカス変更通知・IME リフレッシュポーリング・ホットキー等)を execute_from_loop/execute_from_hook の2箇所で一括ガードAppImeProfile::from_class_name の分類優先順位により Windows Terminal (CASCADIA_HOSTING_WINDOW_CLASS) が TsfNative に一切分類されない仕様を見落として「非 TSF ネイティブ」と誤判定していた5箇所を is_effectively_tsf_native に統一classify_transition がひらがな復帰を検出できず ObservedEisu が残留してエンジンが Inactive(NotRomajiInput) になっていたclassify_ime_snapshot に stale 回復ブランチを追加し、ImmCross アプリで conv_mode が非英数に変化した時点で AssumedRomaji へ自動リセットclassify_fetched_snapshot 経由に統一 (c2c8b55)InputModeState::ObservedEisu を新設し「shadow=ON だが実際は半角英数直接入力」を明示的に区別idle_conv_check が ObservedEisu を検出すると自動で IME OFF + Engine 非活性化を発行SetOpen(true) 直後に ObservedEisu が残っているケースは AssumedRomaji にリセットして Engine を即活性化active_ime_kind) のプロセス中固定 (ADR-073) など、実行時に確定した状態をリセットする唯一の確実な手段として位置づけConvModePolicy による conv_mode 変更の一括ゲートを導入 (2826248, cc9f745, af3b776) (ADR-064)Output に conv_mutation_allowed ゲートを追加し、conv_mode への書き込みを一箇所で検証可能にis_romaji_mode: bool を ConvModePolicy 型に置き換えて意味を明確化MsImeDirectStrategy の DirectInput 切替を冪等な VK_IME_OFF に統一ImmCrossProbe が IME 状態を誤認識するバグを修正VK_KANJI トグルから冪等な VK_IME_OFF に変更TsfWarmupCoordinator へ移管)conv_mode_authority の再同期漏れによる IME/Engine desync を修正 (e2199e7, c887da8, 1f96598) (ADR-072)conv_mode_authority を再同期し、パニックリセット直後や2回目の Ctrl+変換 で古い権限値が残る問題を解消already_matched 判定を全 IME 種別で一貫させ、candidate_was_seen を誤って混入させないよう修正user_enabled=true だが ime_on=false)を修正VK_IME_OFF→ON + write_bytes 検出ベースの warmup に置き換え、vim 等との互換性を確保read_ime_state_fast が一時的に is_japanese_ime=false を返し、エンジンが NotJapaneseIme で非活性化するバグを修正apply_focus_probe 内で grace 期間の判定を set_is_japanese_ime より前に計算し、shadow grace active 中は false へのダウングレードを抑制(true への更新は常時許可)imc_open と is_japanese_ime の grace 保護を対称化PlatformState を FocusStore/GateStore/KeymapStore に、Runtime を FocusTracker/RefreshScheduler/ImeCoordinator に分割(ADR-069) (a7a1e23, 811036a, 8aad49a)ApplyBelief → OpenBelief にリネームし reduce_open_belief 純粋関数に統合(IME apply 判定ロジックを一箇所に集約・単体テスト容易化)(ADR-070) (1e09e90, 8c34984)RuntimeOutbox/RuntimeRequest イベントバスを導入し Output → Runtime の逆依存 (with_app()) を撤去 (4782e3e, 7568180)TsfWarmupCoordinator / KeyInjector / ImeApplyPlanner を巨大化していた Output から抽出 (03ebfc9, e1993bf, 080e96d)ConvMode/Charset 判定を nicola クレートへ移動し純粋関数化、#[cfg(windows)] ゲートを個別モジュール単位に緩和して Linux 単体テストを追加(ADR-065) (b1ab86f, 5ee724b, b27a218)MsImeDirectStrategy(VK_DBE_HIRAGANA / VK_DBE_ALPHANUMERIC)による冪等 ON/OFF 制御(ADR-063)WM_IME_KIND_CHANGED でランタイムに GJI / MS-IME を切り替えcache.toml に永続化し再起動後のコールドスタートコストを削減gji.rs(config1.db パッチ・プロセス管理)を完全削除(-692 行)gji_keybinds_ok フラグ・Observer の config1.db 監視ループを撤去gji_write_idle_ms ヒューリスティックを撤去し判定精度を向上nc_fired を昇格し LiteralDetect 誤検出を抑制IMC_SETCONVERSIONMODE で NATIVE | FULLSHAPE | ROMAN を強制し KATAKANA を落とすGjiWarmupFsm / LiteralDetectFsm / SacrificialWarmupFsm / TsfProbeMachine を StepCoro に置き換え(ADR-053)timed_fsm::coro モジュールとして昇格(118b3cf)InjectionModeStore を追加し、セッションをまたいで注入モードを記憶imm_cache.toml を cache.toml に統合(10918c2)#[allow] を #[expect] に一括置換(全クレート)(c2b0685)unsafe extern を明示(Rust 2024 lint 対応)(f645d3c)timed_fsm::coro が async/await 構文を使用)Ctrl+B) や screen など、コマンドキーの直後の次打鍵を NICOLA スキップする設定を追加 (a67ebb5)[[post_bypass]] セクションで対象キーと待機時間を指定可能Ctrl+J 問題の完全修正
SacrificialWarmup の安定化
composition_was_seen が最初の tick で false になる drain 順序バグを修正 (e40a2eb)WezTerm
*mut c_void に修正(isize への暗黙変換が Windows API 境界で UB)(ff1f092)GJI FSM
StartProbe で即 WarmupComplete を dispatch(OnCold 固着バグ修正)(444e9a6)その他
ValidatedConfig に post_bypass フィールドを追加(ビルドエラー修正)(089858d)sleep_ms に u64 を渡していた型ミスマッチを修正 (ddc6be3)to_hwnd() を追加し raw cast を一箇所に集約 (1932948)gji_candidate_visible を env 経由で参照(直接ポーリング撤去)(19f4372)plan / observations フィールドを削除 (61c4c12)gji_resumed を設定して部分リテラルを救済chars.len() から 2 固定に修正new_gji_resumed に切り替えて GJI resume 後のリテラル誤検出を抑制pending_tsf を Box<dyn TickableFsm> に換装し Chrome 専用 probe を追加 (51901c0)TsfProbeMachine / GjiWarmupFsm / LiteralDetectFsm / ChromeProbe が共通インターフェースを実装 (d22e987)GjiFsm / MsImeStrategy を統一インターフェースで扱えるよう抽象化 (eb8b9d4)ProbeStatus を Authorized+Executing に分離し Cell 3本を撤去、OutputActiveGuard を Output に移動 (0ca92b2, 65e0a1a)PassthroughQueue を抽出・PhysicalKeyDisposition::plan() に F2 ケースを統合 (3cfc57b, 005ed17)awase.log に記録するフックを追加 (de0226a)CHANGELOG.md → changelog.html を自動生成するワークフローを追加 (efc4310, 6fb7a38)gji_resumed 後の false-positive BS を修正 (b754277)StartProbe が上書きされる debug_assert パニックを修正 (a5a9412)consecutive_count をリセットするよう修正 (cbd1946)WM_CLOSE を明示的にハンドルして意図しないシャットダウンを防止 (c924eed)TransmitPlan / ProbeObservations 導入により FSM レイヤー境界を整理 (3c36f21)suppress_physical を PhysicalKeyDisposition に分離 (8a045bb)shadow_on を無視して強制送信するよう変更shadow_on / jp が常時 false になっていた) (2225578)DirectInput\tF21\tIMEOn エントリ欠落により F21 が無視されていた (9d11cd7)ime_on=false が残るバグを修正 (bfad1a8)on_key_down と対称にバイパスするよう修正 (5904d67)VecDeque) の push を push_back に修正 (3823f12)awase-gji-setup.exe を配布物から削除(機能は awase 本体に統合済み)config: #[serde(default)] 構造体に昇格して default_* 関数群 18 個を撤去(-142 行)vk: enum VkMarker を導入して bool/fn_ptr によるマーカー選択を型統一fsm / nicola_fsm / ngram: 重複コード・ラッパー関数・dead code を整理(合計 -270 行)最初の安定版リリース。
Full Changelog: https://github.com/cuzic/awase/compare/v0.1.0...v1.0.0