Repository navigation
Conversation
Add an opt-in live-app journey suite driven by the pinned lvt v0.5.0 UIA adapter, with strict evidence gates: - Startup/navigation (C01), preference persistence across restart (C04), controlled-chat send/stream/cancel (C03) and two-peer saved-gateway switching (C02) journeys against synthetic loopback Gateway peers. - Upstream-pinned controlled-chat fixture subset and two-peer protocol tests that run in the normal Shared/Integration test projects. - Runner gates that reject skipped, missing or extra cases, blank or cropped captures, source/payload drift, real-profile metadata changes and incomplete cleanup. Live journeys stay skipped unless OPENCLAW_RUN_CONTRACT_JOURNEYS=1 on an interactive desktop. The current eight-case suite is not yet live-qualified. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Integrate the contract-driven app testing foundation from ab74abd on the current base while preserving existing cron and chat-send fixture behavior. Select architecture-specific pinned lvt v0.5.0 executables in the runner, adapter, ownership evidence and payload snapshots. Add ARM64 admission regressions and matching build instructions. Validation: full build and ARM64 UI compilation passed; Shared 4343 passed and 35 skipped; Tray 4083 passed; focused Integration 109 passed; native ARM64 journeys 8 passed with zero skips, 16 reviewed screenshots and unchanged real-profile metadata. Native x64 live execution remains unverified. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0a50a0dc-6f7b-4814-a0b7-08ab8bee4c61
Preserve ab74abd as an ancestor of the updated testing branch. Its test foundation was already integrated onto the newer base with ARM64 support, so this ancestry merge leaves the validated source tree unchanged. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0a50a0dc-6f7b-4814-a0b7-08ab8bee4c61
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: needs changes before merge. What this changesThis PR adds eight opt-in native Windows app journeys with synthetic Gateways, a pinned UI Automation driver, and evidence qualification. Example: Change Show tool calls from off to on, then restart Companion.
Review scores
ProductKind: Test only · Worth it: Yes · Fix scope: Complete Merge readiness⛔ Needs changes before merge - 2 items remain Keep this PR open: it adds useful, owner-approved coverage absent from main, but its preflight opt-in introduces a test-selection regression. Priority: P2 Before merge
Findings
Tests
Agent review detailsHow this fits togetherThe test runner launches isolated Companion instances against loopback Gateway fixtures, drives their native controls through lvt, and produces case reports, captures, and a qualification summary. flowchart LR
Runner[Test runner] --> Fixture[Gateway fixture host]
Fixture --> App[Isolated Companion]
App --> Peers[Synthetic Gateway peers]
Runner --> Driver[Pinned lvt driver]
Driver --> App
Fixture --> Evidence[Reports and captures]
Evidence --> Qualification[Qualification gate]
Technical reviewBest possible solution: Keep one explicitly opted-in journey lane that qualifies isolated real-app behavior without changing ordinary fixture-suite admission. Do we have a high-confidence way to reproduce the issue? Source shows that enabling ordinary fixture UI tests without journey variables selects the new preflight and throws for its missing report directory; no target code, builds, or tests were run during this read-only review. Is this the best way to solve the issue? Extending the existing fixture owners is appropriate, and the deterministic barriers and separate qualification results serve distinct risks without introducing another production path. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 127016568ef2. Provenance checked
TestingProof path: shipped entry point. SecurityNone. EvidenceWhat I checked:
Likely related people:
LabelsLabel changes:
Label justifications:
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment Reviewed October 15, 2026, 2:43 PM ET / 18:43 UTC. |
|
Hi @bkudiess, I'm a GitHub Copilot triage bot helping with repository housekeeping, not Scott. Thanks for the native app contract-testing work. Do you plan to continue this against current main? Some fixture UI coverage has since landed, so it would help to know which additional journeys you still want to bring over. If the remaining work has moved elsewhere or is no longer planned, you're welcome to close this draft with a pointer. Otherwise, a short status note is plenty. No automatic closure. |
What Problem This Solves
Developers need repeatable real-app contract tests that run on native ARM64 and x64 without confusing product failures with unavailable or unsafe test conditions.
User Impact
User impact: no shipping UI or product behavior changes. Developers get an opt-in eight-case Windows app suite with isolated profiles, architecture-specific automation-tool pinning, and explicit proof results.
The suite requires a visible, unlocked desktop and no concurrent input or shared-profile writers. Provision the matching pinned
lvtexecutable explicitly; the runner does not install it.Why This Change Was Made
Run the real Companion app against deterministic synthetic loopback Gateways and drive the tested actions through UI Automation. Cover navigation, preference persistence in both directions, credential-free/unavailable startup, streaming, cancellation recovery, and switching saved Gateways.
The test-only harness adds controlled protocol barriers, independently identifiable peers, owned process lifetimes, and strict report/capture admission. It uses the official MCP client SDK for the external driver. The default smoke lane and existing cron/chat-send fixture scenarios remain supported.
ARM64 and x64 require different pinned
lvtpayloads. The runner, adapter, ownership evidence and payload snapshots now select the matching native executable hash.Evidence
Native ARM64 local execution: 1/1 preflight and 8/8 journeys passed, zero failures or skips. All 16 owned-window screenshots were visually reviewed. Every case reported unchanged real-profile metadata and successful cleanup; source/payload freeze checks passed and all ten driver-session receipts recorded the native ARM64 pin.
This is source-equivalent pre-commit proof, not a post-commit rebuild/run. The run recorded base HEAD
dc9f6345821075362580bd598cc32e4f2aa6a18aplus SHA256 values for all 45 changed files. Those hashes were verified unchanged before committing, and the final history merge preserved the exact validated source tree (d883d76eedbb5be83e40c39c3a5223c5a490c266). Do not treat that correspondence as current-head binary provenance or complete proof-pool acceptance.At the publication check,
mainhad advanced to127016568ef2af52a28922bcc3ce1e2af42a0218. The PR merge base remainsdc9f6345, its 45-file candidate diff is unchanged, and the new upstream commit touches no candidate-changed paths. The candidate has not been updated or revalidated against that newer main commit.Artifacts are retained locally in the authoring session: runner output, preflight/journey TRX,
suite-summary.json, before/after source and payload snapshots, per-case reports, capture receipts and screenshots. They have not been uploaded or linked publicly.Independent pre-publication Copilot rubber-duck review of
04f8794ffound no P0/P1 blockers in the inspected harness and UI-journey code. This was one reasoning pass, with unverified model identity and no helper-owned isolation or structured machine status. Chat protocol tests and several unit-test files were sampled rather than exhaustively reviewed; the finalization regression script was not inspected directly.Non-blocking follow-up: the sentence below the coverage matrix in
docs/TEST_COVERAGE.mdstill describes C01/C04, while the eight required cases span C01-C04. The matrix and enforced case inventory describe the broader subset. The reviewer also noted that offline pin-literal agreement is not independent binary provenance; the ARM64 executable checksum was separately derived from the digest-verified published archive and checked in the live receipts. No hosted bot review has been requested.Change Type
Scope
winnodeRequired proof pools
windows-11-arm64: native ARM64 driver admission, test-host and real-app execution. Focused local checks passed; complete pool acceptance and current-head binary proof remain outstanding.windows-winui-interactive: eight opt-in real-app UI journeys and owned-window captures. Source-equivalent local proof passed; this is not a claim that the full interactive pool ran.Validation
All results below apply to the source-equivalent local tree described above.
.\build.ps1dotnet build .\tests\OpenClaw.Tray.UITests\OpenClaw.Tray.UITests.csproj -c Debug -r win-arm64 -p:Platform=ARM64 -p:DevBuild=false -m:1 -p:UseSharedCompilation=falsedotnet test .\tests\OpenClaw.Shared.Tests\OpenClaw.Shared.Tests.csproj --no-restore --logger "console;verbosity=minimal" -m:1 -p:UseSharedCompilation=falsedotnet test .\tests\OpenClaw.Tray.Tests\OpenClaw.Tray.Tests.csproj --no-restore --logger "console;verbosity=minimal" -m:1 -p:UseSharedCompilation=false.\scripts\test-contract-lvt-release.ps1.\scripts\test-contract-journey-results.ps1.\scripts\test-contract-proof-finalization.ps1.\scripts\validate-docs.ps1git diff --check HEADFocused harness command:
Result: 109 passed, 0 failed, 0 skipped. Final broad-suite results were recorded in the validation agent's console/session, not persisted as separate Shared/Tray TRX artifacts. Live-journey TRX reports are retained locally.
The new native-driver regression failed before the ARM64 fix with
PlatformNotSupportedExceptionand passed afterward through the checksum guard.Real Behavior Proof
releaseidentity marker, pinned ARM64lvtv0.5.0. No attached debugger.04f8794ff06e486c8d17c52dd74325a7b673eb45; local execution preceded the commits, with source-hash/tree correspondence described under Evidence. Post-commit/current-head rebuild and execution are not verified.Only the two machine-local tool/evidence paths are replaced with placeholders.
Security Impact
lvt.exeover stdio MCP with--allow-input, attached only to the owned app process/window lifetime.Yes, explain the risk and mitigation: keep every child profile isolated; redact generated credentials; reject changed/unknown driver binaries, incomplete or ambiguous UI observations, shared-profile changes, missing evidence and unsuccessful cleanup. Desktop automation is opt-in and must not overlap human input or other automation.Compatibility and Migration
-Suite Journeys, explicit-LvtPath, optionally explicit-TestAssemblyPath, matching native app/test builds, and the runner's opt-in child environment.lvtv0.5.0 archive; followdocs/GATEWAY_FIXTURE_TESTING.mdfor native build and isolated execution. No OpenClaw user-profile migration is needed.Review Conversations