From 38198c9f1fd896466f843d03e43be303b43fb88d Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 18 Feb 2026 10:59:29 -0500 Subject: [PATCH 01/42] feat: adds string literal replacement syntax Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index 7f771e7..aee5251 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -157,6 +157,33 @@ The properties of the `update` or `copy` object MUST be compatible with the targ This object MAY be extended with [Specification Extensions](#specification-extensions). +### String literal replacement syntax + +The following string replacement syntax MAY be used: + +%source.key% + +Where **source** is a known source which value MUST ONLY be **env** for environment variables, or **param** for parameters. The key MUST only contain the following characters A-Za-z0-9, contain at least one character and start with a letter. + +#### ABNF notation + +```abnf +replacement-string = "%" source "." key "%" +source = "env" / "param" +key = ALPHA *( ALPHA / DIGIT ) +``` + +Where ALPHA and digit rules are defined in [[RFC5234]]. + +#### Environment replacement source + +When the environment replacement source is used, the key MUST match (case-insensitive) an environment variable defined for the process parsing the Overlay document. If the environment variable is not defined, the processor MAY either replace it with an empty string or return an error. + +#### Parameter replacement source + +When the parameter replacement source is used, the key MUST match (case-sensitive) a corresponding parameter defined for the action template. + + ### Examples #### Structured Overlay Example From 74f3a40999e2d18980ac2ee03f9fb273f019d72f Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 18 Feb 2026 11:55:59 -0500 Subject: [PATCH 02/42] feat: adds high level definitions for templates and templates parameters Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index aee5251..923b3a6 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -155,6 +155,31 @@ The properties of the `update` or `copy` object MUST be compatible with the targ - An object value of the `update` or `copy` property is recursively merged with an object value of the target property. - Other property value combinations are incompatible and result in an error. +This object MAY be extended with [Specification Extensions](#specification-extensions). + +#### Action template object + +This object represents one or more changes to be applied to the target document at the locations defined by the target JSONPath expression and reused in one of more action references. + +##### Fixed fields + +| Field Name | Type | Description | +| ---- | :----: | ---- | +| parameters | [[Action template parameter object](#action-template-parameter-object)] | A list of parameters to be used during string literal replacement. Optional. | +| Any field defined in the [action object](#action-object) | mixed | The [string literal replacement syntax](#string-literal-replacement-syntax) MAY be used for any of the fields, and the replacements MUST be evaluated as the template reference is being resolved. | + +This object MAY be extended with [Specification Extensions](#specification-extensions). + +#### Action template parameter object + +##### Fixed fields + +| Field Name | Type | Description | +| ---- | :----: | ---- | +| name | `string` | The name of the parameter, MUST match the key for the string literal replacement expression. Required. | +| overlay | `string` | **REQUIRED**. This string MUST be the [version number](#versions) of the Overlay Specification that the Overlay document uses. The `overlay` field SHOULD be used by tooling to interpret the Overlay document. | | info | [Info Object](#info-object) | **REQUIRED**. Provides metadata about the Overlay. The metadata MAY be used by tooling as required. | | extends | `string` | URI reference that identifies the target document (such as an [[OpenAPI]] document) this overlay applies to. | -| actions | [[Action Object](#action-object)] | **REQUIRED** An ordered list of actions to be applied to the target document. The array MUST contain at least one value. | +| actions | [[Action Object](#action-object) or [Action Template Reference Object](#action-template-reference-object)] | **REQUIRED** An ordered list of actions to be applied to the target document. The array MUST contain at least one value. | +| components | [Component Object](#component-object) | A set of components to reuse across the Overlay Document. Optional. | This object MAY be extended with [Specification Extensions](#specification-extensions). @@ -128,6 +129,18 @@ The metadata MAY be used by the clients if needed. This object MAY be extended with [Specification Extensions](#specification-extensions). +#### Component Object + +The object provides a set of components to be reused across the Overlay document. + +##### Fixed Fields + +| Field Name | Type | Description | +| ---- | :----: | ---- | +| actionTemplates | Map(`string`, [Action Template Object](#action-template-object)) | A key-value set of action templates to reference in the actions. Optional. | + +This object MAY be extended with [Specification Extensions](#specification-extensions). + #### Action Object This object represents one or more changes to be applied to the target document at the locations defined by the target JSONPath expression. @@ -176,10 +189,21 @@ This object MAY be extended with [Specification Extensions](#specification-exten | Field Name | Type | Description | | ---- | :----: | ---- | -| name | `string` | The name of the parameter, MUST match the key for the string literal replacement expression. Required. | +| name | `string` | **REQUIRED** The name of the parameter, MUST match the key for the string literal replacement expression. | | $ref | `string` | **REQUIRED** A valid reference to an action template in the components section, represented as `#/components/actionTemplates/actionTemplateKey`. | +| Date: Wed, 25 Feb 2026 10:13:22 -0500 Subject: [PATCH 05/42] feat: adds reusable actions to the components Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 99 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 1 deletion(-) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index 61d3b65..241a606 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -84,7 +84,7 @@ This is the root object of the [Overlay](#overlay). | overlay | `string` | **REQUIRED**. This string MUST be the [version number](#versions) of the Overlay Specification that the Overlay document uses. The `overlay` field SHOULD be used by tooling to interpret the Overlay document. | | info | [Info Object](#info-object) | **REQUIRED**. Provides metadata about the Overlay. The metadata MAY be used by tooling as required. | | extends | `string` | URI reference that identifies the target document (such as an [[OpenAPI]] document) this overlay applies to. | -| actions | [[Action Object](#action-object) or [Action Template Reference Object](#action-template-reference-object)] | **REQUIRED** An ordered list of actions to be applied to the target document. The array MUST contain at least one value. | +| actions | [[Action Object](#action-object) or [Action Template Reference Object](#action-template-reference-object) or [Action Reference Object](#action-reference-object)] | **REQUIRED** An ordered list of actions to be applied to the target document. The array MUST contain at least one value. | | components | [Component Object](#component-object) | A set of components to reuse across the Overlay Document. Optional. | This object MAY be extended with [Specification Extensions](#specification-extensions). @@ -138,6 +138,9 @@ The object provides a set of components to be reused across the Overlay document | Field Name | Type | Description | | ---- | :----: | ---- | | actionTemplates | Map(`string`, [Action Template Object](#action-template-object)) | A key-value set of action templates to reference in the actions. Optional. | +| actions | Map(`string`, [Action Object](#action-object) or [Action Template Reference Object](#action-template-reference-object)) | A key-value set of actions or action template references to use in the actions. Optional. | + +> Note: the target field for components actions is Optional. This object MAY be extended with [Specification Extensions](#specification-extensions). @@ -195,6 +198,15 @@ This object MAY be extended with [Specification Extensions](#specification-exten This object MAY be extended with [Specification Extensions](#specification-extensions). +#### Action reference object + +##### Fixed fields + +| Field Name | Type | Description | +| ---- | :----: | ---- | +| $ref | `string` | **REQUIRED** A valid reference to an action in the components section, represented as `#/components/actions/actionTemplateKey`. | +| target | `string` | A RFC9535 JSONPath query expression selecting nodes in the target document and overrides the target defined in the referenced action. Optional when the resolved action defines a target, required when the resolved action does not. | + #### Action template reference object ##### Fixed fields @@ -635,6 +647,91 @@ paths: description: OK ``` +##### Action Reference Example + +###### Source Description + +```yaml +openapi: 3.2.0 +info: + title: Example API + version: 1.0.0 +paths: + /items: + get: + responses: + 200: + description: OK + /some-items: + delete: + responses: + 200: + description: OK +``` + +###### Overlay + +```yaml +overlay: 1.2.0 +info: + title: Use templates to insert error responses + version: 1.0.0 +components: + actions: + errorResponse: + update: + 404: + description: Not Found + application/json: + schema: + type: object + properties: + message: + type: string + description: Adds an error response to the %param.pathItem% path item %param.operation% operation +actions: +- $ref: '#/components/actions/errorResponse' + target: "$.paths['items'].get.responses" +- $ref: '#/components/actions/errorResponse' + target: "$.paths['some-items'].delete.responses" +``` + +###### Result description + +```yaml +openapi: 3.2.0 +info: + title: Example API + version: 1.0.0 +paths: + /items: + get: + responses: + 200: + description: OK + 404: + description: Not Found + application/json: + schema: + type: object + properties: + errorMessage: + type: string + /some-items: + delete: + responses: + 200: + description: OK + 404: + description: Not Found + application/json: + schema: + type: object + properties: + deleteErrorMessage: + type: string +``` + ##### Action Template Example ###### Source Description From 06a21c9c5b2ad6513f2d4a340d94d22c6fb5eed2 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 25 Feb 2026 10:19:33 -0500 Subject: [PATCH 06/42] feat: adds environment variables template Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index 241a606..8e3f8c5 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -182,6 +182,7 @@ This object represents one or more changes to be applied to the target document | Field Name | Type | Description | | ---- | :----: | ---- | | parameters | [[Action template parameter object](#action-template-parameter-object)] | A list of parameters to be used during string literal replacement. Optional. | +| environmentVariables | [[Action template parameter object](#action-template-parameter-object)] | A list of environment variables to be used during string literal replacement. Optional. | | Any field defined in the [action object](#action-object) | mixed | The [string literal replacement syntax](#string-literal-replacement-syntax) MAY be used for any of the fields, and the replacements MUST be evaluated as the template reference is being resolved. | This object MAY be extended with [Specification Extensions](#specification-extensions). @@ -774,6 +775,9 @@ components: properties: '%param.propertyName%': type: string + stageName: + type: string + const: '%env.stageName%' description: Adds an error response to the %param.pathItem% path item %param.operation% operation parameters: - name: pathItem @@ -781,6 +785,9 @@ components: default: get - name: propertyName default: errorMessage + environmentVariables: + - name: stageName + default: dev actions: - $ref: '#/components/actionTemplates/errorResponse' parameterValues: @@ -792,6 +799,8 @@ actions: propertyName: deleteErrorMessage ``` +> Note: in this example, not value is set for the process environment variable "stageName". + ###### Result description ```yaml @@ -813,6 +822,9 @@ paths: properties: errorMessage: type: string + stageName: + type: string + const: dev /some-items: delete: responses: @@ -826,6 +838,9 @@ paths: properties: deleteErrorMessage: type: string + stageName: + type: string + const: dev ``` ### Specification Extensions From 553fca8413b75352d2e8675ca9818a59ba5678b7 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 25 Feb 2026 11:37:43 -0500 Subject: [PATCH 07/42] chore: capitalization fixes Co-authored-by: Ralf Handl --- versions/1.2.0-dev.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index 8e3f8c5..0a11f90 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -85,7 +85,7 @@ This is the root object of the [Overlay](#overlay). | info | [Info Object](#info-object) | **REQUIRED**. Provides metadata about the Overlay. The metadata MAY be used by tooling as required. | | extends | `string` | URI reference that identifies the target document (such as an [[OpenAPI]] document) this overlay applies to. | | actions | [[Action Object](#action-object) or [Action Template Reference Object](#action-template-reference-object) or [Action Reference Object](#action-reference-object)] | **REQUIRED** An ordered list of actions to be applied to the target document. The array MUST contain at least one value. | -| components | [Component Object](#component-object) | A set of components to reuse across the Overlay Document. Optional. | +| components | [Components Object](#components-object) | A set of components to reuse across the Overlay Document. Optional. | This object MAY be extended with [Specification Extensions](#specification-extensions). @@ -129,7 +129,7 @@ The metadata MAY be used by the clients if needed. This object MAY be extended with [Specification Extensions](#specification-extensions). -#### Component Object +#### Components Object The object provides a set of components to be reused across the Overlay document. @@ -173,7 +173,7 @@ The properties of the `update` or `copy` object MUST be compatible with the targ This object MAY be extended with [Specification Extensions](#specification-extensions). -#### Action template object +#### Action Template Object This object represents one or more changes to be applied to the target document at the locations defined by the target JSONPath expression and reused in one of more action references. @@ -187,7 +187,7 @@ This object represents one or more changes to be applied to the target document This object MAY be extended with [Specification Extensions](#specification-extensions). -#### Action template parameter object +#### Action Template Parameter Object ##### Fixed fields @@ -199,7 +199,7 @@ This object MAY be extended with [Specification Extensions](#specification-exten This object MAY be extended with [Specification Extensions](#specification-extensions). -#### Action reference object +#### Action Reference Object ##### Fixed fields @@ -208,7 +208,7 @@ This object MAY be extended with [Specification Extensions](#specification-exten | $ref | `string` | **REQUIRED** A valid reference to an action in the components section, represented as `#/components/actions/actionTemplateKey`. | | target | `string` | A RFC9535 JSONPath query expression selecting nodes in the target document and overrides the target defined in the referenced action. Optional when the resolved action defines a target, required when the resolved action does not. | -#### Action template reference object +#### Action Template Reference Object ##### Fixed fields @@ -219,7 +219,7 @@ This object MAY be extended with [Specification Extensions](#specification-exten This object MAY be extended with [Specification Extensions](#specification-extensions). -### String literal replacement syntax +### String Literal Replacement Syntax The following string replacement syntax MAY be used: @@ -227,7 +227,7 @@ The following string replacement syntax MAY be used: Where **source** is a known source which value MUST ONLY be **env** for environment variables, or **param** for parameters. The key MUST only contain the following characters A-Za-z0-9, contain at least one character and start with a letter. -#### ABNF notation +#### ABNF Notation ```abnf replacement-string = "%" source "." key "%" @@ -235,13 +235,13 @@ source = "env" / "param" key = ALPHA *( ALPHA / DIGIT ) ``` -Where ALPHA and digit rules are defined in [[RFC5234]]. +Where ALPHA and DIGIT rules are defined in [[RFC5234]]. -#### Environment replacement source +#### Environment Replacement Source When the environment replacement source is used, the key MUST match (case-insensitive) an environment variable defined for the process parsing the Overlay document. If the environment variable is not defined, the processor MAY either replace it with an empty string or return an error. -#### Parameter replacement source +#### Parameter Replacement Source When the parameter replacement source is used, the key MUST match (case-sensitive) a corresponding parameter defined for the action template. @@ -697,7 +697,7 @@ actions: target: "$.paths['some-items'].delete.responses" ``` -###### Result description +###### Result Description ```yaml openapi: 3.2.0 @@ -801,7 +801,7 @@ actions: > Note: in this example, not value is set for the process environment variable "stageName". -###### Result description +###### Result Description ```yaml openapi: 3.2.0 From 9329227fe9e903f318724f8be238b85f4f2014c8 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 25 Feb 2026 11:38:17 -0500 Subject: [PATCH 08/42] chore: typo fixes Co-authored-by: Ralf Handl --- versions/1.2.0-dev.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index 0a11f90..d012eef 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -215,7 +215,7 @@ This object MAY be extended with [Specification Extensions](#specification-exten | Field Name | Type | Description | | ---- | :----: | ---- | | $ref | `string` | **REQUIRED** A valid reference to an action template in the components section, represented as `#/components/actionTemplates/actionTemplateKey`. | -| parameterValues | `Map(string, Any)` | A set of values to use for the template parameters, the key MUST match the parameter name. Optional. | This object MAY be extended with [Specification Extensions](#specification-extensions). @@ -225,7 +225,7 @@ The following string replacement syntax MAY be used: %source.key% -Where **source** is a known source which value MUST ONLY be **env** for environment variables, or **param** for parameters. The key MUST only contain the following characters A-Za-z0-9, contain at least one character and start with a letter. +Where **source** is a known source whose value MUST ONLY be **env** for environment variables, or **param** for parameters. The key MUST only contain the following characters A-Za-z0-9, contain at least one character and start with a letter. #### ABNF Notation @@ -799,7 +799,7 @@ actions: propertyName: deleteErrorMessage ``` -> Note: in this example, not value is set for the process environment variable "stageName". +> Note: in this example, no value is set for the process environment variable "stageName". ###### Result Description From d01be1eea369af03af85d338888a21f8be04e555 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 25 Feb 2026 11:39:52 -0500 Subject: [PATCH 09/42] fix: case sensitive environment variable Co-authored-by: Ralf Handl --- versions/1.2.0-dev.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index d012eef..45e2596 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -239,7 +239,7 @@ Where ALPHA and DIGIT rules are defined in [[RFC5234]]. #### Environment Replacement Source -When the environment replacement source is used, the key MUST match (case-insensitive) an environment variable defined for the process parsing the Overlay document. If the environment variable is not defined, the processor MAY either replace it with an empty string or return an error. +When the environment replacement source is used, the key MUST match (case-sensitive) an environment variable defined for the process parsing the Overlay document. If the environment variable is not defined, the processor MAY either replace it with an empty string or return an error. #### Parameter Replacement Source From 0b71e07e67c4acaa05e219436226d7adf69d2895 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 3 Mar 2026 08:33:11 -0500 Subject: [PATCH 10/42] feat: merges reusable actions Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index 8e3f8c5..fef88d7 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -84,7 +84,7 @@ This is the root object of the [Overlay](#overlay). | overlay | `string` | **REQUIRED**. This string MUST be the [version number](#versions) of the Overlay Specification that the Overlay document uses. The `overlay` field SHOULD be used by tooling to interpret the Overlay document. | | info | [Info Object](#info-object) | **REQUIRED**. Provides metadata about the Overlay. The metadata MAY be used by tooling as required. | | extends | `string` | URI reference that identifies the target document (such as an [[OpenAPI]] document) this overlay applies to. | -| actions | [[Action Object](#action-object) or [Action Template Reference Object](#action-template-reference-object) or [Action Reference Object](#action-reference-object)] | **REQUIRED** An ordered list of actions to be applied to the target document. The array MUST contain at least one value. | +| actions | [[Action Object](#action-object) or [Action Template Reference Object](#action-template-reference-object)] | **REQUIRED** An ordered list of actions to be applied to the target document. The array MUST contain at least one value. | | components | [Component Object](#component-object) | A set of components to reuse across the Overlay Document. Optional. | This object MAY be extended with [Specification Extensions](#specification-extensions). @@ -138,7 +138,6 @@ The object provides a set of components to be reused across the Overlay document | Field Name | Type | Description | | ---- | :----: | ---- | | actionTemplates | Map(`string`, [Action Template Object](#action-template-object)) | A key-value set of action templates to reference in the actions. Optional. | -| actions | Map(`string`, [Action Object](#action-object) or [Action Template Reference Object](#action-template-reference-object)) | A key-value set of actions or action template references to use in the actions. Optional. | > Note: the target field for components actions is Optional. @@ -199,14 +198,6 @@ This object MAY be extended with [Specification Extensions](#specification-exten This object MAY be extended with [Specification Extensions](#specification-extensions). -#### Action reference object - -##### Fixed fields - -| Field Name | Type | Description | -| ---- | :----: | ---- | -| $ref | `string` | **REQUIRED** A valid reference to an action in the components section, represented as `#/components/actions/actionTemplateKey`. | -| target | `string` | A RFC9535 JSONPath query expression selecting nodes in the target document and overrides the target defined in the referenced action. Optional when the resolved action defines a target, required when the resolved action does not. | #### Action template reference object @@ -215,7 +206,8 @@ This object MAY be extended with [Specification Extensions](#specification-exten | Field Name | Type | Description | | ---- | :----: | ---- | | $ref | `string` | **REQUIRED** A valid reference to an action template in the components section, represented as `#/components/actionTemplates/actionTemplateKey`. | -| parameterValues | `Map(string, Any)` | A set of values to use for the template parameters, the key MUST match the parameter name. Optional. | +| Date: Tue, 3 Mar 2026 08:37:20 -0500 Subject: [PATCH 11/42] fix: updates wording for references definition Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index c8d5e12..d0749c7 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -205,7 +205,7 @@ This object MAY be extended with [Specification Extensions](#specification-exten | Field Name | Type | Description | | ---- | :----: | ---- | -| $ref | `string` | **REQUIRED** A valid reference to an action template in the components section, represented as `#/components/actionTemplates/actionTemplateKey`. | +| $ref | `string` | **REQUIRED** A [same-document](https://www.rfc-editor.org/rfc/rfc3986.html#section-4.4) (or fragment-only) relative URI reference, per RFC3986 §4.4, and that the fragment syntax is JSON Pointer, with the pointer prefix restricted to `/components/actionTemplates/`. | | action overrides | mixed | Any field defined in the [Action Object](#action-object) to be used as an override to the value resolved in the template. Optional | From 3a58335b287b2510eedcc9db8651ef2c4a8ed739 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 3 Mar 2026 09:29:38 -0500 Subject: [PATCH 12/42] fix: aligns wording for the action fields in template and template references Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index d0749c7..902b57c 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -182,7 +182,7 @@ This object represents one or more changes to be applied to the target document | ---- | :----: | ---- | | parameters | [[Action template parameter object](#action-template-parameter-object)] | A list of parameters to be used during string literal replacement. Optional. | | environmentVariables | [[Action template parameter object](#action-template-parameter-object)] | A list of environment variables to be used during string literal replacement. Optional. | -| Any field defined in the [action object](#action-object) | mixed | The [string literal replacement syntax](#string-literal-replacement-syntax) MAY be used for any of the fields, and the replacements MUST be evaluated as the template reference is being resolved. | +| Any field defined in the [action object](#action-object) | mixed | The [string literal replacement syntax](#string-literal-replacement-syntax) MAY be used for any of the fields, and the replacements MUST be evaluated as the template reference is being resolved. | This object MAY be extended with [Specification Extensions](#specification-extensions). @@ -207,7 +207,7 @@ This object MAY be extended with [Specification Extensions](#specification-exten | ---- | :----: | ---- | | $ref | `string` | **REQUIRED** A [same-document](https://www.rfc-editor.org/rfc/rfc3986.html#section-4.4) (or fragment-only) relative URI reference, per RFC3986 §4.4, and that the fragment syntax is JSON Pointer, with the pointer prefix restricted to `/components/actionTemplates/`. | | action overrides | mixed | Any field defined in the [Action Object](#action-object) to be used as an override to the value resolved in the template. Optional | +| Any field defined in the [action object](#action-object) | mixed | Any field defined in the [Action Object](#action-object) to be used as an override to the value resolved in the template. The [string literal replacement syntax](#string-literal-replacement-syntax) MAY NOT be used for any of the fields. Optional. | This object MAY be extended with [Specification Extensions](#specification-extensions). From d3324461623a3ac18325412901c89395fd76f22b Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 09:28:22 -0400 Subject: [PATCH 13/42] docs: minor fixes for samples mismatches Co-authored-by: Vincent Biret --- versions/1.2.0-dev.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index 902b57c..565a084 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -682,7 +682,7 @@ components: message: type: string target: "$.paths['placeholder'].get.response" - description: Adds an error response to the %param.pathItem% path item %param.operation% operation + description: Adds an error response to the operation actions: - $ref: '#/components/actions/errorResponse' # the target from the action template is being superseded by this local override value @@ -758,7 +758,7 @@ info: title: Use templates to insert error responses version: 1.0.0 components: - actionTemplates: + actions: errorResponse: target: "$.paths['%param.pathItem%'].%param.operation%.responses" update: @@ -784,10 +784,10 @@ components: - name: stageName default: dev actions: -- $ref: '#/components/actionTemplates/errorResponse' +- $ref: '#/components/actions/errorResponse' parameterValues: pathItem: '/items' -- $ref: '#/components/actionTemplates/errorResponse' +- $ref: '#/components/actions/errorResponse' parameterValues: pathItem: '/some-items' operation: delete From b79ed3eb86c4c35e07f8ef5e7ff0bf34f5a8f32f Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 09:34:27 -0400 Subject: [PATCH 14/42] docs: aligns on reusable action terminology docs: additional examples mismatch fixes Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index 565a084..b48120f 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -84,7 +84,7 @@ This is the root object of the [Overlay](#overlay). | overlay | `string` | **REQUIRED**. This string MUST be the [version number](#versions) of the Overlay Specification that the Overlay document uses. The `overlay` field SHOULD be used by tooling to interpret the Overlay document. | | info | [Info Object](#info-object) | **REQUIRED**. Provides metadata about the Overlay. The metadata MAY be used by tooling as required. | | extends | `string` | URI reference that identifies the target document (such as an [[OpenAPI]] document) this overlay applies to. | -| actions | [[Action Object](#action-object) or [Action Template Reference Object](#action-template-reference-object)] | **REQUIRED** An ordered list of actions to be applied to the target document. The array MUST contain at least one value. | +| actions | [[Action Object](#action-object) or [Reusable Action Reference Object](#reusable-action-reference-object)] | **REQUIRED** An ordered list of actions to be applied to the target document. The array MUST contain at least one value. | | components | [Components Object](#components-object) | A set of components to reuse across the Overlay Document. Optional. | This object MAY be extended with [Specification Extensions](#specification-extensions). @@ -137,7 +137,7 @@ The object provides a set of components to be reused across the Overlay document | Field Name | Type | Description | | ---- | :----: | ---- | -| actionTemplates | Map(`string`, [Action Template Object](#action-template-object)) | A key-value set of action templates to reference in the actions. Optional. | +| actions | Map(`string`, [Reusable Action Object](#reusable-action-object)) | A key-value set of reusable actions to reference in the actions. Optional. | > Note: the target field for components actions is Optional. @@ -172,7 +172,7 @@ The properties of the `update` or `copy` object MUST be compatible with the targ This object MAY be extended with [Specification Extensions](#specification-extensions). -#### Action Template Object +#### Reusable Action Object This object represents one or more changes to be applied to the target document at the locations defined by the target JSONPath expression and reused in one of more action references. @@ -180,34 +180,34 @@ This object represents one or more changes to be applied to the target document | Field Name | Type | Description | | ---- | :----: | ---- | -| parameters | [[Action template parameter object](#action-template-parameter-object)] | A list of parameters to be used during string literal replacement. Optional. | -| environmentVariables | [[Action template parameter object](#action-template-parameter-object)] | A list of environment variables to be used during string literal replacement. Optional. | -| Any field defined in the [action object](#action-object) | mixed | The [string literal replacement syntax](#string-literal-replacement-syntax) MAY be used for any of the fields, and the replacements MUST be evaluated as the template reference is being resolved. | +| parameters | [[Reusable action parameter object](#reusable-action-parameter-object)] | A list of parameters to be used during string literal replacement. Optional. | +| environmentVariables | [[Reusable template parameter object](#reusable-action-parameter-object)] | A list of environment variables to be used during string literal replacement. Optional. | +| Any field defined in the [action object](#action-object) | mixed | The [string literal replacement syntax](#string-literal-replacement-syntax) MAY be used for any of the fields, and the replacements MUST be evaluated as the template reference is being resolved. | This object MAY be extended with [Specification Extensions](#specification-extensions). -#### Action Template Parameter Object +#### Reusable Action Parameter Object ##### Fixed fields | Field Name | Type | Description | | ---- | :----: | ---- | -| name | `string` | **REQUIRED** The name of the parameter, MUST match the key for the string literal replacement expression. | -| name | `string` | **REQUIRED** The name of the parameter, MUST match the key for the string literal replacement expression. | +| $ref | `string` | **REQUIRED** A [same-document](https://www.rfc-editor.org/rfc/rfc3986.html#section-4.4) (or fragment-only) relative URI reference, per RFC3986 §4.4, and that the fragment syntax is JSON Pointer, with the pointer prefix restricted to `/components/actionTemplates/`. | -| Any field defined in the [action object](#action-object) | mixed | Any field defined in the [Action Object](#action-object) to be used as an override to the value resolved in the template. The [string literal replacement syntax](#string-literal-replacement-syntax) MAY NOT be used for any of the fields. Optional. | +| $ref | `string` | **REQUIRED** A [same-document](https://www.rfc-editor.org/rfc/rfc3986.html#section-4.4) (or fragment-only) relative URI reference, per RFC3986 §4.4, and that the fragment syntax is JSON Pointer, with the pointer prefix restricted to `/components/actions/`. | +| Any field defined in the [action object](#action-object) | mixed | Any field defined in the [Action Object](#action-object) to be used as an override to the value resolved in the template. The [string literal replacement syntax](#string-literal-replacement-syntax) MAY NOT be used for any of the fields. Optional. | This object MAY be extended with [Specification Extensions](#specification-extensions). @@ -670,7 +670,7 @@ info: title: Use templates to insert error responses version: 1.0.0 components: - actionTemplates: + actions: errorResponse: update: 404: From 3ab579e044f785f98359a9316586993d9d3e9101 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 09:37:00 -0400 Subject: [PATCH 15/42] docs: further alignments on the reusable action terminology Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index b48120f..bdce184 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -181,8 +181,8 @@ This object represents one or more changes to be applied to the target document | Field Name | Type | Description | | ---- | :----: | ---- | | parameters | [[Reusable action parameter object](#reusable-action-parameter-object)] | A list of parameters to be used during string literal replacement. Optional. | -| environmentVariables | [[Reusable template parameter object](#reusable-action-parameter-object)] | A list of environment variables to be used during string literal replacement. Optional. | -| Any field defined in the [action object](#action-object) | mixed | The [string literal replacement syntax](#string-literal-replacement-syntax) MAY be used for any of the fields, and the replacements MUST be evaluated as the template reference is being resolved. | +| environmentVariables | [[Reusable action parameter object](#reusable-action-parameter-object)] | A list of environment variables to be used during string literal replacement. Optional. | +| Any field defined in the [action object](#action-object) | mixed | The [string literal replacement syntax](#string-literal-replacement-syntax) MAY be used for any of the fields, and the replacements MUST be evaluated as the reusable action reference is being resolved. | This object MAY be extended with [Specification Extensions](#specification-extensions). @@ -206,8 +206,8 @@ This object MAY be extended with [Specification Extensions](#specification-exten | Field Name | Type | Description | | ---- | :----: | ---- | | $ref | `string` | **REQUIRED** A [same-document](https://www.rfc-editor.org/rfc/rfc3986.html#section-4.4) (or fragment-only) relative URI reference, per RFC3986 §4.4, and that the fragment syntax is JSON Pointer, with the pointer prefix restricted to `/components/actions/`. | -| Any field defined in the [action object](#action-object) | mixed | Any field defined in the [Action Object](#action-object) to be used as an override to the value resolved in the template. The [string literal replacement syntax](#string-literal-replacement-syntax) MAY NOT be used for any of the fields. Optional. | +| Any field defined in the [action object](#action-object) | mixed | Any field defined in the [Action Object](#action-object) to be used as an override to the value resolved in the reusable action. The [string literal replacement syntax](#string-literal-replacement-syntax) MAY NOT be used for any of the fields. Optional. | This object MAY be extended with [Specification Extensions](#specification-extensions). @@ -235,7 +235,7 @@ When the environment replacement source is used, the key MUST match (case-sensit #### Parameter Replacement Source -When the parameter replacement source is used, the key MUST match (case-sensitive) a corresponding parameter defined for the action template. +When the parameter replacement source is used, the key MUST match (case-sensitive) a corresponding parameter defined for the reusable action. ### Examples @@ -667,7 +667,7 @@ paths: ```yaml overlay: 1.2.0 info: - title: Use templates to insert error responses + title: Use reusable actions to insert error responses version: 1.0.0 components: actions: @@ -685,10 +685,10 @@ components: description: Adds an error response to the operation actions: - $ref: '#/components/actions/errorResponse' - # the target from the action template is being superseded by this local override value + # the target from the reusable action is being superseded by this local override value target: "$.paths['items'].get.responses" - $ref: '#/components/actions/errorResponse' - # the target from the action template is being superseded by this local override value + # the target from the reusable action is being superseded by this local override value target: "$.paths['some-items'].delete.responses" ``` @@ -755,7 +755,7 @@ paths: ```yaml overlay: 1.2.0 info: - title: Use templates to insert error responses + title: Use reusable actions to insert error responses version: 1.0.0 components: actions: From f9802ecc51918d18de2034f87fb8c8c44cfb2f5b Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 09:41:12 -0400 Subject: [PATCH 16/42] docs: aligns the examples names on the reusable action terminology Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index bdce184..341c923 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -640,7 +640,7 @@ paths: description: OK ``` -##### Action Template Reference Example - Overrides +##### Reusable Action Reference Example - Overrides ###### Source Description @@ -728,7 +728,7 @@ paths: type: string ``` -##### Action Template Example - Parameters +##### Reusable Action Example - Parameters ###### Source Description From 789568c07b9fa627ea6636c91cd796bf98844e78 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 09:45:30 -0400 Subject: [PATCH 17/42] docs: adds description to the new examples Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index 341c923..b0ee2c1 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -642,6 +642,8 @@ paths: ##### Reusable Action Reference Example - Overrides +This example shows how a reusable action can provide shared update content while a reusable action reference overrides one or more action fields locally. In this case, each reference reuses the same error response definition but supplies a different `target` so the update is applied to different operations. + ###### Source Description ```yaml @@ -730,6 +732,8 @@ paths: ##### Reusable Action Example - Parameters +This example shows how a reusable action can define parameterized strings and environment-variable placeholders that are resolved separately for each reusable action reference. In this case, each reference supplies different parameter values so the same reusable action can target different operations and produce slightly different response content, while default values are used when a parameter or environment variable value is not otherwise provided. + ###### Source Description ```yaml From d205893c91e67e857c9ac09bd9ac44cb58261ddf Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 14:19:04 -0400 Subject: [PATCH 18/42] docs: adds important considerations for the reusable actions Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index b0ee2c1..2ddfed8 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -186,6 +186,12 @@ This object represents one or more changes to be applied to the target document This object MAY be extended with [Specification Extensions](#specification-extensions). +A reusable action is similar to an action but differs in important ways: + +1. It may omit any action field, in particular the `target` field, as these may be supplied by the Reusable Action Reference Object. +1. Any action field in the Reusable Action may employ string interpolation using variables specified in the `parameters` or `environmentVariables` fields. +1. A Reusable Action MUST be referenced by a Reusable Action Reference Object to have any effect on the OpenAPI description. + #### Reusable Action Parameter Object ##### Fixed fields From 79f81ddf6d150fe882df51f4a43b857a7d0c2637 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 14:20:55 -0400 Subject: [PATCH 19/42] docs: adds precisions in the reusable action object abstract Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index 2ddfed8..4254522 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -174,7 +174,7 @@ This object MAY be extended with [Specification Extensions](#specification-exten #### Reusable Action Object -This object represents one or more changes to be applied to the target document at the locations defined by the target JSONPath expression and reused in one of more action references. +This object is a component that can be reused by Reusable Action Reference Objects, it represents one or more changes to be applied to the target document at the locations defined by the target JSONPath expression and reused in one of more action references. ##### Fixed fields From edcf47a004c292f0435831199b89806cc9a40517 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 14:22:23 -0400 Subject: [PATCH 20/42] docs: adds precision on how to reuse actions in the components section Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index 4254522..165126c 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -137,7 +137,7 @@ The object provides a set of components to be reused across the Overlay document | Field Name | Type | Description | | ---- | :----: | ---- | -| actions | Map(`string`, [Reusable Action Object](#reusable-action-object)) | A key-value set of reusable actions to reference in the actions. Optional. | +| actions | Map(`string`, [Reusable Action Object](#reusable-action-object)) | A key-value set of reusable actions to reference in the actions through a [Reusable Action Reference Object](#reusable-action-reference-object). Optional. | > Note: the target field for components actions is Optional. From 35a1e9493b5b3fc19f4225f3434b96498a61d29e Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 14:33:43 -0400 Subject: [PATCH 21/42] feat: adds schema definition for reusable actions Signed-off-by: Vincent Biret --- schemas/v1.2-dev/schema.yaml | 59 +++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/schemas/v1.2-dev/schema.yaml b/schemas/v1.2-dev/schema.yaml index 3669a8e..f4d0ba3 100644 --- a/schemas/v1.2-dev/schema.yaml +++ b/schemas/v1.2-dev/schema.yaml @@ -17,6 +17,8 @@ properties: uniqueItems: true items: $ref: "#/$defs/action-object" + components: + $ref: "#/$defs/components-object" required: - overlay - info @@ -24,6 +26,61 @@ required: $ref: "#/$defs/specification-extensions" unevaluatedProperties: false $defs: + reusable-action-reference-object: + type: object + allOf: + - $ref: "#/$defs/specification-extensions" + - $ref: "#/$defs/action-object" + properties: + $ref: + type: string + pattern: ^#\/components\/actions\/\w+ + required: + - $ref + $ref: "#/$defs/specification-extensions" + unevaluatedProperties: false + reusable-action-object-parameter: + type: object + properties: + name: + type: string + default: + type: + - string + - boolean + - object + - array + - number + - "null" + required: + - name + description: A parameter to be used in a reusable action object + $ref: "#/$defs/specification-extensions" + unevaluatedProperties: false + reusable-action-object: + type: object + allOf: + - $ref: "#/$defs/specification-extensions" + - $ref: "#/$defs/action-object" + properties: + parameters: + type: array + items: + $ref: "#/$defs/reusable-action-object-parameter" + environmentVariables: + type: array + items: + $ref: "#/$defs/reusable-action-object-parameter" + unevaluatedProperties: false + components-object: + type: object + properties: + actions: + type: object + additionalProperties: + $ref: "#/$defs/reusable-action-object" + $ref: "#/$defs/specification-extensions" + unevaluatedProperties: false info-object: type: object properties: @@ -59,7 +116,7 @@ $defs: type: boolean default: false required: - - target + - target #TODO this would be an issue for the reusable action and reference object, maybe move all the properties to a base? $ref: "#/$defs/specification-extensions" unevaluatedProperties: false specification-extensions: From d692a772993acb221127366411e36d61c2d29834 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 14:44:37 -0400 Subject: [PATCH 22/42] fix: makes actions a oneOf with reusable action reference Signed-off-by: Vincent Biret --- schemas/v1.2-dev/schema.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/schemas/v1.2-dev/schema.yaml b/schemas/v1.2-dev/schema.yaml index f4d0ba3..86edd5d 100644 --- a/schemas/v1.2-dev/schema.yaml +++ b/schemas/v1.2-dev/schema.yaml @@ -16,7 +16,9 @@ properties: minItems: 1 uniqueItems: true items: - $ref: "#/$defs/action-object" + oneOf: + - $ref: "#/$defs/reusable-action-reference-object" + - $ref: "#/$defs/reusable-action-object" components: $ref: "#/$defs/components-object" required: From 357b742b25fb8b47755fa67902531e67a125b58b Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 15:08:34 -0400 Subject: [PATCH 23/42] fix: adds missing parameter values to the schema chore: refactors unevaluated json to avoid duplication Signed-off-by: Vincent Biret --- schemas/v1.2-dev/schema.yaml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/schemas/v1.2-dev/schema.yaml b/schemas/v1.2-dev/schema.yaml index 86edd5d..76becb7 100644 --- a/schemas/v1.2-dev/schema.yaml +++ b/schemas/v1.2-dev/schema.yaml @@ -28,6 +28,14 @@ required: $ref: "#/$defs/specification-extensions" unevaluatedProperties: false $defs: + json-node: + type: + - string + - boolean + - object + - array + - number + - "null" reusable-action-reference-object: type: object allOf: @@ -37,6 +45,10 @@ $defs: $ref: type: string pattern: ^#\/components\/actions\/\w+ + parameterValues: + type: object + additionalProperties: + $ref: "#/$defs/json-node" required: - $ref $ref: "#/$defs/specification-extensions" @@ -47,13 +59,7 @@ $defs: name: type: string default: - type: - - string - - boolean - - object - - array - - number - - "null" + $ref: "#/$defs/json-node" required: - name description: A parameter to be used in a reusable action object @@ -105,13 +111,7 @@ $defs: description: type: string update: - type: - - string - - boolean - - object - - array - - number - - "null" + $ref: "#/$defs/json-node" copy: type: string remove: From df5ca2998b35698025cf234e6d6bcf2459576a95 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 15:10:57 -0400 Subject: [PATCH 24/42] chore: refactors the action definition to avoid having a required target everywhere Signed-off-by: Vincent Biret --- schemas/v1.2-dev/schema.yaml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/schemas/v1.2-dev/schema.yaml b/schemas/v1.2-dev/schema.yaml index 76becb7..76600e4 100644 --- a/schemas/v1.2-dev/schema.yaml +++ b/schemas/v1.2-dev/schema.yaml @@ -40,7 +40,7 @@ $defs: type: object allOf: - $ref: "#/$defs/specification-extensions" - - $ref: "#/$defs/action-object" + - $ref: "#/$defs/action-object-base" properties: $ref: type: string @@ -69,7 +69,7 @@ $defs: type: object allOf: - $ref: "#/$defs/specification-extensions" - - $ref: "#/$defs/action-object" + - $ref: "#/$defs/action-object-base" properties: parameters: type: array @@ -103,7 +103,7 @@ $defs: - version $ref: "#/$defs/specification-extensions" unevaluatedProperties: false - action-object: + action-object-base: properties: target: type: string @@ -117,9 +117,13 @@ $defs: remove: type: boolean default: false + action-object: + type: object + allOf: + - $ref: "#/$defs/action-object-base" + - $ref: "#/$defs/specification-extensions" required: - - target #TODO this would be an issue for the reusable action and reference object, maybe move all the properties to a base? - $ref: "#/$defs/specification-extensions" + - target unevaluatedProperties: false specification-extensions: patternProperties: From ef024cfe2f866b5a2095bc48be14699be20eb164 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 15:14:42 -0400 Subject: [PATCH 25/42] tests: adds a first set of fail tests for action parameters Signed-off-by: Vincent Biret --- tests/v1.2-dev/fail/components-invalid-type.yaml | 7 +++++++ .../fail/components-reusable-action-invalid-type.yaml | 9 +++++++++ ...able-action-environment-variable-invalid-name.yaml | 11 +++++++++++ .../fail/reusable-action-parameter-missing-name.yaml | 10 ++++++++++ .../fail/reusable-action-reference-invalid-ref.yaml | 7 +++++++ .../reusable-action-reference-missing-target.yaml | 6 ++++++ 6 files changed, 50 insertions(+) create mode 100644 tests/v1.2-dev/fail/components-invalid-type.yaml create mode 100644 tests/v1.2-dev/fail/components-reusable-action-invalid-type.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-environment-variable-invalid-name.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-parameter-missing-name.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-reference-invalid-ref.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-reference-missing-target.yaml diff --git a/tests/v1.2-dev/fail/components-invalid-type.yaml b/tests/v1.2-dev/fail/components-invalid-type.yaml new file mode 100644 index 0000000..72665a4 --- /dev/null +++ b/tests/v1.2-dev/fail/components-invalid-type.yaml @@ -0,0 +1,7 @@ +overlay: 1.2.0 +info: + title: Components must be an object + version: 1.0.0 +components: [] +actions: + - target: '$' diff --git a/tests/v1.2-dev/fail/components-reusable-action-invalid-type.yaml b/tests/v1.2-dev/fail/components-reusable-action-invalid-type.yaml new file mode 100644 index 0000000..b84e519 --- /dev/null +++ b/tests/v1.2-dev/fail/components-reusable-action-invalid-type.yaml @@ -0,0 +1,9 @@ +overlay: 1.2.0 +info: + title: Components action must be an object + version: 1.0.0 +components: + actions: + brokenAction: not-an-object +actions: + - target: '$' diff --git a/tests/v1.2-dev/fail/reusable-action-environment-variable-invalid-name.yaml b/tests/v1.2-dev/fail/reusable-action-environment-variable-invalid-name.yaml new file mode 100644 index 0000000..9317e13 --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-environment-variable-invalid-name.yaml @@ -0,0 +1,11 @@ +overlay: 1.2.0 +info: + title: Reusable action environment variable invalid name type + version: 1.0.0 +actions: + - target: '$.info' + environmentVariables: + - name: 123 + default: dev + update: + description: Updated diff --git a/tests/v1.2-dev/fail/reusable-action-parameter-missing-name.yaml b/tests/v1.2-dev/fail/reusable-action-parameter-missing-name.yaml new file mode 100644 index 0000000..3fe5a5b --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-parameter-missing-name.yaml @@ -0,0 +1,10 @@ +overlay: 1.2.0 +info: + title: Reusable action parameter missing name + version: 1.0.0 +actions: + - target: '$.info' + parameters: + - default: fallback + update: + description: Updated diff --git a/tests/v1.2-dev/fail/reusable-action-reference-invalid-ref.yaml b/tests/v1.2-dev/fail/reusable-action-reference-invalid-ref.yaml new file mode 100644 index 0000000..da9c2aa --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-reference-invalid-ref.yaml @@ -0,0 +1,7 @@ +overlay: 1.2.0 +info: + title: Reusable action reference must point to components actions + version: 1.0.0 +actions: + - $ref: '#/components/notActions/errorResponse' + target: '$.info' diff --git a/tests/v1.2-dev/fail/reusable-action-reference-missing-target.yaml b/tests/v1.2-dev/fail/reusable-action-reference-missing-target.yaml new file mode 100644 index 0000000..1df2608 --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-reference-missing-target.yaml @@ -0,0 +1,6 @@ +overlay: 1.2.0 +info: + title: Reusable action reference missing target + version: 1.0.0 +actions: + - $ref: '#/components/actions/errorResponse' From 357c7825b8ce5f3eaff159306bea5897866d933a Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 15:21:58 -0400 Subject: [PATCH 26/42] fix: actions definitions should use the action object not the reusable actions Signed-off-by: Vincent Biret --- schemas/v1.2-dev/schema.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schemas/v1.2-dev/schema.yaml b/schemas/v1.2-dev/schema.yaml index 76600e4..ff2c7b0 100644 --- a/schemas/v1.2-dev/schema.yaml +++ b/schemas/v1.2-dev/schema.yaml @@ -18,7 +18,7 @@ properties: items: oneOf: - $ref: "#/$defs/reusable-action-reference-object" - - $ref: "#/$defs/reusable-action-object" + - $ref: "#/$defs/action-object" components: $ref: "#/$defs/components-object" required: From 1879f2a950be7edb76dce13319d3169cf7eb2f1f Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 15:25:20 -0400 Subject: [PATCH 27/42] tests: adds another batch of pass/fail tests for reusable actions Signed-off-by: Vincent Biret --- .../fail/action-parameters-invalid.yaml | 10 ++++++++++ ...on-environment-variables-invalid-type.yaml | 10 ++++++++++ ...e-action-parameter-values-not-allowed.yaml | 10 ++++++++++ ...erence-invalid-parameter-values-type.yaml} | 3 ++- ...tion-reference-parameters-not-allowed.yaml | 8 ++++++++ .../pass/components-reusable-actions.yaml | 14 +++++++++++++ ...reusable-action-environment-variables.yaml | 18 +++++++++++++++++ .../pass/reusable-action-parameters.yaml | 19 ++++++++++++++++++ ...sable-action-reference-missing-target.yaml | 12 +++++++++++ ...ble-action-reference-parameter-values.yaml | 20 +++++++++++++++++++ 10 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 tests/v1.2-dev/fail/action-parameters-invalid.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-environment-variables-invalid-type.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-parameter-values-not-allowed.yaml rename tests/v1.2-dev/fail/{reusable-action-reference-missing-target.yaml => reusable-action-reference-invalid-parameter-values-type.yaml} (50%) create mode 100644 tests/v1.2-dev/fail/reusable-action-reference-parameters-not-allowed.yaml create mode 100644 tests/v1.2-dev/pass/components-reusable-actions.yaml create mode 100644 tests/v1.2-dev/pass/reusable-action-environment-variables.yaml create mode 100644 tests/v1.2-dev/pass/reusable-action-parameters.yaml create mode 100644 tests/v1.2-dev/pass/reusable-action-reference-missing-target.yaml create mode 100644 tests/v1.2-dev/pass/reusable-action-reference-parameter-values.yaml diff --git a/tests/v1.2-dev/fail/action-parameters-invalid.yaml b/tests/v1.2-dev/fail/action-parameters-invalid.yaml new file mode 100644 index 0000000..243bf47 --- /dev/null +++ b/tests/v1.2-dev/fail/action-parameters-invalid.yaml @@ -0,0 +1,10 @@ +overlay: 1.2.0 +info: + title: Reusable action parameters must be an array + version: 1.0.0 +actions: + - target: '$.info' + parameters: + - name: titleValue + update: + title: Example diff --git a/tests/v1.2-dev/fail/reusable-action-environment-variables-invalid-type.yaml b/tests/v1.2-dev/fail/reusable-action-environment-variables-invalid-type.yaml new file mode 100644 index 0000000..37849c9 --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-environment-variables-invalid-type.yaml @@ -0,0 +1,10 @@ +overlay: 1.2.0 +info: + title: Reusable action environment variables must be an array + version: 1.0.0 +actions: + - target: '$.info' + environmentVariables: + name: stageName + update: + description: Example diff --git a/tests/v1.2-dev/fail/reusable-action-parameter-values-not-allowed.yaml b/tests/v1.2-dev/fail/reusable-action-parameter-values-not-allowed.yaml new file mode 100644 index 0000000..a11827b --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-parameter-values-not-allowed.yaml @@ -0,0 +1,10 @@ +overlay: 1.2.0 +info: + title: Parameter values are not allowed on reusable actions + version: 1.0.0 +actions: + - target: '$.info' + parameterValues: + titleValue: Example + update: + title: '%param.titleValue%' diff --git a/tests/v1.2-dev/fail/reusable-action-reference-missing-target.yaml b/tests/v1.2-dev/fail/reusable-action-reference-invalid-parameter-values-type.yaml similarity index 50% rename from tests/v1.2-dev/fail/reusable-action-reference-missing-target.yaml rename to tests/v1.2-dev/fail/reusable-action-reference-invalid-parameter-values-type.yaml index 1df2608..6c71f3b 100644 --- a/tests/v1.2-dev/fail/reusable-action-reference-missing-target.yaml +++ b/tests/v1.2-dev/fail/reusable-action-reference-invalid-parameter-values-type.yaml @@ -1,6 +1,7 @@ overlay: 1.2.0 info: - title: Reusable action reference missing target + title: Reusable action reference parameter values must be an object version: 1.0.0 actions: - $ref: '#/components/actions/errorResponse' + parameterValues: [] diff --git a/tests/v1.2-dev/fail/reusable-action-reference-parameters-not-allowed.yaml b/tests/v1.2-dev/fail/reusable-action-reference-parameters-not-allowed.yaml new file mode 100644 index 0000000..1cfebc2 --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-reference-parameters-not-allowed.yaml @@ -0,0 +1,8 @@ +overlay: 1.2.0 +info: + title: Parameters are not allowed on reusable action references + version: 1.0.0 +actions: + - $ref: '#/components/actions/errorResponse' + parameters: + - name: titleValue diff --git a/tests/v1.2-dev/pass/components-reusable-actions.yaml b/tests/v1.2-dev/pass/components-reusable-actions.yaml new file mode 100644 index 0000000..2ab0e0a --- /dev/null +++ b/tests/v1.2-dev/pass/components-reusable-actions.yaml @@ -0,0 +1,14 @@ +overlay: 1.2.0 +info: + title: Components with reusable actions + version: 1.0.0 +components: + actions: + errorResponse: + description: Adds an error response + update: + '404': + description: Not Found +actions: + - $ref: '#/components/actions/errorResponse' + target: '$.paths.*.get.responses' diff --git a/tests/v1.2-dev/pass/reusable-action-environment-variables.yaml b/tests/v1.2-dev/pass/reusable-action-environment-variables.yaml new file mode 100644 index 0000000..edc0b61 --- /dev/null +++ b/tests/v1.2-dev/pass/reusable-action-environment-variables.yaml @@ -0,0 +1,18 @@ +overlay: 1.2.0 +info: + title: Reusable action with environment variables + version: 1.0.0 +components: + actions: + setDescription: + target: '$.info' + environmentVariables: + - name: stageName + default: dev + - name: regionName + update: + description: 'Deploy stage is %env.stageName% in %env.regionName%' +actions: + - target: '$.info' + update: + description: Reusable action environment variables are declared in components diff --git a/tests/v1.2-dev/pass/reusable-action-parameters.yaml b/tests/v1.2-dev/pass/reusable-action-parameters.yaml new file mode 100644 index 0000000..4c88147 --- /dev/null +++ b/tests/v1.2-dev/pass/reusable-action-parameters.yaml @@ -0,0 +1,19 @@ +overlay: 1.2.0 +info: + title: Reusable action with parameters + version: 1.0.0 +components: + actions: + setTitle: + target: '$.info' + parameters: + - name: titleValue + - name: versionValue + default: 1 + update: + title: '%param.titleValue%' + version: '%param.versionValue%' +actions: + - target: '$.info' + update: + description: Reusable action parameters are declared in components diff --git a/tests/v1.2-dev/pass/reusable-action-reference-missing-target.yaml b/tests/v1.2-dev/pass/reusable-action-reference-missing-target.yaml new file mode 100644 index 0000000..67d38fa --- /dev/null +++ b/tests/v1.2-dev/pass/reusable-action-reference-missing-target.yaml @@ -0,0 +1,12 @@ +overlay: 1.2.0 +info: + title: Reusable action reference without target + version: 1.0.0 +components: + actions: + setDescription: + target: '$.info' + update: + description: Updated by reusable action +actions: + - $ref: '#/components/actions/setDescription' diff --git a/tests/v1.2-dev/pass/reusable-action-reference-parameter-values.yaml b/tests/v1.2-dev/pass/reusable-action-reference-parameter-values.yaml new file mode 100644 index 0000000..c03c736 --- /dev/null +++ b/tests/v1.2-dev/pass/reusable-action-reference-parameter-values.yaml @@ -0,0 +1,20 @@ +overlay: 1.2.0 +info: + title: Reusable action reference with parameter values + version: 1.0.0 +components: + actions: + errorResponse: + target: "$.paths['%param.pathItem%'].%param.operation%.responses" + update: + '404': + description: Not Found + parameters: + - name: pathItem + - name: operation + default: get +actions: + - $ref: '#/components/actions/errorResponse' + parameterValues: + pathItem: /items + operation: post From 1cb9539ca392b5c3598d2ef1b25c7e2fddeb9e80 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 15:30:08 -0400 Subject: [PATCH 28/42] tests: additional pass tests for extensions Signed-off-by: Vincent Biret --- .../fail/components-invalid-property.yaml | 13 +++++++++++++ .../fail/reusable-action-invalid-property.yaml | 13 +++++++++++++ ...usable-action-parameter-invalid-property.yaml | 15 +++++++++++++++ ...erence-environment-variables-not-allowed.yaml | 8 ++++++++ tests/v1.2-dev/pass/components-extensions.yaml | 14 ++++++++++++++ .../pass/reusable-action-extensions.yaml | 14 ++++++++++++++ .../reusable-action-parameter-extensions.yaml | 16 ++++++++++++++++ .../reusable-action-reference-extensions.yaml | 14 ++++++++++++++ 8 files changed, 107 insertions(+) create mode 100644 tests/v1.2-dev/fail/components-invalid-property.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-invalid-property.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-parameter-invalid-property.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-reference-environment-variables-not-allowed.yaml create mode 100644 tests/v1.2-dev/pass/components-extensions.yaml create mode 100644 tests/v1.2-dev/pass/reusable-action-extensions.yaml create mode 100644 tests/v1.2-dev/pass/reusable-action-parameter-extensions.yaml create mode 100644 tests/v1.2-dev/pass/reusable-action-reference-extensions.yaml diff --git a/tests/v1.2-dev/fail/components-invalid-property.yaml b/tests/v1.2-dev/fail/components-invalid-property.yaml new file mode 100644 index 0000000..5e3c27c --- /dev/null +++ b/tests/v1.2-dev/fail/components-invalid-property.yaml @@ -0,0 +1,13 @@ +overlay: 1.2.0 +info: + title: Components invalid property + version: 1.0.0 +components: + invalidProperty: true + actions: + setDescription: + target: '$.info' + update: + description: Updated +actions: + - target: '$.info' diff --git a/tests/v1.2-dev/fail/reusable-action-invalid-property.yaml b/tests/v1.2-dev/fail/reusable-action-invalid-property.yaml new file mode 100644 index 0000000..f9f375f --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-invalid-property.yaml @@ -0,0 +1,13 @@ +overlay: 1.2.0 +info: + title: Reusable action invalid property + version: 1.0.0 +components: + actions: + setDescription: + target: '$.info' + invalidProperty: true + update: + description: Updated +actions: + - target: '$.info' diff --git a/tests/v1.2-dev/fail/reusable-action-parameter-invalid-property.yaml b/tests/v1.2-dev/fail/reusable-action-parameter-invalid-property.yaml new file mode 100644 index 0000000..be4cd4f --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-parameter-invalid-property.yaml @@ -0,0 +1,15 @@ +overlay: 1.2.0 +info: + title: Reusable action parameter invalid property + version: 1.0.0 +components: + actions: + setTitle: + target: '$.info' + parameters: + - name: titleValue + invalidProperty: true + update: + title: Example +actions: + - target: '$.info' diff --git a/tests/v1.2-dev/fail/reusable-action-reference-environment-variables-not-allowed.yaml b/tests/v1.2-dev/fail/reusable-action-reference-environment-variables-not-allowed.yaml new file mode 100644 index 0000000..03874c1 --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-reference-environment-variables-not-allowed.yaml @@ -0,0 +1,8 @@ +overlay: 1.2.0 +info: + title: Environment variables are not allowed on reusable action references + version: 1.0.0 +actions: + - $ref: '#/components/actions/errorResponse' + environmentVariables: + - name: stageName \ No newline at end of file diff --git a/tests/v1.2-dev/pass/components-extensions.yaml b/tests/v1.2-dev/pass/components-extensions.yaml new file mode 100644 index 0000000..b643dc4 --- /dev/null +++ b/tests/v1.2-dev/pass/components-extensions.yaml @@ -0,0 +1,14 @@ +overlay: 1.2.0 +info: + title: Components extensions + version: 1.0.0 +components: + x-components-extension: + enabled: true + actions: + setDescription: + target: '$.info' + update: + description: Updated +actions: + - target: '$.info' diff --git a/tests/v1.2-dev/pass/reusable-action-extensions.yaml b/tests/v1.2-dev/pass/reusable-action-extensions.yaml new file mode 100644 index 0000000..bd54ecb --- /dev/null +++ b/tests/v1.2-dev/pass/reusable-action-extensions.yaml @@ -0,0 +1,14 @@ +overlay: 1.2.0 +info: + title: Reusable action extensions + version: 1.0.0 +components: + actions: + setDescription: + target: '$.info' + x-action-extension: + mode: reusable + update: + description: Updated +actions: + - target: '$.info' diff --git a/tests/v1.2-dev/pass/reusable-action-parameter-extensions.yaml b/tests/v1.2-dev/pass/reusable-action-parameter-extensions.yaml new file mode 100644 index 0000000..58b5ee7 --- /dev/null +++ b/tests/v1.2-dev/pass/reusable-action-parameter-extensions.yaml @@ -0,0 +1,16 @@ +overlay: 1.2.0 +info: + title: Reusable action parameter extensions + version: 1.0.0 +components: + actions: + setTitle: + target: '$.info' + parameters: + - name: titleValue + x-parameter-extension: + source: template + update: + title: '%param.titleValue%' +actions: + - target: '$.info' diff --git a/tests/v1.2-dev/pass/reusable-action-reference-extensions.yaml b/tests/v1.2-dev/pass/reusable-action-reference-extensions.yaml new file mode 100644 index 0000000..8252f8b --- /dev/null +++ b/tests/v1.2-dev/pass/reusable-action-reference-extensions.yaml @@ -0,0 +1,14 @@ +overlay: 1.2.0 +info: + title: Reusable action reference extensions + version: 1.0.0 +components: + actions: + setDescription: + target: '$.info' + update: + description: Updated +actions: + - $ref: '#/components/actions/setDescription' + x-reference-extension: + applied: true From ccc453a20d99011ffc07eb5a038ea214ec18ae40 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 15:43:39 -0400 Subject: [PATCH 29/42] fix: pattern validation in the schema Signed-off-by: Vincent Biret --- schemas/v1.2-dev/schema.yaml | 3 ++- ...vironment-variable-invalid-name-pattern.yaml | 17 +++++++++++++++++ ...e-action-parameter-invalid-name-pattern.yaml | 16 ++++++++++++++++ ...-action-reference-escaped-component-key.yaml | 14 ++++++++++++++ 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 tests/v1.2-dev/fail/reusable-action-environment-variable-invalid-name-pattern.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-parameter-invalid-name-pattern.yaml create mode 100644 tests/v1.2-dev/pass/reusable-action-reference-escaped-component-key.yaml diff --git a/schemas/v1.2-dev/schema.yaml b/schemas/v1.2-dev/schema.yaml index ff2c7b0..379470e 100644 --- a/schemas/v1.2-dev/schema.yaml +++ b/schemas/v1.2-dev/schema.yaml @@ -44,7 +44,7 @@ $defs: properties: $ref: type: string - pattern: ^#\/components\/actions\/\w+ + pattern: ^#\/components\/actions\/(?:[^~/]|~0|~1)+$ parameterValues: type: object additionalProperties: @@ -58,6 +58,7 @@ $defs: properties: name: type: string + pattern: ^[A-Za-z][A-Za-z0-9]*$ default: $ref: "#/$defs/json-node" required: diff --git a/tests/v1.2-dev/fail/reusable-action-environment-variable-invalid-name-pattern.yaml b/tests/v1.2-dev/fail/reusable-action-environment-variable-invalid-name-pattern.yaml new file mode 100644 index 0000000..d55e573 --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-environment-variable-invalid-name-pattern.yaml @@ -0,0 +1,17 @@ +overlay: 1.2.0 +info: + title: Reusable action environment variable name must start with a letter and be alphanumeric + version: 1.0.0 +components: + actions: + setDescription: + target: '$.info' + environmentVariables: + - name: stage-name + default: dev + update: + description: Updated +actions: + - target: '$.info' + update: + description: Invalid reusable action environment variable name \ No newline at end of file diff --git a/tests/v1.2-dev/fail/reusable-action-parameter-invalid-name-pattern.yaml b/tests/v1.2-dev/fail/reusable-action-parameter-invalid-name-pattern.yaml new file mode 100644 index 0000000..a412b5b --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-parameter-invalid-name-pattern.yaml @@ -0,0 +1,16 @@ +overlay: 1.2.0 +info: + title: Reusable action parameter name must start with a letter and be alphanumeric + version: 1.0.0 +components: + actions: + setTitle: + target: '$.info' + parameters: + - name: 1titleValue + update: + title: Example +actions: + - target: '$.info' + update: + description: Invalid reusable action parameter name \ No newline at end of file diff --git a/tests/v1.2-dev/pass/reusable-action-reference-escaped-component-key.yaml b/tests/v1.2-dev/pass/reusable-action-reference-escaped-component-key.yaml new file mode 100644 index 0000000..30da864 --- /dev/null +++ b/tests/v1.2-dev/pass/reusable-action-reference-escaped-component-key.yaml @@ -0,0 +1,14 @@ +overlay: 1.2.0 +info: + title: Reusable action reference with escaped component key + version: 1.0.0 +components: + actions: + 'error-response/v1~beta': + description: Adds an error response + update: + '404': + description: Not Found +actions: + - $ref: '#/components/actions/error-response~1v1~0beta' + target: '$.paths.*.get.responses' \ No newline at end of file From 2ba09b605fc7226e7d5430c83188dffef8e0c072 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 15:47:41 -0400 Subject: [PATCH 30/42] tests: adds missing tests for unescaped characters Signed-off-by: Vincent Biret --- ...e-action-reference-unescaped-component-key.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 tests/v1.2-dev/fail/reusable-action-reference-unescaped-component-key.yaml diff --git a/tests/v1.2-dev/fail/reusable-action-reference-unescaped-component-key.yaml b/tests/v1.2-dev/fail/reusable-action-reference-unescaped-component-key.yaml new file mode 100644 index 0000000..867f08e --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-reference-unescaped-component-key.yaml @@ -0,0 +1,14 @@ +overlay: 1.2.0 +info: + title: Reusable action reference with unescaped component key is invalid + version: 1.0.0 +components: + actions: + 'error-response/v1~beta': + description: Adds an error response + update: + '404': + description: Not Found +actions: + - $ref: '#/components/actions/error-response/v1~beta' + target: '$.paths.*.get.responses' \ No newline at end of file From b05ab45495efec09246229d318f1a8ad70f0c53c Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 15:52:02 -0400 Subject: [PATCH 31/42] tests: increases coverage through additional fail tests Signed-off-by: Vincent Biret --- tests/v1.2-dev/fail/action-copy-invalid-type.yaml | 7 +++++++ .../v1.2-dev/fail/action-remove-invalid-type.yaml | 7 +++++++ .../v1.2-dev/fail/action-target-invalid-type.yaml | 6 ++++++ tests/v1.2-dev/fail/actions-invalid-type.yaml | 5 +++++ tests/v1.2-dev/fail/actions-item-invalid-type.yaml | 6 ++++++ .../fail/components-actions-invalid-type.yaml | 8 ++++++++ .../fail/info-description-invalid-type.yaml | 7 +++++++ tests/v1.2-dev/fail/info-invalid-property.yaml | 7 +++++++ tests/v1.2-dev/fail/info-invalid-type.yaml | 4 ++++ tests/v1.2-dev/fail/info-title-invalid-type.yaml | 6 ++++++ tests/v1.2-dev/fail/info-version-invalid-type.yaml | 6 ++++++ tests/v1.2-dev/fail/overlay-invalid-pattern.yaml | 6 ++++++ ...ironment-variables-invalid-type-components.yaml | 14 ++++++++++++++ ...eusable-action-parameter-item-invalid-type.yaml | 14 ++++++++++++++ ...e-action-parameter-missing-name-components.yaml | 14 ++++++++++++++ ...ion-parameter-name-invalid-type-components.yaml | 14 ++++++++++++++ ...-action-parameters-invalid-type-components.yaml | 14 ++++++++++++++ ...reusable-action-reference-invalid-ref-type.yaml | 7 +++++++ tests/v1.2-dev/fail/root-invalid-property.yaml | 7 +++++++ 19 files changed, 159 insertions(+) create mode 100644 tests/v1.2-dev/fail/action-copy-invalid-type.yaml create mode 100644 tests/v1.2-dev/fail/action-remove-invalid-type.yaml create mode 100644 tests/v1.2-dev/fail/action-target-invalid-type.yaml create mode 100644 tests/v1.2-dev/fail/actions-invalid-type.yaml create mode 100644 tests/v1.2-dev/fail/actions-item-invalid-type.yaml create mode 100644 tests/v1.2-dev/fail/components-actions-invalid-type.yaml create mode 100644 tests/v1.2-dev/fail/info-description-invalid-type.yaml create mode 100644 tests/v1.2-dev/fail/info-invalid-property.yaml create mode 100644 tests/v1.2-dev/fail/info-invalid-type.yaml create mode 100644 tests/v1.2-dev/fail/info-title-invalid-type.yaml create mode 100644 tests/v1.2-dev/fail/info-version-invalid-type.yaml create mode 100644 tests/v1.2-dev/fail/overlay-invalid-pattern.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-environment-variables-invalid-type-components.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-parameter-item-invalid-type.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-parameter-missing-name-components.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-parameter-name-invalid-type-components.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-parameters-invalid-type-components.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-reference-invalid-ref-type.yaml create mode 100644 tests/v1.2-dev/fail/root-invalid-property.yaml diff --git a/tests/v1.2-dev/fail/action-copy-invalid-type.yaml b/tests/v1.2-dev/fail/action-copy-invalid-type.yaml new file mode 100644 index 0000000..f1682bf --- /dev/null +++ b/tests/v1.2-dev/fail/action-copy-invalid-type.yaml @@ -0,0 +1,7 @@ +overlay: 1.2.0 +info: + title: Action copy must be a string + version: 1.0.0 +actions: + - target: '$' + copy: 100 \ No newline at end of file diff --git a/tests/v1.2-dev/fail/action-remove-invalid-type.yaml b/tests/v1.2-dev/fail/action-remove-invalid-type.yaml new file mode 100644 index 0000000..c783475 --- /dev/null +++ b/tests/v1.2-dev/fail/action-remove-invalid-type.yaml @@ -0,0 +1,7 @@ +overlay: 1.2.0 +info: + title: Action remove must be a boolean + version: 1.0.0 +actions: + - target: '$' + remove: maybe \ No newline at end of file diff --git a/tests/v1.2-dev/fail/action-target-invalid-type.yaml b/tests/v1.2-dev/fail/action-target-invalid-type.yaml new file mode 100644 index 0000000..2254e9f --- /dev/null +++ b/tests/v1.2-dev/fail/action-target-invalid-type.yaml @@ -0,0 +1,6 @@ +overlay: 1.2.0 +info: + title: Action target must be a string + version: 1.0.0 +actions: + - target: 100 \ No newline at end of file diff --git a/tests/v1.2-dev/fail/actions-invalid-type.yaml b/tests/v1.2-dev/fail/actions-invalid-type.yaml new file mode 100644 index 0000000..8e39270 --- /dev/null +++ b/tests/v1.2-dev/fail/actions-invalid-type.yaml @@ -0,0 +1,5 @@ +overlay: 1.2.0 +info: + title: Actions must be an array + version: 1.0.0 +actions: {} \ No newline at end of file diff --git a/tests/v1.2-dev/fail/actions-item-invalid-type.yaml b/tests/v1.2-dev/fail/actions-item-invalid-type.yaml new file mode 100644 index 0000000..378fc74 --- /dev/null +++ b/tests/v1.2-dev/fail/actions-item-invalid-type.yaml @@ -0,0 +1,6 @@ +overlay: 1.2.0 +info: + title: Action items must be objects + version: 1.0.0 +actions: + - 123 \ No newline at end of file diff --git a/tests/v1.2-dev/fail/components-actions-invalid-type.yaml b/tests/v1.2-dev/fail/components-actions-invalid-type.yaml new file mode 100644 index 0000000..a63ac20 --- /dev/null +++ b/tests/v1.2-dev/fail/components-actions-invalid-type.yaml @@ -0,0 +1,8 @@ +overlay: 1.2.0 +info: + title: Components actions must be an object + version: 1.0.0 +components: + actions: [] +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.2-dev/fail/info-description-invalid-type.yaml b/tests/v1.2-dev/fail/info-description-invalid-type.yaml new file mode 100644 index 0000000..d3aae07 --- /dev/null +++ b/tests/v1.2-dev/fail/info-description-invalid-type.yaml @@ -0,0 +1,7 @@ +overlay: 1.2.0 +info: + title: Invalid info description type + version: 1.0.0 + description: 100 +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.2-dev/fail/info-invalid-property.yaml b/tests/v1.2-dev/fail/info-invalid-property.yaml new file mode 100644 index 0000000..ebcd100 --- /dev/null +++ b/tests/v1.2-dev/fail/info-invalid-property.yaml @@ -0,0 +1,7 @@ +overlay: 1.2.0 +info: + title: Info invalid property + version: 1.0.0 + invalidProperty: true +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.2-dev/fail/info-invalid-type.yaml b/tests/v1.2-dev/fail/info-invalid-type.yaml new file mode 100644 index 0000000..32d1ab9 --- /dev/null +++ b/tests/v1.2-dev/fail/info-invalid-type.yaml @@ -0,0 +1,4 @@ +overlay: 1.2.0 +info: invalid +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.2-dev/fail/info-title-invalid-type.yaml b/tests/v1.2-dev/fail/info-title-invalid-type.yaml new file mode 100644 index 0000000..e52b3c1 --- /dev/null +++ b/tests/v1.2-dev/fail/info-title-invalid-type.yaml @@ -0,0 +1,6 @@ +overlay: 1.2.0 +info: + title: 100 + version: 1.0.0 +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.2-dev/fail/info-version-invalid-type.yaml b/tests/v1.2-dev/fail/info-version-invalid-type.yaml new file mode 100644 index 0000000..af2f7be --- /dev/null +++ b/tests/v1.2-dev/fail/info-version-invalid-type.yaml @@ -0,0 +1,6 @@ +overlay: 1.2.0 +info: + title: Invalid info version type + version: false +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.2-dev/fail/overlay-invalid-pattern.yaml b/tests/v1.2-dev/fail/overlay-invalid-pattern.yaml new file mode 100644 index 0000000..95d584a --- /dev/null +++ b/tests/v1.2-dev/fail/overlay-invalid-pattern.yaml @@ -0,0 +1,6 @@ +overlay: '1.2' +info: + title: Overlay version must match 1.2.x + version: 1.0.0 +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.2-dev/fail/reusable-action-environment-variables-invalid-type-components.yaml b/tests/v1.2-dev/fail/reusable-action-environment-variables-invalid-type-components.yaml new file mode 100644 index 0000000..cb3fc55 --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-environment-variables-invalid-type-components.yaml @@ -0,0 +1,14 @@ +overlay: 1.2.0 +info: + title: Reusable action environment variables must be an array in components + version: 1.0.0 +components: + actions: + setDescription: + target: '$.info' + environmentVariables: + name: stageName + update: + description: Example +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.2-dev/fail/reusable-action-parameter-item-invalid-type.yaml b/tests/v1.2-dev/fail/reusable-action-parameter-item-invalid-type.yaml new file mode 100644 index 0000000..77674f4 --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-parameter-item-invalid-type.yaml @@ -0,0 +1,14 @@ +overlay: 1.2.0 +info: + title: Reusable action parameter items must be objects + version: 1.0.0 +components: + actions: + setTitle: + target: '$.info' + parameters: + - invalid + update: + title: Example +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.2-dev/fail/reusable-action-parameter-missing-name-components.yaml b/tests/v1.2-dev/fail/reusable-action-parameter-missing-name-components.yaml new file mode 100644 index 0000000..1a1869c --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-parameter-missing-name-components.yaml @@ -0,0 +1,14 @@ +overlay: 1.2.0 +info: + title: Reusable action parameter items must include name in components + version: 1.0.0 +components: + actions: + setTitle: + target: '$.info' + parameters: + - default: fallback + update: + title: Example +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.2-dev/fail/reusable-action-parameter-name-invalid-type-components.yaml b/tests/v1.2-dev/fail/reusable-action-parameter-name-invalid-type-components.yaml new file mode 100644 index 0000000..b1dd35d --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-parameter-name-invalid-type-components.yaml @@ -0,0 +1,14 @@ +overlay: 1.2.0 +info: + title: Reusable action parameter names must be strings in components + version: 1.0.0 +components: + actions: + setTitle: + target: '$.info' + parameters: + - name: 100 + update: + title: Example +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.2-dev/fail/reusable-action-parameters-invalid-type-components.yaml b/tests/v1.2-dev/fail/reusable-action-parameters-invalid-type-components.yaml new file mode 100644 index 0000000..14a38d5 --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-parameters-invalid-type-components.yaml @@ -0,0 +1,14 @@ +overlay: 1.2.0 +info: + title: Reusable action parameters must be an array in components + version: 1.0.0 +components: + actions: + setTitle: + target: '$.info' + parameters: + name: titleValue + update: + title: Example +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.2-dev/fail/reusable-action-reference-invalid-ref-type.yaml b/tests/v1.2-dev/fail/reusable-action-reference-invalid-ref-type.yaml new file mode 100644 index 0000000..9c95a46 --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-reference-invalid-ref-type.yaml @@ -0,0 +1,7 @@ +overlay: 1.2.0 +info: + title: Reusable action reference ref must be a string + version: 1.0.0 +actions: + - $ref: 100 + target: '$' \ No newline at end of file diff --git a/tests/v1.2-dev/fail/root-invalid-property.yaml b/tests/v1.2-dev/fail/root-invalid-property.yaml new file mode 100644 index 0000000..f1d841a --- /dev/null +++ b/tests/v1.2-dev/fail/root-invalid-property.yaml @@ -0,0 +1,7 @@ +overlay: 1.2.0 +info: + title: Root invalid property + version: 1.0.0 +actions: + - target: '$' +invalidProperty: true \ No newline at end of file From f0d5536eeba42aa9818147f99abba1faf8486649 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Mar 2026 15:54:30 -0400 Subject: [PATCH 32/42] tests: duplicates additional tests that would be beneficial to earlier versions of the specification Signed-off-by: Vincent Biret --- tests/v1.0/fail/action-remove-invalid-type.yaml | 7 +++++++ tests/v1.0/fail/action-target-invalid-type.yaml | 6 ++++++ tests/v1.0/fail/actions-invalid-type.yaml | 5 +++++ tests/v1.0/fail/info-invalid-type.yaml | 4 ++++ tests/v1.0/fail/info-title-invalid-type.yaml | 6 ++++++ tests/v1.0/fail/info-version-invalid-type.yaml | 6 ++++++ tests/v1.0/fail/overlay-invalid-pattern.yaml | 6 ++++++ tests/v1.0/fail/root-invalid-property.yaml | 7 +++++++ tests/v1.1/fail/action-copy-invalid-type.yaml | 7 +++++++ tests/v1.1/fail/action-remove-invalid-type.yaml | 7 +++++++ tests/v1.1/fail/action-target-invalid-type.yaml | 6 ++++++ tests/v1.1/fail/actions-invalid-type.yaml | 5 +++++ tests/v1.1/fail/info-description-invalid-type.yaml | 7 +++++++ tests/v1.1/fail/info-invalid-type.yaml | 4 ++++ tests/v1.1/fail/info-title-invalid-type.yaml | 6 ++++++ tests/v1.1/fail/info-version-invalid-type.yaml | 6 ++++++ tests/v1.1/fail/overlay-invalid-pattern.yaml | 6 ++++++ tests/v1.1/fail/root-invalid-property.yaml | 7 +++++++ 18 files changed, 108 insertions(+) create mode 100644 tests/v1.0/fail/action-remove-invalid-type.yaml create mode 100644 tests/v1.0/fail/action-target-invalid-type.yaml create mode 100644 tests/v1.0/fail/actions-invalid-type.yaml create mode 100644 tests/v1.0/fail/info-invalid-type.yaml create mode 100644 tests/v1.0/fail/info-title-invalid-type.yaml create mode 100644 tests/v1.0/fail/info-version-invalid-type.yaml create mode 100644 tests/v1.0/fail/overlay-invalid-pattern.yaml create mode 100644 tests/v1.0/fail/root-invalid-property.yaml create mode 100644 tests/v1.1/fail/action-copy-invalid-type.yaml create mode 100644 tests/v1.1/fail/action-remove-invalid-type.yaml create mode 100644 tests/v1.1/fail/action-target-invalid-type.yaml create mode 100644 tests/v1.1/fail/actions-invalid-type.yaml create mode 100644 tests/v1.1/fail/info-description-invalid-type.yaml create mode 100644 tests/v1.1/fail/info-invalid-type.yaml create mode 100644 tests/v1.1/fail/info-title-invalid-type.yaml create mode 100644 tests/v1.1/fail/info-version-invalid-type.yaml create mode 100644 tests/v1.1/fail/overlay-invalid-pattern.yaml create mode 100644 tests/v1.1/fail/root-invalid-property.yaml diff --git a/tests/v1.0/fail/action-remove-invalid-type.yaml b/tests/v1.0/fail/action-remove-invalid-type.yaml new file mode 100644 index 0000000..7972cf6 --- /dev/null +++ b/tests/v1.0/fail/action-remove-invalid-type.yaml @@ -0,0 +1,7 @@ +overlay: 1.0.0 +info: + title: Action remove must be a boolean + version: 1.0.0 +actions: + - target: '$' + remove: maybe \ No newline at end of file diff --git a/tests/v1.0/fail/action-target-invalid-type.yaml b/tests/v1.0/fail/action-target-invalid-type.yaml new file mode 100644 index 0000000..0da31e5 --- /dev/null +++ b/tests/v1.0/fail/action-target-invalid-type.yaml @@ -0,0 +1,6 @@ +overlay: 1.0.0 +info: + title: Action target must be a string + version: 1.0.0 +actions: + - target: 100 \ No newline at end of file diff --git a/tests/v1.0/fail/actions-invalid-type.yaml b/tests/v1.0/fail/actions-invalid-type.yaml new file mode 100644 index 0000000..3c476b4 --- /dev/null +++ b/tests/v1.0/fail/actions-invalid-type.yaml @@ -0,0 +1,5 @@ +overlay: 1.0.0 +info: + title: Actions must be an array + version: 1.0.0 +actions: {} \ No newline at end of file diff --git a/tests/v1.0/fail/info-invalid-type.yaml b/tests/v1.0/fail/info-invalid-type.yaml new file mode 100644 index 0000000..5acf19a --- /dev/null +++ b/tests/v1.0/fail/info-invalid-type.yaml @@ -0,0 +1,4 @@ +overlay: 1.0.0 +info: invalid +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.0/fail/info-title-invalid-type.yaml b/tests/v1.0/fail/info-title-invalid-type.yaml new file mode 100644 index 0000000..c7eae3b --- /dev/null +++ b/tests/v1.0/fail/info-title-invalid-type.yaml @@ -0,0 +1,6 @@ +overlay: 1.0.0 +info: + title: 100 + version: 1.0.0 +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.0/fail/info-version-invalid-type.yaml b/tests/v1.0/fail/info-version-invalid-type.yaml new file mode 100644 index 0000000..adf0bc8 --- /dev/null +++ b/tests/v1.0/fail/info-version-invalid-type.yaml @@ -0,0 +1,6 @@ +overlay: 1.0.0 +info: + title: Invalid info version type + version: false +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.0/fail/overlay-invalid-pattern.yaml b/tests/v1.0/fail/overlay-invalid-pattern.yaml new file mode 100644 index 0000000..2c6f4cc --- /dev/null +++ b/tests/v1.0/fail/overlay-invalid-pattern.yaml @@ -0,0 +1,6 @@ +overlay: '1.0' +info: + title: Overlay version must match 1.0.x + version: 1.0.0 +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.0/fail/root-invalid-property.yaml b/tests/v1.0/fail/root-invalid-property.yaml new file mode 100644 index 0000000..5ff6a15 --- /dev/null +++ b/tests/v1.0/fail/root-invalid-property.yaml @@ -0,0 +1,7 @@ +overlay: 1.0.0 +info: + title: Root invalid property + version: 1.0.0 +actions: + - target: '$' +invalidProperty: true \ No newline at end of file diff --git a/tests/v1.1/fail/action-copy-invalid-type.yaml b/tests/v1.1/fail/action-copy-invalid-type.yaml new file mode 100644 index 0000000..9bdd807 --- /dev/null +++ b/tests/v1.1/fail/action-copy-invalid-type.yaml @@ -0,0 +1,7 @@ +overlay: 1.1.0 +info: + title: Action copy must be a string + version: 1.0.0 +actions: + - target: '$' + copy: 100 \ No newline at end of file diff --git a/tests/v1.1/fail/action-remove-invalid-type.yaml b/tests/v1.1/fail/action-remove-invalid-type.yaml new file mode 100644 index 0000000..7ea38de --- /dev/null +++ b/tests/v1.1/fail/action-remove-invalid-type.yaml @@ -0,0 +1,7 @@ +overlay: 1.1.0 +info: + title: Action remove must be a boolean + version: 1.0.0 +actions: + - target: '$' + remove: maybe \ No newline at end of file diff --git a/tests/v1.1/fail/action-target-invalid-type.yaml b/tests/v1.1/fail/action-target-invalid-type.yaml new file mode 100644 index 0000000..baed0b8 --- /dev/null +++ b/tests/v1.1/fail/action-target-invalid-type.yaml @@ -0,0 +1,6 @@ +overlay: 1.1.0 +info: + title: Action target must be a string + version: 1.0.0 +actions: + - target: 100 \ No newline at end of file diff --git a/tests/v1.1/fail/actions-invalid-type.yaml b/tests/v1.1/fail/actions-invalid-type.yaml new file mode 100644 index 0000000..e32590d --- /dev/null +++ b/tests/v1.1/fail/actions-invalid-type.yaml @@ -0,0 +1,5 @@ +overlay: 1.1.0 +info: + title: Actions must be an array + version: 1.0.0 +actions: {} \ No newline at end of file diff --git a/tests/v1.1/fail/info-description-invalid-type.yaml b/tests/v1.1/fail/info-description-invalid-type.yaml new file mode 100644 index 0000000..65a180d --- /dev/null +++ b/tests/v1.1/fail/info-description-invalid-type.yaml @@ -0,0 +1,7 @@ +overlay: 1.1.0 +info: + title: Invalid info description type + version: 1.0.0 + description: 100 +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.1/fail/info-invalid-type.yaml b/tests/v1.1/fail/info-invalid-type.yaml new file mode 100644 index 0000000..2e33ea9 --- /dev/null +++ b/tests/v1.1/fail/info-invalid-type.yaml @@ -0,0 +1,4 @@ +overlay: 1.1.0 +info: invalid +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.1/fail/info-title-invalid-type.yaml b/tests/v1.1/fail/info-title-invalid-type.yaml new file mode 100644 index 0000000..2d130ef --- /dev/null +++ b/tests/v1.1/fail/info-title-invalid-type.yaml @@ -0,0 +1,6 @@ +overlay: 1.1.0 +info: + title: 100 + version: 1.0.0 +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.1/fail/info-version-invalid-type.yaml b/tests/v1.1/fail/info-version-invalid-type.yaml new file mode 100644 index 0000000..1073805 --- /dev/null +++ b/tests/v1.1/fail/info-version-invalid-type.yaml @@ -0,0 +1,6 @@ +overlay: 1.1.0 +info: + title: Invalid info version type + version: false +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.1/fail/overlay-invalid-pattern.yaml b/tests/v1.1/fail/overlay-invalid-pattern.yaml new file mode 100644 index 0000000..063a86b --- /dev/null +++ b/tests/v1.1/fail/overlay-invalid-pattern.yaml @@ -0,0 +1,6 @@ +overlay: '1.1' +info: + title: Overlay version must match 1.1.x + version: 1.0.0 +actions: + - target: '$' \ No newline at end of file diff --git a/tests/v1.1/fail/root-invalid-property.yaml b/tests/v1.1/fail/root-invalid-property.yaml new file mode 100644 index 0000000..2d85c0a --- /dev/null +++ b/tests/v1.1/fail/root-invalid-property.yaml @@ -0,0 +1,7 @@ +overlay: 1.1.0 +info: + title: Root invalid property + version: 1.0.0 +actions: + - target: '$' +invalidProperty: true \ No newline at end of file From f57ce30d48972ef667464f453a750ce56596a43b Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 6 Apr 2026 07:56:31 -0400 Subject: [PATCH 33/42] Apply suggestions from code review Co-authored-by: Ralf Handl --- schemas/v1.2-dev/schema.yaml | 2 +- tests/v1.2-dev/fail/action-parameters-invalid.yaml | 4 ++-- .../pass/reusable-action-environment-variables.yaml | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/schemas/v1.2-dev/schema.yaml b/schemas/v1.2-dev/schema.yaml index acf088a..b6beb7a 100644 --- a/schemas/v1.2-dev/schema.yaml +++ b/schemas/v1.2-dev/schema.yaml @@ -58,7 +58,7 @@ $defs: properties: name: type: string - pattern: ^[A-Za-z][A-Za-z0-9]*$ + pattern: ^[A-Za-z_][A-Za-z_0-9]*$ default: $ref: "#/$defs/json-node" required: diff --git a/tests/v1.2-dev/fail/action-parameters-invalid.yaml b/tests/v1.2-dev/fail/action-parameters-invalid.yaml index 243bf47..06e995a 100644 --- a/tests/v1.2-dev/fail/action-parameters-invalid.yaml +++ b/tests/v1.2-dev/fail/action-parameters-invalid.yaml @@ -1,10 +1,10 @@ overlay: 1.2.0 info: - title: Reusable action parameters must be an array + title: Non-reusable action objects can't have parameters version: 1.0.0 actions: - target: '$.info' parameters: - - name: titleValue + - name: notAllowedHere update: title: Example diff --git a/tests/v1.2-dev/pass/reusable-action-environment-variables.yaml b/tests/v1.2-dev/pass/reusable-action-environment-variables.yaml index edc0b61..0fed5bf 100644 --- a/tests/v1.2-dev/pass/reusable-action-environment-variables.yaml +++ b/tests/v1.2-dev/pass/reusable-action-environment-variables.yaml @@ -7,11 +7,11 @@ components: setDescription: target: '$.info' environmentVariables: - - name: stageName + - name: STAGE_NAME default: dev - - name: regionName + - name: REGION_NAME update: - description: 'Deploy stage is %env.stageName% in %env.regionName%' + description: 'Deploy stage is %env.STAGE_NAME% in %env.REGION_NAME%' actions: - target: '$.info' update: From e03b60d8ea5988932694ccbed6c5bbc8de46f528 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 6 Apr 2026 09:22:15 -0400 Subject: [PATCH 34/42] chore: feedback updates for a number of tests Signed-off-by: Vincent Biret --- ...action-with-environment-variables-invalid.yaml} | 0 ...ame.yaml => action-with-parameter-invalid.yaml} | 0 ...usable-action-parameter-values-not-allowed.yaml | 14 +++++++++----- ... reusable-action-reference-without-target.yaml} | 0 4 files changed, 9 insertions(+), 5 deletions(-) rename tests/v1.2-dev/fail/{reusable-action-environment-variables-invalid-type.yaml => action-with-environment-variables-invalid.yaml} (100%) rename tests/v1.2-dev/fail/{reusable-action-parameter-missing-name.yaml => action-with-parameter-invalid.yaml} (100%) rename tests/v1.2-dev/pass/{reusable-action-reference-missing-target.yaml => reusable-action-reference-without-target.yaml} (100%) diff --git a/tests/v1.2-dev/fail/reusable-action-environment-variables-invalid-type.yaml b/tests/v1.2-dev/fail/action-with-environment-variables-invalid.yaml similarity index 100% rename from tests/v1.2-dev/fail/reusable-action-environment-variables-invalid-type.yaml rename to tests/v1.2-dev/fail/action-with-environment-variables-invalid.yaml diff --git a/tests/v1.2-dev/fail/reusable-action-parameter-missing-name.yaml b/tests/v1.2-dev/fail/action-with-parameter-invalid.yaml similarity index 100% rename from tests/v1.2-dev/fail/reusable-action-parameter-missing-name.yaml rename to tests/v1.2-dev/fail/action-with-parameter-invalid.yaml diff --git a/tests/v1.2-dev/fail/reusable-action-parameter-values-not-allowed.yaml b/tests/v1.2-dev/fail/reusable-action-parameter-values-not-allowed.yaml index a11827b..1d5e536 100644 --- a/tests/v1.2-dev/fail/reusable-action-parameter-values-not-allowed.yaml +++ b/tests/v1.2-dev/fail/reusable-action-parameter-values-not-allowed.yaml @@ -2,9 +2,13 @@ overlay: 1.2.0 info: title: Parameter values are not allowed on reusable actions version: 1.0.0 +components: + actions: + setTitle: + target: '$.info' + parameterValues: + titleValue: Example + update: + title: '%param.titleValue%' actions: - - target: '$.info' - parameterValues: - titleValue: Example - update: - title: '%param.titleValue%' + - $ref: '#/components/actions/setTitle' diff --git a/tests/v1.2-dev/pass/reusable-action-reference-missing-target.yaml b/tests/v1.2-dev/pass/reusable-action-reference-without-target.yaml similarity index 100% rename from tests/v1.2-dev/pass/reusable-action-reference-missing-target.yaml rename to tests/v1.2-dev/pass/reusable-action-reference-without-target.yaml From ad8f5e843c640184ca643f5ab8130d3754669164 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 6 Apr 2026 09:36:56 -0400 Subject: [PATCH 35/42] fix: allow underscores in parameter names Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index 165126c..0c800cd 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -223,14 +223,14 @@ The following string replacement syntax MAY be used: %source.key% -Where **source** is a known source whose value MUST ONLY be **env** for environment variables, or **param** for parameters. The key MUST only contain the following characters A-Za-z0-9, contain at least one character and start with a letter. +Where **source** is a known source whose value MUST ONLY be **env** for environment variables, or **param** for parameters. The key MUST only contain the following characters A-Za-z0-9_, contain at least one character and start with a letter or an underscore. #### ABNF Notation ```abnf replacement-string = "%" source "." key "%" source = "env" / "param" -key = ALPHA *( ALPHA / DIGIT ) +key = ( ALPHA / "_" ) *( ALPHA / DIGIT / "_" ) ``` Where ALPHA and DIGIT rules are defined in [[RFC5234]]. From 569cff07937f529a4908046bf3c2d3c5bb34e71b Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 6 Apr 2026 12:50:29 -0400 Subject: [PATCH 36/42] fix: removes outdated note about optional fields Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index 0c800cd..201e650 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -139,8 +139,6 @@ The object provides a set of components to be reused across the Overlay document | ---- | :----: | ---- | | actions | Map(`string`, [Reusable Action Object](#reusable-action-object)) | A key-value set of reusable actions to reference in the actions through a [Reusable Action Reference Object](#reusable-action-reference-object). Optional. | -> Note: the target field for components actions is Optional. - This object MAY be extended with [Specification Extensions](#specification-extensions). #### Action Object From c04856d094afdaca6d43628e426f886900d7dc62 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 6 Apr 2026 12:57:17 -0400 Subject: [PATCH 37/42] docs: better representation of the reusable action object Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index 201e650..ae672c9 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -172,7 +172,9 @@ This object MAY be extended with [Specification Extensions](#specification-exten #### Reusable Action Object -This object is a component that can be reused by Reusable Action Reference Objects, it represents one or more changes to be applied to the target document at the locations defined by the target JSONPath expression and reused in one of more action references. +This object defines a reusable action in `components.actions`. +It holds action fields that can be referenced from `actions` by a Reusable Action Reference Object, which MAY override those fields. +It MAY also define `parameters` and `environmentVariables` for string replacement during reference resolution. ##### Fixed fields From caade0d44957ccb3439c5fe8ee87deb46a4b4b14 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 7 Apr 2026 10:17:18 -0400 Subject: [PATCH 38/42] chore: Apply suggestions from code review Co-authored-by: Ralf Handl Co-authored-by: Vincent Biret --- .../action-with-environment-variables-invalid.yaml | 4 ++-- versions/1.2.0-dev.md | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/v1.2-dev/fail/action-with-environment-variables-invalid.yaml b/tests/v1.2-dev/fail/action-with-environment-variables-invalid.yaml index 37849c9..e22b1fe 100644 --- a/tests/v1.2-dev/fail/action-with-environment-variables-invalid.yaml +++ b/tests/v1.2-dev/fail/action-with-environment-variables-invalid.yaml @@ -1,10 +1,10 @@ overlay: 1.2.0 info: - title: Reusable action environment variables must be an array + title: Non-reusable action objects cannot have environment variables version: 1.0.0 actions: - target: '$.info' environmentVariables: - name: stageName + - name: stageName update: description: Example diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index ae672c9..8584f84 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -180,17 +180,17 @@ It MAY also define `parameters` and `environmentVariables` for string replacemen | Field Name | Type | Description | | ---- | :----: | ---- | -| parameters | [[Reusable action parameter object](#reusable-action-parameter-object)] | A list of parameters to be used during string literal replacement. Optional. | -| environmentVariables | [[Reusable action parameter object](#reusable-action-parameter-object)] | A list of environment variables to be used during string literal replacement. Optional. | -| Any field defined in the [action object](#action-object) | mixed | The [string literal replacement syntax](#string-literal-replacement-syntax) MAY be used for any of the fields, and the replacements MUST be evaluated as the reusable action reference is being resolved. | +| parameters | [[Reusable Action Parameter Object](#reusable-action-parameter-object)] | A list of parameters to be used during string literal replacement. Optional. | +| environmentVariables | [[Reusable Action Parameter Object](#reusable-action-parameter-object)] | A list of environment variables to be used during string literal replacement. Optional. | +| Any field defined in the [Action Object](#action-object) | mixed | The [string literal replacement syntax](#string-literal-replacement-syntax) MAY be used for any of the fields, and the replacements MUST be evaluated as the reusable action reference is being resolved. | This object MAY be extended with [Specification Extensions](#specification-extensions). A reusable action is similar to an action but differs in important ways: -1. It may omit any action field, in particular the `target` field, as these may be supplied by the Reusable Action Reference Object. -1. Any action field in the Reusable Action may employ string interpolation using variables specified in the `parameters` or `environmentVariables` fields. -1. A Reusable Action MUST be referenced by a Reusable Action Reference Object to have any effect on the OpenAPI description. +1. It may omit any action field, in particular the `target` field, as these may be supplied by the [Reusable Action Reference Object](#reusable-action-reference-object). +1. Any action field in the Reusable Action Object may employ string interpolation using variables specified in the `parameters` or `environmentVariables` fields. +1. A Reusable Action Object has to be referenced by a Reusable Action Reference Object to have any effect on the OpenAPI description. #### Reusable Action Parameter Object @@ -213,7 +213,7 @@ This object MAY be extended with [Specification Extensions](#specification-exten | ---- | :----: | ---- | | $ref | `string` | **REQUIRED** A [same-document](https://www.rfc-editor.org/rfc/rfc3986.html#section-4.4) (or fragment-only) relative URI reference, per RFC3986 §4.4, and that the fragment syntax is JSON Pointer, with the pointer prefix restricted to `/components/actions/`. | | Any field defined in the [action object](#action-object) | mixed | Any field defined in the [Action Object](#action-object) to be used as an override to the value resolved in the reusable action. The [string literal replacement syntax](#string-literal-replacement-syntax) MAY NOT be used for any of the fields. Optional. | +| Any field defined in the [Action Object](#action-object) | mixed | Any field defined in the [Action Object](#action-object) to be used as an override to the value resolved in the reusable action. The [string literal replacement syntax](#string-literal-replacement-syntax) MAY NOT be used for any of the fields. Optional. | This object MAY be extended with [Specification Extensions](#specification-extensions). From fd729d538a6a14d4952dc928a15b986c1706803d Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 7 Apr 2026 10:19:54 -0400 Subject: [PATCH 39/42] tests: removes duplicate test definition Signed-off-by: Vincent Biret --- tests/v1.2-dev/fail/action-parameters-invalid.yaml | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 tests/v1.2-dev/fail/action-parameters-invalid.yaml diff --git a/tests/v1.2-dev/fail/action-parameters-invalid.yaml b/tests/v1.2-dev/fail/action-parameters-invalid.yaml deleted file mode 100644 index 06e995a..0000000 --- a/tests/v1.2-dev/fail/action-parameters-invalid.yaml +++ /dev/null @@ -1,10 +0,0 @@ -overlay: 1.2.0 -info: - title: Non-reusable action objects can't have parameters - version: 1.0.0 -actions: - - target: '$.info' - parameters: - - name: notAllowedHere - update: - title: Example From 7d430134ceb7d8ca8f596d9c2f4a3296fbc1a47c Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 7 Apr 2026 13:47:21 -0400 Subject: [PATCH 40/42] fix: restrict parameters defaults and values to string Signed-off-by: Vincent Biret --- schemas/v1.2-dev/schema.yaml | 20 +++++++++---------- .../action-parameter-value-invalid-type.yaml | 20 +++++++++++++++++++ ...iable-default-invalid-type-components.yaml | 15 ++++++++++++++ ...meter-default-invalid-type-components.yaml | 15 ++++++++++++++ .../pass/reusable-action-parameters.yaml | 2 +- versions/1.2.0-dev.md | 4 ++-- 6 files changed, 62 insertions(+), 14 deletions(-) create mode 100644 tests/v1.2-dev/fail/action-parameter-value-invalid-type.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-environment-variable-default-invalid-type-components.yaml create mode 100644 tests/v1.2-dev/fail/reusable-action-parameter-default-invalid-type-components.yaml diff --git a/schemas/v1.2-dev/schema.yaml b/schemas/v1.2-dev/schema.yaml index b6beb7a..a4b6c3b 100644 --- a/schemas/v1.2-dev/schema.yaml +++ b/schemas/v1.2-dev/schema.yaml @@ -28,14 +28,6 @@ required: $ref: "#/$defs/specification-extensions" unevaluatedProperties: false $defs: - json-node: - type: - - string - - boolean - - object - - array - - number - - "null" reusable-action-reference-object: type: object allOf: @@ -48,7 +40,7 @@ $defs: parameterValues: type: object additionalProperties: - $ref: "#/$defs/json-node" + type: string required: - $ref $ref: "#/$defs/specification-extensions" @@ -60,7 +52,7 @@ $defs: type: string pattern: ^[A-Za-z_][A-Za-z_0-9]*$ default: - $ref: "#/$defs/json-node" + type: string required: - name description: A parameter to be used in a reusable action object @@ -113,7 +105,13 @@ $defs: description: type: string update: - $ref: "#/$defs/json-node" + type: + - string + - boolean + - object + - array + - number + - "null" copy: type: string remove: diff --git a/tests/v1.2-dev/fail/action-parameter-value-invalid-type.yaml b/tests/v1.2-dev/fail/action-parameter-value-invalid-type.yaml new file mode 100644 index 0000000..a49ff4b --- /dev/null +++ b/tests/v1.2-dev/fail/action-parameter-value-invalid-type.yaml @@ -0,0 +1,20 @@ +overlay: 1.2.0 +info: + title: Reusable action reference parameter values must be strings + version: 1.0.0 +components: + actions: + errorResponse: + target: "$.paths['%param.pathItem%'].%param.operation%.responses" + update: + '404': + description: Not Found + parameters: + - name: pathItem + - name: operation + default: get +actions: + - $ref: '#/components/actions/errorResponse' + parameterValues: + pathItem: /items + operation: 100 diff --git a/tests/v1.2-dev/fail/reusable-action-environment-variable-default-invalid-type-components.yaml b/tests/v1.2-dev/fail/reusable-action-environment-variable-default-invalid-type-components.yaml new file mode 100644 index 0000000..bb60a5b --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-environment-variable-default-invalid-type-components.yaml @@ -0,0 +1,15 @@ +overlay: 1.2.0 +info: + title: Reusable action environment variable default values must be strings in components + version: 1.0.0 +components: + actions: + setDescription: + target: '$.info' + environmentVariables: + - name: STAGE_NAME + default: false + update: + description: Updated +actions: + - target: '$' diff --git a/tests/v1.2-dev/fail/reusable-action-parameter-default-invalid-type-components.yaml b/tests/v1.2-dev/fail/reusable-action-parameter-default-invalid-type-components.yaml new file mode 100644 index 0000000..68ece9e --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-parameter-default-invalid-type-components.yaml @@ -0,0 +1,15 @@ +overlay: 1.2.0 +info: + title: Reusable action parameter default values must be strings in components + version: 1.0.0 +components: + actions: + setTitle: + target: '$.info' + parameters: + - name: titleValue + default: 100 + update: + title: Example +actions: + - target: '$' diff --git a/tests/v1.2-dev/pass/reusable-action-parameters.yaml b/tests/v1.2-dev/pass/reusable-action-parameters.yaml index 4c88147..9c63b9c 100644 --- a/tests/v1.2-dev/pass/reusable-action-parameters.yaml +++ b/tests/v1.2-dev/pass/reusable-action-parameters.yaml @@ -9,7 +9,7 @@ components: parameters: - name: titleValue - name: versionValue - default: 1 + default: '1' update: title: '%param.titleValue%' version: '%param.versionValue%' diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index 8584f84..d679a48 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -199,7 +199,7 @@ A reusable action is similar to an action but differs in important ways: | Field Name | Type | Description | | ---- | :----: | ---- | | name | `string` | **REQUIRED** The name of the parameter, MUST match the key for the string literal replacement expression. | -| default | `string` | A default string value for the parameter to use when no value is provided by the reference. Optional. | This object MAY be extended with [Specification Extensions](#specification-extensions). @@ -212,7 +212,7 @@ This object MAY be extended with [Specification Extensions](#specification-exten | Field Name | Type | Description | | ---- | :----: | ---- | | $ref | `string` | **REQUIRED** A [same-document](https://www.rfc-editor.org/rfc/rfc3986.html#section-4.4) (or fragment-only) relative URI reference, per RFC3986 §4.4, and that the fragment syntax is JSON Pointer, with the pointer prefix restricted to `/components/actions/`. | -| parameterValues | `Map(string, string)` | A set of string values to use for the reusable action parameters, the key MUST match the parameter name. Optional. | | Any field defined in the [Action Object](#action-object) | mixed | Any field defined in the [Action Object](#action-object) to be used as an override to the value resolved in the reusable action. The [string literal replacement syntax](#string-literal-replacement-syntax) MAY NOT be used for any of the fields. Optional. | This object MAY be extended with [Specification Extensions](#specification-extensions). From 18ea3ee935c860cf000ada768908d949829f45e6 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 7 Apr 2026 13:54:49 -0400 Subject: [PATCH 41/42] fix: restrict the string interpolation syntax to string fields of object nodes Signed-off-by: Vincent Biret --- versions/1.2.0-dev.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index d679a48..2e9706c 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -182,14 +182,14 @@ It MAY also define `parameters` and `environmentVariables` for string replacemen | ---- | :----: | ---- | | parameters | [[Reusable Action Parameter Object](#reusable-action-parameter-object)] | A list of parameters to be used during string literal replacement. Optional. | | environmentVariables | [[Reusable Action Parameter Object](#reusable-action-parameter-object)] | A list of environment variables to be used during string literal replacement. Optional. | -| Any field defined in the [Action Object](#action-object) | mixed | The [string literal replacement syntax](#string-literal-replacement-syntax) MAY be used for any of the fields, and the replacements MUST be evaluated as the reusable action reference is being resolved. | +| Any field defined in the [Action Object](#action-object) | mixed | The [string literal replacement syntax](#string-literal-replacement-syntax) MAY ONLY be used in string fields (`target`, `copy`) and in key or value nodes within the `update` object. It MAY NOT be used in scalar non-string fields (for example `remove`), as that would produce an invalid Overlay document according to the schema. Replacements MUST be evaluated as the reusable action reference is being resolved. | This object MAY be extended with [Specification Extensions](#specification-extensions). A reusable action is similar to an action but differs in important ways: 1. It may omit any action field, in particular the `target` field, as these may be supplied by the [Reusable Action Reference Object](#reusable-action-reference-object). -1. Any action field in the Reusable Action Object may employ string interpolation using variables specified in the `parameters` or `environmentVariables` fields. +1. String interpolation in a Reusable Action Object using variables specified in the `parameters` or `environmentVariables` fields is only allowed in string fields (`target`, `copy`) and in key or value nodes within the `update` object. It is not allowed in scalar non-string fields such as `remove`. 1. A Reusable Action Object has to be referenced by a Reusable Action Reference Object to have any effect on the OpenAPI description. #### Reusable Action Parameter Object From 11e40536735ce387a50ac198c371532046255353 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 7 Apr 2026 13:58:15 -0400 Subject: [PATCH 42/42] fix: adds encoding considerations for keys Signed-off-by: Vincent Biret --- ...on-reference-unescaped-tilde-component-key.yaml | 14 ++++++++++++++ versions/1.2.0-dev.md | 4 +++- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 tests/v1.2-dev/fail/reusable-action-reference-unescaped-tilde-component-key.yaml diff --git a/tests/v1.2-dev/fail/reusable-action-reference-unescaped-tilde-component-key.yaml b/tests/v1.2-dev/fail/reusable-action-reference-unescaped-tilde-component-key.yaml new file mode 100644 index 0000000..0a27875 --- /dev/null +++ b/tests/v1.2-dev/fail/reusable-action-reference-unescaped-tilde-component-key.yaml @@ -0,0 +1,14 @@ +overlay: 1.2.0 +info: + title: Reusable action reference with unescaped tilde in component key is invalid + version: 1.0.0 +components: + actions: + 'error~response': + description: Adds an error response + update: + '404': + description: Not Found +actions: + - $ref: '#/components/actions/error~response' + target: '$.paths.*.get.responses' diff --git a/versions/1.2.0-dev.md b/versions/1.2.0-dev.md index 2e9706c..fa100ab 100644 --- a/versions/1.2.0-dev.md +++ b/versions/1.2.0-dev.md @@ -139,6 +139,8 @@ The object provides a set of components to be reused across the Overlay document | ---- | :----: | ---- | | actions | Map(`string`, [Reusable Action Object](#reusable-action-object)) | A key-value set of reusable actions to reference in the actions through a [Reusable Action Reference Object](#reusable-action-reference-object). Optional. | +When a key under `components.actions` is referenced by a Reusable Action Reference Object, that key is part of a JSON Pointer token and MUST be encoded according to [[RFC6901], Section 3](https://www.rfc-editor.org/rfc/rfc6901#section-3) (for example, `~` as `~0` and `/` as `~1`). + This object MAY be extended with [Specification Extensions](#specification-extensions). #### Action Object @@ -211,7 +213,7 @@ This object MAY be extended with [Specification Extensions](#specification-exten | Field Name | Type | Description | | ---- | :----: | ---- | -| $ref | `string` | **REQUIRED** A [same-document](https://www.rfc-editor.org/rfc/rfc3986.html#section-4.4) (or fragment-only) relative URI reference, per RFC3986 §4.4, and that the fragment syntax is JSON Pointer, with the pointer prefix restricted to `/components/actions/`. | +| $ref | `string` | **REQUIRED** A [same-document](https://www.rfc-editor.org/rfc/rfc3986.html#section-4.4) (or fragment-only) relative URI reference, per RFC3986 §4.4, and that the fragment syntax is JSON Pointer, with the pointer prefix restricted to `/components/actions/`. Component action keys in this pointer MUST be encoded according to [[RFC6901], Section 3](https://www.rfc-editor.org/rfc/rfc6901#section-3). | | Any field defined in the [Action Object](#action-object) | mixed | Any field defined in the [Action Object](#action-object) to be used as an override to the value resolved in the reusable action. The [string literal replacement syntax](#string-literal-replacement-syntax) MAY NOT be used for any of the fields. Optional. |