@empressaio/atom-contract 1.12.0 → 1.13.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/CHANGELOG.md +49 -0
- package/README.md +7 -1
- package/dist/conformance/common.d.ts +1 -1
- package/dist/conformance/common.js +1 -1
- package/dist/property/common.d.ts +86 -0
- package/dist/property/common.d.ts.map +1 -1
- package/dist/property/common.js +57 -0
- package/dist/property/common.js.map +1 -1
- package/dist/property/fixtures.d.ts +155 -0
- package/dist/property/fixtures.d.ts.map +1 -1
- package/dist/property/fixtures.js +279 -0
- package/dist/property/fixtures.js.map +1 -1
- package/dist/property/index.d.ts +1 -0
- package/dist/property/index.d.ts.map +1 -1
- package/dist/property/index.js +1 -0
- package/dist/property/index.js.map +1 -1
- package/dist/property/parcel-node.d.ts +710 -0
- package/dist/property/parcel-node.d.ts.map +1 -0
- package/dist/property/parcel-node.js +156 -0
- package/dist/property/parcel-node.js.map +1 -0
- package/dist/property/road-node.d.ts +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parcel-node.d.ts","sourceRoot":"","sources":["../../src/property/parcel-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { REASONING_CHAIN_OBSERVED_SCHEMA } from "../reasoning-chain.js";
|
|
3
|
+
import { COUNTY_COVERAGE_PARCEL_NODE_SUFFIX, PARCEL_EXTERNAL_KEY_SCHEMA, PARCEL_GEOMETRY_SOURCE_TIER_SCHEMA, PARCEL_GEOMETRY_STORE_REF_SCHEMA, PARCEL_KEY_KIND_SCHEMA, PARCEL_NODE_ABSENCE_SCHEMA, PARCEL_NODE_ID_PATTERN, PROPERTY_ACCESS_POLICY_SCHEMA, PROPERTY_ATOM_TIER, PROPERTY_DEFAULT_ACCESS_POLICY, PROPERTY_QUALITY_GATE_FIELDS, PROPERTY_READ_CONTRACT_SCHEMA, SITE_LAYER_PROVENANCE_FIELDS, SITE_LAYER_VERIFIED_ABSENCE_SCHEMA, } from "./common.js";
|
|
4
|
+
/** Canonical parcel-node DID (matches the published MCP property-chain form). */
|
|
5
|
+
export function parcelNodeAtomDid(parcelNodeId) {
|
|
6
|
+
return `did:hauska:parcel-node:${parcelNodeId}`;
|
|
7
|
+
}
|
|
8
|
+
export const PARCEL_NODE_ATOM_DID_PATTERN = /^did:hauska:parcel-node:\d{5}:[A-Za-z0-9._-]+$/;
|
|
9
|
+
export const PARCEL_NODE_SCHEMA = z
|
|
10
|
+
.object({
|
|
11
|
+
entityType: z.literal("parcel-node"),
|
|
12
|
+
atomDid: z
|
|
13
|
+
.string()
|
|
14
|
+
.min(1)
|
|
15
|
+
.refine((val) => PARCEL_NODE_ATOM_DID_PATTERN.test(val), {
|
|
16
|
+
message: "atomDid must be did:hauska:parcel-node:{county_fips}:{key}",
|
|
17
|
+
}),
|
|
18
|
+
parcelNodeId: z
|
|
19
|
+
.string()
|
|
20
|
+
.min(1)
|
|
21
|
+
.refine((val) => PARCEL_NODE_ID_PATTERN.test(val), {
|
|
22
|
+
message: "parcelNodeId must match {county_fips}:{prop_id}",
|
|
23
|
+
}),
|
|
24
|
+
countyFips: z.string().regex(/^\d{5}$/, "countyFips must be 5 digits"),
|
|
25
|
+
keyKind: PARCEL_KEY_KIND_SCHEMA,
|
|
26
|
+
externalKeys: z.array(PARCEL_EXTERNAL_KEY_SCHEMA).min(1).readonly().optional(),
|
|
27
|
+
reasoningChain: REASONING_CHAIN_OBSERVED_SCHEMA,
|
|
28
|
+
geometrySourceTier: PARCEL_GEOMETRY_SOURCE_TIER_SCHEMA,
|
|
29
|
+
geometryStoreRef: PARCEL_GEOMETRY_STORE_REF_SCHEMA.optional(),
|
|
30
|
+
geometryLoaded: z.boolean(),
|
|
31
|
+
absence: PARCEL_NODE_ABSENCE_SCHEMA.optional(),
|
|
32
|
+
verifiedAbsence: SITE_LAYER_VERIFIED_ABSENCE_SCHEMA.optional(),
|
|
33
|
+
divergenceObservationCount: z.number().int().nonnegative().optional(),
|
|
34
|
+
accessPolicy: PROPERTY_ACCESS_POLICY_SCHEMA,
|
|
35
|
+
...PROPERTY_QUALITY_GATE_FIELDS,
|
|
36
|
+
...SITE_LAYER_PROVENANCE_FIELDS,
|
|
37
|
+
atomTier: z.literal(PROPERTY_ATOM_TIER),
|
|
38
|
+
readContract: PROPERTY_READ_CONTRACT_SCHEMA.optional(),
|
|
39
|
+
})
|
|
40
|
+
.superRefine((data, ctx) => {
|
|
41
|
+
const hasGeometryRef = data.geometryStoreRef !== undefined;
|
|
42
|
+
const hasAbsence = data.absence !== undefined;
|
|
43
|
+
const isAbsentTier = data.geometrySourceTier === "absent";
|
|
44
|
+
// Rule 1 — a resolved geometry pointer and a typed absence are contradictory.
|
|
45
|
+
if (hasGeometryRef && hasAbsence) {
|
|
46
|
+
ctx.addIssue({
|
|
47
|
+
code: z.ZodIssueCode.custom,
|
|
48
|
+
message: "geometryStoreRef and absence are mutually exclusive",
|
|
49
|
+
path: ["geometryStoreRef"],
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (isAbsentTier && hasGeometryRef) {
|
|
53
|
+
ctx.addIssue({
|
|
54
|
+
code: z.ZodIssueCode.custom,
|
|
55
|
+
message: "geometrySourceTier absent must not carry geometryStoreRef",
|
|
56
|
+
path: ["geometrySourceTier"],
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
// Rule 2 — fail closed on absent tier: verified absence with real scope.
|
|
60
|
+
if (isAbsentTier) {
|
|
61
|
+
if (!data.verifiedAbsence) {
|
|
62
|
+
ctx.addIssue({
|
|
63
|
+
code: z.ZodIssueCode.custom,
|
|
64
|
+
message: "geometrySourceTier absent requires verifiedAbsence (evaluated + provenanceScope)",
|
|
65
|
+
path: ["verifiedAbsence"],
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
if (data.geometryLoaded) {
|
|
69
|
+
ctx.addIssue({
|
|
70
|
+
code: z.ZodIssueCode.custom,
|
|
71
|
+
message: "geometrySourceTier absent requires geometryLoaded false",
|
|
72
|
+
path: ["geometryLoaded"],
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else if (!hasGeometryRef && !hasAbsence) {
|
|
77
|
+
// Rule 3 — a present tier must resolve to a ring or say why it did not.
|
|
78
|
+
ctx.addIssue({
|
|
79
|
+
code: z.ZodIssueCode.custom,
|
|
80
|
+
message: "parcel-node requires geometryStoreRef OR per-parcel absence when geometrySourceTier is not absent",
|
|
81
|
+
path: ["geometryStoreRef"],
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// Rule 4 — geometryLoaded is a claim about the pointer, not a mood.
|
|
85
|
+
if (data.geometryLoaded && !hasGeometryRef) {
|
|
86
|
+
ctx.addIssue({
|
|
87
|
+
code: z.ZodIssueCode.custom,
|
|
88
|
+
message: "geometryLoaded true requires geometryStoreRef",
|
|
89
|
+
path: ["geometryLoaded"],
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
if (!data.geometryLoaded && hasGeometryRef) {
|
|
93
|
+
ctx.addIssue({
|
|
94
|
+
code: z.ZodIssueCode.custom,
|
|
95
|
+
message: "geometryStoreRef present requires geometryLoaded true",
|
|
96
|
+
path: ["geometryLoaded"],
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
// Rule 5 — the pointer must name the same parcel the atom is about.
|
|
100
|
+
if (data.geometryStoreRef) {
|
|
101
|
+
if (data.geometryStoreRef.countyFips !== data.countyFips) {
|
|
102
|
+
ctx.addIssue({
|
|
103
|
+
code: z.ZodIssueCode.custom,
|
|
104
|
+
message: "geometryStoreRef.countyFips must equal countyFips",
|
|
105
|
+
path: ["geometryStoreRef", "countyFips"],
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
const expectedPrefix = `${data.countyFips}:`;
|
|
109
|
+
if (data.parcelNodeId.startsWith(expectedPrefix) &&
|
|
110
|
+
data.parcelNodeId.slice(expectedPrefix.length) !==
|
|
111
|
+
data.geometryStoreRef.propId) {
|
|
112
|
+
ctx.addIssue({
|
|
113
|
+
code: z.ZodIssueCode.custom,
|
|
114
|
+
message: "geometryStoreRef.propId must equal the parcelNodeId key token",
|
|
115
|
+
path: ["geometryStoreRef", "propId"],
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Rule 6 — atomDid embeds the parcel node id (MCP resolves by this form).
|
|
120
|
+
if (data.atomDid !== parcelNodeAtomDid(data.parcelNodeId)) {
|
|
121
|
+
ctx.addIssue({
|
|
122
|
+
code: z.ZodIssueCode.custom,
|
|
123
|
+
message: "atomDid must be did:hauska:parcel-node:{parcelNodeId}",
|
|
124
|
+
path: ["atomDid"],
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
// Rule 7 — the parcel node id must sit in the county the atom claims.
|
|
128
|
+
if (!data.parcelNodeId.startsWith(`${data.countyFips}:`)) {
|
|
129
|
+
ctx.addIssue({
|
|
130
|
+
code: z.ZodIssueCode.custom,
|
|
131
|
+
message: "parcelNodeId must begin with countyFips",
|
|
132
|
+
path: ["parcelNodeId"],
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
// Rule 8 — county-coverage anchors are county-level rows only.
|
|
136
|
+
const isCountyCoverage = data.parcelNodeId.endsWith(`:${COUNTY_COVERAGE_PARCEL_NODE_SUFFIX}`);
|
|
137
|
+
if (isCountyCoverage && !data.verifiedAbsence) {
|
|
138
|
+
ctx.addIssue({
|
|
139
|
+
code: z.ZodIssueCode.custom,
|
|
140
|
+
message: "county-coverage parcel-node anchor requires verifiedAbsence",
|
|
141
|
+
path: ["verifiedAbsence"],
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
// Rule 9 — public record; parcel identity is never gated.
|
|
145
|
+
if (data.accessPolicy !== PROPERTY_DEFAULT_ACCESS_POLICY) {
|
|
146
|
+
ctx.addIssue({
|
|
147
|
+
code: z.ZodIssueCode.custom,
|
|
148
|
+
message: "parcel-node must use accessPolicy public-free",
|
|
149
|
+
path: ["accessPolicy"],
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
export function createParcelNode(input) {
|
|
154
|
+
return PARCEL_NODE_SCHEMA.parse(input);
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=parcel-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parcel-node.js","sourceRoot":"","sources":["../../src/property/parcel-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -526,12 +526,12 @@ export declare const ROAD_NODE_SCHEMA: z.ZodObject<{
|
|
|
526
526
|
sourceCitation: string;
|
|
527
527
|
extractedAt: string;
|
|
528
528
|
atomDid: string;
|
|
529
|
+
countyFips: string;
|
|
529
530
|
reasoningChain: {
|
|
530
531
|
reasoningKind: "observed";
|
|
531
532
|
};
|
|
532
533
|
atomTier: AtomTier;
|
|
533
534
|
roadNodeId: string;
|
|
534
|
-
countyFips: string;
|
|
535
535
|
osmWayId: number;
|
|
536
536
|
classification: "highway" | "major_collector" | "minor_collector" | "residential" | "alley" | "gravel" | "unclassified";
|
|
537
537
|
centerline: {
|
|
@@ -610,12 +610,12 @@ export declare const ROAD_NODE_SCHEMA: z.ZodObject<{
|
|
|
610
610
|
sourceCitation: string;
|
|
611
611
|
extractedAt: string;
|
|
612
612
|
atomDid: string;
|
|
613
|
+
countyFips: string;
|
|
613
614
|
reasoningChain: {
|
|
614
615
|
reasoningKind: "observed";
|
|
615
616
|
};
|
|
616
617
|
atomTier: AtomTier;
|
|
617
618
|
roadNodeId: string;
|
|
618
|
-
countyFips: string;
|
|
619
619
|
osmWayId: number;
|
|
620
620
|
classification: "highway" | "major_collector" | "minor_collector" | "residential" | "alley" | "gravel" | "unclassified";
|
|
621
621
|
centerline: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@empressaio/atom-contract",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.13.0",
|
|
4
4
|
"description": "The typed-data substrate every Empressa atom satisfies: identity, context interface, composition declaration, and history anchoring. Peer to the Hauska SDK (`@hauska-sdk/*`); consumed directly by every product surface and MCP server.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|