@instruments/taxonomy 1.1.1 → 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 +2 -2
- package/dist/index.js +482 -132
- package/package.json +11 -10
package/dist/index.d.ts
CHANGED
|
@@ -202,7 +202,7 @@ type RelationPredicate =
|
|
|
202
202
|
|
|
203
203
|
declare const TAXONOMY_BASE_URI: "https://taxonomy.materialinstruments.com";
|
|
204
204
|
declare const TAXONOMY_SNAPSHOT: "2026-08-31";
|
|
205
|
-
declare const TAXONOMY_VERSION: "1.1.
|
|
205
|
+
declare const TAXONOMY_VERSION: "1.1.2";
|
|
206
206
|
type CanonicalConceptUri = `${typeof TAXONOMY_BASE_URI}/id/${string}`;
|
|
207
207
|
type LifecycleStatus = "active" | "deprecated";
|
|
208
208
|
interface Lifecycle {
|
|
@@ -336,7 +336,7 @@ declare const TAXONOMY_CORPUS_METADATA: {
|
|
|
336
336
|
readonly nodeCount: number;
|
|
337
337
|
readonly revision: string;
|
|
338
338
|
readonly snapshot: "2026-08-31";
|
|
339
|
-
readonly version: "1.1.
|
|
339
|
+
readonly version: "1.1.2";
|
|
340
340
|
};
|
|
341
341
|
|
|
342
342
|
export { type AxisNode, COLOR_SCOPE_REFERENCE_KINDS, type CanonicalConceptUri, type ColorScopeReferenceKind, type ColorScopeTarget, type ConceptNode, type ExternalReference, type FacetNode, type Governance, type GraphPredicate, KNOWLEDGE_GRAPH, type KnowledgeGraph, type KnowledgeGraphEdge, type KnowledgeGraphNode, LEXICAL_ENTRIES, type LexicalContext, type LexicalEntry, type LexicalTarget, type Lifecycle, type LifecycleStatus, type PeriodSpan, type SearchedWithout, type StyleKind, TAXONOMY_BASE_URI, TAXONOMY_CORPUS_METADATA, TAXONOMY_CORPUS_REVISION, TAXONOMY_SNAPSHOT, TAXONOMY_VERSION, type TaxonomyTarget, type TermProvenance, type TermUsage, type UsageWithheld };
|
package/dist/index.js
CHANGED
|
@@ -1330,13 +1330,16 @@ var FORMAT_TERMS = [
|
|
|
1330
1330
|
term3(
|
|
1331
1331
|
"penny-round",
|
|
1332
1332
|
"Penny round",
|
|
1333
|
-
"A small
|
|
1333
|
+
"A legacy fused identity for a small circular tile supplied for installation as a field.",
|
|
1334
1334
|
{
|
|
1335
1335
|
altLabels: ["penny tile"],
|
|
1336
1336
|
broaderSlug: "tile",
|
|
1337
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.",
|
|
1338
1339
|
provenance: searchCorpusProvenance("penny-tile"),
|
|
1339
|
-
reviewedAt: SEARCH_REVIEW_DATE
|
|
1340
|
+
reviewedAt: SEARCH_REVIEW_DATE,
|
|
1341
|
+
status: "deprecated",
|
|
1342
|
+
supersededByReference: "format.tile"
|
|
1340
1343
|
}
|
|
1341
1344
|
),
|
|
1342
1345
|
term3(
|
|
@@ -1356,13 +1359,109 @@ var FORMAT_TERMS = [
|
|
|
1356
1359
|
)
|
|
1357
1360
|
];
|
|
1358
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
|
+
|
|
1359
1458
|
// src/axes/material.ts
|
|
1360
1459
|
var SOURCE3 = "DesignShop frozen estate and Material Instruments material vocabularies";
|
|
1361
1460
|
var SNAPSHOT3 = "2026-08-25";
|
|
1362
1461
|
var CROSSOVER_SNAPSHOT2 = "2026-08-30";
|
|
1363
1462
|
var NATURAL_FIBRE_SLUG = "natural-fibre";
|
|
1364
1463
|
var STONE_SLUG = "stone";
|
|
1365
|
-
var
|
|
1464
|
+
var term5 = (slug, label, definition) => ({
|
|
1366
1465
|
definition,
|
|
1367
1466
|
label,
|
|
1368
1467
|
provenance: { basis: "evidenced", snapshot: SNAPSHOT3, source: SOURCE3 },
|
|
@@ -1413,17 +1512,17 @@ var MATERIAL_TERMS = [
|
|
|
1413
1512
|
"A copper-alloy family historically associated with copper and tin; unmodified bronze does not identify a specific modern composition.",
|
|
1414
1513
|
CROSSOVER_DEFINITION_SOURCES.bronze
|
|
1415
1514
|
),
|
|
1416
|
-
|
|
1515
|
+
term5(
|
|
1417
1516
|
"ceramic",
|
|
1418
1517
|
"Ceramic",
|
|
1419
1518
|
"A fired inorganic non-metallic body other than porcelain."
|
|
1420
1519
|
),
|
|
1421
|
-
|
|
1520
|
+
term5(
|
|
1422
1521
|
"porcelain",
|
|
1423
1522
|
"Porcelain",
|
|
1424
1523
|
"A dense, low-porosity fired ceramic body meeting porcelain classification."
|
|
1425
1524
|
),
|
|
1426
|
-
|
|
1525
|
+
term5(
|
|
1427
1526
|
"composite",
|
|
1428
1527
|
"Composite",
|
|
1429
1528
|
"An engineered material whose performance comes from two or more bound constituents."
|
|
@@ -1434,12 +1533,12 @@ var MATERIAL_TERMS = [
|
|
|
1434
1533
|
"A metal with a designated minimum copper content of 99.3 percent in the UNS wrought-copper designation system.",
|
|
1435
1534
|
CROSSOVER_DEFINITION_SOURCES.copper
|
|
1436
1535
|
),
|
|
1437
|
-
|
|
1536
|
+
term5(
|
|
1438
1537
|
"laminate",
|
|
1439
1538
|
"Laminate",
|
|
1440
1539
|
"A layered sheet material consolidated around a decorative or protective face."
|
|
1441
1540
|
),
|
|
1442
|
-
|
|
1541
|
+
term5(
|
|
1443
1542
|
NATURAL_FIBRE_SLUG,
|
|
1444
1543
|
"Natural fibre",
|
|
1445
1544
|
"A material whose visible fibre is plant- or animal-derived."
|
|
@@ -1450,12 +1549,12 @@ var MATERIAL_TERMS = [
|
|
|
1450
1549
|
"The metallic chemical element Ni used in solid metals and alloys; the bare term does not establish alloy, grade, or bulk composition.",
|
|
1451
1550
|
NICKEL_MATERIAL_SOURCE
|
|
1452
1551
|
),
|
|
1453
|
-
|
|
1552
|
+
term5(
|
|
1454
1553
|
"paper",
|
|
1455
1554
|
"Paper",
|
|
1456
1555
|
"A sheet material formed primarily from cellulose fibres."
|
|
1457
1556
|
),
|
|
1458
|
-
|
|
1557
|
+
term5(
|
|
1459
1558
|
"solid-surface",
|
|
1460
1559
|
"Solid surface",
|
|
1461
1560
|
"A homogeneous or near-homogeneous cast sheet made from resin and mineral filler."
|
|
@@ -1711,7 +1810,7 @@ var MATERIAL_TERMS = [
|
|
|
1711
1810
|
"A woven fabric conventionally made with indigo-dyed warp and undyed filling yarns in a twill construction; blends and non-blue denim exist.",
|
|
1712
1811
|
CROSSOVER_DEFINITION_SOURCES.denim
|
|
1713
1812
|
),
|
|
1714
|
-
|
|
1813
|
+
term5(
|
|
1715
1814
|
"vinyl",
|
|
1716
1815
|
"Vinyl",
|
|
1717
1816
|
"A resilient material system whose principal polymer is polyvinyl chloride."
|
|
@@ -1924,9 +2023,9 @@ var PALETTE_HUE_TERMS = [
|
|
|
1924
2023
|
label: "Pink",
|
|
1925
2024
|
slug: "pink"
|
|
1926
2025
|
}
|
|
1927
|
-
].map((
|
|
1928
|
-
...
|
|
1929
|
-
canonicalAuthority: colorScopeAuthority(
|
|
2026
|
+
].map((term10) => ({
|
|
2027
|
+
...term10,
|
|
2028
|
+
canonicalAuthority: colorScopeAuthority(term10.slug, "color-family"),
|
|
1930
2029
|
provenance: {
|
|
1931
2030
|
basis: "vendored",
|
|
1932
2031
|
snapshot: SNAPSHOT5,
|
|
@@ -1949,9 +2048,9 @@ var PALETTE_TEMPERATURE_TERMS = [
|
|
|
1949
2048
|
label: "Neutral",
|
|
1950
2049
|
slug: "neutral"
|
|
1951
2050
|
}
|
|
1952
|
-
].map((
|
|
1953
|
-
...
|
|
1954
|
-
canonicalAuthority: colorScopeAuthority(
|
|
2051
|
+
].map((term10) => ({
|
|
2052
|
+
...term10,
|
|
2053
|
+
canonicalAuthority: colorScopeAuthority(term10.slug, "temperature-level"),
|
|
1955
2054
|
provenance: {
|
|
1956
2055
|
basis: "vendored",
|
|
1957
2056
|
snapshot: SNAPSHOT5,
|
|
@@ -2047,11 +2146,15 @@ var MG_SCALE = "materialgraph ms_pattern_scale";
|
|
|
2047
2146
|
var MG_DENSITY = "materialgraph ms_pattern_density";
|
|
2048
2147
|
var MG_REGULARITY = "materialgraph ms_pattern_regularity";
|
|
2049
2148
|
var MG_DIRECTIONALITY = "materialgraph ms_directionality";
|
|
2050
|
-
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 = {}) => ({
|
|
2051
2153
|
definition,
|
|
2052
2154
|
label,
|
|
2053
2155
|
provenance: { basis: "evidenced", snapshot: SNAPSHOT6, source: SOURCE4 },
|
|
2054
|
-
slug
|
|
2156
|
+
slug,
|
|
2157
|
+
...extra
|
|
2055
2158
|
});
|
|
2056
2159
|
var vendored2 = (source, slug, label, definition, rank) => ({
|
|
2057
2160
|
definition,
|
|
@@ -2061,118 +2164,169 @@ var vendored2 = (source, slug, label, definition, rank) => ({
|
|
|
2061
2164
|
...rank === void 0 ? {} : { rank }
|
|
2062
2165
|
});
|
|
2063
2166
|
var PATTERN_TYPE_TERMS = [
|
|
2064
|
-
|
|
2167
|
+
term6(
|
|
2065
2168
|
"plain",
|
|
2066
2169
|
"Plain",
|
|
2067
2170
|
"No deliberate repeated motif or representational surface image."
|
|
2068
2171
|
),
|
|
2069
|
-
|
|
2172
|
+
term6(
|
|
2070
2173
|
"abstract-organic",
|
|
2071
2174
|
"Abstract or organic",
|
|
2072
2175
|
"Non-representational marks organised with irregular or biomorphic movement."
|
|
2073
2176
|
),
|
|
2074
|
-
|
|
2177
|
+
term6(
|
|
2075
2178
|
"animal-print",
|
|
2076
2179
|
"Animal print",
|
|
2077
2180
|
"A motif derived from animal markings or skins."
|
|
2078
2181
|
),
|
|
2079
|
-
|
|
2182
|
+
term6(
|
|
2080
2183
|
"botanical",
|
|
2081
2184
|
"Botanical",
|
|
2082
2185
|
"A representational motif of plants, flowers, foliage or fruit."
|
|
2083
2186
|
),
|
|
2084
|
-
|
|
2187
|
+
term6(
|
|
2085
2188
|
"damask",
|
|
2086
2189
|
"Damask",
|
|
2087
2190
|
"A mirrored or scrolling ornamental repeat derived from woven damask and related brocades."
|
|
2088
2191
|
),
|
|
2089
|
-
|
|
2192
|
+
term6(
|
|
2090
2193
|
"concrete-effect",
|
|
2091
2194
|
"Concrete effect",
|
|
2092
2195
|
"A printed or formed surface intended to read as concrete rather than its substrate."
|
|
2093
2196
|
),
|
|
2094
|
-
|
|
2197
|
+
term6(
|
|
2095
2198
|
"cultural-heritage",
|
|
2096
2199
|
"Cultural heritage",
|
|
2097
2200
|
"A motif explicitly drawn from a named cultural or craft tradition."
|
|
2098
2201
|
),
|
|
2099
|
-
|
|
2202
|
+
term6(
|
|
2100
2203
|
"geometric",
|
|
2101
2204
|
"Geometric",
|
|
2102
2205
|
"A repeat organised from geometric shapes, grids or measured linework."
|
|
2103
2206
|
),
|
|
2104
|
-
|
|
2207
|
+
term6(
|
|
2105
2208
|
"herringbone-chevron",
|
|
2106
2209
|
"Herringbone or chevron",
|
|
2107
|
-
"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
|
+
}
|
|
2108
2218
|
),
|
|
2109
|
-
|
|
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(
|
|
2110
2264
|
"leather-effect",
|
|
2111
2265
|
"Leather effect",
|
|
2112
2266
|
"A surface intended to read as leather rather than its substrate."
|
|
2113
2267
|
),
|
|
2114
|
-
|
|
2268
|
+
term6(
|
|
2115
2269
|
"marbleised",
|
|
2116
2270
|
"Marbleised",
|
|
2117
2271
|
"Veining or clouding arranged to evoke marble."
|
|
2118
2272
|
),
|
|
2119
|
-
|
|
2273
|
+
term6(
|
|
2120
2274
|
"metal-effect",
|
|
2121
2275
|
"Metal effect",
|
|
2122
2276
|
"A surface intended to read as metal rather than its substrate."
|
|
2123
2277
|
),
|
|
2124
|
-
|
|
2278
|
+
term6(
|
|
2125
2279
|
"natural-motif",
|
|
2126
2280
|
"Natural motif",
|
|
2127
2281
|
"A non-botanical motif read as naturally occurring material or landscape incident."
|
|
2128
2282
|
),
|
|
2129
|
-
|
|
2283
|
+
term6(
|
|
2130
2284
|
"novelty",
|
|
2131
2285
|
"Novelty",
|
|
2132
2286
|
"A pictorial repeat whose subject is intentionally unexpected or conversational."
|
|
2133
2287
|
),
|
|
2134
|
-
|
|
2288
|
+
term6(
|
|
2135
2289
|
"plaid-check",
|
|
2136
2290
|
"Plaid or check",
|
|
2137
2291
|
"An orthogonal repeat of crossing bands or alternating squares."
|
|
2138
2292
|
),
|
|
2139
|
-
|
|
2293
|
+
term6(
|
|
2140
2294
|
"scenic",
|
|
2141
2295
|
"Scenic",
|
|
2142
2296
|
"A continuous or panelled representational landscape or architectural scene."
|
|
2143
2297
|
),
|
|
2144
|
-
|
|
2298
|
+
term6(
|
|
2145
2299
|
"stone-effect",
|
|
2146
2300
|
"Stone effect",
|
|
2147
2301
|
"A surface intended to read as stone rather than its substrate."
|
|
2148
2302
|
),
|
|
2149
|
-
|
|
2150
|
-
|
|
2303
|
+
term6("stripe", "Stripe", "A repeat organised as parallel bands."),
|
|
2304
|
+
term6(
|
|
2151
2305
|
"gradient",
|
|
2152
2306
|
"Gradient",
|
|
2153
2307
|
"A continuous or stepped transition in tone, colour or mark density."
|
|
2154
2308
|
),
|
|
2155
|
-
|
|
2309
|
+
term6(
|
|
2156
2310
|
"texture",
|
|
2157
2311
|
"Texture",
|
|
2158
2312
|
"A non-representational repeat whose principal reading is tactile or relief-like."
|
|
2159
2313
|
),
|
|
2160
|
-
|
|
2314
|
+
term6(
|
|
2161
2315
|
"toile",
|
|
2162
2316
|
"Toile",
|
|
2163
2317
|
"A fine-line pastoral or narrative pictorial repeat, usually in one colour."
|
|
2164
2318
|
),
|
|
2165
|
-
|
|
2319
|
+
term6(
|
|
2166
2320
|
"character",
|
|
2167
2321
|
"Whimsy and character",
|
|
2168
2322
|
"A playful illustrative motif whose principal effect is personality rather than subject fidelity."
|
|
2169
2323
|
),
|
|
2170
|
-
|
|
2324
|
+
term6(
|
|
2171
2325
|
"woodgrain-effect",
|
|
2172
2326
|
"Woodgrain effect",
|
|
2173
2327
|
"A surface intended to read as wood grain rather than its substrate."
|
|
2174
2328
|
),
|
|
2175
|
-
|
|
2329
|
+
term6(
|
|
2176
2330
|
"woven-effect",
|
|
2177
2331
|
"Woven effect",
|
|
2178
2332
|
"A surface intended to read as woven threads rather than its construction."
|
|
@@ -2757,7 +2911,7 @@ var ESTATE_SNAPSHOT2 = "2026-08-25";
|
|
|
2757
2911
|
var CORPUS2 = "Material Bank catalogue, us_hierarchy_category_v2 level-2 rollup";
|
|
2758
2912
|
var CORPUS_SNAPSHOT2 = "2026-08-27";
|
|
2759
2913
|
var SEARCH_REVIEW_DATE2 = "2026-08-31";
|
|
2760
|
-
var
|
|
2914
|
+
var term7 = (slug, label, definition, extra = {}) => ({
|
|
2761
2915
|
definition,
|
|
2762
2916
|
label,
|
|
2763
2917
|
provenance: { basis: "evidenced", snapshot: ESTATE_SNAPSHOT2, source: ESTATE2 },
|
|
@@ -2785,7 +2939,7 @@ var fromSearchCorpus = (slug, label, definition, extra = {}) => ({
|
|
|
2785
2939
|
...extra
|
|
2786
2940
|
});
|
|
2787
2941
|
var PRODUCT_CATEGORY_TERMS = [
|
|
2788
|
-
|
|
2942
|
+
term7(
|
|
2789
2943
|
"tile",
|
|
2790
2944
|
"Tile",
|
|
2791
2945
|
"A modular hard-surface unit made to be installed in a repeated field.",
|
|
@@ -2793,7 +2947,7 @@ var PRODUCT_CATEGORY_TERMS = [
|
|
|
2793
2947
|
external: [uniclass2("Pr_35_93_96", "Wall and floor tile units", "exact")]
|
|
2794
2948
|
}
|
|
2795
2949
|
),
|
|
2796
|
-
|
|
2950
|
+
term7(
|
|
2797
2951
|
"carpet-and-rug",
|
|
2798
2952
|
"Carpet and rug",
|
|
2799
2953
|
"A textile floor covering, fixed or loose laid.",
|
|
@@ -2810,7 +2964,7 @@ var PRODUCT_CATEGORY_TERMS = [
|
|
|
2810
2964
|
reviewedAt: "2026-08-31"
|
|
2811
2965
|
}
|
|
2812
2966
|
),
|
|
2813
|
-
|
|
2967
|
+
term7(
|
|
2814
2968
|
"countertop",
|
|
2815
2969
|
"Countertop",
|
|
2816
2970
|
"A product or fabricated assembly supplied as a horizontal work surface.",
|
|
@@ -2820,7 +2974,7 @@ var PRODUCT_CATEGORY_TERMS = [
|
|
|
2820
2974
|
]
|
|
2821
2975
|
}
|
|
2822
2976
|
),
|
|
2823
|
-
|
|
2977
|
+
term7(
|
|
2824
2978
|
"flooring",
|
|
2825
2979
|
"Flooring",
|
|
2826
2980
|
"A product supplied to form a finished walking surface.",
|
|
@@ -2828,7 +2982,7 @@ var PRODUCT_CATEGORY_TERMS = [
|
|
|
2828
2982
|
external: [uniclass2("Pr_35_57_71", "Resilient floor coverings", "close")]
|
|
2829
2983
|
}
|
|
2830
2984
|
),
|
|
2831
|
-
|
|
2985
|
+
term7(
|
|
2832
2986
|
"wallcovering",
|
|
2833
2987
|
"Wallcovering",
|
|
2834
2988
|
"A sheet, roll or panel product applied as the visible wall surface.",
|
|
@@ -3089,59 +3243,59 @@ var PRODUCT_CATEGORY_TERMS = [
|
|
|
3089
3243
|
// src/axes/requirement.ts
|
|
3090
3244
|
var SOURCE5 = "Material Instruments residential and commercial project requirements";
|
|
3091
3245
|
var SNAPSHOT8 = "2026-08-25";
|
|
3092
|
-
var
|
|
3246
|
+
var term8 = (slug, label, definition) => ({
|
|
3093
3247
|
definition,
|
|
3094
3248
|
label,
|
|
3095
3249
|
provenance: { basis: "evidenced", snapshot: SNAPSHOT8, source: SOURCE5 },
|
|
3096
3250
|
slug
|
|
3097
3251
|
});
|
|
3098
3252
|
var REQUIREMENT_TERMS = [
|
|
3099
|
-
|
|
3253
|
+
term8(
|
|
3100
3254
|
"budget",
|
|
3101
3255
|
"Budget",
|
|
3102
3256
|
"The allowed monetary cost or cost band for the applicable scope."
|
|
3103
3257
|
),
|
|
3104
|
-
|
|
3258
|
+
term8(
|
|
3105
3259
|
"availability",
|
|
3106
3260
|
"Availability",
|
|
3107
3261
|
"Whether the thing can be supplied in the required market and time window."
|
|
3108
3262
|
),
|
|
3109
|
-
|
|
3263
|
+
term8(
|
|
3110
3264
|
"lead-time",
|
|
3111
3265
|
"Lead time",
|
|
3112
3266
|
"The maximum elapsed time acceptable between commitment and supply."
|
|
3113
3267
|
),
|
|
3114
|
-
|
|
3268
|
+
term8(
|
|
3115
3269
|
"slip-resistance",
|
|
3116
3270
|
"Slip resistance",
|
|
3117
3271
|
"The required measured resistance to pedestrian slipping for the application."
|
|
3118
3272
|
),
|
|
3119
|
-
|
|
3273
|
+
term8(
|
|
3120
3274
|
"wet-area-suitability",
|
|
3121
3275
|
"Wet-area suitability",
|
|
3122
3276
|
"Whether the product is evidenced as suitable for the stated wet exposure."
|
|
3123
3277
|
),
|
|
3124
|
-
|
|
3278
|
+
term8(
|
|
3125
3279
|
"fire-performance",
|
|
3126
3280
|
"Fire performance",
|
|
3127
3281
|
"The required reaction-to-fire or fire-resistance classification."
|
|
3128
3282
|
),
|
|
3129
|
-
|
|
3283
|
+
term8(
|
|
3130
3284
|
"acoustic-performance",
|
|
3131
3285
|
"Acoustic performance",
|
|
3132
3286
|
"The required sound absorption, insulation or impact-noise performance."
|
|
3133
3287
|
),
|
|
3134
|
-
|
|
3288
|
+
term8(
|
|
3135
3289
|
"maintenance",
|
|
3136
3290
|
"Maintenance",
|
|
3137
3291
|
"The allowed cleaning, renewal or routine care burden."
|
|
3138
3292
|
),
|
|
3139
|
-
|
|
3293
|
+
term8(
|
|
3140
3294
|
"installation-method",
|
|
3141
3295
|
"Installation method",
|
|
3142
3296
|
"A required or prohibited method of fixing, laying or applying the product."
|
|
3143
3297
|
),
|
|
3144
|
-
|
|
3298
|
+
term8(
|
|
3145
3299
|
"indoor-air-quality",
|
|
3146
3300
|
"Indoor air quality",
|
|
3147
3301
|
"A limit or certification concerning emissions into occupied indoor air."
|
|
@@ -4974,10 +5128,10 @@ var SPACE_TERMS = SPACE_SECTORS.flatMap(
|
|
|
4974
5128
|
(sector) => sector.terms
|
|
4975
5129
|
);
|
|
4976
5130
|
var SPACE_BY_ID = new Map(
|
|
4977
|
-
SPACE_TERMS.map((
|
|
5131
|
+
SPACE_TERMS.map((term10) => [term10.slug, term10])
|
|
4978
5132
|
);
|
|
4979
5133
|
var SECTOR_IDS = new Set(
|
|
4980
|
-
SECTOR_TERMS.map((
|
|
5134
|
+
SECTOR_TERMS.map((term10) => term10.slug)
|
|
4981
5135
|
);
|
|
4982
5136
|
|
|
4983
5137
|
// src/axes/style.ts
|
|
@@ -5878,6 +6032,107 @@ var TYPOLOGY_TERMS = [
|
|
|
5878
6032
|
}
|
|
5879
6033
|
];
|
|
5880
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
|
+
|
|
5881
6136
|
// src/axes/mood-anchors.ts
|
|
5882
6137
|
var MOOD_ANCHORS = {
|
|
5883
6138
|
airy: [
|
|
@@ -5937,10 +6192,10 @@ var MOOD_ANCHORS = {
|
|
|
5937
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"
|
|
5938
6193
|
]
|
|
5939
6194
|
};
|
|
5940
|
-
for (const
|
|
5941
|
-
if (MOOD_ANCHORS[
|
|
6195
|
+
for (const term10 of MOOD_TERMS) {
|
|
6196
|
+
if (MOOD_ANCHORS[term10.slug] === void 0) {
|
|
5942
6197
|
throw new Error(
|
|
5943
|
-
`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.`
|
|
5944
6199
|
);
|
|
5945
6200
|
}
|
|
5946
6201
|
}
|
|
@@ -5981,10 +6236,10 @@ var PERIOD_ANCHORS = {
|
|
|
5981
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"
|
|
5982
6237
|
]
|
|
5983
6238
|
};
|
|
5984
|
-
for (const
|
|
5985
|
-
if (PERIOD_ANCHORS[
|
|
6239
|
+
for (const term10 of PERIOD_TERMS) {
|
|
6240
|
+
if (PERIOD_ANCHORS[term10.slug] === void 0) {
|
|
5986
6241
|
throw new Error(
|
|
5987
|
-
`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.`
|
|
5988
6243
|
);
|
|
5989
6244
|
}
|
|
5990
6245
|
}
|
|
@@ -6063,10 +6318,10 @@ var PLACE_ANCHORS = {
|
|
|
6063
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"
|
|
6064
6319
|
]
|
|
6065
6320
|
};
|
|
6066
|
-
for (const
|
|
6067
|
-
if (PLACE_ANCHORS[
|
|
6321
|
+
for (const term10 of [...PLACE_REGION_TERMS, ...PLACE_LANDSCAPE_TERMS]) {
|
|
6322
|
+
if (PLACE_ANCHORS[term10.slug] === void 0) {
|
|
6068
6323
|
throw new Error(
|
|
6069
|
-
`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.`
|
|
6070
6325
|
);
|
|
6071
6326
|
}
|
|
6072
6327
|
}
|
|
@@ -6750,10 +7005,10 @@ var SPACE_ANCHORS = {
|
|
|
6750
7005
|
...SLEEPING_ANCHORS,
|
|
6751
7006
|
...WORKING_ANCHORS
|
|
6752
7007
|
};
|
|
6753
|
-
for (const
|
|
6754
|
-
if (SPACE_ANCHORS[
|
|
7008
|
+
for (const term10 of SPACE_TERMS) {
|
|
7009
|
+
if (SPACE_ANCHORS[term10.slug] === void 0) {
|
|
6755
7010
|
throw new Error(
|
|
6756
|
-
`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.`
|
|
6757
7012
|
);
|
|
6758
7013
|
}
|
|
6759
7014
|
}
|
|
@@ -6838,16 +7093,33 @@ var STYLE_ANCHORS = {
|
|
|
6838
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"
|
|
6839
7094
|
]
|
|
6840
7095
|
};
|
|
6841
|
-
for (const
|
|
6842
|
-
if (STYLE_ANCHORS[
|
|
7096
|
+
for (const term10 of STYLE_TERMS) {
|
|
7097
|
+
if (STYLE_ANCHORS[term10.slug] === void 0) {
|
|
6843
7098
|
throw new Error(
|
|
6844
|
-
`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.`
|
|
6845
7100
|
);
|
|
6846
7101
|
}
|
|
6847
7102
|
}
|
|
6848
7103
|
|
|
6849
7104
|
// src/axes/index.ts
|
|
6850
|
-
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
|
+
};
|
|
6851
7123
|
var AXES = [
|
|
6852
7124
|
{
|
|
6853
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.",
|
|
@@ -6912,13 +7184,41 @@ var AXES = [
|
|
|
6912
7184
|
status: "authored"
|
|
6913
7185
|
},
|
|
6914
7186
|
{
|
|
6915
|
-
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.",
|
|
6916
7188
|
facets: single("format", "Format", FORMAT_TERMS),
|
|
6917
7189
|
label: "Format",
|
|
6918
7190
|
question: "In what physical unit is it supplied?",
|
|
6919
7191
|
slug: "format",
|
|
6920
7192
|
status: "authored"
|
|
6921
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
|
+
},
|
|
6922
7222
|
{
|
|
6923
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.",
|
|
6924
7224
|
facets: single("construction", "Construction", CONSTRUCTION_TERMS),
|
|
@@ -7070,7 +7370,7 @@ var AXES = [
|
|
|
7070
7370
|
status: "declared"
|
|
7071
7371
|
},
|
|
7072
7372
|
{
|
|
7073
|
-
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.",
|
|
7074
7374
|
facets: [],
|
|
7075
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.",
|
|
7076
7376
|
label: "Form",
|
|
@@ -7088,13 +7388,13 @@ var buildIndex = () => {
|
|
|
7088
7388
|
const locations = [];
|
|
7089
7389
|
for (const axis of AXES) {
|
|
7090
7390
|
for (const facet of axis.facets) {
|
|
7091
|
-
for (const
|
|
7391
|
+
for (const term10 of facet.terms) {
|
|
7092
7392
|
const location = {
|
|
7093
7393
|
axisSlug: axis.slug,
|
|
7094
7394
|
facetSlug: facet.slug,
|
|
7095
|
-
qualifiedReference: qualifiedReferenceOf(axis, facet.slug,
|
|
7096
|
-
term:
|
|
7097
|
-
termSlug:
|
|
7395
|
+
qualifiedReference: qualifiedReferenceOf(axis, facet.slug, term10.slug),
|
|
7396
|
+
term: term10,
|
|
7397
|
+
termSlug: term10.slug
|
|
7098
7398
|
};
|
|
7099
7399
|
locations.push(location);
|
|
7100
7400
|
const key = canonicalKey(location.qualifiedReference);
|
|
@@ -7114,7 +7414,7 @@ var resolveReference = (reference) => INDEX.byKey.get(canonicalKey(reference));
|
|
|
7114
7414
|
// src/v1.ts
|
|
7115
7415
|
var TAXONOMY_BASE_URI = "https://taxonomy.materialinstruments.com";
|
|
7116
7416
|
var TAXONOMY_SNAPSHOT = "2026-08-31";
|
|
7117
|
-
var TAXONOMY_VERSION = "1.1.
|
|
7417
|
+
var TAXONOMY_VERSION = "1.1.2";
|
|
7118
7418
|
var PUBLISHED_V1_BASELINE = "2026-08-30";
|
|
7119
7419
|
var compareText = (left, right) => {
|
|
7120
7420
|
if (left < right) {
|
|
@@ -7140,8 +7440,8 @@ var DEFAULT_PROVENANCE = {
|
|
|
7140
7440
|
basis: "authored",
|
|
7141
7441
|
source: "@instruments/taxonomy published corpus"
|
|
7142
7442
|
};
|
|
7143
|
-
var lifecycleFor = (
|
|
7144
|
-
const successor =
|
|
7443
|
+
var lifecycleFor = (term10) => {
|
|
7444
|
+
const successor = term10?.supersededByReference === void 0 ? void 0 : resolveReference(term10.supersededByReference);
|
|
7145
7445
|
const successorAxis = successor === void 0 ? void 0 : AXES.find((axis) => axis.slug === successor.axisSlug);
|
|
7146
7446
|
const supersededBy = successor === void 0 || successorAxis === void 0 ? void 0 : conceptUri(
|
|
7147
7447
|
successor.axisSlug,
|
|
@@ -7150,9 +7450,9 @@ var lifecycleFor = (term8) => {
|
|
|
7150
7450
|
successorAxis.facets.length > 1 || successorAxis.facets[0]?.slug !== successorAxis.slug
|
|
7151
7451
|
);
|
|
7152
7452
|
return {
|
|
7153
|
-
introducedAt:
|
|
7154
|
-
reviewedAt:
|
|
7155
|
-
status:
|
|
7453
|
+
introducedAt: term10?.introducedAt ?? PUBLISHED_V1_BASELINE,
|
|
7454
|
+
reviewedAt: term10?.reviewedAt ?? term10?.introducedAt ?? PUBLISHED_V1_BASELINE,
|
|
7455
|
+
status: term10?.status ?? "active",
|
|
7156
7456
|
...supersededBy === void 0 ? {} : { supersededBy }
|
|
7157
7457
|
};
|
|
7158
7458
|
};
|
|
@@ -7167,11 +7467,11 @@ var inversePredicate = {
|
|
|
7167
7467
|
"suitable-for": "supported-by",
|
|
7168
7468
|
"typically-in": "typically-contains"
|
|
7169
7469
|
};
|
|
7170
|
-
var isColorScopeTerm = (
|
|
7171
|
-
var governanceFor = (explanation,
|
|
7470
|
+
var isColorScopeTerm = (term10) => term10.canonicalAuthority?.authority === "colorscope";
|
|
7471
|
+
var governanceFor = (explanation, term10) => ({
|
|
7172
7472
|
explanation,
|
|
7173
|
-
lifecycle: lifecycleFor(
|
|
7174
|
-
provenance:
|
|
7473
|
+
lifecycle: lifecycleFor(term10),
|
|
7474
|
+
provenance: term10?.provenance ?? DEFAULT_PROVENANCE,
|
|
7175
7475
|
steward: "@instruments/taxonomy"
|
|
7176
7476
|
});
|
|
7177
7477
|
var externalReferences = (mappings) => mappings?.map((mapping) => ({
|
|
@@ -7180,10 +7480,10 @@ var externalReferences = (mappings) => mappings?.map((mapping) => ({
|
|
|
7180
7480
|
label: mapping.label,
|
|
7181
7481
|
match: mapping.match
|
|
7182
7482
|
}));
|
|
7183
|
-
var governedEdge = (from, predicate, to,
|
|
7483
|
+
var governedEdge = (from, predicate, to, term10, assertion = "asserted", role) => {
|
|
7184
7484
|
const governance = governanceFor(
|
|
7185
7485
|
`Taxonomy governs the asserted ${predicate} relationship and its navigable inverse.`,
|
|
7186
|
-
|
|
7486
|
+
term10
|
|
7187
7487
|
);
|
|
7188
7488
|
return {
|
|
7189
7489
|
assertion,
|
|
@@ -7201,7 +7501,8 @@ var addTermNodes = (assembly, axis, axisUri) => {
|
|
|
7201
7501
|
for (const [facetOrder, facet] of axis.facets.entries()) {
|
|
7202
7502
|
const facetUri = `${TAXONOMY_BASE_URI}/id/facet/${canonicalSegment(axis.slug)}/${canonicalSegment(facet.slug)}`;
|
|
7203
7503
|
const facetGovernance = governanceFor(
|
|
7204
|
-
`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
|
|
7205
7506
|
);
|
|
7206
7507
|
assembly.nodes.push({
|
|
7207
7508
|
axis: axisUri,
|
|
@@ -7215,50 +7516,50 @@ var addTermNodes = (assembly, axis, axisUri) => {
|
|
|
7215
7516
|
uri: facetUri
|
|
7216
7517
|
});
|
|
7217
7518
|
assembly.edges.push(
|
|
7218
|
-
governedEdge(facetUri, "belongs-to-axis", axisUri),
|
|
7219
|
-
governedEdge(axisUri, "has-facet", facetUri,
|
|
7519
|
+
governedEdge(facetUri, "belongs-to-axis", axisUri, facet.governance),
|
|
7520
|
+
governedEdge(axisUri, "has-facet", facetUri, facet.governance, "inverse")
|
|
7220
7521
|
);
|
|
7221
|
-
for (const [termOrder,
|
|
7222
|
-
if (isColorScopeTerm(
|
|
7522
|
+
for (const [termOrder, term10] of facet.terms.entries()) {
|
|
7523
|
+
if (isColorScopeTerm(term10)) {
|
|
7223
7524
|
continue;
|
|
7224
7525
|
}
|
|
7225
|
-
const uri = conceptUri(axis.slug, facet.slug,
|
|
7226
|
-
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}`;
|
|
7227
7528
|
assembly.conceptByQualifiedSlug.set(qualified, uri);
|
|
7228
|
-
assembly.conceptByAxisAndTerm.set(`${axis.slug}.${
|
|
7529
|
+
assembly.conceptByAxisAndTerm.set(`${axis.slug}.${term10.slug}`, uri);
|
|
7229
7530
|
const governance = governanceFor(
|
|
7230
|
-
`Taxonomy governs the canonical identity and meaning of ${
|
|
7231
|
-
|
|
7531
|
+
`Taxonomy governs the canonical identity and meaning of ${term10.label}.`,
|
|
7532
|
+
term10
|
|
7232
7533
|
);
|
|
7233
7534
|
assembly.nodes.push({
|
|
7234
|
-
...
|
|
7535
|
+
...term10.altLabels === void 0 ? {} : { altLabels: term10.altLabels },
|
|
7235
7536
|
axis: axisUri,
|
|
7236
|
-
...
|
|
7237
|
-
...
|
|
7537
|
+
...term10.definition === void 0 ? {} : { definition: term10.definition },
|
|
7538
|
+
...term10.external === void 0 ? {} : { externalReferences: externalReferences(term10.external) },
|
|
7238
7539
|
facet: facetUri,
|
|
7239
7540
|
governance,
|
|
7240
7541
|
governedBy: "taxonomy",
|
|
7241
7542
|
kind: "concept",
|
|
7242
|
-
label:
|
|
7543
|
+
label: term10.label,
|
|
7243
7544
|
lifecycle: governance.lifecycle,
|
|
7244
|
-
...
|
|
7545
|
+
...term10.note === void 0 ? {} : { note: term10.note },
|
|
7245
7546
|
order: termOrder,
|
|
7246
7547
|
provenance: governance.provenance,
|
|
7247
|
-
...
|
|
7248
|
-
...
|
|
7249
|
-
...
|
|
7250
|
-
slug:
|
|
7251
|
-
...
|
|
7252
|
-
...
|
|
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 },
|
|
7253
7554
|
uri,
|
|
7254
|
-
...
|
|
7255
|
-
...
|
|
7555
|
+
...term10.usage === void 0 ? {} : { usage: term10.usage },
|
|
7556
|
+
...term10.usageWithheld === void 0 ? {} : { usageWithheld: term10.usageWithheld }
|
|
7256
7557
|
});
|
|
7257
7558
|
assembly.edges.push(
|
|
7258
|
-
governedEdge(uri, "belongs-to-axis", axisUri,
|
|
7259
|
-
governedEdge(axisUri, "has-concept", uri,
|
|
7260
|
-
governedEdge(uri, "belongs-to-facet", facetUri,
|
|
7261
|
-
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")
|
|
7262
7563
|
);
|
|
7263
7564
|
}
|
|
7264
7565
|
}
|
|
@@ -7273,7 +7574,8 @@ var assembleNodes = () => {
|
|
|
7273
7574
|
for (const [axisOrder, axis] of AXES.entries()) {
|
|
7274
7575
|
const axisUri = `${TAXONOMY_BASE_URI}/id/axis/${canonicalSegment(axis.slug)}`;
|
|
7275
7576
|
const governance = governanceFor(
|
|
7276
|
-
`Taxonomy governs the ${axis.label} axis and its organizing question
|
|
7577
|
+
`Taxonomy governs the ${axis.label} axis and its organizing question.`,
|
|
7578
|
+
axis.governance
|
|
7277
7579
|
);
|
|
7278
7580
|
assembly.nodes.push({
|
|
7279
7581
|
boundary: axis.boundary,
|
|
@@ -7426,14 +7728,14 @@ var crossoverEquivalent = (phrase, taxonomyUri, explanation, source) => ({
|
|
|
7426
7728
|
phrase,
|
|
7427
7729
|
target: { authority: "taxonomy", uri: taxonomyUri }
|
|
7428
7730
|
});
|
|
7429
|
-
var crossoverTaxonomyAmbiguity = (phrase, readings, explanation, source, snapshot = PUBLISHED_V1_BASELINE, lifecycle = lifecycleFor()) => {
|
|
7731
|
+
var crossoverTaxonomyAmbiguity = (phrase, readings, explanation, source, snapshot = PUBLISHED_V1_BASELINE, lifecycle = lifecycleFor(), basis = "evidenced") => {
|
|
7430
7732
|
const [first, second] = readings;
|
|
7431
7733
|
return {
|
|
7432
7734
|
explanation,
|
|
7433
7735
|
governance: lexicalGovernance(
|
|
7434
|
-
"Taxonomy preserves the
|
|
7736
|
+
"Taxonomy preserves the governed readings without assigning a default, role, contextual preference, or consumer route.",
|
|
7435
7737
|
{
|
|
7436
|
-
basis
|
|
7738
|
+
basis,
|
|
7437
7739
|
snapshot,
|
|
7438
7740
|
source
|
|
7439
7741
|
},
|
|
@@ -7448,6 +7750,38 @@ var crossoverTaxonomyAmbiguity = (phrase, readings, explanation, source, snapsho
|
|
|
7448
7750
|
};
|
|
7449
7751
|
};
|
|
7450
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
|
+
),
|
|
7451
7785
|
crossoverTaxonomyAmbiguity(
|
|
7452
7786
|
"mosaic",
|
|
7453
7787
|
[
|
|
@@ -7805,20 +8139,36 @@ var targetForLocation = (location) => {
|
|
|
7805
8139
|
)
|
|
7806
8140
|
};
|
|
7807
8141
|
};
|
|
7808
|
-
var lexicalPhrases = (
|
|
8142
|
+
var lexicalPhrases = (term10) => [term10.slug, term10.label, ...term10.altLabels ?? [], ...term10.seenAs ?? []].map((phrase) => phrase.trim().toLowerCase()).filter(
|
|
7809
8143
|
(phrase, index, phrases) => phrase.length > 0 && phrases.indexOf(phrase) === index
|
|
7810
8144
|
);
|
|
7811
8145
|
var targetKey = (target) => target.authority === "taxonomy" ? `taxonomy:${target.uri}` : `colorscope:${target.referenceKind}:${target.identifier}`;
|
|
7812
8146
|
var inferredLifecycle = (readings) => {
|
|
7813
8147
|
const terms = readings.flatMap((reading) => reading.terms);
|
|
7814
|
-
const
|
|
8148
|
+
const lifecycles = terms.map((term10) => lifecycleFor(term10));
|
|
8149
|
+
const [introducedAt] = terms.map((term10) => term10.introducedAt ?? PUBLISHED_V1_BASELINE).toSorted(compareText);
|
|
7815
8150
|
const reviewedAt = terms.map(
|
|
7816
|
-
(
|
|
8151
|
+
(term10) => term10.reviewedAt ?? term10.introducedAt ?? PUBLISHED_V1_BASELINE
|
|
7817
8152
|
).toSorted(compareText).at(-1);
|
|
7818
8153
|
if (introducedAt === void 0 || reviewedAt === void 0) {
|
|
7819
8154
|
throw new Error("Inferred lexical reading has no source term lifecycle.");
|
|
7820
8155
|
}
|
|
7821
|
-
|
|
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
|
+
};
|
|
7822
8172
|
};
|
|
7823
8173
|
var inferredLexicalEntries = () => {
|
|
7824
8174
|
const authored = new Set(
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@instruments/taxonomy",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "Canonical data-only interiors and architecture knowledge graph and lexical corpus.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"repository": {
|
|
@@ -23,20 +23,21 @@
|
|
|
23
23
|
"publishConfig": {
|
|
24
24
|
"access": "public"
|
|
25
25
|
},
|
|
26
|
-
"devDependencies": {
|
|
27
|
-
"@howells/lint": "^1.0.0",
|
|
28
|
-
"@instruments/colorscope": "7.3.0",
|
|
29
|
-
"@types/node": "^24.0.0",
|
|
30
|
-
"tsup": "^8.5.1",
|
|
31
|
-
"typescript": "^5.7.0",
|
|
32
|
-
"vitest": "^4.0.0"
|
|
33
|
-
},
|
|
34
26
|
"scripts": {
|
|
35
27
|
"build": "rm -rf dist && tsup",
|
|
36
28
|
"lint": "howells-check .",
|
|
29
|
+
"prepare": "[ -d dist ] || pnpm build",
|
|
37
30
|
"smoke:packed": "node --experimental-strip-types scripts/smoke-packed-core.ts",
|
|
38
31
|
"sync:colorscope": "vitest run src/colorscope-sync.test.ts",
|
|
39
32
|
"test": "vitest run",
|
|
40
33
|
"typecheck": "tsc --noEmit"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@howells/lint": "^1.0.0",
|
|
37
|
+
"@instruments/colorscope": "7.3.0",
|
|
38
|
+
"@types/node": "^24.0.0",
|
|
39
|
+
"tsup": "^8.5.1",
|
|
40
|
+
"typescript": "^5.7.0",
|
|
41
|
+
"vitest": "^4.0.0"
|
|
41
42
|
}
|
|
42
|
-
}
|
|
43
|
+
}
|