@instruments/taxonomy 1.1.6 → 1.2.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/assertions.d.ts +70 -0
- package/dist/authoring.d.ts +33 -0
- package/dist/axes/construction.d.ts +3 -0
- package/dist/axes/element-fabric.d.ts +2 -0
- package/dist/axes/element-fitout.d.ts +2 -0
- package/dist/axes/element-shared.d.ts +13 -0
- package/dist/axes/element.d.ts +2 -0
- package/dist/axes/finish.d.ts +9 -0
- package/dist/axes/format.d.ts +3 -0
- package/dist/axes/index.d.ts +62 -0
- package/dist/axes/installation-layout.d.ts +3 -0
- package/dist/axes/material.d.ts +3 -0
- package/dist/axes/mood-anchors.d.ts +4 -0
- package/dist/axes/mood.d.ts +2 -0
- package/dist/axes/palette.d.ts +7 -0
- package/dist/axes/pattern.d.ts +13 -0
- package/dist/axes/period-anchors.d.ts +4 -0
- package/dist/axes/period.d.ts +29 -0
- package/dist/axes/place-anchors.d.ts +4 -0
- package/dist/axes/place.d.ts +5 -0
- package/dist/axes/product-category.d.ts +3 -0
- package/dist/axes/requirement.d.ts +3 -0
- package/dist/axes/space/arrival.d.ts +2 -0
- package/dist/axes/space/circulation.d.ts +2 -0
- package/dist/axes/space/civic.d.ts +2 -0
- package/dist/axes/space/culture.d.ts +2 -0
- package/dist/axes/space/dining.d.ts +2 -0
- package/dist/axes/space/domestic.d.ts +2 -0
- package/dist/axes/space/fitness.d.ts +2 -0
- package/dist/axes/space/gathering.d.ts +2 -0
- package/dist/axes/space/healthcare.d.ts +2 -0
- package/dist/axes/space/learning.d.ts +2 -0
- package/dist/axes/space/market-neutral.d.ts +1 -0
- package/dist/axes/space/other.d.ts +2 -0
- package/dist/axes/space/outdoor.d.ts +2 -0
- package/dist/axes/space/retail.d.ts +2 -0
- package/dist/axes/space/sanitary.d.ts +2 -0
- package/dist/axes/space/service.d.ts +2 -0
- package/dist/axes/space/shared.d.ts +30 -0
- package/dist/axes/space/sleeping.d.ts +2 -0
- package/dist/axes/space/working.d.ts +2 -0
- package/dist/axes/space-anchors/arrival.d.ts +3 -0
- package/dist/axes/space-anchors/circulation.d.ts +3 -0
- package/dist/axes/space-anchors/civic.d.ts +3 -0
- package/dist/axes/space-anchors/culture.d.ts +3 -0
- package/dist/axes/space-anchors/dining.d.ts +3 -0
- package/dist/axes/space-anchors/domestic.d.ts +3 -0
- package/dist/axes/space-anchors/fitness.d.ts +3 -0
- package/dist/axes/space-anchors/gathering.d.ts +3 -0
- package/dist/axes/space-anchors/healthcare.d.ts +3 -0
- package/dist/axes/space-anchors/learning.d.ts +3 -0
- package/dist/axes/space-anchors/other.d.ts +3 -0
- package/dist/axes/space-anchors/outdoor.d.ts +3 -0
- package/dist/axes/space-anchors/retail.d.ts +3 -0
- package/dist/axes/space-anchors/sanitary.d.ts +3 -0
- package/dist/axes/space-anchors/service.d.ts +3 -0
- package/dist/axes/space-anchors/sleeping.d.ts +3 -0
- package/dist/axes/space-anchors/working.d.ts +3 -0
- package/dist/axes/space-anchors.d.ts +8 -0
- package/dist/axes/space.d.ts +61 -0
- package/dist/axes/style-anchors.d.ts +7 -0
- package/dist/axes/style.d.ts +2 -0
- package/dist/axes/tier.d.ts +42 -0
- package/dist/axes/typology.d.ts +2 -0
- package/dist/axes/unit-shape.d.ts +3 -0
- package/dist/canonicalisation.d.ts +44 -0
- package/dist/crosswalks/designshop.d.ts +30 -0
- package/dist/crosswalks/mapping.d.ts +29 -0
- package/dist/crosswalks/materialgraph.d.ts +38 -0
- package/dist/crosswalks/miu.d.ts +13 -0
- package/dist/crosswalks/strength.d.ts +19 -0
- package/dist/dictionaries.d.ts +4 -0
- package/dist/downstream-check-policy.d.ts +34 -0
- package/dist/env.d.ts +6 -0
- package/dist/estate/concepts.d.ts +116 -0
- package/dist/estate/decomposition.d.ts +40 -0
- package/dist/estate/index.d.ts +4 -0
- package/dist/estate/residue-report.d.ts +45 -0
- package/dist/estate/rows/architizer.d.ts +2 -0
- package/dist/estate/rows/designround.d.ts +2 -0
- package/dist/estate/rows/designshop.d.ts +2 -0
- package/dist/estate/rows/index.d.ts +2 -0
- package/dist/estate/rows/materia.d.ts +2 -0
- package/dist/estate/rows/materialgraph.d.ts +2 -0
- package/dist/estate/rows/samplize.d.ts +2 -0
- package/dist/estate/sources.d.ts +47 -0
- package/dist/index.d.ts +5 -339
- package/dist/index.js +52 -1
- package/dist/match.d.ts +107 -0
- package/dist/materialgraph-crossover-sources.d.ts +52 -0
- package/dist/search-corpus-source.d.ts +8 -0
- package/dist/taste-assertion.d.ts +112 -0
- package/dist/taste.d.ts +2 -0
- package/dist/term.d.ts +346 -0
- package/dist/v1.d.ts +141 -0
- package/package.json +13 -13
package/dist/index.js
CHANGED
|
@@ -470,6 +470,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
470
470
|
uniclass("EF_25_10", "Walls", "exact")
|
|
471
471
|
],
|
|
472
472
|
label: "Wall",
|
|
473
|
+
placement: "field",
|
|
473
474
|
provenance: AUTHORED2,
|
|
474
475
|
slug: "wall"
|
|
475
476
|
},
|
|
@@ -482,6 +483,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
482
483
|
uniclass("EF_25_10_25", EF_EXTERNAL_WALLS, "exact")
|
|
483
484
|
],
|
|
484
485
|
label: "External Wall",
|
|
486
|
+
placement: "field",
|
|
485
487
|
provenance: AUTHORED2,
|
|
486
488
|
slug: "external-wall"
|
|
487
489
|
},
|
|
@@ -494,6 +496,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
494
496
|
uniclass("EF_25_10_40", "Internal walls", "exact")
|
|
495
497
|
],
|
|
496
498
|
label: "Internal Wall",
|
|
499
|
+
placement: "field",
|
|
497
500
|
provenance: AUTHORED2,
|
|
498
501
|
slug: "internal-wall"
|
|
499
502
|
},
|
|
@@ -505,6 +508,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
505
508
|
uniclass("EF_25_10_40", "Internal walls", "broad")
|
|
506
509
|
],
|
|
507
510
|
label: "Partition",
|
|
511
|
+
placement: "field",
|
|
508
512
|
provenance: AUTHORED2,
|
|
509
513
|
slug: "partition"
|
|
510
514
|
},
|
|
@@ -513,6 +517,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
513
517
|
external: [uniclass("EF_25_10_25", EF_EXTERNAL_WALLS, "related")],
|
|
514
518
|
label: "Cladding",
|
|
515
519
|
note: "No AAT mapping. AAT 300014860 `cladding` is the metal-coating process, a different thing entirely, and a plausible wrong mapping is worse than none.",
|
|
520
|
+
placement: "field",
|
|
516
521
|
provenance: AUTHORED2,
|
|
517
522
|
related: [partOf("external-wall")],
|
|
518
523
|
slug: "cladding"
|
|
@@ -523,6 +528,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
523
528
|
external: [aat("300002691", "wainscoting", "narrow")],
|
|
524
529
|
label: "Panelling",
|
|
525
530
|
note: "AAT's nearest term, `wainscoting`, is panelling carried only to dado height; this term covers full-height panelling too, so the AAT concept is narrower.",
|
|
531
|
+
placement: "joinery",
|
|
526
532
|
provenance: AUTHORED2,
|
|
527
533
|
related: [partOf(INTERNAL_WALL)],
|
|
528
534
|
slug: "panelling"
|
|
@@ -534,6 +540,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
534
540
|
uniclass("EF_25_10_60", "Parapet walls", "exact")
|
|
535
541
|
],
|
|
536
542
|
label: "Parapet",
|
|
543
|
+
placement: "field",
|
|
537
544
|
provenance: AUTHORED2,
|
|
538
545
|
related: [partOf("external-wall")],
|
|
539
546
|
slug: "parapet"
|
|
@@ -546,6 +553,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
546
553
|
uniclass("EF_30_20", "Floors", "exact")
|
|
547
554
|
],
|
|
548
555
|
label: "Floor",
|
|
556
|
+
placement: "underfoot",
|
|
549
557
|
provenance: AUTHORED2,
|
|
550
558
|
slug: "floor"
|
|
551
559
|
},
|
|
@@ -553,6 +561,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
553
561
|
definition: "The wearing layer laid on a floor, replaceable without touching the floor beneath it.",
|
|
554
562
|
external: [aat("300014866", "flooring", "close")],
|
|
555
563
|
label: "Floor Finish",
|
|
564
|
+
placement: "underfoot",
|
|
556
565
|
provenance: AUTHORED2,
|
|
557
566
|
related: [partOf("floor")],
|
|
558
567
|
slug: "floor-finish"
|
|
@@ -566,6 +575,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
566
575
|
uniclass("EF_30_20", "Floors", "broad")
|
|
567
576
|
],
|
|
568
577
|
label: "Raised Floor",
|
|
578
|
+
placement: "underfoot",
|
|
569
579
|
provenance: AUTHORED2,
|
|
570
580
|
slug: "raised-floor"
|
|
571
581
|
},
|
|
@@ -577,6 +587,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
577
587
|
uniclass("EF_30_25_12", "Ceilings", "exact")
|
|
578
588
|
],
|
|
579
589
|
label: "Ceiling",
|
|
590
|
+
placement: "overhead",
|
|
580
591
|
provenance: AUTHORED2,
|
|
581
592
|
slug: "ceiling"
|
|
582
593
|
},
|
|
@@ -589,6 +600,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
589
600
|
uniclass("EF_30_25_12", "Ceilings", "broad")
|
|
590
601
|
],
|
|
591
602
|
label: "Suspended Ceiling",
|
|
603
|
+
placement: "overhead",
|
|
592
604
|
provenance: AUTHORED2,
|
|
593
605
|
slug: "suspended-ceiling"
|
|
594
606
|
},
|
|
@@ -599,6 +611,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
599
611
|
uniclass("EF_30_25_80", "Soffits", "exact")
|
|
600
612
|
],
|
|
601
613
|
label: "Soffit",
|
|
614
|
+
placement: "overhead",
|
|
602
615
|
provenance: AUTHORED2,
|
|
603
616
|
slug: "soffit"
|
|
604
617
|
},
|
|
@@ -610,6 +623,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
610
623
|
uniclass("EF_30_10", "Roofs", "exact")
|
|
611
624
|
],
|
|
612
625
|
label: "Roof",
|
|
626
|
+
placement: "overhead",
|
|
613
627
|
provenance: AUTHORED2,
|
|
614
628
|
slug: "roof"
|
|
615
629
|
},
|
|
@@ -621,6 +635,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
621
635
|
uniclass("EF_30_10_30", "Flat roofs", "exact")
|
|
622
636
|
],
|
|
623
637
|
label: "Flat Roof",
|
|
638
|
+
placement: "overhead",
|
|
624
639
|
provenance: AUTHORED2,
|
|
625
640
|
slug: "flat-roof"
|
|
626
641
|
},
|
|
@@ -632,6 +647,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
632
647
|
uniclass("EF_30_10_64", "Pitched roofs", "exact")
|
|
633
648
|
],
|
|
634
649
|
label: "Pitched Roof",
|
|
650
|
+
placement: "overhead",
|
|
635
651
|
provenance: AUTHORED2,
|
|
636
652
|
slug: "pitched-roof"
|
|
637
653
|
},
|
|
@@ -640,6 +656,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
640
656
|
definition: "A glazed opening in a roof plane, admitting daylight from above rather than from a wall.",
|
|
641
657
|
external: [aat("300003062", "skylights", "exact")],
|
|
642
658
|
label: "Rooflight",
|
|
659
|
+
placement: "unpainted",
|
|
643
660
|
provenance: AUTHORED2,
|
|
644
661
|
related: [partOf(ROOF)],
|
|
645
662
|
slug: "rooflight"
|
|
@@ -652,6 +669,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
652
669
|
uniclass("EF_25_30_25", "Doors", "exact")
|
|
653
670
|
],
|
|
654
671
|
label: "Door",
|
|
672
|
+
placement: "joinery",
|
|
655
673
|
provenance: AUTHORED2,
|
|
656
674
|
slug: "door"
|
|
657
675
|
},
|
|
@@ -662,6 +680,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
662
680
|
uniclass("EF_25_30_97", "Windows", "exact")
|
|
663
681
|
],
|
|
664
682
|
label: "Window",
|
|
683
|
+
placement: "trim",
|
|
665
684
|
provenance: AUTHORED2,
|
|
666
685
|
slug: "window"
|
|
667
686
|
},
|
|
@@ -669,6 +688,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
669
688
|
definition: "The transparent infill held in an opening or frame: the glass, not the opening it fills.",
|
|
670
689
|
label: "Glazing",
|
|
671
690
|
note: "No AAT mapping. AAT carries `glazing` only as processes and `glass` only as a material, and neither of those is this element.",
|
|
691
|
+
placement: "unpainted",
|
|
672
692
|
provenance: AUTHORED2,
|
|
673
693
|
related: [partOf(WINDOW), partOf("curtain-walling")],
|
|
674
694
|
slug: "glazing"
|
|
@@ -682,13 +702,16 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
682
702
|
uniclass("EF_25_10_25", EF_EXTERNAL_WALLS, "broad")
|
|
683
703
|
],
|
|
684
704
|
label: "Curtain Walling",
|
|
705
|
+
placement: "unpainted",
|
|
685
706
|
provenance: AUTHORED2,
|
|
686
707
|
slug: "curtain-walling"
|
|
687
708
|
},
|
|
688
709
|
{
|
|
710
|
+
altLabels: ["shutters"],
|
|
689
711
|
definition: "A hinged or sliding cover to a window opening, working by moving rather than by drawing.",
|
|
690
712
|
external: [aat("300003173", "shutters (opening covers)", "exact")],
|
|
691
713
|
label: "Shutter",
|
|
714
|
+
placement: "trim",
|
|
692
715
|
provenance: AUTHORED2,
|
|
693
716
|
related: [partOf(WINDOW)],
|
|
694
717
|
slug: "shutter"
|
|
@@ -701,6 +724,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
701
724
|
aat("300045375", "door hardware", "narrow")
|
|
702
725
|
],
|
|
703
726
|
label: "Ironmongery",
|
|
727
|
+
placement: "unpainted",
|
|
704
728
|
provenance: AUTHORED2,
|
|
705
729
|
related: [partOf(DOOR), partOf(WINDOW)],
|
|
706
730
|
slug: "ironmongery"
|
|
@@ -715,6 +739,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
715
739
|
uniclass("EF_35_10", "Stairs", "exact")
|
|
716
740
|
],
|
|
717
741
|
label: "Stair",
|
|
742
|
+
placement: "underfoot",
|
|
718
743
|
provenance: AUTHORED2,
|
|
719
744
|
slug: "stair"
|
|
720
745
|
},
|
|
@@ -722,6 +747,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
722
747
|
definition: "The horizontal face of a step, which is the surface the foot lands on.",
|
|
723
748
|
external: [aat("300003326", "treads", "exact")],
|
|
724
749
|
label: "Stair Tread",
|
|
750
|
+
placement: "underfoot",
|
|
725
751
|
provenance: AUTHORED2,
|
|
726
752
|
related: [partOf(STAIR)],
|
|
727
753
|
slug: "stair-tread"
|
|
@@ -730,6 +756,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
730
756
|
definition: "The vertical face between one tread and the next, absent on an open-riser stair.",
|
|
731
757
|
external: [aat("300003325", "risers (step components)", "exact")],
|
|
732
758
|
label: "Stair Riser",
|
|
759
|
+
placement: "underfoot",
|
|
733
760
|
provenance: AUTHORED2,
|
|
734
761
|
related: [partOf(STAIR)],
|
|
735
762
|
slug: "stair-riser"
|
|
@@ -743,6 +770,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
743
770
|
uniclass("EF_25_55", "Barriers", "broad")
|
|
744
771
|
],
|
|
745
772
|
label: "Balustrade",
|
|
773
|
+
placement: "trim",
|
|
746
774
|
provenance: AUTHORED2,
|
|
747
775
|
related: [partOf(STAIR)],
|
|
748
776
|
slug: "balustrade"
|
|
@@ -751,6 +779,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
751
779
|
definition: "The continuous rail sized to be gripped while moving, on a balustrade or fixed to a wall.",
|
|
752
780
|
external: [aat("300002022", "handrails", "exact")],
|
|
753
781
|
label: "Handrail",
|
|
782
|
+
placement: "trim",
|
|
754
783
|
provenance: AUTHORED2,
|
|
755
784
|
related: [partOf(BALUSTRADE)],
|
|
756
785
|
slug: "handrail"
|
|
@@ -760,6 +789,7 @@ var ELEMENT_FABRIC_TERMS = [
|
|
|
760
789
|
definition: "The post terminating or turning a balustrade, taking the load the handrail cannot.",
|
|
761
790
|
external: [aat("300003296", "newels", "exact")],
|
|
762
791
|
label: "Newel",
|
|
792
|
+
placement: "trim",
|
|
763
793
|
provenance: AUTHORED2,
|
|
764
794
|
related: [partOf(BALUSTRADE)],
|
|
765
795
|
slug: "newel"
|
|
@@ -777,6 +807,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
777
807
|
uniclass("EF_40_20", "Fittings", "broad")
|
|
778
808
|
],
|
|
779
809
|
label: "Millwork",
|
|
810
|
+
placement: "joinery",
|
|
780
811
|
provenance: AUTHORED2,
|
|
781
812
|
slug: "millwork"
|
|
782
813
|
},
|
|
@@ -790,6 +821,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
790
821
|
uniclass("EF_40_20", "Fittings", "broad")
|
|
791
822
|
],
|
|
792
823
|
label: "Cabinetry",
|
|
824
|
+
placement: "joinery",
|
|
793
825
|
provenance: AUTHORED2,
|
|
794
826
|
slug: "cabinetry"
|
|
795
827
|
},
|
|
@@ -798,6 +830,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
798
830
|
definition: "The working surface spanning a run of cabinetry, specified for what is done on it.",
|
|
799
831
|
external: [aat("300375691", "countertops", "exact")],
|
|
800
832
|
label: "Worktop",
|
|
833
|
+
placement: "joinery",
|
|
801
834
|
provenance: AUTHORED2,
|
|
802
835
|
related: [partOf("cabinetry")],
|
|
803
836
|
slug: "worktop"
|
|
@@ -809,6 +842,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
809
842
|
uniclass("EF_40_20", "Fittings", "broad")
|
|
810
843
|
],
|
|
811
844
|
label: "Shelving",
|
|
845
|
+
placement: "joinery",
|
|
812
846
|
provenance: AUTHORED2,
|
|
813
847
|
slug: "shelving"
|
|
814
848
|
},
|
|
@@ -819,6 +853,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
819
853
|
external: [aat("300040157", "built-in furniture", "broad")],
|
|
820
854
|
label: "Wardrobe",
|
|
821
855
|
note: "AAT splits `wardrobes` into a room sense and a loose-furniture sense, and a fitted wardrobe is neither, so the broader `built-in furniture` is carried instead.",
|
|
856
|
+
placement: "joinery",
|
|
822
857
|
provenance: AUTHORED2,
|
|
823
858
|
slug: "wardrobe"
|
|
824
859
|
},
|
|
@@ -831,6 +866,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
831
866
|
],
|
|
832
867
|
label: "Radiator",
|
|
833
868
|
note: "The Uniclass match is `related`, not `broad`: EF_60_40_37 is the heating FUNCTION, and a radiator is not a kind of function.",
|
|
869
|
+
placement: "field",
|
|
834
870
|
provenance: AUTHORED2,
|
|
835
871
|
slug: "radiator"
|
|
836
872
|
},
|
|
@@ -842,6 +878,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
842
878
|
uniclass("EF_70_80", "Lighting", "related")
|
|
843
879
|
],
|
|
844
880
|
label: "Luminaire",
|
|
881
|
+
placement: "unpainted",
|
|
845
882
|
provenance: AUTHORED2,
|
|
846
883
|
slug: "luminaire"
|
|
847
884
|
},
|
|
@@ -850,6 +887,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
850
887
|
definition: "The plumbed-in vessels of a wet room: basin, WC pan, cistern, bath, shower tray.",
|
|
851
888
|
external: [aat("300052575", "plumbing fixtures", "close")],
|
|
852
889
|
label: "Sanitaryware",
|
|
890
|
+
placement: "unpainted",
|
|
853
891
|
provenance: AUTHORED2,
|
|
854
892
|
slug: "sanitaryware"
|
|
855
893
|
},
|
|
@@ -861,6 +899,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
861
899
|
uniclass("EF_55_70_38", "Hot and cold water supply", "related")
|
|
862
900
|
],
|
|
863
901
|
label: "Tapware",
|
|
902
|
+
placement: "unpainted",
|
|
864
903
|
provenance: AUTHORED2,
|
|
865
904
|
related: [partOf("sanitaryware")],
|
|
866
905
|
slug: "tapware"
|
|
@@ -873,6 +912,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
873
912
|
uniclass("EF_70_30_80", "Small power supply", "related")
|
|
874
913
|
],
|
|
875
914
|
label: "Socket & Switch",
|
|
915
|
+
placement: "unpainted",
|
|
876
916
|
provenance: AUTHORED2,
|
|
877
917
|
slug: "socket-outlet"
|
|
878
918
|
},
|
|
@@ -882,6 +922,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
882
922
|
definition: "The board closing the wall-to-floor junction, protecting the base and hiding tolerance.",
|
|
883
923
|
external: [aat("300002681", "baseboards", "exact")],
|
|
884
924
|
label: "Skirting",
|
|
925
|
+
placement: "trim",
|
|
885
926
|
provenance: AUTHORED2,
|
|
886
927
|
related: [partOf(INTERNAL_WALL)],
|
|
887
928
|
slug: "skirting"
|
|
@@ -892,6 +933,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
892
933
|
external: [aat("300003429", "moldings (object components)", "broad")],
|
|
893
934
|
label: "Architrave",
|
|
894
935
|
note: "AAT 300001780 `architraves (entablature)` is the classical member and not this term, despite the shared word; the broader `moldings` concept is carried instead.",
|
|
936
|
+
placement: "trim",
|
|
895
937
|
provenance: AUTHORED2,
|
|
896
938
|
related: [partOf(DOOR)],
|
|
897
939
|
slug: "architrave"
|
|
@@ -901,6 +943,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
901
943
|
definition: "The moulded band at the wall-to-ceiling junction; a plain quadrant in that position is coving.",
|
|
902
944
|
external: [aat("300001788", "cornices", "exact")],
|
|
903
945
|
label: "Cornice",
|
|
946
|
+
placement: "overhead",
|
|
904
947
|
provenance: AUTHORED2,
|
|
905
948
|
related: [partOf(INTERNAL_WALL)],
|
|
906
949
|
slug: "cornice"
|
|
@@ -910,6 +953,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
910
953
|
definition: "The horizontal moulding at chair-back height, splitting the wall into dado and field.",
|
|
911
954
|
external: [aat("300002684", "chair rails", "exact")],
|
|
912
955
|
label: "Dado Rail",
|
|
956
|
+
placement: "trim",
|
|
913
957
|
provenance: AUTHORED2,
|
|
914
958
|
related: [partOf(INTERNAL_WALL)],
|
|
915
959
|
slug: "dado-rail"
|
|
@@ -918,6 +962,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
918
962
|
definition: "The high horizontal moulding profiled to take hanging hooks, so pictures move undrilled.",
|
|
919
963
|
external: [aat("300002687", "picture rails", "exact")],
|
|
920
964
|
label: "Picture Rail",
|
|
965
|
+
placement: "trim",
|
|
921
966
|
provenance: AUTHORED2,
|
|
922
967
|
related: [partOf(INTERNAL_WALL)],
|
|
923
968
|
slug: "picture-rail"
|
|
@@ -932,6 +977,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
932
977
|
],
|
|
933
978
|
label: "Column",
|
|
934
979
|
note: "The Uniclass match is `related`: a column is a component of a framed structure, not a kind of one. The same holds for `beam` and `truss`.",
|
|
980
|
+
placement: "field",
|
|
935
981
|
provenance: AUTHORED2,
|
|
936
982
|
slug: "column"
|
|
937
983
|
},
|
|
@@ -943,6 +989,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
943
989
|
uniclass("EF_20_10_30", EF_FRAMED_STRUCTURES, "related")
|
|
944
990
|
],
|
|
945
991
|
label: "Beam",
|
|
992
|
+
placement: "overhead",
|
|
946
993
|
provenance: AUTHORED2,
|
|
947
994
|
slug: "beam"
|
|
948
995
|
},
|
|
@@ -953,6 +1000,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
953
1000
|
uniclass("EF_20_10_30", EF_FRAMED_STRUCTURES, "related")
|
|
954
1001
|
],
|
|
955
1002
|
label: "Truss",
|
|
1003
|
+
placement: "overhead",
|
|
956
1004
|
provenance: AUTHORED2,
|
|
957
1005
|
related: [partOf(ROOF)],
|
|
958
1006
|
slug: "truss"
|
|
@@ -962,6 +1010,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
962
1010
|
definition: "The built opening and hearth holding a fire, taken with the flue it discharges into.",
|
|
963
1011
|
external: [aat("300052267", "fireplaces", "exact")],
|
|
964
1012
|
label: "Fireplace",
|
|
1013
|
+
placement: "joinery",
|
|
965
1014
|
provenance: AUTHORED2,
|
|
966
1015
|
slug: "fireplace"
|
|
967
1016
|
},
|
|
@@ -970,6 +1019,7 @@ var ELEMENT_FITOUT_TERMS = [
|
|
|
970
1019
|
definition: "The surround and shelf framing a fireplace opening, replaceable without touching it.",
|
|
971
1020
|
external: [aat("300052347", "mantels (fireplace components)", "exact")],
|
|
972
1021
|
label: "Chimneypiece",
|
|
1022
|
+
placement: "joinery",
|
|
973
1023
|
provenance: AUTHORED2,
|
|
974
1024
|
related: [partOf("fireplace")],
|
|
975
1025
|
slug: "chimneypiece"
|
|
@@ -7460,7 +7510,7 @@ var resolveReference = (reference) => INDEX.byKey.get(canonicalKey(reference));
|
|
|
7460
7510
|
// src/v1.ts
|
|
7461
7511
|
var TAXONOMY_BASE_URI = "https://taxonomy.materialinstruments.com";
|
|
7462
7512
|
var TAXONOMY_SNAPSHOT = "2026-09-01";
|
|
7463
|
-
var TAXONOMY_VERSION = "1.
|
|
7513
|
+
var TAXONOMY_VERSION = "1.2.0";
|
|
7464
7514
|
var PUBLISHED_V1_BASELINE = "2026-08-30";
|
|
7465
7515
|
var TAX45_REVIEW_SNAPSHOT = "2026-08-31";
|
|
7466
7516
|
var compareText = (left, right) => {
|
|
@@ -7591,6 +7641,7 @@ var addTermNodes = (assembly, axis, axisUri) => {
|
|
|
7591
7641
|
lifecycle: governance.lifecycle,
|
|
7592
7642
|
...term10.note === void 0 ? {} : { note: term10.note },
|
|
7593
7643
|
order: termOrder,
|
|
7644
|
+
...term10.placement === void 0 ? {} : { placement: term10.placement },
|
|
7594
7645
|
provenance: governance.provenance,
|
|
7595
7646
|
...term10.rank === void 0 ? {} : { rank: term10.rank },
|
|
7596
7647
|
...term10.searchedWithout === void 0 ? {} : { searchedWithout: term10.searchedWithout },
|
package/dist/match.d.ts
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type { RelationRole } from "./term.js";
|
|
2
|
+
/** The role an assertion plays inside a compound expression. */
|
|
3
|
+
export type BundleRole = RelationRole;
|
|
4
|
+
export interface BundleMemberInput {
|
|
5
|
+
/** A qualified canonical term or typed relation, e.g. `style.minimalism`. */
|
|
6
|
+
assertion: string;
|
|
7
|
+
/** Defaults to accent: an unspecified role is evidence of presence, not necessity. */
|
|
8
|
+
role?: BundleRole;
|
|
9
|
+
}
|
|
10
|
+
export interface BundleMember {
|
|
11
|
+
assertion: string;
|
|
12
|
+
role: BundleRole;
|
|
13
|
+
}
|
|
14
|
+
export interface CanonicalBundle {
|
|
15
|
+
kind: "all-of";
|
|
16
|
+
/** Stable, reversible identity derived from the canonical serialization. */
|
|
17
|
+
id: string;
|
|
18
|
+
members: readonly BundleMember[];
|
|
19
|
+
serialization: string;
|
|
20
|
+
}
|
|
21
|
+
export type AlternativeReason = "query-alternative" | "source-ambiguous";
|
|
22
|
+
export interface CanonicalAlternatives {
|
|
23
|
+
kind: "any-of";
|
|
24
|
+
/** Stable, reversible identity derived from the sorted alternative bundle identities. */
|
|
25
|
+
id: string;
|
|
26
|
+
alternatives: readonly CanonicalBundle[];
|
|
27
|
+
reason: AlternativeReason;
|
|
28
|
+
serialization: string;
|
|
29
|
+
}
|
|
30
|
+
export declare const MATCH_WEIGHTS: Readonly<Record<RelationRole, number>>;
|
|
31
|
+
export declare const DEFAULT_BUNDLE_ROLE: BundleRole;
|
|
32
|
+
/**
|
|
33
|
+
* Give a bundle one canonical spelling. Duplicate assertions collapse; constitutive wins when the
|
|
34
|
+
* same assertion was supplied in both roles because removing it would otherwise change identity.
|
|
35
|
+
*/
|
|
36
|
+
export declare const defineBundle: (inputs: readonly BundleMemberInput[]) => CanonicalBundle;
|
|
37
|
+
export declare const defineAlternatives: (inputs: readonly (CanonicalBundle | readonly BundleMemberInput[])[], reason: AlternativeReason) => CanonicalAlternatives;
|
|
38
|
+
export interface BundleMatch {
|
|
39
|
+
eligible: boolean;
|
|
40
|
+
matched: readonly string[];
|
|
41
|
+
missingAccents: readonly string[];
|
|
42
|
+
missingConstitutive: readonly string[];
|
|
43
|
+
/** Fixed-weight score in [0, 1]. Ineligible matches always score zero. */
|
|
44
|
+
score: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Match without penalising extra candidate annotations. Richer annotation should not make an
|
|
48
|
+
* otherwise identical subject rank lower.
|
|
49
|
+
*/
|
|
50
|
+
export declare const matchBundle: (bundle: CanonicalBundle, candidateAssertions: Iterable<string>) => BundleMatch;
|
|
51
|
+
export interface AlternativesMatch {
|
|
52
|
+
alternative: CanonicalBundle;
|
|
53
|
+
match: BundleMatch;
|
|
54
|
+
}
|
|
55
|
+
/** The strongest eligible reading wins; bundle identity makes ties deterministic. */
|
|
56
|
+
export declare const matchAlternatives: (alternatives: CanonicalAlternatives, candidateAssertions: Iterable<string>) => AlternativesMatch;
|
|
57
|
+
/** How well a candidate answered the query. `exact` matched every member, accents included. */
|
|
58
|
+
export type MatchTier = "exact" | "eligible" | "relaxed";
|
|
59
|
+
/** A subject to rank: an opaque id and the assertions annotating it. */
|
|
60
|
+
export interface CandidateAnnotations {
|
|
61
|
+
id: string;
|
|
62
|
+
assertions: readonly string[];
|
|
63
|
+
}
|
|
64
|
+
export interface RankedCandidate {
|
|
65
|
+
id: string;
|
|
66
|
+
tier: MatchTier;
|
|
67
|
+
match: BundleMatch;
|
|
68
|
+
}
|
|
69
|
+
export interface BundleSearch {
|
|
70
|
+
/** The strongest tier present. Absent when no candidate carried even one member. */
|
|
71
|
+
tier?: MatchTier;
|
|
72
|
+
results: readonly RankedCandidate[];
|
|
73
|
+
/** True when nothing was eligible and the relaxed tier was served in its place. */
|
|
74
|
+
relaxed: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Constitutive members NO candidate in this corpus carries. Populated only when nothing was
|
|
77
|
+
* eligible, because that is when it is the answer: these are the conjuncts the corpus cannot
|
|
78
|
+
* satisfy, and naming them is what turns an empty result into a usable one.
|
|
79
|
+
*/
|
|
80
|
+
blocking: readonly string[];
|
|
81
|
+
}
|
|
82
|
+
export interface SearchOptions {
|
|
83
|
+
/** Refuse the relaxed tier: return nothing rather than a labelled partial answer. */
|
|
84
|
+
strict?: boolean;
|
|
85
|
+
/** Truncate the ranked list. Applied after ordering, so it never changes which result is first. */
|
|
86
|
+
limit?: number;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Rank a corpus against a bundle under the published rule. Deterministic: the same corpus in any
|
|
90
|
+
* input order returns the same list.
|
|
91
|
+
*/
|
|
92
|
+
export declare const searchBundle: (bundle: CanonicalBundle, candidates: Iterable<CandidateAnnotations>, options?: SearchOptions) => BundleSearch;
|
|
93
|
+
export interface MatchTestCandidate {
|
|
94
|
+
assertions: readonly string[];
|
|
95
|
+
id: string;
|
|
96
|
+
}
|
|
97
|
+
export interface MatchTestVector {
|
|
98
|
+
candidates: readonly MatchTestCandidate[];
|
|
99
|
+
expectedEligibleOrder: readonly string[];
|
|
100
|
+
id: string;
|
|
101
|
+
query: CanonicalBundle;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Executable test vectors published for consumers implementing the same rule in another language.
|
|
105
|
+
* One is residential, one commercial; the matcher itself has no market branch.
|
|
106
|
+
*/
|
|
107
|
+
export declare const MATCH_TEST_VECTORS: readonly MatchTestVector[];
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export declare const MATERIALGRAPH_CROSSOVER_SOURCE = "materialgraph@b55d7ad33807d9653bd4838b7908fb1d100440a8:packages/products/src/search/colour-material-lexicon.ts:46-102";
|
|
2
|
+
export declare const COLORSCOPE_CROSSOVER_SOURCE = "materialinstruments/colorscope@c0662caabe7cd8604241a8a7b2608fa5bc71de51:packages/core/data/reference/v1/taxonomy.json";
|
|
3
|
+
export declare const BRASS_MATERIAL_SOURCE = "https://archive.copper.org/applications/industrial/DesignGuide/terms.php";
|
|
4
|
+
export declare const BRASS_FINISH_SOURCE = "https://nickelinstitute.org/media/lxxh1zwr/2023-nickelplatinghandbooka5_printablepdf.pdf section 5";
|
|
5
|
+
export declare const NICKEL_MATERIAL_SOURCE = "https://nickelinstitute.org/en/nickel-applications/";
|
|
6
|
+
export declare const NICKEL_FINISH_SOURCE = "https://nickelinstitute.org/en/nickel-applications/plating";
|
|
7
|
+
export declare const CROSSOVER_DEFINITION_SOURCES: {
|
|
8
|
+
readonly alabaster: "https://webapps.bgs.ac.uk/memoirs/docs/B06070.html";
|
|
9
|
+
readonly brass: "https://archive.copper.org/applications/industrial/DesignGuide/terms.php; https://nickelinstitute.org/media/lxxh1zwr/2023-nickelplatinghandbooka5_printablepdf.pdf section 5";
|
|
10
|
+
readonly bronze: "https://archive.copper.org/applications/industrial/DesignGuide/terms.php; https://archive.copper.org/applications/architecture/arch_dhb/technical-discussion/copper_alloys/";
|
|
11
|
+
readonly cherry: "https://research.fs.usda.gov/download/treesearch/37440.pdf";
|
|
12
|
+
readonly chestnut: "https://research.fs.usda.gov/download/treesearch/37440.pdf";
|
|
13
|
+
readonly chrome: "ISO 1456:2009, https://www.iso.org/standard/50237.html; ISO 6158:2018, https://www.iso.org/standard/72269.html";
|
|
14
|
+
readonly clay: "https://pubs.usgs.gov/info/clays/";
|
|
15
|
+
readonly concrete: "https://www.concrete.org/frequentlyaskedquestions.aspx?faqid=640";
|
|
16
|
+
readonly copper: "https://archive.copper.org/applications/industrial/DesignGuide/selection/elect02.php";
|
|
17
|
+
readonly cork: "https://apcor.pt/en/what-it-is";
|
|
18
|
+
readonly cotton: "https://www.fao.org/docrep/pdf/012/i0987e/i0987e00.pdf";
|
|
19
|
+
readonly denim: "https://cottonworks.com/encyclopedia-item/denim/";
|
|
20
|
+
readonly ebony: "https://research.fs.usda.gov/download/treesearch/37440.pdf";
|
|
21
|
+
readonly gold: "https://www.usgs.gov/centers/national-minerals-information-center/gold-statistics-and-information";
|
|
22
|
+
readonly gunmetal: "https://live.copper.org/applications/marine/cuni/alloys/pub-206-copper-alloys-for-marine-environments.pdf";
|
|
23
|
+
readonly iron: "https://www.usgs.gov/centers/national-minerals-information-center/iron-and-steel-statistics-and-information";
|
|
24
|
+
readonly jade: "https://www.gia.edu/jade-description";
|
|
25
|
+
readonly jute: "https://www.fao.org/markets-and-trade/commodities-overview/fibres/jute-and-hard-fibres/";
|
|
26
|
+
readonly leather: "ISO 15115, https://www.iso.org/obp/ui?_escaped_fragment_=iso%3Astd%3Aiso%3A15115%3Aed-1%3Av1%3Aen";
|
|
27
|
+
readonly limestone: "https://pubs.usgs.gov/fs/2008/3089/";
|
|
28
|
+
readonly linen: "https://allianceflaxlinenhemp.eu/en/document_resources/35/download";
|
|
29
|
+
readonly mahogany: "https://research.fs.usda.gov/download/treesearch/37440.pdf";
|
|
30
|
+
readonly marble: "https://www.naturalstoneinstitute.org/designprofessionals/varieties/definition/; ASTM C503 via https://www.naturalstoneinstitute.org/stoneprofessionals/astm/";
|
|
31
|
+
readonly nickel: "https://nickelinstitute.org/en/nickel-applications/; https://nickelinstitute.org/en/nickel-applications/plating";
|
|
32
|
+
readonly oak: "https://research.fs.usda.gov/download/treesearch/37440.pdf";
|
|
33
|
+
readonly obsidian: "https://www.usgs.gov/glossary/volcano-hazards-program-glossary";
|
|
34
|
+
readonly onyx: "https://www.naturalstoneinstitute.org/consumers/varieties/marble/";
|
|
35
|
+
readonly pewter: "Getty AAT 300010979, https://www.getty.edu/vow/AATFullDisplay?find=&logic=AND¬e=&page=1&subjectid=300010979";
|
|
36
|
+
readonly platinum: "https://www.usgs.gov/centers/national-minerals-information-center/platinum-group-metals-statistics-and-information";
|
|
37
|
+
readonly rosewood: "https://research.fs.usda.gov/download/treesearch/37440.pdf";
|
|
38
|
+
readonly silver: "https://silverinstitute.org/silver-element-essentials/";
|
|
39
|
+
readonly sisal: "https://www.fao.org/docrep/pdf/012/i0987e/i0987e00.pdf";
|
|
40
|
+
readonly slate: "ASTM C629 via https://www.naturalstoneinstitute.org/stoneprofessionals/astm/";
|
|
41
|
+
readonly steel: "https://worldsteel.org/about-steel/what-is-steel/";
|
|
42
|
+
readonly stone: "https://www.naturalstoneinstitute.org/about/sponsorship-and-advertising/sponsored-content-guidelines/";
|
|
43
|
+
readonly suede: "ISO 15115, https://www.iso.org/obp/ui?_escaped_fragment_=iso%3Astd%3Aiso%3A15115%3Aed-1%3Av1%3Aen";
|
|
44
|
+
readonly teak: "https://research.fs.usda.gov/download/treesearch/37440.pdf";
|
|
45
|
+
readonly terracotta: "Getty AAT 300047296, https://www.getty.edu/vow/AATFullDisplay?find=building&logic=AND¬e=&subjectid=300047296";
|
|
46
|
+
readonly travertine: "https://www.naturalstoneinstitute.org/about/sponsorship-and-advertising/sponsored-content-guidelines/";
|
|
47
|
+
readonly walnut: "https://research.fs.usda.gov/treesearch/32210";
|
|
48
|
+
readonly wood: "https://research.fs.usda.gov/download/treesearch/37440.pdf";
|
|
49
|
+
readonly wool: "https://www.fao.org/docrep/pdf/012/i0987e/i0987e00.pdf";
|
|
50
|
+
};
|
|
51
|
+
export type MaterialGraphCrossoverPhrase = keyof typeof CROSSOVER_DEFINITION_SOURCES;
|
|
52
|
+
export declare const crossoverSource: (phrase: MaterialGraphCrossoverPhrase) => string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const MATERIALGRAPH_SEARCH_CORPUS_COMMIT: "53df40868bfb09bfe69bc66c455c051e34005ae1";
|
|
2
|
+
export declare const MATERIALGRAPH_SEARCH_CORPUS_PATH: "packages/products/src/benchmark/fixtures/benchmark-cases-2026-07-31.1.json";
|
|
3
|
+
export declare const MATERIALGRAPH_SEARCH_CORPUS_SNAPSHOT: "2026-07-31";
|
|
4
|
+
/**
|
|
5
|
+
* The fixture evidences searched language and admission need. Taxonomy authors the concept boundary;
|
|
6
|
+
* neither an individual phrase nor the 244-query fixture as a whole is treated as that definition.
|
|
7
|
+
*/
|
|
8
|
+
export declare const searchCorpusEvidence: (phrases: string) => string;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import type { CanonicalAlternatives, CanonicalBundle } from "./match.js";
|
|
2
|
+
export declare const TASTE_ASSERTION_CONTRACT_VERSION: "1.0.0";
|
|
3
|
+
export declare const TAXONOMY_SNAPSHOT_VERSION: "2026-08-31";
|
|
4
|
+
export type AssertionRole = "taste" | "project_context" | "requirement";
|
|
5
|
+
export type AssertionAuthority = "explicit" | "behavioral" | "inferred";
|
|
6
|
+
export type AssertionPolarity = "positive" | "negative" | "never";
|
|
7
|
+
export type AssertionScope = {
|
|
8
|
+
kind: "person";
|
|
9
|
+
} | {
|
|
10
|
+
kind: "household";
|
|
11
|
+
householdId: string;
|
|
12
|
+
} | {
|
|
13
|
+
kind: "project";
|
|
14
|
+
projectId: string;
|
|
15
|
+
} | {
|
|
16
|
+
kind: "room_type";
|
|
17
|
+
roomTypeId: string;
|
|
18
|
+
} | {
|
|
19
|
+
kind: "room";
|
|
20
|
+
roomId: string;
|
|
21
|
+
} | {
|
|
22
|
+
kind: "surface";
|
|
23
|
+
roomId: string;
|
|
24
|
+
surfaceId: string;
|
|
25
|
+
};
|
|
26
|
+
export interface AssertionProvenance {
|
|
27
|
+
/** The application, import or instrument that produced the observation. */
|
|
28
|
+
sourceSystem: string;
|
|
29
|
+
/** Version of the source data, prompt, fixture or export used when the evidence was observed. */
|
|
30
|
+
sourceSnapshotVersion: string;
|
|
31
|
+
sourceRecordId?: string;
|
|
32
|
+
sourceUrl?: string;
|
|
33
|
+
/** Optional id for the observation from which this assertion was proposed. */
|
|
34
|
+
observationId?: string;
|
|
35
|
+
}
|
|
36
|
+
interface SourceMeaning {
|
|
37
|
+
/** Source vocabulary field, before canonicalisation. */
|
|
38
|
+
sourceField: string;
|
|
39
|
+
/** Verbatim source value; never replaced by the canonical label. */
|
|
40
|
+
sourceValue: string;
|
|
41
|
+
/** Version of the source-specific mapping policy. */
|
|
42
|
+
crosswalkVersion: string;
|
|
43
|
+
/** Version of the canonical vocabulary against which mapping ran. */
|
|
44
|
+
taxonomySnapshotVersion: string;
|
|
45
|
+
}
|
|
46
|
+
export interface ResolvedAssertionMeaning extends SourceMeaning {
|
|
47
|
+
kind: "resolved";
|
|
48
|
+
canonical: CanonicalBundle;
|
|
49
|
+
}
|
|
50
|
+
export interface AmbiguousAssertionMeaning extends SourceMeaning {
|
|
51
|
+
kind: "ambiguous";
|
|
52
|
+
alternatives: CanonicalAlternatives;
|
|
53
|
+
}
|
|
54
|
+
export interface UnresolvedAssertionMeaning extends SourceMeaning {
|
|
55
|
+
kind: "unresolved";
|
|
56
|
+
}
|
|
57
|
+
export type AssertionMeaning = ResolvedAssertionMeaning | AmbiguousAssertionMeaning | UnresolvedAssertionMeaning;
|
|
58
|
+
interface PortableAssertionBase {
|
|
59
|
+
/** Stable application-owned identifier for this assertion event. */
|
|
60
|
+
id: string;
|
|
61
|
+
contractVersion: typeof TASTE_ASSERTION_CONTRACT_VERSION;
|
|
62
|
+
actorId: string;
|
|
63
|
+
/** Whose taste or project view the assertion describes; never inferred from actorId. */
|
|
64
|
+
subjectId: string;
|
|
65
|
+
/** Project context is explicit even when the assertion's scope is durable and personal. */
|
|
66
|
+
projectId: string;
|
|
67
|
+
authority: AssertionAuthority;
|
|
68
|
+
polarity: AssertionPolarity;
|
|
69
|
+
scope: AssertionScope;
|
|
70
|
+
meaning: AssertionMeaning;
|
|
71
|
+
provenance: AssertionProvenance;
|
|
72
|
+
observedAt: string;
|
|
73
|
+
confirmedAt?: string;
|
|
74
|
+
validFrom?: string;
|
|
75
|
+
validUntil?: string;
|
|
76
|
+
/** Logical withdrawal is append-only; physical privacy deletion is an application concern. */
|
|
77
|
+
retractedAt?: string;
|
|
78
|
+
supersedesAssertionId?: string;
|
|
79
|
+
}
|
|
80
|
+
export interface TasteAssertion extends PortableAssertionBase {
|
|
81
|
+
role: "taste";
|
|
82
|
+
}
|
|
83
|
+
export interface ProjectContextAssertion extends PortableAssertionBase {
|
|
84
|
+
role: "project_context";
|
|
85
|
+
}
|
|
86
|
+
export type RequirementOperator = "equals" | "not_equals" | "at_least" | "at_most" | "includes" | "excludes";
|
|
87
|
+
export interface RequirementConstraint {
|
|
88
|
+
operator: RequirementOperator;
|
|
89
|
+
value: boolean | number | string;
|
|
90
|
+
unit?: string;
|
|
91
|
+
}
|
|
92
|
+
export interface RequirementAssertion extends PortableAssertionBase {
|
|
93
|
+
role: "requirement";
|
|
94
|
+
/** The dimension is canonical meaning; the source-owned required value remains typed here. */
|
|
95
|
+
constraint: RequirementConstraint;
|
|
96
|
+
}
|
|
97
|
+
/** Portable evidence semantics only. Ranking weights and serving policy belong to each consumer. */
|
|
98
|
+
export type PortableTasteAssertion = TasteAssertion | ProjectContextAssertion | RequirementAssertion;
|
|
99
|
+
export interface PortableAssertionTestVector {
|
|
100
|
+
assertion: PortableTasteAssertion;
|
|
101
|
+
id: string;
|
|
102
|
+
expected: {
|
|
103
|
+
actorId: string;
|
|
104
|
+
subjectId: string;
|
|
105
|
+
projectId: string;
|
|
106
|
+
role: AssertionRole;
|
|
107
|
+
meaningKind: AssertionMeaning["kind"];
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/** Executable fixtures for consumers serialising the portable envelope in another repository. */
|
|
111
|
+
export declare const PORTABLE_ASSERTION_TEST_VECTORS: readonly PortableAssertionTestVector[];
|
|
112
|
+
export {};
|