@instruments/taxonomy 1.7.0 → 1.9.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.
@@ -13,7 +13,7 @@ export { FORMAT_TERMS } from "./format.js";
13
13
  export { INSTALLATION_LAYOUT_TERMS } from "./installation-layout.js";
14
14
  export { MATERIAL_TERMS } from "./material.js";
15
15
  export { MOOD_TERMS } from "./mood.js";
16
- export { PATTERN_TERMS } from "./pattern.js";
16
+ export { PATTERN_FIGURE_TERMS, PATTERN_TERMS } from "./pattern.js";
17
17
  export { PRODUCT_CATEGORY_TERMS } from "./product-category.js";
18
18
  export { REQUIREMENT_TERMS } from "./requirement.js";
19
19
  export { SEASON_TERMS } from "./season.js";
@@ -0,0 +1,8 @@
1
+ import type { Term } from "../term.js";
2
+ /**
3
+ * The natural variation of a stone, stone-effect or timber surface, independent of motif. See
4
+ * ADR 0008. Unranked, for the reason type is: veined is not more figured than speckled, only
5
+ * differently so. Evidenced from the Material Bank PIM's surface-figure column (non-Samplize
6
+ * SKUs, 2026-09-26); the PIM's own spelling is preserved in `seenAs`.
7
+ */
8
+ export declare const PATTERN_FIGURE_TERMS: readonly Term[];
@@ -0,0 +1,10 @@
1
+ import type { Term } from "../term.js";
2
+ export declare const TAX57_DATE = "2026-09-26";
3
+ export declare const TAX57_SOURCE = "Linear TAX-57 visual-vocabulary review";
4
+ export declare const PIM_MOTIF_SOURCE = "the pattern-motif column in a materials-marketplace catalogue (src-04), non-Samplize SKUs";
5
+ export declare const PIM_FIGURE_SOURCE = "the surface-figure column in a materials-marketplace catalogue (src-04), non-Samplize SKUs";
6
+ /** Evidenced from the Material Bank PIM at the TAX-57 snapshot. */
7
+ export declare const pimTerm: (slug: string, label: string, definition: string, source: string, extra?: Partial<Term>) => Term;
8
+ /** Written for TAX-57 with no public authority or catalogue column behind it. */
9
+ export declare const authoredTax57: (slug: string, label: string, definition: string, extra?: Partial<Term>) => Term;
10
+ export declare const wikidata: (id: string, label: string) => string;
@@ -1,4 +1,5 @@
1
1
  import type { Term } from "../term.js";
2
+ export { PATTERN_FIGURE_TERMS } from "./pattern-figure.js";
2
3
  /** The motif itself. Unordered: a damask is not more than a stripe. */
3
4
  export declare const PATTERN_TYPE_TERMS: readonly Term[];
4
5
  /** How big the repeat is. Ordered, micro to oversized. */
package/dist/index.js CHANGED
@@ -480,6 +480,16 @@ var term = (slug, label, definition) => ({
480
480
  provenance: { basis: "evidenced", snapshot: SNAPSHOT, source: SOURCE },
481
481
  slug
482
482
  });
483
+ var TAX57_DATE = "2026-09-26";
484
+ var reviewedTax57 = (slug, label, definition, source, extra = {}) => ({
485
+ definition,
486
+ introducedAt: TAX57_DATE,
487
+ label,
488
+ provenance: { basis: "referenced", snapshot: TAX57_DATE, source },
489
+ reviewedAt: TAX57_DATE,
490
+ slug,
491
+ ...extra
492
+ });
483
493
  var CONSTRUCTION_TERMS = [
484
494
  term(
485
495
  "encaustic",
@@ -644,6 +654,61 @@ var CONSTRUCTION_TERMS = [
644
654
  "Chenille",
645
655
  "A fabric woven from chenille yarn, a fuzzy pile yarn cut from a leno-woven strip; fibre and backing remain unspecified.",
646
656
  wikidata("Q1070065", "chenille")
657
+ ),
658
+ // TAX-57 pile family. `cut-pile` is loop pile's sibling rather than its parent: both sit directly
659
+ // under the same distinction (whether the loop was cut), and neither loop pile nor cut pile is a
660
+ // kind of the other.
661
+ reviewedTax57(
662
+ "cut-pile",
663
+ "Cut pile",
664
+ "A textile or carpet pile construction whose loops have been cut or shorn, so the yarn ends stand free rather than remaining looped.",
665
+ wikidata("Q64160809", "cut pile")
666
+ ),
667
+ reviewedTax57(
668
+ "plush",
669
+ "Plush",
670
+ "A dense cut-pile fabric with a pile longer than velvet's.",
671
+ wikidata("Q1057522", "plush"),
672
+ { broaderSlug: "cut-pile" }
673
+ ),
674
+ // Velour is not velvet: velvet is woven only, and velour is shorter and denser than plush.
675
+ reviewedTax57(
676
+ "velour",
677
+ "Velour",
678
+ "A knitted or woven cut-pile fabric with a shorter, denser pile than plush; distinct from velvet, which is woven only.",
679
+ wikidata("Q621044", "velour"),
680
+ { broaderSlug: "cut-pile" }
681
+ ),
682
+ reviewedTax57(
683
+ "corduroy",
684
+ "Corduroy",
685
+ "A cut-pile fabric whose pile stands in parallel ridges, called wales, running the length of the cloth.",
686
+ wikidata("Q1132110", "corduroy"),
687
+ { broaderSlug: "cut-pile" }
688
+ ),
689
+ reviewedTax57(
690
+ "tweed",
691
+ "Tweed",
692
+ "A rough-surfaced woven fabric made from mixed-colour yarns, traditionally wool.",
693
+ wikidata("Q40601", "tweed"),
694
+ { broaderSlug: "woven" }
695
+ ),
696
+ reviewedTax57(
697
+ "grasscloth",
698
+ "Grasscloth",
699
+ "A wallcovering woven from natural grass or plant-fibre strands and laminated to a paper backing; the fibre itself is a separate material claim.",
700
+ wikidata("Q106946072", "grass cloth"),
701
+ { related: [{ predicate: "related-to", target: "material.grass" }] }
702
+ ),
703
+ // Jacquard is a woven figure, narrower than `woven`: every jacquard is woven, and the mechanism
704
+ // (independently controlled warps) is what makes complex figured repeats possible on a loom that
705
+ // a simple shed cannot produce.
706
+ reviewedTax57(
707
+ "jacquard",
708
+ "Jacquard",
709
+ "A woven figure produced on a loom that raises each warp thread under individual mechanical control, rather than through a single repeating shed.",
710
+ wikidata("Q589613", "Jacquard weaving"),
711
+ { broaderSlug: "woven" }
647
712
  )
648
713
  ];
649
714
 
@@ -1396,6 +1461,8 @@ var CORPUS_SNAPSHOT = "2026-08-27";
1396
1461
  var DROPPED = "Restored 2026-08-27. Dropped in normalisation.";
1397
1462
  var REVIEW_DATE3 = "2026-09-11";
1398
1463
  var REVIEW_SOURCE2 = "everyday-interiors vocabulary review";
1464
+ var TAX57_DATE2 = "2026-09-26";
1465
+ var TAX57_SOURCE = "Linear TAX-57 visual-vocabulary review";
1399
1466
  var wikidata2 = (id, label) => `Wikidata ${id} ${label}, https://www.wikidata.org/wiki/${id}`;
1400
1467
  var reviewed2 = (slug, label, definition, source, extra = {}) => ({
1401
1468
  definition,
@@ -1657,7 +1724,27 @@ var FINISH_TEXTURE_TERMS = [
1657
1724
  "heavily-reliefed",
1658
1725
  "Heavily reliefed",
1659
1726
  "Deep, strongly modelled relief."
1660
- )
1727
+ ),
1728
+ // TAX-57: Material Bank PIM leather-finish textures, non-Samplize SKUs, measured 2026-09-26.
1729
+ {
1730
+ broaderSlug: "embossed",
1731
+ definition: "A fine, uniform cross-hatch grain embossed into leather to increase scratch resistance and give a formal, structured surface.",
1732
+ introducedAt: TAX57_DATE2,
1733
+ label: "Saffiano",
1734
+ // AUTHORED. No Wikidata item for saffiano leather on the review date.
1735
+ provenance: { basis: "authored", source: TAX57_SOURCE },
1736
+ reviewedAt: TAX57_DATE2,
1737
+ slug: "saffiano"
1738
+ },
1739
+ // AUTHORED. No Wikidata item for hair-on hide on the review date.
1740
+ {
1741
+ definition: "A hide finished with the hair left on rather than removed in tanning.",
1742
+ introducedAt: TAX57_DATE2,
1743
+ label: "Hair-on",
1744
+ provenance: { basis: "authored", source: TAX57_SOURCE },
1745
+ reviewedAt: TAX57_DATE2,
1746
+ slug: "hair-on"
1747
+ }
1661
1748
  ];
1662
1749
  var FINISH_TERMS = [
1663
1750
  ...FINISH_TREATMENT_TERMS,
@@ -1834,6 +1921,8 @@ var FORMAT_TERMS = [
1834
1921
  var REVIEW_DATE5 = "2026-08-31";
1835
1922
  var REVIEW_SOURCE4 = "@instruments/taxonomy TAX-45 reviewed implementation contract";
1836
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";
1837
1926
  var term5 = (slug, label, definition, extra = {}) => ({
1838
1927
  definition,
1839
1928
  introducedAt: REVIEW_DATE5,
@@ -1843,6 +1932,19 @@ var term5 = (slug, label, definition, extra = {}) => ({
1843
1932
  slug,
1844
1933
  ...extra
1845
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
+ });
1846
1948
  var INSTALLATION_LAYOUT_TERMS = [
1847
1949
  term5(
1848
1950
  "stack-bond",
@@ -1923,6 +2025,33 @@ var INSTALLATION_LAYOUT_TERMS = [
1923
2025
  "irregular-field",
1924
2026
  "Irregular field",
1925
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."
1926
2055
  )
1927
2056
  ];
1928
2057
 
@@ -4439,6 +4568,8 @@ var MATERIAL_POLYMERS_TERMS = [
4439
4568
  var WOOD_HANDBOOK3 = "USDA Wood Handbook (2021), chapter 2";
4440
4569
  var EN_13556 = "EN 13556:2003";
4441
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";
4442
4573
  var MATERIAL_TIMBER_SPECIES_TERMS = [
4443
4574
  compositionTerm(
4444
4575
  "prunus-serotina",
@@ -4536,6 +4667,23 @@ var MATERIAL_TIMBER_SPECIES_TERMS = [
4536
4667
  WOOD_HANDBOOK_IMPORTED,
4537
4668
  { altLabels: ["Eucalyptus marginata"], broaderSlug: "eucalyptus" }
4538
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
+ ),
4539
4687
  compositionTerm(
4540
4688
  "quercus-mongolica",
4541
4689
  "Mongolian oak",
@@ -4585,6 +4733,18 @@ var MATERIAL_TIMBER_SPECIES_TERMS = [
4585
4733
  EN_13556,
4586
4734
  { altLabels: ["Quercus petraea"], broaderSlug: "oak" }
4587
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
+ ),
4588
4748
  compositionTerm(
4589
4749
  "thuja-plicata",
4590
4750
  "Western red cedar",
@@ -4618,6 +4778,22 @@ var MATERIAL_TIMBER_SPECIES_TERMS = [
4618
4778
  var WOOD_HANDBOOK4 = "USDA Wood Handbook (2021), chapter 2";
4619
4779
  var EN_135562 = "EN 13556:2003";
4620
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
+ });
4621
4797
  var MATERIAL_TIMBERS_TERMS = [
4622
4798
  // Materials, alphabetical.
4623
4799
  authoredTerm(
@@ -4633,6 +4809,11 @@ var MATERIAL_TIMBERS_TERMS = [
4633
4809
  WOOD_HANDBOOK4,
4634
4810
  { broaderSlug: HARDWOOD_SLUG }
4635
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
+ ),
4636
4817
  compositionTerm(
4637
4818
  "ash",
4638
4819
  "Ash",
@@ -4647,6 +4828,11 @@ var MATERIAL_TIMBERS_TERMS = [
4647
4828
  WOOD_HANDBOOK4,
4648
4829
  { broaderSlug: "poplar" }
4649
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
+ ),
4650
4836
  compositionTerm(
4651
4837
  "basswood",
4652
4838
  "Basswood",
@@ -4754,6 +4940,11 @@ var MATERIAL_TIMBERS_TERMS = [
4754
4940
  EN_135562,
4755
4941
  { broaderSlug: HARDWOOD_SLUG }
4756
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
+ ),
4757
4948
  compositionTerm(
4758
4949
  "sycamore",
4759
4950
  "Sycamore",
@@ -4761,6 +4952,12 @@ var MATERIAL_TIMBERS_TERMS = [
4761
4952
  `${EN_135562}; ${WOOD_HANDBOOK4}`,
4762
4953
  { broaderSlug: HARDWOOD_SLUG }
4763
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
+ ),
4764
4961
  // Species, alphabetical.
4765
4962
  compositionTerm(
4766
4963
  "afromosia",
@@ -4769,6 +4966,12 @@ var MATERIAL_TIMBERS_TERMS = [
4769
4966
  EN_135562,
4770
4967
  { altLabels: ["Afromosia"], broaderSlug: HARDWOOD_SLUG }
4771
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
+ ),
4772
4975
  compositionTerm(
4773
4976
  "balsa",
4774
4977
  "Balsa",
@@ -4783,6 +4986,11 @@ var MATERIAL_TIMBERS_TERMS = [
4783
4986
  EN_135562,
4784
4987
  { broaderSlug: HARDWOOD_SLUG, seenAs: ["Brazilian teak"] }
4785
4988
  ),
4989
+ mgWoodTerm(
4990
+ "garapa",
4991
+ "Garapa",
4992
+ "Hardwood timber from Apuleia leiocarpa, commercially cut across Brazil."
4993
+ ),
4786
4994
  compositionTerm(
4787
4995
  "iroko",
4788
4996
  "Iroko",
@@ -4795,7 +5003,7 @@ var MATERIAL_TIMBERS_TERMS = [
4795
5003
  "Jatoba",
4796
5004
  "Hardwood timber from Hymenaea courbaril, commercially cut across Central and South America.",
4797
5005
  EN_135562,
4798
- { broaderSlug: HARDWOOD_SLUG, seenAs: ["Brazilian cherry"] }
5006
+ { altLabels: ["Brazilian Cherry"], broaderSlug: HARDWOOD_SLUG }
4799
5007
  ),
4800
5008
  compositionTerm(
4801
5009
  "kempas",
@@ -4811,6 +5019,22 @@ var MATERIAL_TIMBERS_TERMS = [
4811
5019
  EN_135562,
4812
5020
  { altLabels: ["Korina"], broaderSlug: HARDWOOD_SLUG }
4813
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
+ ),
4814
5038
  compositionTerm(
4815
5039
  "rubberwood",
4816
5040
  "Rubberwood",
@@ -4825,6 +5049,26 @@ var MATERIAL_TIMBERS_TERMS = [
4825
5049
  EN_135562,
4826
5050
  { broaderSlug: HARDWOOD_SLUG }
4827
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
+ ),
4828
5072
  compositionTerm(
4829
5073
  "wenge",
4830
5074
  "Wenge",
@@ -4845,6 +5089,7 @@ var MATERIAL_TIMBERS_TERMS = [
4845
5089
  var SOURCE3 = "material vocabularies in a furnishings retailer (src-03) and in-house";
4846
5090
  var SNAPSHOT3 = "2026-08-25";
4847
5091
  var CROSSOVER_SNAPSHOT2 = "2026-08-30";
5092
+ var TAX57_REVIEW_DATE = "2026-09-26";
4848
5093
  var NATURAL_FIBRE_SLUG2 = "natural-fibre";
4849
5094
  var STONE_SLUG2 = "stone";
4850
5095
  var HARDWOOD_SLUG2 = "hardwood";
@@ -5206,6 +5451,21 @@ var MATERIAL_TERMS = [
5206
5451
  broaderSlug: "leather",
5207
5452
  reviewedAt: COMPOSITION_REVIEW_DATE
5208
5453
  },
5454
+ // TAX-57. Nubuck sits beside suede: both are a leather surface mechanically finished to a nap,
5455
+ // told apart by which side of the hide carries it.
5456
+ {
5457
+ broaderSlug: "leather",
5458
+ definition: "Top-grain leather whose grain side is sanded or buffed to a short nap of protein fibres, producing a velvet-like surface distinct from suede's flesh-side nap.",
5459
+ introducedAt: TAX57_REVIEW_DATE,
5460
+ label: "Nubuck",
5461
+ provenance: {
5462
+ basis: "referenced",
5463
+ snapshot: TAX57_REVIEW_DATE,
5464
+ source: `Wikidata Q28864 nubuck, https://www.wikidata.org/wiki/Q28864; ${CROSSOVER_DEFINITION_SOURCES.suede}`
5465
+ },
5466
+ reviewedAt: TAX57_REVIEW_DATE,
5467
+ slug: "nubuck"
5468
+ },
5209
5469
  reparented(
5210
5470
  crossoverTerm(
5211
5471
  "concrete",
@@ -5709,6 +5969,153 @@ var PALETTE_CHARACTER_TERMS = [
5709
5969
  }
5710
5970
  ];
5711
5971
 
5972
+ // src/axes/pattern-tax57.ts
5973
+ var TAX57_DATE3 = "2026-09-26";
5974
+ var TAX57_SOURCE2 = "Linear TAX-57 visual-vocabulary review";
5975
+ var PIM_MOTIF_SOURCE = "the pattern-motif column in a materials-marketplace catalogue (src-04), non-Samplize SKUs";
5976
+ var PIM_FIGURE_SOURCE = "the surface-figure column in a materials-marketplace catalogue (src-04), non-Samplize SKUs";
5977
+ var pimTerm = (slug, label, definition, source, extra = {}) => ({
5978
+ definition,
5979
+ introducedAt: TAX57_DATE3,
5980
+ label,
5981
+ provenance: { basis: "evidenced", snapshot: TAX57_DATE3, source },
5982
+ reviewedAt: TAX57_DATE3,
5983
+ slug,
5984
+ ...extra
5985
+ });
5986
+ var authoredTax57 = (slug, label, definition, extra = {}) => ({
5987
+ definition,
5988
+ introducedAt: TAX57_DATE3,
5989
+ label,
5990
+ provenance: { basis: "authored", source: TAX57_SOURCE2 },
5991
+ reviewedAt: TAX57_DATE3,
5992
+ slug,
5993
+ ...extra
5994
+ });
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
+
5712
6119
  // src/axes/pattern.ts
5713
6120
  var SOURCE4 = "pattern vocabulary in a furnishings retailer (src-03)";
5714
6121
  var SNAPSHOT6 = "2026-08-25";
@@ -5722,6 +6129,9 @@ var GEOMETRY_SOURCE = "Linear TAX-45 reviewed implementation contract";
5722
6129
  var REVIEW_DATE7 = "2026-09-11";
5723
6130
  var REVIEW_SOURCE6 = "everyday-interiors vocabulary review";
5724
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";
5725
6135
  var term7 = (slug, label, definition, extra = {}) => ({
5726
6136
  definition,
5727
6137
  label,
@@ -5748,14 +6158,113 @@ var PATTERN_TYPE_TERMS = [
5748
6158
  "Non-representational marks organised with irregular or biomorphic movement."
5749
6159
  ),
5750
6160
  term7(
5751
- "animal-print",
6161
+ ANIMAL_PRINT_SLUG,
5752
6162
  "Animal print",
5753
6163
  "A motif derived from animal markings or skins."
5754
6164
  ),
6165
+ // Faux Crocodile, Faux Snake Skin, Faux Ostrich, Leopard, Zebra and Faux Lizard in the Material
6166
+ // Bank PIM (non-Samplize SKUs, 2026-09-26) name six distinct skin or hide motifs the single
6167
+ // `animal-print` concept could not distinguish. Narrower rather than a rename: every one of these
6168
+ // is still an animal print.
6169
+ pimTerm(
6170
+ "crocodile",
6171
+ "Crocodile",
6172
+ "A motif derived from crocodile or alligator skin's raised, roughly rectangular scale blocks.",
6173
+ PIM_MOTIF_SOURCE,
6174
+ { broaderSlug: ANIMAL_PRINT_SLUG, seenAs: ["Faux Crocodile"] }
6175
+ ),
6176
+ pimTerm(
6177
+ "snakeskin",
6178
+ "Snakeskin",
6179
+ "A motif derived from snake skin's overlapping diamond or lozenge-shaped scales.",
6180
+ PIM_MOTIF_SOURCE,
6181
+ { broaderSlug: ANIMAL_PRINT_SLUG, seenAs: ["Faux Snake Skin"] }
6182
+ ),
6183
+ pimTerm(
6184
+ "ostrich",
6185
+ "Ostrich",
6186
+ "A motif derived from ostrich skin's raised quill-follicle bumps.",
6187
+ PIM_MOTIF_SOURCE,
6188
+ { broaderSlug: ANIMAL_PRINT_SLUG, seenAs: ["Faux Ostrich"] }
6189
+ ),
6190
+ pimTerm(
6191
+ "lizard",
6192
+ "Lizard",
6193
+ "A motif derived from lizard skin's small, irregular, close-set scales.",
6194
+ PIM_MOTIF_SOURCE,
6195
+ { broaderSlug: ANIMAL_PRINT_SLUG, seenAs: ["Faux Lizard"] }
6196
+ ),
6197
+ pimTerm(
6198
+ "leopard",
6199
+ "Leopard",
6200
+ "A motif derived from leopard fur's dark, irregular rosette markings on a tawny ground.",
6201
+ PIM_MOTIF_SOURCE,
6202
+ { broaderSlug: ANIMAL_PRINT_SLUG }
6203
+ ),
6204
+ pimTerm(
6205
+ "zebra",
6206
+ "Zebra",
6207
+ "A motif derived from zebra hide's alternating dark and pale parallel stripes.",
6208
+ PIM_MOTIF_SOURCE,
6209
+ { broaderSlug: ANIMAL_PRINT_SLUG }
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
+ },
5755
6240
  term7(
5756
6241
  "botanical",
5757
6242
  "Botanical",
5758
- "A representational motif of plants, flowers, foliage or fruit."
6243
+ "A representational motif of plants, flowers, foliage or fruit.",
6244
+ // Botanical's definition already reaches flowers; floral is an observed spelling of the same
6245
+ // concept rather than a second correct name for it, so it is `seenAs`, not an alt label.
6246
+ { seenAs: ["floral"] }
6247
+ ),
6248
+ // Heather in the trade names the same mixed-colour-yarn effect Wikidata records; melange, marled
6249
+ // and heathered are its correct names, none more canonical than another.
6250
+ {
6251
+ altLabels: ["heathered", "marled"],
6252
+ definition: "A mixed-colour yarn effect that gives the surface a flecked, uneven tone rather than one solid colour.",
6253
+ introducedAt: TAX57_DATE3,
6254
+ label: "Melange",
6255
+ provenance: {
6256
+ basis: "referenced",
6257
+ snapshot: TAX57_DATE3,
6258
+ source: wikidata4("Q5693696", "heather (fabric)")
6259
+ },
6260
+ reviewedAt: TAX57_DATE3,
6261
+ slug: "melange"
6262
+ },
6263
+ // AUTHORED. No Wikidata item for strie as a fabric or surface pattern on the review date.
6264
+ authoredTax57(
6265
+ "strie",
6266
+ "Strie",
6267
+ "Fine, irregular streaks running in one direction across the surface."
5759
6268
  ),
5760
6269
  term7(
5761
6270
  "damask",
@@ -5841,7 +6350,8 @@ var PATTERN_TYPE_TERMS = [
5841
6350
  term7(
5842
6351
  "marbleised",
5843
6352
  "Marbleised",
5844
- "Veining or clouding arranged to evoke marble."
6353
+ "Veining or clouding arranged to evoke marble.",
6354
+ { altLabels: ["marbleized"] }
5845
6355
  ),
5846
6356
  term7(
5847
6357
  "metal-effect",
@@ -6078,7 +6588,8 @@ var PATTERN_TERMS = [
6078
6588
  ...PATTERN_SCALE_TERMS,
6079
6589
  ...PATTERN_DENSITY_TERMS,
6080
6590
  ...PATTERN_REGULARITY_TERMS,
6081
- ...PATTERN_DIRECTIONALITY_TERMS
6591
+ ...PATTERN_DIRECTIONALITY_TERMS,
6592
+ ...PATTERN_FIGURE_TERMS
6082
6593
  ];
6083
6594
 
6084
6595
  // src/axes/period.ts
@@ -6818,7 +7329,7 @@ var PRODUCT_CATEGORY_TERMS = [
6818
7329
  fromSearchCorpus(
6819
7330
  "wall-panel",
6820
7331
  "Wall panel",
6821
- "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.",
6822
7333
  {
6823
7334
  altLabels: ["wall panelling", "wall paneling"],
6824
7335
  broaderSlug: "wallcovering",
@@ -6896,6 +7407,48 @@ var PRODUCT_CATEGORY_TERMS = [
6896
7407
  )
6897
7408
  ]
6898
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
+ }
6899
7452
  )
6900
7453
  ];
6901
7454
 
@@ -6967,7 +7520,7 @@ var AUTHORED5 = {
6967
7520
  basis: "authored",
6968
7521
  source: "@instruments/taxonomy ADR 0006"
6969
7522
  };
6970
- var wikidata4 = (identifier, label) => ({
7523
+ var wikidata5 = (identifier, label) => ({
6971
7524
  identifier,
6972
7525
  label,
6973
7526
  match: "exact",
@@ -6987,25 +7540,25 @@ var SEASON_TERMS = [
6987
7540
  "spring",
6988
7541
  "Spring",
6989
7542
  "The temperate season between winter and summer, when the days lengthen.",
6990
- { external: [wikidata4("Q1312", "spring")] }
7543
+ { external: [wikidata5("Q1312", "spring")] }
6991
7544
  ),
6992
7545
  term10(
6993
7546
  "summer",
6994
7547
  "Summer",
6995
7548
  "The temperate season between spring and autumn, when the days are longest.",
6996
- { external: [wikidata4("Q1313", "summer")] }
7549
+ { external: [wikidata5("Q1313", "summer")] }
6997
7550
  ),
6998
7551
  term10(
6999
7552
  "autumn",
7000
7553
  "Autumn",
7001
7554
  "The temperate season between summer and winter, when the days shorten.",
7002
- { altLabels: ["fall"], external: [wikidata4("Q1314", "autumn")] }
7555
+ { altLabels: ["fall"], external: [wikidata5("Q1314", "autumn")] }
7003
7556
  ),
7004
7557
  term10(
7005
7558
  "winter",
7006
7559
  "Winter",
7007
7560
  "The temperate season between autumn and spring, when the days are shortest.",
7008
- { external: [wikidata4("Q1311", "winter")] }
7561
+ { external: [wikidata5("Q1311", "winter")] }
7009
7562
  )
7010
7563
  ];
7011
7564
 
@@ -10922,7 +11475,8 @@ var AXES = [
10922
11475
  label: "Directionality",
10923
11476
  slug: "directionality",
10924
11477
  terms: PATTERN_DIRECTIONALITY_TERMS
10925
- }
11478
+ },
11479
+ { label: "Figure", slug: "figure", terms: PATTERN_FIGURE_TERMS }
10926
11480
  ],
10927
11481
  label: "Pattern",
10928
11482
  question: "What motif or surface organisation does it carry?",
@@ -11202,8 +11756,8 @@ var resolveReference = (reference) => INDEX.byKey.get(canonicalKey(reference));
11202
11756
 
11203
11757
  // src/v1.ts
11204
11758
  var TAXONOMY_BASE_URI = "https://taxonomy.materialinstruments.com";
11205
- var TAXONOMY_SNAPSHOT = "2026-09-23";
11206
- var TAXONOMY_VERSION = "1.7.0";
11759
+ var TAXONOMY_SNAPSHOT = "2026-09-27";
11760
+ var TAXONOMY_VERSION = "1.9.0";
11207
11761
  var PUBLISHED_V1_BASELINE = "2026-08-30";
11208
11762
  var TAX45_REVIEW_SNAPSHOT = "2026-08-31";
11209
11763
  var LIMESTONE_INTRODUCED = "2026-09-01";
@@ -11506,6 +12060,20 @@ var HIERARCHY_REVIEW_LIFECYCLE = {
11506
12060
  status: "active"
11507
12061
  };
11508
12062
  var AMBIGUITY_GOVERNANCE = "Taxonomy preserves the governed readings without assigning a default, role, contextual preference, or consumer route.";
12063
+ var ORDERED_READING_GOVERNANCE = "The two readings are deliberately separate; the default records trade usage and does not merge the concepts.";
12064
+ var TAXONOMY_SNAPSHOT_LIFECYCLE = {
12065
+ introducedAt: TAXONOMY_SNAPSHOT,
12066
+ reviewedAt: TAXONOMY_SNAPSHOT,
12067
+ status: "active"
12068
+ };
12069
+ var TAX57_DATE4 = "2026-09-26";
12070
+ var TAX57_LIFECYCLE = {
12071
+ introducedAt: TAX57_DATE4,
12072
+ reviewedAt: TAX57_DATE4,
12073
+ status: "active"
12074
+ };
12075
+ var TAX57_SHAPE_SOURCE = "the tile-shape column in a materials-marketplace catalogue (src-04), non-Samplize SKUs";
12076
+ var TAX57_REVIEW_SOURCE = "Linear TAX-57 visual-vocabulary review";
11509
12077
  var REVIEW_DATE12 = "2026-09-11";
11510
12078
  var REVIEW_LIFECYCLE = {
11511
12079
  introducedAt: REVIEW_DATE12,
@@ -11927,7 +12495,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
11927
12495
  defaultTarget: ENGINEERED_QUARTZ_SURFACING,
11928
12496
  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.",
11929
12497
  governance: lexicalGovernance(
11930
- "The two readings are deliberately separate; the default records trade usage and does not merge the concepts.",
12498
+ ORDERED_READING_GOVERNANCE,
11931
12499
  {
11932
12500
  basis: "evidenced",
11933
12501
  snapshot: HIERARCHY_REVIEW_DATE,
@@ -11943,7 +12511,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
11943
12511
  defaultTarget: MELAMINE_BOARD,
11944
12512
  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.",
11945
12513
  governance: lexicalGovernance(
11946
- "The two readings are deliberately separate; the default records trade usage and does not merge the concepts.",
12514
+ ORDERED_READING_GOVERNANCE,
11947
12515
  {
11948
12516
  basis: "evidenced",
11949
12517
  snapshot: HIERARCHY_REVIEW_DATE,
@@ -12122,6 +12690,186 @@ var AUTHORED_LEXICAL_ENTRIES = [
12122
12690
  reviewedTaxonomy("product-category/countertop")
12123
12691
  ]
12124
12692
  },
12693
+ // TAX-57 unit-shape compounds. Each names two governed shapes in one phrase, which the current
12694
+ // lexical contract cannot express as a single multi-target reading, so the alternatives are kept
12695
+ // as an explicit ambiguity or, where one alternative is already an alt label of the other, an
12696
+ // equivalent - never a silently chosen shape.
12697
+ {
12698
+ defaultTarget: {
12699
+ authority: "taxonomy",
12700
+ role: "primary",
12701
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/arabesque`
12702
+ },
12703
+ 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.",
12704
+ governance: lexicalGovernance(
12705
+ "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.",
12706
+ { basis: "evidenced", snapshot: TAX57_DATE4, source: TAX57_SHAPE_SOURCE },
12707
+ TAX57_LIFECYCLE
12708
+ ),
12709
+ outcome: "ambiguous",
12710
+ phrase: "arabesque",
12711
+ readings: [
12712
+ {
12713
+ authority: "taxonomy",
12714
+ role: "primary",
12715
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/arabesque`
12716
+ },
12717
+ {
12718
+ authority: "taxonomy",
12719
+ role: "secondary",
12720
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/star`
12721
+ },
12722
+ {
12723
+ authority: "taxonomy",
12724
+ role: "secondary",
12725
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/cross`
12726
+ }
12727
+ ]
12728
+ },
12729
+ ...["round & oval", "round and oval"].map(
12730
+ (phrase) => ({
12731
+ explanation: "The compound phrase does not settle whether a round or an oval unit is meant.",
12732
+ governance: lexicalGovernance(
12733
+ AMBIGUITY_GOVERNANCE,
12734
+ {
12735
+ basis: "evidenced",
12736
+ snapshot: TAX57_DATE4,
12737
+ source: TAX57_SHAPE_SOURCE
12738
+ },
12739
+ TAX57_LIFECYCLE
12740
+ ),
12741
+ outcome: "ambiguous",
12742
+ phrase,
12743
+ readings: [
12744
+ {
12745
+ authority: "taxonomy",
12746
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/circle`
12747
+ },
12748
+ {
12749
+ authority: "taxonomy",
12750
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/oval`
12751
+ }
12752
+ ]
12753
+ })
12754
+ ),
12755
+ {
12756
+ explanation: "The compound phrase names one shape: rhombus, for which diamond is already a governed alt label.",
12757
+ governance: lexicalGovernance(
12758
+ "Taxonomy records the evidenced compound phrase without assigning a consumer route.",
12759
+ { basis: "evidenced", snapshot: TAX57_DATE4, source: TAX57_SHAPE_SOURCE },
12760
+ TAX57_LIFECYCLE
12761
+ ),
12762
+ outcome: "equivalent",
12763
+ phrase: "diamond & rhombus",
12764
+ target: {
12765
+ authority: "taxonomy",
12766
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/rhombus`
12767
+ }
12768
+ },
12769
+ {
12770
+ explanation: "The compound phrase does not settle whether a parallelogram unit or a genuine chevron unit is meant.",
12771
+ governance: lexicalGovernance(
12772
+ AMBIGUITY_GOVERNANCE,
12773
+ { basis: "evidenced", snapshot: TAX57_DATE4, source: TAX57_SHAPE_SOURCE },
12774
+ TAX57_LIFECYCLE
12775
+ ),
12776
+ outcome: "ambiguous",
12777
+ phrase: "parallelogram & chevron",
12778
+ readings: [
12779
+ {
12780
+ authority: "taxonomy",
12781
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/parallelogram`
12782
+ },
12783
+ {
12784
+ authority: "taxonomy",
12785
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/chevron`
12786
+ }
12787
+ ]
12788
+ },
12789
+ // TAX-57 ordered reading. Paint and tile makers use "velvet" as a finish name for a soft-touch,
12790
+ // light-absorbing surface; the trade means the woven cut-pile construction first.
12791
+ {
12792
+ defaultTarget: {
12793
+ authority: "taxonomy",
12794
+ role: "primary",
12795
+ uri: `${TAXONOMY_BASE_URI}/id/construction/velvet`
12796
+ },
12797
+ 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.",
12798
+ governance: lexicalGovernance(
12799
+ ORDERED_READING_GOVERNANCE,
12800
+ { basis: "authored", source: TAX57_REVIEW_SOURCE },
12801
+ TAX57_LIFECYCLE
12802
+ ),
12803
+ outcome: "ambiguous",
12804
+ phrase: "velvet",
12805
+ readings: [
12806
+ {
12807
+ authority: "taxonomy",
12808
+ role: "primary",
12809
+ uri: `${TAXONOMY_BASE_URI}/id/construction/velvet`
12810
+ },
12811
+ {
12812
+ authority: "taxonomy",
12813
+ role: "secondary",
12814
+ uri: `${TAXONOMY_BASE_URI}/id/finish/texture/velvety`
12815
+ }
12816
+ ]
12817
+ },
12818
+ // Two observed source spellings on the product-category axis that the inferred
12819
+ // readings promoted to customer equivalents. Each is a department label in one
12820
+ // catalogue; the seenAs evidence stays on the term, and only the reading is declined.
12821
+ {
12822
+ 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.",
12823
+ governance: lexicalGovernance(
12824
+ "A source department label is crosswalk evidence, not a customer reading of one concept.",
12825
+ { basis: "authored", source: "MaterialGraph MG-2226 category review" },
12826
+ TAXONOMY_SNAPSHOT_LIFECYCLE
12827
+ ),
12828
+ outcome: "declined",
12829
+ phrase: "fittings",
12830
+ reason: "A trade grouping spanning tapware, lighting and electrical fittings, not a kind of product."
12831
+ },
12832
+ {
12833
+ 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.",
12834
+ governance: lexicalGovernance(
12835
+ "A source department label is crosswalk evidence, not a customer reading of one concept.",
12836
+ { basis: "authored", source: "MaterialGraph MG-2226 category review" },
12837
+ TAXONOMY_SNAPSHOT_LIFECYCLE
12838
+ ),
12839
+ outcome: "declined",
12840
+ phrase: "electrical",
12841
+ reason: "Names a trade, not a kind of product."
12842
+ },
12843
+ // Two more declined readings, added alongside `cladding` for the same reason `fittings` and
12844
+ // `electrical` were declined: each phrase spans more than the one product category it might name.
12845
+ {
12846
+ 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.",
12847
+ governance: lexicalGovernance(
12848
+ "A compound phrase spanning an exterior product category and an interior finish is not one customer reading.",
12849
+ {
12850
+ basis: "authored",
12851
+ source: "@instruments/taxonomy 1.9.0 vocabulary review"
12852
+ },
12853
+ TAXONOMY_SNAPSHOT_LIFECYCLE
12854
+ ),
12855
+ outcome: "declined",
12856
+ phrase: "wall cladding",
12857
+ reason: "Names both the exterior cladding product category and interior stone or tile cladding; the bare phrase does not settle which."
12858
+ },
12859
+ {
12860
+ 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.",
12861
+ governance: lexicalGovernance(
12862
+ "A building element is not a product category, whatever a source calls it.",
12863
+ {
12864
+ basis: "authored",
12865
+ source: "@instruments/taxonomy 1.9.0 vocabulary review"
12866
+ },
12867
+ TAXONOMY_SNAPSHOT_LIFECYCLE
12868
+ ),
12869
+ outcome: "declined",
12870
+ phrase: "facade",
12871
+ reason: "Names the building element, not a kind of product."
12872
+ },
12125
12873
  {
12126
12874
  explanation: "The phrase makes an environmental performance claim that needs product evidence, not a terminology-only mapping.",
12127
12875
  governance: lexicalGovernance(
package/dist/v1.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { ElementPlacement, ExternalMapping, ExternalScheme, PeriodSpan, RelationPredicate, SearchedWithout, StyleKind, TermProvenance, TermUsage, UsageWithheld } from "./term.js";
2
2
  export declare const TAXONOMY_BASE_URI: "https://taxonomy.materialinstruments.com";
3
- export declare const TAXONOMY_SNAPSHOT: "2026-09-23";
4
- export declare const TAXONOMY_VERSION: "1.7.0";
3
+ export declare const TAXONOMY_SNAPSHOT: "2026-09-27";
4
+ export declare const TAXONOMY_VERSION: "1.9.0";
5
5
  export type CanonicalConceptUri = `${typeof TAXONOMY_BASE_URI}/id/${string}`;
6
6
  export type LifecycleStatus = "active" | "deprecated";
7
7
  export interface Lifecycle {
@@ -135,7 +135,7 @@ export declare const TAXONOMY_CORPUS_METADATA: {
135
135
  readonly lexicalEntryCount: number;
136
136
  readonly nodeCount: number;
137
137
  readonly revision: string;
138
- readonly snapshot: "2026-09-23";
139
- readonly version: "1.7.0";
138
+ readonly snapshot: "2026-09-27";
139
+ readonly version: "1.9.0";
140
140
  };
141
141
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instruments/taxonomy",
3
- "version": "1.7.0",
3
+ "version": "1.9.0",
4
4
  "description": "Canonical data-only interiors and architecture knowledge graph and lexical corpus.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "repository": {
@@ -24,13 +24,13 @@
24
24
  "access": "public"
25
25
  },
26
26
  "devDependencies": {
27
- "@howells/lint": "^2.2.0",
28
- "@instruments/colorscope": "7.6.0",
27
+ "@howells/lint": "^3.5.1",
28
+ "@instruments/colorscope": "7.8.0",
29
29
  "@taxonomy/lint-policy": "npm:@howells/lint@1.0.0",
30
- "@types/node": "^26.4.1",
30
+ "@types/node": "^26.6.2",
31
31
  "tsup": "^8.5.1",
32
32
  "typescript": "^7.0.2",
33
- "vitest": "^5.0.0"
33
+ "vitest": "^5.0.1"
34
34
  },
35
35
  "scripts": {
36
36
  "build": "tsup && tsc -p tsconfig.build.json && node ../../scripts/finalize-declarations.mjs dist",