Gitea prep: .github becomes .gitea (the act runner looks there), and every actions/cache + Swatinem/rust-cache step is commented out until the self-hosted instance has a cache provisioned. The remaining marketplace actions (checkout/upload-artifact are act-compatible; msys2/setup-msys2, dtolnay/rust-toolchain and softprops/action-gh-release need a runner test / replacement) are a follow-up. tests: the two gpui keystroke tests that flaked on Windows CI (undo pair, snapping toggle — each once, values identical to the pass state, Global-route keys) now dispatch each key with a double park. The root cause is not fully pinned: the loss happens inside gpui's synthetic key dispatch on Windows (both tests hold every test lock; production is unaffected). The CI retry-once remains the backstop. The earlier idea of advancing the simulated clock to flush gpui's pending-input timer is off the table: the mock engine's playback ticks with executor time, so a clock advance moves the playhead out from under the assertions (observed: playhead 14 vs expected 9).