fix: defects found in 1.0.0-alpha11 release QA - #241
Merged
Conversation
A plugin scene was composed with the theme but nothing painting a surface under it. On screen that is invisible: the host window paints a background behind the scene. An off-screen MCP capture has nothing behind it, so any plugin that draws no background of its own -- the Network Inspector, whose root is a bare Column -- came back transparent and read as white against the dark host UI it is supposed to match. Paint the surface inside the scene, where both the window and the capture see it.
registerSemanticsOwner takes a SemanticsOwner and SemanticsOwnerNodeSource is constructed with one, so androidx.compose.ui is part of this module's public API. Declared as implementation it lands in the POM at runtime scope, leaving a consumer that calls either to supply compose-ui itself.
Every app already registers JetWhaleNetworkAgentPlugin so /fire has something to capture with. Naming the same id in --plugin registered a wire-level stand-in beside it: both claimed the id in one session, the stand-in registers no request handlers, and mocking became unreachable -- addMockRule reported no handler for 'network/set_mock_rules', and the id appeared twice in jetwhale.listSessions.
Contributor
There was a problem hiding this comment.
Pull request overview
Fixes four QA-discovered defects in the JetWhale host/agent/plugin tooling ahead of 1.0.0-alpha11, improving correctness of MCP screenshot capture, preventing a QA-agent plugin-ID collision, correcting published dependency scope for a new semantics agent artifact, and aligning Conveyor packaging JVM modules with the host’s runtime needs.
Changes:
- Ensure plugin scenes paint an in-scene background so off-screen MCP captures match on-screen rendering.
- Reject
--plugin com.kitakkun.jetwhale.networkin the QA agent (with tests) to avoid shadowing the built-in Network plugin handlers. - Publish Compose UI as an
apidependency for the semantics inspector agent so consumers get it on the compile classpath; update related docs/config (EndpointResolver KDoc, Conveyor JVM modules).
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| tools/qa-agent/src/test/kotlin/com/kitakkun/jetwhale/tools/qaagent/QaAgentOptionsTest.kt | Adds tests ensuring the built-in network plugin ID cannot be re-registered and stays pinned to the real plugin’s pluginId. |
| tools/qa-agent/src/main/kotlin/com/kitakkun/jetwhale/tools/qaagent/QaAgentOptions.kt | Introduces a constant for the built-in network plugin ID, documents it in usage, and rejects --plugin collisions with a clear error. |
| jetwhale-plugins/semantics/agent/build.gradle.kts | Switches Compose UI dependency to api to match the module’s public API surface (POM compile scope). |
| jetwhale-host/feature/plugin/src/main/kotlin/com/kitakkun/jetwhale/host/plugin/DefaultDynamicPluginBridgeProvider.kt | Wraps plugin content in a full-size Surface so off-screen capture has an explicit background. |
| jetwhale-agent-runtime/src/commonMain/kotlin/com/kitakkun/jetwhale/agent/runtime/EndpointResolver.kt | Updates KDoc to reflect current endpoint scheme resolution behavior. |
| conveyor.conf | Adds java.instrument to the packaged JVM module list (matching host requirements for ByteBuddy self-attach). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
EndpointResolver's KDoc explained per-endpoint useWss in terms of
`plainLoopback`, which was added and removed inside this release window.
Each endpoints { } candidate names its own scheme; `ssl { }` decides it
only for the deprecated host/port pair.
kitakkun
force-pushed
the
fix/alpha11-release-qa
branch
from
August 7, 2026 02:04
50ed27a to
637108d
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Four defects found while QA-ing
1.0.0-alpha10..mainfor the 1.0.0-alpha11 release. Each wasreproduced against a running host before the fix and re-verified after it.
A plugin scene had no background of its own
A plugin scene was composed with the theme applied but nothing painting a surface under it. On
screen that is invisible — the host window paints a background behind the scene. An off-screen MCP
capture has nothing behind it, so a plugin that draws no background of its own came back
transparent.
The Network Inspector is such a plugin: its root is a bare
Column, sojetwhale.screenshotreturned a white page with a dark tab bar floating on it, while the same screen looks correct in the
window. Since alpha11 ships host-wide MCP tools as a headline feature, a screenshot that
misrepresents the UI is worth fixing on the release.
The surface now lives inside the scene, where both the window and the capture see it. Plugins that
already paint their own background (
nav3,semantics,example— allScaffold-based) renderbyte-identically.
--plugincould shadow the QA agent's built-in Network pluginEvery QA-agent app registers
JetWhaleNetworkAgentPluginso/firehas something to capture with.Naming the same id in
--pluginregistered a wire-level stand-in beside it, and both claimed the idin one session. The stand-in registers no request handlers, so the real plugin's were shadowed:
com.kitakkun.jetwhale.network.addMockRulefailed withNo request handler registered for 'network/set_mock_rules'— mocking was unreachablejetwhale.listSessions'installedPluginsThe flag is now rejected with a message that says why. Two tests cover it, one of them pinning the
constant against
JetWhaleNetworkAgentPlugin().pluginIdso the two cannot drift.jetwhale-compose-semantics-inspector-agentpublished compose-ui at runtime scoperegisterSemanticsOwnertakes aSemanticsOwnerandSemanticsOwnerNodeSourceis constructed withone, so
androidx.compose.uiis part of the module's public API. Declared asimplementationitlanded in the POM at
runtimescope, leaving a consumer that calls either to supply compose-uiitself. This is a new artifact in alpha11, so it is worth correcting before it is published. The
generated POM now lists
org.jetbrains.compose.ui:ui-desktopatcompile.Found by the ABI-validation work on
chore/abi-validation-plugins, which touches the same buildfile and will need a trivial merge.
A stale KDoc reference
EndpointResolver's KDoc explained per-endpointuseWssin terms ofplainLoopback, which wasadded and removed inside this release window. Each
endpoints { }candidate names its own scheme;ssl { }decides it only for the deprecatedhost/portpair.Verification
./gradlew check,-p jetwhale-agent-plugin check,-p jetwhale-gradle-plugin check,checkKotlinAbion the five public modules, and the Apple compile +macosArm64Test/iosSimulatorArm64Testjobs all pass.QA agent connected: the Network Inspector screenshot now matches the window,
addMockRule+/firereturns the mocked201, andinstalledPluginsno longer repeats the network id.