Skip to content

Resolve the command before the request is parsed - #969

Open
Gudge (MGudgin) wants to merge 1 commit into
mainfrom
user/gudge/version_specific_config_parsers_phase7a
Open

Resolve the command before the request is parsed#969
Gudge (MGudgin) wants to merge 1 commit into
mainfrom
user/gudge/version_specific_config_parsers_phase7a

Conversation

@MGudgin

@MGudginGudge (MGudgin) commented Aug 20, 2026

Copy link
Copy Markdown
Member

Resolve the command before the request is parsed

This PR changes CLI command handling so trailing commands are resolved and
inserted before request parsing, and Rust SDK requests receive their command at
construction time. It preserves behavior for valid requests and requests
without a trailing CLI command; command-preparation failures remain entry-point
errors when the command and policy are independently invalid.

Details

  • Probe the request phase and reuse one duplicate-preserving raw source pass to
    select backend-specific quoting and edit process.commandLine.
  • Keep typed validation authoritative for the effective document, route request
    errors through one production helper, and log replacements only after parsing
    succeeds.
  • Require commands in request-builder APIs, remove post-build script mutation,
    and migrate SDK and FFI callers with direct validation coverage.
  • Document native CLI syntax, state-aware exec restrictions, and the distinction
    between complete schema-valid requests and CLI templates.

Tests

  • cargo fmt --all -- --check
  • cargo check --workspace --all-targets
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace
  • cargo check -p mxc_engine --tests --target x86_64-apple-darwin
Microsoft Reviewers: Open in CodeFlow

@MGudgin
Gudge (MGudgin) requested review from a team and a balanced review from CopilotAugust 20, 2026 18:15
@MGudgin
Gudge (MGudgin) requested a review from a team as a code ownerAugust 20, 2026 18:15
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
There may be pipelines that require an authorized user to comment /azp run to run.

CopilotAI 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

Moves CLI command resolution before request parsing and makes Rust SDK requests complete at construction.

Changes:

  • Adds backend/phase probing and command splicing.
  • Requires commands in request-builder APIs and removes set_script.
  • Updates tests, FFI callers, and documentation.
Show a summary per file
FileDescription
src/ffi/mxc_ffi/src/streaming.rsPasses commands during request construction.
src/ffi/mxc_ffi/src/lib.rsUpdates run-to-completion request creation.
src/core/wxc/src/main.rsIntegrates pre-parse CLI command resolution and tests.
src/core/wxc_common/src/state_aware_dispatch.rsExposes backend-prefix resolution internally.
src/core/wxc_common/src/splice.rsAdds JSON command splicing.
src/core/wxc_common/src/probe.rsAdds backend and phase probes.
src/core/wxc_common/src/lib.rsRegisters new internal modules.
src/core/wxc_common/src/config_parser.rsApplies CLI commands before typed parsing.
src/core/mxc-sdk/tests/streaming.rsUpdates streaming test request construction.
src/core/mxc-sdk/tests/streaming_processcontainer.rsUpdates ProcessContainer streaming test.
src/core/mxc-sdk/tests/sdk_helpers.rsUpdates SDK helper tests.
src/core/mxc-sdk/tests/sandbox.rsUpdates sandbox tests.
src/core/mxc-sdk/src/lib.rsRevises SDK examples.
src/core/mxc-sdk/README.mdDocuments command-at-build usage.
src/core/mxc_engine/src/policy.rsRequires commands in builder APIs.
src/core/mxc_engine/src/dispatch.rsUpdates dispatch tests.

Review details

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

  • Files reviewed: 16/16 changed files
  • Comments generated: 3
  • Review effort level: Balanced

Comment threadsrc/core/wxc_common/src/splice.rs Outdated
Comment threadsrc/core/wxc_common/src/config_parser.rs Outdated
Comment threadsrc/core/mxc-sdk/tests/streaming.rs Outdated
Comment threadsrc/core/mxc_engine/src/policy.rs Outdated
Comment threadsrc/core/wxc/src/main.rs Outdated
Comment threadsrc/core/wxc_common/src/config_parser.rs
Comment threadsrc/core/wxc_common/src/config_parser.rs Outdated
Comment threadsrc/core/wxc_common/src/lib.rs Outdated

@dhoehnaDarren Hoehna (dhoehna) 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.

Besides the comments about de-duplication the code is sound. I am concerned to see duplicate methods for one-shot and state-aware. Merging those paths is a future issue.

Gudge (MGudgin) pushed a commit that referenced this pull request Aug 22, 2026
This PR updates the version-specific parser plan for the current state: Phase 5
is fully merged, Phase 6 is awaiting signoff in PR #968, and Phase 6.5 is
rebased onto it as a single commit.
Details
* Rewrite the status paragraph: #966 merged, #968 awaiting a final signoff and
now carrying the directional networking port, Phase 6.5 rebased onto it, and
Phase 7a open as PR #969.
* Mark steps 1 through 5 of the publication sequence with their outcomes, and
record that the step 2 port landed inside #968 rather than separately because
a review of that pull request identified the same gap.
* Add a "Phase 6.5 as rebased" section describing what the branch contains and
the two version-marker errors the rebase surfaced, both found by a failing
test rather than by inspection.
* Correct the development version suffix from 0.9.0-dev to 0.9.0-alpha
throughout the contract-side text, leaving the rolling-artifact references
unchanged since -dev remains correct there.
* Mark the fixture schema reference and the registry path items of the
immediate remediation as done, noting that the stable artifact itself is
published by the old stack rather than by this work.
Tests
* Documentation-only change; no build, lint, or test gate applies.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2a8e0d88-21dd-48e5-8e44-df2393b8a664
CopilotAI review requested due to automatic review settings August 24, 2026 15:33
@MGudgin
Gudge (MGudgin)force-pushed the user/gudge/version_specific_config_parsers_phase7a branch from 3b44ef1 to 6581290CompareAugust 24, 2026 15:33

CopilotAI 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.

Review details

Suppressed comments (4)

src/core/mxc-sdk/tests/streaming.rs:36

  • This identifier is misspelled, so the mxc-sdk streaming integration-test target does not compile. Use the existing command parameter.
 let request = build_request(&policy, commmand, None).expect("build_request should succeed");

src/core/wxc_common/src/splice.rs:14

  • Parsing into serde_json::Value before the real typed parser silently collapses duplicate object keys. With a CLI command, a request containing duplicate process, network, or other policy sections is therefore accepted using the last value instead of being rejected as a duplicate field, potentially changing the enforced policy. Preserve the original structure during splicing or explicitly reject duplicate keys before converting to Value.
 let mut doc: Value = serde_json::from_str(json).ok()?;

src/core/wxc_common/src/splice.rs:22

  • Serializing the modified DOM into a compact string moves every subsequent typed parse error to line 1, contradicting parse_mxc_request_json's source-location guarantee. For example, an invalid multiline filesystem field with a CLI command no longer reports its original line/column. Splice into the original source text (or retain an offset map) rather than reserializing the whole document.
 Some(Spliced {
json: serde_json::to_string(&doc).ok()?,

src/core/wxc_common/src/config_parser.rs:254

  • Command-rendering failures are always classified as Decode, even after phase identified a state-aware exec request. Previously this path emitted a state-aware stdout envelope; it now emits the pre-discrimination stderr diagnostic, contrary to ParseError's routing contract. Classify this error as StateAware when phase.is_some() (and apply the same rule to the empty-command branch below).
 let command = cmdline_from_argv_for_context(argv, context).map_err(|e| {
ParseError::Decode(WxcError::ConfigParse(format!(
"invalid CLI command override: {e}"
)))
})?;
  • Files reviewed: 16/16 changed files
  • Comments generated: 2
  • Review effort level: Balanced

Comment threadsrc/core/mxc_engine/src/policy.rs
Comment threadsrc/core/wxc_common/src/splice.rs Outdated
Gudge (MGudgin) pushed a commit that referenced this pull request Aug 25, 2026
This PR updates the version-specific parser plan for the current state: Phase 5
is fully merged, Phase 6 is awaiting signoff in PR #968, and Phase 6.5 is
rebased onto it as a single commit.
Details
* Rewrite the status paragraph: #966 merged, #968 awaiting a final signoff and
now carrying the directional networking port, Phase 6.5 rebased onto it, and
Phase 7a open as PR #969.
* Mark steps 1 through 5 of the publication sequence with their outcomes, and
record that the step 2 port landed inside #968 rather than separately because
a review of that pull request identified the same gap.
* Add a "Phase 6.5 as rebased" section describing what the branch contains and
the two version-marker errors the rebase surfaced, both found by a failing
test rather than by inspection.
* Correct the development version suffix from 0.9.0-dev to 0.9.0-alpha
throughout the contract-side text, leaving the rolling-artifact references
unchanged since -dev remains correct there.
* Mark the fixture schema reference and the registry path items of the
immediate remediation as done, noting that the stable artifact itself is
published by the old stack rather than by this work.
Tests
* Documentation-only change; no build, lint, or test gate applies.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2a8e0d88-21dd-48e5-8e44-df2393b8a664
Gudge (MGudgin) pushed a commit that referenced this pull request Aug 25, 2026
This PR updates the version-specific parser plan for the current state: Phase 5
is fully merged, Phase 6 is awaiting signoff in PR #968, and Phase 6.5 is
rebased onto it as a single commit.
Details
* Rewrite the status paragraph: #966 merged, #968 awaiting a final signoff and
now carrying the directional networking port, Phase 6.5 rebased onto it, and
Phase 7a open as PR #969.
* Mark steps 1 through 5 of the publication sequence with their outcomes, and
record that the step 2 port landed inside #968 rather than separately because
a review of that pull request identified the same gap.
* Add a "Phase 6.5 as rebased" section describing what the branch contains and
the two version-marker errors the rebase surfaced, both found by a failing
test rather than by inspection.
* Correct the development version suffix from 0.9.0-dev to 0.9.0-alpha
throughout the contract-side text, leaving the rolling-artifact references
unchanged since -dev remains correct there.
* Mark the fixture schema reference and the registry path items of the
immediate remediation as done, noting that the stable artifact itself is
published by the old stack rather than by this work.
Tests
* Documentation-only change; no build, lint, or test gate applies.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2a8e0d88-21dd-48e5-8e44-df2393b8a664
CopilotAI review requested due to automatic review settings August 25, 2026 20:38

CopilotAI 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.

Review details

  • Files reviewed: 18/18 changed files
  • Comments generated: 2
  • Review effort level: Balanced

Comment threadsrc/core/wxc_common/src/config_parser.rs Outdated
Comment threadsrc/core/mxc_engine/src/policy.rs Outdated
Gudge (MGudgin) pushed a commit that referenced this pull request Aug 28, 2026
This PR updates the version-specific parser plan for the current state: Phase 5
is fully merged, Phase 6 is awaiting signoff in PR #968, and Phase 6.5 is
rebased onto it as a single commit.
Details
* Rewrite the status paragraph: #966 merged, #968 awaiting a final signoff and
now carrying the directional networking port, Phase 6.5 rebased onto it, and
Phase 7a open as PR #969.
* Mark steps 1 through 5 of the publication sequence with their outcomes, and
record that the step 2 port landed inside #968 rather than separately because
a review of that pull request identified the same gap.
* Add a "Phase 6.5 as rebased" section describing what the branch contains and
the two version-marker errors the rebase surfaced, both found by a failing
test rather than by inspection.
* Correct the development version suffix from 0.9.0-dev to 0.9.0-alpha
throughout the contract-side text, leaving the rolling-artifact references
unchanged since -dev remains correct there.
* Mark the fixture schema reference and the registry path items of the
immediate remediation as done, noting that the stable artifact itself is
published by the old stack rather than by this work.
Tests
* Documentation-only change; no build, lint, or test gate applies.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2a8e0d88-21dd-48e5-8e44-df2393b8a664
Gudge (MGudgin) pushed a commit that referenced this pull request Aug 31, 2026
This PR updates the version-specific parser plan for the current state: Phase 5
is fully merged, Phase 6 is awaiting signoff in PR #968, and Phase 6.5 is
rebased onto it as a single commit.
Details
* Rewrite the status paragraph: #966 merged, #968 awaiting a final signoff and
now carrying the directional networking port, Phase 6.5 rebased onto it, and
Phase 7a open as PR #969.
* Mark steps 1 through 5 of the publication sequence with their outcomes, and
record that the step 2 port landed inside #968 rather than separately because
a review of that pull request identified the same gap.
* Add a "Phase 6.5 as rebased" section describing what the branch contains and
the two version-marker errors the rebase surfaced, both found by a failing
test rather than by inspection.
* Correct the development version suffix from 0.9.0-dev to 0.9.0-alpha
throughout the contract-side text, leaving the rolling-artifact references
unchanged since -dev remains correct there.
* Mark the fixture schema reference and the registry path items of the
immediate remediation as done, noting that the stable artifact itself is
published by the old stack rather than by this work.
Tests
* Documentation-only change; no build, lint, or test gate applies.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 2a8e0d88-21dd-48e5-8e44-df2393b8a664
CopilotAI review requested due to automatic review settings August 31, 2026 14:31
@MGudgin
Gudge (MGudgin)force-pushed the user/gudge/version_specific_config_parsers_phase7a branch from e26201e to 3a295c0CompareAugust 31, 2026 14:31

CopilotAI 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.

Copilot review overview

Review tier: Balanced
Findings: 2 Medium severity · 1 Low severity

New issues introduced by this change (1)
SeverityFinding
Medium severitysrc/​core/​wxc_common/​src/​splice.rsprocess: null now bypasses the CLI override: deserializing it as RawObject fails, so the…
Pre-existing issues (2)
SeverityFinding
Medium severitysrc/​core/​wxc_common/​src/​config_parser.rs — These branches now return probe/override errors before the typed parser runs, changing error… View comment
Low severitysrc/​core/​mxc_engine/​src/​policy.rs — This migration replaced the test's existing Some(&quot;test-container&quot;) argument with None, leaving… View comment
Issues resolved since last review (4)
SeverityFinding
Medium severitysrc/​core/​wxc_common/​src/​splice.rs — A non-string process.commandLine is currently overwritten before typed deserialization, so… View resolved comment
High severitysrc/​core/​mxc_engine/​src/​policy.rs — The API change leaves tests/isolation_session.rs:109,128 calling this function with the old… View resolved comment
Medium severitysrc/​core/​wxc_common/​src/​config_parser.rs — Command-rendering failures are always classified as Decode, even after phase was successfully… View resolved comment
High severitysrc/​core/​wxc_common/​src/​splice.rs — Round-tripping the unvalidated policy through serde_json::Value changes the parser's validation… View resolved comment
Suppressed comments (1)

src/core/wxc_common/src/config_parser.rs:242

  • The state-aware backend probe is surfaced directly, so parser-owned sandboxId failures no longer retain their existing diagnostics. For example, an exec request with "sandboxId": 42 previously went through config_deserialize and reported the sandboxId JSON path; this probe now emits plain serde text before the typed parser runs (and a missing ID also changes from phase exec requires a sandboxId to a new message). Pass through probe failures caused by malformed/missing field values so the typed parser and normal backend resolution preserve the established error text; only use the probe result when it successfully identifies a backend.
 let backend =
crate::probe::probe_state_aware_backend(json).map_err(ParseError::StateAware)?;

Comment threadsrc/core/wxc_common/src/splice.rs Outdated
CopilotAI review requested due to automatic review settings August 31, 2026 15:21

CopilotAI 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.

Copilot review overview

Review tier: Balanced
Findings: 1 High severity

New issues introduced by this change (1)
SeverityFinding
High severitysrc/​core/​wxc_common/​src/​config_parser.rssplice_command returning None does not imply the typed parser will reject the document.…
Issues resolved since last review (2)
SeverityFinding
Low severitydocs/​state-aware-lifecycle/​mxc-state-aware-sandbox-api.md — This example propagates apply_cli_command failures immediately with ?, contradicting the… View resolved comment
Medium severitysrc/​core/​wxc_common/​src/​splice.rs — The override can now hide an invalid policy command. A non-empty string containing \u0000View resolved comment

Comment threadsrc/core/wxc_common/src/config_parser.rs Outdated
CopilotAI review requested due to automatic review settings August 31, 2026 18:43
@MGudgin
Gudge (MGudgin)force-pushed the user/gudge/version_specific_config_parsers_phase7a branch from e294f68 to 63cc982CompareAugust 31, 2026 18:43

CopilotAI 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.

Copilot review overview

Review tier: Balanced
Findings: 1 Medium severity

New issues introduced by this change (1)
SeverityFinding
Medium severitysrc/​core/​wxc_common/​src/​config_parser.rs — This logs the override before typed parsing has succeeded. If any unrelated policy field is…
Issues resolved since last review (1)
SeverityFinding
High severitysrc/​core/​wxc_common/​src/​config_parser.rssplice_command returning None does not imply the typed parser will reject the document.… View resolved comment

Comment threadsrc/core/wxc_common/src/config_parser.rs Outdated
CopilotAI review requested due to automatic review settings September 2, 2026 22:16
@MGudgin
Gudge (MGudgin)force-pushed the user/gudge/version_specific_config_parsers_phase7a branch from 63cc982 to 499fcdaCompareSeptember 2, 2026 22:16
@MGudgin
Gudge (MGudgin)force-pushed the user/gudge/version_specific_config_parsers_phase7a branch from 499fcda to 2675e62CompareSeptember 2, 2026 22:20

CopilotAI 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.

Copilot review overview

🟢 Approval recommended

The API migration is complete and the new parsing behavior has comprehensive edge-case coverage.

Review tier: Balanced
Findings: None

Issues resolved since last review (1)
SeverityFinding
Medium severitysrc/​core/​wxc_common/​src/​config_parser.rs — This logs the override before typed parsing has succeeded. If any unrelated policy field is… View resolved comment

CopilotAI review requested due to automatic review settings September 2, 2026 22:21

CopilotAI 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.

Copilot review overview

🔵 Needs a closer look

Core parsing, command quoting, and cross-backend error routing changes warrant final human validation despite strong test coverage.

Review tier: Balanced
Findings: None

Gudge (MGudgin) pushed a commit that referenced this pull request Sep 2, 2026
This PR records that PR #969 now points to the verified, squashed Phase 7a redux
implementation.
Details
* Note the local and remote branch replacement performed with
--force-with-lease.
* Replace the obsolete pending-push status in the version-specific parser plan.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 651084c2-3d1e-4824-917a-6994d62feba0
Gudge (MGudgin) pushed a commit that referenced this pull request Sep 2, 2026
This PR updates the Phase 7a implementation record for the final rebase and the
consolidated command-source design.
Details
* Record PR #969 at rebased tip 2675e62 on origin/main 878936a.
* Replace deleted backend-probe names with CommandSource and its exhaustive
containment parity test.
Tests
* git diff --check
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 651084c2-3d1e-4824-917a-6994d62feba0
Gudge (MGudgin) pushed a commit that referenced this pull request Sep 3, 2026
This PR updates the parser roadmap for the squashed Phase 7.2 implementation
and its stacked pull request.
Details
* Record Phase 7.2 on the phase7b branch at 401ba0c.
* Link PR #1091 and its Phase 7a base PR #969 in the status and delivery table.
Tests
* git diff --check
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 651084c2-3d1e-4824-917a-6994d62feba0
Comment threadsrc/core/mxc-sdk/README.md
CopilotAI review requested due to automatic review settings September 4, 2026 18:49
@MGudgin
Gudge (MGudgin)force-pushed the user/gudge/version_specific_config_parsers_phase7a branch from 2675e62 to f609a17CompareSeptember 4, 2026 18:49

CopilotAI 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.

Copilot review overview

🟡 Changes recommended

Two updated documents incorrectly claim command-less templates are invalid under every supported JSON schema.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review tier: Balanced
Findings: 2 Low severity

New issues introduced by this change (2)
SeverityFinding
Low severityREADME.md — The “not schema-valid” claim is not true for every supported schema:…
Low severitydocs/​schema.md — This conflates runtime completeness with JSON Schema validity. In particular, the immutable 0.8…

Comment threadREADME.md Outdated
Comment threaddocs/schema.md Outdated
CopilotAI review requested due to automatic review settings September 4, 2026 19:34
@MGudgin
Gudge (MGudgin)force-pushed the user/gudge/version_specific_config_parsers_phase7a branch from f609a17 to fff9cf3CompareSeptember 4, 2026 19:34

CopilotAI 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.

Copilot review overview

🔵 Needs a closer look

The new splice path regresses trailing-command templates containing "process": null.

Review tier: Balanced
Findings: None

Issues resolved since last review (2)
SeverityFinding
Low severitydocs/​schema.md — This conflates runtime completeness with JSON Schema validity. In particular, the immutable 0.8… View resolved comment
Low severityREADME.md — The “not schema-valid” claim is not true for every supported schema:… View resolved comment
Suppressed comments (1)

src/core/wxc_common/src/splice.rs:172

  • A trailing command no longer completes a template with "process": null. The previous relaxed parse treated this as an absent optional process and applied the CLI command afterward; this splice instead returns None, so typed parsing now fails with “'process' section is required.” Handle JSON null like a missing process while leaving other non-object values for typed validation.
 MemberMatch::Unique(process_raw) => {
let process_source = process_raw.get();
let process: RawObject<'_> = serde_json::from_str(process_source).ok()?;

This PR changes CLI command handling so trailing commands are resolved and
inserted before request parsing, and Rust SDK requests receive their command at
construction time. It preserves behavior for valid requests and requests
without a trailing CLI command; command-preparation failures remain entry-point
errors when the command and policy are independently invalid.
Details
* Probe the request phase and reuse one duplicate-preserving raw source pass to
select backend-specific quoting and edit process.commandLine.
* Keep typed validation authoritative for the effective document, route request
errors through one production helper, and log replacements only after parsing
succeeds.
* Require commands in request-builder APIs, remove post-build script mutation,
and migrate SDK and FFI callers with direct validation coverage.
* Document native CLI syntax, state-aware exec restrictions, and the distinction
between independently executable requests and CLI templates.
Tests
* cargo fmt --all -- --check
* cargo check --workspace --all-targets
* cargo clippy --workspace --all-targets -- -D warnings
* cargo test --workspace
* cargo check -p mxc_engine --tests --target x86_64-apple-darwin
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 0f04437d-4a05-487a-b402-4ed4c774e8e0
CopilotAI review requested due to automatic review settings September 5, 2026 05:02
@MGudgin
Gudge (MGudgin)force-pushed the user/gudge/version_specific_config_parsers_phase7a branch from fff9cf3 to aa6c12dCompareSeptember 5, 2026 05:02

CopilotAI 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.

Copilot review overview

🔵 Needs a closer look

Null process templates regress, and command-render failures lose rejection classification, attribution, and telemetry.

Review tier: Balanced
Findings: None

Suppressed comments (2)

src/core/wxc_common/src/splice.rs:172

  • process: null is a valid “absent process” representation for the wire model (Option<Process>), and the previous allow_missing_command path accepted it when trailing CLI arguments supplied the command. Parsing null as RawObject fails here, so the source is left unchanged and the typed parser now rejects the request instead of applying the override. Treat a null process value like a missing process and replace it with an object containing commandLine; cover both one-shot and state-aware exec templates.
 MemberMatch::Unique(process_raw) => {
let process_source = process_raw.get();
let process: RawObject<'_> = serde_json::from_str(process_source).ok()?;

src/core/wxc_common/src/config_parser.rs:385

  • Encoding command-render failures as generic Decode/StateAware errors loses their origin. The new main path records valid-JSON one-shot failures as malformed_json and state-aware failures as schema_violation with unknown backend/phase, then exits before telemetry initialization; the removed paths used InvalidCommandOverride, retained backend/phase attribution, and emitted early-exit telemetry. Preserve a typed command-override error with its routing/context and handle it through the dedicated rejection and telemetry paths.
 let command = cmdline_from_argv_for_context(argv, context).map_err(|e| match phase {
None => ParseError::Decode(WxcError::ConfigParse(format!(
"invalid CLI command override: {e}"
))),
Some(_) => ParseError::StateAware(MxcError::malformed_request(format!(

Sign up for freeto 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.

4 participants

@MGudgin@dhoehna@bbonaby