@empressaio/atom-contract 1.11.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.
Files changed (34) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/README.md +13 -2
  3. package/dist/conformance/common.d.ts +1 -1
  4. package/dist/conformance/common.js +1 -1
  5. package/dist/property/building-footprint.d.ts +649 -0
  6. package/dist/property/building-footprint.d.ts.map +1 -0
  7. package/dist/property/building-footprint.js +86 -0
  8. package/dist/property/building-footprint.js.map +1 -0
  9. package/dist/property/common.d.ts +248 -0
  10. package/dist/property/common.d.ts.map +1 -1
  11. package/dist/property/common.js +148 -0
  12. package/dist/property/common.js.map +1 -1
  13. package/dist/property/fixtures.d.ts +239 -0
  14. package/dist/property/fixtures.d.ts.map +1 -1
  15. package/dist/property/fixtures.js +483 -0
  16. package/dist/property/fixtures.js.map +1 -1
  17. package/dist/property/index.d.ts +3 -0
  18. package/dist/property/index.d.ts.map +1 -1
  19. package/dist/property/index.js +3 -0
  20. package/dist/property/index.js.map +1 -1
  21. package/dist/property/parcel-node.d.ts +710 -0
  22. package/dist/property/parcel-node.d.ts.map +1 -0
  23. package/dist/property/parcel-node.js +156 -0
  24. package/dist/property/parcel-node.js.map +1 -0
  25. package/dist/property/road-node.d.ts +2 -5
  26. package/dist/property/road-node.d.ts.map +1 -1
  27. package/dist/property/road-node.js +1 -2
  28. package/dist/property/road-node.js.map +1 -1
  29. package/dist/property/setback-rule.d.ts +16 -16
  30. package/dist/property/utility-easement.d.ts +724 -0
  31. package/dist/property/utility-easement.d.ts.map +1 -0
  32. package/dist/property/utility-easement.js +81 -0
  33. package/dist/property/utility-easement.js.map +1 -0
  34. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,79 @@
2
2
 
3
3
  All notable changes to `@empressaio/atom-contract` (formerly `@hauska/atom-contract`) are documented here.
4
4
 
5
+ ## [1.13.0] - 2026-08-08
6
+
7
+ Additive minor — `parcel-node`, the Rail 1 parcel identity and geometry-provenance
8
+ anchor. MCP has advertised this entity type on the property chain since the chain
9
+ shipped, with no producer behind it; this lands the shape so the engine can write it.
10
+
11
+ ### Added
12
+
13
+ - **`parcel-node`** on `./property` — observed parcel ANCHOR atom
14
+ (`reasoningKind: observed`, uniform `public-free`). Carries parcel identity
15
+ (`parcelNodeId`, `countyFips`, `keyKind`, per-key-provenance `externalKeys`),
16
+ ring provenance (`geometrySourceTier: txgio-stratmap | county-arcgis-override |
17
+ absent`, `sourceVintage`, `divergenceObservationCount`), and load state
18
+ (`geometryLoaded`).
19
+ - **Geometry by reference, never by value.** `geometryStoreRef` is a typed pointer
20
+ `{ store: "txgio_parcel", countyFips, propId }` into the single geometry truth
21
+ frame (Geometry Law rule 1, `_decisions/2026-08-07_envelope_saga_close_and_geometry_law`).
22
+ The schema is `.strict()` on that pointer, so an inlined ring is a parse error —
23
+ the atom cannot become a second source of geometry truth.
24
+ - **First-class typed absence**, matching the `building-footprint` /
25
+ `utility-easement` pattern: county-level `verifiedAbsence` (mandatory non-empty
26
+ `provenanceScope`, fail-closed when `geometrySourceTier: absent`) on the
27
+ `{fips}:_county_coverage` anchor, plus per-parcel `absence` kinds
28
+ `no-parcel-geometry`, `geometry-incomplete` (MultiPolygon truncation finding),
29
+ and `parcel-key-unresolved`. Absence and a resolved pointer are mutually
30
+ exclusive; `geometryLoaded` must agree with the pointer.
31
+ - `PARCEL_KEY_KIND_SCHEMA` (`prop_id | geo_id_crosswalk`) — records which key the
32
+ second `parcelNodeId` token carries for crosswalk counties. Identity metadata,
33
+ not the join-quality rate (which stays a manifest/roster metric, not atomized).
34
+ - `parcelNodeAtomDid`, `PARCEL_NODE_ATOM_DID_PATTERN` — preserves the already
35
+ published MCP form `did:hauska:parcel-node:{parcelNodeId}`; the schema rejects
36
+ an `atomDid` that does not embed its own `parcelNodeId`.
37
+ - Fixtures: Bastrop loaded parcel, Travis crosswalk-key parcel, county-coverage
38
+ verified absence, per-parcel absence, MultiPolygon-incomplete finding, and six
39
+ negative fixtures.
40
+ - `PROPERTY_CONFORMANCE_TARGET_VERSION = "1.13.0"`.
41
+
42
+ ### Explicitly NOT in 1.13.0
43
+
44
+ - Parcel ring geometry as atom payload — rejected; `txgio_parcel` stays the one
45
+ ring per parcel.
46
+ - Any change to `parcelNodeId` shape or the MCP `parcel_node_id` parameter —
47
+ re-keying was rejected (2,269 call sites, published tool parameter, DIDs embed
48
+ the key).
49
+ - A new relationship layer — `atom_links` already ships.
50
+ - `cad-parcel-roll`, `land-use-fact`, `parcel-owner-facet`, `flood-hazard-fact`,
51
+ `soil-survey-fact` — later rails in the same spec.
52
+ - `buildable-envelope.absence` — still queued.
53
+
54
+ ## [1.12.0] - 2026-08-05
55
+
56
+ Additive minor — building footprint and utility easement site-layer atoms (ADR-029 / T3).
57
+
58
+ ### Added
59
+
60
+ - **`building-footprint`** on `./property` — observed improvement geometry atom
61
+ (`reasoningKind: observed`); `sourceTier: cad-authoritative | ml-derived | absent`;
62
+ GeoJSON `Polygon`/`MultiPolygon`; hybrid honest absence (county-coverage
63
+ `verifiedAbsence` row + per-parcel `no-footprint-feature`); ml-derived tier
64
+ mandatory `public-free` + ODC-By in `sourceCitation` (master ruling 2026-08-05).
65
+ - **`utility-easement`** on `./property` — observed GIS easement geometry;
66
+ `easementClass`, `sourceTier: plat-gis-authoritative | county-gis |
67
+ record-extracted | absent`; uniform `public-free`; optional `linkedInstrumentDid`
68
+ bridge to ADR-020.
69
+ - Shared site-layer helpers: `SITE_LAYER_VERIFIED_ABSENCE_SCHEMA`,
70
+ `countyCoverageParcelNodeId`, GeoJSON geometry schemas, Bastrop T3 fixtures.
71
+ - `PROPERTY_CONFORMANCE_TARGET_VERSION = "1.12.0"`.
72
+
73
+ ### Explicitly NOT in 1.12.0
74
+
75
+ - ADR-021 `utility-easement` resolver basis enum (deferred post-registration pilot).
76
+ - ADR-012 renderer `focus` mode obligation (deferred post-pilot).
77
+
5
78
  ## [1.11.0] - 2026-07-25
6
79
 
7
80
  Additive minor — road spine node atom (27c WDLL 3 / depth-engine R1).
package/README.md CHANGED
@@ -279,8 +279,9 @@ import {
279
279
  ## Property reasoning atom kinds (master WDLL 3.2–3.6)
280
280
 
281
281
  Parcel buildable-answer chain atoms ship on the `./property` subpath
282
- (v1.9.0): `zoning-fact`, `setback-rule`, `buildable-envelope`. All three
283
- are data-tier (`atomTier: "data"`) and default to `public-free`
282
+ (v1.9.0+): `parcel-node`, `zoning-fact`, `setback-rule`, `buildable-envelope`,
283
+ `parcel-terrain-model`, `road-node`, `building-footprint`, `utility-easement`.
284
+ All are data-tier (`atomTier: "data"`) and default to `public-free`
284
285
  accessPolicy when undeclared on the registration.
285
286
 
286
287
  **Calibrated confidence at READ (I-E):** instances MAY carry a
@@ -306,9 +307,19 @@ import {
306
307
 
307
308
  | `entityType` | `reasoningKind` | Key fields |
308
309
  |---|---|---|
310
+ | `parcel-node` | `observed` | `keyKind`, `geometryStoreRef` pointer (never the ring) OR `absence`/`verifiedAbsence` |
309
311
  | `zoning-fact` | `observed` | `district` OR `absence.no-zoning-stamp` |
310
312
  | `setback-rule` | `observed` | `front`/`side`/`rear`, typed `sourceCodeAtomRef`, `matchBasis` |
311
313
  | `buildable-envelope` | `derived` | `buildable-envelope-inset-v1`, input refs to fact + rule + geometry |
314
+ | `parcel-terrain-model` | `derived` | `parcel-terrain-mesh-ifc-v1`, format-keyed artifacts |
315
+ | `road-node` | `observed` | `{fips}:road:{osm_way_id}`, centerline + assumed ROW |
316
+ | `building-footprint` | `observed` | `footprintGeometry` OR `absence`/`verifiedAbsence`; `sourceTier` |
317
+ | `utility-easement` | `observed` | `easementGeometry`, `easementClass`, `public-free` always |
318
+
319
+ `parcel-node` is the Rail 1 anchor every other property rail keys on. It records
320
+ parcel identity and ring PROVENANCE; the ring itself stays in `txgio_parcel`, the
321
+ one geometry truth frame (Geometry Law rule 1). `geometryStoreRef` is a strict
322
+ pointer, so an inlined ring fails to parse.
312
323
 
313
324
  ICC royalties on code citations accrue via core `ObligationAtomInstance`
314
325
  rows — no standalone `SourceAttribution` type.
@@ -22,7 +22,7 @@ export type ReasoningConformanceTargetVersion = typeof REASONING_CONFORMANCE_TAR
22
22
  /**
23
23
  * Pin property atom kind adopters to this semver (master WDLL 3.2–3.6).
24
24
  */
25
- export declare const PROPERTY_CONFORMANCE_TARGET_VERSION: "1.10.0";
25
+ export declare const PROPERTY_CONFORMANCE_TARGET_VERSION: "1.13.0";
26
26
  export type PropertyConformanceTargetVersion = typeof PROPERTY_CONFORMANCE_TARGET_VERSION;
27
27
  /** Data-level atoms carry signed history; app-level workflow containers skip it. */
28
28
  export type AtomTier = "data" | "app";
@@ -19,7 +19,7 @@ export const REASONING_CONFORMANCE_TARGET_VERSION = "1.8.0";
19
19
  /**
20
20
  * Pin property atom kind adopters to this semver (master WDLL 3.2–3.6).
21
21
  */
22
- export const PROPERTY_CONFORMANCE_TARGET_VERSION = "1.10.0";
22
+ export const PROPERTY_CONFORMANCE_TARGET_VERSION = "1.13.0";
23
23
  export const ATOM_TIER_VALUES = ["data", "app"];
24
24
  export const ACCESS_POLICY_VALUES = [
25
25
  "public-free",