@heroiclands/package-build 22.15.1 → 22.16.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 (221) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/README.md +39 -678
  3. package/bin/{content-build.mjs → content-commands.mjs} +197 -118
  4. package/bin/package-build.mjs +303 -42
  5. package/bin/report.mjs +1 -1
  6. package/ci/ci-docker.mjs +6 -3
  7. package/ci/ci-steps.mjs +6 -4
  8. package/ci/content-format-reference.mjs +106 -0
  9. package/config.mjs +22 -2
  10. package/content-config.mjs +74 -134
  11. package/docs/api.md +294 -234
  12. package/docs/authoring/assets.md +31 -0
  13. package/docs/authoring/dates-and-calendars.md +33 -0
  14. package/docs/authoring/first-note.md +48 -0
  15. package/docs/authoring/frontmatter.md +40 -0
  16. package/docs/authoring/links-and-markup.md +137 -0
  17. package/docs/commands.md +631 -162
  18. package/docs/configuration.md +176 -140
  19. package/docs/content-format.md +50 -4229
  20. package/docs/design.md +32 -0
  21. package/docs/diagnostics.md +29 -22
  22. package/docs/getting-started.md +21 -877
  23. package/docs/guides/book.md +153 -0
  24. package/docs/guides/e2e.md +143 -0
  25. package/docs/guides/icons.md +126 -0
  26. package/docs/guides/localization.md +120 -0
  27. package/docs/guides/module-project.md +915 -0
  28. package/docs/guides/packs.md +167 -0
  29. package/docs/guides/reference-pages.md +148 -0
  30. package/docs/guides/release-and-deploy.md +114 -0
  31. package/docs/guides/site.md +152 -0
  32. package/docs/guides/system-project.md +45 -0
  33. package/docs/index.md +16 -0
  34. package/docs/project-setup.md +54 -35
  35. package/docs/reference/format-details.md +4420 -0
  36. package/docs/reference/note-types.md +531 -0
  37. package/engine/address-render.mjs +26 -0
  38. package/engine/address.mjs +3 -20
  39. package/engine/anchors.mjs +15 -6
  40. package/engine/asset-bindings.mjs +6 -2
  41. package/engine/base-compiler.mjs +47 -11
  42. package/engine/being-measurements.mjs +70 -0
  43. package/engine/calendar-artifacts.mjs +1 -1
  44. package/engine/calendar-choice.mjs +32 -0
  45. package/engine/calendar-human.mjs +71 -0
  46. package/engine/calendar-notes.mjs +41 -3
  47. package/engine/calendars.mjs +8 -1
  48. package/engine/changelog-lint.mjs +2 -2
  49. package/engine/code-fences.mjs +23 -97
  50. package/engine/compile-corpus.mjs +6 -7
  51. package/engine/content-admonitions.mjs +114 -0
  52. package/engine/content-captions.mjs +181 -0
  53. package/engine/content-embeds.mjs +2 -2
  54. package/engine/content-footnotes.mjs +34 -0
  55. package/engine/content-format-check.mjs +2 -2
  56. package/engine/content-format.mjs +127 -73
  57. package/engine/content-format.yaml +745 -0
  58. package/engine/content-html.mjs +1 -1
  59. package/engine/content-icons.mjs +45 -92
  60. package/engine/content-images.mjs +22 -74
  61. package/engine/content-index.mjs +12 -3
  62. package/engine/content-links.mjs +21 -26
  63. package/engine/content-lint.mjs +1 -5
  64. package/engine/content-secrets.mjs +3 -1
  65. package/engine/content-tables.mjs +47 -1257
  66. package/engine/culture-choice.mjs +32 -0
  67. package/engine/date-conversion.mjs +47 -0
  68. package/engine/declaration-check.mjs +87 -0
  69. package/engine/docs-checks.mjs +140 -0
  70. package/engine/documentation-links.mjs +31 -0
  71. package/engine/exported-scene.mjs +1 -1
  72. package/engine/extension-attributes.mjs +74 -0
  73. package/engine/field-reference.mjs +1 -1
  74. package/engine/field-spec.mjs +4 -0
  75. package/engine/foreign-catalog.mjs +5 -5
  76. package/engine/format-generated.mjs +15 -0
  77. package/engine/foundry-entries.mjs +3 -1
  78. package/engine/frontmatter-lint.mjs +5 -1
  79. package/engine/frontmatter.mjs +10 -0
  80. package/engine/generate.mjs +2 -2
  81. package/engine/helpers.mjs +71 -117
  82. package/engine/homepage.mjs +2 -3
  83. package/engine/index-records.mjs +1 -0
  84. package/engine/index.mjs +18 -3
  85. package/engine/infobox-registry.mjs +3 -1
  86. package/engine/infobox.mjs +38 -20
  87. package/engine/item-compiler.mjs +10 -8
  88. package/engine/item-docs.mjs +7 -6
  89. package/engine/journals.mjs +51 -10
  90. package/engine/macros.mjs +1 -1
  91. package/engine/map-build.mjs +1 -1
  92. package/engine/map-dot.mjs +1 -1
  93. package/engine/markdown-expressions.mjs +117 -0
  94. package/engine/metadata-index.mjs +7 -3
  95. package/engine/note-addresses.mjs +1 -0
  96. package/engine/note-dates.mjs +283 -61
  97. package/engine/note-package.mjs +5 -25
  98. package/engine/note-state.mjs +6 -2
  99. package/engine/note-vocabulary.mjs +74 -19
  100. package/engine/number-words.mjs +75 -0
  101. package/engine/office-holders.mjs +188 -0
  102. package/engine/pack-config.mjs +2 -15
  103. package/engine/pack-router.mjs +24 -5
  104. package/engine/packages.mjs +3 -2
  105. package/engine/pathnames.mjs +21 -24
  106. package/engine/pdf-build.mjs +217 -55
  107. package/engine/pdf-fonts.mjs +2 -2
  108. package/engine/pdf-images.mjs +82 -0
  109. package/engine/pdf-render.mjs +174 -22
  110. package/engine/populations.mjs +3 -2
  111. package/engine/project-init.mjs +499 -0
  112. package/engine/prose-config.mjs +1 -1
  113. package/engine/prose-lint.mjs +7 -6
  114. package/engine/readability-lint.mjs +86 -0
  115. package/engine/reckoning-markers.mjs +205 -93
  116. package/engine/scenes.mjs +5 -2
  117. package/engine/schema-check.mjs +3 -3
  118. package/engine/site-build.mjs +87 -37
  119. package/engine/site-config.mjs +8 -8
  120. package/engine/site-index.mjs +4 -0
  121. package/engine/site-maps.mjs +1 -1
  122. package/engine/site-preview.mjs +19 -8
  123. package/engine/social-ties.mjs +5 -1
  124. package/engine/sql-tables.mjs +92 -22
  125. package/engine/web-wikilinks.mjs +15 -31
  126. package/engine/wikilink-syntax.mjs +4 -1
  127. package/engine/wikilinks.mjs +12 -14
  128. package/hm3/item-fields.mjs +1 -1
  129. package/hm3/items.mjs +12 -45
  130. package/index.mjs +2 -14
  131. package/manifest.mjs +31 -4
  132. package/markdownlint-config.mjs +1 -1
  133. package/package.json +32 -11
  134. package/prettier-config.mjs +1 -1
  135. package/sohl/being-info.mjs +3 -145
  136. package/sohl/index.mjs +1 -1
  137. package/sohl/infobox.mjs +2 -1
  138. package/sohl/item-builders.mjs +3 -27
  139. package/sohl/item-fields.mjs +61 -22
  140. package/sohl/kb-passes.mjs +2 -2
  141. package/sohl/note-schemas.mjs +0 -8
  142. package/stage.mjs +19 -0
  143. package/types/config.d.mts +12 -3
  144. package/types/content-config.d.mts +15 -81
  145. package/types/engine/address-render.d.mts +13 -0
  146. package/types/engine/address.d.mts +2 -11
  147. package/types/engine/anchors.d.mts +3 -4
  148. package/types/engine/asset-bindings.d.mts +9 -2
  149. package/types/engine/base-compiler.d.mts +1 -2
  150. package/types/engine/being-measurements.d.mts +16 -0
  151. package/types/engine/calendar-choice.d.mts +14 -0
  152. package/types/engine/calendar-human.d.mts +4 -0
  153. package/types/engine/calendar-notes.d.mts +2 -0
  154. package/types/engine/calendars.d.mts +5 -3
  155. package/types/engine/code-fences.d.mts +6 -72
  156. package/types/engine/compile-corpus.d.mts +1 -3
  157. package/types/engine/content-admonitions.d.mts +24 -0
  158. package/types/engine/content-captions.d.mts +45 -0
  159. package/types/engine/content-footnotes.d.mts +10 -0
  160. package/types/engine/content-format-check.d.mts +17 -4
  161. package/types/engine/content-format.d.mts +24 -11
  162. package/types/engine/content-icons.d.mts +14 -23
  163. package/types/engine/content-images.d.mts +2 -2
  164. package/types/engine/content-index.d.mts +9 -2
  165. package/types/engine/content-links.d.mts +3 -5
  166. package/types/engine/content-tables.d.mts +11 -140
  167. package/types/engine/culture-choice.d.mts +14 -0
  168. package/types/engine/date-conversion.d.mts +4 -0
  169. package/types/engine/declaration-check.d.mts +24 -0
  170. package/types/engine/docs-checks.d.mts +28 -0
  171. package/types/engine/documentation-links.d.mts +7 -0
  172. package/types/engine/exported-scene.d.mts +6 -2
  173. package/types/engine/extension-attributes.d.mts +14 -0
  174. package/types/engine/field-spec.d.mts +9 -0
  175. package/types/engine/format-generated.d.mts +7 -0
  176. package/types/engine/frontmatter.d.mts +14 -4
  177. package/types/engine/generate.d.mts +1 -1
  178. package/types/engine/helpers.d.mts +37 -92
  179. package/types/engine/homepage.d.mts +2 -3
  180. package/types/engine/index.d.mts +5 -0
  181. package/types/engine/infobox-registry.d.mts +3 -1
  182. package/types/engine/infobox.d.mts +17 -6
  183. package/types/engine/item-compiler.d.mts +4 -4
  184. package/types/engine/item-docs.d.mts +4 -3
  185. package/types/engine/journals.d.mts +10 -7
  186. package/types/engine/map-graphviz.d.mts +1 -1
  187. package/types/engine/markdown-expressions.d.mts +17 -0
  188. package/types/engine/note-dates.d.mts +47 -1
  189. package/types/engine/note-package.d.mts +3 -19
  190. package/types/engine/note-state.d.mts +2 -1
  191. package/types/engine/note-vocabulary.d.mts +9 -0
  192. package/types/engine/number-words.d.mts +4 -0
  193. package/types/engine/office-holders.d.mts +14 -0
  194. package/types/engine/pack-config.d.mts +1 -1
  195. package/types/engine/packages.d.mts +3 -2
  196. package/types/engine/pdf-images.d.mts +38 -0
  197. package/types/engine/populations.d.mts +2 -2
  198. package/types/engine/project-init.d.mts +17 -0
  199. package/types/engine/prose-config.d.mts +1 -1
  200. package/types/engine/prose-lint.d.mts +3 -2
  201. package/types/engine/readability-lint.d.mts +22 -0
  202. package/types/engine/reckoning-markers.d.mts +4 -2
  203. package/types/engine/schema-check.d.mts +3 -3
  204. package/types/engine/site-build.d.mts +38 -28
  205. package/types/engine/site-config.d.mts +2 -2
  206. package/types/engine/site-index.d.mts +4 -0
  207. package/types/engine/site-preview.d.mts +1 -1
  208. package/types/engine/social-ties.d.mts +8 -2
  209. package/types/engine/sql-tables.d.mts +13 -2
  210. package/types/engine/web-wikilinks.d.mts +2 -1
  211. package/types/engine/wikilinks.d.mts +7 -1
  212. package/types/hm3/items.d.mts +5 -6
  213. package/types/labels.d.mts +40 -0
  214. package/types/manifest.d.mts +3 -3
  215. package/types/sohl/actors.d.mts +2 -2
  216. package/types/sohl/being-info.d.mts +3 -43
  217. package/types/sohl/index.d.mts +1 -1
  218. package/types/sohl/infobox.d.mts +5 -2
  219. package/types/sohl/item-fields.d.mts +4 -13
  220. package/types/stage.d.mts +9 -0
  221. package/CONTENT.md +0 -3239
package/docs/commands.md CHANGED
@@ -1,16 +1,22 @@
1
+ ---
2
+ shortcode: commands
3
+ name: { full: "Command reference" }
4
+ type: doc
5
+ subType: reference
6
+ ---
7
+
1
8
  # Command reference
2
9
 
3
- `@heroiclands/package-build` ships two build binaries. `package-build` is the
4
- packaging half — clean, stage, check, package, deploy, run a Foundry
5
- container, drive the end-to-end suite. `content-build` is the content half —
6
- compile a note tree into compendium packs, check it, publish it as a site or a
7
- book, and manage the caches a build resolves other packages through.
10
+ `@heroiclands/package-build` ships the `package-build` command. It checks and
11
+ compiles content, builds sites and books, stages packages, writes manifests,
12
+ and manages release and deployment tasks.
8
13
 
9
- Both read `package-build.config.yaml` from the repository root — see
10
- [Configuration](configuration.md) for every key. Neither reads it for
11
- `--version` or `--help`: those two answer in a directory with no
12
- configuration at all, and every other invocation resolves the configuration
13
- and fails loudly when it is missing or wrong.
14
+ The commands read `package-build.config.yaml` from the repository root — see
15
+ [Configuration](configuration.md) for every key. `--version` and `--help`
16
+ work in a directory with no configuration. Commands that need a package
17
+ resolve its configuration and report missing or invalid values.
18
+ `package-build --help` lists every command; `package-build <command> --help`
19
+ shows its actions and options.
14
20
 
15
21
  Each command below reads like a manual page: **NAME**, **SYNOPSIS**,
16
22
  **DESCRIPTION**, **OPTIONS**, **EXIT STATUS**, **EXAMPLES**, **SEE ALSO**, in
@@ -21,7 +27,7 @@ says so under **OPTIONS** rather than omitting the section.
21
27
 
22
28
  **Every finding is `file:line:column: severity: message`**, the path starting
23
29
  the line — the diagnostic contract this package's own build tooling emits and
24
- that both build binaries' content-side commands use for anything found in a
30
+ that content commands use for anything found in a
25
31
  specific file. A field that cannot be known is dropped rather than guessed:
26
32
  `file:line:` when the column means nothing, `file:` when only the file is
27
33
  known. See [Diagnostics](diagnostics.md) for the full contract.
@@ -32,34 +38,24 @@ do. 1 is failure: a configuration error, a missing prerequisite, or findings
32
38
  that the command treats as errors. Each command's own **EXIT STATUS** states
33
39
  exactly what makes its run a 1.
34
40
 
35
- **`package-build` has one failure path for everything **`.fail()`** does not
36
- handle specially: every thrown error, from any command, is caught, printed as
37
- one line — `package-build: <message>`, or the bare diagnostic when the error
38
- already carries its own `file:line:column:` — and turned into exit code 1. A
39
- command that additionally emits findings of its own (`lang coverage`, `yaml`,
40
- `bundle check`, …) is called out below.**
41
-
42
- **`content-build` has no such umbrella.** Each command catches its own errors,
43
- logs them (prefixed `[timestamp] [LEVEL]:` for ordinary failures, unprefixed
44
- for a located diagnostic) and sets `process.exitCode = 1`; a command-line
45
- parse error — an unknown flag, a missing required option, an action outside
46
- its `choices` — is reported by yargs' own default handler and also exits 1.
47
-
48
- **Both binaries are `strict()` and `demandCommand(1, …)`.** An unknown
49
- command or option is refused rather than ignored, and running either with no
50
- command prints usage and exits 1 rather than silently doing nothing — the
51
- failure mode that let a typo in a build script pass the step it was meant to
52
- run. The one exception is `package-build e2e <action>`, which relaxes to
41
+ Packaging handlers report a thrown error as `package-build: <message>`, or as
42
+ the bare diagnostic when it already has a location. Content handlers report
43
+ their own failures, with ordinary failures prefixed by loglevel and located
44
+ diagnostics unprefixed. Both forms exit 1. A parse error from an unknown flag,
45
+ missing option, or invalid action also exits 1.
46
+
47
+ The command uses `strict()` and `demandCommand(1, …)`. An unknown
48
+ command or option is refused rather than ignored, and running it with no
49
+ command prints usage and exits 1. `package-build e2e <action>` relaxes to
53
50
  `.strict(false)` for everything after the action, because that belongs to the
54
51
  suite or the fast loop and this command line must not judge it.
55
52
 
56
- **`--help` / `-h` and `--version` are global, not per-command.** Both
57
- binaries register them once on their own top-level parser
58
- (`.version(ownVersion())`, `.help()`, `.alias("help", "h")`); no command below
59
- lists them among its own options.
53
+ **`--help` / `-h` and `--version` are global.** The parser registers them
54
+ once, and `--help` can be used with any command for its own actions and options.
55
+ The command entries below list only their own options.
60
56
 
61
57
  **`PACKAGE_BUILD_CONFIG`** names the configuration file explicitly instead of
62
- the walk up from the working directory both binaries otherwise do — the only
58
+ the walk up from the working directory the CLI otherwise does — the only
63
59
  environment variable the toolchain itself reads for configuration
64
60
  resolution. `deploy`, `container` and `e2e` additionally read `FOUNDRYVTT_*`,
65
61
  documented where each applies.
@@ -70,7 +66,139 @@ behaviour where they appear below; read the command, not the name.
70
66
 
71
67
  ---
72
68
 
73
- ## `package-build`
69
+ ## Package and release operations
70
+
71
+ ### `package-build ci`
72
+
73
+ **NAME**
74
+
75
+ Replay the commands from pull-request workflows.
76
+
77
+ **SYNOPSIS**
78
+
79
+ ```text
80
+ package-build ci [--native]
81
+ ```
82
+
83
+ **DESCRIPTION**
84
+
85
+ The default command runs in Docker on Linux against a clean export of the
86
+ current commit. It reads the repository's pull-request workflows under
87
+ `.github/workflows/` and runs their `run:` steps in workflow order. A failed
88
+ step stops the replay. Uncommitted changes are absent from the clean export.
89
+
90
+ `--native` runs the same steps on the host in the current working tree. It
91
+ needs no Docker and includes uncommitted changes, but its operating system and
92
+ existing files can differ from a clean GitHub runner. The steps themselves
93
+ still come from the workflow files.
94
+
95
+ The command lists `uses:` steps that it cannot run locally. A successful replay
96
+ covers the listed `run:` steps; GitHub runs the published actions separately.
97
+ Workflow steps may install dependencies, generate files, or perform other
98
+ declared build actions.
99
+
100
+ **OPTIONS**
101
+
102
+ | Option | Type | Default | Description |
103
+ | ---------- | ------- | ------- | -------------------------------------------- |
104
+ | `--native` | boolean | false | Run on the host in the current working tree. |
105
+
106
+ **EXIT STATUS**
107
+
108
+ 0 when every runnable step succeeds. 1 when a step fails, no pull-request
109
+ workflow supplies runnable steps, Docker is unavailable for the default mode,
110
+ or the replay cannot start.
111
+
112
+ **EXAMPLES**
113
+
114
+ ```bash
115
+ package-build ci
116
+ package-build ci --native
117
+ ```
118
+
119
+ **SEE ALSO**
120
+
121
+ [End-to-end testing](guides/e2e.md), [Project setup](project-setup.md).
122
+
123
+ ### `package-build init [directory]`
124
+
125
+ **NAME**
126
+
127
+ Create a HeroicLands content package or check an existing one.
128
+
129
+ **SYNOPSIS**
130
+
131
+ ```text
132
+ package-build init [directory] [--kind <kind>] [--name <name>] [--title <title>] [--description <description>] [--author <author>] [--license <license>] [--core-minimum <version>] [--core-verified <version>]
133
+ package-build init --check [directory]
134
+ ```
135
+
136
+ **DESCRIPTION**
137
+
138
+ The directory defaults to the current directory. If it does not exist, `init`
139
+ creates it. The directory needs no Git repository, `package.json`, or local
140
+ installation of package-build. It may contain unrelated files, but `init`
141
+ refuses a package-build configuration or any file it would overwrite. It
142
+ generates a homepage, introduction, package metadata, content configuration,
143
+ book document tree, website and book scripts, formatting rules, changeset
144
+ configuration, label registry, and build workflow. It does not install
145
+ dependencies, initialize Git, or deploy a site.
146
+
147
+ `--check` reads the named directory and reports missing or invalid project
148
+ requirements without writing anything. It accepts existing files with valid
149
+ custom content and scripts; they need not be identical to the scaffold.
150
+
151
+ Without a terminal, the identity and license arguments must be supplied. At a
152
+ terminal, missing values are prompted. The package name defaults to the target
153
+ directory's basename and determines the content package id by removing hyphens.
154
+ The package kind defaults to `modules`; the license template defaults to
155
+ `original`. `systems` and `modules` receive a journal pack and Foundry
156
+ manifest configuration. `documentation` receives no Foundry pack or manifest.
157
+ Every kind includes site and book targets. Hugo Extended and Typst are needed
158
+ to render them locally; deployment needs separate hosting configuration.
159
+
160
+ **OPTIONS**
161
+
162
+ | Option | Type | Default | Description |
163
+ | ----------------- | ---------------------------------------- | ------------------------- | --------------------------------------------------------- |
164
+ | `directory` | path | current directory | New or existing target directory. |
165
+ | `--check` | boolean | `false` | Inspect an existing package without writing. |
166
+ | `--kind` | `systems`, `modules`, or `documentation` | `modules` | Package kind. |
167
+ | `--name` | string | target directory basename | npm and Foundry package name. |
168
+ | `--title` | string | words of the package name | Reader-facing title. |
169
+ | `--description` | string | — | Package and website description. |
170
+ | `--author` | string | — | Author credited in the package. |
171
+ | `--license` | `original` or `fan` | `original` | License template for original or unofficial fan material. |
172
+ | `--core-minimum` | string | `14.359` | Minimum Foundry core version for a Foundry package. |
173
+ | `--core-verified` | string | `14.364` | Verified Foundry core version for a Foundry package. |
174
+
175
+ **EXIT STATUS**
176
+
177
+ 0 when the package is created or passes `--check`. 1 when required answers are
178
+ missing, the target conflicts with an existing project file, a generated file
179
+ cannot be written, or `--check` finds an unmet requirement. A failed write
180
+ removes the files created by that invocation.
181
+
182
+ **EXAMPLES**
183
+
184
+ ```bash
185
+ npm exec --package=@heroiclands/package-build -- package-build init acme-bestiary --kind modules --name acme-bestiary --title "Acme Bestiary" --description "Creatures of the reed flats." --author "Acme" --license original
186
+ cd acme-bestiary
187
+ npm install
188
+ npm run lint
189
+ npm run build:site
190
+ npm run serve:site
191
+ npm run build:book
192
+ package-build init --check
193
+ ```
194
+
195
+ For a global installation, run `npm install --global
196
+ @heroiclands/package-build` once and then `package-build init [directory]`.
197
+
198
+ **SEE ALSO**
199
+
200
+ [Getting started](getting-started.md), [Project setup](project-setup.md),
201
+ [Configuration](configuration.md).
74
202
 
75
203
  ### `package-build clean`
76
204
 
@@ -113,6 +241,43 @@ Nothing to clean.
113
241
 
114
242
  [Configuration](configuration.md).
115
243
 
244
+ ### `package-build stage reset`
245
+
246
+ **NAME**
247
+
248
+ Clear the assembled Foundry package stage before a complete build.
249
+
250
+ **SYNOPSIS**
251
+
252
+ ```
253
+ package-build stage reset
254
+ ```
255
+
256
+ **DESCRIPTION**
257
+
258
+ The `reset` action removes `packageBuild.stageDir` without removing the content index, PDF, site,
259
+ or other build outputs. Run it once before the commands that write assets, packs,
260
+ bundles, and the manifest. It succeeds when the stage is already empty.
261
+
262
+ **OPTIONS**
263
+
264
+ There are no options.
265
+
266
+ **EXIT STATUS**
267
+
268
+ 1 on an invalid configuration or a stage directory outside the project. Otherwise 0.
269
+
270
+ **EXAMPLES**
271
+
272
+ ```
273
+ $ package-build stage reset
274
+ Removed build/stage
275
+ ```
276
+
277
+ **SEE ALSO**
278
+
279
+ [Project setup](project-setup.md), [Configuration](configuration.md).
280
+
116
281
  ### `package-build assets`
117
282
 
118
283
  **NAME**
@@ -176,7 +341,7 @@ Reads the package's current JSONL content index and writes
176
341
  `build/calendars/<shortcode>.calendaria.json` for each calendar note. The
177
342
  import file contains the same definition and a fixed `exportedAt` sentinel,
178
343
  making both files reproducible. A package with no calendars gets an empty
179
- `build/calendars/` directory. Run `content-build content-index` after changing
344
+ `build/calendars/` directory. Run `package-build content-index` after changing
180
345
  notes and before this command. Stage the generated directory with
181
346
  `packageBuild.assets` when the Foundry package should ship it.
182
347
 
@@ -199,7 +364,88 @@ $ package-build calendars --calendaria-version 1.4.2
199
364
 
200
365
  **SEE ALSO**
201
366
 
202
- `content-build content-index`, [Getting started](getting-started.md).
367
+ `package-build content-index`, [Getting started](getting-started.md).
368
+
369
+ ### `package-build datefrom`
370
+
371
+ **NAME**
372
+
373
+ Convert a day in an authored calendar to a canonical date.
374
+
375
+ **SYNOPSIS**
376
+
377
+ ```
378
+ package-build datefrom <calendar> <date>
379
+ ```
380
+
381
+ **DESCRIPTION**
382
+
383
+ Reads the current content tree, resolves its world year and calendar eras, and
384
+ prints `<year>.<day>[:HHMMSS]` to standard output. `<calendar>` is a calendar
385
+ shortcode, full Address, or addressed era. The date uses the calendar's month
386
+ name and era label, for example `23 Taranis 326 VR`. A date in a calendar with
387
+ multiple eras must identify its era. A date must specify a day;
388
+ year-only and month-only dates do not identify one canonical day.
389
+ Prefix the date with `~` to preserve an approximate value.
390
+
391
+ **OPTIONS**
392
+
393
+ None.
394
+
395
+ **EXIT STATUS**
396
+
397
+ 1 if the content tree or calendar is invalid, the era is missing or mismatched,
398
+ or the date cannot be resolved to one day. Otherwise 0.
399
+
400
+ **EXAMPLES**
401
+
402
+ ```
403
+ $ package-build datefrom vrcal '23 Taranis 326 VR'
404
+ 326.114
405
+ ```
406
+
407
+ **SEE ALSO**
408
+
409
+ `package-build dateto`, [Content format](content-format.md).
410
+
411
+ ### `package-build dateto`
412
+
413
+ **NAME**
414
+
415
+ Express a canonical day in an authored calendar.
416
+
417
+ **SYNOPSIS**
418
+
419
+ ```
420
+ package-build dateto <calendar> <canonical-date>
421
+ ```
422
+
423
+ **DESCRIPTION**
424
+
425
+ Reads the current content tree, selects the era covering the canonical day, and
426
+ prints the date with its named month and era label. The input is
427
+ `<year>.<day>[:HHMMSS]`, optionally prefixed with `~`. A date in a gap between
428
+ eras has no conversion.
429
+
430
+ **OPTIONS**
431
+
432
+ None.
433
+
434
+ **EXIT STATUS**
435
+
436
+ 1 if the content tree or calendar is invalid, the canonical date is invalid,
437
+ or no era covers that day. Otherwise 0.
438
+
439
+ **EXAMPLES**
440
+
441
+ ```
442
+ $ package-build dateto vrcal 326.114
443
+ 23 Taranis 326 VR
444
+ ```
445
+
446
+ **SEE ALSO**
447
+
448
+ `package-build datefrom`, [Content format](content-format.md).
203
449
 
204
450
  ### `package-build schema`
205
451
 
@@ -216,13 +462,13 @@ package-build schema
216
462
  **DESCRIPTION**
217
463
 
218
464
  Publishes the registries named in `packageBuild.schema` as `schema.json`, read
219
- by `content-build content-format schema` and, in a consuming package, by
220
- `content-build lint`'s emitted-versus-declared check. A repository that
465
+ by `package-build content-format schema` and, in a consuming package, by
466
+ `package-build lint`'s emitted-versus-declared check. A repository that
221
467
  declares no registries has nothing to publish. Reads the registries
222
468
  `packageBuild.schema` names; writes `build/schema.json`. A release publishes
223
469
  it beside the archive and the manifest when `packageBuild.assets` names
224
470
  `build/schema.json` (see `package-build release`); a module's
225
- `content-build deps fetch` keeps the copy from the archive it downloads.
471
+ `package-build deps fetch` keeps the copy from the archive it downloads.
226
472
 
227
473
  **OPTIONS**
228
474
 
@@ -242,7 +488,7 @@ package-build: no `packageBuild.schema` declared; nothing to publish.
242
488
 
243
489
  **SEE ALSO**
244
490
 
245
- `content-build content-format schema`, `content-build lint [root]`,
491
+ `package-build content-format schema`, `package-build lint [root]`,
246
492
  `package-build release`, [Configuration](configuration.md).
247
493
 
248
494
  ### `package-build manifest`
@@ -268,12 +514,14 @@ in `packageBuild.manifestFlags` for a flag the repository has to compute
268
514
  itself — the compendium address of a document that exists only once the
269
515
  content tree has been walked. Reads the shared pack configuration and
270
516
  `package.json`; writes the manifest into `packageBuild.stageDir`.
517
+ `packageBuild.manifest.title` must be a non-empty string, so the staged
518
+ manifest carries the title Foundry requires for installation.
271
519
 
272
520
  **Refused for `packageKind: documentation`.** A manifest is the file Foundry
273
521
  reads to install a package, and a documentation package is not one —
274
522
  emitting `module.json` for it would advertise an installable package with no
275
523
  packs, no compatibility range and no id. Its site is built by
276
- `content-build site`, and its book by `content-build pdf`.
524
+ `package-build site`, and its book by `package-build pdf`.
277
525
 
278
526
  **OPTIONS**
279
527
 
@@ -284,7 +532,8 @@ None.
284
532
  1 for `packageKind: documentation`. 1 if `packageBuild.manifestFlags` is
285
533
  declared but cannot be loaded, or exports no `flags` function. 1 on any other
286
534
  thrown error (a manifest key the configuration cannot supply —
287
- `package.json` naming no `repository.url`, for instance). Otherwise 0.
535
+ `package.json` naming no `repository.url`, or a missing or blank
536
+ `packageBuild.manifest.title`, for instance). Otherwise 0.
288
537
 
289
538
  **EXAMPLES**
290
539
 
@@ -293,12 +542,12 @@ $ package-build manifest
293
542
  ✅ Wrote build/stage/module.json (10 keys, 2 packs).
294
543
 
295
544
  $ package-build manifest # packageKind: documentation
296
- package-build: `packageKind: documentation` ships no Foundry package, so there is no manifest to generate. The site and the book are built by `content-build`.
545
+ package-build: `packageKind: documentation` ships no Foundry package, so there is no manifest to generate. The site and the book are built by `package-build`.
297
546
  ```
298
547
 
299
548
  **SEE ALSO**
300
549
 
301
- `content-build site`, `content-build pdf`, `package-build bundle check`,
550
+ `package-build site`, `package-build pdf`, `package-build bundle check`,
302
551
  [Configuration](configuration.md).
303
552
 
304
553
  ### `package-build site-root`
@@ -388,7 +637,7 @@ Search is off (`site.search: false`), so no index was written.
388
637
 
389
638
  **SEE ALSO**
390
639
 
391
- `content-build site`, [Configuration](configuration.md).
640
+ `package-build site`, [Configuration](configuration.md).
392
641
 
393
642
  `package-build lang <action>` asks three independent questions about this
394
643
  repository's localization, each blind to what the others see: `check`,
@@ -721,7 +970,9 @@ from the heading rule, since neither is authored.
721
970
  A token that reads as code — `camelCase()`, a `path/with/slashes.ext`,
722
971
  `SCREAMING_SNAKE` — outside any code span is a warning, not a failure: a
723
972
  user-facing note sometimes needs one (`Compendium.hm3.items.Item.<id>`), but
724
- rarely. A block's bold label absent from a declared `changelog.labels` is
973
+ rarely. Accented letters keep proper names such as HârnMaster whole, so a
974
+ fragment of one does not trigger a code-token warning. A block's bold label
975
+ absent from a declared `changelog.labels` is
725
976
  also a warning — the drift `**Character data**` beside `**Characters**`
726
977
  produces — and checks nothing when the repository declares no
727
978
  `changelog.labels`. Every other finding is an error. Reads the files given,
@@ -885,8 +1136,8 @@ states it a second time. It also publishes the content index the manifest
885
1136
  advertises (`flags.metadataUrl`) and, when the stage carries one,
886
1137
  `schema.json` — a repository that names `build/schema.json` in
887
1138
  `packageBuild.assets` gets it released beside the archive; one that does not
888
- gets none. When the package publishes content (`publish.site: content`), it
889
- also builds the content-tree book (see `content-build pdf`) and reports it
1139
+ gets none. When the content tree holds notes beyond its homepage, it
1140
+ also builds the content-tree book (see `package-build pdf`) and reports it
890
1141
  alongside the archive; `--no-pdf` skips that step for a release that has a
891
1142
  tree but does not want the book this time. A book that fails to build is
892
1143
  reported, never fatal — the archive above is the release regardless. Reads
@@ -910,12 +1161,12 @@ are reported on stderr but do not fail the release.
910
1161
  ```
911
1162
  $ package-build release
912
1163
  ✅ Packaged 1.0.0 for release: build/dist/module.zip (0.0 MB)
913
- No book: `publish.site` is `homepage`, which fences the content surfaces off — the tree is not walked and no book is built. Publish content to build one.
1164
+ No book: The content tree contains only a homepage, so there is no book to build.
914
1165
  ```
915
1166
 
916
1167
  **SEE ALSO**
917
1168
 
918
- `content-build pdf`, `package-build schema`, [Configuration](configuration.md).
1169
+ `package-build pdf`, `package-build schema`, [Configuration](configuration.md).
919
1170
 
920
1171
  ### `package-build deploy <stage>`
921
1172
 
@@ -1107,9 +1358,9 @@ package-build: This repository declares no end-to-end suite to `run`. Name one u
1107
1358
 
1108
1359
  ---
1109
1360
 
1110
- ## `content-build`
1361
+ ## Content operations
1111
1362
 
1112
- ### `content-build package <action> [pack] [entry]`
1363
+ ### `package-build package <action> [pack] [entry]`
1113
1364
 
1114
1365
  **NAME**
1115
1366
 
@@ -1119,9 +1370,9 @@ process.
1119
1370
  **SYNOPSIS**
1120
1371
 
1121
1372
  ```
1122
- content-build package compile [pack]
1123
- content-build package unpack [pack] [entry]
1124
- content-build package clean [pack] [entry]
1373
+ package-build package compile [pack]
1374
+ package-build package unpack [pack] [entry]
1375
+ package-build package clean [pack] [entry]
1125
1376
  ```
1126
1377
 
1127
1378
  **DESCRIPTION**
@@ -1141,8 +1392,8 @@ the staged LevelDB packs.
1141
1392
  `unpack` and `clean` alike. A package of that kind declares no packs by
1142
1393
  rule, so there is nothing to compile, unpack or clean; a run that exited 0
1143
1394
  having done nothing would be the quiet failure this toolchain refuses
1144
- everywhere else. Its site is built by `content-build site`, and its book by
1145
- `content-build pdf`.
1395
+ everywhere else. Its site is built by `package-build site`, and its book by
1396
+ `package-build pdf`.
1146
1397
 
1147
1398
  **OPTIONS**
1148
1399
 
@@ -1163,10 +1414,10 @@ step to report against. 1 on any other thrown error. Otherwise 0.
1163
1414
  **EXAMPLES**
1164
1415
 
1165
1416
  ```
1166
- $ content-build package compile # packageKind: documentation
1167
- […] ERROR: `packageKind: documentation` compiles no compendium, so there is nothing to compile. Build its site with `content-build site` and its book with `content-build pdf`.
1417
+ $ package-build package compile # packageKind: documentation
1418
+ […] ERROR: `packageKind: documentation` compiles no compendium, so there is nothing to compile. Build its site with `package-build site` and its book with `package-build pdf`.
1168
1419
 
1169
- $ content-build package compile
1420
+ $ package-build package compile
1170
1421
  […] Content tree: 4 note(s) at /private/tmp/pb-docs-demo-410/assets/content
1171
1422
  […] Pack items: /private/tmp/pb-docs-demo-410/assets/content → …/build/packs-json/items
1172
1423
  […] Compiled 0 items:
@@ -1176,7 +1427,7 @@ $ content-build package compile
1176
1427
  […] Pack journals: compiling to LevelDB at …/build/stage/packs/journals
1177
1428
  […] Pack compilation complete.
1178
1429
 
1179
- $ content-build package unpack
1430
+ $ package-build package unpack
1180
1431
  […] Extracting pack items
1181
1432
  […] Extracting pack journals
1182
1433
  Wrote welcome.json
@@ -1184,10 +1435,10 @@ Wrote welcome.json
1184
1435
 
1185
1436
  **SEE ALSO**
1186
1437
 
1187
- `content-build site`, `content-build pdf`, `content-build addresses diff`,
1438
+ `package-build site`, `package-build pdf`, `package-build addresses diff`,
1188
1439
  [Diagnostics](diagnostics.md), [Configuration](configuration.md).
1189
1440
 
1190
- ### `content-build deps fetch`
1441
+ ### `package-build deps fetch`
1191
1442
 
1192
1443
  **NAME**
1193
1444
 
@@ -1196,7 +1447,7 @@ Fill the caches a build resolves other packages through.
1196
1447
  **SYNOPSIS**
1197
1448
 
1198
1449
  ```
1199
- content-build deps fetch [--from <zip|dir>] [--id <id>]
1450
+ package-build deps fetch [--from <zip|dir>] [--id <id>]
1200
1451
  ```
1201
1452
 
1202
1453
  **DESCRIPTION**
@@ -1212,6 +1463,12 @@ is not reproducible and hides a dependency's version change behind a
1212
1463
  passing run. Each cache is stamped complete only once its fetch finishes,
1213
1464
  so a half-finished one reads as cold.
1214
1465
 
1466
+ `lint`, `links`, `site`, `pdf`, `map`, `reachability`, and `package compile`
1467
+ check the declared dependencies' content-index cache before reading notes or
1468
+ writing output. A cold cache produces a diagnostic at the package configuration
1469
+ file naming `deps fetch`. These checks only read local files; `deps fetch` is
1470
+ the separate step that reaches the network.
1471
+
1215
1472
  The navigation is fetched first, because every package needs it and it
1216
1473
  depends on nothing a repository declares — so a dependency whose release
1217
1474
  cannot be read stops the run with the navigation already cached.
@@ -1240,20 +1497,140 @@ including when the repository declares no dependencies at all.
1240
1497
  **EXAMPLES**
1241
1498
 
1242
1499
  ```
1243
- $ content-build deps fetch
1500
+ $ package-build deps fetch
1244
1501
  […] Fetched the site navigation to build/cache/navigation/nav.json.
1245
1502
  […] No relationship declares `itemCatalog: true`; nothing to fetch.
1246
1503
  […] This package declares no dependencies.
1247
1504
 
1248
- $ content-build deps fetch --from build/dist/module.zip
1505
+ $ package-build deps fetch --from build/dist/module.zip
1249
1506
  […] ERROR: --from needs --id when a package declares several dependencies (declared: none)
1250
1507
  ```
1251
1508
 
1252
1509
  **SEE ALSO**
1253
1510
 
1254
- `content-build site`, `content-build addresses diff`, [Configuration](configuration.md).
1511
+ `package-build site`, `package-build addresses diff`, [Configuration](configuration.md).
1512
+
1513
+ ### `package-build types check`
1514
+
1515
+ **NAME**
1516
+
1517
+ Check project declarations.
1518
+
1519
+ **SYNOPSIS**
1520
+
1521
+ ```sh
1522
+ package-build types check [--project <tsconfig>] [--exports]
1523
+ ```
1524
+
1525
+ **DESCRIPTION**
1526
+
1527
+ Check a TypeScript project's declarations with library checking enabled. The
1528
+ default `--project` is `tsconfig.json`. Diagnostics in `node_modules` are
1529
+ excluded; diagnostics in project files name the file, line, and column.
1530
+ `--exports` also checks every declaration entry point advertised by
1531
+ `package.json` `exports`, including wildcard subpaths. Run it after generating
1532
+ declarations.
1533
+
1534
+ **OPTIONS**
1535
+
1536
+ | Option | Default | Meaning |
1537
+ | ----------- | --------------- | ------------------------------------------- |
1538
+ | `--project` | `tsconfig.json` | TypeScript project file. |
1539
+ | `--exports` | off | Include published declaration entry points. |
1540
+
1541
+ **EXIT STATUS**
1542
+
1543
+ 1 when a project declaration fails to type-check or an exported entry point is
1544
+ missing; otherwise 0.
1545
+
1546
+ **EXAMPLES**
1547
+
1548
+ ```sh
1549
+ package-build types check --project tsconfig.json
1550
+ ```
1551
+
1552
+ **SEE ALSO**
1553
+
1554
+ `package-build docs links`.
1255
1555
 
1256
- ### `content-build docs item-fields`
1556
+ ### `package-build docs links`
1557
+
1558
+ **NAME**
1559
+
1560
+ Check documentation links.
1561
+
1562
+ **SYNOPSIS**
1563
+
1564
+ ```sh
1565
+ package-build docs links [--root <dir>]
1566
+ ```
1567
+
1568
+ **DESCRIPTION**
1569
+
1570
+ Check relative Markdown links and heading anchors in a documentation tree.
1571
+ Code fences and code spans are ignored. The default root is `docs`; use
1572
+ `--root <dir>` for another tree. Missing targets and anchors are reported at
1573
+ the link's file, line, and column.
1574
+
1575
+ **OPTIONS**
1576
+
1577
+ | Option | Default | Meaning |
1578
+ | -------- | ------- | ------------------- |
1579
+ | `--root` | `docs` | Documentation root. |
1580
+
1581
+ **EXIT STATUS**
1582
+
1583
+ 1 when a link or anchor fails to resolve; otherwise 0.
1584
+
1585
+ **EXAMPLES**
1586
+
1587
+ ```sh
1588
+ package-build docs links --root docs
1589
+ ```
1590
+
1591
+ **SEE ALSO**
1592
+
1593
+ `package-build docs index`.
1594
+
1595
+ ### `package-build docs index`
1596
+
1597
+ **NAME**
1598
+
1599
+ Check documentation index coverage.
1600
+
1601
+ **SYNOPSIS**
1602
+
1603
+ ```sh
1604
+ package-build docs index [--root <dir>]
1605
+ ```
1606
+
1607
+ **DESCRIPTION**
1608
+
1609
+ Check that every Markdown page immediately inside each section directory is
1610
+ linked from the documentation root's `README.md`. The default root is `docs`;
1611
+ use `--root <dir>` for another tree. Each unlinked page is reported by path.
1612
+
1613
+ **OPTIONS**
1614
+
1615
+ | Option | Default | Meaning |
1616
+ | -------- | ------- | ------------------- |
1617
+ | `--root` | `docs` | Documentation root. |
1618
+
1619
+ **EXIT STATUS**
1620
+
1621
+ 1 when a page is not indexed; otherwise 0.
1622
+
1623
+ **EXAMPLES**
1624
+
1625
+ ```sh
1626
+ package-build docs index --root docs
1627
+ ```
1628
+
1629
+ **SEE ALSO**
1630
+
1631
+ `package-build docs links`.
1632
+
1633
+ ### `package-build docs item-fields`
1257
1634
 
1258
1635
  **NAME**
1259
1636
 
@@ -1262,7 +1639,7 @@ Render this repository's item-frontmatter reference.
1262
1639
  **SYNOPSIS**
1263
1640
 
1264
1641
  ```
1265
- content-build docs item-fields [--out <path>] [--check] [--title <title>]
1642
+ package-build docs item-fields [--out <path>] [--check] [--title <title>]
1266
1643
  ```
1267
1644
 
1268
1645
  **DESCRIPTION**
@@ -1303,15 +1680,16 @@ body alone, with no frontmatter, exactly as before.
1303
1680
 
1304
1681
  **OPTIONS**
1305
1682
 
1306
- | Positional | Type | Default | Description |
1307
- | ---------- | ---------------------------- | ------- | ----------------------- |
1308
- | `action` | string, one of `item-fields` | — | The document to render. |
1683
+ | Positional | Type | Default | Description |
1684
+ | ---------- | ---------------------------------------------- | ------- | ------------------------- |
1685
+ | `action` | string, one of `item-fields`, `links`, `index` | — | The documentation action. |
1309
1686
 
1310
1687
  | Option | Type | Default | Description |
1311
1688
  | --------- | ------- | ----------------------- | ------------------------------------------------------ |
1312
1689
  | `--out` | string | `docs.itemFields.out` | Write to this file instead of the configured location. |
1313
1690
  | `--check` | boolean | `false` | Compare against the file already there; write nothing. |
1314
1691
  | `--title` | string | `docs.itemFields.title` | The page's H1. |
1692
+ | `--root` | string | `docs` | Documentation root for `links` and `index`. |
1315
1693
 
1316
1694
  **EXIT STATUS**
1317
1695
 
@@ -1321,10 +1699,10 @@ body alone, with no frontmatter, exactly as before.
1321
1699
  **EXAMPLES**
1322
1700
 
1323
1701
  ```
1324
- $ content-build docs item-fields --out docs/item-fields.md --title "Demo Item Fields"
1702
+ $ package-build docs item-fields --out docs/item-fields.md --title "Demo Item Fields"
1325
1703
  […] Wrote docs/item-fields.md
1326
1704
 
1327
- $ content-build docs item-fields --out docs/item-fields.md --title "Demo Item Fields" --check
1705
+ $ package-build docs item-fields --out docs/item-fields.md --title "Demo Item Fields" --check
1328
1706
  […] docs/item-fields.md is up to date.
1329
1707
  ```
1330
1708
 
@@ -1332,7 +1710,96 @@ $ content-build docs item-fields --out docs/item-fields.md --title "Demo Item Fi
1332
1710
 
1333
1711
  [Configuration](configuration.md).
1334
1712
 
1335
- ### `content-build lint [root]`
1713
+ ### `package-build prose lint [path]`
1714
+
1715
+ **NAME**
1716
+
1717
+ Analyze note prose for readability and simpler wording.
1718
+
1719
+ **SYNOPSIS**
1720
+
1721
+ ```text
1722
+ package-build prose lint [path] [--age <years>] [--threshold <count>] [--min-words <count>]
1723
+ ```
1724
+
1725
+ **DESCRIPTION**
1726
+
1727
+ Run this command from the package root to review the readable prose in one
1728
+ Markdown note or a content tree. Pass a note path while editing that note;
1729
+ omit it to review the configured `paths.content` tree. A directory path scans
1730
+ its Markdown files recursively and honors `skipDirectories`. A file path
1731
+ analyzes that file alone, even if it sits in an excluded directory. The command
1732
+ reads source files and writes nothing. It is an optional editorial check:
1733
+ `package-build lint` and the normal lint scripts do not run it.
1734
+
1735
+ Set defaults in `package-build.config.yaml` under `packageBuild.proseLint`:
1736
+
1737
+ ```yaml
1738
+ packageBuild:
1739
+ proseLint: { age: 21, threshold: 5, minWords: 8 }
1740
+ ```
1741
+
1742
+ No configuration is required; the values above are the defaults. `age` is the
1743
+ intended reader's age in years. `threshold` is the number of seven readability
1744
+ algorithms that must classify a sentence as difficult before it is reported.
1745
+ For example, a threshold of 5 reports a sentence if five or more algorithms
1746
+ flag it; a threshold of 7 reports only unanimous findings. `minWords` excludes
1747
+ shorter sentences from readability analysis. Each setting is a positive integer,
1748
+ and `threshold` must be at most 7. CLI options override individual settings:
1749
+ `--min-words` overrides `minWords`, while `--age` and `--threshold` override
1750
+ their matching keys.
1751
+
1752
+ The command analyzes Markdown prose with `retext-english`,
1753
+ `retext-readability`, and `retext-simplify`; `retext-stringify` completes the
1754
+ text pipeline. YAML frontmatter, code blocks, wikilink addresses, and inline
1755
+ expressions are excluded. Each suggestion is a warning with a file, line,
1756
+ column, rule ID, confidence, offending sentence, and `expected` replacement
1757
+ list. The source location marks the difficult sentence or the specific phrase
1758
+ that could be simplified. Readability confidence is the number of algorithms
1759
+ that found the sentence difficult, out of seven. Simplify suggestions have no
1760
+ numeric confidence score, so they say `unscored`. `expected` lists suggested
1761
+ replacements; `[]` means the rule offers no replacement and may recommend
1762
+ deleting a word or rewriting a sentence. Suggestions are advisory, are never
1763
+ applied automatically, and do not make the command fail. Unreadable paths and
1764
+ invalid options do.
1765
+
1766
+ **OPTIONS**
1767
+
1768
+ | Input | Default | Meaning |
1769
+ | ------------- | -------------------------- | ---------------------------------------- |
1770
+ | `path` | configured `paths.content` | Markdown file or content tree |
1771
+ | `--age` | 21 | Reader age in years |
1772
+ | `--threshold` | 5 | Number of readability algorithms (1–7) |
1773
+ | `--min-words` | 8 | Minimum words for readability assessment |
1774
+
1775
+ **EXIT STATUS**
1776
+
1777
+ 0 after reporting suggestions; 1 for invalid options or unreadable paths.
1778
+
1779
+ **EXAMPLES**
1780
+
1781
+ ```bash
1782
+ package-build prose lint assets/content/Lore/Harbor.md
1783
+ package-build prose lint
1784
+ package-build prose lint assets/content --age 18 --threshold 6 --min-words 10
1785
+ ```
1786
+
1787
+ For a note whose fifth line says `The utilization is very high.`, the command
1788
+ can report:
1789
+
1790
+ ```text
1791
+ assets/content/Lore/Harbor.md:5:5: warning: retext-simplify/utilization: confidence=unscored; sentence="The utilization is very high."; expected=["use"]; Unexpected `utilization`, use `use` instead
1792
+ ```
1793
+
1794
+ Open the file at line 5, column 5, and decide whether `use` suits the context.
1795
+ The rule ID identifies the suggestion if you need to search or group results.
1796
+
1797
+ **SEE ALSO**
1798
+
1799
+ [`package-build lint`](#package-build-lint-root),
1800
+ [Configuration](configuration.md#packagebuildproselint).
1801
+
1802
+ ### `package-build lint [root]`
1336
1803
 
1337
1804
  **NAME**
1338
1805
 
@@ -1341,7 +1808,7 @@ Check a content tree's addresses and frontmatter without compiling it.
1341
1808
  **SYNOPSIS**
1342
1809
 
1343
1810
  ```
1344
- content-build lint [root] [--no-references]
1811
+ package-build lint [root] [--no-references]
1345
1812
  ```
1346
1813
 
1347
1814
  **DESCRIPTION**
@@ -1377,27 +1844,27 @@ itself could not be built for any note. Otherwise 0.
1377
1844
  **EXAMPLES**
1378
1845
 
1379
1846
  ```
1380
- $ content-build lint
1847
+ $ package-build lint
1381
1848
  […] No `itemBuilders` registry declares the vocabulary of `demo`, so that system's block is unchecked — a key inside one is discarded at compile with no warning. Declare `itemBuilders: [demo]`.
1382
- […] No published schema for demo@1.0.0, so emitted `system` fields are unchecked. A system generates its own; a module gets one from `content-build deps fetch`.
1849
+ […] No published schema for demo@1.0.0, so emitted `system` fields are unchecked. A system generates its own; a module gets one from `package-build deps fetch`.
1383
1850
  […] Addresses and frontmatter are well-formed (4 address(es) across 4 note(s)).
1384
1851
  ```
1385
1852
 
1386
1853
  **SEE ALSO**
1387
1854
 
1388
- `content-build links [root]`, `content-build reachability <dir> [file]`,
1389
- `content-build content-format schema`, `content-build content-format fields`,
1390
- `content-build content-format notes`, [Diagnostics](diagnostics.md),
1855
+ `package-build links [root]`, `package-build reachability <dir> [file]`,
1856
+ `package-build content-format schema`, `package-build content-format fields`,
1857
+ `package-build content-format notes`, [Diagnostics](diagnostics.md),
1391
1858
  [Configuration](configuration.md).
1392
1859
 
1393
- `content-build content-format <action>` checks `docs/content-format.md` —
1860
+ `package-build content-format <action>` checks `docs/content-format.md` —
1394
1861
  the content-format specification this package ships — against reality, in
1395
1862
  three ways that fail for different reasons at different times: `schema`,
1396
1863
  `fields` and `notes`, one section below per action. All three read the
1397
1864
  specification named by `--spec`, defaulting to the one this package ships,
1398
1865
  and write nothing.
1399
1866
 
1400
- ### `content-build content-format schema`
1867
+ ### `package-build content-format schema`
1401
1868
 
1402
1869
  **NAME**
1403
1870
 
@@ -1406,7 +1873,7 @@ Compare the content-format specification against a published schema.
1406
1873
  **SYNOPSIS**
1407
1874
 
1408
1875
  ```
1409
- content-build content-format schema --schema <system>=<path> [--schema <system>=<path> ...] [--spec <path>]
1876
+ package-build content-format schema --schema <system>=<path> [--schema <system>=<path> ...] [--spec <path>]
1410
1877
  ```
1411
1878
 
1412
1879
  **DESCRIPTION**
@@ -1419,10 +1886,10 @@ like one that passed.
1419
1886
 
1420
1887
  **OPTIONS**
1421
1888
 
1422
- | Option | Type | Default | Description |
1423
- | ---------- | ---------------------------- | ------------------------------------ | ----------------------------------------- |
1424
- | `--spec` | string | the shipped `docs/content-format.md` | The specification to read. |
1425
- | `--schema` | string, repeatable, required | — | A published schema, as `<system>=<path>`. |
1889
+ | Option | Type | Default | Description |
1890
+ | ---------- | ---------------------------- | ---------------------------------------- | ----------------------------------------- |
1891
+ | `--spec` | string | the shipped `engine/content-format.yaml` | The specification to read. |
1892
+ | `--schema` | string, repeatable, required | — | A published schema, as `<system>=<path>`. |
1426
1893
 
1427
1894
  **EXIT STATUS**
1428
1895
 
@@ -1432,17 +1899,17 @@ like one that passed.
1432
1899
  **EXAMPLES**
1433
1900
 
1434
1901
  ```
1435
- $ content-build content-format schema --schema sohl=schema.json
1902
+ $ package-build content-format schema --schema sohl=schema.json
1436
1903
  […] 19 claim(s) about hm3 are unchecked — no schema was supplied for it, so nothing here confirms them.
1437
1904
  […] 76 mapping claim(s) confirmed against the supplied schemas.
1438
1905
  ```
1439
1906
 
1440
1907
  **SEE ALSO**
1441
1908
 
1442
- `content-build content-format fields`, `content-build content-format notes`,
1909
+ `package-build content-format fields`, `package-build content-format notes`,
1443
1910
  `package-build schema`, [Configuration](configuration.md).
1444
1911
 
1445
- ### `content-build content-format fields`
1912
+ ### `package-build content-format fields`
1446
1913
 
1447
1914
  **NAME**
1448
1915
 
@@ -1452,7 +1919,7 @@ declarations.
1452
1919
  **SYNOPSIS**
1453
1920
 
1454
1921
  ```
1455
- content-build content-format fields [--fields <system>] [--coverage] [--spec <path>]
1922
+ package-build content-format fields [--fields <system>] [--coverage] [--spec <path>]
1456
1923
  ```
1457
1924
 
1458
1925
  **DESCRIPTION**
@@ -1474,7 +1941,7 @@ vocabularies differ by design until a note's data fully moves under `data:`.
1474
1941
 
1475
1942
  | Option | Type | Default | Description |
1476
1943
  | ------------ | ---------------------------- | --------------------------------------------- | --------------------------------------------------- |
1477
- | `--spec` | string | the shipped `docs/content-format.md` | The specification to read. |
1944
+ | `--spec` | string | the shipped `engine/content-format.yaml` | The specification to read. |
1478
1945
  | `--fields` | string, one of `sohl`, `hm3` | the consuming repository's own `itemBuilders` | A declaration set this package ships, by system id. |
1479
1946
  | `--coverage` | boolean | `false` | List, per type, the fields only one side names. |
1480
1947
 
@@ -1486,7 +1953,7 @@ declaration that compiles it. Otherwise 0.
1486
1953
  **EXAMPLES**
1487
1954
 
1488
1955
  ```
1489
- $ content-build content-format fields --fields sohl --coverage
1956
+ $ package-build content-format fields --fields sohl --coverage
1490
1957
  […] 13 type(s) compared against sohl's declarations (56 field pair(s)).
1491
1958
  […] 12 type(s) the format declares are out of reach — no `itemBuilders` entry covers them: being, homepage, vehicle, armorlocation, lore, map, place, scenario, doc, macro, bundle, folder.
1492
1959
  […] affiliation: format only [demonym, economy, epithet, governance, lore, population, symbol, templatePriority], declaration only [commonSkills, level, office, society, subType, title]
@@ -1494,10 +1961,10 @@ $ content-build content-format fields --fields sohl --coverage
1494
1961
 
1495
1962
  **SEE ALSO**
1496
1963
 
1497
- `content-build content-format schema`, `content-build content-format notes`,
1964
+ `package-build content-format schema`, `package-build content-format notes`,
1498
1965
  [Configuration](configuration.md).
1499
1966
 
1500
- ### `content-build content-format notes`
1967
+ ### `package-build content-format notes`
1501
1968
 
1502
1969
  **NAME**
1503
1970
 
@@ -1506,7 +1973,7 @@ Measure a content tree against the specification's vocabulary.
1506
1973
  **SYNOPSIS**
1507
1974
 
1508
1975
  ```
1509
- content-build content-format notes [root] [--strict] [--spec <path>]
1976
+ package-build content-format notes [root] [--strict] [--spec <path>]
1510
1977
  ```
1511
1978
 
1512
1979
  **DESCRIPTION**
@@ -1524,10 +1991,10 @@ class of finding reaches zero.
1524
1991
  | ---------- | ------ | ------------------------------ | ------------------------ |
1525
1992
  | `root` | string | the configured `paths.content` | Content tree to measure. |
1526
1993
 
1527
- | Option | Type | Default | Description |
1528
- | ---------- | ------- | ------------------------------------ | ---------------------------------------------------- |
1529
- | `--spec` | string | the shipped `docs/content-format.md` | The specification to read. |
1530
- | `--strict` | boolean | `false` | Fail on the findings instead of only reporting them. |
1994
+ | Option | Type | Default | Description |
1995
+ | ---------- | ------- | ---------------------------------------- | ---------------------------------------------------- |
1996
+ | `--spec` | string | the shipped `engine/content-format.yaml` | The specification to read. |
1997
+ | `--strict` | boolean | `false` | Fail on the findings instead of only reporting them. |
1531
1998
 
1532
1999
  **EXIT STATUS**
1533
2000
 
@@ -1538,17 +2005,17 @@ Otherwise 0.
1538
2005
  **EXAMPLES**
1539
2006
 
1540
2007
  ```
1541
- $ content-build content-format notes
2008
+ $ package-build content-format notes
1542
2009
  […] 0 finding(s) across 4 note(s) measured against docs/content-format.md.
1543
2010
  ```
1544
2011
 
1545
2012
  **SEE ALSO**
1546
2013
 
1547
- `content-build content-format schema`, `content-build content-format fields`,
1548
- `content-build lint [root]`, [Diagnostics](diagnostics.md),
2014
+ `package-build content-format schema`, `package-build content-format fields`,
2015
+ `package-build lint [root]`, [Diagnostics](diagnostics.md),
1549
2016
  [Configuration](configuration.md).
1550
2017
 
1551
- ### `content-build links [root]`
2018
+ ### `package-build links [root]`
1552
2019
 
1553
2020
  **NAME**
1554
2021
 
@@ -1557,7 +2024,7 @@ Check that every link in a content tree lands.
1557
2024
  **SYNOPSIS**
1558
2025
 
1559
2026
  ```
1560
- content-build links [root]
2027
+ package-build links [root]
1561
2028
  ```
1562
2029
 
1563
2030
  **DESCRIPTION**
@@ -1568,7 +2035,7 @@ retired — every link is an address), a wikilink authored in frontmatter
1568
2035
  (which is data and is never resolved), and a package homepage's markdown
1569
2036
  links and `landing:` addresses, which are published verbatim and use no
1570
2037
  wikilink at all. Also reports a vendored foreign-package content index that
1571
- has drifted out of reach, naming `content-build deps fetch` as the fix.
2038
+ has drifted out of reach, naming `package-build deps fetch` as the fix.
1572
2039
  Reads the content tree named by `root`, defaulting to `paths.content`, and
1573
2040
  the cached content indexes of any declared dependency; writes nothing.
1574
2041
 
@@ -1587,17 +2054,17 @@ found. Otherwise 0.
1587
2054
  **EXAMPLES**
1588
2055
 
1589
2056
  ```
1590
- $ content-build links
2057
+ $ package-build links
1591
2058
  […] 2 notes: every link is a labelled address, every anchor link lands and every address resolves (0 cross-package reference(s) via manifest), no wikilink in frontmatter, every homepage address resolvable.
1592
2059
  ```
1593
2060
 
1594
2061
  **SEE ALSO**
1595
2062
 
1596
- `content-build lint [root]`, `content-build reachability <dir> [file]`,
1597
- `content-build deps fetch`, [Diagnostics](diagnostics.md),
2063
+ `package-build lint [root]`, `package-build reachability <dir> [file]`,
2064
+ `package-build deps fetch`, [Diagnostics](diagnostics.md),
1598
2065
  [Configuration](configuration.md).
1599
2066
 
1600
- ### `content-build format [paths..]`
2067
+ ### `package-build format [paths..]`
1601
2068
 
1602
2069
  **NAME**
1603
2070
 
@@ -1606,7 +2073,7 @@ Check formatting with the shared Prettier configuration.
1606
2073
  **SYNOPSIS**
1607
2074
 
1608
2075
  ```
1609
- content-build format [paths..] [--write]
2076
+ package-build format [paths..] [--write]
1610
2077
  ```
1611
2078
 
1612
2079
  **DESCRIPTION**
@@ -1644,24 +2111,24 @@ Otherwise 0.
1644
2111
  **EXAMPLES**
1645
2112
 
1646
2113
  ```
1647
- $ content-build format
1648
- warning: this repository declares no Prettier configuration, so `content-build format` applies the shared conventions while an editor and a bare `npx prettier` apply Prettier's own to the same tree; declare them in a prettier.config.mjs — export { default } from "@heroiclands/package-build/prettier";
1649
- build/dist/module.json: error: is not formatted; run `content-build format --write` to fix it
2114
+ $ package-build format
2115
+ warning: this repository declares no Prettier configuration, so `package-build format` applies the shared conventions while an editor and a bare `npx prettier` apply Prettier's own to the same tree; declare them in a prettier.config.mjs — export { default } from "@heroiclands/package-build/prettier";
2116
+ build/dist/module.json: error: is not formatted; run `package-build format --write` to fix it
1650
2117
  […]
1651
2118
  […] ERROR: 10 of 15 file(s) are not formatted.
1652
2119
 
1653
- $ content-build format --write
2120
+ $ package-build format --write
1654
2121
  […] Formatted 10 of 15 file(s).
1655
2122
 
1656
- $ content-build format
2123
+ $ package-build format
1657
2124
  […] Formatting is clean (15 file(s)).
1658
2125
  ```
1659
2126
 
1660
2127
  **SEE ALSO**
1661
2128
 
1662
- `content-build markdown [paths..]`, [Diagnostics](diagnostics.md).
2129
+ `package-build markdown [paths..]`, [Diagnostics](diagnostics.md).
1663
2130
 
1664
- ### `content-build markdown [paths..]`
2131
+ ### `package-build markdown [paths..]`
1665
2132
 
1666
2133
  **NAME**
1667
2134
 
@@ -1670,7 +2137,7 @@ Lint markdown with the shared markdownlint rule set.
1670
2137
  **SYNOPSIS**
1671
2138
 
1672
2139
  ```
1673
- content-build markdown [paths..] [--fix]
2140
+ package-build markdown [paths..] [--fix]
1674
2141
  ```
1675
2142
 
1676
2143
  **DESCRIPTION**
@@ -1682,6 +2149,8 @@ the one these repositories write. Runs over the repository rather than the
1682
2149
  content tree, taking its rules from this package unless the consumer
1683
2150
  declares its own. `--fix` applies the fixes markdownlint can make. Reads
1684
2151
  every matched file; `--fix` rewrites them.
2152
+ Installed dependencies under `node_modules` are excluded even when the
2153
+ repository has no `.gitignore` or supplies its own markdownlint ignore list.
1685
2154
 
1686
2155
  **OPTIONS**
1687
2156
 
@@ -1701,15 +2170,15 @@ exists at all). Otherwise 0.
1701
2170
  **EXAMPLES**
1702
2171
 
1703
2172
  ```
1704
- $ content-build markdown
2173
+ $ package-build markdown
1705
2174
  […] Markdown is clean.
1706
2175
  ```
1707
2176
 
1708
2177
  **SEE ALSO**
1709
2178
 
1710
- `content-build format [paths..]`, [Diagnostics](diagnostics.md).
2179
+ `package-build format [paths..]`, [Diagnostics](diagnostics.md).
1711
2180
 
1712
- ### `content-build content-index [root]`
2181
+ ### `package-build content-index [root]`
1713
2182
 
1714
2183
  **NAME**
1715
2184
 
@@ -1718,7 +2187,7 @@ Emit this package's note index as JSON Lines.
1718
2187
  **SYNOPSIS**
1719
2188
 
1720
2189
  ```
1721
- content-build content-index [root] [--out <dir>]
2190
+ package-build content-index [root] [--out <dir>]
1722
2191
  ```
1723
2192
 
1724
2193
  **DESCRIPTION**
@@ -1751,16 +2220,16 @@ into `--out`, defaulting to the configured `paths.contentIndex`.
1751
2220
  **EXAMPLES**
1752
2221
 
1753
2222
  ```
1754
- $ content-build content-index
2223
+ $ package-build content-index
1755
2224
  […] demo → build/content-index/demo-metadata.jsonl (4 notes, 2 KiB)
1756
2225
  ```
1757
2226
 
1758
2227
  **SEE ALSO**
1759
2228
 
1760
- `content-build site`, `content-build pdf`, `content-build deps fetch`,
2229
+ `package-build site`, `package-build pdf`, `package-build deps fetch`,
1761
2230
  [Configuration](configuration.md).
1762
2231
 
1763
- ### `content-build site`
2232
+ ### `package-build site`
1764
2233
 
1765
2234
  **NAME**
1766
2235
 
@@ -1769,7 +2238,7 @@ Build the Hugo source tree from the content tree.
1769
2238
  **SYNOPSIS**
1770
2239
 
1771
2240
  ```
1772
- content-build site
2241
+ package-build site
1773
2242
  ```
1774
2243
 
1775
2244
  **DESCRIPTION**
@@ -1823,7 +2292,7 @@ None.
1823
2292
 
1824
2293
  1 if `package.json` declares no `homepage`, or one that does not end
1825
2294
  `/<contentPackage>/`; if `packageBuild.manifest.title` is undeclared; if the
1826
- navigation has not been fetched (`content-build deps fetch` fills the cache
2295
+ navigation has not been fetched (`package-build deps fetch` fills the cache
1827
2296
  and is named in the message); or if `@heroiclands/hugo-theme` is not
1828
2297
  installed. 1 if any gate fires — no homepage or two competing for it, a
1829
2298
  frontmatter wikilink, an address that cannot be derived, a stale or
@@ -1833,20 +2302,20 @@ failed to expand, or a dead wikilink. Otherwise 0.
1833
2302
  **EXAMPLES**
1834
2303
 
1835
2304
  ```
1836
- $ content-build site
2305
+ $ package-build site
1837
2306
  […] wrote 1 homepage(s) + 1 content page(s) to build/hugo/content
1838
2307
  […] wrote build/hugo/hugo.toml
1839
2308
 
1840
- $ content-build site
1841
- […] ERROR: the site navigation has not been fetched. Run `content-build deps fetch` first.
2309
+ $ package-build site
2310
+ […] ERROR: the site navigation has not been fetched. Run `package-build deps fetch` first.
1842
2311
  ```
1843
2312
 
1844
2313
  **SEE ALSO**
1845
2314
 
1846
- `content-build deps fetch`, `package-build site-root`, `content-build package <action> [pack] [entry]`, `content-build pdf`, `content-build content-index [root]`,
2315
+ `package-build deps fetch`, `package-build site-root`, `package-build package <action> [pack] [entry]`, `package-build pdf`, `package-build content-index [root]`,
1847
2316
  [Diagnostics](diagnostics.md), [Configuration](configuration.md).
1848
2317
 
1849
- ### `content-build pdf`
2318
+ ### `package-build pdf`
1850
2319
 
1851
2320
  **NAME**
1852
2321
 
@@ -1855,7 +2324,7 @@ Build the book the content tree publishes as.
1855
2324
  **SYNOPSIS**
1856
2325
 
1857
2326
  ```
1858
- content-build pdf [--out <path>] [--book-version <version>] [--compile]
2327
+ package-build pdf [--out <path>] [--book-version <version>] [--compile]
1859
2328
  ```
1860
2329
 
1861
2330
  **DESCRIPTION**
@@ -1883,8 +2352,8 @@ configured `pdf.out`.
1883
2352
 
1884
2353
  **EXIT STATUS**
1885
2354
 
1886
- 0 when there is a stated reason not to build (`publish.site` is
1887
- `homepage`, no `pdf:` block, no content tree). 1 if the document tree
2355
+ 0 when there is a stated reason not to build (only a homepage note, no `pdf:`
2356
+ block, no content tree). 1 if the document tree
1888
2357
  `pdf.document` names cannot be read or parsed, or on any other thrown
1889
2358
  error. Otherwise 0 — findings inside a book that did build (a filter that
1890
2359
  matched nothing, for instance) are reported but never fail the command.
@@ -1892,19 +2361,19 @@ matched nothing, for instance) are reported but never fail the command.
1892
2361
  **EXAMPLES**
1893
2362
 
1894
2363
  ```
1895
- $ content-build pdf
2364
+ $ package-build pdf
1896
2365
  […] No book built: no `pdf:` block is configured, so this package publishes no book
1897
2366
 
1898
- $ content-build pdf --no-compile
2367
+ $ package-build pdf --no-compile
1899
2368
  demo-book: error: the document tree named by `pdf.document` cannot be read
1900
2369
  ```
1901
2370
 
1902
2371
  **SEE ALSO**
1903
2372
 
1904
- `content-build site`, `content-build package <action> [pack] [entry]`,
2373
+ `package-build site`, `package-build package <action> [pack] [entry]`,
1905
2374
  [Diagnostics](diagnostics.md), [Configuration](configuration.md).
1906
2375
 
1907
- ### `content-build map`
2376
+ ### `package-build map`
1908
2377
 
1909
2378
  **NAME**
1910
2379
 
@@ -1914,12 +2383,12 @@ route graph.
1914
2383
  **SYNOPSIS**
1915
2384
 
1916
2385
  ```
1917
- content-build map --tree [--root <shortcode>] [--engine dot|twopi|neato] [--rankdir TB|LR|BT|RL]
2386
+ package-build map --tree [--root <shortcode>] [--engine dot|twopi|neato] [--rankdir TB|LR|BT|RL]
1918
2387
  [--nodesep <inches>] [--ranksep <inches>] [--no-polities]
1919
- content-build map --from <shortcode>.. | --from all
1920
- content-build map --chart <shortcode>.. | --chart all [--horizon <days>]
1921
- content-build map --travel
1922
- content-build map [...] [--scale <factor>] [--base <url>] [--out <dir>]
2388
+ package-build map --from <shortcode>.. | --from all
2389
+ package-build map --chart <shortcode>.. | --chart all [--horizon <days>]
2390
+ package-build map --travel
2391
+ package-build map [...] [--scale <factor>] [--base <url>] [--out <dir>]
1923
2392
  ```
1924
2393
 
1925
2394
  **DESCRIPTION**
@@ -2084,28 +2553,28 @@ that does not resolve, a cycle), or on any other thrown error. Otherwise 0
2084
2553
  **EXAMPLES**
2085
2554
 
2086
2555
  ```
2087
- $ content-build map --tree
2556
+ $ package-build map --tree
2088
2557
  assets/content/Regions/Sea.md:16:5: warning: place "innersea" has more than one parent (northc, southc), which is legal for a sea between continents or a region split between two, and worth a look otherwise
2089
2558
  assets/content/Regions/Marches/Lost_Fort.md:9:14: error: place "lostfort" names parent "marchs", which does not resolve to any place in this package or a fetched index
2090
2559
  […] 394 place(s) → 7 drawing(s) under build/map
2091
2560
 
2092
- $ content-build map --from dunharargn --base /thalorna/
2561
+ $ package-build map --from dunharargn --base /thalorna/
2093
2562
  […] 394 place(s) → 1 drawing(s) under build/map
2094
2563
 
2095
- $ content-build map --chart takheperurgn --horizon 90
2564
+ $ package-build map --chart takheperurgn --horizon 90
2096
2565
  […] 394 place(s) → 1 drawing(s) under build/map
2097
2566
 
2098
- $ content-build map --travel
2567
+ $ package-build map --travel
2099
2568
  […] 394 place(s) → 1 drawing(s) under build/map
2100
2569
  ```
2101
2570
 
2102
2571
  **SEE ALSO**
2103
2572
 
2104
- `content-build lint [root]` (which checks `borders` and `routes` from both
2105
- ends), `content-build deps fetch`, `content-build content-index [root]`,
2573
+ `package-build lint [root]` (which checks `borders` and `routes` from both
2574
+ ends), `package-build deps fetch`, `package-build content-index [root]`,
2106
2575
  [Content format](content-format.md), [Diagnostics](diagnostics.md).
2107
2576
 
2108
- ### `content-build reachability <dir> [file]`
2577
+ ### `package-build reachability <dir> [file]`
2109
2578
 
2110
2579
  **NAME**
2111
2580
 
@@ -2114,7 +2583,7 @@ Check that every document in a corpus is reachable by reading.
2114
2583
  **SYNOPSIS**
2115
2584
 
2116
2585
  ```
2117
- content-build reachability <dir> [file] [--index <shortcode> ...] [--root <path>]
2586
+ package-build reachability <dir> [file] [--index <shortcode> ...] [--root <path>]
2118
2587
  ```
2119
2588
 
2120
2589
  **DESCRIPTION**
@@ -2149,19 +2618,19 @@ in the corpus is unreachable from the entry page. Otherwise 0.
2149
2618
  **EXAMPLES**
2150
2619
 
2151
2620
  ```
2152
- $ content-build reachability Guide
2621
+ $ package-build reachability Guide
2153
2622
  […] All 2 document(s) in Guide are reachable from README.md.
2154
2623
 
2155
- $ content-build reachability assets/content
2624
+ $ package-build reachability assets/content
2156
2625
  […] ERROR: no note at assets/content/README.md, so the corpus has no page to be read from
2157
2626
  ```
2158
2627
 
2159
2628
  **SEE ALSO**
2160
2629
 
2161
- `content-build links [root]`, `content-build lint [root]`, [Diagnostics](diagnostics.md),
2630
+ `package-build links [root]`, `package-build lint [root]`, [Diagnostics](diagnostics.md),
2162
2631
  [Configuration](configuration.md).
2163
2632
 
2164
- ### `content-build addresses diff`
2633
+ ### `package-build addresses diff`
2165
2634
 
2166
2635
  **NAME**
2167
2636
 
@@ -2170,7 +2639,7 @@ Report every published address a build no longer publishes.
2170
2639
  **SYNOPSIS**
2171
2640
 
2172
2641
  ```
2173
- content-build addresses diff --from <zip|dir> [--strict]
2642
+ package-build addresses diff --from <zip|dir> [--strict]
2174
2643
  ```
2175
2644
 
2176
2645
  **DESCRIPTION**
@@ -2212,11 +2681,11 @@ this repository declaring no Item pack at all to diff). Otherwise 0.
2212
2681
  **EXAMPLES**
2213
2682
 
2214
2683
  ```
2215
- $ content-build addresses diff --from build/dist/module.zip
2684
+ $ package-build addresses diff --from build/dist/module.zip
2216
2685
  […] ERROR: demo-package@1.0.0: pack "items" is declared at packs/items, which the package does not contain
2217
2686
  ```
2218
2687
 
2219
2688
  **SEE ALSO**
2220
2689
 
2221
- `content-build package <action> [pack] [entry]`, `content-build deps fetch`,
2690
+ `package-build package <action> [pack] [entry]`, `package-build deps fetch`,
2222
2691
  [Diagnostics](diagnostics.md).