[qt/qt-creator/qt-creator]: Summary of bulk changes made
KDE Git Services - Bulk Change <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git repository change summary for qt/qt-creator/qt-creator Pushed by mirror-service into branch 'master'. Changed from 70717513a205bf994091efd441ba5c3f2b11e63e to 5a071dc130a93ae785384dc93f7d858df2685ec1 Acknowledgement was received that this change introduces only existing code that has been pushed to another public open source repository. This change contains the following new commits: Git commit c2e14a22542565f66242b44fd73060bf3ded2a05 by hjk on 19/08/2026 at 06:56.. Utils: Recognize what HarmonyOS calls itself "uname -s" prints "HarmonyOS" there, which nothing mapped, so a device whose OS is read that way ended up with no type at all: CmdBridge refused with "Unknown os type: HarmonyOS" and the slow shell file access carried everything. Assisted-by: Claude Code Change-Id: Ie71fb381ad0f2b6ec4f70f4e7786af21c09ee6c5 Reviewed-by: Marcus Tillmanns <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/c2e14a22542565f66242b44fd73060bf3ded2a05 Git commit 2a2d46ad1646fb94ec261284e6dc55966de4adbc by hjk on 19/08/2026 at 06:56.. CmdBridge: Let a device prepare the bridge before it is uploaded Some systems execute only binaries carrying their own signature, which the bridge cannot have when Qt Creator is built anywhere else. Hand the bytes to the device on the way to the upload, so it can make them acceptable. Assisted-by: Claude Code Change-Id: Ie2fcb77a32c8520661849e225800d21414f216d9 Reviewed-by: Marcus Tillmanns <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/2a2d46ad1646fb94ec261284e6dc55966de4adbc Git commit 36a4edddc0f868f1b2681b3a1eb583b6500e09b2 by hjk on 19/08/2026 at 06:56.. McpServer: Say why list_directory found nothing An empty directory, a path that is not there and a device that is not configured or not reachable all came back as an empty list, so a caller reads "cannot look" as "nothing there" - which is exactly what happened here: a remote listing answered {} and the device looked broken while it was fine, only unknown to this instance yet. The answer now carries a reason: ok, not_found, not_a_directory, or, for a remote path, not_found_or_device_unavailable - the two cannot be told apart without the device internals, and saying so beats guessing. Assisted-by: Claude Code Change-Id: I87e5b3e14e8f39a6a4c86aa4f8459eba9d5a1dc4 Reviewed-by: Marcus Tillmanns <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/36a4edddc0f868f1b2681b3a1eb583b6500e09b2 Git commit 51cb6557b452eefd229b1e23698ed30a0c579d42 by hjk on 19/08/2026 at 06:56.. McpServer: Add unload_plugin The counterpart to load_plugin, so a scripted run can check what a plugin leaves behind: load it, look, take it out, look again. Without it the only way to reach that code was to close Qt Creator. Assisted-by: Claude Code Change-Id: I20345c9365293fcc6cb3b324d0bdb24ef0c1ce1f Reviewed-by: Marcus Tillmanns <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/51cb6557b452eefd229b1e23698ed30a0c579d42 Git commit ae6399d9fa62677fd3233204c5ec16c699f6abe4 by hjk on 19/08/2026 at 06:56.. McpServer: Let read_pane see every output pane It listed the panes in the plugin object pool, which is three of them, and reported that list as the available ones - so General Messages, the pane most worth reading when something went wrong, looked like it did not exist. It now asks Core, and finds ten. Assisted-by: Claude Code Change-Id: I917be8b8365e3e5afcac1169bbee0a13074132b9 Reviewed-by: Marcus Tillmanns <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/ae6399d9fa62677fd3233204c5ec16c699f6abe4 Git commit e0d20969e1db9af97e66f5f32ce1531f28e363b9 by hjk on 19/08/2026 at 06:56.. McpServer: Open a preferences page, and double-click a row A settings page could not be reached at all: Preferences is a mode, and triggering its action from outside does not bring it up, so a page's widgets - which are built the first time it is shown - never existed for a scripted run to find. show_settings_page opens one by id. click_item grew double_click for the same reason: a row that acts only on a double click ignored two single ones, so what the row stands for could not be opened. Assisted-by: Claude Code Change-Id: I15046c6ffa7888bbd520247a2975c7feed76a2c3 Reviewed-by: Marcus Tillmanns <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/e0d20969e1db9af97e66f5f32ce1531f28e363b9 Git commit 2f74ab0cb159b0093a18c071b27ea436aeb28333 by Eike Ziller on 19/08/2026 at 07:46.. Revert "AutoTest: Work around failing options handling" This reverts commit 2b08d41b0c682c8ad04dbba9b66420f6af77ed36. This is no longer needed with the passing of command line arguments to iOS applications being fixed with commit 719f787805edfde9fee4eafab2feee756ee77adc Change-Id: I8a796110ff1a8d6734e9d006118105c31410c493 Reviewed-by: Christian Stenger <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/2f74ab0cb159b0093a18c071b27ea436aeb28333 Git commit 4b6ac5cbcee035087a4481e372bcbe9261434a93 by hjk on 19/08/2026 at 07:48.. Core: Let a caller find the output panes and their windows There was no way to ask which output panes exist: every pane registers itself with the manager, but the list is file-static, so a caller had to scan the plugin object pool - where only three of them ever end up. And three panes that do show a Core::OutputWindow never said so, leaving outputWindows() empty for General Messages, Version Control and Test Results. Assisted-by: Claude Code Change-Id: Iad605636beb73750cb111af88e9d9cbe9af3f519 Reviewed-by: Eike Ziller <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/4b6ac5cbcee035087a4481e372bcbe9261434a93 Git commit deaa17dea46b030afef501889135a9a9cacf7222 by Christian Stenger on 19/08/2026 at 07:51.. Axivion: Guard project info access in task tree setup handlers Dereferencing an unset std::optional reads its uninitialized storage. Check for the current project info at runtime of the handlers, not at the creation time of the recipe. As communication and processing is asynchronous the optional can be reset in between. Stop the task if this is the case to avoid accessing uninitialized string data and constructing a URL holding garbage. Original issue likely fixed as side-effect of d55d73c6a8d98a349aeb889e1af2d3f76e54f621, this patch here guards for similar issues of two different recipes. Fixes: QTCREATORBUG-33008 Change-Id: I6a02c5bb8e50c36969a150eccd115345e15e516a Reviewed-by: Jarek Kobus <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/deaa17dea46b030afef501889135a9a9cacf7222 Git commit 7f3f615ed4ba705991231260b4b85d8b0b2c9e97 by Eike Ziller on 19/08/2026 at 07:53.. macOS: Fix that we got unwanted FileOpen events On macOS, AppKit interprets all command line arguments (as passed to the process) and if that is an odd number and the last one looks like a file, that get passed to the application as an "openFile" request. Qt has a workaround for that, which suppresses this if that argument is also present in QApplication::arguments(), see application:openFiles: in qcocoaapplicationdelegate.mm But to benefit from the workaround in Qt we need to pass all the arguments to the QApplication. In turn, we need to tell the PluginManager about all the options that it should ignore, so that doesn't complain about unknown command line options. Fixes: QTCREATORBUG-30383 Change-Id: I45836fa0d218c11fe2f7d69cd8c853158d31a4fb Reviewed-by: Christian Stenger <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/7f3f615ed4ba705991231260b4b85d8b0b2c9e97 Git commit 23f2ee608716114510058f2316bde9bf673bc378 by Christian Stenger on 19/08/2026 at 08:38.. SquishTests: Adapt to ui changes Extensions mode is gone since 370b26c480d910a2e59b57bc167dbc82ac09d375. Change-Id: I5fb9c43a1c347d9a5e6945438f5d9ca3c37cf36b Reviewed-by: Jukka Nokso <[email protected]> Reviewed-by: Christian Stenger <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/23f2ee608716114510058f2316bde9bf673bc378 Git commit 9ab5c97b8976869eeca866ac618bdd307046999a by Eike Ziller on 19/08/2026 at 09:42.. ProjectExplorer: Fix visible state of active target in project window When double-clicking a kit item in the project window to make it active, the "bold" state of the active versus inactive kits did not update until a forced redraw happened. Inform the model that the items have changed. Change-Id: I62705b5c55be0d5d16b7b5fe03b80500a30ded58 Reviewed-by: Christian Kandeler <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/9ab5c97b8976869eeca866ac618bdd307046999a Git commit ea31bfee6cd20a74520b9704267734df3af18920 by hjk on 19/08/2026 at 09:43.. HarmonyOS: Reach the device's files and run commands on it The device could only be deployed to, by the deploy step calling hdc itself. Give it the file access and the process interface every other device has, so that a FilePath on it resolves and a Process on it runs, which is what any build device support would need. hdc shell is the channel, with three of its traits worked around: it does not forward stdin, it merges the remote stderr into stdout, and it reports neither the command's status nor a failed file transfer in its exit code. Reads and writes therefore go through "file recv"/"file send", and the status comes back in a marker the shell echoes. The test drives whatever device is attached and skips when there is none. Assisted-by: Claude Code Change-Id: I45d0f5eb61843d89a0fb8900d53e7a77744cac88 Reviewed-by: Joerg Bornemann <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/ea31bfee6cd20a74520b9704267734df3af18920 Git commit 7399d9c06f96af76dc4b29718975764c1c8aaef1 by hjk on 19/08/2026 at 09:44.. Core: Copy project-relative paths "Copy Full Path" and "Copy Path and Line Number" copy absolute paths; a path relative to the project root is more portable to share with others. Add sibling context-menu actions for both, falling back to the absolute path when the file is not below the current project. Fixes: QTCREATORBUG-9028 Assisted-by: Claude Code Change-Id: Ib4b0835a1bcacdcf68e1e717ac03c70efd480516 Reviewed-by: Eike Ziller <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/7399d9c06f96af76dc4b29718975764c1c8aaef1 Git commit 221c23e561cfd1395050fa5e68b3195ddb734037 by hjk on 19/08/2026 at 09:44.. ProjectExplorer: Create a device's kits once its compilers are known Tool detection registers MSVC toolchains before their compiler is known: the vcvars environment capture that reveals cl.exe runs asynchronously. Kits were created as soon as autoDetect returned, so a kit could be presented while its compiler command was still empty - 21 s for the second of the two Visual Studio installations on a remote Windows device. Configuring a project in that window passes an empty -DCMAKE_CXX_COMPILER to CMake, which then reports "No CMAKE_CXX_COMPILER could be found" and leaves a build directory that a plain reconfigure does not repair. A toolchain that is not fully known after registration now keeps the device's tool detection open, through the task count that already gates kit creation. MSVC takes such a hold while its capture is running and drops it when the capture finishes, which covers failure and cancellation as well. Detecting a device's tools therefore takes visibly longer before its kits show up: as long as the captures need, about 20 seconds for the two Visual Studio installations above, where the kits used to appear immediately. That is the intended trade - a kit that arrives late is better than one that cannot configure a project. Assisted-by: Claude Code Change-Id: Idfd9510e22ea782d5e31ef86530c978a69a24e30 Reviewed-by: David Schulz <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/221c23e561cfd1395050fa5e68b3195ddb734037 Git commit b6f1c3d7add4c2e2a1ad63e1d999229605c1a59f by hjk on 19/08/2026 at 09:45.. Revert "McpServer: Add unload_plugin" This reverts commit 51cb6557b452eefd229b1e23698ed30a0c579d42. Unloading is considered harmful due to leftover dangling pointers etc. Change-Id: I20345c9365293fcc6cb3b324d0bdb24ef0c1ce1e Reviewed-by: Alessandro Portale <[email protected]> Reviewed-by: Eike Ziller <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/b6f1c3d7add4c2e2a1ad63e1d999229605c1a59f Git commit ec58bc30a0fb726c35222ba9c9e8cd6d0e81ea62 by Eike Ziller on 19/08/2026 at 10:29.. Add zoom shortcuts to Markdown editor preview The text editor part already could be zoomed with the standard shortcuts, but not the preview Change-Id: Icb8ce8479cebcaafb83a21ba6b79fccb37a194a8 Reviewed-by: Marcus Tillmanns <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/ec58bc30a0fb726c35222ba9c9e8cd6d0e81ea62 Git commit 1c31ae70ee1eca72b3840690e2e44001d9c8aa1b by hjk on 19/08/2026 at 10:33.. Revert "HarmonyOS: Reach the device's files and run commands on it" This reverts commit ea31bfee6cd20a74520b9704267734df3af18920. Too early. Change-Id: Ia015745b52d6cf85220477cf382cb094e7604196 Reviewed-by: Marcus Tillmanns <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/1c31ae70ee1eca72b3840690e2e44001d9c8aa1b Git commit c5921fff5ba53fb10831073602a30810f75260ad by Christian Kandeler on 19/08/2026 at 10:33.. ClangCodeModel: Fix some tests Amends 2dd5eb223c07f20bff2fbaf3ce3809da1ec40a61. Change-Id: I74de9aa662796d6b833c0759789e788163ba769d Reviewed-by: Christian Stenger <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/c5921fff5ba53fb10831073602a30810f75260ad Git commit 9d2a6305b624cd52ccc379dce855cf07d0fe7896 by hjk on 19/08/2026 at 11:20.. ProjectExplorer: Don't block a run on a missing remote executable 444f9d642f3 reported an empty remote executable from checkForIssues() as an error. That disabled the Run button outright, and with the button disabled the explanatory message never appeared, so the user was left with a greyed-out Run and no reason for it. Report it as a warning instead, and let a run start past warning-level run-configuration issues (only errors abort). The hint is now shown up front while the run can still be attempted. Amends 444f9d642f330acae41552a5bcd44ef68f0eee06. Assisted-by: Claude Code Fixes: QTCREATORBUG-34860 Change-Id: I3ed34c6e0bbb7c49ad831b3c1b99644c51f4e7b2 Reviewed-by: Christian Kandeler <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/9d2a6305b624cd52ccc379dce855cf07d0fe7896 Git commit dd4fe6955b1188a007ef1fb71913af278df82d4a by Christian Kandeler on 19/08/2026 at 11:29.. HarmonyOs: Remove unused function Change-Id: I4043b0cf609ab1a4239c5682062cce7dae85e3ac Reviewed-by: hjk <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/dd4fe6955b1188a007ef1fb71913af278df82d4a Git commit 8524b01740ccdcdb5eea9e72715f3e98e4577df0 by Joni Poikelin on 19/08/2026 at 11:31.. Fix linkifying Windows paths with drive letters Old code assumed there would only be two slashes in a file url if the path contained a drive letter. Fixes: QTCREATORBUG-34808 Change-Id: I9b0d2824ecd2317e9a46b535e522f43d1ea44415 Reviewed-by: Christian Kandeler <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/8524b01740ccdcdb5eea9e72715f3e98e4577df0 Git commit 3b400fdd5b336ecfc3cbdfdc61464303b241407c by Marcus Tillmanns on 19/08/2026 at 11:32.. CmdBridge: Let the bridge report its own pid A launcher cannot tell that the binary it exec'd actually runs. Over ssh the wrapper echoes the shell's $$ before "exec", so the marker driving SshProcessInterface emit started() proves only that the shell reached the exec - a bridge the device refuses to execute still looks started, and the caller holds file access whose every call then asserts. The shell cannot do better. It has no close-on-exec, so the errno self-pipe that QProcess and posix_spawn use cannot be built there; a shell that fails to exec exits instead of reaching an "||" handler; and a parent that backgrounds the target cannot tell an exec failure from a target exiting 126. Exec failure is an event, exec success is the absence of one. The target can, though, and this one is ours. Have the bridge wrap its own getpid() in the marker as the first thing main() does, and drop the launcher's echo for it. Then the marker means the bridge is running, and no marker means the exec failed - which handleDone() already reports as FailedToStart, joining the buffered stderr into the error string. So the shell's "cannot execute binary file" becomes the message instead of reaching the packet parser as trash. Neither the interface nor its two branches change; they were simply never reached, because the shell satisfied the marker before the exec could fail. exec() keeps the pid, so the bridge reports the same number the shell would have, and signalProcess() is unaffected. The marker goes on stdout, which the launcher parses and strips, while the protocol stays on stderr. Strictly opt-in, so nothing changes for a launcher that does not consume a marker: the device hands the marker to FileAccess, which passes it to the bridge and tells the interface to stop producing one. The C implementation takes the option too - ignoring it there would print no marker and make every bridge look failed to start. Measured against a remote host, with the bridge cross-built for it: wrapper bridge marker verdict echo $$ && exec works __qtc171211__qtc started echo $$ && exec cannot exec __qtc171253__qtc started exec + -pidMarker works __qtc171293__qtc started exec + -pidMarker cannot exec none FailedToStart Not run inside Qt Creator or against a HarmonyOS device yet, so the started()/FailedToStart transitions are read from the interface rather than observed. Sent as a prototype for that reason. WrappedProcessInterface, which serves docker, devcontainer and android, has the same shape and is stricter about it, so the same move should help there - but its marker is a template ("__qtc%1qtc__") rather than a doubled literal, so a shared format would have to come first. Assisted-by: Claude Code Change-Id: I87d737c263c3e41b016e4b52f4b33c98a323b7f8 Reviewed-by: hjk <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/3b400fdd5b336ecfc3cbdfdc61464303b241407c Git commit 14a8aa728095a1827b307524d2233c72b28edf98 by Ahmed El Khazari on 19/08/2026 at 11:33.. Android: Stream logcat only while its output is visible Drive logcat streaming from the new RunControl::outputVisibilityChanged signal. AppOutputPane marks a run's output visible only while its tab is the current one and the pane itself is shown, updating this on both tab switches and the pane's own show/hide. The `adb logcat` tail runs only then and stops otherwise, so background tabs and a hidden pane do not keep idle adb processes alive or compete with other stream consumers. Stopping tears the tail down at the end of the event loop pass, and only if streaming stayed off: a synchronous kill can race the tail's in-flight output, and the tab's visibility flickers while the pane rearranges. Task-number: QTCREATORBUG-34397 Task-number: QTCREATORBUG-33853 Co-authored-by: hjk <[email protected]> Change-Id: I6ba9c74b8cbc565ddcc1d55cd4385acf4e47a324 Reviewed-by: Assam Boudjelthia <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/14a8aa728095a1827b307524d2233c72b28edf98 Git commit 1fdab597cc6b44ff3508693137e2afa046d5ee65 by Ahmed El Khazari on 19/08/2026 at 11:33.. Android: Manage Logcat lifecycle for disconnect/reconnect Hook `DeviceManager::deviceAdded`, `deviceUpdated` and `deviceRemoved` to detect disconnect and reconnect transitions for the streamed device. On disconnect, post a "disconnected" banner to the tab and stop the adb tail while keeping the tab open. When the device returns to `DeviceReadyToUse`, the tail resumes automatically if the tab is still active. `start()` now also bails out while the device is not ready, and the `m_disconnected` latch edge-gates the banners: `deviceUpdated` keeps firing while a device stays offline. A disconnect now always kills the tail, even while the tab stays visible: a surviving adb sits in "- waiting for device -" and resumes on whichever device claims the serial next, and the repeated device update posted the disconnected banner twice. adb's waiting chatter is dropped from the tab; the banner alone tells the story. The tab title becomes the plain device name and never changes. Task-number: QTCREATORBUG-34397 Task-number: QTCREATORBUG-33853 Change-Id: I6548a0969caeaf3a23acb9e611ed78a9360ea2a5 Reviewed-by: Assam Boudjelthia <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/1fdab597cc6b44ff3508693137e2afa046d5ee65 Git commit 63bacd2f915baa791c3df56df4567d925d92f6e1 by Ahmed El Khazari on 19/08/2026 at 11:33.. ProjectExplorer: Let a RunControl disable the output pane actions The App Output pane shows Re-run, Stop, and Attach buttons for every running RunControl. For a passive monitor tab like the Android Logcat tab these actions make no sense. Add RunControl::setOutputPaneActionsEnabled(), named after what it gates. The pane checks it when updating the buttons, and the attach button's tooltip follows the enabled state. The Logcat tab opts out when it is created. Co-authored-by: hjk <[email protected]> Assisted-by: Claude Code Task-number: QTCREATORBUG-34397 Task-number: QTCREATORBUG-33853 Change-Id: I58b27fb7eb5b4cfc165096c2b0f012fe3ee317b6 Reviewed-by: Assam Boudjelthia <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/63bacd2f915baa791c3df56df4567d925d92f6e1 Git commit 38e3d19f21a6a7fb56f01d33f32c831752005037 by hjk on 19/08/2026 at 11:41.. Debugger: Give the BridgeEngine's inferior its own tty The bridge speaks its protocol over gdb's stdout, and the inferior inherited that same descriptor: its output never reached the Application Output pane, and a printf could corrupt the framing. Keep a private dup() of the original stdout for the protocol and point fd 1 at stderr, so gdb's own console output and stray prints land in the debugger log instead of in the message stream. The inferior gets a pty via "set inferior-tty", and a reader thread forwards what it writes as DAP 'output' events, so output shows up while the inferior runs and not only at the next stop. Writes are serialized, as that thread shares the protocol stream with the main loop. Assisted-by: Claude Code Change-Id: Ida0d3307887e70f95d4391cf767b7dd119b9e751 Reviewed-by: Christian Stenger <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/38e3d19f21a6a7fb56f01d33f32c831752005037 Git commit 5f71c636c91fc7f537d1c6d55dd07fd85704cc73 by David Schulz on 19/08/2026 at 11:50.. LanguageClient: fix soft asser in completion assist The m_postponedUpdateConnection was not reset after disconnecting so the check in running falsely returned true. Change-Id: Iac3c15d54cc48b571986be9c1d6700d9538397b4 Reviewed-by: Christian Kandeler <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/5f71c636c91fc7f537d1c6d55dd07fd85704cc73 Git commit 5a071dc130a93ae785384dc93f7d858df2685ec1 by Jeff Heller on 19/08/2026 at 12:23.. MCP: Track last-build verdict for get_build_status Replaces the minimal get_build_status (returned a single status string that couldn't distinguish "never built" from "idle after a successful build") with a BuildStateTracker that subscribes to BuildManager signals globally and captures the full verdict of every build it observes. The new output schema carries: running, progress_percent, current_step — live progress last_result (never_built / success / failure / canceled) last_finished_at (epoch ms), last_duration_ms last_error_count, last_warning_count summary_text (human-readable one-liner) last_error_count/last_warning_count count the build categories, via the existing getErrorTaskCount() and a getWarningTaskCount() added to match it, so code-model and app-output tasks stay out of the verdict while a deploy step's own failures stay in it. Both are taken as a delta against the totals at build start: the issues list is only cleared when "Clear issues list on new build" is set, so otherwise a clean build inherited the previous one's errors and reported success with a non-zero error count. That baseline is also what keeps a stale deploy task out, without having to drop the category. Fewer tasks than at build start means the list was cleared mid-build, and what remains is counted as the build's own. A build taken from the pending queue is armed when the previous one finishes, as no buildStateChanged follows it, so its duration is no longer reported as zero. An empty queue finishes without ever starting; that signal is ignored, so a real verdict is not replaced by a synthetic one. last_finished_at and last_duration_ms are omitted when unknown, since 0 is a legitimate value for both. BuildManager gains a buildQueueCanceled() signal, emitted just before buildQueueFinished(false) on the cancel path. Without it a build the user canceled is indistinguishable from one that failed, and would be reported as a failure with no errors - the same incoherent verdict this change exists to prevent. last_result gains 'canceled'. progress_percent needs a percentage, but currentProgress() returned the raw future value, whose range is the build-step count times 100, so any queue past a single step exceeds the schema maximum of 100. It is renamed to currentProgressPercent() and normalized, which also corrects the percentage the build tool prints. This eliminates the "idle looks the same as never-built" ambiguity that forced callers to add a redundant list_issues call to determine the build verdict. Assisted-by: Claude Code Change-Id: Ib862c4c7fab592c0f743f6e3ad99fa399fefa314 Reviewed-by: Marcus Tillmanns <[email protected]> Reviewed-by: hjk <[email protected]> https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/5a071dc130a93ae785384dc93f7d858df2685ec1