From 89ef7d104c6ed8c21caf522cf80da3d1e1a30fb3 Mon Sep 17 00:00:00 2001 From: Akanksha Trehun Date: Sat, 24 Oct 2026 09:11:30 +0530 Subject: [PATCH 1/2] Add shared emitter conformance fixtures and a cross-emitter check --- .../extension-binding-normalizer.yml | 42 ++ .../ci/emitter_conformance.py | 241 +++++++++ .../ci/test_emitter_conformance.py | 55 +++ .../model/conformance/README.md | 51 ++ .../14-scalar-definition-references/root.yaml | 55 +++ .../cases/15-keyword-property-names/root.yaml | 44 ++ .../manifest-neutral.yaml | 33 ++ .../02-additive-field/manifest-neutral.yaml | 20 + .../manifest-neutral.yaml | 20 + .../manifest-neutral.yaml | 32 ++ .../manifest-neutral.yaml | 32 ++ .../manifest-neutral.yaml | 32 ++ .../manifest-neutral.yaml | 56 +++ .../manifest-neutral.yaml | 72 +++ .../manifest-neutral.yaml | 59 +++ .../manifest-neutral.yaml | 33 ++ .../manifest-neutral.yaml | 81 ++++ .../runtimeconditions.binding-model.yaml | 394 +++++++++++++++ .../manifest-neutral.yaml | 32 ++ .../runtimeconditions.binding-model.yaml | 459 ++++++++++++++++++ .../normalizer/conformance_test.go | 2 + 21 files changed, 1845 insertions(+) create mode 100644 tooling/extension-bindings/ci/emitter_conformance.py create mode 100644 tooling/extension-bindings/ci/test_emitter_conformance.py create mode 100644 tooling/extension-bindings/model/conformance/README.md create mode 100644 tooling/extension-bindings/model/conformance/cases/14-scalar-definition-references/root.yaml create mode 100644 tooling/extension-bindings/model/conformance/cases/15-keyword-property-names/root.yaml create mode 100644 tooling/extension-bindings/model/conformance/expected/01-owned-kind-interface/manifest-neutral.yaml create mode 100644 tooling/extension-bindings/model/conformance/expected/02-additive-field/manifest-neutral.yaml create mode 100644 tooling/extension-bindings/model/conformance/expected/03-transitive-closure/manifest-neutral.yaml create mode 100644 tooling/extension-bindings/model/conformance/expected/06-recursive-reference/manifest-neutral.yaml create mode 100644 tooling/extension-bindings/model/conformance/expected/07-object-alternatives/manifest-neutral.yaml create mode 100644 tooling/extension-bindings/model/conformance/expected/08-heterogeneous-union/manifest-neutral.yaml create mode 100644 tooling/extension-bindings/model/conformance/expected/09-collections-and-maps/manifest-neutral.yaml create mode 100644 tooling/extension-bindings/model/conformance/expected/10-scoped-domains-collisions/manifest-neutral.yaml create mode 100644 tooling/extension-bindings/model/conformance/expected/11-source-name-preservation/manifest-neutral.yaml create mode 100644 tooling/extension-bindings/model/conformance/expected/13-dependency-schema-only/manifest-neutral.yaml create mode 100644 tooling/extension-bindings/model/conformance/expected/14-scalar-definition-references/manifest-neutral.yaml create mode 100644 tooling/extension-bindings/model/conformance/expected/14-scalar-definition-references/runtimeconditions.binding-model.yaml create mode 100644 tooling/extension-bindings/model/conformance/expected/15-keyword-property-names/manifest-neutral.yaml create mode 100644 tooling/extension-bindings/model/conformance/expected/15-keyword-property-names/runtimeconditions.binding-model.yaml diff --git a/.github/workflows/extension-binding-normalizer.yml b/.github/workflows/extension-binding-normalizer.yml index ec2228d..3b31556 100644 --- a/.github/workflows/extension-binding-normalizer.yml +++ b/.github/workflows/extension-binding-normalizer.yml @@ -9,6 +9,8 @@ on: - "tooling/extension-bindings/README.md" - "tooling/extension-bindings/emitters/go/**" - "tooling/extension-bindings/emitters/typescript/**" + - "tooling/extension-bindings/emitters/python/**" + - "tooling/extension-bindings/ci/emitter_conformance.py" - "tooling/extension-bindings/model/**" - "tooling/extension-bindings/normalizer/**" push: @@ -20,6 +22,8 @@ on: - "tooling/extension-bindings/README.md" - "tooling/extension-bindings/emitters/go/**" - "tooling/extension-bindings/emitters/typescript/**" + - "tooling/extension-bindings/emitters/python/**" + - "tooling/extension-bindings/ci/emitter_conformance.py" - "tooling/extension-bindings/model/**" - "tooling/extension-bindings/normalizer/**" workflow_dispatch: @@ -111,3 +115,41 @@ jobs: - name: Test the TypeScript emitter and generated conformance packages run: npm test + + verify-emitter-conformance: + name: Verify emitters agree on the shared fixtures + runs-on: ubuntu-latest + timeout-minutes: 15 + + steps: + - name: Check out repository + uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 + with: + persist-credentials: false + + - name: Set up Python + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 + with: + python-version: '3.12.10' + + - name: Install the pinned Python tooling + run: python -m pip install --disable-pip-version-check --no-deps -r tooling/extension-bindings/ci/python-tooling-requirements.txt + + - name: Set up Node.js + uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6.5.0 + with: + node-version: 20.19.6 + cache: npm + cache-dependency-path: tooling/extension-bindings/emitters/typescript/package-lock.json + + - name: Build the TypeScript emitter + working-directory: tooling/extension-bindings/emitters/typescript + run: npm ci --ignore-scripts && npm run build + + - name: Test the fixture checker + working-directory: tooling/extension-bindings/ci + run: python -m unittest test_emitter_conformance + + - name: Compare each emitter's manifest with the shared fixtures + working-directory: tooling/extension-bindings/ci + run: python emitter_conformance.py --emitters python,typescript diff --git a/tooling/extension-bindings/ci/emitter_conformance.py b/tooling/extension-bindings/ci/emitter_conformance.py new file mode 100644 index 0000000..92b4d3a --- /dev/null +++ b/tooling/extension-bindings/ci/emitter_conformance.py @@ -0,0 +1,241 @@ +"""Check that every native emitter agrees on the language-neutral part of the binding manifest. + +The manifest's declarations, imported marker contracts, and root bindings come from the +binding model, not from the target language. Each positive case under +model/conformance/expected has a manifest-neutral.yaml fixture holding that part; an +emitter conforms when its generated manifest projects to exactly the fixture. +""" + +from __future__ import annotations + +import argparse +import json +import os +import shutil +import subprocess +import sys +import tempfile +from pathlib import Path + +import yaml + +TOOLING = Path(__file__).resolve().parents[1] +EXPECTED = TOOLING / "model/conformance/expected" +REPOSITORY = "https://github.com/runtimeconditions/extensions" +ROOT_BINDING_KEYS = ( + "role", + "modelRef", + "declarationCoordinate", + "scope", + "sourceName", + "path", + "schemaCoordinate", + "fixedInterfaceType", + "vocabularyCoordinate", +) +CONTRACT_KEYS = ("modelRef", "owner", "sourceName") + + +def ordered(items: list[dict]) -> list[dict]: + return sorted(items, key=lambda item: json.dumps(item, sort_keys=True)) + + +def project(manifest: dict) -> dict: + return { + "declarations": ordered( + [{k: item[k] for k in CONTRACT_KEYS} for item in manifest.get("declarations", [])] + ), + "importedMarkerContracts": ordered( + [ + {k: item[k] for k in CONTRACT_KEYS} + for item in manifest.get("importedMarkerContracts", []) + ] + ), + "rootBindings": ordered( + [ + {k: item[k] for k in ROOT_BINDING_KEYS if k in item} + for item in manifest.get("rootBindings", []) + ] + ), + } + + +def direct_dependencies(model: dict) -> list[str]: + root = model["rootExtension"]["id"] + entry = next(item for item in model["extensions"] if item["id"] == root) + return sorted(entry.get("dependencies", [])) + + +def target(api: str, kind: str, key: str, model: dict, extra: dict, dependency: dict) -> dict: + root = model["rootExtension"]["id"] + return { + "apiVersion": f"runtimeconditions.io/{api}-package-target/v1alpha1", + "kind": kind, + "packageKey": key, + "rootExtension": root, + "publicationMode": "github-tag", + "dependencies": [ + {"extension": item, **{k: v.format(i=i) for k, v in dependency.items()}} + for i, item in enumerate(direct_dependencies(model)) + ], + **extra, + } + + +class Emitter: + def __init__(self, name: str) -> None: + self.name = name + self.environment = dict(os.environ) + + def prepare(self, workspace: Path) -> None: + pass + + +class Python(Emitter): + def prepare(self, workspace: Path) -> None: + source = TOOLING / "emitters/python/src" + self.environment["PYTHONPATH"] = str(source) + + def target(self, key: str, model: dict) -> dict: + return target( + "python", + "RuntimeConditionsPythonPackageTarget", + key, + model, + { + "distributionName": f"rc-{key}", + "importPackage": f"rc_{key}", + "version": "1.0.0", + "sourceDirectory": f"bindings/{key}/python", + "minimumPythonVersion": "3.11", + "repositoryUrl": REPOSITORY, + "emitterSha256": "0" * 64, + }, + {"distributionName": "rc-dep-{i}", "importPackage": "rc_dep_{i}", "version": "1.0.0"}, + ) + + def command(self, model: Path, config: Path, output: Path) -> list[str]: + return [sys.executable, "-m", "runtimeconditions_binding_emitter", "emit", "--model", str(model), "--package-config", str(config), "--output", str(output)] + + def manifest(self, output: Path, key: str) -> Path: + return output / "src" / f"rc_{key}" / "runtimeconditions.bindings.yaml" + + +class TypeScript(Emitter): + def target(self, key: str, model: dict) -> dict: + return target( + "typescript", + "RuntimeConditionsTypeScriptPackageTarget", + key, + model, + { + "packageName": f"@rc/{key}", + "version": "1.0.0", + "sourceDirectory": f"bindings/{key}/typescript", + "minimumNodeVersion": "20.19", + "repositoryUrl": REPOSITORY, + "emitterSha256": "0" * 64, + }, + {"packageName": "@rc/dep-{i}", "version": "1.0.0"}, + ) + + def command(self, model: Path, config: Path, output: Path) -> list[str]: + main = TOOLING / "emitters/typescript/dist/src/main.js" + if not main.is_file(): + raise SystemExit(f"build the TypeScript emitter first: npm ci && npm run build in {main.parents[2]}") + return ["node", str(main), "emit", "--model", str(model), "--package-config", str(config), "--output", str(output)] + + def manifest(self, output: Path, key: str) -> Path: + return output / "runtimeconditions" / "runtimeconditions.bindings.yaml" + + +class Rust(Emitter): + def prepare(self, workspace: Path) -> None: + crate = TOOLING / "emitters/rust" + subprocess.run(["cargo", "build", "--release", "--locked", "--target-dir", str(workspace / "rust")], cwd=crate, check=True) + self.binary = workspace / "rust/release/runtimeconditions-binding-emitter-rust" + + def target(self, key: str, model: dict) -> dict: + return target( + "rust", + "RuntimeConditionsRustPackageTarget", + key, + model, + { + "crateName": f"rc-{key}", + "version": "1.0.0", + "sourceDirectory": f"bindings/{key}/rust", + "minimumRustVersion": "1.75", + "repositoryUrl": REPOSITORY, + "emitterSha256": "0" * 64, + }, + {"crateName": "rc-dep-{i}", "version": "1.0.0"}, + ) + + def command(self, model: Path, config: Path, output: Path) -> list[str]: + return [str(self.binary), "emit", "--model", str(model), "--package-config", str(config), "--output", str(output)] + + def manifest(self, output: Path, key: str) -> Path: + return output / "runtimeconditions" / "runtimeconditions.bindings.yaml" + + +EMITTERS = {"python": Python, "typescript": TypeScript, "rust": Rust} + + +def cases(selected: list[str]) -> list[str]: + found = sorted(path.parent.name for path in EXPECTED.glob("*/runtimeconditions.binding-model.yaml")) + unknown = sorted(set(selected) - set(found)) + if unknown: + raise SystemExit(f"unknown cases: {', '.join(unknown)}") + return selected or found + + +def generate(emitter: Emitter, workspace: Path, case: str) -> dict: + key = "case" + case.split("-")[0] + model_path = EXPECTED / case / "runtimeconditions.binding-model.yaml" + model = yaml.safe_load(model_path.read_text(encoding="utf-8")) + config = workspace / f"{emitter.name}-{case}.yaml" + config.write_text(yaml.safe_dump(emitter.target(key, model)), encoding="utf-8") + output = workspace / f"{emitter.name}-{case}" + shutil.rmtree(output, ignore_errors=True) + result = subprocess.run(emitter.command(model_path, config, output), capture_output=True, text=True, env=emitter.environment) + if result.returncode: + raise SystemExit(f"{emitter.name} failed on {case}:\n{result.stderr or result.stdout}") + return project(yaml.safe_load(emitter.manifest(output, key).read_text(encoding="utf-8"))) + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + parser.add_argument("--emitters", default=",".join(EMITTERS), help="comma-separated emitters to check") + parser.add_argument("--case", action="append", default=[], help="limit to a case; repeatable") + parser.add_argument("--update", action="store_true", help="rewrite the fixtures from the first selected emitter") + arguments = parser.parse_args() + names = [name.strip() for name in arguments.emitters.split(",") if name.strip()] + unknown = sorted(set(names) - set(EMITTERS)) + if unknown or not names: + raise SystemExit(f"choose emitters from {', '.join(EMITTERS)}") + failures = [] + with tempfile.TemporaryDirectory(prefix="emitter-conformance-") as temporary: + workspace = Path(temporary) + emitters = [EMITTERS[name](name) for name in names] + for emitter in emitters: + emitter.prepare(workspace) + for case in cases(arguments.case): + fixture = EXPECTED / case / "manifest-neutral.yaml" + for emitter in emitters: + actual = generate(emitter, workspace, case) + if arguments.update: + fixture.write_text(yaml.safe_dump(actual, sort_keys=True), encoding="utf-8") + print(f"wrote {fixture.relative_to(TOOLING)} from {emitter.name}") + break + expected = yaml.safe_load(fixture.read_text(encoding="utf-8")) + status = "ok" if actual == expected else "DIFFERS" + print(f"{status:8} {emitter.name:11} {case}") + if actual != expected: + failures.append(f"{emitter.name}: {case}") + if failures: + raise SystemExit("emitters disagree with the fixtures: " + ", ".join(failures)) + + +if __name__ == "__main__": + main() diff --git a/tooling/extension-bindings/ci/test_emitter_conformance.py b/tooling/extension-bindings/ci/test_emitter_conformance.py new file mode 100644 index 0000000..bb47e69 --- /dev/null +++ b/tooling/extension-bindings/ci/test_emitter_conformance.py @@ -0,0 +1,55 @@ +"""Keep the shared emitter fixtures complete and the projection stable.""" + +from __future__ import annotations + +import unittest + +import emitter_conformance as conformance + + +class FixtureTests(unittest.TestCase): + def test_every_positive_case_has_a_neutral_manifest_fixture(self) -> None: + models = { + path.parent.name + for path in conformance.EXPECTED.glob("*/runtimeconditions.binding-model.yaml") + } + fixtures = { + path.parent.name for path in conformance.EXPECTED.glob("*/manifest-neutral.yaml") + } + self.assertTrue(models) + self.assertEqual(models, fixtures) + + def test_projection_keeps_only_the_language_neutral_fields(self) -> None: + manifest = { + "declarations": [{"modelRef": {"coordinate": "a"}, "owner": "o", "sourceName": "s", "function": "f"}], + "rootBindings": [ + {"role": "condition-field", "sourceName": "x", "value": {"type": "T"}, "nativeName": "n"} + ], + } + self.assertEqual( + conformance.project(manifest), + { + "declarations": [{"modelRef": {"coordinate": "a"}, "owner": "o", "sourceName": "s"}], + "importedMarkerContracts": [], + "rootBindings": [{"role": "condition-field", "sourceName": "x"}], + }, + ) + + def test_projection_ignores_order(self) -> None: + first = {"rootBindings": [{"role": "a", "sourceName": "1"}, {"role": "b", "sourceName": "2"}]} + second = {"rootBindings": list(reversed(first["rootBindings"]))} + self.assertEqual(conformance.project(first), conformance.project(second)) + + def test_direct_dependencies_come_from_the_root_extension(self) -> None: + model = { + "rootExtension": {"id": "root"}, + "extensions": [ + {"id": "leaf"}, + {"id": "root", "dependencies": ["b", "a"]}, + ], + } + self.assertEqual(conformance.direct_dependencies(model), ["a", "b"]) + + +if __name__ == "__main__": + unittest.main() diff --git a/tooling/extension-bindings/model/conformance/README.md b/tooling/extension-bindings/model/conformance/README.md new file mode 100644 index 0000000..cd77a0b --- /dev/null +++ b/tooling/extension-bindings/model/conformance/README.md @@ -0,0 +1,51 @@ +# Conformance fixtures + +Every native emitter is checked against the same inputs. + +- `cases//` holds the extension definitions for one scenario. `root.yaml` is the + extension under test; other files in the folder are its dependencies. +- `expected//runtimeconditions.binding-model.yaml` is the normalized binding model + for a positive case, and `expected//diagnostic.yaml` is the diagnostic for a + negative one. The normalizer test regenerates and compares them. +- `expected//manifest-neutral.yaml` is the part of the binding manifest that comes + from the model rather than the target language: the declarations, the imported marker + contracts, and the root bindings (role, model reference, scope, path, and schema and + vocabulary coordinates). Native names, types, and files are left out because they + depend on the language. + +| Case | What it covers | +| --- | --- | +| `01`, `02`, `03` | Owned kinds and interfaces, additive fields across packages, transitive closure | +| `04`, `05`, `12` | Negative: dependency cycle, vocabulary conflict, unsupported structural keyword | +| `06`, `07`, `08`, `09` | Recursive references, object alternatives, unions, collections and maps | +| `10`, `11` | Scoped domain collisions, source names that must survive naming | +| `13` | A dependency that contributes only a schema | +| `14` | Properties that reference scalar, unconstrained, enum, and chained definitions | +| `15` | Property names that are reserved words in common languages | + +## Checking an emitter + +`ci/emitter_conformance.py` generates every positive case with each emitter, projects the +generated manifest onto the neutral fields, and compares it with the fixture: + +```sh +python tooling/extension-bindings/ci/emitter_conformance.py --emitters python,typescript,rust +``` + +The TypeScript emitter must be built first; the Rust emitter is built by the script. A new +emitter joins by adding a small adapter class that writes its package target and says +where its manifest lands. The Go emitter is not included: its manifest predates the +current shape and uses vocabulary coordinates for its model references and leaves out the +schema and vocabulary coordinates, and it rejects unconstrained definitions (case 14) with +`RCG1024`. + +## Adding a case + +1. Add `cases/-/root.yaml` and append the case to `conformanceCases` in + `normalizer/conformance_test.go`. +2. Run `UPDATE_CONFORMANCE=1 go test -run TestConformanceSuite ./...` in `normalizer/` and + review the new `expected/` files. +3. Run `python tooling/extension-bindings/ci/emitter_conformance.py --emitters python --update` + to write the neutral fixture, then check the other emitters against it. Emitters that + discover cases by directory, like the Python, TypeScript, and Rust test suites, pick the + new case up automatically. diff --git a/tooling/extension-bindings/model/conformance/cases/14-scalar-definition-references/root.yaml b/tooling/extension-bindings/model/conformance/cases/14-scalar-definition-references/root.yaml new file mode 100644 index 0000000..e42a3f8 --- /dev/null +++ b/tooling/extension-bindings/model/conformance/cases/14-scalar-definition-references/root.yaml @@ -0,0 +1,55 @@ +apiVersion: runtimeconditions.io/v1alpha1 +kind: RuntimeConditionsExtensionDefinition +metadata: + id: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + version: 1.0.0 +spec: + kinds: + - name: setting + interfaceTypes: + - name: file + targetKind: setting + conditionFields: + - name: label + appliesToKinds: [setting] + appliesToInterfaceTypes: [file] + schemas: + - id: setting-file + description: Properties that reference scalar, any, enum, and chained definitions. + appliesToKind: setting + appliesToInterfaceType: file + schema: + type: object + required: [kind, interface, label] + properties: + kind: + const: setting + interface: + type: object + required: [type] + properties: + type: + const: file + additionalProperties: false + label: + $ref: '#/$defs/label' + alias: + $ref: '#/$defs/alias' + payload: + $ref: '#/$defs/payload' + mode: + $ref: '#/$defs/mode' + tags: + type: array + items: + $ref: '#/$defs/alias' + $defs: + label: + type: string + alias: + $ref: '#/$defs/label' + payload: {} + mode: + type: string + enum: [fast, safe] + additionalProperties: false diff --git a/tooling/extension-bindings/model/conformance/cases/15-keyword-property-names/root.yaml b/tooling/extension-bindings/model/conformance/cases/15-keyword-property-names/root.yaml new file mode 100644 index 0000000..83cce5b --- /dev/null +++ b/tooling/extension-bindings/model/conformance/cases/15-keyword-property-names/root.yaml @@ -0,0 +1,44 @@ +apiVersion: runtimeconditions.io/v1alpha1 +kind: RuntimeConditionsExtensionDefinition +metadata: + id: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + version: 1.0.0 +spec: + kinds: + - name: runner + interfaceTypes: + - name: process + targetKind: runner + schemas: + - id: runner-process + description: Property names that are reserved words in common languages. + appliesToKind: runner + appliesToInterfaceType: process + schema: + type: object + required: [kind, interface] + properties: + kind: + const: runner + interface: + type: object + required: [type] + properties: + type: + const: process + additionalProperties: false + options: + type: object + properties: + class: {type: string} + default: {type: string} + import: {type: integer} + match: {type: boolean} + new: {type: string} + return: {type: string} + self: {type: string} + type: {type: string} + async: {type: string} + fn: {type: string} + additionalProperties: false + additionalProperties: false diff --git a/tooling/extension-bindings/model/conformance/expected/01-owned-kind-interface/manifest-neutral.yaml b/tooling/extension-bindings/model/conformance/expected/01-owned-kind-interface/manifest-neutral.yaml new file mode 100644 index 0000000..849dff7 --- /dev/null +++ b/tooling/extension-bindings/model/conformance/expected/01-owned-kind-interface/manifest-neutral.yaml @@ -0,0 +1,33 @@ +declarations: +- modelRef: + coordinate: kind:service + owner: https://runtimeconditions.io/conformance/owned-kind-interface:1.0.0 + sourceName: service +importedMarkerContracts: [] +rootBindings: +- declarationCoordinate: kind:service + fixedInterfaceType: http + modelRef: + coordinate: https://runtimeconditions.io/conformance/owned-kind-interface:1.0.0#schema:service-http + jsonPointer: /properties/interface + path: + - name: interface + role: interface + schemaCoordinate: https://runtimeconditions.io/conformance/owned-kind-interface:1.0.0#schema:service-http + scope: + interfaceType: http + kind: service + sourceName: http +- declarationCoordinate: kind:service + modelRef: + coordinate: https://runtimeconditions.io/conformance/owned-kind-interface:1.0.0#schema:service-http + jsonPointer: /properties/region + path: + - name: region + role: condition-field + schemaCoordinate: https://runtimeconditions.io/conformance/owned-kind-interface:1.0.0#schema:service-http + scope: + interfaceType: http + kind: service + sourceName: region + vocabularyCoordinate: condition-field:service:http:region diff --git a/tooling/extension-bindings/model/conformance/expected/02-additive-field/manifest-neutral.yaml b/tooling/extension-bindings/model/conformance/expected/02-additive-field/manifest-neutral.yaml new file mode 100644 index 0000000..7252c3d --- /dev/null +++ b/tooling/extension-bindings/model/conformance/expected/02-additive-field/manifest-neutral.yaml @@ -0,0 +1,20 @@ +declarations: [] +importedMarkerContracts: +- modelRef: + coordinate: kind:service + owner: https://runtimeconditions.io/conformance/additive-field-base:1.0.0 + sourceName: service +rootBindings: +- declarationCoordinate: kind:service + modelRef: + coordinate: https://runtimeconditions.io/conformance/additive-field:1.0.0#schema:additive-credential + jsonPointer: /properties/credential + path: + - name: credential + role: condition-field + schemaCoordinate: https://runtimeconditions.io/conformance/additive-field:1.0.0#schema:additive-credential + scope: + interfaceType: http + kind: service + sourceName: credential + vocabularyCoordinate: condition-field:service:http:credential diff --git a/tooling/extension-bindings/model/conformance/expected/03-transitive-closure/manifest-neutral.yaml b/tooling/extension-bindings/model/conformance/expected/03-transitive-closure/manifest-neutral.yaml new file mode 100644 index 0000000..5eecf92 --- /dev/null +++ b/tooling/extension-bindings/model/conformance/expected/03-transitive-closure/manifest-neutral.yaml @@ -0,0 +1,20 @@ +declarations: [] +importedMarkerContracts: +- modelRef: + coordinate: kind:worker + owner: https://runtimeconditions.io/conformance/transitive-leaf:1.0.0 + sourceName: worker +rootBindings: +- declarationCoordinate: kind:worker + modelRef: + coordinate: https://runtimeconditions.io/conformance/transitive-root:1.0.0#schema:worker-process + jsonPointer: /properties/command + path: + - name: command + role: condition-field + schemaCoordinate: https://runtimeconditions.io/conformance/transitive-root:1.0.0#schema:worker-process + scope: + interfaceType: process + kind: worker + sourceName: command + vocabularyCoordinate: condition-field:worker:process:command diff --git a/tooling/extension-bindings/model/conformance/expected/06-recursive-reference/manifest-neutral.yaml b/tooling/extension-bindings/model/conformance/expected/06-recursive-reference/manifest-neutral.yaml new file mode 100644 index 0000000..d44d2af --- /dev/null +++ b/tooling/extension-bindings/model/conformance/expected/06-recursive-reference/manifest-neutral.yaml @@ -0,0 +1,32 @@ +declarations: +- modelRef: + coordinate: kind:tree + owner: https://runtimeconditions.io/conformance/recursive-reference:1.0.0 + sourceName: tree +importedMarkerContracts: [] +rootBindings: +- declarationCoordinate: kind:tree + fixedInterfaceType: node + modelRef: + coordinate: https://runtimeconditions.io/conformance/recursive-reference:1.0.0#schema:recursive-tree + jsonPointer: /properties/interface + path: + - name: interface + role: interface + schemaCoordinate: https://runtimeconditions.io/conformance/recursive-reference:1.0.0#schema:recursive-tree + scope: + interfaceType: node + kind: tree + sourceName: node +- declarationCoordinate: kind:tree + modelRef: + coordinate: https://runtimeconditions.io/conformance/recursive-reference:1.0.0#schema:recursive-tree + jsonPointer: /properties/root + path: + - name: root + role: schema-field + schemaCoordinate: https://runtimeconditions.io/conformance/recursive-reference:1.0.0#schema:recursive-tree + scope: + interfaceType: node + kind: tree + sourceName: root diff --git a/tooling/extension-bindings/model/conformance/expected/07-object-alternatives/manifest-neutral.yaml b/tooling/extension-bindings/model/conformance/expected/07-object-alternatives/manifest-neutral.yaml new file mode 100644 index 0000000..dca2b2b --- /dev/null +++ b/tooling/extension-bindings/model/conformance/expected/07-object-alternatives/manifest-neutral.yaml @@ -0,0 +1,32 @@ +declarations: +- modelRef: + coordinate: kind:deployment + owner: https://runtimeconditions.io/conformance/object-alternatives:1.0.0 + sourceName: deployment +importedMarkerContracts: [] +rootBindings: +- declarationCoordinate: kind:deployment + fixedInterfaceType: process + modelRef: + coordinate: https://runtimeconditions.io/conformance/object-alternatives:1.0.0#schema:object-alternatives + jsonPointer: /properties/interface + path: + - name: interface + role: interface + schemaCoordinate: https://runtimeconditions.io/conformance/object-alternatives:1.0.0#schema:object-alternatives + scope: + interfaceType: process + kind: deployment + sourceName: process +- declarationCoordinate: kind:deployment + modelRef: + coordinate: https://runtimeconditions.io/conformance/object-alternatives:1.0.0#schema:object-alternatives + jsonPointer: /properties/configuration + path: + - name: configuration + role: schema-field + schemaCoordinate: https://runtimeconditions.io/conformance/object-alternatives:1.0.0#schema:object-alternatives + scope: + interfaceType: process + kind: deployment + sourceName: configuration diff --git a/tooling/extension-bindings/model/conformance/expected/08-heterogeneous-union/manifest-neutral.yaml b/tooling/extension-bindings/model/conformance/expected/08-heterogeneous-union/manifest-neutral.yaml new file mode 100644 index 0000000..0f8320c --- /dev/null +++ b/tooling/extension-bindings/model/conformance/expected/08-heterogeneous-union/manifest-neutral.yaml @@ -0,0 +1,32 @@ +declarations: +- modelRef: + coordinate: kind:selector + owner: https://runtimeconditions.io/conformance/heterogeneous-union:1.0.0 + sourceName: selector +importedMarkerContracts: [] +rootBindings: +- declarationCoordinate: kind:selector + fixedInterfaceType: target + modelRef: + coordinate: https://runtimeconditions.io/conformance/heterogeneous-union:1.0.0#schema:heterogeneous-target + jsonPointer: /properties/interface + path: + - name: interface + role: interface + schemaCoordinate: https://runtimeconditions.io/conformance/heterogeneous-union:1.0.0#schema:heterogeneous-target + scope: + interfaceType: target + kind: selector + sourceName: target +- declarationCoordinate: kind:selector + modelRef: + coordinate: https://runtimeconditions.io/conformance/heterogeneous-union:1.0.0#schema:heterogeneous-target + jsonPointer: /properties/target + path: + - name: target + role: schema-field + schemaCoordinate: https://runtimeconditions.io/conformance/heterogeneous-union:1.0.0#schema:heterogeneous-target + scope: + interfaceType: target + kind: selector + sourceName: target diff --git a/tooling/extension-bindings/model/conformance/expected/09-collections-and-maps/manifest-neutral.yaml b/tooling/extension-bindings/model/conformance/expected/09-collections-and-maps/manifest-neutral.yaml new file mode 100644 index 0000000..7ea6687 --- /dev/null +++ b/tooling/extension-bindings/model/conformance/expected/09-collections-and-maps/manifest-neutral.yaml @@ -0,0 +1,56 @@ +declarations: +- modelRef: + coordinate: kind:collection + owner: https://runtimeconditions.io/conformance/collections-and-maps:1.0.0 + sourceName: collection +importedMarkerContracts: [] +rootBindings: +- declarationCoordinate: kind:collection + fixedInterfaceType: items + modelRef: + coordinate: https://runtimeconditions.io/conformance/collections-and-maps:1.0.0#schema:collection-shapes + jsonPointer: /properties/interface + path: + - name: interface + role: interface + schemaCoordinate: https://runtimeconditions.io/conformance/collections-and-maps:1.0.0#schema:collection-shapes + scope: + interfaceType: items + kind: collection + sourceName: items +- declarationCoordinate: kind:collection + modelRef: + coordinate: https://runtimeconditions.io/conformance/collections-and-maps:1.0.0#schema:collection-shapes + jsonPointer: /properties/entries + path: + - name: entries + role: schema-field + schemaCoordinate: https://runtimeconditions.io/conformance/collections-and-maps:1.0.0#schema:collection-shapes + scope: + interfaceType: items + kind: collection + sourceName: entries +- declarationCoordinate: kind:collection + modelRef: + coordinate: https://runtimeconditions.io/conformance/collections-and-maps:1.0.0#schema:collection-shapes + jsonPointer: /properties/labels + path: + - name: labels + role: schema-field + schemaCoordinate: https://runtimeconditions.io/conformance/collections-and-maps:1.0.0#schema:collection-shapes + scope: + interfaceType: items + kind: collection + sourceName: labels +- declarationCoordinate: kind:collection + modelRef: + coordinate: https://runtimeconditions.io/conformance/collections-and-maps:1.0.0#schema:collection-shapes + jsonPointer: /properties/tags + path: + - name: tags + role: schema-field + schemaCoordinate: https://runtimeconditions.io/conformance/collections-and-maps:1.0.0#schema:collection-shapes + scope: + interfaceType: items + kind: collection + sourceName: tags diff --git a/tooling/extension-bindings/model/conformance/expected/10-scoped-domains-collisions/manifest-neutral.yaml b/tooling/extension-bindings/model/conformance/expected/10-scoped-domains-collisions/manifest-neutral.yaml new file mode 100644 index 0000000..ca774b3 --- /dev/null +++ b/tooling/extension-bindings/model/conformance/expected/10-scoped-domains-collisions/manifest-neutral.yaml @@ -0,0 +1,72 @@ +declarations: +- modelRef: + coordinate: kind:service + owner: https://runtimeconditions.io/conformance/scoped-domains-collisions:1.0.0 + sourceName: service +importedMarkerContracts: [] +rootBindings: +- declarationCoordinate: kind:service + fixedInterfaceType: grpc + modelRef: + coordinate: https://runtimeconditions.io/conformance/scoped-domains-collisions:1.0.0#schema:service-grpc + jsonPointer: /properties/interface + path: + - name: interface + role: interface + schemaCoordinate: https://runtimeconditions.io/conformance/scoped-domains-collisions:1.0.0#schema:service-grpc + scope: + interfaceType: grpc + kind: service + sourceName: grpc +- declarationCoordinate: kind:service + fixedInterfaceType: http + modelRef: + coordinate: https://runtimeconditions.io/conformance/scoped-domains-collisions:1.0.0#schema:service-http + jsonPointer: /properties/interface + path: + - name: interface + role: interface + schemaCoordinate: https://runtimeconditions.io/conformance/scoped-domains-collisions:1.0.0#schema:service-http + scope: + interfaceType: http + kind: service + sourceName: http +- declarationCoordinate: kind:service + modelRef: + coordinate: https://runtimeconditions.io/conformance/scoped-domains-collisions:1.0.0#schema:service-grpc + jsonPointer: /properties/mode + path: + - name: mode + role: condition-field + schemaCoordinate: https://runtimeconditions.io/conformance/scoped-domains-collisions:1.0.0#schema:service-grpc + scope: + interfaceType: grpc + kind: service + sourceName: mode + vocabularyCoordinate: condition-field:service:grpc:mode +- declarationCoordinate: kind:service + modelRef: + coordinate: https://runtimeconditions.io/conformance/scoped-domains-collisions:1.0.0#schema:service-http + jsonPointer: /properties/base_url + path: + - name: base_url + role: condition-field + schemaCoordinate: https://runtimeconditions.io/conformance/scoped-domains-collisions:1.0.0#schema:service-http + scope: + interfaceType: http + kind: service + sourceName: base_url + vocabularyCoordinate: condition-field:service:http:base_url +- declarationCoordinate: kind:service + modelRef: + coordinate: https://runtimeconditions.io/conformance/scoped-domains-collisions:1.0.0#schema:service-http + jsonPointer: /properties/mode + path: + - name: mode + role: condition-field + schemaCoordinate: https://runtimeconditions.io/conformance/scoped-domains-collisions:1.0.0#schema:service-http + scope: + interfaceType: http + kind: service + sourceName: mode + vocabularyCoordinate: condition-field:service:http:mode diff --git a/tooling/extension-bindings/model/conformance/expected/11-source-name-preservation/manifest-neutral.yaml b/tooling/extension-bindings/model/conformance/expected/11-source-name-preservation/manifest-neutral.yaml new file mode 100644 index 0000000..1f3d521 --- /dev/null +++ b/tooling/extension-bindings/model/conformance/expected/11-source-name-preservation/manifest-neutral.yaml @@ -0,0 +1,59 @@ +declarations: +- modelRef: + coordinate: kind:class + owner: https://runtimeconditions.io/conformance/source-name-preservation:1.0.0 + sourceName: class +importedMarkerContracts: [] +rootBindings: +- declarationCoordinate: kind:class + fixedInterfaceType: http_server2_url + modelRef: + coordinate: https://runtimeconditions.io/conformance/source-name-preservation:1.0.0#schema:source-names + jsonPointer: /properties/interface + path: + - name: interface + role: interface + schemaCoordinate: https://runtimeconditions.io/conformance/source-name-preservation:1.0.0#schema:source-names + scope: + interfaceType: http_server2_url + kind: class + sourceName: http_server2_url +- declarationCoordinate: kind:class + modelRef: + coordinate: https://runtimeconditions.io/conformance/source-name-preservation:1.0.0#schema:source-names + jsonPointer: /properties/api_url + path: + - name: api_url + role: condition-field + schemaCoordinate: https://runtimeconditions.io/conformance/source-name-preservation:1.0.0#schema:source-names + scope: + interfaceType: http_server2_url + kind: class + sourceName: api_url + vocabularyCoordinate: condition-field:class:http_server2_url:api_url +- declarationCoordinate: kind:class + modelRef: + coordinate: https://runtimeconditions.io/conformance/source-name-preservation:1.0.0#schema:source-names + jsonPointer: "/properties/caf\xE9" + path: + - name: "caf\xE9" + role: condition-field + schemaCoordinate: https://runtimeconditions.io/conformance/source-name-preservation:1.0.0#schema:source-names + scope: + interfaceType: http_server2_url + kind: class + sourceName: "caf\xE9" + vocabularyCoordinate: "condition-field:class:http_server2_url:caf\xE9" +- declarationCoordinate: kind:class + modelRef: + coordinate: https://runtimeconditions.io/conformance/source-name-preservation:1.0.0#schema:source-names + jsonPointer: /properties/patch9 + path: + - name: patch9 + role: condition-field + schemaCoordinate: https://runtimeconditions.io/conformance/source-name-preservation:1.0.0#schema:source-names + scope: + interfaceType: http_server2_url + kind: class + sourceName: patch9 + vocabularyCoordinate: condition-field:class:http_server2_url:patch9 diff --git a/tooling/extension-bindings/model/conformance/expected/13-dependency-schema-only/manifest-neutral.yaml b/tooling/extension-bindings/model/conformance/expected/13-dependency-schema-only/manifest-neutral.yaml new file mode 100644 index 0000000..d8d1175 --- /dev/null +++ b/tooling/extension-bindings/model/conformance/expected/13-dependency-schema-only/manifest-neutral.yaml @@ -0,0 +1,33 @@ +declarations: +- modelRef: + coordinate: kind:job + owner: https://runtimeconditions.io/conformance/dependency-schema-only-root:1.0.0 + sourceName: job +importedMarkerContracts: [] +rootBindings: +- declarationCoordinate: kind:job + fixedInterfaceType: process + modelRef: + coordinate: https://runtimeconditions.io/conformance/dependency-schema-only-root:1.0.0#schema:job-process + jsonPointer: /properties/interface + path: + - name: interface + role: interface + schemaCoordinate: https://runtimeconditions.io/conformance/dependency-schema-only-root:1.0.0#schema:job-process + scope: + interfaceType: process + kind: job + sourceName: process +- declarationCoordinate: kind:job + modelRef: + coordinate: https://runtimeconditions.io/conformance/dependency-schema-only-root:1.0.0#schema:job-process + jsonPointer: /properties/command + path: + - name: command + role: condition-field + schemaCoordinate: https://runtimeconditions.io/conformance/dependency-schema-only-root:1.0.0#schema:job-process + scope: + interfaceType: process + kind: job + sourceName: command + vocabularyCoordinate: condition-field:job:process:command diff --git a/tooling/extension-bindings/model/conformance/expected/14-scalar-definition-references/manifest-neutral.yaml b/tooling/extension-bindings/model/conformance/expected/14-scalar-definition-references/manifest-neutral.yaml new file mode 100644 index 0000000..58aebde --- /dev/null +++ b/tooling/extension-bindings/model/conformance/expected/14-scalar-definition-references/manifest-neutral.yaml @@ -0,0 +1,81 @@ +declarations: +- modelRef: + coordinate: kind:setting + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + sourceName: setting +importedMarkerContracts: [] +rootBindings: +- declarationCoordinate: kind:setting + fixedInterfaceType: file + modelRef: + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/interface + path: + - name: interface + role: interface + schemaCoordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + scope: + interfaceType: file + kind: setting + sourceName: file +- declarationCoordinate: kind:setting + modelRef: + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/alias + path: + - name: alias + role: schema-field + schemaCoordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + scope: + interfaceType: file + kind: setting + sourceName: alias +- declarationCoordinate: kind:setting + modelRef: + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/label + path: + - name: label + role: condition-field + schemaCoordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + scope: + interfaceType: file + kind: setting + sourceName: label + vocabularyCoordinate: condition-field:setting:file:label +- declarationCoordinate: kind:setting + modelRef: + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/mode + path: + - name: mode + role: schema-field + schemaCoordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + scope: + interfaceType: file + kind: setting + sourceName: mode +- declarationCoordinate: kind:setting + modelRef: + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/payload + path: + - name: payload + role: schema-field + schemaCoordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + scope: + interfaceType: file + kind: setting + sourceName: payload +- declarationCoordinate: kind:setting + modelRef: + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/tags + path: + - name: tags + role: schema-field + schemaCoordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + scope: + interfaceType: file + kind: setting + sourceName: tags diff --git a/tooling/extension-bindings/model/conformance/expected/14-scalar-definition-references/runtimeconditions.binding-model.yaml b/tooling/extension-bindings/model/conformance/expected/14-scalar-definition-references/runtimeconditions.binding-model.yaml new file mode 100644 index 0000000..7ab2c44 --- /dev/null +++ b/tooling/extension-bindings/model/conformance/expected/14-scalar-definition-references/runtimeconditions.binding-model.yaml @@ -0,0 +1,394 @@ +apiVersion: runtimeconditions.io/binding-model/v1alpha1 +kind: RuntimeConditionsBindingModel +metadata: + semanticSha256: f9d9f7e5999718ab1e22e1f94fcd2cee231f990953c4ad101edf6559185457c3 + normalizer: + name: rc-binding-model + version: 0.1.0 + sha256: dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd +coreProfileSchema: + id: https://runtimeconditions.io/schemas/profile/0.2.0/runtimeconditions.profile.schema.yaml + version: 0.2.0 + semanticSha256: a090a8016d045f9c3fa872a67f8df293b77ca2809a1bea5ae9fa31a27a06109a +rootExtension: + id: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + version: 1.0.0 + semanticSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 +extensions: + - id: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + version: 1.0.0 + semanticSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 +vocabulary: + owners: + - coordinate: condition-field:setting:file:label + category: condition-field + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + kind: setting + interfaceType: file + path: label + - coordinate: interface:setting:file + category: interface + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + kind: setting + interfaceType: file + - coordinate: kind:setting + category: kind + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + kind: setting + ownedDeclarations: + - coordinate: kind:setting + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + kind: setting + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: kind:setting + interfaces: + - coordinate: interface:setting:file + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + kind: setting + type: file + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: interface:setting:file + conditionFields: + - coordinate: condition-field:setting:file:label + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + kind: setting + interfaceType: file + path: label + segments: + - name: label + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: condition-field:setting:file:label +scopes: + - coordinate: setting:file + kind: setting + interfaceType: file + applicableSchemas: + - https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + projection: + kind: object + required: + - interface + - label + properties: + - name: alias + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/label + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/alias + - name: interface + required: true + shape: + kind: object + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/interface + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/interface + - name: label + required: true + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/label + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/label + - name: mode + shape: + kind: scalar + scalar: string + values: + - value: fast + - value: safe + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/mode + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/mode + - name: payload + shape: + kind: any + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/payload + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/payload + - name: tags + shape: + kind: array + items: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/label + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/tags + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/tags + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file +schemas: + - coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + id: setting-file + kind: setting + interfaceType: file + exact: + $defs: + alias: + $ref: '#/$defs/label' + label: + type: string + mode: + enum: + - fast + - safe + type: string + payload: {} + additionalProperties: false + properties: + alias: + $ref: '#/$defs/alias' + interface: + additionalProperties: false + properties: + type: + const: file + required: + - type + type: object + kind: + const: setting + label: + $ref: '#/$defs/label' + mode: + $ref: '#/$defs/mode' + payload: + $ref: '#/$defs/payload' + tags: + items: + $ref: '#/$defs/alias' + type: array + required: + - interface + - kind + - label + type: object + projection: + kind: object + required: + - interface + - label + properties: + - name: alias + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/label + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/alias + - name: interface + required: true + shape: + kind: object + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/interface + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/interface + - name: label + required: true + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/label + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/label + - name: mode + shape: + kind: scalar + scalar: string + values: + - value: fast + - value: safe + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/mode + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/mode + - name: payload + shape: + kind: any + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/payload + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/payload + - name: tags + shape: + kind: array + items: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/label + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/tags + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /properties/tags + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + definitions: + - name: alias + jsonPointer: /$defs/alias + shape: + kind: ref + ref: '#/$defs/label' + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/alias + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/alias + - name: label + jsonPointer: /$defs/label + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/label + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/label + - name: mode + jsonPointer: /$defs/mode + shape: + kind: scalar + scalar: string + values: + - value: fast + - value: safe + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/mode + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/mode + - name: payload + jsonPointer: /$defs/payload + shape: + kind: any + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/payload + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file + jsonPointer: /$defs/payload + provenance: + owner: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0 + extensionSha256: a12a21ea51036bcabef09c40b566261addae2d1b6f70b82dd801fc16977577b2 + coordinate: https://runtimeconditions.io/conformance/scalar-definition-references:1.0.0#schema:setting-file diff --git a/tooling/extension-bindings/model/conformance/expected/15-keyword-property-names/manifest-neutral.yaml b/tooling/extension-bindings/model/conformance/expected/15-keyword-property-names/manifest-neutral.yaml new file mode 100644 index 0000000..125a449 --- /dev/null +++ b/tooling/extension-bindings/model/conformance/expected/15-keyword-property-names/manifest-neutral.yaml @@ -0,0 +1,32 @@ +declarations: +- modelRef: + coordinate: kind:runner + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + sourceName: runner +importedMarkerContracts: [] +rootBindings: +- declarationCoordinate: kind:runner + fixedInterfaceType: process + modelRef: + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/interface + path: + - name: interface + role: interface + schemaCoordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + scope: + interfaceType: process + kind: runner + sourceName: process +- declarationCoordinate: kind:runner + modelRef: + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options + path: + - name: options + role: schema-field + schemaCoordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + scope: + interfaceType: process + kind: runner + sourceName: options diff --git a/tooling/extension-bindings/model/conformance/expected/15-keyword-property-names/runtimeconditions.binding-model.yaml b/tooling/extension-bindings/model/conformance/expected/15-keyword-property-names/runtimeconditions.binding-model.yaml new file mode 100644 index 0000000..5d10f3d --- /dev/null +++ b/tooling/extension-bindings/model/conformance/expected/15-keyword-property-names/runtimeconditions.binding-model.yaml @@ -0,0 +1,459 @@ +apiVersion: runtimeconditions.io/binding-model/v1alpha1 +kind: RuntimeConditionsBindingModel +metadata: + semanticSha256: 6989623a7891c78af3e183a3957358f5177913fad291d8fbe0617b2fe89ba898 + normalizer: + name: rc-binding-model + version: 0.1.0 + sha256: dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd +coreProfileSchema: + id: https://runtimeconditions.io/schemas/profile/0.2.0/runtimeconditions.profile.schema.yaml + version: 0.2.0 + semanticSha256: a090a8016d045f9c3fa872a67f8df293b77ca2809a1bea5ae9fa31a27a06109a +rootExtension: + id: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + version: 1.0.0 + semanticSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad +extensions: + - id: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + version: 1.0.0 + semanticSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad +vocabulary: + owners: + - coordinate: interface:runner:process + category: interface + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + kind: runner + interfaceType: process + - coordinate: kind:runner + category: kind + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + kind: runner + ownedDeclarations: + - coordinate: kind:runner + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + kind: runner + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: kind:runner + interfaces: + - coordinate: interface:runner:process + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + kind: runner + type: process + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: interface:runner:process +scopes: + - coordinate: runner:process + kind: runner + interfaceType: process + applicableSchemas: + - https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + projection: + kind: object + required: + - interface + properties: + - name: interface + required: true + shape: + kind: object + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/interface + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/interface + - name: options + shape: + kind: object + properties: + - name: async + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/async + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/async + - name: class + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/class + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/class + - name: default + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/default + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/default + - name: fn + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/fn + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/fn + - name: import + shape: + kind: scalar + scalar: integer + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/import + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/import + - name: match + shape: + kind: scalar + scalar: boolean + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/match + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/match + - name: new + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/new + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/new + - name: return + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/return + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/return + - name: self + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/self + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/self + - name: type + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/type + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/type + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process +schemas: + - coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + id: runner-process + kind: runner + interfaceType: process + exact: + additionalProperties: false + properties: + interface: + additionalProperties: false + properties: + type: + const: process + required: + - type + type: object + kind: + const: runner + options: + additionalProperties: false + properties: + async: + type: string + class: + type: string + default: + type: string + fn: + type: string + import: + type: integer + match: + type: boolean + new: + type: string + return: + type: string + self: + type: string + type: + type: string + type: object + required: + - interface + - kind + type: object + projection: + kind: object + required: + - interface + properties: + - name: interface + required: true + shape: + kind: object + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/interface + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/interface + - name: options + shape: + kind: object + properties: + - name: async + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/async + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/async + - name: class + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/class + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/class + - name: default + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/default + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/default + - name: fn + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/fn + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/fn + - name: import + shape: + kind: scalar + scalar: integer + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/import + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/import + - name: match + shape: + kind: scalar + scalar: boolean + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/match + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/match + - name: new + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/new + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/new + - name: return + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/return + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/return + - name: self + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/self + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/self + - name: type + shape: + kind: scalar + scalar: string + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/type + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options/properties/type + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + jsonPointer: /properties/options + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process + provenance: + owner: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0 + extensionSha256: a88df1387aa8a264b163b4d45b5c6f26f568bda700dac0d66583c6834b2242ad + coordinate: https://runtimeconditions.io/conformance/keyword-property-names:1.0.0#schema:runner-process diff --git a/tooling/extension-bindings/normalizer/conformance_test.go b/tooling/extension-bindings/normalizer/conformance_test.go index 4c54c07..f2b4b85 100644 --- a/tooling/extension-bindings/normalizer/conformance_test.go +++ b/tooling/extension-bindings/normalizer/conformance_test.go @@ -27,6 +27,8 @@ var conformanceCases = []string{ "11-source-name-preservation", "12-unsupported-structural-keyword", "13-dependency-schema-only", + "14-scalar-definition-references", + "15-keyword-property-names", } var negativeConformanceCases = map[string]bool{ From 179990a17c32a388f00548471393be9a30825837 Mon Sep 17 00:00:00 2001 From: Akanksha Trehun Date: Sat, 24 Oct 2026 09:33:06 +0530 Subject: [PATCH 2/2] Run the conformance job where Python 3.12.10 is available --- .github/workflows/extension-binding-normalizer.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/extension-binding-normalizer.yml b/.github/workflows/extension-binding-normalizer.yml index 3b31556..13b0fce 100644 --- a/.github/workflows/extension-binding-normalizer.yml +++ b/.github/workflows/extension-binding-normalizer.yml @@ -118,7 +118,7 @@ jobs: verify-emitter-conformance: name: Verify emitters agree on the shared fixtures - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 15 steps: