@instruments/taxonomy 1.8.0 → 1.10.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
@@ -1396,7 +1396,7 @@ var ELEMENT_TERMS = [
1396
1396
 
1397
1397
  // src/crossover-sources.ts
1398
1398
  var RETRIEVAL_LEXICON_SOURCE = "colour-material lexicon in a materials-retrieval system (src-05)";
1399
- var COLORSCOPE_CROSSOVER_SOURCE = "materialinstruments/colorscope@c0662caabe7cd8604241a8a7b2608fa5bc71de51:packages/core/data/reference/v1/taxonomy.json";
1399
+ var COLORSCOPE_CROSSOVER_SOURCE = "materialinstruments/colorscope@5feb29b267a7954c135976ede8039f37121afd27:packages/core/data/reference/v1/taxonomy.json";
1400
1400
  var BRASS_MATERIAL_SOURCE = "https://archive.copper.org/applications/industrial/DesignGuide/terms.php";
1401
1401
  var BRASS_FINISH_SOURCE = "https://nickelinstitute.org/media/lxxh1zwr/2023-nickelplatinghandbooka5_printablepdf.pdf section 5";
1402
1402
  var NICKEL_MATERIAL_SOURCE = "https://nickelinstitute.org/en/nickel-applications/";
@@ -1921,6 +1921,8 @@ var FORMAT_TERMS = [
1921
1921
  var REVIEW_DATE5 = "2026-08-31";
1922
1922
  var REVIEW_SOURCE4 = "@instruments/taxonomy TAX-45 reviewed implementation contract";
1923
1923
  var ZIGZAG_EVIDENCE_SOURCE = "Linear TAX-45 reviewed implementation contract; herringbone and chevron product-language audit in a materials-retrieval system (src-05)";
1924
+ var MG_LAYOUT_DATE = "2026-09-27";
1925
+ var MG_LAYOUT_SOURCE = "MG-2218 reconciliation: MaterialGraph plank_layout extensions evidenced against Material Bank's catalogue feed";
1924
1926
  var term5 = (slug, label, definition, extra = {}) => ({
1925
1927
  definition,
1926
1928
  introducedAt: REVIEW_DATE5,
@@ -1930,6 +1932,19 @@ var term5 = (slug, label, definition, extra = {}) => ({
1930
1932
  slug,
1931
1933
  ...extra
1932
1934
  });
1935
+ var mgLayoutTerm = (slug, label, definition, extra = {}) => ({
1936
+ definition,
1937
+ introducedAt: MG_LAYOUT_DATE,
1938
+ label,
1939
+ provenance: {
1940
+ basis: "evidenced",
1941
+ snapshot: MG_LAYOUT_DATE,
1942
+ source: MG_LAYOUT_SOURCE
1943
+ },
1944
+ reviewedAt: MG_LAYOUT_DATE,
1945
+ slug,
1946
+ ...extra
1947
+ });
1933
1948
  var INSTALLATION_LAYOUT_TERMS = [
1934
1949
  term5(
1935
1950
  "stack-bond",
@@ -2010,6 +2025,33 @@ var INSTALLATION_LAYOUT_TERMS = [
2010
2025
  "irregular-field",
2011
2026
  "Irregular field",
2012
2027
  "Discrete units form a positively observed non-periodic field with persistent real joints."
2028
+ ),
2029
+ // MG-2218. Named French parquet panel layouts, each an assembled panel of real joints rather than
2030
+ // a printed or woven motif.
2031
+ mgLayoutTerm(
2032
+ "versailles",
2033
+ "Versailles parquet",
2034
+ "Framed square panels, each filled with an interlocking diagonal basketweave lattice, repeat across the surface."
2035
+ ),
2036
+ mgLayoutTerm(
2037
+ "chantilly",
2038
+ "Chantilly parquet",
2039
+ "Framed square panels, each filled with an interlaced lattice of diamond or cross-shaped units, repeat across the surface."
2040
+ ),
2041
+ // MG-2218. Narrower than herringbone: every double herringbone installation is also a broken
2042
+ // zigzag of alternating angled units, just doubled in width and cut from narrower stock.
2043
+ mgLayoutTerm(
2044
+ "double-herringbone",
2045
+ "Double herringbone",
2046
+ "Two herringbone courses laid together so each zigzag arm reads at double width, using narrower units than a single herringbone layout at the same scale.",
2047
+ { broaderSlug: "herringbone" }
2048
+ ),
2049
+ // MG-2218. `hexagon-block` rather than `hexagon`, which unit-shape already holds for the outline
2050
+ // of one six-sided unit; this is the layout six elongated units make together, not that outline.
2051
+ mgLayoutTerm(
2052
+ "hexagon-block",
2053
+ "Hexagonal parquet block",
2054
+ "Elongated units arranged radially in groups of six form repeating hexagonal parquet blocks across the surface."
2013
2055
  )
2014
2056
  ];
2015
2057
 
@@ -4526,6 +4568,8 @@ var MATERIAL_POLYMERS_TERMS = [
4526
4568
  var WOOD_HANDBOOK3 = "USDA Wood Handbook (2021), chapter 2";
4527
4569
  var EN_13556 = "EN 13556:2003";
4528
4570
  var WOOD_HANDBOOK_IMPORTED = "USDA Wood Handbook (2021), chapter 2, imported woods section";
4571
+ var TAX59_DATE = "2026-09-27";
4572
+ var TAX59_SOURCE = "Linear TAX-59 wood species review; MG-2218 reconciliation against Material Bank's wood_species column";
4529
4573
  var MATERIAL_TIMBER_SPECIES_TERMS = [
4530
4574
  compositionTerm(
4531
4575
  "prunus-serotina",
@@ -4623,6 +4667,23 @@ var MATERIAL_TIMBER_SPECIES_TERMS = [
4623
4667
  WOOD_HANDBOOK_IMPORTED,
4624
4668
  { altLabels: ["Eucalyptus marginata"], broaderSlug: "eucalyptus" }
4625
4669
  ),
4670
+ compositionTerm(
4671
+ "acacia-koa",
4672
+ "Koa",
4673
+ "Timber from Acacia koa, commercially cut in Hawaii.",
4674
+ WOOD_HANDBOOK3,
4675
+ {
4676
+ altLabels: ["Acacia Koa"],
4677
+ broaderSlug: "acacia",
4678
+ introducedAt: TAX59_DATE,
4679
+ provenance: {
4680
+ basis: "referenced",
4681
+ snapshot: TAX59_DATE,
4682
+ source: `${WOOD_HANDBOOK3}; ${TAX59_SOURCE}`
4683
+ },
4684
+ reviewedAt: TAX59_DATE
4685
+ }
4686
+ ),
4626
4687
  compositionTerm(
4627
4688
  "quercus-mongolica",
4628
4689
  "Mongolian oak",
@@ -4672,6 +4733,18 @@ var MATERIAL_TIMBER_SPECIES_TERMS = [
4672
4733
  EN_13556,
4673
4734
  { altLabels: ["Quercus petraea"], broaderSlug: "oak" }
4674
4735
  ),
4736
+ authoredTerm(
4737
+ "fraxinus-mandshurica",
4738
+ "Tamo",
4739
+ "Timber from Fraxinus mandshurica, commercially cut across north-east Asia and prized for its figured grain.",
4740
+ {
4741
+ altLabels: ["Japanese Ash"],
4742
+ broaderSlug: "ash",
4743
+ introducedAt: TAX59_DATE,
4744
+ provenance: { basis: "authored", source: TAX59_SOURCE },
4745
+ reviewedAt: TAX59_DATE
4746
+ }
4747
+ ),
4675
4748
  compositionTerm(
4676
4749
  "thuja-plicata",
4677
4750
  "Western red cedar",
@@ -4705,6 +4778,22 @@ var MATERIAL_TIMBER_SPECIES_TERMS = [
4705
4778
  var WOOD_HANDBOOK4 = "USDA Wood Handbook (2021), chapter 2";
4706
4779
  var EN_135562 = "EN 13556:2003";
4707
4780
  var HARDWOOD_SLUG = "hardwood";
4781
+ var TAX59_DATE2 = "2026-09-27";
4782
+ var TAX59_SOURCE2 = "Linear TAX-59 wood species review; MG-2218 reconciliation against Material Bank's wood_species column";
4783
+ var mgWoodTerm = (slug, label, definition, extra = {}) => ({
4784
+ broaderSlug: HARDWOOD_SLUG,
4785
+ definition,
4786
+ introducedAt: TAX59_DATE2,
4787
+ label,
4788
+ provenance: {
4789
+ basis: "evidenced",
4790
+ snapshot: TAX59_DATE2,
4791
+ source: TAX59_SOURCE2
4792
+ },
4793
+ reviewedAt: TAX59_DATE2,
4794
+ slug,
4795
+ ...extra
4796
+ });
4708
4797
  var MATERIAL_TIMBERS_TERMS = [
4709
4798
  // Materials, alphabetical.
4710
4799
  authoredTerm(
@@ -4720,6 +4809,11 @@ var MATERIAL_TIMBERS_TERMS = [
4720
4809
  WOOD_HANDBOOK4,
4721
4810
  { broaderSlug: HARDWOOD_SLUG }
4722
4811
  ),
4812
+ mgWoodTerm(
4813
+ "anigre",
4814
+ "Anigre",
4815
+ "Hardwood timber from trees in the genus Aningeria (a synonym of Pouteria), commercially cut across West and Central Africa."
4816
+ ),
4723
4817
  compositionTerm(
4724
4818
  "ash",
4725
4819
  "Ash",
@@ -4734,6 +4828,11 @@ var MATERIAL_TIMBERS_TERMS = [
4734
4828
  WOOD_HANDBOOK4,
4735
4829
  { broaderSlug: "poplar" }
4736
4830
  ),
4831
+ mgWoodTerm(
4832
+ "balau",
4833
+ "Balau",
4834
+ "Hardwood timber from a group of dense Shorea species traded together as balau, commercially cut across South-East Asia."
4835
+ ),
4737
4836
  compositionTerm(
4738
4837
  "basswood",
4739
4838
  "Basswood",
@@ -4841,6 +4940,11 @@ var MATERIAL_TIMBERS_TERMS = [
4841
4940
  EN_135562,
4842
4941
  { broaderSlug: HARDWOOD_SLUG }
4843
4942
  ),
4943
+ mgWoodTerm(
4944
+ "sucupira",
4945
+ "Sucupira",
4946
+ "Hardwood timber traded as sucupira from Bowdichia and Diplotropis species, commercially cut across Brazil and the Guianas."
4947
+ ),
4844
4948
  compositionTerm(
4845
4949
  "sycamore",
4846
4950
  "Sycamore",
@@ -4848,6 +4952,12 @@ var MATERIAL_TIMBERS_TERMS = [
4848
4952
  `${EN_135562}; ${WOOD_HANDBOOK4}`,
4849
4953
  { broaderSlug: HARDWOOD_SLUG }
4850
4954
  ),
4955
+ mgWoodTerm(
4956
+ "tigerwood",
4957
+ "Tigerwood",
4958
+ "Hardwood timber from Astronium fraxinifolium and Astronium graveolens, commercially cut across tropical Central and South America.",
4959
+ { altLabels: ["Goncalo alves"] }
4960
+ ),
4851
4961
  // Species, alphabetical.
4852
4962
  compositionTerm(
4853
4963
  "afromosia",
@@ -4856,6 +4966,12 @@ var MATERIAL_TIMBERS_TERMS = [
4856
4966
  EN_135562,
4857
4967
  { altLabels: ["Afromosia"], broaderSlug: HARDWOOD_SLUG }
4858
4968
  ),
4969
+ // EN 13556 carries this species under code DIXX.
4970
+ mgWoodTerm(
4971
+ "angelique",
4972
+ "Angelique",
4973
+ "Hardwood timber from Dicorynia guianensis, commercially cut across French Guiana and Suriname."
4974
+ ),
4859
4975
  compositionTerm(
4860
4976
  "balsa",
4861
4977
  "Balsa",
@@ -4870,6 +4986,11 @@ var MATERIAL_TIMBERS_TERMS = [
4870
4986
  EN_135562,
4871
4987
  { broaderSlug: HARDWOOD_SLUG, seenAs: ["Brazilian teak"] }
4872
4988
  ),
4989
+ mgWoodTerm(
4990
+ "garapa",
4991
+ "Garapa",
4992
+ "Hardwood timber from Apuleia leiocarpa, commercially cut across Brazil."
4993
+ ),
4873
4994
  compositionTerm(
4874
4995
  "iroko",
4875
4996
  "Iroko",
@@ -4882,7 +5003,7 @@ var MATERIAL_TIMBERS_TERMS = [
4882
5003
  "Jatoba",
4883
5004
  "Hardwood timber from Hymenaea courbaril, commercially cut across Central and South America.",
4884
5005
  EN_135562,
4885
- { broaderSlug: HARDWOOD_SLUG, seenAs: ["Brazilian cherry"] }
5006
+ { altLabels: ["Brazilian Cherry"], broaderSlug: HARDWOOD_SLUG }
4886
5007
  ),
4887
5008
  compositionTerm(
4888
5009
  "kempas",
@@ -4898,6 +5019,22 @@ var MATERIAL_TIMBERS_TERMS = [
4898
5019
  EN_135562,
4899
5020
  { altLabels: ["Korina"], broaderSlug: HARDWOOD_SLUG }
4900
5021
  ),
5022
+ mgWoodTerm(
5023
+ "madrone",
5024
+ "Madrone",
5025
+ "Hardwood timber from Arbutus menziesii, commercially cut across the Pacific coast of North America.",
5026
+ { altLabels: ["Madrona"] }
5027
+ ),
5028
+ mgWoodTerm(
5029
+ "makore",
5030
+ "Makore",
5031
+ "Hardwood timber from Tieghemella heckelii, commercially cut across West Africa."
5032
+ ),
5033
+ mgWoodTerm(
5034
+ "pear",
5035
+ "Pear",
5036
+ "Hardwood timber from Pyrus communis, commercially cut across Europe."
5037
+ ),
4901
5038
  compositionTerm(
4902
5039
  "rubberwood",
4903
5040
  "Rubberwood",
@@ -4912,6 +5049,26 @@ var MATERIAL_TIMBERS_TERMS = [
4912
5049
  EN_135562,
4913
5050
  { broaderSlug: HARDWOOD_SLUG }
4914
5051
  ),
5052
+ mgWoodTerm(
5053
+ "sweetgum",
5054
+ "Sweetgum",
5055
+ "Hardwood timber from Liquidambar styraciflua, commercially cut across the south-eastern United States.",
5056
+ { seenAs: ["Gum"] }
5057
+ ),
5058
+ // American tulipwood, not Brazilian tulipwood (Dalbergia decipularis): the CITES-II-restricted
5059
+ // Brazilian species trades in small veneer for inlay and marquetry, never architectural flooring,
5060
+ // while Liriodendron tulipifera is the plantation hardwood AHEC actively markets internationally
5061
+ // as American tulipwood for flooring, veneer and joinery. Material Bank's flooring and veneer
5062
+ // catalogue means the American species. `poplar`'s own `seenAs: ["tulip poplar"]` names this same
5063
+ // species under its domestic US common name; it is not touched here, but is flagged in the
5064
+ // release notes as a likely pre-existing mislabel, since tulip poplar is Liriodendron, not the
5065
+ // Populus genus poplar names.
5066
+ mgWoodTerm(
5067
+ "tulipwood",
5068
+ "American tulipwood",
5069
+ "Hardwood timber from Liriodendron tulipifera, commercially cut across the eastern United States and marketed internationally as American tulipwood.",
5070
+ { altLabels: ["Liriodendron tulipifera"], seenAs: ["Tulipwood"] }
5071
+ ),
4915
5072
  compositionTerm(
4916
5073
  "wenge",
4917
5074
  "Wenge",
@@ -5812,24 +5969,11 @@ var PALETTE_CHARACTER_TERMS = [
5812
5969
  }
5813
5970
  ];
5814
5971
 
5815
- // src/axes/pattern.ts
5816
- var SOURCE4 = "pattern vocabulary in a furnishings retailer (src-03)";
5817
- var SNAPSHOT6 = "2026-08-25";
5818
- var RETRIEVAL_SNAPSHOT2 = "2026-08-27";
5819
- var RETRIEVAL_SCALE = "ms_pattern_scale, a dictionary in a materials-retrieval system (src-05)";
5820
- var RETRIEVAL_DENSITY = "ms_pattern_density, a dictionary in a materials-retrieval system (src-05)";
5821
- var RETRIEVAL_REGULARITY = "ms_pattern_regularity, a dictionary in a materials-retrieval system (src-05)";
5822
- var RETRIEVAL_DIRECTIONALITY = "ms_directionality, a dictionary in a materials-retrieval system (src-05)";
5823
- var GEOMETRY_REVIEW_DATE = "2026-08-31";
5824
- var GEOMETRY_SOURCE = "Linear TAX-45 reviewed implementation contract";
5825
- var REVIEW_DATE7 = "2026-09-11";
5826
- var REVIEW_SOURCE6 = "everyday-interiors vocabulary review";
5827
- var GEOMETRY_EVIDENCE_SOURCE = "Linear TAX-45 reviewed implementation contract; herringbone and chevron product-language audit in a materials-retrieval system (src-05)";
5972
+ // src/axes/pattern-tax57.ts
5828
5973
  var TAX57_DATE3 = "2026-09-26";
5829
5974
  var TAX57_SOURCE2 = "Linear TAX-57 visual-vocabulary review";
5830
5975
  var PIM_MOTIF_SOURCE = "the pattern-motif column in a materials-marketplace catalogue (src-04), non-Samplize SKUs";
5831
5976
  var PIM_FIGURE_SOURCE = "the surface-figure column in a materials-marketplace catalogue (src-04), non-Samplize SKUs";
5832
- var ANIMAL_PRINT_SLUG = "animal-print";
5833
5977
  var pimTerm = (slug, label, definition, source, extra = {}) => ({
5834
5978
  definition,
5835
5979
  introducedAt: TAX57_DATE3,
@@ -5849,6 +5993,145 @@ var authoredTax57 = (slug, label, definition, extra = {}) => ({
5849
5993
  ...extra
5850
5994
  });
5851
5995
  var wikidata4 = (id, label) => `Wikidata ${id} ${label}, https://www.wikidata.org/wiki/${id}`;
5996
+
5997
+ // src/axes/pattern-figure.ts
5998
+ var PATTERN_FIGURE_TERMS = [
5999
+ pimTerm(
6000
+ "unvaried",
6001
+ "Unvaried",
6002
+ "No visible natural variation across the surface.",
6003
+ PIM_FIGURE_SOURCE,
6004
+ { seenAs: ["No Variation"] }
6005
+ ),
6006
+ pimTerm(
6007
+ "speckled",
6008
+ "Speckled",
6009
+ "Fine flecks and speckles scattered across the surface.",
6010
+ PIM_FIGURE_SOURCE,
6011
+ { seenAs: ["Flecks & Speckles"] }
6012
+ ),
6013
+ pimTerm(
6014
+ "linear-veining",
6015
+ "Linear veining",
6016
+ "Veining running in one consistent direction across the surface.",
6017
+ PIM_FIGURE_SOURCE,
6018
+ { seenAs: ["Linear Veins"] }
6019
+ ),
6020
+ pimTerm(
6021
+ "multi-directional-veining",
6022
+ "Multi-directional veining",
6023
+ "Veining running in more than one direction across the surface, with no single dominant axis.",
6024
+ PIM_FIGURE_SOURCE,
6025
+ { seenAs: ["Multi-Directional Veins"] }
6026
+ ),
6027
+ pimTerm(
6028
+ "mottled",
6029
+ "Mottled",
6030
+ "Uneven patches or blotches of tone breaking up an otherwise even surface.",
6031
+ PIM_FIGURE_SOURCE
6032
+ ),
6033
+ pimTerm(
6034
+ "cloudy",
6035
+ "Cloudy",
6036
+ "Soft, diffuse variation in tone with no distinct veins or edges, reading as drifting cloud.",
6037
+ PIM_FIGURE_SOURCE
6038
+ ),
6039
+ pimTerm(
6040
+ "breccia",
6041
+ "Breccia",
6042
+ "Angular fragments of stone bound within a contrasting matrix.",
6043
+ `${PIM_FIGURE_SOURCE}; ${wikidata4("Q191250", "breccia")}`,
6044
+ { seenAs: ["Angular Fragments"] }
6045
+ ),
6046
+ pimTerm(
6047
+ "swirling",
6048
+ "Swirling",
6049
+ "Variation that curls and eddies across the surface rather than running in straight lines or veins.",
6050
+ PIM_FIGURE_SOURCE
6051
+ ),
6052
+ pimTerm(
6053
+ "fossiliferous",
6054
+ "Fossil",
6055
+ "Visible shells or fossil forms embedded in the surface.",
6056
+ PIM_FIGURE_SOURCE,
6057
+ { seenAs: ["Shells & Fossils"] }
6058
+ ),
6059
+ pimTerm(
6060
+ "pitted",
6061
+ "Pitted",
6062
+ "Surface holes and pitting left unfilled, as in unfilled travertine.",
6063
+ PIM_FIGURE_SOURCE,
6064
+ { seenAs: ["Holes & Pitting"] }
6065
+ ),
6066
+ pimTerm(
6067
+ "brindled",
6068
+ "Brindled",
6069
+ "Irregular streaky variation running through the surface, as in a brindled coat.",
6070
+ PIM_FIGURE_SOURCE,
6071
+ { seenAs: ["Brindle"] }
6072
+ ),
6073
+ pimTerm(
6074
+ "mineral-inclusions",
6075
+ "Mineral inclusions",
6076
+ "Visible mineral deposits embedded within the surface.",
6077
+ PIM_FIGURE_SOURCE,
6078
+ { seenAs: ["Mineral Deposits"] }
6079
+ ),
6080
+ // `rustic` is deliberately not an alt label: it names a style, and prominent knots do not make a
6081
+ // timber rustic in the style sense, so treating the words as interchangeable would smuggle a
6082
+ // STYLE claim into a FIGURE one.
6083
+ pimTerm(
6084
+ "knotty",
6085
+ "Knotty",
6086
+ "Timber figure carrying prominent, frequent knots.",
6087
+ PIM_FIGURE_SOURCE,
6088
+ { seenAs: ["Knots"] }
6089
+ ),
6090
+ // AUTHORED. No Material Bank PIM column value names the absence of figure; clear grain is the
6091
+ // un-figured baseline that gives knotty, burl, fiddleback and bird's-eye something to contrast
6092
+ // against. It is not their parent: figure is unranked and unordered, and a plain surface is not
6093
+ // a kind of knotty one, only its absence.
6094
+ authoredTax57(
6095
+ "clear-grain",
6096
+ "Clear grain",
6097
+ "Timber figure free of knots, with an even, minimally figured grain."
6098
+ ),
6099
+ pimTerm(
6100
+ "burl",
6101
+ "Burl",
6102
+ "A swirling, densely clustered grain figure cut from a tree's burl growth.",
6103
+ `${PIM_FIGURE_SOURCE}; ${wikidata4("Q1483529", "burl")}`
6104
+ ),
6105
+ // AUTHORED. No Wikidata item for fiddleback figure on the review date.
6106
+ authoredTax57(
6107
+ "fiddleback",
6108
+ "Fiddleback",
6109
+ "A tight, uniform rippled figure running across the grain, historically prized for violin backs."
6110
+ ),
6111
+ pimTerm(
6112
+ "birds-eye",
6113
+ "Bird's eye",
6114
+ "Small, round, eye-like figure dots scattered through the grain, as in bird's-eye maple.",
6115
+ `${PIM_FIGURE_SOURCE}; ${wikidata4("Q164973", "bird's eye figure")}`
6116
+ )
6117
+ ];
6118
+
6119
+ // src/axes/pattern.ts
6120
+ var SOURCE4 = "pattern vocabulary in a furnishings retailer (src-03)";
6121
+ var SNAPSHOT6 = "2026-08-25";
6122
+ var RETRIEVAL_SNAPSHOT2 = "2026-08-27";
6123
+ var RETRIEVAL_SCALE = "ms_pattern_scale, a dictionary in a materials-retrieval system (src-05)";
6124
+ var RETRIEVAL_DENSITY = "ms_pattern_density, a dictionary in a materials-retrieval system (src-05)";
6125
+ var RETRIEVAL_REGULARITY = "ms_pattern_regularity, a dictionary in a materials-retrieval system (src-05)";
6126
+ var RETRIEVAL_DIRECTIONALITY = "ms_directionality, a dictionary in a materials-retrieval system (src-05)";
6127
+ var GEOMETRY_REVIEW_DATE = "2026-08-31";
6128
+ var GEOMETRY_SOURCE = "Linear TAX-45 reviewed implementation contract";
6129
+ var REVIEW_DATE7 = "2026-09-11";
6130
+ var REVIEW_SOURCE6 = "everyday-interiors vocabulary review";
6131
+ var GEOMETRY_EVIDENCE_SOURCE = "Linear TAX-45 reviewed implementation contract; herringbone and chevron product-language audit in a materials-retrieval system (src-05)";
6132
+ var ANIMAL_PRINT_SLUG = "animal-print";
6133
+ var TAX58_DATE = "2026-09-27";
6134
+ var TAX58_SOURCE = "Linear TAX-58 visual-vocabulary review; MG-2218 reconciliation";
5852
6135
  var term7 = (slug, label, definition, extra = {}) => ({
5853
6136
  definition,
5854
6137
  label,
@@ -5925,6 +6208,35 @@ var PATTERN_TYPE_TERMS = [
5925
6208
  PIM_MOTIF_SOURCE,
5926
6209
  { broaderSlug: ANIMAL_PRINT_SLUG }
5927
6210
  ),
6211
+ // TAX-58, sitting between abstract-organic's fluid biomorphic forms and geometric's regular
6212
+ // grids; 5,015 records, all from Material Bank's catalogue feed crosswalk.
6213
+ {
6214
+ definition: "Angular, hard-edged graphic abstraction, distinct from fluid biomorphic abstraction and from regular geometric repeats.",
6215
+ introducedAt: TAX58_DATE,
6216
+ label: "Abstract graphic",
6217
+ provenance: {
6218
+ basis: "evidenced",
6219
+ snapshot: TAX58_DATE,
6220
+ source: TAX58_SOURCE
6221
+ },
6222
+ reviewedAt: TAX58_DATE,
6223
+ slug: "abstract-graphic"
6224
+ },
6225
+ // TAX-58. Filed under cultural-heritage, not as a root concept: the boteh motif is explicitly
6226
+ // drawn from a named textile tradition, which is that term's own boundary. 32 records.
6227
+ {
6228
+ broaderSlug: "cultural-heritage",
6229
+ definition: "The boteh teardrop motif of Persian and South Asian textile tradition.",
6230
+ introducedAt: TAX58_DATE,
6231
+ label: "Paisley",
6232
+ provenance: {
6233
+ basis: "evidenced",
6234
+ snapshot: TAX58_DATE,
6235
+ source: TAX58_SOURCE
6236
+ },
6237
+ reviewedAt: TAX58_DATE,
6238
+ slug: "paisley"
6239
+ },
5928
6240
  term7(
5929
6241
  "botanical",
5930
6242
  "Botanical",
@@ -6271,126 +6583,6 @@ var PATTERN_DIRECTIONALITY_TERMS = [
6271
6583
  "Two axes of equal weight, so the material reads correctly either way up."
6272
6584
  )
6273
6585
  ];
6274
- var PATTERN_FIGURE_TERMS = [
6275
- pimTerm(
6276
- "unvaried",
6277
- "Unvaried",
6278
- "No visible natural variation across the surface.",
6279
- PIM_FIGURE_SOURCE,
6280
- { seenAs: ["No Variation"] }
6281
- ),
6282
- pimTerm(
6283
- "speckled",
6284
- "Speckled",
6285
- "Fine flecks and speckles scattered across the surface.",
6286
- PIM_FIGURE_SOURCE,
6287
- { seenAs: ["Flecks & Speckles"] }
6288
- ),
6289
- pimTerm(
6290
- "linear-veining",
6291
- "Linear veining",
6292
- "Veining running in one consistent direction across the surface.",
6293
- PIM_FIGURE_SOURCE,
6294
- { seenAs: ["Linear Veins"] }
6295
- ),
6296
- pimTerm(
6297
- "multi-directional-veining",
6298
- "Multi-directional veining",
6299
- "Veining running in more than one direction across the surface, with no single dominant axis.",
6300
- PIM_FIGURE_SOURCE,
6301
- { seenAs: ["Multi-Directional Veins"] }
6302
- ),
6303
- pimTerm(
6304
- "mottled",
6305
- "Mottled",
6306
- "Uneven patches or blotches of tone breaking up an otherwise even surface.",
6307
- PIM_FIGURE_SOURCE
6308
- ),
6309
- pimTerm(
6310
- "cloudy",
6311
- "Cloudy",
6312
- "Soft, diffuse variation in tone with no distinct veins or edges, reading as drifting cloud.",
6313
- PIM_FIGURE_SOURCE
6314
- ),
6315
- pimTerm(
6316
- "breccia",
6317
- "Breccia",
6318
- "Angular fragments of stone bound within a contrasting matrix.",
6319
- `${PIM_FIGURE_SOURCE}; ${wikidata4("Q191250", "breccia")}`,
6320
- { seenAs: ["Angular Fragments"] }
6321
- ),
6322
- pimTerm(
6323
- "swirling",
6324
- "Swirling",
6325
- "Variation that curls and eddies across the surface rather than running in straight lines or veins.",
6326
- PIM_FIGURE_SOURCE
6327
- ),
6328
- pimTerm(
6329
- "fossiliferous",
6330
- "Fossil",
6331
- "Visible shells or fossil forms embedded in the surface.",
6332
- PIM_FIGURE_SOURCE,
6333
- { seenAs: ["Shells & Fossils"] }
6334
- ),
6335
- pimTerm(
6336
- "pitted",
6337
- "Pitted",
6338
- "Surface holes and pitting left unfilled, as in unfilled travertine.",
6339
- PIM_FIGURE_SOURCE,
6340
- { seenAs: ["Holes & Pitting"] }
6341
- ),
6342
- pimTerm(
6343
- "brindled",
6344
- "Brindled",
6345
- "Irregular streaky variation running through the surface, as in a brindled coat.",
6346
- PIM_FIGURE_SOURCE,
6347
- { seenAs: ["Brindle"] }
6348
- ),
6349
- pimTerm(
6350
- "mineral-inclusions",
6351
- "Mineral inclusions",
6352
- "Visible mineral deposits embedded within the surface.",
6353
- PIM_FIGURE_SOURCE,
6354
- { seenAs: ["Mineral Deposits"] }
6355
- ),
6356
- // `rustic` is deliberately not an alt label: it names a style, and prominent knots do not make a
6357
- // timber rustic in the style sense, so treating the words as interchangeable would smuggle a
6358
- // STYLE claim into a FIGURE one.
6359
- pimTerm(
6360
- "knotty",
6361
- "Knotty",
6362
- "Timber figure carrying prominent, frequent knots.",
6363
- PIM_FIGURE_SOURCE,
6364
- { seenAs: ["Knots"] }
6365
- ),
6366
- // AUTHORED. No Material Bank PIM column value names the absence of figure; clear grain is the
6367
- // un-figured baseline that gives knotty, burl, fiddleback and bird's-eye something to contrast
6368
- // against. It is not their parent: figure is unranked and unordered, and a plain surface is not
6369
- // a kind of knotty one, only its absence.
6370
- authoredTax57(
6371
- "clear-grain",
6372
- "Clear grain",
6373
- "Timber figure free of knots, with an even, minimally figured grain."
6374
- ),
6375
- pimTerm(
6376
- "burl",
6377
- "Burl",
6378
- "A swirling, densely clustered grain figure cut from a tree's burl growth.",
6379
- `${PIM_FIGURE_SOURCE}; ${wikidata4("Q1483529", "burl")}`
6380
- ),
6381
- // AUTHORED. No Wikidata item for fiddleback figure on the review date.
6382
- authoredTax57(
6383
- "fiddleback",
6384
- "Fiddleback",
6385
- "A tight, uniform rippled figure running across the grain, historically prized for violin backs."
6386
- ),
6387
- pimTerm(
6388
- "birds-eye",
6389
- "Bird's eye",
6390
- "Small, round, eye-like figure dots scattered through the grain, as in bird's-eye maple.",
6391
- `${PIM_FIGURE_SOURCE}; ${wikidata4("Q164973", "bird's eye figure")}`
6392
- )
6393
- ];
6394
6586
  var PATTERN_TERMS = [
6395
6587
  ...PATTERN_TYPE_TERMS,
6396
6588
  ...PATTERN_SCALE_TERMS,
@@ -7137,7 +7329,7 @@ var PRODUCT_CATEGORY_TERMS = [
7137
7329
  fromSearchCorpus(
7138
7330
  "wall-panel",
7139
7331
  "Wall panel",
7140
- "A panel product supplied to form or cover the visible face of a wall, independent of the panel material and the wall element behind it.",
7332
+ "A panel product supplied to form or cover the visible face of a wall, independent of the panel material and the wall element behind it; an external, weather-facing panel is cladding.",
7141
7333
  {
7142
7334
  altLabels: ["wall panelling", "wall paneling"],
7143
7335
  broaderSlug: "wallcovering",
@@ -7215,6 +7407,48 @@ var PRODUCT_CATEGORY_TERMS = [
7215
7407
  )
7216
7408
  ]
7217
7409
  }
7410
+ ),
7411
+ // Distinct from `wall-panel` and `wallcovering`, which finish a wall's visible face without
7412
+ // weathering it. Façade tile stays `tile` under tile's own definition. Uniclass's nearest Pr
7413
+ // code, Pr_25_71_14 "Cladding and lining panels", names both this category and interior lining
7414
+ // in one code, so it is not an exact match and is recorded as a dated negative instead.
7415
+ term8(
7416
+ "cladding",
7417
+ "Cladding",
7418
+ "A board or panel product supplied to form the external, weather-facing face of a building's walls, independent of its material and of the structure behind it; not a tile, a render or a glazed curtain wall.",
7419
+ {
7420
+ altLabels: [
7421
+ "siding",
7422
+ "facade cladding",
7423
+ "fa\xE7ade cladding",
7424
+ "exterior cladding",
7425
+ "rainscreen cladding",
7426
+ "facade panel"
7427
+ ],
7428
+ introducedAt: REVIEW_DATE8,
7429
+ provenance: { basis: "authored", source: REVIEW_SOURCE7 },
7430
+ reviewedAt: REVIEW_DATE8,
7431
+ searchedWithout: [
7432
+ searchedUniclassOnReview(
7433
+ "cladding, facade cladding, siding, rainscreen cladding"
7434
+ )
7435
+ ],
7436
+ seenAs: ["Facade", "Rainscreens", "Exterior Panel Systems"]
7437
+ }
7438
+ ),
7439
+ // A sofa bed stays `sofa`. Bedding is deliberately not added yet, because MaterialGraph has no
7440
+ // bedding products.
7441
+ term8(
7442
+ "bed",
7443
+ "Bed",
7444
+ "A furniture product supplied to sleep or lie on, or the frame or headboard made for one, independent of its material and size; not a mattress, bedding or a sofa bed.",
7445
+ {
7446
+ altLabels: ["bed frame"],
7447
+ external: [uniclass2("Pr_40_50_06", "Beds", "broad")],
7448
+ introducedAt: REVIEW_DATE8,
7449
+ provenance: { basis: "authored", source: REVIEW_SOURCE7 },
7450
+ reviewedAt: REVIEW_DATE8
7451
+ }
7218
7452
  )
7219
7453
  ];
7220
7454
 
@@ -11522,8 +11756,8 @@ var resolveReference = (reference) => INDEX.byKey.get(canonicalKey(reference));
11522
11756
 
11523
11757
  // src/v1.ts
11524
11758
  var TAXONOMY_BASE_URI = "https://taxonomy.materialinstruments.com";
11525
- var TAXONOMY_SNAPSHOT = "2026-09-26";
11526
- var TAXONOMY_VERSION = "1.8.0";
11759
+ var TAXONOMY_SNAPSHOT = "2026-09-28";
11760
+ var TAXONOMY_VERSION = "1.10.0";
11527
11761
  var PUBLISHED_V1_BASELINE = "2026-08-30";
11528
11762
  var TAX45_REVIEW_SNAPSHOT = "2026-08-31";
11529
11763
  var LIMESTONE_INTRODUCED = "2026-09-01";
@@ -11803,7 +12037,7 @@ var WALNUT_MATERIAL = {
11803
12037
  uri: `${TAXONOMY_BASE_URI}/id/material/walnut`
11804
12038
  };
11805
12039
  var WALNUT_COLOUR = {
11806
- ...colorScope("brown-grayish-walnut", NAMED_COLOR_REFERENCE_KIND),
12040
+ ...colorScope("walnut", NAMED_COLOR_REFERENCE_KIND),
11807
12041
  role: "secondary"
11808
12042
  };
11809
12043
  var ordered = (path, role) => ({
@@ -11827,6 +12061,12 @@ var HIERARCHY_REVIEW_LIFECYCLE = {
11827
12061
  };
11828
12062
  var AMBIGUITY_GOVERNANCE = "Taxonomy preserves the governed readings without assigning a default, role, contextual preference, or consumer route.";
11829
12063
  var ORDERED_READING_GOVERNANCE = "The two readings are deliberately separate; the default records trade usage and does not merge the concepts.";
12064
+ var TAX_1_9_0_DATE = "2026-09-27";
12065
+ var TAXONOMY_SNAPSHOT_LIFECYCLE = {
12066
+ introducedAt: TAX_1_9_0_DATE,
12067
+ reviewedAt: TAX_1_9_0_DATE,
12068
+ status: "active"
12069
+ };
11830
12070
  var TAX57_DATE4 = "2026-09-26";
11831
12071
  var TAX57_LIFECYCLE = {
11832
12072
  introducedAt: TAX57_DATE4,
@@ -11842,7 +12082,7 @@ var REVIEW_LIFECYCLE = {
11842
12082
  status: "active"
11843
12083
  };
11844
12084
  var REVIEW_SOURCE9 = "everyday-interiors vocabulary review";
11845
- var COLORSCOPE_INSTALLED = "@instruments/colorscope 7.6.0 data/reference/v1/taxonomy.json";
12085
+ var COLORSCOPE_INSTALLED = "@instruments/colorscope 9.4.0 data/reference/v1/taxonomy.json";
11846
12086
  var reviewedTaxonomy = (path) => ({
11847
12087
  authority: "taxonomy",
11848
12088
  uri: `${TAXONOMY_BASE_URI}/id/${path}`
@@ -11866,6 +12106,30 @@ var referencedCrossover = (phrase, taxonomyPath, colorScopeIdentifier, explanati
11866
12106
  ...additionalReadings
11867
12107
  ]
11868
12108
  });
12109
+ var WOOD_HANDBOOK5 = "USDA Wood Handbook (2021), chapter 2";
12110
+ var colorscope940Crossover = (phrase, taxonomyPath, colorScopeIdentifier, explanation, definitionSource, additionalReadings = []) => ({
12111
+ explanation,
12112
+ governance: lexicalGovernance(
12113
+ AMBIGUITY_GOVERNANCE,
12114
+ {
12115
+ basis: "referenced",
12116
+ snapshot: TAXONOMY_SNAPSHOT,
12117
+ source: `${definitionSource}; ${COLORSCOPE_INSTALLED} concept ${colorScopeIdentifier}`
12118
+ },
12119
+ {
12120
+ introducedAt: TAXONOMY_SNAPSHOT,
12121
+ reviewedAt: TAXONOMY_SNAPSHOT,
12122
+ status: "active"
12123
+ }
12124
+ ),
12125
+ outcome: "ambiguous",
12126
+ phrase,
12127
+ readings: [
12128
+ reviewedTaxonomy(taxonomyPath),
12129
+ colorScope(colorScopeIdentifier, NAMED_COLOR_REFERENCE_KIND),
12130
+ ...additionalReadings
12131
+ ]
12132
+ });
11869
12133
  var crossoverAmbiguity = (phrase, taxonomyUri, colorScopeIdentifier, explanation, source, additionalTaxonomyUris = []) => ({
11870
12134
  explanation,
11871
12135
  governance: lexicalGovernance(
@@ -11988,14 +12252,14 @@ var AUTHORED_LEXICAL_ENTRIES = [
11988
12252
  crossoverAmbiguity(
11989
12253
  "alabaster",
11990
12254
  `${TAXONOMY_BASE_URI}/id/material/alabaster`,
11991
- "cream-soft-cream-white",
11992
- "Alabaster can name decorative gypsum stone or an explicit ColorScope alias for Cream White; neither reading establishes the other.",
11993
- crossoverSource("alabaster")
12255
+ "alabaster",
12256
+ "Alabaster can name decorative gypsum stone or the ColorScope named colour Alabaster; neither reading establishes the other.",
12257
+ `${crossoverSource("alabaster")}; @instruments/colorscope 9.4.0 id "alabaster", family cream, matching the retired "cream-soft-cream-white" reading's cream family`
11994
12258
  ),
11995
12259
  crossoverAmbiguity(
11996
12260
  "brass",
11997
12261
  `${TAXONOMY_BASE_URI}/id/material/brass`,
11998
- "yellow-warm-brass",
12262
+ "brass",
11999
12263
  "Brass can name a copper-zinc alloy, an exposed applied brass finish, or a ColorScope named colour; none establishes either of the others.",
12000
12264
  crossoverSource("brass"),
12001
12265
  [`${TAXONOMY_BASE_URI}/id/finish/treatment/brass`]
@@ -12003,105 +12267,105 @@ var AUTHORED_LEXICAL_ENTRIES = [
12003
12267
  crossoverAmbiguity(
12004
12268
  "bronze",
12005
12269
  `${TAXONOMY_BASE_URI}/id/material/bronze`,
12006
- "brown-mid-bronze",
12270
+ "bronze",
12007
12271
  "Bronze can name a copper-alloy family or a ColorScope named colour; the unmodified word does not identify a specific composition.",
12008
12272
  crossoverSource("bronze")
12009
12273
  ),
12010
12274
  crossoverAmbiguity(
12011
12275
  "chrome",
12012
12276
  `${TAXONOMY_BASE_URI}/id/finish/treatment/chrome`,
12013
- "gray-pale-chrome",
12277
+ "chrome",
12014
12278
  "Chrome can name a metallic chromium coating or a ColorScope named colour; it is not silently normalized to chromium as a material.",
12015
12279
  crossoverSource("chrome")
12016
12280
  ),
12017
12281
  crossoverAmbiguity(
12018
12282
  "cherry",
12019
12283
  `${TAXONOMY_BASE_URI}/id/material/cherry`,
12020
- "red-warm-cherry-red",
12021
- "Cherry can name timber or an explicit ColorScope alias for Cherry Red; the common name does not prove species or colour.",
12022
- crossoverSource("cherry")
12284
+ "cherry",
12285
+ "Cherry can name timber or the ColorScope named colour Cherry; the common name does not prove species or colour.",
12286
+ `${crossoverSource("cherry")}; @instruments/colorscope 9.4.0 id "cherry", family red, matching the retired "red-warm-cherry-red" reading's red family`
12023
12287
  ),
12024
12288
  crossoverAmbiguity(
12025
12289
  "chestnut",
12026
12290
  `${TAXONOMY_BASE_URI}/id/material/chestnut`,
12027
- "brown-warm-chestnut",
12291
+ "chestnut",
12028
12292
  "Chestnut can name timber or a ColorScope named colour; neither reading proves species, construction, or appearance.",
12029
12293
  crossoverSource("chestnut")
12030
12294
  ),
12031
12295
  crossoverAmbiguity(
12032
12296
  "clay",
12033
12297
  `${TAXONOMY_BASE_URI}/id/material/clay`,
12034
- "orange-warm-clay",
12298
+ "clay",
12035
12299
  "Clay can name a fine-grained earthy material or a ColorScope named colour; the word alone proves neither firing nor appearance.",
12036
12300
  crossoverSource("clay")
12037
12301
  ),
12038
12302
  crossoverAmbiguity(
12039
12303
  "copper",
12040
12304
  `${TAXONOMY_BASE_URI}/id/material/copper`,
12041
- "brown-mid-copper",
12305
+ "copper",
12042
12306
  "Copper can name a metal or a ColorScope named colour; colour resemblance does not establish copper content.",
12043
12307
  crossoverSource("copper")
12044
12308
  ),
12045
12309
  crossoverAmbiguity(
12046
12310
  "denim",
12047
12311
  `${TAXONOMY_BASE_URI}/id/material/denim`,
12048
- "blue-vivid-denim",
12312
+ "denim",
12049
12313
  "Denim can name a woven fabric construction or a ColorScope named colour; denim need not be blue.",
12050
12314
  crossoverSource("denim")
12051
12315
  ),
12052
12316
  crossoverAmbiguity(
12053
12317
  "ebony",
12054
12318
  `${TAXONOMY_BASE_URI}/id/material/ebony`,
12055
- "black-warm-ebony",
12319
+ "ebony",
12056
12320
  "Ebony can name traded timber or a ColorScope named colour; the trade name does not prove botanical identity or black colour.",
12057
12321
  crossoverSource("ebony")
12058
12322
  ),
12059
12323
  crossoverAmbiguity(
12060
12324
  "gold",
12061
12325
  `${TAXONOMY_BASE_URI}/id/material/gold`,
12062
- "yellow-bright-gold",
12326
+ "gold",
12063
12327
  "Gold can name the metallic element or a ColorScope named colour; appearance does not establish composition or coating.",
12064
12328
  crossoverSource("gold")
12065
12329
  ),
12066
12330
  crossoverAmbiguity(
12067
12331
  "gunmetal",
12068
12332
  `${TAXONOMY_BASE_URI}/id/material/gunmetal`,
12069
- "gray-muted-gunmetal",
12333
+ "gunmetal",
12070
12334
  "Gunmetal can name a casting-alloy family or a ColorScope named colour; grade and appearance remain separate claims.",
12071
12335
  crossoverSource("gunmetal")
12072
12336
  ),
12073
12337
  crossoverAmbiguity(
12074
12338
  "iron",
12075
12339
  `${TAXONOMY_BASE_URI}/id/material/iron`,
12076
- "gray-dark-iron",
12340
+ "iron",
12077
12341
  "Iron can name the metallic element or a ColorScope named colour; the bare word does not settle material form or appearance.",
12078
12342
  crossoverSource("iron")
12079
12343
  ),
12080
12344
  crossoverAmbiguity(
12081
12345
  "jade",
12082
12346
  `${TAXONOMY_BASE_URI}/id/material/jade`,
12083
- "green-mid-jade",
12347
+ "jade",
12084
12348
  "Jade can name an umbrella gem material or a ColorScope named colour; jade is not one mineral and need not be green.",
12085
12349
  crossoverSource("jade")
12086
12350
  ),
12087
12351
  crossoverAmbiguity(
12088
12352
  "linen",
12089
12353
  `${TAXONOMY_BASE_URI}/id/material/linen`,
12090
- "cream-pale-linen",
12354
+ "linen",
12091
12355
  "Linen can name a flax-derived material or a ColorScope named colour; colour does not establish fibre composition.",
12092
12356
  crossoverSource("linen")
12093
12357
  ),
12094
12358
  crossoverAmbiguity(
12095
12359
  "mahogany",
12096
12360
  `${TAXONOMY_BASE_URI}/id/material/mahogany`,
12097
- "brown-dark-mahogany",
12361
+ "mahogany",
12098
12362
  "Mahogany can name commercially grouped timber or a ColorScope named colour; neither reading proves species or appearance.",
12099
12363
  crossoverSource("mahogany")
12100
12364
  ),
12101
12365
  crossoverAmbiguity(
12102
12366
  "nickel",
12103
12367
  `${TAXONOMY_BASE_URI}/id/material/nickel`,
12104
- "gray-muted-nickel",
12368
+ "nickel",
12105
12369
  "Nickel can name a bulk metallic material, an electrodeposited finish, or a ColorScope named colour; the bare word does not select among them.",
12106
12370
  crossoverSource("nickel"),
12107
12371
  [`${TAXONOMY_BASE_URI}/id/finish/treatment/nickel`]
@@ -12109,63 +12373,63 @@ var AUTHORED_LEXICAL_ENTRIES = [
12109
12373
  crossoverAmbiguity(
12110
12374
  "obsidian",
12111
12375
  `${TAXONOMY_BASE_URI}/id/material/obsidian`,
12112
- "black-cool-obsidian",
12376
+ "obsidian",
12113
12377
  "Obsidian can name volcanic glass or a ColorScope named colour; the material is not necessarily black.",
12114
12378
  crossoverSource("obsidian")
12115
12379
  ),
12116
12380
  crossoverAmbiguity(
12117
12381
  "onyx",
12118
12382
  `${TAXONOMY_BASE_URI}/id/material/onyx`,
12119
- "black-warm-onyx",
12383
+ "onyx",
12120
12384
  "Onyx can name commercial architectural stone or a ColorScope named colour; architectural onyx is not necessarily black.",
12121
12385
  crossoverSource("onyx")
12122
12386
  ),
12123
12387
  crossoverAmbiguity(
12124
12388
  "pewter",
12125
12389
  `${TAXONOMY_BASE_URI}/id/material/pewter`,
12126
- "gray-soft-pewter",
12390
+ "pewter",
12127
12391
  "Pewter can name a variable tin-alloy family or a ColorScope named colour; composition and appearance remain separate.",
12128
12392
  crossoverSource("pewter")
12129
12393
  ),
12130
12394
  crossoverAmbiguity(
12131
12395
  "platinum",
12132
12396
  `${TAXONOMY_BASE_URI}/id/material/platinum`,
12133
- "gray-light-platinum",
12397
+ "platinum",
12134
12398
  "Platinum can name a metal or a ColorScope named colour; solid metal, plating, and appearance require separate evidence.",
12135
12399
  crossoverSource("platinum")
12136
12400
  ),
12137
12401
  crossoverAmbiguity(
12138
12402
  "rosewood",
12139
12403
  `${TAXONOMY_BASE_URI}/id/material/rosewood`,
12140
- "red-dark-rosewood",
12404
+ "rosewood",
12141
12405
  "Rosewood can name traded timber or a ColorScope named colour; species and appearance remain separate claims.",
12142
12406
  crossoverSource("rosewood")
12143
12407
  ),
12144
12408
  crossoverAmbiguity(
12145
12409
  "silver",
12146
12410
  `${TAXONOMY_BASE_URI}/id/material/silver`,
12147
- "gray-light-silver",
12411
+ "silver",
12148
12412
  "Silver can name the metallic element or a ColorScope named colour; appearance does not establish elemental silver.",
12149
12413
  crossoverSource("silver")
12150
12414
  ),
12151
12415
  crossoverAmbiguity(
12152
12416
  "slate",
12153
12417
  `${TAXONOMY_BASE_URI}/id/material/slate`,
12154
- "gray-muted-slate",
12155
- "Slate can name dimension stone or a ColorScope named colour; neither reading implies the other.",
12156
- crossoverSource("slate")
12418
+ "slate-gray",
12419
+ "Slate can name dimension stone or the ColorScope named colour Slate Gray; neither reading implies the other.",
12420
+ `${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`
12157
12421
  ),
12158
12422
  crossoverAmbiguity(
12159
12423
  "steel",
12160
12424
  `${TAXONOMY_BASE_URI}/id/material/steel`,
12161
- "gray-cool-steel",
12425
+ "steel",
12162
12426
  "Steel can name an iron-carbon alloy family or a ColorScope named colour; appearance does not identify a steel grade.",
12163
12427
  crossoverSource("steel")
12164
12428
  ),
12165
12429
  crossoverAmbiguity(
12166
12430
  "stone",
12167
12431
  `${TAXONOMY_BASE_URI}/id/material/stone`,
12168
- "taupe-warm-stone",
12432
+ "stone",
12169
12433
  "Stone can name a specific building material, a retrieval-oriented material family, or a ColorScope named colour; none is a consumer route.",
12170
12434
  crossoverSource("stone"),
12171
12435
  [`${TAXONOMY_BASE_URI}/id/material-family/stone`]
@@ -12173,7 +12437,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
12173
12437
  crossoverAmbiguity(
12174
12438
  "terracotta",
12175
12439
  `${TAXONOMY_BASE_URI}/id/material/terracotta`,
12176
- "orange-mid-terracotta",
12440
+ "terracotta",
12177
12441
  "Terracotta can name a fired-clay material or a ColorScope named colour; firing and composition do not establish orange appearance.",
12178
12442
  crossoverSource("terracotta")
12179
12443
  ),
@@ -12184,7 +12448,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
12184
12448
  {
12185
12449
  basis: "referenced",
12186
12450
  snapshot: REVIEW_DATE12,
12187
- source: `Wikidata Q40089 brick, https://www.wikidata.org/wiki/Q40089; ${COLORSCOPE_INSTALLED} concept red-mid-brick`
12451
+ source: `Wikidata Q40089 brick, https://www.wikidata.org/wiki/Q40089; ${COLORSCOPE_INSTALLED} concept brick`
12188
12452
  },
12189
12453
  REVIEW_LIFECYCLE
12190
12454
  ),
@@ -12192,7 +12456,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
12192
12456
  phrase: "brick",
12193
12457
  readings: [
12194
12458
  reviewedTaxonomy("material/brick"),
12195
- colorScope("red-mid-brick", NAMED_COLOR_REFERENCE_KIND)
12459
+ colorScope("brick", NAMED_COLOR_REFERENCE_KIND)
12196
12460
  ]
12197
12461
  },
12198
12462
  // Colour-material crossovers found by comparing every material label with the installed
@@ -12201,7 +12465,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
12201
12465
  referencedCrossover(
12202
12466
  "porcelain",
12203
12467
  "material/porcelain",
12204
- "white-off-porcelain",
12468
+ "porcelain",
12205
12469
  "Porcelain can name a vitrified ceramic body or a ColorScope named colour; the colour does not establish the body.",
12206
12470
  "ISO 13006:2018; ANSI A137.1",
12207
12471
  PUBLISHED_V1_BASELINE
@@ -12209,7 +12473,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
12209
12473
  referencedCrossover(
12210
12474
  "sand",
12211
12475
  "material/sand",
12212
- "beige-muted-sand",
12476
+ "sand",
12213
12477
  "Sand can name loose mineral grains, a ColorScope named colour, or the beige colour family ColorScope lists it under; none implies another.",
12214
12478
  "ISO 14688-1:2017",
12215
12479
  PUBLISHED_V1_BASELINE,
@@ -12218,30 +12482,173 @@ var AUTHORED_LEXICAL_ENTRIES = [
12218
12482
  referencedCrossover(
12219
12483
  "camel",
12220
12484
  "material/camel-hair",
12221
- "beige-cream-camel",
12485
+ "camel",
12222
12486
  "Camel can name hair from a camel or a ColorScope named colour; the fibre need not be that colour.",
12223
12487
  "Regulation (EU) No 1007/2011 Annex I row 2"
12224
12488
  ),
12225
12489
  referencedCrossover(
12226
12490
  "ash",
12227
12491
  "material/ash",
12228
- "gray-light-ash-gray",
12229
- "Ash can name timber of the genus Fraxinus or an alias of the ColorScope named colour Ash Gray; neither reading implies the other.",
12230
- "USDA Wood Handbook (2021), chapter 2"
12492
+ "ash",
12493
+ "Ash can name timber of the genus Fraxinus or the ColorScope named colour Ash; neither reading implies the other.",
12494
+ `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`
12231
12495
  ),
12232
12496
  referencedCrossover(
12233
12497
  "eucalyptus",
12234
12498
  "material/eucalyptus",
12235
- "green-grayish-eucalyptus",
12499
+ "eucalyptus",
12236
12500
  "Eucalyptus can name timber of the genus Eucalyptus or a ColorScope named colour; neither reading implies the other.",
12237
12501
  "EN 13556:2003"
12238
12502
  ),
12239
12503
  referencedCrossover(
12240
12504
  "pine",
12241
12505
  "material/pine",
12242
- "green-deep-pine",
12243
- "Pine can name timber of the genus Pinus or a ColorScope named colour; neither reading implies the other.",
12244
- "USDA Wood Handbook (2021), chapter 2"
12506
+ "pine-green",
12507
+ "Pine can name timber of the genus Pinus or the ColorScope named colour Pine Green; neither reading implies the other.",
12508
+ `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`
12509
+ ),
12510
+ // ColorScope 9.4.0 crossovers, found by re-running the 2026-09-22 comparison against the
12511
+ // installed 9.4.0 release. `chromium` reads against ColorScope's own alias, not a separate
12512
+ // colour: 9.4.0's `chrome` colour carries the alias "Chromium", so the material label collides
12513
+ // with `chrome`'s identity, not with a colour named `chromium`. It is a different phrase from
12514
+ // `chrome` itself, whose two taxonomy readings (a finish and a material) are unrelated to
12515
+ // `material/chromium`.
12516
+ colorscope940Crossover(
12517
+ "granite",
12518
+ "material/granite",
12519
+ "granite",
12520
+ "Granite can name the quarried igneous rock or the ColorScope named colour Granite; neither reading implies the other.",
12521
+ "Wikidata Q41177 granite, https://www.wikidata.org/wiki/Q41177"
12522
+ ),
12523
+ colorscope940Crossover(
12524
+ "sandstone",
12525
+ "material/sandstone",
12526
+ "sandstone",
12527
+ "Sandstone can name the quarried sedimentary rock or the ColorScope named colour Sandstone; neither reading implies the other.",
12528
+ "Wikidata Q13085 sandstone, https://www.wikidata.org/wiki/Q13085"
12529
+ ),
12530
+ colorscope940Crossover(
12531
+ "basalt",
12532
+ "material/basalt",
12533
+ "basalt",
12534
+ "Basalt can name the quarried volcanic rock or the ColorScope named colour Basalt; neither reading implies the other.",
12535
+ "Wikidata Q43338 basalt, https://www.wikidata.org/wiki/Q43338"
12536
+ ),
12537
+ colorscope940Crossover(
12538
+ "soapstone",
12539
+ "material/soapstone",
12540
+ "soapstone",
12541
+ "Soapstone can name the quarried talc-rich rock or the ColorScope named colour Soapstone; neither reading implies the other.",
12542
+ "Wikidata Q707896 soapstone, https://www.wikidata.org/wiki/Q707896"
12543
+ ),
12544
+ colorscope940Crossover(
12545
+ "hemp",
12546
+ "material/hemp",
12547
+ "hemp",
12548
+ "Hemp can name the Cannabis sativa bast fibre or the ColorScope named colour Hemp; neither reading implies the other.",
12549
+ "Wikidata Q13414920 hemp fiber, https://www.wikidata.org/wiki/Q13414920"
12550
+ ),
12551
+ colorscope940Crossover(
12552
+ "rattan",
12553
+ "material/rattan",
12554
+ "rattan",
12555
+ "Rattan can name the climbing-palm stem material or the ColorScope named colour Rattan; neither reading implies the other.",
12556
+ "Wikidata Q323021 rattan, https://www.wikidata.org/wiki/Q323021"
12557
+ ),
12558
+ colorscope940Crossover(
12559
+ "gypsum",
12560
+ "material/gypsum",
12561
+ "gypsum",
12562
+ "Gypsum can name the mineral calcium sulfate dihydrate or the ColorScope named colour Gypsum; neither reading implies the other.",
12563
+ "EN 13279-1:2008"
12564
+ ),
12565
+ colorscope940Crossover(
12566
+ "cement",
12567
+ "material/cement",
12568
+ "cement",
12569
+ "Cement can name the hydraulic binder or the ColorScope named colour Cement; neither reading implies the other.",
12570
+ "EN 197-1:2011"
12571
+ ),
12572
+ colorscope940Crossover(
12573
+ "carbon black",
12574
+ "material/carbon-black",
12575
+ "carbon-black",
12576
+ "Carbon black can name the pigment and reinforcing filler or the ColorScope named colour Carbon Black; neither reading implies the other.",
12577
+ "CAS Registry 1333-86-4"
12578
+ ),
12579
+ colorscope940Crossover(
12580
+ "titanium white",
12581
+ "material/titanium-dioxide",
12582
+ "titanium-white",
12583
+ "Titanium white can name the titanium dioxide pigment or the ColorScope named colour Titanium White; neither reading implies the other.",
12584
+ "CAS Registry 13463-67-7"
12585
+ ),
12586
+ colorscope940Crossover(
12587
+ "chromium",
12588
+ "material/chromium",
12589
+ "chrome",
12590
+ 'Chromium can name the metallic element or the ColorScope named colour Chrome, of which "Chromium" is an alias; neither reading implies the other.',
12591
+ "CAS Registry 7440-47-3"
12592
+ ),
12593
+ // `shell` and `seashell` are one material term (`material/shell`) with two label forms, and
12594
+ // 9.4.0 gives each its own, different colour: `shell` collides with Shell Pink, `seashell` with
12595
+ // the separate colour Seashell. Two phrases, not one, because the two labels now resolve to two
12596
+ // different colours.
12597
+ colorscope940Crossover(
12598
+ "shell",
12599
+ "material/shell",
12600
+ "shell-pink",
12601
+ "Shell can name the mollusc-shell material or the ColorScope named colour Shell Pink; neither reading implies the other.",
12602
+ "Wikidata Q213096 seashell, https://www.wikidata.org/wiki/Q213096"
12603
+ ),
12604
+ colorscope940Crossover(
12605
+ "seashell",
12606
+ "material/shell",
12607
+ "seashell",
12608
+ "Seashell can name the mollusc-shell material or the ColorScope named colour Seashell; neither reading implies the other.",
12609
+ "Wikidata Q213096 seashell, https://www.wikidata.org/wiki/Q213096"
12610
+ ),
12611
+ colorscope940Crossover(
12612
+ "cashmere",
12613
+ "material/cashmere",
12614
+ "cashmere",
12615
+ "Cashmere can name the goat-hair fibre or the ColorScope named colour Cashmere; neither reading implies the other.",
12616
+ "Regulation (EU) No 1007/2011 Annex I row 2"
12617
+ ),
12618
+ colorscope940Crossover(
12619
+ "hickory",
12620
+ "material/hickory",
12621
+ "hickory",
12622
+ "Hickory can name timber of the genus Carya or the ColorScope named colour Hickory; neither reading implies the other.",
12623
+ WOOD_HANDBOOK5
12624
+ ),
12625
+ colorscope940Crossover(
12626
+ "pear",
12627
+ "material/pear",
12628
+ "pear",
12629
+ "Pear can name timber of Pyrus communis or the ColorScope named colour Pear; neither reading implies the other.",
12630
+ WOOD_HANDBOOK5
12631
+ ),
12632
+ colorscope940Crossover(
12633
+ "pecan",
12634
+ "material/carya-illinoinensis",
12635
+ "pecan",
12636
+ "Pecan can name timber of Carya illinoinensis or the ColorScope named colour Pecan; neither reading implies the other.",
12637
+ WOOD_HANDBOOK5
12638
+ ),
12639
+ colorscope940Crossover(
12640
+ "cedar",
12641
+ "material/cedar",
12642
+ "cedar",
12643
+ "Cedar can name softwood traded as cedar or the ColorScope named colour Cedar; neither reading implies the other.",
12644
+ WOOD_HANDBOOK5
12645
+ ),
12646
+ colorscope940Crossover(
12647
+ "redwood",
12648
+ "material/redwood",
12649
+ "redwood",
12650
+ "Redwood can name timber of Sequoia sempervirens or the ColorScope named colour Redwood; neither reading implies the other.",
12651
+ WOOD_HANDBOOK5
12245
12652
  ),
12246
12653
  // Quartz and melamine each name two materials in one word, and the trade uses the word for one
12247
12654
  // of them first: `quartz` is the engineered surfacing before the mineral, `melamine` the faced
@@ -12304,10 +12711,11 @@ var AUTHORED_LEXICAL_ENTRIES = [
12304
12711
  phrase: "plaster",
12305
12712
  target: reviewedTaxonomy("material/plaster")
12306
12713
  },
12307
- crossoverEquivalent(
12714
+ crossoverAmbiguity(
12308
12715
  "cotton",
12309
12716
  `${TAXONOMY_BASE_URI}/id/material/cotton`,
12310
- "Cotton has one governed material reading in this corpus; fibre identity does not establish weave, blend, dye, or finish, and ColorScope 7.3 has no exact named-colour identity.",
12717
+ "cotton",
12718
+ "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.",
12311
12719
  crossoverSource("cotton")
12312
12720
  ),
12313
12721
  crossoverTaxonomyAmbiguity(
@@ -12328,16 +12736,18 @@ var AUTHORED_LEXICAL_ENTRIES = [
12328
12736
  "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.",
12329
12737
  crossoverSource("wood")
12330
12738
  ),
12331
- crossoverEquivalent(
12739
+ crossoverAmbiguity(
12332
12740
  "jute",
12333
12741
  `${TAXONOMY_BASE_URI}/id/material/jute`,
12334
- "Jute has one governed material reading in this corpus; construction, blend, treatment, and colour remain unspecified, and ColorScope 7.3 has no exact named-colour identity.",
12742
+ "jute",
12743
+ "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.",
12335
12744
  crossoverSource("jute")
12336
12745
  ),
12337
- crossoverEquivalent(
12746
+ crossoverAmbiguity(
12338
12747
  "sisal",
12339
12748
  `${TAXONOMY_BASE_URI}/id/material/sisal`,
12340
- "Sisal has one governed material reading in this corpus; fibre and products made from it remain distinct, and ColorScope 7.3 has no exact named-colour identity.",
12749
+ "sisal",
12750
+ "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.",
12341
12751
  crossoverSource("sisal")
12342
12752
  ),
12343
12753
  crossoverEquivalent(
@@ -12358,19 +12768,19 @@ var AUTHORED_LEXICAL_ENTRIES = [
12358
12768
  "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.",
12359
12769
  crossoverSource("suede")
12360
12770
  ),
12361
- crossoverTaxonomyAmbiguity(
12771
+ crossoverAmbiguity(
12362
12772
  "concrete",
12363
- [
12364
- `${TAXONOMY_BASE_URI}/id/material-family/concrete`,
12365
- `${TAXONOMY_BASE_URI}/id/material/concrete`
12366
- ],
12367
- "Concrete names both a retrieval-oriented material family and a specific cement-and-aggregate composite; neither reading establishes mix, reinforcement, coating, polish, or imitation, and ColorScope 7.3 has no exact named-colour identity.",
12368
- crossoverSource("concrete")
12773
+ `${TAXONOMY_BASE_URI}/id/material-family/concrete`,
12774
+ "concrete",
12775
+ "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.",
12776
+ crossoverSource("concrete"),
12777
+ [`${TAXONOMY_BASE_URI}/id/material/concrete`]
12369
12778
  ),
12370
- crossoverEquivalent(
12779
+ crossoverAmbiguity(
12371
12780
  "travertine",
12372
12781
  `${TAXONOMY_BASE_URI}/id/material/travertine`,
12373
- "Travertine has one governed dimension-stone reading in this corpus; quarry, grade, fill, cut, and surface treatment remain unspecified, and ColorScope 7.3 has no exact named-colour identity.",
12782
+ "travertine",
12783
+ "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.",
12374
12784
  crossoverSource("travertine")
12375
12785
  ),
12376
12786
  crossoverEquivalent(
@@ -12379,28 +12789,46 @@ var AUTHORED_LEXICAL_ENTRIES = [
12379
12789
  "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.",
12380
12790
  crossoverSource("marble")
12381
12791
  ),
12382
- crossoverEquivalent(
12383
- "limestone",
12384
- `${TAXONOMY_BASE_URI}/id/material/limestone`,
12385
- "Limestone has one governed carbonate-stone reading in this corpus; formation, quarry, grade, cut, finish, and similarly named paint identities remain separate, and ColorScope 7.3 has no exact named-colour identity.",
12386
- crossoverSource("limestone"),
12387
- LIMESTONE_INTRODUCED,
12388
- {
12389
- introducedAt: LIMESTONE_INTRODUCED,
12390
- reviewedAt: LIMESTONE_INTRODUCED,
12391
- status: "active"
12392
- }
12393
- ),
12394
- crossoverEquivalent(
12792
+ {
12793
+ // Written inline rather than through `crossoverAmbiguity`, which stamps a fixed evidenced
12794
+ // snapshot: limestone was introduced later than the rest of this batch (2026-09-01, ADR-dated)
12795
+ // and keeps that date now that ColorScope 9.4.0 gives it a colour reading too.
12796
+ 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.",
12797
+ governance: lexicalGovernance(
12798
+ "Taxonomy preserves the evidenced readings without assigning a default, role, contextual preference, or consumer route.",
12799
+ {
12800
+ basis: "evidenced",
12801
+ snapshot: LIMESTONE_INTRODUCED,
12802
+ source: crossoverSource("limestone")
12803
+ },
12804
+ {
12805
+ introducedAt: LIMESTONE_INTRODUCED,
12806
+ reviewedAt: LIMESTONE_INTRODUCED,
12807
+ status: "active"
12808
+ }
12809
+ ),
12810
+ outcome: "ambiguous",
12811
+ phrase: "limestone",
12812
+ readings: [
12813
+ {
12814
+ authority: "taxonomy",
12815
+ uri: `${TAXONOMY_BASE_URI}/id/material/limestone`
12816
+ },
12817
+ colorScope("limestone", NAMED_COLOR_REFERENCE_KIND)
12818
+ ]
12819
+ },
12820
+ crossoverAmbiguity(
12395
12821
  "oak",
12396
12822
  `${TAXONOMY_BASE_URI}/id/material/oak`,
12397
- "Oak has one governed timber reading in this corpus; species group, cut, stain, coating, and appearance remain distinct, and ColorScope 7.3 has no exact named-colour identity.",
12823
+ "oak",
12824
+ "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.",
12398
12825
  crossoverSource("oak")
12399
12826
  ),
12400
- crossoverEquivalent(
12827
+ crossoverAmbiguity(
12401
12828
  "teak",
12402
12829
  `${TAXONOMY_BASE_URI}/id/material/teak`,
12403
- "Teak has one governed timber reading in this corpus; timber, finish, and colour remain distinct, and ColorScope 7.3 has no exact named-colour identity.",
12830
+ "teak",
12831
+ "Teak can name the timber or the ColorScope named colour Teak; timber, finish, and colour remain distinct, and neither reading implies the other.",
12404
12832
  crossoverSource("teak")
12405
12833
  ),
12406
12834
  {
@@ -12576,6 +13004,61 @@ var AUTHORED_LEXICAL_ENTRIES = [
12576
13004
  }
12577
13005
  ]
12578
13006
  },
13007
+ // Two observed source spellings on the product-category axis that the inferred
13008
+ // readings promoted to customer equivalents. Each is a department label in one
13009
+ // catalogue; the seenAs evidence stays on the term, and only the reading is declined.
13010
+ {
13011
+ 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.",
13012
+ governance: lexicalGovernance(
13013
+ "A source department label is crosswalk evidence, not a customer reading of one concept.",
13014
+ { basis: "authored", source: "MaterialGraph MG-2226 category review" },
13015
+ TAXONOMY_SNAPSHOT_LIFECYCLE
13016
+ ),
13017
+ outcome: "declined",
13018
+ phrase: "fittings",
13019
+ reason: "A trade grouping spanning tapware, lighting and electrical fittings, not a kind of product."
13020
+ },
13021
+ {
13022
+ 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.",
13023
+ governance: lexicalGovernance(
13024
+ "A source department label is crosswalk evidence, not a customer reading of one concept.",
13025
+ { basis: "authored", source: "MaterialGraph MG-2226 category review" },
13026
+ TAXONOMY_SNAPSHOT_LIFECYCLE
13027
+ ),
13028
+ outcome: "declined",
13029
+ phrase: "electrical",
13030
+ reason: "Names a trade, not a kind of product."
13031
+ },
13032
+ // Two more declined readings, added alongside `cladding` for the same reason `fittings` and
13033
+ // `electrical` were declined: each phrase spans more than the one product category it might name.
13034
+ {
13035
+ 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.",
13036
+ governance: lexicalGovernance(
13037
+ "A compound phrase spanning an exterior product category and an interior finish is not one customer reading.",
13038
+ {
13039
+ basis: "authored",
13040
+ source: "@instruments/taxonomy 1.9.0 vocabulary review"
13041
+ },
13042
+ TAXONOMY_SNAPSHOT_LIFECYCLE
13043
+ ),
13044
+ outcome: "declined",
13045
+ phrase: "wall cladding",
13046
+ reason: "Names both the exterior cladding product category and interior stone or tile cladding; the bare phrase does not settle which."
13047
+ },
13048
+ {
13049
+ explanation: "Facade names the building element - the whole external wall face - not a purchasable product. A request for a product names a kind of thing to buy, and a facade is not itself a product.",
13050
+ governance: lexicalGovernance(
13051
+ "A building element is not a product category, whatever a source calls it.",
13052
+ {
13053
+ basis: "authored",
13054
+ source: "@instruments/taxonomy 1.9.0 vocabulary review"
13055
+ },
13056
+ TAXONOMY_SNAPSHOT_LIFECYCLE
13057
+ ),
13058
+ outcome: "declined",
13059
+ phrase: "facade",
13060
+ reason: "Names the building element, not a kind of product."
13061
+ },
12579
13062
  {
12580
13063
  explanation: "The phrase makes an environmental performance claim that needs product evidence, not a terminology-only mapping.",
12581
13064
  governance: lexicalGovernance(