You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Implement the experimental W365 Agents Phase 2 vertical slice on the merged Phase 1 contracts: checkout through provision and terminal release through stop or deprovision.
Add an internal environment-configured API 2.0 service client, session-based opaque IDs, checked binding and normal engine dispatch. W365 is included in normal builds and requires runtime experimental authorization.
Preserve known cleanup identities, request IDs and uncertain outcomes in native structured errors. Never automatically replay checkout or perform hidden cleanup. Release acceptance does not claim completed guest reset or sanitization.
Use the existing Windows executor lifecycle interface. Linux/macOS executors are unchanged; their general lifecycle CLI support is deferred. Engine-level trusted-TLS fixtures run on all three platforms, with fresh-process executor recovery coverage on Windows.
Keep readiness/start, exec, PTY, create-and-run execution and placement sessions explicitly unavailable. Typed W365 SDK APIs are not added; Dev SDK JSON access remains gated pending cross-SDK error metadata and SDK validation.
Preserve Phase 1 request types and generated artifacts. Service settings remain environment-only, with no per-call endpoint/token overrides or caller-selected API version.
The branch contains one implementation commit, d9985fc7, above the merged Phase 1 commit 37a3e931.
With MXC_W365_TEST_EXECUTOR pointing to the built target/debug/wxc-exec.exe, cargo test --locked -p mxc-sdk --lib w365 -- --include-ignored — passed, 6 tests, including trusted-TLS engine and fresh-process Windows executor fixtures. Only loopback services and synthetic credentials were used.
Native Linux/macOS runs and dependency-feed validation have not been run locally; PR CI remains required. Existing CI matrices are preserved. Windows CI requires both fixtures; Linux/macOS CI requires the engine fixture.
Separately supplied live evidence at earlier commit 32ac2531 established exactly one authorized API 2.0 Local checkout and fresh-process deprovision with renewed credentials and the same retained ID. This proves release acceptance only, not completed reset, HumanUser, readiness/exec or SDK behavior. An earlier HumanUser attempt returned HTTP 500/provision_timeout with uncertainty and no session ID and remains unresolved. No additional live calls were made for this review or publication. The backend guide's original statement that live validation has not run predates that supplied evidence.
Add environment-configured checkout and terminal release through the normal engine, preserving session cleanup identities and uncertain outcomes. Expose lifecycle operations through the existing Windows executor only; leave Linux and macOS CLI lifecycle support unchanged. Keep readiness, execution and public SDK access explicitly deferred. Validate parser and engine behavior with cross-platform trusted-TLS fixtures and fresh-process recovery through the Windows executor.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
Checkout error responses discard valid session IDs needed for cleanup, and required Azure builds omit lifecycle and recovery fixtures, allowing artifacts to be published without those checks.
Implements the experimental W365 Agents checkout and terminal-release lifecycle on the merged Phase 1 contracts, using MXC’s existing engine and Windows executor interfaces.
Changes:
Adds an environment-configured API 2.0 client, session-based IDs, checked dispatch and structured recovery errors.
Keeps readiness, execution and Dev SDK access unavailable pending later phases.
Adds trusted-TLS fixtures, GitHub Actions validation and documentation of configuration, cleanup and current limits.
The reason will be displayed to describe this comment to others. Learn more.
Fixed in d2d77aa. Azure now explicitly discovers and runs the engine fixture on Linux x64 and both fixtures on Windows x64. Windows builds its test-support executor in a separate target directory outside shipping artifacts. macOS checks fixture discovery before the existing package suite runs it; cross-compiled Windows/Linux arm64 jobs remain build-only. Template structure and embedded PowerShell/Bash syntax checks passed locally; the updated Azure jobs have not run yet.
Retain valid session identities from bounded checkout error responses without changing HTTP failure classification or replaying allocation. Cover recovery and unreadable bodies in TLS and fresh-executor fixtures, and require fixture discovery and execution on native Azure build hosts.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
The dependency changes introduce unconfigured native TLS/OpenSSL requirements into the ARM64 cross-build, while missing feed dependencies leave the dependency gate failing and block platform builds and W365 fixture verification.
Add locked dependencies to the required dependency feed
src/mxc-sdk/Cargo.toml:84
[P2] Add the new locked dependencies to the required dependency feed before merging. The current dependency-feed-check job fails with HTTP 401 and “No local versions of package 'rcgen'” (job 130096170380), which also skips the Windows, Linux and macOS build jobs and their new W365 fixtures. As documented in docs/development/build-and-test/pull-requests.md:228–240, a feed Contributor needs to run MXC-Update-Feed-Dependencies with prNumber=1723, then rerun the dependency gate and affected builds.
Preserve W365 rustls on all targets while restoring the architecture-specific optional native TLS and gzip features for Hyperlight. Add an Azure ARM64 dependency graph regression check.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
The dependency feed cannot resolve rcgen, causing the dependency gate to fail and Windows, Linux, and macOS builds—including the new lifecycle fixtures—to be skipped.
[P2] Seed the new dependencies in MxcDependencies before merging. The current dependency-feed-check job (130113697446) fails resolving rcgen with HTTP 401 and the feed explicitly reports “No local versions of package 'rcgen'.” Consequently, the Windows, Linux and macOS build jobs—including the new lifecycle fixtures—are skipped. Have a contributor run MXC-Update-Feed-Dependencies with prNumber=1723, as documented in docs/development/build-and-test/pull-requests.md:228–240, then rerun the gate and platform jobs; successful crates.io builds do not validate this dependency path.
Use platform trust for production HTTPS and replace the rustls test server with native TLS. Generate test certificates at runtime, package Windows identities with OpenSSL, and explicitly clean up imported fixture keys. Add Linux OpenSSL build prerequisites including ARM64 target libraries and update CI dependency checks and documentation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
Maintainer and service-owner review is needed to confirm outstanding cross-platform TLS/OpenSSL validation, accept the API 2.0 contract and live-validation limits, and reconcile the uncertain HumanUser checkout outcome.
Package generated EC fixture identities as PKCS12 for macOS import compatibility. Select the Windows OpenSSL executable directly instead of prepending Git Unix tools to PATH, preserving Windows tar for packaging validation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
Unresolved API 2.0 HumanUser checkout behavior and allocation cleanup risks need service-owner confirmation, while Linux/macOS TLS fixtures and Azure ARM64 OpenSSL builds still lack execution results.
The reason will be displayed to describe this comment to others. Learn more.
question: through the use of the sdk's v1.dev namespace users should be able to actually invoke the w356A backend. They don't have to only go through the executor. Under the hood all the code converges to the same place regardless of whether it comes through the sdk or the executors. So, if we have code in this PR that adds the backend, then we should be able to easily get to it through the sdk as well.
The reason will be displayed to describe this comment to others. Learn more.
question: what do we mean by "structured error metadata and public SDK validation "? My thinking would be that all of this could be done in this PR. If these something I might be missing here?
The reason will be displayed to describe this comment to others. Learn more.
issue: please don't change return types or parameters in this file. The W365A backend shouldn't need to do much in here. The goal of this file is just to parse the configuration, then forward it to the appropriate backend, who is then responsible for doing any extra validations it needs. The expectation is that all the backends implement spawn and run and have them return an error if it's not supported.
The reason will be displayed to describe this comment to others. Learn more.
issue: see my comments about the json dev schema. That is the experimental interface folks can use through the SDK. We can hash out the sdk error details in this PR if you like. I believe we return a stand error object across SDKs.
Restore the original parser signatures and normalization context, extending only the internal containment mappings for W365. Preserve backend-owned validation and assert normalized routing and telemetry attribution across the development lifecycle contract.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Use normal run and streaming dispatch while keeping unsupported execution refusal in the W365 backend. Cover dry runs, experimental authorization and zero service requests in the lifecycle fixture.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The reason will be displayed to describe this comment to others. Learn more.
Four additional, non-blocking Medium findings, checked against the merge-base 37a3e93 and head 9f4d1ec. Existing duplicate or overlapping feedback is excluded.
Validation evidence: Build run 42922219010 succeeded on this exact head. Its Windows logs show both W365 lifecycle fixtures passing (6 W365 tests passed); Linux x64 and macOS arm64 logs also show the engine fixture passing. The policy and deadline comments identify regression-coverage gaps, not evidence that unsupported policy currently executes or that the configured deadlines currently fail. Local fixture execution was limited by sandbox permissions, so this review relies on those verified CI results rather than claiming an entirely green local run. No live service calls were made; final-head live compatibility is not established.
All four findings are anchored to added lines. No out-of-diff findings are included.
Verified pre-existing - not attributed to this PR
None included; previously raised or resolved issues are not reopened.
The reason will be displayed to describe this comment to others. Learn more.
Medium (performance) - Reuse the release-profile SDK test artifacts.
Attribution:introduced_by_change - these new fixture commands select a different profile from the adjacent existing tests.
The preceding SDK tests use --release, but both fixture discovery and execution omit it. On a cold runner, even -- --list therefore compiles and links a second, debug-profile SDK test binary and its dependencies. The execution command reuses that debug build; the unnecessary work is the extra profile, not a separate compilation for each command. The new macOS step has the same issue at lines 69-71.
Please add --release to both discovery and execution on Linux and macOS, retaining the target, discovery assertion and --include-ignored. This avoids redundant CI build work; no specific duration increase has been measured.
The reason will be displayed to describe this comment to others. Learn more.
Medium (documentation/correctness) - Reconcile the live-validation record with the supplied evidence.
Attribution:claim_mismatch - this newly added guide says live Phase 2 validation has never run, while the PR description explicitly records earlier-commit API 2.0 evidence and acknowledges that this statement predates it.
The PR reports one authorized Local checkout and fresh-process deprovision with renewed credentials and the same retained ID at commit 32ac2531. It separately records an unresolved HumanUser HTTP 500/provision_timeout result, with uncertainty and no session ID. This guide instead describes only incompatible API 3.0 evidence and says API 2.0 checkout/release remains entirely unvalidated. The CI runbook also calls the live validation explicitly unrun.
Please update both records to distinguish the earlier-commit Local checkout/release acceptance from the unresolved HumanUser result and the absence of final-head live validation. That does not establish completed reset/sanitization, other identities or SDK support, and does not require making another live allocation for this review. This is a non-blocking evidence-record correction.
The reason will be displayed to describe this comment to others. Learn more.
Medium (correctness/test coverage) - Assert the backend's policy refusal, not merely any error.
Attribution:introduced_by_change - the new unsupported-policy loop accepts failures unrelated to the policy guard it is intended to protect.
Provision/stop inputs can fail during contract parsing, while exec still returns UnsupportedPhase after removing the backend policy check because execution is deferred. Consequently these .is_err() assertions can remain green when that guard is removed. Also, runtimeConfig: {} does not exercise the networkProxy-presence flag checked by the guard. The later zero-request assertion does not distinguish an exec policy rejection from the normal unsupported-exec refusal.
Please add engine-fixture cases for exec with network: {} and with runtimeConfig: {"networkProxy":"http://127.0.0.1:8080"}, asserting MxcErrorCode::PolicyValidation and no service requests. Keep contract-parser rejection cases separate. These checks should fail if the backend policy guard is replaced with success. This is missing regression protection, not a claim that policy is currently executed unenforced.
The reason will be displayed to describe this comment to others. Learn more.
Medium (testability) - Exercise expiration of the native transport deadlines.
Attribution:introduced_by_change - the new transport fixtures cover replies and immediate disconnects, but not a service that leaves a request or partial reply open.
The client sets 45-second checkout and 30-second release budgets through timeout_global, but none of these scenarios waits for either budget to expire. An HTTP 408 response is a server response, not a client deadline expiration; dropping the connection is different again. Removing timeout_global would leave the current checks passing. The fresh-executor harness's separate 20-second kill limit cannot verify either longer native deadline.
Please add a hold-open/partial-reply fixture mode and an internal test seam for short budgets. Assert bounded uncertain failure for checkout and release, retained release identity, and exactly one request without automatic replay. Keep the budget override internal/test-only rather than adding public timeout controls. The current deadlines are present; the gap is executable regression coverage for them.
Expose checkout and terminal release through the existing Dev JSON entry points. Include valid Provision cleanup identities in error messages without adding SDK error properties. Isolate W365 HTTPS calls on a joined native thread and cover SDK lifecycle and Koffi coexistence through trusted TLS fixtures.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
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
Needs-Author-FeedbackWaiting for additional information or action from the issue or pull-request author.
4 participants
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.
📖 Description
Implement the experimental W365 Agents Phase 2 vertical slice on the merged Phase 1 contracts: checkout through
provisionand terminal release throughstopordeprovision.The branch contains one implementation commit,
d9985fc7, above the merged Phase 1 commit37a3e931.🔗 References
Refs #1615 (open, maintainer-applied
feature-accepted).Approved and merged design/API proposal: #1619. Phase 1 contracts: #1697.
Implementation scope and validation limits:
docs/backends/w365agents/w365agents-backend.md.🔍 Validation
Local Windows validation of the final tree, from
src/unless stated otherwise:cargo check -p mxc-sdk --quiet— passed after removing the unusedureq/jsonfeature and refreshing the lockfile.cargo build --locked -p wxc --features test-support --quiet— passed.MXC_W365_TEST_EXECUTORpointing to the builttarget/debug/wxc-exec.exe,cargo test --locked -p mxc-sdk --lib w365 -- --include-ignored— passed, 6 tests, including trusted-TLS engine and fresh-process Windows executor fixtures. Only loopback services and synthetic credentials were used.cargo test --locked -p mxc-sdk --lib --quiet -- config_parser state_aware backend_registry policy_identity— passed, 497 tests.cargo test --locked -p mxc-sdk --test mxc_contract_v1_1_0_alpha --test state_aware --quiet— passed, 388 contract tests and 16 lifecycle tests.cargo test --locked -p mxc_ffi --lib state_aware --quiet— passed, 21 tests.cargo fmt --all -- --check— passed.cargo clippy --locked -p mxc-sdk -p mxc_ffi -p wxc --all-targets -- -D warnings— passed; build script reported the existing Python Store alias prerequisite warning.node scripts/versioning/check-contract-codegen.js— passed; three artifact sets match and published schemas matchorigin/main.git diff --check origin/main..HEAD— passed.Native Linux/macOS runs and dependency-feed validation have not been run locally; PR CI remains required. Existing CI matrices are preserved. Windows CI requires both fixtures; Linux/macOS CI requires the engine fixture.
Separately supplied live evidence at earlier commit
32ac2531established exactly one authorized API 2.0Localcheckout and fresh-process deprovision with renewed credentials and the same retained ID. This proves release acceptance only, not completed reset,HumanUser, readiness/exec or SDK behavior. An earlierHumanUserattempt returned HTTP 500/provision_timeoutwith uncertainty and no session ID and remains unresolved. No additional live calls were made for this review or publication. The backend guide's original statement that live validation has not run predates that supplied evidence.✅ Checklist
feature-acceptedCargo.lock, thedependency-feed-checkcheck passes (see pull request builds)No new repository-wide architecture or contributor convention requires an instruction update. CLA status and dependency-feed CI are left unconfirmed.
📋 Issue Type
Microsoft Reviewers: Open in CodeFlow