PropShape strips only `id`, not `$id`, so `$ref`-based components (e.g. image) are not generated for JSON Schema Draft-07 (with `justinrainbow/json-schema` 6.9.0)
### Overview Canvas normalizes resolved prop schemas so that structurally-equivalent shapes match and can be stored. When a prop references a shared schema via `$ref`, the resolver annotates the resolved schema with the resolved-`$ref` URI under an `id` keyword, which Canvas then strips so the URI does not leak into the prop shape. That was correct with JSON Schema dialect Draft-04. But in #3591028 we changed to Draft-07. Just because of a bug upstream (https://github.com/jsonrainbow/json-schema/issues/911) in `jsonrainbow/json-schema`, that continued to work. With that fix released as 6.9.0, the resolved id now lands under `$id`, so we must strip `$id` to keep the prop shape canonical and storable, so the affected Component can be generated. But as `drupal/core-recommended` is pinned to `~6.8.2`, we need to ensure we still strip the `id` keyword too until core adopts `^6.9.0`. The most visible casualty is the image prop shape: `sdc.canvas_test_sdc.image` is never created, and any configuration depending on it cannot be installed. In CI this surfaces as widespread `UnmetDependenciesException` failures across functional tests (e.g. `field.field.node.article.field_canvas_test` has an unmet dependency on `canvas.component.sdc.canvas_test_sdc.image`). ### Steps to reproduce 1. On a project where `justinrainbow/json-schema` resolves to `6.9.0`, install Canvas with `canvas_test_sdc`. 2. Run `tests/src/Functional/TranslationTest.php` (or any functional test that installs `canvas_test_config_node_article`). 3. Observe `UnmetDependenciesException` — the `sdc.canvas_test_sdc.image` Component was never generated. ### Proposed resolution Make prop-shape normalization dialect-robust: strip the injected resolved-`$ref` id regardless of which keyword carries it (`id` or `$id`), so the resolved URI never leaks into the prop shape. This removes the dependence on a specific json-schema library version, and keeps the existing `^6.8.0` constraint (works on both 6.8.x and 6.9.0) rather than requiring `^6.9.0`, which would conflict with `drupal/core-recommended`'s `~6.8.2` pin. ### Remaining tasks - Strip the dialect-aware injected id keyword (`id` and `$id`) during prop-shape normalization. - Confirm the image prop shape is storable and the affected Component is generated on json-schema 6.9.0. ### User interface changes None in this issue. ### API changes None. ### Data model changes None. ### Release notes snippet Fixed Canvas failing to generate image (and other `$ref`-based) components when the resolved schema annotates its id under `$id`, which prevented affected components from being created.
issue