@instruments/taxonomy 1.7.0 → 1.8.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";
@@ -9,5 +9,12 @@ export declare const PATTERN_DENSITY_TERMS: readonly Term[];
9
9
  export declare const PATTERN_REGULARITY_TERMS: readonly Term[];
10
10
  /** Which way the pattern runs. Unordered: see the header on why this is not a ladder. */
11
11
  export declare const PATTERN_DIRECTIONALITY_TERMS: readonly Term[];
12
+ /**
13
+ * The natural variation of a stone, stone-effect or timber surface, independent of motif. See
14
+ * ADR 0008. Unranked, for the reason type is: veined is not more figured than speckled, only
15
+ * differently so. Evidenced from the Material Bank PIM's surface-figure column (non-Samplize
16
+ * SKUs, 2026-09-26); the PIM's own spelling is preserved in `seenAs`.
17
+ */
18
+ export declare const PATTERN_FIGURE_TERMS: readonly Term[];
12
19
  /** Kept for consumers importing the axis as one list; prefer the facets. */
13
20
  export declare const PATTERN_TERMS: readonly Term[];
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,
@@ -4845,6 +4932,7 @@ var MATERIAL_TIMBERS_TERMS = [
4845
4932
  var SOURCE3 = "material vocabularies in a furnishings retailer (src-03) and in-house";
4846
4933
  var SNAPSHOT3 = "2026-08-25";
4847
4934
  var CROSSOVER_SNAPSHOT2 = "2026-08-30";
4935
+ var TAX57_REVIEW_DATE = "2026-09-26";
4848
4936
  var NATURAL_FIBRE_SLUG2 = "natural-fibre";
4849
4937
  var STONE_SLUG2 = "stone";
4850
4938
  var HARDWOOD_SLUG2 = "hardwood";
@@ -5206,6 +5294,21 @@ var MATERIAL_TERMS = [
5206
5294
  broaderSlug: "leather",
5207
5295
  reviewedAt: COMPOSITION_REVIEW_DATE
5208
5296
  },
5297
+ // TAX-57. Nubuck sits beside suede: both are a leather surface mechanically finished to a nap,
5298
+ // told apart by which side of the hide carries it.
5299
+ {
5300
+ broaderSlug: "leather",
5301
+ 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.",
5302
+ introducedAt: TAX57_REVIEW_DATE,
5303
+ label: "Nubuck",
5304
+ provenance: {
5305
+ basis: "referenced",
5306
+ snapshot: TAX57_REVIEW_DATE,
5307
+ source: `Wikidata Q28864 nubuck, https://www.wikidata.org/wiki/Q28864; ${CROSSOVER_DEFINITION_SOURCES.suede}`
5308
+ },
5309
+ reviewedAt: TAX57_REVIEW_DATE,
5310
+ slug: "nubuck"
5311
+ },
5209
5312
  reparented(
5210
5313
  crossoverTerm(
5211
5314
  "concrete",
@@ -5722,6 +5825,30 @@ var GEOMETRY_SOURCE = "Linear TAX-45 reviewed implementation contract";
5722
5825
  var REVIEW_DATE7 = "2026-09-11";
5723
5826
  var REVIEW_SOURCE6 = "everyday-interiors vocabulary review";
5724
5827
  var GEOMETRY_EVIDENCE_SOURCE = "Linear TAX-45 reviewed implementation contract; herringbone and chevron product-language audit in a materials-retrieval system (src-05)";
5828
+ var TAX57_DATE3 = "2026-09-26";
5829
+ var TAX57_SOURCE2 = "Linear TAX-57 visual-vocabulary review";
5830
+ var PIM_MOTIF_SOURCE = "the pattern-motif column in a materials-marketplace catalogue (src-04), non-Samplize SKUs";
5831
+ 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
+ var pimTerm = (slug, label, definition, source, extra = {}) => ({
5834
+ definition,
5835
+ introducedAt: TAX57_DATE3,
5836
+ label,
5837
+ provenance: { basis: "evidenced", snapshot: TAX57_DATE3, source },
5838
+ reviewedAt: TAX57_DATE3,
5839
+ slug,
5840
+ ...extra
5841
+ });
5842
+ var authoredTax57 = (slug, label, definition, extra = {}) => ({
5843
+ definition,
5844
+ introducedAt: TAX57_DATE3,
5845
+ label,
5846
+ provenance: { basis: "authored", source: TAX57_SOURCE2 },
5847
+ reviewedAt: TAX57_DATE3,
5848
+ slug,
5849
+ ...extra
5850
+ });
5851
+ var wikidata4 = (id, label) => `Wikidata ${id} ${label}, https://www.wikidata.org/wiki/${id}`;
5725
5852
  var term7 = (slug, label, definition, extra = {}) => ({
5726
5853
  definition,
5727
5854
  label,
@@ -5748,14 +5875,84 @@ var PATTERN_TYPE_TERMS = [
5748
5875
  "Non-representational marks organised with irregular or biomorphic movement."
5749
5876
  ),
5750
5877
  term7(
5751
- "animal-print",
5878
+ ANIMAL_PRINT_SLUG,
5752
5879
  "Animal print",
5753
5880
  "A motif derived from animal markings or skins."
5754
5881
  ),
5882
+ // Faux Crocodile, Faux Snake Skin, Faux Ostrich, Leopard, Zebra and Faux Lizard in the Material
5883
+ // Bank PIM (non-Samplize SKUs, 2026-09-26) name six distinct skin or hide motifs the single
5884
+ // `animal-print` concept could not distinguish. Narrower rather than a rename: every one of these
5885
+ // is still an animal print.
5886
+ pimTerm(
5887
+ "crocodile",
5888
+ "Crocodile",
5889
+ "A motif derived from crocodile or alligator skin's raised, roughly rectangular scale blocks.",
5890
+ PIM_MOTIF_SOURCE,
5891
+ { broaderSlug: ANIMAL_PRINT_SLUG, seenAs: ["Faux Crocodile"] }
5892
+ ),
5893
+ pimTerm(
5894
+ "snakeskin",
5895
+ "Snakeskin",
5896
+ "A motif derived from snake skin's overlapping diamond or lozenge-shaped scales.",
5897
+ PIM_MOTIF_SOURCE,
5898
+ { broaderSlug: ANIMAL_PRINT_SLUG, seenAs: ["Faux Snake Skin"] }
5899
+ ),
5900
+ pimTerm(
5901
+ "ostrich",
5902
+ "Ostrich",
5903
+ "A motif derived from ostrich skin's raised quill-follicle bumps.",
5904
+ PIM_MOTIF_SOURCE,
5905
+ { broaderSlug: ANIMAL_PRINT_SLUG, seenAs: ["Faux Ostrich"] }
5906
+ ),
5907
+ pimTerm(
5908
+ "lizard",
5909
+ "Lizard",
5910
+ "A motif derived from lizard skin's small, irregular, close-set scales.",
5911
+ PIM_MOTIF_SOURCE,
5912
+ { broaderSlug: ANIMAL_PRINT_SLUG, seenAs: ["Faux Lizard"] }
5913
+ ),
5914
+ pimTerm(
5915
+ "leopard",
5916
+ "Leopard",
5917
+ "A motif derived from leopard fur's dark, irregular rosette markings on a tawny ground.",
5918
+ PIM_MOTIF_SOURCE,
5919
+ { broaderSlug: ANIMAL_PRINT_SLUG }
5920
+ ),
5921
+ pimTerm(
5922
+ "zebra",
5923
+ "Zebra",
5924
+ "A motif derived from zebra hide's alternating dark and pale parallel stripes.",
5925
+ PIM_MOTIF_SOURCE,
5926
+ { broaderSlug: ANIMAL_PRINT_SLUG }
5927
+ ),
5755
5928
  term7(
5756
5929
  "botanical",
5757
5930
  "Botanical",
5758
- "A representational motif of plants, flowers, foliage or fruit."
5931
+ "A representational motif of plants, flowers, foliage or fruit.",
5932
+ // Botanical's definition already reaches flowers; floral is an observed spelling of the same
5933
+ // concept rather than a second correct name for it, so it is `seenAs`, not an alt label.
5934
+ { seenAs: ["floral"] }
5935
+ ),
5936
+ // Heather in the trade names the same mixed-colour-yarn effect Wikidata records; melange, marled
5937
+ // and heathered are its correct names, none more canonical than another.
5938
+ {
5939
+ altLabels: ["heathered", "marled"],
5940
+ definition: "A mixed-colour yarn effect that gives the surface a flecked, uneven tone rather than one solid colour.",
5941
+ introducedAt: TAX57_DATE3,
5942
+ label: "Melange",
5943
+ provenance: {
5944
+ basis: "referenced",
5945
+ snapshot: TAX57_DATE3,
5946
+ source: wikidata4("Q5693696", "heather (fabric)")
5947
+ },
5948
+ reviewedAt: TAX57_DATE3,
5949
+ slug: "melange"
5950
+ },
5951
+ // AUTHORED. No Wikidata item for strie as a fabric or surface pattern on the review date.
5952
+ authoredTax57(
5953
+ "strie",
5954
+ "Strie",
5955
+ "Fine, irregular streaks running in one direction across the surface."
5759
5956
  ),
5760
5957
  term7(
5761
5958
  "damask",
@@ -5841,7 +6038,8 @@ var PATTERN_TYPE_TERMS = [
5841
6038
  term7(
5842
6039
  "marbleised",
5843
6040
  "Marbleised",
5844
- "Veining or clouding arranged to evoke marble."
6041
+ "Veining or clouding arranged to evoke marble.",
6042
+ { altLabels: ["marbleized"] }
5845
6043
  ),
5846
6044
  term7(
5847
6045
  "metal-effect",
@@ -6073,12 +6271,133 @@ var PATTERN_DIRECTIONALITY_TERMS = [
6073
6271
  "Two axes of equal weight, so the material reads correctly either way up."
6074
6272
  )
6075
6273
  ];
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
+ ];
6076
6394
  var PATTERN_TERMS = [
6077
6395
  ...PATTERN_TYPE_TERMS,
6078
6396
  ...PATTERN_SCALE_TERMS,
6079
6397
  ...PATTERN_DENSITY_TERMS,
6080
6398
  ...PATTERN_REGULARITY_TERMS,
6081
- ...PATTERN_DIRECTIONALITY_TERMS
6399
+ ...PATTERN_DIRECTIONALITY_TERMS,
6400
+ ...PATTERN_FIGURE_TERMS
6082
6401
  ];
6083
6402
 
6084
6403
  // src/axes/period.ts
@@ -6967,7 +7286,7 @@ var AUTHORED5 = {
6967
7286
  basis: "authored",
6968
7287
  source: "@instruments/taxonomy ADR 0006"
6969
7288
  };
6970
- var wikidata4 = (identifier, label) => ({
7289
+ var wikidata5 = (identifier, label) => ({
6971
7290
  identifier,
6972
7291
  label,
6973
7292
  match: "exact",
@@ -6987,25 +7306,25 @@ var SEASON_TERMS = [
6987
7306
  "spring",
6988
7307
  "Spring",
6989
7308
  "The temperate season between winter and summer, when the days lengthen.",
6990
- { external: [wikidata4("Q1312", "spring")] }
7309
+ { external: [wikidata5("Q1312", "spring")] }
6991
7310
  ),
6992
7311
  term10(
6993
7312
  "summer",
6994
7313
  "Summer",
6995
7314
  "The temperate season between spring and autumn, when the days are longest.",
6996
- { external: [wikidata4("Q1313", "summer")] }
7315
+ { external: [wikidata5("Q1313", "summer")] }
6997
7316
  ),
6998
7317
  term10(
6999
7318
  "autumn",
7000
7319
  "Autumn",
7001
7320
  "The temperate season between summer and winter, when the days shorten.",
7002
- { altLabels: ["fall"], external: [wikidata4("Q1314", "autumn")] }
7321
+ { altLabels: ["fall"], external: [wikidata5("Q1314", "autumn")] }
7003
7322
  ),
7004
7323
  term10(
7005
7324
  "winter",
7006
7325
  "Winter",
7007
7326
  "The temperate season between autumn and spring, when the days are shortest.",
7008
- { external: [wikidata4("Q1311", "winter")] }
7327
+ { external: [wikidata5("Q1311", "winter")] }
7009
7328
  )
7010
7329
  ];
7011
7330
 
@@ -10922,7 +11241,8 @@ var AXES = [
10922
11241
  label: "Directionality",
10923
11242
  slug: "directionality",
10924
11243
  terms: PATTERN_DIRECTIONALITY_TERMS
10925
- }
11244
+ },
11245
+ { label: "Figure", slug: "figure", terms: PATTERN_FIGURE_TERMS }
10926
11246
  ],
10927
11247
  label: "Pattern",
10928
11248
  question: "What motif or surface organisation does it carry?",
@@ -11202,8 +11522,8 @@ var resolveReference = (reference) => INDEX.byKey.get(canonicalKey(reference));
11202
11522
 
11203
11523
  // src/v1.ts
11204
11524
  var TAXONOMY_BASE_URI = "https://taxonomy.materialinstruments.com";
11205
- var TAXONOMY_SNAPSHOT = "2026-09-23";
11206
- var TAXONOMY_VERSION = "1.7.0";
11525
+ var TAXONOMY_SNAPSHOT = "2026-09-26";
11526
+ var TAXONOMY_VERSION = "1.8.0";
11207
11527
  var PUBLISHED_V1_BASELINE = "2026-08-30";
11208
11528
  var TAX45_REVIEW_SNAPSHOT = "2026-08-31";
11209
11529
  var LIMESTONE_INTRODUCED = "2026-09-01";
@@ -11506,6 +11826,15 @@ var HIERARCHY_REVIEW_LIFECYCLE = {
11506
11826
  status: "active"
11507
11827
  };
11508
11828
  var AMBIGUITY_GOVERNANCE = "Taxonomy preserves the governed readings without assigning a default, role, contextual preference, or consumer route.";
11829
+ var ORDERED_READING_GOVERNANCE = "The two readings are deliberately separate; the default records trade usage and does not merge the concepts.";
11830
+ var TAX57_DATE4 = "2026-09-26";
11831
+ var TAX57_LIFECYCLE = {
11832
+ introducedAt: TAX57_DATE4,
11833
+ reviewedAt: TAX57_DATE4,
11834
+ status: "active"
11835
+ };
11836
+ var TAX57_SHAPE_SOURCE = "the tile-shape column in a materials-marketplace catalogue (src-04), non-Samplize SKUs";
11837
+ var TAX57_REVIEW_SOURCE = "Linear TAX-57 visual-vocabulary review";
11509
11838
  var REVIEW_DATE12 = "2026-09-11";
11510
11839
  var REVIEW_LIFECYCLE = {
11511
11840
  introducedAt: REVIEW_DATE12,
@@ -11927,7 +12256,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
11927
12256
  defaultTarget: ENGINEERED_QUARTZ_SURFACING,
11928
12257
  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
12258
  governance: lexicalGovernance(
11930
- "The two readings are deliberately separate; the default records trade usage and does not merge the concepts.",
12259
+ ORDERED_READING_GOVERNANCE,
11931
12260
  {
11932
12261
  basis: "evidenced",
11933
12262
  snapshot: HIERARCHY_REVIEW_DATE,
@@ -11943,7 +12272,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
11943
12272
  defaultTarget: MELAMINE_BOARD,
11944
12273
  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
12274
  governance: lexicalGovernance(
11946
- "The two readings are deliberately separate; the default records trade usage and does not merge the concepts.",
12275
+ ORDERED_READING_GOVERNANCE,
11947
12276
  {
11948
12277
  basis: "evidenced",
11949
12278
  snapshot: HIERARCHY_REVIEW_DATE,
@@ -12122,6 +12451,131 @@ var AUTHORED_LEXICAL_ENTRIES = [
12122
12451
  reviewedTaxonomy("product-category/countertop")
12123
12452
  ]
12124
12453
  },
12454
+ // TAX-57 unit-shape compounds. Each names two governed shapes in one phrase, which the current
12455
+ // lexical contract cannot express as a single multi-target reading, so the alternatives are kept
12456
+ // as an explicit ambiguity or, where one alternative is already an alt label of the other, an
12457
+ // equivalent - never a silently chosen shape.
12458
+ {
12459
+ defaultTarget: {
12460
+ authority: "taxonomy",
12461
+ role: "primary",
12462
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/arabesque`
12463
+ },
12464
+ 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.",
12465
+ governance: lexicalGovernance(
12466
+ "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.",
12467
+ { basis: "evidenced", snapshot: TAX57_DATE4, source: TAX57_SHAPE_SOURCE },
12468
+ TAX57_LIFECYCLE
12469
+ ),
12470
+ outcome: "ambiguous",
12471
+ phrase: "arabesque",
12472
+ readings: [
12473
+ {
12474
+ authority: "taxonomy",
12475
+ role: "primary",
12476
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/arabesque`
12477
+ },
12478
+ {
12479
+ authority: "taxonomy",
12480
+ role: "secondary",
12481
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/star`
12482
+ },
12483
+ {
12484
+ authority: "taxonomy",
12485
+ role: "secondary",
12486
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/cross`
12487
+ }
12488
+ ]
12489
+ },
12490
+ ...["round & oval", "round and oval"].map(
12491
+ (phrase) => ({
12492
+ explanation: "The compound phrase does not settle whether a round or an oval unit is meant.",
12493
+ governance: lexicalGovernance(
12494
+ AMBIGUITY_GOVERNANCE,
12495
+ {
12496
+ basis: "evidenced",
12497
+ snapshot: TAX57_DATE4,
12498
+ source: TAX57_SHAPE_SOURCE
12499
+ },
12500
+ TAX57_LIFECYCLE
12501
+ ),
12502
+ outcome: "ambiguous",
12503
+ phrase,
12504
+ readings: [
12505
+ {
12506
+ authority: "taxonomy",
12507
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/circle`
12508
+ },
12509
+ {
12510
+ authority: "taxonomy",
12511
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/oval`
12512
+ }
12513
+ ]
12514
+ })
12515
+ ),
12516
+ {
12517
+ explanation: "The compound phrase names one shape: rhombus, for which diamond is already a governed alt label.",
12518
+ governance: lexicalGovernance(
12519
+ "Taxonomy records the evidenced compound phrase without assigning a consumer route.",
12520
+ { basis: "evidenced", snapshot: TAX57_DATE4, source: TAX57_SHAPE_SOURCE },
12521
+ TAX57_LIFECYCLE
12522
+ ),
12523
+ outcome: "equivalent",
12524
+ phrase: "diamond & rhombus",
12525
+ target: {
12526
+ authority: "taxonomy",
12527
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/rhombus`
12528
+ }
12529
+ },
12530
+ {
12531
+ explanation: "The compound phrase does not settle whether a parallelogram unit or a genuine chevron unit is meant.",
12532
+ governance: lexicalGovernance(
12533
+ AMBIGUITY_GOVERNANCE,
12534
+ { basis: "evidenced", snapshot: TAX57_DATE4, source: TAX57_SHAPE_SOURCE },
12535
+ TAX57_LIFECYCLE
12536
+ ),
12537
+ outcome: "ambiguous",
12538
+ phrase: "parallelogram & chevron",
12539
+ readings: [
12540
+ {
12541
+ authority: "taxonomy",
12542
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/parallelogram`
12543
+ },
12544
+ {
12545
+ authority: "taxonomy",
12546
+ uri: `${TAXONOMY_BASE_URI}/id/unit-shape/chevron`
12547
+ }
12548
+ ]
12549
+ },
12550
+ // TAX-57 ordered reading. Paint and tile makers use "velvet" as a finish name for a soft-touch,
12551
+ // light-absorbing surface; the trade means the woven cut-pile construction first.
12552
+ {
12553
+ defaultTarget: {
12554
+ authority: "taxonomy",
12555
+ role: "primary",
12556
+ uri: `${TAXONOMY_BASE_URI}/id/construction/velvet`
12557
+ },
12558
+ 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.",
12559
+ governance: lexicalGovernance(
12560
+ ORDERED_READING_GOVERNANCE,
12561
+ { basis: "authored", source: TAX57_REVIEW_SOURCE },
12562
+ TAX57_LIFECYCLE
12563
+ ),
12564
+ outcome: "ambiguous",
12565
+ phrase: "velvet",
12566
+ readings: [
12567
+ {
12568
+ authority: "taxonomy",
12569
+ role: "primary",
12570
+ uri: `${TAXONOMY_BASE_URI}/id/construction/velvet`
12571
+ },
12572
+ {
12573
+ authority: "taxonomy",
12574
+ role: "secondary",
12575
+ uri: `${TAXONOMY_BASE_URI}/id/finish/texture/velvety`
12576
+ }
12577
+ ]
12578
+ },
12125
12579
  {
12126
12580
  explanation: "The phrase makes an environmental performance claim that needs product evidence, not a terminology-only mapping.",
12127
12581
  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-26";
4
+ export declare const TAXONOMY_VERSION: "1.8.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-26";
139
+ readonly version: "1.8.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.8.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",