mirror of
https://github.com/stablyai/orca.git
synced 2026-10-20 08:03:28 +00:00
The native suite only ever exercised ibus-hangul, so every non-Korean IME regression had to be caught by hand. Generalize the runner and spec over an engine profile and add ibus-libpinyin (Pinyin), ibus-anthy (Romaji/kana) and ibus-unikey (Telex) as matrix legs, covering the candidate-window, multi-commit and rule-based rewriting shapes that Hangul alone does not produce. Session config (apt package, GSettings, `ibus engine` name) and the keystroke scripts live in separate files because one is loaded by the Node runner and the other by the Playwright spec. They are joined only by the engine id, so the contract test asserts the two sets agree and that the workflow matrix covers exactly them. Only the hangul expectations have been recorded from a real run. The other three engines' committed glyphs are predicted from their input rules, so the exact-text oracle is `expect.soft` for them while the structural oracle stays hard: every repetition must produce identical bytes, in the engine's script, with xterm's onData matching what the PTY received. That is the half that actually detects the duplication and leaked-ASCII bugs, and it holds without knowing the glyphs. A first green run turns each `expectationsVerified` to true. fail-fast is off so a drifting libpinyin candidate cannot mask a hangul regression, and evidence uploads are per-engine because upload-artifact rejects a duplicate name.