Skip to content

fix: defects found in 1.0.0-alpha11 release QA - #241

Merged
kitakkun merged 4 commits into
mainfrom
fix/alpha11-release-qa
Aug 7, 2026
Merged

fix: defects found in 1.0.0-alpha11 release QA#241
kitakkun merged 4 commits into
mainfrom
fix/alpha11-release-qa

Conversation

@kitakkun

@kitakkun kitakkun commented Aug 7, 2026

Copy link
Copy Markdown
Owner

Four defects found while QA-ing 1.0.0-alpha10..main for the 1.0.0-alpha11 release. Each was
reproduced 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, so jetwhale.screenshot
returned 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 — all Scaffold-based) render
byte-identically.

before after
white content area under a dark tab bar matches the window

--plugin could shadow the QA agent's built-in Network plugin

Every QA-agent app registers JetWhaleNetworkAgentPlugin so /fire has something to capture with.
Naming the same id in --plugin registered a wire-level stand-in beside it, and both claimed the id
in one session. The stand-in registers no request handlers, so the real plugin's were shadowed:

  • com.kitakkun.jetwhale.network.addMockRule failed with
    No request handler registered for 'network/set_mock_rules' — mocking was unreachable
  • the id appeared twice in jetwhale.listSessions' installedPlugins

The flag is now rejected with a message that says why. Two tests cover it, one of them pinning the
constant against JetWhaleNetworkAgentPlugin().pluginId so the two cannot drift.

jetwhale-compose-semantics-inspector-agent published compose-ui at runtime scope

registerSemanticsOwner takes a SemanticsOwner and SemanticsOwnerNodeSource is constructed with
one, so androidx.compose.ui is part of the module's public API. Declared as implementation it
landed in the POM at runtime scope, leaving a consumer that calls either to supply compose-ui
itself. 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-desktop at compile.

Found by the ABI-validation work on chore/abi-validation-plugins, which touches the same build
file and will need a trivial merge.

A stale KDoc reference

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.

Verification

  • ./gradlew check, -p jetwhale-agent-plugin check, -p jetwhale-gradle-plugin check,
    checkKotlinAbi on the five public modules, and the Apple compile + macosArm64Test /
    iosSimulatorArm64Test jobs all pass.
  • Reproduced and re-verified against a headless host driven over MCP, with the desktop demo and the
    QA agent connected: the Network Inspector screenshot now matches the window, addMockRule +
    /fire returns the mocked 201, and installedPlugins no longer repeats the network id.

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.
Copilot AI lite review requested due to automatic review settings August 7, 2026 01:20

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.network in the QA agent (with tests) to avoid shadowing the built-in Network plugin handlers.
  • Publish Compose UI as an api dependency 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
kitakkun force-pushed the fix/alpha11-release-qa branch from 50ed27a to 637108d Compare August 7, 2026 02:04
@kitakkun kitakkun changed the title fix: four defects found in 1.0.0-alpha11 release QA fix: defects found in 1.0.0-alpha11 release QA Aug 7, 2026
@kitakkun
kitakkun merged commit 61ec659 into main Aug 7, 2026
9 checks passed
@kitakkun
kitakkun deleted the fix/alpha11-release-qa branch August 7, 2026 02:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants