@instruments/taxonomy 2.5.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -7,6 +7,8 @@ import { createHash } from "crypto";
7
7
  // src/axes/external-search.ts
8
8
  var SEARCHED_ON = "2026-10-21";
9
9
  var SEARCHED_ON_TAX66 = "2026-10-22";
10
+ var SEARCHED_ON_TAX66_COVERAGE = "2026-10-23";
11
+ var SEARCHED_ON_TAX66_GAPS = "2026-10-23";
10
12
  var WIKIDATA_SEARCH = "https://www.wikidata.org/w/api.php?action=wbsearchentities";
11
13
  var GETTY_SPARQL = "https://vocab.getty.edu/sparql";
12
14
  var UNICLASS_SEARCH = "https://uniclass.thenbs.com/search";
@@ -1772,6 +1774,45 @@ var single = (slug, label, terms, governance, holds) => [
1772
1774
  }
1773
1775
  ];
1774
1776
 
1777
+ // src/axes/gaps-shared.ts
1778
+ var GAPS_DATE = SEARCHED_ON_TAX66_GAPS;
1779
+ var GAPS_PROVENANCE = {
1780
+ basis: "authored",
1781
+ source: "TAX-66 vocabulary gaps"
1782
+ };
1783
+ var GAPS_LIFECYCLE = {
1784
+ introducedAt: GAPS_DATE,
1785
+ provenance: GAPS_PROVENANCE,
1786
+ reviewedAt: GAPS_DATE
1787
+ };
1788
+ var gapsTerm = (slug, label, definition, extra = {}) => ({
1789
+ definition,
1790
+ label,
1791
+ slug,
1792
+ ...GAPS_LIFECYCLE,
1793
+ ...extra
1794
+ });
1795
+ var mapping = (scheme, identifier, label, match) => ({ identifier, label, match, scheme });
1796
+ var UNICLASS_TABLES = "July 2026 NBS Ac v1.27, Co v1.22, EF v1.16, En v1.34, Ma v1.1, PC v1.3, PM v1.30, Pr v1.43, SL v1.36 and Ss v1.43 published tables, title search: ";
1797
+ var gapsSearchedUniclass = (query) => ({
1798
+ date: GAPS_DATE,
1799
+ query: `${UNICLASS_TABLES}${query}`,
1800
+ scheme: "uniclass",
1801
+ via: UNICLASS_DOWNLOAD
1802
+ });
1803
+ var gapsSearchedAat = (query) => ({
1804
+ date: GAPS_DATE,
1805
+ query,
1806
+ scheme: "aat",
1807
+ via: `${GETTY_SPARQL}; luc:term search, AAT preferred labels and English scope notes read`
1808
+ });
1809
+ var gapsSearchedWikidata = (query) => ({
1810
+ date: GAPS_DATE,
1811
+ query,
1812
+ scheme: "wikidata",
1813
+ via: `${WIKIDATA_SEARCH}&language=en&format=json; labels and descriptions read`
1814
+ });
1815
+
1775
1816
  // src/axes/pattern-tax57.ts
1776
1817
  var relatedTo4 = (target) => ({
1777
1818
  predicate: "related-to",
@@ -2387,7 +2428,24 @@ var CONSTRUCTION_TERMS = [
2387
2428
  }
2388
2429
  ],
2389
2430
  searchedWithout: [searchedUniclass3(JACQUARD_WEAVING)]
2390
- }
2431
+ },
2432
+ // TAX-66. A construction and not a material: it names how the sheet is made, slit and stretched
2433
+ // into a diamond mesh without waste, the way `woven` and `sintered` name a process. The metal is
2434
+ // a separate meaning on the material axis. Uniclass lists it only as products, so that mapping
2435
+ // is `close` rather than exact.
2436
+ gapsTerm(
2437
+ "expanded-metal",
2438
+ "Expanded metal",
2439
+ "Metal sheet slit and stretched in one operation into an open mesh of diamond-shaped openings, without cutting away or joining any material.",
2440
+ {
2441
+ external: [
2442
+ mapping("aat", "300011061", "expanded metal", "close"),
2443
+ mapping("uniclass", "Pr_25_57_56_27", "Expanded metal mesh", "close"),
2444
+ mapping("wikidata", "Q1424107", "expanded metal", "close")
2445
+ ],
2446
+ related: relatedTo5("material.metal")
2447
+ }
2448
+ )
2391
2449
  ];
2392
2450
 
2393
2451
  // src/axes/element-shared.ts
@@ -2813,6 +2871,31 @@ var ELEMENT_FABRIC_TERMS = [
2813
2871
  provenance: AUTHORED2,
2814
2872
  slug: "pitched-roof"
2815
2873
  },
2874
+ // TAX-66. A kind of roof, since every green roof is a roof whatever its fall; flat and pitched
2875
+ // are the slope, this is the covering. AAT has no green roof concept, only the roof garden it
2876
+ // overlaps, which is a garden people use and so `related` rather than a match.
2877
+ {
2878
+ altLabels: ["living roof", "vegetated roof"],
2879
+ broaderSlug: "roof",
2880
+ definition: "A roof whose waterproofing carries a growing medium and living vegetation as its covering, in place of lapped units or a sheet.",
2881
+ external: [
2882
+ aat4("300008131", "roof gardens", "related"),
2883
+ uniclass4("Ss_45_40_47", "Living roof systems", "close"),
2884
+ {
2885
+ identifier: "Q48741",
2886
+ label: "green roof",
2887
+ match: "close",
2888
+ scheme: "wikidata"
2889
+ }
2890
+ ],
2891
+ introducedAt: GAPS_DATE,
2892
+ label: "Green Roof",
2893
+ placement: "overhead",
2894
+ provenance: GAPS_PROVENANCE,
2895
+ reviewedAt: GAPS_DATE,
2896
+ searchedWithout: [gapsSearchedAat("green roof | living roof | sod roof")],
2897
+ slug: "green-roof"
2898
+ },
2816
2899
  {
2817
2900
  altLabels: ["skylight", "roof light"],
2818
2901
  definition: "A glazed opening in a roof plane, admitting daylight from above rather than from a wall.",
@@ -3691,6 +3774,7 @@ var FINISH_TEXTURE_TERMS = [
3691
3774
  var TEXTURED_TARGET = "finish.texture.textured";
3692
3775
  var TUMBLE_FINISHING = "tumble finishing";
3693
3776
  var ABRASIVE_BLASTING = "abrasive blasting";
3777
+ var POWDER_COATING = "powder coating";
3694
3778
  var CROSSOVER_SNAPSHOT = "2026-08-30";
3695
3779
  var RETRIEVAL_SHEEN = "ms_sheen, a sheen dictionary in a materials-retrieval system (src-05)";
3696
3780
  var MG2435_DATE = "2026-10-02";
@@ -4042,7 +4126,24 @@ var FINISH_TREATMENT_TERMS = [
4042
4126
  }
4043
4127
  ],
4044
4128
  searchedWithout: [searchedUniclass3("distressing")]
4045
- }
4129
+ },
4130
+ // TAX-66. A coating applied, like chrome and nickel above, so it is a treatment; the colour and
4131
+ // sheen of the cured film are separate meanings made on the palette and sheen facets. Every
4132
+ // mapping is `close` because AAT narrows the powder to thermosetting plastic and Wikidata and
4133
+ // Uniclass describe the process and the product rather than the finished surface.
4134
+ gapsTerm(
4135
+ "powder-coat",
4136
+ "Powder coat",
4137
+ "A dry powder of thermoplastic or thermosetting polymer applied electrostatically to a metal surface and cured under heat into a continuous hard film; it names the coating, not the substrate, colour or sheen.",
4138
+ {
4139
+ altLabels: [POWDER_COATING, "powder-coated"],
4140
+ external: [
4141
+ mapping("aat", "300133167", POWDER_COATING, "close"),
4142
+ mapping("uniclass", "Pr_35_31_68_66", "Powder coatings", "close"),
4143
+ mapping("wikidata", "Q445063", POWDER_COATING, "close")
4144
+ ]
4145
+ }
4146
+ )
4046
4147
  ];
4047
4148
  var FINISH_SHEEN_TERMS = [
4048
4149
  {
@@ -4454,6 +4555,522 @@ var FORMAT_TERMS = [
4454
4555
  }
4455
4556
  ];
4456
4557
 
4558
+ // src/axes/certification.ts
4559
+ var EMBODIED_CARBON = "embodied-carbon";
4560
+ var INDOOR_AIR = "indoor-air-quality";
4561
+ var SOURCING = "responsible-sourcing";
4562
+ var WELL_NAME = "WELL Building Standard";
4563
+ var evidences = (...needs) => needs.map((need) => ({
4564
+ predicate: "related-to",
4565
+ target: `requirement.${need}`
4566
+ }));
4567
+ var noAat = (query) => gapsSearchedAat(query);
4568
+ var noUniclass = (query) => gapsSearchedUniclass(query);
4569
+ var CERTIFICATION_TERMS = [
4570
+ gapsTerm(
4571
+ "fsc",
4572
+ "FSC",
4573
+ "A product-level certification, run by the Forest Stewardship Council, that timber and paper products come from forests managed to its standard, with chain-of-custody tracing from forest to product.",
4574
+ {
4575
+ altLabels: ["Forest Stewardship Council"],
4576
+ external: [
4577
+ mapping("wikidata", "Q748367", "Forest Stewardship Council", "close")
4578
+ ],
4579
+ related: evidences(SOURCING),
4580
+ searchedWithout: [
4581
+ noAat("Forest Stewardship Council | forest certification"),
4582
+ noUniclass("FSC | Forest Stewardship Council")
4583
+ ]
4584
+ }
4585
+ ),
4586
+ gapsTerm(
4587
+ "pefc",
4588
+ "PEFC",
4589
+ "A product-level certification, run by the Programme for the Endorsement of Forest Certification, that timber and paper products come from forests managed to a nationally endorsed standard, with chain-of-custody tracing.",
4590
+ {
4591
+ altLabels: ["Programme for the Endorsement of Forest Certification"],
4592
+ external: [
4593
+ mapping(
4594
+ "wikidata",
4595
+ "Q2112204",
4596
+ "Programme for the Endorsement of Forest Certification",
4597
+ "close"
4598
+ )
4599
+ ],
4600
+ related: evidences(SOURCING),
4601
+ searchedWithout: [
4602
+ noAat(
4603
+ "Programme for the Endorsement of Forest Certification | forest certification"
4604
+ ),
4605
+ noUniclass(
4606
+ "PEFC | Programme for the Endorsement of Forest Certification"
4607
+ )
4608
+ ]
4609
+ }
4610
+ ),
4611
+ gapsTerm(
4612
+ "breeam",
4613
+ "BREEAM",
4614
+ "A building-level sustainability assessment and certification scheme, run by BRE, that rates a building across categories such as energy, materials, health and wellbeing, from Pass to Outstanding.",
4615
+ {
4616
+ altLabels: [
4617
+ "Building Research Establishment Environmental Assessment Method"
4618
+ ],
4619
+ external: [
4620
+ mapping(
4621
+ "uniclass",
4622
+ "PM_70_25_10",
4623
+ "BREEAM (Building Research Establishment Environmental Assessment Method) certificate",
4624
+ "close"
4625
+ ),
4626
+ mapping(
4627
+ "uniclass",
4628
+ "PM_35_40_10",
4629
+ "BREEAM (Building Research Establishment Environmental Assessment Method) requirements",
4630
+ "related"
4631
+ ),
4632
+ mapping("wikidata", "Q2620135", "BREEAM", "close")
4633
+ ],
4634
+ related: evidences(EMBODIED_CARBON, INDOOR_AIR, SOURCING),
4635
+ searchedWithout: [noAat("BREEAM")]
4636
+ }
4637
+ ),
4638
+ gapsTerm(
4639
+ "leed",
4640
+ "LEED",
4641
+ "A building-level green building rating system, run by the US Green Building Council, that awards points across categories such as materials, energy and indoor environmental quality towards Certified, Silver, Gold or Platinum.",
4642
+ {
4643
+ altLabels: ["Leadership in Energy and Environmental Design"],
4644
+ external: [
4645
+ mapping(
4646
+ "uniclass",
4647
+ "PM_70_25_45",
4648
+ "LEED (Leadership in Energy and Environmental Design) certificate",
4649
+ "close"
4650
+ ),
4651
+ mapping(
4652
+ "uniclass",
4653
+ "PM_35_40_45",
4654
+ "LEED (Leadership in Energy and Environmental Design) requirements",
4655
+ "related"
4656
+ ),
4657
+ mapping(
4658
+ "wikidata",
4659
+ "Q1521623",
4660
+ "Leadership in Energy and Environmental Design",
4661
+ "close"
4662
+ )
4663
+ ],
4664
+ related: evidences(EMBODIED_CARBON, INDOOR_AIR, SOURCING),
4665
+ searchedWithout: [
4666
+ noAat("LEED | Leadership in Energy and Environmental Design")
4667
+ ]
4668
+ }
4669
+ ),
4670
+ gapsTerm(
4671
+ "well-building-standard",
4672
+ WELL_NAME,
4673
+ "A building-level standard and certification, run by the International WELL Building Institute, for how a building's air, water, light and comfort features support the health and wellbeing of its occupants.",
4674
+ {
4675
+ altLabels: ["WELL certification"],
4676
+ external: [
4677
+ mapping(
4678
+ "uniclass",
4679
+ "PM_70_25_96",
4680
+ "WELL environment certificate",
4681
+ "close"
4682
+ ),
4683
+ mapping(
4684
+ "uniclass",
4685
+ "PM_35_40_96",
4686
+ "WELL environment requirements",
4687
+ "related"
4688
+ ),
4689
+ mapping("wikidata", "Q113253484", WELL_NAME, "close")
4690
+ ],
4691
+ related: evidences(INDOOR_AIR),
4692
+ searchedWithout: [noAat(WELL_NAME)]
4693
+ }
4694
+ ),
4695
+ gapsTerm(
4696
+ "greenguard",
4697
+ "GREENGUARD",
4698
+ "A product-level certification, now run by UL Solutions, that a product's chemical emissions into indoor air stay within stated limits; its Gold level sets stricter limits.",
4699
+ {
4700
+ altLabels: ["UL GREENGUARD"],
4701
+ external: [
4702
+ mapping(
4703
+ "wikidata",
4704
+ "Q5604067",
4705
+ "Greenguard Environmental Institute",
4706
+ "related"
4707
+ )
4708
+ ],
4709
+ note: "The Wikidata item is the institute that first ran the scheme and not the scheme, so the match is only related.",
4710
+ related: evidences(INDOOR_AIR),
4711
+ searchedWithout: [noAat("GREENGUARD"), noUniclass("GREENGUARD")]
4712
+ }
4713
+ ),
4714
+ gapsTerm(
4715
+ "cradle-to-cradle",
4716
+ "Cradle to Cradle Certified",
4717
+ "A product-level certification, run by the Cradle to Cradle Products Innovation Institute, that assesses a product on material health, product circularity, clean air and climate protection, water and soil stewardship and social fairness, at Bronze to Platinum levels.",
4718
+ {
4719
+ altLabels: ["C2C", "Cradle to Cradle"],
4720
+ external: [
4721
+ mapping(
4722
+ "wikidata",
4723
+ "Q116149235",
4724
+ "Cradle to Cradle Certified",
4725
+ "close"
4726
+ )
4727
+ ],
4728
+ related: evidences(EMBODIED_CARBON),
4729
+ searchedWithout: [
4730
+ noAat("Cradle to Cradle"),
4731
+ noUniclass("Cradle to Cradle | C2C")
4732
+ ]
4733
+ }
4734
+ ),
4735
+ gapsTerm(
4736
+ "epd",
4737
+ "Environmental product declaration",
4738
+ "A third-party-verified declaration of a product's life-cycle environmental impacts, such as its embodied carbon, reported to a product-category standard such as ISO 14025 and EN 15804; it states the impacts and sets no threshold.",
4739
+ {
4740
+ altLabels: ["EPD"],
4741
+ external: [
4742
+ mapping(
4743
+ "uniclass",
4744
+ "PC_10_65_26",
4745
+ "Environmental product declaration (EPD)",
4746
+ "close"
4747
+ ),
4748
+ mapping(
4749
+ "wikidata",
4750
+ "Q1345906",
4751
+ "Environmental product declaration",
4752
+ "close"
4753
+ )
4754
+ ],
4755
+ related: evidences(EMBODIED_CARBON),
4756
+ searchedWithout: [
4757
+ noAat("environmental product declaration | life cycle assessment")
4758
+ ]
4759
+ }
4760
+ )
4761
+ ];
4762
+
4763
+ // src/axes/intervention.ts
4764
+ var relatedTo7 = (...targets) => targets.map((target) => ({ predicate: "related-to", target }));
4765
+ var REFURBISHMENT = "intervention.refurbishment";
4766
+ var INTERVENTION_TERMS = [
4767
+ gapsTerm(
4768
+ "new-build",
4769
+ "New build",
4770
+ "Construction of a building from the ground up on a cleared or undeveloped site, rather than work to a building that already stands.",
4771
+ {
4772
+ altLabels: ["new construction", "ground-up construction"],
4773
+ external: [
4774
+ mapping("uniclass", "PC_20_30_56", "New-build", "close"),
4775
+ mapping("wikidata", "Q2202145", "new construction", "close")
4776
+ ],
4777
+ searchedWithout: [
4778
+ gapsSearchedAat("new build | new construction | new building")
4779
+ ]
4780
+ }
4781
+ ),
4782
+ gapsTerm(
4783
+ "refurbishment",
4784
+ "Refurbishment",
4785
+ "Work that renews and updates the fabric, finishes and services of a building that already stands, without changing what it is used for or how large it is.",
4786
+ {
4787
+ altLabels: ["renovation"],
4788
+ external: [
4789
+ mapping("aat", "300389648", "refurbishment", "close"),
4790
+ mapping("aat", "300077781", "renovation (process)", "close"),
4791
+ mapping("uniclass", "Ac_10_70_70", "Renovation", "close"),
4792
+ mapping("wikidata", "Q2144402", "renovation", "close")
4793
+ ]
4794
+ }
4795
+ ),
4796
+ gapsTerm(
4797
+ "retrofit",
4798
+ "Retrofit",
4799
+ "Work that adds new equipment, systems or fabric performance, most often for energy, comfort or safety, to a building that already stands, without redefining what it is for.",
4800
+ {
4801
+ altLabels: ["retrofitting"],
4802
+ external: [
4803
+ mapping("aat", "300109756", "retrofitting", "close"),
4804
+ mapping(
4805
+ "uniclass",
4806
+ "PM_35_40_70",
4807
+ "Retrofit energy requirements",
4808
+ "related"
4809
+ ),
4810
+ mapping("wikidata", "Q24662", "retrofitting", "close")
4811
+ ],
4812
+ related: [...relatedTo7(REFURBISHMENT, "requirement.net-zero")]
4813
+ }
4814
+ ),
4815
+ gapsTerm(
4816
+ "adaptive-reuse",
4817
+ "Adaptive reuse",
4818
+ "Conversion of an existing building to a use other than the one it was built for, keeping its structure and as much of its character as the new use allows.",
4819
+ {
4820
+ altLabels: ["building conversion"],
4821
+ external: [
4822
+ mapping("aat", "300056392", "adaptive reuse", "close"),
4823
+ mapping("wikidata", "Q2086116", "adaptive reuse", "close")
4824
+ ],
4825
+ related: [...relatedTo7(REFURBISHMENT, "requirement.embodied-carbon")],
4826
+ searchedWithout: [
4827
+ gapsSearchedUniclass("Adaptive reuse | conversion | change of use")
4828
+ ]
4829
+ }
4830
+ ),
4831
+ gapsTerm(
4832
+ "historic-preservation",
4833
+ "Historic preservation",
4834
+ "Work to protect a building of historic or cultural value and keep it in use, by maintaining, repairing, restoring or adapting it with its significance as the constraint.",
4835
+ {
4836
+ altLabels: ["heritage conservation"],
4837
+ external: [
4838
+ mapping("aat", "300054166", "historic preservation", "close"),
4839
+ mapping(
4840
+ "uniclass",
4841
+ "Ac_30_60_16",
4842
+ "Conservation activities",
4843
+ "related"
4844
+ ),
4845
+ mapping("wikidata", "Q914856", "historic preservation", "close")
4846
+ ]
4847
+ }
4848
+ ),
4849
+ gapsTerm(
4850
+ "restoration",
4851
+ "Restoration",
4852
+ "Work that returns a building, or part of one, to its form at a chosen earlier period by removing later additions and replacing lost fabric.",
4853
+ {
4854
+ external: [
4855
+ mapping("aat", "300053742", "restoration (process)", "close"),
4856
+ mapping("uniclass", "Ac_30_60_71", "Restoration activities", "close")
4857
+ ],
4858
+ related: relatedTo7("intervention.historic-preservation"),
4859
+ searchedWithout: [
4860
+ gapsSearchedWikidata(
4861
+ "building restoration | architectural restoration"
4862
+ )
4863
+ ]
4864
+ }
4865
+ ),
4866
+ gapsTerm(
4867
+ "extension",
4868
+ "Extension",
4869
+ "Work that adds floor area or volume to a building that already stands, attached to it, rather than altering what is already there.",
4870
+ {
4871
+ altLabels: ["building extension", "addition"],
4872
+ external: [
4873
+ mapping(
4874
+ "aat",
4875
+ "300445666",
4876
+ "additions (built work divisions)",
4877
+ "close"
4878
+ ),
4879
+ mapping("wikidata", "Q112228551", "building extension", "close")
4880
+ ],
4881
+ searchedWithout: [gapsSearchedUniclass("Extension | building extension")]
4882
+ }
4883
+ ),
4884
+ gapsTerm(
4885
+ "fit-out",
4886
+ "Fit-out",
4887
+ "Work that finishes and equips the interior of an existing shell or base-build space for its occupier: partitions, finishes, services terminals, joinery and furniture.",
4888
+ {
4889
+ altLabels: ["fitting out", "interior fit-out", "fitout"],
4890
+ external: [
4891
+ mapping("uniclass", "Ac_10_40_41", "Internal fitting out", "close")
4892
+ ],
4893
+ searchedWithout: [
4894
+ gapsSearchedAat("fit-out | fitting out | interior fit"),
4895
+ gapsSearchedWikidata("fit-out | interior fit out")
4896
+ ]
4897
+ }
4898
+ )
4899
+ ];
4900
+
4901
+ // src/axes/time-of-day.ts
4902
+ var MOODY = "mood.moody";
4903
+ var relatedTo8 = (...targets) => targets.map((target) => ({ predicate: "related-to", target }));
4904
+ var TIME_OF_DAY_HOUR_TERMS = [
4905
+ gapsTerm(
4906
+ "dawn",
4907
+ "Dawn",
4908
+ "The first light before sunrise, when the sky brightens and the sun is not yet up.",
4909
+ {
4910
+ external: [
4911
+ mapping("aat", "300343621", "dawn (time of day)", "close"),
4912
+ mapping("wikidata", "Q11326182", "dawn", "close")
4913
+ ],
4914
+ related: relatedTo8("mood.soft"),
4915
+ searchedWithout: [gapsSearchedUniclass("Dawn")]
4916
+ }
4917
+ ),
4918
+ gapsTerm(
4919
+ "morning",
4920
+ "Morning",
4921
+ "The hours from sunrise towards noon, with the light arriving low from the east and rising.",
4922
+ {
4923
+ altLabels: ["morning light"],
4924
+ external: [
4925
+ mapping("aat", "300343630", "morning", "close"),
4926
+ mapping("wikidata", "Q7722", "morning", "close")
4927
+ ],
4928
+ related: relatedTo8("daylight.aspect.east-facing"),
4929
+ searchedWithout: [gapsSearchedUniclass("Morning | morning light")]
4930
+ }
4931
+ ),
4932
+ gapsTerm(
4933
+ "golden-hour",
4934
+ "Golden hour",
4935
+ "The first and last hour of sunlight in the day, when the sun is low and the light is warm, directional and soft.",
4936
+ {
4937
+ altLabels: ["magic hour"],
4938
+ external: [mapping("wikidata", "Q3238843", "golden hour", "exact")],
4939
+ related: relatedTo8("mood.soft"),
4940
+ searchedWithout: [
4941
+ gapsSearchedAat("golden hour | magic hour"),
4942
+ gapsSearchedUniclass("Golden hour | magic hour")
4943
+ ]
4944
+ }
4945
+ ),
4946
+ gapsTerm(
4947
+ "dusk",
4948
+ "Dusk",
4949
+ "The time after sunset but before full dark, when the sky still holds light and a room's own lamps begin to count.",
4950
+ {
4951
+ external: [
4952
+ mapping("aat", "300343622", "dusk", "close"),
4953
+ mapping("wikidata", "Q11288132", "dusk", "close")
4954
+ ],
4955
+ related: relatedTo8(MOODY),
4956
+ searchedWithout: [gapsSearchedUniclass("Dusk | twilight")]
4957
+ }
4958
+ ),
4959
+ gapsTerm(
4960
+ "evening",
4961
+ "Evening",
4962
+ "The latter part of the day, from about sunset until bedtime, when daylight gives way to lamps.",
4963
+ {
4964
+ altLabels: ["evening light"],
4965
+ external: [
4966
+ mapping("aat", "300343633", "evening", "close"),
4967
+ mapping("wikidata", "Q7725", "evening", "close")
4968
+ ],
4969
+ related: relatedTo8("daylight.aspect.west-facing"),
4970
+ searchedWithout: [gapsSearchedUniclass("Evening | evening light")]
4971
+ }
4972
+ ),
4973
+ gapsTerm(
4974
+ "night",
4975
+ "Night",
4976
+ "The hours between sunset and sunrise, when a room is seen by artificial light or none and the windows are dark.",
4977
+ {
4978
+ external: [
4979
+ mapping("aat", "300133095", "night", "close"),
4980
+ mapping("wikidata", "Q575", "night", "close")
4981
+ ],
4982
+ related: relatedTo8(MOODY),
4983
+ searchedWithout: [gapsSearchedUniclass("Night")]
4984
+ }
4985
+ )
4986
+ ];
4987
+ var TIME_OF_DAY_LIT_BY_TERMS = [
4988
+ gapsTerm(
4989
+ "lamplit",
4990
+ "Lamplit",
4991
+ "Seen by the pools of light from table lamps, floor lamps and wall lights, rather than by one overhead source or by daylight.",
4992
+ {
4993
+ altLabels: ["lamplight", "lamp-lit"],
4994
+ related: relatedTo8("element.luminaire", "mood.sheltering"),
4995
+ searchedWithout: [
4996
+ gapsSearchedAat("lamplight | lamp-lit"),
4997
+ gapsSearchedUniclass("Lamplight | lamplit"),
4998
+ gapsSearchedWikidata("lamplight")
4999
+ ]
5000
+ }
5001
+ ),
5002
+ gapsTerm(
5003
+ "candlelit",
5004
+ "Candlelit",
5005
+ "Seen by the light of candles or open flame: low, warm and unsteady, with deep shadow beyond it.",
5006
+ {
5007
+ altLabels: ["candlelight", "candle-lit"],
5008
+ related: relatedTo8(MOODY),
5009
+ searchedWithout: [
5010
+ gapsSearchedAat("candlelight | candle-lit"),
5011
+ gapsSearchedUniclass("Candlelight | candlelit"),
5012
+ gapsSearchedWikidata("candlelight")
5013
+ ]
5014
+ }
5015
+ )
5016
+ ];
5017
+
5018
+ // src/axes/gaps-axes.ts
5019
+ var CERTIFICATION_AXIS = {
5020
+ boundary: "Certification is the named scheme or declaration that evidences a requirement: FSC for responsible sourcing, GREENGUARD for indoor air quality, an environmental product declaration for embodied carbon. Requirement is the need a project states and may be met by a different scheme or a test report; a scheme is never a kind of requirement, so the two are linked with related-to and never nested. It is not Procurement, which is how a thing is bought, and not Tier, which is where it sits in a market. Holding a certificate is a claim for a source system to evidence, as it is for Requirement.",
5021
+ facets: single(
5022
+ "certification",
5023
+ "Certification",
5024
+ CERTIFICATION_TERMS,
5025
+ GAPS_LIFECYCLE
5026
+ ),
5027
+ governance: GAPS_LIFECYCLE,
5028
+ label: "Certification",
5029
+ question: "What scheme or declaration evidences it?",
5030
+ slug: "certification",
5031
+ status: "authored"
5032
+ };
5033
+ var INTERVENTION_AXIS = {
5034
+ boundary: "Intervention is what a project does to a building: build it new, renew it, convert it, extend it, restore it or fit out its interior. It is not Sector, which is whom the building serves, not Typology, which is what it is, and not Period, which is when it was made: a warehouse converted to flats keeps its typology and carries the intervention adaptive reuse. It is not Strategy, which is what the design sets out to achieve, and not the trade doing the work. A project may carry several, such as a conversion with an extension.",
5035
+ facets: single(
5036
+ "intervention",
5037
+ "Intervention",
5038
+ INTERVENTION_TERMS,
5039
+ GAPS_LIFECYCLE
5040
+ ),
5041
+ governance: GAPS_LIFECYCLE,
5042
+ label: "Intervention",
5043
+ question: "What is being done to the building?",
5044
+ slug: "intervention",
5045
+ status: "authored"
5046
+ };
5047
+ var BRIEF_AXES = [
5048
+ CERTIFICATION_AXIS,
5049
+ INTERVENTION_AXIS
5050
+ ];
5051
+ var TIME_OF_DAY_AXIS = {
5052
+ boundary: "Time of day is the hour a scheme is designed for or evokes, and the kind of light it is seen by after dark, reached by `evokes` like Season, Place and Period are. It is not Season, which is the time of year and which an hour composes with; not Daylight, which records the natural light a room receives and the way it faces, a fact about the room and not about a scheme; and not Mood, where calm and moody are outcomes rather than hours. Lit by names a kind of source and nothing more: luminaires are Element terms, and no lighting design is recorded on any axis.",
5053
+ facets: [
5054
+ {
5055
+ governance: GAPS_LIFECYCLE,
5056
+ label: "Hour",
5057
+ slug: "hour",
5058
+ terms: TIME_OF_DAY_HOUR_TERMS
5059
+ },
5060
+ {
5061
+ governance: GAPS_LIFECYCLE,
5062
+ label: "Lit by",
5063
+ slug: "lit-by",
5064
+ terms: TIME_OF_DAY_LIT_BY_TERMS
5065
+ }
5066
+ ],
5067
+ governance: GAPS_LIFECYCLE,
5068
+ label: "Time of day",
5069
+ question: "Which hour is it meant for, and what is it lit by?",
5070
+ slug: "time-of-day",
5071
+ status: "authored"
5072
+ };
5073
+
4457
5074
  // src/axes/installation-layout.ts
4458
5075
  var REVIEW_DATE5 = "2026-08-31";
4459
5076
  var REVIEW_SOURCE4 = "@instruments/taxonomy TAX-45 reviewed implementation contract";
@@ -4483,7 +5100,7 @@ var mgLayoutTerm = (slug, label, definition, extra = {}) => ({
4483
5100
  ...extra
4484
5101
  });
4485
5102
  var RUNNING_BOND = "installation-layout.running-bond";
4486
- var relatedTo7 = (...targets) => targets.map((target) => ({ predicate: "related-to", target }));
5103
+ var relatedTo9 = (...targets) => targets.map((target) => ({ predicate: "related-to", target }));
4487
5104
  var INSTALLATION_LAYOUT_TERMS = [
4488
5105
  {
4489
5106
  ...term5(
@@ -4491,7 +5108,7 @@ var INSTALLATION_LAYOUT_TERMS = [
4491
5108
  "Stack bond",
4492
5109
  "Equal units align in straight rows and columns with joints continuing across both directions."
4493
5110
  ),
4494
- related: relatedTo7(RUNNING_BOND),
5111
+ related: relatedTo9(RUNNING_BOND),
4495
5112
  searchedWithout: [searchedUniclass3("stack bond")]
4496
5113
  },
4497
5114
  {
@@ -4508,7 +5125,7 @@ var INSTALLATION_LAYOUT_TERMS = [
4508
5125
  "Offset grid",
4509
5126
  "Units occupy a repeated grid whose adjacent rows or columns are displaced, without the directional course identity of running bond."
4510
5127
  ),
4511
- related: relatedTo7(RUNNING_BOND),
5128
+ related: relatedTo9(RUNNING_BOND),
4512
5129
  searchedWithout: [searchedUniclass3("Offset grid flooring")]
4513
5130
  },
4514
5131
  {
@@ -4539,7 +5156,7 @@ var INSTALLATION_LAYOUT_TERMS = [
4539
5156
  }
4540
5157
  }
4541
5158
  ),
4542
- related: relatedTo7("installation-layout.herringbone"),
5159
+ related: relatedTo9("installation-layout.herringbone"),
4543
5160
  searchedWithout: [searchedUniclass3("chevron flooring")]
4544
5161
  },
4545
5162
  {
@@ -4556,7 +5173,7 @@ var INSTALLATION_LAYOUT_TERMS = [
4556
5173
  "Pinwheel",
4557
5174
  "Units rotate around repeated centres, commonly with a smaller central unit."
4558
5175
  ),
4559
- related: relatedTo7("installation-layout.multi-size-modular"),
5176
+ related: relatedTo9("installation-layout.multi-size-modular"),
4560
5177
  searchedWithout: [searchedUniclass3("Pinwheel flooring")]
4561
5178
  },
4562
5179
  {
@@ -4565,7 +5182,7 @@ var INSTALLATION_LAYOUT_TERMS = [
4565
5182
  "Multi-size modular",
4566
5183
  "Two or more unit sizes repeat as one governed modular installation sequence."
4567
5184
  ),
4568
- related: relatedTo7("installation-layout.periodic-multi-shape"),
5185
+ related: relatedTo9("installation-layout.periodic-multi-shape"),
4569
5186
  searchedWithout: [searchedUniclass3("Multi-size modular flooring")]
4570
5187
  },
4571
5188
  {
@@ -4574,7 +5191,7 @@ var INSTALLATION_LAYOUT_TERMS = [
4574
5191
  "Ashlar",
4575
5192
  "Rectangular units of varied lengths or sizes form coursed horizontal joints with controlled vertical-joint displacement."
4576
5193
  ),
4577
- related: relatedTo7(RUNNING_BOND),
5194
+ related: relatedTo9(RUNNING_BOND),
4578
5195
  searchedWithout: [searchedUniclass3("ashlar masonry")]
4579
5196
  },
4580
5197
  {
@@ -4583,7 +5200,7 @@ var INSTALLATION_LAYOUT_TERMS = [
4583
5200
  "Random stagger",
4584
5201
  "Elongated units form courses whose end joints vary without a stable repeating offset."
4585
5202
  ),
4586
- related: relatedTo7(RUNNING_BOND),
5203
+ related: relatedTo9(RUNNING_BOND),
4587
5204
  searchedWithout: [searchedUniclass3("Random stagger flooring")]
4588
5205
  },
4589
5206
  {
@@ -4619,7 +5236,7 @@ var INSTALLATION_LAYOUT_TERMS = [
4619
5236
  "Versailles parquet",
4620
5237
  "Framed square panels, each filled with an interlocking diagonal basketweave lattice, repeat across the surface."
4621
5238
  ),
4622
- related: relatedTo7("installation-layout.basketweave"),
5239
+ related: relatedTo9("installation-layout.basketweave"),
4623
5240
  searchedWithout: [searchedUniclass3("Versailles parquet")]
4624
5241
  },
4625
5242
  {
@@ -4628,7 +5245,7 @@ var INSTALLATION_LAYOUT_TERMS = [
4628
5245
  "Chantilly parquet",
4629
5246
  "Framed square panels, each filled with an interlaced lattice of diamond or cross-shaped units, repeat across the surface."
4630
5247
  ),
4631
- related: relatedTo7("installation-layout.versailles"),
5248
+ related: relatedTo9("installation-layout.versailles"),
4632
5249
  searchedWithout: [searchedUniclass3("Chantilly parquet")]
4633
5250
  },
4634
5251
  // MG-2218. Narrower than herringbone: every double herringbone installation is also a broken
@@ -4650,7 +5267,7 @@ var INSTALLATION_LAYOUT_TERMS = [
4650
5267
  "Hexagonal parquet block",
4651
5268
  "Elongated units arranged radially in groups of six form repeating hexagonal parquet blocks across the surface."
4652
5269
  ),
4653
- related: relatedTo7("installation-layout.versailles"),
5270
+ related: relatedTo9("installation-layout.versailles"),
4654
5271
  searchedWithout: [searchedUniclass3("Hexagonal parquet block flooring")]
4655
5272
  }
4656
5273
  ];
@@ -4888,6 +5505,8 @@ var EN_14080 = "EN 14080:2013";
4888
5505
  var EN_16351 = "EN 16351:2021";
4889
5506
  var EN_14374 = "EN 14374:2004";
4890
5507
  var ENGINEERED_WOOD_SLUG = "engineered-wood";
5508
+ var MASS_TIMBER_SLUG = "mass-timber";
5509
+ var CROSS_LAMINATED_TIMBER = "cross-laminated timber";
4891
5510
  var MATERIAL_ENGINEERED_WOOD_TERMS = [
4892
5511
  // Families.
4893
5512
  compositionTerm(
@@ -4938,16 +5557,14 @@ var MATERIAL_ENGINEERED_WOOD_TERMS = [
4938
5557
  "A structural timber product manufactured from layers of timber boards stacked and bonded together with the grain of each layer rotated orthogonally to the adjacent layers.",
4939
5558
  EN_16351,
4940
5559
  {
4941
- altLabels: ["cross-laminated timber"],
4942
- broaderSlug: ENGINEERED_WOOD_SLUG,
5560
+ altLabels: [CROSS_LAMINATED_TIMBER],
5561
+ broaderSlug: MASS_TIMBER_SLUG,
4943
5562
  external: [
4944
- externalMapping(
4945
- "wikidata",
4946
- "Q911043",
4947
- "cross-laminated timber",
4948
- "close"
4949
- )
5563
+ externalMapping("wikidata", "Q911043", CROSS_LAMINATED_TIMBER, "close"),
5564
+ externalMapping("aat", "300444008", CROSS_LAMINATED_TIMBER, "close")
4950
5565
  ],
5566
+ // Re-parented beneath `mass-timber` on the date that term was added.
5567
+ reviewedAt: GAPS_DATE,
4951
5568
  searchedWithout: searchedUniclass5("CLT | cross-laminated timber | clt"),
4952
5569
  seenAs: ["cross laminated timber"]
4953
5570
  }
@@ -4988,15 +5605,18 @@ var MATERIAL_ENGINEERED_WOOD_TERMS = [
4988
5605
  EN_14080,
4989
5606
  {
4990
5607
  altLabels: ["glued laminated timber", "glue-laminated timber"],
4991
- broaderSlug: ENGINEERED_WOOD_SLUG,
5608
+ broaderSlug: MASS_TIMBER_SLUG,
4992
5609
  external: [
4993
5610
  externalMapping(
4994
5611
  "wikidata",
4995
5612
  "Q643449",
4996
5613
  "glued laminated timber",
4997
5614
  "close"
4998
- )
5615
+ ),
5616
+ externalMapping("aat", "300390588", "glue-laminated timber", "close")
4999
5617
  ],
5618
+ // Re-parented beneath `mass-timber` on the date that term was added.
5619
+ reviewedAt: GAPS_DATE,
5000
5620
  searchedWithout: searchedUniclass5(
5001
5621
  "Glulam | glued laminated timber | glue-laminated timber | glulam"
5002
5622
  )
@@ -5021,6 +5641,26 @@ var MATERIAL_ENGINEERED_WOOD_TERMS = [
5021
5641
  searchedWithout: searchedUniclass5("LVL | laminated veneer lumber | lvl")
5022
5642
  }
5023
5643
  ),
5644
+ // The structural class CLT and glulam sit in. Every CLT and every glulam member is mass timber,
5645
+ // so both nest here; LVL does not, because it is built up from veneers and not from large solid
5646
+ // elements. Added for TAX-66, and no outside vocabulary has it: AAT and Uniclass name the
5647
+ // products and not the class.
5648
+ authoredTerm(
5649
+ MASS_TIMBER_SLUG,
5650
+ "Mass timber",
5651
+ "Structural engineered wood made from large solid timber elements bonded into load-bearing panels, beams and columns, such as cross-laminated timber and glued laminated timber, rather than from small sections or fibre.",
5652
+ {
5653
+ broaderSlug: ENGINEERED_WOOD_SLUG,
5654
+ introducedAt: GAPS_DATE,
5655
+ provenance: GAPS_PROVENANCE,
5656
+ reviewedAt: GAPS_DATE,
5657
+ searchedWithout: [
5658
+ gapsSearchedUniclass("Mass timber | massive timber"),
5659
+ gapsSearchedAat("mass timber"),
5660
+ gapsSearchedWikidata("mass timber")
5661
+ ]
5662
+ }
5663
+ ),
5024
5664
  compositionTerm(
5025
5665
  "osb",
5026
5666
  "OSB",
@@ -7230,6 +7870,29 @@ var MATERIAL_MINERALS_TERMS = [
7230
7870
  externalMapping("wikidata", "Q6549153", "lime plaster", "close")
7231
7871
  ]
7232
7872
  }
7873
+ ),
7874
+ // Added for TAX-66. AAT and Uniclass both name it as a material (Uniclass by its French word,
7875
+ // Pisé), where Wikidata names the building technique, hence `close` on every mapping. Beneath
7876
+ // `mineral` because the body is subsoil, which is mineral whatever it is stabilised with. Not
7877
+ // filed under a material family: stabilised earth is cement-bound only in part, so no shelf holds
7878
+ // for every instance.
7879
+ authoredTerm(
7880
+ "rammed-earth",
7881
+ "Rammed earth",
7882
+ "Subsoil of sand, gravel and clay compacted in layers within formwork to form a monolithic wall or floor, with or without a cement or lime stabiliser.",
7883
+ {
7884
+ altLabels: ["pis\xE9", "pis\xE9 de terre"],
7885
+ broaderSlug: MINERAL_SLUG2,
7886
+ external: [
7887
+ externalMapping("aat", "300014365", "rammed earth", "close"),
7888
+ externalMapping("uniclass", "Ma_20_64", "Pis\xE9", "close"),
7889
+ externalMapping("wikidata", "Q1363009", "rammed earth", "close")
7890
+ ],
7891
+ introducedAt: GAPS_DATE,
7892
+ provenance: GAPS_PROVENANCE,
7893
+ related: [{ predicate: "related-to", target: "material.clay" }],
7894
+ reviewedAt: GAPS_DATE
7895
+ }
7233
7896
  )
7234
7897
  ];
7235
7898
 
@@ -10810,7 +11473,7 @@ var SNAPSHOT4 = "2026-08-21";
10810
11473
  var MS_MOOD = "ms_mood, a mood dictionary in a materials-retrieval system (src-05)";
10811
11474
  var ADR = "@instruments/taxonomy ADR 0001";
10812
11475
  var aat5 = (identifier, label, match) => ({ identifier, label, match, scheme: "aat" });
10813
- var relatedTo8 = (target) => ({
11476
+ var relatedTo10 = (target) => ({
10814
11477
  predicate: "related-to",
10815
11478
  target
10816
11479
  });
@@ -10862,7 +11525,7 @@ var MOOD_TERMS = [
10862
11525
  definition: "Sharp edges and clean contrast; the opposite meaning to soft.",
10863
11526
  label: "Crisp",
10864
11527
  provenance: { basis: "vendored", snapshot: SNAPSHOT4, source: MS_MOOD },
10865
- related: [relatedTo8("mood.soft")],
11528
+ related: [relatedTo10("mood.soft")],
10866
11529
  searchedWithout: [
10867
11530
  {
10868
11531
  date: SEARCHED_ON,
@@ -10877,7 +11540,7 @@ var MOOD_TERMS = [
10877
11540
  definition: "Dark, low-lit and enclosing, without necessarily being theatrical.",
10878
11541
  label: "Moody",
10879
11542
  provenance: { basis: "vendored", snapshot: SNAPSHOT4, source: MS_MOOD },
10880
- related: [relatedTo8("mood.dramatic")],
11543
+ related: [relatedTo10("mood.dramatic")],
10881
11544
  searchedWithout: [
10882
11545
  {
10883
11546
  date: SEARCHED_ON,
@@ -10936,7 +11599,7 @@ var MOOD_TERMS = [
10936
11599
  definition: "Sober and unplayful; the room signals that consequential things happen in it.",
10937
11600
  label: "Serious",
10938
11601
  provenance: { basis: "vendored", snapshot: SNAPSHOT4, source: MS_MOOD },
10939
- related: [relatedTo8("mood.playful")],
11602
+ related: [relatedTo10("mood.playful")],
10940
11603
  searchedWithout: [
10941
11604
  {
10942
11605
  date: SEARCHED_ON,
@@ -10953,7 +11616,7 @@ var MOOD_TERMS = [
10953
11616
  label: "Austere",
10954
11617
  note: "Authored here. Two estate vocabularies carry a monastic register (a rendering pipeline's `tactile-monastic`, a materials-retrieval system's `monastic`) that no ms_mood term reaches: `calm` and `serious` both understate it, and neither carries the renunciation.",
10955
11618
  provenance: { basis: "authored", source: ADR },
10956
- related: [relatedTo8("mood.calm"), relatedTo8("mood.serious")],
11619
+ related: [relatedTo10("mood.calm"), relatedTo10("mood.serious")],
10957
11620
  searchedWithout: [
10958
11621
  {
10959
11622
  date: SEARCHED_ON,
@@ -11006,7 +11669,7 @@ var MOOD_TERMS = [
11006
11669
  ],
11007
11670
  label: "Quiet Luxury",
11008
11671
  provenance: { basis: "vendored", snapshot: SNAPSHOT4, source: MS_MOOD },
11009
- related: [relatedTo8("mood.luxurious")],
11672
+ related: [relatedTo10("mood.luxurious")],
11010
11673
  searchedWithout: [
11011
11674
  {
11012
11675
  date: SEARCHED_ON,
@@ -11922,6 +12585,290 @@ var PATTERN_DIRECTIONALITY_TERMS = [
11922
12585
  }
11923
12586
  ];
11924
12587
 
12588
+ // src/axes/coverage-review.ts
12589
+ var COVERAGE_SOURCE = "Linear TAX-66 coverage review";
12590
+ var coverageTerm = (slug, label, definition, extra = {}) => ({
12591
+ definition,
12592
+ introducedAt: SEARCHED_ON_TAX66_COVERAGE,
12593
+ label,
12594
+ provenance: { basis: "authored", source: COVERAGE_SOURCE },
12595
+ reviewedAt: SEARCHED_ON_TAX66_COVERAGE,
12596
+ slug,
12597
+ ...extra
12598
+ });
12599
+ var referenceFor = (mapping2) => {
12600
+ if (mapping2.scheme === "aat") {
12601
+ return `Getty AAT ${mapping2.identifier} ${mapping2.label}, http://vocab.getty.edu/aat/${mapping2.identifier}`;
12602
+ }
12603
+ if (mapping2.scheme === "wikidata") {
12604
+ return `Wikidata ${mapping2.identifier} ${mapping2.label}, https://www.wikidata.org/wiki/${mapping2.identifier}`;
12605
+ }
12606
+ return void 0;
12607
+ };
12608
+ var grounded = (entry) => {
12609
+ const sources = (entry.external ?? []).map((mapping2) => referenceFor(mapping2)).filter((source) => source !== void 0);
12610
+ if (sources.length === 0) {
12611
+ return entry;
12612
+ }
12613
+ return {
12614
+ ...entry,
12615
+ provenance: {
12616
+ basis: "referenced",
12617
+ snapshot: SEARCHED_ON_TAX66_COVERAGE,
12618
+ source: sources.join("; ")
12619
+ }
12620
+ };
12621
+ };
12622
+ var wikidataMapping = (identifier, label, match) => ({ identifier, label, match, scheme: "wikidata" });
12623
+ var searchedAat2 = (query) => ({
12624
+ date: SEARCHED_ON_TAX66_COVERAGE,
12625
+ query,
12626
+ scheme: "aat",
12627
+ via: `${GETTY_SPARQL}; luc:term search, AAT preferred labels and English scope notes read`
12628
+ });
12629
+ var searchedWikidata2 = (query) => ({
12630
+ date: SEARCHED_ON_TAX66_COVERAGE,
12631
+ query,
12632
+ scheme: "wikidata",
12633
+ via: `${WIKIDATA_SEARCH}&language=en&format=json; labels and descriptions read`
12634
+ });
12635
+ var searchedUniclass11 = (query) => ({
12636
+ date: SEARCHED_ON_TAX66_COVERAGE,
12637
+ query,
12638
+ scheme: "uniclass",
12639
+ via: `${UNICLASS_DOWNLOAD}; every July 2026 table (Ac, Co, EF, En, FI, Ma, PC, PM, Pr, RK, Ro, SL, Ss, TE) searched by title`
12640
+ });
12641
+
12642
+ // src/axes/pattern-motifs.ts
12643
+ var PLAID_CHECK = "plaid-check";
12644
+ var CULTURAL_HERITAGE = "cultural-heritage";
12645
+ var MOTIF_DRAFTS = [
12646
+ {
12647
+ ...coverageTerm(
12648
+ "gingham",
12649
+ "Gingham",
12650
+ "A check of equal-width bands crossing at right angles in white and one colour, so that the crossings read as a third, deeper tone."
12651
+ ),
12652
+ broaderSlug: PLAID_CHECK,
12653
+ external: [
12654
+ {
12655
+ identifier: "300451340",
12656
+ label: "gingham",
12657
+ match: "close",
12658
+ scheme: "aat"
12659
+ },
12660
+ wikidataMapping("Q2289640", "gingham", "close")
12661
+ ],
12662
+ searchedWithout: [searchedUniclass11("gingham")]
12663
+ },
12664
+ {
12665
+ ...coverageTerm(
12666
+ "tartan",
12667
+ "Tartan",
12668
+ "A check of crossing bands in several colours, set out in a fixed sequence called a sett and repeated in both directions, traditionally woven in twill and tied to Scottish clans and districts."
12669
+ ),
12670
+ altLabels: ["tartan plaid"],
12671
+ broaderSlug: PLAID_CHECK,
12672
+ external: [
12673
+ {
12674
+ identifier: "300256600",
12675
+ label: "tartan",
12676
+ match: "close",
12677
+ scheme: "aat"
12678
+ },
12679
+ wikidataMapping("Q216797", "tartan", "close")
12680
+ ],
12681
+ related: [relatedTo4("pattern.type.cultural-heritage")],
12682
+ searchedWithout: [searchedUniclass11("tartan; plaid")]
12683
+ },
12684
+ {
12685
+ ...coverageTerm(
12686
+ "houndstooth",
12687
+ "Houndstooth",
12688
+ "A two-colour broken check in which each square is notched into four-pointed, tooth-like shapes, most often in black and white."
12689
+ ),
12690
+ altLabels: ["dogstooth", "dogtooth", "hounds-tooth"],
12691
+ broaderSlug: PLAID_CHECK,
12692
+ external: [
12693
+ {
12694
+ identifier: "300266442",
12695
+ label: "houndstooth",
12696
+ match: "exact",
12697
+ scheme: "aat"
12698
+ },
12699
+ wikidataMapping("Q911389", "houndstooth", "exact")
12700
+ ],
12701
+ searchedWithout: [searchedUniclass11("houndstooth; dogtooth")]
12702
+ },
12703
+ {
12704
+ ...coverageTerm(
12705
+ "argyle",
12706
+ "Argyle",
12707
+ "A repeat of diamonds in two or more colours, set on the diagonal and crossed by fine diagonal lines, as in knitwear and socks."
12708
+ ),
12709
+ altLabels: ["argyll"],
12710
+ broaderSlug: "geometric",
12711
+ searchedWithout: [
12712
+ searchedAat2("argyle; argyll; diamond pattern"),
12713
+ searchedWikidata2("argyle; argyle pattern; argyle diamond pattern"),
12714
+ searchedUniclass11("argyle; argyll")
12715
+ ]
12716
+ },
12717
+ {
12718
+ ...coverageTerm(
12719
+ "polka-dot",
12720
+ "Polka dot",
12721
+ "A repeat of evenly spaced, equal-sized filled circles on a contrasting ground."
12722
+ ),
12723
+ altLabels: ["polka dots"],
12724
+ broaderSlug: "geometric",
12725
+ external: [
12726
+ {
12727
+ identifier: "300417972",
12728
+ label: "polka dots",
12729
+ match: "exact",
12730
+ scheme: "aat"
12731
+ },
12732
+ wikidataMapping("Q2429962", "polka dot", "exact")
12733
+ ],
12734
+ searchedWithout: [searchedUniclass11("polka dot")]
12735
+ },
12736
+ {
12737
+ ...coverageTerm(
12738
+ "trellis",
12739
+ "Trellis",
12740
+ "A repeat of crossing or interlaced lines forming an open lattice of diamonds or lozenges, in the manner of garden trellis."
12741
+ ),
12742
+ altLabels: ["lattice", "latticework"],
12743
+ broaderSlug: "geometric",
12744
+ searchedWithout: [
12745
+ searchedAat2("trellis; lattice; treillage"),
12746
+ searchedWikidata2("trellis; trellis pattern; lattice pattern"),
12747
+ searchedUniclass11("trellis; lattice")
12748
+ ]
12749
+ },
12750
+ {
12751
+ ...coverageTerm(
12752
+ "fish-scale",
12753
+ "Fish-scale",
12754
+ "A repeat of overlapping rounded arcs set in staggered rows, like the scales of a fish, whether printed, woven or formed by laid units."
12755
+ ),
12756
+ altLabels: ["fish scale", "fishscale", "mermaid scale"],
12757
+ broaderSlug: "geometric",
12758
+ external: [
12759
+ {
12760
+ identifier: "300010142",
12761
+ label: "scale pattern",
12762
+ match: "exact",
12763
+ scheme: "aat"
12764
+ }
12765
+ ],
12766
+ // Scallop on UNIT SHAPE is the outline of one unit; this is the repeat those units, or a print,
12767
+ // can make. A fish-scale tile is a scallop unit, and a printed fish-scale is no unit at all, so
12768
+ // the two are linked and not merged.
12769
+ related: [relatedTo4("unit-shape.scallop")],
12770
+ searchedWithout: [
12771
+ searchedWikidata2("fish scale; fish scale pattern; scale pattern"),
12772
+ searchedUniclass11("fish scale; scallop; imbricated")
12773
+ ]
12774
+ },
12775
+ {
12776
+ ...coverageTerm(
12777
+ "ombre",
12778
+ "Ombre",
12779
+ "A gradient that shades one colour, or two neighbouring colours, from light to deep across the surface."
12780
+ ),
12781
+ altLabels: ["ombr\xE9"],
12782
+ broaderSlug: "gradient",
12783
+ searchedWithout: [
12784
+ searchedAat2("ombre; ombr\xE9; shading; gradation"),
12785
+ searchedWikidata2("ombre; ombr\xE9; ombre dyeing"),
12786
+ searchedUniclass11("ombre; ombr\xE9")
12787
+ ]
12788
+ },
12789
+ {
12790
+ ...coverageTerm(
12791
+ "kilim",
12792
+ "Kilim",
12793
+ "A flat-woven repeat of stepped medallions, diamonds and bands in the manner of the tapestry-woven rugs of Anatolia, Persia and the Balkans."
12794
+ ),
12795
+ broaderSlug: CULTURAL_HERITAGE,
12796
+ external: [
12797
+ {
12798
+ identifier: "300186972",
12799
+ label: "kilims",
12800
+ match: "related",
12801
+ scheme: "aat"
12802
+ },
12803
+ wikidataMapping("Q585358", "kilim", "related")
12804
+ ],
12805
+ related: [relatedTo4("construction.woven")],
12806
+ searchedWithout: [searchedUniclass11("kilim")]
12807
+ },
12808
+ {
12809
+ ...coverageTerm(
12810
+ "ikat",
12811
+ "Ikat",
12812
+ "A repeat of soft, feathered-edge motifs left by tie-dyeing warp or weft threads before they are woven, and imitated in prints."
12813
+ ),
12814
+ broaderSlug: CULTURAL_HERITAGE,
12815
+ external: [
12816
+ {
12817
+ identifier: "300249861",
12818
+ label: "ikat",
12819
+ match: "related",
12820
+ scheme: "aat"
12821
+ },
12822
+ wikidataMapping("Q140101", "Ikat", "related")
12823
+ ],
12824
+ note: "Ikat names a dyeing technique as well as the pattern it leaves. A term sits on one axis, so this is the pattern; both external concepts are the technique and are mapped as related. The technique is not yet a Construction term.",
12825
+ related: [relatedTo4("construction.woven")],
12826
+ searchedWithout: [searchedUniclass11("ikat")]
12827
+ },
12828
+ {
12829
+ ...coverageTerm(
12830
+ "chinoiserie",
12831
+ "Chinoiserie",
12832
+ "A pictorial repeat of pagodas, figures, birds and flowering branches, in a European imitation of Chinese and East Asian decorative art."
12833
+ ),
12834
+ broaderSlug: CULTURAL_HERITAGE,
12835
+ external: [
12836
+ {
12837
+ identifier: "300021167",
12838
+ label: "Chinoiserie",
12839
+ match: "close",
12840
+ scheme: "aat"
12841
+ },
12842
+ wikidataMapping("Q863679", "chinoiserie", "close")
12843
+ ],
12844
+ related: [relatedTo4("pattern.type.scenic")],
12845
+ searchedWithout: [searchedUniclass11("chinoiserie")]
12846
+ },
12847
+ {
12848
+ ...coverageTerm(
12849
+ "craquelure",
12850
+ "Craquelure",
12851
+ "A network of fine, irregular cracks across the surface, as in aged paint and varnish, and made on purpose in crackle glaze, crackle paint and printed imitations."
12852
+ ),
12853
+ altLabels: ["crackle", "crackled", "crackle effect"],
12854
+ external: [
12855
+ {
12856
+ identifier: "300228345",
12857
+ label: "crackle",
12858
+ match: "exact",
12859
+ scheme: "aat"
12860
+ },
12861
+ wikidataMapping("Q1329067", "craquelure", "exact")
12862
+ ],
12863
+ related: [
12864
+ relatedTo4("finish.treatment.antiqued"),
12865
+ relatedTo4("finish.treatment.glazed")
12866
+ ],
12867
+ searchedWithout: [searchedUniclass11("craquelure; crackle")]
12868
+ }
12869
+ ];
12870
+ var PATTERN_MOTIF_TERMS = MOTIF_DRAFTS.map(grounded);
12871
+
11925
12872
  // src/axes/pattern.ts
11926
12873
  var SOURCE4 = "pattern vocabulary in a furnishings retailer (src-03)";
11927
12874
  var SNAPSHOT6 = "2026-08-25";
@@ -12356,7 +13303,8 @@ var PATTERN_TYPE_TERMS = [
12356
13303
  "A surface intended to read as woven threads rather than its construction."
12357
13304
  ),
12358
13305
  searchedWithout: [searchedUniclass3("Woven effect")]
12359
- }
13306
+ },
13307
+ ...PATTERN_MOTIF_TERMS
12360
13308
  ];
12361
13309
  var PATTERN_TERMS = [
12362
13310
  ...PATTERN_TYPE_TERMS,
@@ -12373,7 +13321,7 @@ var AUTHORED4 = {
12373
13321
  source: "@instruments/taxonomy ADR 0001"
12374
13322
  };
12375
13323
  var aat6 = (identifier, label, match) => ({ identifier, label, match, scheme: "aat" });
12376
- var relatedTo9 = (target) => ({
13324
+ var relatedTo11 = (target) => ({
12377
13325
  predicate: "related-to",
12378
13326
  target
12379
13327
  });
@@ -12443,7 +13391,7 @@ var PERIOD_TERMS = [
12443
13391
  label: "Baroque",
12444
13392
  note: "Stuart (1603-1714) is the British dynastic label for nearly the same span, and by this axis's own rule would be the better id; `baroque` is kept because it is what the English-language trade says of a building of this date anywhere in Europe. Jacobean (1603-1625) is a sub-span, not a synonym. Also a style name - see the header.",
12445
13393
  provenance: AUTHORED4,
12446
- related: [relatedTo9("period.renaissance")],
13394
+ related: [relatedTo11("period.renaissance")],
12447
13395
  slug: "baroque",
12448
13396
  span: {
12449
13397
  circa: true,
@@ -12548,7 +13496,7 @@ var PERIOD_TERMS = [
12548
13496
  label: "Edwardian",
12549
13497
  note: "The reign ends in 1910 but the building manner runs to the outbreak of war, and the trade dates it that way. NO US EQUIVALENT EXISTS and none is invented here - the American labels reached for at this date (Craftsman, Arts and Crafts, Prairie) are all styles, and putting one of them here would be the exact error this axis was built to stop.",
12550
13498
  provenance: AUTHORED4,
12551
- related: [relatedTo9("period.victorian")],
13499
+ related: [relatedTo11("period.victorian")],
12552
13500
  slug: "edwardian",
12553
13501
  span: {
12554
13502
  circa: false,
@@ -12636,7 +13584,7 @@ var PERIOD_TERMS = [
12636
13584
  label: "Late Twentieth Century",
12637
13585
  note: "THE WEAKEST TERM ON THIS AXIS, and flagged rather than dressed up. The trade has no settled label for these thirty years - it dates by decade, or reaches for a style name instead - so this is a bucket the axis needs for completeness rather than a period anyone asks for by name. Expect it to be split or renamed once there is usage evidence to split it on.",
12638
13586
  provenance: AUTHORED4,
12639
- related: [relatedTo9("period.mid-century")],
13587
+ related: [relatedTo11("period.mid-century")],
12640
13588
  slug: "late-century",
12641
13589
  span: {
12642
13590
  circa: true,
@@ -12662,7 +13610,7 @@ var PERIOD_TERMS = [
12662
13610
  label: "Contemporary",
12663
13611
  note: "DELIBERATELY OPEN-ENDED, and it will need a successor bracket eventually. Collides by name with `style.contemporary`, which means the prevailing current idiom rather than a date; the axis prefix disambiguates. A 2024 building in full Georgian pastiche is `period.contemporary` and is emphatically not `style.contemporary`, which is the case that shows why the two cannot be merged.",
12664
13612
  provenance: AUTHORED4,
12665
- seenAs: ["Contemporary", "modern", "new build"],
13613
+ seenAs: ["Contemporary", "modern"],
12666
13614
  slug: "contemporary",
12667
13615
  span: {
12668
13616
  circa: true,
@@ -12680,7 +13628,7 @@ var SNAPSHOT7 = "2026-08-21";
12680
13628
  var ADR2 = "@instruments/taxonomy ADR 0001";
12681
13629
  var PLATFORM_CONTEXTS = "CONTEXTS in an architecture-projects platform (src-01)";
12682
13630
  var aat7 = (identifier, label, match) => ({ identifier, label, match, scheme: "aat" });
12683
- var relatedTo10 = (target) => ({
13631
+ var relatedTo12 = (target) => ({
12684
13632
  predicate: "related-to",
12685
13633
  target
12686
13634
  });
@@ -12915,7 +13863,7 @@ var PLACE_LANDSCAPE_TERMS = [
12915
13863
  snapshot: SNAPSHOT7,
12916
13864
  source: PLATFORM_CONTEXTS
12917
13865
  },
12918
- related: [relatedTo10("place.landscape.coastal")],
13866
+ related: [relatedTo12("place.landscape.coastal")],
12919
13867
  slug: "waterfront"
12920
13868
  },
12921
13869
  {
@@ -13026,7 +13974,7 @@ var PLACE_LANDSCAPE_TERMS = [
13026
13974
  snapshot: SNAPSHOT7,
13027
13975
  source: PLATFORM_CONTEXTS
13028
13976
  },
13029
- related: [relatedTo10("place.landscape.urban")],
13977
+ related: [relatedTo12("place.landscape.urban")],
13030
13978
  slug: "suburban"
13031
13979
  },
13032
13980
  {
@@ -13052,31 +14000,367 @@ var PLACE_LANDSCAPE_TERMS = [
13052
14000
  }
13053
14001
  ];
13054
14002
 
13055
- // src/axes/product-category.ts
14003
+ // src/axes/product-category-shared.ts
13056
14004
  var uniclass5 = (slug, label, match) => ({
13057
14005
  identifier: slug,
13058
14006
  label,
13059
14007
  match,
13060
14008
  scheme: "uniclass"
13061
14009
  });
14010
+ var aat8 = (identifier, label, match) => ({ identifier, label, match, scheme: "aat" });
13062
14011
  var typicallyIn4 = (spaceId) => ({
13063
14012
  predicate: "typically-in",
13064
14013
  target: `space.${spaceId}`
13065
14014
  });
13066
- var relatedTo11 = (...targets) => targets.map((target) => ({ predicate: "related-to", target }));
14015
+ var relatedTo13 = (...targets) => targets.map((target) => ({ predicate: "related-to", target }));
14016
+
14017
+ // src/axes/product-category-furniture.ts
14018
+ var LIVING_ROOM = "living-room";
14019
+ var DINING_ROOM = "dining-room";
14020
+ var CASE_FURNITURE = "case furniture";
14021
+ var AAT_CASE_FURNITURE = aat8("300038860", CASE_FURNITURE, "exact");
14022
+ var FURNITURE_DRAFTS = [
14023
+ coverageTerm(
14024
+ "furniture",
14025
+ "Furniture",
14026
+ "A made-up piece for sitting, reclining, working at or storing things, bought as a product rather than as a material, covering or luminaire, whether it ends up loose or built in.",
14027
+ {
14028
+ external: [
14029
+ aat8("300037680", "furniture", "exact"),
14030
+ wikidataMapping("Q14745", "furniture", "exact"),
14031
+ uniclass5("Pr_40_50", "Furnishings", "related")
14032
+ ],
14033
+ related: relatedTo13("application.furniture")
14034
+ }
14035
+ ),
14036
+ // SEATING
14037
+ coverageTerm(
14038
+ "armchair",
14039
+ "Armchair",
14040
+ "A seat for one person with a back and arms, usually upholstered; not a sofa, which seats two or more, and not a dining chair.",
14041
+ {
14042
+ altLabels: ["easy chair"],
14043
+ broaderSlug: "seating",
14044
+ external: [
14045
+ aat8("300037776", "armchairs", "exact"),
14046
+ wikidataMapping("Q11285759", "armchair", "exact"),
14047
+ uniclass5("Pr_40_50_12_26", "Easy chairs", "close"),
14048
+ uniclass5("Pr_40_50_12_48", "Lounge chairs", "close")
14049
+ ],
14050
+ related: [typicallyIn4(LIVING_ROOM), typicallyIn4("lounge")]
14051
+ }
14052
+ ),
14053
+ coverageTerm(
14054
+ "dining-chair",
14055
+ "Dining chair",
14056
+ "A chair made to be sat in at a dining table, with or without arms, independent of its material and upholstery.",
14057
+ {
14058
+ broaderSlug: "seating",
14059
+ external: [
14060
+ aat8("300038379", "dining chairs", "exact"),
14061
+ wikidataMapping("Q124964396", "dining chair", "exact"),
14062
+ uniclass5("Pr_40_50_12_22", "Dining chairs", "exact")
14063
+ ],
14064
+ related: [typicallyIn4(DINING_ROOM), typicallyIn4("restaurant")]
14065
+ }
14066
+ ),
14067
+ coverageTerm(
14068
+ "bar-stool",
14069
+ "Bar stool",
14070
+ "A tall stool for sitting at a bar, counter or breakfast island, with or without a low back or footrest.",
14071
+ {
14072
+ altLabels: ["barstool", "counter stool"],
14073
+ broaderSlug: "seating",
14074
+ external: [
14075
+ aat8("300038422", "barstools", "exact"),
14076
+ wikidataMapping("Q376339", "bar stool", "exact"),
14077
+ uniclass5("Pr_40_50_12_85", "Stools", "broad")
14078
+ ],
14079
+ related: [typicallyIn4("bar"), typicallyIn4("kitchen")]
14080
+ }
14081
+ ),
14082
+ coverageTerm(
14083
+ "ottoman",
14084
+ "Ottoman",
14085
+ "A low upholstered seat or footrest without back or arms, sometimes hollow for storage; not a long ottoman sofa and not an ottoman bed.",
14086
+ {
14087
+ altLabels: ["pouf", "pouffe"],
14088
+ broaderSlug: "seating",
14089
+ external: [
14090
+ aat8("300038442", "ottoman footstools", "close"),
14091
+ aat8("300038607", "pouffes", "close"),
14092
+ wikidataMapping("Q3545350", "ottoman", "exact"),
14093
+ uniclass5("Pr_40_50_12_59", "Ottomans", "exact")
14094
+ ],
14095
+ related: [typicallyIn4(LIVING_ROOM), typicallyIn4("bedroom")],
14096
+ // Footstool is the narrower thing: AAT and Uniclass file the ottoman footstool beneath
14097
+ // footstools, and a footstool need not be an ottoman, so it is a wild form and not a name.
14098
+ seenAs: ["footstool"]
14099
+ }
14100
+ ),
14101
+ coverageTerm(
14102
+ "bench",
14103
+ "Bench",
14104
+ "A long seat for two or more people, with or without a back, independent of its material and of whether it is upholstered.",
14105
+ {
14106
+ broaderSlug: "seating",
14107
+ external: [
14108
+ aat8("300038494", "benches (furniture)", "exact"),
14109
+ wikidataMapping("Q204776", "bench", "exact"),
14110
+ uniclass5("Pr_40_50_12_07", "Benches", "exact")
14111
+ ],
14112
+ related: [typicallyIn4("entry"), typicallyIn4("boot-room")]
14113
+ }
14114
+ ),
14115
+ coverageTerm(
14116
+ "chaise-longue",
14117
+ "Chaise longue",
14118
+ "An upholstered seat long enough to support the legs, with a back or headrest at one end, for reclining indoors.",
14119
+ {
14120
+ broaderSlug: "seating",
14121
+ external: [
14122
+ aat8("300038151", "chaises longues", "exact"),
14123
+ wikidataMapping("Q1059232", "chaise longue", "exact"),
14124
+ uniclass5("Pr_40_50_12_14", "Chaises longues", "exact")
14125
+ ],
14126
+ related: [typicallyIn4(LIVING_ROOM), typicallyIn4("bedroom")],
14127
+ seenAs: ["chaise lounge"]
14128
+ }
14129
+ ),
14130
+ // BED
14131
+ coverageTerm(
14132
+ "daybed",
14133
+ "Daybed",
14134
+ "An extended seat, generally armless and with one backed end, used for lounging by day and lying on at need; a bed as well as a seat, and not a sofa bed.",
14135
+ {
14136
+ broaderSlug: "bed",
14137
+ external: [
14138
+ aat8("300038586", "daybeds", "exact"),
14139
+ wikidataMapping("Q5243076", "daybed", "exact"),
14140
+ uniclass5("Pr_40_50_06_21", "Daybeds", "exact")
14141
+ ],
14142
+ related: [
14143
+ ...relatedTo13("product-category.seating"),
14144
+ typicallyIn4(LIVING_ROOM),
14145
+ typicallyIn4("guest-bedroom")
14146
+ ]
14147
+ }
14148
+ ),
14149
+ coverageTerm(
14150
+ "headboard",
14151
+ "Headboard",
14152
+ "A board or panel fixed or standing at the head of a bed, upholstered or bare; the bed it belongs to is a separate product.",
14153
+ {
14154
+ altLabels: ["bedhead", "bed head"],
14155
+ broaderSlug: "bed",
14156
+ external: [
14157
+ aat8("300040447", "headboards", "exact"),
14158
+ wikidataMapping("Q5689512", "headboard", "exact"),
14159
+ uniclass5("Pr_40_50_06_37", "Headboards", "exact")
14160
+ ],
14161
+ related: [
14162
+ typicallyIn4("bedroom"),
14163
+ ...relatedTo13("application.furniture-headboard")
14164
+ ]
14165
+ }
14166
+ ),
14167
+ // TABLE
14168
+ coverageTerm(
14169
+ "dining-table",
14170
+ "Dining table",
14171
+ "A table made to eat meals at, whatever its top, base or size, and including extending tables.",
14172
+ {
14173
+ broaderSlug: "table",
14174
+ external: [
14175
+ aat8("300039648", "dining tables", "exact"),
14176
+ wikidataMapping("Q4396855", "dining table", "exact"),
14177
+ uniclass5("Pr_40_50_21_22", "Dining tables", "exact")
14178
+ ],
14179
+ related: [typicallyIn4(DINING_ROOM), typicallyIn4("restaurant")]
14180
+ }
14181
+ ),
14182
+ coverageTerm(
14183
+ "coffee-table",
14184
+ "Coffee table",
14185
+ "A low table set in front of a sofa or among armchairs, at a height to reach from a seat.",
14186
+ {
14187
+ broaderSlug: "table",
14188
+ external: [
14189
+ aat8("300039640", "coffee tables", "exact"),
14190
+ wikidataMapping("Q2407432", "coffee table", "exact"),
14191
+ uniclass5("Pr_40_50_21_14", "Coffee tables", "exact")
14192
+ ],
14193
+ related: [typicallyIn4(LIVING_ROOM), typicallyIn4("lounge")]
14194
+ }
14195
+ ),
14196
+ coverageTerm(
14197
+ "side-table",
14198
+ "Side table",
14199
+ "A small table standing beside a sofa, armchair or bed to hold a lamp, a drink or a book; not a console table, which stands against a wall, and not a bedside cabinet.",
14200
+ {
14201
+ altLabels: ["end table", "lamp table"],
14202
+ broaderSlug: "table",
14203
+ external: [
14204
+ aat8("300039998", "end tables", "close"),
14205
+ wikidataMapping("Q65791322", "end table", "close"),
14206
+ uniclass5("Pr_40_50_21_58", "Occasional tables", "broad")
14207
+ ],
14208
+ related: [typicallyIn4(LIVING_ROOM), typicallyIn4("lounge")]
14209
+ }
14210
+ ),
14211
+ coverageTerm(
14212
+ "console-table",
14213
+ "Console table",
14214
+ "A narrow table made to stand against a wall, in a hall or behind a sofa, with its back left plain or unfinished.",
14215
+ {
14216
+ altLabels: ["hall table", "sofa table"],
14217
+ broaderSlug: "table",
14218
+ external: [
14219
+ aat8("300039580", "console tables", "exact"),
14220
+ wikidataMapping("Q7887380", "console", "close"),
14221
+ uniclass5("Pr_40_50_21_16", "Console tables", "exact")
14222
+ ],
14223
+ related: [typicallyIn4("entry"), typicallyIn4("hallway")]
14224
+ }
14225
+ ),
14226
+ coverageTerm(
14227
+ "desk",
14228
+ "Desk",
14229
+ "A table made for reading, writing or working at, with or without drawers, a hutch or a return; not a fitted counter.",
14230
+ {
14231
+ altLabels: ["writing desk"],
14232
+ broaderSlug: "table",
14233
+ external: [
14234
+ aat8("300039338", "desks", "exact"),
14235
+ wikidataMapping("Q1064858", "desk", "exact"),
14236
+ uniclass5("Pr_40_50_21_21", "Desks", "exact")
14237
+ ],
14238
+ related: [
14239
+ typicallyIn4("study"),
14240
+ typicallyIn4("private-office"),
14241
+ typicallyIn4("open-office")
14242
+ ]
14243
+ }
14244
+ ),
14245
+ // STORAGE
14246
+ coverageTerm(
14247
+ "casegoods",
14248
+ "Casegoods",
14249
+ "Freestanding, non-upholstered storage furniture built as a boxlike carcass with doors, drawers or shelves, such as a sideboard, chest of drawers, wardrobe or bookcase; not fitted joinery.",
14250
+ {
14251
+ altLabels: ["case goods", CASE_FURNITURE],
14252
+ broaderSlug: "storage",
14253
+ external: [
14254
+ AAT_CASE_FURNITURE,
14255
+ wikidataMapping("Q95966197", "case furniture", "exact"),
14256
+ uniclass5("Pr_40_30_87", "Storage units and cupboards", "broad")
14257
+ ]
14258
+ }
14259
+ ),
14260
+ coverageTerm(
14261
+ "sideboard",
14262
+ "Sideboard",
14263
+ "A long, low carcass of cupboards and drawers topped by a surface, standing against a wall to hold tableware and serve from; not a kitchen base unit.",
14264
+ {
14265
+ altLabels: ["buffet", "credenza"],
14266
+ broaderSlug: "casegoods",
14267
+ external: [
14268
+ aat8("300039306", "sideboards (furniture)", "exact"),
14269
+ wikidataMapping("Q1762308", "sideboard", "exact"),
14270
+ uniclass5("Pr_40_30_87_81", "Sideboards", "exact")
14271
+ ],
14272
+ related: [typicallyIn4(DINING_ROOM)]
14273
+ }
14274
+ ),
14275
+ coverageTerm(
14276
+ "chest-of-drawers",
14277
+ "Chest of drawers",
14278
+ "A freestanding carcass fitted with stacked drawers for clothes and linen; not a storage chest with a lid, and not fitted drawer joinery.",
14279
+ {
14280
+ broaderSlug: "casegoods",
14281
+ external: [
14282
+ aat8("300039009", "chests of drawers", "exact"),
14283
+ wikidataMapping("Q14169227", "chest of drawers", "exact"),
14284
+ uniclass5("Pr_40_30_87_25", "Drawer units", "close")
14285
+ ],
14286
+ related: [typicallyIn4("bedroom")],
14287
+ seenAs: ["Dresser", "Drawers"]
14288
+ }
14289
+ ),
14290
+ coverageTerm(
14291
+ "wardrobe",
14292
+ "Wardrobe",
14293
+ "A freestanding upright cabinet for hanging and storing clothes, with doors and often drawers; not the fitted wardrobe built into a room, which is joinery.",
14294
+ {
14295
+ altLabels: ["armoire", "freestanding wardrobe"],
14296
+ broaderSlug: "casegoods",
14297
+ external: [
14298
+ aat8("300039237", "wardrobes (case furniture)", "exact"),
14299
+ wikidataMapping("Q106106", "wardrobe", "exact"),
14300
+ uniclass5("Pr_40_30_87_96", "Wardrobes", "exact")
14301
+ ],
14302
+ related: [
14303
+ typicallyIn4("bedroom"),
14304
+ typicallyIn4("dressing-room"),
14305
+ ...relatedTo13("element.wardrobe")
14306
+ ]
14307
+ }
14308
+ ),
14309
+ coverageTerm(
14310
+ "bookcase",
14311
+ "Bookcase",
14312
+ "A freestanding case of shelves for books and display, open or fronted with doors or glass; not fitted shelving built into a wall.",
14313
+ {
14314
+ altLabels: ["bookshelf"],
14315
+ broaderSlug: "casegoods",
14316
+ external: [
14317
+ aat8("300143716", "bookcases", "close"),
14318
+ wikidataMapping("Q215857", "bookcase", "exact"),
14319
+ uniclass5("Pr_40_30_78_58", "Open bookcases", "narrow"),
14320
+ uniclass5("Pr_40_30_87_33", "Glazed bookcases", "narrow")
14321
+ ],
14322
+ related: [
14323
+ typicallyIn4("study"),
14324
+ typicallyIn4("library"),
14325
+ typicallyIn4(LIVING_ROOM)
14326
+ ]
14327
+ }
14328
+ ),
14329
+ coverageTerm(
14330
+ "shelving",
14331
+ "Shelving",
14332
+ "A freestanding unit or system of open shelves for storing and displaying things, on a frame, a ladder or uprights; not a bookcase with a carcass and not fitted shelving.",
14333
+ {
14334
+ altLabels: ["shelving unit", "shelf unit"],
14335
+ broaderSlug: "storage",
14336
+ external: [
14337
+ aat8("300375206", "shelving units", "close"),
14338
+ wikidataMapping("Q2637814", "rack with shelves", "close"),
14339
+ uniclass5("Pr_40_30_78_78", "Shelves", "close")
14340
+ ],
14341
+ related: [
14342
+ typicallyIn4("library"),
14343
+ typicallyIn4("storage"),
14344
+ ...relatedTo13("element.shelving")
14345
+ ]
14346
+ }
14347
+ )
14348
+ ];
14349
+ var FURNITURE_TERMS = FURNITURE_DRAFTS.map(grounded);
14350
+
14351
+ // src/axes/product-category.ts
13067
14352
  var LUMINAIRES = uniclass5(
13068
14353
  "Pr_70_70_48",
13069
14354
  "Luminaires, lighting track and lighting accessories",
13070
14355
  "broad"
13071
14356
  );
13072
- var aat8 = (identifier, label, match) => ({ identifier, label, match, scheme: "aat" });
13073
- var searchedAat2 = (query) => ({
14357
+ var searchedAat3 = (query) => ({
13074
14358
  date: SEARCHED_ON,
13075
14359
  query,
13076
14360
  scheme: "aat",
13077
14361
  via: "https://vocab.getty.edu:443/sparql; luc:term searches (separated by semicolons), AAT preferred labels and English scope notes, LIMIT 150"
13078
14362
  });
13079
- var searchedUniclass11 = (query) => ({
14363
+ var searchedUniclass12 = (query) => ({
13080
14364
  date: SEARCHED_ON,
13081
14365
  query,
13082
14366
  scheme: "uniclass",
@@ -13143,7 +14427,7 @@ var PRODUCT_CATEGORY_TERMS = [
13143
14427
  )
13144
14428
  ],
13145
14429
  introducedAt: "2026-08-30",
13146
- related: relatedTo11("application.flooring"),
14430
+ related: relatedTo13("application.flooring"),
13147
14431
  reviewedAt: "2026-08-31"
13148
14432
  }
13149
14433
  ),
@@ -13158,7 +14442,7 @@ var PRODUCT_CATEGORY_TERMS = [
13158
14442
  ],
13159
14443
  related: [
13160
14444
  typicallyIn4("kitchen"),
13161
- ...relatedTo11("element.worktop", "application.countertop")
14445
+ ...relatedTo13("element.worktop", "application.countertop")
13162
14446
  ]
13163
14447
  }
13164
14448
  ),
@@ -13171,7 +14455,7 @@ var PRODUCT_CATEGORY_TERMS = [
13171
14455
  aat8("300014866", "flooring", "broad"),
13172
14456
  uniclass5("Pr_35_57_71", "Resilient floor coverings", "narrow")
13173
14457
  ],
13174
- related: relatedTo11("application.flooring", "element.floor-finish")
14458
+ related: relatedTo13("application.flooring", "element.floor-finish")
13175
14459
  }
13176
14460
  ),
13177
14461
  term8(
@@ -13217,7 +14501,7 @@ var PRODUCT_CATEGORY_TERMS = [
13217
14501
  "A light fitting supplied as a unit - housing, light engine and gear - rather than the light it casts.",
13218
14502
  {
13219
14503
  external: [aat8("300180081", "lighting fixtures", "narrow"), LUMINAIRES],
13220
- related: relatedTo11("element.luminaire", "application.lighting")
14504
+ related: relatedTo13("element.luminaire", "application.lighting")
13221
14505
  }
13222
14506
  ),
13223
14507
  fromCorpus(
@@ -13250,6 +14534,7 @@ var PRODUCT_CATEGORY_TERMS = [
13250
14534
  "Seating",
13251
14535
  "A loose furniture product whose purpose is to be sat on.",
13252
14536
  {
14537
+ broaderSlug: "furniture",
13253
14538
  external: [
13254
14539
  aat8("300037769", "seating furniture", "broad"),
13255
14540
  uniclass5("Pr_40_50_12", "Chairs, seats and benches", "broad")
@@ -13261,6 +14546,7 @@ var PRODUCT_CATEGORY_TERMS = [
13261
14546
  "Table",
13262
14547
  "A loose furniture product supplying a raised horizontal surface on its own support.",
13263
14548
  {
14549
+ broaderSlug: "furniture",
13264
14550
  external: [
13265
14551
  aat8("300039548", "tables (support furniture)", "exact"),
13266
14552
  uniclass5("Pr_40_50_21", "Desks and tables", "broad")
@@ -13280,7 +14566,7 @@ var PRODUCT_CATEGORY_TERMS = [
13280
14566
  typicallyIn4("bathroom"),
13281
14567
  typicallyIn4("wc"),
13282
14568
  typicallyIn4("restroom"),
13283
- ...relatedTo11("element.sanitaryware")
14569
+ ...relatedTo13("element.sanitaryware")
13284
14570
  ]
13285
14571
  }
13286
14572
  ),
@@ -13303,7 +14589,7 @@ var PRODUCT_CATEGORY_TERMS = [
13303
14589
  typicallyIn4("kitchen"),
13304
14590
  typicallyIn4("wc"),
13305
14591
  typicallyIn4("restroom"),
13306
- ...relatedTo11("element.tapware")
14592
+ ...relatedTo13("element.tapware")
13307
14593
  ],
13308
14594
  seenAs: ["Faucet", "Fittings"]
13309
14595
  }
@@ -13317,7 +14603,7 @@ var PRODUCT_CATEGORY_TERMS = [
13317
14603
  aat8("300033260", "hardware (components)", "broad"),
13318
14604
  uniclass5("Pr_30_36", "Hardware products", "close")
13319
14605
  ],
13320
- related: relatedTo11("element.ironmongery")
14606
+ related: relatedTo13("element.ironmongery")
13321
14607
  }
13322
14608
  ),
13323
14609
  fromCorpus(
@@ -13327,8 +14613,8 @@ var PRODUCT_CATEGORY_TERMS = [
13327
14613
  {
13328
14614
  altLabels: ["wiring devices"],
13329
14615
  external: [uniclass5("Pr_65_72_97", "Wiring accessories", "broad")],
13330
- related: relatedTo11("element.socket-outlet"),
13331
- searchedWithout: [searchedAat2('wiring; "electrical accessories"')],
14616
+ related: relatedTo13("element.socket-outlet"),
14617
+ searchedWithout: [searchedAat3('wiring; "electrical accessories"')],
13332
14618
  seenAs: ["Electrical"]
13333
14619
  }
13334
14620
  ),
@@ -13337,12 +14623,13 @@ var PRODUCT_CATEGORY_TERMS = [
13337
14623
  "Storage",
13338
14624
  "A furniture product whose purpose is to contain or support stored things, fitted or freestanding.",
13339
14625
  {
13340
- altLabels: ["casegoods", "cabinetry"],
14626
+ altLabels: ["cabinetry"],
14627
+ broaderSlug: "furniture",
13341
14628
  external: [
13342
14629
  aat8("300038860", "case furniture", "narrow"),
13343
14630
  uniclass5("Pr_40_30_87", "Storage units and cupboards", "close")
13344
14631
  ],
13345
- related: relatedTo11(
14632
+ related: relatedTo13(
13346
14633
  "element.cabinetry",
13347
14634
  "element.shelving",
13348
14635
  "application.cabinetry"
@@ -13359,7 +14646,7 @@ var PRODUCT_CATEGORY_TERMS = [
13359
14646
  aat8("300002803", "doors", "close"),
13360
14647
  uniclass5("Pr_30_59_24", "Doorsets", "exact")
13361
14648
  ],
13362
- related: relatedTo11("element.door", "application.door"),
14649
+ related: relatedTo13("element.door", "application.door"),
13363
14650
  seenAs: ["Doors"]
13364
14651
  }
13365
14652
  ),
@@ -13377,9 +14664,9 @@ var PRODUCT_CATEGORY_TERMS = [
13377
14664
  external: [
13378
14665
  uniclass5("Pr_35_93_13_65", "Profiled metal acoustic panels", "narrow")
13379
14666
  ],
13380
- related: relatedTo11("requirement.acoustic-performance"),
14667
+ related: relatedTo13("requirement.acoustic-performance"),
13381
14668
  searchedWithout: [
13382
- searchedAat2('acoustic panel; "sound absorbing panels"')
14669
+ searchedAat3('acoustic panel; "sound absorbing panels"')
13383
14670
  ]
13384
14671
  }
13385
14672
  ),
@@ -13440,7 +14727,7 @@ var PRODUCT_CATEGORY_TERMS = [
13440
14727
  altLabels: ["track lighting", "track light"],
13441
14728
  broaderSlug: "luminaire",
13442
14729
  external: [LUMINAIRES],
13443
- searchedWithout: [searchedAat2("track lighting; track AND lighting")]
14730
+ searchedWithout: [searchedAat3("track lighting; track AND lighting")]
13444
14731
  }
13445
14732
  ),
13446
14733
  fromSearchCorpus(
@@ -13465,7 +14752,7 @@ var PRODUCT_CATEGORY_TERMS = [
13465
14752
  altLabels: ["mosaic"],
13466
14753
  broaderSlug: "tile",
13467
14754
  external: [uniclass5("Pr_35_93_96_53", "Mosaic tiles", "exact")],
13468
- searchedWithout: [searchedAat2("mosaic tile; tesserae")]
14755
+ searchedWithout: [searchedAat3("mosaic tile; tesserae")]
13469
14756
  }
13470
14757
  ),
13471
14758
  fromSearchCorpus(
@@ -13489,8 +14776,8 @@ var PRODUCT_CATEGORY_TERMS = [
13489
14776
  altLabels: ["acoustic ceiling"],
13490
14777
  broaderSlug: "ceiling-system",
13491
14778
  external: [aat8("300073775", "acoustical ceilings", "related")],
13492
- related: relatedTo11("requirement.acoustic-performance"),
13493
- searchedWithout: [searchedUniclass11("acoustic ceiling system")]
14779
+ related: relatedTo13("requirement.acoustic-performance"),
14780
+ searchedWithout: [searchedUniclass12("acoustic ceiling system")]
13494
14781
  }
13495
14782
  ),
13496
14783
  fromSearchCorpus(
@@ -13521,7 +14808,7 @@ var PRODUCT_CATEGORY_TERMS = [
13521
14808
  snapshot: REVIEW_DATE8,
13522
14809
  source: "Wikidata Q321046 window blind, https://www.wikidata.org/wiki/Q321046"
13523
14810
  },
13524
- related: relatedTo11("application.vh-window-shade", "element.window"),
14811
+ related: relatedTo13("application.vh-window-shade", "element.window"),
13525
14812
  reviewedAt: REVIEW_DATE8
13526
14813
  }
13527
14814
  ),
@@ -13566,7 +14853,7 @@ var PRODUCT_CATEGORY_TERMS = [
13566
14853
  ],
13567
14854
  introducedAt: REVIEW_DATE8,
13568
14855
  provenance: { basis: "authored", source: REVIEW_SOURCE7 },
13569
- related: relatedTo11("element.cladding", "application.facade"),
14856
+ related: relatedTo13("element.cladding", "application.facade"),
13570
14857
  reviewedAt: REVIEW_DATE8,
13571
14858
  seenAs: ["Facade", "Rainscreens", "Exterior Panel Systems"]
13572
14859
  }
@@ -13579,6 +14866,7 @@ var PRODUCT_CATEGORY_TERMS = [
13579
14866
  "A furniture product supplied to sleep or lie on, or the frame or headboard made for one, independent of its material and size; not a mattress, bedding or a sofa bed.",
13580
14867
  {
13581
14868
  altLabels: ["bed frame"],
14869
+ broaderSlug: "furniture",
13582
14870
  external: [
13583
14871
  aat8("300038697", "beds (furniture)", "close"),
13584
14872
  uniclass5("Pr_40_50_06", "Beds", "broad")
@@ -13618,7 +14906,8 @@ var PRODUCT_CATEGORY_TERMS = [
13618
14906
  related: [typicallyIn4("living-room"), typicallyIn4("bedroom")],
13619
14907
  reviewedAt: SEARCHED_ON_TAX66
13620
14908
  }
13621
- )
14909
+ ),
14910
+ ...FURNITURE_TERMS
13622
14911
  ];
13623
14912
 
13624
14913
  // src/axes/requirement.ts
@@ -13633,13 +14922,13 @@ var term9 = (slug, label, definition, extra = {}) => ({
13633
14922
  });
13634
14923
  var uniclass6 = (identifier, label, match) => ({ identifier, label, match, scheme: "uniclass" });
13635
14924
  var aat9 = (identifier, label, match) => ({ identifier, label, match, scheme: "aat" });
13636
- var searchedAat3 = (query) => ({
14925
+ var searchedAat4 = (query) => ({
13637
14926
  date: SEARCHED_ON,
13638
14927
  query,
13639
14928
  scheme: "aat",
13640
14929
  via: "https://vocab.getty.edu:443/sparql; luc:term search, AAT preferred labels and English scope notes, LIMIT 150"
13641
14930
  });
13642
- var searchedUniclass12 = (query) => ({
14931
+ var searchedUniclass13 = (query) => ({
13643
14932
  date: SEARCHED_ON,
13644
14933
  query,
13645
14934
  scheme: "uniclass",
@@ -13652,7 +14941,7 @@ var REQUIREMENT_TERMS = [
13652
14941
  "The allowed monetary cost or cost band for the applicable scope.",
13653
14942
  {
13654
14943
  external: [uniclass6("PM_60_50_10", "Budget", "close")],
13655
- searchedWithout: [searchedAat3("budget")]
14944
+ searchedWithout: [searchedAat4("budget")]
13656
14945
  }
13657
14946
  ),
13658
14947
  term9(
@@ -13661,7 +14950,7 @@ var REQUIREMENT_TERMS = [
13661
14950
  "Whether the thing can be supplied in the required market and time window.",
13662
14951
  {
13663
14952
  external: [uniclass6("PC_20_67_05", "Availability", "close")],
13664
- searchedWithout: [searchedAat3("availability")]
14953
+ searchedWithout: [searchedAat4("availability")]
13665
14954
  }
13666
14955
  ),
13667
14956
  term9(
@@ -13670,7 +14959,7 @@ var REQUIREMENT_TERMS = [
13670
14959
  "The maximum elapsed time acceptable between commitment and supply.",
13671
14960
  {
13672
14961
  external: [uniclass6("PC_20_77_52", "Manufacturing lead time", "narrow")],
13673
- searchedWithout: [searchedAat3("lead time")]
14962
+ searchedWithout: [searchedAat4("lead time")]
13674
14963
  }
13675
14964
  ),
13676
14965
  term9(
@@ -13679,8 +14968,8 @@ var REQUIREMENT_TERMS = [
13679
14968
  "The required measured resistance to pedestrian slipping for the application.",
13680
14969
  {
13681
14970
  searchedWithout: [
13682
- searchedAat3("slip resistance"),
13683
- searchedUniclass12("slip resistance")
14971
+ searchedAat4("slip resistance"),
14972
+ searchedUniclass13("slip resistance")
13684
14973
  ]
13685
14974
  }
13686
14975
  ),
@@ -13690,7 +14979,7 @@ var REQUIREMENT_TERMS = [
13690
14979
  "Whether the product is evidenced as suitable for the stated wet exposure.",
13691
14980
  {
13692
14981
  external: [uniclass6("PC_50_34_82", "Suitability", "broad")],
13693
- searchedWithout: [searchedAat3("wet area")]
14982
+ searchedWithout: [searchedAat4("wet area")]
13694
14983
  }
13695
14984
  ),
13696
14985
  term9(
@@ -13701,7 +14990,7 @@ var REQUIREMENT_TERMS = [
13701
14990
  external: [
13702
14991
  uniclass6("PM_35_30", "Fire performance requirements", "broad")
13703
14992
  ],
13704
- searchedWithout: [searchedAat3("fire resistance")]
14993
+ searchedWithout: [searchedAat4("fire resistance")]
13705
14994
  }
13706
14995
  ),
13707
14996
  term9(
@@ -13721,7 +15010,7 @@ var REQUIREMENT_TERMS = [
13721
15010
  "The allowed cleaning, renewal or routine care burden.",
13722
15011
  {
13723
15012
  external: [uniclass6("PM_80_10_50", "Maintenance requirements", "close")],
13724
- searchedWithout: [searchedAat3("maintenance")]
15013
+ searchedWithout: [searchedAat4("maintenance")]
13725
15014
  }
13726
15015
  ),
13727
15016
  term9(
@@ -13730,7 +15019,7 @@ var REQUIREMENT_TERMS = [
13730
15019
  "A required or prohibited method of fixing, laying or applying the product.",
13731
15020
  {
13732
15021
  external: [uniclass6("PC_50_34_41", "Installation method", "exact")],
13733
- searchedWithout: [searchedAat3("installation")]
15022
+ searchedWithout: [searchedAat4("installation")]
13734
15023
  }
13735
15024
  ),
13736
15025
  term9(
@@ -13769,6 +15058,70 @@ var REQUIREMENT_TERMS = [
13769
15058
  },
13770
15059
  reviewedAt: SEARCHED_ON_TAX66
13771
15060
  }
15061
+ ),
15062
+ // Authored with the TAX-66 vocabulary gaps. These are needs a project states; the schemes that
15063
+ // evidence them (FSC, GREENGUARD, EPD and the rest) are on the certification axis and point back
15064
+ // here with `related-to`, so nothing on this axis names a scheme.
15065
+ term9(
15066
+ "responsible-sourcing",
15067
+ "Responsible sourcing",
15068
+ "The required evidence that a product's raw materials, such as timber, come from lawful and responsibly managed sources, traced through the supply chain.",
15069
+ {
15070
+ altLabels: ["sustainable sourcing"],
15071
+ ...GAPS_LIFECYCLE,
15072
+ searchedWithout: [
15073
+ gapsSearchedAat("responsible sourcing | sustainable sourcing"),
15074
+ gapsSearchedUniclass(
15075
+ "Responsible sourcing | sustainable sourcing | chain of custody"
15076
+ ),
15077
+ gapsSearchedWikidata("responsible sourcing")
15078
+ ]
15079
+ }
15080
+ ),
15081
+ term9(
15082
+ "antimicrobial",
15083
+ "Antimicrobial",
15084
+ "The required resistance of a surface to the growth of bacteria, fungi or mould, stated against a test method and not by the presence of an additive alone.",
15085
+ {
15086
+ altLabels: ["anti-microbial"],
15087
+ external: [
15088
+ uniclass6("PC_35_28_48_06", "Bacterial resistance", "close"),
15089
+ uniclass6("PC_20_67_04_04", "Anti-microbial treatment", "related"),
15090
+ {
15091
+ identifier: "Q4774939",
15092
+ label: "antimicrobial surface",
15093
+ match: "related",
15094
+ scheme: "wikidata"
15095
+ }
15096
+ ],
15097
+ ...GAPS_LIFECYCLE,
15098
+ searchedWithout: [gapsSearchedAat("antimicrobial | antibacterial")],
15099
+ seenAs: ["antibacterial"]
15100
+ }
15101
+ ),
15102
+ term9(
15103
+ "net-zero",
15104
+ "Net zero",
15105
+ "The net greenhouse-gas balance a project is held to over a stated scope and period, once emissions are reduced and any remainder offset or removed; the assertion states the scope.",
15106
+ {
15107
+ altLabels: ["net zero carbon", "net-zero"],
15108
+ external: [
15109
+ uniclass6("PC_35_85_99", "Zero-carbon", "close"),
15110
+ uniclass6("PC_35_85_12", "Carbon-neutral", "related"),
15111
+ {
15112
+ identifier: "Q121734997",
15113
+ label: "Net-zero emissions",
15114
+ match: "close",
15115
+ scheme: "wikidata"
15116
+ }
15117
+ ],
15118
+ ...GAPS_LIFECYCLE,
15119
+ note: "Carbon-neutral, which can be reached by offsets alone, is a different claim; Uniclass keeps it apart from Zero-carbon, and the mapping to it is only related.",
15120
+ related: [
15121
+ { predicate: "related-to", target: "requirement.embodied-carbon" }
15122
+ ],
15123
+ searchedWithout: [gapsSearchedAat("net zero | zero energy")]
15124
+ }
13772
15125
  )
13773
15126
  ];
13774
15127
 
@@ -13881,7 +15234,7 @@ var PROGRAM_SPACES = {
13881
15234
  snapshot: VENDORED_SNAPSHOT,
13882
15235
  source: "PROGRAM_SPACE_TYPES in a project-materials database (src-07)"
13883
15236
  };
13884
- var relatedTo12 = (target) => ({
15237
+ var relatedTo14 = (target) => ({
13885
15238
  predicate: "related-to",
13886
15239
  target
13887
15240
  });
@@ -14182,7 +15535,7 @@ var CIRCULATION_SPACES = [
14182
15535
  // stand on. A neat demonstration of the boundary rule catching a mapping that reads right.
14183
15536
  note: "AAT files landings as a stair component, which is the element sense. This term is the volume sense - the thing you stand on - so the match is `close` and not `exact`.",
14184
15537
  provenance: PROGRAM_SPACES,
14185
- related: [relatedTo12("space.stairwell")],
15538
+ related: [relatedTo14("space.stairwell")],
14186
15539
  slug: "landing"
14187
15540
  },
14188
15541
  {
@@ -14351,7 +15704,7 @@ var CULTURE_SPACES = [
14351
15704
  label: "Theatre",
14352
15705
  note: "Deliberately not a kind of `auditorium`, and the containment runs the other way - the auditorium is the audience chamber INSIDE a theatre. That is a part-of relation and not an ISA edge, so it is carried in `related` where part-of belongs. No AAT mapping: every Getty `theaters` entry is a building or an institution, which is TYPOLOGY's business.",
14353
15706
  provenance: PROGRAM_SPACES,
14354
- related: [typicallyIn5("theatre"), relatedTo12("space.auditorium")],
15707
+ related: [typicallyIn5("theatre"), relatedTo14("space.auditorium")],
14355
15708
  slug: "theater"
14356
15709
  },
14357
15710
  {
@@ -14631,7 +15984,7 @@ var DINING_SPACES = [
14631
15984
  label: "Kitchen",
14632
15985
  note: "`application.kitchen` in the published APPLICATIONS axis is a room sitting inside a surface-use vocabulary, and is superseded by this term. As with `bathroom`, the edge is `related-to` rather than `suitable-for`, because the suitability claim runs from the material to the space and so belongs on the applications side.",
14633
15986
  provenance: MS_ROOM_PROGRAM,
14634
- related: [relatedTo12("application.kitchen")],
15987
+ related: [relatedTo14("application.kitchen")],
14635
15988
  seenAs: ["Kitchen"],
14636
15989
  slug: "kitchen",
14637
15990
  usage: schemeUsage("dominant")
@@ -14695,7 +16048,7 @@ var DINING_SPACES = [
14695
16048
  label: "Scullery",
14696
16049
  note: "Deliberately not a kind of `kitchen`. The parent is defined by preparing and cooking food, and a scullery is defined by the cooking happening next door. In current British practice the word has been reclaimed for the working half of a two-part kitchen, which is the same room by the same test.",
14697
16050
  provenance: AUTHORED6,
14698
- related: [relatedTo12("space.kitchen")],
16051
+ related: [relatedTo14("space.kitchen")],
14699
16052
  slug: "scullery"
14700
16053
  },
14701
16054
  {
@@ -14961,7 +16314,7 @@ var FITNESS_SPACES = [
14961
16314
  // src/axes/space/gathering.ts
14962
16315
  var LIVING_ROOMS = "Living rooms";
14963
16316
  var LOUNGES = "lounges (sitting rooms)";
14964
- var LIVING_ROOM = "living-room";
16317
+ var LIVING_ROOM2 = "living-room";
14965
16318
  var GATHERING_SPACES = [
14966
16319
  // ─── Sitting and gathering ──────────────────────────────────────────────────────────────────
14967
16320
  // The spine's largest single block, and the one where the near-synonym rule earns its keep. Nine
@@ -14983,12 +16336,12 @@ var GATHERING_SPACES = [
14983
16336
  provenance: MS_ROOM_PROGRAM,
14984
16337
  related: [serves("residential")],
14985
16338
  seenAs: ["Living Room", "living_area"],
14986
- slug: LIVING_ROOM,
16339
+ slug: LIVING_ROOM2,
14987
16340
  usage: schemeUsage("common")
14988
16341
  },
14989
16342
  {
14990
16343
  altLabels: ["den"],
14991
- broaderSlug: LIVING_ROOM,
16344
+ broaderSlug: LIVING_ROOM2,
14992
16345
  definition: "A small, enclosed and deliberately low-lit sitting volume held as a retreat from the main `living_room`, rather than as a substitute for it.",
14993
16346
  external: [
14994
16347
  aat11("300004416", "dens (rooms)", "close"),
@@ -15000,7 +16353,7 @@ var GATHERING_SPACES = [
15000
16353
  slug: "snug"
15001
16354
  },
15002
16355
  {
15003
- broaderSlug: LIVING_ROOM,
16356
+ broaderSlug: LIVING_ROOM2,
15004
16357
  definition: "A formal sitting volume kept for receiving guests, held apart from the household's everyday `living_room` and finished to be seen rather than lived in. British usage, and the reason it is a term rather than another name for `living_room`: a house with both uses them differently.",
15005
16358
  external: [
15006
16359
  aat11("300004417", "drawing rooms", "exact"),
@@ -15145,7 +16498,7 @@ var GATHERING_SPACES = [
15145
16498
  label: "Roof Lounge",
15146
16499
  note: "Filed under `lounge` rather than under `outdoor`, and only one of those can be the parent. The lounge-ness is what gets specified - the seating, the lighting, the way it is used - and being outdoors is a condition applied to it. The same call is made on `outdoor_lounge`.",
15147
16500
  provenance: PROGRAM_SPACES,
15148
- related: [relatedTo12("space.roof-deck")],
16501
+ related: [relatedTo14("space.roof-deck")],
15149
16502
  searchedWithout: [
15150
16503
  {
15151
16504
  date: SEARCHED_ON,
@@ -15165,7 +16518,7 @@ var GATHERING_SPACES = [
15165
16518
  ],
15166
16519
  label: "Outdoor Lounge",
15167
16520
  provenance: PROGRAM_SPACES,
15168
- related: [relatedTo12("space.outdoor")],
16521
+ related: [relatedTo14("space.outdoor")],
15169
16522
  slug: "outdoor-lounge"
15170
16523
  },
15171
16524
  {
@@ -15177,7 +16530,7 @@ var GATHERING_SPACES = [
15177
16530
  label: "Clubroom",
15178
16531
  note: "Deliberately not a kind of `lounge`. A lounge is soft-seated and dropped into; a clubroom is booked, tabled, and expected to take a party. The two are neighbours in every brief and they are not the same room, which is why folding them would lose a real difference in floor build-up and acoustic treatment.",
15179
16532
  provenance: PROGRAM_SPACES,
15180
- related: [relatedTo12("space.game-room")],
16533
+ related: [relatedTo14("space.game-room")],
15181
16534
  slug: "clubroom"
15182
16535
  },
15183
16536
  {
@@ -15185,7 +16538,7 @@ var GATHERING_SPACES = [
15185
16538
  label: "Fireplace Area",
15186
16539
  note: "A zone inside another room rather than a room, and deliberately not a child of `living_room` - it occurs in lobbies, lounges and bars as readily as in dwellings. The fire opening and chimneypiece themselves are `element.fireplace` and `element.chimneypiece`; this is the volume in front of them.",
15187
16540
  provenance: PROGRAM_SPACES,
15188
- related: [relatedTo12("element.fireplace")],
16541
+ related: [relatedTo14("element.fireplace")],
15189
16542
  searchedWithout: [
15190
16543
  {
15191
16544
  date: SEARCHED_ON,
@@ -15783,7 +17136,7 @@ var OUTDOOR_SPACES = [
15783
17136
  label: "Facade Zone",
15784
17137
  note: "Names a set of surfaces rather than a volume, and fails the standing-in test the way `home_exterior` does. Retained because the spine carries it and because facade packages really are specified as one zone. If it is ever split, its contents belong in ELEMENT - `element.cladding`, `element.external-wall` - and not here.",
15785
17138
  provenance: PROGRAM_SPACES,
15786
- related: [relatedTo12("element.cladding")],
17139
+ related: [relatedTo14("element.cladding")],
15787
17140
  searchedWithout: [
15788
17141
  {
15789
17142
  date: SEARCHED_ON,
@@ -15948,7 +17301,7 @@ var RETAIL_SPACES = [
15948
17301
  label: "Consultation Room",
15949
17302
  note: "One character from `consult_room`, and deliberately not folded into it. That one is clinical - a GP surgery, examined and prescribed in, with the cleaning and privacy requirements that implies. This one is commercial and is furnished like a small meeting room. Two ids this close is a real trap, and the answer is a note on each rather than a merge that would put retail joinery into a medical specification.",
15950
17303
  provenance: PROGRAM_SPACES,
15951
- related: [relatedTo12("space.consult-room"), serves("retail")],
17304
+ related: [relatedTo14("space.consult-room"), serves("retail")],
15952
17305
  searchedWithout: [
15953
17306
  {
15954
17307
  date: SEARCHED_ON,
@@ -16067,7 +17420,7 @@ var SANITARY_SPACES = [
16067
17420
  label: "Bathroom",
16068
17421
  note: "`application.bath` in the published APPLICATIONS axis is a room sitting inside a surface-use vocabulary, and is superseded by this term. The edge here is `related-to` and not `suitable-for` on purpose: `suitable-for` runs from a material-suitability claim TO a space, so the correct `suitable-for` edge points the other way and belongs on the applications side, alongside the deprecation.",
16069
17422
  provenance: MS_ROOM_PROGRAM,
16070
- related: [relatedTo12("application.bath")],
17423
+ related: [relatedTo14("application.bath")],
16071
17424
  seenAs: ["Bathroom"],
16072
17425
  slug: "bathroom",
16073
17426
  usage: schemeUsage("dominant")
@@ -16150,7 +17503,7 @@ var SANITARY_SPACES = [
16150
17503
  label: "Locker Area",
16151
17504
  note: "Kept apart from `changing_room` rather than folded into it, because the spine files them in different sectors and the difference is real: this one has no showers, no benching and no privacy requirement, and it sits in the open.",
16152
17505
  provenance: PROGRAM_SPACES,
16153
- related: [relatedTo12("space.changing-room")],
17506
+ related: [relatedTo14("space.changing-room")],
16154
17507
  slug: "locker-area"
16155
17508
  },
16156
17509
  {
@@ -16339,7 +17692,7 @@ var SERVICE_SPACES = [
16339
17692
  label: "Electrical Room",
16340
17693
  note: "Deliberately not a kind of `mechanical_room`. Switchgear is not a kind of mechanical plant, the two rooms are kept apart by regulation for exactly that reason, and their clearances, fire compartmentation and access rules are different.",
16341
17694
  provenance: PROGRAM_SPACES,
16342
- related: [relatedTo12("space.mechanical-room")],
17695
+ related: [relatedTo14("space.mechanical-room")],
16343
17696
  searchedWithout: [
16344
17697
  {
16345
17698
  date: SEARCHED_ON,
@@ -16453,7 +17806,7 @@ var SLEEPING_SPACES = [
16453
17806
  label: "Nursery",
16454
17807
  note: 'Deliberately not a kind of `bedroom`, on Getty\'s own evidence: AAT scopes a nursery as serving "as a bedroom or playroom", and AAT mints `night nurseries` separately for the sleeping-only case. If not every nursery is a bedroom, the ISA test fails, and it does. The nursery school is a building and belongs to TYPOLOGY, not here.',
16455
17808
  provenance: AUTHORED6,
16456
- related: [typicallyIn5("house"), relatedTo12("space.playroom")],
17809
+ related: [typicallyIn5("house"), relatedTo14("space.playroom")],
16457
17810
  slug: "nursery"
16458
17811
  },
16459
17812
  {
@@ -16521,8 +17874,8 @@ var SLEEPING_SPACES = [
16521
17874
  note: 'Deliberately not a kind of `closet_storage`, whose definition ends "never to stay in" - which is exactly what a dressing room is for. AAT 300004369 is `exact` here and `close` on `fitting_room`; Getty scopes it as "rooms for dressing and the toilet, usually opening from a bedroom", which is this room and only approximately a shop\'s changing cubicle.',
16522
17875
  provenance: AUTHORED6,
16523
17876
  related: [
16524
- relatedTo12("space.principal-bedroom"),
16525
- relatedTo12("space.closet-storage")
17877
+ relatedTo14("space.principal-bedroom"),
17878
+ relatedTo14("space.closet-storage")
16526
17879
  ],
16527
17880
  slug: "dressing-room"
16528
17881
  }
@@ -16743,7 +18096,7 @@ var WORKING_SPACES = [
16743
18096
  ],
16744
18097
  label: "IT Room",
16745
18098
  provenance: PROGRAM_SPACES,
16746
- related: [typicallyIn5("office"), relatedTo12("space.electrical-room")],
18099
+ related: [typicallyIn5("office"), relatedTo14("space.electrical-room")],
16747
18100
  slug: "it-room"
16748
18101
  },
16749
18102
  {
@@ -16844,7 +18197,7 @@ var influencedBy = (target) => ({
16844
18197
  predicate: "influenced-by",
16845
18198
  target
16846
18199
  });
16847
- var relatedTo13 = (target) => ({
18200
+ var relatedTo15 = (target) => ({
16848
18201
  predicate: "related-to",
16849
18202
  target
16850
18203
  });
@@ -17109,7 +18462,7 @@ var STYLE_TERMS = [
17109
18462
  snapshot: SNAPSHOT9,
17110
18463
  source: "a furnishings retailer (src-03), a rendering pipeline (src-08) and a materials-retrieval system (src-05)"
17111
18464
  },
17112
- related: [relatedTo13("period.contemporary")],
18465
+ related: [relatedTo15("period.contemporary")],
17113
18466
  searchedWithout: [
17114
18467
  {
17115
18468
  date: SEARCHED_ON,
@@ -17306,7 +18659,7 @@ var STYLE_TERMS = [
17306
18659
  snapshot: SNAPSHOT9,
17307
18660
  source: SCHEME_CORPUS2
17308
18661
  },
17309
- related: [relatedTo13("style.maximalism")],
18662
+ related: [relatedTo15("style.maximalism")],
17310
18663
  slug: "eclectic",
17311
18664
  styleKind: MARKET_IDIOM,
17312
18665
  usage: {
@@ -17407,7 +18760,7 @@ var STYLE_TERMS = [
17407
18760
  snapshot: SNAPSHOT9,
17408
18761
  source: PLATFORM_STYLES_SOURCE
17409
18762
  },
17410
- related: [relatedTo13("style.vernacular")],
18763
+ related: [relatedTo15("style.vernacular")],
17411
18764
  slug: "critical-regionalism",
17412
18765
  styleKind: MOVEMENT
17413
18766
  },
@@ -17431,7 +18784,7 @@ var STYLE_TERMS = [
17431
18784
  },
17432
18785
  related: [
17433
18786
  { predicate: "evokes", target: "place.region.japanese" },
17434
- relatedTo13("style.rustic")
18787
+ relatedTo15("style.rustic")
17435
18788
  ],
17436
18789
  searchedWithout: [
17437
18790
  {
@@ -18199,7 +19552,7 @@ var term11 = (slug, label, definition, extra = {}) => ({
18199
19552
  ...extra
18200
19553
  });
18201
19554
  var RECTANGLE = "unit-shape.rectangle";
18202
- var relatedTo14 = (...targets) => targets.map((target) => ({ predicate: "related-to", target }));
19555
+ var relatedTo16 = (...targets) => targets.map((target) => ({ predicate: "related-to", target }));
18203
19556
  var UNIT_SHAPE_TERMS = [
18204
19557
  {
18205
19558
  ...term11(
@@ -18221,7 +19574,7 @@ var UNIT_SHAPE_TERMS = [
18221
19574
  scheme: "uniclass"
18222
19575
  }
18223
19576
  ],
18224
- related: relatedTo14(RECTANGLE)
19577
+ related: relatedTo16(RECTANGLE)
18225
19578
  },
18226
19579
  {
18227
19580
  ...term11(
@@ -18318,7 +19671,7 @@ var UNIT_SHAPE_TERMS = [
18318
19671
  scheme: "wikidata"
18319
19672
  }
18320
19673
  ],
18321
- related: relatedTo14("unit-shape.circle"),
19674
+ related: relatedTo16("unit-shape.circle"),
18322
19675
  searchedWithout: [searchedUniclass3("Semicircle")]
18323
19676
  },
18324
19677
  {
@@ -18348,7 +19701,7 @@ var UNIT_SHAPE_TERMS = [
18348
19701
  scheme: "wikidata"
18349
19702
  }
18350
19703
  ],
18351
- related: relatedTo14("installation-layout.chantilly"),
19704
+ related: relatedTo16("installation-layout.chantilly"),
18352
19705
  searchedWithout: [searchedUniclass3("Rhombus")]
18353
19706
  },
18354
19707
  {
@@ -18365,7 +19718,7 @@ var UNIT_SHAPE_TERMS = [
18365
19718
  scheme: "wikidata"
18366
19719
  }
18367
19720
  ],
18368
- related: relatedTo14(RECTANGLE, "unit-shape.rhombus"),
19721
+ related: relatedTo16(RECTANGLE, "unit-shape.rhombus"),
18369
19722
  searchedWithout: [searchedUniclass3("Parallelogram")]
18370
19723
  },
18371
19724
  {
@@ -18378,7 +19731,7 @@ var UNIT_SHAPE_TERMS = [
18378
19731
  scheme: "wikidata"
18379
19732
  }
18380
19733
  ],
18381
- related: relatedTo14("installation-layout.hexagon-block"),
19734
+ related: relatedTo16("installation-layout.hexagon-block"),
18382
19735
  searchedWithout: [searchedUniclass3("Hexagon")]
18383
19736
  },
18384
19737
  {
@@ -18391,7 +19744,7 @@ var UNIT_SHAPE_TERMS = [
18391
19744
  scheme: "wikidata"
18392
19745
  }
18393
19746
  ],
18394
- related: relatedTo14("unit-shape.square"),
19747
+ related: relatedTo16("unit-shape.square"),
18395
19748
  searchedWithout: [searchedUniclass3("Octagon")]
18396
19749
  },
18397
19750
  {
@@ -18423,7 +19776,7 @@ var UNIT_SHAPE_TERMS = [
18423
19776
  }
18424
19777
  }
18425
19778
  ),
18426
- related: relatedTo14(RECTANGLE),
19779
+ related: relatedTo16(RECTANGLE),
18427
19780
  searchedWithout: [searchedUniclass3("picket tile shape")]
18428
19781
  },
18429
19782
  {
@@ -18432,7 +19785,7 @@ var UNIT_SHAPE_TERMS = [
18432
19785
  "Chevron unit",
18433
19786
  "One genuinely V-shaped or boomerang-shaped physical unit; never rectangular units mitred or arranged into a chevron layout."
18434
19787
  ),
18435
- related: relatedTo14("installation-layout.chevron"),
19788
+ related: relatedTo16("installation-layout.chevron"),
18436
19789
  searchedWithout: [searchedUniclass3("chevron shape")]
18437
19790
  },
18438
19791
  {
@@ -18450,7 +19803,7 @@ var UNIT_SHAPE_TERMS = [
18450
19803
  "A fan-like unit with one convex curved edge and a narrower opposing edge.",
18451
19804
  { altLabels: ["Fan"] }
18452
19805
  ),
18453
- related: relatedTo14("unit-shape.semicircle"),
19806
+ related: relatedTo16("unit-shape.semicircle"),
18454
19807
  searchedWithout: [searchedUniclass3("scallop shape")]
18455
19808
  },
18456
19809
  {
@@ -18459,7 +19812,7 @@ var UNIT_SHAPE_TERMS = [
18459
19812
  "Star",
18460
19813
  "A unit with multiple outward-pointing arms around a centre."
18461
19814
  ),
18462
- related: relatedTo14("unit-shape.cross"),
19815
+ related: relatedTo16("unit-shape.cross"),
18463
19816
  searchedWithout: [searchedUniclass3("star polygon")]
18464
19817
  },
18465
19818
  {
@@ -18476,7 +19829,7 @@ var UNIT_SHAPE_TERMS = [
18476
19829
  scheme: "wikidata"
18477
19830
  }
18478
19831
  ],
18479
- related: relatedTo14("installation-layout.chantilly"),
19832
+ related: relatedTo16("installation-layout.chantilly"),
18480
19833
  searchedWithout: [searchedUniclass3("cross shape")]
18481
19834
  },
18482
19835
  {
@@ -18493,7 +19846,7 @@ var UNIT_SHAPE_TERMS = [
18493
19846
  scheme: "uniclass"
18494
19847
  }
18495
19848
  ],
18496
- related: relatedTo14("installation-layout.irregular-field")
19849
+ related: relatedTo16("installation-layout.irregular-field")
18497
19850
  }
18498
19851
  ];
18499
19852
 
@@ -19651,6 +21004,7 @@ var AXES = [
19651
21004
  slug: "requirement",
19652
21005
  status: "authored"
19653
21006
  },
21007
+ ...BRIEF_AXES,
19654
21008
  {
19655
21009
  boundary: "Sector classifies whom the building serves; Typology classifies what the building is. A converted warehouse full of flats is sector residential and typology warehouse plus apartment. Sector moves when the tenant moves; typology does not.",
19656
21010
  facets: single("sector", "Sector", SECTOR_TERMS),
@@ -19743,7 +21097,7 @@ var AXES = [
19743
21097
  status: "authored"
19744
21098
  },
19745
21099
  {
19746
- boundary: "Daylight is the natural light a space receives and the direction it comes from. Aspect is compass-literal and says nothing about the sun: which side is bright depends on the hemisphere, and that consequence is a separate claim on Light. It is not Palette, which is the color of what is in the room rather than the light falling on it; not Mood, where airy and moody are outcomes a scheme achieves rather than conditions a room has; not Element, which holds the windows, rooflights and luminaires themselves, and artificial lighting is never recorded here; and not Place, which says where a building stands rather than which way a room looks.",
21100
+ boundary: "Daylight is the natural light a space receives and the direction it comes from. Aspect is compass-literal and says nothing about the sun: which side is bright depends on the hemisphere, and that consequence is a separate claim on Light. It is not Palette, which is the color of what is in the room rather than the light falling on it; not Mood, where airy and moody are outcomes a scheme achieves rather than conditions a room has; not Element, which holds the windows, rooflights and luminaires themselves, and artificial lighting is never recorded here; not Time of day, which is the hour a scheme evokes; and not Place, which says where a building stands rather than which way a room looks.",
19747
21101
  facets: [
19748
21102
  {
19749
21103
  governance: TAX48_AUTHORED_GOVERNANCE,
@@ -19773,6 +21127,7 @@ var AXES = [
19773
21127
  slug: "season",
19774
21128
  status: "authored"
19775
21129
  },
21130
+ TIME_OF_DAY_AXIS,
19776
21131
  {
19777
21132
  boundary: "Tier is where a thing sits in a market; Mood is how a room reads. They come apart in both directions - an Aman is luxury tier and austere, a budget hotel lobby can be loudly luxurious - and welding them together loses both. It is also not a channel: trade-only says who may buy, not how much it costs.",
19778
21133
  facets: [
@@ -19861,7 +21216,7 @@ var resolveReference = (reference) => INDEX.byKey.get(canonicalKey(reference));
19861
21216
  // src/v1.ts
19862
21217
  var TAXONOMY_BASE_URI = "https://taxonomy.materialinstruments.com";
19863
21218
  var TAXONOMY_SNAPSHOT = "2026-10-02";
19864
- var TAXONOMY_VERSION = "2.5.0";
21219
+ var TAXONOMY_VERSION = "2.6.0";
19865
21220
  var PUBLISHED_V1_BASELINE = "2026-08-30";
19866
21221
  var TAX45_REVIEW_SNAPSHOT = "2026-08-31";
19867
21222
  var LIMESTONE_INTRODUCED = "2026-09-01";
@@ -19925,11 +21280,11 @@ var governanceFor = (explanation, term12) => ({
19925
21280
  provenance: term12?.provenance ?? DEFAULT_PROVENANCE,
19926
21281
  steward: "@instruments/taxonomy"
19927
21282
  });
19928
- var externalReferences = (mappings) => mappings?.map((mapping) => ({
19929
- authority: mapping.scheme,
19930
- identifier: mapping.identifier,
19931
- label: mapping.label,
19932
- match: mapping.match
21283
+ var externalReferences = (mappings) => mappings?.map((mapping2) => ({
21284
+ authority: mapping2.scheme,
21285
+ identifier: mapping2.identifier,
21286
+ label: mapping2.label,
21287
+ match: mapping2.match
19933
21288
  }));
19934
21289
  var governedEdge = (from, predicate, to, term12, assertion = "asserted", role) => {
19935
21290
  const governance = governanceFor(