@instruments/taxonomy 1.1.0 → 1.1.2
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.d.ts +4 -4
- package/dist/index.js +740 -153
- package/package.json +2 -1
package/dist/index.js
CHANGED
|
@@ -1251,14 +1251,28 @@ var FINISH_TERMS = [
|
|
|
1251
1251
|
...FINISH_TEXTURE_TERMS
|
|
1252
1252
|
];
|
|
1253
1253
|
|
|
1254
|
+
// src/search-corpus-source.ts
|
|
1255
|
+
var MATERIALGRAPH_SEARCH_CORPUS_COMMIT = "53df40868bfb09bfe69bc66c455c051e34005ae1";
|
|
1256
|
+
var MATERIALGRAPH_SEARCH_CORPUS_PATH = "packages/products/src/benchmark/fixtures/benchmark-cases-2026-07-31.1.json";
|
|
1257
|
+
var MATERIALGRAPH_SEARCH_CORPUS_SNAPSHOT = "2026-07-31";
|
|
1258
|
+
var MATERIALGRAPH_SEARCH_CORPUS = `materialgraph@${MATERIALGRAPH_SEARCH_CORPUS_COMMIT}:${MATERIALGRAPH_SEARCH_CORPUS_PATH}`;
|
|
1259
|
+
var searchCorpusEvidence = (phrases) => `${MATERIALGRAPH_SEARCH_CORPUS} (244-query external search corpus; phrase and admission evidence: ${phrases}; canonical boundary authored by Taxonomy)`;
|
|
1260
|
+
|
|
1254
1261
|
// src/axes/format.ts
|
|
1255
1262
|
var SOURCE2 = "DesignShop frozen estate format vocabulary";
|
|
1256
1263
|
var SNAPSHOT2 = "2026-08-25";
|
|
1257
|
-
var
|
|
1264
|
+
var SEARCH_REVIEW_DATE = "2026-08-31";
|
|
1265
|
+
var searchCorpusProvenance = (evidence) => ({
|
|
1266
|
+
basis: "evidenced",
|
|
1267
|
+
snapshot: MATERIALGRAPH_SEARCH_CORPUS_SNAPSHOT,
|
|
1268
|
+
source: searchCorpusEvidence(evidence)
|
|
1269
|
+
});
|
|
1270
|
+
var term3 = (slug, label, definition, extra = {}) => ({
|
|
1258
1271
|
definition,
|
|
1259
1272
|
label,
|
|
1260
1273
|
provenance: { basis: "evidenced", snapshot: SNAPSHOT2, source: SOURCE2 },
|
|
1261
|
-
slug
|
|
1274
|
+
slug,
|
|
1275
|
+
...extra
|
|
1262
1276
|
});
|
|
1263
1277
|
var FORMAT_TERMS = [
|
|
1264
1278
|
term3("area-rug", "Area rug", "A bounded loose-laid textile floor covering."),
|
|
@@ -1282,6 +1296,16 @@ var FORMAT_TERMS = [
|
|
|
1282
1296
|
"Mural",
|
|
1283
1297
|
"Supplied as a multi-panel image composed into one continuous scene."
|
|
1284
1298
|
),
|
|
1299
|
+
term3(
|
|
1300
|
+
"mosaic",
|
|
1301
|
+
"Mosaic",
|
|
1302
|
+
"Supplied as small pieces assembled or mounted together to install as one composed field, independent of material and visible motif.",
|
|
1303
|
+
{
|
|
1304
|
+
introducedAt: SEARCH_REVIEW_DATE,
|
|
1305
|
+
provenance: searchCorpusProvenance("mosaic"),
|
|
1306
|
+
reviewedAt: SEARCH_REVIEW_DATE
|
|
1307
|
+
}
|
|
1308
|
+
),
|
|
1285
1309
|
term3(
|
|
1286
1310
|
"panel",
|
|
1287
1311
|
"Panel",
|
|
@@ -1303,6 +1327,31 @@ var FORMAT_TERMS = [
|
|
|
1303
1327
|
"A large rigid sheet intended to minimise joints or be fabricated to shape."
|
|
1304
1328
|
),
|
|
1305
1329
|
term3("tile", "Tile", "A discrete modular surface unit."),
|
|
1330
|
+
term3(
|
|
1331
|
+
"penny-round",
|
|
1332
|
+
"Penny round",
|
|
1333
|
+
"A legacy fused identity for a small circular tile supplied for installation as a field.",
|
|
1334
|
+
{
|
|
1335
|
+
altLabels: ["penny tile"],
|
|
1336
|
+
broaderSlug: "tile",
|
|
1337
|
+
introducedAt: SEARCH_REVIEW_DATE,
|
|
1338
|
+
note: "Deprecated after publication in 1.1.1. Use format.tile for the supplied unit, add unit-shape.circle for the observed outline, add format.mosaic when the product is supplied as a mounted or composed mosaic, and retain penny-scale size as product evidence outside Taxonomy.",
|
|
1339
|
+
provenance: searchCorpusProvenance("penny-tile"),
|
|
1340
|
+
reviewedAt: SEARCH_REVIEW_DATE,
|
|
1341
|
+
status: "deprecated",
|
|
1342
|
+
supersededByReference: "format.tile"
|
|
1343
|
+
}
|
|
1344
|
+
),
|
|
1345
|
+
term3(
|
|
1346
|
+
"veneer",
|
|
1347
|
+
"Veneer",
|
|
1348
|
+
"A thin facing layer supplied to be bonded or fixed to a substrate, independent of the material from which the facing is made.",
|
|
1349
|
+
{
|
|
1350
|
+
introducedAt: SEARCH_REVIEW_DATE,
|
|
1351
|
+
provenance: searchCorpusProvenance("veneer"),
|
|
1352
|
+
reviewedAt: SEARCH_REVIEW_DATE
|
|
1353
|
+
}
|
|
1354
|
+
),
|
|
1306
1355
|
term3(
|
|
1307
1356
|
"wide-plank",
|
|
1308
1357
|
"Wide plank",
|
|
@@ -1310,13 +1359,109 @@ var FORMAT_TERMS = [
|
|
|
1310
1359
|
)
|
|
1311
1360
|
];
|
|
1312
1361
|
|
|
1362
|
+
// src/axes/installation-layout.ts
|
|
1363
|
+
var REVIEW_DATE = "2026-08-31";
|
|
1364
|
+
var REVIEW_SOURCE = "@instruments/taxonomy TAX-45 reviewed implementation contract";
|
|
1365
|
+
var ZIGZAG_EVIDENCE_SOURCE = "Linear TAX-45 reviewed implementation contract; MaterialGraph herringbone and chevron product-language audit at 53df40868bfb09bfe69bc66c455c051e34005ae1:packages/products/src/search/eval/pattern-fidelity.ts";
|
|
1366
|
+
var term4 = (slug, label, definition, extra = {}) => ({
|
|
1367
|
+
definition,
|
|
1368
|
+
introducedAt: REVIEW_DATE,
|
|
1369
|
+
label,
|
|
1370
|
+
provenance: { basis: "authored", source: REVIEW_SOURCE },
|
|
1371
|
+
reviewedAt: REVIEW_DATE,
|
|
1372
|
+
slug,
|
|
1373
|
+
...extra
|
|
1374
|
+
});
|
|
1375
|
+
var INSTALLATION_LAYOUT_TERMS = [
|
|
1376
|
+
term4(
|
|
1377
|
+
"stack-bond",
|
|
1378
|
+
"Stack bond",
|
|
1379
|
+
"Equal units align in straight rows and columns with joints continuing across both directions."
|
|
1380
|
+
),
|
|
1381
|
+
term4(
|
|
1382
|
+
"running-bond",
|
|
1383
|
+
"Running bond",
|
|
1384
|
+
"Successive courses are displaced along the units' long direction without asserting an exact offset fraction."
|
|
1385
|
+
),
|
|
1386
|
+
term4(
|
|
1387
|
+
"offset-grid",
|
|
1388
|
+
"Offset grid",
|
|
1389
|
+
"Units occupy a repeated grid whose adjacent rows or columns are displaced, without the directional course identity of running bond."
|
|
1390
|
+
),
|
|
1391
|
+
term4(
|
|
1392
|
+
"herringbone",
|
|
1393
|
+
"Herringbone layout",
|
|
1394
|
+
"Elongated units meet at alternating right or oblique angles to form staggered broken zigzags.",
|
|
1395
|
+
{
|
|
1396
|
+
provenance: {
|
|
1397
|
+
basis: "referenced",
|
|
1398
|
+
snapshot: REVIEW_DATE,
|
|
1399
|
+
source: ZIGZAG_EVIDENCE_SOURCE
|
|
1400
|
+
}
|
|
1401
|
+
}
|
|
1402
|
+
),
|
|
1403
|
+
term4(
|
|
1404
|
+
"chevron",
|
|
1405
|
+
"Chevron layout",
|
|
1406
|
+
"Units meet at mitred or shaped ends to form continuous aligned V-shaped zigzags; it does not require one V-shaped physical unit.",
|
|
1407
|
+
{
|
|
1408
|
+
provenance: {
|
|
1409
|
+
basis: "referenced",
|
|
1410
|
+
snapshot: REVIEW_DATE,
|
|
1411
|
+
source: ZIGZAG_EVIDENCE_SOURCE
|
|
1412
|
+
}
|
|
1413
|
+
}
|
|
1414
|
+
),
|
|
1415
|
+
term4(
|
|
1416
|
+
"basketweave",
|
|
1417
|
+
"Basketweave",
|
|
1418
|
+
"Small parallel groups alternate direction to produce an interlaced block arrangement."
|
|
1419
|
+
),
|
|
1420
|
+
term4(
|
|
1421
|
+
"pinwheel",
|
|
1422
|
+
"Pinwheel",
|
|
1423
|
+
"Units rotate around repeated centres, commonly with a smaller central unit."
|
|
1424
|
+
),
|
|
1425
|
+
term4(
|
|
1426
|
+
"multi-size-modular",
|
|
1427
|
+
"Multi-size modular",
|
|
1428
|
+
"Two or more unit sizes repeat as one governed modular installation sequence."
|
|
1429
|
+
),
|
|
1430
|
+
term4(
|
|
1431
|
+
"ashlar",
|
|
1432
|
+
"Ashlar",
|
|
1433
|
+
"Rectangular units of varied lengths or sizes form coursed horizontal joints with controlled vertical-joint displacement."
|
|
1434
|
+
),
|
|
1435
|
+
term4(
|
|
1436
|
+
"random-stagger",
|
|
1437
|
+
"Random stagger",
|
|
1438
|
+
"Elongated units form courses whose end joints vary without a stable repeating offset."
|
|
1439
|
+
),
|
|
1440
|
+
term4(
|
|
1441
|
+
"radial",
|
|
1442
|
+
"Radial layout",
|
|
1443
|
+
"Units or real joints are persistently arranged around a centre or along radiating paths.",
|
|
1444
|
+
{ altLabels: ["Fan"] }
|
|
1445
|
+
),
|
|
1446
|
+
term4(
|
|
1447
|
+
"periodic-multi-shape",
|
|
1448
|
+
"Periodic multi-shape",
|
|
1449
|
+
"Two or more physical unit shapes recur in one stable repeating assembly."
|
|
1450
|
+
),
|
|
1451
|
+
term4(
|
|
1452
|
+
"irregular-field",
|
|
1453
|
+
"Irregular field",
|
|
1454
|
+
"Discrete units form a positively observed non-periodic field with persistent real joints."
|
|
1455
|
+
)
|
|
1456
|
+
];
|
|
1457
|
+
|
|
1313
1458
|
// src/axes/material.ts
|
|
1314
1459
|
var SOURCE3 = "DesignShop frozen estate and Material Instruments material vocabularies";
|
|
1315
1460
|
var SNAPSHOT3 = "2026-08-25";
|
|
1316
1461
|
var CROSSOVER_SNAPSHOT2 = "2026-08-30";
|
|
1317
1462
|
var NATURAL_FIBRE_SLUG = "natural-fibre";
|
|
1318
1463
|
var STONE_SLUG = "stone";
|
|
1319
|
-
var
|
|
1464
|
+
var term5 = (slug, label, definition) => ({
|
|
1320
1465
|
definition,
|
|
1321
1466
|
label,
|
|
1322
1467
|
provenance: { basis: "evidenced", snapshot: SNAPSHOT3, source: SOURCE3 },
|
|
@@ -1341,6 +1486,19 @@ var standardCrossoverTerm = (slug, label, definition, source) => ({
|
|
|
1341
1486
|
source
|
|
1342
1487
|
}
|
|
1343
1488
|
});
|
|
1489
|
+
var searchCorpusMaterial = (slug, label, definition, broaderSlug, referenceSource) => ({
|
|
1490
|
+
broaderSlug,
|
|
1491
|
+
definition,
|
|
1492
|
+
introducedAt: "2026-08-31",
|
|
1493
|
+
label,
|
|
1494
|
+
provenance: {
|
|
1495
|
+
basis: "evidenced",
|
|
1496
|
+
snapshot: MATERIALGRAPH_SEARCH_CORPUS_SNAPSHOT,
|
|
1497
|
+
source: `${searchCorpusEvidence(label)}; ${referenceSource}`
|
|
1498
|
+
},
|
|
1499
|
+
reviewedAt: "2026-08-31",
|
|
1500
|
+
slug
|
|
1501
|
+
});
|
|
1344
1502
|
var MATERIAL_TERMS = [
|
|
1345
1503
|
crossoverTerm(
|
|
1346
1504
|
"brass",
|
|
@@ -1354,17 +1512,17 @@ var MATERIAL_TERMS = [
|
|
|
1354
1512
|
"A copper-alloy family historically associated with copper and tin; unmodified bronze does not identify a specific modern composition.",
|
|
1355
1513
|
CROSSOVER_DEFINITION_SOURCES.bronze
|
|
1356
1514
|
),
|
|
1357
|
-
|
|
1515
|
+
term5(
|
|
1358
1516
|
"ceramic",
|
|
1359
1517
|
"Ceramic",
|
|
1360
1518
|
"A fired inorganic non-metallic body other than porcelain."
|
|
1361
1519
|
),
|
|
1362
|
-
|
|
1520
|
+
term5(
|
|
1363
1521
|
"porcelain",
|
|
1364
1522
|
"Porcelain",
|
|
1365
1523
|
"A dense, low-porosity fired ceramic body meeting porcelain classification."
|
|
1366
1524
|
),
|
|
1367
|
-
|
|
1525
|
+
term5(
|
|
1368
1526
|
"composite",
|
|
1369
1527
|
"Composite",
|
|
1370
1528
|
"An engineered material whose performance comes from two or more bound constituents."
|
|
@@ -1375,12 +1533,12 @@ var MATERIAL_TERMS = [
|
|
|
1375
1533
|
"A metal with a designated minimum copper content of 99.3 percent in the UNS wrought-copper designation system.",
|
|
1376
1534
|
CROSSOVER_DEFINITION_SOURCES.copper
|
|
1377
1535
|
),
|
|
1378
|
-
|
|
1536
|
+
term5(
|
|
1379
1537
|
"laminate",
|
|
1380
1538
|
"Laminate",
|
|
1381
1539
|
"A layered sheet material consolidated around a decorative or protective face."
|
|
1382
1540
|
),
|
|
1383
|
-
|
|
1541
|
+
term5(
|
|
1384
1542
|
NATURAL_FIBRE_SLUG,
|
|
1385
1543
|
"Natural fibre",
|
|
1386
1544
|
"A material whose visible fibre is plant- or animal-derived."
|
|
@@ -1391,12 +1549,12 @@ var MATERIAL_TERMS = [
|
|
|
1391
1549
|
"The metallic chemical element Ni used in solid metals and alloys; the bare term does not establish alloy, grade, or bulk composition.",
|
|
1392
1550
|
NICKEL_MATERIAL_SOURCE
|
|
1393
1551
|
),
|
|
1394
|
-
|
|
1552
|
+
term5(
|
|
1395
1553
|
"paper",
|
|
1396
1554
|
"Paper",
|
|
1397
1555
|
"A sheet material formed primarily from cellulose fibres."
|
|
1398
1556
|
),
|
|
1399
|
-
|
|
1557
|
+
term5(
|
|
1400
1558
|
"solid-surface",
|
|
1401
1559
|
"Solid surface",
|
|
1402
1560
|
"A homogeneous or near-homogeneous cast sheet made from resin and mineral filler."
|
|
@@ -1433,6 +1591,13 @@ var MATERIAL_TERMS = [
|
|
|
1433
1591
|
"An iron-carbon alloy family spanning many grades rather than one uniform product.",
|
|
1434
1592
|
CROSSOVER_DEFINITION_SOURCES.steel
|
|
1435
1593
|
),
|
|
1594
|
+
searchCorpusMaterial(
|
|
1595
|
+
"stainless-steel",
|
|
1596
|
+
"Stainless steel",
|
|
1597
|
+
"A corrosion-resistant steel alloy family containing sufficient chromium to form a protective passive layer, named as a bulk material rather than a surface finish or colour.",
|
|
1598
|
+
"steel",
|
|
1599
|
+
CROSSOVER_DEFINITION_SOURCES.steel
|
|
1600
|
+
),
|
|
1436
1601
|
crossoverTerm(
|
|
1437
1602
|
"wood",
|
|
1438
1603
|
"Wood",
|
|
@@ -1446,6 +1611,13 @@ var MATERIAL_TERMS = [
|
|
|
1446
1611
|
CROSSOVER_DEFINITION_SOURCES.oak,
|
|
1447
1612
|
"wood"
|
|
1448
1613
|
),
|
|
1614
|
+
searchCorpusMaterial(
|
|
1615
|
+
"white-oak",
|
|
1616
|
+
"White oak",
|
|
1617
|
+
"Timber from the white-oak species group within the genus Quercus, named as a wood material rather than a colour or surface finish.",
|
|
1618
|
+
"oak",
|
|
1619
|
+
CROSSOVER_DEFINITION_SOURCES.oak
|
|
1620
|
+
),
|
|
1449
1621
|
crossoverTerm(
|
|
1450
1622
|
"teak",
|
|
1451
1623
|
"Teak",
|
|
@@ -1638,7 +1810,7 @@ var MATERIAL_TERMS = [
|
|
|
1638
1810
|
"A woven fabric conventionally made with indigo-dyed warp and undyed filling yarns in a twill construction; blends and non-blue denim exist.",
|
|
1639
1811
|
CROSSOVER_DEFINITION_SOURCES.denim
|
|
1640
1812
|
),
|
|
1641
|
-
|
|
1813
|
+
term5(
|
|
1642
1814
|
"vinyl",
|
|
1643
1815
|
"Vinyl",
|
|
1644
1816
|
"A resilient material system whose principal polymer is polyvinyl chloride."
|
|
@@ -1851,9 +2023,9 @@ var PALETTE_HUE_TERMS = [
|
|
|
1851
2023
|
label: "Pink",
|
|
1852
2024
|
slug: "pink"
|
|
1853
2025
|
}
|
|
1854
|
-
].map((
|
|
1855
|
-
...
|
|
1856
|
-
canonicalAuthority: colorScopeAuthority(
|
|
2026
|
+
].map((term10) => ({
|
|
2027
|
+
...term10,
|
|
2028
|
+
canonicalAuthority: colorScopeAuthority(term10.slug, "color-family"),
|
|
1857
2029
|
provenance: {
|
|
1858
2030
|
basis: "vendored",
|
|
1859
2031
|
snapshot: SNAPSHOT5,
|
|
@@ -1876,9 +2048,9 @@ var PALETTE_TEMPERATURE_TERMS = [
|
|
|
1876
2048
|
label: "Neutral",
|
|
1877
2049
|
slug: "neutral"
|
|
1878
2050
|
}
|
|
1879
|
-
].map((
|
|
1880
|
-
...
|
|
1881
|
-
canonicalAuthority: colorScopeAuthority(
|
|
2051
|
+
].map((term10) => ({
|
|
2052
|
+
...term10,
|
|
2053
|
+
canonicalAuthority: colorScopeAuthority(term10.slug, "temperature-level"),
|
|
1882
2054
|
provenance: {
|
|
1883
2055
|
basis: "vendored",
|
|
1884
2056
|
snapshot: SNAPSHOT5,
|
|
@@ -1974,11 +2146,15 @@ var MG_SCALE = "materialgraph ms_pattern_scale";
|
|
|
1974
2146
|
var MG_DENSITY = "materialgraph ms_pattern_density";
|
|
1975
2147
|
var MG_REGULARITY = "materialgraph ms_pattern_regularity";
|
|
1976
2148
|
var MG_DIRECTIONALITY = "materialgraph ms_directionality";
|
|
1977
|
-
var
|
|
2149
|
+
var GEOMETRY_REVIEW_DATE = "2026-08-31";
|
|
2150
|
+
var GEOMETRY_SOURCE = "Linear TAX-45 reviewed implementation contract and independent review comment c457ef92-372b-4db0-8490-0b96ecccc8ac";
|
|
2151
|
+
var GEOMETRY_EVIDENCE_SOURCE = "Linear TAX-45 reviewed implementation contract; MaterialGraph herringbone and chevron product-language audit at 53df40868bfb09bfe69bc66c455c051e34005ae1:packages/products/src/search/eval/pattern-fidelity.ts";
|
|
2152
|
+
var term6 = (slug, label, definition, extra = {}) => ({
|
|
1978
2153
|
definition,
|
|
1979
2154
|
label,
|
|
1980
2155
|
provenance: { basis: "evidenced", snapshot: SNAPSHOT6, source: SOURCE4 },
|
|
1981
|
-
slug
|
|
2156
|
+
slug,
|
|
2157
|
+
...extra
|
|
1982
2158
|
});
|
|
1983
2159
|
var vendored2 = (source, slug, label, definition, rank) => ({
|
|
1984
2160
|
definition,
|
|
@@ -1988,118 +2164,169 @@ var vendored2 = (source, slug, label, definition, rank) => ({
|
|
|
1988
2164
|
...rank === void 0 ? {} : { rank }
|
|
1989
2165
|
});
|
|
1990
2166
|
var PATTERN_TYPE_TERMS = [
|
|
1991
|
-
|
|
2167
|
+
term6(
|
|
1992
2168
|
"plain",
|
|
1993
2169
|
"Plain",
|
|
1994
2170
|
"No deliberate repeated motif or representational surface image."
|
|
1995
2171
|
),
|
|
1996
|
-
|
|
2172
|
+
term6(
|
|
1997
2173
|
"abstract-organic",
|
|
1998
2174
|
"Abstract or organic",
|
|
1999
2175
|
"Non-representational marks organised with irregular or biomorphic movement."
|
|
2000
2176
|
),
|
|
2001
|
-
|
|
2177
|
+
term6(
|
|
2002
2178
|
"animal-print",
|
|
2003
2179
|
"Animal print",
|
|
2004
2180
|
"A motif derived from animal markings or skins."
|
|
2005
2181
|
),
|
|
2006
|
-
|
|
2182
|
+
term6(
|
|
2007
2183
|
"botanical",
|
|
2008
2184
|
"Botanical",
|
|
2009
2185
|
"A representational motif of plants, flowers, foliage or fruit."
|
|
2010
2186
|
),
|
|
2011
|
-
|
|
2187
|
+
term6(
|
|
2012
2188
|
"damask",
|
|
2013
2189
|
"Damask",
|
|
2014
2190
|
"A mirrored or scrolling ornamental repeat derived from woven damask and related brocades."
|
|
2015
2191
|
),
|
|
2016
|
-
|
|
2192
|
+
term6(
|
|
2017
2193
|
"concrete-effect",
|
|
2018
2194
|
"Concrete effect",
|
|
2019
2195
|
"A printed or formed surface intended to read as concrete rather than its substrate."
|
|
2020
2196
|
),
|
|
2021
|
-
|
|
2197
|
+
term6(
|
|
2022
2198
|
"cultural-heritage",
|
|
2023
2199
|
"Cultural heritage",
|
|
2024
2200
|
"A motif explicitly drawn from a named cultural or craft tradition."
|
|
2025
2201
|
),
|
|
2026
|
-
|
|
2202
|
+
term6(
|
|
2027
2203
|
"geometric",
|
|
2028
2204
|
"Geometric",
|
|
2029
2205
|
"A repeat organised from geometric shapes, grids or measured linework."
|
|
2030
2206
|
),
|
|
2031
|
-
|
|
2207
|
+
term6(
|
|
2032
2208
|
"herringbone-chevron",
|
|
2033
2209
|
"Herringbone or chevron",
|
|
2034
|
-
"A directional
|
|
2210
|
+
"A legacy combined reading for directional zigzags formed by angled units or marks.",
|
|
2211
|
+
{
|
|
2212
|
+
introducedAt: "2026-08-30",
|
|
2213
|
+
note: "Deprecated by the Linear TAX-45 reviewed implementation contract and independent review comment c457ef92-372b-4db0-8490-0b96ecccc8ac because one combined identity could not distinguish broken herringbone from continuous chevron motifs. Zigzag preserves the non-specific historical meaning; use the narrower herringbone or chevron concept when evidence supports it.",
|
|
2214
|
+
reviewedAt: GEOMETRY_REVIEW_DATE,
|
|
2215
|
+
status: "deprecated",
|
|
2216
|
+
supersededByReference: "pattern.type.zigzag"
|
|
2217
|
+
}
|
|
2035
2218
|
),
|
|
2036
|
-
|
|
2219
|
+
term6(
|
|
2220
|
+
"zigzag",
|
|
2221
|
+
"Zigzag",
|
|
2222
|
+
"A repeated motif that alternates direction through connected or visually aligned angled marks without asserting herringbone or chevron specifically.",
|
|
2223
|
+
{
|
|
2224
|
+
introducedAt: GEOMETRY_REVIEW_DATE,
|
|
2225
|
+
provenance: {
|
|
2226
|
+
basis: "referenced",
|
|
2227
|
+
snapshot: GEOMETRY_REVIEW_DATE,
|
|
2228
|
+
source: GEOMETRY_SOURCE
|
|
2229
|
+
},
|
|
2230
|
+
reviewedAt: GEOMETRY_REVIEW_DATE
|
|
2231
|
+
}
|
|
2232
|
+
),
|
|
2233
|
+
term6(
|
|
2234
|
+
"herringbone",
|
|
2235
|
+
"Herringbone pattern",
|
|
2236
|
+
"A broken zigzag motif whose alternating angled marks or units terminate against one another rather than forming aligned V points.",
|
|
2237
|
+
{
|
|
2238
|
+
broaderSlug: "zigzag",
|
|
2239
|
+
introducedAt: GEOMETRY_REVIEW_DATE,
|
|
2240
|
+
provenance: {
|
|
2241
|
+
basis: "referenced",
|
|
2242
|
+
snapshot: GEOMETRY_REVIEW_DATE,
|
|
2243
|
+
source: GEOMETRY_EVIDENCE_SOURCE
|
|
2244
|
+
},
|
|
2245
|
+
reviewedAt: GEOMETRY_REVIEW_DATE
|
|
2246
|
+
}
|
|
2247
|
+
),
|
|
2248
|
+
term6(
|
|
2249
|
+
"chevron",
|
|
2250
|
+
"Chevron pattern",
|
|
2251
|
+
"A continuous zigzag motif organised as repeated aligned V-shaped points, independent of whether physical units establish it.",
|
|
2252
|
+
{
|
|
2253
|
+
broaderSlug: "zigzag",
|
|
2254
|
+
introducedAt: GEOMETRY_REVIEW_DATE,
|
|
2255
|
+
provenance: {
|
|
2256
|
+
basis: "referenced",
|
|
2257
|
+
snapshot: GEOMETRY_REVIEW_DATE,
|
|
2258
|
+
source: GEOMETRY_EVIDENCE_SOURCE
|
|
2259
|
+
},
|
|
2260
|
+
reviewedAt: GEOMETRY_REVIEW_DATE
|
|
2261
|
+
}
|
|
2262
|
+
),
|
|
2263
|
+
term6(
|
|
2037
2264
|
"leather-effect",
|
|
2038
2265
|
"Leather effect",
|
|
2039
2266
|
"A surface intended to read as leather rather than its substrate."
|
|
2040
2267
|
),
|
|
2041
|
-
|
|
2268
|
+
term6(
|
|
2042
2269
|
"marbleised",
|
|
2043
2270
|
"Marbleised",
|
|
2044
2271
|
"Veining or clouding arranged to evoke marble."
|
|
2045
2272
|
),
|
|
2046
|
-
|
|
2273
|
+
term6(
|
|
2047
2274
|
"metal-effect",
|
|
2048
2275
|
"Metal effect",
|
|
2049
2276
|
"A surface intended to read as metal rather than its substrate."
|
|
2050
2277
|
),
|
|
2051
|
-
|
|
2278
|
+
term6(
|
|
2052
2279
|
"natural-motif",
|
|
2053
2280
|
"Natural motif",
|
|
2054
2281
|
"A non-botanical motif read as naturally occurring material or landscape incident."
|
|
2055
2282
|
),
|
|
2056
|
-
|
|
2283
|
+
term6(
|
|
2057
2284
|
"novelty",
|
|
2058
2285
|
"Novelty",
|
|
2059
2286
|
"A pictorial repeat whose subject is intentionally unexpected or conversational."
|
|
2060
2287
|
),
|
|
2061
|
-
|
|
2288
|
+
term6(
|
|
2062
2289
|
"plaid-check",
|
|
2063
2290
|
"Plaid or check",
|
|
2064
2291
|
"An orthogonal repeat of crossing bands or alternating squares."
|
|
2065
2292
|
),
|
|
2066
|
-
|
|
2293
|
+
term6(
|
|
2067
2294
|
"scenic",
|
|
2068
2295
|
"Scenic",
|
|
2069
2296
|
"A continuous or panelled representational landscape or architectural scene."
|
|
2070
2297
|
),
|
|
2071
|
-
|
|
2298
|
+
term6(
|
|
2072
2299
|
"stone-effect",
|
|
2073
2300
|
"Stone effect",
|
|
2074
2301
|
"A surface intended to read as stone rather than its substrate."
|
|
2075
2302
|
),
|
|
2076
|
-
|
|
2077
|
-
|
|
2303
|
+
term6("stripe", "Stripe", "A repeat organised as parallel bands."),
|
|
2304
|
+
term6(
|
|
2078
2305
|
"gradient",
|
|
2079
2306
|
"Gradient",
|
|
2080
2307
|
"A continuous or stepped transition in tone, colour or mark density."
|
|
2081
2308
|
),
|
|
2082
|
-
|
|
2309
|
+
term6(
|
|
2083
2310
|
"texture",
|
|
2084
2311
|
"Texture",
|
|
2085
2312
|
"A non-representational repeat whose principal reading is tactile or relief-like."
|
|
2086
2313
|
),
|
|
2087
|
-
|
|
2314
|
+
term6(
|
|
2088
2315
|
"toile",
|
|
2089
2316
|
"Toile",
|
|
2090
2317
|
"A fine-line pastoral or narrative pictorial repeat, usually in one colour."
|
|
2091
2318
|
),
|
|
2092
|
-
|
|
2319
|
+
term6(
|
|
2093
2320
|
"character",
|
|
2094
2321
|
"Whimsy and character",
|
|
2095
2322
|
"A playful illustrative motif whose principal effect is personality rather than subject fidelity."
|
|
2096
2323
|
),
|
|
2097
|
-
|
|
2324
|
+
term6(
|
|
2098
2325
|
"woodgrain-effect",
|
|
2099
2326
|
"Woodgrain effect",
|
|
2100
2327
|
"A surface intended to read as wood grain rather than its substrate."
|
|
2101
2328
|
),
|
|
2102
|
-
|
|
2329
|
+
term6(
|
|
2103
2330
|
"woven-effect",
|
|
2104
2331
|
"Woven effect",
|
|
2105
2332
|
"A surface intended to read as woven threads rather than its construction."
|
|
@@ -2673,8 +2900,8 @@ var uniclass2 = (slug, label, match) => ({
|
|
|
2673
2900
|
match,
|
|
2674
2901
|
scheme: "uniclass"
|
|
2675
2902
|
});
|
|
2676
|
-
var searchedUniclass = (query) => ({
|
|
2677
|
-
date
|
|
2903
|
+
var searchedUniclass = (query, date = "2026-08-27") => ({
|
|
2904
|
+
date,
|
|
2678
2905
|
query,
|
|
2679
2906
|
scheme: "uniclass",
|
|
2680
2907
|
via: "uniclass.thenbs.com/taxon, Pr table walked from Pr_20 to Pr_90"
|
|
@@ -2683,7 +2910,8 @@ var ESTATE2 = "DesignShop frozen estate and Material Instruments product vocabul
|
|
|
2683
2910
|
var ESTATE_SNAPSHOT2 = "2026-08-25";
|
|
2684
2911
|
var CORPUS2 = "Material Bank catalogue, us_hierarchy_category_v2 level-2 rollup";
|
|
2685
2912
|
var CORPUS_SNAPSHOT2 = "2026-08-27";
|
|
2686
|
-
var
|
|
2913
|
+
var SEARCH_REVIEW_DATE2 = "2026-08-31";
|
|
2914
|
+
var term7 = (slug, label, definition, extra = {}) => ({
|
|
2687
2915
|
definition,
|
|
2688
2916
|
label,
|
|
2689
2917
|
provenance: { basis: "evidenced", snapshot: ESTATE_SNAPSHOT2, source: ESTATE2 },
|
|
@@ -2697,8 +2925,21 @@ var fromCorpus = (slug, label, definition, extra = {}) => ({
|
|
|
2697
2925
|
slug,
|
|
2698
2926
|
...extra
|
|
2699
2927
|
});
|
|
2928
|
+
var fromSearchCorpus = (slug, label, definition, extra = {}) => ({
|
|
2929
|
+
definition,
|
|
2930
|
+
introducedAt: SEARCH_REVIEW_DATE2,
|
|
2931
|
+
label,
|
|
2932
|
+
provenance: {
|
|
2933
|
+
basis: "evidenced",
|
|
2934
|
+
snapshot: MATERIALGRAPH_SEARCH_CORPUS_SNAPSHOT,
|
|
2935
|
+
source: searchCorpusEvidence(label)
|
|
2936
|
+
},
|
|
2937
|
+
reviewedAt: SEARCH_REVIEW_DATE2,
|
|
2938
|
+
slug,
|
|
2939
|
+
...extra
|
|
2940
|
+
});
|
|
2700
2941
|
var PRODUCT_CATEGORY_TERMS = [
|
|
2701
|
-
|
|
2942
|
+
term7(
|
|
2702
2943
|
"tile",
|
|
2703
2944
|
"Tile",
|
|
2704
2945
|
"A modular hard-surface unit made to be installed in a repeated field.",
|
|
@@ -2706,21 +2947,24 @@ var PRODUCT_CATEGORY_TERMS = [
|
|
|
2706
2947
|
external: [uniclass2("Pr_35_93_96", "Wall and floor tile units", "exact")]
|
|
2707
2948
|
}
|
|
2708
2949
|
),
|
|
2709
|
-
|
|
2950
|
+
term7(
|
|
2710
2951
|
"carpet-and-rug",
|
|
2711
2952
|
"Carpet and rug",
|
|
2712
2953
|
"A textile floor covering, fixed or loose laid.",
|
|
2713
2954
|
{
|
|
2955
|
+
altLabels: ["carpet", "rug"],
|
|
2714
2956
|
external: [
|
|
2715
2957
|
uniclass2(
|
|
2716
2958
|
"Pr_35_57_11",
|
|
2717
2959
|
"Carpets, carpet tiles, coverings, underlays and mats",
|
|
2718
2960
|
"exact"
|
|
2719
2961
|
)
|
|
2720
|
-
]
|
|
2962
|
+
],
|
|
2963
|
+
introducedAt: "2026-08-30",
|
|
2964
|
+
reviewedAt: "2026-08-31"
|
|
2721
2965
|
}
|
|
2722
2966
|
),
|
|
2723
|
-
|
|
2967
|
+
term7(
|
|
2724
2968
|
"countertop",
|
|
2725
2969
|
"Countertop",
|
|
2726
2970
|
"A product or fabricated assembly supplied as a horizontal work surface.",
|
|
@@ -2730,7 +2974,7 @@ var PRODUCT_CATEGORY_TERMS = [
|
|
|
2730
2974
|
]
|
|
2731
2975
|
}
|
|
2732
2976
|
),
|
|
2733
|
-
|
|
2977
|
+
term7(
|
|
2734
2978
|
"flooring",
|
|
2735
2979
|
"Flooring",
|
|
2736
2980
|
"A product supplied to form a finished walking surface.",
|
|
@@ -2738,7 +2982,7 @@ var PRODUCT_CATEGORY_TERMS = [
|
|
|
2738
2982
|
external: [uniclass2("Pr_35_57_71", "Resilient floor coverings", "close")]
|
|
2739
2983
|
}
|
|
2740
2984
|
),
|
|
2741
|
-
|
|
2985
|
+
term7(
|
|
2742
2986
|
"wallcovering",
|
|
2743
2987
|
"Wallcovering",
|
|
2744
2988
|
"A sheet, roll or panel product applied as the visible wall surface.",
|
|
@@ -2886,65 +3130,172 @@ var PRODUCT_CATEGORY_TERMS = [
|
|
|
2886
3130
|
"Ceiling system",
|
|
2887
3131
|
"A suspended or applied ceiling product supplied with its own grid, carrier or fixing method.",
|
|
2888
3132
|
{ external: [uniclass2("Pr_35_93_13", "Ceiling infill units", "close")] }
|
|
3133
|
+
),
|
|
3134
|
+
fromSearchCorpus(
|
|
3135
|
+
"sconce",
|
|
3136
|
+
"Sconce",
|
|
3137
|
+
"A wall-mounted luminaire supplied as a complete light fitting, not the wall it mounts to or the light effect it produces.",
|
|
3138
|
+
{
|
|
3139
|
+
altLabels: ["wall sconce", "wall light"],
|
|
3140
|
+
broaderSlug: "luminaire",
|
|
3141
|
+
searchedWithout: [
|
|
3142
|
+
searchedUniclass("sconce, wall sconce, wall light", SEARCH_REVIEW_DATE2)
|
|
3143
|
+
]
|
|
3144
|
+
}
|
|
3145
|
+
),
|
|
3146
|
+
fromSearchCorpus(
|
|
3147
|
+
"chandelier",
|
|
3148
|
+
"Chandelier",
|
|
3149
|
+
"A suspended decorative luminaire with multiple arms, branches or light sources, independent of the ceiling system supporting it.",
|
|
3150
|
+
{
|
|
3151
|
+
broaderSlug: "luminaire",
|
|
3152
|
+
external: [uniclass2("Pr_70_70_48_13", "Chandeliers", "exact")]
|
|
3153
|
+
}
|
|
3154
|
+
),
|
|
3155
|
+
fromSearchCorpus(
|
|
3156
|
+
"pendant-luminaire",
|
|
3157
|
+
"Pendant luminaire",
|
|
3158
|
+
"A luminaire suspended from above as an individual fitting, distinct from its cable, track or ceiling support.",
|
|
3159
|
+
{
|
|
3160
|
+
altLabels: ["pendant", "pendant light"],
|
|
3161
|
+
broaderSlug: "luminaire",
|
|
3162
|
+
external: [uniclass2("Pr_70_70_48_62", "Pendant luminaires", "exact")]
|
|
3163
|
+
}
|
|
3164
|
+
),
|
|
3165
|
+
fromSearchCorpus(
|
|
3166
|
+
"track-luminaire",
|
|
3167
|
+
"Track luminaire",
|
|
3168
|
+
"A luminaire made to attach to and draw power from a lighting track, distinct from the track and its electrical accessories.",
|
|
3169
|
+
{
|
|
3170
|
+
altLabels: ["track lighting", "track light"],
|
|
3171
|
+
broaderSlug: "luminaire",
|
|
3172
|
+
searchedWithout: [
|
|
3173
|
+
searchedUniclass("track luminaire, track light", SEARCH_REVIEW_DATE2)
|
|
3174
|
+
]
|
|
3175
|
+
}
|
|
3176
|
+
),
|
|
3177
|
+
fromSearchCorpus(
|
|
3178
|
+
"sofa",
|
|
3179
|
+
"Sofa",
|
|
3180
|
+
"An upholstered seating product for two or more people, independent of its upholstery material or room placement.",
|
|
3181
|
+
{
|
|
3182
|
+
altLabels: ["couch"],
|
|
3183
|
+
broaderSlug: "seating",
|
|
3184
|
+
external: [uniclass2("Pr_40_50_12_81", "Sofas", "exact")]
|
|
3185
|
+
}
|
|
3186
|
+
),
|
|
3187
|
+
fromSearchCorpus(
|
|
3188
|
+
"mosaic-tile",
|
|
3189
|
+
"Mosaic tile",
|
|
3190
|
+
"A tile product composed of small tesserae supplied loose or mounted for installation as a field, independent of their material or visible motif.",
|
|
3191
|
+
{
|
|
3192
|
+
altLabels: ["mosaic"],
|
|
3193
|
+
broaderSlug: "tile",
|
|
3194
|
+
external: [uniclass2("Pr_35_93_96_53", "Mosaic tiles", "exact")]
|
|
3195
|
+
}
|
|
3196
|
+
),
|
|
3197
|
+
fromSearchCorpus(
|
|
3198
|
+
"wall-panel",
|
|
3199
|
+
"Wall panel",
|
|
3200
|
+
"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.",
|
|
3201
|
+
{
|
|
3202
|
+
altLabels: ["wall panelling", "wall paneling"],
|
|
3203
|
+
broaderSlug: "wallcovering",
|
|
3204
|
+
searchedWithout: [
|
|
3205
|
+
searchedUniclass(
|
|
3206
|
+
"wall panel, wall panelling, wall paneling",
|
|
3207
|
+
SEARCH_REVIEW_DATE2
|
|
3208
|
+
)
|
|
3209
|
+
]
|
|
3210
|
+
}
|
|
3211
|
+
),
|
|
3212
|
+
fromSearchCorpus(
|
|
3213
|
+
"acoustic-ceiling-system",
|
|
3214
|
+
"Acoustic ceiling system",
|
|
3215
|
+
"A ceiling system specified to absorb or control sound, independent of the material, module format or space in which it is installed.",
|
|
3216
|
+
{
|
|
3217
|
+
altLabels: ["acoustic ceiling"],
|
|
3218
|
+
broaderSlug: "ceiling-system",
|
|
3219
|
+
searchedWithout: [
|
|
3220
|
+
searchedUniclass(
|
|
3221
|
+
"acoustic ceiling system, acoustic ceiling",
|
|
3222
|
+
SEARCH_REVIEW_DATE2
|
|
3223
|
+
)
|
|
3224
|
+
]
|
|
3225
|
+
}
|
|
3226
|
+
),
|
|
3227
|
+
fromSearchCorpus(
|
|
3228
|
+
"upholstery-textile",
|
|
3229
|
+
"Upholstery textile",
|
|
3230
|
+
"A textile product supplied for covering furniture, distinct from the furniture, the upholstery application and the fibre or hide material.",
|
|
3231
|
+
{
|
|
3232
|
+
broaderSlug: "textile",
|
|
3233
|
+
searchedWithout: [
|
|
3234
|
+
searchedUniclass(
|
|
3235
|
+
"upholstery textile, upholstery fabric",
|
|
3236
|
+
SEARCH_REVIEW_DATE2
|
|
3237
|
+
)
|
|
3238
|
+
]
|
|
3239
|
+
}
|
|
2889
3240
|
)
|
|
2890
3241
|
];
|
|
2891
3242
|
|
|
2892
3243
|
// src/axes/requirement.ts
|
|
2893
3244
|
var SOURCE5 = "Material Instruments residential and commercial project requirements";
|
|
2894
3245
|
var SNAPSHOT8 = "2026-08-25";
|
|
2895
|
-
var
|
|
3246
|
+
var term8 = (slug, label, definition) => ({
|
|
2896
3247
|
definition,
|
|
2897
3248
|
label,
|
|
2898
3249
|
provenance: { basis: "evidenced", snapshot: SNAPSHOT8, source: SOURCE5 },
|
|
2899
3250
|
slug
|
|
2900
3251
|
});
|
|
2901
3252
|
var REQUIREMENT_TERMS = [
|
|
2902
|
-
|
|
3253
|
+
term8(
|
|
2903
3254
|
"budget",
|
|
2904
3255
|
"Budget",
|
|
2905
3256
|
"The allowed monetary cost or cost band for the applicable scope."
|
|
2906
3257
|
),
|
|
2907
|
-
|
|
3258
|
+
term8(
|
|
2908
3259
|
"availability",
|
|
2909
3260
|
"Availability",
|
|
2910
3261
|
"Whether the thing can be supplied in the required market and time window."
|
|
2911
3262
|
),
|
|
2912
|
-
|
|
3263
|
+
term8(
|
|
2913
3264
|
"lead-time",
|
|
2914
3265
|
"Lead time",
|
|
2915
3266
|
"The maximum elapsed time acceptable between commitment and supply."
|
|
2916
3267
|
),
|
|
2917
|
-
|
|
3268
|
+
term8(
|
|
2918
3269
|
"slip-resistance",
|
|
2919
3270
|
"Slip resistance",
|
|
2920
3271
|
"The required measured resistance to pedestrian slipping for the application."
|
|
2921
3272
|
),
|
|
2922
|
-
|
|
3273
|
+
term8(
|
|
2923
3274
|
"wet-area-suitability",
|
|
2924
3275
|
"Wet-area suitability",
|
|
2925
3276
|
"Whether the product is evidenced as suitable for the stated wet exposure."
|
|
2926
3277
|
),
|
|
2927
|
-
|
|
3278
|
+
term8(
|
|
2928
3279
|
"fire-performance",
|
|
2929
3280
|
"Fire performance",
|
|
2930
3281
|
"The required reaction-to-fire or fire-resistance classification."
|
|
2931
3282
|
),
|
|
2932
|
-
|
|
3283
|
+
term8(
|
|
2933
3284
|
"acoustic-performance",
|
|
2934
3285
|
"Acoustic performance",
|
|
2935
3286
|
"The required sound absorption, insulation or impact-noise performance."
|
|
2936
3287
|
),
|
|
2937
|
-
|
|
3288
|
+
term8(
|
|
2938
3289
|
"maintenance",
|
|
2939
3290
|
"Maintenance",
|
|
2940
3291
|
"The allowed cleaning, renewal or routine care burden."
|
|
2941
3292
|
),
|
|
2942
|
-
|
|
3293
|
+
term8(
|
|
2943
3294
|
"installation-method",
|
|
2944
3295
|
"Installation method",
|
|
2945
3296
|
"A required or prohibited method of fixing, laying or applying the product."
|
|
2946
3297
|
),
|
|
2947
|
-
|
|
3298
|
+
term8(
|
|
2948
3299
|
"indoor-air-quality",
|
|
2949
3300
|
"Indoor air quality",
|
|
2950
3301
|
"A limit or certification concerning emissions into occupied indoor air."
|
|
@@ -4777,10 +5128,10 @@ var SPACE_TERMS = SPACE_SECTORS.flatMap(
|
|
|
4777
5128
|
(sector) => sector.terms
|
|
4778
5129
|
);
|
|
4779
5130
|
var SPACE_BY_ID = new Map(
|
|
4780
|
-
SPACE_TERMS.map((
|
|
5131
|
+
SPACE_TERMS.map((term10) => [term10.slug, term10])
|
|
4781
5132
|
);
|
|
4782
5133
|
var SECTOR_IDS = new Set(
|
|
4783
|
-
SECTOR_TERMS.map((
|
|
5134
|
+
SECTOR_TERMS.map((term10) => term10.slug)
|
|
4784
5135
|
);
|
|
4785
5136
|
|
|
4786
5137
|
// src/axes/style.ts
|
|
@@ -5681,6 +6032,107 @@ var TYPOLOGY_TERMS = [
|
|
|
5681
6032
|
}
|
|
5682
6033
|
];
|
|
5683
6034
|
|
|
6035
|
+
// src/axes/unit-shape.ts
|
|
6036
|
+
var REVIEW_DATE2 = "2026-08-31";
|
|
6037
|
+
var REVIEW_SOURCE2 = "@instruments/taxonomy TAX-45 reviewed implementation contract";
|
|
6038
|
+
var PICKET_SOURCE = "Linear TAX-45 reviewed implementation contract; MaterialGraph picket product fixture at 53df40868bfb09bfe69bc66c455c051e34005ae1:packages/products/src/product-search-projection.test.ts";
|
|
6039
|
+
var term9 = (slug, label, definition, extra = {}) => ({
|
|
6040
|
+
definition,
|
|
6041
|
+
introducedAt: REVIEW_DATE2,
|
|
6042
|
+
label,
|
|
6043
|
+
provenance: { basis: "authored", source: REVIEW_SOURCE2 },
|
|
6044
|
+
reviewedAt: REVIEW_DATE2,
|
|
6045
|
+
slug,
|
|
6046
|
+
...extra
|
|
6047
|
+
});
|
|
6048
|
+
var UNIT_SHAPE_TERMS = [
|
|
6049
|
+
term9(
|
|
6050
|
+
"square",
|
|
6051
|
+
"Square",
|
|
6052
|
+
"A four-sided unit with equal sides and four right angles."
|
|
6053
|
+
),
|
|
6054
|
+
term9(
|
|
6055
|
+
"rectangle",
|
|
6056
|
+
"Rectangle",
|
|
6057
|
+
"A four-sided unit with four right angles whose length and width may differ."
|
|
6058
|
+
),
|
|
6059
|
+
term9("circle", "Circle", "A round unit bounded by one continuous curve.", {
|
|
6060
|
+
altLabels: ["Round"]
|
|
6061
|
+
}),
|
|
6062
|
+
term9(
|
|
6063
|
+
"oval",
|
|
6064
|
+
"Oval",
|
|
6065
|
+
"An elongated rounded unit bounded by one continuous curve."
|
|
6066
|
+
),
|
|
6067
|
+
term9(
|
|
6068
|
+
"semicircle",
|
|
6069
|
+
"Semicircle",
|
|
6070
|
+
"A half-round unit bounded by one straight edge and one continuous curved edge."
|
|
6071
|
+
),
|
|
6072
|
+
term9("triangle", "Triangle", "A unit bounded by three straight sides."),
|
|
6073
|
+
term9(
|
|
6074
|
+
"rhombus",
|
|
6075
|
+
"Rhombus",
|
|
6076
|
+
"A four-sided unit with equal sides and oblique opposite angles.",
|
|
6077
|
+
{ altLabels: ["Diamond"] }
|
|
6078
|
+
),
|
|
6079
|
+
term9(
|
|
6080
|
+
"parallelogram",
|
|
6081
|
+
"Parallelogram",
|
|
6082
|
+
"A four-sided unit with both pairs of opposite sides parallel, excluding rectangles and rhombi when those more specific outlines are established."
|
|
6083
|
+
),
|
|
6084
|
+
term9("hexagon", "Hexagon", "A unit bounded by six straight sides."),
|
|
6085
|
+
term9("octagon", "Octagon", "A unit bounded by eight straight sides."),
|
|
6086
|
+
term9(
|
|
6087
|
+
"trapezoid",
|
|
6088
|
+
"Trapezoid",
|
|
6089
|
+
"A four-sided unit with exactly one pair of parallel sides."
|
|
6090
|
+
),
|
|
6091
|
+
term9(
|
|
6092
|
+
"picket",
|
|
6093
|
+
"Picket",
|
|
6094
|
+
"An elongated unit whose end forms a distinct pointed or peaked outline rather than a rectangular end.",
|
|
6095
|
+
{
|
|
6096
|
+
provenance: {
|
|
6097
|
+
basis: "referenced",
|
|
6098
|
+
snapshot: REVIEW_DATE2,
|
|
6099
|
+
source: PICKET_SOURCE
|
|
6100
|
+
}
|
|
6101
|
+
}
|
|
6102
|
+
),
|
|
6103
|
+
term9(
|
|
6104
|
+
"chevron",
|
|
6105
|
+
"Chevron unit",
|
|
6106
|
+
"One genuinely V-shaped or boomerang-shaped physical unit; never rectangular units mitred or arranged into a chevron layout."
|
|
6107
|
+
),
|
|
6108
|
+
term9(
|
|
6109
|
+
"arabesque",
|
|
6110
|
+
"Arabesque",
|
|
6111
|
+
"A bilaterally organised ornamental unit with alternating convex and concave lobes."
|
|
6112
|
+
),
|
|
6113
|
+
term9(
|
|
6114
|
+
"scallop",
|
|
6115
|
+
"Scallop",
|
|
6116
|
+
"A fan-like unit with one convex curved edge and a narrower opposing edge.",
|
|
6117
|
+
{ altLabels: ["Fan"] }
|
|
6118
|
+
),
|
|
6119
|
+
term9(
|
|
6120
|
+
"star",
|
|
6121
|
+
"Star",
|
|
6122
|
+
"A unit with multiple outward-pointing arms around a centre."
|
|
6123
|
+
),
|
|
6124
|
+
term9(
|
|
6125
|
+
"cross",
|
|
6126
|
+
"Cross",
|
|
6127
|
+
"A unit whose outline forms intersecting arms around a centre."
|
|
6128
|
+
),
|
|
6129
|
+
term9(
|
|
6130
|
+
"irregular",
|
|
6131
|
+
"Irregular unit shape",
|
|
6132
|
+
"A positively observed non-regular physical outline that fits no governed shape term; it is not unknown, not unobserved and not an other bucket."
|
|
6133
|
+
)
|
|
6134
|
+
];
|
|
6135
|
+
|
|
5684
6136
|
// src/axes/mood-anchors.ts
|
|
5685
6137
|
var MOOD_ANCHORS = {
|
|
5686
6138
|
airy: [
|
|
@@ -5740,10 +6192,10 @@ var MOOD_ANCHORS = {
|
|
|
5740
6192
|
"Interior with light passing through a diffusing layer before it reaches anything, arrises rounded and edges bullnosed, boucle and brushed textile throughout, and shadows fading out with no boundary"
|
|
5741
6193
|
]
|
|
5742
6194
|
};
|
|
5743
|
-
for (const
|
|
5744
|
-
if (MOOD_ANCHORS[
|
|
6195
|
+
for (const term10 of MOOD_TERMS) {
|
|
6196
|
+
if (MOOD_ANCHORS[term10.slug] === void 0) {
|
|
5745
6197
|
throw new Error(
|
|
5746
|
-
`mood.${
|
|
6198
|
+
`mood.${term10.slug} has no retrieval anchor. A mood term with no anchor is present in the vocabulary and invisible to every retrieval consumer. Add one in mood-anchors.ts.`
|
|
5747
6199
|
);
|
|
5748
6200
|
}
|
|
5749
6201
|
}
|
|
@@ -5784,10 +6236,10 @@ var PERIOD_ANCHORS = {
|
|
|
5784
6236
|
"Interior with a bay window carried on its own structure, pattern printed and woven onto wall, floor and textile at once, a moulded plaster cornice with a ceiling rose, and cast-iron grates"
|
|
5785
6237
|
]
|
|
5786
6238
|
};
|
|
5787
|
-
for (const
|
|
5788
|
-
if (PERIOD_ANCHORS[
|
|
6239
|
+
for (const term10 of PERIOD_TERMS) {
|
|
6240
|
+
if (PERIOD_ANCHORS[term10.slug] === void 0) {
|
|
5789
6241
|
throw new Error(
|
|
5790
|
-
`period.${
|
|
6242
|
+
`period.${term10.slug} has no retrieval anchor. A period term with no anchor is present in the vocabulary and invisible to every retrieval consumer. Add one in period-anchors.ts.`
|
|
5791
6243
|
);
|
|
5792
6244
|
}
|
|
5793
6245
|
}
|
|
@@ -5866,10 +6318,10 @@ var PLACE_ANCHORS = {
|
|
|
5866
6318
|
"A built water edge immediately outside - quay coping, bollards and mooring rings, a pontoon or a lock gate - with still fresh water held between banks and the far side visible across it"
|
|
5867
6319
|
]
|
|
5868
6320
|
};
|
|
5869
|
-
for (const
|
|
5870
|
-
if (PLACE_ANCHORS[
|
|
6321
|
+
for (const term10 of [...PLACE_REGION_TERMS, ...PLACE_LANDSCAPE_TERMS]) {
|
|
6322
|
+
if (PLACE_ANCHORS[term10.slug] === void 0) {
|
|
5871
6323
|
throw new Error(
|
|
5872
|
-
`place.${
|
|
6324
|
+
`place.${term10.slug} has no retrieval anchor. A place term with no anchor is present in the vocabulary and invisible to every retrieval consumer. Add one in place-anchors.ts.`
|
|
5873
6325
|
);
|
|
5874
6326
|
}
|
|
5875
6327
|
}
|
|
@@ -6553,10 +7005,10 @@ var SPACE_ANCHORS = {
|
|
|
6553
7005
|
...SLEEPING_ANCHORS,
|
|
6554
7006
|
...WORKING_ANCHORS
|
|
6555
7007
|
};
|
|
6556
|
-
for (const
|
|
6557
|
-
if (SPACE_ANCHORS[
|
|
7008
|
+
for (const term10 of SPACE_TERMS) {
|
|
7009
|
+
if (SPACE_ANCHORS[term10.slug] === void 0) {
|
|
6558
7010
|
throw new Error(
|
|
6559
|
-
`space.${
|
|
7011
|
+
`space.${term10.slug} has no retrieval anchor. A space term with no anchor is present in the vocabulary and invisible to every retrieval consumer. Add one in space-anchors.ts.`
|
|
6560
7012
|
);
|
|
6561
7013
|
}
|
|
6562
7014
|
}
|
|
@@ -6641,16 +7093,33 @@ var STYLE_ANCHORS = {
|
|
|
6641
7093
|
"Wabi-sabi interior with visibly repaired ceramics, uneven hand-applied plaster, weathered timber, asymmetry left uncorrected, patina and age treated as the value rather than tolerated"
|
|
6642
7094
|
]
|
|
6643
7095
|
};
|
|
6644
|
-
for (const
|
|
6645
|
-
if (STYLE_ANCHORS[
|
|
7096
|
+
for (const term10 of STYLE_TERMS) {
|
|
7097
|
+
if (STYLE_ANCHORS[term10.slug] === void 0) {
|
|
6646
7098
|
throw new Error(
|
|
6647
|
-
`style.${
|
|
7099
|
+
`style.${term10.slug} has no retrieval anchor. A style term with no anchor is present in the vocabulary and invisible to every retrieval consumer. Add one in style-anchors.ts.`
|
|
6648
7100
|
);
|
|
6649
7101
|
}
|
|
6650
7102
|
}
|
|
6651
7103
|
|
|
6652
7104
|
// src/axes/index.ts
|
|
6653
|
-
var single = (slug, label, terms) => [
|
|
7105
|
+
var single = (slug, label, terms, governance) => [
|
|
7106
|
+
{
|
|
7107
|
+
...governance === void 0 ? {} : { governance },
|
|
7108
|
+
label,
|
|
7109
|
+
slug,
|
|
7110
|
+
terms
|
|
7111
|
+
}
|
|
7112
|
+
];
|
|
7113
|
+
var TAX45_REVIEW_DATE = "2026-08-31";
|
|
7114
|
+
var TAX45_GEOMETRY_GOVERNANCE = {
|
|
7115
|
+
introducedAt: TAX45_REVIEW_DATE,
|
|
7116
|
+
provenance: {
|
|
7117
|
+
basis: "referenced",
|
|
7118
|
+
snapshot: TAX45_REVIEW_DATE,
|
|
7119
|
+
source: "Linear TAX-45 reviewed implementation contract and independent review comment c457ef92-372b-4db0-8490-0b96ecccc8ac"
|
|
7120
|
+
},
|
|
7121
|
+
reviewedAt: TAX45_REVIEW_DATE
|
|
7122
|
+
};
|
|
6654
7123
|
var AXES = [
|
|
6655
7124
|
{
|
|
6656
7125
|
boundary: "Material family is what a thing is made of. It is not what the thing is for, which is Application, and not what part of a building it becomes, which is Element.",
|
|
@@ -6715,13 +7184,41 @@ var AXES = [
|
|
|
6715
7184
|
status: "authored"
|
|
6716
7185
|
},
|
|
6717
7186
|
{
|
|
6718
|
-
boundary: "Format is the physical unit or delivery
|
|
7187
|
+
boundary: "Format is the physical unit or delivery form supplied. It does not say what the product is made of, the visible outline of one unit, or how units are arranged after installation. A mounted mosaic remains a format even when its discrete units also support a layout assertion.",
|
|
6719
7188
|
facets: single("format", "Format", FORMAT_TERMS),
|
|
6720
7189
|
label: "Format",
|
|
6721
7190
|
question: "In what physical unit is it supplied?",
|
|
6722
7191
|
slug: "format",
|
|
6723
7192
|
status: "authored"
|
|
6724
7193
|
},
|
|
7194
|
+
{
|
|
7195
|
+
boundary: "Unit shape is the visible outline of one physical unit. It is independent of Format, which says how the product is supplied; Installation layout, which relates multiple units; and building-scale Form. A traceable physical boundary is required, and irregular is a positive observed outline rather than an unknown value.",
|
|
7196
|
+
facets: single(
|
|
7197
|
+
"unit-shape",
|
|
7198
|
+
"Unit shape",
|
|
7199
|
+
UNIT_SHAPE_TERMS,
|
|
7200
|
+
TAX45_GEOMETRY_GOVERNANCE
|
|
7201
|
+
),
|
|
7202
|
+
governance: TAX45_GEOMETRY_GOVERNANCE,
|
|
7203
|
+
label: "Unit shape",
|
|
7204
|
+
question: "What is the visible outline of one physical unit?",
|
|
7205
|
+
slug: "unit-shape",
|
|
7206
|
+
status: "authored"
|
|
7207
|
+
},
|
|
7208
|
+
{
|
|
7209
|
+
boundary: "Installation layout is the persistent spatial relationship among discrete physical units or real joints in the finished surface. Printed or faux joints, woven motifs, terrazzo aggregate, monolithic surfaces and diagonal scene orientation do not establish it. Pattern may use the same trade word but asserts a visible motif, not physical arrangement.",
|
|
7210
|
+
facets: single(
|
|
7211
|
+
"installation-layout",
|
|
7212
|
+
"Installation layout",
|
|
7213
|
+
INSTALLATION_LAYOUT_TERMS,
|
|
7214
|
+
TAX45_GEOMETRY_GOVERNANCE
|
|
7215
|
+
),
|
|
7216
|
+
governance: TAX45_GEOMETRY_GOVERNANCE,
|
|
7217
|
+
label: "Installation layout",
|
|
7218
|
+
question: "How are discrete physical units spatially related in the finished surface?",
|
|
7219
|
+
slug: "installation-layout",
|
|
7220
|
+
status: "authored"
|
|
7221
|
+
},
|
|
6725
7222
|
{
|
|
6726
7223
|
boundary: "Construction says how a product or material is made. Through-body is construction; porcelain is material; stone-effect is pattern. None entails either of the others.",
|
|
6727
7224
|
facets: single("construction", "Construction", CONSTRUCTION_TERMS),
|
|
@@ -6873,7 +7370,7 @@ var AXES = [
|
|
|
6873
7370
|
status: "declared"
|
|
6874
7371
|
},
|
|
6875
7372
|
{
|
|
6876
|
-
boundary: "A formal move is a geometric decision: a cantilever, a courtyard, a sawtooth roof. It is not an idiom
|
|
7373
|
+
boundary: "A formal move is a building-scale geometric decision: a cantilever, a courtyard, a sawtooth roof. It is not the visible outline of a supplied unit, a product profile, an idiom or a mood.",
|
|
6877
7374
|
facets: [],
|
|
6878
7375
|
gap: "Identified by the crosswalk-residue test (TAX-14) from architizer's Sculptural value. architizer's own FORMAL_MOVE_EXAMPLES is the obvious starting point. Not yet authored. materialgraph's ms_shape was considered as a seed on 2026-08-27 and REJECTED: its twelve terms (linear, fluted, channelled, blocky, slender, faceted, gridded, organic) describe a product's own profile, while this axis asks what geometric move a building makes. Seeding it here would put two questions on one axis, which is the defect every boundary in ADR 0001 exists to prevent. Part of ms_shape is also texture-adjacent - fluted and channelled are relief, and finish.texture already carries ribbed - so it needs decomposing before it seeds anything, not adopting whole.",
|
|
6879
7376
|
label: "Form",
|
|
@@ -6891,13 +7388,13 @@ var buildIndex = () => {
|
|
|
6891
7388
|
const locations = [];
|
|
6892
7389
|
for (const axis of AXES) {
|
|
6893
7390
|
for (const facet of axis.facets) {
|
|
6894
|
-
for (const
|
|
7391
|
+
for (const term10 of facet.terms) {
|
|
6895
7392
|
const location = {
|
|
6896
7393
|
axisSlug: axis.slug,
|
|
6897
7394
|
facetSlug: facet.slug,
|
|
6898
|
-
qualifiedReference: qualifiedReferenceOf(axis, facet.slug,
|
|
6899
|
-
term:
|
|
6900
|
-
termSlug:
|
|
7395
|
+
qualifiedReference: qualifiedReferenceOf(axis, facet.slug, term10.slug),
|
|
7396
|
+
term: term10,
|
|
7397
|
+
termSlug: term10.slug
|
|
6901
7398
|
};
|
|
6902
7399
|
locations.push(location);
|
|
6903
7400
|
const key = canonicalKey(location.qualifiedReference);
|
|
@@ -6916,8 +7413,9 @@ var resolveReference = (reference) => INDEX.byKey.get(canonicalKey(reference));
|
|
|
6916
7413
|
|
|
6917
7414
|
// src/v1.ts
|
|
6918
7415
|
var TAXONOMY_BASE_URI = "https://taxonomy.materialinstruments.com";
|
|
6919
|
-
var TAXONOMY_SNAPSHOT = "2026-08-
|
|
6920
|
-
var TAXONOMY_VERSION = "1.1.
|
|
7416
|
+
var TAXONOMY_SNAPSHOT = "2026-08-31";
|
|
7417
|
+
var TAXONOMY_VERSION = "1.1.2";
|
|
7418
|
+
var PUBLISHED_V1_BASELINE = "2026-08-30";
|
|
6921
7419
|
var compareText = (left, right) => {
|
|
6922
7420
|
if (left < right) {
|
|
6923
7421
|
return -1;
|
|
@@ -6942,8 +7440,8 @@ var DEFAULT_PROVENANCE = {
|
|
|
6942
7440
|
basis: "authored",
|
|
6943
7441
|
source: "@instruments/taxonomy published corpus"
|
|
6944
7442
|
};
|
|
6945
|
-
var lifecycleFor = (
|
|
6946
|
-
const successor =
|
|
7443
|
+
var lifecycleFor = (term10) => {
|
|
7444
|
+
const successor = term10?.supersededByReference === void 0 ? void 0 : resolveReference(term10.supersededByReference);
|
|
6947
7445
|
const successorAxis = successor === void 0 ? void 0 : AXES.find((axis) => axis.slug === successor.axisSlug);
|
|
6948
7446
|
const supersededBy = successor === void 0 || successorAxis === void 0 ? void 0 : conceptUri(
|
|
6949
7447
|
successor.axisSlug,
|
|
@@ -6952,9 +7450,9 @@ var lifecycleFor = (term8) => {
|
|
|
6952
7450
|
successorAxis.facets.length > 1 || successorAxis.facets[0]?.slug !== successorAxis.slug
|
|
6953
7451
|
);
|
|
6954
7452
|
return {
|
|
6955
|
-
introducedAt:
|
|
6956
|
-
reviewedAt:
|
|
6957
|
-
status:
|
|
7453
|
+
introducedAt: term10?.introducedAt ?? PUBLISHED_V1_BASELINE,
|
|
7454
|
+
reviewedAt: term10?.reviewedAt ?? term10?.introducedAt ?? PUBLISHED_V1_BASELINE,
|
|
7455
|
+
status: term10?.status ?? "active",
|
|
6958
7456
|
...supersededBy === void 0 ? {} : { supersededBy }
|
|
6959
7457
|
};
|
|
6960
7458
|
};
|
|
@@ -6969,11 +7467,11 @@ var inversePredicate = {
|
|
|
6969
7467
|
"suitable-for": "supported-by",
|
|
6970
7468
|
"typically-in": "typically-contains"
|
|
6971
7469
|
};
|
|
6972
|
-
var isColorScopeTerm = (
|
|
6973
|
-
var governanceFor = (explanation,
|
|
7470
|
+
var isColorScopeTerm = (term10) => term10.canonicalAuthority?.authority === "colorscope";
|
|
7471
|
+
var governanceFor = (explanation, term10) => ({
|
|
6974
7472
|
explanation,
|
|
6975
|
-
lifecycle: lifecycleFor(
|
|
6976
|
-
provenance:
|
|
7473
|
+
lifecycle: lifecycleFor(term10),
|
|
7474
|
+
provenance: term10?.provenance ?? DEFAULT_PROVENANCE,
|
|
6977
7475
|
steward: "@instruments/taxonomy"
|
|
6978
7476
|
});
|
|
6979
7477
|
var externalReferences = (mappings) => mappings?.map((mapping) => ({
|
|
@@ -6982,10 +7480,10 @@ var externalReferences = (mappings) => mappings?.map((mapping) => ({
|
|
|
6982
7480
|
label: mapping.label,
|
|
6983
7481
|
match: mapping.match
|
|
6984
7482
|
}));
|
|
6985
|
-
var governedEdge = (from, predicate, to,
|
|
7483
|
+
var governedEdge = (from, predicate, to, term10, assertion = "asserted", role) => {
|
|
6986
7484
|
const governance = governanceFor(
|
|
6987
7485
|
`Taxonomy governs the asserted ${predicate} relationship and its navigable inverse.`,
|
|
6988
|
-
|
|
7486
|
+
term10
|
|
6989
7487
|
);
|
|
6990
7488
|
return {
|
|
6991
7489
|
assertion,
|
|
@@ -7003,7 +7501,8 @@ var addTermNodes = (assembly, axis, axisUri) => {
|
|
|
7003
7501
|
for (const [facetOrder, facet] of axis.facets.entries()) {
|
|
7004
7502
|
const facetUri = `${TAXONOMY_BASE_URI}/id/facet/${canonicalSegment(axis.slug)}/${canonicalSegment(facet.slug)}`;
|
|
7005
7503
|
const facetGovernance = governanceFor(
|
|
7006
|
-
`Taxonomy governs the ${facet.label} facet on the ${axis.label} axis
|
|
7504
|
+
`Taxonomy governs the ${facet.label} facet on the ${axis.label} axis.`,
|
|
7505
|
+
facet.governance
|
|
7007
7506
|
);
|
|
7008
7507
|
assembly.nodes.push({
|
|
7009
7508
|
axis: axisUri,
|
|
@@ -7017,50 +7516,50 @@ var addTermNodes = (assembly, axis, axisUri) => {
|
|
|
7017
7516
|
uri: facetUri
|
|
7018
7517
|
});
|
|
7019
7518
|
assembly.edges.push(
|
|
7020
|
-
governedEdge(facetUri, "belongs-to-axis", axisUri),
|
|
7021
|
-
governedEdge(axisUri, "has-facet", facetUri,
|
|
7519
|
+
governedEdge(facetUri, "belongs-to-axis", axisUri, facet.governance),
|
|
7520
|
+
governedEdge(axisUri, "has-facet", facetUri, facet.governance, "inverse")
|
|
7022
7521
|
);
|
|
7023
|
-
for (const [termOrder,
|
|
7024
|
-
if (isColorScopeTerm(
|
|
7522
|
+
for (const [termOrder, term10] of facet.terms.entries()) {
|
|
7523
|
+
if (isColorScopeTerm(term10)) {
|
|
7025
7524
|
continue;
|
|
7026
7525
|
}
|
|
7027
|
-
const uri = conceptUri(axis.slug, facet.slug,
|
|
7028
|
-
const qualified = faceted ? `${axis.slug}.${facet.slug}.${
|
|
7526
|
+
const uri = conceptUri(axis.slug, facet.slug, term10.slug, faceted);
|
|
7527
|
+
const qualified = faceted ? `${axis.slug}.${facet.slug}.${term10.slug}` : `${axis.slug}.${term10.slug}`;
|
|
7029
7528
|
assembly.conceptByQualifiedSlug.set(qualified, uri);
|
|
7030
|
-
assembly.conceptByAxisAndTerm.set(`${axis.slug}.${
|
|
7529
|
+
assembly.conceptByAxisAndTerm.set(`${axis.slug}.${term10.slug}`, uri);
|
|
7031
7530
|
const governance = governanceFor(
|
|
7032
|
-
`Taxonomy governs the canonical identity and meaning of ${
|
|
7033
|
-
|
|
7531
|
+
`Taxonomy governs the canonical identity and meaning of ${term10.label}.`,
|
|
7532
|
+
term10
|
|
7034
7533
|
);
|
|
7035
7534
|
assembly.nodes.push({
|
|
7036
|
-
...
|
|
7535
|
+
...term10.altLabels === void 0 ? {} : { altLabels: term10.altLabels },
|
|
7037
7536
|
axis: axisUri,
|
|
7038
|
-
...
|
|
7039
|
-
...
|
|
7537
|
+
...term10.definition === void 0 ? {} : { definition: term10.definition },
|
|
7538
|
+
...term10.external === void 0 ? {} : { externalReferences: externalReferences(term10.external) },
|
|
7040
7539
|
facet: facetUri,
|
|
7041
7540
|
governance,
|
|
7042
7541
|
governedBy: "taxonomy",
|
|
7043
7542
|
kind: "concept",
|
|
7044
|
-
label:
|
|
7543
|
+
label: term10.label,
|
|
7045
7544
|
lifecycle: governance.lifecycle,
|
|
7046
|
-
...
|
|
7545
|
+
...term10.note === void 0 ? {} : { note: term10.note },
|
|
7047
7546
|
order: termOrder,
|
|
7048
7547
|
provenance: governance.provenance,
|
|
7049
|
-
...
|
|
7050
|
-
...
|
|
7051
|
-
...
|
|
7052
|
-
slug:
|
|
7053
|
-
...
|
|
7054
|
-
...
|
|
7548
|
+
...term10.rank === void 0 ? {} : { rank: term10.rank },
|
|
7549
|
+
...term10.searchedWithout === void 0 ? {} : { searchedWithout: term10.searchedWithout },
|
|
7550
|
+
...term10.seenAs === void 0 ? {} : { seenAs: term10.seenAs },
|
|
7551
|
+
slug: term10.slug,
|
|
7552
|
+
...term10.span === void 0 ? {} : { span: term10.span },
|
|
7553
|
+
...term10.styleKind === void 0 ? {} : { styleKind: term10.styleKind },
|
|
7055
7554
|
uri,
|
|
7056
|
-
...
|
|
7057
|
-
...
|
|
7555
|
+
...term10.usage === void 0 ? {} : { usage: term10.usage },
|
|
7556
|
+
...term10.usageWithheld === void 0 ? {} : { usageWithheld: term10.usageWithheld }
|
|
7058
7557
|
});
|
|
7059
7558
|
assembly.edges.push(
|
|
7060
|
-
governedEdge(uri, "belongs-to-axis", axisUri,
|
|
7061
|
-
governedEdge(axisUri, "has-concept", uri,
|
|
7062
|
-
governedEdge(uri, "belongs-to-facet", facetUri,
|
|
7063
|
-
governedEdge(facetUri, "has-concept", uri,
|
|
7559
|
+
governedEdge(uri, "belongs-to-axis", axisUri, term10),
|
|
7560
|
+
governedEdge(axisUri, "has-concept", uri, term10, "inverse"),
|
|
7561
|
+
governedEdge(uri, "belongs-to-facet", facetUri, term10),
|
|
7562
|
+
governedEdge(facetUri, "has-concept", uri, term10, "inverse")
|
|
7064
7563
|
);
|
|
7065
7564
|
}
|
|
7066
7565
|
}
|
|
@@ -7075,7 +7574,8 @@ var assembleNodes = () => {
|
|
|
7075
7574
|
for (const [axisOrder, axis] of AXES.entries()) {
|
|
7076
7575
|
const axisUri = `${TAXONOMY_BASE_URI}/id/axis/${canonicalSegment(axis.slug)}`;
|
|
7077
7576
|
const governance = governanceFor(
|
|
7078
|
-
`Taxonomy governs the ${axis.label} axis and its organizing question
|
|
7577
|
+
`Taxonomy governs the ${axis.label} axis and its organizing question.`,
|
|
7578
|
+
axis.governance
|
|
7079
7579
|
);
|
|
7080
7580
|
assembly.nodes.push({
|
|
7081
7581
|
boundary: axis.boundary,
|
|
@@ -7172,9 +7672,9 @@ var COLOR_SCOPE_REFERENCE_KINDS = [
|
|
|
7172
7672
|
"palette-mood",
|
|
7173
7673
|
"temperature-level"
|
|
7174
7674
|
];
|
|
7175
|
-
var lexicalGovernance = (explanation, provenance) => ({
|
|
7675
|
+
var lexicalGovernance = (explanation, provenance, lifecycle = lifecycleFor()) => ({
|
|
7176
7676
|
explanation,
|
|
7177
|
-
lifecycle
|
|
7677
|
+
lifecycle,
|
|
7178
7678
|
provenance,
|
|
7179
7679
|
steward: "@instruments/taxonomy"
|
|
7180
7680
|
});
|
|
@@ -7199,7 +7699,7 @@ var crossoverAmbiguity = (phrase, taxonomyUri, colorScopeIdentifier, explanation
|
|
|
7199
7699
|
"Taxonomy preserves the evidenced readings without assigning a default, role, contextual preference, or consumer route.",
|
|
7200
7700
|
{
|
|
7201
7701
|
basis: "evidenced",
|
|
7202
|
-
snapshot:
|
|
7702
|
+
snapshot: PUBLISHED_V1_BASELINE,
|
|
7203
7703
|
source
|
|
7204
7704
|
}
|
|
7205
7705
|
),
|
|
@@ -7220,7 +7720,7 @@ var crossoverEquivalent = (phrase, taxonomyUri, explanation, source) => ({
|
|
|
7220
7720
|
"Taxonomy records the evidenced material reading without assigning a consumer route.",
|
|
7221
7721
|
{
|
|
7222
7722
|
basis: "evidenced",
|
|
7223
|
-
snapshot:
|
|
7723
|
+
snapshot: PUBLISHED_V1_BASELINE,
|
|
7224
7724
|
source
|
|
7225
7725
|
}
|
|
7226
7726
|
),
|
|
@@ -7228,17 +7728,18 @@ var crossoverEquivalent = (phrase, taxonomyUri, explanation, source) => ({
|
|
|
7228
7728
|
phrase,
|
|
7229
7729
|
target: { authority: "taxonomy", uri: taxonomyUri }
|
|
7230
7730
|
});
|
|
7231
|
-
var crossoverTaxonomyAmbiguity = (phrase, readings, explanation, source) => {
|
|
7731
|
+
var crossoverTaxonomyAmbiguity = (phrase, readings, explanation, source, snapshot = PUBLISHED_V1_BASELINE, lifecycle = lifecycleFor(), basis = "evidenced") => {
|
|
7232
7732
|
const [first, second] = readings;
|
|
7233
7733
|
return {
|
|
7234
7734
|
explanation,
|
|
7235
7735
|
governance: lexicalGovernance(
|
|
7236
|
-
"Taxonomy preserves the
|
|
7736
|
+
"Taxonomy preserves the governed readings without assigning a default, role, contextual preference, or consumer route.",
|
|
7237
7737
|
{
|
|
7238
|
-
basis
|
|
7239
|
-
snapshot
|
|
7738
|
+
basis,
|
|
7739
|
+
snapshot,
|
|
7240
7740
|
source
|
|
7241
|
-
}
|
|
7741
|
+
},
|
|
7742
|
+
lifecycle
|
|
7242
7743
|
),
|
|
7243
7744
|
outcome: "ambiguous",
|
|
7244
7745
|
phrase,
|
|
@@ -7249,13 +7750,60 @@ var crossoverTaxonomyAmbiguity = (phrase, readings, explanation, source) => {
|
|
|
7249
7750
|
};
|
|
7250
7751
|
};
|
|
7251
7752
|
var AUTHORED_LEXICAL_ENTRIES = [
|
|
7753
|
+
crossoverTaxonomyAmbiguity(
|
|
7754
|
+
"herringbone or chevron",
|
|
7755
|
+
[
|
|
7756
|
+
`${TAXONOMY_BASE_URI}/id/pattern/type/herringbone`,
|
|
7757
|
+
`${TAXONOMY_BASE_URI}/id/pattern/type/chevron`
|
|
7758
|
+
],
|
|
7759
|
+
"The former combined pattern label names two distinct motif readings. It does not identify an installation layout or physical unit shape without separate evidence.",
|
|
7760
|
+
"Linear TAX-45 reviewed implementation contract and independent review comment c457ef92-372b-4db0-8490-0b96ecccc8ac",
|
|
7761
|
+
TAXONOMY_SNAPSHOT,
|
|
7762
|
+
{
|
|
7763
|
+
introducedAt: TAXONOMY_SNAPSHOT,
|
|
7764
|
+
reviewedAt: TAXONOMY_SNAPSHOT,
|
|
7765
|
+
status: "active"
|
|
7766
|
+
},
|
|
7767
|
+
"referenced"
|
|
7768
|
+
),
|
|
7769
|
+
crossoverTaxonomyAmbiguity(
|
|
7770
|
+
"herringbone / chevron",
|
|
7771
|
+
[
|
|
7772
|
+
`${TAXONOMY_BASE_URI}/id/pattern/type/herringbone`,
|
|
7773
|
+
`${TAXONOMY_BASE_URI}/id/pattern/type/chevron`
|
|
7774
|
+
],
|
|
7775
|
+
"The DesignShop compound source phrase did not record which of the two distinct motif readings was intended.",
|
|
7776
|
+
"DesignShop frozen estate pattern vocabulary, reconciled by Linear TAX-45 on 2026-08-31",
|
|
7777
|
+
TAXONOMY_SNAPSHOT,
|
|
7778
|
+
{
|
|
7779
|
+
introducedAt: TAXONOMY_SNAPSHOT,
|
|
7780
|
+
reviewedAt: TAXONOMY_SNAPSHOT,
|
|
7781
|
+
status: "active"
|
|
7782
|
+
},
|
|
7783
|
+
"referenced"
|
|
7784
|
+
),
|
|
7785
|
+
crossoverTaxonomyAmbiguity(
|
|
7786
|
+
"mosaic",
|
|
7787
|
+
[
|
|
7788
|
+
`${TAXONOMY_BASE_URI}/id/product-category/mosaic-tile`,
|
|
7789
|
+
`${TAXONOMY_BASE_URI}/id/format/mosaic`
|
|
7790
|
+
],
|
|
7791
|
+
"Mosaic can name a purchasable mosaic-tile product or the small-piece supply format; it is neither inherently a pattern nor a substance. Consumers must union any exact ColorScope named-paint reading with these domain readings rather than let an exact Taxonomy phrase shadow the external identity.",
|
|
7792
|
+
`${searchCorpusEvidence("mosaic")}; Uniclass Pr_35_93_96_53 Mosaic tiles; consumer authority-union boundary reviewed 2026-08-31`,
|
|
7793
|
+
MATERIALGRAPH_SEARCH_CORPUS_SNAPSHOT,
|
|
7794
|
+
{
|
|
7795
|
+
introducedAt: TAXONOMY_SNAPSHOT,
|
|
7796
|
+
reviewedAt: TAXONOMY_SNAPSHOT,
|
|
7797
|
+
status: "active"
|
|
7798
|
+
}
|
|
7799
|
+
),
|
|
7252
7800
|
{
|
|
7253
7801
|
explanation: "Blue is a ColorScope colour-family reading; Taxonomy references that authority rather than minting a rival colour identity.",
|
|
7254
7802
|
governance: lexicalGovernance(
|
|
7255
7803
|
"The ColorScope family is the single governed reading of the unqualified colour word.",
|
|
7256
7804
|
{
|
|
7257
7805
|
basis: "vendored",
|
|
7258
|
-
snapshot:
|
|
7806
|
+
snapshot: PUBLISHED_V1_BASELINE,
|
|
7259
7807
|
source: "@instruments/colorscope COLOR_FAMILIES"
|
|
7260
7808
|
}
|
|
7261
7809
|
),
|
|
@@ -7553,7 +8101,7 @@ var AUTHORED_LEXICAL_ENTRIES = [
|
|
|
7553
8101
|
"The two readings are deliberately separate and context may select only the preference declared here.",
|
|
7554
8102
|
{
|
|
7555
8103
|
basis: "evidenced",
|
|
7556
|
-
snapshot:
|
|
8104
|
+
snapshot: PUBLISHED_V1_BASELINE,
|
|
7557
8105
|
source: crossoverSource("walnut")
|
|
7558
8106
|
}
|
|
7559
8107
|
),
|
|
@@ -7591,10 +8139,37 @@ var targetForLocation = (location) => {
|
|
|
7591
8139
|
)
|
|
7592
8140
|
};
|
|
7593
8141
|
};
|
|
7594
|
-
var lexicalPhrases = (
|
|
8142
|
+
var lexicalPhrases = (term10) => [term10.slug, term10.label, ...term10.altLabels ?? [], ...term10.seenAs ?? []].map((phrase) => phrase.trim().toLowerCase()).filter(
|
|
7595
8143
|
(phrase, index, phrases) => phrase.length > 0 && phrases.indexOf(phrase) === index
|
|
7596
8144
|
);
|
|
7597
8145
|
var targetKey = (target) => target.authority === "taxonomy" ? `taxonomy:${target.uri}` : `colorscope:${target.referenceKind}:${target.identifier}`;
|
|
8146
|
+
var inferredLifecycle = (readings) => {
|
|
8147
|
+
const terms = readings.flatMap((reading) => reading.terms);
|
|
8148
|
+
const lifecycles = terms.map((term10) => lifecycleFor(term10));
|
|
8149
|
+
const [introducedAt] = terms.map((term10) => term10.introducedAt ?? PUBLISHED_V1_BASELINE).toSorted(compareText);
|
|
8150
|
+
const reviewedAt = terms.map(
|
|
8151
|
+
(term10) => term10.reviewedAt ?? term10.introducedAt ?? PUBLISHED_V1_BASELINE
|
|
8152
|
+
).toSorted(compareText).at(-1);
|
|
8153
|
+
if (introducedAt === void 0 || reviewedAt === void 0) {
|
|
8154
|
+
throw new Error("Inferred lexical reading has no source term lifecycle.");
|
|
8155
|
+
}
|
|
8156
|
+
const deprecated = lifecycles.every(
|
|
8157
|
+
(lifecycle) => lifecycle.status === "deprecated"
|
|
8158
|
+
);
|
|
8159
|
+
const successors = [
|
|
8160
|
+
...new Set(
|
|
8161
|
+
lifecycles.flatMap(
|
|
8162
|
+
(lifecycle) => lifecycle.supersededBy === void 0 ? [] : [lifecycle.supersededBy]
|
|
8163
|
+
)
|
|
8164
|
+
)
|
|
8165
|
+
];
|
|
8166
|
+
return {
|
|
8167
|
+
introducedAt,
|
|
8168
|
+
reviewedAt,
|
|
8169
|
+
status: deprecated ? "deprecated" : "active",
|
|
8170
|
+
...deprecated && successors.length === 1 ? { supersededBy: successors[0] } : {}
|
|
8171
|
+
};
|
|
8172
|
+
};
|
|
7598
8173
|
var inferredLexicalEntries = () => {
|
|
7599
8174
|
const authored = new Set(
|
|
7600
8175
|
AUTHORED_LEXICAL_ENTRIES.map((entry) => entry.phrase)
|
|
@@ -7603,18 +8178,24 @@ var inferredLexicalEntries = () => {
|
|
|
7603
8178
|
for (const location of AUTHORING_LOCATIONS) {
|
|
7604
8179
|
const target = targetForLocation(location);
|
|
7605
8180
|
for (const phrase of lexicalPhrases(location.term)) {
|
|
7606
|
-
const
|
|
7607
|
-
|
|
7608
|
-
|
|
8181
|
+
const readings = targetsByPhrase.get(phrase) ?? [];
|
|
8182
|
+
const existing = readings.find(
|
|
8183
|
+
(candidate) => targetKey(candidate.target) === targetKey(target)
|
|
8184
|
+
);
|
|
8185
|
+
if (existing === void 0) {
|
|
8186
|
+
readings.push({ target, terms: [location.term] });
|
|
8187
|
+
} else {
|
|
8188
|
+
existing.terms.push(location.term);
|
|
7609
8189
|
}
|
|
7610
|
-
targetsByPhrase.set(phrase,
|
|
8190
|
+
targetsByPhrase.set(phrase, readings);
|
|
7611
8191
|
}
|
|
7612
8192
|
}
|
|
7613
|
-
return [...targetsByPhrase].filter(([phrase]) => !authored.has(phrase)).map(([phrase,
|
|
7614
|
-
const [first, second, ...rest] =
|
|
8193
|
+
return [...targetsByPhrase].filter(([phrase]) => !authored.has(phrase)).map(([phrase, readings]) => {
|
|
8194
|
+
const [first, second, ...rest] = readings;
|
|
7615
8195
|
if (first === void 0) {
|
|
7616
8196
|
throw new Error(`Lexical phrase "${phrase}" has no reading.`);
|
|
7617
8197
|
}
|
|
8198
|
+
const lifecycle = inferredLifecycle(readings);
|
|
7618
8199
|
if (second === void 0) {
|
|
7619
8200
|
return {
|
|
7620
8201
|
explanation: `The published spelling \u201C${phrase}\u201D has one governed reading.`,
|
|
@@ -7622,13 +8203,14 @@ var inferredLexicalEntries = () => {
|
|
|
7622
8203
|
"The reading is derived from a canonical label, slug, alternate label, or observed source spelling.",
|
|
7623
8204
|
{
|
|
7624
8205
|
basis: "evidenced",
|
|
7625
|
-
snapshot:
|
|
8206
|
+
snapshot: lifecycle.reviewedAt,
|
|
7626
8207
|
source: "Taxonomy V1 authored term dictionaries"
|
|
7627
|
-
}
|
|
8208
|
+
},
|
|
8209
|
+
lifecycle
|
|
7628
8210
|
),
|
|
7629
8211
|
outcome: "equivalent",
|
|
7630
8212
|
phrase,
|
|
7631
|
-
target: first
|
|
8213
|
+
target: first.target
|
|
7632
8214
|
};
|
|
7633
8215
|
}
|
|
7634
8216
|
return {
|
|
@@ -7637,13 +8219,18 @@ var inferredLexicalEntries = () => {
|
|
|
7637
8219
|
"No context-independent primary reading has been governed.",
|
|
7638
8220
|
{
|
|
7639
8221
|
basis: "evidenced",
|
|
7640
|
-
snapshot:
|
|
8222
|
+
snapshot: lifecycle.reviewedAt,
|
|
7641
8223
|
source: "Colliding Taxonomy V1 authored term spellings"
|
|
7642
|
-
}
|
|
8224
|
+
},
|
|
8225
|
+
lifecycle
|
|
7643
8226
|
),
|
|
7644
8227
|
outcome: "ambiguous",
|
|
7645
8228
|
phrase,
|
|
7646
|
-
readings: [
|
|
8229
|
+
readings: [
|
|
8230
|
+
first.target,
|
|
8231
|
+
second.target,
|
|
8232
|
+
...rest.map(({ target }) => target)
|
|
8233
|
+
]
|
|
7647
8234
|
};
|
|
7648
8235
|
});
|
|
7649
8236
|
};
|