@shoalrun/cli 0.1.0-alpha.12 → 0.1.0-alpha.13

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 (193) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +45 -5
  3. package/agent-docs/.well-known/shoalrun/navigation/project-updates-50f26fe22670.txt +3 -1
  4. package/agent-docs/SNAPSHOT.json +5 -5
  5. package/agent-docs/api-docs/support.md +11 -10
  6. package/agent-docs/author/components.md +13 -1
  7. package/agent-docs/author/frontmatter-reference.md +28 -25
  8. package/agent-docs/author/frontmatter-reference.sections/choose-a-publication-and-visibility.md +3 -1
  9. package/agent-docs/author/frontmatter-reference.sections/control-output-details.md +3 -1
  10. package/agent-docs/author/frontmatter-reference.sections/global-defaults-and-enforced-values.md +3 -1
  11. package/agent-docs/author/frontmatter-reference.sections/html-markdown-and-agents.md +3 -1
  12. package/agent-docs/author/frontmatter-reference.sections/identify-and-route-a-page.md +3 -1
  13. package/agent-docs/author/frontmatter-reference.sections/point-agents-to-it.md +3 -1
  14. package/agent-docs/author/frontmatter-reference.sections/project-defined-fields.md +3 -1
  15. package/agent-docs/author/frontmatter-reference.sections/related-reading.md +3 -1
  16. package/agent-docs/author/frontmatter-reference.sections/use-the-local-files-while-authoring.md +3 -1
  17. package/agent-docs/author/frontmatter-reference.sections/when-the-files-update.md +3 -1
  18. package/agent-docs/author/frontmatter.md +5 -2
  19. package/agent-docs/author/frontmatter.sections/audience-badges.md +1 -1
  20. package/agent-docs/author/frontmatter.sections/give-deprecation-guidance.md +1 -1
  21. package/agent-docs/author/frontmatter.sections/global-defaults-and-enforced-values.md +1 -1
  22. package/agent-docs/author/frontmatter.sections/optional-native-fields.md +5 -2
  23. package/agent-docs/author/frontmatter.sections/publication-fields.md +1 -1
  24. package/agent-docs/author/frontmatter.sections/publishing-policy.md +1 -1
  25. package/agent-docs/author/frontmatter.sections/related-metadata-tasks.md +1 -1
  26. package/agent-docs/author/frontmatter.sections/related-reading.md +1 -1
  27. package/agent-docs/author/frontmatter.sections/required-after-inheritance.md +1 -1
  28. package/agent-docs/author/frontmatter.sections/seo-fields.md +1 -1
  29. package/agent-docs/author/frontmatter.sections/validation-rules.md +1 -1
  30. package/agent-docs/author/markdown-metadata.md +13 -5
  31. package/agent-docs/author/navigation.md +12 -1
  32. package/agent-docs/author/navigation.sections/arrange-authored-pages.md +1 -1
  33. package/agent-docs/author/navigation.sections/fill-an-api-tag-group.md +1 -1
  34. package/agent-docs/author/navigation.sections/hide-group-page-counts.md +12 -1
  35. package/agent-docs/author/navigation.sections/html-markdown-and-agents.md +1 -1
  36. package/agent-docs/author/navigation.sections/local-api-preview.md +1 -1
  37. package/agent-docs/author/navigation.sections/mix-guides-and-api-references.md +1 -1
  38. package/agent-docs/author/navigation.sections/optionally-split-a-large-menu-into-files.md +1 -1
  39. package/agent-docs/author/navigation.sections/reach-navigation-while-reading.md +1 -1
  40. package/agent-docs/author/navigation.sections/related-reading.md +1 -1
  41. package/agent-docs/author/navigation.sections/split-navigation-into-tabs.md +1 -1
  42. package/agent-docs/author/navigation.sections/subject-lifecycle-labels.md +1 -1
  43. package/agent-docs/author/templates.md +10 -2
  44. package/agent-docs/author/templates.sections/built-in-feature-templates.md +1 -1
  45. package/agent-docs/author/templates.sections/built-in-templates.md +1 -1
  46. package/agent-docs/author/templates.sections/choose-formatting-enforcement-for-your-project.md +1 -1
  47. package/agent-docs/author/templates.sections/create-or-edit-a-project-template.md +10 -2
  48. package/agent-docs/author/templates.sections/keep-the-four-shapes-distinct.md +1 -1
  49. package/agent-docs/author/templates.sections/project-added-templates.md +1 -1
  50. package/agent-docs/author/templates.sections/related-reading.md +1 -1
  51. package/agent-docs/author/templates.sections/scaffold-a-page.md +1 -1
  52. package/agent-docs/author/templates.sections/short-cli-and-derived-values.md +1 -1
  53. package/agent-docs/author/templates.sections/what-every-template-gives-you.md +1 -1
  54. package/agent-docs/author/workspace.md +7 -1
  55. package/agent-docs/author/writing-style.md +13 -1
  56. package/agent-docs/author/writing-style.sections/adapt-this-example.md +1 -1
  57. package/agent-docs/author/writing-style.sections/choose-components-by-reader-need.md +1 -1
  58. package/agent-docs/author/writing-style.sections/evidence-and-uncertainty.md +1 -1
  59. package/agent-docs/author/writing-style.sections/example-audience-and-scope.md +1 -1
  60. package/agent-docs/author/writing-style.sections/feature-availability.md +36 -0
  61. package/agent-docs/author/writing-style.sections/ingredients-recipes-and-cookbooks.md +1 -1
  62. package/agent-docs/author/writing-style.sections/page-purpose-and-structure.md +1 -1
  63. package/agent-docs/author/writing-style.sections/procedures-and-examples.md +1 -1
  64. package/agent-docs/author/writing-style.sections/related-reading.md +1 -1
  65. package/agent-docs/author/writing-style.sections/review-a-draft.md +1 -1
  66. package/agent-docs/author/writing-style.sections/reviewed-writing-examples.md +1 -1
  67. package/agent-docs/author/writing-style.sections/voice-and-explanations.md +1 -1
  68. package/agent-docs/changelog/2026-10-28.md +89 -0
  69. package/agent-docs/changelog.md +9 -1
  70. package/agent-docs/config/outputs.md +15 -11
  71. package/agent-docs/config/outputs.sections/exports.md +14 -11
  72. package/agent-docs/config/outputs.sections/metadata.md +1 -1
  73. package/agent-docs/config/outputs.sections/related-reading.md +1 -1
  74. package/agent-docs/content-delivery/agents.md +86 -0
  75. package/agent-docs/content-delivery/api.md +130 -0
  76. package/agent-docs/content-delivery/client.md +79 -0
  77. package/agent-docs/content-delivery/http-api/operations/get-content-representation-fa1d2e3f.md +394 -0
  78. package/agent-docs/content-delivery/http-api/operations/get-content-representation-head-4052375c.md +256 -0
  79. package/agent-docs/content-delivery/http-api/operations/get-content-resource-849f1c49.md +911 -0
  80. package/agent-docs/content-delivery/http-api/operations/get-content-resource-head-0a352acd.md +246 -0
  81. package/agent-docs/content-delivery/http-api/operations/list-content-resources-8e977ec7.md +913 -0
  82. package/agent-docs/content-delivery/http-api/operations/list-content-resources-head-b67cbad9.md +236 -0
  83. package/agent-docs/content-delivery/http-api.md +78 -0
  84. package/agent-docs/content-delivery/manifest.md +79 -0
  85. package/agent-docs/content-delivery/publish.md +72 -0
  86. package/agent-docs/content-delivery/render.md +73 -0
  87. package/agent-docs/content-delivery/rest.md +108 -0
  88. package/agent-docs/content-delivery/sections.md +110 -0
  89. package/agent-docs/content-delivery/select.md +100 -0
  90. package/agent-docs/content-delivery.md +79 -0
  91. package/agent-docs/documents.json +6748 -5073
  92. package/agent-docs/provenance.json +4 -4
  93. package/agent-docs/publish/content-export.md +32 -16
  94. package/agent-docs/publish/content-export.sections/assets-downloads-and-notices.md +3 -3
  95. package/agent-docs/publish/content-export.sections/check-the-result.md +2 -2
  96. package/agent-docs/publish/content-export.sections/export-selected-pages.md +12 -9
  97. package/agent-docs/publish/content-export.sections/inspect-the-manifest.md +5 -3
  98. package/agent-docs/publish/content-export.sections/prerequisites.md +3 -3
  99. package/agent-docs/publish/content-export.sections/related-reading.md +2 -2
  100. package/agent-docs/publish/content-export.sections/review-exported-api-material.md +3 -3
  101. package/agent-docs/publish/content-export.sections/try-the-help-drawer-example.md +3 -3
  102. package/agent-docs/publish/content-export.sections/upgrade-an-existing-integration.md +34 -0
  103. package/agent-docs/publish/content-export.sections/what-the-representations-retain.md +4 -4
  104. package/agent-docs/publish/mcp.md +3 -1
  105. package/agent-docs/publish/mcp.sections/check-budgets-and-errors.md +1 -1
  106. package/agent-docs/publish/mcp.sections/choose-the-documentation-source.md +1 -1
  107. package/agent-docs/publish/mcp.sections/configure-the-client.md +1 -1
  108. package/agent-docs/publish/mcp.sections/generate-a-vercel-endpoint.md +1 -1
  109. package/agent-docs/publish/mcp.sections/related-reading.md +3 -1
  110. package/agent-docs/publish/mcp.sections/search-then-read.md +1 -1
  111. package/agent-docs/publish/mcp.sections/serve-a-public-endpoint-on-node.md +1 -1
  112. package/agent-docs/publish/mcp.sections/verify-the-connection.md +1 -1
  113. package/agent-docs/publish/mcp.sections/why-offer-mcp-for-public-docs.md +1 -1
  114. package/agent-docs/publish/seo.md +16 -2
  115. package/agent-docs/publish/seo.sections/related-reading.md +28 -0
  116. package/agent-docs/publish/seo.sections/set-the-public-address.md +36 -0
  117. package/agent-docs/publish/seo.sections/what-agents-receive.md +28 -0
  118. package/agent-docs/publish/seo.sections/what-the-build-adds.md +42 -0
  119. package/agent-docs/publish/seo.sections/write-the-page-title-and-summary.md +43 -0
  120. package/agent-docs/search-index.json +1 -1
  121. package/agent-docs/styling/layouts.md +21 -3
  122. package/agent-docs/styling/layouts.sections/build-a-landing-page.md +6 -3
  123. package/agent-docs/styling/layouts.sections/build-a-splash-page.md +6 -3
  124. package/agent-docs/styling/layouts.sections/control-navigation-tabs.md +6 -3
  125. package/agent-docs/styling/layouts.sections/customize-the-hero.md +6 -3
  126. package/agent-docs/styling/layouts.sections/hero.md +6 -3
  127. package/agent-docs/styling/layouts.sections/hide-the-table-of-contents-or-give-content-more-room.md +54 -0
  128. package/agent-docs/styling/layouts.sections/html-markdown-and-agents.md +6 -3
  129. package/agent-docs/styling/layouts.sections/related-reading.md +6 -3
  130. package/dist/api.js +70 -3
  131. package/dist/authoring-hints.d.ts +3 -0
  132. package/dist/authoring-hints.js +35 -0
  133. package/dist/authoring-project.d.ts +1 -1
  134. package/dist/authoring-project.js +2 -0
  135. package/dist/authoring-validation.js +2 -0
  136. package/dist/code-samples.js +22 -11
  137. package/dist/compiler-config.d.ts +1 -0
  138. package/dist/compiler-config.js +13 -0
  139. package/dist/compiler.js +2 -1
  140. package/dist/component-names.js +1 -1
  141. package/dist/component-transform.js +7 -1
  142. package/dist/content-delivery-contract.d.ts +108 -0
  143. package/dist/content-delivery-contract.js +15 -0
  144. package/dist/content-delivery-transport.d.ts +3 -0
  145. package/dist/content-delivery-transport.js +47 -0
  146. package/dist/content-delivery-validation.d.ts +7 -0
  147. package/dist/content-delivery-validation.js +122 -0
  148. package/dist/content-delivery.d.ts +21 -0
  149. package/dist/content-delivery.js +119 -0
  150. package/dist/content-export-anchors.d.ts +11 -0
  151. package/dist/content-export-anchors.js +79 -0
  152. package/dist/content-export-command.d.ts +4 -2
  153. package/dist/content-export-command.js +15 -2
  154. package/dist/content-export-comparison.d.ts +16 -0
  155. package/dist/content-export-comparison.js +48 -0
  156. package/dist/content-export-config.d.ts +17 -0
  157. package/dist/content-export-config.js +47 -3
  158. package/dist/content-export-render.js +20 -1
  159. package/dist/content-export.d.ts +5 -1
  160. package/dist/content-export.js +193 -40
  161. package/dist/content-mount.d.ts +11 -0
  162. package/dist/content-mount.js +73 -0
  163. package/dist/content-rest-client.d.ts +12 -0
  164. package/dist/content-rest-client.js +162 -0
  165. package/dist/content-rest-contract.d.ts +27 -0
  166. package/dist/content-rest-contract.js +9 -0
  167. package/dist/content-rest-server.d.ts +7 -0
  168. package/dist/content-rest-server.js +99 -0
  169. package/dist/content-source.d.ts +3 -1
  170. package/dist/frontmatter.js +8 -7
  171. package/dist/html-renderer.js +25 -0
  172. package/dist/markdown-sections.d.ts +2 -1
  173. package/dist/markdown-sections.js +8 -18
  174. package/dist/page-renderer.js +5 -3
  175. package/dist/publication-plan.js +2 -1
  176. package/dist/scaffold-placeholders.d.ts +2 -0
  177. package/dist/scaffold-placeholders.js +19 -0
  178. package/dist/section-identity.d.ts +24 -0
  179. package/dist/section-identity.js +137 -0
  180. package/examples/content-delivery/README.md +87 -0
  181. package/examples/content-delivery/app.js +91 -0
  182. package/examples/content-delivery/content/billing.mdx +22 -0
  183. package/examples/content-delivery/docs.config.yaml +36 -0
  184. package/examples/content-delivery/index.html +25 -0
  185. package/examples/content-delivery/preview.mjs +86 -0
  186. package/examples/content-delivery/snippets/refund-window.mdx +3 -0
  187. package/examples/help-drawer/README.md +2 -2
  188. package/examples/help-drawer/app.js +3 -3
  189. package/package.json +6 -3
  190. package/schemas/content-export.schema.json +469 -33
  191. package/schemas/content-rest.openapi.json +1627 -0
  192. package/skills/shoalrun-author/SKILL.md +2 -0
  193. package/styles/site.css +4 -1
@@ -17,7 +17,7 @@ Navigation section: [Reference](https://www.shoalrun.com/.well-known/shoalrun/na
17
17
 
18
18
  Breadcrumbs: [Reference](https://www.shoalrun.com/cli.md) > Authoring reference > Example writing guide
19
19
 
20
- **Updated: 2026-10-27.**
20
+ **Updated: 2026-10-28.**
21
21
 
22
22
  Parent page: [Full Markdown page](/author/writing-style.md)
23
23
 
@@ -17,7 +17,7 @@ Navigation section: [Reference](https://www.shoalrun.com/.well-known/shoalrun/na
17
17
 
18
18
  Breadcrumbs: [Reference](https://www.shoalrun.com/cli.md) > Authoring reference > Example writing guide
19
19
 
20
- **Updated: 2026-10-27.**
20
+ **Updated: 2026-10-28.**
21
21
 
22
22
  Parent page: [Full Markdown page](/author/writing-style.md)
23
23
 
@@ -17,7 +17,7 @@ Navigation section: [Reference](https://www.shoalrun.com/.well-known/shoalrun/na
17
17
 
18
18
  Breadcrumbs: [Reference](https://www.shoalrun.com/cli.md) > Authoring reference > Example writing guide
19
19
 
20
- **Updated: 2026-10-27.**
20
+ **Updated: 2026-10-28.**
21
21
 
22
22
  Parent page: [Full Markdown page](/author/writing-style.md)
23
23
 
@@ -17,7 +17,7 @@ Navigation section: [Reference](https://www.shoalrun.com/.well-known/shoalrun/na
17
17
 
18
18
  Breadcrumbs: [Reference](https://www.shoalrun.com/cli.md) > Authoring reference > Example writing guide
19
19
 
20
- **Updated: 2026-10-27.**
20
+ **Updated: 2026-10-28.**
21
21
 
22
22
  Parent page: [Full Markdown page](/author/writing-style.md)
23
23
 
@@ -0,0 +1,89 @@
1
+ ---
2
+ id: change.2026-10-28
3
+ title: Content delivery, verification dates, and clearer references
4
+ summary: Reuse documentation through static bundles or REST, display technical
5
+ verification dates, and find clearer API and layout guidance.
6
+ type: changelog-entry
7
+ area:
8
+ - publishing
9
+ - authoring
10
+ - project
11
+ subarea:
12
+ - publishing-content-delivery
13
+ - authoring-metadata
14
+ - project-releases
15
+ canonical: /changelog/2026-10-28
16
+ date: 2026-10-28
17
+ releaseVersion: 0.1.0-alpha.13
18
+ ---
19
+
20
+ # Content delivery, verification dates, and clearer references
21
+
22
+ > Documentation index: [llms.min.txt](https://www.shoalrun.com/llms.min.txt) · Document manifest: [documents.json](https://www.shoalrun.com/documents.json)
23
+
24
+ Navigation section: [Project](https://www.shoalrun.com/.well-known/shoalrun/navigation/project-updates-50f26fe22670.txt) (ID: project-updates). [All sections and pages](https://www.shoalrun.com/llms.min.txt)
25
+
26
+ Breadcrumbs: [Project](https://www.shoalrun.com/status.md) > Changelog > Content delivery, verification dates, and clearer references
27
+
28
+ **Published: 2026-10-28.**
29
+
30
+ **Version: 0.1.0-alpha.13.**
31
+
32
+ Alpha.13 makes documentation reusable by applications, agents, services, and publishing workflows. It adds section and snippet exports, clients for static and REST delivery, native API response-header references, and visible technical verification dates.
33
+
34
+ Upgrade to CLI `0.1.0-alpha.13` and rebuild your site and content exports. Custom export consumers need the manifest migration below. This entry also covers the accompanying documentation improvements.
35
+
36
+ ## Deliver selected content
37
+
38
+ [Content delivery](https://www.shoalrun.com/content-delivery.md) extends whole-page export to individual sections and named snippet instances. A product can show billing instructions beside its settings; an agent can retrieve a procedure; a publishing workflow can reuse content in training material.
39
+
40
+ The browser-safe client reads HTML or Markdown from a static bundle. Its mount helper rewrites IDs and links so the same content can appear more than once in an application. The REST adapter serves the same snapshots through resource lists, metadata, and representation endpoints. Both clients use the same snapshot interface.
41
+
42
+ [Section IDs](https://www.shoalrun.com/content-delivery/sections.md) derive from headings by default. An optional trailing `<Anchor id="refunds" />` preserves a reference when its heading changes. Before exporting a section alone, review it without the rest of the page and record that judgment in `standaloneSections`.
43
+
44
+ Compare releases with `--previous-manifest` and reject removed references with `--fail-on-removed`. Keep complete revisions under immutable paths when applications remain open during updates. Authentication, search, editing, and production hosting remain host responsibilities.
45
+
46
+ ## Migrate an export consumer
47
+
48
+ Existing `documents` selectors remain shorthand for whole pages. The exported manifest now uses typed resources:
49
+
50
+ - Read `manifest.resources` instead of `manifest.documents`.
51
+ - Identify a page with `ref.kind: page` and `ref.documentId` instead of a document's `id`.
52
+ - Follow resource links through their typed `ref` objects.
53
+ - Read representation paths from the rebuilt manifest instead of retaining old filenames.
54
+
55
+ See [export migration](https://www.shoalrun.com/publish/content-export.md) and the [manifest reference](https://www.shoalrun.com/content-delivery/manifest.md). The package includes a content-delivery example for static and REST clients, plus an updated help-drawer example for whole pages.
56
+
57
+ ## Read complete API references and examples
58
+
59
+ Native API references now render schema-based OpenAPI response headers with descriptions, constraints, and examples. These contracts previously stopped the build. Content-style headers and response links still require adaptation.
60
+
61
+ Generated request samples handle HEAD responses without trying to read a response body. JavaScript, Node.js, and Python samples distinguish JSON from text responses. The [content HTTP API reference](https://www.shoalrun.com/content-delivery/http-api.md) uses the native operation format and includes all six GET and HEAD operations.
62
+
63
+ ## Distinguish revision from verification
64
+
65
+ An authored `verified` date now appears as a labeled semantic `<time>` element in the standard HTML page header. It remains separate from `updated`: revision records content changes; verification records a check of technical claims. Markdown and `documents.json` retain the same dates. Builds never assign verification dates.
66
+
67
+ Set `showVerified: false` on a page, or in `frontmatter.defaults`, to hide verification in HTML only. A page can override the shared default. See [verification dates](https://www.shoalrun.com/publish/seo.md).
68
+
69
+ ## Find the right authoring guidance
70
+
71
+ The documentation now separates content-delivery tasks, client reference, manifest reference, and HTTP operations. Section guidance explains what a standalone declaration means before introducing its syntax, with a concrete missing-context example.
72
+
73
+ The [layout guide](https://www.shoalrun.com/styling/layouts.md) distinguishes giving content more room with `layout: wide` from hiding the outline with `tocDepth: 0`. Page metadata links to that choice, and task wording improves discovery for outline-related searches. These updates are included in the bundled documentation used by CLI and MCP tools.
74
+
75
+ Feature availability follows one convention: “Available since `VERSION`.” Templates and authoring guidance require an exact assigned version rather than a guessed release number.
76
+
77
+ The navigation heading above the sidebar filter can be hidden or renamed with `outputs.html.navigation.heading`. Set it to `false` to remove “Explore”; the filter keeps its accessible label.
78
+
79
+ Clicking article content no longer draws a rectangle around the entire page body. Keyboard jumps still focus the article, with a visible indicator at its title. Focus indicators on links, buttons, and inputs remain available.
80
+
81
+ ## Preserve teaching examples and discover native relationships
82
+
83
+ Fenced code blocks can contain literal scaffold TODO examples without failing publication. Those examples remain readable in HTML and Markdown. Unresolved prompts in prose or frontmatter still fail the public build.
84
+
85
+ Project discovery and validation now suggest native relationships when a related-reading or related-material section contains document links. The hint is nonblocking and does not generate relationships. Authors still choose the purpose and reason for each connection. The component index also maps reader tasks to native features.
86
+
87
+ ## HTML, Markdown, and agents
88
+
89
+ Content exports contain passive HTML or readable Markdown, without website controls. Applications own rendering and interaction; agents can read typed references and retrieve Markdown without operating a browser. HTML visibility settings such as `showVerified` do not remove the underlying verification date from Markdown or the manifest.
@@ -16,12 +16,20 @@ Navigation section: [Project](https://www.shoalrun.com/.well-known/shoalrun/navi
16
16
 
17
17
  Breadcrumbs: [Project](https://www.shoalrun.com/status.md) > Changelog > All changes
18
18
 
19
- **Updated: 2026-10-27.**
19
+ **Updated: 2026-10-29.**
20
20
 
21
21
  Updates to Shoalrun and its documentation. Each entry identifies the affected versions and any upgrade steps. Earlier entries retain their private-prototype release context.
22
22
 
23
23
  ## Latest changes
24
24
 
25
+ - 2026-10-28
26
+
27
+ Version 0.1.0-alpha.13
28
+
29
+ [Content delivery, verification dates, and clearer references](https://www.shoalrun.com/changelog/2026-10-28.md)
30
+
31
+ Reuse documentation through static bundles or REST, display technical verification dates, and find clearer API and layout guidance.
32
+
25
33
  - 2026-10-27
26
34
 
27
35
  Version 0.1.0-alpha.11
@@ -17,7 +17,7 @@ Navigation section: [Reference](https://www.shoalrun.com/.well-known/shoalrun/na
17
17
 
18
18
  Breadcrumbs: [Reference](https://www.shoalrun.com/cli.md) > Configuration reference > Output and export
19
19
 
20
- **Updated: 2026-10-27.**
20
+ **Updated: 2026-10-29.**
21
21
 
22
22
  Configure metadata providers, application exports, Markdown headers, and discovery indexes. These keys belong in `docs.config.yaml` or an included configuration file. For file composition and validation commands, see [Configure your project](https://www.shoalrun.com/configuration.md). Use the [configuration index](https://www.shoalrun.com/config.md) to find another setting.
23
23
 
@@ -35,20 +35,23 @@ The path is relative to the config file that declares it. `provider` accepts onl
35
35
 
36
36
  ## `exports`
37
37
 
38
+ Use [resource selectors](https://www.shoalrun.com/content-delivery/select.md) to select pages, approved sections, and named snippet instances.
39
+
38
40
  Optional named targets for `shoalrun export`. They select portable application content independently of website navigation and `site.contentFilter`. The normal website build does not emit export bundles automatically. See [export content into an application](https://www.shoalrun.com/publish/content-export.md).
39
41
 
40
42
  Each target accepts these fields:
41
43
 
42
- | Field | Default | Meaning |
43
- | --------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
44
- | `formats` | `[markdown, html]` | A nonempty unique list of `markdown` and/or `html`. |
45
- | `documents` | All eligible pages | Explicit document IDs. Missing, inaccessible, or export-filtered IDs fail. |
46
- | `publication` | The only enabled publication | One complete `{ channel, version, language }` combination. Required when selection is ambiguous. |
47
- | `contentFilter` | None | Optional configured reader facets; every facet must match any listed choice. Unmarked pages do not match. |
48
- | `publicBase` | `/` | Root-relative mount with a trailing slash, such as `/help/`. It locates bundle content and assets in the app. |
49
- | `assetRoots` | Content directory only | Extra local asset directories, relative to the declaring config file. Only referenced supported files are copied. |
50
- | `notices` | Renderer notices only | Local text or Markdown license/notice files to retain in `NOTICES.txt`. Paths are relative to the declaring config file. |
51
- | `apiReview` | Matching API-level approval, if any | API IDs mapped to reviewed SHA-256 digests for this export selection. |
44
+ | Field | Default | Meaning |
45
+ | --------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
46
+ | `formats` | `[markdown, html]` | A nonempty unique list of `markdown` and/or `html`. |
47
+ | `documents` | All eligible pages when neither selector is set | Explicit document IDs. Missing, inaccessible, or export-filtered IDs fail. Mutually exclusive with `resources`. |
48
+ | `resources` | None | Typed page, section, or snippet selectors. Mutually exclusive with `documents`. |
49
+ | `publication` | The only enabled publication | One complete `{ channel, version, language }` combination. Required when selection is ambiguous. |
50
+ | `contentFilter` | None | Optional configured reader facets; every facet must match any listed choice. Unmarked pages do not match. |
51
+ | `publicBase` | `/` | Root-relative mount with a trailing slash, such as `/help/`. It locates bundle content and assets in the app. |
52
+ | `assetRoots` | Content directory only | Extra local asset directories, relative to the declaring config file. Only referenced supported files are copied. |
53
+ | `notices` | Renderer notices only | Local text or Markdown license/notice files to retain in `NOTICES.txt`. Paths are relative to the declaring config file. |
54
+ | `apiReview` | Matching API-level approval, if any | API IDs mapped to reviewed SHA-256 digests for this export selection. |
52
55
 
53
56
  ```yaml
54
57
  exports:
@@ -69,6 +72,7 @@ Use `outputs` to configure the HTML, Markdown, discovery, and text artifacts pro
69
72
  | `markdown.metadata` | The Markdown twin's YAML header: `format`, `fields`, `addFields`, `removeFields`, `omitNull`, `byType`, and `profiles`. `format` defaults to `none`. See [Markdown metadata](https://www.shoalrun.com/author/markdown-metadata.md). |
70
73
  | `html.shareImages` | `true`: a generated 1200×630 link-preview image per page. `false` turns them off; a mapping with `template` and `fonts` replaces the design. See [share images and favicon](https://www.shoalrun.com/styling/share-images.md). |
71
74
  | `html.highlighting` | Code highlighting `provider`, `theme`, and `module`. Defaults to Shiki with the `site` theme, which takes code colors from the palette. See [code blocks](https://www.shoalrun.com/author/components/code-blocks.md). |
75
+ | `html.navigation.heading` | Heading above the sidebar filter. Defaults to `Explore`; use nonempty text to replace it or `false` to hide it. Available since `0.1.0-alpha.13`. |
72
76
  | `html.navigation.showCounts` | Show page counts beside navigation groups. Defaults to `true`; set `false` to omit them. See [navigation](https://www.shoalrun.com/author/navigation.md). |
73
77
  | `html.search` | Search `provider`, `module`, and `index`. See [search](https://www.shoalrun.com/author/search.md). |
74
78
  | `text` | Ordered frontmatter field paths for `card`, `pageHeader`, `search`, `htmlDescription`, and `socialCard`. See [custom metadata](https://www.shoalrun.com/author/custom-metadata.md). |
@@ -17,7 +17,7 @@ Navigation section: [Reference](https://www.shoalrun.com/.well-known/shoalrun/na
17
17
 
18
18
  Breadcrumbs: [Reference](https://www.shoalrun.com/cli.md) > Configuration reference > Output and export
19
19
 
20
- **Updated: 2026-10-27.**
20
+ **Updated: 2026-10-29.**
21
21
 
22
22
  Parent page: [Full Markdown page](/config/outputs.md)
23
23
 
@@ -31,20 +31,23 @@ Configure metadata providers, application exports, Markdown headers, and discove
31
31
 
32
32
  ## `exports`
33
33
 
34
+ Use [resource selectors](https://www.shoalrun.com/content-delivery/select.md) to select pages, approved sections, and named snippet instances.
35
+
34
36
  Optional named targets for `shoalrun export`. They select portable application content independently of website navigation and `site.contentFilter`. The normal website build does not emit export bundles automatically. See [export content into an application](https://www.shoalrun.com/publish/content-export.md).
35
37
 
36
38
  Each target accepts these fields:
37
39
 
38
- | Field | Default | Meaning |
39
- | --------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
40
- | `formats` | `[markdown, html]` | A nonempty unique list of `markdown` and/or `html`. |
41
- | `documents` | All eligible pages | Explicit document IDs. Missing, inaccessible, or export-filtered IDs fail. |
42
- | `publication` | The only enabled publication | One complete `{ channel, version, language }` combination. Required when selection is ambiguous. |
43
- | `contentFilter` | None | Optional configured reader facets; every facet must match any listed choice. Unmarked pages do not match. |
44
- | `publicBase` | `/` | Root-relative mount with a trailing slash, such as `/help/`. It locates bundle content and assets in the app. |
45
- | `assetRoots` | Content directory only | Extra local asset directories, relative to the declaring config file. Only referenced supported files are copied. |
46
- | `notices` | Renderer notices only | Local text or Markdown license/notice files to retain in `NOTICES.txt`. Paths are relative to the declaring config file. |
47
- | `apiReview` | Matching API-level approval, if any | API IDs mapped to reviewed SHA-256 digests for this export selection. |
40
+ | Field | Default | Meaning |
41
+ | --------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
42
+ | `formats` | `[markdown, html]` | A nonempty unique list of `markdown` and/or `html`. |
43
+ | `documents` | All eligible pages when neither selector is set | Explicit document IDs. Missing, inaccessible, or export-filtered IDs fail. Mutually exclusive with `resources`. |
44
+ | `resources` | None | Typed page, section, or snippet selectors. Mutually exclusive with `documents`. |
45
+ | `publication` | The only enabled publication | One complete `{ channel, version, language }` combination. Required when selection is ambiguous. |
46
+ | `contentFilter` | None | Optional configured reader facets; every facet must match any listed choice. Unmarked pages do not match. |
47
+ | `publicBase` | `/` | Root-relative mount with a trailing slash, such as `/help/`. It locates bundle content and assets in the app. |
48
+ | `assetRoots` | Content directory only | Extra local asset directories, relative to the declaring config file. Only referenced supported files are copied. |
49
+ | `notices` | Renderer notices only | Local text or Markdown license/notice files to retain in `NOTICES.txt`. Paths are relative to the declaring config file. |
50
+ | `apiReview` | Matching API-level approval, if any | API IDs mapped to reviewed SHA-256 digests for this export selection. |
48
51
 
49
52
  ```yaml
50
53
  exports:
@@ -17,7 +17,7 @@ Navigation section: [Reference](https://www.shoalrun.com/.well-known/shoalrun/na
17
17
 
18
18
  Breadcrumbs: [Reference](https://www.shoalrun.com/cli.md) > Configuration reference > Output and export
19
19
 
20
- **Updated: 2026-10-27.**
20
+ **Updated: 2026-10-29.**
21
21
 
22
22
  Parent page: [Full Markdown page](/config/outputs.md)
23
23
 
@@ -17,7 +17,7 @@ Navigation section: [Reference](https://www.shoalrun.com/.well-known/shoalrun/na
17
17
 
18
18
  Breadcrumbs: [Reference](https://www.shoalrun.com/cli.md) > Configuration reference > Output and export
19
19
 
20
- **Updated: 2026-10-27.**
20
+ **Updated: 2026-10-29.**
21
21
 
22
22
  Parent page: [Full Markdown page](/config/outputs.md)
23
23
 
@@ -0,0 +1,86 @@
1
+ ---
2
+ id: guide.content-delivery-agents
3
+ title: Content delivery and agents
4
+ summary: Choose between portable resource delivery and documentation discovery
5
+ without mixing their context contracts.
6
+ type: explanation
7
+ area: publishing
8
+ subarea: publishing-content-delivery
9
+ canonical: /content-delivery/agents
10
+ ---
11
+
12
+ # Content delivery and agents
13
+
14
+ > Documentation index: [llms.min.txt](https://www.shoalrun.com/llms.min.txt) · Document manifest: [documents.json](https://www.shoalrun.com/documents.json)
15
+
16
+ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigation/docs-50f26fe22670.txt) (ID: docs). [All sections and pages](https://www.shoalrun.com/llms.min.txt)
17
+
18
+ Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Content delivery > Content delivery and agents
19
+
20
+ **Updated: 2026-10-29.**
21
+
22
+ Content delivery and documentation discovery serve different reading tasks. Delivery gives an application a reviewed collection of resources. Discovery helps an agent find and read documentation across a published site or installed snapshot.
23
+
24
+ Available since `0.1.0-alpha.13`.
25
+
26
+ ## Choose the reading contract
27
+
28
+ Match the interface to the task and the context it must retain.
29
+
30
+ | Need | Use |
31
+ | --------------------------------------------- | --------------------------------------------------- |
32
+ | Render selected content in an application | Content export and `ContentSnapshot` |
33
+ | Read a named snippet with fixed values | Exported snippet instance |
34
+ | Find documentation by a question or topic | Existing documentation search and discovery indexes |
35
+ | Read a page or contextual section through MCP | Existing documentation MCP tools |
36
+
37
+ An export does not automatically create a search service or MCP server. The content client lists and reads resources; it does not rank them or generate answers. For an HTTP integration, use the [REST resource routes](https://www.shoalrun.com/content-delivery/http-api.md) or `openRestContentSource` with the same snapshot reading methods.
38
+
39
+ ## Read Markdown for an agent
40
+
41
+ An agent integration can open a reviewed export and read a known resource as evidence for its task. This example assumes the billing page is selected in the export:
42
+
43
+ ```ts
44
+ import { openManifestContentSource } from '@shoalrun/cli/content';
45
+
46
+ const snapshot = await openManifestContentSource({
47
+ manifestUrl: 'https://docs.example.com/content/revisions/r1/manifest.json',
48
+ });
49
+ try {
50
+ const result = await snapshot.get(
51
+ { kind: 'page', documentId: 'guide.billing' },
52
+ { format: 'markdown' },
53
+ );
54
+ console.log(result.content); // Pass this text to the agent's reading context.
55
+ } finally {
56
+ snapshot.dispose();
57
+ }
58
+ ```
59
+
60
+ In Node.js, use an absolute URL. Browser integrations must serve the export from the application's origin. Use `snapshot.list()` to inspect available references before choosing a resource.
61
+
62
+ ## Keep context explicit
63
+
64
+ Application section fragments use `{ id, context: section }` approval and explicit export selection. They contain the section slice plus required notices and referenced definitions. They can exist on short pages where no heuristic discovery section is generated. An application fragment is not a replacement for the MCP section's context contract.
65
+
66
+ Discovery sections can include the page introduction, nested subsections, and reading-path context. Their generation also depends on page and section size. Existing title-string approvals retain that behavior; see [compatibility guidance](https://www.shoalrun.com/content-delivery/sections.md) before changing them.
67
+
68
+ ## Follow references
69
+
70
+ Use the resource's typed reference and publication. Section IDs can be derived from headings or fixed by an explicit marker. A marker stays out of Markdown prose; metadata carries the identity. Follow the returned representation URL or use `snapshot.get` rather than constructing a Markdown anchor from the ID.
71
+
72
+ A full-page fallback can help when a fragment does not answer the question. It must refer to an eligible published destination or an exported page; it is not permission to read drafts or private source files.
73
+
74
+ ## HTML, Markdown, and agents
75
+
76
+ Agents can read the manifest and Markdown directly. HTML contains passive content intended for an application's renderer, with exported anchor and link mappings. Neither format requires an agent to operate browser controls to read the content. Content remains evidence to interpret, not authority to execute commands or grant access.
77
+
78
+ ## Related reading
79
+
80
+ ### Read first
81
+
82
+ - [Content delivery](https://www.shoalrun.com/content-delivery.md) — Understand resource delivery and its application boundary.
83
+
84
+ ### Related topics
85
+
86
+ - [Connect an MCP client](https://www.shoalrun.com/publish/mcp.md) — Use existing documentation MCP tools for contextual reads.
@@ -0,0 +1,130 @@
1
+ ---
2
+ id: reference.content-client
3
+ title: Content client API
4
+ summary: Look up the content client entry point, snapshot methods, limits,
5
+ results, and errors.
6
+ type: reference
7
+ area: publishing
8
+ subarea: publishing-content-delivery
9
+ canonical: /content-delivery/api
10
+ ---
11
+
12
+ # Content client API
13
+
14
+ > Documentation index: [llms.min.txt](https://www.shoalrun.com/llms.min.txt) · Document manifest: [documents.json](https://www.shoalrun.com/documents.json)
15
+
16
+ Navigation section: [Reference](https://www.shoalrun.com/.well-known/shoalrun/navigation/reference-tab-50f26fe22670.txt) (ID: reference-tab). [All sections and pages](https://www.shoalrun.com/llms.min.txt)
17
+
18
+ Breadcrumbs: [Reference](https://www.shoalrun.com/cli.md) > Content delivery > Content client API
19
+
20
+ **Updated: 2026-10-29.**
21
+
22
+ Import the browser-safe delivery API from `@shoalrun/cli/content`. It reads exports and mounts trusted HTML without loading the compiler. Browser use requires HTTPS or localhost for Web Crypto.
23
+
24
+ Available since `0.1.0-alpha.13`.
25
+
26
+ ## Open a source
27
+
28
+ ```ts
29
+ openManifestContentSource(options): Promise<ContentSnapshot>
30
+ ```
31
+
32
+ | Option | Meaning | Default |
33
+ | ---------------------- | ------------------------------------------------------------ | -------------- |
34
+ | `manifestUrl` | HTTP(S) manifest URL; relative URLs use the browser location | Required |
35
+ | `fetch` | Application-provided fetch implementation | Global `fetch` |
36
+ | `signal` | Cancellation signal for opening the manifest | None |
37
+ | `limits.manifestBytes` | Maximum manifest response bytes | 5,000,000 |
38
+ | `limits.resourceBytes` | Maximum representation response bytes | 8,000,000 |
39
+ | `limits.resources` | Maximum resources in a manifest | 10,000 |
40
+
41
+ `manifestUrl` accepts a string or `URL`. Outside a browser, supply an absolute URL. URLs must omit credentials, query strings, and fragments; the manifest must sit within its declared `publicBase`.
42
+
43
+ Limits must be positive safe integers. The browser client requires the application origin and refuses redirects. The server must send `application/json` for the manifest and the declared content type for representations.
44
+
45
+ ## Open a REST source
46
+
47
+ ```ts
48
+ openRestContentSource(options): Promise<ContentSnapshot>
49
+ ```
50
+
51
+ `RestContentSourceOptions` accepts `baseUrl`, a required `{ channel, version, language }` publication, and an optional `revision`. It also accepts the same `fetch`, `signal`, and `limits` options as the manifest source. `limits.manifestBytes` bounds the JSON inventory response. Opening fetches that inventory and pins subsequent reads to its revision.
52
+
53
+ Browser URLs must share the application's origin. Outside a browser, provide an absolute HTTP(S) URL. The base URL must omit credentials, query strings, and fragments. `contentResourceKey(ref)` returns a REST resource key; it is distinct from the local comparison key returned by `contentRefKey(ref)`. See the [HTTP reference](https://www.shoalrun.com/content-delivery/http-api.md) for routes and response types.
54
+
55
+ ## Read a snapshot
56
+
57
+ A snapshot exposes the following members for one opened revision.
58
+
59
+ | Member | Contract |
60
+ | ------------------------------- | --------------------------------------------------- |
61
+ | `revision` | Opened manifest digest |
62
+ | `publication` | Channel, version, and language |
63
+ | `list()` | Read-only resource metadata for this revision |
64
+ | `get(ref, { format, signal? })` | Promise for a checked HTML or Markdown result |
65
+ | `dispose()` | Cancel the snapshot lifetime and refuse later reads |
66
+
67
+ ```ts
68
+ type ContentRef =
69
+ | { kind: 'page'; documentId: string }
70
+ | { kind: 'section'; documentId: string; sectionId: string }
71
+ | { kind: 'snippet'; id: string };
72
+ ```
73
+
74
+ `list()` is synchronous because opening a source loads and freezes its metadata. Each `get()` fetches and checks UTF-8, media type, byte count, and SHA-256 against that revision; the client does not cache response bodies. `dispose()` is idempotent, aborts active reads, and makes later `list()` and `get()` calls fail. The opening signal affects only opening; use the per-read signal or `dispose()` for subsequent reads.
75
+
76
+ A `ContentResult` contains `resource`, `representation`, `format`, `content`, and `revision`. `contentRefKey(ref)` returns a key for comparing typed references. It is not a URL or authorization decision.
77
+
78
+ ## Validate a manifest
79
+
80
+ ```ts
81
+ validateContentManifest(value, maxResources = 10_000, maxResourceBytes = 8_000_000): asserts value is ContentManifest
82
+ ```
83
+
84
+ This exported helper checks structure, inventory limits, and approved review metadata. It does not fetch files or verify the manifest digest. Use `openManifestContentSource` for the complete loading and integrity checks. See the [manifest reference](https://www.shoalrun.com/content-delivery/manifest.md) for `ContentResource`, `ContentRepresentation`, `ContentAnchor`, and `ContentLink` fields.
85
+
86
+ ## Mount HTML
87
+
88
+ ```ts
89
+ mountContent(container, result, { instanceId?, signal? })
90
+ ```
91
+
92
+ The result must be HTML from a trusted export. Mounting replaces the container's children, assigns instance-specific DOM IDs, and rewrites local ID references. The returned `ContentMount` contains `anchors`, `links`, and `unmount()`. See [render content](https://www.shoalrun.com/content-delivery/render.md) for ownership and routing.
93
+
94
+ `instanceId` is optional; the default uses a random UUID. A supplied ID must start with an ASCII letter and contain at most 128 letters, numbers, underscores, or hyphens. Use a different ID for each simultaneous mount. `anchors` maps original anchor IDs to mounted DOM IDs, while `links` carries routing metadata. `signal` cancels before insertion; aborting it after mounting does not remove content. Call `unmount()` to remove only nodes still owned by that mount.
95
+
96
+ ## Errors
97
+
98
+ Use `ContentDeliveryError.code` to distinguish these failures.
99
+
100
+ | Code | Meaning |
101
+ | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
102
+ | `invalid_manifest` | Invalid source URL, options, inventory, manifest shape, digest, or review metadata |
103
+ | `not_found` | Missing manifest, unknown resource reference, or REST `404` |
104
+ | `unsupported_format` | Unavailable representation, REST `406`, or non-HTML input passed to `mountContent` |
105
+ | `stale_revision` | Content bytes differ from the opened revision, a static representation file is missing, or REST returns `409` |
106
+ | `network_error` | Failed or interrupted request; REST `400`, `405`, or `500`; or HTTP failures outside the REST contract, such as `401`, `429`, or `503` |
107
+ | `invalid_content` | Wrong response media type, invalid UTF-8, exceeded response limit, malformed REST error, or invalid mount content |
108
+ | `disposed` | Reading a disposed snapshot or a read aborted by disposal |
109
+
110
+ The static client maps a missing representation file to `stale_revision`; the REST client preserves `404` as `not_found`. Opening a REST inventory with a different requested revision also produces `stale_revision`.
111
+
112
+ Defined REST error statuses must carry the documented JSON envelope. A malformed envelope produces `invalid_content`; other HTTP failure statuses produce `network_error` regardless of response body format.
113
+
114
+ Cancellation can propagate the signal's abort reason instead of a `ContentDeliveryError`. Treat messages as diagnostics rather than parsing them for program logic.
115
+
116
+ ## HTML, Markdown, and agents
117
+
118
+ The same typed reference selects either available representation. HTML mounting is optional and separate from retrieval. Agents can read Markdown and metadata through the client without a DOM. Digests detect mismatched bytes; they do not establish that an unknown publisher's content is trustworthy.
119
+
120
+ ## Related reading
121
+
122
+ ### Read first
123
+
124
+ - [Content delivery](https://www.shoalrun.com/content-delivery.md) — Understand resource delivery and its application boundary.
125
+
126
+ ### Related topics
127
+
128
+ - [Read content with a client](https://www.shoalrun.com/content-delivery/client.md) — Look up client methods, limits, and errors.
129
+
130
+ - [Serve content through REST](https://www.shoalrun.com/content-delivery/rest.md) — Use the shared snapshot methods and client limits.
@@ -0,0 +1,79 @@
1
+ ---
2
+ id: guide.content-client
3
+ title: Read content with a client
4
+ summary: Open a content revision and read typed resources without depending on
5
+ generated filenames.
6
+ type: how-to
7
+ area: publishing
8
+ subarea: publishing-content-delivery
9
+ canonical: /content-delivery/client
10
+ ---
11
+
12
+ # Read content with a client
13
+
14
+ > Documentation index: [llms.min.txt](https://www.shoalrun.com/llms.min.txt) · Document manifest: [documents.json](https://www.shoalrun.com/documents.json)
15
+
16
+ Navigation section: [Docs](https://www.shoalrun.com/.well-known/shoalrun/navigation/docs-50f26fe22670.txt) (ID: docs). [All sections and pages](https://www.shoalrun.com/llms.min.txt)
17
+
18
+ Breadcrumbs: [Docs](https://www.shoalrun.com/what-is-shoalrun.md) > Content delivery > Read content with a client
19
+
20
+ **Updated: 2026-10-29.**
21
+
22
+ Use the content client in an application to read a static export. Serve the bundle from the application's origin and use your normal JavaScript build tooling to import `@shoalrun/cli/content`.
23
+
24
+ Available since `0.1.0-alpha.13`.
25
+
26
+ ## Open a revision
27
+
28
+ ```ts
29
+ import { openManifestContentSource } from '@shoalrun/cli/content';
30
+
31
+ const snapshot = await openManifestContentSource({
32
+ manifestUrl: '/content/revisions/r1/manifest.json',
33
+ });
34
+ ```
35
+
36
+ Use an absolute HTTP(S) URL outside a browser. In a browser, the manifest must share the application's origin. Its location must match the export's `publicBase`. The client does not accept URL credentials, query parameters, or fragments in the manifest URL.
37
+
38
+ Browser use requires HTTPS or localhost because integrity checks use Web Crypto.
39
+
40
+ Opening fetches and validates the manifest once. `snapshot.revision` identifies that opened revision; it does not track a moving latest pointer.
41
+
42
+ ## Read a resource
43
+
44
+ ```ts
45
+ const resources = snapshot.list();
46
+ const result = await snapshot.get(
47
+ { kind: 'section', documentId: 'guide.billing', sectionId: 'refunds' },
48
+ { format: 'markdown' },
49
+ );
50
+ console.log(result.content);
51
+ ```
52
+
53
+ A result includes resource metadata, representation metadata, format, content, and revision. The client verifies representation size and SHA-256 digest before returning content. It does not evaluate MDX, interpolate variables, or run components in the browser.
54
+
55
+ ## Handle changes and cancellation
56
+
57
+ Pass an `AbortSignal` to an individual `get` to cancel obsolete navigation. Call `snapshot.dispose()` when the application stops using the revision. A disposed snapshot refuses further reads.
58
+
59
+ If a representation is missing or differs from the opened manifest, the client reports `stale_revision`. Keep the current display, open a complete replacement revision, and retry deliberately. Do not combine resource lists from one revision with files from another.
60
+
61
+ A custom `fetch` function can integrate the application's request handling. It does not bypass same-origin, content-type, size, or digest checks. Use [openRestContentSource](https://www.shoalrun.com/content-delivery/rest.md) for the same `ContentSnapshot` contract over HTTP.
62
+
63
+ ## HTML, Markdown, and agents
64
+
65
+ Request HTML for [application rendering](https://www.shoalrun.com/content-delivery/render.md) or Markdown for text consumers and agents. Neither requires a browser widget to recover the content. The manifest records availability per representation; requesting an omitted format returns `unsupported_format` rather than silently converting it.
66
+
67
+ ## Related reading
68
+
69
+ ### Read first
70
+
71
+ - [Content delivery](https://www.shoalrun.com/content-delivery.md) — Understand resource delivery and its application boundary.
72
+
73
+ ### Related topics
74
+
75
+ - [Select content resources](https://www.shoalrun.com/content-delivery/select.md) — Read a reviewed export from an application.
76
+
77
+ - [Content client API](https://www.shoalrun.com/content-delivery/api.md) — Look up client methods, limits, and errors.
78
+
79
+ - [Render content in an application](https://www.shoalrun.com/content-delivery/render.md) — Mount trusted HTML and route its links.