Async v1 phase5 & phase6 - Evaluator updated for compound criteria and root level resolution#25
Async v1 phase5 & phase6 - Evaluator updated for compound criteria and root level resolution#25HimethW wants to merge 16 commits into
Conversation
|
Warning Review limit reached
Next review available in: 40 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the 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 configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (17)
📝 WalkthroughWalkthroughThe 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 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
Actionable comments posted: 8
🧹 Nitpick comments (3)
examples/async_test/phase3_selfResolution/README.md (1)
40-46: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueVerify "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 winExpression Type Object validation not applied to action
criteria.
validateExpressionTypeis only invoked forstep.SuccessCriteria(Line 365).onSuccess/onFailureactioncriteriaentries are also Criterion Objects and may carry the same Expression Type Objecttypefield, 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 winSelector Object detection matches on key presence only.
IsSelectorObjecttreats any map containingcontext,selector, andtypekeys 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 acontext/selector/typeschema) 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
📒 Files selected for processing (58)
arazzo-designer-cli/build-binaries.ps1arazzo-designer-cli/internal/evaluator/evaluator.goarazzo-designer-cli/internal/evaluator/evaluator_phase5_test.goarazzo-designer-cli/internal/evaluator/jsonpath.goarazzo-designer-cli/internal/evaluator/selector.goarazzo-designer-cli/internal/evaluator/selector_test.goarazzo-designer-cli/internal/loader/loader.goarazzo-designer-cli/internal/loader/loader_test.goarazzo-designer-cli/internal/loader/resolve.goarazzo-designer-cli/internal/loader/resolve_test.goarazzo-designer-cli/internal/mcpserver/server_run_test.goarazzo-designer-cli/internal/models/models.goarazzo-designer-cli/internal/runner/executor/output_extractor.goarazzo-designer-cli/internal/runner/executor/output_extractor_test.goarazzo-designer-cli/internal/runner/executor/parameter_processor.goarazzo-designer-cli/internal/runner/executor/parameter_processor_test.goarazzo-designer-cli/internal/runner/runner.goexamples/async_test/phase1/README.mdexamples/async_test/phase1/invalid-v110.arazzo.yamlexamples/async_test/phase1/v101-backward-compat.arazzo.yamlexamples/async_test/phase1/v110-asyncapi-channel.arazzo.yamlexamples/async_test/phase1/v110-openapi-new-fields.arazzo.yamlexamples/async_test/phase2_validation/00-valid.arazzo.yamlexamples/async_test/phase2_validation/01-errors.arazzo.yamlexamples/async_test/phase2_validation/02-warnings.arazzo.yamlexamples/async_test/phase2_validation/03-unknown-fields.arazzo.yamlexamples/async_test/phase2_validation/README.mdexamples/async_test/phase3_selfResolution/01-no-self-local.arazzo.yamlexamples/async_test/phase3_selfResolution/02-relative-self-subdir.arazzo.yamlexamples/async_test/phase3_selfResolution/03-absolute-remote-self.arazzo.yamlexamples/async_test/phase3_selfResolution/04-absolute-remote-source.arazzo.yamlexamples/async_test/phase3_selfResolution/README.mdexamples/async_test/phase3_selfResolution/specs/api-spec.yamlexamples/async_test/phase3_selfResolution/toolshop-openapi.yamlexamples/async_test/phase4_selectors/01-step-output-selector.arazzo.yamlexamples/async_test/phase4_selectors/02-workflow-output-selector.arazzo.yamlexamples/async_test/phase4_selectors/03-parameter-value-selector.arazzo.yamlexamples/async_test/phase4_selectors/04-payload-field-selector.arazzo.yamlexamples/async_test/phase4_selectors/05-replacement-value-selector.arazzo.yamlexamples/async_test/phase4_selectors/06-fetched-payload-patch.arazzo.yamlexamples/async_test/phase4_selectors/07-jsonpath-replacement-target.arazzo.yamlexamples/async_test/phase4_selectors/08-jsonpointer-array-target.arazzo.yamlexamples/async_test/phase4_selectors/README.mdexamples/async_test/phase4_selectors/toolshop-openapi.yamlexamples/async_test/phase5/01-compound-criteria.arazzo.yamlexamples/async_test/phase5/02-self-expression.arazzo.yamlexamples/async_test/phase5/03-sourcedescriptions-expression.arazzo.yamlexamples/async_test/phase5/04-components-expression.arazzo.yamlexamples/async_test/phase5/05-workflows-expression.arazzo.yamlexamples/async_test/phase5/06-embedded-serialization.arazzo.yamlexamples/async_test/phase5/07-message-expression.arazzo.yamlexamples/async_test/phase5/README.mdexamples/async_test/phase5/toolshop-openapi.yamlextensions/arazzo-visualizer/arazzo-designer-lsp/completion/completion.goextensions/arazzo-visualizer/arazzo-designer-lsp/validator/unknown_fields.goextensions/arazzo-visualizer/arazzo-designer-lsp/validator/validator.goextensions/arazzo-visualizer/arazzo-designer-lsp/validator/validator_test.goextensions/arazzo-visualizer/asyncapi_plan.md
The merge-base changed after approval.
…ponents, source descs and workflowIDs
…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)
The merge-base changed after approval.
…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
Stacked on #23 — please merge that first.
Changes
Brings the runtime expression engine up to Arazzo v1.1.0.
1. Compound boolean success criteria
successCriteriaconditions now support&&,||,!, and parentheses, not just asingle 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/$method3. Embedded expression serialization
When an expression is embedded in a string (
{$...}), objects/arrays now serialize as JSONinstead of Go's
map[...]format;Plumbing
ExecutionStategainedSelf,Components,SourceDescriptionObjects, andWorkflowsByID,filled by the runner from the Arazzo document.
Closes #24