@instruments/taxonomy 1.14.0 → 2.1.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.
package/dist/index.js CHANGED
@@ -1,3 +1,6 @@
1
+ // src/assessment-policy.ts
2
+ import { createHash as createHash2 } from "crypto";
3
+
1
4
  // src/v1.ts
2
5
  import { createHash } from "crypto";
3
6
 
@@ -535,7 +538,7 @@ var CONSTRUCTION_TERMS = [
535
538
  term(
536
539
  "encaustic",
537
540
  "Encaustic",
538
- "Made with colour or decoration integral to the body or inlaid beneath the wearing surface."
541
+ "Made with color or decoration integral to the body or inlaid beneath the wearing surface."
539
542
  ),
540
543
  // Beneath `encaustic`: a hydraulically pressed cement tile carries its pigment layer beneath the
541
544
  // wearing surface, which is what `encaustic` means here, so it is a narrower construction and
@@ -543,7 +546,7 @@ var CONSTRUCTION_TERMS = [
543
546
  reviewed(
544
547
  "cement-tile",
545
548
  "Cement tile",
546
- "A tile of pigmented cement pressed hydraulically and cured without firing, its colour layer integral beneath the wearing surface.",
549
+ "A tile of pigmented cement pressed hydraulically and cured without firing, its color layer integral beneath the wearing surface.",
547
550
  wikidata("Q3700458", "cement tile"),
548
551
  {
549
552
  altLabels: ["hydraulic tile"],
@@ -661,12 +664,12 @@ var CONSTRUCTION_TERMS = [
661
664
  term(
662
665
  "through-body",
663
666
  "Through body",
664
- "Colour and composition continue through the full thickness rather than sitting only on the face."
667
+ "Color and composition continue through the full thickness rather than sitting only on the face."
665
668
  ),
666
669
  reviewed(
667
670
  "zellige",
668
671
  "Zellige",
669
- "Hand-cut and hand-glazed clay tile in the Moroccan tradition, with the irregular surface and edge that method leaves; it does not name a colour, size or layout.",
672
+ "Hand-cut and hand-glazed clay tile in the Moroccan tradition, with the irregular surface and edge that method leaves; it does not name a color, size or layout.",
670
673
  wikidata("Q189046", "zellij"),
671
674
  { altLabels: ["zellij", "zillij"] }
672
675
  ),
@@ -682,7 +685,7 @@ var CONSTRUCTION_TERMS = [
682
685
  wikidata("Q243519", "velvet")
683
686
  ),
684
687
  // Lowercase ASCII slug so the phrase resolves without the diacritic; the accented spelling is a
685
- // wild form rather than the label, so both readings reach one term.
688
+ // wild form rather than the label, so both meanings reach one term.
686
689
  reviewed(
687
690
  "boucle",
688
691
  "Boucle",
@@ -730,7 +733,7 @@ var CONSTRUCTION_TERMS = [
730
733
  reviewedTax57(
731
734
  "tweed",
732
735
  "Tweed",
733
- "A rough-surfaced woven fabric made from mixed-colour yarns, traditionally wool.",
736
+ "A rough-surfaced woven fabric made from mixed-color yarns, traditionally wool.",
734
737
  wikidata("Q40601", "tweed"),
735
738
  { broaderSlug: "woven" }
736
739
  ),
@@ -1436,7 +1439,7 @@ var ELEMENT_TERMS = [
1436
1439
  ];
1437
1440
 
1438
1441
  // src/crossover-sources.ts
1439
- var RETRIEVAL_LEXICON_SOURCE = "colour-material lexicon in a materials-retrieval system (src-05)";
1442
+ var RETRIEVAL_LEXICON_SOURCE = "color-material lexicon in a materials-retrieval system (src-05)";
1440
1443
  var COLORSCOPE_CROSSOVER_SOURCE = "materialinstruments/colorscope@5feb29b267a7954c135976ede8039f37121afd27:packages/core/data/reference/v1/taxonomy.json";
1441
1444
  var BRASS_MATERIAL_SOURCE = "https://archive.copper.org/applications/industrial/DesignGuide/terms.php";
1442
1445
  var BRASS_FINISH_SOURCE = "https://nickelinstitute.org/media/lxxh1zwr/2023-nickelplatinghandbooka5_printablepdf.pdf section 5";
@@ -1509,6 +1512,8 @@ var TAX57_DATE2 = "2026-09-26";
1509
1512
  var TAX57_SOURCE = "Linear TAX-57 visual-vocabulary review";
1510
1513
  var MG2435_DATE = "2026-10-02";
1511
1514
  var MG2435_SOURCE = "Linear MG-2435 feed-loss review";
1515
+ var GLOSSY = "glossy";
1516
+ var GLOSSY_DATE = "2026-10-10";
1512
1517
  var wikidata2 = (id, label) => `Wikidata ${id} ${label}, https://www.wikidata.org/wiki/${id}`;
1513
1518
  var reviewed2 = (slug, label, definition, source, extra = {}) => ({
1514
1519
  definition,
@@ -1718,7 +1723,7 @@ var FINISH_TREATMENT_TERMS = [
1718
1723
  mg2435(
1719
1724
  "antiqued",
1720
1725
  "Antiqued",
1721
- "Deliberately finished to give a new surface the look of age, by wear, colour change or patination; the term names the result, not one process.",
1726
+ "Deliberately finished to give a new surface the look of age, by wear, color change or patination; the term names the result, not one process.",
1722
1727
  {
1723
1728
  note: "Widened 2026-10-02: the definition no longer lists the processes, and covers any means of giving the look of age."
1724
1729
  }
@@ -1769,20 +1774,40 @@ var FINISH_SHEEN_TERMS = [
1769
1774
  "An even mid sheen, softer than semi-gloss and clearly not matte.",
1770
1775
  5
1771
1776
  ),
1772
- vendored(
1773
- RETRIEVAL_SHEEN,
1774
- "semi-gloss",
1775
- "Semi-gloss",
1776
- "Strongly reflective while still scattering the highlight.",
1777
- 6
1778
- ),
1779
- vendored(
1780
- RETRIEVAL_SHEEN,
1781
- "high-gloss",
1782
- "High gloss",
1783
- "Returns a sharp, mirror-like specular reflection.",
1784
- 7
1785
- )
1777
+ {
1778
+ ...vendored(
1779
+ RETRIEVAL_SHEEN,
1780
+ "semi-gloss",
1781
+ "Semi-gloss",
1782
+ "Strongly reflective while still scattering the highlight.",
1783
+ 6
1784
+ ),
1785
+ broaderSlug: GLOSSY
1786
+ },
1787
+ {
1788
+ ...vendored(
1789
+ RETRIEVAL_SHEEN,
1790
+ "high-gloss",
1791
+ "High gloss",
1792
+ "Returns a sharp, mirror-like specular reflection.",
1793
+ 7
1794
+ ),
1795
+ broaderSlug: GLOSSY
1796
+ },
1797
+ {
1798
+ altLabels: ["gloss"],
1799
+ definition: "A visibly shiny surface with pronounced specular reflection. This broad description does not specify a gloss grade or measured gloss value.",
1800
+ introducedAt: GLOSSY_DATE,
1801
+ label: "Glossy",
1802
+ note: "Use a narrower sheen grade when the source supplies one. Semi-gloss and High gloss are narrower meanings; Satin has no universal broader relation here because suppliers both describe it as a glossy look and contrast it with glossy finishes. This term is not a rung on the ordered sheen scale and does not establish a polishing process.",
1803
+ provenance: {
1804
+ basis: "referenced",
1805
+ snapshot: GLOSSY_DATE,
1806
+ source: "MG-2620 Glossy review; Sherwin-Williams gloss and sheen guide, https://www.sherwin-williams.com/architects-specifiers-designers/inspiration/styles-and-techniques/sw-art-gloss-sheen-differences; Formica glossy versus matte finishes, https://formica.com/en-ca/articles/home-design/2025/glossy-vs-matte-kitchen-cabinets; Tikkurila satin counterexamples, https://tikkurila.com/how-choose-right-paint-your-interior-walls-and-ceilings and https://tikkurila.com/7-tips-painting-fence-old-or-new"
1807
+ },
1808
+ reviewedAt: GLOSSY_DATE,
1809
+ slug: GLOSSY
1810
+ }
1786
1811
  ];
1787
1812
  var FINISH_TEXTURE_TERMS = [
1788
1813
  vendored(
@@ -1889,7 +1914,7 @@ var FINISH_TEXTURE_TERMS = [
1889
1914
  repaired(
1890
1915
  "velvety",
1891
1916
  "Velvety",
1892
- "A dense short pile reading soft and light-absorbing.",
1917
+ "A dense short pile meaning soft and light-absorbing.",
1893
1918
  "occasional",
1894
1919
  DROPPED
1895
1920
  ),
@@ -2087,7 +2112,7 @@ var FORMAT_TERMS = [
2087
2112
  term4(
2088
2113
  "subway-tile",
2089
2114
  "Subway tile",
2090
- "A rectangular field tile supplied in roughly the 1:2 proportion of early-twentieth-century station tiling, independent of material, colour and the bond it is laid in.",
2115
+ "A rectangular field tile supplied in roughly the 1:2 proportion of early-twentieth-century station tiling, independent of material, color and the bond it is laid in.",
2091
2116
  {
2092
2117
  altLabels: ["metro tile"],
2093
2118
  broaderSlug: "tile",
@@ -2650,12 +2675,12 @@ var MATERIAL_EVERYDAY_TERMS = [
2650
2675
  { broaderSlug: STONE_SLUG }
2651
2676
  ),
2652
2677
  // Beneath `ceramic` on the same footing as `terracotta`: brick material is a fired clay body,
2653
- // and MATERIAL names the substance. The masonry UNIT is a format reading this package does not
2678
+ // and MATERIAL names the substance. The masonry UNIT is a format meaning this package does not
2654
2679
  // mint; brick slips and thin brick compose `material.brick` with a FORMAT term.
2655
2680
  reviewed3(
2656
2681
  "brick",
2657
2682
  "Brick",
2658
- "Fired clay masonry material, named as the substance rather than as the masonry unit, its bond or its colour.",
2683
+ "Fired clay masonry material, named as the substance rather than as the masonry unit, its bond or its color.",
2659
2684
  wikidata3("Q40089", "brick"),
2660
2685
  { broaderSlug: "ceramic" }
2661
2686
  ),
@@ -2699,7 +2724,7 @@ var MATERIAL_EVERYDAY_TERMS = [
2699
2724
  reviewed3(
2700
2725
  "weathering-steel",
2701
2726
  "Weathering steel",
2702
- "A steel alloy family that forms a stable rust-coloured oxide layer on exposure; the trade names are not the material.",
2727
+ "A steel alloy family that forms a stable rust-colored oxide layer on exposure; the trade names are not the material.",
2703
2728
  wikidata3("Q1024124", "weathering steel"),
2704
2729
  { broaderSlug: "steel", seenAs: ["corten", "Cor-Ten"] }
2705
2730
  ),
@@ -2847,7 +2872,7 @@ var MATERIAL_EVERYDAY_TERMS = [
2847
2872
  },
2848
2873
  // AUTHORED. Cane in furniture is the peeled outer skin of rattan woven as webbing, so it is
2849
2874
  // related to rattan and not an instance of it; bare `cane` also names bamboo and sugar cane,
2850
- // which is why the definition pins the interiors reading and the relation is `related-to`.
2875
+ // which is why the definition pins the interiors meaning and the relation is `related-to`.
2851
2876
  {
2852
2877
  ...authored3(
2853
2878
  "cane",
@@ -3217,10 +3242,10 @@ var MATERIAL_MINERAL_ADDITIVES_TERMS = [
3217
3242
  compositionTerm(
3218
3243
  PIGMENT_SLUG,
3219
3244
  "Pigment",
3220
- "An inorganic insoluble particulate substance added to colour a material, named in a composition when the specific pigment is not.",
3245
+ "An inorganic insoluble particulate substance added to color a material, named in a composition when the specific pigment is not.",
3221
3246
  ISO_18451_1,
3222
3247
  {
3223
- altLabels: ["colour pigment", "color pigment"],
3248
+ altLabels: ["color pigment", "color pigment"],
3224
3249
  broaderSlug: MINERAL_SLUG
3225
3250
  }
3226
3251
  ),
@@ -5517,7 +5542,7 @@ var MATERIAL_TERMS = [
5517
5542
  ...searchCorpusMaterial(
5518
5543
  "stainless-steel",
5519
5544
  "Stainless steel",
5520
- "A corrosion-resistant steel alloy family containing sufficient chromium to form a protective passive layer, named as a bulk material rather than a surface finish or colour.",
5545
+ "A corrosion-resistant steel alloy family containing sufficient chromium to form a protective passive layer, named as a bulk material rather than a surface finish or color.",
5521
5546
  "steel",
5522
5547
  CROSSOVER_DEFINITION_SOURCES.steel
5523
5548
  ),
@@ -5541,7 +5566,7 @@ var MATERIAL_TERMS = [
5541
5566
  searchCorpusMaterial(
5542
5567
  "white-oak",
5543
5568
  "White oak",
5544
- "Timber from the white-oak species group within the genus Quercus, named as a wood material rather than a colour or surface finish.",
5569
+ "Timber from the white-oak species group within the genus Quercus, named as a wood material rather than a color or surface finish.",
5545
5570
  "oak",
5546
5571
  CROSSOVER_DEFINITION_SOURCES.oak
5547
5572
  ),
@@ -5549,7 +5574,7 @@ var MATERIAL_TERMS = [
5549
5574
  crossoverTerm(
5550
5575
  "teak",
5551
5576
  "Teak",
5552
- "Wood from Tectona grandis, named as timber rather than as a colour or surface treatment.",
5577
+ "Wood from Tectona grandis, named as timber rather than as a color or surface treatment.",
5553
5578
  CROSSOVER_DEFINITION_SOURCES.teak,
5554
5579
  HARDWOOD_SLUG2
5555
5580
  )
@@ -5558,7 +5583,7 @@ var MATERIAL_TERMS = [
5558
5583
  ...crossoverTerm(
5559
5584
  "walnut",
5560
5585
  "Walnut",
5561
- "Wood obtained from a tree in the genus Juglans, named as a material rather than as a colour.",
5586
+ "Wood obtained from a tree in the genus Juglans, named as a material rather than as a color.",
5562
5587
  CROSSOVER_DEFINITION_SOURCES.walnut
5563
5588
  ),
5564
5589
  broaderSlug: HARDWOOD_SLUG2,
@@ -5869,7 +5894,7 @@ var MOOD_TERMS = [
5869
5894
  slug: "soft"
5870
5895
  },
5871
5896
  {
5872
- definition: "Sharp edges and clean contrast; the opposite reading to soft.",
5897
+ definition: "Sharp edges and clean contrast; the opposite meaning to soft.",
5873
5898
  label: "Crisp",
5874
5899
  provenance: { basis: "vendored", snapshot: SNAPSHOT4, source: MS_MOOD },
5875
5900
  slug: "crisp"
@@ -6061,12 +6086,12 @@ var PALETTE_HUE_TERMS = [
6061
6086
  }));
6062
6087
  var PALETTE_TEMPERATURE_TERMS = [
6063
6088
  {
6064
- definition: "Dominant colour casts to the warm side of the OKLab warmth axis.",
6089
+ definition: "Dominant color casts to the warm side of the OKLab warmth axis.",
6065
6090
  label: "Warm",
6066
6091
  slug: "warm"
6067
6092
  },
6068
6093
  {
6069
- definition: "Dominant colour casts to the cool side of the OKLab warmth axis.",
6094
+ definition: "Dominant color casts to the cool side of the OKLab warmth axis.",
6070
6095
  label: "Cool",
6071
6096
  slug: "cool"
6072
6097
  },
@@ -6087,14 +6112,14 @@ var PALETTE_TEMPERATURE_TERMS = [
6087
6112
  var PALETTE_CHARACTER_TERMS = [
6088
6113
  {
6089
6114
  canonicalAuthority: colorScopeAuthority("vibrant", PALETTE_MOOD),
6090
- definition: "High chroma; colour is the loudest thing in the scheme.",
6115
+ definition: "High chroma; color is the loudest thing in the scheme.",
6091
6116
  label: "Vibrant",
6092
6117
  provenance: { basis: "vendored", snapshot: SNAPSHOT5, source: COLOUR_MOOD },
6093
6118
  slug: "vibrant"
6094
6119
  },
6095
6120
  {
6096
6121
  canonicalAuthority: colorScopeAuthority("muted", PALETTE_MOOD),
6097
- definition: "Chroma held low by design, with the colours still fully present.",
6122
+ definition: "Chroma held low by design, with the colors still fully present.",
6098
6123
  label: "Muted",
6099
6124
  provenance: { basis: "vendored", snapshot: SNAPSHOT5, source: COLOUR_MOOD },
6100
6125
  slug: "muted"
@@ -6136,7 +6161,7 @@ var PALETTE_CHARACTER_TERMS = [
6136
6161
  },
6137
6162
  {
6138
6163
  canonicalAuthority: colorScopeAuthority("monochrome", PALETTE_MOOD),
6139
- definition: "One hue, or none; the scheme varies by lightness rather than by colour.",
6164
+ definition: "One hue, or none; the scheme varies by lightness rather than by color.",
6140
6165
  label: "Monochrome",
6141
6166
  provenance: { basis: "vendored", snapshot: SNAPSHOT5, source: COLOUR_MOOD },
6142
6167
  slug: "monochrome"
@@ -6147,13 +6172,13 @@ var PALETTE_CHARACTER_TERMS = [
6147
6172
  definition: "Many hues held together deliberately.",
6148
6173
  label: "Polychrome",
6149
6174
  provenance: { basis: "vendored", snapshot: SNAPSHOT5, source: COLOUR_MOOD },
6150
- seenAs: ["colourful"],
6175
+ seenAs: ["colorful"],
6151
6176
  slug: "colorful"
6152
6177
  },
6153
6178
  {
6154
6179
  altLabels: ["jewel-toned"],
6155
6180
  canonicalAuthority: colorScopeAuthority("saturated", "chroma-level"),
6156
- definition: "Deep and fully-loaded colour, jewel-toned rather than bright. Vibrant is loud; saturated is rich, and a dark saturated scheme is ordinary while a dark vibrant one is not.",
6181
+ definition: "Deep and fully-loaded color, jewel-toned rather than bright. Vibrant is loud; saturated is rich, and a dark saturated scheme is ordinary while a dark vibrant one is not.",
6157
6182
  label: "Saturated",
6158
6183
  note: "NOT authored here, and the second time this file made that claim. It was written as authored because colorscope's PaletteMood was checked and its COLOR_CHROMA_LEVELS was not - and the chroma scale is muted, soft, vivid, SATURATED. The same failure as `mid`, in the same file, found by an adversarial pass rather than by the check that should have caught it.",
6159
6184
  provenance: {
@@ -6229,7 +6254,7 @@ var PATTERN_FIGURE_TERMS = [
6229
6254
  pimTerm(
6230
6255
  "cloudy",
6231
6256
  "Cloudy",
6232
- "Soft, diffuse variation in tone with no distinct veins or edges, reading as drifting cloud.",
6257
+ "Soft, diffuse variation in tone with no distinct veins or edges, meaning as drifting cloud.",
6233
6258
  PIM_FIGURE_SOURCE
6234
6259
  ),
6235
6260
  pimTerm(
@@ -6441,11 +6466,11 @@ var PATTERN_TYPE_TERMS = [
6441
6466
  // concept rather than a second correct name for it, so it is `seenAs`, not an alt label.
6442
6467
  { seenAs: ["floral"] }
6443
6468
  ),
6444
- // Heather in the trade names the same mixed-colour-yarn effect Wikidata records; melange, marled
6469
+ // Heather in the trade names the same mixed-color-yarn effect Wikidata records; melange, marled
6445
6470
  // and heathered are its correct names, none more canonical than another.
6446
6471
  {
6447
6472
  altLabels: ["heathered", "marled"],
6448
- definition: "A mixed-colour yarn effect that gives the surface a flecked, uneven tone rather than one solid colour.",
6473
+ definition: "A mixed-color yarn effect that gives the surface a flecked, uneven tone rather than one solid color.",
6449
6474
  introducedAt: TAX57_DATE3,
6450
6475
  label: "Melange",
6451
6476
  provenance: {
@@ -6485,7 +6510,7 @@ var PATTERN_TYPE_TERMS = [
6485
6510
  term7(
6486
6511
  "herringbone-chevron",
6487
6512
  "Herringbone or chevron",
6488
- "A legacy combined reading for directional zigzags formed by angled units or marks.",
6513
+ "A legacy combined meaning for directional zigzags formed by angled units or marks.",
6489
6514
  {
6490
6515
  introducedAt: "2026-08-30",
6491
6516
  note: "Deprecated by the Linear TAX-45 reviewed implementation contract because one combined identity could not distinguish broken herringbone from continuous chevron motifs. Zigzag preserves the non-specific historical meaning; use the narrower herringbone or chevron concept when evidence supports it.",
@@ -6571,7 +6596,7 @@ var PATTERN_TYPE_TERMS = [
6571
6596
  ),
6572
6597
  // AUTHORED. Wikidata's `checkerboard` (Q460711) is the game board the motif is named after,
6573
6598
  // not a definition of the motif. Type only: a checkerboard of tiles is
6574
- // installation-layout.stack-bond plus this motif, so no layout reading is added.
6599
+ // installation-layout.stack-bond plus this motif, so no layout meaning is added.
6575
6600
  {
6576
6601
  altLabels: ["chequerboard", "checkerboard pattern"],
6577
6602
  definition: "A grid repeat of alternating squares in two contrasting tones, whether printed, woven or formed by the units themselves.",
@@ -6595,17 +6620,17 @@ var PATTERN_TYPE_TERMS = [
6595
6620
  term7(
6596
6621
  "gradient",
6597
6622
  "Gradient",
6598
- "A continuous or stepped transition in tone, colour or mark density."
6623
+ "A continuous or stepped transition in tone, color or mark density."
6599
6624
  ),
6600
6625
  term7(
6601
6626
  "texture",
6602
6627
  "Texture",
6603
- "A non-representational repeat whose principal reading is tactile or relief-like."
6628
+ "A non-representational repeat whose principal meaning is tactile or relief-like."
6604
6629
  ),
6605
6630
  term7(
6606
6631
  "toile",
6607
6632
  "Toile",
6608
- "A fine-line pastoral or narrative pictorial repeat, usually in one colour."
6633
+ "A fine-line pastoral or narrative pictorial repeat, usually in one color."
6609
6634
  ),
6610
6635
  term7(
6611
6636
  "character",
@@ -6700,7 +6725,7 @@ var PATTERN_DENSITY_TERMS = [
6700
6725
  RETRIEVAL_DENSITY,
6701
6726
  "dense",
6702
6727
  "Dense",
6703
- "Motif covering the field, with no ground reading as ground.",
6728
+ "Motif covering the field, with no ground meaning as ground.",
6704
6729
  6
6705
6730
  )
6706
6731
  ];
@@ -6737,7 +6762,7 @@ var PATTERN_REGULARITY_TERMS = [
6737
6762
  RETRIEVAL_REGULARITY,
6738
6763
  "organic",
6739
6764
  "Organic",
6740
- "Variation reading as grown or formed rather than composed.",
6765
+ "Variation meaning as grown or formed rather than composed.",
6741
6766
  5
6742
6767
  )
6743
6768
  ];
@@ -6996,7 +7021,7 @@ var PLACE_REGION_TERMS = [
6996
7021
  },
6997
7022
  {
6998
7023
  broaderSlug: "mediterranean",
6999
- definition: "The central-Italian reading of the Mediterranean idiom: stone, ochre render, cypress.",
7024
+ definition: "The central-Italian meaning of the Mediterranean idiom: stone, ochre render, cypress.",
7000
7025
  label: "Tuscan",
7001
7026
  provenance: { basis: "authored", source: ADR2 },
7002
7027
  slug: "tuscan"
@@ -7044,7 +7069,7 @@ var PLACE_REGION_TERMS = [
7044
7069
  },
7045
7070
  {
7046
7071
  broaderSlug: "english-country",
7047
- definition: "The oolitic-limestone reading of the English country idiom: honey stone, steep stone-slate roofs, mullioned windows, low ceilings.",
7072
+ definition: "The oolitic-limestone meaning of the English country idiom: honey stone, steep stone-slate roofs, mullioned windows, low ceilings.",
7048
7073
  label: "Cotswolds",
7049
7074
  provenance: { basis: "authored", source: ADR2 },
7050
7075
  slug: "cotswolds"
@@ -7057,7 +7082,7 @@ var PLACE_REGION_TERMS = [
7057
7082
  slug: "french-provincial"
7058
7083
  },
7059
7084
  {
7060
- definition: "Saturated pigment on mass walls, volcanic stone, deep shade, and colour used architecturally rather than decoratively.",
7085
+ definition: "Saturated pigment on mass walls, volcanic stone, deep shade, and color used architecturally rather than decoratively.",
7061
7086
  label: "Mexican",
7062
7087
  provenance: { basis: "authored", source: ADR2 },
7063
7088
  slug: "mexican"
@@ -8538,7 +8563,7 @@ var GATHERING_SPACES = [
8538
8563
  },
8539
8564
  {
8540
8565
  broaderSlug: "lounge",
8541
- definition: "The soft-seated end of a library or learning space, where reading happens off a chair rather than at a table; the tabled part of the same room is `reading_room`.",
8566
+ definition: "The soft-seated end of a library or learning space, where meaning happens off a chair rather than at a table; the tabled part of the same room is `reading_room`.",
8542
8567
  label: "Library Lounge",
8543
8568
  provenance: PROGRAM_SPACES,
8544
8569
  slug: "library-lounge"
@@ -9117,7 +9142,7 @@ var SANITARY_SPACES = [
9117
9142
  definition: "A small volume holding a lavatory and a basin and nothing else; add a bath or a shower and it becomes `bathroom`.",
9118
9143
  external: [aat2("300081124", "lavatories (rooms)", "exact")],
9119
9144
  label: "Cloakroom / WC",
9120
- note: "Deliberately not a kind of `bathroom`. In American usage a WC is a bathroom and the edge would be clean; in British usage it is not, and the whole point of the term is the absence of bathing provision. Since the difference is exactly what a specifier needs to see, the two terms sit side by side rather than one inside the other. `cloakroom` was an carried as another name here in the 0.2 draft and is now a term of its own for the coat room, on Getty's reading; the British domestic sense meaning this room moves to Seen in the wild, where observed but non-canonical labels belong. The label is left alone so the published id keeps its name.",
9145
+ note: "Deliberately not a kind of `bathroom`. In American usage a WC is a bathroom and the edge would be clean; in British usage it is not, and the whole point of the term is the absence of bathing provision. Since the difference is exactly what a specifier needs to see, the two terms sit side by side rather than one inside the other. `cloakroom` was an carried as another name here in the 0.2 draft and is now a term of its own for the coat room, on Getty's meaning; the British domestic sense meaning this room moves to Seen in the wild, where observed but non-canonical labels belong. The label is left alone so the published id keeps its name.",
9121
9146
  provenance: MS_ROOM_PROGRAM,
9122
9147
  seenAs: ["downstairs loo", "half bath", "cloakroom", "powder_room"],
9123
9148
  slug: "wc"
@@ -9360,7 +9385,7 @@ var SLEEPING_SPACES = [
9360
9385
  definition: "A let sleeping volume in a hotel, taken together with its ensuite: the guest's whole private territory rather than the bed alone.",
9361
9386
  external: [aat2("300248355", "guest rooms", "related")],
9362
9387
  label: "Hotel Room",
9363
- // DOWNGRADED from `close` on 2026-08-21 after reading AAT's scope note, which reads: "Rooms in
9388
+ // DOWNGRADED from `close` on 2026-08-21 after meaning AAT's scope note, which reads: "Rooms in
9364
9389
  // DWELLINGS set aside or otherwise intended for temporary use by guests and usually not
9365
9390
  // regularly used by household members." That is a domestic spare room, not a let hotel bedroom,
9366
9391
  // and `close` would have asserted they substitute for one another in retrieval. AAT has no term
@@ -9512,7 +9537,7 @@ var WORKING_SPACES = [
9512
9537
  {
9513
9538
  altLabels: ["home office"],
9514
9539
  broaderSlug: "workspace",
9515
- definition: "A domestic volume given over to desk work, reading or household administration.",
9540
+ definition: "A domestic volume given over to desk work, meaning or household administration.",
9516
9541
  external: [
9517
9542
  aat2("300081781", "studies (rooms)", "exact"),
9518
9543
  aat2("300180734", "home offices (workspaces)", "close")
@@ -9673,7 +9698,7 @@ var STYLE_TERMS = [
9673
9698
  {
9674
9699
  altLabels: ["mcm"],
9675
9700
  broaderSlug: "modernism",
9676
- definition: "The postwar domestic reading of modernism: organic curves, teak and walnut, tapered legs, warm rather than austere.",
9701
+ definition: "The postwar domestic meaning of modernism: organic curves, teak and walnut, tapered legs, warm rather than austere.",
9677
9702
  external: [aat3("300343610", "Mid-Century Modernist", "exact")],
9678
9703
  label: "Mid-Century Modern",
9679
9704
  note: "Style, not period. A reproduction built in 2024 is `style.mid-century-modern` in the `period.contemporary` period, which is why the two axes cannot be one.",
@@ -9799,7 +9824,7 @@ var STYLE_TERMS = [
9799
9824
  },
9800
9825
  // Zero hits on all three. AAT has no maximalism concept in any domain.
9801
9826
  {
9802
- definition: "Deliberate accumulation: pattern on pattern, colour on colour, more held together on purpose rather than by accident.",
9827
+ definition: "Deliberate accumulation: pattern on pattern, color on color, more held together on purpose rather than by accident.",
9803
9828
  label: "Maximalism",
9804
9829
  provenance: {
9805
9830
  basis: "evidenced",
@@ -10019,7 +10044,7 @@ var STYLE_TERMS = [
10019
10044
  styleKind: MOVEMENT
10020
10045
  },
10021
10046
  {
10022
- definition: "Geometric order and typological clarity taken as first principles, especially the Italian interwar and Tendenza readings.",
10047
+ definition: "Geometric order and typological clarity taken as first principles, especially the Italian interwar and Tendenza meanings.",
10023
10048
  external: [aat3("300457776", "Rationalist (style and movement)", "exact")],
10024
10049
  label: "Rationalism",
10025
10050
  provenance: {
@@ -10424,7 +10449,7 @@ var TYPOLOGY_TERMS = [
10424
10449
  slug: "museum"
10425
10450
  },
10426
10451
  {
10427
- definition: "Premises holding a collection for reading and lending, planned around both dense storage and long uninterrupted occupation of the reading floor.",
10452
+ definition: "Premises holding a collection for meaning and lending, planned around both dense storage and long uninterrupted occupation of the meaning floor.",
10428
10453
  label: "Library",
10429
10454
  provenance: PROJECTS_PLATFORM,
10430
10455
  slug: "library"
@@ -10659,10 +10684,10 @@ var MOOD_ANCHORS = {
10659
10684
  "Interior stripped to a bare floor and unadorned walls, a single hard seat, no textile anywhere, fixings and joints left visible, and every horizontal surface empty"
10660
10685
  ],
10661
10686
  calm: [
10662
- "Interior holding very few objects, widely spaced, one continuous wall colour running uninterrupted, storage closed and flush, and light arriving evenly with no bright spot anywhere in the frame"
10687
+ "Interior holding very few objects, widely spaced, one continuous wall color running uninterrupted, storage closed and flush, and light arriving evenly with no bright spot anywhere in the frame"
10663
10688
  ],
10664
10689
  crisp: [
10665
- "Interior where every junction is held on a shadow line, arrises square and unsoftened, flat matt colour meeting flat matt colour without a transition, and shadows falling with a hard boundary from a single source"
10690
+ "Interior where every junction is held on a shadow line, arrises square and unsoftened, flat matt color meeting flat matt color without a transition, and shadows falling with a hard boundary from a single source"
10666
10691
  ],
10667
10692
  domestic: [
10668
10693
  "Interior with a book left face-down, a mug and a plate still on the table, shoes by the door, a cable running across the floor to a socket, and cushions pushed out of shape by use"
@@ -10686,7 +10711,7 @@ var MOOD_ANCHORS = {
10686
10711
  "Interior at low overall light level with deeply saturated dark walls absorbing what light there is, small pools thrown by table lamps, and the ceiling lost in shadow above"
10687
10712
  ],
10688
10713
  playful: [
10689
- "Interior with strong colour applied to a structural element, a form that serves no function, seats that deliberately do not match, and objects arranged to make a visual joke"
10714
+ "Interior with strong color applied to a structural element, a form that serves no function, seats that deliberately do not match, and objects arranged to make a visual joke"
10690
10715
  ],
10691
10716
  "quiet-luxury": [
10692
10717
  // A MAGNET IN ITS FIRST DRAFT, and worth recording why. It listed figured stone, grain-matched
@@ -10735,7 +10760,7 @@ var PERIOD_ANCHORS = {
10735
10760
  "Interior with a curved metal casement set into rendered wall, a tiled fireplace surround, a picture rail in a semi-detached plan, and parquet laid in block"
10736
10761
  ],
10737
10762
  "late-century": [
10738
- "Interior in a converted industrial shell with services run exposed overhead, structural steel left visible and painted, and applied classical quotation set against it in strong flat colour"
10763
+ "Interior in a converted industrial shell with services run exposed overhead, structural steel left visible and painted, and applied classical quotation set against it in strong flat color"
10739
10764
  ],
10740
10765
  medieval: [
10741
10766
  "Interior carried on load-bearing masonry and an irregular timber frame, openings small against the mass of wall, a stone floor worn hollow, and the roof structure open to view"
@@ -10773,7 +10798,7 @@ var PLACE_ANCHORS = {
10773
10798
  "Bleached and salt-worn timber, blue worked against white, rattan and rope, and light arriving upward off water"
10774
10799
  ],
10775
10800
  cotswolds: [
10776
- "Honey-coloured oolitic limestone laid in courses, mullioned windows with leaded lights, a steep roof in graded stone slate, and beamed ceilings low enough to duck under"
10801
+ "Honey-colored oolitic limestone laid in courses, mullioned windows with leaded lights, a steep roof in graded stone slate, and beamed ceilings low enough to duck under"
10777
10802
  ],
10778
10803
  desert: [
10779
10804
  "Thermal mass with few and small openings placed away from the sun, earth-toned ground running to the building with no planted break, and shadow used as the only relief"
@@ -10825,7 +10850,7 @@ var PLACE_ANCHORS = {
10825
10850
  "Ochre render over rubble stone, cypress standing against the skyline, large-format terracotta tile underfoot, and chestnut beams carrying the floor above"
10826
10851
  ],
10827
10852
  urban: [
10828
- "Continuous street frontage with a party wall to each side, the building reading as one of an unbroken run, and the pavement immediately at the door"
10853
+ "Continuous street frontage with a party wall to each side, the building meaning as one of an unbroken run, and the pavement immediately at the door"
10829
10854
  ],
10830
10855
  waterfront: [
10831
10856
  // WRITTEN TIGHT ON PURPOSE. The first draft said only "water at the window", and a bare query
@@ -11114,7 +11139,7 @@ var GATHERING_ANCHORS = {
11114
11139
  "A pool or table-tennis table taking the centre with clearance walked around it, cues racked on the wall, a scoreboard, and low bench seating pushed back to the edges"
11115
11140
  ],
11116
11141
  "library-lounge": [
11117
- "The soft end of a public library: strangers reading in facing armchairs, a periodicals rack, a returns trolley parked at the edge of the carpet, and shelving running away behind the seating"
11142
+ "The soft end of a public library: strangers meaning in facing armchairs, a periodicals rack, a returns trolley parked at the edge of the carpet, and shelving running away behind the seating"
11118
11143
  ],
11119
11144
  "living-room": [
11120
11145
  "A sofa and armchairs turned toward a fireplace or a window, a coffee table between them with books and a remote on it, a large rug anchoring the group and lamps at the corners"
@@ -11428,7 +11453,7 @@ var SLEEPING_ANCHORS = {
11428
11453
  "A bed made up flat and unslept-in, empty hanging space in the wardrobe, a folded towel set out at the foot, a bedside carafe, and nothing personal on any surface"
11429
11454
  ],
11430
11455
  "hotel-room": [
11431
- "A made bed with a runner across the foot, matched side tables and reading lights either side, a luggage bench, a folder and a card key on the desk, blackout curtains drawn back"
11456
+ "A made bed with a runner across the foot, matched side tables and meaning lights either side, a luggage bench, a folder and a card key on the desk, blackout curtains drawn back"
11432
11457
  ],
11433
11458
  nursery: [
11434
11459
  "A cot with a mobile turning above it, a changing surface with a stack of folded muslins, soft flooring, low open baskets of toys, and a blackout blind at the window"
@@ -11545,7 +11570,7 @@ var STYLE_ANCHORS = {
11545
11570
  "Brutalist interior with board-marked in-situ concrete left as struck, heavy monolithic massing, deep window reveals, exposed services, raw unfinished surfaces treated as the finish"
11546
11571
  ],
11547
11572
  constructivism: [
11548
- "Constructivist interior with dynamic diagonal composition, exposed structural drama, primary colour on structural members, industrial glazing, early Soviet avant-garde geometry"
11573
+ "Constructivist interior with dynamic diagonal composition, exposed structural drama, primary color on structural members, industrial glazing, early Soviet avant-garde geometry"
11549
11574
  ],
11550
11575
  contemporary: [
11551
11576
  "Contemporary interior with clean unornamented lines, flush cabinetry, large-format tile, neutral palette with a single accent, recessed lighting, current rather than period-referencing"
@@ -11572,7 +11597,7 @@ var STYLE_ANCHORS = {
11572
11597
  "Japandi interior with low platform furniture in pale oak and black-stained ash, paper and linen shades, a single ceramic vessel on a plain shelf, walls in warm off-white lime, floors in light timber, and every surface left with its natural grain and no pattern"
11573
11598
  ],
11574
11599
  maximalism: [
11575
- "Bold maximalist interior with rich colours, statement art, mixed patterns, velvet upholstery, lacquered surfaces, decorative objects, gallery walls, patterned rugs, brass accents, eclectic furniture mixing periods and styles"
11600
+ "Bold maximalist interior with rich colors, statement art, mixed patterns, velvet upholstery, lacquered surfaces, decorative objects, gallery walls, patterned rugs, brass accents, eclectic furniture mixing periods and styles"
11576
11601
  ],
11577
11602
  "mid-century-modern": [
11578
11603
  "Mid-century modern interior with teak and walnut furniture, Eames chairs, organic curves, warm wood panelling, terrazzo floors, statement pendant lights, Scandinavian influence, bold geometric textiles, open shelving, vintage design classics"
@@ -11594,7 +11619,7 @@ var STYLE_ANCHORS = {
11594
11619
  "Parametric interior with continuously varied surfaces, ruled geometry, seamless composite panelling, no repeated module, form generated by rule rather than composed element by element"
11595
11620
  ],
11596
11621
  postmodernism: [
11597
- "Postmodern interior with historical quotation used knowingly, oversized classical mouldings in unexpected colour, laminate and terrazzo, split pediments, ornament readmitted as commentary"
11622
+ "Postmodern interior with historical quotation used knowingly, oversized classical mouldings in unexpected color, laminate and terrazzo, split pediments, ornament readmitted as commentary"
11598
11623
  ],
11599
11624
  rationalism: [
11600
11625
  "Rationalist interior with strict geometric order, typological clarity, travertine and plaster, repeated square openings, Italian interwar and Tendenza discipline"
@@ -11607,7 +11632,7 @@ var STYLE_ANCHORS = {
11607
11632
  "Classic tailored interior with panelled walls, restrained mouldings, symmetrical furniture arrangement, quiet pattern, nothing improvised"
11608
11633
  ],
11609
11634
  transitional: [
11610
- "Transitional interior with period silhouettes stripped of ornament, a shaker-fronted kitchen in a flat colour, classical proportion in contemporary materials, the deliberate midpoint between traditional and contemporary"
11635
+ "Transitional interior with period silhouettes stripped of ornament, a shaker-fronted kitchen in a flat color, classical proportion in contemporary materials, the deliberate midpoint between traditional and contemporary"
11611
11636
  ],
11612
11637
  vernacular: [
11613
11638
  "Vernacular building made from what the place supplies, local stone or timber, roof pitch set by the local weather, details carried by regional trade practice rather than by drawing"
@@ -11880,7 +11905,7 @@ var AXES = [
11880
11905
  { label: "Character", slug: "character", terms: PALETTE_CHARACTER_TERMS }
11881
11906
  ],
11882
11907
  label: "Palette",
11883
- question: "What colour is it?",
11908
+ question: "What color is it?",
11884
11909
  slug: "palette",
11885
11910
  status: "authored"
11886
11911
  },
@@ -11896,7 +11921,7 @@ var AXES = [
11896
11921
  status: "authored"
11897
11922
  },
11898
11923
  {
11899
- boundary: "Daylight is the natural light a space receives and the direction it comes from. Aspect is compass-literal and says nothing about the sun: which side is bright depends on the hemisphere, and that consequence is a separate claim on Light. It is not Palette, which is the colour of what is in the room rather than the light falling on it; not Mood, where airy and moody are outcomes a scheme achieves rather than conditions a room has; not Element, which holds the windows, rooflights and luminaires themselves, and artificial lighting is never recorded here; and not Place, which says where a building stands rather than which way a room looks.",
11924
+ boundary: "Daylight is the natural light a space receives and the direction it comes from. Aspect is compass-literal and says nothing about the sun: which side is bright depends on the hemisphere, and that consequence is a separate claim on Light. It is not Palette, which is the color of what is in the room rather than the light falling on it; not Mood, where airy and moody are outcomes a scheme achieves rather than conditions a room has; not Element, which holds the windows, rooflights and luminaires themselves, and artificial lighting is never recorded here; and not Place, which says where a building stands rather than which way a room looks.",
11900
11925
  facets: [
11901
11926
  {
11902
11927
  governance: TAX48_AUTHORED_GOVERNANCE,
@@ -11918,7 +11943,7 @@ var AXES = [
11918
11943
  status: "authored"
11919
11944
  },
11920
11945
  {
11921
- boundary: "Season is the time of year a scheme is designed for or evokes, reached by `evokes` like Place and Period are. It is not Period, which is a date range a season never has; not Palette, which carries the colours a seasonal scheme happens to choose; and not Daylight, which records the light a room receives rather than the calendar a scheme refers to.",
11946
+ boundary: "Season is the time of year a scheme is designed for or evokes, reached by `evokes` like Place and Period are. It is not Period, which is a date range a season never has; not Palette, which carries the colors a seasonal scheme happens to choose; and not Daylight, which records the light a room receives rather than the calendar a scheme refers to.",
11922
11947
  facets: single("season", "Season", SEASON_TERMS, TAX48_AUTHORED_GOVERNANCE),
11923
11948
  governance: TAX48_AUTHORED_GOVERNANCE,
11924
11949
  label: "Season",
@@ -11961,7 +11986,7 @@ var AXES = [
11961
11986
  status: "declared"
11962
11987
  },
11963
11988
  {
11964
- boundary: "How much is going on on the surface: pattern incidence, applied ornament, layering, and the restraint-to-maximalism range. It is not PALETTE, which carries how colour behaves rather than how much incident there is, and it is not STYLE, though several style terms are largely density claims wearing an idiom's name.",
11989
+ boundary: "How much is going on on the surface: pattern incidence, applied ornament, layering, and the restraint-to-maximalism range. It is not PALETTE, which carries how color behaves rather than how much incident there is, and it is not STYLE, though several style terms are largely density claims wearing an idiom's name.",
11965
11990
  facets: [],
11966
11991
  gap: "Identified after the fact, by the axis critique of 21 August 2026, and it is the one real gap that review found. The source vocabularies keep asking this question and no axis here answers it: a rendering pipeline's `patterned`, a materials-retrieval system's `playful_graphic` and `decorative_traditional`, a furnishings retailer's `Eclectic`, and an editorial image library's `Modern Maximalism` against `Warm Minimalism` - a pair that differs chiefly on density and barely on anything else. The materials-retrieval system already carries `ms_pattern_density` at MATERIAL scale, which is the obvious seed, but the room-scale question is not the same one: a room of quiet materials can still be dense with incident. Until this exists, `maximalism` is filed as a style, which flatters it.",
11967
11992
  label: "Density",
@@ -12014,7 +12039,7 @@ var resolveReference = (reference) => INDEX.byKey.get(canonicalKey(reference));
12014
12039
  // src/v1.ts
12015
12040
  var TAXONOMY_BASE_URI = "https://taxonomy.materialinstruments.com";
12016
12041
  var TAXONOMY_SNAPSHOT = "2026-10-02";
12017
- var TAXONOMY_VERSION = "1.14.0";
12042
+ var TAXONOMY_VERSION = "2.1.0";
12018
12043
  var PUBLISHED_V1_BASELINE = "2026-08-30";
12019
12044
  var TAX45_REVIEW_SNAPSHOT = "2026-08-31";
12020
12045
  var LIMESTONE_INTRODUCED = "2026-09-01";
@@ -12291,16 +12316,16 @@ var colorScope = (identifier, referenceKind) => ({
12291
12316
  });
12292
12317
  var WALNUT_MATERIAL = {
12293
12318
  authority: "taxonomy",
12294
- role: "primary",
12319
+ meaningPriority: "primary",
12295
12320
  uri: `${TAXONOMY_BASE_URI}/id/material/walnut`
12296
12321
  };
12297
12322
  var WALNUT_COLOUR = {
12298
12323
  ...colorScope("walnut", NAMED_COLOR_REFERENCE_KIND),
12299
- role: "secondary"
12324
+ meaningPriority: "secondary"
12300
12325
  };
12301
- var ordered = (path, role) => ({
12326
+ var ordered = (path, meaningPriority) => ({
12302
12327
  authority: "taxonomy",
12303
- role,
12328
+ meaningPriority,
12304
12329
  uri: `${TAXONOMY_BASE_URI}/id/${path}`
12305
12330
  });
12306
12331
  var ENGINEERED_QUARTZ_SURFACING = ordered(
@@ -12311,14 +12336,14 @@ var QUARTZ_MINERAL = ordered("material/quartz", "secondary");
12311
12336
  var MELAMINE_BOARD = ordered("material/melamine-faced-board", "primary");
12312
12337
  var MELAMINE_RESIN = ordered("material/melamine", "secondary");
12313
12338
  var HIERARCHY_REVIEW_DATE = "2026-09-22";
12314
- var ORDERED_READING_EVIDENCE = "stored material values in a materials-retrieval system (src-05)";
12339
+ var MEANING_PRIORITY_EVIDENCE = "stored material values in a materials-retrieval system (src-05)";
12315
12340
  var HIERARCHY_REVIEW_LIFECYCLE = {
12316
12341
  introducedAt: HIERARCHY_REVIEW_DATE,
12317
12342
  reviewedAt: HIERARCHY_REVIEW_DATE,
12318
12343
  status: "active"
12319
12344
  };
12320
- var AMBIGUITY_GOVERNANCE = "Taxonomy preserves the governed readings without assigning a default, role, contextual preference, or consumer route.";
12321
- var ORDERED_READING_GOVERNANCE = "The two readings are deliberately separate; the default records trade usage and does not merge the concepts.";
12345
+ var AMBIGUITY_GOVERNANCE = "Taxonomy preserves the governed meanings without assigning a default, meaning priority, contextual preference, or consumer route.";
12346
+ var MEANING_PRIORITY_GOVERNANCE = "The two meanings are deliberately separate; the default records trade usage and does not merge the concepts.";
12322
12347
  var TAX_1_9_0_DATE = "2026-09-27";
12323
12348
  var TAXONOMY_SNAPSHOT_LIFECYCLE = {
12324
12349
  introducedAt: TAX_1_9_0_DATE,
@@ -12351,7 +12376,7 @@ var reviewedTaxonomy = (path) => ({
12351
12376
  authority: "taxonomy",
12352
12377
  uri: `${TAXONOMY_BASE_URI}/id/${path}`
12353
12378
  });
12354
- var referencedCrossover = (phrase, taxonomyPath, colorScopeIdentifier, explanation, definitionSource, introducedAt = HIERARCHY_REVIEW_DATE, additionalReadings = []) => ({
12379
+ var referencedCrossover = (phrase, taxonomyPath, colorScopeIdentifier, explanation, definitionSource, introducedAt = HIERARCHY_REVIEW_DATE, additionalMeanings = []) => ({
12355
12380
  explanation,
12356
12381
  governance: lexicalGovernance(
12357
12382
  AMBIGUITY_GOVERNANCE,
@@ -12362,16 +12387,16 @@ var referencedCrossover = (phrase, taxonomyPath, colorScopeIdentifier, explanati
12362
12387
  },
12363
12388
  { introducedAt, reviewedAt: HIERARCHY_REVIEW_DATE, status: "active" }
12364
12389
  ),
12365
- outcome: "ambiguous",
12366
- phrase,
12367
- readings: [
12390
+ meanings: [
12368
12391
  reviewedTaxonomy(taxonomyPath),
12369
12392
  colorScope(colorScopeIdentifier, NAMED_COLOR_REFERENCE_KIND),
12370
- ...additionalReadings
12371
- ]
12393
+ ...additionalMeanings
12394
+ ],
12395
+ outcome: "ambiguous",
12396
+ phrase
12372
12397
  });
12373
12398
  var WOOD_HANDBOOK5 = "USDA Wood Handbook (2021), chapter 2";
12374
- var colorscope940Crossover = (phrase, taxonomyPath, colorScopeIdentifier, explanation, definitionSource, additionalReadings = []) => ({
12399
+ var colorscope940Crossover = (phrase, taxonomyPath, colorScopeIdentifier, explanation, definitionSource, additionalMeanings = []) => ({
12375
12400
  explanation,
12376
12401
  governance: lexicalGovernance(
12377
12402
  AMBIGUITY_GOVERNANCE,
@@ -12386,39 +12411,39 @@ var colorscope940Crossover = (phrase, taxonomyPath, colorScopeIdentifier, explan
12386
12411
  status: "active"
12387
12412
  }
12388
12413
  ),
12389
- outcome: "ambiguous",
12390
- phrase,
12391
- readings: [
12414
+ meanings: [
12392
12415
  reviewedTaxonomy(taxonomyPath),
12393
12416
  colorScope(colorScopeIdentifier, NAMED_COLOR_REFERENCE_KIND),
12394
- ...additionalReadings
12395
- ]
12417
+ ...additionalMeanings
12418
+ ],
12419
+ outcome: "ambiguous",
12420
+ phrase
12396
12421
  });
12397
12422
  var crossoverAmbiguity = (phrase, taxonomyUri, colorScopeIdentifier, explanation, source, additionalTaxonomyUris = []) => ({
12398
12423
  explanation,
12399
12424
  governance: lexicalGovernance(
12400
- "Taxonomy preserves the evidenced readings without assigning a default, role, contextual preference, or consumer route.",
12425
+ "Taxonomy preserves the evidenced meanings without assigning a default, meaning priority, contextual preference, or consumer route.",
12401
12426
  {
12402
12427
  basis: "evidenced",
12403
12428
  snapshot: PUBLISHED_V1_BASELINE,
12404
12429
  source
12405
12430
  }
12406
12431
  ),
12407
- outcome: "ambiguous",
12408
- phrase,
12409
- readings: [
12432
+ meanings: [
12410
12433
  { authority: "taxonomy", uri: taxonomyUri },
12411
12434
  colorScope(colorScopeIdentifier, NAMED_COLOR_REFERENCE_KIND),
12412
12435
  ...additionalTaxonomyUris.map((uri) => ({
12413
12436
  authority: "taxonomy",
12414
12437
  uri
12415
12438
  }))
12416
- ]
12439
+ ],
12440
+ outcome: "ambiguous",
12441
+ phrase
12417
12442
  });
12418
12443
  var crossoverEquivalent = (phrase, taxonomyUri, explanation, source, snapshot = PUBLISHED_V1_BASELINE, lifecycle = lifecycleFor()) => ({
12419
12444
  explanation,
12420
12445
  governance: lexicalGovernance(
12421
- "Taxonomy records the evidenced material reading without assigning a consumer route.",
12446
+ "Taxonomy records the evidenced material meaning without assigning a consumer route.",
12422
12447
  {
12423
12448
  basis: "evidenced",
12424
12449
  snapshot,
@@ -12430,8 +12455,8 @@ var crossoverEquivalent = (phrase, taxonomyUri, explanation, source, snapshot =
12430
12455
  phrase,
12431
12456
  target: { authority: "taxonomy", uri: taxonomyUri }
12432
12457
  });
12433
- var crossoverTaxonomyAmbiguity = (phrase, readings, explanation, source, snapshot = PUBLISHED_V1_BASELINE, lifecycle = lifecycleFor(), basis = "evidenced") => {
12434
- const [first, second] = readings;
12458
+ var crossoverTaxonomyAmbiguity = (phrase, meanings, explanation, source, snapshot = PUBLISHED_V1_BASELINE, lifecycle = lifecycleFor(), basis = "evidenced") => {
12459
+ const [first, second] = meanings;
12435
12460
  return {
12436
12461
  explanation,
12437
12462
  governance: lexicalGovernance(
@@ -12443,22 +12468,45 @@ var crossoverTaxonomyAmbiguity = (phrase, readings, explanation, source, snapsho
12443
12468
  },
12444
12469
  lifecycle
12445
12470
  ),
12446
- outcome: "ambiguous",
12447
- phrase,
12448
- readings: [
12471
+ meanings: [
12449
12472
  { authority: "taxonomy", uri: first },
12450
12473
  { authority: "taxonomy", uri: second }
12451
- ]
12474
+ ],
12475
+ outcome: "ambiguous",
12476
+ phrase
12452
12477
  };
12453
12478
  };
12454
- var AUTHORED_LEXICAL_ENTRIES = [
12479
+ var MG2620_LEXICAL_REVIEW_DATE = "2026-10-10";
12480
+ var AUTHORED_PHRASE_ENTRIES = [
12481
+ {
12482
+ explanation: "Matt is the British-English spelling of matte for surface sheen. Qualifiers such as semi-matt and full-matt retain their own meanings; this entry does not strip them.",
12483
+ governance: lexicalGovernance(
12484
+ "Primary supplier usage supports spelling equivalence, not a measured gloss threshold or a consumer proposal rate.",
12485
+ {
12486
+ basis: "referenced",
12487
+ snapshot: MG2620_LEXICAL_REVIEW_DATE,
12488
+ source: "MG-2620 lexical review; Marazzi matt surface finish, https://www.marazzigroup.com/blog/are-glossy-or-matt-coverings-better-for-your-bathroom-we-explain-the-benefits-and-differences-and-provide-useful-tips/; Tikkurila matt/Matte finish usage, https://tikkurila.com/how-choose-right-paint-your-interior-walls-and-ceilings"
12489
+ },
12490
+ {
12491
+ introducedAt: MG2620_LEXICAL_REVIEW_DATE,
12492
+ reviewedAt: MG2620_LEXICAL_REVIEW_DATE,
12493
+ status: "active"
12494
+ }
12495
+ ),
12496
+ outcome: "equivalent",
12497
+ phrase: "matt",
12498
+ target: {
12499
+ authority: "taxonomy",
12500
+ uri: `${TAXONOMY_BASE_URI}/id/finish/sheen/matte`
12501
+ }
12502
+ },
12455
12503
  crossoverTaxonomyAmbiguity(
12456
12504
  "herringbone or chevron",
12457
12505
  [
12458
12506
  `${TAXONOMY_BASE_URI}/id/pattern/type/herringbone`,
12459
12507
  `${TAXONOMY_BASE_URI}/id/pattern/type/chevron`
12460
12508
  ],
12461
- "The former combined pattern label names two distinct motif readings. It does not identify an installation layout or physical unit shape without separate evidence.",
12509
+ "The former combined pattern label names two distinct motif meanings. It does not identify an installation layout or physical unit shape without separate evidence.",
12462
12510
  "Linear TAX-45 reviewed implementation contract",
12463
12511
  TAX45_REVIEW_SNAPSHOT,
12464
12512
  {
@@ -12474,7 +12522,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
12474
12522
  `${TAXONOMY_BASE_URI}/id/pattern/type/herringbone`,
12475
12523
  `${TAXONOMY_BASE_URI}/id/pattern/type/chevron`
12476
12524
  ],
12477
- "The furnishings retailer's compound phrase did not record which of the two distinct motif readings was intended.",
12525
+ "The furnishings retailer's compound phrase did not record which of the two distinct motif meanings was intended.",
12478
12526
  `${RETAIL_PATTERN_SOURCE}, reconciled by Linear TAX-45`,
12479
12527
  TAX45_REVIEW_SNAPSHOT,
12480
12528
  {
@@ -12490,7 +12538,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
12490
12538
  `${TAXONOMY_BASE_URI}/id/product-category/mosaic-tile`,
12491
12539
  `${TAXONOMY_BASE_URI}/id/format/mosaic`
12492
12540
  ],
12493
- "Mosaic can name a purchasable mosaic-tile product or the small-piece supply format; it is neither inherently a pattern nor a substance. Consumers must union any exact ColorScope named-paint reading with these domain readings rather than let an exact Taxonomy phrase shadow the external identity.",
12541
+ "Mosaic can name a purchasable mosaic-tile product or the small-piece supply format; it is neither inherently a pattern nor a substance. Consumers must union any exact ColorScope named-paint meaning with these domain meanings rather than let an exact Taxonomy phrase shadow the external identity.",
12494
12542
  `${searchCorpusEvidence("mosaic")}; Uniclass Pr_35_93_96_53 Mosaic tiles; consumer authority-union boundary reviewed 2026-08-31`,
12495
12543
  SEARCH_CORPUS_SNAPSHOT,
12496
12544
  {
@@ -12500,9 +12548,9 @@ var AUTHORED_LEXICAL_ENTRIES = [
12500
12548
  }
12501
12549
  ),
12502
12550
  {
12503
- explanation: "Blue is a ColorScope colour-family reading; Taxonomy references that authority rather than minting a rival colour identity.",
12551
+ explanation: "Blue is a ColorScope color-family meaning; Taxonomy references that authority rather than minting a rival color identity.",
12504
12552
  governance: lexicalGovernance(
12505
- "The ColorScope family is the single governed reading of the unqualified colour word.",
12553
+ "The ColorScope family is the single governed meaning of the unqualified color word.",
12506
12554
  {
12507
12555
  basis: "vendored",
12508
12556
  snapshot: PUBLISHED_V1_BASELINE,
@@ -12517,14 +12565,14 @@ var AUTHORED_LEXICAL_ENTRIES = [
12517
12565
  "alabaster",
12518
12566
  `${TAXONOMY_BASE_URI}/id/material/alabaster`,
12519
12567
  "alabaster",
12520
- "Alabaster can name decorative gypsum stone or the ColorScope named colour Alabaster; neither reading establishes the other.",
12521
- `${crossoverSource("alabaster")}; @instruments/colorscope 9.4.0 id "alabaster", family cream, matching the retired "cream-soft-cream-white" reading's cream family`
12568
+ "Alabaster can name decorative gypsum stone or the ColorScope named color Alabaster; neither meaning establishes the other.",
12569
+ `${crossoverSource("alabaster")}; @instruments/colorscope 9.4.0 id "alabaster", family cream, matching the retired "cream-soft-cream-white" meaning's cream family`
12522
12570
  ),
12523
12571
  crossoverAmbiguity(
12524
12572
  "brass",
12525
12573
  `${TAXONOMY_BASE_URI}/id/material/brass`,
12526
12574
  "brass",
12527
- "Brass can name a copper-zinc alloy, an exposed applied brass finish, or a ColorScope named colour; none establishes either of the others.",
12575
+ "Brass can name a copper-zinc alloy, an exposed applied brass finish, or a ColorScope named color; none establishes either of the others.",
12528
12576
  crossoverSource("brass"),
12529
12577
  [`${TAXONOMY_BASE_URI}/id/finish/treatment/brass`]
12530
12578
  ),
@@ -12532,105 +12580,105 @@ var AUTHORED_LEXICAL_ENTRIES = [
12532
12580
  "bronze",
12533
12581
  `${TAXONOMY_BASE_URI}/id/material/bronze`,
12534
12582
  "bronze",
12535
- "Bronze can name a copper-alloy family or a ColorScope named colour; the unmodified word does not identify a specific composition.",
12583
+ "Bronze can name a copper-alloy family or a ColorScope named color; the unmodified word does not identify a specific composition.",
12536
12584
  crossoverSource("bronze")
12537
12585
  ),
12538
12586
  crossoverAmbiguity(
12539
12587
  "chrome",
12540
12588
  `${TAXONOMY_BASE_URI}/id/finish/treatment/chrome`,
12541
12589
  "chrome",
12542
- "Chrome can name a metallic chromium coating or a ColorScope named colour; it is not silently normalized to chromium as a material.",
12590
+ "Chrome can name a metallic chromium coating or a ColorScope named color; it is not silently normalized to chromium as a material.",
12543
12591
  crossoverSource("chrome")
12544
12592
  ),
12545
12593
  crossoverAmbiguity(
12546
12594
  "cherry",
12547
12595
  `${TAXONOMY_BASE_URI}/id/material/cherry`,
12548
12596
  "cherry",
12549
- "Cherry can name timber or the ColorScope named colour Cherry; the common name does not prove species or colour.",
12550
- `${crossoverSource("cherry")}; @instruments/colorscope 9.4.0 id "cherry", family red, matching the retired "red-warm-cherry-red" reading's red family`
12597
+ "Cherry can name timber or the ColorScope named color Cherry; the common name does not prove species or color.",
12598
+ `${crossoverSource("cherry")}; @instruments/colorscope 9.4.0 id "cherry", family red, matching the retired "red-warm-cherry-red" meaning's red family`
12551
12599
  ),
12552
12600
  crossoverAmbiguity(
12553
12601
  "chestnut",
12554
12602
  `${TAXONOMY_BASE_URI}/id/material/chestnut`,
12555
12603
  "chestnut",
12556
- "Chestnut can name timber or a ColorScope named colour; neither reading proves species, construction, or appearance.",
12604
+ "Chestnut can name timber or a ColorScope named color; neither meaning proves species, construction, or appearance.",
12557
12605
  crossoverSource("chestnut")
12558
12606
  ),
12559
12607
  crossoverAmbiguity(
12560
12608
  "clay",
12561
12609
  `${TAXONOMY_BASE_URI}/id/material/clay`,
12562
12610
  "clay",
12563
- "Clay can name a fine-grained earthy material or a ColorScope named colour; the word alone proves neither firing nor appearance.",
12611
+ "Clay can name a fine-grained earthy material or a ColorScope named color; the word alone proves neither firing nor appearance.",
12564
12612
  crossoverSource("clay")
12565
12613
  ),
12566
12614
  crossoverAmbiguity(
12567
12615
  "copper",
12568
12616
  `${TAXONOMY_BASE_URI}/id/material/copper`,
12569
12617
  "copper",
12570
- "Copper can name a metal or a ColorScope named colour; colour resemblance does not establish copper content.",
12618
+ "Copper can name a metal or a ColorScope named color; color resemblance does not establish copper content.",
12571
12619
  crossoverSource("copper")
12572
12620
  ),
12573
12621
  crossoverAmbiguity(
12574
12622
  "denim",
12575
12623
  `${TAXONOMY_BASE_URI}/id/material/denim`,
12576
12624
  "denim",
12577
- "Denim can name a woven fabric construction or a ColorScope named colour; denim need not be blue.",
12625
+ "Denim can name a woven fabric construction or a ColorScope named color; denim need not be blue.",
12578
12626
  crossoverSource("denim")
12579
12627
  ),
12580
12628
  crossoverAmbiguity(
12581
12629
  "ebony",
12582
12630
  `${TAXONOMY_BASE_URI}/id/material/ebony`,
12583
12631
  "ebony",
12584
- "Ebony can name traded timber or a ColorScope named colour; the trade name does not prove botanical identity or black colour.",
12632
+ "Ebony can name traded timber or a ColorScope named color; the trade name does not prove botanical identity or black color.",
12585
12633
  crossoverSource("ebony")
12586
12634
  ),
12587
12635
  crossoverAmbiguity(
12588
12636
  "gold",
12589
12637
  `${TAXONOMY_BASE_URI}/id/material/gold`,
12590
12638
  "gold",
12591
- "Gold can name the metallic element or a ColorScope named colour; appearance does not establish composition or coating.",
12639
+ "Gold can name the metallic element or a ColorScope named color; appearance does not establish composition or coating.",
12592
12640
  crossoverSource("gold")
12593
12641
  ),
12594
12642
  crossoverAmbiguity(
12595
12643
  "gunmetal",
12596
12644
  `${TAXONOMY_BASE_URI}/id/material/gunmetal`,
12597
12645
  "gunmetal",
12598
- "Gunmetal can name a casting-alloy family or a ColorScope named colour; grade and appearance remain separate claims.",
12646
+ "Gunmetal can name a casting-alloy family or a ColorScope named color; grade and appearance remain separate claims.",
12599
12647
  crossoverSource("gunmetal")
12600
12648
  ),
12601
12649
  crossoverAmbiguity(
12602
12650
  "iron",
12603
12651
  `${TAXONOMY_BASE_URI}/id/material/iron`,
12604
12652
  "iron",
12605
- "Iron can name the metallic element or a ColorScope named colour; the bare word does not settle material form or appearance.",
12653
+ "Iron can name the metallic element or a ColorScope named color; the bare word does not settle material form or appearance.",
12606
12654
  crossoverSource("iron")
12607
12655
  ),
12608
12656
  crossoverAmbiguity(
12609
12657
  "jade",
12610
12658
  `${TAXONOMY_BASE_URI}/id/material/jade`,
12611
12659
  "jade",
12612
- "Jade can name an umbrella gem material or a ColorScope named colour; jade is not one mineral and need not be green.",
12660
+ "Jade can name an umbrella gem material or a ColorScope named color; jade is not one mineral and need not be green.",
12613
12661
  crossoverSource("jade")
12614
12662
  ),
12615
12663
  crossoverAmbiguity(
12616
12664
  "linen",
12617
12665
  `${TAXONOMY_BASE_URI}/id/material/linen`,
12618
12666
  "linen",
12619
- "Linen can name a flax-derived material or a ColorScope named colour; colour does not establish fibre composition.",
12667
+ "Linen can name a flax-derived material or a ColorScope named color; color does not establish fibre composition.",
12620
12668
  crossoverSource("linen")
12621
12669
  ),
12622
12670
  crossoverAmbiguity(
12623
12671
  "mahogany",
12624
12672
  `${TAXONOMY_BASE_URI}/id/material/mahogany`,
12625
12673
  "mahogany",
12626
- "Mahogany can name commercially grouped timber or a ColorScope named colour; neither reading proves species or appearance.",
12674
+ "Mahogany can name commercially grouped timber or a ColorScope named color; neither meaning proves species or appearance.",
12627
12675
  crossoverSource("mahogany")
12628
12676
  ),
12629
12677
  crossoverAmbiguity(
12630
12678
  "nickel",
12631
12679
  `${TAXONOMY_BASE_URI}/id/material/nickel`,
12632
12680
  "nickel",
12633
- "Nickel can name a bulk metallic material, an electrodeposited finish, or a ColorScope named colour; the bare word does not select among them.",
12681
+ "Nickel can name a bulk metallic material, an electrodeposited finish, or a ColorScope named color; the bare word does not select among them.",
12634
12682
  crossoverSource("nickel"),
12635
12683
  [`${TAXONOMY_BASE_URI}/id/finish/treatment/nickel`]
12636
12684
  ),
@@ -12638,63 +12686,63 @@ var AUTHORED_LEXICAL_ENTRIES = [
12638
12686
  "obsidian",
12639
12687
  `${TAXONOMY_BASE_URI}/id/material/obsidian`,
12640
12688
  "obsidian",
12641
- "Obsidian can name volcanic glass or a ColorScope named colour; the material is not necessarily black.",
12689
+ "Obsidian can name volcanic glass or a ColorScope named color; the material is not necessarily black.",
12642
12690
  crossoverSource("obsidian")
12643
12691
  ),
12644
12692
  crossoverAmbiguity(
12645
12693
  "onyx",
12646
12694
  `${TAXONOMY_BASE_URI}/id/material/onyx`,
12647
12695
  "onyx",
12648
- "Onyx can name commercial architectural stone or a ColorScope named colour; architectural onyx is not necessarily black.",
12696
+ "Onyx can name commercial architectural stone or a ColorScope named color; architectural onyx is not necessarily black.",
12649
12697
  crossoverSource("onyx")
12650
12698
  ),
12651
12699
  crossoverAmbiguity(
12652
12700
  "pewter",
12653
12701
  `${TAXONOMY_BASE_URI}/id/material/pewter`,
12654
12702
  "pewter",
12655
- "Pewter can name a variable tin-alloy family or a ColorScope named colour; composition and appearance remain separate.",
12703
+ "Pewter can name a variable tin-alloy family or a ColorScope named color; composition and appearance remain separate.",
12656
12704
  crossoverSource("pewter")
12657
12705
  ),
12658
12706
  crossoverAmbiguity(
12659
12707
  "platinum",
12660
12708
  `${TAXONOMY_BASE_URI}/id/material/platinum`,
12661
12709
  "platinum",
12662
- "Platinum can name a metal or a ColorScope named colour; solid metal, plating, and appearance require separate evidence.",
12710
+ "Platinum can name a metal or a ColorScope named color; solid metal, plating, and appearance require separate evidence.",
12663
12711
  crossoverSource("platinum")
12664
12712
  ),
12665
12713
  crossoverAmbiguity(
12666
12714
  "rosewood",
12667
12715
  `${TAXONOMY_BASE_URI}/id/material/rosewood`,
12668
12716
  "rosewood",
12669
- "Rosewood can name traded timber or a ColorScope named colour; species and appearance remain separate claims.",
12717
+ "Rosewood can name traded timber or a ColorScope named color; species and appearance remain separate claims.",
12670
12718
  crossoverSource("rosewood")
12671
12719
  ),
12672
12720
  crossoverAmbiguity(
12673
12721
  "silver",
12674
12722
  `${TAXONOMY_BASE_URI}/id/material/silver`,
12675
12723
  "silver",
12676
- "Silver can name the metallic element or a ColorScope named colour; appearance does not establish elemental silver.",
12724
+ "Silver can name the metallic element or a ColorScope named color; appearance does not establish elemental silver.",
12677
12725
  crossoverSource("silver")
12678
12726
  ),
12679
12727
  crossoverAmbiguity(
12680
12728
  "slate",
12681
12729
  `${TAXONOMY_BASE_URI}/id/material/slate`,
12682
12730
  "slate-gray",
12683
- "Slate can name dimension stone or the ColorScope named colour Slate Gray; neither reading implies the other.",
12684
- `${crossoverSource("slate")}; @instruments/colorscope 9.4.0 offers "slate-blue" (family blue) and "slate-gray" (family gray); "slate-gray" decided, matching the retired "gray-muted-slate" reading's gray family`
12731
+ "Slate can name dimension stone or the ColorScope named color Slate Gray; neither meaning implies the other.",
12732
+ `${crossoverSource("slate")}; @instruments/colorscope 9.4.0 offers "slate-blue" (family blue) and "slate-gray" (family gray); "slate-gray" decided, matching the retired "gray-muted-slate" meaning's gray family`
12685
12733
  ),
12686
12734
  crossoverAmbiguity(
12687
12735
  "steel",
12688
12736
  `${TAXONOMY_BASE_URI}/id/material/steel`,
12689
12737
  "steel",
12690
- "Steel can name an iron-carbon alloy family or a ColorScope named colour; appearance does not identify a steel grade.",
12738
+ "Steel can name an iron-carbon alloy family or a ColorScope named color; appearance does not identify a steel grade.",
12691
12739
  crossoverSource("steel")
12692
12740
  ),
12693
12741
  crossoverAmbiguity(
12694
12742
  "stone",
12695
12743
  `${TAXONOMY_BASE_URI}/id/material/stone`,
12696
12744
  "stone",
12697
- "Stone can name a specific building material, a retrieval-oriented material family, or a ColorScope named colour; none is a consumer route.",
12745
+ "Stone can name a specific building material, a retrieval-oriented material family, or a ColorScope named color; none is a consumer route.",
12698
12746
  crossoverSource("stone"),
12699
12747
  [`${TAXONOMY_BASE_URI}/id/material-family/stone`]
12700
12748
  ),
@@ -12702,11 +12750,11 @@ var AUTHORED_LEXICAL_ENTRIES = [
12702
12750
  "terracotta",
12703
12751
  `${TAXONOMY_BASE_URI}/id/material/terracotta`,
12704
12752
  "terracotta",
12705
- "Terracotta can name a fired-clay material or a ColorScope named colour; firing and composition do not establish orange appearance.",
12753
+ "Terracotta can name a fired-clay material or a ColorScope named color; firing and composition do not establish orange appearance.",
12706
12754
  crossoverSource("terracotta")
12707
12755
  ),
12708
12756
  {
12709
- explanation: "Brick can name fired clay masonry material or a ColorScope named colour; the material need not be red and the colour is not a substance.",
12757
+ explanation: "Brick can name fired clay masonry material or a ColorScope named color; the material need not be red and the color is not a substance.",
12710
12758
  governance: lexicalGovernance(
12711
12759
  AMBIGUITY_GOVERNANCE,
12712
12760
  {
@@ -12716,21 +12764,21 @@ var AUTHORED_LEXICAL_ENTRIES = [
12716
12764
  },
12717
12765
  REVIEW_LIFECYCLE
12718
12766
  ),
12719
- outcome: "ambiguous",
12720
- phrase: "brick",
12721
- readings: [
12767
+ meanings: [
12722
12768
  reviewedTaxonomy("material/brick"),
12723
12769
  colorScope("brick", NAMED_COLOR_REFERENCE_KIND)
12724
- ]
12770
+ ],
12771
+ outcome: "ambiguous",
12772
+ phrase: "brick"
12725
12773
  },
12726
- // Colour-material crossovers found by comparing every material label with the installed
12727
- // ColorScope names on 2026-09-22. No retrieval evidence orders either reading, so each keeps
12728
- // both without a default or a role, as brick does.
12774
+ // Color-material crossovers found by comparing every material label with the installed
12775
+ // ColorScope names on 2026-09-22. No retrieval evidence orders either meaning, so each keeps
12776
+ // both without a default or a meaningPriority, as brick does.
12729
12777
  referencedCrossover(
12730
12778
  "porcelain",
12731
12779
  "material/porcelain",
12732
12780
  "porcelain",
12733
- "Porcelain can name a vitrified ceramic body or a ColorScope named colour; the colour does not establish the body.",
12781
+ "Porcelain can name a vitrified ceramic body or a ColorScope named color; the color does not establish the body.",
12734
12782
  "ISO 13006:2018; ANSI A137.1",
12735
12783
  PUBLISHED_V1_BASELINE
12736
12784
  ),
@@ -12738,7 +12786,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
12738
12786
  "sand",
12739
12787
  "material/sand",
12740
12788
  "sand",
12741
- "Sand can name loose mineral grains, a ColorScope named colour, or the beige colour family ColorScope lists it under; none implies another.",
12789
+ "Sand can name loose mineral grains, a ColorScope named color, or the beige color family ColorScope lists it under; none implies another.",
12742
12790
  "ISO 14688-1:2017",
12743
12791
  PUBLISHED_V1_BASELINE,
12744
12792
  [colorScope("beige", COLOR_FAMILY_REFERENCE_KIND)]
@@ -12747,223 +12795,223 @@ var AUTHORED_LEXICAL_ENTRIES = [
12747
12795
  "camel",
12748
12796
  "material/camel-hair",
12749
12797
  "camel",
12750
- "Camel can name hair from a camel or a ColorScope named colour; the fibre need not be that colour.",
12798
+ "Camel can name hair from a camel or a ColorScope named color; the fibre need not be that color.",
12751
12799
  "Regulation (EU) No 1007/2011 Annex I row 2"
12752
12800
  ),
12753
12801
  referencedCrossover(
12754
12802
  "ash",
12755
12803
  "material/ash",
12756
12804
  "ash",
12757
- "Ash can name timber of the genus Fraxinus or the ColorScope named colour Ash; neither reading implies the other.",
12758
- `USDA Wood Handbook (2021), chapter 2; @instruments/colorscope 9.4.0 id "ash", family gray, matching the retired "gray-light-ash-gray" reading's gray family`
12805
+ "Ash can name timber of the genus Fraxinus or the ColorScope named color Ash; neither meaning implies the other.",
12806
+ `USDA Wood Handbook (2021), chapter 2; @instruments/colorscope 9.4.0 id "ash", family gray, matching the retired "gray-light-ash-gray" meaning's gray family`
12759
12807
  ),
12760
12808
  referencedCrossover(
12761
12809
  "eucalyptus",
12762
12810
  "material/eucalyptus",
12763
12811
  "eucalyptus",
12764
- "Eucalyptus can name timber of the genus Eucalyptus or a ColorScope named colour; neither reading implies the other.",
12812
+ "Eucalyptus can name timber of the genus Eucalyptus or a ColorScope named color; neither meaning implies the other.",
12765
12813
  "EN 13556:2003"
12766
12814
  ),
12767
12815
  referencedCrossover(
12768
12816
  "pine",
12769
12817
  "material/pine",
12770
12818
  "pine-green",
12771
- "Pine can name timber of the genus Pinus or the ColorScope named colour Pine Green; neither reading implies the other.",
12772
- `USDA Wood Handbook (2021), chapter 2; @instruments/colorscope 9.4.0 has no flat "pine" id, so id "pine-green" (family green), matching the retired "green-deep-pine" reading's green family`
12819
+ "Pine can name timber of the genus Pinus or the ColorScope named color Pine Green; neither meaning implies the other.",
12820
+ `USDA Wood Handbook (2021), chapter 2; @instruments/colorscope 9.4.0 has no flat "pine" id, so id "pine-green" (family green), matching the retired "green-deep-pine" meaning's green family`
12773
12821
  ),
12774
12822
  // ColorScope 9.4.0 crossovers, found by re-running the 2026-09-22 comparison against the
12775
12823
  // installed 9.4.0 release. `chromium` reads against ColorScope's own alias, not a separate
12776
- // colour: 9.4.0's `chrome` colour carries the alias "Chromium", so the material label collides
12777
- // with `chrome`'s identity, not with a colour named `chromium`. It is a different phrase from
12778
- // `chrome` itself, whose two taxonomy readings (a finish and a material) are unrelated to
12824
+ // color: 9.4.0's `chrome` color carries the alias "Chromium", so the material label collides
12825
+ // with `chrome`'s identity, not with a color named `chromium`. It is a different phrase from
12826
+ // `chrome` itself, whose two taxonomy meanings (a finish and a material) are unrelated to
12779
12827
  // `material/chromium`.
12780
12828
  colorscope940Crossover(
12781
12829
  "granite",
12782
12830
  "material/granite",
12783
12831
  "granite",
12784
- "Granite can name the quarried igneous rock or the ColorScope named colour Granite; neither reading implies the other.",
12832
+ "Granite can name the quarried igneous rock or the ColorScope named color Granite; neither meaning implies the other.",
12785
12833
  "Wikidata Q41177 granite, https://www.wikidata.org/wiki/Q41177"
12786
12834
  ),
12787
12835
  colorscope940Crossover(
12788
12836
  "sandstone",
12789
12837
  "material/sandstone",
12790
12838
  "sandstone",
12791
- "Sandstone can name the quarried sedimentary rock or the ColorScope named colour Sandstone; neither reading implies the other.",
12839
+ "Sandstone can name the quarried sedimentary rock or the ColorScope named color Sandstone; neither meaning implies the other.",
12792
12840
  "Wikidata Q13085 sandstone, https://www.wikidata.org/wiki/Q13085"
12793
12841
  ),
12794
12842
  colorscope940Crossover(
12795
12843
  "basalt",
12796
12844
  "material/basalt",
12797
12845
  "basalt",
12798
- "Basalt can name the quarried volcanic rock or the ColorScope named colour Basalt; neither reading implies the other.",
12846
+ "Basalt can name the quarried volcanic rock or the ColorScope named color Basalt; neither meaning implies the other.",
12799
12847
  "Wikidata Q43338 basalt, https://www.wikidata.org/wiki/Q43338"
12800
12848
  ),
12801
12849
  colorscope940Crossover(
12802
12850
  "soapstone",
12803
12851
  "material/soapstone",
12804
12852
  "soapstone",
12805
- "Soapstone can name the quarried talc-rich rock or the ColorScope named colour Soapstone; neither reading implies the other.",
12853
+ "Soapstone can name the quarried talc-rich rock or the ColorScope named color Soapstone; neither meaning implies the other.",
12806
12854
  "Wikidata Q707896 soapstone, https://www.wikidata.org/wiki/Q707896"
12807
12855
  ),
12808
12856
  colorscope940Crossover(
12809
12857
  "hemp",
12810
12858
  "material/hemp",
12811
12859
  "hemp",
12812
- "Hemp can name the Cannabis sativa bast fibre or the ColorScope named colour Hemp; neither reading implies the other.",
12860
+ "Hemp can name the Cannabis sativa bast fibre or the ColorScope named color Hemp; neither meaning implies the other.",
12813
12861
  "Wikidata Q13414920 hemp fiber, https://www.wikidata.org/wiki/Q13414920"
12814
12862
  ),
12815
12863
  colorscope940Crossover(
12816
12864
  "rattan",
12817
12865
  "material/rattan",
12818
12866
  "rattan",
12819
- "Rattan can name the climbing-palm stem material or the ColorScope named colour Rattan; neither reading implies the other.",
12867
+ "Rattan can name the climbing-palm stem material or the ColorScope named color Rattan; neither meaning implies the other.",
12820
12868
  "Wikidata Q323021 rattan, https://www.wikidata.org/wiki/Q323021"
12821
12869
  ),
12822
12870
  colorscope940Crossover(
12823
12871
  "gypsum",
12824
12872
  "material/gypsum",
12825
12873
  "gypsum",
12826
- "Gypsum can name the mineral calcium sulfate dihydrate or the ColorScope named colour Gypsum; neither reading implies the other.",
12874
+ "Gypsum can name the mineral calcium sulfate dihydrate or the ColorScope named color Gypsum; neither meaning implies the other.",
12827
12875
  "EN 13279-1:2008"
12828
12876
  ),
12829
12877
  colorscope940Crossover(
12830
12878
  "cement",
12831
12879
  "material/cement",
12832
12880
  "cement",
12833
- "Cement can name the hydraulic binder or the ColorScope named colour Cement; neither reading implies the other.",
12881
+ "Cement can name the hydraulic binder or the ColorScope named color Cement; neither meaning implies the other.",
12834
12882
  "EN 197-1:2011"
12835
12883
  ),
12836
12884
  colorscope940Crossover(
12837
12885
  "carbon black",
12838
12886
  "material/carbon-black",
12839
12887
  "carbon-black",
12840
- "Carbon black can name the pigment and reinforcing filler or the ColorScope named colour Carbon Black; neither reading implies the other.",
12888
+ "Carbon black can name the pigment and reinforcing filler or the ColorScope named color Carbon Black; neither meaning implies the other.",
12841
12889
  "CAS Registry 1333-86-4"
12842
12890
  ),
12843
12891
  colorscope940Crossover(
12844
12892
  "titanium white",
12845
12893
  "material/titanium-dioxide",
12846
12894
  "titanium-white",
12847
- "Titanium white can name the titanium dioxide pigment or the ColorScope named colour Titanium White; neither reading implies the other.",
12895
+ "Titanium white can name the titanium dioxide pigment or the ColorScope named color Titanium White; neither meaning implies the other.",
12848
12896
  "CAS Registry 13463-67-7"
12849
12897
  ),
12850
12898
  colorscope940Crossover(
12851
12899
  "chromium",
12852
12900
  "material/chromium",
12853
12901
  "chrome",
12854
- 'Chromium can name the metallic element or the ColorScope named colour Chrome, of which "Chromium" is an alias; neither reading implies the other.',
12902
+ 'Chromium can name the metallic element or the ColorScope named color Chrome, of which "Chromium" is an alias; neither meaning implies the other.',
12855
12903
  "CAS Registry 7440-47-3"
12856
12904
  ),
12857
12905
  // `shell` and `seashell` are one material term (`material/shell`) with two label forms, and
12858
- // 9.4.0 gives each its own, different colour: `shell` collides with Shell Pink, `seashell` with
12859
- // the separate colour Seashell. Two phrases, not one, because the two labels now resolve to two
12860
- // different colours.
12906
+ // 9.4.0 gives each its own, different color: `shell` collides with Shell Pink, `seashell` with
12907
+ // the separate color Seashell. Two phrases, not one, because the two labels now resolve to two
12908
+ // different colors.
12861
12909
  colorscope940Crossover(
12862
12910
  "shell",
12863
12911
  "material/shell",
12864
12912
  "shell-pink",
12865
- "Shell can name the mollusc-shell material or the ColorScope named colour Shell Pink; neither reading implies the other.",
12913
+ "Shell can name the mollusc-shell material or the ColorScope named color Shell Pink; neither meaning implies the other.",
12866
12914
  "Wikidata Q213096 seashell, https://www.wikidata.org/wiki/Q213096"
12867
12915
  ),
12868
12916
  colorscope940Crossover(
12869
12917
  "seashell",
12870
12918
  "material/shell",
12871
12919
  "seashell",
12872
- "Seashell can name the mollusc-shell material or the ColorScope named colour Seashell; neither reading implies the other.",
12920
+ "Seashell can name the mollusc-shell material or the ColorScope named color Seashell; neither meaning implies the other.",
12873
12921
  "Wikidata Q213096 seashell, https://www.wikidata.org/wiki/Q213096"
12874
12922
  ),
12875
12923
  colorscope940Crossover(
12876
12924
  "cashmere",
12877
12925
  "material/cashmere",
12878
12926
  "cashmere",
12879
- "Cashmere can name the goat-hair fibre or the ColorScope named colour Cashmere; neither reading implies the other.",
12927
+ "Cashmere can name the goat-hair fibre or the ColorScope named color Cashmere; neither meaning implies the other.",
12880
12928
  "Regulation (EU) No 1007/2011 Annex I row 2"
12881
12929
  ),
12882
12930
  colorscope940Crossover(
12883
12931
  "hickory",
12884
12932
  "material/hickory",
12885
12933
  "hickory",
12886
- "Hickory can name timber of the genus Carya or the ColorScope named colour Hickory; neither reading implies the other.",
12934
+ "Hickory can name timber of the genus Carya or the ColorScope named color Hickory; neither meaning implies the other.",
12887
12935
  WOOD_HANDBOOK5
12888
12936
  ),
12889
12937
  colorscope940Crossover(
12890
12938
  "pear",
12891
12939
  "material/pear",
12892
12940
  "pear",
12893
- "Pear can name timber of Pyrus communis or the ColorScope named colour Pear; neither reading implies the other.",
12941
+ "Pear can name timber of Pyrus communis or the ColorScope named color Pear; neither meaning implies the other.",
12894
12942
  WOOD_HANDBOOK5
12895
12943
  ),
12896
12944
  colorscope940Crossover(
12897
12945
  "pecan",
12898
12946
  "material/carya-illinoinensis",
12899
12947
  "pecan",
12900
- "Pecan can name timber of Carya illinoinensis or the ColorScope named colour Pecan; neither reading implies the other.",
12948
+ "Pecan can name timber of Carya illinoinensis or the ColorScope named color Pecan; neither meaning implies the other.",
12901
12949
  WOOD_HANDBOOK5
12902
12950
  ),
12903
12951
  colorscope940Crossover(
12904
12952
  "cedar",
12905
12953
  "material/cedar",
12906
12954
  "cedar",
12907
- "Cedar can name softwood traded as cedar or the ColorScope named colour Cedar; neither reading implies the other.",
12955
+ "Cedar can name softwood traded as cedar or the ColorScope named color Cedar; neither meaning implies the other.",
12908
12956
  WOOD_HANDBOOK5
12909
12957
  ),
12910
12958
  colorscope940Crossover(
12911
12959
  "redwood",
12912
12960
  "material/redwood",
12913
12961
  "redwood",
12914
- "Redwood can name timber of Sequoia sempervirens or the ColorScope named colour Redwood; neither reading implies the other.",
12962
+ "Redwood can name timber of Sequoia sempervirens or the ColorScope named color Redwood; neither meaning implies the other.",
12915
12963
  WOOD_HANDBOOK5
12916
12964
  ),
12917
12965
  // Quartz and melamine each name two materials in one word, and the trade uses the word for one
12918
12966
  // of them first: `quartz` is the engineered surfacing before the mineral, `melamine` the faced
12919
- // board before the resin. Both readings are on the material axis, so the ordering is a default
12920
- // and a role, never a colour-or-material context. Decided 2026-09-22 and recorded in ADR 0007.
12967
+ // board before the resin. Both meanings are on the material axis, so the ordering is a default
12968
+ // and a meaningPriority, never a color-or-material context. Decided 2026-09-22 and recorded in ADR 0007.
12921
12969
  //
12922
12970
  // The evidence, read from the consumer's stored material values on 2026-09-22 and kept here
12923
12971
  // because a count is not ours to publish: of 1,490 stored quartz rows, 801 sat on large-format
12924
12972
  // slab, 102 on solid surface and 98 on natural stone; of 2,816 stored melamine rows, 2,650 sat on
12925
12973
  // laminate surface.
12926
12974
  {
12927
- defaultTarget: ENGINEERED_QUARTZ_SURFACING,
12975
+ defaultMeaning: ENGINEERED_QUARTZ_SURFACING,
12928
12976
  explanation: "Quartz can name the engineered quartz surfacing sold for worktops or the mineral silicon dioxide; the trade means the surfacing first, and neither is a child of the other.",
12929
12977
  governance: lexicalGovernance(
12930
- ORDERED_READING_GOVERNANCE,
12978
+ MEANING_PRIORITY_GOVERNANCE,
12931
12979
  {
12932
12980
  basis: "evidenced",
12933
12981
  snapshot: HIERARCHY_REVIEW_DATE,
12934
- source: `${ORDERED_READING_EVIDENCE}, quartz rows by product type; EN 14618 and EN 15285 (agglomerated stone); CAS 14808-60-7 (quartz)`
12982
+ source: `${MEANING_PRIORITY_EVIDENCE}, quartz rows by product type; EN 14618 and EN 15285 (agglomerated stone); CAS 14808-60-7 (quartz)`
12935
12983
  },
12936
12984
  HIERARCHY_REVIEW_LIFECYCLE
12937
12985
  ),
12986
+ meanings: [ENGINEERED_QUARTZ_SURFACING, QUARTZ_MINERAL],
12938
12987
  outcome: "ambiguous",
12939
- phrase: "quartz",
12940
- readings: [ENGINEERED_QUARTZ_SURFACING, QUARTZ_MINERAL]
12988
+ phrase: "quartz"
12941
12989
  },
12942
12990
  {
12943
- defaultTarget: MELAMINE_BOARD,
12991
+ defaultMeaning: MELAMINE_BOARD,
12944
12992
  explanation: "Melamine can name melamine-faced board, the panel, or melamine-formaldehyde resin, the polymer its facing is made of; joinery and retail mean the board first.",
12945
12993
  governance: lexicalGovernance(
12946
- ORDERED_READING_GOVERNANCE,
12994
+ MEANING_PRIORITY_GOVERNANCE,
12947
12995
  {
12948
12996
  basis: "evidenced",
12949
12997
  snapshot: HIERARCHY_REVIEW_DATE,
12950
- source: `${ORDERED_READING_EVIDENCE}, melamine rows by product type; EN 14322 (melamine faced boards); ISO 1043-1 MF (melamine-formaldehyde resin)`
12998
+ source: `${MEANING_PRIORITY_EVIDENCE}, melamine rows by product type; EN 14322 (melamine faced boards); ISO 1043-1 MF (melamine-formaldehyde resin)`
12951
12999
  },
12952
13000
  HIERARCHY_REVIEW_LIFECYCLE
12953
13001
  ),
13002
+ meanings: [MELAMINE_BOARD, MELAMINE_RESIN],
12954
13003
  outcome: "ambiguous",
12955
- phrase: "melamine",
12956
- readings: [MELAMINE_BOARD, MELAMINE_RESIN]
13004
+ phrase: "melamine"
12957
13005
  },
12958
- // Plaster: one governed material reading here. ColorScope separately lists `plaster` as an
13006
+ // Plaster: one governed material meaning here. ColorScope separately lists `plaster` as an
12959
13007
  // alias of its Light Taupe tone band, and a tone band has no reference kind in this corpus, so
12960
- // the colour reading cannot be a target without inventing one. The mosaic precedent applies:
12961
- // publish the domain reading and say that consumers must union the external colour alias. If a
13008
+ // the color meaning cannot be a target without inventing one. The mosaic precedent applies:
13009
+ // publish the domain meaning and say that consumers must union the external color alias. If a
12962
13010
  // tone-band reference kind is added, rewrite this as an ambiguity.
12963
13011
  {
12964
- explanation: "Plaster has one governed material reading in this corpus. ColorScope separately lists plaster as an alias of its Light Taupe tone band; consumers must union that external colour reading with this one rather than let either shadow the other.",
13012
+ explanation: "Plaster has one governed material meaning in this corpus. ColorScope separately lists plaster as an alias of its Light Taupe tone band; consumers must union that external color meaning with this one rather than let either shadow the other.",
12965
13013
  governance: lexicalGovernance(
12966
- "Taxonomy records the referenced material reading without assigning a consumer route; the ColorScope tone-band alias has no reference kind in this corpus and is declared rather than minted.",
13014
+ "Taxonomy records the referenced material meaning without assigning a consumer route; the ColorScope tone-band alias has no reference kind in this corpus and is declared rather than minted.",
12967
13015
  {
12968
13016
  basis: "referenced",
12969
13017
  snapshot: REVIEW_DATE12,
@@ -12979,7 +13027,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
12979
13027
  "cotton",
12980
13028
  `${TAXONOMY_BASE_URI}/id/material/cotton`,
12981
13029
  "cotton",
12982
- "Cotton can name the plant fibre or the ColorScope named colour Cotton; fibre identity does not establish weave, blend, dye, or finish, and neither reading implies the other.",
13030
+ "Cotton can name the plant fibre or the ColorScope named color Cotton; fibre identity does not establish weave, blend, dye, or finish, and neither meaning implies the other.",
12983
13031
  crossoverSource("cotton")
12984
13032
  ),
12985
13033
  crossoverTaxonomyAmbiguity(
@@ -12988,7 +13036,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
12988
13036
  `${TAXONOMY_BASE_URI}/id/material-family/leather`,
12989
13037
  `${TAXONOMY_BASE_URI}/id/material/leather`
12990
13038
  ],
12991
- "Leather names both a retrieval-oriented material family and a specific hide-derived material; neither reading establishes animal, layer, tanning, coating, or finish, and ColorScope 7.3 has no exact named-colour identity.",
13039
+ "Leather names both a retrieval-oriented material family and a specific hide-derived material; neither meaning establishes animal, layer, tanning, coating, or finish, and ColorScope 7.3 has no exact named-color identity.",
12992
13040
  crossoverSource("leather")
12993
13041
  ),
12994
13042
  crossoverTaxonomyAmbiguity(
@@ -12997,46 +13045,46 @@ var AUTHORED_LEXICAL_ENTRIES = [
12997
13045
  `${TAXONOMY_BASE_URI}/id/material-family/wood`,
12998
13046
  `${TAXONOMY_BASE_URI}/id/material/wood`
12999
13047
  ],
13000
- "Wood names both a retrieval-oriented material family and a specific lignocellulosic material; neither reading establishes species, construction, stain, oil, or coating, and ColorScope 7.3 has no exact named-colour identity.",
13048
+ "Wood names both a retrieval-oriented material family and a specific lignocellulosic material; neither meaning establishes species, construction, stain, oil, or coating, and ColorScope 7.3 has no exact named-color identity.",
13001
13049
  crossoverSource("wood")
13002
13050
  ),
13003
13051
  crossoverAmbiguity(
13004
13052
  "jute",
13005
13053
  `${TAXONOMY_BASE_URI}/id/material/jute`,
13006
13054
  "jute",
13007
- "Jute can name the plant bast fibre or the ColorScope named colour Jute; construction, blend, treatment, and colour remain unspecified, and neither reading implies the other.",
13055
+ "Jute can name the plant bast fibre or the ColorScope named color Jute; construction, blend, treatment, and color remain unspecified, and neither meaning implies the other.",
13008
13056
  crossoverSource("jute")
13009
13057
  ),
13010
13058
  crossoverAmbiguity(
13011
13059
  "sisal",
13012
13060
  `${TAXONOMY_BASE_URI}/id/material/sisal`,
13013
13061
  "sisal",
13014
- "Sisal can name the plant fibre or the ColorScope named colour Sisal; fibre and products made from it remain distinct, and neither reading implies the other.",
13062
+ "Sisal can name the plant fibre or the ColorScope named color Sisal; fibre and products made from it remain distinct, and neither meaning implies the other.",
13015
13063
  crossoverSource("sisal")
13016
13064
  ),
13017
13065
  crossoverEquivalent(
13018
13066
  "cork",
13019
13067
  `${TAXONOMY_BASE_URI}/id/material/cork`,
13020
- "Cork has one governed material reading in this corpus; natural cork, agglomerate, backing, veneer, and cork-look appearance remain distinct, and ColorScope 7.3 has no exact named-colour identity.",
13068
+ "Cork has one governed material meaning in this corpus; natural cork, agglomerate, backing, veneer, and cork-look appearance remain distinct, and ColorScope 7.3 has no exact named-color identity.",
13021
13069
  crossoverSource("cork")
13022
13070
  ),
13023
13071
  crossoverEquivalent(
13024
13072
  "wool",
13025
13073
  `${TAXONOMY_BASE_URI}/id/material/wool`,
13026
- "Wool has one governed material reading in this corpus; species, grade, blend, construction, and finish remain unspecified, and ColorScope 7.3 has no exact named-colour identity.",
13074
+ "Wool has one governed material meaning in this corpus; species, grade, blend, construction, and finish remain unspecified, and ColorScope 7.3 has no exact named-color identity.",
13027
13075
  crossoverSource("wool")
13028
13076
  ),
13029
13077
  crossoverEquivalent(
13030
13078
  "suede",
13031
13079
  `${TAXONOMY_BASE_URI}/id/material/suede`,
13032
- "Suede has one governed leather-material reading in this corpus; it does not establish a suede-look finish on another substrate, and ColorScope 7.3 has no exact named-colour identity.",
13080
+ "Suede has one governed leather-material meaning in this corpus; it does not establish a suede-look finish on another substrate, and ColorScope 7.3 has no exact named-color identity.",
13033
13081
  crossoverSource("suede")
13034
13082
  ),
13035
13083
  crossoverAmbiguity(
13036
13084
  "concrete",
13037
13085
  `${TAXONOMY_BASE_URI}/id/material-family/concrete`,
13038
13086
  "concrete",
13039
- "Concrete names both a retrieval-oriented material family and a specific cement-and-aggregate composite, or the ColorScope named colour Concrete; neither reading establishes mix, reinforcement, coating, polish, or imitation, and none implies another.",
13087
+ "Concrete names both a retrieval-oriented material family and a specific cement-and-aggregate composite, or the ColorScope named color Concrete; neither meaning establishes mix, reinforcement, coating, polish, or imitation, and none implies another.",
13040
13088
  crossoverSource("concrete"),
13041
13089
  [`${TAXONOMY_BASE_URI}/id/material/concrete`]
13042
13090
  ),
@@ -13044,22 +13092,22 @@ var AUTHORED_LEXICAL_ENTRIES = [
13044
13092
  "travertine",
13045
13093
  `${TAXONOMY_BASE_URI}/id/material/travertine`,
13046
13094
  "travertine",
13047
- "Travertine can name the dimension stone or the ColorScope named colour Travertine; quarry, grade, fill, cut, and surface treatment remain unspecified, and neither reading implies the other.",
13095
+ "Travertine can name the dimension stone or the ColorScope named color Travertine; quarry, grade, fill, cut, and surface treatment remain unspecified, and neither meaning implies the other.",
13048
13096
  crossoverSource("travertine")
13049
13097
  ),
13050
13098
  crossoverEquivalent(
13051
13099
  "marble",
13052
13100
  `${TAXONOMY_BASE_URI}/id/material/marble`,
13053
- "Marble has one governed commercial dimension-stone reading in this corpus; its scientific and commercial boundaries remain explicit, and ColorScope 7.3 has no exact named-colour identity.",
13101
+ "Marble has one governed commercial dimension-stone meaning in this corpus; its scientific and commercial boundaries remain explicit, and ColorScope 7.3 has no exact named-color identity.",
13054
13102
  crossoverSource("marble")
13055
13103
  ),
13056
13104
  {
13057
13105
  // Written inline rather than through `crossoverAmbiguity`, which stamps a fixed evidenced
13058
13106
  // snapshot: limestone was introduced later than the rest of this batch (2026-09-01, ADR-dated)
13059
- // and keeps that date now that ColorScope 9.4.0 gives it a colour reading too.
13060
- explanation: "Limestone can name the carbonate stone or the ColorScope named colour Limestone; formation, quarry, grade, cut, finish, and similarly named paint identities remain separate, and neither reading implies the other.",
13107
+ // and keeps that date now that ColorScope 9.4.0 gives it a color meaning too.
13108
+ explanation: "Limestone can name the carbonate stone or the ColorScope named color Limestone; formation, quarry, grade, cut, finish, and similarly named paint identities remain separate, and neither meaning implies the other.",
13061
13109
  governance: lexicalGovernance(
13062
- "Taxonomy preserves the evidenced readings without assigning a default, role, contextual preference, or consumer route.",
13110
+ "Taxonomy preserves the evidenced meanings without assigning a default, meaning priority, contextual preference, or consumer route.",
13063
13111
  {
13064
13112
  basis: "evidenced",
13065
13113
  snapshot: LIMESTONE_INTRODUCED,
@@ -13071,48 +13119,48 @@ var AUTHORED_LEXICAL_ENTRIES = [
13071
13119
  status: "active"
13072
13120
  }
13073
13121
  ),
13074
- outcome: "ambiguous",
13075
- phrase: "limestone",
13076
- readings: [
13122
+ meanings: [
13077
13123
  {
13078
13124
  authority: "taxonomy",
13079
13125
  uri: `${TAXONOMY_BASE_URI}/id/material/limestone`
13080
13126
  },
13081
13127
  colorScope("limestone", NAMED_COLOR_REFERENCE_KIND)
13082
- ]
13128
+ ],
13129
+ outcome: "ambiguous",
13130
+ phrase: "limestone"
13083
13131
  },
13084
13132
  crossoverAmbiguity(
13085
13133
  "oak",
13086
13134
  `${TAXONOMY_BASE_URI}/id/material/oak`,
13087
13135
  "oak",
13088
- "Oak can name the timber species group or the ColorScope named colour Oak; species group, cut, stain, coating, and appearance remain distinct, and neither reading implies the other.",
13136
+ "Oak can name the timber species group or the ColorScope named color Oak; species group, cut, stain, coating, and appearance remain distinct, and neither meaning implies the other.",
13089
13137
  crossoverSource("oak")
13090
13138
  ),
13091
13139
  crossoverAmbiguity(
13092
13140
  "teak",
13093
13141
  `${TAXONOMY_BASE_URI}/id/material/teak`,
13094
13142
  "teak",
13095
- "Teak can name the timber or the ColorScope named colour Teak; timber, finish, and colour remain distinct, and neither reading implies the other.",
13143
+ "Teak can name the timber or the ColorScope named color Teak; timber, finish, and color remain distinct, and neither meaning implies the other.",
13096
13144
  crossoverSource("teak")
13097
13145
  ),
13098
13146
  {
13099
13147
  contextualPreferences: [
13100
13148
  { context: "material", target: WALNUT_MATERIAL },
13101
- { context: "colour", target: WALNUT_COLOUR }
13149
+ { context: "color", target: WALNUT_COLOUR }
13102
13150
  ],
13103
- defaultTarget: WALNUT_MATERIAL,
13104
- explanation: "Walnut can name wood from Juglans trees or a brown colour reading. Neither meaning is a child of the other.",
13151
+ defaultMeaning: WALNUT_MATERIAL,
13152
+ explanation: "Walnut can name wood from Juglans trees or a brown color meaning. Neither meaning is a child of the other.",
13105
13153
  governance: lexicalGovernance(
13106
- "The two readings are deliberately separate and context may select only the preference declared here.",
13154
+ "The two meanings are deliberately separate and context may select only the preference declared here.",
13107
13155
  {
13108
13156
  basis: "evidenced",
13109
13157
  snapshot: PUBLISHED_V1_BASELINE,
13110
13158
  source: crossoverSource("walnut")
13111
13159
  }
13112
13160
  ),
13161
+ meanings: [WALNUT_MATERIAL, WALNUT_COLOUR],
13113
13162
  outcome: "ambiguous",
13114
- phrase: "walnut",
13115
- readings: [WALNUT_MATERIAL, WALNUT_COLOUR]
13163
+ phrase: "walnut"
13116
13164
  },
13117
13165
  // `application.wall-backsplash` is vendored in `dictionaries.ts`, whose tests deep-equal the
13118
13166
  // authoring tuples, so the British spelling is an authored equivalent rather than an altLabel.
@@ -13127,7 +13175,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
13127
13175
  phrase: "splashback",
13128
13176
  target: reviewedTaxonomy("application/wall-backsplash")
13129
13177
  },
13130
- // Benchtop takes the same three readings `countertop` resolves to by inference.
13178
+ // Benchtop takes the same three meanings `countertop` resolves to by inference.
13131
13179
  {
13132
13180
  explanation: "Benchtop is the Australian and New Zealand name for a countertop or worktop; like those words it can name the application, the installed joinery element, or the purchasable product, and the word settles none of them.",
13133
13181
  governance: lexicalGovernance(
@@ -13135,50 +13183,50 @@ var AUTHORED_LEXICAL_ENTRIES = [
13135
13183
  { basis: "authored", source: REVIEW_SOURCE9 },
13136
13184
  REVIEW_LIFECYCLE
13137
13185
  ),
13138
- outcome: "ambiguous",
13139
- phrase: "benchtop",
13140
- readings: [
13186
+ meanings: [
13141
13187
  reviewedTaxonomy("application/countertop"),
13142
13188
  reviewedTaxonomy("element/worktop"),
13143
13189
  reviewedTaxonomy("product-category/countertop")
13144
- ]
13190
+ ],
13191
+ outcome: "ambiguous",
13192
+ phrase: "benchtop"
13145
13193
  },
13146
13194
  // TAX-57 unit-shape compounds. Each names two governed shapes in one phrase, which the current
13147
- // lexical contract cannot express as a single multi-target reading, so the alternatives are kept
13195
+ // lexical contract cannot express as a single multi-target meaning, so the alternatives are kept
13148
13196
  // as an explicit ambiguity or, where one alternative is already an alt label of the other, an
13149
13197
  // equivalent - never a silently chosen shape. "round & oval" is an equivalent of the broad
13150
13198
  // `round-or-oval` term, which says exactly that a unit is round or oval without choosing (ADR 0012).
13151
13199
  {
13152
- defaultTarget: {
13200
+ defaultMeaning: {
13153
13201
  authority: "taxonomy",
13154
- role: "primary",
13202
+ meaningPriority: "primary",
13155
13203
  uri: `${TAXONOMY_BASE_URI}/id/unit-shape/arabesque`
13156
13204
  },
13157
13205
  explanation: "Arabesque can name the taxonomy's bilaterally organised ornamental unit shape or, in Material Bank PIM usage, the star and cross units of a Moroccan tile assortment; the bare word does not settle which.",
13158
13206
  governance: lexicalGovernance(
13159
- "The default records the taxonomy's own governed shape; the PIM-evidenced star and cross readings are recorded as secondary rather than merged into one multi-concept reading.",
13207
+ "The default records the taxonomy's own governed shape; the PIM-evidenced star and cross meanings are recorded as secondary rather than merged into one multi-concept meaning.",
13160
13208
  { basis: "evidenced", snapshot: TAX57_DATE4, source: TAX57_SHAPE_SOURCE },
13161
13209
  TAX57_LIFECYCLE
13162
13210
  ),
13163
- outcome: "ambiguous",
13164
- phrase: "arabesque",
13165
- readings: [
13211
+ meanings: [
13166
13212
  {
13167
13213
  authority: "taxonomy",
13168
- role: "primary",
13214
+ meaningPriority: "primary",
13169
13215
  uri: `${TAXONOMY_BASE_URI}/id/unit-shape/arabesque`
13170
13216
  },
13171
13217
  {
13172
13218
  authority: "taxonomy",
13173
- role: "secondary",
13219
+ meaningPriority: "secondary",
13174
13220
  uri: `${TAXONOMY_BASE_URI}/id/unit-shape/star`
13175
13221
  },
13176
13222
  {
13177
13223
  authority: "taxonomy",
13178
- role: "secondary",
13224
+ meaningPriority: "secondary",
13179
13225
  uri: `${TAXONOMY_BASE_URI}/id/unit-shape/cross`
13180
13226
  }
13181
- ]
13227
+ ],
13228
+ outcome: "ambiguous",
13229
+ phrase: "arabesque"
13182
13230
  },
13183
13231
  ...["round & oval", "round and oval"].map(
13184
13232
  (phrase) => ({
@@ -13221,9 +13269,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
13221
13269
  { basis: "evidenced", snapshot: TAX57_DATE4, source: TAX57_SHAPE_SOURCE },
13222
13270
  TAX57_LIFECYCLE
13223
13271
  ),
13224
- outcome: "ambiguous",
13225
- phrase: "parallelogram & chevron",
13226
- readings: [
13272
+ meanings: [
13227
13273
  {
13228
13274
  authority: "taxonomy",
13229
13275
  uri: `${TAXONOMY_BASE_URI}/id/unit-shape/parallelogram`
@@ -13232,44 +13278,46 @@ var AUTHORED_LEXICAL_ENTRIES = [
13232
13278
  authority: "taxonomy",
13233
13279
  uri: `${TAXONOMY_BASE_URI}/id/unit-shape/chevron`
13234
13280
  }
13235
- ]
13281
+ ],
13282
+ outcome: "ambiguous",
13283
+ phrase: "parallelogram & chevron"
13236
13284
  },
13237
- // TAX-57 ordered reading. Paint and tile makers use "velvet" as a finish name for a soft-touch,
13285
+ // TAX-57 ordered meaning. Paint and tile brands use "velvet" as a finish name for a soft-touch,
13238
13286
  // light-absorbing surface; the trade means the woven cut-pile construction first.
13239
13287
  {
13240
- defaultTarget: {
13288
+ defaultMeaning: {
13241
13289
  authority: "taxonomy",
13242
- role: "primary",
13290
+ meaningPriority: "primary",
13243
13291
  uri: `${TAXONOMY_BASE_URI}/id/construction/velvet`
13244
13292
  },
13245
- explanation: "Velvet can name the woven cut-pile construction or a finish name paint and tile makers use for a soft-touch surface; the trade means the construction first.",
13293
+ explanation: "Velvet can name the woven cut-pile construction or a finish name paint and tile brands use for a soft-touch surface; the trade means the construction first.",
13246
13294
  governance: lexicalGovernance(
13247
- ORDERED_READING_GOVERNANCE,
13295
+ MEANING_PRIORITY_GOVERNANCE,
13248
13296
  { basis: "authored", source: TAX57_REVIEW_SOURCE },
13249
13297
  TAX57_LIFECYCLE
13250
13298
  ),
13251
- outcome: "ambiguous",
13252
- phrase: "velvet",
13253
- readings: [
13299
+ meanings: [
13254
13300
  {
13255
13301
  authority: "taxonomy",
13256
- role: "primary",
13302
+ meaningPriority: "primary",
13257
13303
  uri: `${TAXONOMY_BASE_URI}/id/construction/velvet`
13258
13304
  },
13259
13305
  {
13260
13306
  authority: "taxonomy",
13261
- role: "secondary",
13307
+ meaningPriority: "secondary",
13262
13308
  uri: `${TAXONOMY_BASE_URI}/id/finish/texture/velvety`
13263
13309
  }
13264
- ]
13310
+ ],
13311
+ outcome: "ambiguous",
13312
+ phrase: "velvet"
13265
13313
  },
13266
13314
  // Two observed source spellings on the product-category axis that the inferred
13267
- // readings promoted to customer equivalents. Each is a department label in one
13268
- // catalogue; the seenAs evidence stays on the term, and only the reading is declined.
13315
+ // meanings promoted to customer equivalents. Each is a department label in one
13316
+ // catalogue; the seenAs evidence stays on the term, and only the meaning is declined.
13269
13317
  {
13270
13318
  explanation: "Fittings is a catalogue department label for tapware in one source. As a request it names light fittings, electrical fittings and bathroom fittings just as readily, so it identifies no single product category.",
13271
13319
  governance: lexicalGovernance(
13272
- "A source department label is crosswalk evidence, not a customer reading of one concept.",
13320
+ "A source department label is crosswalk evidence, not a customer meaning of one concept.",
13273
13321
  { basis: "authored", source: "MaterialGraph MG-2226 category review" },
13274
13322
  TAXONOMY_SNAPSHOT_LIFECYCLE
13275
13323
  ),
@@ -13280,7 +13328,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
13280
13328
  {
13281
13329
  explanation: "Electrical is a catalogue department label for wiring accessories in one source. As a request it names a trade that also covers back boxes, cable management and lighting, so it identifies no single product category.",
13282
13330
  governance: lexicalGovernance(
13283
- "A source department label is crosswalk evidence, not a customer reading of one concept.",
13331
+ "A source department label is crosswalk evidence, not a customer meaning of one concept.",
13284
13332
  { basis: "authored", source: "MaterialGraph MG-2226 category review" },
13285
13333
  TAXONOMY_SNAPSHOT_LIFECYCLE
13286
13334
  ),
@@ -13288,12 +13336,12 @@ var AUTHORED_LEXICAL_ENTRIES = [
13288
13336
  phrase: "electrical",
13289
13337
  reason: "Names a trade, not a kind of product."
13290
13338
  },
13291
- // Two more declined readings, added alongside `cladding` for the same reason `fittings` and
13339
+ // Two more declined meanings, added alongside `cladding` for the same reason `fittings` and
13292
13340
  // `electrical` were declined: each phrase spans more than the one product category it might name.
13293
13341
  {
13294
13342
  explanation: "Wall cladding also names interior stone and tile cladding, so as a request it does not settle between the exterior product category and an interior surface finish.",
13295
13343
  governance: lexicalGovernance(
13296
- "A compound phrase spanning an exterior product category and an interior finish is not one customer reading.",
13344
+ "A compound phrase spanning an exterior product category and an interior finish is not one customer meaning.",
13297
13345
  {
13298
13346
  basis: "authored",
13299
13347
  source: "@instruments/taxonomy 1.9.0 vocabulary review"
@@ -13352,15 +13400,15 @@ var lexicalPhrases = (term12) => [term12.slug, term12.label, ...term12.altLabels
13352
13400
  (phrase, index, phrases) => phrase.length > 0 && phrases.indexOf(phrase) === index
13353
13401
  );
13354
13402
  var targetKey = (target) => target.authority === "taxonomy" ? `taxonomy:${target.uri}` : `colorscope:${target.referenceKind}:${target.identifier}`;
13355
- var inferredLifecycle = (readings) => {
13356
- const terms = readings.flatMap((reading) => reading.terms);
13403
+ var inferredLifecycle = (meanings) => {
13404
+ const terms = meanings.flatMap((meaning) => meaning.terms);
13357
13405
  const lifecycles = terms.map((term12) => lifecycleFor(term12));
13358
13406
  const [introducedAt] = terms.map((term12) => term12.introducedAt ?? PUBLISHED_V1_BASELINE).toSorted(compareText);
13359
13407
  const reviewedAt = terms.map(
13360
13408
  (term12) => term12.reviewedAt ?? term12.introducedAt ?? PUBLISHED_V1_BASELINE
13361
13409
  ).toSorted(compareText).at(-1);
13362
13410
  if (introducedAt === void 0 || reviewedAt === void 0) {
13363
- throw new Error("Inferred lexical reading has no source term lifecycle.");
13411
+ throw new Error("Inferred lexical meaning has no source term lifecycle.");
13364
13412
  }
13365
13413
  const deprecated = lifecycles.every(
13366
13414
  (lifecycle) => lifecycle.status === "deprecated"
@@ -13381,35 +13429,35 @@ var inferredLifecycle = (readings) => {
13381
13429
  };
13382
13430
  var inferredLexicalEntries = () => {
13383
13431
  const authored4 = new Set(
13384
- AUTHORED_LEXICAL_ENTRIES.map((entry) => entry.phrase)
13432
+ AUTHORED_PHRASE_ENTRIES.map((entry) => entry.phrase)
13385
13433
  );
13386
13434
  const targetsByPhrase = /* @__PURE__ */ new Map();
13387
13435
  for (const location of AUTHORING_LOCATIONS) {
13388
13436
  const target = targetForLocation(location);
13389
13437
  for (const phrase of lexicalPhrases(location.term)) {
13390
- const readings = targetsByPhrase.get(phrase) ?? [];
13391
- const existing = readings.find(
13438
+ const meanings = targetsByPhrase.get(phrase) ?? [];
13439
+ const existing = meanings.find(
13392
13440
  (candidate) => targetKey(candidate.target) === targetKey(target)
13393
13441
  );
13394
13442
  if (existing === void 0) {
13395
- readings.push({ target, terms: [location.term] });
13443
+ meanings.push({ target, terms: [location.term] });
13396
13444
  } else {
13397
13445
  existing.terms.push(location.term);
13398
13446
  }
13399
- targetsByPhrase.set(phrase, readings);
13447
+ targetsByPhrase.set(phrase, meanings);
13400
13448
  }
13401
13449
  }
13402
- return [...targetsByPhrase].filter(([phrase]) => !authored4.has(phrase)).map(([phrase, readings]) => {
13403
- const [first, second, ...rest] = readings;
13450
+ return [...targetsByPhrase].filter(([phrase]) => !authored4.has(phrase)).map(([phrase, meanings]) => {
13451
+ const [first, second, ...rest] = meanings;
13404
13452
  if (first === void 0) {
13405
- throw new Error(`Lexical phrase "${phrase}" has no reading.`);
13453
+ throw new Error(`Lexical phrase "${phrase}" has no meaning.`);
13406
13454
  }
13407
- const lifecycle = inferredLifecycle(readings);
13455
+ const lifecycle = inferredLifecycle(meanings);
13408
13456
  if (second === void 0) {
13409
13457
  return {
13410
- explanation: `The published spelling \u201C${phrase}\u201D has one governed reading.`,
13458
+ explanation: `The published spelling \u201C${phrase}\u201D has one governed meaning.`,
13411
13459
  governance: lexicalGovernance(
13412
- "The reading is derived from a canonical label, slug, alternate label, or observed source spelling.",
13460
+ "The meaning is derived from a canonical label, slug, alternate label, or observed source spelling.",
13413
13461
  {
13414
13462
  basis: "evidenced",
13415
13463
  snapshot: lifecycle.reviewedAt,
@@ -13425,7 +13473,7 @@ var inferredLexicalEntries = () => {
13425
13473
  return {
13426
13474
  explanation: `The published spelling \u201C${phrase}\u201D names more than one governed concept.`,
13427
13475
  governance: lexicalGovernance(
13428
- "No context-independent primary reading has been governed.",
13476
+ "No context-independent primary meaning has been governed.",
13429
13477
  {
13430
13478
  basis: "evidenced",
13431
13479
  snapshot: lifecycle.reviewedAt,
@@ -13433,37 +13481,189 @@ var inferredLexicalEntries = () => {
13433
13481
  },
13434
13482
  lifecycle
13435
13483
  ),
13436
- outcome: "ambiguous",
13437
- phrase,
13438
- readings: [
13484
+ meanings: [
13439
13485
  first.target,
13440
13486
  second.target,
13441
13487
  ...rest.map(({ target }) => target)
13442
- ]
13488
+ ],
13489
+ outcome: "ambiguous",
13490
+ phrase
13443
13491
  };
13444
13492
  });
13445
13493
  };
13446
- var LEXICAL_ENTRIES = [
13447
- ...AUTHORED_LEXICAL_ENTRIES,
13494
+ var PHRASE_ENTRIES = [
13495
+ ...AUTHORED_PHRASE_ENTRIES,
13448
13496
  ...inferredLexicalEntries()
13449
13497
  ].toSorted((left, right) => compareText(left.phrase, right.phrase));
13450
13498
  var revisionOf = (value) => `sha256:${createHash("sha256").update(JSON.stringify(value)).digest("hex")}`;
13451
13499
  var TAXONOMY_CORPUS_REVISION = revisionOf({
13452
13500
  graph: KNOWLEDGE_GRAPH,
13453
- lexicalEntries: LEXICAL_ENTRIES
13501
+ phraseEntries: PHRASE_ENTRIES
13454
13502
  });
13455
13503
  var TAXONOMY_CORPUS_METADATA = {
13456
13504
  edgeCount: KNOWLEDGE_GRAPH.edges.length,
13457
- lexicalEntryCount: LEXICAL_ENTRIES.length,
13458
13505
  nodeCount: KNOWLEDGE_GRAPH.nodes.length,
13506
+ phraseEntryCount: PHRASE_ENTRIES.length,
13459
13507
  revision: TAXONOMY_CORPUS_REVISION,
13460
13508
  snapshot: TAXONOMY_SNAPSHOT,
13461
13509
  version: TAXONOMY_VERSION
13462
13510
  };
13511
+
13512
+ // src/assessment-policy.ts
13513
+ var PHOTO_CANDIDATE_PATHS = [
13514
+ "finish/texture/fluted",
13515
+ "finish/texture/heavily-reliefed",
13516
+ "finish/texture/reeded",
13517
+ "finish/texture/ribbed",
13518
+ "finish/texture/textured",
13519
+ "pattern/density/busy",
13520
+ "pattern/density/dense",
13521
+ "pattern/density/light",
13522
+ "pattern/density/moderate",
13523
+ "pattern/density/sparse",
13524
+ "pattern/density/unpatterned",
13525
+ "pattern/directionality/bi-directional",
13526
+ "pattern/directionality/linear",
13527
+ "pattern/directionality/low",
13528
+ "pattern/directionality/non-directional",
13529
+ "pattern/directionality/radial",
13530
+ "pattern/directionality/strong-linear",
13531
+ "pattern/regularity/irregular",
13532
+ "pattern/regularity/ordered",
13533
+ "pattern/regularity/organic",
13534
+ "pattern/regularity/relaxed",
13535
+ "pattern/regularity/uniform",
13536
+ "pattern/type/abstract-graphic",
13537
+ "pattern/type/abstract-organic",
13538
+ "pattern/type/animal-print",
13539
+ "pattern/type/botanical",
13540
+ "pattern/type/character",
13541
+ "pattern/type/checkerboard",
13542
+ "pattern/type/chevron",
13543
+ "pattern/type/crocodile",
13544
+ "pattern/type/damask",
13545
+ "pattern/type/geometric",
13546
+ "pattern/type/gradient",
13547
+ "pattern/type/herringbone",
13548
+ "pattern/type/leopard",
13549
+ "pattern/type/lizard",
13550
+ "pattern/type/marbleised",
13551
+ "pattern/type/natural-motif",
13552
+ "pattern/type/novelty",
13553
+ "pattern/type/ostrich",
13554
+ "pattern/type/paisley",
13555
+ "pattern/type/plaid-check",
13556
+ "pattern/type/plain",
13557
+ "pattern/type/scenic",
13558
+ "pattern/type/snakeskin",
13559
+ "pattern/type/strie",
13560
+ "pattern/type/stripe",
13561
+ "pattern/type/texture",
13562
+ "pattern/type/toile",
13563
+ "pattern/type/zebra",
13564
+ "pattern/type/zigzag"
13565
+ ];
13566
+ var photoUris = new Set(
13567
+ PHOTO_CANDIDATE_PATHS.map((path) => `${TAXONOMY_BASE_URI}/id/${path}`)
13568
+ );
13569
+ var requirementsFor = (concept) => {
13570
+ if (photoUris.has(concept.uri)) {
13571
+ return [
13572
+ "Assess only the supplied material region and visible canonical meaning.",
13573
+ "Sufficient native detail and field extent; unavailable evidence is unknown.",
13574
+ "A detail-view decision does not automatically describe the overview.",
13575
+ "Appearance never proves composition, manufacturing process or product identity."
13576
+ ];
13577
+ }
13578
+ if (concept.facet.endsWith("/pattern/figure")) {
13579
+ return [
13580
+ "Retain catalogue evidence under ADR 0008; image confirmation is not admitted."
13581
+ ];
13582
+ }
13583
+ if (concept.facet.endsWith("/pattern/scale")) {
13584
+ return [
13585
+ "Physical extent or repeat measurement; pixel size alone is insufficient."
13586
+ ];
13587
+ }
13588
+ if (concept.facet.endsWith("/finish/sheen")) {
13589
+ return [
13590
+ "Specified illumination and viewing angles; an arbitrary photo is insufficient."
13591
+ ];
13592
+ }
13593
+ if (concept.axis.endsWith("/installation-layout")) {
13594
+ return [
13595
+ "An installed assembly with actual unit boundaries, not an isolated unit or printed resemblance."
13596
+ ];
13597
+ }
13598
+ return [];
13599
+ };
13600
+ var routeFor = (concept) => {
13601
+ if (photoUris.has(concept.uri)) {
13602
+ return "photo-candidate";
13603
+ }
13604
+ if (concept.axis.endsWith("/axis/palette")) {
13605
+ return "external-authority";
13606
+ }
13607
+ if (concept.facet.endsWith("/pattern/figure")) {
13608
+ return "catalogue-only";
13609
+ }
13610
+ if (concept.facet.endsWith("/pattern/scale") || concept.facet.endsWith("/finish/sheen") || concept.axis.endsWith("/installation-layout")) {
13611
+ return "capture-conditional";
13612
+ }
13613
+ if (["material", "material-family", "construction", "product-category"].some(
13614
+ (axis) => concept.axis.endsWith(`/axis/${axis}`)
13615
+ ) || concept.facet.endsWith("/finish/treatment")) {
13616
+ return "catalogue-only";
13617
+ }
13618
+ if (["style", "mood", "period"].some(
13619
+ (axis) => concept.axis.endsWith(`/axis/${axis}`)
13620
+ )) {
13621
+ return "context-required";
13622
+ }
13623
+ return "unreviewed";
13624
+ };
13625
+ var CONCEPT_ASSESSMENT_POLICIES = KNOWLEDGE_GRAPH.nodes.filter(
13626
+ (node) => node.kind === "concept" && node.lifecycle.status === "active"
13627
+ ).map((concept) => ({
13628
+ conceptUri: concept.uri,
13629
+ evidenceRoute: routeFor(concept),
13630
+ materialApplicability: {
13631
+ reason: "Category scope has not received a complete evidence-backed cross-surface review.",
13632
+ status: "unreviewed"
13633
+ },
13634
+ references: [concept.uri],
13635
+ requirements: requirementsFor(concept)
13636
+ }));
13637
+ var ASSESSMENT_AUTHORITY_REFERENCES = [
13638
+ {
13639
+ role: "appearance-terminology",
13640
+ url: "https://store.astm.org/e0284-25.html"
13641
+ },
13642
+ { role: "property-measurement", url: "https://store.astm.org/d0523-25.html" },
13643
+ { role: "construction-classification", url: "https://uniclass.thenbs.com/" },
13644
+ {
13645
+ role: "construction-classification",
13646
+ url: "https://www.csiresources.org/standards/overview"
13647
+ },
13648
+ {
13649
+ role: "controlled-vocabulary",
13650
+ url: "https://www.getty.edu/research/tools/vocabularies/aat/about.html"
13651
+ }
13652
+ ];
13653
+ var ASSESSMENT_POLICY_REVISION = `sha256:${createHash2("sha256").update(
13654
+ JSON.stringify({
13655
+ authorities: ASSESSMENT_AUTHORITY_REFERENCES,
13656
+ policies: CONCEPT_ASSESSMENT_POLICIES,
13657
+ taxonomyRevision: TAXONOMY_CORPUS_REVISION
13658
+ })
13659
+ ).digest("hex")}`;
13463
13660
  export {
13661
+ ASSESSMENT_AUTHORITY_REFERENCES,
13662
+ ASSESSMENT_POLICY_REVISION,
13464
13663
  COLOR_SCOPE_REFERENCE_KINDS,
13664
+ CONCEPT_ASSESSMENT_POLICIES,
13465
13665
  KNOWLEDGE_GRAPH,
13466
- LEXICAL_ENTRIES,
13666
+ PHRASE_ENTRIES,
13467
13667
  TAXONOMY_BASE_URI,
13468
13668
  TAXONOMY_CORPUS_METADATA,
13469
13669
  TAXONOMY_CORPUS_REVISION,