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

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 (90) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/DEPLOYMENT-PROFILES.md +287 -0
  3. package/README.md +5 -2
  4. package/agent-docs/.well-known/shoalrun/navigation/project-updates-50f26fe22670.txt +5 -1
  5. package/agent-docs/SNAPSHOT.json +5 -5
  6. package/agent-docs/changelog/2026-10-30.md +43 -0
  7. package/agent-docs/changelog/2026-11-03.md +56 -0
  8. package/agent-docs/changelog.md +17 -1
  9. package/agent-docs/documents.json +419 -61
  10. package/agent-docs/index.md +73 -103
  11. package/agent-docs/provenance.json +4 -4
  12. package/agent-docs/publish/content-export.md +1 -1
  13. package/agent-docs/publish/content-export.sections/prerequisites.md +11 -0
  14. package/agent-docs/publish/deployment-profiles.md +273 -0
  15. package/agent-docs/publish/deployment-profiles.sections/before-you-begin.md +44 -0
  16. package/agent-docs/publish/deployment-profiles.sections/build-and-inspect-the-edition.md +69 -0
  17. package/agent-docs/publish/deployment-profiles.sections/check-the-result.md +46 -0
  18. package/agent-docs/publish/deployment-profiles.sections/choose-navigation-labels.md +53 -0
  19. package/agent-docs/publish/deployment-profiles.sections/current-limits.md +46 -0
  20. package/agent-docs/publish/deployment-profiles.sections/define-the-shared-sku-manifest.md +70 -0
  21. package/agent-docs/publish/deployment-profiles.sections/html-markdown-and-agents.md +44 -0
  22. package/agent-docs/publish/deployment-profiles.sections/mark-pages-and-shared-sections.md +135 -0
  23. package/agent-docs/publish/deployment-profiles.sections/related-reading.md +42 -0
  24. package/agent-docs/publish/deployment-profiles.sections/supply-the-profile-from-the-deployment.md +68 -0
  25. package/agent-docs/search-index.json +1 -1
  26. package/agent-docs/start.md +2 -2
  27. package/agent-docs/start.sections/add-the-page-to-navigation.md +1 -1
  28. package/agent-docs/start.sections/build-and-check-both-outputs.md +1 -1
  29. package/agent-docs/start.sections/build-this-site.md +1 -1
  30. package/agent-docs/start.sections/check-writing-style.md +1 -1
  31. package/agent-docs/start.sections/create-a-page.md +1 -1
  32. package/agent-docs/start.sections/make-it-yours.md +1 -1
  33. package/agent-docs/start.sections/migrating-from-github-packages.md +1 -1
  34. package/agent-docs/start.sections/prerequisites.md +1 -1
  35. package/agent-docs/start.sections/related-reading.md +1 -1
  36. package/agent-docs/start.sections/start-your-own-project.md +2 -2
  37. package/dist/api-publication-plan.d.ts +3 -0
  38. package/dist/api-publication-plan.js +30 -3
  39. package/dist/artifact-bundle.d.ts +1 -0
  40. package/dist/artifact-bundle.js +1 -1
  41. package/dist/authoring-api.d.ts +1 -1
  42. package/dist/authoring-api.js +1 -1
  43. package/dist/authoring-project-command.js +4 -2
  44. package/dist/authoring-project.d.ts +2 -0
  45. package/dist/authoring-project.js +4 -4
  46. package/dist/authoring-snapshot.d.ts +23 -4
  47. package/dist/authoring-snapshot.js +84 -12
  48. package/dist/authoring-validation-command.js +5 -3
  49. package/dist/authoring-validation.d.ts +2 -0
  50. package/dist/authoring-validation.js +38 -11
  51. package/dist/cli-discovery.d.ts +2 -2
  52. package/dist/cli-discovery.js +9 -9
  53. package/dist/cli.js +8 -6
  54. package/dist/compiler.d.ts +13 -0
  55. package/dist/compiler.js +25 -74
  56. package/dist/component-names.js +1 -1
  57. package/dist/component-transform.js +7 -1
  58. package/dist/config.d.ts +4 -1
  59. package/dist/config.js +19 -5
  60. package/dist/content-export-command.d.ts +13 -1
  61. package/dist/content-export-command.js +3 -2
  62. package/dist/content-export.d.ts +13 -0
  63. package/dist/content-export.js +5 -4
  64. package/dist/content-source.d.ts +1 -0
  65. package/dist/content-workspace.d.ts +13 -0
  66. package/dist/content-workspace.js +18 -1
  67. package/dist/deployment-profile.d.ts +52 -0
  68. package/dist/deployment-profile.js +277 -0
  69. package/dist/frontmatter.js +11 -4
  70. package/dist/page-materialization.js +2 -0
  71. package/dist/page-renderer.d.ts +1 -0
  72. package/dist/page-renderer.js +3 -1
  73. package/dist/palettes.d.ts +1 -1
  74. package/dist/project-navigation.d.ts +5 -0
  75. package/dist/project-navigation.js +19 -0
  76. package/dist/publication-plan.d.ts +3 -1
  77. package/dist/publication-plan.js +23 -4
  78. package/dist/publication-render.d.ts +2 -1
  79. package/dist/publication-render.js +2 -2
  80. package/dist/site-identity.d.ts +3 -0
  81. package/dist/site-identity.js +69 -0
  82. package/dist/vercel.d.ts +1 -0
  83. package/dist/vercel.js +3 -1
  84. package/package.json +2 -1
  85. package/skills/shoalrun-author/SKILL.md +5 -1
  86. package/skills/shoalrun-author/references/customer-editions.md +164 -0
  87. package/skills/shoalrun-recipes/SKILL.md +2 -0
  88. package/skills/shoalrun-setup/SKILL.md +2 -0
  89. package/styles/site.css +7 -3
  90. package/agent-docs/publish/content-export.sections/upgrade-an-existing-integration.md +0 -34
package/CHANGELOG.md CHANGED
@@ -1,5 +1,38 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.0-alpha.15 — 2026-11-03
4
+
5
+ - Opt into `profiles.requireClassification` to reject unclassified public pages
6
+ before customer selection. Declare `shared: true` or page feature requirements;
7
+ shared pages can retain feature-gated sections. Generated API references accept
8
+ explicit API or OpenAPI operation declarations.
9
+ - Packaged authoring, setup, and recipe skills explain customer-edition workflows,
10
+ including external profiles, SKU revisions, grandfathered grants, strict page
11
+ classification, conditional sections, and checks for excluded content.
12
+
13
+ - Build customer-specific documentation from an external deployment profile.
14
+ Resolve versioned SKU mappings and direct feature grants, including
15
+ grandfathered features without a SKU; select pages and conditional sections
16
+ consistently in websites and content exports.
17
+ - Supply deployment-owned titles, logos, favicons, theme choices, links, and
18
+ publication subsets without storing customer profiles in the shared repo.
19
+ Capture declared external inputs for validation and preview, and keep profile
20
+ sources out of published dependency metadata.
21
+ - Profiled API builds support selected references and focused operation contracts;
22
+ full-source downloads and standalone schema embeds are rejected.
23
+
24
+ See [deployment profiles](DEPLOYMENT-PROFILES.md) for configuration and current limits.
25
+
26
+ ## 0.1.0-alpha.14 — 2026-10-30
27
+
28
+ - Keep selected text readable in light and dark modes by pairing the selection
29
+ background with its contrasting foreground color.
30
+ - Let paragraphs and ordinary lists fill their containers in wide, landing, and
31
+ splash layouts, including nested sections. Standard pages retain the 68ch
32
+ reading measure; hero text and other components keep their own limits.
33
+
34
+ Upgrade to alpha.14 and rebuild your site to receive these styling fixes.
35
+
3
36
  ## 0.1.0-alpha.13 — 2026-10-28
4
37
 
5
38
  Use documentation as content for applications, agents, services, and publishing
@@ -0,0 +1,287 @@
1
+ # Deployment-specific documentation
2
+
3
+ Build separate documentation editions from one content project. Each deployment
4
+ supplies its own profile file; profiles do not need to live together or belong in
5
+ the shared repository. A profile selects purchased SKU revisions, additional
6
+ features, branding, and documentation versions.
7
+
8
+ All names and domains below are fictional. Keep actual customer profiles and
9
+ branding in their deployment environments.
10
+
11
+ ## Define products in the shared project
12
+
13
+ Add a `profiles` section to `docs.config.yaml`:
14
+
15
+ ```yaml
16
+ profiles:
17
+ manifest: ./sku-manifest.yaml
18
+ required: true
19
+ pruneNavigation: true
20
+ ```
21
+
22
+ `manifest` resolves relative to the configuration file declaring it. `required`
23
+ defaults to `true`; builds must explicitly supply a profile. `pruneNavigation`
24
+ defaults to `false`. Enable it to remove navigation targets known to be excluded
25
+ and collapse empty groups. Unknown targets still fail validation.
26
+
27
+ Define stable feature IDs and explicitly versioned SKU mappings:
28
+
29
+ ```yaml
30
+ # sku-manifest.yaml
31
+ schemaVersion: 1
32
+ features:
33
+ analytics: { description: Analytics reports }
34
+ connectors: { description: External data connectors }
35
+ reports.classic: { lifecycle: deprecated }
36
+ skus:
37
+ professional:
38
+ revisions:
39
+ "2025-04":
40
+ features: [analytics, reports.classic]
41
+ "2026-10":
42
+ features: [analytics, connectors]
43
+ ```
44
+
45
+ Keep historical revisions unchanged when packaging changes. The compiler cannot
46
+ reconstruct an old purchase from today's catalog or enforce that past revisions
47
+ were never edited. Retain the manifest revision used for each deployment.
48
+
49
+ Feature definitions accept optional `description` and `lifecycle` (`active`,
50
+ `deprecated`, or `retired`). Lifecycle labels do not grant or remove features.
51
+
52
+ ## Supply one profile per deployment
53
+
54
+ The deployment can mount or generate this file outside the documentation repo:
55
+
56
+ ```yaml
57
+ schemaVersion: 1
58
+ skus:
59
+ - { id: professional, revision: "2026-10" }
60
+ features:
61
+ - reports.classic
62
+ site:
63
+ title: Example Partner documentation
64
+ origin: https://docs.partner.example
65
+ logo: ./brand/logo.svg
66
+ favicon: ./brand/icon.png
67
+ theme:
68
+ palette: kelp
69
+ publications:
70
+ enabled:
71
+ - { channel: production, version: current, language: en }
72
+ ```
73
+
74
+ SKU features and explicit `features` form an additive set. An explicit feature
75
+ needs no SKU: use it for standalone purchases or grandfathered functionality.
76
+ Duplicate grants are harmless. To build only shared content, supply `features: []`
77
+ with no SKU grants. Missing input never falls back to granting every feature.
78
+ Unknown features, SKUs, and SKU revisions fail the build. Use an empty list rather
79
+ than `null`; malformed grant lists are rejected.
80
+
81
+ Publication selection is optional and must be a nonempty subset of the shared
82
+ project's `publications.enabled`. Use existing versions for older instructions.
83
+ A grandfathered feature does not automatically enable old-version content.
84
+
85
+ ```sh
86
+ shoalrun build docs.config.yaml site-dist --profile /run/config/docs-profile.yaml
87
+ shoalrun export docs.config.yaml --out content-dist --profile /run/config/docs-profile.yaml
88
+ ```
89
+
90
+ Exports with multiple enabled publications still need their normal explicit
91
+ publication selection. Each deployment should use its own output directory.
92
+
93
+ The CLI profile path resolves from the current working directory. Profile logo
94
+ and favicon paths resolve from the profile's directory and must stay inside it.
95
+ Only explicitly declared assets are read; Shoalrun does not discover other
96
+ profiles in the directory. Shared configuration paths keep their existing origins.
97
+
98
+ Profiles accept these settings:
99
+
100
+ | Setting | Supported values |
101
+ | --- | --- |
102
+ | `schemaVersion` | Required; `1`. |
103
+ | `skus` | List of explicit `{ id, revision }` pairs. |
104
+ | `features` | List of directly granted feature IDs. Declare this or `skus`, even when empty. |
105
+ | `site` | `title`, `origin`, `basePath`, `logo`, `favicon`, `header`, `footer`, `indexing`. |
106
+ | `theme` | `preset`, a built-in `palette` name, `mode`, `toggle`. |
107
+ | `variables` | Project-level string, number, or boolean values for existing typed snippets. |
108
+ | `publications` | An `enabled` subset using existing publication coordinates. |
109
+
110
+ Settings use their ordinary Shoalrun shapes and validation. A profile is not a
111
+ general configuration overlay: it cannot change content sources, register plugins,
112
+ replace the SKU catalog, change access policy, or inherit another profile.
113
+ Profile-level CSS, custom fonts, and file-backed palettes are not supported.
114
+ Existing snippet variable precedence and snippet-only `<Var>` placement remain
115
+ unchanged; profile variables are not immutable branding tokens.
116
+
117
+ `site.logo` accepts a local SVG or PNG, also in ordinary shared config. The masthead
118
+ keeps the site title as its accessible label and displays the logo alongside it.
119
+
120
+ ## Select pages and sections
121
+
122
+ By default, you do not need to mark every page. Pages declare feature requirements, not SKU
123
+ IDs. A page with no `requires`, either authored or inherited from frontmatter
124
+ defaults, is shared across customer editions. Common setup and introductions can
125
+ remain unmarked.
126
+
127
+ Shared pages still need to pass access, publication, language, and facet rules.
128
+ Draft pages stay excluded from ordinary builds; older instructions need their
129
+ publication enabled.
130
+
131
+ After those rules pass, feature selection follows this table. Grants may come
132
+ from SKUs or direct entries:
133
+
134
+ | Page requirements | No granted features | Analytics only | Analytics and Connectors |
135
+ | --- | --- | --- | --- |
136
+ | No authored or inherited requirements | Included | Included | Included |
137
+ | `allOf: [analytics]` | Omitted | Included | Included |
138
+ | `allOf: [analytics, connectors]` | Omitted | Omitted | Included |
139
+ | `anyOf: [analytics, connectors]` | Omitted | Included | Included |
140
+
141
+ Forgetting a requirement makes a feature-specific page shared. Shoalrun does not
142
+ infer requirements from folders, titles, product metadata, or navigation labels.
143
+ Enable `profiles.requireClassification: true` to require a deliberate
144
+ classification on each publishable source page.
145
+
146
+ ### Require explicit classification
147
+
148
+ For customer deployments that should reject unclassified content, add
149
+ `requireClassification: true` to the shared `profiles` configuration. It defaults
150
+ to `false`, preserving shared-by-default behavior in existing projects.
151
+
152
+ ```yaml
153
+ profiles:
154
+ manifest: ./sku-manifest.yaml
155
+ required: true
156
+ pruneNavigation: true
157
+ requireClassification: true
158
+ ```
159
+
160
+ Each public page in the shared project's enabled publications must explicitly
161
+ write `shared: true` or `requires` in its source frontmatter. Missing classification
162
+ fails with the source filename before customer feature or publication selection.
163
+ Drafts and pages outside the shared enabled publications do not need classification
164
+ for that build. A later SKU or publication selection cannot bypass this check.
165
+ Builds, exports, and isolated authoring validation use the same policy.
166
+
167
+ ```yaml
168
+ # Shared page frontmatter fragment
169
+ shared: true
170
+ ```
171
+
172
+ Do not combine `shared: true` and `requires` on one page; `shared: false` is invalid.
173
+ `shared` cannot appear in frontmatter defaults or enforced settings. Inherited
174
+ feature requirements still restrict content, but do not satisfy classification.
175
+ Review pages reported by build errors rather than automatically marking them all
176
+ shared. Templates can write the chosen classification into each new page.
177
+
178
+ This catches missing declarations, not incorrect choices or ungated paragraphs
179
+ inside a shared page. Classification is a publishing policy, not authentication.
180
+
181
+ ### Restrict a whole page or section
182
+
183
+ Restrict a feature-specific page in its frontmatter:
184
+
185
+ ```yaml
186
+ requires:
187
+ allOf: [analytics, connectors]
188
+ ```
189
+
190
+ Use `anyOf` for alternatives. If both clauses appear, both must pass. Clauses must
191
+ be nonempty lists of declared feature IDs. A page whose resolved requirements do
192
+ not match the profile is omitted. Requirements combine with existing access,
193
+ publication, and facet selection; they cannot widen those rules.
194
+
195
+ For part of a shared page, including one marked `shared: true`:
196
+
197
+ ```mdx
198
+ <ForFeature allOf="analytics connectors">
199
+
200
+ ## Connect your reports <Anchor id="connect-reports" />
201
+
202
+ Instructions requiring both features.
203
+
204
+ </ForFeature>
205
+ ```
206
+
207
+ `allOf` and `anyOf` attributes contain whitespace-separated IDs. Conditions are
208
+ validated before rendering. Excluded branches contribute no links, snippets,
209
+ API embeds, images, or text to the output. Explicit root section anchors remain
210
+ stable when adjacent conditional content disappears. Conditions also work in
211
+ snippets and named snippet exports.
212
+
213
+ Text outside `<ForFeature>` stays shared. Excluding a block leaves the rest of
214
+ the page in the edition. A matching block cannot restore a page excluded by its
215
+ page-level requirements. With `features: []` and no SKU grants, eligible shared
216
+ pages and text remain while feature-dependent pages and blocks are omitted.
217
+
218
+ Links remaining in prose must target selected content. Shoalrun reports excluded
219
+ document targets as errors instead of deleting the links. Put the surrounding
220
+ paragraph in an appropriate condition, or link a shared overview. A migration
221
+ overview can use `anyOf: [reports.classic, reports.next]` when either audience needs
222
+ it. Replacement and migration references must still resolve in their publication.
223
+
224
+ `site.contentFilter` retains its existing relevance-filter behavior. Browser reader
225
+ filters only change visibility; use requirements for build-time exclusion.
226
+
227
+ ### Classify generated API pages
228
+
229
+ Strict mode accepts an explicit `shared: true` or `requires` on the API definition
230
+ beside `generateReferences`. An OpenAPI operation can instead declare
231
+ `x-shoalrun-shared: true` or `x-shoalrun-requires: {allOf: [analytics]}`.
232
+ API-level feature requirements still restrict every operation. Do not combine
233
+ shared and requirements on the same declaration. General frontmatter defaults
234
+ do not count; classify operations individually when their requirements differ.
235
+ Authored API reference pages follow the ordinary source-page rule.
236
+
237
+ ## Validate the deployment edition
238
+
239
+ Use the same profile when recording a baseline and validating:
240
+
241
+ ```sh
242
+ shoalrun docs baseline --out .shoalrun/baseline.json --profile /run/config/docs-profile.yaml
243
+ shoalrun docs validate --baseline .shoalrun/baseline.json --profile /run/config/docs-profile.yaml
244
+ ```
245
+
246
+ Explicit `--file` and `--id` validation also accept `--profile`. Project inspection
247
+ and source reads accept it too. Review and preview use the resulting report as
248
+ usual and serve the captured edition. Profiles and declared branding files are
249
+ captured into bounded private validation artifacts even when mounted outside the
250
+ project. Other deployment files are not scanned. Symlink substitutions of
251
+ captured branding inputs invalidate validation and cannot enter a later snapshot. Profile, asset, and catalog edits
252
+ make prior validation stale. Excluded affected pages remain listed in coverage with
253
+ a warning that their rendered content was not checked; validate another profile
254
+ that includes them before accepting their content changes. Treat validation reports and artifact directories as
255
+ private; they contain selected customer inputs.
256
+
257
+ A successful normal site build writes `.shoalrun/profile-selection.json` with
258
+ resolved features, grant sources, and page/section decisions. The compile/export
259
+ APIs also return `profileSelection` to their caller. These reports are local build
260
+ information, not served metadata. The report describes a build candidate; match
261
+ its `buildId` to the output before treating it as a receipt for that output. A
262
+ report write failure leaves the previous website intact. Public outputs omit the profile and branding
263
+ source filenames; the intended branding is present in the website.
264
+
265
+ ## API and hosting boundaries
266
+
267
+ Generated OpenAPI operations can declare `x-shoalrun-requires` with the same
268
+ `allOf`/`anyOf` shape. API definitions and explicit operation bindings also accept
269
+ `requires`. An authored reference page's requirements remain effective when
270
+ automatic reference generation is enabled. Generated reference pages also respect
271
+ requirements inherited through frontmatter defaults.
272
+
273
+ Profiled builds reject full OpenAPI source publication, because hiding reference
274
+ pages does not remove operations from that source. Use `source.publish: false`
275
+ and `source.focused: true` for focused operation downloads. Operation embeds
276
+ respect selection. Standalone `<ApiSchema api="..." schema="..." />` embeds are
277
+ not supported in profiled builds; use an eligible operation embed instead.
278
+
279
+ Static `vercel build --profile FILE` is supported. Profiled chat-function builds
280
+ are not supported. Other commands without a profile option, including `dev` and
281
+ checked-plan authoring, do not yet resolve deployment editions; use build/serve
282
+ or captured validation/preview.
283
+
284
+ Shoalrun does not fetch billing records, infer contract terms, expire grants, or
285
+ authenticate customers. The deployment supplies the declared edition and the
286
+ host controls who can retrieve it. Reuse an artifact only when all inputs,
287
+ including branding, origin, publication selection, and grants, are identical.
package/README.md CHANGED
@@ -9,13 +9,13 @@ This package provides the `shoalrun` CLI, starter projects, agent skills, and of
9
9
  From the project where you want to keep your documentation:
10
10
 
11
11
  ```sh
12
- npm install --save-dev --save-exact @shoalrun/cli@0.1.0-alpha.13
12
+ npm install --save-dev --save-exact @shoalrun/cli@0.1.0-alpha.15
13
13
  ```
14
14
 
15
15
  If you previously used the private GitHub Packages alpha, check `npm config get @shoalrun:registry`. Remove or replace any `@shoalrun:registry=https://npm.pkg.github.com` entry in your project or user `.npmrc`. You can explicitly select the public registry for the upgrade:
16
16
 
17
17
  ```sh
18
- npm install --save-dev --save-exact @shoalrun/cli@0.1.0-alpha.13 --@shoalrun:registry=https://registry.npmjs.org
18
+ npm install --save-dev --save-exact @shoalrun/cli@0.1.0-alpha.15 --@shoalrun:registry=https://registry.npmjs.org
19
19
  ```
20
20
 
21
21
  Commit the updated package manifest and lockfile together. Check that the lockfile resolves `@shoalrun/cli` from `registry.npmjs.org`. Keep any credentials needed by other private dependencies; Shoalrun itself no longer needs a package token.
@@ -99,6 +99,9 @@ not section redaction or host authorization.
99
99
  See [the runnable faceted-sites example](example-configs/faceted-sites/README.md)
100
100
  for main, developer, and regional sites built from one source directory.
101
101
 
102
+ For deployment-owned SKU selections, direct or grandfathered feature grants, and
103
+ branding supplied outside the shared repository, see [deployment profiles](DEPLOYMENT-PROFILES.md).
104
+
102
105
  ## Export content into an application
103
106
 
104
107
  Export pages from the same source into a portable directory for an application's
@@ -16,13 +16,17 @@ Full-page token counts use cl100k_base. Navigation section ID: project-updates.
16
16
 
17
17
  - [Content delivery, verification dates, and clearer references](https://www.shoalrun.com/changelog/2026-10-28.md) — ID: change.2026-10-28. changelog-entry; 1393 tokens. Reuse documentation through static bundles or REST, display technical verification dates, and find clearer API and layout guidance.
18
18
 
19
+ - [Readable selections and wider layouts](https://www.shoalrun.com/changelog/2026-10-30.md) — ID: change.2026-10-30. changelog-entry; 507 tokens. Keep selected text readable and let paragraphs and lists fill expanded layouts.
20
+
21
+ - [Customer documentation editions](https://www.shoalrun.com/changelog/2026-11-03.md) — ID: change.2026-11-03. changelog-entry; 779 tokens. Build branded customer editions from purchased and grandfathered features without storing customer profiles in the shared repository.
22
+
19
23
  - [Authoring snapshot previews and review reports](https://www.shoalrun.com/changelog/authoring-preview.md) — ID: change.authoring-preview. changelog-entry; 551 tokens. Snapshot previews with coverage and freshness reports.
20
24
 
21
25
  - [Agent authoring, search, and documentation answers](https://www.shoalrun.com/changelog/authoring-search.md) — ID: change.authoring-search. changelog-entry; 466 tokens. Reviewed agent drafts, search improvements, and answer context.
22
26
 
23
27
  - [Working-tree authoring tools](https://www.shoalrun.com/changelog/authoring-tools.md) — ID: change.authoring-tools. changelog-entry; 378 tokens. Project discovery and captured working-tree validation.
24
28
 
25
- - [Changelog](https://www.shoalrun.com/changelog.md) — ID: reference.changelog. reference; 1074 tokens. Compiler, CLI, and reader changes.
29
+ - [Changelog](https://www.shoalrun.com/changelog.md) — ID: reference.changelog. reference; 1202 tokens. Compiler, CLI, and reader changes.
26
30
 
27
31
  - [MCP hosting, analytics, and component improvements](https://www.shoalrun.com/changelog/2026-10-17-mcp-hosting.md) — ID: change.mcp-hosting. changelog-entry; 1145 tokens. MCP hosting, analytics, and shared component content.
28
32
 
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "sourceRepository": "https://github.com/shoalrun/docs",
4
- "sourceCommit": "fe92983e9f5710d9c2265972a2477448df4ae82d",
5
- "siteBuildId": "38aac8472fa1fad778acd5b5bdc30067474eca35755706d09f916914326ed2f0",
6
- "manifestDigest": "c99f0684ea93c4add58ddee1fd19dc82fa1acd9099d6cc2b4b226a0ef85302fe",
7
- "indexDigest": "f38899eb2e53af8600714002a64538fb436d3cf90fa8e1247d3e892ef703fc48",
8
- "packageIntegrity": "sha512-Qs6yv+QFvt6L5huiKFQfIT5FYexxbSokwUVUnxIrXUx2TtY/VTdG0EKAJJuCLLi6FcrYVbnI/mC9uWqJ9nflsw=="
4
+ "sourceCommit": "52c055cc160abbcb931bacbd8fcd209ce834cb26",
5
+ "siteBuildId": "c8c2a551d388148cf830e85bea3a58118a3a935dc91fa043ab2cd2a178ff9c6c",
6
+ "manifestDigest": "3c6af9a8161232cd4e824e72a427fb2b2a21963939a761a5f0f3557415dba580",
7
+ "indexDigest": "a6153f8a9a12541db3a6d1608c33da30ad329a6ad1653324f308dbd824bd9c10",
8
+ "packageIntegrity": "sha512-2Of7hhwylA4zWfoWIISM+0E63RzMhK9yI/NErSoNaUhquYQSD8iED1AWiUzqabnE0hg9rdtxCt82ws5+R9D3bQ=="
9
9
  }
@@ -0,0 +1,43 @@
1
+ ---
2
+ id: change.2026-10-30
3
+ title: Readable selections and wider layouts
4
+ summary: Keep selected text readable and let paragraphs and lists fill expanded layouts.
5
+ type: changelog-entry
6
+ area:
7
+ - appearance
8
+ - project
9
+ subarea:
10
+ - appearance-layouts
11
+ - project-releases
12
+ canonical: /changelog/2026-10-30
13
+ date: 2026-10-30
14
+ releaseVersion: 0.1.0-alpha.14
15
+ ---
16
+
17
+ # Readable selections and wider layouts
18
+
19
+ > Documentation index: [llms.min.txt](https://www.shoalrun.com/llms.min.txt) · Document manifest: [documents.json](https://www.shoalrun.com/documents.json)
20
+
21
+ 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)
22
+
23
+ Breadcrumbs: [Project](https://www.shoalrun.com/status.md) > Changelog > Readable selections and wider layouts
24
+
25
+ **Published: 2026-10-30.**
26
+
27
+ **Version: 0.1.0-alpha.14.**
28
+
29
+ Alpha.14 fixes selected-text contrast and paragraph widths in expanded layouts. Upgrade to CLI `0.1.0-alpha.14` and rebuild your site to receive both fixes. No configuration changes are needed.
30
+
31
+ ## Read selected text
32
+
33
+ Text selection now pairs the highlight background with its contrasting foreground. Previously, selection used the heading ink color, which could become difficult to read in dark mode. The selection pair passes the contrast checks across all six built-in palettes in light and dark modes.
34
+
35
+ ## Fill expanded layouts
36
+
37
+ Paragraphs and ordinary lists now fill their available containers in `wide`, `landing`, and `splash` layouts, including nested sections. Previously, these elements kept a 68-character reading limit even when the surrounding layout was wider.
38
+
39
+ Standard documentation pages retain that reading limit. Splash sections remain centered within the landing width, and hero text and other components keep their own limits. See [page layouts](https://www.shoalrun.com/styling/layouts.md).
40
+
41
+ ## HTML, Markdown, and agents
42
+
43
+ These fixes affect browser colors and line widths. Markdown content, page identities, and agent retrieval contracts stay the same. Selecting text and resizing the page need no JavaScript.
@@ -0,0 +1,56 @@
1
+ ---
2
+ id: change.2026-11-03
3
+ title: Customer documentation editions
4
+ summary: Build branded customer editions from purchased and grandfathered
5
+ features without storing customer profiles in the shared repository.
6
+ type: changelog-entry
7
+ area:
8
+ - publishing
9
+ - authoring
10
+ - project
11
+ subarea:
12
+ - publishing-configuration
13
+ - authoring-metadata
14
+ - project-releases
15
+ canonical: /changelog/2026-11-03
16
+ date: 2026-11-03
17
+ releaseVersion: 0.1.0-alpha.15
18
+ ---
19
+
20
+ # Customer documentation editions
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 > Customer documentation editions
27
+
28
+ **Published: 2026-11-03.**
29
+
30
+ **Version: 0.1.0-alpha.15.**
31
+
32
+ Alpha.15 lets independent deployments build customer documentation editions from one shared content project. Each deployment supplies its own profile for purchased products, grandfathered features, branding, and publication selection. Customer profiles can stay outside the shared repository.
33
+
34
+ Upgrade to CLI `0.1.0-alpha.15` and rebuild your site and content exports to use the feature. Existing projects keep their current behavior unless they enable deployment profiles. See [Build customer documentation editions](https://www.shoalrun.com/publish/deployment-profiles.md) for the complete workflow.
35
+
36
+ ## Select purchased and grandfathered features
37
+
38
+ A shared stock keeping unit (SKU) manifest maps explicit product revisions to feature IDs. Profiles combine those grants with direct feature entries, including features customers still own without a SKU. Historical revisions remain selectable; lifecycle labels do not revoke grants or automatically select older documentation versions.
39
+
40
+ Pages use feature requirements, and `<ForFeature>` selects sections inside shared pages. Selection removes excluded content from the build instead of hiding it in the browser. Deployment profiles can also apply supported titles, logos, favicons, theme choices, links, and publication subsets.
41
+
42
+ ## Require deliberate page classification
43
+
44
+ By default, pages without feature requirements remain shared. Enable `profiles.requireClassification: true` to require each eligible source page to explicitly declare `shared: true` or feature requirements. Inherited defaults do not satisfy the check, and missing classification fails before customer selection.
45
+
46
+ Shared pages can still contain feature-specific sections. Classification catches forgotten declarations; authors must still review the content and place requirements around product-specific instructions.
47
+
48
+ ## Validate each edition
49
+
50
+ Pass the same external profile to baseline capture, authoring validation, build, and export. Validation captures the profile and its declared assets; later changes make that evidence stale. The packaged authoring, setup, and recipe skills explain this workflow and how to check included and excluded content.
51
+
52
+ Profiled API builds support selected references and focused operation contracts. Full raw OpenAPI downloads, standalone schema embeds, and profiled chat-function builds are not supported. Use build/serve or snapshot validation/preview rather than `dev` for customer editions.
53
+
54
+ ## HTML, Markdown, and agents
55
+
56
+ The compiler applies feature selection to HTML, Markdown, search, discovery, and content exports. Agents receive the selected content rather than browser-hidden alternatives. Pages excluded by the chosen profile have not had their rendered content validated; check another profile that includes a changed page before accepting that edit. Customer access to the resulting edition remains the deployment's responsibility.
@@ -16,12 +16,28 @@ 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-29.**
19
+ **Updated: 2026-11-03.**
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-11-03
26
+
27
+ Version 0.1.0-alpha.15
28
+
29
+ [Customer documentation editions](https://www.shoalrun.com/changelog/2026-11-03.md)
30
+
31
+ Build branded customer editions from purchased and grandfathered features without storing customer profiles in the shared repository.
32
+
33
+ - 2026-10-30
34
+
35
+ Version 0.1.0-alpha.14
36
+
37
+ [Readable selections and wider layouts](https://www.shoalrun.com/changelog/2026-10-30.md)
38
+
39
+ Keep selected text readable and let paragraphs and lists fill expanded layouts.
40
+
25
41
  - 2026-10-28
26
42
 
27
43
  Version 0.1.0-alpha.13