Repository navigation
v0.8.1 — QA automation infrastructure
QA automation infrastructure. Adds a headless QML/UI verification suite that closes the gap left by the v0.8.0 fast-path subagent workflow.
What's new
voiceagent-qatest.sh— single-command headless QA gate. Runspytest tests/thentests/qml/qmltest_main.py(aQtQuickTest.QUICK_TEST_MAIN_WITH_SETUPdriver that registersi18nCtxon the test engine before anytst_*.qmlparses).- 16 new Quick Tests under
tests/qml/:tst_session_setup_pane.qml— Kirigami.FormLayout shape, FormData.label rows, wideMode flips with compactMode (PR #22).tst_main_window.qml— page-header actions and verbose-log toggle reachability (PR #22).tst_scroll_mode.qml— locks in inertial vs direct branching ofMainWindow.scrollList(PR #23).
tests/test_replay_toast.py— pytest verification of the replay-failure toast wiring round-trip into the Kirigami passive-notifications overlay (PR #24).
Bug fix discovered by the new suite
The PR #24 QML wiring used Connections { target: voiceAgent; function onReplayFailed }, but Qt does not auto-camelCase a snake_case Python signal (replay_failed) for runtime Connections-handler resolution, so the toast silently never fired. Switched to Component.onCompleted: voiceAgent.replay_failed.connect(...), which binds correctly. The new test_replay_toast.py locks the wiring in.
Test gates
| Gate | Coverage |
|---|---|
pytest tests/ |
Python-side logic + pytest-qt interaction |
voiceagent-compiletest.sh |
"does QML load?" — qmllint + real-engine load |
voiceagent-qatest.sh |
"does QML behave?" — Quick Tests + interaction |
The user's manual smoke test now reduces to subjective items only: visual layout feel and animation tempo.