@adobe/design-data-spec 1.4.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/conformance/invalid/SPEC-009/expected-errors.json +1 -1
  2. package/conformance/invalid/SPEC-018/dataset.json +8 -1
  3. package/conformance/invalid/SPEC-034/expected-errors.json +1 -1
  4. package/conformance/invalid/SPEC-035/expected-errors.json +1 -1
  5. package/package.json +5 -6
  6. package/rules/rules.yaml +14 -10
  7. package/schemas/component.schema.json +1 -1
  8. package/schemas/manifest.schema.json +1 -22
  9. package/schemas/platform-extension.json +79 -0
  10. package/schemas/registry-value.json +230 -0
  11. package/schemas/token.schema.json +1 -1
  12. package/spec/agent-surface.md +16 -14
  13. package/spec/anatomy-format.md +1 -1
  14. package/spec/cascade.md +1 -1
  15. package/spec/index.md +5 -5
  16. package/spec/mode-sets.md +1 -1
  17. package/spec/registry.md +6 -8
  18. package/spec/taxonomy.md +96 -30
  19. package/spec/token-format.md +11 -3
  20. package/components/accordion.json +0 -557
  21. package/components/action-bar.json +0 -214
  22. package/components/action-button.json +0 -522
  23. package/components/action-group.json +0 -134
  24. package/components/alert-banner.json +0 -134
  25. package/components/alert-dialog.json +0 -180
  26. package/components/avatar-group.json +0 -166
  27. package/components/avatar.json +0 -246
  28. package/components/badge.json +0 -594
  29. package/components/body.json +0 -54
  30. package/components/bottom-navigation-android.json +0 -72
  31. package/components/breadcrumbs.json +0 -307
  32. package/components/button-group.json +0 -86
  33. package/components/button.json +0 -586
  34. package/components/calendar.json +0 -133
  35. package/components/cards.json +0 -541
  36. package/components/checkbox-group.json +0 -91
  37. package/components/checkbox.json +0 -339
  38. package/components/close-button.json +0 -208
  39. package/components/coach-indicator.json +0 -105
  40. package/components/coach-mark.json +0 -169
  41. package/components/code.json +0 -44
  42. package/components/color-area.json +0 -138
  43. package/components/color-handle.json +0 -111
  44. package/components/color-loupe.json +0 -77
  45. package/components/color-slider.json +0 -165
  46. package/components/color-wheel.json +0 -117
  47. package/components/combo-box.json +0 -543
  48. package/components/contextual-help.json +0 -230
  49. package/components/date-picker.json +0 -471
  50. package/components/detail.json +0 -53
  51. package/components/divider.json +0 -93
  52. package/components/drop-zone.json +0 -238
  53. package/components/field-label.json +0 -219
  54. package/components/heading.json +0 -68
  55. package/components/help-text.json +0 -209
  56. package/components/illustrated-message.json +0 -175
  57. package/components/in-field-progress-button.json +0 -88
  58. package/components/in-field-progress-circle.json +0 -116
  59. package/components/in-line-alert.json +0 -233
  60. package/components/link.json +0 -167
  61. package/components/list-view.json +0 -382
  62. package/components/menu.json +0 -597
  63. package/components/meter.json +0 -199
  64. package/components/number-field.json +0 -518
  65. package/components/opacity-checkerboard.json +0 -69
  66. package/components/picker.json +0 -579
  67. package/components/popover.json +0 -174
  68. package/components/progress-bar.json +0 -229
  69. package/components/progress-circle.json +0 -132
  70. package/components/radio-button.json +0 -308
  71. package/components/radio-group.json +0 -113
  72. package/components/rating.json +0 -168
  73. package/components/scroll-zoom-bar.json +0 -82
  74. package/components/search-field.json +0 -346
  75. package/components/segmented-control.json +0 -248
  76. package/components/select-box.json +0 -272
  77. package/components/side-navigation.json +0 -320
  78. package/components/slider.json +0 -407
  79. package/components/standard-dialog.json +0 -179
  80. package/components/standard-panel.json +0 -83
  81. package/components/status-light.json +0 -334
  82. package/components/steplist.json +0 -294
  83. package/components/swatch-group.json +0 -114
  84. package/components/swatch.json +0 -240
  85. package/components/switch.json +0 -336
  86. package/components/tab-bar-ios.json +0 -72
  87. package/components/table.json +0 -435
  88. package/components/tabs.json +0 -253
  89. package/components/tag-field.json +0 -243
  90. package/components/tag-group.json +0 -87
  91. package/components/tag.json +0 -393
  92. package/components/takeover-dialog.json +0 -117
  93. package/components/text-area.json +0 -555
  94. package/components/text-field.json +0 -555
  95. package/components/thumbnail.json +0 -149
  96. package/components/title.json +0 -91
  97. package/components/toast.json +0 -156
  98. package/components/tooltip.json +0 -179
  99. package/components/tray.json +0 -32
  100. package/components/tree-view.json +0 -393
  101. package/fields/anatomy.json +0 -15
  102. package/fields/color-scheme.json +0 -15
  103. package/fields/colorFamily.json +0 -15
  104. package/fields/component.json +0 -15
  105. package/fields/contrast.json +0 -15
  106. package/fields/density.json +0 -15
  107. package/fields/easing.json +0 -15
  108. package/fields/family.json +0 -15
  109. package/fields/motionRole.json +0 -15
  110. package/fields/object.json +0 -15
  111. package/fields/orientation.json +0 -15
  112. package/fields/position.json +0 -15
  113. package/fields/property.json +0 -15
  114. package/fields/scale.json +0 -15
  115. package/fields/scaleIndex.json +0 -15
  116. package/fields/shape.json +0 -15
  117. package/fields/size.json +0 -15
  118. package/fields/state.json +0 -15
  119. package/fields/structure.json +0 -15
  120. package/fields/style.json +0 -15
  121. package/fields/substructure.json +0 -15
  122. package/fields/variant.json +0 -15
  123. package/fields/weight.json +0 -15
package/spec/registry.md CHANGED
@@ -6,15 +6,13 @@ This document defines the **design system registry**: the set of named value col
6
6
 
7
7
  ## What a registry is
8
8
 
9
- A **registry** is a JSON file in `@adobe/design-system-registry` that declares an ordered list of named values. Each value has at minimum an `id` (the canonical string used in token names and component files) and a `label` (a human-readable display name). Values **MAY** carry additional fields such as `description`, `aliases`, `deprecated`, and `usedIn`.
9
+ A **registry** is a JSON file in `@adobe/spectrum-design-data` (under `registry/`) that declares an ordered list of named values. Each value has at minimum an `id` (the canonical string used in token names and component files) and a `label` (a human-readable display name). Values **MAY** carry additional fields such as `description`, `aliases`, `deprecated`, and `usedIn`.
10
10
 
11
11
  Registries are the authoritative source of truth for vocabulary validation. A validator SHOULD flag token field values that are not present in the corresponding registry (typically as a warning, not an error — see field declarations in the field catalog).
12
12
 
13
13
  ## Packaging strategy
14
14
 
15
- All registries ship as a **single package**: `@adobe/design-system-registry`. The three semantically distinct registries described below are separate JSON files within that package. Independent sub-package splits are explicitly deferred.
16
-
17
- **Rationale:** No external consumers currently require independent semver versioning of individual registries. A single package is cheaper to maintain, simpler to consume, and avoids the proliferation of tiny packages with coordinated versioning overhead. If independent versioning needs emerge in a future release, the split can be done with a standard deprecation window per [Evolution](evolution.md).
15
+ All registries ship within **`@adobe/spectrum-design-data`** under the `registry/` directory. The three semantically distinct registries described below are separate JSON files in that directory.
18
16
 
19
17
  ## Registries
20
18
 
@@ -32,7 +30,7 @@ Anatomy terms fall into three tiers:
32
30
  | Composite | Another component used as a named part | `checkbox`, `close-button`, `popover`, `avatar` |
33
31
  | Component-specific | Unique to one component | `loupe`, `gripper`, `hold-icon` |
34
32
 
35
- **File:** `packages/design-system-registry/registry/anatomy-terms.json`\
33
+ **File:** `packages/design-data/registry/anatomy-terms.json`\
36
34
  **Validated by:** SPEC-020, SPEC-023, SPEC-024, SPEC-025, SPEC-035 (advisory — anatomy part `name` values SHOULD match the anatomy-terms registry)\
37
35
  **See also:** [Taxonomy — Component anatomy vs. token objects](taxonomy.md#component-anatomy-vs-token-objects), [Anatomy format](anatomy-format.md)
38
36
 
@@ -50,7 +48,7 @@ Validates the `object` field on token name objects.
50
48
  | `visual` | Visible graphic element area (may be inset from edge) |
51
49
  | `content` | Main content area |
52
50
 
53
- **File:** `packages/design-system-registry/registry/token-objects.json`\
51
+ **File:** `packages/design-data/registry/token-objects.json`\
54
52
  **Validated by:** SPEC-009 (advisory — `name.object` field values SHOULD match the token-objects registry)\
55
53
  **See also:** [Taxonomy — Token objects (styling surfaces)](taxonomy.md#token-objects-styling-surfaces)
56
54
 
@@ -60,7 +58,7 @@ Validates the `category` field on component declarations.
60
58
 
61
59
  **What it contains:** Top-level categories for organizing components by purpose and interaction type. Used for documentation navigation and tooling filters.
62
60
 
63
- **File:** `packages/design-system-registry/registry/categories.json`\
61
+ **File:** `packages/design-data/registry/categories.json`\
64
62
  **Validated by:** SPEC-034 (advisory — `meta.category` field values SHOULD match the categories registry)\
65
63
  **See also:** [Component format](component-format.md)
66
64
 
@@ -72,7 +70,7 @@ Registry IDs are scoped to their registry. The same ID **MAY** appear in multipl
72
70
 
73
71
  ## Other registries in the package
74
72
 
75
- The following registries exist in `@adobe/design-system-registry` but are not part of the three-registry boundary defined above. They validate other token name fields and component metadata fields:
73
+ The following registries exist in `@adobe/spectrum-design-data` (under `registry/`) but are not part of the three-registry boundary defined above. They validate other token name fields and component metadata fields:
76
74
 
77
75
  | Registry | File | Validates |
78
76
  | ----------------- | ------------------------ | ------------------------------------ |
package/spec/taxonomy.md CHANGED
@@ -60,19 +60,19 @@ The following concept categories are defined in Spectrum's foundation field cata
60
60
 
61
61
  **NORMATIVE:** Each category listed below corresponds to a field on the token [name object](token-format.md). Tokens **MAY** use any subset of these fields. Exception: `property` is REQUIRED on every name object — see [token-format.md](token-format.md#name-object).
62
62
 
63
- | Category | Name object field | Answers | Description |
64
- | ------------- | ----------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
65
- | Structure | `structure` | What? | Individual objects or object categories that have shared styling. Distinctly different from "components" in that they represent structures and visual patterns that can or do occur across many varieties of components. |
66
- | Sub-structure | `substructure` | What? | A structure within an element that should only exist within the context of its parent structure. |
67
- | Component | `component` | What? | Component scope when the token is component-scoped. |
68
- | Anatomy | `anatomy` | What? | A visible, named part of a component as defined by designers. |
69
- | Object | `object` | Where? | The styling surface to which a visual property is applied (e.g. background, border, edge). |
70
- | Property | `property` | Where? | The CSS/styling attribute or design-system abstraction being defined (e.g. color, width, padding, gap). REQUIRED — see exception in preamble. Values SHOULD come from [`property-terms.json`](../../packages/design-system-registry/registry/property-terms.json). Anatomy parts and styling surfaces do NOT belong here — they belong in `anatomy` and `object` respectively. See [token-format.md — Name-object migration policy](token-format.md#name-object-migration-policy) for migration guidance. |
71
- | Orientation | `orientation` | When/Why? | The direction or order of structures and elements within a component or pattern. |
72
- | Position | `position` | When/Why? | The location of an object relative to another, with or without respect to directional order. |
73
- | Size | `size` | When/Why? | Relative terms used to create relationships and patterns of usage across multiple tokens and token types. |
74
- | Density | `density` | When/Why? | Options that create more or less space within or around the parts of a component. |
75
- | Shape | `shape` | When/Why? | Relative to the overall shape of a component (e.g. "uniform" creates a 1:1 padding ratio between horizontal and vertical padding). |
63
+ | Category | Name object field | Answers | Description |
64
+ | ------------- | ----------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
65
+ | Structure | `structure` | What? | Individual objects or object categories that have shared styling. Distinctly different from "components" in that they represent structures and visual patterns that can or do occur across many varieties of components. |
66
+ | Sub-structure | `substructure` | What? | A structure within an element that should only exist within the context of its parent structure. |
67
+ | Component | `component` | What? | Component scope when the token is component-scoped. |
68
+ | Anatomy | `anatomy` | What? | A visible, named part of a component as defined by designers. |
69
+ | Object | `object` | Where? | The styling surface to which a visual property is applied (e.g. background, border, edge). |
70
+ | Property | `property` | Where? | The CSS/styling attribute or design-system abstraction being defined (e.g. color, width, padding, gap). REQUIRED — see exception in preamble. Values SHOULD come from [`property-terms.json`](../../packages/design-data/registry/property-terms.json). Anatomy parts and styling surfaces do NOT belong here — they belong in `anatomy` and `object` respectively. See [token-format.md — Name-object migration policy](token-format.md#name-object-migration-policy) for migration guidance. |
71
+ | Orientation | `orientation` | When/Why? | The direction or order of structures and elements within a component or pattern. |
72
+ | Position | `position` | When/Why? | The location of an object relative to another, with or without respect to directional order. |
73
+ | Size | `size` | When/Why? | Relative terms used to create relationships and patterns of usage across multiple tokens and token types. |
74
+ | Density | `density` | When/Why? | Options that create more or less space within or around the parts of a component. |
75
+ | Shape | `shape` | When/Why? | Relative to the overall shape of a component (e.g. "uniform" creates a 1:1 padding ratio between horizontal and vertical padding). |
76
76
 
77
77
  Additional categories for variant and state are inherited from the existing name object:
78
78
 
@@ -87,10 +87,10 @@ Color tokens describe palette entries and semantic color assignments. Their name
87
87
 
88
88
  **NORMATIVE:** Color tokens SHOULD include `colorFamily`, `scaleIndex`, or both to allow tooling to group and sort palette entries. Tokens missing both are flagged by rule SPEC-043 (`domain-required-fields`, warning).
89
89
 
90
- | Category | Name object field | Answers | Description |
91
- | ------------ | ----------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
92
- | Color Family | `colorFamily` | What? | Hue family of the color (e.g. `blue`, `gray`, `celery`, `transparent-black`). Values come from [`color-families.json`](../../packages/design-system-registry/registry/color-families.json). |
93
- | Ramp Index | `scaleIndex` | Which? | Numeric perceptual ramp step (e.g. `100`, `400`, `900`, `1600`). Shared with layout tokens; see [scaleIndex field declaration](../fields/scaleIndex.json). Not scope-restricted. |
90
+ | Category | Name object field | Answers | Description |
91
+ | ------------ | ----------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
92
+ | Color Family | `colorFamily` | What? | Hue family of the color (e.g. `blue`, `gray`, `celery`, `transparent-black`). Values come from [`color-families.json`](../../packages/design-data/registry/color-families.json). |
93
+ | Ramp Index | `scaleIndex` | Which? | Numeric perceptual ramp step (e.g. `100`, `400`, `900`, `1600`). Shared with layout tokens; see [scaleIndex field declaration](../fields/scaleIndex.json). Not scope-restricted. |
94
94
 
95
95
  **Default serialization order for color tokens:**
96
96
 
@@ -106,12 +106,13 @@ Typography tokens describe typeface attributes: family, weight, style, and numer
106
106
 
107
107
  **NORMATIVE:** Typography tokens SHOULD include at least one of `family`, `weight`, or `style`. Tokens missing all three are flagged by rule SPEC-043 (`domain-required-fields`, warning).
108
108
 
109
- | Category | Name object field | Answers | Description |
110
- | -------- | ----------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
111
- | Family | `family` | What? | Type family of the token (e.g. `sans-serif`, `serif`, `cjk`, `code`). Values come from [`typography-families.json`](../../packages/design-system-registry/registry/typography-families.json). |
112
- | Weight | `weight` | How? | Typographic weight (e.g. `regular`, `bold`, `light`, `black`). Values come from [`typography-weights.json`](../../packages/design-system-registry/registry/typography-weights.json). |
113
- | Style | `style` | How? | Typographic style when non-default (e.g. `italic`, `oblique`). Omit the field when style is normal. Values come from [`typography-styles.json`](../../packages/design-system-registry/registry/typography-styles.json). |
114
- | Scale | `scaleIndex` | Which? | Numeric size scale step (e.g. `75`, `100`, `200`). Shared with other token types; not scope-restricted. |
109
+ | Category | Name object field | Answers | Description |
110
+ | --------- | ----------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
111
+ | Family | `family` | What? | Type family of the token (e.g. `sans-serif`, `serif`, `cjk`, `code`). Values come from [`typography-families.json`](../../packages/design-data/registry/typography-families.json). |
112
+ | Weight | `weight` | How? | Typographic weight (e.g. `regular`, `bold`, `light`, `black`). Values come from [`typography-weights.json`](../../packages/design-data/registry/typography-weights.json). |
113
+ | Style | `style` | How? | Typographic style (e.g. `italic`, `oblique`, `normal`). Include `normal` when the token explicitly declares a normal style (e.g. a reset). Values come from [`typography-styles.json`](../../packages/design-data/registry/typography-styles.json). |
114
+ | Alignment | `alignment` | How? | Horizontal text-alignment direction (e.g. `start`, `center`, `end`). Corresponds to the CSS `text-align` axis. Values come from [`alignments.json`](../../packages/design-data/registry/alignments.json). |
115
+ | Scale | `scaleIndex` | Which? | Numeric size scale step (e.g. `75`, `100`, `200`). Shared with other token types; not scope-restricted. |
115
116
 
116
117
  **Default serialization order for typography tokens:**
117
118
 
@@ -129,11 +130,11 @@ Motion tokens describe timing, easing, and animation role for UI animation. Thei
129
130
 
130
131
  **NORMATIVE:** Motion tokens SHOULD include `motionRole` or `easing`. Tokens missing both are flagged by rule SPEC-043 (`domain-required-fields`, warning).
131
132
 
132
- | Category | Name object field | Answers | Description |
133
- | ----------- | ----------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
134
- | Motion Role | `motionRole` | What? | Semantic role of the animation (e.g. `enter`, `exit`, `transition`, `emphasis`). Values come from [`motion-roles.json`](../../packages/design-system-registry/registry/motion-roles.json). |
135
- | Easing | `easing` | How? | Easing curve identifier (e.g. `ease-in`, `ease-out`, `standard`). Values come from [`easing-curves.json`](../../packages/design-system-registry/registry/easing-curves.json). |
136
- | Duration | `scaleIndex` | Which? | Numeric duration bucket index (e.g. `100` for 100ms, `200` for 200ms). Shared with other token types; not scope-restricted. |
133
+ | Category | Name object field | Answers | Description |
134
+ | ----------- | ----------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
135
+ | Motion Role | `motionRole` | What? | Semantic role of the animation (e.g. `enter`, `exit`, `transition`, `emphasis`). Values come from [`motion-roles.json`](../../packages/design-data/registry/motion-roles.json). |
136
+ | Easing | `easing` | How? | Easing curve identifier (e.g. `ease-in`, `ease-out`, `standard`). Values come from [`easing-curves.json`](../../packages/design-data/registry/easing-curves.json). |
137
+ | Duration | `scaleIndex` | Which? | Numeric duration bucket index (e.g. `100` for 100ms, `200` for 200ms). Shared with other token types; not scope-restricted. |
137
138
 
138
139
  **Default serialization order for motion tokens:**
139
140
 
@@ -143,6 +144,33 @@ Motion tokens describe timing, easing, and animation role for UI animation. Thei
143
144
 
144
145
  Example: `motionRole=enter` + `easing=ease-out` → `enter-ease-out`. `motionRole=transition` + `scaleIndex=100` → `transition-100`.
145
146
 
147
+ ### Alias / semantic token name objects
148
+
149
+ Alias tokens (`$schema: …/alias.json`) MAY carry name objects using the same field vocabulary
150
+ as their target domain. A color alias carrying `colorFamily` is valid when its alias chain
151
+ resolves to a color-domain schema (`color.json`, `color-set.json`).
152
+
153
+ **NORMATIVE:** SPEC-042 (`field-scope-violation`) evaluates alias tokens by following the
154
+ `alias_target` chain to the terminal non-alias schema, then checking that schema against the
155
+ field's domain. This is the **alias-target-domain** rule: the alias *inherits* its domain
156
+ from what it ultimately resolves to.
157
+
158
+ **Examples:**
159
+
160
+ ```json
161
+ // icon-color-blue-primary-default ($schema=alias.json, $ref → icon-color-blue-100 which is color-set.json)
162
+ // Valid: colorFamily allowed because target resolves to color domain.
163
+ { "property": "icon-color", "colorFamily": "blue", "variant": "primary" }
164
+
165
+ // icon-color-primary-default ($schema=alias.json, $ref → icon-color-blue-primary-default)
166
+ // Valid: no domain-scoped fields used — variant and state are universal.
167
+ { "property": "icon-color", "variant": "primary" }
168
+ ```
169
+
170
+ **What stays deferred:** alias tokens referencing the same target but carrying modifiers that
171
+ have no current field (e.g. `inverse`, `emphasized`, `subtle`, `subdued`) remain unclassified
172
+ until a color-modifier RFC defines those fields.
173
+
146
174
  ### Structure vs. component — when does the line move?
147
175
 
148
176
  The `structure` and `component` fields both answer "What?" but apply at different scopes. A useful rule of thumb:
@@ -201,7 +229,7 @@ Semantic fields describe identity, structure, and intent. They are used for quer
201
229
 
202
230
  **NORMATIVE:** Semantic field values are validated against their declared vocabulary registry with the severity specified in the field declaration (typically **advisory** — warning, not error). Values not in the registry are permitted but flagged.
203
231
 
204
- Semantic fields are those declared with `kind: "semantic"` in the field catalog. In Spectrum's foundation catalog, these are: `structure`, `substructure`, `component`, `anatomy`, `object`, `property`, `variant`, `state`, `orientation`, `position`, `size`, `density`, `shape`.
232
+ Semantic fields are those declared with `kind: "semantic"` in the field catalog. The authoritative list for any given design system is determined by its field catalog declarations (see `packages/design-data/fields/` for Spectrum's catalog).
205
233
 
206
234
  ### Mode-set fields
207
235
 
@@ -209,7 +237,7 @@ Mode-set fields represent axes of variation that drive the [cascade](cascade.md)
209
237
 
210
238
  **NORMATIVE:** Mode-set field values are validated against declared [mode set](mode-sets.md) modes with **strict** severity (error). An invalid mode value would silently fail to match any context during cascade resolution.
211
239
 
212
- Mode-set fields are those declared with `kind: "mode-set"` in the field catalog, plus any additional mode set keys from the dataset's [mode set declarations](mode-sets.md). In Spectrum's foundation catalog, the standard mode-set fields are: `colorScheme`, `scale`, `contrast`.
240
+ Mode-set fields are those declared with `kind: "mode-set"` in the field catalog, plus any additional mode set keys from the dataset's [mode set declarations](mode-sets.md). The authoritative list for any given design system is determined by its field catalog and mode-set declarations (see `packages/design-data/fields/` for Spectrum's catalog).
213
241
 
214
242
  See [Mode Sets](mode-sets.md) for mode set declarations, modes, and defaults.
215
243
 
@@ -244,6 +272,44 @@ The taxonomy and terms are built to scale as new concepts and terms are identifi
244
272
  * New token type taxonomies **MAY** be added by creating scoped field declarations (non-null `scope`) and a corresponding registry section in taxonomy.md. Color, typography, and motion taxonomies are defined above.
245
273
  * Platform manifests **MAY** extend the vocabulary with platform-specific terms and formatting.
246
274
 
275
+ ## Where `name` objects live
276
+
277
+ Token taxonomy data is **decoupled** from the published `@adobe/spectrum-tokens`
278
+ package to avoid bumping the tokens version on every taxonomy change.
279
+
280
+ | Artifact | Location | Description |
281
+ | ----------------- | ----------------------------------- | -------------------------------------------------------------------------------- |
282
+ | Token source data | `packages/tokens/src/*.json` | `$schema`, `value`, `uuid`, `sets`, … — no `name` field |
283
+ | Taxonomy sidecar | `packages/token-names/names/*.json` | `{ "<slug>": { property, colorFamily, … }, … }` — one file per token source file |
284
+ | Field definitions | `packages/design-data/fields/` | Authoritative field catalog with scope and type |
285
+
286
+ The sidecar package (`@adobe/token-names`) is **private** (not published to npm).
287
+ Its delivery format for downstream consumers is TBD.
288
+
289
+ ### SDK validator integration
290
+
291
+ Pass `--names-dir packages/token-names/names/` to the `design-data validate` CLI
292
+ to merge sidecar names into the token graph at ingest. All relational rules
293
+ (SPEC-042, SPEC-043, SPEC-018…022, cascade, diff, query) continue to read
294
+ `record.raw["name"]` as if the field were inline:
295
+
296
+ ```bash
297
+ cargo run --bin design-data -- validate packages/tokens/src/ \
298
+ --names-dir packages/token-names/names/
299
+ ```
300
+
301
+ Validation without `--names-dir` is a valid fail-open configuration (name-scope
302
+ rules are silent); CI always supplies the flag.
303
+
304
+ ### Regenerating name data
305
+
306
+ ```bash
307
+ node tools/token-corpus-migrate/src/cli.js \
308
+ --root packages/tokens/src \
309
+ --names-out packages/token-names/names \
310
+ --write
311
+ ```
312
+
247
313
  ## References
248
314
 
249
315
  * [#806 — Token Taxonomy, Vocabulary, and Formatting](https://github.com/adobe/spectrum-design-data/discussions/806)
@@ -98,7 +98,15 @@ The table below lists all semantic fields. Fields marked with a scope are domain
98
98
 
99
99
  ### Alias (`$ref`)
100
100
 
101
- When **`$ref`** is present, the token is an **alias**. The value **MUST** be a non-empty string interpreted as a **token path** or **stable identifier** resolvable by the validator (resolution rules are Layer 2; see rule `SPEC-001` in `rules/rules.yaml`).
101
+ When **`$ref`** is present, the token is an **alias**. The value **MUST** be a non-empty string. In cascade format the value is the **UUID** of the target token (rename-proof, resolved via the graph's `uuid_index`). In the legacy transition format the value is the target token's kebab-case name (serialized legacy slug). Both forms are accepted; resolution rules are Layer 2 (see rule `SPEC-001` in `rules/rules.yaml`).
102
+
103
+ ```json
104
+ // Cascade canonical form (recommended) — the UUID is stable across renames.
105
+ { "name": { "property": "accent-background-color", "state": "default", "colorScheme": "dark" },
106
+ "$schema": "…/alias.json",
107
+ "$ref": "87a2c8f0-54fd-4939-8f42-3124fde1e49e",
108
+ "uuid": "f24eb871-6419-4cef-88a2-cca8548ae31e" }
109
+ ```
102
110
 
103
111
  ### Literal `value`
104
112
 
@@ -179,7 +187,7 @@ No string-named token may remain in a conforming dataset after the `2.0.0` cut w
179
187
 
180
188
  The `property` field on a name object is the **CSS/styling attribute or design-system abstraction** being defined — not an anatomy part, not a styling surface, and not a legacy compound name string. Not all valid values are CSS property identifiers; design-system abstractions (e.g. `padding-horizontal`, `overlay-color`, `size`) are permitted.
181
189
 
182
- **NORMATIVE:** Values for `property` **SHOULD** come from the [`property-terms`](../../packages/design-system-registry/registry/property-terms.json) registry. Non-registry values emit an advisory warning (SPEC-009 applied to the `property` field).
190
+ **NORMATIVE:** Values for `property` **SHOULD** come from the [`property-terms`](../../packages/design-data/registry/property-terms.json) registry. Non-registry values emit an advisory warning (SPEC-009 applied to the `property` field).
183
191
 
184
192
  Examples of **valid** `property` values: `color`, `background-color`, `border-radius`, `font-size`, `gap`, `opacity`.
185
193
 
@@ -268,7 +276,7 @@ Within a composite value, a string sub-value **MAY** be an **inline alias**: a r
268
276
  }
269
277
  ```
270
278
 
271
- **NORMATIVE:** In legacy format, inline aliases use the syntax `{token-name}` (curly-brace-wrapped token property name). In cascade format, the inline alias syntax is `{token-name}` for backward compatibility; UUID-based inline aliases are reserved for a future spec version.
279
+ **NORMATIVE:** In legacy format, inline aliases use the syntax `{token-name}` (curly-brace-wrapped token property name). In cascade format, top-level `$ref` aliases use a UUID (canonical, rename-proof); inline composite aliases within `value` objects remain `{token-name}` for backward compatibility. UUID-based inline composite aliases are reserved for a future spec version.
272
280
 
273
281
  **NORMATIVE:** Inline aliases within composite values are subject to alias resolution rules. Validators **MUST** resolve inline aliases and report errors for missing targets (SPEC-014), type mismatches (SPEC-015), and circular references (SPEC-003, extended).
274
282