Skip to content

Async v1 phase5 & phase6 - Evaluator updated for compound criteria and root level resolution#25

Open
HimethW wants to merge 16 commits into
wso2:mainfrom
HimethW:asyncV1-phase5
Open

Async v1 phase5 & phase6 - Evaluator updated for compound criteria and root level resolution#25
HimethW wants to merge 16 commits into
wso2:mainfrom
HimethW:asyncV1-phase5

Conversation

@HimethW

@HimethW HimethW commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Stacked on #23 — please merge that first.

Changes

Brings the runtime expression engine up to Arazzo v1.1.0.

1. Compound boolean success criteria

successCriteria conditions now support &&, ||, !, and parentheses, not just a
single comparison. Example: ($statusCode == 200 || $statusCode == 201) && !$response.body.error.
Single comparisons behave exactly as before.

2. New runtime-expression roots

The evaluator can now resolve:

  • $self — the document's own URI
  • $sourceDescriptions.<name>.<ref> (match an operationId /
    workflowId in the referenced doc first, otherwise a Source Description field like url/type)
  • $components.<type>.<name>
  • $workflows.<id>.<field>
  • $message.header.* / $message.payload[#/...] (AsyncAPI — resolves from the message in scope)
  • $url / $method

3. Embedded expression serialization

When an expression is embedded in a string ({$...}), objects/arrays now serialize as JSON
instead of Go's map[...] format;

Plumbing

ExecutionState gained Self, Components, SourceDescriptionObjects, and WorkflowsByID,
filled by the runner from the Arazzo document.

Phase 6 was about replacement objects. This was completed during phase 4 selector object implementation. Only the XPath support is missing. This will be added at the end. (Implement the XPath engine and wire it to XPath selector objects and XPath replacement objects)

Closes #24

Copilot AI review requested due to automatic review settings July 2, 2026 09:27
@coderabbitai

coderabbitai Bot commented Jul 2, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@HimethW, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 40 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 52aa5a2c-3d7a-491e-9d61-38172376b8b1

📥 Commits

Reviewing files that changed from the base of the PR and between 317b97b and 5785e9b.

📒 Files selected for processing (17)
  • arazzo-designer-cli/internal/evaluator/evaluator.go
  • arazzo-designer-cli/internal/evaluator/evaluator_phase5_test.go
  • arazzo-designer-cli/internal/models/models.go
  • arazzo-designer-cli/internal/runner/executor/parameter_processor.go
  • arazzo-designer-cli/internal/runner/runner.go
  • examples/async_test/phase2_validation/README.md
  • examples/async_test/phase5/01-compound-criteria.arazzo.yaml
  • examples/async_test/phase5/02-self-expression.arazzo.yaml
  • examples/async_test/phase5/03-sourcedescriptions-expression.arazzo.yaml
  • examples/async_test/phase5/04-components-expression.arazzo.yaml
  • examples/async_test/phase5/05-workflows-expression.arazzo.yaml
  • examples/async_test/phase5/06-embedded-serialization.arazzo.yaml
  • examples/async_test/phase5/07-message-expression.arazzo.yaml
  • examples/async_test/phase5/08-escaped-quote-condition.arazzo.yaml
  • examples/async_test/phase5/README.md
  • examples/async_test/phase5/toolshop-openapi.yaml
  • extensions/arazzo-visualizer/asyncapi_plan.md
📝 Walkthrough

Walkthrough

The PR updates the CLI evaluator for Arazzo v1.1.0 runtime expressions and compound boolean criteria, adds shared Selector Object evaluation and JSONPath setting support, and wires those capabilities into output extraction, parameter processing, request-body handling, and workflow outputs. It also rewrites source-description resolution to honor $self and remote/local base URI rules, adds LSP validation and completion updates for action lists and expression types, and refreshes the build script, tests, examples, and documentation to cover the new behavior.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description is missing the required template sections and most requested details such as purpose, goals, approach, tests, and release notes. Reformat the PR description to the repository template and fill in the missing sections, especially Purpose, Goals, Approach, Automation tests, and Security checks.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title is clear and matches the PR’s main focus on phase 5 runtime-expression updates and compound criteria support.
Linked Issues check ✅ Passed The changes implement the requested runtime roots, compound criteria parser, embedded serialization, and supporting tests, with XPath still deferred.
Out of Scope Changes check ✅ Passed The additional selector, loader, validator, and sample changes are tied to the same Arazzo v1.1.0 expression and selector work.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR advances the Arazzo runtime expression/evaluation support to Arazzo v1.1.0 (Async track Phase 5) by expanding runtime-expression roots, adding boolean composition for successCriteria, and ensuring embedded expression interpolation serializes structured values consistently (JSON). It also updates the LSP validator and adds extensive example fixtures and unit tests to validate the new behaviors end-to-end.

Changes:

  • Extend the CLI evaluator with new v1.1.0 roots ($self, $message.*, $sourceDescriptions.*, $components.*, $workflows.*, $url, $method) and add &&/||/!/parentheses support for simple criteria.
  • Improve runtime “plumbing” by threading document-derived data through ExecutionState, and expand selector/replacement handling (including JSONPath replacement targets and JSON Pointer array-index writes).
  • Update LSP validation (component reference section enforcement, Expression Type Object checks) and add/update runnable examples & unit tests for Phases 1–5.

Reviewed changes

Copilot reviewed 53 out of 58 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
extensions/arazzo-visualizer/asyncapi_plan.md Updates the AsyncAPI implementation plan with Phase completion status and notes.
extensions/arazzo-visualizer/arazzo-designer-lsp/validator/validator.go Tightens reusable reference validation and adds criterion Expression Type Object validation.
extensions/arazzo-visualizer/arazzo-designer-lsp/validator/validator_test.go Adds tests for wrong-section component references and Expression Type Object validation.
extensions/arazzo-visualizer/arazzo-designer-lsp/validator/unknown_fields.go Adjusts unknown-field key sets (notably removing value from action shapes) and action checking.
extensions/arazzo-visualizer/arazzo-designer-lsp/completion/completion.go Extends completion context detection for reusable success/failure actions.
examples/async_test/phase5/toolshop-openapi.yaml Adds a Toolshop OpenAPI subset fixture for Phase 5 examples.
examples/async_test/phase5/README.md Documents Phase 5 example scenarios and expected outcomes.
examples/async_test/phase5/01-compound-criteria.arazzo.yaml Example demonstrating compound boolean successCriteria.
examples/async_test/phase5/02-self-expression.arazzo.yaml Example demonstrating $self runtime expression resolution.
examples/async_test/phase5/03-sourcedescriptions-expression.arazzo.yaml Example demonstrating $sourceDescriptions.<name>.<ref> priority rules.
examples/async_test/phase5/04-components-expression.arazzo.yaml Example demonstrating $components.<type>.<name> resolution.
examples/async_test/phase5/05-workflows-expression.arazzo.yaml Example demonstrating $workflows.<id>.<field> resolution.
examples/async_test/phase5/06-embedded-serialization.arazzo.yaml Example demonstrating JSON serialization for embedded {$...} expressions.
examples/async_test/phase5/07-message-expression.arazzo.yaml Illustrative example for $message.* expressions (future AsyncAPI runtime).
examples/async_test/phase4_selectors/toolshop-openapi.yaml Adds a Toolshop OpenAPI subset fixture for Phase 4 selector examples.
examples/async_test/phase4_selectors/README.md Documents Selector Object examples and where they evaluate in the runner.
examples/async_test/phase4_selectors/01-step-output-selector.arazzo.yaml Selector Object usage in step outputs.
examples/async_test/phase4_selectors/02-workflow-output-selector.arazzo.yaml Selector Object usage in workflow outputs.
examples/async_test/phase4_selectors/03-parameter-value-selector.arazzo.yaml Selector Object usage for parameter values.
examples/async_test/phase4_selectors/04-payload-field-selector.arazzo.yaml Selector Object usage nested in requestBody payload fields.
examples/async_test/phase4_selectors/05-replacement-value-selector.arazzo.yaml Selector Object usage as payload replacement values.
examples/async_test/phase4_selectors/06-fetched-payload-patch.arazzo.yaml Replacement patching against a whole externally supplied payload.
examples/async_test/phase4_selectors/07-jsonpath-replacement-target.arazzo.yaml Example for JSONPath replacement targets via targetSelectorType: jsonpath.
examples/async_test/phase4_selectors/08-jsonpointer-array-target.arazzo.yaml Example for JSON Pointer replacement targets indexing into arrays.
examples/async_test/phase3_selfResolution/toolshop-openapi.yaml Adds a Toolshop OpenAPI subset fixture for Phase 3 $self resolution examples.
examples/async_test/phase3_selfResolution/specs/api-spec.yaml Adds a subdir-only OpenAPI fixture to validate relative $self base shifting.
examples/async_test/phase3_selfResolution/README.md Documents Phase 3 $self/base-URI resolution scenarios.
examples/async_test/phase3_selfResolution/01-no-self-local.arazzo.yaml Phase 3 example: no $self baseline local resolution.
examples/async_test/phase3_selfResolution/02-relative-self-subdir.arazzo.yaml Phase 3 example: relative $self shifts base directory.
examples/async_test/phase3_selfResolution/03-absolute-remote-self.arazzo.yaml Phase 3 example: absolute $self makes relative sources remote.
examples/async_test/phase3_selfResolution/04-absolute-remote-source.arazzo.yaml Phase 3 example: absolute remote source URL behavior.
examples/async_test/phase2_validation/README.md Documents Phase 2 validation example fixtures and expected diagnostics.
examples/async_test/phase2_validation/00-valid.arazzo.yaml Valid v1.1.0 fixture for LSP validation baseline.
examples/async_test/phase2_validation/01-errors.arazzo.yaml Fixture exercising expected red-error validations.
examples/async_test/phase2_validation/02-warnings.arazzo.yaml Fixture exercising expected warning validations.
examples/async_test/phase2_validation/03-unknown-fields.arazzo.yaml Fixture exercising unknown-field warnings.
examples/async_test/phase1/README.md Documents Phase 1 test examples.
examples/async_test/phase1/v101-backward-compat.arazzo.yaml v1.0.1 compatibility fixture.
examples/async_test/phase1/v110-openapi-new-fields.arazzo.yaml v1.1.0 OpenAPI-targeted new-fields fixture.
examples/async_test/phase1/v110-asyncapi-channel.arazzo.yaml v1.1.0 AsyncAPI channelPath/action/correlation/timeout fixture.
examples/async_test/phase1/invalid-v110.arazzo.yaml Intentional invalid fixture for required-field diagnostics.
arazzo-designer-cli/internal/runner/runner.go Populates new ExecutionState fields; evaluates Selector Objects in workflow outputs.
arazzo-designer-cli/internal/runner/executor/parameter_processor.go Evaluates Selector Objects in payload/params; adds JSONPath targets; upgrades JSON Pointer writes to support arrays and escapes.
arazzo-designer-cli/internal/runner/executor/parameter_processor_test.go Adds tests for selector evaluation and replacement target/value handling.
arazzo-designer-cli/internal/runner/executor/output_extractor.go Evaluates Selector Objects in step outputs instead of preserving them raw.
arazzo-designer-cli/internal/runner/executor/output_extractor_test.go Adds tests verifying Selector Object evaluation in output extraction.
arazzo-designer-cli/internal/models/models.go Extends ExecutionState with v1.1.0 context fields (Self, Components, etc.).
arazzo-designer-cli/internal/mcpserver/server_run_test.go Updates test server construction to include lastResults initialization.
arazzo-designer-cli/internal/loader/resolve.go Adds v1.1.0 base-URI and source resolution helpers ($self-derived base).
arazzo-designer-cli/internal/loader/resolve_test.go Adds unit tests for base-URI and source-location resolution behavior.
arazzo-designer-cli/internal/loader/loader.go Wires $self base-URI resolution into source loading and adds load dedup by resolved location.
arazzo-designer-cli/internal/loader/loader_test.go Adds unit tests for local/remote $self loading and dedup behavior.
arazzo-designer-cli/internal/evaluator/selector.go Adds Selector Object + Expression Type Object runtime support (XPath deferred).
arazzo-designer-cli/internal/evaluator/selector_test.go Adds tests for selector detection, expression type parsing, JSONPath value selection, and selector evaluation.
arazzo-designer-cli/internal/evaluator/jsonpath.go Adds JSONPath setter support for replacement targets (SetJSONPath).
arazzo-designer-cli/internal/evaluator/evaluator.go Adds Phase 5 evaluator roots, compound boolean condition parsing, and JSON embedding for {$...} templates.
arazzo-designer-cli/internal/evaluator/evaluator_phase5_test.go Adds unit tests for compound criteria, new roots, embedded serialization, and $message.* resolution.
arazzo-designer-cli/build-binaries.ps1 Ensures correct working directory and updates copy destination to the extension’s CLI folder.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread arazzo-designer-cli/internal/evaluator/selector.go Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 8

🧹 Nitpick comments (3)
examples/async_test/phase3_selfResolution/README.md (1)

40-46: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Verify "Already verified" claims stay current.

The README states scenarios 01/02 have been checked end-to-end while 03/04 rely only on unit tests. Since these depend on live external APIs, consider revisiting this note if the referenced endpoints change over time.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/async_test/phase3_selfResolution/README.md` around lines 40 - 46,
The “Already verified” note in the README can become stale as the external
endpoints change, so update the wording to reflect the current verification
status rather than implying permanent validation. Revisit the summary for
scenarios 01/02 and 03/04 in the README section, and make sure it clearly ties
the claim to the existing loader checks and unit coverage without overstating
long-term freshness.
extensions/arazzo-visualizer/arazzo-designer-lsp/validator/validator.go (1)

363-366: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Expression Type Object validation not applied to action criteria.

validateExpressionType is only invoked for step.SuccessCriteria (Line 365). onSuccess/onFailure action criteria entries are also Criterion Objects and may carry the same Expression Type Object type field, but they aren't validated here, so a malformed dialect/version on an action's criteria goes undetected.

♻️ Suggested extension
 		for i, action := range step.OnSuccess {
 			ref := fmt.Sprintf("onSuccess[%d]", i)
 			errors = append(errors, v.validateComponentReference(action.Reference, doc, "successActions", step.StepID, step.LineNumber)...)
+			for ci, crit := range action.Criteria {
+				errors = append(errors, v.validateExpressionType(crit.Type, fmt.Sprintf("Step '%s' onSuccess[%d].criteria[%d]", step.StepID, i, ci), step.LineNumber)...)
+			}
 			if action.Reference == "" {

(similarly for OnFailure)

Also applies to: 677-721

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@extensions/arazzo-visualizer/arazzo-designer-lsp/validator/validator.go`
around lines 363 - 366, Expression Type Object validation is missing for action
criteria, so malformed `type` values on `onSuccess`/`onFailure` Criterion
Objects can slip through. Extend the existing `validateExpressionType` handling
in `validator.go` to cover each action’s `criteria` entries as well as
`step.SuccessCriteria`, using the same validation pattern and error context.
Locate the relevant logic in `validateStep` and the `OnSuccess`/`OnFailure`
validation paths, and apply the same `validateExpressionType` call for each
criterion’s `Type`.
arazzo-designer-cli/internal/evaluator/selector.go (1)

34-43: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Selector Object detection matches on key presence only.

IsSelectorObject treats any map containing context, selector, and type keys as a Selector Object, regardless of their value types. A legitimate payload object that happens to use these three field names (e.g., a domain object with a context/selector/type schema) would be misidentified and routed through selector evaluation instead of normal expression processing.

🛠️ Proposed fix to also validate value types
 func IsSelectorObject(v interface{}) bool {
 	m, ok := v.(map[string]interface{})
 	if !ok {
 		return false
 	}
-	_, hasContext := m["context"]
-	_, hasSelector := m["selector"]
-	_, hasType := m["type"]
-	return hasContext && hasSelector && hasType
+	ctx, hasContext := m["context"].(string)
+	sel, hasSelector := m["selector"].(string)
+	_, hasType := m["type"]
+	return hasContext && ctx != "" && hasSelector && sel != "" && hasType
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@arazzo-designer-cli/internal/evaluator/selector.go` around lines 34 - 43,
IsSelectorObject currently relies only on the presence of context, selector, and
type keys, so it can misclassify ordinary payload maps as selector objects.
Update IsSelectorObject to also validate the value types for those fields before
returning true, and keep the check localized to the selector evaluation path so
only real selector objects are recognized.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@arazzo-designer-cli/internal/evaluator/evaluator.go`:
- Around line 251-257: The AsyncAPI branch in evaluator.go is incorrectly using
findOperationIDInSpec, which only searches OpenAPI paths and prevents
$sourceDescriptions.<asyncapiSource>.<operationId> from resolving. Update the
navigation logic in the evaluator’s source-description handling to detect
AsyncAPI source descriptions and look up the operation by operationId within the
AsyncAPI spec (using the existing evaluator helpers around
navigatePath/findOperationIDInSpec), then continue navigating the remainder if
present; apply the same fix wherever the source-description lookup is repeated
later in the file.
- Around line 667-673: EvaluateSimpleCondition currently returns the result of
condParser.parseOr() even when the input was only partially parsed, so malformed
grouped expressions can still evaluate as true. Update condParser to track parse
validity and full token consumption (especially around parsePrimary/parseOr and
grouped parentheses handling), then have EvaluateSimpleCondition only return
true when the parse succeeds and the entire condition string is consumed. Make
sure the grouped-condition paths in condParser reject missing closing
parentheses instead of falling through with the inner comparison result.
- Around line 1029-1041: The embedValue helper only JSON-marshals
map[string]interface{} and []interface{}, so typed JSON-compatible maps/slices
like map[string]string or []string still use Go formatting. Update embedValue in
evaluator.go to detect any JSON-marshalable map/slice/array value generically
and serialize it with json.Marshal before falling back to fmt.Sprintf, while
keeping the existing string handling intact.

In `@arazzo-designer-cli/internal/runner/executor/parameter_processor.go`:
- Around line 82-89: On Selector Object evaluation failure, avoid propagating
the raw selector descriptor map as the resolved value. Update
PrepareRequestBody, resolveParameterValue, and applyReplacements so that when
EvaluateSelectorObject returns an error they log the warning and fall back to
nil or skip the insertion/replacement instead of leaving payload/value
unchanged. Use the existing evaluator.IsSelectorObject and
EvaluateSelectorObject paths to ensure failed selector resolution fails safe and
does not leak the original {context, selector, type} map downstream.
- Around line 241-251: The $... replacement path in parameter processing
silently accepts nil results, unlike resolveParameterValue. Update the
string-expression branch in parameter_processor.go’s replacement logic to
capture the result of evaluator.EvaluateExpression, check for nil, and log a
warning when resolution fails before assigning it back to value. Use the
existing logging pattern from resolveParameterValue and keep the fix localized
to the replacement handling in parameter_processor.go.

In `@examples/async_test/phase2_validation/README.md`:
- Line 10: The README’s quick-reference for 01-errors.arazzo.yaml is
inconsistent with the fixture: update the stated error count to match the actual
annotated instances, and reconcile the rule list so it only includes rules
demonstrated by the file. Use the 01-errors.arazzo.yaml fixture and the nearby
quick-reference list in README as the source of truth, and either add a concrete
invalid arazzo version example or remove that rule from the listed catches.

In `@examples/async_test/phase5/README.md`:
- Line 12: The README table row in the async_test phase5 example has unescaped
pipe characters in the `successCriteria` cell, which causes markdown table
parsing to split the row into extra columns. Update the row in the README so the
`||` operator is escaped or otherwise protected inside the table cell, using the
existing table entry for `01-compound-criteria.arazzo.yaml` as the target to fix
the column-count mismatch.

In `@extensions/arazzo-visualizer/asyncapi_plan.md`:
- Line 206: The validator.go link target is incorrect because the current
relative path escapes extensions/arazzo-visualizer and resolves to a
non-existent location. Update the link in asyncapi_plan.md to point directly to
arazzo-designer-lsp/validator/validator.go, keeping the surrounding reference
text unchanged and ensuring the markdown link resolves correctly from the
current document location.

---

Nitpick comments:
In `@arazzo-designer-cli/internal/evaluator/selector.go`:
- Around line 34-43: IsSelectorObject currently relies only on the presence of
context, selector, and type keys, so it can misclassify ordinary payload maps as
selector objects. Update IsSelectorObject to also validate the value types for
those fields before returning true, and keep the check localized to the selector
evaluation path so only real selector objects are recognized.

In `@examples/async_test/phase3_selfResolution/README.md`:
- Around line 40-46: The “Already verified” note in the README can become stale
as the external endpoints change, so update the wording to reflect the current
verification status rather than implying permanent validation. Revisit the
summary for scenarios 01/02 and 03/04 in the README section, and make sure it
clearly ties the claim to the existing loader checks and unit coverage without
overstating long-term freshness.

In `@extensions/arazzo-visualizer/arazzo-designer-lsp/validator/validator.go`:
- Around line 363-366: Expression Type Object validation is missing for action
criteria, so malformed `type` values on `onSuccess`/`onFailure` Criterion
Objects can slip through. Extend the existing `validateExpressionType` handling
in `validator.go` to cover each action’s `criteria` entries as well as
`step.SuccessCriteria`, using the same validation pattern and error context.
Locate the relevant logic in `validateStep` and the `OnSuccess`/`OnFailure`
validation paths, and apply the same `validateExpressionType` call for each
criterion’s `Type`.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 803a722e-c0e1-4813-a821-f712e3bd7189

📥 Commits

Reviewing files that changed from the base of the PR and between efb0c7f and 9e9011b.

📒 Files selected for processing (58)
  • arazzo-designer-cli/build-binaries.ps1
  • arazzo-designer-cli/internal/evaluator/evaluator.go
  • arazzo-designer-cli/internal/evaluator/evaluator_phase5_test.go
  • arazzo-designer-cli/internal/evaluator/jsonpath.go
  • arazzo-designer-cli/internal/evaluator/selector.go
  • arazzo-designer-cli/internal/evaluator/selector_test.go
  • arazzo-designer-cli/internal/loader/loader.go
  • arazzo-designer-cli/internal/loader/loader_test.go
  • arazzo-designer-cli/internal/loader/resolve.go
  • arazzo-designer-cli/internal/loader/resolve_test.go
  • arazzo-designer-cli/internal/mcpserver/server_run_test.go
  • arazzo-designer-cli/internal/models/models.go
  • arazzo-designer-cli/internal/runner/executor/output_extractor.go
  • arazzo-designer-cli/internal/runner/executor/output_extractor_test.go
  • arazzo-designer-cli/internal/runner/executor/parameter_processor.go
  • arazzo-designer-cli/internal/runner/executor/parameter_processor_test.go
  • arazzo-designer-cli/internal/runner/runner.go
  • examples/async_test/phase1/README.md
  • examples/async_test/phase1/invalid-v110.arazzo.yaml
  • examples/async_test/phase1/v101-backward-compat.arazzo.yaml
  • examples/async_test/phase1/v110-asyncapi-channel.arazzo.yaml
  • examples/async_test/phase1/v110-openapi-new-fields.arazzo.yaml
  • examples/async_test/phase2_validation/00-valid.arazzo.yaml
  • examples/async_test/phase2_validation/01-errors.arazzo.yaml
  • examples/async_test/phase2_validation/02-warnings.arazzo.yaml
  • examples/async_test/phase2_validation/03-unknown-fields.arazzo.yaml
  • examples/async_test/phase2_validation/README.md
  • examples/async_test/phase3_selfResolution/01-no-self-local.arazzo.yaml
  • examples/async_test/phase3_selfResolution/02-relative-self-subdir.arazzo.yaml
  • examples/async_test/phase3_selfResolution/03-absolute-remote-self.arazzo.yaml
  • examples/async_test/phase3_selfResolution/04-absolute-remote-source.arazzo.yaml
  • examples/async_test/phase3_selfResolution/README.md
  • examples/async_test/phase3_selfResolution/specs/api-spec.yaml
  • examples/async_test/phase3_selfResolution/toolshop-openapi.yaml
  • examples/async_test/phase4_selectors/01-step-output-selector.arazzo.yaml
  • examples/async_test/phase4_selectors/02-workflow-output-selector.arazzo.yaml
  • examples/async_test/phase4_selectors/03-parameter-value-selector.arazzo.yaml
  • examples/async_test/phase4_selectors/04-payload-field-selector.arazzo.yaml
  • examples/async_test/phase4_selectors/05-replacement-value-selector.arazzo.yaml
  • examples/async_test/phase4_selectors/06-fetched-payload-patch.arazzo.yaml
  • examples/async_test/phase4_selectors/07-jsonpath-replacement-target.arazzo.yaml
  • examples/async_test/phase4_selectors/08-jsonpointer-array-target.arazzo.yaml
  • examples/async_test/phase4_selectors/README.md
  • examples/async_test/phase4_selectors/toolshop-openapi.yaml
  • examples/async_test/phase5/01-compound-criteria.arazzo.yaml
  • examples/async_test/phase5/02-self-expression.arazzo.yaml
  • examples/async_test/phase5/03-sourcedescriptions-expression.arazzo.yaml
  • examples/async_test/phase5/04-components-expression.arazzo.yaml
  • examples/async_test/phase5/05-workflows-expression.arazzo.yaml
  • examples/async_test/phase5/06-embedded-serialization.arazzo.yaml
  • examples/async_test/phase5/07-message-expression.arazzo.yaml
  • examples/async_test/phase5/README.md
  • examples/async_test/phase5/toolshop-openapi.yaml
  • extensions/arazzo-visualizer/arazzo-designer-lsp/completion/completion.go
  • extensions/arazzo-visualizer/arazzo-designer-lsp/validator/unknown_fields.go
  • extensions/arazzo-visualizer/arazzo-designer-lsp/validator/validator.go
  • extensions/arazzo-visualizer/arazzo-designer-lsp/validator/validator_test.go
  • extensions/arazzo-visualizer/asyncapi_plan.md

Comment thread arazzo-designer-cli/internal/evaluator/evaluator.go Outdated
Comment thread arazzo-designer-cli/internal/evaluator/evaluator.go Outdated
Comment thread arazzo-designer-cli/internal/evaluator/evaluator.go
Comment thread arazzo-designer-cli/internal/runner/executor/parameter_processor.go
Comment thread arazzo-designer-cli/internal/runner/executor/parameter_processor.go
Comment thread examples/async_test/phase2_validation/README.md Outdated
Comment thread examples/async_test/phase5/README.md Outdated
Comment thread extensions/arazzo-visualizer/asyncapi_plan.md Outdated
@HimethW HimethW changed the title Async v1 phase5 Async v1 phase5 - Evaluator updated for compound criteria and root level resolution Jul 2, 2026
@HimethW HimethW changed the title Async v1 phase5 - Evaluator updated for compound criteria and root level resolution Async v1 phase5 & phase6 - Evaluator updated for compound criteria and root level resolution Jul 2, 2026
axewilledge
axewilledge previously approved these changes Jul 6, 2026
@HimethW HimethW dismissed axewilledge’s stale review July 6, 2026 05:27

The merge-base changed after approval.

HimethW added 14 commits July 6, 2026 19:26
…elf, $components., $sourceDescriptions, and $workflows
… the runtime engine. now it supports $self, $sourcedescriptios etc for input parameters etc. also added multiple condition comparison support such as a==b && b==c type expressions
…tionId> for AsyncAPI sources via the operations map (was searching OpenAPI paths only)
…ut / unbalanced parens) — fail safe to false instead of evaluating a partial parse
…p instead of leaking the raw {context,selector,type} descriptor into payloads, parameters, and replacements
…ession value resolves to nil (was silently injecting null), matching resolveParameterValue's nil handling
…rop the undemonstrated 'invalid arazzo version' rule from the catch list
…-criteria table cell so the row doesn't split into extra columns
…sp/validator/validator.go (old path escaped the folder to a non-existent location)
…y indices + JSONPath complete; XPath in the end-of-project batch)
axewilledge
axewilledge previously approved these changes Jul 7, 2026
@HimethW HimethW dismissed axewilledge’s stale review July 7, 2026 04:28

The merge-base changed after approval.

@axewilledge axewilledge requested a review from Copilot July 7, 2026 04:44

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 36 out of 41 changed files in this pull request and generated 2 comments.

Comment thread arazzo-designer-cli/internal/evaluator/evaluator.go
Comment thread arazzo-designer-cli/internal/evaluator/evaluator.go
…on string literals in readComparisonChunk and topLevelIndex, so an escaped quote can't prematurely end the string and expose inner operators
…ria string literal) demonstrating the condition-parser escaped-quote fix
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.

Arazzo v1.1.0 - Phase 5: Runtime Expression Upgrade (v1.1.0)

3 participants