@heroiclands/package-build 23.8.0 → 23.10.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 (114) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.md +2 -0
  3. package/bin/content-commands.mjs +207 -70
  4. package/docs/api.md +646 -78
  5. package/docs/authoring/first-note.md +1 -1
  6. package/docs/authoring/links-and-markup.md +253 -102
  7. package/docs/commands.md +111 -13
  8. package/docs/content-format.md +7 -2
  9. package/docs/diagnostics.md +1 -1
  10. package/docs/guides/packs.md +2 -1
  11. package/docs/guides/reference-pages.md +86 -63
  12. package/docs/reference/format-details.md +398 -137
  13. package/docs/reference/note-types.md +188 -174
  14. package/engine/anchors.mjs +15 -26
  15. package/engine/base-compiler.mjs +6 -4
  16. package/engine/changelog-group.mjs +58 -34
  17. package/engine/changelog-lint.mjs +6 -2
  18. package/engine/compendiums.mjs +15 -1
  19. package/engine/compile-corpus.mjs +17 -3
  20. package/engine/content-charset.mjs +13 -1
  21. package/engine/content-format.yaml +1 -0
  22. package/engine/content-html.mjs +18 -4
  23. package/engine/content-icons.mjs +15 -1
  24. package/engine/content-images.mjs +28 -9
  25. package/engine/content-index.mjs +496 -16
  26. package/engine/content-links.mjs +70 -27
  27. package/engine/content-session.mjs +247 -0
  28. package/engine/content-sources.mjs +110 -0
  29. package/engine/content-spans.mjs +87 -8
  30. package/engine/content-tables.mjs +9 -4
  31. package/engine/content-tasklists.mjs +20 -4
  32. package/engine/culture-reach.mjs +61 -34
  33. package/engine/data-keys.mjs +3 -1
  34. package/engine/diagnostics.mjs +17 -6
  35. package/engine/dictionary-layout.mjs +151 -19
  36. package/engine/dictionary-rows.mjs +129 -79
  37. package/engine/extension-attributes.mjs +28 -5
  38. package/engine/first-use.mjs +371 -0
  39. package/engine/foundry-entries.mjs +29 -8
  40. package/engine/generate.mjs +13 -4
  41. package/engine/glossary-entries.mjs +11 -11
  42. package/engine/heading-attributes.mjs +21 -28
  43. package/engine/helpers.mjs +54 -19
  44. package/engine/index-records.mjs +1 -0
  45. package/engine/index.mjs +3 -0
  46. package/engine/journals.mjs +13 -6
  47. package/engine/language-data.mjs +55 -2
  48. package/engine/language-rows.mjs +4 -4
  49. package/engine/language-terms.mjs +90 -4
  50. package/engine/language-words.mjs +2 -2
  51. package/engine/lexical-sections.mjs +247 -0
  52. package/engine/markup-validation.mjs +7 -2
  53. package/engine/metadata-index.mjs +1 -0
  54. package/engine/name-markup.mjs +114 -0
  55. package/engine/name-rows.mjs +70 -0
  56. package/engine/names.mjs +460 -0
  57. package/engine/note-addresses.mjs +25 -4
  58. package/engine/note-claims.mjs +2 -0
  59. package/engine/note-state.mjs +9 -3
  60. package/engine/note-vocabulary.mjs +7 -6
  61. package/engine/path-charset.mjs +24 -1
  62. package/engine/pdf-build.mjs +9 -9
  63. package/engine/pdf-render.mjs +15 -1
  64. package/engine/site-build.mjs +16 -2
  65. package/engine/site-index.mjs +5 -1
  66. package/engine/sql-tables.mjs +324 -44
  67. package/engine/stub-lint.mjs +10 -5
  68. package/engine/web-wikilinks.mjs +8 -6
  69. package/engine/word-rows.mjs +20 -12
  70. package/engine/word-terms.mjs +15 -6
  71. package/engine/yaml-lint.mjs +3 -5
  72. package/hugo-theme/static/css/style.css +4 -0
  73. package/package.json +1 -1
  74. package/types/engine/anchors.d.mts +4 -2
  75. package/types/engine/compendiums.d.mts +5 -1
  76. package/types/engine/compile-corpus.d.mts +5 -2
  77. package/types/engine/content-charset.d.mts +5 -1
  78. package/types/engine/content-html.d.mts +5 -1
  79. package/types/engine/content-icons.d.mts +5 -1
  80. package/types/engine/content-images.d.mts +5 -1
  81. package/types/engine/content-index.d.mts +102 -18
  82. package/types/engine/content-links.d.mts +22 -8
  83. package/types/engine/content-session.d.mts +108 -0
  84. package/types/engine/content-sources.d.mts +32 -0
  85. package/types/engine/content-spans.d.mts +3 -5
  86. package/types/engine/content-tables.d.mts +2 -1
  87. package/types/engine/content-tasklists.d.mts +5 -1
  88. package/types/engine/culture-reach.d.mts +22 -2
  89. package/types/engine/data-keys.d.mts +7 -0
  90. package/types/engine/diagnostics.d.mts +10 -0
  91. package/types/engine/dictionary-layout.d.mts +35 -4
  92. package/types/engine/dictionary-rows.d.mts +9 -0
  93. package/types/engine/extension-attributes.d.mts +16 -2
  94. package/types/engine/first-use.d.mts +31 -0
  95. package/types/engine/foundry-entries.d.mts +14 -5
  96. package/types/engine/generate.d.mts +5 -1
  97. package/types/engine/heading-attributes.d.mts +2 -2
  98. package/types/engine/helpers.d.mts +33 -7
  99. package/types/engine/index.d.mts +1 -0
  100. package/types/engine/journals.d.mts +5 -2
  101. package/types/engine/language-terms.d.mts +7 -0
  102. package/types/engine/lexical-sections.d.mts +96 -0
  103. package/types/engine/markup-validation.d.mts +2 -1
  104. package/types/engine/name-markup.d.mts +176 -0
  105. package/types/engine/name-rows.d.mts +35 -0
  106. package/types/engine/names.d.mts +356 -0
  107. package/types/engine/note-addresses.d.mts +3 -3
  108. package/types/engine/note-state.d.mts +2 -1
  109. package/types/engine/path-charset.d.mts +16 -1
  110. package/types/engine/site-build.d.mts +6 -3
  111. package/types/engine/site-index.d.mts +3 -1
  112. package/types/engine/sql-tables.d.mts +39 -4
  113. package/types/engine/stub-lint.d.mts +3 -1
  114. package/types/engine/word-rows.d.mts +9 -7
@@ -121,86 +121,86 @@ These fields are accepted by every note type. A field's value can still be irrel
121
121
 
122
122
  **Subtypes:** `guild`, `order`, `polity`, `faithtradition`, `arcanetradition`, `spirittradition`, `lineage`, `venture`, `criminal`, `governmental`, `fellowship`.
123
123
 
124
- | Field | Shape | Meaning |
125
- | ------------------------- | ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
126
- | `data.icon` | an Address | The document's profile art — an `icon` address, resolved into `img`. |
127
- | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
128
- | `data.events` | list of event entries | What happened to or at this subject — each entry one dated, attributed event: a founding, a war, a fall, or an occasion that recurs. |
129
- | `data.demonym` | string | What one member is called — a Vylarian. |
130
- | `data.epithet` | string | The by-name it is known by — a god's, an order's, a company's. |
131
- | `data.symbol` | string | Its emblem in words: a feather atop a golden scale, a chisel carving a star. |
132
- | `data.governance.model` | string | How the affiliation is governed, where it is. |
133
- | `data.governance.summary` | string | A sentence on how the governance actually works. |
134
- | `data.governance.ranks` | list of `{ level, title, description, lore? }` | The ladder of standings the body confers: level 0 for those it excludes and level 1 for its members, both required, and higher rungs only where the body has them. |
135
- | `data.governance.offices` | a map of named offices | Named offices, each with a description and optional dated holders. |
136
- | `data.seat` | an Address | Where the affiliation's authority sits. |
137
- | `data.population` | number | How many people it counts. |
138
- | `data.economy` | list of Addresses | What its economic life runs on — currencies, banking bodies, goods. |
139
- | `data.lore` | list of Addresses | Lore concerning it — the peoples it draws on, the god a faith venerates, its law, its calendar. |
140
- | `data.parents` | list of Addresses | Affiliations it is subordinate to. |
141
- | `data.culture` | an Address | The people this affiliation belongs to, as a culture lore note. |
142
- | `data.language` | an Address | The trade, temple or order tongue the affiliation keeps, as a language skill note. It reaches the affiliation's culture, and its words enter that culture's glossary. A glossary entry that states no `language` is in it. |
143
- | `data.glossary` | list of `{ name, name_sort?, common?, definition?, pronunciation?, language? }` | Its own glossary terms: euphemisms, idioms, terms of art and titles that are not ranks. An entry with a `definition` creates a term or replaces its senses; one without marks a term the note already has. Every entry resolves to a language. Empty when unstated. See [glossary terms](format-details.md#glossary-terms). |
144
- | `data.relations` | a map keyed by Address | Standing with other affiliations — aligned, unaligned, rival, nemesis. |
124
+ | Field | Shape | Meaning |
125
+ | ------------------------- | ------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
126
+ | `data.icon` | an Address | The document's profile art — an `icon` address, resolved into `img`. |
127
+ | `data.templatePriority` | number | Template priority; unset means the note is not a template. |
128
+ | `data.events` | list of event entries | What happened to or at this subject — each entry one dated, attributed event: a founding, a war, a fall, or an occasion that recurs. |
129
+ | `data.demonym` | string | What one member is called — a Vylarian. |
130
+ | `data.epithet` | string | The by-name it is known by — a god's, an order's, a company's. |
131
+ | `data.symbol` | string | Its emblem in words: a feather atop a golden scale, a chisel carving a star. |
132
+ | `data.governance.model` | string | How the affiliation is governed, where it is. |
133
+ | `data.governance.summary` | string | A sentence on how the governance actually works. |
134
+ | `data.governance.ranks` | list of `{ level, title, description, lore? }` | The ladder of standings the body confers: level 0 for those it excludes and level 1 for its members, both required, and higher rungs only where the body has them. |
135
+ | `data.governance.offices` | a map of named offices | Named offices, each with a description and optional dated holders. |
136
+ | `data.seat` | an Address | Where the affiliation's authority sits. |
137
+ | `data.population` | number | How many people it counts. |
138
+ | `data.economy` | list of Addresses | What its economic life runs on — currencies, banking bodies, goods. |
139
+ | `data.lore` | list of Addresses | Lore concerning it — the peoples it draws on, the god a faith venerates, its law, its calendar. |
140
+ | `data.parents` | list of Addresses | Affiliations it is subordinate to. |
141
+ | `data.culture` | an Address | The people this affiliation belongs to, as a culture lore note. |
142
+ | `data.language` | an Address | The trade, temple or order tongue the affiliation keeps, as a language skill note. A glossary entry that states no `language` is in it. The affiliation chooses its own common vocabulary and context meanings. |
143
+ | `data.glossary` | list of `{ name, name_sort?, common?, definition?, pronunciation?, language? }` | Its own glossary entries: common vocabulary, dictionary words with a contextual meaning, and phrases, compounds or terms of art. A named dictionary word supplies its senses and class unless `definition` supplies the sense. Common marks belong to this owner. Every entry resolves to a language. Empty when unstated. See [glossary terms](format-details.md#glossary-terms). |
144
+ | `data.relations` | a map keyed by Address | Standing with other affiliations — aligned, unaligned, rival, nemesis. |
145
145
 
146
146
  **Inner keys** — a key a field's value does not declare is an error at its own line and column.
147
147
 
148
- | Key | Shape | Required | Meaning |
149
- | ---------------------------------------------------- | ------------------------------------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------ |
150
- | `data.events[].id` | an address segment | no | The event's name within its note — lowercase letters and digits. |
151
- | `data.events[].kind` | one `eventKind` value | no | What sort of thing happened. |
152
- | `data.events[].depth` | one `depth` value | no | How far the event's history reaches. |
153
- | `data.events[].when` | a date, or `"0.<day>"` | yes | When it happened, or the anchor and first instance of an event that recurs. |
154
- | `data.events[].until` | a date | no | When a continuous event ended, or where a recurring series stopped. |
155
- | `data.events[].recurs` | `{ every }` or `{ on }` | no | How further occurrences are found; absent for an event that happened once. |
156
- | `data.events[].recurs.every` | a whole number of years, 1 or more | no | A period counted on the canonical axis from `when`. |
157
- | `data.events[].recurs.on` | a list of dates, strictly increasing, each later than `when` | no | Recorded occurrences beyond the first, in place of a period. |
158
- | `data.events[].summary` | a string | yes | What happened, stated plainly. |
159
- | `data.events[].standing` | one `standing` value | no | What the world's evidence supports. |
160
- | `data.events[].names` | `{ name, by, gloss? }[]` | no | The event's names in the world, each with who uses it. |
161
- | `data.events[].names[].name` | a string | yes | One name the event goes by in the world. |
162
- | `data.events[].names[].by` | an Address naming an `affiliation`, `lore`, `place`, `being` or `skill` note | yes | Who uses that name — a people, a polity, a faith, a place, a tongue. |
163
- | `data.events[].names[].gloss` | a string | no | What the name means, or how it is used. |
164
- | `data.events[].where` | `{ locus?, reach? }` | no | Where it happened, and where it was felt. |
165
- | `data.events[].where.locus` | a list of Addresses, each defaulting to `place` | no | Where the event physically happened; each resolves to a place. |
166
- | `data.events[].where.reach` | `{ place, how, knowledge, attributedTo? }[]` | no | Where the event was felt, and whether each place knows why. |
167
- | `data.events[].where.reach[].place` | an Address, defaulting to `place` | yes | A place where the event was felt. |
168
- | `data.events[].where.reach[].how` | a string | yes | One clause: a consequence someone in that place could notice. |
169
- | `data.events[].where.reach[].knowledge` | one `knowledge` value | yes | Whether that place connects what it felt to this event. |
170
- | `data.events[].where.reach[].attributedTo` | an Address, defaulting to `lore`, naming an event or a `lore` note | no | Only beside `knowledge: misattributed` — the cause that place names instead. |
171
- | `data.events[].who` | `{ ref, role }[]` | no | Who took part, and as what. |
172
- | `data.events[].who[].ref` | an Address naming a `being`, `affiliation` or `lore` note | yes | A participant — a being, a people, an affiliation. |
173
- | `data.events[].who[].role` | one `role` value | yes | What the participant was to the event. |
174
- | `data.events[].follows` | `{ event, how, note? }[]` | no | The earlier events this one follows from. |
175
- | `data.events[].follows[].event` | an Address, defaulting to `lore`, anchored to an `event` where its note holds several | yes | The earlier event; it resolves to exactly one event. |
176
- | `data.events[].follows[].how` | one `followsHow` value | yes | How this event follows from it. |
177
- | `data.events[].follows[].note` | a string | no | One clause saying what connects the two. |
178
- | `data.events[].accounts` | `{ by, says, agrees, withholds? }[]` | no | What each people, polity, faith or place says about it. |
179
- | `data.events[].accounts[].by` | an Address naming an `affiliation`, `lore`, `place` or `being` note | yes | Who holds the account. |
180
- | `data.events[].accounts[].says` | a string | yes | What they say happened, in their terms. |
181
- | `data.events[].accounts[].agrees` | one `agrees` value | yes | How far their account agrees with `summary`. |
182
- | `data.events[].accounts[].withholds` | a string | no | What they decline to say. |
183
- | `data.events[].unresolved` | a list of strings | no | What the world itself has not settled. |
184
- | `data.events[].sources` | a list of Addresses | no | The notes that state or support the event; each resolves. |
185
- | `data.events[].stated` | `{ calendar, text }` | no | The date as one tradition writes it in its own reckoning. |
186
- | `data.events[].stated.calendar` | an Address, or a lore shortcode | yes | The calendar that tradition reckons in — a `lore` note with `subType: calendar`. |
187
- | `data.events[].stated.text` | a string | yes | The date as that tradition writes it. |
188
- | `data.governance.ranks[].level` | a whole number — the rung's position on this body's own ladder | yes | The rung's position on the ladder — `0` the excluded, `1` the ordinary member; a member's `rank` names it. |
189
- | `data.governance.ranks[].title` | what the standing is called | yes | What the standing is called. |
190
- | `data.governance.ranks[].description` | what the standing is | yes | What the standing is. |
191
- | `data.governance.ranks[].lore` | a lore Address | no | Lore saying more about the standing than a description holds. |
192
- | `data.governance.offices.<name>.description` | a string | yes | What the office is. |
193
- | `data.governance.offices.<name>.holders` | a list of `{ being, start?, end?, contested? }` | yes | Who has held it, each with the dates of the term. |
194
- | `data.governance.offices.<name>.holders[].being` | a being Address | yes | Who held the office. |
195
- | `data.governance.offices.<name>.holders[].start` | a date | no | When the term began; unstated, it began before anything recorded. |
196
- | `data.governance.offices.<name>.holders[].end` | a date | no | When the term ended; unstated, the being holds the office now. |
197
- | `data.governance.offices.<name>.holders[].contested` | `true` or `false` | no | The term may overlap another holder's. |
198
- | `data.glossary[].name` | a string | yes | The headword. |
199
- | `data.glossary[].name_sort` | a string | no | Its sort key; the name when unstated. |
200
- | `data.glossary[].common` | `true` or `false` | no | A word a player is expected to know by heart; `false` when unstated. |
201
- | `data.glossary[].definition` | a string | no | The sense text. Stated, it creates the entry or replaces every sense the entry's other sources give it. |
202
- | `data.glossary[].pronunciation` | a respelling such as `sol-MEH-reh` | no | A respelling, held to the same rule as a word's. |
203
- | `data.glossary[].language` | a language skill Address | no | The language the term is in. Unstated, it is the affiliation's language, its parents', or its culture's, or the culture's own. |
148
+ | Key | Shape | Required | Meaning |
149
+ | ---------------------------------------------------- | ------------------------------------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
150
+ | `data.events[].id` | an address segment | no | The event's name within its note — lowercase letters and digits. |
151
+ | `data.events[].kind` | one `eventKind` value | no | What sort of thing happened. |
152
+ | `data.events[].depth` | one `depth` value | no | How far the event's history reaches. |
153
+ | `data.events[].when` | a date, or `"0.<day>"` | yes | When it happened, or the anchor and first instance of an event that recurs. |
154
+ | `data.events[].until` | a date | no | When a continuous event ended, or where a recurring series stopped. |
155
+ | `data.events[].recurs` | `{ every }` or `{ on }` | no | How further occurrences are found; absent for an event that happened once. |
156
+ | `data.events[].recurs.every` | a whole number of years, 1 or more | no | A period counted on the canonical axis from `when`. |
157
+ | `data.events[].recurs.on` | a list of dates, strictly increasing, each later than `when` | no | Recorded occurrences beyond the first, in place of a period. |
158
+ | `data.events[].summary` | a string | yes | What happened, stated plainly. |
159
+ | `data.events[].standing` | one `standing` value | no | What the world's evidence supports. |
160
+ | `data.events[].names` | `{ name, by, gloss? }[]` | no | The event's names in the world, each with who uses it. |
161
+ | `data.events[].names[].name` | a string | yes | One name the event goes by in the world. |
162
+ | `data.events[].names[].by` | an Address naming an `affiliation`, `lore`, `place`, `being` or `skill` note | yes | Who uses that name — a people, a polity, a faith, a place, a tongue. |
163
+ | `data.events[].names[].gloss` | a string | no | What the name means, or how it is used. |
164
+ | `data.events[].where` | `{ locus?, reach? }` | no | Where it happened, and where it was felt. |
165
+ | `data.events[].where.locus` | a list of Addresses, each defaulting to `place` | no | Where the event physically happened; each resolves to a place. |
166
+ | `data.events[].where.reach` | `{ place, how, knowledge, attributedTo? }[]` | no | Where the event was felt, and whether each place knows why. |
167
+ | `data.events[].where.reach[].place` | an Address, defaulting to `place` | yes | A place where the event was felt. |
168
+ | `data.events[].where.reach[].how` | a string | yes | One clause: a consequence someone in that place could notice. |
169
+ | `data.events[].where.reach[].knowledge` | one `knowledge` value | yes | Whether that place connects what it felt to this event. |
170
+ | `data.events[].where.reach[].attributedTo` | an Address, defaulting to `lore`, naming an event or a `lore` note | no | Only beside `knowledge: misattributed` — the cause that place names instead. |
171
+ | `data.events[].who` | `{ ref, role }[]` | no | Who took part, and as what. |
172
+ | `data.events[].who[].ref` | an Address naming a `being`, `affiliation` or `lore` note | yes | A participant — a being, a people, an affiliation. |
173
+ | `data.events[].who[].role` | one `role` value | yes | What the participant was to the event. |
174
+ | `data.events[].follows` | `{ event, how, note? }[]` | no | The earlier events this one follows from. |
175
+ | `data.events[].follows[].event` | an Address, defaulting to `lore`, anchored to an `event` where its note holds several | yes | The earlier event; it resolves to exactly one event. |
176
+ | `data.events[].follows[].how` | one `followsHow` value | yes | How this event follows from it. |
177
+ | `data.events[].follows[].note` | a string | no | One clause saying what connects the two. |
178
+ | `data.events[].accounts` | `{ by, says, agrees, withholds? }[]` | no | What each people, polity, faith or place says about it. |
179
+ | `data.events[].accounts[].by` | an Address naming an `affiliation`, `lore`, `place` or `being` note | yes | Who holds the account. |
180
+ | `data.events[].accounts[].says` | a string | yes | What they say happened, in their terms. |
181
+ | `data.events[].accounts[].agrees` | one `agrees` value | yes | How far their account agrees with `summary`. |
182
+ | `data.events[].accounts[].withholds` | a string | no | What they decline to say. |
183
+ | `data.events[].unresolved` | a list of strings | no | What the world itself has not settled. |
184
+ | `data.events[].sources` | a list of Addresses | no | The notes that state or support the event; each resolves. |
185
+ | `data.events[].stated` | `{ calendar, text }` | no | The date as one tradition writes it in its own reckoning. |
186
+ | `data.events[].stated.calendar` | an Address, or a lore shortcode | yes | The calendar that tradition reckons in — a `lore` note with `subType: calendar`. |
187
+ | `data.events[].stated.text` | a string | yes | The date as that tradition writes it. |
188
+ | `data.governance.ranks[].level` | a whole number — the rung's position on this body's own ladder | yes | The rung's position on the ladder — `0` the excluded, `1` the ordinary member; a member's `rank` names it. |
189
+ | `data.governance.ranks[].title` | what the standing is called | yes | What the standing is called. |
190
+ | `data.governance.ranks[].description` | what the standing is | yes | What the standing is. |
191
+ | `data.governance.ranks[].lore` | a lore Address | no | Lore saying more about the standing than a description holds. |
192
+ | `data.governance.offices.<name>.description` | a string | yes | What the office is. |
193
+ | `data.governance.offices.<name>.holders` | a list of `{ being, start?, end?, contested? }` | yes | Who has held it, each with the dates of the term. |
194
+ | `data.governance.offices.<name>.holders[].being` | a being Address | yes | Who held the office. |
195
+ | `data.governance.offices.<name>.holders[].start` | a date | no | When the term began; unstated, it began before anything recorded. |
196
+ | `data.governance.offices.<name>.holders[].end` | a date | no | When the term ended; unstated, the being holds the office now. |
197
+ | `data.governance.offices.<name>.holders[].contested` | `true` or `false` | no | The term may overlap another holder's. |
198
+ | `data.glossary[].name` | a string | yes | The headword. |
199
+ | `data.glossary[].name_sort` | a string | no | Its sort key; the dictionary word's sort key, or the name, when unstated. |
200
+ | `data.glossary[].common` | `true` or `false` | no | Core vocabulary for this glossary's owner; `false` when unstated. |
201
+ | `data.glossary[].definition` | a string | no | The sense text, overriding the word's or governance sources' senses. Unstated, a named dictionary word supplies all its senses and class; a named rank or office supplies its descriptions. |
202
+ | `data.glossary[].pronunciation` | a respelling such as `sol-MEH-reh` | no | A respelling, held to the same rule as a word's; the dictionary word's when unstated. |
203
+ | `data.glossary[].language` | a language skill Address | no | The language the term is in. Unstated, it is the affiliation's language, its parents', or its culture's, or the culture's own. |
204
204
 
205
205
  **System mappings**
206
206
 
@@ -465,15 +465,16 @@ These fields are accepted by every note type. A field's value can still be irrel
465
465
  | `data.abbreviation` | a string, such as `Prov.` | The tag a dictionary prints for the language, beside an entry's class and in an etymology, as `Prov.`; the language's full name where unstated. A language skill note only. See [a language's words](format-details.md#a-languages-words). |
466
466
  | `data.classModifiers` | list of word class modifiers | The class modifiers the language uses, from the master word classes. A word's class may carry only these. Empty when unstated. A language skill note only. |
467
467
  | `data.fields` | list of `{ name, holds }` | The fields the language's words are grouped under. A language skill note only. |
468
- | `data.words` | list of `{ form, class, field, gloss, … }` | The language's words, one map each, in the order they print. A language skill note only. See [a language's words](format-details.md#a-languages-words). |
468
+ | `data.words` | list of `{ form, class, field, gloss, … }` | The words this language states, one map each, in authored order; its automatic dictionary sorts them alphabetically. A language skill note only. See [a language's words](format-details.md#a-languages-words). |
469
469
  | `data.affixes` | list of `{ form, gloss, attaches?, examples? }` | The affixes a word's `built` pieces may name, each with its gloss. A language skill note only. |
470
+ | `data.grammar` | a map — `{ plural?, verbs? }` | Optional noun plurals and one verb pattern for dictionary presentation. Only the shape of supplied keys is checked; no word must follow or state a rule. A language skill note only. |
470
471
  | `data.tongues` | list of `{ tag, meaning, language? }` | The tags a register row's `tongue` may name, each with what it means. A language skill note only. |
471
472
  | `data.register` | list of `{ name, tongue?, kind?, built?, gloss?, why? }` | Every name the setting gives in the language's reach, with its tongue and pieces; the notes carrying each name are derived. A language skill note only. |
472
473
  | `data.retired` | list of `{ form, instead?, why }` | The forms the setting does not write, and why. A language skill note only. |
473
474
  | `data.scope` | a map — `{ folders?, cultures?, lore?, parents?, addresses?, paths?, types?, skip? }` | The notes the register covers. A language skill note only. |
474
475
  | `data.sounds` | a map — `{ letters?, edges?, clusters?, stress?, finals?, syllables?, joining?, joins?, marks?, skeleton?, frames?, readPast?, mutations? }` | The letters the language writes and the rules its words keep. A language skill note only. |
475
476
  | `data.soundChanges` | list of `{ name, from?, to?, takes?, steps }` | Named sets of ordered changes, each making one tongue's words from another's. A language skill note only. |
476
- | `data.elements` | list of `{ form, variants?, position?, kind?, sense, examples?, word?, genitive? }` | The elements the language's names are built from. A language skill note only. |
477
+ | `data.elements` | list of `{ form, variants?, position?, kind?, sense, examples?, word?, joining? }` | The elements the language's names are built from. A language skill note only. |
477
478
  | `data.roots` | list of `{ root, sense, field? }` | The consonantal roots the language's words are set from. A language skill note only. |
478
479
  | `data.cognates` | list of `{ forms, proto?, gloss }` | Sets of forms one older word takes in several languages, stated on the eldest. A language skill note only. |
479
480
  | `data.callingNames` | a map — `{ closings, minSyllables }` | The short name a long given name is called by. A language skill note only. |
@@ -493,7 +494,8 @@ These fields are accepted by every note type. A field's value can still be irrel
493
494
  | `data.words[].variants` | a list of forms | no | The word's other forms, such as a long form beside a short one; a marked use of one cites the word. |
494
495
  | `data.words[].name_sort` | a string | no | The sort key; the form when unstated. |
495
496
  | `data.words[].class` | a word class, base first, such as `n I f` | yes | A class from the master word classes: a base, then the modifiers the language declares in `classModifiers`. |
496
- | `data.words[].field` | one of the language's `fields` names | yes | The field the word is grouped under, named in the language's `fields`. |
497
+ | `data.words[].plural` | a string | no | The noun's explicit plural, where it differs from the language's optional plural rule. A dictionary uses this form before the rule; no rule agreement is checked. |
498
+ | `data.words[].field` | one of the language's `fields` names | yes | The field tag beside the dictionary entry, named in the language's `fields`. |
497
499
  | `data.words[].gloss` | a string, or a list of senses | yes | The meaning, in brief; a list states one sense per entry, which a dictionary numbers. |
498
500
  | `data.words[].source` | a map — `{ kind, language?, form? }` | no | Where the word comes from. |
499
501
  | `data.words[].source.kind` | one of inherited, borrowed, kept, worn, coined, substrate, island | yes | How the word came into the tongue. |
@@ -518,6 +520,18 @@ These fields are accepted by every note type. A field's value can still be irrel
518
520
  | `data.affixes[].examples` | a list of strings | no | The names the affix is read from. |
519
521
  | `data.affixes[].barredAfter` | a list of sounds | no | The sounds a stem may not close on to take the affix. |
520
522
  | `data.affixes[].tones` | a tone pattern, such as `L` | no | The tone pattern the affix carries, written as a word's `tones` is. |
523
+ | `data.grammar.plural` | list of `{ ending, becomes }` | no | Default noun plurals, replacing the first matching literal ending in authored order. A word's explicit plural wins; no word is checked against this rule. |
524
+ | `data.grammar.plural[].ending` | a literal ending string, which may be empty | yes | The bare suffix replaced by this rule; empty matches every noun. |
525
+ | `data.grammar.plural[].becomes` | a literal ending string, which may be empty | yes | The bare replacement; empty removes the matching suffix. |
526
+ | `data.grammar.verbs` | a map — `{ invariant: true }` or `{ persons: { I, you, heShe, we, youAll, they } }` | no | One optional regular present pattern, printed once at the dictionary head. |
527
+ | `data.grammar.verbs.invariant` | true, as the alternative to persons | no | True where verbs keep the citation form for every person; excludes `persons`. |
528
+ | `data.grammar.verbs.persons` | a map — `{ I, you, heShe, we, youAll, they }` of ending strings | no | All six present endings, each added to the citation form; excludes `invariant`. |
529
+ | `data.grammar.verbs.persons.I` | an ending string, empty for unchanged | yes | The ending added to the citation form for I. |
530
+ | `data.grammar.verbs.persons.you` | an ending string, empty for unchanged | yes | The ending added to the citation form for you. |
531
+ | `data.grammar.verbs.persons.heShe` | an ending string, empty for unchanged | yes | The ending added to the citation form for he/she. |
532
+ | `data.grammar.verbs.persons.we` | an ending string, empty for unchanged | yes | The ending added to the citation form for we. |
533
+ | `data.grammar.verbs.persons.youAll` | an ending string, empty for unchanged | yes | The ending added to the citation form for you all. |
534
+ | `data.grammar.verbs.persons.they` | an ending string, empty for unchanged | yes | The ending added to the citation form for they. |
521
535
  | `data.tongues[].tag` | a tag such as `dunhari`, or `exonym:<tongue>` | yes | The tag a register row's `tongue` names: lowercase letters and digits, or a tag closing on `:<tongue>`, which declares one tag per tongue named after the colon. |
522
536
  | `data.tongues[].meaning` | a string | yes | What a name of this tongue is. |
523
537
  | `data.tongues[].language` | a language skill Address | no | The language note the tag names, where it is one. |
@@ -621,7 +635,7 @@ These fields are accepted by every note type. A field's value can still be irrel
621
635
  | `data.elements[].sense` | a string | yes | What the element means. |
622
636
  | `data.elements[].examples` | a list of names | no | The names the element is read from. |
623
637
  | `data.elements[].word` | a form of the language's words | no | The word the element is the stem of, a form of `data.words` of the language or an ancestor. |
624
- | `data.elements[].genitive` | the element as written, such as `-borgar` | no | The element in the genitive, where a name governing another word takes it. |
638
+ | `data.elements[].joining` | the element as written, such as `-borgar` | no | The element's joining form, as written when it qualifies another word. |
625
639
  | `data.roots[].root` | a consonantal skeleton, such as `d-l-k` | yes | The root. |
626
640
  | `data.roots[].sense` | a string | yes | What the root means. |
627
641
  | `data.roots[].field` | a string, such as `stone` | no | The field the root belongs to. |
@@ -654,11 +668,11 @@ These fields are accepted by every note type. A field's value can still be irrel
654
668
  | `data.naming.draws` | list of `{ kind, elements }` | no | The element kinds each kind of name is built from. |
655
669
  | `data.naming.draws[].kind` | one of byname, given, place | yes | The kind of name; once per kind. |
656
670
  | `data.naming.draws[].elements` | a list of element kinds | yes | The kinds of element, as `data.elements` states them, the name is built from. |
657
- | `data.naming.heldFrom` | list of `{ source, takes, clip?, genitive?, elements? }` | no | What a place name takes first, by what the place is held from. |
671
+ | `data.naming.heldFrom` | list of `{ source, takes, clip?, joining?, elements? }` | no | What a place name takes first, by what the place is held from. |
658
672
  | `data.naming.heldFrom[].source` | a string, such as `a founder` | yes | What the place is held from. |
659
673
  | `data.naming.heldFrom[].takes` | one of stem, godName, givenName, element | yes | What stands first: a name-stem in any grade, a god's name, a founder's given name, or one of `elements`. |
660
674
  | `data.naming.heldFrom[].clip` | one of first | no | How the name is clipped: `first`, to its first element; whole where absent. |
661
- | `data.naming.heldFrom[].genitive` | a list of endings | no | The genitive endings, one of which stands at the seam after the name. |
675
+ | `data.naming.heldFrom[].joining` | a list of endings | no | The joining endings, one of which stands at the seam after the name. |
662
676
  | `data.naming.heldFrom[].elements` | a list of elements | no | The elements that may stand first, for a row that takes an `element`. |
663
677
  | `data.naming.nearName` | a map — `{ minSyllables, examples? }` | no | The near name a long given name carries. |
664
678
  | `data.naming.nearName.minSyllables` | a whole number | yes | The fewest syllables a given name has that carries a near name. |
@@ -732,100 +746,100 @@ These fields are accepted by every note type. A field's value can still be irrel
732
746
 
733
747
  Lore records in-world knowledge. A `culture` describes a people; a `custom` describes how they practice a rite, observance, or usage. A `material` describes a physical constituent and its qualities, which may vary by region. See the [lore subtype definitions](format-details.md#type-lore) for the complete vocabulary.
734
748
 
735
- | Field | Shape | Meaning |
736
- | ------------------------ | ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
737
- | `data.epoch` | a canonical `<year>.<day>` | Canonical day when calendar year 1, day 1 begins — `1.1`. |
738
- | `data.months` | list of `{ name, abbreviation?, days }` | The months this calendar keeps, in order — position in the list is position in the year, and the day counts sum to the world's year. |
739
- | `data.weekdays` | list of `{ name, abbreviation? }` | The days of the week this calendar names, in order. A calendar with no week writes none. |
740
- | `data.seasons` | list of `{ name, abbreviation?, start }` | The seasons this calendar marks, starting on numbered days of the year. |
741
- | `data.namedDays` | list of `{ name, abbreviation?, day }` | Names assigned to particular days of the year. |
742
- | `data.eras` | list of `{ shortcode, name, marker?, abbreviation?, proclaimedBy?, start, label? }` | The year-counts kept in this calendar. A marker names one era and uses these months. |
743
- | `data.formats` | map of named Calendaria format strings | Named patterns for reading and writing this calendar's dates. |
744
- | `data.parents` | list of Addresses | Culture only: parent culture lore notes, searched in listed depth-first order for omitted language and appearance profile fields. |
745
- | `data.culture` | an Address | The people this lore belongs to — for a work of literature, the people whose work it is — as a culture lore note. A culture note is its own culture, and states the field only as itself. |
746
- | `data.form` | string | The kind of work in its people's own terms — an epic, a saga, a praise-song, an elegy. Free text. |
747
- | `data.subjects` | list of Addresses | The beings, places, gods and other notes the work concerns, and each event it concerns, named as `place-ironfells#sack`. |
748
- | `data.language` | an Address | The tongue the note is in, as a language skill note: the tongue a work is composed in, a culture's people speak, or an affiliation keeps as its trade, temple or order tongue. `package-build npc new` draws a culture's names from its language's `data.names`. A `literature` or `culture` lore note, or an affiliation, only. |
749
- | `data.events` | list of event entries | What happened to or at this subject — each entry one dated, attributed event: a founding, a war, a fall, or an occasion that recurs. |
750
- | `data.appearanceProfile` | an appearance profile | What this culture's people look like, for `package-build npc new`: `frame`, `eye_color`, `hair_color`, `skin_color` and `complexion` each map words of that field's vocabulary to positive weights, and `height` maps a gender to a `{min, max}` range, `female` and `male` required. A culture note only. See [appearance profiles](format-details.md#appearance-profiles). |
751
- | `data.glossary` | list of `{ name, name_sort?, common?, definition?, pronunciation?, language? }` | `culture` only: Its own glossary terms: euphemisms, idioms, terms of art and titles that are not ranks. An entry with a `definition` creates a term or replaces its senses; one without marks a term the note already has. Every entry resolves to a language. Empty when unstated. See [glossary terms](format-details.md#glossary-terms). |
749
+ | Field | Shape | Meaning |
750
+ | ------------------------ | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
751
+ | `data.epoch` | a canonical `<year>.<day>` | Canonical day when calendar year 1, day 1 begins — `1.1`. |
752
+ | `data.months` | list of `{ name, abbreviation?, days }` | The months this calendar keeps, in order — position in the list is position in the year, and the day counts sum to the world's year. |
753
+ | `data.weekdays` | list of `{ name, abbreviation? }` | The days of the week this calendar names, in order. A calendar with no week writes none. |
754
+ | `data.seasons` | list of `{ name, abbreviation?, start }` | The seasons this calendar marks, starting on numbered days of the year. |
755
+ | `data.namedDays` | list of `{ name, abbreviation?, day }` | Names assigned to particular days of the year. |
756
+ | `data.eras` | list of `{ shortcode, name, marker?, abbreviation?, proclaimedBy?, start, label? }` | The year-counts kept in this calendar. A marker names one era and uses these months. |
757
+ | `data.formats` | map of named Calendaria format strings | Named patterns for reading and writing this calendar's dates. |
758
+ | `data.parents` | list of Addresses | Culture only: parent culture lore notes, searched in listed depth-first order for omitted language and appearance profile fields. |
759
+ | `data.culture` | an Address | The people this lore belongs to — for a work of literature, the people whose work it is — as a culture lore note. A culture note is its own culture, and states the field only as itself. |
760
+ | `data.form` | string | The kind of work in its people's own terms — an epic, a saga, a praise-song, an elegy. Free text. |
761
+ | `data.subjects` | list of Addresses | The beings, places, gods and other notes the work concerns, and each event it concerns, named as `place-ironfells#sack`. |
762
+ | `data.language` | an Address | The tongue the note is in, as a language skill note: the tongue a work is composed in, a culture's people speak, or an affiliation keeps as its trade, temple or order tongue. `package-build npc new` draws a culture's names from its language's `data.names`. A `literature` or `culture` lore note, or an affiliation, only. |
763
+ | `data.events` | list of event entries | What happened to or at this subject — each entry one dated, attributed event: a founding, a war, a fall, or an occasion that recurs. |
764
+ | `data.appearanceProfile` | an appearance profile | What this culture's people look like, for `package-build npc new`: `frame`, `eye_color`, `hair_color`, `skin_color` and `complexion` each map words of that field's vocabulary to positive weights, and `height` maps a gender to a `{min, max}` range, `female` and `male` required. A culture note only. See [appearance profiles](format-details.md#appearance-profiles). |
765
+ | `data.glossary` | list of `{ name, name_sort?, common?, definition?, pronunciation?, language? }` | `culture` only: Its own glossary entries: common vocabulary, dictionary words with a contextual meaning, and phrases, compounds or terms of art. A named dictionary word supplies its senses and class unless `definition` supplies the sense. Common marks belong to this owner. Every entry resolves to a language. Empty when unstated. See [glossary terms](format-details.md#glossary-terms). |
752
766
 
753
767
  **Inner keys** — a key a field's value does not declare is an error at its own line and column.
754
768
 
755
- | Key | Shape | Required | Meaning |
756
- | ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------ |
757
- | `data.months[].name` | a string | yes | What it is called. |
758
- | `data.months[].abbreviation` | a string | no | Its short form, for a compact date. |
759
- | `data.months[].days` | a whole number of days | yes | How many days the month holds. |
760
- | `data.weekdays[].name` | a string | yes | What it is called. |
761
- | `data.weekdays[].abbreviation` | a string | no | Its short form, for a compact date. |
762
- | `data.seasons[].name` | a string | yes | What it is called. |
763
- | `data.seasons[].abbreviation` | a string | no | Its short form, for a compact date. |
764
- | `data.seasons[].start` | a one-based day of the year, as a whole number | yes | The day of the year the season begins. |
765
- | `data.namedDays[].name` | a string | yes | What it is called. |
766
- | `data.namedDays[].abbreviation` | a string | no | Its short form, for a compact date. |
767
- | `data.namedDays[].day` | a one-based day of the year, as a whole number | yes | The day of the year it names. |
768
- | `data.eras[].shortcode` | the era's own shortcode, unique within the calendar — an era is addressed `<calendar shortcode>.<era shortcode>` | yes | The era's own segment of `<calendar>.<era>`. |
769
- | `data.eras[].name` | a string | yes | What it is called. |
770
- | `data.eras[].marker` | uppercase letters and digits, beginning with a letter | no | The marker an authored date names the era by, unique across the corpus. |
771
- | `data.eras[].abbreviation` | a string | no | Its short form, for a compact date. |
772
- | `data.eras[].proclaimedBy` | an Address | no | The body that began the reckoning. |
773
- | `data.eras[].start` | `null`, or the calendar year the era begins, as a whole number | yes | The calendar year the era begins; `null` for the era before year 1. |
774
- | `data.eras[].label` | a string, or an `{ after, before }` map | no | How a date in the era reads, around one `{date}` slot. |
775
- | `data.eras[].label.after` | a string with one `{date}` slot | no | How a date in the era reads. |
776
- | `data.eras[].label.before` | a string with one `{date}` slot | no | How a date before the era's start reads. |
777
- | `data.events[].id` | an address segment | no | The event's name within its note — lowercase letters and digits. |
778
- | `data.events[].kind` | one `eventKind` value | no | What sort of thing happened. |
779
- | `data.events[].depth` | one `depth` value | no | How far the event's history reaches. |
780
- | `data.events[].when` | a date, or `"0.<day>"` | yes | When it happened, or the anchor and first instance of an event that recurs. |
781
- | `data.events[].until` | a date | no | When a continuous event ended, or where a recurring series stopped. |
782
- | `data.events[].recurs` | `{ every }` or `{ on }` | no | How further occurrences are found; absent for an event that happened once. |
783
- | `data.events[].recurs.every` | a whole number of years, 1 or more | no | A period counted on the canonical axis from `when`. |
784
- | `data.events[].recurs.on` | a list of dates, strictly increasing, each later than `when` | no | Recorded occurrences beyond the first, in place of a period. |
785
- | `data.events[].summary` | a string | yes | What happened, stated plainly. |
786
- | `data.events[].standing` | one `standing` value | no | What the world's evidence supports. |
787
- | `data.events[].names` | `{ name, by, gloss? }[]` | no | The event's names in the world, each with who uses it. |
788
- | `data.events[].names[].name` | a string | yes | One name the event goes by in the world. |
789
- | `data.events[].names[].by` | an Address naming an `affiliation`, `lore`, `place`, `being` or `skill` note | yes | Who uses that name — a people, a polity, a faith, a place, a tongue. |
790
- | `data.events[].names[].gloss` | a string | no | What the name means, or how it is used. |
791
- | `data.events[].where` | `{ locus?, reach? }` | no | Where it happened, and where it was felt. |
792
- | `data.events[].where.locus` | a list of Addresses, each defaulting to `place` | no | Where the event physically happened; each resolves to a place. |
793
- | `data.events[].where.reach` | `{ place, how, knowledge, attributedTo? }[]` | no | Where the event was felt, and whether each place knows why. |
794
- | `data.events[].where.reach[].place` | an Address, defaulting to `place` | yes | A place where the event was felt. |
795
- | `data.events[].where.reach[].how` | a string | yes | One clause: a consequence someone in that place could notice. |
796
- | `data.events[].where.reach[].knowledge` | one `knowledge` value | yes | Whether that place connects what it felt to this event. |
797
- | `data.events[].where.reach[].attributedTo` | an Address, defaulting to `lore`, naming an event or a `lore` note | no | Only beside `knowledge: misattributed` — the cause that place names instead. |
798
- | `data.events[].who` | `{ ref, role }[]` | no | Who took part, and as what. |
799
- | `data.events[].who[].ref` | an Address naming a `being`, `affiliation` or `lore` note | yes | A participant — a being, a people, an affiliation. |
800
- | `data.events[].who[].role` | one `role` value | yes | What the participant was to the event. |
801
- | `data.events[].follows` | `{ event, how, note? }[]` | no | The earlier events this one follows from. |
802
- | `data.events[].follows[].event` | an Address, defaulting to `lore`, anchored to an `event` where its note holds several | yes | The earlier event; it resolves to exactly one event. |
803
- | `data.events[].follows[].how` | one `followsHow` value | yes | How this event follows from it. |
804
- | `data.events[].follows[].note` | a string | no | One clause saying what connects the two. |
805
- | `data.events[].accounts` | `{ by, says, agrees, withholds? }[]` | no | What each people, polity, faith or place says about it. |
806
- | `data.events[].accounts[].by` | an Address naming an `affiliation`, `lore`, `place` or `being` note | yes | Who holds the account. |
807
- | `data.events[].accounts[].says` | a string | yes | What they say happened, in their terms. |
808
- | `data.events[].accounts[].agrees` | one `agrees` value | yes | How far their account agrees with `summary`. |
809
- | `data.events[].accounts[].withholds` | a string | no | What they decline to say. |
810
- | `data.events[].unresolved` | a list of strings | no | What the world itself has not settled. |
811
- | `data.events[].sources` | a list of Addresses | no | The notes that state or support the event; each resolves. |
812
- | `data.events[].stated` | `{ calendar, text }` | no | The date as one tradition writes it in its own reckoning. |
813
- | `data.events[].stated.calendar` | an Address, or a lore shortcode | yes | The calendar that tradition reckons in — a `lore` note with `subType: calendar`. |
814
- | `data.events[].stated.text` | a string | yes | The date as that tradition writes it. |
815
- | `data.appearanceProfile.frame` | a map of words to weights | yes | Weighted `frame` words; a word left out is never drawn. |
816
- | `data.appearanceProfile.eye_color` | a map of words to weights | yes | Weighted `eye_color` words; a word left out is never drawn. |
817
- | `data.appearanceProfile.hair_color` | a map of words to weights | yes | Weighted `hair_color` words; a word left out is never drawn. |
818
- | `data.appearanceProfile.skin_color` | a map of words to weights | yes | Weighted `skin_color` words; a word left out is never drawn. |
819
- | `data.appearanceProfile.complexion` | a map of words to weights | yes | Weighted `complexion` words; a word left out is never drawn. |
820
- | `data.appearanceProfile.height` | a map of genders to height ranges | yes | Height ranges keyed by gender; a gender with no range draws from the span of every range stated. |
821
- | `data.appearanceProfile.height.<name>.min` | a height in metres or feet and inches | yes | The shortest height drawn. |
822
- | `data.appearanceProfile.height.<name>.max` | a height in metres or feet and inches | yes | The tallest height drawn. |
823
- | `data.glossary[].name` | a string | yes | The headword. |
824
- | `data.glossary[].name_sort` | a string | no | Its sort key; the name when unstated. |
825
- | `data.glossary[].common` | `true` or `false` | no | A word a player is expected to know by heart; `false` when unstated. |
826
- | `data.glossary[].definition` | a string | no | The sense text. Stated, it creates the entry or replaces every sense the entry's other sources give it. |
827
- | `data.glossary[].pronunciation` | a respelling such as `sol-MEH-reh` | no | A respelling, held to the same rule as a word's. |
828
- | `data.glossary[].language` | a language skill Address | no | The language the term is in. Unstated, it is the affiliation's language, its parents', or its culture's, or the culture's own. |
769
+ | Key | Shape | Required | Meaning |
770
+ | ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
771
+ | `data.months[].name` | a string | yes | What it is called. |
772
+ | `data.months[].abbreviation` | a string | no | Its short form, for a compact date. |
773
+ | `data.months[].days` | a whole number of days | yes | How many days the month holds. |
774
+ | `data.weekdays[].name` | a string | yes | What it is called. |
775
+ | `data.weekdays[].abbreviation` | a string | no | Its short form, for a compact date. |
776
+ | `data.seasons[].name` | a string | yes | What it is called. |
777
+ | `data.seasons[].abbreviation` | a string | no | Its short form, for a compact date. |
778
+ | `data.seasons[].start` | a one-based day of the year, as a whole number | yes | The day of the year the season begins. |
779
+ | `data.namedDays[].name` | a string | yes | What it is called. |
780
+ | `data.namedDays[].abbreviation` | a string | no | Its short form, for a compact date. |
781
+ | `data.namedDays[].day` | a one-based day of the year, as a whole number | yes | The day of the year it names. |
782
+ | `data.eras[].shortcode` | the era's own shortcode, unique within the calendar — an era is addressed `<calendar shortcode>.<era shortcode>` | yes | The era's own segment of `<calendar>.<era>`. |
783
+ | `data.eras[].name` | a string | yes | What it is called. |
784
+ | `data.eras[].marker` | uppercase letters and digits, beginning with a letter | no | The marker an authored date names the era by, unique across the corpus. |
785
+ | `data.eras[].abbreviation` | a string | no | Its short form, for a compact date. |
786
+ | `data.eras[].proclaimedBy` | an Address | no | The body that began the reckoning. |
787
+ | `data.eras[].start` | `null`, or the calendar year the era begins, as a whole number | yes | The calendar year the era begins; `null` for the era before year 1. |
788
+ | `data.eras[].label` | a string, or an `{ after, before }` map | no | How a date in the era reads, around one `{date}` slot. |
789
+ | `data.eras[].label.after` | a string with one `{date}` slot | no | How a date in the era reads. |
790
+ | `data.eras[].label.before` | a string with one `{date}` slot | no | How a date before the era's start reads. |
791
+ | `data.events[].id` | an address segment | no | The event's name within its note — lowercase letters and digits. |
792
+ | `data.events[].kind` | one `eventKind` value | no | What sort of thing happened. |
793
+ | `data.events[].depth` | one `depth` value | no | How far the event's history reaches. |
794
+ | `data.events[].when` | a date, or `"0.<day>"` | yes | When it happened, or the anchor and first instance of an event that recurs. |
795
+ | `data.events[].until` | a date | no | When a continuous event ended, or where a recurring series stopped. |
796
+ | `data.events[].recurs` | `{ every }` or `{ on }` | no | How further occurrences are found; absent for an event that happened once. |
797
+ | `data.events[].recurs.every` | a whole number of years, 1 or more | no | A period counted on the canonical axis from `when`. |
798
+ | `data.events[].recurs.on` | a list of dates, strictly increasing, each later than `when` | no | Recorded occurrences beyond the first, in place of a period. |
799
+ | `data.events[].summary` | a string | yes | What happened, stated plainly. |
800
+ | `data.events[].standing` | one `standing` value | no | What the world's evidence supports. |
801
+ | `data.events[].names` | `{ name, by, gloss? }[]` | no | The event's names in the world, each with who uses it. |
802
+ | `data.events[].names[].name` | a string | yes | One name the event goes by in the world. |
803
+ | `data.events[].names[].by` | an Address naming an `affiliation`, `lore`, `place`, `being` or `skill` note | yes | Who uses that name — a people, a polity, a faith, a place, a tongue. |
804
+ | `data.events[].names[].gloss` | a string | no | What the name means, or how it is used. |
805
+ | `data.events[].where` | `{ locus?, reach? }` | no | Where it happened, and where it was felt. |
806
+ | `data.events[].where.locus` | a list of Addresses, each defaulting to `place` | no | Where the event physically happened; each resolves to a place. |
807
+ | `data.events[].where.reach` | `{ place, how, knowledge, attributedTo? }[]` | no | Where the event was felt, and whether each place knows why. |
808
+ | `data.events[].where.reach[].place` | an Address, defaulting to `place` | yes | A place where the event was felt. |
809
+ | `data.events[].where.reach[].how` | a string | yes | One clause: a consequence someone in that place could notice. |
810
+ | `data.events[].where.reach[].knowledge` | one `knowledge` value | yes | Whether that place connects what it felt to this event. |
811
+ | `data.events[].where.reach[].attributedTo` | an Address, defaulting to `lore`, naming an event or a `lore` note | no | Only beside `knowledge: misattributed` — the cause that place names instead. |
812
+ | `data.events[].who` | `{ ref, role }[]` | no | Who took part, and as what. |
813
+ | `data.events[].who[].ref` | an Address naming a `being`, `affiliation` or `lore` note | yes | A participant — a being, a people, an affiliation. |
814
+ | `data.events[].who[].role` | one `role` value | yes | What the participant was to the event. |
815
+ | `data.events[].follows` | `{ event, how, note? }[]` | no | The earlier events this one follows from. |
816
+ | `data.events[].follows[].event` | an Address, defaulting to `lore`, anchored to an `event` where its note holds several | yes | The earlier event; it resolves to exactly one event. |
817
+ | `data.events[].follows[].how` | one `followsHow` value | yes | How this event follows from it. |
818
+ | `data.events[].follows[].note` | a string | no | One clause saying what connects the two. |
819
+ | `data.events[].accounts` | `{ by, says, agrees, withholds? }[]` | no | What each people, polity, faith or place says about it. |
820
+ | `data.events[].accounts[].by` | an Address naming an `affiliation`, `lore`, `place` or `being` note | yes | Who holds the account. |
821
+ | `data.events[].accounts[].says` | a string | yes | What they say happened, in their terms. |
822
+ | `data.events[].accounts[].agrees` | one `agrees` value | yes | How far their account agrees with `summary`. |
823
+ | `data.events[].accounts[].withholds` | a string | no | What they decline to say. |
824
+ | `data.events[].unresolved` | a list of strings | no | What the world itself has not settled. |
825
+ | `data.events[].sources` | a list of Addresses | no | The notes that state or support the event; each resolves. |
826
+ | `data.events[].stated` | `{ calendar, text }` | no | The date as one tradition writes it in its own reckoning. |
827
+ | `data.events[].stated.calendar` | an Address, or a lore shortcode | yes | The calendar that tradition reckons in — a `lore` note with `subType: calendar`. |
828
+ | `data.events[].stated.text` | a string | yes | The date as that tradition writes it. |
829
+ | `data.appearanceProfile.frame` | a map of words to weights | yes | Weighted `frame` words; a word left out is never drawn. |
830
+ | `data.appearanceProfile.eye_color` | a map of words to weights | yes | Weighted `eye_color` words; a word left out is never drawn. |
831
+ | `data.appearanceProfile.hair_color` | a map of words to weights | yes | Weighted `hair_color` words; a word left out is never drawn. |
832
+ | `data.appearanceProfile.skin_color` | a map of words to weights | yes | Weighted `skin_color` words; a word left out is never drawn. |
833
+ | `data.appearanceProfile.complexion` | a map of words to weights | yes | Weighted `complexion` words; a word left out is never drawn. |
834
+ | `data.appearanceProfile.height` | a map of genders to height ranges | yes | Height ranges keyed by gender; a gender with no range draws from the span of every range stated. |
835
+ | `data.appearanceProfile.height.<name>.min` | a height in metres or feet and inches | yes | The shortest height drawn. |
836
+ | `data.appearanceProfile.height.<name>.max` | a height in metres or feet and inches | yes | The tallest height drawn. |
837
+ | `data.glossary[].name` | a string | yes | The headword. |
838
+ | `data.glossary[].name_sort` | a string | no | Its sort key; the dictionary word's sort key, or the name, when unstated. |
839
+ | `data.glossary[].common` | `true` or `false` | no | Core vocabulary for this glossary's owner; `false` when unstated. |
840
+ | `data.glossary[].definition` | a string | no | The sense text, overriding the word's or governance sources' senses. Unstated, a named dictionary word supplies all its senses and class; a named rank or office supplies its descriptions. |
841
+ | `data.glossary[].pronunciation` | a respelling such as `sol-MEH-reh` | no | A respelling, held to the same rule as a word's; the dictionary word's when unstated. |
842
+ | `data.glossary[].language` | a language skill Address | no | The language the term is in. Unstated, it is the affiliation's language, its parents', or its culture's, or the culture's own. |
829
843
 
830
844
  ### map
831
845