@contractspec/bundle.library 3.8.12 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/.turbo/turbo-build.log +290 -282
  2. package/CHANGELOG.md +46 -0
  3. package/dist/application/index.js +11 -11
  4. package/dist/application/mcp/cliMcp.js +6 -6
  5. package/dist/application/mcp/cliMcp.onboarding.d.ts +4 -0
  6. package/dist/application/mcp/cliMcp.onboarding.js +2 -0
  7. package/dist/application/mcp/cliMcp.test.d.ts +1 -0
  8. package/dist/application/mcp/contractsMcp.js +2 -2
  9. package/dist/application/mcp/contractsMcp.test.d.ts +1 -0
  10. package/dist/application/mcp/contractsMcpAdoptionTools.d.ts +3 -0
  11. package/dist/application/mcp/contractsMcpAdoptionTools.js +2 -0
  12. package/dist/application/mcp/contractsMcpResources.js +1 -1
  13. package/dist/application/mcp/contractsMcpTools.js +1 -1
  14. package/dist/application/mcp/contractsMcpTypes.d.ts +16 -0
  15. package/dist/application/mcp/index.js +11 -11
  16. package/dist/components/docs/DocsIndexPage.js +1 -1
  17. package/dist/components/docs/docsManifest.js +1 -1
  18. package/dist/components/docs/examples/DocsExamplesPage.js +1 -17
  19. package/dist/components/docs/examples/ExampleShowcasePage.d.ts +1 -1
  20. package/dist/components/docs/examples/ExampleShowcasePage.js +2 -17
  21. package/dist/components/docs/examples/exampleShowcaseData.d.ts +2 -2
  22. package/dist/components/docs/examples/exampleShowcaseData.js +2 -17
  23. package/dist/components/docs/examples/exampleShowcaseData.test.d.ts +1 -0
  24. package/dist/components/docs/examples/index.js +2 -17
  25. package/dist/components/docs/getting-started/CLIPage.js +5 -4
  26. package/dist/components/docs/getting-started/DataViewTutorialPage.js +44 -67
  27. package/dist/components/docs/getting-started/StartHerePage.js +4 -2
  28. package/dist/components/docs/getting-started/index.js +56 -76
  29. package/dist/components/docs/guides/GuideConnectInRepoPage.js +29 -4
  30. package/dist/components/docs/guides/GuideHostBuilderWorkbenchPage.js +21 -6
  31. package/dist/components/docs/guides/GuideReleaseCapsulesPage.d.ts +1 -0
  32. package/dist/components/docs/guides/GuideReleaseCapsulesPage.js +16 -0
  33. package/dist/components/docs/guides/GuidesIndexPage.js +1 -1
  34. package/dist/components/docs/guides/index.d.ts +1 -0
  35. package/dist/components/docs/guides/index.js +93 -39
  36. package/dist/components/docs/index.js +572 -421
  37. package/dist/components/docs/libraries/LibrariesContractsPage.js +43 -18
  38. package/dist/components/docs/libraries/LibrariesDesignSystemPage.js +43 -31
  39. package/dist/components/docs/libraries/LibrariesOverviewPage.js +1 -1
  40. package/dist/components/docs/libraries/LibrariesUIKitPage.js +42 -16
  41. package/dist/components/docs/libraries/LibrariesUIKitWebPage.d.ts +1 -0
  42. package/dist/components/docs/libraries/LibrariesUIKitWebPage.js +47 -0
  43. package/dist/components/docs/libraries/index.d.ts +1 -0
  44. package/dist/components/docs/libraries/index.js +221 -113
  45. package/dist/components/docs/specs/SpecsBuilderControlPlanePage.js +18 -3
  46. package/dist/components/docs/specs/SpecsConnectPage.js +4 -2
  47. package/dist/components/docs/specs/SpecsDataViewsPage.js +39 -32
  48. package/dist/components/docs/specs/index.js +65 -41
  49. package/dist/index.js +583 -432
  50. package/dist/node/application/index.js +11 -11
  51. package/dist/node/application/mcp/cliMcp.js +6 -6
  52. package/dist/node/application/mcp/cliMcp.onboarding.js +1 -0
  53. package/dist/node/application/mcp/contractsMcp.js +2 -2
  54. package/dist/node/application/mcp/contractsMcpAdoptionTools.js +1 -0
  55. package/dist/node/application/mcp/contractsMcpResources.js +1 -1
  56. package/dist/node/application/mcp/contractsMcpTools.js +1 -1
  57. package/dist/node/application/mcp/index.js +11 -11
  58. package/dist/node/components/docs/DocsIndexPage.js +1 -1
  59. package/dist/node/components/docs/docsManifest.js +1 -1
  60. package/dist/node/components/docs/examples/DocsExamplesPage.js +1 -17
  61. package/dist/node/components/docs/examples/ExampleShowcasePage.js +2 -17
  62. package/dist/node/components/docs/examples/exampleShowcaseData.js +2 -17
  63. package/dist/node/components/docs/examples/index.js +2 -17
  64. package/dist/node/components/docs/getting-started/CLIPage.js +5 -4
  65. package/dist/node/components/docs/getting-started/DataViewTutorialPage.js +44 -67
  66. package/dist/node/components/docs/getting-started/StartHerePage.js +4 -2
  67. package/dist/node/components/docs/getting-started/index.js +56 -76
  68. package/dist/node/components/docs/guides/GuideConnectInRepoPage.js +29 -4
  69. package/dist/node/components/docs/guides/GuideHostBuilderWorkbenchPage.js +21 -6
  70. package/dist/node/components/docs/guides/GuideReleaseCapsulesPage.js +15 -0
  71. package/dist/node/components/docs/guides/GuidesIndexPage.js +1 -1
  72. package/dist/node/components/docs/guides/index.js +93 -39
  73. package/dist/node/components/docs/index.js +572 -421
  74. package/dist/node/components/docs/libraries/LibrariesContractsPage.js +43 -18
  75. package/dist/node/components/docs/libraries/LibrariesDesignSystemPage.js +43 -31
  76. package/dist/node/components/docs/libraries/LibrariesOverviewPage.js +1 -1
  77. package/dist/node/components/docs/libraries/LibrariesUIKitPage.js +42 -16
  78. package/dist/node/components/docs/libraries/LibrariesUIKitWebPage.js +46 -0
  79. package/dist/node/components/docs/libraries/index.js +221 -113
  80. package/dist/node/components/docs/specs/SpecsBuilderControlPlanePage.js +18 -3
  81. package/dist/node/components/docs/specs/SpecsConnectPage.js +4 -2
  82. package/dist/node/components/docs/specs/SpecsDataViewsPage.js +39 -32
  83. package/dist/node/components/docs/specs/index.js +65 -41
  84. package/dist/node/index.js +583 -432
  85. package/package.json +65 -16
  86. package/src/application/mcp/cliMcp.onboarding.ts +297 -0
  87. package/src/application/mcp/cliMcp.test.ts +99 -0
  88. package/src/application/mcp/cliMcp.ts +30 -3
  89. package/src/application/mcp/contractsMcp.test.ts +65 -0
  90. package/src/application/mcp/contractsMcpAdoptionTools.ts +131 -0
  91. package/src/application/mcp/contractsMcpResources.ts +49 -0
  92. package/src/application/mcp/contractsMcpTools.ts +2 -0
  93. package/src/application/mcp/contractsMcpTypes.ts +16 -0
  94. package/src/components/docs/docsManifest.ts +12 -0
  95. package/src/components/docs/examples/DocsExamplesPage.tsx +6 -14
  96. package/src/components/docs/examples/ExampleShowcasePage.tsx +22 -18
  97. package/src/components/docs/examples/exampleShowcaseData.test.ts +22 -0
  98. package/src/components/docs/examples/exampleShowcaseData.ts +75 -50
  99. package/src/components/docs/generated/docs-index._common.json +2008 -1691
  100. package/src/components/docs/generated/docs-index.agent-console.json +377 -377
  101. package/src/components/docs/generated/docs-index.ai-chat-assistant.json +17 -17
  102. package/src/components/docs/generated/docs-index.ai-chat.json +105 -105
  103. package/src/components/docs/generated/docs-index.ai-support-bot.json +9 -9
  104. package/src/components/docs/generated/docs-index.analytics-dashboard.json +169 -169
  105. package/src/components/docs/generated/docs-index.app-config.json +137 -137
  106. package/src/components/docs/generated/docs-index.artisan-knowledge-product.json +17 -17
  107. package/src/components/docs/generated/docs-index.artisan-payments-stripe.json +33 -33
  108. package/src/components/docs/generated/docs-index.audit-trail.json +49 -49
  109. package/src/components/docs/generated/docs-index.calendar-google.json +9 -9
  110. package/src/components/docs/generated/docs-index.content-generation.json +9 -9
  111. package/src/components/docs/generated/docs-index.control-plane.json +17 -17
  112. package/src/components/docs/generated/docs-index.crm-pipeline.json +161 -161
  113. package/src/components/docs/generated/docs-index.data-grid-showcase.json +25 -17
  114. package/src/components/docs/generated/docs-index.defineExample.json +9 -9
  115. package/src/components/docs/generated/docs-index.email-gmail.json +9 -9
  116. package/src/components/docs/generated/docs-index.feature-flags.json +217 -217
  117. package/src/components/docs/generated/docs-index.files.json +177 -177
  118. package/src/components/docs/generated/docs-index.generated.ts +20 -20
  119. package/src/components/docs/generated/docs-index.harness-lab.json +9 -9
  120. package/src/components/docs/generated/docs-index.health.json +97 -97
  121. package/src/components/docs/generated/docs-index.identity-rbac.json +313 -313
  122. package/src/components/docs/generated/docs-index.in-app-docs.json +9 -9
  123. package/src/components/docs/generated/docs-index.integration-hub.json +265 -265
  124. package/src/components/docs/generated/docs-index.integration-posthog.json +9 -9
  125. package/src/components/docs/generated/docs-index.integration-stripe.json +9 -9
  126. package/src/components/docs/generated/docs-index.integration-supabase.json +9 -9
  127. package/src/components/docs/generated/docs-index.jobs.json +137 -137
  128. package/src/components/docs/generated/docs-index.kb-update-pipeline.json +129 -129
  129. package/src/components/docs/generated/docs-index.knowledge-canon.json +9 -9
  130. package/src/components/docs/generated/docs-index.learning-journey-ambient-coach.json +9 -9
  131. package/src/components/docs/generated/docs-index.learning-journey-crm-onboarding.json +49 -49
  132. package/src/components/docs/generated/docs-index.learning-journey-duo-drills.json +9 -9
  133. package/src/components/docs/generated/docs-index.learning-journey-platform-tour.json +49 -49
  134. package/src/components/docs/generated/docs-index.learning-journey-quest-challenges.json +9 -9
  135. package/src/components/docs/generated/docs-index.learning-journey-registry.json +33 -33
  136. package/src/components/docs/generated/docs-index.learning-journey-studio-onboarding.json +49 -49
  137. package/src/components/docs/generated/docs-index.learning-journey-ui-coaching.json +9 -9
  138. package/src/components/docs/generated/docs-index.learning-journey-ui-gamified.json +9 -9
  139. package/src/components/docs/generated/docs-index.learning-journey-ui-onboarding.json +9 -9
  140. package/src/components/docs/generated/docs-index.learning-journey-ui-shared.json +9 -9
  141. package/src/components/docs/generated/docs-index.learning-journey.json +241 -217
  142. package/src/components/docs/generated/docs-index.learning-patterns.json +9 -9
  143. package/src/components/docs/generated/docs-index.lifecycle-cli.json +9 -9
  144. package/src/components/docs/generated/docs-index.lifecycle-dashboard.json +9 -9
  145. package/src/components/docs/generated/docs-index.locale-jurisdiction-gate.json +65 -57
  146. package/src/components/docs/generated/docs-index.manifest.json +432 -432
  147. package/src/components/docs/generated/docs-index.marketplace.json +337 -337
  148. package/src/components/docs/generated/docs-index.meeting-recorder-providers.json +9 -9
  149. package/src/components/docs/generated/docs-index.meeting-recorder.json +49 -49
  150. package/src/components/docs/generated/docs-index.messaging-agent-actions.json +17 -17
  151. package/src/components/docs/generated/docs-index.metrics.json +201 -201
  152. package/src/components/docs/generated/docs-index.minimal.json +17 -17
  153. package/src/components/docs/generated/docs-index.mobile-demo-tasks.json +33 -33
  154. package/src/components/docs/generated/docs-index.notifications.json +65 -65
  155. package/src/components/docs/generated/docs-index.openbanking-powens.json +9 -9
  156. package/src/components/docs/generated/docs-index.openbanking.json +65 -65
  157. package/src/components/docs/generated/docs-index.opencode-cli.json +17 -17
  158. package/src/components/docs/generated/docs-index.personalization.json +9 -9
  159. package/src/components/docs/generated/docs-index.platform-acp.json +137 -137
  160. package/src/components/docs/generated/docs-index.platform-agent.json +201 -185
  161. package/src/components/docs/generated/docs-index.platform-context.json +121 -105
  162. package/src/components/docs/generated/docs-index.platform-control-plane.json +321 -321
  163. package/src/components/docs/generated/docs-index.platform-database.json +89 -89
  164. package/src/components/docs/generated/docs-index.platform-docs.json +161 -153
  165. package/src/components/docs/generated/docs-index.platform-harness.json +177 -177
  166. package/src/components/docs/generated/docs-index.platform-integrations.json +329 -329
  167. package/src/components/docs/generated/docs-index.platform-knowledge.json +57 -57
  168. package/src/components/docs/generated/docs-index.platform-provider-ranking.json +217 -185
  169. package/src/components/docs/generated/docs-index.pocket-family-office.json +129 -129
  170. package/src/components/docs/generated/docs-index.policy-safe-knowledge-assistant.json +9 -9
  171. package/src/components/docs/generated/docs-index.product-intent.json +9 -9
  172. package/src/components/docs/generated/docs-index.project-management-sync.json +9 -9
  173. package/src/components/docs/generated/docs-index.saas-boilerplate.json +209 -209
  174. package/src/components/docs/generated/docs-index.service-business-os.json +193 -193
  175. package/src/components/docs/generated/docs-index.team-hub.json +185 -185
  176. package/src/components/docs/generated/docs-index.unknown.json +521 -521
  177. package/src/components/docs/generated/docs-index.versioned-knowledge-base.json +81 -81
  178. package/src/components/docs/generated/docs-index.video-api-showcase.json +33 -33
  179. package/src/components/docs/generated/docs-index.video-docs-terminal.json +9 -9
  180. package/src/components/docs/generated/docs-index.video-marketing-clip.json +9 -9
  181. package/src/components/docs/generated/docs-index.visualization-showcase.json +17 -17
  182. package/src/components/docs/generated/docs-index.voice-providers.json +9 -9
  183. package/src/components/docs/generated/docs-index.wealth-snapshot.json +153 -153
  184. package/src/components/docs/generated/docs-index.workflow-system.json +433 -433
  185. package/src/components/docs/generated/docs-index.workspace-cli.json +9 -9
  186. package/src/components/docs/getting-started/CLIPage.tsx +10 -2
  187. package/src/components/docs/getting-started/DataViewTutorialPage.tsx +63 -70
  188. package/src/components/docs/getting-started/StartHerePage.tsx +10 -9
  189. package/src/components/docs/guides/GuideConnectInRepoPage.tsx +52 -3
  190. package/src/components/docs/guides/GuideHostBuilderWorkbenchPage.tsx +55 -6
  191. package/src/components/docs/guides/GuideReleaseCapsulesPage.tsx +147 -0
  192. package/src/components/docs/guides/GuidesIndexPage.tsx +7 -0
  193. package/src/components/docs/guides/index.ts +1 -0
  194. package/src/components/docs/libraries/LibrariesContractsPage.tsx +72 -27
  195. package/src/components/docs/libraries/LibrariesDesignSystemPage.tsx +67 -61
  196. package/src/components/docs/libraries/LibrariesOverviewPage.tsx +7 -1
  197. package/src/components/docs/libraries/LibrariesUIKitPage.tsx +63 -25
  198. package/src/components/docs/libraries/LibrariesUIKitWebPage.tsx +115 -0
  199. package/src/components/docs/libraries/index.ts +1 -0
  200. package/src/components/docs/specs/SpecsBuilderControlPlanePage.tsx +58 -3
  201. package/src/components/docs/specs/SpecsConnectPage.tsx +30 -0
  202. package/src/components/docs/specs/SpecsDataViewsPage.tsx +63 -42
@@ -1,10 +1,10 @@
1
1
  [
2
- {
3
- "id": "workspace-cli/workspace-cli",
4
- "title": "workspace-cli",
5
- "summary": "Core CLI operations for managing ContractSpec workspaces\n- **Type**: feature\n- **Version**: 1.0.0\n- **Stability**: stable\n- **Owners**: @lssm/core\n- **Tags**: cli, core\n- **File**: `packages/bundles/workspace/src/contracts/features/cli.feature.ts`",
6
- "route": "/docs/reference/workspace-cli/workspace-cli",
7
- "source": "generated",
8
- "contentPath": "workspace-cli/workspace-cli.md"
9
- }
10
- ]
2
+ {
3
+ "id": "workspace-cli/workspace-cli",
4
+ "title": "workspace-cli",
5
+ "summary": "Core CLI operations for managing ContractSpec workspaces\n- **Type**: feature\n- **Version**: 1.0.0\n- **Stability**: stable\n- **Owners**: @lssm/core\n- **Tags**: cli, core\n- **File**: `packages/bundles/workspace/src/contracts/features/cli.feature.ts`",
6
+ "route": "/docs/reference/workspace-cli/workspace-cli",
7
+ "source": "generated",
8
+ "contentPath": "workspace-cli/workspace-cli.md"
9
+ }
10
+ ]
@@ -4,6 +4,13 @@ import { ChevronRight } from 'lucide-react';
4
4
 
5
5
  export function CLIPage() {
6
6
  const commands = [
7
+ {
8
+ name: 'onboard',
9
+ description:
10
+ 'Primary OSS onboarding flow that recommends tracks, examples, and repo-local guides',
11
+ usage:
12
+ 'contractspec onboard [track...] [--example <key>] [--dry-run] [--json]',
13
+ },
7
14
  {
8
15
  name: 'create',
9
16
  description: 'Interactive wizard to create contract specifications',
@@ -73,16 +80,17 @@ export function CLIPage() {
73
80
  <CodeBlock
74
81
  language="bash"
75
82
  code={`# Initialize project
83
+ contractspec onboard
76
84
  bunx contractspec init
77
85
 
78
86
  # Create a spec
79
87
  contractspec create --type operation
80
88
 
81
89
  # Generate code
82
- contractspec build src/contracts/mySpec.ts
90
+ contractspec generate
83
91
 
84
92
  # Validate
85
- contractspec validate src/contracts/mySpec.ts`}
93
+ contractspec validate`}
86
94
  />
87
95
  </div>
88
96
 
@@ -2,6 +2,54 @@ import { CodeBlock } from '@contractspec/lib.design-system';
2
2
  import Link from '@contractspec/lib.ui-link';
3
3
  import { ChevronRight } from 'lucide-react';
4
4
 
5
+ const DATAVIEW_TUTORIAL_EXAMPLE = `import { defineDataView } from '@contractspec/lib.contracts-spec/data-views';
6
+ import { ListTransactions } from './list-transactions';
7
+
8
+ export const TransactionHistory = defineDataView({
9
+ meta: {
10
+ key: 'billing.transactionHistory',
11
+ version: '1.0.0',
12
+ entity: 'transaction',
13
+ title: 'Transaction History',
14
+ description: 'Customer payment history',
15
+ domain: 'billing',
16
+ owners: ['team-billing'],
17
+ tags: ['payments'],
18
+ stability: 'stable',
19
+ },
20
+ source: {
21
+ primary: {
22
+ key: ListTransactions.meta.key,
23
+ version: ListTransactions.meta.version,
24
+ },
25
+ },
26
+ view: {
27
+ kind: 'table',
28
+ executionMode: 'client',
29
+ selection: 'multiple',
30
+ columnVisibility: true,
31
+ columnResizing: true,
32
+ columnPinning: true,
33
+ rowExpansion: {
34
+ fields: ['notes', 'renewalDate', 'lastActivityAt'],
35
+ },
36
+ initialState: {
37
+ pageSize: 4,
38
+ hiddenColumns: ['notes'],
39
+ pinnedColumns: {
40
+ left: ['account'],
41
+ },
42
+ sorting: [{ field: 'arr', desc: true }],
43
+ },
44
+ fields: [
45
+ { key: 'account', label: 'Account', dataPath: 'account', sortable: true },
46
+ { key: 'owner', label: 'Owner', dataPath: 'owner', sortable: true },
47
+ { key: 'status', label: 'Status', dataPath: 'status', sortable: true },
48
+ { key: 'notes', label: 'Notes', dataPath: 'notes' },
49
+ ],
50
+ },
51
+ });`;
52
+
5
53
  export function DataViewTutorialPage() {
6
54
  return (
7
55
  <div className="space-y-8">
@@ -46,77 +94,18 @@ export const ListTransactions = defineQuery({
46
94
  <CodeBlock
47
95
  language="typescript"
48
96
  filename="lib/specs/billing/transaction-history.data-view.ts"
49
- code={`import { defineDataView } from '@contractspec/lib.contracts-spec';
50
- import { ListTransactions } from './list-transactions';
51
-
52
- export const TransactionHistory = defineDataView({
53
- meta: {
54
- key: 'billing.transactionHistory',
55
- version: '1.0.0',
56
- entity: 'transaction',
57
- description: 'Customer payment history',
58
- goal: 'Help customers track spending',
59
- context: 'Account dashboard',
60
- owners: ['team-billing'],
61
- stability: 'stable',
62
- tags: ['payments'],
63
- },
64
- source: {
65
- primary: ListTransactions,
66
- },
67
- view: {
68
- kind: 'list',
69
- fields: [
70
- {
71
- key: 'date',
72
- label: 'Date',
73
- dataPath: 'createdAt',
74
- format: 'date',
75
- sortable: true
76
- },
77
- {
78
- key: 'description',
79
- label: 'Description',
80
- dataPath: 'description'
81
- },
82
- {
83
- key: 'amount',
84
- label: 'Amount',
85
- dataPath: 'amount',
86
- format: 'currency',
87
- sortable: true
88
- },
89
- {
90
- key: 'status',
91
- label: 'Status',
92
- dataPath: 'status',
93
- format: 'badge'
94
- },
95
- ],
96
- filters: [
97
- {
98
- key: 'status',
99
- label: 'Status',
100
- field: 'status',
101
- type: 'enum',
102
- options: [
103
- { value: 'succeeded', label: 'Paid' },
104
- { value: 'pending', label: 'Pending' },
105
- { value: 'failed', label: 'Failed' },
106
- ],
107
- },
108
- {
109
- key: 'dateRange',
110
- label: 'Date Range',
111
- field: 'createdAt',
112
- type: 'dateRange',
113
- },
114
- ],
115
- defaultSort: { field: 'date', direction: 'desc' },
116
- pagination: { pageSize: 25 },
117
- },
118
- });`}
97
+ code={DATAVIEW_TUTORIAL_EXAMPLE}
119
98
  />
99
+ <p className="text-muted-foreground text-sm">
100
+ The live version of this pattern is available in the canonical{' '}
101
+ <Link
102
+ href="/docs/examples/data-grid-showcase"
103
+ className="text-[color:var(--rust)] underline underline-offset-4"
104
+ >
105
+ Data Grid Showcase
106
+ </Link>
107
+ .
108
+ </p>
120
109
  </div>
121
110
 
122
111
  <div className="space-y-4">
@@ -161,6 +150,10 @@ export function TransactionsPage() {
161
150
  <ul className="space-y-2 text-muted-foreground text-sm">
162
151
  <li>Same spec renders on web (React) and mobile (React Native)</li>
163
152
  <li>Filters, sorting, and pagination handled automatically</li>
153
+ <li>
154
+ Column visibility, pinning, resizing, and row expansion stay
155
+ contract-driven
156
+ </li>
164
157
  <li>Format rules (currency, dates, badges) applied consistently</li>
165
158
  <li>Export to CSV/PDF using the same spec</li>
166
159
  <li>A/B test different layouts without touching the backend</li>
@@ -19,12 +19,13 @@ export function StartHerePage() {
19
19
  </div>
20
20
 
21
21
  <div className="space-y-3">
22
- <h2 className="font-bold text-2xl">Add core libraries</h2>
23
- <InstallCommand
24
- package={[
25
- '@contractspec/lib.contracts-spec',
26
- '@contractspec/lib.schema',
27
- ]}
22
+ <h2 className="font-bold text-2xl">Generate repo-local guidance</h2>
23
+ <CodeBlock
24
+ language="bash"
25
+ filename="start-here-onboard"
26
+ code={`contractspec onboard
27
+ # optional focused track
28
+ contractspec onboard knowledge --example knowledge-canon`}
28
29
  />
29
30
  </div>
30
31
 
@@ -38,7 +39,7 @@ export function StartHerePage() {
38
39
  </div>
39
40
 
40
41
  <div className="space-y-3">
41
- <h2 className="font-bold text-2xl">Create your first contract</h2>
42
+ <h2 className="font-bold text-2xl">Author your first contract</h2>
42
43
  <CodeBlock
43
44
  language="bash"
44
45
  filename="start-here-create"
@@ -51,8 +52,8 @@ export function StartHerePage() {
51
52
  <CodeBlock
52
53
  language="bash"
53
54
  filename="start-here-build"
54
- code={`contractspec build src/contracts/mySpec.ts
55
- contractspec validate src/contracts/mySpec.ts`}
55
+ code={`contractspec generate
56
+ contractspec validate`}
56
57
  />
57
58
  </div>
58
59
  </div>
@@ -8,6 +8,8 @@ const artifactPaths = [
8
8
  '.contractspec/connect/patch-verdict.json',
9
9
  '.contractspec/connect/audit.ndjson',
10
10
  '.contractspec/connect/decisions/<decisionId>/',
11
+ '.contractspec/adoption/catalog.json',
12
+ '.contractspec/adoption/overrides.json',
11
13
  ];
12
14
 
13
15
  export function GuideConnectInRepoPage() {
@@ -26,6 +28,7 @@ export function GuideConnectInRepoPage() {
26
28
  <h2 className="font-bold text-2xl">What you&apos;ll build</h2>
27
29
  <ul className="space-y-2 text-muted-foreground text-sm">
28
30
  <li>A workspace-level Connect config in `.contractsrc.json`.</li>
31
+ <li>A reuse-first adoption check before new implementation work.</li>
29
32
  <li>A context and plan flow for one task.</li>
30
33
  <li>
31
34
  Verified file and shell mutations with local review/replay evidence.
@@ -69,6 +72,28 @@ export function GuideConnectInRepoPage() {
69
72
  "allow": ["bun run typecheck"],
70
73
  "review": ["git push"],
71
74
  "deny": ["git reset --hard", "git push --force", "rm -rf"]
75
+ },
76
+ "adoption": {
77
+ "enabled": true,
78
+ "catalog": {
79
+ "indexPath": ".contractspec/adoption/catalog.json",
80
+ "overrideManifestPath": ".contractspec/adoption/overrides.json"
81
+ },
82
+ "workspaceScan": {
83
+ "include": ["packages/**", "docs/**"],
84
+ "exclude": ["generated/**", "dist/**"]
85
+ },
86
+ "families": {
87
+ "contracts": true,
88
+ "runtime": true,
89
+ "sharedLibs": true
90
+ },
91
+ "thresholds": {
92
+ "workspaceReuse": "permit",
93
+ "contractspecReuse": "permit",
94
+ "ambiguous": "require_review",
95
+ "newImplementation": "require_review"
96
+ }
72
97
  }
73
98
  }
74
99
  }`}
@@ -94,7 +119,31 @@ export function GuideConnectInRepoPage() {
94
119
 
95
120
  <div className="space-y-3">
96
121
  <h2 className="font-bold text-2xl">
97
- 3) Project context and compile a plan
122
+ 3) Mirror the adoption catalog and resolve reuse first
123
+ </h2>
124
+ <p className="text-muted-foreground text-sm">
125
+ Connect adoption is the reuse-first layer for authoring. Mirror the
126
+ local catalog, then resolve the best existing surface for the family
127
+ you are about to touch before you scaffold or invent anything new.
128
+ </p>
129
+ <CodeBlock
130
+ language="bash"
131
+ filename="connect-adoption"
132
+ code={`contractspec connect adoption sync --json
133
+
134
+ printf '{"goal":"Prefer an existing release helper before adding a new one"}' | \\
135
+ contractspec connect adoption resolve --family sharedLibs --stdin --json`}
136
+ />
137
+ <p className="text-muted-foreground text-sm">
138
+ Expected output: a mirrored local adoption catalog plus a reuse
139
+ recommendation that can point to an existing workspace package or a
140
+ ContractSpec surface before the task reaches file mutation.
141
+ </p>
142
+ </div>
143
+
144
+ <div className="space-y-3">
145
+ <h2 className="font-bold text-2xl">
146
+ 4) Project context and compile a plan
98
147
  </h2>
99
148
  <p className="text-muted-foreground text-sm">
100
149
  Use the task id as the thread that connects context, plan, verdict,
@@ -120,7 +169,7 @@ printf '{"objective":"Document the control-plane contract surface","commands":["
120
169
 
121
170
  <div className="space-y-3">
122
171
  <h2 className="font-bold text-2xl">
123
- 4) Verify file and shell mutations
172
+ 5) Verify file and shell mutations
124
173
  </h2>
125
174
  <CodeBlock
126
175
  language="bash"
@@ -151,7 +200,7 @@ printf 'bun run typecheck' | \\
151
200
 
152
201
  <div className="space-y-3">
153
202
  <h2 className="font-bold text-2xl">
154
- 5) Review, replay, and optional Studio sync
203
+ 6) Review, replay, and optional Studio sync
155
204
  </h2>
156
205
  <CodeBlock
157
206
  language="bash"
@@ -13,6 +13,13 @@ const builderCommands = [
13
13
  'builder.export.approve',
14
14
  'builder.export.execute',
15
15
  ];
16
+
17
+ const operatorStatusDetails = [
18
+ 'local runtime trust and lease details',
19
+ 'channel-action posture for mobile/operator follow-up',
20
+ 'comparison posture and export readiness from the shared snapshot',
21
+ ];
22
+
16
23
  export function GuideHostBuilderWorkbenchPage() {
17
24
  return (
18
25
  <div className="space-y-8">
@@ -68,8 +75,9 @@ export function GuideHostBuilderWorkbenchPage() {
68
75
  />
69
76
  <p className="text-muted-foreground text-sm">
70
77
  Expected output: one `BuilderWorkspaceSnapshot` containing
71
- workspace, plan, providers, runtime targets, preview, export, and
72
- mobile review state.
78
+ workspace, plan, providers, runtime targets, preview, export, mobile
79
+ review state, and the operator posture needed for local trust,
80
+ lease, and comparison status.
73
81
  </p>
74
82
  </div>
75
83
  <div className="space-y-3">
@@ -124,7 +132,38 @@ async function runAction(commandKey: string, payload?: Record<string, unknown>)
124
132
  </div>
125
133
  <div className="space-y-3">
126
134
  <h2 className="font-bold text-2xl">
127
- 3) Bootstrap providers and routing policy explicitly
135
+ 3) Persist Builder defaults in workspace config
136
+ </h2>
137
+ <p className="text-muted-foreground text-sm">
138
+ The host should agree with the CLI and setup flows on the same
139
+ control-plane defaults. For local or hybrid setups, keep the Builder
140
+ API base URL, token env var, and local runtime metadata in
141
+ `.contractsrc.json`.
142
+ </p>
143
+ <CodeBlock
144
+ language="json"
145
+ filename=".contractsrc.json"
146
+ code={`{
147
+ "builder": {
148
+ "enabled": true,
149
+ "runtimeMode": "local",
150
+ "bootstrapPreset": "local_daemon_mvp",
151
+ "api": {
152
+ "baseUrl": "https://api.contractspec.io",
153
+ "controlPlaneTokenEnvVar": "CONTROL_PLANE_API_TOKEN"
154
+ },
155
+ "localRuntime": {
156
+ "runtimeId": "rt_local_daemon",
157
+ "grantedTo": "local:operator",
158
+ "providerIds": ["provider.codex", "provider.local.model"]
159
+ }
160
+ }
161
+ }`}
162
+ />
163
+ </div>
164
+ <div className="space-y-3">
165
+ <h2 className="font-bold text-2xl">
166
+ 4) Bootstrap providers and routing policy explicitly
128
167
  </h2>
129
168
  <p className="text-muted-foreground text-sm">
130
169
  Builder v3 treats provider routing as policy, not heuristic. Use the
@@ -154,8 +193,18 @@ async function runAction(commandKey: string, payload?: Record<string, unknown>)
154
193
  ))}
155
194
  </ul>
156
195
  </div>
196
+ <div className="card-subtle space-y-3 p-6">
197
+ <h3 className="font-semibold text-lg">
198
+ Snapshot-backed operator details
199
+ </h3>
200
+ <ul className="space-y-2 text-muted-foreground text-sm">
201
+ {operatorStatusDetails.map((detail) => (
202
+ <li key={detail}>{detail}</li>
203
+ ))}
204
+ </ul>
205
+ </div>
157
206
  <div className="space-y-3">
158
- <h2 className="font-bold text-2xl">4) Keep runtime mode explicit</h2>
207
+ <h2 className="font-bold text-2xl">5) Keep runtime mode explicit</h2>
159
208
  <p className="text-muted-foreground text-sm">
160
209
  Preview and export flows are runtime-mode aware. The host chooses
161
210
  between `managed`, `local`, and `hybrid` and passes that choice into
@@ -178,7 +227,7 @@ await executeBuilderCommand({
178
227
  />
179
228
  </div>
180
229
  <div className="space-y-3">
181
- <h2 className="font-bold text-2xl">5) Link mobile review flows</h2>
230
+ <h2 className="font-bold text-2xl">6) Link mobile review flows</h2>
182
231
  <p className="text-muted-foreground text-sm">
183
232
  When a patch proposal, approval ticket, or incident needs operator
184
233
  follow-up away from the desktop workbench, deep-link into the mobile
@@ -201,7 +250,7 @@ await executeBuilderCommand({
201
250
  </div>
202
251
  <div className="space-y-3">
203
252
  <h2 className="font-bold text-2xl">
204
- 6) Keep Connect adjacent, not embedded
253
+ 7) Keep Connect adjacent, not embedded
205
254
  </h2>
206
255
  <p className="text-muted-foreground text-sm">
207
256
  Builder owns the authoring control plane. When Builder delegates
@@ -0,0 +1,147 @@
1
+ import { CodeBlock } from '@contractspec/lib.design-system';
2
+ import Link from '@contractspec/lib.ui-link';
3
+ import { ChevronRight } from 'lucide-react';
4
+
5
+ const docSyncTargets = [
6
+ 'root `README.md` and generated root `AGENTS.md` inputs when contributor or operator workflow changes',
7
+ 'the nearest package `README.md` and `AGENTS.md` for any touched public package surface',
8
+ 'website docs and `/llms*` summaries when the release changes how users or contributors should work',
9
+ ];
10
+
11
+ export function GuideReleaseCapsulesPage() {
12
+ return (
13
+ <div className="space-y-8">
14
+ <div className="space-y-3">
15
+ <h1 className="font-bold text-4xl">Author release capsules</h1>
16
+ <p className="text-lg text-muted-foreground">
17
+ Pair each publishable changeset with a structured release capsule so
18
+ changelog, upgrade, and docs surfaces all read from the same release
19
+ source of truth.
20
+ </p>
21
+ </div>
22
+
23
+ <div className="card-subtle space-y-4 p-6">
24
+ <h2 className="font-bold text-2xl">What you&apos;ll build</h2>
25
+ <ul className="space-y-2 text-muted-foreground text-sm">
26
+ <li>
27
+ A <code>.changeset/&lt;slug&gt;.md</code> file for package/version
28
+ intent.
29
+ </li>
30
+ <li>
31
+ A <code>.changeset/&lt;slug&gt;.release.yaml</code> companion for
32
+ audiences, migrations, validation, and evidence.
33
+ </li>
34
+ <li>
35
+ Generated release artifacts that the website changelog and upgrade
36
+ flows can consume safely.
37
+ </li>
38
+ </ul>
39
+ </div>
40
+
41
+ <div className="space-y-6">
42
+ <div className="space-y-3">
43
+ <h2 className="font-bold text-2xl">
44
+ 1) Create the paired changeset files
45
+ </h2>
46
+ <p className="text-muted-foreground text-sm">
47
+ The Markdown file states the package bumps and reader-facing change
48
+ intent. The YAML file carries the structured release metadata.
49
+ </p>
50
+ <CodeBlock
51
+ language="yaml"
52
+ filename=".changeset/contract-dx-first-slice.release.yaml"
53
+ code={`schemaVersion: "1"
54
+ slug: contract-dx-first-slice
55
+ summary: Improve app-config, theme, and feature authoring with explicit validation and shared setup alignment.
56
+ isBreaking: false
57
+ packages:
58
+ - name: "@contractspec/lib.contracts-spec"
59
+ releaseType: minor
60
+ validation:
61
+ commands:
62
+ - "cd packages/libs/contracts-spec && bun run test && bun run typecheck"
63
+ evidence:
64
+ - "Package-level validation entrypoints now back setup, docs, and CLI authoring flows."`}
65
+ />
66
+ <p className="text-muted-foreground text-sm">
67
+ Expected output: every publishable slug has both the human-facing
68
+ changeset and the structured release capsule beside it.
69
+ </p>
70
+ </div>
71
+
72
+ <div className="space-y-3">
73
+ <h2 className="font-bold text-2xl">
74
+ 2) Use the release authoring commands instead of raw drift-prone
75
+ edits
76
+ </h2>
77
+ <CodeBlock
78
+ language="bash"
79
+ filename="release-authoring"
80
+ code={`contractspec release init --summary "Improve app-config, theme, and feature authoring"
81
+
82
+ # Or revise an existing capsule with the guided flow
83
+ contractspec release edit contract-dx-first-slice`}
84
+ />
85
+ <p className="text-muted-foreground text-sm">
86
+ Expected output: the CLI scaffolds or revises the paired files with
87
+ the current release schema instead of leaving maintainers to
88
+ hand-roll YAML structure.
89
+ </p>
90
+ </div>
91
+
92
+ <div className="space-y-3">
93
+ <h2 className="font-bold text-2xl">
94
+ 3) Build the generated release artifacts before consuming them
95
+ </h2>
96
+ <CodeBlock
97
+ language="bash"
98
+ filename="release-build"
99
+ code={`contractspec release build`}
100
+ />
101
+ <p className="text-muted-foreground text-sm">
102
+ Expected output: `generated/releases/manifest.json`,
103
+ `generated/releases/upgrade-manifest.json`, and the related
104
+ customer/maintainer guidance files are refreshed from the release
105
+ capsules.
106
+ </p>
107
+ </div>
108
+
109
+ <div className="space-y-3">
110
+ <h2 className="font-bold text-2xl">
111
+ 4) Enforce completeness before publishing or building the changelog
112
+ </h2>
113
+ <CodeBlock
114
+ language="bash"
115
+ filename="release-check"
116
+ code={`contractspec release check --strict`}
117
+ />
118
+ <p className="text-muted-foreground text-sm">
119
+ Expected output: missing capsules, incomplete migration guidance, or
120
+ stale generated release artifacts are flagged before the website
121
+ changelog or publish workflow treats the release data as canonical.
122
+ </p>
123
+ </div>
124
+
125
+ <div className="card-subtle space-y-3 p-6">
126
+ <h3 className="font-semibold text-lg">
127
+ 5) Sync the public docs if workflow expectations changed
128
+ </h3>
129
+ <ul className="space-y-2 text-muted-foreground text-sm">
130
+ {docSyncTargets.map((target) => (
131
+ <li key={target}>{target}</li>
132
+ ))}
133
+ </ul>
134
+ </div>
135
+ </div>
136
+
137
+ <div className="flex items-center gap-4 pt-4">
138
+ <Link href="/docs/guides/connect-in-a-repo" className="btn-primary">
139
+ Connect guide <ChevronRight size={16} />
140
+ </Link>
141
+ <Link href="/changelog" className="btn-ghost">
142
+ Website changelog
143
+ </Link>
144
+ </div>
145
+ </div>
146
+ );
147
+ }
@@ -59,6 +59,13 @@ const guides = [
59
59
  href: '/docs/guides/connect-in-a-repo',
60
60
  time: '15 min',
61
61
  },
62
+ {
63
+ title: 'Author release capsules',
64
+ description:
65
+ 'Pair changesets with structured release capsules and generate the artifacts that changelog and upgrade flows consume.',
66
+ href: '/docs/guides/release-capsules',
67
+ time: '15 min',
68
+ },
62
69
  {
63
70
  title: 'CI diff gating',
64
71
  description:
@@ -9,5 +9,6 @@ export { GuideGenerateDocsClientsSchemasPage } from './GuideGenerateDocsClientsS
9
9
  export { GuideHostBuilderWorkbenchPage } from './GuideHostBuilderWorkbenchPage';
10
10
  export { GuideImportExistingCodebasesPage } from './GuideImportExistingCodebasesPage';
11
11
  export { GuideNextjsOneEndpointPage } from './GuideNextjsOneEndpointPage';
12
+ export { GuideReleaseCapsulesPage } from './GuideReleaseCapsulesPage';
12
13
  export { GuideSpecValidationTypingPage } from './GuideSpecValidationTypingPage';
13
14
  export { GuidesIndexPage } from './GuidesIndexPage';