Skip to content

feat(ns-arazzo-1): add support for Arazzo 1.1.0 - #498

Merged
char0n merged 8 commits into
mainfrom
char0n/297--arazzo-1-1-0
Aug 28, 2026
Merged

feat(ns-arazzo-1): add support for Arazzo 1.1.0#498
char0n merged 8 commits into
mainfrom
char0n/297--arazzo-1-1-0

Conversation

@char0n

@char0n char0n commented Aug 28, 2026

Copy link
Copy Markdown
Member

Adds Arazzo 1.1.0 support to @speclynx/apidom-ns-arazzo-1. The full 1.0.1 → 1.1.0 changelog this is based on is in #297 (comment).

Commits

  1. refactor: rename Criterion Expression Type Object — element criterionExpressionTypeexpressionType (the spec renamed it, as it is now shared by Criterion Object and Selector Object). Deprecated aliases kept: CriterionExpressionTypeElement, isCriterionExpressionTypeElement, refractCriterionExpressionType.
  2. fix: refract object-shaped Criterion type field — pre-existing 1.0.1 bug: an Expression Type Object shaped type was refracted into a stray MemberElement because the visitor returned the element instead of assigning it.
  3. feat: Arazzo 1.1.0
    • Arazzo Object: $self
    • Step Object: channelPath, timeout, correlationId, action, dependsOn (→ StepDependsOnElement)
    • Success Action Object / Failure Action Object: parameters (→ SuccessActionParametersElement / FailureActionParametersElement, items Parameter | Reusable)
    • Payload Replacement Object: targetSelectorType (string | Expression Type Object)
    • Selector Object: new SelectorElement, recognized in workflow/step outputs values, parameter value, payload replacement value and recursively inside request body payload
    • Media types for 1.1.0; findBy() defaults to 1.1.0
    • README + package description

Selector Object recognition

Any | {expression} | Selector Object positions are structurally ambiguous (OAI/Arazzo-Specification#519). Following the guidance there, an object is treated as a Selector Object only when all of its REQUIRED fields (context, selector, type) are present; otherwise it stays a plain ObjectElement. Covered by tests in both directions.

Out of scope (follow-ups)

  • apidom-reference: $self-based base URI / identity-based resolution; asyncapi source descriptions (blocked on AsyncAPI 3 support — 1.1.0 targets AsyncAPI v3 only).
  • Runtime expression grammar additions ($message.*, $self, embedded {}) — nothing in this namespace validates expressions.

Verification

  • apidom-ns-arazzo-1: 170 tests passing, tsc clean, lint clean; each commit type-checks in isolation
  • Downstream unchanged and passing: apidom-parser-adapter-arazzo-json-1 (17), apidom-parser-adapter-arazzo-yaml-1 (18), apidom-reference (1500). The adapters already accept any 1.x.y version and reuse the namespace media types, so 1.1.0 documents parse end-to-end.

Closes #297

char0n added 3 commits August 28, 2026 22:12
Arazzo 1.1.0 renames Criterion Expression Type Object to Expression Type
Object, as it is now shared by Criterion Object and Selector Object.
Deprecated aliases are kept for backward compatibility.

Refs #297

Claude-Session: https://claude.ai/code/session_01PDnq4REFLYbtzQrNmXxZM3
Signed-off-by: Vladimir Gorej <vladimir.gorej@gmail.com>
Criterion Object type field of Expression Type Object shape was
refracted into a stray MemberElement instead of ExpressionTypeElement,
because the visitor returned the refracted element instead of
assigning it.

Refs #297

Claude-Session: https://claude.ai/code/session_01PDnq4REFLYbtzQrNmXxZM3
Signed-off-by: Vladimir Gorej <vladimir.gorej@gmail.com>
- Arazzo Object: $self field
- Step Object: channelPath, timeout, correlationId, action and dependsOn
  fields
- Success Action Object and Failure Action Object: parameters field
- Payload Replacement Object: targetSelectorType field
- Selector Object: new element, recognized in workflow/step outputs,
  parameter value, payload replacement value and request body payload
- Expression Type Object: shared by Criterion Object, Selector Object and
  Payload Replacement Object
- media types for Arazzo 1.1.0

Selector Object is recognized structurally when all of its REQUIRED
fields are present, following OAI/Arazzo-Specification#519.

Refs #297

Claude-Session: https://claude.ai/code/session_01PDnq4REFLYbtzQrNmXxZM3
Signed-off-by: Vladimir Gorej <vladimir.gorej@gmail.com>
@char0n
char0n requested a balanced review from Copilot August 28, 2026 20:14

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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

char0n added 5 commits August 28, 2026 22:36
Clone the payload once via FallbackVisitor and replace Selector Object
shaped nodes in place with a single traversal, instead of rebuilding
the whole payload tree and bootstrapping a traversal per nested node.

Refs #297

Claude-Session: https://claude.ai/code/session_01PDnq4REFLYbtzQrNmXxZM3
Signed-off-by: Vladimir Gorej <vladimir.gorej@gmail.com>
Port AlternatingVisitor generic from apidom-ns-openapi-3-0 and use it
for Criterion type, Selector type, Payload Replacement
targetSelectorType and value, and Parameter value, replacing five
hand-written visitors with declarative alternators.

Refs #297

Claude-Session: https://claude.ai/code/session_01PDnq4REFLYbtzQrNmXxZM3
Signed-off-by: Vladimir Gorej <vladimir.gorej@gmail.com>
The plugin previously only mapped the info field. Map every
object/array-valued field of Arazzo 1.1.0 objects, list items and map
values of non-concrete elements, and JSON Schema keywords of workflow
inputs, following the apidom-ns-openapi-3-1 plugin.

Refs #297

Claude-Session: https://claude.ai/code/session_01PDnq4REFLYbtzQrNmXxZM3
Signed-off-by: Vladimir Gorej <vladimir.gorej@gmail.com>
- define deprecated CriterionExpressionTypeElement alias as const so
  the deprecation is surfaced to TypeScript consumers
- export isReusableLikeElement alongside isSelectorLikeElement
- update stale 1.0.1 references in comments and README example
- cover Selector Object with Expression Type Object in step outputs and
  consume mode of request body payload visitor with tests

Refs #297

Claude-Session: https://claude.ai/code/session_01PDnq4REFLYbtzQrNmXxZM3
Signed-off-by: Vladimir Gorej <vladimir.gorej@gmail.com>
Replace the unreferenced 1.0.1 workflows.json fixture with the Arazzo
Object example from the 1.1.0 specification and refract it end-to-end.

Refs #297

Claude-Session: https://claude.ai/code/session_01PDnq4REFLYbtzQrNmXxZM3
Signed-off-by: Vladimir Gorej <vladimir.gorej@gmail.com>
@char0n
char0n merged commit a35ac5b into main Aug 28, 2026
7 checks passed
@char0n
char0n deleted the char0n/297--arazzo-1-1-0 branch August 28, 2026 21:09
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.

feat(apidom-ns-arazzo-1): add support for Arazzo 1.1

2 participants