@heroiclands/package-build 23.13.0 → 24.0.1

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 (236) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +2 -1
  3. package/assets/preview/gitea.ini +12 -7
  4. package/assets/styles/content-base.css +150 -1
  5. package/bin/content-commands.mjs +356 -210
  6. package/bin/package-build.mjs +3 -2
  7. package/ci/check-banners.mjs +7 -7
  8. package/config.mjs +21 -6
  9. package/content-config.mjs +199 -80
  10. package/docs/api.md +93 -72
  11. package/docs/authoring/links-and-markup.md +316 -78
  12. package/docs/commands.md +248 -80
  13. package/docs/configuration.md +210 -102
  14. package/docs/content-format.md +2 -2
  15. package/docs/diagnostics.md +2 -2
  16. package/docs/getting-started.md +1 -1
  17. package/docs/guides/icons.md +1 -1
  18. package/docs/guides/module-project.md +5 -8
  19. package/docs/guides/release-and-deploy.md +2 -2
  20. package/docs/guides/site.md +155 -23
  21. package/docs/guides/system-project.md +1 -1
  22. package/docs/guides/writing-in-invented-scripts.md +1247 -0
  23. package/docs/index.md +1 -0
  24. package/docs/project-setup.md +28 -30
  25. package/docs/reference/format-details.md +589 -308
  26. package/docs/reference/note-types.md +40 -10
  27. package/docs/reference/theme-pages.md +127 -108
  28. package/docs/source-preview.md +15 -1
  29. package/engine/asset-shipping.mjs +22 -10
  30. package/engine/base-compiler.mjs +62 -104
  31. package/engine/changelog-lint.mjs +1 -1
  32. package/engine/content-address.mjs +1 -1
  33. package/engine/content-alerts.mjs +8 -4
  34. package/engine/content-blocks.mjs +26 -11
  35. package/engine/content-embeds.mjs +1 -1
  36. package/engine/content-expand.mjs +376 -0
  37. package/engine/content-figures.mjs +13 -6
  38. package/engine/content-format.yaml +8 -0
  39. package/engine/content-glyphs.mjs +213 -0
  40. package/engine/content-images.mjs +6 -7
  41. package/engine/content-links.mjs +3 -3
  42. package/engine/content-lint.mjs +1 -1
  43. package/engine/content-render.mjs +453 -0
  44. package/engine/content-scripts.mjs +326 -27
  45. package/engine/content-spans.mjs +4 -1
  46. package/engine/content-styles.mjs +91 -0
  47. package/engine/content-symbols.mjs +186 -0
  48. package/engine/content-verse.mjs +6 -18
  49. package/engine/core-report.mjs +169 -0
  50. package/engine/core-vocabulary.mjs +208 -0
  51. package/engine/dictionary-html.mjs +119 -0
  52. package/engine/field-reference.mjs +1 -1
  53. package/engine/frontmatter-lint.mjs +1 -1
  54. package/engine/heading-attributes.mjs +89 -0
  55. package/engine/helpers.mjs +61 -101
  56. package/engine/homepage.mjs +17 -29
  57. package/engine/html-minify.mjs +70 -0
  58. package/engine/index.mjs +8 -5
  59. package/engine/language-rows.mjs +8 -2
  60. package/engine/language-terms.mjs +115 -14
  61. package/engine/language-words.mjs +12 -0
  62. package/engine/logographic.mjs +255 -0
  63. package/engine/map-lexicon.mjs +221 -25
  64. package/engine/map-places.mjs +5 -4
  65. package/engine/markdown-expressions.mjs +0 -2
  66. package/engine/markdownlint-run.mjs +9 -3
  67. package/engine/markup-validation.mjs +21 -0
  68. package/engine/metre-declaration.mjs +134 -0
  69. package/engine/note-matter.mjs +2 -2
  70. package/engine/note-vocabulary.mjs +187 -3
  71. package/engine/pdf-build.mjs +68 -133
  72. package/engine/pdf-render.mjs +102 -44
  73. package/engine/post-fields.mjs +157 -0
  74. package/engine/preview-index.mjs +130 -0
  75. package/engine/preview-source.mjs +450 -0
  76. package/engine/project-init.mjs +5 -12
  77. package/engine/prose-config.mjs +3 -3
  78. package/engine/run-words.mjs +3 -2
  79. package/engine/script-emphasis-terms.mjs +38 -0
  80. package/engine/script-emphasis.mjs +295 -0
  81. package/engine/script-font-delivery.mjs +4 -4
  82. package/engine/site-build.mjs +265 -313
  83. package/engine/site-config.mjs +26 -238
  84. package/engine/site-files.mjs +175 -0
  85. package/engine/site-index.mjs +9 -4
  86. package/engine/site-preview.mjs +50 -523
  87. package/engine/site-reach.mjs +213 -0
  88. package/engine/site-render.mjs +668 -0
  89. package/engine/site-root.mjs +90 -39
  90. package/engine/site-search.mjs +161 -0
  91. package/engine/site-serve.mjs +274 -0
  92. package/engine/site-theme-banner.mjs +154 -0
  93. package/engine/site-theme-urls.mjs +125 -0
  94. package/engine/site-theme.mjs +939 -0
  95. package/engine/sql-tables.mjs +9 -6
  96. package/engine/text-maps.mjs +57 -10
  97. package/engine/typographer.mjs +248 -0
  98. package/engine/verse-metre.mjs +357 -0
  99. package/engine/wikilink-syntax.mjs +29 -47
  100. package/engine/wikilinks.mjs +758 -279
  101. package/engine/word-forms.mjs +39 -24
  102. package/engine/word-rows.mjs +12 -2
  103. package/engine/word-terms.mjs +29 -4
  104. package/manifest.mjs +3 -4
  105. package/package.json +10 -7
  106. package/{hugo-theme → site-theme}/data/banners.yaml +6 -10
  107. package/site-theme/layouts/base.hbs +31 -0
  108. package/site-theme/layouts/blog-list.hbs +30 -0
  109. package/site-theme/layouts/blog-post.hbs +40 -0
  110. package/site-theme/layouts/home.hbs +35 -0
  111. package/site-theme/layouts/list.hbs +20 -0
  112. package/site-theme/layouts/not-found.hbs +31 -0
  113. package/site-theme/layouts/page.hbs +7 -0
  114. package/site-theme/partials/copy-buttons.hbs +37 -0
  115. package/site-theme/partials/draft-notice.hbs +5 -0
  116. package/site-theme/partials/exturl.hbs +2 -0
  117. package/{hugo-theme/layouts/partials/footer.html → site-theme/partials/footer.hbs} +10 -7
  118. package/site-theme/partials/header.hbs +44 -0
  119. package/site-theme/partials/hero-banner.hbs +11 -0
  120. package/site-theme/partials/infobox-entry.hbs +2 -0
  121. package/site-theme/partials/infobox-section.hbs +31 -0
  122. package/site-theme/partials/infobox-value.hbs +2 -0
  123. package/site-theme/partials/infobox.hbs +18 -0
  124. package/site-theme/partials/list-members.hbs +9 -0
  125. package/site-theme/partials/nav-links.hbs +5 -0
  126. package/site-theme/partials/page-body.hbs +48 -0
  127. package/site-theme/partials/page-list.hbs +14 -0
  128. package/site-theme/partials/related.hbs +24 -0
  129. package/site-theme/partials/search-meta.hbs +6 -0
  130. package/site-theme/partials/search-names.hbs +2 -0
  131. package/site-theme/partials/search.hbs +52 -0
  132. package/site-theme/partials/tags.hbs +4 -0
  133. package/site-theme/partials/toc.hbs +7 -0
  134. package/{hugo-theme → site-theme}/static/css/style.css +14 -0
  135. package/stage.mjs +1 -2
  136. package/types/config.d.mts +8 -4
  137. package/types/content-config.d.mts +15 -15
  138. package/types/engine/asset-shipping.d.mts +5 -2
  139. package/types/engine/base-compiler.d.mts +20 -2
  140. package/types/engine/content-address.d.mts +1 -1
  141. package/types/engine/content-alerts.d.mts +8 -2
  142. package/types/engine/content-blocks.d.mts +11 -4
  143. package/types/engine/content-expand.d.mts +288 -0
  144. package/types/engine/content-figures.d.mts +11 -3
  145. package/types/engine/content-glyphs.d.mts +85 -0
  146. package/types/engine/content-images.d.mts +6 -7
  147. package/types/engine/content-links.d.mts +1 -1
  148. package/types/engine/content-render.d.mts +199 -0
  149. package/types/engine/content-scripts.d.mts +62 -0
  150. package/types/engine/content-spans.d.mts +1 -1
  151. package/types/engine/content-styles.d.mts +33 -0
  152. package/types/engine/content-symbols.d.mts +35 -0
  153. package/types/engine/core-report.d.mts +45 -0
  154. package/types/engine/core-vocabulary.d.mts +53 -0
  155. package/types/engine/dictionary-html.d.mts +8 -0
  156. package/types/engine/field-reference.d.mts +1 -1
  157. package/types/engine/heading-attributes.d.mts +20 -0
  158. package/types/engine/helpers.d.mts +3 -10
  159. package/types/engine/homepage.d.mts +11 -24
  160. package/types/engine/html-minify.d.mts +9 -0
  161. package/types/engine/index.d.mts +2 -1
  162. package/types/engine/language-terms.d.mts +24 -2
  163. package/types/engine/logographic.d.mts +45 -0
  164. package/types/engine/map-lexicon.d.mts +48 -8
  165. package/types/engine/map-places.d.mts +8 -0
  166. package/types/engine/markdown-expressions.d.mts +0 -2
  167. package/types/engine/metre-declaration.d.mts +39 -0
  168. package/types/engine/pdf-render.d.mts +6 -2
  169. package/types/engine/post-fields.d.mts +44 -0
  170. package/types/engine/preview-index.d.mts +72 -0
  171. package/types/engine/preview-source.d.mts +51 -0
  172. package/types/engine/script-emphasis-terms.d.mts +21 -0
  173. package/types/engine/script-emphasis.d.mts +84 -0
  174. package/types/engine/script-font-delivery.d.mts +4 -4
  175. package/types/engine/site-build.d.mts +71 -113
  176. package/types/engine/site-config.d.mts +14 -134
  177. package/types/engine/site-files.d.mts +73 -0
  178. package/types/engine/site-index.d.mts +11 -3
  179. package/types/engine/site-preview.d.mts +15 -19
  180. package/types/engine/site-reach.d.mts +76 -0
  181. package/types/engine/site-render.d.mts +173 -0
  182. package/types/engine/site-root.d.mts +14 -4
  183. package/types/engine/site-search.d.mts +54 -0
  184. package/types/engine/site-serve.d.mts +44 -0
  185. package/types/engine/site-theme-banner.d.mts +51 -0
  186. package/types/engine/site-theme-urls.d.mts +60 -0
  187. package/types/engine/site-theme.d.mts +127 -0
  188. package/types/engine/text-maps.d.mts +17 -3
  189. package/types/engine/typographer.d.mts +11 -0
  190. package/types/engine/verse-metre.d.mts +131 -0
  191. package/types/engine/wikilink-syntax.d.mts +30 -48
  192. package/types/engine/wikilinks.d.mts +330 -14
  193. package/types/engine/word-forms.d.mts +3 -2
  194. package/types/manifest.d.mts +3 -4
  195. package/types/stage.d.mts +1 -2
  196. package/types/vendor/markdownlint.d.mts +8 -0
  197. package/vendor/markdownlint.mjs +20388 -0
  198. package/engine/web-wikilinks.mjs +0 -594
  199. package/hugo-theme/layouts/404.html +0 -85
  200. package/hugo-theme/layouts/_default/baseof.html +0 -67
  201. package/hugo-theme/layouts/_default/list.html +0 -139
  202. package/hugo-theme/layouts/_default/single.html +0 -4
  203. package/hugo-theme/layouts/blog/list.html +0 -54
  204. package/hugo-theme/layouts/blog-post/single.html +0 -36
  205. package/hugo-theme/layouts/index.html +0 -75
  206. package/hugo-theme/layouts/partials/banner-url.html +0 -141
  207. package/hugo-theme/layouts/partials/cdn-url.html +0 -36
  208. package/hugo-theme/layouts/partials/dictionary-lists.html +0 -58
  209. package/hugo-theme/layouts/partials/draft-notice.html +0 -41
  210. package/hugo-theme/layouts/partials/draft-state.html +0 -26
  211. package/hugo-theme/layouts/partials/header.html +0 -35
  212. package/hugo-theme/layouts/partials/hero-banner.html +0 -85
  213. package/hugo-theme/layouts/partials/infobox/entry.html +0 -18
  214. package/hugo-theme/layouts/partials/infobox/items.html +0 -26
  215. package/hugo-theme/layouts/partials/infobox/section.html +0 -56
  216. package/hugo-theme/layouts/partials/infobox/value.html +0 -43
  217. package/hugo-theme/layouts/partials/infobox.html +0 -57
  218. package/hugo-theme/layouts/partials/page-body.html +0 -152
  219. package/hugo-theme/layouts/partials/related.html +0 -138
  220. package/hugo-theme/layouts/partials/search.html +0 -84
  221. package/hugo-theme/layouts/partials/site-url.html +0 -32
  222. package/hugo-theme/layouts/partials/tags.html +0 -30
  223. package/hugo-theme/layouts/partials/toc.html +0 -28
  224. package/hugo-theme/layouts/partials/warn-missing-banner.html +0 -3
  225. package/hugo-theme/layouts/shortcodes/cartouche.html +0 -64
  226. package/hugo-theme/layouts/shortcodes/exturl.html +0 -12
  227. package/hugo-theme/layouts/shortcodes/glyph.html +0 -43
  228. package/hugo-theme/layouts/shortcodes/pagelist.html +0 -63
  229. package/hugo-theme/theme.toml +0 -11
  230. package/types/engine/web-wikilinks.d.mts +0 -107
  231. /package/{hugo-theme → site-theme}/data/banner-kinds.yaml +0 -0
  232. /package/{hugo-theme → site-theme}/static/css/sohl-icons.css +0 -0
  233. /package/{hugo-theme → site-theme}/static/fonts/game-icons-kb.woff2 +0 -0
  234. /package/{hugo-theme → site-theme}/static/img/banners/takheperu-hieroglyphs.svg +0 -0
  235. /package/{hugo-theme → site-theme}/static/img/cartouches/takheperu.svg +0 -0
  236. /package/{hugo-theme → site-theme}/static/js/inline-spoilers.js +0 -0
@@ -7,10 +7,9 @@ subType: howto
7
7
 
8
8
  # Build a content website
9
9
 
10
- `package-build site` turns the package's content notes into a Hugo source
11
- tree. Hugo renders that tree with the shared theme. The build reads the same
12
- note addresses used by content indexes and links, so a page's URL follows the
13
- note it publishes.
10
+ `package-build site build` renders the package's content notes as a website
11
+ with the shared theme. The build reads the same note addresses used by content
12
+ indexes and links, so a page's URL follows the note it publishes.
14
13
 
15
14
  The site has an authored homepage and one page for each other publishable note
16
15
  in the content tree. The [configuration reference](../configuration.md)
@@ -62,15 +61,13 @@ site:
62
61
  description: A guide to the setting and its people.
63
62
  ```
64
63
 
65
- The site title goes into Hugo's generated configuration. `site.description`
64
+ The site title is the title of every page. `site.description`
66
65
  is plain text for the page's metadata. `site.assets` is an absolute HTTP or
67
66
  HTTPS host for imagery. `package.json` supplies the homepage URL; it must
68
67
  agree with the content package's address. The
69
68
  [configuration reference](../configuration.md#site) covers the other site
70
- keys, including `base`, `packages`, `notfound`, and `hugo`.
69
+ keys, including `base`, `packages`, and `notfound`.
71
70
 
72
- `site.hugo` can add Hugo options the build does not derive. Keys the build
73
- owns, such as `baseURL`, `title`, and the generated menu, are refused there.
74
71
  The menu comes from the navigation fetched by `package-build deps fetch`.
75
72
  The site build reads that cached navigation and reports a missing cache.
76
73
 
@@ -107,10 +104,54 @@ record available. A SQL fence queries the content index; the
107
104
  [content format](../content-format.md) defines its result columns and fence
108
105
  options.
109
106
 
110
- The build writes no automatic section, type, tag, or listing pages between
111
- the homepage and the authored pages. Hugo's section, taxonomy, term, and RSS
112
- kinds are disabled for these sites. A package's navigation above individual
113
- notes is therefore a set of authored pages, each choosing its own contents.
107
+ The build writes no automatic type or listing pages between the homepage and
108
+ the authored pages: a package's navigation above individual notes is a set of
109
+ authored pages, each choosing its own contents. A site writes tag pages only
110
+ with `site.tags`, and section pages only for the sections `site.sections` and
111
+ `site.feed` name.
112
+
113
+ ## Write a blog
114
+
115
+ A blog is a section of posts. A post is a `doc` note of `subType: post`, which
116
+ states the day it was published and may name who wrote it; its `tags` are the
117
+ ones any note carries:
118
+
119
+ ```markdown
120
+ ---
121
+ type: doc
122
+ subType: post
123
+ shortcode: welcome
124
+ name: { full: Welcome to Heroic Lands }
125
+ description: A first post, and a short note on what this blog is for.
126
+ tags: [meta, announcements]
127
+ data:
128
+ date: 2026-04-15
129
+ author: Tom Rodriguez
130
+ ---
131
+
132
+ The first post.
133
+ ```
134
+
135
+ A post that names no `data.author` carries the site's byline, the first entry
136
+ of `authors`. `site.feed` names the section the posts are published in, and
137
+ `site.sections` can give that section a page of its own, a `doc` note whose
138
+ title and body introduce the list:
139
+
140
+ ```yaml
141
+ site:
142
+ sections:
143
+ blog: doc-blog
144
+ feed: blog
145
+ tags: true
146
+ ```
147
+
148
+ The section's page at `/blog/` lists every post newest first, and
149
+ `/blog/atom.xml` feeds them. A post publishes at its own address,
150
+ `/doc-welcome/`, like any note, and a link to `doc-blog` reaches `/blog/`. With
151
+ `site.tags`, each tag a page carries links to a page listing every page that
152
+ carries it. See [where a site is served, and what it
153
+ lists](../configuration.md#where-a-site-is-served-and-what-it-lists) for every
154
+ key.
114
155
 
115
156
  ## Use links, relations, and maps
116
157
 
@@ -142,7 +183,7 @@ format and link behavior in the [content format](../content-format.md).
142
183
 
143
184
  ## What an emitted page carries
144
185
 
145
- A theme reads the front matter `package-build site` writes: the note's own
186
+ A page is drawn from its front matter: the note's own
146
187
  front matter, plus the values the build derives. Which is which matters,
147
188
  because an authored value under a derived key is discarded.
148
189
 
@@ -182,6 +223,49 @@ The build writes these keys; [what the theme draws](../reference/theme-pages.md)
182
223
  describes the panel each one feeds — the infobox, the hero band, the related
183
224
  card, and search — and the generated sections the theme draws as any other.
184
225
 
226
+ ## Decide which pages a reader finds
227
+
228
+ Every note is written as a page, linked or not, and a page is served at its
229
+ address. What a reader can find is what the homepage leads to: the sitemap and
230
+ the site search cover the pages reachable from the homepage, directly or
231
+ through the pages it links, and no others.
232
+
233
+ Reachability is read from the links the rendered pages carry, never from the
234
+ notes' sources. A page is reachable when an authored link leads to it:
235
+
236
+ - a link in the homepage or in the body of a reachable note, including the
237
+ links a `pagelist` or a `sql` table writes into the body;
238
+ - a link in the menu or the rest of the site chrome;
239
+ - a link in a listing: the pages of a section page, a tag page, and the posts
240
+ an Atom feed lists, once a reachable page links the section, the tag or the
241
+ feed. A tag chip on a reachable page links its tag page when `site.tags` is
242
+ on, so every page carrying the tag is then reachable.
243
+
244
+ The links the build generates do not make a page reachable. These are the
245
+ Related card, the previous and next links, the infobox links, and the sections
246
+ generated after a note's text (Within, Governed by, Governed places,
247
+ Chronology, Events, Accounts, What followed, In song and story). Each is drawn
248
+ without a link to a page outside the reachable set, and a section left with
249
+ nothing under it is not drawn. An infobox value that names an unreachable page
250
+ is set as plain text. A link written in prose or produced by a query is kept
251
+ wherever it points, and it is what makes its target reachable.
252
+
253
+ A page that is not reachable is the way to preview a page in place. Write the
254
+ note, build the site, and read the page at its address on the live site; link
255
+ it from the homepage or from a linked page when it is ready to publish. For a
256
+ note `doc-charlie` in the package `setting`:
257
+
258
+ 1. Add `doc-charlie` to the content tree. It is written at
259
+ `/setting/doc-charlie/` and appears in neither the sitemap nor the search.
260
+ 2. Read it at `/setting/doc-charlie/`.
261
+ 3. Link it, for example `[[doc-charlie|Charlie]]` in a linked note, to publish
262
+ it. The next build lists it in the sitemap and the search.
263
+
264
+ An address is a short code and the site serves no directory listing, so an
265
+ unlinked page is found only by someone who knows its address. The content
266
+ index that `package-build content-index` writes is a release asset and is not
267
+ part of the site.
268
+
185
269
  ## Show marked text in its font
186
270
 
187
271
  A site shows text marked with `font=` and one of the faces of
@@ -191,7 +275,7 @@ in `devDependencies`, as the
191
275
  describes. Nothing else is configured: the build reads which faces the notes use
192
276
  from their `font=` keys.
193
277
 
194
- `package-build site` copies the font stylesheet, the WOFF2 files and the
278
+ `package-build site build` copies the font stylesheet, the WOFF2 files and the
195
279
  licence to a path that names the fonts package's version,
196
280
  `fonts/heroiclands/<version>/` beside the pages, and the theme links the
197
281
  stylesheet from every page. The copied stylesheet lists only the WOFF2
@@ -206,16 +290,64 @@ package.
206
290
  ```bash
207
291
  package-build deps fetch
208
292
  package-build content-index
209
- package-build site
210
- hugo --source build/hugo
293
+ package-build site build
294
+ ```
295
+
296
+ `package-build site build` renders every page and writes the site under
297
+ `build/site/<contentPackage>/`: the pages, `404.html`, `sitemap.xml`, the
298
+ theme's files and the script fonts, then `_headers` beside it and the search
299
+ index inside it. Nothing else renders the pages: the body of each is the same
300
+ HTML the Foundry journals and the editor preview read, drawn into the site
301
+ theme's layouts and minified.
302
+
303
+ ```bash
304
+ package-build site serve
211
305
  ```
212
306
 
213
- `package-build site` writes `build/hugo/hugo.toml` and its content mount
214
- under `build/hugo/content/`. Hugo writes rendered pages under `build/site/`.
215
- `package-build site-root` adds the root headers and search index after Hugo
216
- runs. The output under `build/` is disposable; a site build replaces its
217
- content mount so a deleted note cannot leave a page behind.
307
+ `package-build site serve` builds the site the same way and serves it at
308
+ `http://127.0.0.1:1313/<contentPackage>/`. Edit a note and its page is written
309
+ again and the browser reloads; edit the theme and every page is drawn again.
310
+ A change that moves, renames or adds a note builds the whole site again. See
311
+ [`site serve`](../commands.md#package-build-site-serve) for the whole table.
218
312
 
219
313
  A package created by `package-build init` includes `npm run build:site` for
220
- this sequence and `npm run serve:site` for a local Hugo server. The site
221
- requires Hugo Extended and the shared theme in the project's dependencies.
314
+ `site build` and `npm run serve:site` for `site serve`, each preceded by the
315
+ dependency and content-index steps. Neither needs anything installed beyond
316
+ the project's dependencies.
317
+
318
+ ## Search
319
+
320
+ A site whose `site.search` is left on carries a search box in its header and a
321
+ [Pagefind](https://pagefind.app) index beside its pages. A search can be
322
+ narrowed by what each page tells it:
323
+
324
+ | Filter | Values |
325
+ | ----------- | -------------------------------------------- |
326
+ | `package` | the package that publishes the note |
327
+ | `type` | the note's `type` |
328
+ | `subtype` | the note's `subType` |
329
+ | `culture` | the name of the culture `data.culture` names |
330
+ | `continent` | the continent the note lies in |
331
+ | `region` | the outermost region beneath that continent |
332
+
333
+ A place lies where its `parents` lead, a being where its `data.homes` are, and
334
+ a scenario where its `data.locations` are. A continent is a `place/region`
335
+ whose parent is the world, and the region a note is found under is the region
336
+ directly beneath its continent, however deep the note sits: a settlement in a
337
+ valley in a march is found under the march. A note that lies in more than one
338
+ place carries every continent and region it reaches, so a being with a home in
339
+ each of two regions is found under both.
340
+
341
+ A note's name and its aliases count ten times a word of its body, so a search
342
+ for a name opens that note first and a search for an alias finds it. A result
343
+ shows the note's `data.icon`, or its hero banner where it has none. A note's
344
+ tags and its draft state are not filters. Secret blocks, inline secrets and
345
+ `.secret` sections are kept out of the index.
346
+
347
+ A post carries `author` and `tags` filters and sorts by its `date`. A site's
348
+ search can read other sites' indexes beside its own: given each package site in
349
+ [`site.mergeIndexes`](../configuration.md#where-a-site-is-served-and-what-it-lists),
350
+ the search box finds every site's pages from one box. Each index is read from
351
+ `/<package>/pagefind/` on the site's own origin, so the merged search works
352
+ where the sites share an origin and finds only the site's own pages under
353
+ `package-build site serve`.
@@ -40,6 +40,6 @@ npm run build:book
40
40
  npm run build:noci
41
41
  ```
42
42
 
43
- `build:db` writes the content index, stages assets, and compiles configured packs. `build:site` writes site content and renders it with Hugo Extended; `serve:site` starts a local Hugo preview. `build:book` uses Typst. `build:noci` runs lint, database, and manifest steps without reinstalling dependencies. Inspect `build/packs-json/` for compiled document data and `build/stage/` for what Foundry receives. Everything under `build/` is generated and can be deleted.
43
+ `build:db` writes the content index, stages assets, and compiles configured packs. `build:site` renders the site; `serve:site` serves it locally. `build:book` uses Typst. `build:noci` runs lint, database, and manifest steps without reinstalling dependencies. Inspect `build/packs-json/` for compiled document data and `build/stage/` for what Foundry receives. Everything under `build/` is generated and can be deleted.
44
44
 
45
45
  The [testing guide](e2e.md) covers a disposable Foundry world. The [release guide](release-and-deploy.md) covers packaging and deployment. Site deployment needs its own hosting configuration; local builds do not.