@shoalrun/cli 0.1.0-alpha.14 → 0.1.0-alpha.16

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 (99) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/DEPLOYMENT-PROFILES.md +287 -0
  3. package/README.md +43 -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/assets/search-semantic.js +34 -0
  38. package/dist/api-publication-plan.d.ts +3 -0
  39. package/dist/api-publication-plan.js +30 -3
  40. package/dist/artifact-bundle.d.ts +2 -1
  41. package/dist/artifact-bundle.js +2 -2
  42. package/dist/authoring-api.d.ts +1 -1
  43. package/dist/authoring-api.js +1 -1
  44. package/dist/authoring-project-command.js +4 -2
  45. package/dist/authoring-project.d.ts +2 -0
  46. package/dist/authoring-project.js +4 -4
  47. package/dist/authoring-snapshot.d.ts +23 -4
  48. package/dist/authoring-snapshot.js +84 -12
  49. package/dist/authoring-validation-command.js +5 -3
  50. package/dist/authoring-validation.d.ts +2 -0
  51. package/dist/authoring-validation.js +38 -11
  52. package/dist/cli-discovery.d.ts +2 -2
  53. package/dist/cli-discovery.js +9 -9
  54. package/dist/cli.js +14 -8
  55. package/dist/compiler.d.ts +13 -0
  56. package/dist/compiler.js +27 -74
  57. package/dist/component-names.js +1 -1
  58. package/dist/component-transform.js +7 -1
  59. package/dist/config.d.ts +4 -1
  60. package/dist/config.js +19 -5
  61. package/dist/content-export-command.d.ts +13 -1
  62. package/dist/content-export-command.js +3 -2
  63. package/dist/content-export.d.ts +13 -0
  64. package/dist/content-export.js +5 -4
  65. package/dist/content-source.d.ts +1 -0
  66. package/dist/content-workspace.d.ts +13 -0
  67. package/dist/content-workspace.js +18 -1
  68. package/dist/deployment-profile.d.ts +52 -0
  69. package/dist/deployment-profile.js +277 -0
  70. package/dist/frontmatter.js +11 -4
  71. package/dist/index-build.js +7 -3
  72. package/dist/page-materialization.js +2 -0
  73. package/dist/page-renderer.d.ts +1 -0
  74. package/dist/page-renderer.js +3 -1
  75. package/dist/palettes.d.ts +1 -1
  76. package/dist/project-navigation.d.ts +5 -0
  77. package/dist/project-navigation.js +19 -0
  78. package/dist/publication-plan.d.ts +3 -1
  79. package/dist/publication-plan.js +23 -4
  80. package/dist/publication-render.d.ts +3 -2
  81. package/dist/publication-render.js +2 -2
  82. package/dist/retrieval.d.ts +4 -0
  83. package/dist/retrieval.js +28 -8
  84. package/dist/search-handler.js +11 -11
  85. package/dist/search-identifier.d.ts +2 -1
  86. package/dist/search-identifier.js +10 -4
  87. package/dist/search-results.d.ts +1 -1
  88. package/dist/search-results.js +39 -25
  89. package/dist/site-identity.d.ts +3 -0
  90. package/dist/site-identity.js +69 -0
  91. package/dist/vercel.d.ts +1 -0
  92. package/dist/vercel.js +3 -1
  93. package/package.json +2 -1
  94. package/skills/shoalrun-author/SKILL.md +5 -1
  95. package/skills/shoalrun-author/references/customer-editions.md +164 -0
  96. package/skills/shoalrun-recipes/SKILL.md +2 -0
  97. package/skills/shoalrun-setup/SKILL.md +4 -0
  98. package/styles/site.css +2 -0
  99. package/agent-docs/publish/content-export.sections/upgrade-an-existing-integration.md +0 -34
@@ -0,0 +1,69 @@
1
+ ---
2
+ id: guide.deployment-profiles
3
+ title: Build customer documentation editions
4
+ summary: Select purchased and grandfathered features with a deployment-owned
5
+ profile and apply customer branding.
6
+ type: how-to
7
+ area: publishing
8
+ subarea: publishing-configuration
9
+ canonical: /publish/deployment-profiles
10
+ ---
11
+
12
+ # Build customer documentation editions
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) > Publish and maintain > Customer editions
19
+
20
+ **Updated: 2026-11-03.**
21
+
22
+ Parent page: [Full Markdown page](/publish/deployment-profiles.md)
23
+
24
+ **Page reading path** — these links apply to the full page.
25
+
26
+ **Read first**
27
+
28
+ - [Build separate sites from shared content](https://www.shoalrun.com/publish/single-source-sites.md) — Understand how separate sites share authored content and configuration.
29
+
30
+ **Next steps**
31
+
32
+ - [Check working-tree documentation edits](https://www.shoalrun.com/author/workspace.md) — Review the selected edition using captured HTML and Markdown. (Status: experimental.)
33
+
34
+ Build a documentation edition for each customer from one shared content project. Keep product definitions in the shared repository and supply each customer's purchases, additional features, and branding through that deployment's own profile file. Customer profiles do not need to share a repository.
35
+
36
+ By default, you do not need to mark every page. Pages without feature requirements are shared across customer editions. For customer deployments that need a deliberate decision on each page, enable explicit classification. In either mode, add requirements to pages or sections that depend on specific features.
37
+
38
+ Available since `0.1.0-alpha.15`.
39
+
40
+ ## Build and inspect the edition
41
+
42
+ From the shared documentation project directory, build into a deployment-specific output:
43
+
44
+ ```sh
45
+ shoalrun build docs.config.yaml dist/customer \
46
+ --profile /run/config/docs-profile.yaml
47
+ ```
48
+
49
+ To export application content, pass the same profile to `shoalrun export`:
50
+
51
+ ```sh
52
+ shoalrun export docs.config.yaml --out dist/customer-content \
53
+ --profile /run/config/docs-profile.yaml
54
+ ```
55
+
56
+ If several publications are enabled, an export still needs its normal explicit publication selection. Grandfathered features and older instructions are independent: the feature grant selects functionality, while the [publication version](https://www.shoalrun.com/publish/publications.md) selects the release's instructions.
57
+
58
+ Use the profile when [validating documentation edits](https://www.shoalrun.com/author/workspace.md):
59
+
60
+ ```sh
61
+ shoalrun docs baseline --config docs.config.yaml \
62
+ --out .shoalrun/baseline.json --profile /run/config/docs-profile.yaml
63
+
64
+ # Edit your documentation, then validate the same edition.
65
+ shoalrun docs validate --config docs.config.yaml \
66
+ --baseline .shoalrun/baseline.json --profile /run/config/docs-profile.yaml
67
+ ```
68
+
69
+ Review and preview use the returned report. The snapshot captures the external profile and declared assets; later changes make the report stale. Treat reports and captured project directories as private build artifacts.
@@ -0,0 +1,46 @@
1
+ ---
2
+ id: guide.deployment-profiles
3
+ title: Build customer documentation editions
4
+ summary: Select purchased and grandfathered features with a deployment-owned
5
+ profile and apply customer branding.
6
+ type: how-to
7
+ area: publishing
8
+ subarea: publishing-configuration
9
+ canonical: /publish/deployment-profiles
10
+ ---
11
+
12
+ # Build customer documentation editions
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) > Publish and maintain > Customer editions
19
+
20
+ **Updated: 2026-11-03.**
21
+
22
+ Parent page: [Full Markdown page](/publish/deployment-profiles.md)
23
+
24
+ **Page reading path** — these links apply to the full page.
25
+
26
+ **Read first**
27
+
28
+ - [Build separate sites from shared content](https://www.shoalrun.com/publish/single-source-sites.md) — Understand how separate sites share authored content and configuration.
29
+
30
+ **Next steps**
31
+
32
+ - [Check working-tree documentation edits](https://www.shoalrun.com/author/workspace.md) — Review the selected edition using captured HTML and Markdown. (Status: experimental.)
33
+
34
+ Build a documentation edition for each customer from one shared content project. Keep product definitions in the shared repository and supply each customer's purchases, additional features, and branding through that deployment's own profile file. Customer profiles do not need to share a repository.
35
+
36
+ By default, you do not need to mark every page. Pages without feature requirements are shared across customer editions. For customer deployments that need a deliberate decision on each page, enable explicit classification. In either mode, add requirements to pages or sections that depend on specific features.
37
+
38
+ Available since `0.1.0-alpha.15`.
39
+
40
+ ## Check the result
41
+
42
+ Inspect the edition's sidebar, selected pages, and shared sections. Then inspect its Markdown, search indexes, `documents.json`, and exports for the same selections. An excluded feature's content should be absent from the output files, rather than hidden by browser controls.
43
+
44
+ A normal site build writes a private selection report at `.shoalrun/profile-selection.json`. It lists resolved features, grant sources, and inclusion decisions. Match its `buildId` to the output before treating it as a receipt for that output. The profile itself, its source filenames, and the report are not served as public metadata.
45
+
46
+ Affected pages excluded from the selected profile remain listed in validation coverage with a warning that their rendered content was not checked. Validate another profile that includes those pages before accepting their content changes.
@@ -0,0 +1,53 @@
1
+ ---
2
+ id: guide.deployment-profiles
3
+ title: Build customer documentation editions
4
+ summary: Select purchased and grandfathered features with a deployment-owned
5
+ profile and apply customer branding.
6
+ type: how-to
7
+ area: publishing
8
+ subarea: publishing-configuration
9
+ canonical: /publish/deployment-profiles
10
+ ---
11
+
12
+ # Build customer documentation editions
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) > Publish and maintain > Customer editions
19
+
20
+ **Updated: 2026-11-03.**
21
+
22
+ Parent page: [Full Markdown page](/publish/deployment-profiles.md)
23
+
24
+ **Page reading path** — these links apply to the full page.
25
+
26
+ **Read first**
27
+
28
+ - [Build separate sites from shared content](https://www.shoalrun.com/publish/single-source-sites.md) — Understand how separate sites share authored content and configuration.
29
+
30
+ **Next steps**
31
+
32
+ - [Check working-tree documentation edits](https://www.shoalrun.com/author/workspace.md) — Review the selected edition using captured HTML and Markdown. (Status: experimental.)
33
+
34
+ Build a documentation edition for each customer from one shared content project. Keep product definitions in the shared repository and supply each customer's purchases, additional features, and branding through that deployment's own profile file. Customer profiles do not need to share a repository.
35
+
36
+ By default, you do not need to mark every page. Pages without feature requirements are shared across customer editions. For customer deployments that need a deliberate decision on each page, enable explicit classification. In either mode, add requirements to pages or sections that depend on specific features.
37
+
38
+ Available since `0.1.0-alpha.15`.
39
+
40
+ ## Choose navigation labels
41
+
42
+ Navigation headings come from the shared project's ordinary navigation configuration. For example:
43
+
44
+ ```yaml title="Shared navigation (fragment)"
45
+ navigation:
46
+ - id: product-guides
47
+ label: Product guides
48
+ items:
49
+ - { id: analytics, doc: guide.analytics }
50
+ - { id: connectors, doc: guide.connectors }
51
+ ```
52
+
53
+ `Product guides` is authored text. You can name this group `Your products`, `Reference`, or another label that suits your readers. The framework does not supply the words “Your products.” Profile selection removes ineligible destinations from the group; it does not rename the group or infer purchases from navigation labels.
@@ -0,0 +1,46 @@
1
+ ---
2
+ id: guide.deployment-profiles
3
+ title: Build customer documentation editions
4
+ summary: Select purchased and grandfathered features with a deployment-owned
5
+ profile and apply customer branding.
6
+ type: how-to
7
+ area: publishing
8
+ subarea: publishing-configuration
9
+ canonical: /publish/deployment-profiles
10
+ ---
11
+
12
+ # Build customer documentation editions
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) > Publish and maintain > Customer editions
19
+
20
+ **Updated: 2026-11-03.**
21
+
22
+ Parent page: [Full Markdown page](/publish/deployment-profiles.md)
23
+
24
+ **Page reading path** — these links apply to the full page.
25
+
26
+ **Read first**
27
+
28
+ - [Build separate sites from shared content](https://www.shoalrun.com/publish/single-source-sites.md) — Understand how separate sites share authored content and configuration.
29
+
30
+ **Next steps**
31
+
32
+ - [Check working-tree documentation edits](https://www.shoalrun.com/author/workspace.md) — Review the selected edition using captured HTML and Markdown. (Status: experimental.)
33
+
34
+ Build a documentation edition for each customer from one shared content project. Keep product definitions in the shared repository and supply each customer's purchases, additional features, and branding through that deployment's own profile file. Customer profiles do not need to share a repository.
35
+
36
+ By default, you do not need to mark every page. Pages without feature requirements are shared across customer editions. For customer deployments that need a deliberate decision on each page, enable explicit classification. In either mode, add requirements to pages or sections that depend on specific features.
37
+
38
+ Available since `0.1.0-alpha.15`.
39
+
40
+ ## Current limits
41
+
42
+ Profiled API builds reject full OpenAPI source publication. Set `source.publish: false` and `source.focused: true` for focused operation downloads. Generated operations can declare `x-shoalrun-requires`; API definitions and explicit bindings also accept `requires`. Generated references respect inherited frontmatter requirements.
43
+
44
+ Operation embeds respect the selection. Standalone `<ApiSchema api="..." schema="..." />` embeds are not supported in profiled builds. Static `vercel build --profile FILE` is supported; profiled chat-function builds are not.
45
+
46
+ `dev` and checked-plan authoring do not yet accept deployment profiles. Use build/serve or captured validation/preview. Your deployment supplies the declared purchases and grants; Shoalrun does not query billing systems or expire entitlements. Protect private editions through host authentication.
@@ -0,0 +1,70 @@
1
+ ---
2
+ id: guide.deployment-profiles
3
+ title: Build customer documentation editions
4
+ summary: Select purchased and grandfathered features with a deployment-owned
5
+ profile and apply customer branding.
6
+ type: how-to
7
+ area: publishing
8
+ subarea: publishing-configuration
9
+ canonical: /publish/deployment-profiles
10
+ ---
11
+
12
+ # Build customer documentation editions
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) > Publish and maintain > Customer editions
19
+
20
+ **Updated: 2026-11-03.**
21
+
22
+ Parent page: [Full Markdown page](/publish/deployment-profiles.md)
23
+
24
+ **Page reading path** — these links apply to the full page.
25
+
26
+ **Read first**
27
+
28
+ - [Build separate sites from shared content](https://www.shoalrun.com/publish/single-source-sites.md) — Understand how separate sites share authored content and configuration.
29
+
30
+ **Next steps**
31
+
32
+ - [Check working-tree documentation edits](https://www.shoalrun.com/author/workspace.md) — Review the selected edition using captured HTML and Markdown. (Status: experimental.)
33
+
34
+ Build a documentation edition for each customer from one shared content project. Keep product definitions in the shared repository and supply each customer's purchases, additional features, and branding through that deployment's own profile file. Customer profiles do not need to share a repository.
35
+
36
+ By default, you do not need to mark every page. Pages without feature requirements are shared across customer editions. For customer deployments that need a deliberate decision on each page, enable explicit classification. In either mode, add requirements to pages or sections that depend on specific features.
37
+
38
+ Available since `0.1.0-alpha.15`.
39
+
40
+ ## Define the shared SKU manifest
41
+
42
+ Create `sku-manifest.yaml` beside `docs.config.yaml`:
43
+
44
+ ```yaml title="sku-manifest.yaml"
45
+ schemaVersion: 1
46
+ features:
47
+ analytics: { description: Analytics reports }
48
+ connectors: { description: External data connectors }
49
+ reports.classic: { lifecycle: deprecated }
50
+ skus:
51
+ professional:
52
+ revisions:
53
+ "2025-04":
54
+ features: [analytics, reports.classic]
55
+ "2026-10":
56
+ features: [analytics, connectors]
57
+ ```
58
+
59
+ Retain historical revisions unchanged when packaging changes. An existing customer can continue using the original revision, or receive an explicit feature grant. Marking a feature `deprecated` or `retired` does not remove its documentation grant.
60
+
61
+ Enable profile selection in the shared configuration:
62
+
63
+ ```yaml title="docs.config.yaml (fragment)"
64
+ profiles:
65
+ manifest: ./sku-manifest.yaml
66
+ required: true
67
+ pruneNavigation: true
68
+ ```
69
+
70
+ `required` defaults to `true`. A missing profile fails the build. `pruneNavigation` defaults to `false`; enabling it removes known excluded destinations and empty groups. Misspelled navigation targets remain errors.
@@ -0,0 +1,44 @@
1
+ ---
2
+ id: guide.deployment-profiles
3
+ title: Build customer documentation editions
4
+ summary: Select purchased and grandfathered features with a deployment-owned
5
+ profile and apply customer branding.
6
+ type: how-to
7
+ area: publishing
8
+ subarea: publishing-configuration
9
+ canonical: /publish/deployment-profiles
10
+ ---
11
+
12
+ # Build customer documentation editions
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) > Publish and maintain > Customer editions
19
+
20
+ **Updated: 2026-11-03.**
21
+
22
+ Parent page: [Full Markdown page](/publish/deployment-profiles.md)
23
+
24
+ **Page reading path** — these links apply to the full page.
25
+
26
+ **Read first**
27
+
28
+ - [Build separate sites from shared content](https://www.shoalrun.com/publish/single-source-sites.md) — Understand how separate sites share authored content and configuration.
29
+
30
+ **Next steps**
31
+
32
+ - [Check working-tree documentation edits](https://www.shoalrun.com/author/workspace.md) — Review the selected edition using captured HTML and Markdown. (Status: experimental.)
33
+
34
+ Build a documentation edition for each customer from one shared content project. Keep product definitions in the shared repository and supply each customer's purchases, additional features, and branding through that deployment's own profile file. Customer profiles do not need to share a repository.
35
+
36
+ By default, you do not need to mark every page. Pages without feature requirements are shared across customer editions. For customer deployments that need a deliberate decision on each page, enable explicit classification. In either mode, add requirements to pages or sections that depend on specific features.
37
+
38
+ Available since `0.1.0-alpha.15`.
39
+
40
+ ## HTML, Markdown, and agents
41
+
42
+ HTML displays the selected documentation with the deployment's title, logo, favicon, theme, and configured links. The masthead keeps the title as its accessible label. Markdown retains the selected instructions and links, without the site's branding controls. Feature selection happens during compilation and does not need browser JavaScript.
43
+
44
+ Agents reading search, discovery, or exported content receive the selected edition. They cannot retrieve excluded instructions from that edition's Markdown twin. Existing browser reader views still affect visibility only; use feature requirements for build-time omission.
@@ -0,0 +1,135 @@
1
+ ---
2
+ id: guide.deployment-profiles
3
+ title: Build customer documentation editions
4
+ summary: Select purchased and grandfathered features with a deployment-owned
5
+ profile and apply customer branding.
6
+ type: how-to
7
+ area: publishing
8
+ subarea: publishing-configuration
9
+ canonical: /publish/deployment-profiles
10
+ ---
11
+
12
+ # Build customer documentation editions
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) > Publish and maintain > Customer editions
19
+
20
+ **Updated: 2026-11-03.**
21
+
22
+ Parent page: [Full Markdown page](/publish/deployment-profiles.md)
23
+
24
+ **Page reading path** — these links apply to the full page.
25
+
26
+ **Read first**
27
+
28
+ - [Build separate sites from shared content](https://www.shoalrun.com/publish/single-source-sites.md) — Understand how separate sites share authored content and configuration.
29
+
30
+ **Next steps**
31
+
32
+ - [Check working-tree documentation edits](https://www.shoalrun.com/author/workspace.md) — Review the selected edition using captured HTML and Markdown. (Status: experimental.)
33
+
34
+ Build a documentation edition for each customer from one shared content project. Keep product definitions in the shared repository and supply each customer's purchases, additional features, and branding through that deployment's own profile file. Customer profiles do not need to share a repository.
35
+
36
+ By default, you do not need to mark every page. Pages without feature requirements are shared across customer editions. For customer deployments that need a deliberate decision on each page, enable explicit classification. In either mode, add requirements to pages or sections that depend on specific features.
37
+
38
+ Available since `0.1.0-alpha.15`.
39
+
40
+ ## Mark pages and shared sections
41
+
42
+ Pages declare feature requirements with `requires`. They do not name SKU IDs. The profile's SKU mappings and direct grants determine which features are available.
43
+
44
+ ### Unmarked pages are shared by default
45
+
46
+ With `profiles.requireClassification` omitted or `false`, a page with no authored or inherited `requires` is included in every eligible customer edition. Common setup, introductions, and shared troubleshooting can remain unmarked.
47
+
48
+ Shared content still has to pass the project's access, publication, language, and facet rules. A draft stays excluded from normal builds, and a page for an older version still needs that publication enabled.
49
+
50
+ The following table shows feature selection after those other rules pass. Grants can come from SKUs or direct feature entries:
51
+
52
+ | Page requirements | No granted features | Analytics only | Analytics and Connectors |
53
+ | ------------------------------------- | ------------------- | -------------- | ------------------------ |
54
+ | No authored or inherited requirements | Included | Included | Included |
55
+ | `allOf: [analytics]` | Omitted | Included | Included |
56
+ | `allOf: [analytics, connectors]` | Omitted | Omitted | Included |
57
+ | `anyOf: [analytics, connectors]` | Omitted | Included | Included |
58
+
59
+ **Forgetting a requirement makes a feature-specific page shared.** Shoalrun does not infer requirements from its folder, title, product metadata, or navigation label. Enable explicit classification to catch missing page declarations, and review feature-specific content before distributing an edition.
60
+
61
+ ### Require a deliberate page classification
62
+
63
+ Enable strict classification in the shared project configuration:
64
+
65
+ ```yaml title="docs.config.yaml (fragment)"
66
+ profiles:
67
+ manifest: ./sku-manifest.yaml
68
+ required: true
69
+ pruneNavigation: true
70
+ requireClassification: true
71
+ ```
72
+
73
+ Every public page in the shared project's enabled publications must now explicitly declare `shared: true` or `requires` in its own source frontmatter. An unclassified page fails the build with its source filename; it does not silently disappear. The check runs before customer feature and publication selection, so a later purchase or publication change cannot expose a previously unchecked page. Drafts and pages outside the shared project's enabled publications do not need classification for that build.
74
+
75
+ For common instructions, add this page-level declaration:
76
+
77
+ ```yaml title="Shared page frontmatter (fragment)"
78
+ shared: true
79
+ ```
80
+
81
+ For a product-specific page, use `requires` as shown below. Do not combine `shared: true` and `requires` on the same page. `shared: false` is invalid. `shared` must stay page-specific and cannot appear in frontmatter defaults or enforced settings. Inherited feature requirements still restrict content, but do not satisfy strict classification: each page needs its own declaration.
82
+
83
+ To migrate, enable the policy locally and classify the pages named in build errors after reviewing their content. Put the declaration in page templates to make the choice part of creating a page; avoid marking an entire collection shared without reviewing it.
84
+
85
+ This policy catches missing declarations. It cannot tell whether a declaration is correct or detect an ungated product-specific paragraph inside a shared page. It does not authenticate readers; the deployment still controls access to the resulting edition.
86
+
87
+ ### Restrict a feature-specific page
88
+
89
+ Add a requirement to each page that depends on specific functionality. This integration guide needs both features:
90
+
91
+ ```yaml title="Integration guide frontmatter (fragment)"
92
+ requires:
93
+ allOf: [analytics, connectors]
94
+ ```
95
+
96
+ Use `anyOf` when either feature is sufficient. If a requirement contains both clauses, both must pass. When the resolved requirements do not match the profile's grants, the whole page is omitted.
97
+
98
+ ### Restrict part of a shared page
99
+
100
+ A page classified `shared: true` can still contain product-specific sections. Use `<ForFeature>` around each section that depends on features. Its attributes contain whitespace-separated feature IDs:
101
+
102
+ ```mdx
103
+ These setup instructions apply to every customer.
104
+
105
+ <ForFeature allOf="analytics connectors">
106
+
107
+ ## Connect your reports <Anchor id="connect-reports" />
108
+
109
+ Import a dataset through a connector, then select it in your analytics report.
110
+
111
+ </ForFeature>
112
+
113
+ These troubleshooting tips apply to every customer.
114
+ ```
115
+
116
+ The page's content outside `<ForFeature>` stays shared. A block appears only when its requirements match; excluding a block does not exclude the rest of the page. If a page-level requirement excludes the whole page, a matching block inside it cannot restore that page.
117
+
118
+ Excluded blocks contribute no text, links, snippet expansions, API embeds, or images to the edition. Put links to optional pages inside matching conditions. A link remaining in selected prose must point to a selected destination.
119
+
120
+ ### Classify generated API references
121
+
122
+ Generated pages take an explicit classification from their API definition or OpenAPI operation. For an API whose generated references are shared, add `shared: true` beside `generateReferences`:
123
+
124
+ ```yaml title="Shared API definition (fragment)"
125
+ apis:
126
+ example:
127
+ shared: true
128
+ source:
129
+ kind: file
130
+ path: ./openapi.yaml
131
+ focused: true
132
+ generateReferences: true
133
+ ```
134
+
135
+ For a feature-specific API, use `requires` instead of `shared`. An individual OpenAPI operation can declare `x-shoalrun-shared: true` or `x-shoalrun-requires: { allOf: [analytics] }`. Its declaration satisfies classification for that generated page; API-level feature requirements still apply. Operations with differing requirements need their own declarations. General frontmatter defaults do not satisfy generated-page classification. Authored API reference pages follow the ordinary page rule.
@@ -0,0 +1,42 @@
1
+ ---
2
+ id: guide.deployment-profiles
3
+ title: Build customer documentation editions
4
+ summary: Select purchased and grandfathered features with a deployment-owned
5
+ profile and apply customer branding.
6
+ type: how-to
7
+ area: publishing
8
+ subarea: publishing-configuration
9
+ canonical: /publish/deployment-profiles
10
+ ---
11
+
12
+ # Build customer documentation editions
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) > Publish and maintain > Customer editions
19
+
20
+ **Updated: 2026-11-03.**
21
+
22
+ Parent page: [Full Markdown page](/publish/deployment-profiles.md)
23
+
24
+ Build a documentation edition for each customer from one shared content project. Keep product definitions in the shared repository and supply each customer's purchases, additional features, and branding through that deployment's own profile file. Customer profiles do not need to share a repository.
25
+
26
+ By default, you do not need to mark every page. Pages without feature requirements are shared across customer editions. For customer deployments that need a deliberate decision on each page, enable explicit classification. In either mode, add requirements to pages or sections that depend on specific features.
27
+
28
+ Available since `0.1.0-alpha.15`.
29
+
30
+ ## Related reading
31
+
32
+ ### Read first
33
+
34
+ - [Build separate sites from shared content](https://www.shoalrun.com/publish/single-source-sites.md) — Understand how separate sites share authored content and configuration.
35
+
36
+ ### Next steps
37
+
38
+ - [Check working-tree documentation edits](https://www.shoalrun.com/author/workspace.md) — Review the selected edition using captured HTML and Markdown. (Status: experimental.)
39
+
40
+ ### Reference while working
41
+
42
+ - [Share pages across documentation versions](https://www.shoalrun.com/publish/publications.md) — Select older product instructions independently of feature grants.
@@ -0,0 +1,68 @@
1
+ ---
2
+ id: guide.deployment-profiles
3
+ title: Build customer documentation editions
4
+ summary: Select purchased and grandfathered features with a deployment-owned
5
+ profile and apply customer branding.
6
+ type: how-to
7
+ area: publishing
8
+ subarea: publishing-configuration
9
+ canonical: /publish/deployment-profiles
10
+ ---
11
+
12
+ # Build customer documentation editions
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) > Publish and maintain > Customer editions
19
+
20
+ **Updated: 2026-11-03.**
21
+
22
+ Parent page: [Full Markdown page](/publish/deployment-profiles.md)
23
+
24
+ **Page reading path** — these links apply to the full page.
25
+
26
+ **Read first**
27
+
28
+ - [Build separate sites from shared content](https://www.shoalrun.com/publish/single-source-sites.md) — Understand how separate sites share authored content and configuration.
29
+
30
+ **Next steps**
31
+
32
+ - [Check working-tree documentation edits](https://www.shoalrun.com/author/workspace.md) — Review the selected edition using captured HTML and Markdown. (Status: experimental.)
33
+
34
+ Build a documentation edition for each customer from one shared content project. Keep product definitions in the shared repository and supply each customer's purchases, additional features, and branding through that deployment's own profile file. Customer profiles do not need to share a repository.
35
+
36
+ By default, you do not need to mark every page. Pages without feature requirements are shared across customer editions. For customer deployments that need a deliberate decision on each page, enable explicit classification. In either mode, add requirements to pages or sections that depend on specific features.
37
+
38
+ Available since `0.1.0-alpha.15`.
39
+
40
+ ## Supply the profile from the deployment
41
+
42
+ Mount or generate the customer profile outside the shared docs repository. For example, a deployment could provide `/run/config/docs-profile.yaml` and a `brand` directory beside it:
43
+
44
+ ```yaml title="Deployment-owned docs-profile.yaml"
45
+ schemaVersion: 1
46
+ skus:
47
+ - { id: professional, revision: "2026-10" }
48
+ features:
49
+ - reports.classic
50
+ site:
51
+ title: Example Partner documentation
52
+ origin: https://docs.partner.example
53
+ logo: ./brand/logo.svg
54
+ favicon: ./brand/icon.png
55
+ theme:
56
+ palette: kelp
57
+ publications:
58
+ enabled:
59
+ - { channel: production, version: current, language: en }
60
+ ```
61
+
62
+ This profile grants Analytics and Connectors through the SKU, plus Classic Reports through a direct grant. A customer with only grandfathered functionality can omit `skus` and declare `features: [reports.classic]`. No synthetic SKU is needed.
63
+
64
+ SKU and direct grants combine into a set. Unknown IDs and revisions fail validation. Declare `features: []` with no SKU grants for a shared-content-only edition; `null` is invalid. That edition still includes eligible shared pages and text outside feature blocks, while pages and blocks requiring a feature are omitted. A missing required profile fails the build rather than selecting this shared-only behavior.
65
+
66
+ Profile logo and favicon paths resolve from the profile directory and must stay inside it. Shared configuration paths retain their own origins. Shoalrun reads the chosen profile and declared assets without discovering other customers' files in that deployment directory.
67
+
68
+ Profiles accept selected `site`, `theme`, and existing snippet `variables` settings. They can narrow `publications.enabled` to combinations already enabled by the shared project. They cannot replace content sources, register plugins, change access policy, or override navigation. Profile CSS, custom fonts, and file-backed palettes are not supported.