test(updater): cover the deferred clear of a finished manual run (#485)

The applet services General -> Updates requests through the persisted
`widgetUpdateRequest` runtime key. An accepted request is marked
`running:<mode>` and only `onBusyChanged` releases it, because the
controller settles `busy` inside its own completion handling. That
handler had no coverage: the existing tests extracted only
`onStatusRecorded` and `onCheckSucceeded`, and every case set `busy`
false and then called `serviceWidgetUpdateRequest()` by hand, so the
deferred path never ran.

`configGeneral.qml` binds both update buttons and the busy indicator to
that key being empty. Inverting the handler condition therefore leaves
the page with a permanent spinner and both buttons disabled, and nothing
in the suite noticed.

The harness now extracts `onBusyChanged` and attaches it to the fake
controller, so the test runs main.qml's own condition. Each case drains
the event loop after the rising edge first: the marker must survive
while a run is active, so only the falling edge can release it. Without
that drain the assertions also pass against the inverted handler, whose
call queued when `busy` rose still clears the marker.

Also corrects the ownership contract in docs/development.md, which still
described `checkNow()` as the module's only entry point even though
#481 added `runNow(install)`, the `initialAvailableVersion` input, and a
deliberate bypass of the check and auto-install settings. Rewraps an
overlong line in docs/usage.md.

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
08710883e0Simone committed on 10/10/2026, 9:21:26 PM· committed by GitHubparent9b5f7c6
3 files changedLine totals unavailable