@empressaio/atom-contract 1.30.0 → 1.32.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 (43) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/README.md +33 -0
  3. package/dist/display/buildable.d.ts +74 -0
  4. package/dist/display/buildable.d.ts.map +1 -0
  5. package/dist/display/buildable.js +227 -0
  6. package/dist/display/buildable.js.map +1 -0
  7. package/dist/display/index.d.ts +17 -0
  8. package/dist/display/index.d.ts.map +1 -0
  9. package/dist/display/index.js +17 -0
  10. package/dist/display/index.js.map +1 -0
  11. package/dist/display/wire.d.ts +110 -0
  12. package/dist/display/wire.d.ts.map +1 -0
  13. package/dist/display/wire.js +341 -0
  14. package/dist/display/wire.js.map +1 -0
  15. package/dist/property/boundary-edge.d.ts +802 -0
  16. package/dist/property/boundary-edge.d.ts.map +1 -0
  17. package/dist/property/boundary-edge.js +145 -0
  18. package/dist/property/boundary-edge.js.map +1 -0
  19. package/dist/property/buildable-envelope.d.ts +4 -4
  20. package/dist/property/building-footprint.d.ts +8 -8
  21. package/dist/property/cad-parcel-roll.d.ts +8 -8
  22. package/dist/property/fixtures.d.ts +13 -0
  23. package/dist/property/fixtures.d.ts.map +1 -1
  24. package/dist/property/fixtures.js +96 -0
  25. package/dist/property/fixtures.js.map +1 -1
  26. package/dist/property/flood-hazard-fact.d.ts +4 -4
  27. package/dist/property/index.d.ts +1 -0
  28. package/dist/property/index.d.ts.map +1 -1
  29. package/dist/property/index.js +1 -0
  30. package/dist/property/index.js.map +1 -1
  31. package/dist/property/land-use-fact.d.ts +8 -8
  32. package/dist/property/owner-fact.d.ts +8 -8
  33. package/dist/property/parcel-node.d.ts +4 -4
  34. package/dist/property/parcel-terrain-model.d.ts +4 -4
  35. package/dist/property/rail-corridor-fact.d.ts +4 -4
  36. package/dist/property/road-node.d.ts +10 -10
  37. package/dist/property/rrc-pipeline-fact.d.ts +4 -4
  38. package/dist/property/setback-rule.d.ts +4 -4
  39. package/dist/property/special-district-fact.d.ts +4 -4
  40. package/dist/property/utility-easement.d.ts +4 -4
  41. package/dist/property/well-fact.d.ts +4 -4
  42. package/dist/property/zoning-fact.d.ts +4 -4
  43. package/package.json +5 -1
@@ -0,0 +1,341 @@
1
+ /**
2
+ * P-167 (OPS-23 R-6). Moved verbatim from legacy-design-tools
3
+ * `artifacts/smartsite-mcp/src/vocabulary.ts` (origin/main 55c4ad44, the
4
+ * P-91 v3 table): the disposition enum, the refusal codes, the two Open
5
+ * failure sentences, citationsDegraded, confidence "seed", edge role
6
+ * side_corner, and frame quality gis-approximate. No display string below
7
+ * was reworded in the move; only the import mechanism changed (see next
8
+ * paragraph) and the stale entry-count comment was corrected (see
9
+ * `DOCUMENTED_VOCABULARY_COUNT`, enforced by a test that counts).
10
+ *
11
+ * The nine display constants this table used to import as VALUES from the
12
+ * MCP server's own `mcp-app.ts` (STATE_WORDS, OPEN_DID_NOT_REACH_ME,
13
+ * NOT_ON_FILE_PREFIX, NO_BAKED_SNAPSHOT_PREFIX, UPGRADE_TO_OPEN,
14
+ * NOT_IMPLEMENTED_PREFIX, CITATION_DEGRADED, EDGE_WORDS, envelopeHuman) are
15
+ * moved in below, verbatim, so this module has no dependency on the MCP
16
+ * server. This is now the one place these strings are owned; a consumer
17
+ * (the panel included) imports the value from here rather than retyping it.
18
+ */
19
+ /** mcp-app.ts:304. */
20
+ export const NOT_ON_FILE_PREFIX = "Not on file in";
21
+ /** mcp-app.ts:305. */
22
+ export const NO_BAKED_SNAPSHOT_PREFIX = "No baked snapshot yet for";
23
+ /** mcp-app.ts:307. */
24
+ export const UPGRADE_TO_OPEN = "Upgrade to open this parcel";
25
+ /** mcp-app.ts:333. */
26
+ export const NOT_IMPLEMENTED_PREFIX = "Not implemented";
27
+ /** mcp-app.ts:3023. */
28
+ export const OPEN_DID_NOT_REACH_ME = "Open did not reach me";
29
+ /**
30
+ * mcp-app.ts:448-451. Maps exactly one token, `atom_path_pending`, to its
31
+ * display sentence; every other reason passes through unchanged.
32
+ */
33
+ export function envelopeHuman(reason) {
34
+ if (reason === "atom_path_pending")
35
+ return "Withheld, setbacks unruled";
36
+ return reason;
37
+ }
38
+ /** mcp-app.ts:523. D1: adjacency and role words. Keys are the wire enum; any other value prints verbatim. */
39
+ export const EDGE_WORDS = {
40
+ front: "front",
41
+ side: "side",
42
+ rear: "rear",
43
+ side_corner: "corner side",
44
+ alley: "alley",
45
+ ROW: "right of way",
46
+ "neighbor-parcel": "neighbor",
47
+ unmapped: "unmapped",
48
+ };
49
+ /** mcp-app.ts:550. F1: a section or overlay that claims a fact without an https citation says so; the text, never a link. */
50
+ export const CITATION_DEGRADED = "citation degraded";
51
+ /** mcp-app.ts:575. The five-state legend words, one per paint state. */
52
+ export const STATE_WORDS = {
53
+ present: "present",
54
+ "absent-verified": "absent, verified",
55
+ unknown: "unknown",
56
+ refused: "refused",
57
+ unread: "unread",
58
+ };
59
+ /**
60
+ * Wire-level section disposition words (tool-honesty.ts sectionDisposition
61
+ * / ExternalBriefSectionDisposition). Distinct from the panel's five-state
62
+ * PAINT vocabulary (STATE_WORDS / PanelPaintState above), though as of P-91
63
+ * v3 item 1 the two now overlap: `unknown` and `absent-verified` are the
64
+ * union's own display words, not the panel's earned-locally versions of
65
+ * them (a section that CLAIMS one of those two is preserved as claimed, not
66
+ * re-derived -- see tool-honesty.ts sectionDisposition). Cortex does not
67
+ * emit either at section level today (confirmed against
68
+ * artifacts/api-server's own R1BriefSectionDisposition type and the WDLL
69
+ * item 5 ruling withholding absent-verified there), so in practice the wire
70
+ * still only ever carries the original four; this table's other two rows
71
+ * exist so the display text is correct the day a section does. Both rows
72
+ * reuse STATE_WORDS' own strings rather than retype them, so the panel's
73
+ * word and the wire's word for the same token cannot drift apart.
74
+ */
75
+ export const WIRE_DISPOSITION_DISPLAY_TEXT = {
76
+ present: "Present",
77
+ refused: "Refused",
78
+ absent: "Reported absent",
79
+ unread: "Not read",
80
+ unknown: STATE_WORDS.unknown,
81
+ "absent-verified": STATE_WORDS["absent-verified"],
82
+ };
83
+ /**
84
+ * V5 (P-91 v3). Nothing in the wire shape prohibited computing an area or a
85
+ * coverage ratio from draw.ring; a session did exactly that. This is the
86
+ * stated policy, carried in the payload next to the geometry it governs
87
+ * (see sanitizeExternalDraw), not left as a convention nobody reads.
88
+ */
89
+ export const DERIVED_FIGURES_POLICY = {
90
+ denies: [
91
+ "area",
92
+ "coverage_ratio",
93
+ "lot_coverage_pct",
94
+ "setback_distance",
95
+ "buildable_area",
96
+ ],
97
+ reason: "ring, edges, and overlays are for rendering only. Do not compute an area, a coverage ratio, a percentage, or a distance from them; use a brief section's own figure, or say the figure is not on record.",
98
+ };
99
+ function requireString(value, what) {
100
+ if (!value) {
101
+ throw new Error(`vocabulary: ${what} produced no display string`);
102
+ }
103
+ return value;
104
+ }
105
+ /**
106
+ * atom_path_pending's display text is read out of envelopeHuman, the same
107
+ * function the panel calls, rather than retyped here. If that mapping is
108
+ * ever removed, this throws at module load instead of silently shipping the
109
+ * raw token as its own "display text".
110
+ */
111
+ const ATOM_PATH_PENDING_DISPLAY_TEXT = requireString(envelopeHuman("atom_path_pending"), 'envelopeHuman("atom_path_pending")');
112
+ /**
113
+ * The real, current entry count of VOCABULARY below, checked by a test
114
+ * (`wire.test.ts`) so this number cannot go stale the way the source
115
+ * table's own comment did (it said "19 entries" while the table had grown
116
+ * to 34; see `_inbox/2026-09-11_ops23_wave1_verify_p167.md` finding 4).
117
+ */
118
+ export const DOCUMENTED_VOCABULARY_COUNT = 34;
119
+ /**
120
+ * V1. 34 entries (`DOCUMENTED_VOCABULARY_COUNT`, enforced by a counting
121
+ * test): the disposition enum, the panel-only paint additions
122
+ * (absent-verified, unknown), the two Open failure sentences (kept
123
+ * distinct, checked by tests), citationsDegraded, confidence "seed", frame
124
+ * quality gis-approximate, edge role side_corner, the refusal/reason codes
125
+ * read out of tool-honesty.ts, mcp-app.ts and their tests
126
+ * (declined-in-bake, not-in-bake, atom_path_pending, upgrade_required,
127
+ * parcel_not_found, baked_snapshot_not_found, parcel_batch_cap,
128
+ * depth_not_implemented), the P-91 v3 Q1 near/street refusal codes, the
129
+ * P-106 find_parcels refusal codes, and the P-107 out_of_coverage miss
130
+ * class. Every token here is grepped out of the source, not invented; see
131
+ * the P-91 v3 handback for the grep trail.
132
+ */
133
+ export const VOCABULARY = [
134
+ {
135
+ token: "present",
136
+ displayText: WIRE_DISPOSITION_DISPLAY_TEXT.present,
137
+ meaning: "The section or rail carries confirmed on-record data for this parcel.",
138
+ },
139
+ {
140
+ token: "absent",
141
+ displayText: WIRE_DISPOSITION_DISPLAY_TEXT.absent,
142
+ meaning: "The source claims no record exists, not yet verified by provenance or a known vintage. A claim, not yet a confirmed absence.",
143
+ },
144
+ {
145
+ token: "absent-verified",
146
+ displayText: STATE_WORDS["absent-verified"],
147
+ meaning: "Confirmed absent: the absence claim carries provenance or a known source vintage. A panel-side paint state, earned from a wire 'absent' claim, never asserted directly on the wire.",
148
+ },
149
+ {
150
+ token: "unknown",
151
+ displayText: STATE_WORDS.unknown,
152
+ meaning: "Not a finding either way. The record neither confirms present nor earns a verified absence.",
153
+ },
154
+ {
155
+ token: "refused",
156
+ displayText: WIRE_DISPOSITION_DISPLAY_TEXT.refused,
157
+ meaning: "The producer declined to answer on this read path. See the refusal code and reason for why.",
158
+ },
159
+ {
160
+ token: "unread",
161
+ displayText: WIRE_DISPOSITION_DISPLAY_TEXT.unread,
162
+ meaning: "Not read on this call. Distinct from absent: nothing was checked, so there is no claim to report either way.",
163
+ },
164
+ {
165
+ token: "citationsDegraded",
166
+ displayText: CITATION_DEGRADED,
167
+ meaning: "A present claim carries no verifiable https citation; the source exists but could not be linked.",
168
+ },
169
+ {
170
+ token: "gis-approximate",
171
+ displayText: "GIS-approximate",
172
+ meaning: "frame.quality: the boundary ring is derived from public GIS parcel geometry, not a field survey. Printed distances are approximate, not surveyed.",
173
+ },
174
+ {
175
+ token: "seed",
176
+ displayText: "Seed confidence",
177
+ meaning: "draw.confidence: a first-pass geometric estimate, not a calibrated confidence score, a percentage, or a probability.",
178
+ },
179
+ {
180
+ token: "side_corner",
181
+ displayText: requireString(EDGE_WORDS.side_corner, "EDGE_WORDS.side_corner"),
182
+ meaning: "The property line runs along a corner lot's side yard, not its primary front or rear line.",
183
+ },
184
+ {
185
+ token: "atom_path_pending",
186
+ displayText: ATOM_PATH_PENDING_DISPLAY_TEXT,
187
+ meaning: "Setbacks and the buildable envelope have not been ruled or baked for this jurisdiction yet; no distance or polygon exists to report.",
188
+ },
189
+ {
190
+ token: "upgrade_required",
191
+ displayText: UPGRADE_TO_OPEN,
192
+ meaning: "The caller's tier does not include this depth of read. A plan upgrade or a 30-day unlock on the parcel is required.",
193
+ },
194
+ {
195
+ token: "parcel_not_found",
196
+ displayText: `${NOT_ON_FILE_PREFIX} <county>`,
197
+ meaning: "No parcel record exists in this server's coverage for the given id. A genuine server-declared miss (missClass absent), distinct from 'open_did_not_reach_me', which is a client-side delivery failure and makes no claim about the parcel.",
198
+ },
199
+ {
200
+ token: "baked_snapshot_not_found",
201
+ displayText: `${NO_BAKED_SNAPSHOT_PREFIX} <parcelNodeId>`,
202
+ meaning: "The parcel itself may exist, but the Smart Site facet snapshot has not been baked yet. parcelExists states whether the parcel itself was confirmed, independent of this snapshot miss.",
203
+ },
204
+ {
205
+ token: "parcel_batch_cap",
206
+ displayText: "Batch too large",
207
+ meaning: "The request exceeded the array cap for this depth: 50 at stub, 25 at node.",
208
+ },
209
+ {
210
+ token: "open_did_not_reach_me",
211
+ displayText: OPEN_DID_NOT_REACH_ME,
212
+ meaning: "Client-side only: the Open click produced no tool result within the host's timeout window. No claim was made about the parcel; this is not a miss, distinct from 'parcel_not_found'.",
213
+ },
214
+ {
215
+ token: "depth_not_implemented",
216
+ displayText: NOT_IMPLEMENTED_PREFIX,
217
+ meaning: "hop1 and subgraph depths are not built yet. Not a data miss; the read path itself does not exist.",
218
+ },
219
+ {
220
+ token: "declined-in-bake",
221
+ displayText: "Declined in bake",
222
+ meaning: "refusal.code: the producer evaluated this facet during the bake and declined it. refusal.declineReason carries the specific sub-reason (for example no-zoning-stamp).",
223
+ },
224
+ {
225
+ token: "not-in-bake",
226
+ displayText: "Not in bake",
227
+ meaning: "refusal.code: this facet was never attempted in the bake that produced this snapshot.",
228
+ },
229
+ /**
230
+ * P-91 v3 Q1. The five closed refusal codes radius-search and
231
+ * street-search return as a 422 `serve_refused` body (gtmErrorClass.ts,
232
+ * txgioRadiusSearch.ts, txgioStreetSearch.ts, read 2026-08-31). Every one
233
+ * of these is a DECLARED REFUSAL, not an upstream fault: the producer
234
+ * looked at the request and answered honestly that it will not (or
235
+ * cannot) bound the result. tool-honesty.ts's declarePlaceSearchRefusal
236
+ * reads the display text for these five back out of this table, so the
237
+ * word the model sees and the word documented here cannot drift apart.
238
+ * No numeric threshold (the radius max, the candidate ceiling) is
239
+ * hardcoded into any meaning below: those values live in api-server, a
240
+ * repo this package has no dependency on and cannot verify was not
241
+ * bumped since this was written.
242
+ */
243
+ {
244
+ token: "radius_invalid",
245
+ displayText: "Invalid radius search input",
246
+ meaning: "serve_refused reason (near): lat, lng, or radiusFt was missing, non-finite, or radiusFt was not a positive number. A caller-input problem on this specific call, not a claim about the area.",
247
+ },
248
+ {
249
+ token: "radius_exceeds_max",
250
+ displayText: "Radius exceeds the maximum",
251
+ meaning: "serve_refused reason (near): radiusFt exceeded the stated maximum this search allows. Lower the radius and retry; not a claim that no parcels exist out there.",
252
+ },
253
+ {
254
+ token: "radius_unbounded",
255
+ displayText: "Too many parcels in that radius",
256
+ meaning: "serve_refused reason (near): the candidate parcel count for that point and radius exceeded what this search can bound honestly. Too many parcels in that radius to answer, not that the search failed; narrow the radius or lower cap.",
257
+ },
258
+ {
259
+ token: "bare_street_unbounded",
260
+ displayText: "Street name needs a locality",
261
+ meaning: "serve_refused reason (street): a bare street name with no city, ZIP, or countyFips was refused rather than run as an unbounded contains across every county in coverage. Add a city, ZIP, or countyFips and retry.",
262
+ },
263
+ {
264
+ token: "bare_street_not_a_street",
265
+ displayText: "Not a bare street name",
266
+ meaning: "serve_refused reason (street): the query reads as a house-number-prefixed address, not a bare street name. Use find_parcel's plain query (or near) for one specific address instead of street.",
267
+ },
268
+ /**
269
+ * P-106. find_parcels' declared refusals, same 422 serve_refused envelope as
270
+ * the five above. Every one of these is the producer answering honestly
271
+ * rather than failing. No numeric threshold appears in a meaning below: the
272
+ * county list and the unmeasured ceiling live in api-server, which this
273
+ * package has no dependency on and cannot verify was not changed since this
274
+ * was written. The one number that matters travels in the refusal's own
275
+ * `detail`, measured on the same snapshot as the answer would have been.
276
+ */
277
+ {
278
+ token: "constraint_bound_missing",
279
+ displayText: "A county is required",
280
+ meaning: "serve_refused reason (find_parcels): no geographic bound was given. There is no statewide constraint search, because incorporation is dispositioned for a small share of Texas parcels and a statewide answer would imply coverage that does not exist. Give countyFips.",
281
+ },
282
+ {
283
+ token: "constraint_county_out_of_scope",
284
+ displayText: "No constraint index for that county",
285
+ meaning: "serve_refused reason (find_parcels): the projection has never been built for that county. Refused rather than answered with an empty set, because an empty set reads as \"no parcels match\" and this is not that claim.",
286
+ },
287
+ {
288
+ token: "constraint_single_address",
289
+ displayText: "That is a lookup, not a search",
290
+ meaning: "serve_refused reason (find_parcels): the query reads as one street address. Use find_parcel, singular, for a single address; find_parcels answers questions across parcels.",
291
+ },
292
+ {
293
+ token: "constraint_filters_missing",
294
+ displayText: "At least one filter is required",
295
+ meaning: "serve_refused reason (find_parcels): a county with no filter is not a search. Give at least one {rail, op, value}.",
296
+ },
297
+ {
298
+ token: "constraint_rail_unknown",
299
+ displayText: "Unknown rail",
300
+ meaning: "serve_refused reason (find_parcels): the named rail is not one this search carries. The refusal lists the rails that are.",
301
+ },
302
+ {
303
+ token: "constraint_op_unsupported",
304
+ displayText: "That operator does not apply to that rail",
305
+ meaning: "serve_refused reason (find_parcels): an ordered comparison on a rail with no ordered value, a categorical match on a rail with no categorical value, or a flag test on a rail with no flag. A caller-input problem on this call, not a claim about the parcels.",
306
+ },
307
+ {
308
+ token: "constraint_cap_invalid",
309
+ displayText: "Invalid cap",
310
+ meaning: "serve_refused reason (find_parcels): cap was outside the range this search allows.",
311
+ },
312
+ {
313
+ token: "constraint_rail_unmeasured",
314
+ displayText: "Too little of that rail is measured to search on it",
315
+ meaning: "serve_refused reason (find_parcels): the filtered rail is unmeasured on more of the county than the configured ceiling allows, so a search over it would evaluate a small fraction of the county while presenting itself as a search. detail carries the measured percentage, the parcel counts it came from, and the ceiling. Not a claim that no parcels match.",
316
+ },
317
+ {
318
+ token: "constraint_projection_missing",
319
+ displayText: "The projection has no rows for that county",
320
+ meaning: "serve_refused reason (find_parcels): the constraint index holds no parcels for that county, so there is nothing to filter. Refused rather than reported as zero matches, because zero matches and never built are different facts.",
321
+ },
322
+ /**
323
+ * P-107 (OPS-16 A-072). find_parcel's missing miss class. Mirrors
324
+ * SitusSearchMissClass in artifacts/api-server/src/lib/
325
+ * txgioAddressResolve.ts (read 2026-09-04): a query whose parsed state is
326
+ * a real, recognised state/territory other than the one the store covers
327
+ * today returns this missClass on a normal 200, before the ordinary
328
+ * search ever runs. Not a serve_refused refusal (find_parcel's query
329
+ * mode has no 422 refusal path) so it is not a PlaceSearchRefusalCode
330
+ * member; the wire carries it as `missClass`, same slot as `no-hit`, and
331
+ * tool-honesty.ts's splitFindParcelHits reads this row's displayText
332
+ * (never re-typed) plus its own hand-mirrored agentGuidance onto the
333
+ * response when this token fires.
334
+ */
335
+ {
336
+ token: "out_of_coverage",
337
+ displayText: "Outside Smart Site coverage",
338
+ meaning: "find_parcel missClass: the query resolved to a state Smart Site's parcel store has not reached yet. The honest opposite of 'no-hit': this is not a claim that the address is unverified or missing, only that coverage has not extended there. agentGuidance names what is covered today.",
339
+ },
340
+ ];
341
+ //# sourceMappingURL=wire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.js","sourceRoot":"","sources":["../../src/display/wire.ts"],"names":[],"mappings":"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"}