@empressaio/atom-contract 1.12.0 → 1.14.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.
Files changed (34) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +7 -1
  3. package/dist/conformance/common.d.ts +1 -1
  4. package/dist/conformance/common.js +1 -1
  5. package/dist/property/cad-parcel-roll.d.ts +710 -0
  6. package/dist/property/cad-parcel-roll.d.ts.map +1 -0
  7. package/dist/property/cad-parcel-roll.js +147 -0
  8. package/dist/property/cad-parcel-roll.js.map +1 -0
  9. package/dist/property/common.d.ts +131 -0
  10. package/dist/property/common.d.ts.map +1 -1
  11. package/dist/property/common.js +92 -0
  12. package/dist/property/common.js.map +1 -1
  13. package/dist/property/fixtures.d.ts +324 -0
  14. package/dist/property/fixtures.d.ts.map +1 -1
  15. package/dist/property/fixtures.js +621 -0
  16. package/dist/property/fixtures.js.map +1 -1
  17. package/dist/property/flood-hazard-fact.d.ts +610 -0
  18. package/dist/property/flood-hazard-fact.d.ts.map +1 -0
  19. package/dist/property/flood-hazard-fact.js +102 -0
  20. package/dist/property/flood-hazard-fact.js.map +1 -0
  21. package/dist/property/index.d.ts +4 -0
  22. package/dist/property/index.d.ts.map +1 -1
  23. package/dist/property/index.js +4 -0
  24. package/dist/property/index.js.map +1 -1
  25. package/dist/property/land-use-fact.d.ts +602 -0
  26. package/dist/property/land-use-fact.d.ts.map +1 -0
  27. package/dist/property/land-use-fact.js +87 -0
  28. package/dist/property/land-use-fact.js.map +1 -0
  29. package/dist/property/parcel-node.d.ts +710 -0
  30. package/dist/property/parcel-node.d.ts.map +1 -0
  31. package/dist/property/parcel-node.js +156 -0
  32. package/dist/property/parcel-node.js.map +1 -0
  33. package/dist/property/road-node.d.ts +2 -2
  34. package/package.json +1 -1
@@ -9,6 +9,7 @@ import { PROPERTY_ATOM_TIER, PROPERTY_DEFAULT_ACCESS_POLICY } from "./common.js"
9
9
  import { BUILDABLE_ENVELOPE_DERIVATION_METHOD } from "./buildable-envelope.js";
10
10
  import { PARCEL_TERRAIN_DERIVATION_METHOD, TERRAIN_DEFAULT_ACCESS_POLICY, } from "./parcel-terrain-model.js";
11
11
  import { roadNodeIdFromParts } from "./road-node.js";
12
+ import { parcelNodeAtomDid } from "./parcel-node.js";
12
13
  import { countyCoverageParcelNodeId } from "./common.js";
13
14
  const SAMPLE_ASSERTED = createWidthedConfidence({
14
15
  estimate: 0.9,
@@ -648,6 +649,284 @@ export const BASTROP_COUNTY_EASEMENT_ABSENCE_FIXTURE = {
648
649
  evaluatedAt: "2026-08-05T12:00:00.000Z",
649
650
  atomTier: PROPERTY_ATOM_TIER,
650
651
  };
652
+ // ============================================================================
653
+ // parcel-node fixtures (Rail 1)
654
+ // ============================================================================
655
+ /**
656
+ * Bastrop County (48021) parcel 27303 — loaded TxGIO ring, straight prop_id key.
657
+ * The atom points at `txgio_parcel`; it does not restate the ring.
658
+ */
659
+ export const BASTROP_PARCEL_NODE_FIXTURE = {
660
+ entityType: "parcel-node",
661
+ atomDid: parcelNodeAtomDid("48021:27303"),
662
+ parcelNodeId: "48021:27303",
663
+ countyFips: "48021",
664
+ keyKind: "prop_id",
665
+ externalKeys: [
666
+ {
667
+ keyKind: "prop_id",
668
+ keyValue: "27303",
669
+ sourceCitation: "TxGIO StratMap 2026 parcel row prop_id 27303",
670
+ },
671
+ ],
672
+ reasoningChain: { reasoningKind: "observed" },
673
+ geometrySourceTier: "txgio-stratmap",
674
+ geometryStoreRef: {
675
+ store: "txgio_parcel",
676
+ countyFips: "48021",
677
+ propId: "27303",
678
+ },
679
+ geometryLoaded: true,
680
+ accessPolicy: PROPERTY_DEFAULT_ACCESS_POLICY,
681
+ sourceCitation: "TxGIO StratMap Texas Parcels 2026 county 48021",
682
+ extractedAt: "2026-08-08T12:00:00.000Z",
683
+ sourceVintage: "2026-01-01",
684
+ verificationStatus: "machine",
685
+ sourceAdapter: "txgio-stratmap-bulk-v1",
686
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
687
+ atomTier: PROPERTY_ATOM_TIER,
688
+ };
689
+ /**
690
+ * Travis County (48453) — crosswalk key kind. `prop_id` is unreliable in this
691
+ * county (OPS-1 join-quality HOLD), so the anchor records that the second token
692
+ * is a crosswalk key rather than pretending a clean prop_id join happened.
693
+ */
694
+ export const TRAVIS_CROSSWALK_PARCEL_NODE_FIXTURE = {
695
+ entityType: "parcel-node",
696
+ atomDid: parcelNodeAtomDid("48453:0207310401"),
697
+ parcelNodeId: "48453:0207310401",
698
+ countyFips: "48453",
699
+ keyKind: "geo_id_crosswalk",
700
+ externalKeys: [
701
+ {
702
+ keyKind: "geo_id_crosswalk",
703
+ keyValue: "0207310401",
704
+ sourceCitation: "TCAD geo_id crosswalk 2026 roll",
705
+ },
706
+ ],
707
+ reasoningChain: { reasoningKind: "observed" },
708
+ geometrySourceTier: "county-arcgis-override",
709
+ geometryStoreRef: {
710
+ store: "txgio_parcel",
711
+ countyFips: "48453",
712
+ propId: "0207310401",
713
+ },
714
+ geometryLoaded: true,
715
+ divergenceObservationCount: 2,
716
+ accessPolicy: PROPERTY_DEFAULT_ACCESS_POLICY,
717
+ sourceCitation: "Travis County ArcGIS parcel service 2026-08 override",
718
+ extractedAt: "2026-08-08T12:00:00.000Z",
719
+ sourceVintage: "2026-08-01",
720
+ verificationStatus: "machine",
721
+ sourceAdapter: "county-arcgis-parcel-v1",
722
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
723
+ atomTier: PROPERTY_ATOM_TIER,
724
+ };
725
+ /**
726
+ * County-level typed absence — the ring source registry was probed for this
727
+ * county and nothing is published. Satisfied-absent, not not-yet.
728
+ */
729
+ export const COUNTY_COVERAGE_PARCEL_NODE_ABSENCE_FIXTURE = {
730
+ entityType: "parcel-node",
731
+ atomDid: parcelNodeAtomDid(countyCoverageParcelNodeId("48301")),
732
+ parcelNodeId: countyCoverageParcelNodeId("48301"),
733
+ countyFips: "48301",
734
+ keyKind: "prop_id",
735
+ reasoningChain: { reasoningKind: "observed" },
736
+ geometrySourceTier: "absent",
737
+ geometryLoaded: false,
738
+ verifiedAbsence: {
739
+ evaluated: true,
740
+ provenanceScope: [
741
+ "txgio-stratmap-bulk",
742
+ "county-arcgis-override",
743
+ ],
744
+ },
745
+ accessPolicy: PROPERTY_DEFAULT_ACCESS_POLICY,
746
+ sourceCitation: "Rail 1 parcel source registry probe 48301 2026-08-08",
747
+ extractedAt: "2026-08-08T12:00:00.000Z",
748
+ verificationStatus: "machine",
749
+ sourceAdapter: "parcel-source-registry-probe-v1",
750
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
751
+ atomTier: PROPERTY_ATOM_TIER,
752
+ };
753
+ /**
754
+ * Per-parcel absence in a LOADED county — the key resolves nothing. Fail-closed
755
+ * and distinct from the county-level not-yet case above.
756
+ */
757
+ export const BASTROP_PARCEL_NODE_ABSENCE_FIXTURE = {
758
+ entityType: "parcel-node",
759
+ atomDid: parcelNodeAtomDid("48021:99999"),
760
+ parcelNodeId: "48021:99999",
761
+ countyFips: "48021",
762
+ keyKind: "prop_id",
763
+ reasoningChain: { reasoningKind: "observed" },
764
+ geometrySourceTier: "txgio-stratmap",
765
+ geometryLoaded: false,
766
+ absence: {
767
+ kind: "no-parcel-geometry",
768
+ reason: "county 48021 loaded 2026-01-01; prop_id 99999 has no ring row",
769
+ },
770
+ accessPolicy: PROPERTY_DEFAULT_ACCESS_POLICY,
771
+ sourceCitation: "TxGIO StratMap Texas Parcels 2026 county 48021",
772
+ extractedAt: "2026-08-08T12:00:00.000Z",
773
+ sourceVintage: "2026-01-01",
774
+ verificationStatus: "machine",
775
+ sourceAdapter: "txgio-stratmap-bulk-v1",
776
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
777
+ atomTier: PROPERTY_ATOM_TIER,
778
+ };
779
+ /**
780
+ * MultiPolygon truncation finding — the store row carries rings the serving
781
+ * path would silently drop. Report it; never serve a half-parcel as the parcel.
782
+ */
783
+ export const BASTROP_PARCEL_NODE_INCOMPLETE_FIXTURE = {
784
+ entityType: "parcel-node",
785
+ atomDid: parcelNodeAtomDid("48021:27304"),
786
+ parcelNodeId: "48021:27304",
787
+ countyFips: "48021",
788
+ keyKind: "prop_id",
789
+ reasoningChain: { reasoningKind: "observed" },
790
+ geometrySourceTier: "txgio-stratmap",
791
+ geometryLoaded: false,
792
+ absence: {
793
+ kind: "geometry-incomplete",
794
+ reason: "MultiPolygon with 3 rings; serving path resolves first ring only",
795
+ },
796
+ accessPolicy: PROPERTY_DEFAULT_ACCESS_POLICY,
797
+ sourceCitation: "TxGIO StratMap Texas Parcels 2026 county 48021",
798
+ extractedAt: "2026-08-08T12:00:00.000Z",
799
+ sourceVintage: "2026-01-01",
800
+ verificationStatus: "machine",
801
+ sourceAdapter: "txgio-stratmap-bulk-v1",
802
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
803
+ atomTier: PROPERTY_ATOM_TIER,
804
+ };
805
+ /** Negative — sourceTier absent without verifiedAbsence (must fail closed). */
806
+ export const NEGATIVE_PARCEL_NODE_ABSENT_NO_VERIFIED = {
807
+ entityType: "parcel-node",
808
+ atomDid: parcelNodeAtomDid(countyCoverageParcelNodeId("48301")),
809
+ parcelNodeId: countyCoverageParcelNodeId("48301"),
810
+ countyFips: "48301",
811
+ keyKind: "prop_id",
812
+ reasoningChain: { reasoningKind: "observed" },
813
+ geometrySourceTier: "absent",
814
+ geometryLoaded: false,
815
+ accessPolicy: "public-free",
816
+ sourceCitation: "Missing verified absence",
817
+ extractedAt: "2026-08-08T12:00:00.000Z",
818
+ verificationStatus: "machine",
819
+ sourceAdapter: "parcel-source-registry-probe-v1",
820
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
821
+ atomTier: "data",
822
+ };
823
+ /** Negative — geometry pointer AND typed absence on the same atom. */
824
+ export const NEGATIVE_PARCEL_NODE_REF_AND_ABSENCE = {
825
+ entityType: "parcel-node",
826
+ atomDid: parcelNodeAtomDid("48021:27303"),
827
+ parcelNodeId: "48021:27303",
828
+ countyFips: "48021",
829
+ keyKind: "prop_id",
830
+ reasoningChain: { reasoningKind: "observed" },
831
+ geometrySourceTier: "txgio-stratmap",
832
+ geometryStoreRef: {
833
+ store: "txgio_parcel",
834
+ countyFips: "48021",
835
+ propId: "27303",
836
+ },
837
+ geometryLoaded: true,
838
+ absence: {
839
+ kind: "no-parcel-geometry",
840
+ reason: "contradicts the resolved pointer",
841
+ },
842
+ accessPolicy: "public-free",
843
+ sourceCitation: "TxGIO StratMap Texas Parcels 2026 county 48021",
844
+ extractedAt: "2026-08-08T12:00:00.000Z",
845
+ verificationStatus: "machine",
846
+ sourceAdapter: "txgio-stratmap-bulk-v1",
847
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
848
+ atomTier: "data",
849
+ };
850
+ /** Negative — the ring body inlined on the atom (Geometry Law rule 1 guard). */
851
+ export const NEGATIVE_PARCEL_NODE_INLINE_GEOMETRY = {
852
+ entityType: "parcel-node",
853
+ atomDid: parcelNodeAtomDid("48021:27303"),
854
+ parcelNodeId: "48021:27303",
855
+ countyFips: "48021",
856
+ keyKind: "prop_id",
857
+ reasoningChain: { reasoningKind: "observed" },
858
+ geometrySourceTier: "txgio-stratmap",
859
+ geometryStoreRef: {
860
+ store: "txgio_parcel",
861
+ countyFips: "48021",
862
+ propId: "27303",
863
+ geometry: {
864
+ type: "Polygon",
865
+ coordinates: [
866
+ [
867
+ [-97.3189, 30.1101],
868
+ [-97.3185, 30.1101],
869
+ [-97.3185, 30.1105],
870
+ [-97.3189, 30.1101],
871
+ ],
872
+ ],
873
+ },
874
+ },
875
+ geometryLoaded: true,
876
+ accessPolicy: "public-free",
877
+ sourceCitation: "TxGIO StratMap Texas Parcels 2026 county 48021",
878
+ extractedAt: "2026-08-08T12:00:00.000Z",
879
+ verificationStatus: "machine",
880
+ sourceAdapter: "txgio-stratmap-bulk-v1",
881
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
882
+ atomTier: "data",
883
+ };
884
+ /** Negative — pointer names a different parcel than the atom claims. */
885
+ export const NEGATIVE_PARCEL_NODE_REF_MISMATCH = {
886
+ entityType: "parcel-node",
887
+ atomDid: parcelNodeAtomDid("48021:27303"),
888
+ parcelNodeId: "48021:27303",
889
+ countyFips: "48021",
890
+ keyKind: "prop_id",
891
+ reasoningChain: { reasoningKind: "observed" },
892
+ geometrySourceTier: "txgio-stratmap",
893
+ geometryStoreRef: {
894
+ store: "txgio_parcel",
895
+ countyFips: "48021",
896
+ propId: "27999",
897
+ },
898
+ geometryLoaded: true,
899
+ accessPolicy: "public-free",
900
+ sourceCitation: "TxGIO StratMap Texas Parcels 2026 county 48021",
901
+ extractedAt: "2026-08-08T12:00:00.000Z",
902
+ verificationStatus: "machine",
903
+ sourceAdapter: "txgio-stratmap-bulk-v1",
904
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
905
+ atomTier: "data",
906
+ };
907
+ /** Negative — parcel identity behind a paywall. */
908
+ export const NEGATIVE_PARCEL_NODE_NON_PUBLIC_POLICY = {
909
+ entityType: "parcel-node",
910
+ atomDid: parcelNodeAtomDid("48021:27303"),
911
+ parcelNodeId: "48021:27303",
912
+ countyFips: "48021",
913
+ keyKind: "prop_id",
914
+ reasoningChain: { reasoningKind: "observed" },
915
+ geometrySourceTier: "txgio-stratmap",
916
+ geometryStoreRef: {
917
+ store: "txgio_parcel",
918
+ countyFips: "48021",
919
+ propId: "27303",
920
+ },
921
+ geometryLoaded: true,
922
+ accessPolicy: "public-paid",
923
+ sourceCitation: "TxGIO StratMap Texas Parcels 2026 county 48021",
924
+ extractedAt: "2026-08-08T12:00:00.000Z",
925
+ verificationStatus: "machine",
926
+ sourceAdapter: "txgio-stratmap-bulk-v1",
927
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
928
+ atomTier: "data",
929
+ };
651
930
  /** Negative — ml-derived without ODC-By in sourceCitation. */
652
931
  export const NEGATIVE_FOOTPRINT_ML_NO_ODC_BY = {
653
932
  entityType: "building-footprint",
@@ -716,4 +995,346 @@ export const NEGATIVE_EASEMENT_NON_PUBLIC_POLICY = {
716
995
  evaluatedAt: "2026-08-05T12:00:00.000Z",
717
996
  atomTier: "data",
718
997
  };
998
+ // ============================================================================
999
+ // flood-hazard-fact fixtures
1000
+ // ============================================================================
1001
+ /** Bastrop 48021:27303 — SFHA true, Zone AE present finding. */
1002
+ export const BASTROP_FLOOD_SFHA_FIXTURE = {
1003
+ entityType: "flood-hazard-fact",
1004
+ atomDid: "fhfact_a1b2c3d4e5f67890",
1005
+ parcelNodeId: "48021:27303",
1006
+ reasoningChain: { reasoningKind: "observed" },
1007
+ sourceTier: "fema-nfhl",
1008
+ inSpecialFloodHazardArea: true,
1009
+ floodZone: "AE",
1010
+ zoneSubtype: null,
1011
+ baseFloodElevation: 412.5,
1012
+ accessPolicy: PROPERTY_DEFAULT_ACCESS_POLICY,
1013
+ sourceCitation: "FEMA NFHL 2026-06 county 48021",
1014
+ extractedAt: "2026-08-08T12:00:00.000Z",
1015
+ sourceVintage: "2026-06-01",
1016
+ verificationStatus: "machine",
1017
+ sourceAdapter: "fema-nfhl-spatial-join-v1",
1018
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
1019
+ atomTier: PROPERTY_ATOM_TIER,
1020
+ };
1021
+ /** Hays 48209:156346 — outside mapped SFHA (Zone X by omission), present not absent. */
1022
+ export const HAYS_FLOOD_OUTSIDE_SFHA_FIXTURE = {
1023
+ entityType: "flood-hazard-fact",
1024
+ atomDid: "fhfact_b2c3d4e5f6789012",
1025
+ parcelNodeId: "48209:156346",
1026
+ reasoningChain: { reasoningKind: "observed" },
1027
+ sourceTier: "fema-nfhl",
1028
+ inSpecialFloodHazardArea: false,
1029
+ accessPolicy: PROPERTY_DEFAULT_ACCESS_POLICY,
1030
+ sourceCitation: "FEMA NFHL 2026-06 county 48209",
1031
+ extractedAt: "2026-08-08T12:00:00.000Z",
1032
+ sourceVintage: "2026-06-01",
1033
+ verificationStatus: "machine",
1034
+ sourceAdapter: "fema-nfhl-spatial-join-v1",
1035
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
1036
+ atomTier: PROPERTY_ATOM_TIER,
1037
+ };
1038
+ /** Per-parcel no geocode / off-coverage absence. */
1039
+ export const BASTROP_FLOOD_NO_COVERAGE_FIXTURE = {
1040
+ entityType: "flood-hazard-fact",
1041
+ atomDid: "fhfact_c3d4e5f678901234",
1042
+ parcelNodeId: "48021:99999",
1043
+ reasoningChain: { reasoningKind: "observed" },
1044
+ sourceTier: "fema-nfhl",
1045
+ absence: {
1046
+ kind: "no-flood-coverage",
1047
+ reason: "parcel centroid outside NFHL county tile coverage",
1048
+ },
1049
+ accessPolicy: PROPERTY_DEFAULT_ACCESS_POLICY,
1050
+ sourceCitation: "FEMA NFHL 2026-06 county 48021",
1051
+ extractedAt: "2026-08-08T12:00:00.000Z",
1052
+ sourceVintage: "2026-06-01",
1053
+ verificationStatus: "machine",
1054
+ sourceAdapter: "fema-nfhl-spatial-join-v1",
1055
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
1056
+ atomTier: PROPERTY_ATOM_TIER,
1057
+ };
1058
+ /** County-level verified absence — NFHL not published for county. */
1059
+ export const COUNTY_FLOOD_VERIFIED_ABSENCE_FIXTURE = {
1060
+ entityType: "flood-hazard-fact",
1061
+ atomDid: "fhfact_d4e5f67890123456",
1062
+ parcelNodeId: countyCoverageParcelNodeId("48301"),
1063
+ reasoningChain: { reasoningKind: "observed" },
1064
+ sourceTier: "absent",
1065
+ verifiedAbsence: {
1066
+ evaluated: true,
1067
+ provenanceScope: ["fema-nfhl-ms", "county-gis-flood"],
1068
+ },
1069
+ accessPolicy: PROPERTY_DEFAULT_ACCESS_POLICY,
1070
+ sourceCitation: "Flood source registry probe 48301 2026-08-08",
1071
+ extractedAt: "2026-08-08T12:00:00.000Z",
1072
+ verificationStatus: "machine",
1073
+ sourceAdapter: "flood-source-registry-probe-v1",
1074
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
1075
+ atomTier: PROPERTY_ATOM_TIER,
1076
+ };
1077
+ /** Negative — SFHA finding and absence together. */
1078
+ export const NEGATIVE_FLOOD_SFHA_AND_ABSENCE = {
1079
+ entityType: "flood-hazard-fact",
1080
+ atomDid: "fhfact_bad00000000000001",
1081
+ parcelNodeId: "48021:27303",
1082
+ reasoningChain: { reasoningKind: "observed" },
1083
+ sourceTier: "fema-nfhl",
1084
+ inSpecialFloodHazardArea: true,
1085
+ floodZone: "AE",
1086
+ absence: { kind: "no-flood-coverage", reason: "conflict" },
1087
+ accessPolicy: "public-free",
1088
+ sourceCitation: "Invalid both finding and absence",
1089
+ extractedAt: "2026-08-08T12:00:00.000Z",
1090
+ verificationStatus: "machine",
1091
+ sourceAdapter: "fema-nfhl-spatial-join-v1",
1092
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
1093
+ atomTier: "data",
1094
+ };
1095
+ /** Negative — absent tier without verifiedAbsence. */
1096
+ export const NEGATIVE_FLOOD_ABSENT_NO_VERIFIED = {
1097
+ entityType: "flood-hazard-fact",
1098
+ atomDid: "fhfact_bad00000000000002",
1099
+ parcelNodeId: countyCoverageParcelNodeId("48301"),
1100
+ reasoningChain: { reasoningKind: "observed" },
1101
+ sourceTier: "absent",
1102
+ accessPolicy: "public-free",
1103
+ sourceCitation: "Missing verified absence",
1104
+ extractedAt: "2026-08-08T12:00:00.000Z",
1105
+ verificationStatus: "machine",
1106
+ sourceAdapter: "flood-source-registry-probe-v1",
1107
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
1108
+ atomTier: "data",
1109
+ };
1110
+ /** Negative — absent tier carrying flood zone claims. */
1111
+ export const NEGATIVE_FLOOD_ABSENT_WITH_CLAIM = {
1112
+ entityType: "flood-hazard-fact",
1113
+ atomDid: "fhfact_bad00000000000003",
1114
+ parcelNodeId: countyCoverageParcelNodeId("48301"),
1115
+ reasoningChain: { reasoningKind: "observed" },
1116
+ sourceTier: "absent",
1117
+ inSpecialFloodHazardArea: false,
1118
+ verifiedAbsence: {
1119
+ evaluated: true,
1120
+ provenanceScope: ["fema-nfhl-ms"],
1121
+ },
1122
+ accessPolicy: "public-free",
1123
+ sourceCitation: "Absent tier with claim fields",
1124
+ extractedAt: "2026-08-08T12:00:00.000Z",
1125
+ verificationStatus: "machine",
1126
+ sourceAdapter: "flood-source-registry-probe-v1",
1127
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
1128
+ atomTier: "data",
1129
+ };
1130
+ // ============================================================================
1131
+ // cad-parcel-roll fixtures
1132
+ // ============================================================================
1133
+ /** Bastrop 48021:27303 — full CAD roll row with owner match. */
1134
+ export const BASTROP_CAD_ROLL_FIXTURE = {
1135
+ entityType: "cad-parcel-roll",
1136
+ atomDid: "cadroll_a1b2c3d4e5f67890",
1137
+ parcelNodeId: "48021:27303",
1138
+ taxYear: 2026,
1139
+ countyFips: "48021",
1140
+ propId: "27303",
1141
+ keyKind: "prop_id",
1142
+ joinPassedOwnerMatchGate: true,
1143
+ reasoningChain: { reasoningKind: "observed" },
1144
+ sourceTier: "cad-authoritative",
1145
+ ownerName: "EXAMPLE HOLDINGS LLC",
1146
+ ownerMailingAddress: "123 Main St, Austin TX 78701",
1147
+ situsAddress: "714 Spring St",
1148
+ situsCity: "Bastrop",
1149
+ situsZip: "78602",
1150
+ legalDescription: "LOT 12 BLK 3 SPRING ST ADDN",
1151
+ landValue: 85000,
1152
+ improvementValue: 215000,
1153
+ marketValue: 300000,
1154
+ assessedValue: 300000,
1155
+ yearBuilt: 1985,
1156
+ livingAreaSqft: 1840,
1157
+ landAcres: "0.1823",
1158
+ propertyUseCode: "A1",
1159
+ sourceFile: "bastropcad_2026_property.txt",
1160
+ accessPolicy: PROPERTY_DEFAULT_ACCESS_POLICY,
1161
+ sourceCitation: "Bastrop CAD 2026 property roll",
1162
+ extractedAt: "2026-08-08T12:00:00.000Z",
1163
+ sourceVintage: "2026-01-15",
1164
+ verificationStatus: "machine",
1165
+ sourceAdapter: "cad-property-ingest-v1",
1166
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
1167
+ atomTier: PROPERTY_ATOM_TIER,
1168
+ };
1169
+ /** Join hold — no owner fields allowed. */
1170
+ export const BASTROP_CAD_ROLL_JOIN_HOLD_FIXTURE = {
1171
+ entityType: "cad-parcel-roll",
1172
+ atomDid: "cadroll_b2c3d4e5f6789012",
1173
+ parcelNodeId: "48021:88888",
1174
+ taxYear: 2026,
1175
+ countyFips: "48021",
1176
+ propId: "88888",
1177
+ keyKind: "prop_id",
1178
+ joinPassedOwnerMatchGate: false,
1179
+ reasoningChain: { reasoningKind: "observed" },
1180
+ sourceTier: "cad-authoritative",
1181
+ absence: {
1182
+ kind: "join-hold",
1183
+ reason: "owner crosswalk below match threshold — owner withheld",
1184
+ },
1185
+ sourceFile: "bastropcad_2026_property.txt",
1186
+ accessPolicy: PROPERTY_DEFAULT_ACCESS_POLICY,
1187
+ sourceCitation: "Bastrop CAD 2026 property roll",
1188
+ extractedAt: "2026-08-08T12:00:00.000Z",
1189
+ sourceVintage: "2026-01-15",
1190
+ verificationStatus: "machine",
1191
+ sourceAdapter: "cad-property-ingest-v1",
1192
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
1193
+ atomTier: PROPERTY_ATOM_TIER,
1194
+ };
1195
+ /** County-level verified absence — no CAD roll published. */
1196
+ export const COUNTY_CAD_ROLL_ABSENCE_FIXTURE = {
1197
+ entityType: "cad-parcel-roll",
1198
+ atomDid: "cadroll_c3d4e5f678901234",
1199
+ parcelNodeId: countyCoverageParcelNodeId("48301"),
1200
+ taxYear: 2026,
1201
+ countyFips: "48301",
1202
+ propId: "_county_coverage",
1203
+ keyKind: "prop_id",
1204
+ joinPassedOwnerMatchGate: false,
1205
+ reasoningChain: { reasoningKind: "observed" },
1206
+ sourceTier: "absent",
1207
+ verifiedAbsence: {
1208
+ evaluated: true,
1209
+ provenanceScope: ["county-cad-bulk", "tx-comptroller-roll"],
1210
+ },
1211
+ accessPolicy: PROPERTY_DEFAULT_ACCESS_POLICY,
1212
+ sourceCitation: "CAD source registry probe 48301 2026-08-08",
1213
+ extractedAt: "2026-08-08T12:00:00.000Z",
1214
+ verificationStatus: "machine",
1215
+ sourceAdapter: "cad-source-registry-probe-v1",
1216
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
1217
+ atomTier: PROPERTY_ATOM_TIER,
1218
+ };
1219
+ /** Negative — join hold with owner fields (wrong owner worse than missing). */
1220
+ export const NEGATIVE_CAD_ROLL_OWNER_ON_JOIN_HOLD = {
1221
+ entityType: "cad-parcel-roll",
1222
+ atomDid: "cadroll_bad00000000000001",
1223
+ parcelNodeId: "48021:88888",
1224
+ taxYear: 2026,
1225
+ countyFips: "48021",
1226
+ propId: "88888",
1227
+ keyKind: "prop_id",
1228
+ joinPassedOwnerMatchGate: false,
1229
+ reasoningChain: { reasoningKind: "observed" },
1230
+ sourceTier: "cad-authoritative",
1231
+ ownerName: "SHOULD NOT APPEAR",
1232
+ situsAddress: "714 Spring St",
1233
+ sourceFile: "bastropcad_2026_property.txt",
1234
+ accessPolicy: "public-free",
1235
+ sourceCitation: "Owner on failed join",
1236
+ extractedAt: "2026-08-08T12:00:00.000Z",
1237
+ verificationStatus: "machine",
1238
+ sourceAdapter: "cad-property-ingest-v1",
1239
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
1240
+ atomTier: "data",
1241
+ };
1242
+ /** Negative — present tier with empty row (no claims, no absence). */
1243
+ export const NEGATIVE_CAD_ROLL_EMPTY_PRESENT = {
1244
+ entityType: "cad-parcel-roll",
1245
+ atomDid: "cadroll_bad00000000000002",
1246
+ parcelNodeId: "48021:27303",
1247
+ taxYear: 2026,
1248
+ countyFips: "48021",
1249
+ propId: "27303",
1250
+ keyKind: "prop_id",
1251
+ joinPassedOwnerMatchGate: true,
1252
+ reasoningChain: { reasoningKind: "observed" },
1253
+ sourceTier: "cad-authoritative",
1254
+ sourceFile: "bastropcad_2026_property.txt",
1255
+ accessPolicy: "public-free",
1256
+ sourceCitation: "Empty present row",
1257
+ extractedAt: "2026-08-08T12:00:00.000Z",
1258
+ verificationStatus: "machine",
1259
+ sourceAdapter: "cad-property-ingest-v1",
1260
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
1261
+ atomTier: "data",
1262
+ };
1263
+ // ============================================================================
1264
+ // land-use-fact fixtures
1265
+ // ============================================================================
1266
+ /** Bastrop 48021:27303 — A1 residential from CAD property_use_code. */
1267
+ export const BASTROP_LAND_USE_FIXTURE = {
1268
+ entityType: "land-use-fact",
1269
+ atomDid: "lufact_a1b2c3d4e5f67890",
1270
+ parcelNodeId: "48021:27303",
1271
+ taxYear: 2026,
1272
+ reasoningChain: { reasoningKind: "observed" },
1273
+ sourceTier: "cad-authoritative",
1274
+ landUseCode: "A1",
1275
+ landUseLabel: "Single Family Residential",
1276
+ accessPolicy: PROPERTY_DEFAULT_ACCESS_POLICY,
1277
+ sourceCitation: "Bastrop CAD 2026 property_use_code",
1278
+ extractedAt: "2026-08-08T12:00:00.000Z",
1279
+ sourceVintage: "2026-01-15",
1280
+ verificationStatus: "machine",
1281
+ sourceAdapter: "cad-property-ingest-v1",
1282
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
1283
+ atomTier: PROPERTY_ATOM_TIER,
1284
+ };
1285
+ /** Honest absence — CAD row exists but no land use code. */
1286
+ export const BASTROP_LAND_USE_NO_CODE_FIXTURE = {
1287
+ entityType: "land-use-fact",
1288
+ atomDid: "lufact_b2c3d4e5f6789012",
1289
+ parcelNodeId: "48021:77777",
1290
+ taxYear: 2026,
1291
+ reasoningChain: { reasoningKind: "observed" },
1292
+ sourceTier: "cad-authoritative",
1293
+ absence: {
1294
+ kind: "no-land-use-code",
1295
+ reason: "cad_property row present; property_use_code null",
1296
+ },
1297
+ accessPolicy: PROPERTY_DEFAULT_ACCESS_POLICY,
1298
+ sourceCitation: "Bastrop CAD 2026 property_use_code",
1299
+ extractedAt: "2026-08-08T12:00:00.000Z",
1300
+ sourceVintage: "2026-01-15",
1301
+ verificationStatus: "machine",
1302
+ sourceAdapter: "cad-property-ingest-v1",
1303
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
1304
+ atomTier: PROPERTY_ATOM_TIER,
1305
+ };
1306
+ /** Negative — present tier without landUseCode or absence. */
1307
+ export const NEGATIVE_LAND_USE_EMPTY_PRESENT = {
1308
+ entityType: "land-use-fact",
1309
+ atomDid: "lufact_bad00000000000001",
1310
+ parcelNodeId: "48021:27303",
1311
+ taxYear: 2026,
1312
+ reasoningChain: { reasoningKind: "observed" },
1313
+ sourceTier: "cad-authoritative",
1314
+ landUseLabel: "label without code",
1315
+ accessPolicy: "public-free",
1316
+ sourceCitation: "Missing landUseCode",
1317
+ extractedAt: "2026-08-08T12:00:00.000Z",
1318
+ verificationStatus: "machine",
1319
+ sourceAdapter: "cad-property-ingest-v1",
1320
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
1321
+ atomTier: "data",
1322
+ };
1323
+ /** Negative — cotality tier must not exist (schema rejects unknown enum). */
1324
+ export const NEGATIVE_LAND_USE_COTALITY_TIER = {
1325
+ entityType: "land-use-fact",
1326
+ atomDid: "lufact_bad00000000000002",
1327
+ parcelNodeId: "48021:27303",
1328
+ taxYear: 2026,
1329
+ reasoningChain: { reasoningKind: "observed" },
1330
+ sourceTier: "cotality",
1331
+ landUseCode: "R1",
1332
+ accessPolicy: "public-free",
1333
+ sourceCitation: "Cotality tier forbidden",
1334
+ extractedAt: "2026-08-08T12:00:00.000Z",
1335
+ verificationStatus: "machine",
1336
+ sourceAdapter: "cotality-dead",
1337
+ evaluatedAt: "2026-08-08T12:00:00.000Z",
1338
+ atomTier: "data",
1339
+ };
719
1340
  //# sourceMappingURL=fixtures.js.map