@mailwoman/geographic-model 10.0.0 → 10.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.
Files changed (62) hide show
  1. package/README.md +32 -32
  2. package/data/geographic-model.json +5 -5
  3. package/data/model/concepts.json +5 -5
  4. package/lib/artifact.ts +37 -65
  5. package/lib/compile.ts +55 -70
  6. package/lib/index.ts +22 -35
  7. package/lib/load.ts +60 -72
  8. package/lib/lookup.ts +12 -28
  9. package/lib/packaged.ts +50 -0
  10. package/lib/schema.ts +104 -97
  11. package/lib/validate.ts +32 -56
  12. package/lib/validation/issues.ts +32 -36
  13. package/lib/validation/references.ts +24 -27
  14. package/out/artifact.d.ts +28 -45
  15. package/out/artifact.d.ts.map +1 -1
  16. package/out/artifact.js +25 -52
  17. package/out/artifact.js.map +1 -1
  18. package/out/compile.d.ts +27 -41
  19. package/out/compile.d.ts.map +1 -1
  20. package/out/compile.js +42 -64
  21. package/out/compile.js.map +1 -1
  22. package/out/index.d.ts +22 -35
  23. package/out/index.d.ts.map +1 -1
  24. package/out/index.js +22 -35
  25. package/out/index.js.map +1 -1
  26. package/out/load.d.ts +30 -39
  27. package/out/load.d.ts.map +1 -1
  28. package/out/load.js +42 -56
  29. package/out/load.js.map +1 -1
  30. package/out/lookup.d.ts +12 -28
  31. package/out/lookup.d.ts.map +1 -1
  32. package/out/lookup.js +4 -16
  33. package/out/lookup.js.map +1 -1
  34. package/out/packaged.d.ts +24 -0
  35. package/out/packaged.d.ts.map +1 -0
  36. package/out/packaged.js +42 -0
  37. package/out/packaged.js.map +1 -0
  38. package/out/schema.d.ts +104 -97
  39. package/out/schema.d.ts.map +1 -1
  40. package/out/schema.js +37 -52
  41. package/out/schema.js.map +1 -1
  42. package/out/tools/build-artifact.d.ts +27 -0
  43. package/out/tools/build-artifact.d.ts.map +1 -0
  44. package/out/tools/build-artifact.js +44 -0
  45. package/out/tools/build-artifact.js.map +1 -0
  46. package/out/validate.d.ts +29 -50
  47. package/out/validate.d.ts.map +1 -1
  48. package/out/validate.js +12 -35
  49. package/out/validate.js.map +1 -1
  50. package/out/validation/issues.d.ts +17 -20
  51. package/out/validation/issues.d.ts.map +1 -1
  52. package/out/validation/issues.js +25 -29
  53. package/out/validation/issues.js.map +1 -1
  54. package/out/validation/references.d.ts.map +1 -1
  55. package/out/validation/references.js +20 -23
  56. package/out/validation/references.js.map +1 -1
  57. package/package.json +35 -76
  58. package/tools/build-artifact.ts +56 -0
  59. package/out/scripts/build-artifact.d.ts +0 -51
  60. package/out/scripts/build-artifact.d.ts.map +0 -1
  61. package/out/scripts/build-artifact.js +0 -85
  62. package/out/scripts/build-artifact.js.map +0 -1
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ * @file Reads the compiled model this package ships in `data/geographic-model.json`.
6
+ */
7
+ import { readLocalTextFile } from "@mailwoman/core/fs/readers";
8
+ import { pathExists } from "@mailwoman/core/fs/readers/stat";
9
+ import { resolvePackagePath } from "@mailwoman/core/module/resolvers";
10
+ import { resolvePath } from "path-ts";
11
+ import { parseCompiledGeographicModel } from "#artifact";
12
+ /**
13
+ * The authoring directory and the artifact it compiles to.
14
+ *
15
+ * Probes for `model/model.json`, so a genuinely missing `data/` throws naming the path.
16
+ */
17
+ export async function packagedModelPaths() {
18
+ const candidates = [resolvePackagePath("@mailwoman/geographic-model", "data")];
19
+ const probes = [];
20
+ for (const candidate of candidates) {
21
+ probes.push([candidate, await pathExists(resolvePath(candidate, "model/model.json"))]);
22
+ }
23
+ const found = probes.find(([, exists]) => exists)?.[0];
24
+ if (!found) {
25
+ throw new Error(`geographic-model: could not find data/model — looked in ${candidates.join(", ")}`);
26
+ }
27
+ return { source: resolvePath(found, "model"), artifact: resolvePath(found, "geographic-model.json") };
28
+ }
29
+ /**
30
+ * Read the committed artifact.
31
+ *
32
+ * The reader checks the format version.
33
+ * It trusts the records because the loader validated them on input.
34
+ */
35
+ export async function readCompiledGeographicModel() {
36
+ const text = await readLocalTextFile((await packagedModelPaths()).artifact);
37
+ // A corrupt committed artifact is a broken build and the `SyntaxError` names the offset.
38
+ // The package's parse wrappers live in `@mailwoman/core`, which this package deliberately does not depend on.
39
+ // oxlint-disable-next-line no-restricted-properties -- see the note above.
40
+ return parseCompiledGeographicModel(JSON.parse(text));
41
+ }
42
+ //# sourceMappingURL=packaged.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packaged.js","sourceRoot":"","sources":["../lib/packaged.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAErC,OAAO,EAAgC,4BAA4B,EAAE,MAAM,WAAW,CAAA;AAEtF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACvC,MAAM,UAAU,GAAG,CAAC,kBAAkB,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC,CAAA;IAC9E,MAAM,MAAM,GAA6B,EAAE,CAAA;IAE3C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,UAAU,CAAC,WAAW,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAA;IACvF,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAEtD,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,2DAA2D,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACpG,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,KAAK,EAAE,uBAAuB,CAAC,EAAE,CAAA;AACtG,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B;IAChD,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,CAAC,MAAM,kBAAkB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAA;IAE3E,yFAAyF;IACzF,8GAA8G;IAC9G,2EAA2E;IAC3E,OAAO,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;AACtD,CAAC"}
package/out/schema.d.ts CHANGED
@@ -3,116 +3,101 @@
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
5
  *
6
- * The authored-record schema for `@mailwoman/geographic-model`: the stable identifiers, the closed
7
- * vocabularies, and the record shapes for concepts, relations, external-vocabulary mappings, source
8
- * observations, and derived facts.
6
+ * Defines the authored record schema for `@mailwoman/geographic-model`: identifiers, closed
7
+ * vocabularies and the shapes of concepts, relations, mappings, observations and derived facts.
9
8
  *
10
- * Three properties hold by construction, and they are why the file reads the way it does.
9
+ * The schema has no numeric fields. {@link Modality} is a vocabulary of words with no exported order,
10
+ * because ranking weights belong to `@mailwoman/resolver` and `@mailwoman/neural`.
11
11
  *
12
- * **No numeric field exists anywhere in this schema** — not a strength, not a confidence, not a
13
- * count. {@link Modality} is an ordinal vocabulary of WORDS and this module exports no order over
14
- * it, because a number attached to an authored relationship is a ranking weight whatever it is
15
- * called, and ranking belongs to `@mailwoman/resolver` and `@mailwoman/neural`.
12
+ * Authored assertions, source observations and derived facts are separate types with separately
13
+ * branded identifiers. A derived fact has no {@link SourceProvenance}. Its `derivation` and `inputs`
14
+ * serve as its provenance.
16
15
  *
17
- * **An authored assertion, a source observation, and a derived fact are three different types.** A
18
- * {@link RelationAssertion} is authored by a curator and lives on the concept it is about; a
19
- * {@link SourceObservationRecord} records what a named external source states and never enters the
20
- * concept table; a {@link DerivedFactRecord} names the procedure that produced it and every input
21
- * that procedure read. Their identifiers are separately branded, so one is not assignable where
22
- * another is expected.
23
- *
24
- * **Every record carries provenance, and a derived fact carries it structurally.** A derived fact
25
- * has no {@link SourceProvenance} of its own: its `derivation` plus its resolved `inputs` ARE its
26
- * provenance, and each input carries source provenance in turn.
27
- *
28
- * Identifier namespaces are per-table. A {@link ConceptID} and a {@link RelationID} may read the
29
- * same string without colliding; the brands are what keep them apart in a consumer.
30
- *
31
- * Consumed by `./validate.ts` (which refuses a document violating any rule above), by #1926's
32
- * deterministic compiler, and by the first authored document in #1927.
33
- *
34
- * Boundary record: `docs/superpowers/specs/2026-08-26-geographic-model-boundaries.md` (#1917).
16
+ * Each table has its own identifier namespace, so a {@link ConceptID} and a {@link RelationID} may hold
17
+ * the same string.
35
18
  */
36
19
  import type { POICategoryID } from "@mailwoman/poi-taxonomy/types";
37
20
  import type { Tagged } from "type-fest";
38
21
  /**
39
- * A concept identifier, e.g. `pharmacy`, `obtain_medication`. Branded — convert via {@link toConceptID}.
22
+ * A branded concept identifier, such as `pharmacy` or `obtain_medication`.
40
23
  */
41
24
  export type ConceptID = Tagged<string, "GeographicConceptID">;
42
25
  /**
43
- * Brand a raw string as a {@link ConceptID}. Purely a compile-time assertion; the string is unchanged.
26
+ * Brands a string as a {@link ConceptID} without changing it.
44
27
  */
45
28
  export declare function toConceptID(id: string): ConceptID;
46
29
  /**
47
- * A relation identifier, e.g. `affords`. Branded — convert via {@link toRelationID}.
30
+ * A branded relation identifier, such as `affords`.
48
31
  */
49
32
  export type RelationID = Tagged<string, "GeographicRelationID">;
50
33
  /**
51
- * Brand a raw string as a {@link RelationID}. Purely a compile-time assertion; the string is unchanged.
34
+ * Brands a string as a {@link RelationID} without changing it.
52
35
  */
53
36
  export declare function toRelationID(id: string): RelationID;
54
37
  /**
55
- * The identifier of one authored {@link RelationAssertion}. Branded — convert via {@link toRuleID}.
38
+ * The branded identifier of one {@link RelationAssertion}.
56
39
  */
57
40
  export type RuleID = Tagged<string, "GeographicRuleID">;
58
41
  /**
59
- * Brand a raw string as a {@link RuleID}. Purely a compile-time assertion; the string is unchanged.
42
+ * Brands a string as a {@link RuleID} without changing it.
60
43
  */
61
44
  export declare function toRuleID(id: string): RuleID;
62
45
  /**
63
- * The identifier of one {@link ExternalMappingRecord}. Branded — convert via {@link toMappingID}.
46
+ * The branded identifier of one {@link ExternalMappingRecord}.
64
47
  */
65
48
  export type MappingID = Tagged<string, "GeographicMappingID">;
66
49
  /**
67
- * Brand a raw string as a {@link MappingID}. Purely a compile-time assertion; the string is unchanged.
50
+ * Brands a string as a {@link MappingID} without changing it.
68
51
  */
69
52
  export declare function toMappingID(id: string): MappingID;
70
53
  /**
71
- * The identifier of one {@link SourceObservationRecord}. Branded — convert via {@link toObservationID}.
54
+ * The branded identifier of one {@link SourceObservationRecord}.
72
55
  */
73
56
  export type ObservationID = Tagged<string, "GeographicObservationID">;
74
57
  /**
75
- * Brand a raw string as an {@link ObservationID}. Purely a compile-time assertion; the string is unchanged.
58
+ * Brands a string as an {@link ObservationID} without changing it.
76
59
  */
77
60
  export declare function toObservationID(id: string): ObservationID;
78
61
  /**
79
- * The identifier of one {@link DerivedFactRecord}. Branded — convert via {@link toDerivedFactID}.
62
+ * The branded identifier of one {@link DerivedFactRecord}.
80
63
  */
81
64
  export type DerivedFactID = Tagged<string, "GeographicDerivedFactID">;
82
65
  /**
83
- * Brand a raw string as a {@link DerivedFactID}. Purely a compile-time assertion; the string is unchanged.
66
+ * Brands a string as a {@link DerivedFactID} without changing it.
84
67
  */
85
68
  export declare function toDerivedFactID(id: string): DerivedFactID;
86
69
  /**
87
- * The complete set of concept kinds. Three, deliberately: the first executable slice needs an establishment class, an
88
- * activity, and the place class an establishment is sited in. Widening this vocabulary is a reviewed schema revision,
89
- * which is the review cost the program accepted in exchange for refusing speculative upper-ontology breadth.
70
+ * The concept kinds.
71
+ * A new kind requires a reviewed schema revision.
90
72
  */
91
73
  export declare const ConceptKind: {
92
74
  /**
93
- * A geographic place — an area or a point that other things are sited in or near.
75
+ * A geographic area or point where other things are located.
94
76
  */
95
77
  readonly Place: "place";
96
78
  /**
97
- * A class of premises a person can go to, e.g. `pharmacy`.
79
+ * A class of premises that a person can visit, such as `pharmacy`.
98
80
  */
99
81
  readonly Establishment: "establishment";
100
82
  /**
101
- * Something a person does, e.g. `obtain_medication`. The identifier is owned here; any statistics fitted against it
102
- * are owned by #1683.
83
+ * A kind of activity, such as `obtain_medication`.
103
84
  */
104
85
  readonly Activity: "activity";
105
86
  };
87
+ /**
88
+ * A {@link ConceptKind} value.
89
+ */
106
90
  export type ConceptKind = (typeof ConceptKind)[keyof typeof ConceptKind];
107
91
  /**
108
- * How strongly an assertion, an observation, or a derived fact claims its proposition holds.
92
+ * How strongly an assertion, observation or derived fact claims that its proposition holds.
109
93
  *
110
- * The vocabulary is ordinal in meaning and this module exports no order over it, on purpose. An exported rank would be
111
- * one arithmetic step from a weight, and an authored weight is the single thing the package boundary forbids.
94
+ * The values are ordinal in meaning, but the module exports no order
95
+ * so callers do not convert them into weights.
112
96
  */
113
97
  export declare const Modality: {
114
98
  /**
115
- * Holds in every instance; a counter-example falsifies the record rather than qualifying it.
99
+ * Holds in every instance.
100
+ * A counterexample falsifies the record.
116
101
  */
117
102
  readonly Necessary: "necessary";
118
103
  /**
@@ -123,12 +108,15 @@ export declare const Modality: {
123
108
  readonly Expected: "expected";
124
109
  readonly WeaklyExpected: "weakly_expected";
125
110
  /**
126
- * Consistent with the concept and asserts nothing about how often it holds.
111
+ * Consistent with the concept, with no claim about frequency.
127
112
  */
128
113
  readonly Possible: "possible";
129
114
  readonly Unusual: "unusual";
130
115
  readonly StronglyUnusual: "strongly_unusual";
131
116
  };
117
+ /**
118
+ * A {@link Modality} value.
119
+ */
132
120
  export type Modality = (typeof Modality)[keyof typeof Modality];
133
121
  /**
134
122
  * Whether a relation's assertions admit exceptions.
@@ -143,61 +131,75 @@ export declare const RelationSemantics: {
143
131
  */
144
132
  readonly Defeasible: "defeasible";
145
133
  };
134
+ /**
135
+ * A {@link RelationSemantics} value.
136
+ */
146
137
  export type RelationSemantics = (typeof RelationSemantics)[keyof typeof RelationSemantics];
147
138
  /**
148
- * A concept's authoring lifecycle. It says whether a consumer should read the record, and nothing about how much the
149
- * record is worth.
139
+ * A concept's review status.
140
+ * It tells consumers whether to use the record.
150
141
  */
151
142
  export declare const ConceptStatus: {
152
143
  /**
153
- * Authored, not yet reviewed. A compiler may refuse to emit it.
144
+ * Authored but not yet reviewed.
154
145
  */
155
146
  readonly Draft: "draft";
156
147
  readonly Active: "active";
157
148
  /**
158
- * Kept so existing references resolve; no new reference should be authored against it.
149
+ * Retained so that existing references resolve.
150
+ * New references should avoid it.
159
151
  */
160
152
  readonly Deprecated: "deprecated";
161
153
  };
154
+ /**
155
+ * A {@link ConceptStatus} value.
156
+ */
162
157
  export type ConceptStatus = (typeof ConceptStatus)[keyof typeof ConceptStatus];
163
158
  /**
164
- * The external vocabularies a concept can be mapped into. One today, and the mapping record below is typed against it
165
- * directly; a second vocabulary turns {@link ExternalMappingRecord} into a union discriminated on `vocabulary`.
159
+ * External vocabularies that concepts can map to.
160
+ *
161
+ * {@link ExternalMappingRecord} assumes a single vocabulary.
162
+ * A second vocabulary would require a union discriminated on `vocabulary`.
166
163
  */
167
164
  export declare const ExternalVocabulary: {
168
165
  /**
169
- * `@mailwoman/poi-taxonomy` category identifiers — the owner of external and curated POI categories.
166
+ * Category identifiers from `@mailwoman/poi-taxonomy`.
170
167
  */
171
168
  readonly POITaxonomy: "poi-taxonomy";
172
169
  };
170
+ /**
171
+ * An {@link ExternalVocabulary} value.
172
+ */
173
173
  export type ExternalVocabulary = (typeof ExternalVocabulary)[keyof typeof ExternalVocabulary];
174
174
  /**
175
- * Where a record came from. `source` is required and non-empty on every record that carries provenance: a record whose
176
- * source is blank is indistinguishable from a record nobody stands behind.
175
+ * The origin of a record.
176
+ * `source` must be non-empty.
177
177
  */
178
178
  export interface SourceProvenance {
179
179
  /**
180
- * The naming authority, dataset, publication, or curator, e.g. `overture-places` or `mailwoman-curated`.
180
+ * The authority, dataset, publication or curator, such as `overture-places` or `mailwoman-curated`.
181
181
  */
182
182
  source: string;
183
183
  /**
184
- * The source's own version or release string, when it has one, e.g. an Overture release.
184
+ * The source's version or release string, such as an Overture release.
185
185
  */
186
186
  sourceVersion?: string;
187
187
  /**
188
- * The identifier of the specific record within the source, when the claim is traceable to one.
188
+ * The identifier of the specific source record that supports the claim.
189
189
  */
190
190
  sourceRecord?: string;
191
191
  sourceURL?: string;
192
192
  /**
193
- * ISO 8601 calendar date the record was authored, `YYYY-MM-DD`.
193
+ * ISO 8601 date on which the record was authored, as `YYYY-MM-DD`.
194
194
  */
195
195
  authoredAt?: string;
196
196
  notes?: string;
197
197
  }
198
198
  /**
199
- * One relation's definition. Relations are vocabulary, not claims: the record says what the relation MEANS and which
200
- * concept kinds may stand on either side of it, and asserts nothing about any particular pair.
199
+ * One relation's definition.
200
+ *
201
+ * A relation record defines meaning and the concept kinds allowed on each side.
202
+ * It makes no claim about any particular pair.
201
203
  */
202
204
  export interface RelationRecord {
203
205
  id: RelationID;
@@ -214,15 +216,15 @@ export interface RelationRecord {
214
216
  transitive: boolean;
215
217
  symmetric: boolean;
216
218
  /**
217
- * The relation reading the same edge in the other direction. When present it must resolve, and the relation it names
218
- * must name this one back.
219
+ * The relation that reads the same edge in the opposite direction.
220
+ *
221
+ * When set, it must exist and declare this relation as its own inverse.
219
222
  */
220
223
  inverse?: RelationID;
221
224
  semantics: RelationSemantics;
222
225
  }
223
226
  /**
224
- * One authored claim, attached to the concept it is about. This is curated semantics — what a curator states holds, not
225
- * what a dataset was observed to contain.
227
+ * One curated claim, stored on the concept that it describes.
226
228
  */
227
229
  export interface RelationAssertion {
228
230
  id: RuleID;
@@ -230,14 +232,16 @@ export interface RelationAssertion {
230
232
  target: ConceptID;
231
233
  modality: Modality;
232
234
  /**
233
- * ISO 3166-1 alpha-2 codes the claim is scoped to. Absent means the curator scoped it to nowhere in particular, which
234
- * is a weaker statement than scoping it to everywhere.
235
+ * ISO 3166-1 alpha-2 codes that scope the claim.
236
+ *
237
+ * An absent list means the claim has no country scope.
238
+ * This is weaker than a claim about every country.
235
239
  */
236
240
  countries?: string[];
237
241
  provenance: SourceProvenance;
238
242
  }
239
243
  /**
240
- * One concept, and everything authored about it.
244
+ * One concept and its authored assertions.
241
245
  */
242
246
  export interface ConceptRecord {
243
247
  id: ConceptID;
@@ -245,7 +249,8 @@ export interface ConceptRecord {
245
249
  description: string;
246
250
  kind: ConceptKind;
247
251
  /**
248
- * Broader concepts this one is a kind of. May be empty; may not name this concept, directly or around a cycle.
252
+ * Broader concepts that this concept is a kind of.
253
+ * The list may be empty but must not form a cycle.
249
254
  */
250
255
  isA: ConceptID[];
251
256
  assertions: RelationAssertion[];
@@ -253,26 +258,26 @@ export interface ConceptRecord {
253
258
  status: ConceptStatus;
254
259
  }
255
260
  /**
256
- * A translation from an external vocabulary's identifier into a concept owned here. It carries no semantics of its own:
257
- * it says which external identifier names the same thing, and on whose authority.
261
+ * Maps an external vocabulary identifier to a concept.
262
+ * The mapping adds no semantics.
258
263
  */
259
264
  export interface ExternalMappingRecord {
260
265
  id: MappingID;
261
266
  concept: ConceptID;
262
267
  vocabulary: ExternalVocabulary;
263
268
  /**
264
- * The identifier in the external vocabulary. Typed as a `POICategoryID` because `poi-taxonomy` is the only member of
265
- * {@link ExternalVocabulary}; a second member makes this field a per-vocabulary type.
269
+ * The identifier in the external vocabulary.
270
+ *
271
+ * The type is `POICategoryID` because `poi-taxonomy` is the only external vocabulary.
266
272
  */
267
273
  externalID: POICategoryID;
268
274
  provenance: SourceProvenance;
269
275
  }
270
276
  /**
271
- * A proposition a named external source states, recorded in this model's vocabulary.
277
+ * A proposition stated by an identified external source, expressed in this model's vocabulary.
272
278
  *
273
- * It is kept out of the concept table on purpose. An observation is evidence about the world that someone else
274
- * collected; promoting one into an authored assertion is a curation decision that has to be made and provenanced
275
- * explicitly, never by the record sitting in a convenient place.
279
+ * Observations stay out of the concept table.
280
+ * An authored assertion requires an explicit curation decision with its own provenance.
276
281
  */
277
282
  export interface SourceObservationRecord {
278
283
  id: ObservationID;
@@ -281,13 +286,13 @@ export interface SourceObservationRecord {
281
286
  object: ConceptID;
282
287
  modality: Modality;
283
288
  /**
284
- * ISO 3166-1 alpha-2 codes the source scoped its statement to.
289
+ * ISO 3166-1 alpha-2 codes that scope the source's statement.
285
290
  */
286
291
  countries?: string[];
287
292
  provenance: SourceProvenance;
288
293
  }
289
294
  /**
290
- * Which table a {@link DerivationInput} points into.
295
+ * The table that a {@link DerivationInput} refers to.
291
296
  */
292
297
  export declare const DerivationInputKind: {
293
298
  readonly Concept: "concept";
@@ -297,10 +302,13 @@ export declare const DerivationInputKind: {
297
302
  readonly Observation: "observation";
298
303
  readonly DerivedFact: "derived_fact";
299
304
  };
305
+ /**
306
+ * A {@link DerivationInputKind} value.
307
+ */
300
308
  export type DerivationInputKind = (typeof DerivationInputKind)[keyof typeof DerivationInputKind];
301
309
  /**
302
- * One record a derivation read. The union is discriminated on `kind` so the identifier's brand matches the table it
303
- * resolves against.
310
+ * One record that a derivation read.
311
+ * The `kind` discriminant fixes the identifier's brand.
304
312
  */
305
313
  export type DerivationInput = {
306
314
  kind: typeof DerivationInputKind.Concept;
@@ -322,21 +330,21 @@ export type DerivationInput = {
322
330
  id: DerivedFactID;
323
331
  };
324
332
  /**
325
- * A fact a named procedure computed from named inputs. Never hand-authored: #1926's compiler writes this table, and the
326
- * validator refuses a fact whose derivation is unnamed or whose inputs do not resolve.
333
+ * A fact that an identified procedure computed from specific input records.
327
334
  *
328
- * There is no provenance field. The derivation plus the inputs is the provenance and the stronger kind — a source
329
- * string can be copied onto a record that did not come from it, while an input list either resolves or the document
330
- * does not validate.
335
+ * The record has no provenance field.
336
+ * Its `derivation` and `inputs` serve as provenance.
337
+ * The validator rejects a fact whose inputs do not resolve.
331
338
  */
332
339
  export interface DerivedFactRecord {
333
340
  id: DerivedFactID;
334
341
  /**
335
- * The deterministic procedure that produced this fact, named so a reader can re-run it.
342
+ * The name of the deterministic procedure that produced this fact.
336
343
  */
337
344
  derivation: string;
338
345
  /**
339
- * Every record the derivation read. At least one, and each must resolve.
346
+ * Every record that the derivation read.
347
+ * The list must be non-empty and every input must resolve.
340
348
  */
341
349
  inputs: DerivationInput[];
342
350
  subject: ConceptID;
@@ -346,15 +354,14 @@ export interface DerivedFactRecord {
346
354
  countries?: string[];
347
355
  }
348
356
  /**
349
- * One authored document: the whole record set a validator, and later a compiler, reads at once.
357
+ * One complete authored document.
350
358
  *
351
- * All six fields are required, `derivedFacts` included. A hand-authored file therefore writes `"derivedFacts": []`,
352
- * which is the point — an absent table and an empty table are different claims, and the format that allows the first to
353
- * stand in for the second is the format where a dropped table reads as a world with no derived facts in it.
359
+ * Every field is required, including `derivedFacts`, so that a dropped table fails
360
+ * validation instead of reading as an empty one.
354
361
  */
355
362
  export interface GeographicModelDocument {
356
363
  /**
357
- * The document's own schema/data version.
364
+ * The document's data version.
358
365
  */
359
366
  version: string;
360
367
  relations: RelationRecord[];
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../lib/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../lib/schema.ts"],"names":[],"mappings":"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"}