Skip to content

Commit 5edbd59

Browse files
committed
Mirror the example URL consolidation.
Re-mirror the specification and changelog after template URLs in the canonical repo moved from templates.example.com to example.com/templates/.
1 parent 531256c commit 5edbd59

2 files changed

Lines changed: 30 additions & 29 deletions

File tree

docs/changelog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
1414

1515
### Changed
1616

17+
- 2026-07-21 — All example template URLs consolidated onto a single host: `https://example.com/templates/...` replaces the `templates.example.com` subdomain throughout the specification and examples. Template URLs are identifiers first; a dedicated template host in every example suggested a deployment choice (a separate template server) that the protocol does not make.
1718
- 2026-07-21 — JSON Schemas upgraded from draft-07 to the [JSON Schema 2020-12](https://json-schema.org/specification-links#2020-12) dialect (`$schema` is now `https://json-schema.org/draft/2020-12/schema`). The schemas already used the post-draft-07 `$defs` keyword, so the declared dialect now matches the keywords in use; no other schema changes were needed. CI and local validation pass `--spec=draft2020` to ajv. The archived RVST schemas remain draft-07.
1819
- 2026-07-20 — Optional template metadata on view descriptors (new Section 3.6): an advisory `type` member (media type hint for the template resource) and an `integrity` member (W3C Subresource Integrity); an integrity mismatch is treated as a template fetch failure.
1920
- 2026-07-20 — Descriptor references (new Section 3.7): a slot value may be `{"descriptor": <url>}` pointing at a standalone view descriptor resource, enabling shared, independently cacheable subtrees; resolution, cycle, and failure rules added to Sections 8–10, and the schema gained `SlotDescriptor`/`DescriptorReference` definitions.

docs/specification.md

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,13 @@ When a template has named insertion points that should be filled dynamically, th
5151

5252
```json
5353
{
54-
"template": "https://templates.example.com/layouts/sidebar",
54+
"template": "https://example.com/templates/layouts/sidebar",
5555
"slots": {
5656
"mainContent": {
57-
"template": "https://templates.example.com/components/data-display/card"
57+
"template": "https://example.com/templates/components/data-display/card"
5858
},
5959
"sidebarNav": {
60-
"template": "https://templates.example.com/components/navigation/nav"
60+
"template": "https://example.com/templates/components/navigation/nav"
6161
}
6262
}
6363
}
@@ -71,29 +71,29 @@ Since each slot value is itself a view descriptor, composition nests to arbitrar
7171

7272
```json
7373
{
74-
"template": "https://templates.example.com/layouts/sidebar",
74+
"template": "https://example.com/templates/layouts/sidebar",
7575
"slots": {
7676
"mainContent": {
77-
"template": "https://templates.example.com/demos/dashboard",
77+
"template": "https://example.com/templates/demos/dashboard",
7878
"slots": {
7979
"statsRow": {
80-
"template": "https://templates.example.com/components/data-display/card"
80+
"template": "https://example.com/templates/components/data-display/card"
8181
},
8282
"activityTable": {
83-
"template": "https://templates.example.com/components/data-display/table"
83+
"template": "https://example.com/templates/components/data-display/table"
8484
},
8585
"chart": {
86-
"template": "https://templates.example.com/components/charts/chart",
86+
"template": "https://example.com/templates/components/charts/chart",
8787
"slots": {
8888
"legend": {
89-
"template": "https://templates.example.com/components/charts/chart-legend"
89+
"template": "https://example.com/templates/components/charts/chart-legend"
9090
}
9191
}
9292
}
9393
}
9494
},
9595
"sidebarNav": {
96-
"template": "https://templates.example.com/components/navigation/nav"
96+
"template": "https://example.com/templates/components/navigation/nav"
9797
}
9898
}
9999
}
@@ -134,21 +134,21 @@ A single slot can accept multiple templates, rendered in sequence within the ins
134134

135135
```json
136136
{
137-
"template": "https://templates.example.com/layouts/sidebar",
137+
"template": "https://example.com/templates/layouts/sidebar",
138138
"slots": {
139139
"mainContent": [
140140
{
141-
"template": "https://templates.example.com/components/data-display/card"
141+
"template": "https://example.com/templates/components/data-display/card"
142142
},
143143
{
144-
"template": "https://templates.example.com/components/charts/chart"
144+
"template": "https://example.com/templates/components/charts/chart"
145145
},
146146
{
147-
"template": "https://templates.example.com/components/data-display/table"
147+
"template": "https://example.com/templates/components/data-display/table"
148148
}
149149
],
150150
"sidebarNav": {
151-
"template": "https://templates.example.com/components/navigation/nav"
151+
"template": "https://example.com/templates/components/navigation/nav"
152152
}
153153
}
154154
}
@@ -162,7 +162,7 @@ A view descriptor MAY carry two advisory members alongside `template`:
162162

163163
```json
164164
{
165-
"template": "https://templates.example.com/components/data-display/card",
165+
"template": "https://example.com/templates/components/data-display/card",
166166
"type": "text/x-qute",
167167
"integrity": "sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
168168
}
@@ -179,13 +179,13 @@ A slot value MAY be a **descriptor reference** — an object whose single member
179179

180180
```json
181181
{
182-
"template": "https://templates.example.com/layouts/sidebar",
182+
"template": "https://example.com/templates/layouts/sidebar",
183183
"slots": {
184184
"sidebarNav": {
185185
"descriptor": "https://example.com/views/standard-nav.json"
186186
},
187187
"mainContent": {
188-
"template": "https://templates.example.com/demos/dashboard"
188+
"template": "https://example.com/templates/demos/dashboard"
189189
}
190190
}
191191
}
@@ -264,10 +264,10 @@ When the data format is flexible (e.g., HAL+JSON, custom APIs), embed the view d
264264
"self": { "href": "/api/dashboard" }
265265
},
266266
"_view": {
267-
"template": "https://templates.example.com/demos/dashboard",
267+
"template": "https://example.com/templates/demos/dashboard",
268268
"slots": {
269269
"statsRow": {
270-
"template": "https://templates.example.com/components/data-display/card"
270+
"template": "https://example.com/templates/components/data-display/card"
271271
}
272272
}
273273
},
@@ -447,7 +447,7 @@ Not every insertion point in a template needs to appear in the view descriptor.
447447
```http
448448
HTTP/1.1 200 OK
449449
Content-Type: application/json
450-
View-Template: https://templates.example.com/components/forms/form
450+
View-Template: https://example.com/templates/components/forms/form
451451
452452
{
453453
"csrfToken": "abc123",
@@ -483,22 +483,22 @@ Link: <https://example.com/views/dashboard.json>; rel="view-descriptor"
483483

484484
```json
485485
{
486-
"template": "https://templates.example.com/layouts/sidebar",
486+
"template": "https://example.com/templates/layouts/sidebar",
487487
"slots": {
488488
"sidebarNav": {
489-
"template": "https://templates.example.com/components/navigation/nav"
489+
"template": "https://example.com/templates/components/navigation/nav"
490490
},
491491
"mainContent": {
492-
"template": "https://templates.example.com/demos/dashboard",
492+
"template": "https://example.com/templates/demos/dashboard",
493493
"slots": {
494494
"statsCards": {
495-
"template": "https://templates.example.com/components/data-display/card"
495+
"template": "https://example.com/templates/components/data-display/card"
496496
},
497497
"activityTable": {
498-
"template": "https://templates.example.com/components/data-display/table"
498+
"template": "https://example.com/templates/components/data-display/table"
499499
},
500500
"revenueChart": {
501-
"template": "https://templates.example.com/components/charts/chart"
501+
"template": "https://example.com/templates/components/charts/chart"
502502
}
503503
}
504504
}
@@ -745,7 +745,7 @@ Content-Type: application/vdp-discovery+json
745745
}
746746
},
747747
"trustedTemplateUrls": [
748-
"https://templates.example.com/"
748+
"https://example.com/templates/"
749749
]
750750
}
751751
```
@@ -762,7 +762,7 @@ Each entry in `endpoints` maps an API path to the URL of its view descriptor res
762762

763763
The `endpoints` member is intentionally aligned in spirit with [RFC 9264](https://www.rfc-editor.org/rfc/rfc9264) (Linkset): each entry expresses a `view-descriptor` link (Section 12.1) whose context is the API path and whose target is the descriptor URL. Linkset itself is not used because it defines no document-level members for metadata such as `version` and `trustedTemplateUrls`. A future version of this specification may additionally offer the same links as `application/linkset+json`.
764764

765-
The `trustedTemplateUrls` field provides the template URL allowlist referenced in Section 10. Each entry is a URL prefix: a template URL is trusted if and only if, after RFC 3986 normalization, it begins with one of the listed entries. Entries SHOULD end with a trailing slash so that `https://templates.example.com/` cannot accidentally match `https://templates.example.com.evil.host/`.
765+
The `trustedTemplateUrls` field provides the template URL allowlist referenced in Section 10. Each entry is a URL prefix: a template URL is trusted if and only if, after RFC 3986 normalization, it begins with one of the listed entries. Entries SHOULD end with a trailing slash so that `https://example.com/templates/` cannot accidentally match `https://example.com/templates-evil/`, and a host-only entry like `https://example.com/` cannot accidentally match `https://example.com.evil.host/`.
766766

767767
**Extensibility:** Clients MUST ignore members of the discovery document — including members of `endpoints` entries — that they do not recognize. Future versions of this specification may define additional members.
768768

0 commit comments

Comments
 (0)