@contractspec/bundle.library 3.7.6 → 3.8.2

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 (900) hide show
  1. package/.turbo/turbo-build.log +258 -252
  2. package/AGENTS.md +42 -24
  3. package/CHANGELOG.md +56 -0
  4. package/README.md +59 -37
  5. package/dist/application/index.d.ts +1 -1
  6. package/dist/application/index.js +842 -840
  7. package/dist/application/mcp/cliMcp.js +30 -30
  8. package/dist/application/mcp/common.d.ts +2 -2
  9. package/dist/application/mcp/common.js +2 -2
  10. package/dist/application/mcp/contractsMcp.d.ts +1 -1
  11. package/dist/application/mcp/contractsMcp.js +163 -163
  12. package/dist/application/mcp/docsMcp.js +31 -31
  13. package/dist/application/mcp/index.d.ts +2 -2
  14. package/dist/application/mcp/index.js +842 -840
  15. package/dist/application/mcp/internalMcp.js +30 -30
  16. package/dist/application/mcp/providerRankingMcp.js +35 -33
  17. package/dist/components/docs/DocsIndexPage.js +859 -212
  18. package/dist/components/docs/advanced/AdvancedMCPPage.js +15 -15
  19. package/dist/components/docs/advanced/AdvancedOverlayEditorPage.js +4 -4
  20. package/dist/components/docs/advanced/AdvancedRenderersPage.js +7 -7
  21. package/dist/components/docs/advanced/AdvancedSpecExperimentsPage.js +9 -9
  22. package/dist/components/docs/advanced/AdvancedTelemetryPage.js +16 -16
  23. package/dist/components/docs/advanced/AdvancedWorkflowMonitoringPage.js +6 -6
  24. package/dist/components/docs/advanced/index.d.ts +2 -2
  25. package/dist/components/docs/advanced/index.js +57 -57
  26. package/dist/components/docs/architecture/ArchitectureAppConfigPage.js +10 -10
  27. package/dist/components/docs/architecture/ArchitectureControlPlanePage.js +8 -8
  28. package/dist/components/docs/architecture/ArchitectureIntegrationBindingPage.js +14 -14
  29. package/dist/components/docs/architecture/ArchitectureKnowledgeBindingPage.js +16 -16
  30. package/dist/components/docs/architecture/ArchitectureMultiTenancyPage.js +7 -7
  31. package/dist/components/docs/architecture/ArchitectureOverviewPage.js +90 -411
  32. package/dist/components/docs/architecture/index.d.ts +3 -3
  33. package/dist/components/docs/architecture/index.js +145 -466
  34. package/dist/components/docs/comparison/ComparisonAutomationPlatformsPage.js +6 -6
  35. package/dist/components/docs/comparison/ComparisonEnterprisePlatformsPage.js +7 -7
  36. package/dist/components/docs/comparison/ComparisonInternalToolBuildersPage.js +6 -6
  37. package/dist/components/docs/comparison/ComparisonOverviewPage.js +4 -4
  38. package/dist/components/docs/comparison/ComparisonWindmillPage.js +6 -6
  39. package/dist/components/docs/comparison/ComparisonWorkflowEnginesPage.js +6 -6
  40. package/dist/components/docs/comparison/index.d.ts +2 -2
  41. package/dist/components/docs/comparison/index.js +35 -35
  42. package/dist/components/docs/docsManifest.d.ts +42 -0
  43. package/dist/components/docs/docsManifest.js +612 -0
  44. package/dist/components/docs/ecosystem/IntegrationsPage.js +5 -5
  45. package/dist/components/docs/ecosystem/PluginsPage.js +7 -7
  46. package/dist/components/docs/ecosystem/RegistryPage.js +4 -4
  47. package/dist/components/docs/ecosystem/TemplatesPage.js +11 -11
  48. package/dist/components/docs/ecosystem/index.d.ts +2 -2
  49. package/dist/components/docs/ecosystem/index.js +27 -27
  50. package/dist/components/docs/examples/DocsExamplesPage.js +59 -6
  51. package/dist/components/docs/examples/ExampleShowcasePage.d.ts +5 -0
  52. package/dist/components/docs/examples/ExampleShowcasePage.js +258 -0
  53. package/dist/components/docs/examples/exampleShowcaseData.d.ts +10 -0
  54. package/dist/components/docs/examples/exampleShowcaseData.js +53 -0
  55. package/dist/components/docs/examples/index.d.ts +1 -0
  56. package/dist/components/docs/examples/index.js +265 -6
  57. package/dist/components/docs/getting-started/CLIPage.js +9 -9
  58. package/dist/components/docs/getting-started/CompatibilityPage.js +12 -12
  59. package/dist/components/docs/getting-started/DataViewTutorialPage.js +7 -7
  60. package/dist/components/docs/getting-started/DeveloperToolsPage.js +10 -10
  61. package/dist/components/docs/getting-started/HelloWorldPage.js +8 -8
  62. package/dist/components/docs/getting-started/InstallationPage.js +10 -10
  63. package/dist/components/docs/getting-started/StartHerePage.js +8 -8
  64. package/dist/components/docs/getting-started/TroubleshootingPage.js +12 -12
  65. package/dist/components/docs/getting-started/VSCodeExtensionPage.js +13 -13
  66. package/dist/components/docs/getting-started/index.d.ts +5 -5
  67. package/dist/components/docs/getting-started/index.js +89 -89
  68. package/dist/components/docs/guides/GuideCIDiffGatingPage.js +13 -13
  69. package/dist/components/docs/guides/GuideContractTypesPage.js +33 -33
  70. package/dist/components/docs/guides/GuideDocsPipelinePage.js +13 -13
  71. package/dist/components/docs/guides/GuideGenerateDocsClientsSchemasPage.js +13 -13
  72. package/dist/components/docs/guides/GuideImportExistingCodebasesPage.js +35 -35
  73. package/dist/components/docs/guides/GuideNextjsOneEndpointPage.js +15 -15
  74. package/dist/components/docs/guides/GuideSpecValidationTypingPage.js +13 -13
  75. package/dist/components/docs/guides/GuidesIndexPage.js +69 -46
  76. package/dist/components/docs/guides/index.d.ts +4 -4
  77. package/dist/components/docs/guides/index.js +174 -151
  78. package/dist/components/docs/index.d.ts +13 -12
  79. package/dist/components/docs/index.js +15220 -16233
  80. package/dist/components/docs/integrations/IntegrationsCircuitBreakersPage.js +4 -4
  81. package/dist/components/docs/integrations/IntegrationsElevenLabsPage.js +7 -7
  82. package/dist/components/docs/integrations/IntegrationsGithubPage.js +11 -11
  83. package/dist/components/docs/integrations/IntegrationsGmailPage.js +7 -7
  84. package/dist/components/docs/integrations/IntegrationsGoogleCalendarPage.js +5 -5
  85. package/dist/components/docs/integrations/IntegrationsHealthRoutingPage.js +12 -12
  86. package/dist/components/docs/integrations/IntegrationsMistralPage.js +12 -12
  87. package/dist/components/docs/integrations/IntegrationsOpenAIPage.js +11 -11
  88. package/dist/components/docs/integrations/IntegrationsOverviewPage.js +119 -736
  89. package/dist/components/docs/integrations/IntegrationsPostmarkPage.js +12 -12
  90. package/dist/components/docs/integrations/IntegrationsPowensPage.js +24 -24
  91. package/dist/components/docs/integrations/IntegrationsQdrantPage.js +9 -9
  92. package/dist/components/docs/integrations/IntegrationsResendPage.js +7 -7
  93. package/dist/components/docs/integrations/IntegrationsS3Page.js +9 -9
  94. package/dist/components/docs/integrations/IntegrationsSlackPage.js +11 -11
  95. package/dist/components/docs/integrations/IntegrationsSpecModelPage.js +19 -19
  96. package/dist/components/docs/integrations/IntegrationsStripePage.js +25 -25
  97. package/dist/components/docs/integrations/IntegrationsTwilioPage.js +9 -9
  98. package/dist/components/docs/integrations/IntegrationsWhatsappMetaPage.js +12 -12
  99. package/dist/components/docs/integrations/IntegrationsWhatsappTwilioPage.js +13 -13
  100. package/dist/components/docs/integrations/index.d.ts +1 -1
  101. package/dist/components/docs/integrations/index.js +614 -1231
  102. package/dist/components/docs/intent/ContractFirstApiPage.js +8 -8
  103. package/dist/components/docs/intent/DeterministicCodegenPage.js +9 -9
  104. package/dist/components/docs/intent/GenerateClientFromSchemaPage.js +13 -13
  105. package/dist/components/docs/intent/OpenapiAlternativePage.js +13 -13
  106. package/dist/components/docs/intent/SchemaValidationTypescriptPage.js +9 -9
  107. package/dist/components/docs/intent/SpecDrivenDevelopmentPage.js +8 -8
  108. package/dist/components/docs/intent/index.d.ts +3 -3
  109. package/dist/components/docs/intent/index.js +766 -766
  110. package/dist/components/docs/knowledge/KnowledgeCategoriesPage.js +38 -38
  111. package/dist/components/docs/knowledge/KnowledgeExamplesPage.js +9 -9
  112. package/dist/components/docs/knowledge/KnowledgeOverviewPage.js +91 -439
  113. package/dist/components/docs/knowledge/KnowledgeSourcesPage.js +28 -28
  114. package/dist/components/docs/knowledge/KnowledgeSpacesPage.js +21 -21
  115. package/dist/components/docs/knowledge/index.d.ts +1 -1
  116. package/dist/components/docs/knowledge/index.js +437 -785
  117. package/dist/components/docs/libraries/LibrariesAccessibilityPage.js +16 -16
  118. package/dist/components/docs/libraries/LibrariesAiAgentPage.js +8 -8
  119. package/dist/components/docs/libraries/LibrariesAnalyticsPage.js +6 -6
  120. package/dist/components/docs/libraries/LibrariesContentGenPage.js +6 -6
  121. package/dist/components/docs/libraries/LibrariesContractsPage.js +16 -16
  122. package/dist/components/docs/libraries/LibrariesCostTrackingPage.js +6 -6
  123. package/dist/components/docs/libraries/LibrariesDataBackendPage.js +14 -14
  124. package/dist/components/docs/libraries/LibrariesDataViewsPage.js +7 -7
  125. package/dist/components/docs/libraries/LibrariesDesignSystemPage.js +13 -13
  126. package/dist/components/docs/libraries/LibrariesEvolutionPage.js +7 -7
  127. package/dist/components/docs/libraries/LibrariesGraphQLPage.js +13 -13
  128. package/dist/components/docs/libraries/LibrariesGrowthPage.js +5 -5
  129. package/dist/components/docs/libraries/LibrariesMultiTenancyPage.js +5 -5
  130. package/dist/components/docs/libraries/LibrariesObservabilityPage.js +7 -7
  131. package/dist/components/docs/libraries/LibrariesOverlayEnginePage.js +6 -6
  132. package/dist/components/docs/libraries/LibrariesOverviewPage.js +117 -430
  133. package/dist/components/docs/libraries/LibrariesPersonalizationPage.js +6 -6
  134. package/dist/components/docs/libraries/LibrariesProgressiveDeliveryPage.js +6 -6
  135. package/dist/components/docs/libraries/LibrariesResiliencePage.js +6 -6
  136. package/dist/components/docs/libraries/LibrariesRuntimePage.js +13 -13
  137. package/dist/components/docs/libraries/LibrariesSLOPage.js +6 -6
  138. package/dist/components/docs/libraries/LibrariesSchemaPage.js +16 -16
  139. package/dist/components/docs/libraries/LibrariesSupportBotPage.js +7 -7
  140. package/dist/components/docs/libraries/LibrariesTestingPage.js +7 -7
  141. package/dist/components/docs/libraries/LibrariesUIKitPage.js +10 -10
  142. package/dist/components/docs/libraries/LibrariesWorkflowComposerPage.js +5 -5
  143. package/dist/components/docs/libraries/LibrariesWorkflowsPage.js +8 -8
  144. package/dist/components/docs/libraries/index.d.ts +4 -4
  145. package/dist/components/docs/libraries/index.js +1308 -1621
  146. package/dist/components/docs/manifesto/ManifestoPage.js +33 -138
  147. package/dist/components/docs/ops/AutoEvolutionOpsPage.js +9 -9
  148. package/dist/components/docs/ops/DistributedTracingOpsPage.js +5 -5
  149. package/dist/components/docs/ops/index.js +14 -14
  150. package/dist/components/docs/reference/DocsMarkdownContent.js +1 -1
  151. package/dist/components/docs/reference/DocsReferenceContent.js +2 -2
  152. package/dist/components/docs/reference/DocsReferenceIndexClient.js +8 -8
  153. package/dist/components/docs/reference/DocsReferenceIndexPage.js +8 -8
  154. package/dist/components/docs/reference/DocsReferencePage.js +2 -2
  155. package/dist/components/docs/reference/index.js +10 -10
  156. package/dist/components/docs/safety/SafetyAuditingPage.js +16 -16
  157. package/dist/components/docs/safety/SafetyMigrationsPage.js +15 -15
  158. package/dist/components/docs/safety/SafetyOverviewPage.js +69 -206
  159. package/dist/components/docs/safety/SafetyPDPPage.js +12 -12
  160. package/dist/components/docs/safety/SafetySecurityTrustPage.js +11 -11
  161. package/dist/components/docs/safety/SafetySigningPage.js +7 -7
  162. package/dist/components/docs/safety/SafetyTenantIsolationPage.js +6 -6
  163. package/dist/components/docs/safety/index.d.ts +3 -3
  164. package/dist/components/docs/safety/index.js +616 -753
  165. package/dist/components/docs/shared/StudioPrompt.js +5 -5
  166. package/dist/components/docs/specs/SpecsCapabilitiesPage.js +12 -12
  167. package/dist/components/docs/specs/SpecsDataViewsPage.js +14 -14
  168. package/dist/components/docs/specs/SpecsOverlaysPage.js +14 -14
  169. package/dist/components/docs/specs/SpecsOverviewPage.js +135 -297
  170. package/dist/components/docs/specs/SpecsPolicyPage.js +29 -29
  171. package/dist/components/docs/specs/SpecsWorkflowsPage.js +18 -18
  172. package/dist/components/docs/specs/index.d.ts +3 -3
  173. package/dist/components/docs/specs/index.js +814 -976
  174. package/dist/components/docs/studio/StudioBYOKPage.js +1 -1
  175. package/dist/components/docs/studio/StudioDeploymentsPage.js +1 -1
  176. package/dist/components/docs/studio/StudioGettingStartedPage.js +1 -1
  177. package/dist/components/docs/studio/StudioIntegrationsPage.js +1 -1
  178. package/dist/components/docs/studio/StudioOverviewPage.js +109 -56
  179. package/dist/components/docs/studio/StudioVisualBuilderPage.js +1 -1
  180. package/dist/components/docs/studio/index.d.ts +4 -4
  181. package/dist/components/docs/studio/index.js +170 -117
  182. package/dist/components/integrations/index.js +25 -25
  183. package/dist/components/integrations/molecules/IntegrationCard.js +5 -5
  184. package/dist/components/integrations/organisms/IntegrationMarketplace.js +12 -12
  185. package/dist/components/integrations/organisms/IntegrationSettings.js +7 -7
  186. package/dist/components/integrations/organisms/KnowledgeSourceList.js +6 -6
  187. package/dist/components/legal/PrivacyTemplate.js +67 -67
  188. package/dist/components/legal/TermsTemplate.js +54 -54
  189. package/dist/components/legal/index.js +121 -121
  190. package/dist/components/shared/FeatureGateNotice.js +4 -4
  191. package/dist/components/shared/index.js +4 -4
  192. package/dist/components/shell/WorkspaceHeader.js +4 -4
  193. package/dist/components/shell/WorkspaceProjectShellLayout.d.ts +3 -3
  194. package/dist/components/shell/WorkspaceProjectShellLayout.js +10 -10
  195. package/dist/components/shell/WorkspaceShellRenderer.d.ts +4 -4
  196. package/dist/components/shell/WorkspaceShellRenderer.js +8 -8
  197. package/dist/components/shell/WorkspaceSidebar.js +2 -2
  198. package/dist/components/shell/index.d.ts +1 -1
  199. package/dist/components/shell/index.js +12 -12
  200. package/dist/components/templates/engine/index.d.ts +1 -1
  201. package/dist/components/templates/index.d.ts +1 -1
  202. package/dist/components/templates/index.js +835 -835
  203. package/dist/components/templates/messaging/ConversationList.js +11 -11
  204. package/dist/components/templates/messaging/MessageComposer.js +11 -11
  205. package/dist/components/templates/messaging/MessageThread.js +6 -6
  206. package/dist/components/templates/messaging/MessagingWorkspace.js +23 -23
  207. package/dist/components/templates/messaging/index.d.ts +1 -1
  208. package/dist/components/templates/messaging/index.js +23 -23
  209. package/dist/components/templates/recipes/LanguageSwitcher.js +1 -1
  210. package/dist/components/templates/recipes/RecipeCard.js +5 -5
  211. package/dist/components/templates/recipes/RecipeDetail.js +8 -8
  212. package/dist/components/templates/recipes/RecipeList.js +17 -17
  213. package/dist/components/templates/recipes/index.d.ts +2 -2
  214. package/dist/components/templates/recipes/index.js +17 -17
  215. package/dist/components/templates/todos/FilterBar.d.ts +1 -1
  216. package/dist/components/templates/todos/FilterBar.js +9 -9
  217. package/dist/components/templates/todos/TaskForm.js +14 -14
  218. package/dist/components/templates/todos/TaskItem.js +4 -4
  219. package/dist/components/templates/todos/TaskList.js +30 -30
  220. package/dist/components/templates/todos/index.d.ts +2 -2
  221. package/dist/components/templates/todos/index.js +30 -30
  222. package/dist/config/index.d.ts +2 -2
  223. package/dist/features/contracts-registry.d.ts +3 -3
  224. package/dist/features/contracts-registry.js +15 -15
  225. package/dist/features/docs/docs.contracts.d.ts +1 -1
  226. package/dist/features/docs/docs.contracts.js +2 -2
  227. package/dist/features/docs/index.d.ts +1 -1
  228. package/dist/features/docs/index.js +2 -2
  229. package/dist/features/index.d.ts +4 -4
  230. package/dist/features/index.js +18 -18
  231. package/dist/features/registry.js +1 -1
  232. package/dist/index.d.ts +2 -2
  233. package/dist/index.js +17034 -18047
  234. package/dist/libs/email/client.js +1 -1
  235. package/dist/libs/email/contact.js +1 -1
  236. package/dist/libs/email/newsletter.js +1 -1
  237. package/dist/libs/email/waitlist-application.js +1 -1
  238. package/dist/libs/email/waitlist.js +1 -1
  239. package/dist/libs/email.d.ts +1 -1
  240. package/dist/libs/email.js +1 -1
  241. package/dist/node/application/index.js +842 -840
  242. package/dist/node/application/mcp/cliMcp.js +30 -30
  243. package/dist/node/application/mcp/common.js +2 -2
  244. package/dist/node/application/mcp/contractsMcp.js +163 -163
  245. package/dist/node/application/mcp/docsMcp.js +31 -31
  246. package/dist/node/application/mcp/index.js +842 -840
  247. package/dist/node/application/mcp/internalMcp.js +30 -30
  248. package/dist/node/application/mcp/providerRankingMcp.js +35 -33
  249. package/dist/node/components/docs/DocsIndexPage.js +859 -212
  250. package/dist/node/components/docs/advanced/AdvancedMCPPage.js +15 -15
  251. package/dist/node/components/docs/advanced/AdvancedOverlayEditorPage.js +4 -4
  252. package/dist/node/components/docs/advanced/AdvancedRenderersPage.js +7 -7
  253. package/dist/node/components/docs/advanced/AdvancedSpecExperimentsPage.js +9 -9
  254. package/dist/node/components/docs/advanced/AdvancedTelemetryPage.js +16 -16
  255. package/dist/node/components/docs/advanced/AdvancedWorkflowMonitoringPage.js +6 -6
  256. package/dist/node/components/docs/advanced/index.js +57 -57
  257. package/dist/node/components/docs/architecture/ArchitectureAppConfigPage.js +10 -10
  258. package/dist/node/components/docs/architecture/ArchitectureControlPlanePage.js +8 -8
  259. package/dist/node/components/docs/architecture/ArchitectureIntegrationBindingPage.js +14 -14
  260. package/dist/node/components/docs/architecture/ArchitectureKnowledgeBindingPage.js +16 -16
  261. package/dist/node/components/docs/architecture/ArchitectureMultiTenancyPage.js +7 -7
  262. package/dist/node/components/docs/architecture/ArchitectureOverviewPage.js +90 -411
  263. package/dist/node/components/docs/architecture/index.js +145 -466
  264. package/dist/node/components/docs/comparison/ComparisonAutomationPlatformsPage.js +6 -6
  265. package/dist/node/components/docs/comparison/ComparisonEnterprisePlatformsPage.js +7 -7
  266. package/dist/node/components/docs/comparison/ComparisonInternalToolBuildersPage.js +6 -6
  267. package/dist/node/components/docs/comparison/ComparisonOverviewPage.js +4 -4
  268. package/dist/node/components/docs/comparison/ComparisonWindmillPage.js +6 -6
  269. package/dist/node/components/docs/comparison/ComparisonWorkflowEnginesPage.js +6 -6
  270. package/dist/node/components/docs/comparison/index.js +35 -35
  271. package/dist/node/components/docs/docsManifest.js +611 -0
  272. package/dist/node/components/docs/ecosystem/IntegrationsPage.js +5 -5
  273. package/dist/node/components/docs/ecosystem/PluginsPage.js +7 -7
  274. package/dist/node/components/docs/ecosystem/RegistryPage.js +4 -4
  275. package/dist/node/components/docs/ecosystem/TemplatesPage.js +11 -11
  276. package/dist/node/components/docs/ecosystem/index.js +27 -27
  277. package/dist/node/components/docs/examples/DocsExamplesPage.js +59 -6
  278. package/dist/node/components/docs/examples/ExampleShowcasePage.js +257 -0
  279. package/dist/node/components/docs/examples/exampleShowcaseData.js +52 -0
  280. package/dist/node/components/docs/examples/index.js +265 -6
  281. package/dist/node/components/docs/getting-started/CLIPage.js +9 -9
  282. package/dist/node/components/docs/getting-started/CompatibilityPage.js +12 -12
  283. package/dist/node/components/docs/getting-started/DataViewTutorialPage.js +7 -7
  284. package/dist/node/components/docs/getting-started/DeveloperToolsPage.js +10 -10
  285. package/dist/node/components/docs/getting-started/HelloWorldPage.js +8 -8
  286. package/dist/node/components/docs/getting-started/InstallationPage.js +10 -10
  287. package/dist/node/components/docs/getting-started/StartHerePage.js +8 -8
  288. package/dist/node/components/docs/getting-started/TroubleshootingPage.js +12 -12
  289. package/dist/node/components/docs/getting-started/VSCodeExtensionPage.js +13 -13
  290. package/dist/node/components/docs/getting-started/index.js +89 -89
  291. package/dist/node/components/docs/guides/GuideCIDiffGatingPage.js +13 -13
  292. package/dist/node/components/docs/guides/GuideContractTypesPage.js +33 -33
  293. package/dist/node/components/docs/guides/GuideDocsPipelinePage.js +13 -13
  294. package/dist/node/components/docs/guides/GuideGenerateDocsClientsSchemasPage.js +13 -13
  295. package/dist/node/components/docs/guides/GuideImportExistingCodebasesPage.js +35 -35
  296. package/dist/node/components/docs/guides/GuideNextjsOneEndpointPage.js +15 -15
  297. package/dist/node/components/docs/guides/GuideSpecValidationTypingPage.js +13 -13
  298. package/dist/node/components/docs/guides/GuidesIndexPage.js +69 -46
  299. package/dist/node/components/docs/guides/index.js +174 -151
  300. package/dist/node/components/docs/index.js +15220 -16233
  301. package/dist/node/components/docs/integrations/IntegrationsCircuitBreakersPage.js +4 -4
  302. package/dist/node/components/docs/integrations/IntegrationsElevenLabsPage.js +7 -7
  303. package/dist/node/components/docs/integrations/IntegrationsGithubPage.js +11 -11
  304. package/dist/node/components/docs/integrations/IntegrationsGmailPage.js +7 -7
  305. package/dist/node/components/docs/integrations/IntegrationsGoogleCalendarPage.js +5 -5
  306. package/dist/node/components/docs/integrations/IntegrationsHealthRoutingPage.js +12 -12
  307. package/dist/node/components/docs/integrations/IntegrationsMistralPage.js +12 -12
  308. package/dist/node/components/docs/integrations/IntegrationsOpenAIPage.js +11 -11
  309. package/dist/node/components/docs/integrations/IntegrationsOverviewPage.js +119 -736
  310. package/dist/node/components/docs/integrations/IntegrationsPostmarkPage.js +12 -12
  311. package/dist/node/components/docs/integrations/IntegrationsPowensPage.js +24 -24
  312. package/dist/node/components/docs/integrations/IntegrationsQdrantPage.js +9 -9
  313. package/dist/node/components/docs/integrations/IntegrationsResendPage.js +7 -7
  314. package/dist/node/components/docs/integrations/IntegrationsS3Page.js +9 -9
  315. package/dist/node/components/docs/integrations/IntegrationsSlackPage.js +11 -11
  316. package/dist/node/components/docs/integrations/IntegrationsSpecModelPage.js +19 -19
  317. package/dist/node/components/docs/integrations/IntegrationsStripePage.js +25 -25
  318. package/dist/node/components/docs/integrations/IntegrationsTwilioPage.js +9 -9
  319. package/dist/node/components/docs/integrations/IntegrationsWhatsappMetaPage.js +12 -12
  320. package/dist/node/components/docs/integrations/IntegrationsWhatsappTwilioPage.js +13 -13
  321. package/dist/node/components/docs/integrations/index.js +614 -1231
  322. package/dist/node/components/docs/intent/ContractFirstApiPage.js +8 -8
  323. package/dist/node/components/docs/intent/DeterministicCodegenPage.js +9 -9
  324. package/dist/node/components/docs/intent/GenerateClientFromSchemaPage.js +13 -13
  325. package/dist/node/components/docs/intent/OpenapiAlternativePage.js +13 -13
  326. package/dist/node/components/docs/intent/SchemaValidationTypescriptPage.js +9 -9
  327. package/dist/node/components/docs/intent/SpecDrivenDevelopmentPage.js +8 -8
  328. package/dist/node/components/docs/intent/index.js +766 -766
  329. package/dist/node/components/docs/knowledge/KnowledgeCategoriesPage.js +38 -38
  330. package/dist/node/components/docs/knowledge/KnowledgeExamplesPage.js +9 -9
  331. package/dist/node/components/docs/knowledge/KnowledgeOverviewPage.js +91 -439
  332. package/dist/node/components/docs/knowledge/KnowledgeSourcesPage.js +28 -28
  333. package/dist/node/components/docs/knowledge/KnowledgeSpacesPage.js +21 -21
  334. package/dist/node/components/docs/knowledge/index.js +437 -785
  335. package/dist/node/components/docs/libraries/LibrariesAccessibilityPage.js +16 -16
  336. package/dist/node/components/docs/libraries/LibrariesAiAgentPage.js +8 -8
  337. package/dist/node/components/docs/libraries/LibrariesAnalyticsPage.js +6 -6
  338. package/dist/node/components/docs/libraries/LibrariesContentGenPage.js +6 -6
  339. package/dist/node/components/docs/libraries/LibrariesContractsPage.js +16 -16
  340. package/dist/node/components/docs/libraries/LibrariesCostTrackingPage.js +6 -6
  341. package/dist/node/components/docs/libraries/LibrariesDataBackendPage.js +14 -14
  342. package/dist/node/components/docs/libraries/LibrariesDataViewsPage.js +7 -7
  343. package/dist/node/components/docs/libraries/LibrariesDesignSystemPage.js +13 -13
  344. package/dist/node/components/docs/libraries/LibrariesEvolutionPage.js +7 -7
  345. package/dist/node/components/docs/libraries/LibrariesGraphQLPage.js +13 -13
  346. package/dist/node/components/docs/libraries/LibrariesGrowthPage.js +5 -5
  347. package/dist/node/components/docs/libraries/LibrariesMultiTenancyPage.js +5 -5
  348. package/dist/node/components/docs/libraries/LibrariesObservabilityPage.js +7 -7
  349. package/dist/node/components/docs/libraries/LibrariesOverlayEnginePage.js +6 -6
  350. package/dist/node/components/docs/libraries/LibrariesOverviewPage.js +117 -430
  351. package/dist/node/components/docs/libraries/LibrariesPersonalizationPage.js +6 -6
  352. package/dist/node/components/docs/libraries/LibrariesProgressiveDeliveryPage.js +6 -6
  353. package/dist/node/components/docs/libraries/LibrariesResiliencePage.js +6 -6
  354. package/dist/node/components/docs/libraries/LibrariesRuntimePage.js +13 -13
  355. package/dist/node/components/docs/libraries/LibrariesSLOPage.js +6 -6
  356. package/dist/node/components/docs/libraries/LibrariesSchemaPage.js +16 -16
  357. package/dist/node/components/docs/libraries/LibrariesSupportBotPage.js +7 -7
  358. package/dist/node/components/docs/libraries/LibrariesTestingPage.js +7 -7
  359. package/dist/node/components/docs/libraries/LibrariesUIKitPage.js +10 -10
  360. package/dist/node/components/docs/libraries/LibrariesWorkflowComposerPage.js +5 -5
  361. package/dist/node/components/docs/libraries/LibrariesWorkflowsPage.js +8 -8
  362. package/dist/node/components/docs/libraries/index.js +1308 -1621
  363. package/dist/node/components/docs/manifesto/ManifestoPage.js +33 -138
  364. package/dist/node/components/docs/ops/AutoEvolutionOpsPage.js +9 -9
  365. package/dist/node/components/docs/ops/DistributedTracingOpsPage.js +5 -5
  366. package/dist/node/components/docs/ops/index.js +14 -14
  367. package/dist/node/components/docs/reference/DocsMarkdownContent.js +1 -1
  368. package/dist/node/components/docs/reference/DocsReferenceContent.js +2 -2
  369. package/dist/node/components/docs/reference/DocsReferenceIndexClient.js +8 -8
  370. package/dist/node/components/docs/reference/DocsReferenceIndexPage.js +8 -8
  371. package/dist/node/components/docs/reference/DocsReferencePage.js +2 -2
  372. package/dist/node/components/docs/reference/index.js +10 -10
  373. package/dist/node/components/docs/safety/SafetyAuditingPage.js +16 -16
  374. package/dist/node/components/docs/safety/SafetyMigrationsPage.js +15 -15
  375. package/dist/node/components/docs/safety/SafetyOverviewPage.js +69 -206
  376. package/dist/node/components/docs/safety/SafetyPDPPage.js +12 -12
  377. package/dist/node/components/docs/safety/SafetySecurityTrustPage.js +11 -11
  378. package/dist/node/components/docs/safety/SafetySigningPage.js +7 -7
  379. package/dist/node/components/docs/safety/SafetyTenantIsolationPage.js +6 -6
  380. package/dist/node/components/docs/safety/index.js +616 -753
  381. package/dist/node/components/docs/shared/StudioPrompt.js +5 -5
  382. package/dist/node/components/docs/specs/SpecsCapabilitiesPage.js +12 -12
  383. package/dist/node/components/docs/specs/SpecsDataViewsPage.js +14 -14
  384. package/dist/node/components/docs/specs/SpecsOverlaysPage.js +14 -14
  385. package/dist/node/components/docs/specs/SpecsOverviewPage.js +135 -297
  386. package/dist/node/components/docs/specs/SpecsPolicyPage.js +29 -29
  387. package/dist/node/components/docs/specs/SpecsWorkflowsPage.js +18 -18
  388. package/dist/node/components/docs/specs/index.js +814 -976
  389. package/dist/node/components/docs/studio/StudioBYOKPage.js +1 -1
  390. package/dist/node/components/docs/studio/StudioDeploymentsPage.js +1 -1
  391. package/dist/node/components/docs/studio/StudioGettingStartedPage.js +1 -1
  392. package/dist/node/components/docs/studio/StudioIntegrationsPage.js +1 -1
  393. package/dist/node/components/docs/studio/StudioOverviewPage.js +109 -56
  394. package/dist/node/components/docs/studio/StudioVisualBuilderPage.js +1 -1
  395. package/dist/node/components/docs/studio/index.js +170 -117
  396. package/dist/node/components/integrations/index.js +25 -25
  397. package/dist/node/components/integrations/molecules/IntegrationCard.js +5 -5
  398. package/dist/node/components/integrations/organisms/IntegrationMarketplace.js +12 -12
  399. package/dist/node/components/integrations/organisms/IntegrationSettings.js +7 -7
  400. package/dist/node/components/integrations/organisms/KnowledgeSourceList.js +6 -6
  401. package/dist/node/components/legal/PrivacyTemplate.js +67 -67
  402. package/dist/node/components/legal/TermsTemplate.js +54 -54
  403. package/dist/node/components/legal/index.js +121 -121
  404. package/dist/node/components/shared/FeatureGateNotice.js +4 -4
  405. package/dist/node/components/shared/index.js +4 -4
  406. package/dist/node/components/shell/WorkspaceHeader.js +4 -4
  407. package/dist/node/components/shell/WorkspaceProjectShellLayout.js +10 -10
  408. package/dist/node/components/shell/WorkspaceShellRenderer.js +8 -8
  409. package/dist/node/components/shell/WorkspaceSidebar.js +2 -2
  410. package/dist/node/components/shell/index.js +12 -12
  411. package/dist/node/components/templates/index.js +835 -835
  412. package/dist/node/components/templates/messaging/ConversationList.js +11 -11
  413. package/dist/node/components/templates/messaging/MessageComposer.js +11 -11
  414. package/dist/node/components/templates/messaging/MessageThread.js +6 -6
  415. package/dist/node/components/templates/messaging/MessagingWorkspace.js +23 -23
  416. package/dist/node/components/templates/messaging/index.js +23 -23
  417. package/dist/node/components/templates/recipes/LanguageSwitcher.js +1 -1
  418. package/dist/node/components/templates/recipes/RecipeCard.js +5 -5
  419. package/dist/node/components/templates/recipes/RecipeDetail.js +8 -8
  420. package/dist/node/components/templates/recipes/RecipeList.js +17 -17
  421. package/dist/node/components/templates/recipes/index.js +17 -17
  422. package/dist/node/components/templates/todos/FilterBar.js +9 -9
  423. package/dist/node/components/templates/todos/TaskForm.js +14 -14
  424. package/dist/node/components/templates/todos/TaskItem.js +4 -4
  425. package/dist/node/components/templates/todos/TaskList.js +30 -30
  426. package/dist/node/components/templates/todos/index.js +30 -30
  427. package/dist/node/features/contracts-registry.js +15 -15
  428. package/dist/node/features/docs/docs.contracts.js +2 -2
  429. package/dist/node/features/docs/index.js +2 -2
  430. package/dist/node/features/index.js +18 -18
  431. package/dist/node/features/registry.js +1 -1
  432. package/dist/node/index.js +17034 -18047
  433. package/dist/node/libs/email/client.js +1 -1
  434. package/dist/node/libs/email/contact.js +1 -1
  435. package/dist/node/libs/email/newsletter.js +1 -1
  436. package/dist/node/libs/email/waitlist-application.js +1 -1
  437. package/dist/node/libs/email/waitlist.js +1 -1
  438. package/dist/node/libs/email.js +1 -1
  439. package/dist/node/presentation/features/atoms/FeatureIcon/FeatureIcon.js +7 -7
  440. package/dist/node/presentation/features/atoms/FeatureIcon/index.js +7 -7
  441. package/dist/node/presentation/features/atoms/index.js +7 -7
  442. package/dist/node/presentation/features/hooks/index.js +56 -56
  443. package/dist/node/presentation/features/hooks/useContractsRegistry.js +18 -18
  444. package/dist/node/presentation/features/hooks/useFeatureFilters.js +1 -1
  445. package/dist/node/presentation/features/hooks/useFeatureRegistry.js +1 -1
  446. package/dist/node/presentation/features/hooks/useRelatedDocs.js +1 -1
  447. package/dist/node/presentation/features/index.js +1364 -1364
  448. package/dist/node/presentation/features/molecules/FeatureCard/FeatureCard.js +15 -15
  449. package/dist/node/presentation/features/molecules/FeatureCard/index.js +15 -15
  450. package/dist/node/presentation/features/molecules/FeatureCategoryHeader/FeatureCategoryHeader.js +7 -7
  451. package/dist/node/presentation/features/molecules/FeatureCategoryHeader/index.js +7 -7
  452. package/dist/node/presentation/features/molecules/FeatureFilters/FeatureFilters.js +1 -1
  453. package/dist/node/presentation/features/molecules/FeatureFilters/index.js +1 -1
  454. package/dist/node/presentation/features/molecules/FeatureHoverPreview/FeatureHoverPreview.js +5 -5
  455. package/dist/node/presentation/features/molecules/FeatureHoverPreview/index.js +5 -5
  456. package/dist/node/presentation/features/molecules/index.js +77 -77
  457. package/dist/node/presentation/features/organisms/FeatureDataViewsList.js +18 -18
  458. package/dist/node/presentation/features/organisms/FeatureDiscovery/FeatureDiscovery.js +121 -121
  459. package/dist/node/presentation/features/organisms/FeatureDiscovery/index.js +121 -121
  460. package/dist/node/presentation/features/organisms/FeatureEventsList.js +18 -18
  461. package/dist/node/presentation/features/organisms/FeatureFormsList.js +18 -18
  462. package/dist/node/presentation/features/organisms/FeatureOperationsList.js +15 -15
  463. package/dist/node/presentation/features/organisms/FeaturePresentationsList.js +18 -18
  464. package/dist/node/presentation/features/organisms/index.js +401 -401
  465. package/dist/node/presentation/features/templates/FeatureDataViewDetailTemplate/FeatureDataViewDetailTemplate.js +13 -13
  466. package/dist/node/presentation/features/templates/FeatureDataViewDetailTemplate/index.js +13 -13
  467. package/dist/node/presentation/features/templates/FeatureDataViewsTemplate/FeatureDataViewsTemplate.js +20 -20
  468. package/dist/node/presentation/features/templates/FeatureDataViewsTemplate/index.js +20 -20
  469. package/dist/node/presentation/features/templates/FeatureEventDetailTemplate/FeatureEventDetailTemplate.js +12 -12
  470. package/dist/node/presentation/features/templates/FeatureEventDetailTemplate/index.js +12 -12
  471. package/dist/node/presentation/features/templates/FeatureEventsTemplate/FeatureEventsTemplate.js +18 -18
  472. package/dist/node/presentation/features/templates/FeatureEventsTemplate/index.js +18 -18
  473. package/dist/node/presentation/features/templates/FeatureFormDetailTemplate/FeatureFormDetailTemplate.js +13 -13
  474. package/dist/node/presentation/features/templates/FeatureFormDetailTemplate/index.js +13 -13
  475. package/dist/node/presentation/features/templates/FeatureFormsTemplate/FeatureFormsTemplate.js +20 -20
  476. package/dist/node/presentation/features/templates/FeatureFormsTemplate/index.js +20 -20
  477. package/dist/node/presentation/features/templates/FeatureOperationDetailTemplate/FeatureOperationDetailTemplate.js +8 -8
  478. package/dist/node/presentation/features/templates/FeatureOperationDetailTemplate/index.js +8 -8
  479. package/dist/node/presentation/features/templates/FeatureOperationsTemplate/FeatureOperationsTemplate.js +15 -15
  480. package/dist/node/presentation/features/templates/FeatureOperationsTemplate/index.js +15 -15
  481. package/dist/node/presentation/features/templates/FeatureOverviewTemplate/FeatureOverviewTemplate.js +2 -2
  482. package/dist/node/presentation/features/templates/FeatureOverviewTemplate/index.js +2 -2
  483. package/dist/node/presentation/features/templates/FeaturePresentationDetailTemplate/FeaturePresentationDetailTemplate.js +12 -12
  484. package/dist/node/presentation/features/templates/FeaturePresentationDetailTemplate/index.js +12 -12
  485. package/dist/node/presentation/features/templates/FeaturePresentationsTemplate/FeaturePresentationsTemplate.js +18 -18
  486. package/dist/node/presentation/features/templates/FeaturePresentationsTemplate/index.js +18 -18
  487. package/dist/presentation/features/atoms/FeatureIcon/FeatureIcon.js +7 -7
  488. package/dist/presentation/features/atoms/FeatureIcon/index.d.ts +1 -1
  489. package/dist/presentation/features/atoms/FeatureIcon/index.js +7 -7
  490. package/dist/presentation/features/atoms/index.js +7 -7
  491. package/dist/presentation/features/hooks/index.d.ts +3 -3
  492. package/dist/presentation/features/hooks/index.js +56 -56
  493. package/dist/presentation/features/hooks/useContractsRegistry.js +18 -18
  494. package/dist/presentation/features/hooks/useFeatureFilters.js +1 -1
  495. package/dist/presentation/features/hooks/useFeatureRegistry.js +1 -1
  496. package/dist/presentation/features/hooks/useRelatedDocs.js +1 -1
  497. package/dist/presentation/features/index.d.ts +14 -14
  498. package/dist/presentation/features/index.js +1364 -1364
  499. package/dist/presentation/features/molecules/FeatureCard/FeatureCard.js +15 -15
  500. package/dist/presentation/features/molecules/FeatureCard/index.js +15 -15
  501. package/dist/presentation/features/molecules/FeatureCategoryHeader/FeatureCategoryHeader.js +7 -7
  502. package/dist/presentation/features/molecules/FeatureCategoryHeader/index.js +7 -7
  503. package/dist/presentation/features/molecules/FeatureFilters/FeatureFilters.js +1 -1
  504. package/dist/presentation/features/molecules/FeatureFilters/index.js +1 -1
  505. package/dist/presentation/features/molecules/FeatureHoverPreview/FeatureHoverPreview.js +5 -5
  506. package/dist/presentation/features/molecules/FeatureHoverPreview/index.js +5 -5
  507. package/dist/presentation/features/molecules/index.d.ts +1 -1
  508. package/dist/presentation/features/molecules/index.js +77 -77
  509. package/dist/presentation/features/organisms/FeatureDataViewsList.js +18 -18
  510. package/dist/presentation/features/organisms/FeatureDiscovery/FeatureDiscovery.js +121 -121
  511. package/dist/presentation/features/organisms/FeatureDiscovery/index.d.ts +1 -1
  512. package/dist/presentation/features/organisms/FeatureDiscovery/index.js +121 -121
  513. package/dist/presentation/features/organisms/FeatureEventsList.js +18 -18
  514. package/dist/presentation/features/organisms/FeatureFormsList.js +18 -18
  515. package/dist/presentation/features/organisms/FeatureOperationsList.js +15 -15
  516. package/dist/presentation/features/organisms/FeaturePresentationsList.js +18 -18
  517. package/dist/presentation/features/organisms/index.d.ts +4 -4
  518. package/dist/presentation/features/organisms/index.js +401 -401
  519. package/dist/presentation/features/templates/FeatureDataViewDetailTemplate/FeatureDataViewDetailTemplate.js +13 -13
  520. package/dist/presentation/features/templates/FeatureDataViewDetailTemplate/index.js +13 -13
  521. package/dist/presentation/features/templates/FeatureDataViewDetailTemplate/types.d.ts +1 -1
  522. package/dist/presentation/features/templates/FeatureDataViewsTemplate/FeatureDataViewsTemplate.js +20 -20
  523. package/dist/presentation/features/templates/FeatureDataViewsTemplate/index.js +20 -20
  524. package/dist/presentation/features/templates/FeatureEventDetailTemplate/FeatureEventDetailTemplate.js +12 -12
  525. package/dist/presentation/features/templates/FeatureEventDetailTemplate/index.js +12 -12
  526. package/dist/presentation/features/templates/FeatureEventsTemplate/FeatureEventsTemplate.js +18 -18
  527. package/dist/presentation/features/templates/FeatureEventsTemplate/index.js +18 -18
  528. package/dist/presentation/features/templates/FeatureFormDetailTemplate/FeatureFormDetailTemplate.js +13 -13
  529. package/dist/presentation/features/templates/FeatureFormDetailTemplate/index.js +13 -13
  530. package/dist/presentation/features/templates/FeatureFormsTemplate/FeatureFormsTemplate.js +20 -20
  531. package/dist/presentation/features/templates/FeatureFormsTemplate/index.js +20 -20
  532. package/dist/presentation/features/templates/FeatureOperationDetailTemplate/FeatureOperationDetailTemplate.js +8 -8
  533. package/dist/presentation/features/templates/FeatureOperationDetailTemplate/index.js +8 -8
  534. package/dist/presentation/features/templates/FeatureOperationsTemplate/FeatureOperationsTemplate.js +15 -15
  535. package/dist/presentation/features/templates/FeatureOperationsTemplate/index.js +15 -15
  536. package/dist/presentation/features/templates/FeatureOverviewTemplate/FeatureOverviewTemplate.js +2 -2
  537. package/dist/presentation/features/templates/FeatureOverviewTemplate/index.js +2 -2
  538. package/dist/presentation/features/templates/FeaturePresentationDetailTemplate/FeaturePresentationDetailTemplate.js +12 -12
  539. package/dist/presentation/features/templates/FeaturePresentationDetailTemplate/index.js +12 -12
  540. package/dist/presentation/features/templates/FeaturePresentationsTemplate/FeaturePresentationsTemplate.js +18 -18
  541. package/dist/presentation/features/templates/FeaturePresentationsTemplate/index.js +18 -18
  542. package/package.json +70 -32
  543. package/src/__tests__/env-setup.ts +1 -1
  544. package/src/__tests__/mocks/prisma.ts +78 -78
  545. package/src/__tests__/setup.ts +2 -2
  546. package/src/application/context-storage/index.ts +42 -42
  547. package/src/application/index.ts +1 -1
  548. package/src/application/mcp/cliMcp.ts +221 -221
  549. package/src/application/mcp/common.ts +210 -210
  550. package/src/application/mcp/contractsMcp.ts +15 -15
  551. package/src/application/mcp/contractsMcpResources.ts +119 -119
  552. package/src/application/mcp/contractsMcpTools.ts +218 -218
  553. package/src/application/mcp/contractsMcpTypes.ts +35 -35
  554. package/src/application/mcp/docsMcp.ts +173 -173
  555. package/src/application/mcp/index.ts +2 -2
  556. package/src/application/mcp/internalMcp.ts +204 -204
  557. package/src/application/mcp/providerRankingMcp.ts +346 -344
  558. package/src/bundles/LibraryBundle.ts +136 -136
  559. package/src/components/docs/DocsIndexPage.tsx +189 -241
  560. package/src/components/docs/advanced/AdvancedMCPPage.tsx +168 -168
  561. package/src/components/docs/advanced/AdvancedOverlayEditorPage.tsx +52 -52
  562. package/src/components/docs/advanced/AdvancedRenderersPage.tsx +53 -53
  563. package/src/components/docs/advanced/AdvancedSpecExperimentsPage.tsx +48 -48
  564. package/src/components/docs/advanced/AdvancedTelemetryPage.tsx +205 -205
  565. package/src/components/docs/advanced/AdvancedWorkflowMonitoringPage.tsx +42 -42
  566. package/src/components/docs/advanced/index.ts +2 -2
  567. package/src/components/docs/architecture/ArchitectureAppConfigPage.tsx +127 -127
  568. package/src/components/docs/architecture/ArchitectureControlPlanePage.tsx +79 -79
  569. package/src/components/docs/architecture/ArchitectureIntegrationBindingPage.tsx +147 -147
  570. package/src/components/docs/architecture/ArchitectureKnowledgeBindingPage.tsx +193 -193
  571. package/src/components/docs/architecture/ArchitectureMultiTenancyPage.tsx +73 -73
  572. package/src/components/docs/architecture/ArchitectureOverviewPage.tsx +98 -273
  573. package/src/components/docs/architecture/index.ts +3 -3
  574. package/src/components/docs/comparison/ComparisonAutomationPlatformsPage.tsx +137 -137
  575. package/src/components/docs/comparison/ComparisonEnterprisePlatformsPage.tsx +138 -138
  576. package/src/components/docs/comparison/ComparisonInternalToolBuildersPage.tsx +147 -147
  577. package/src/components/docs/comparison/ComparisonOverviewPage.tsx +106 -106
  578. package/src/components/docs/comparison/ComparisonWindmillPage.tsx +143 -143
  579. package/src/components/docs/comparison/ComparisonWorkflowEnginesPage.tsx +168 -168
  580. package/src/components/docs/comparison/index.ts +2 -2
  581. package/src/components/docs/docsManifest.ts +720 -0
  582. package/src/components/docs/ecosystem/IntegrationsPage.tsx +45 -45
  583. package/src/components/docs/ecosystem/PluginsPage.tsx +77 -77
  584. package/src/components/docs/ecosystem/RegistryPage.tsx +48 -48
  585. package/src/components/docs/ecosystem/TemplatesPage.tsx +52 -52
  586. package/src/components/docs/ecosystem/ecosystem.docblocks.ts +42 -42
  587. package/src/components/docs/ecosystem/index.ts +2 -2
  588. package/src/components/docs/examples/DocsExamplesPage.tsx +78 -66
  589. package/src/components/docs/examples/ExampleShowcasePage.tsx +122 -0
  590. package/src/components/docs/examples/exampleShowcaseData.ts +65 -0
  591. package/src/components/docs/examples/index.ts +1 -0
  592. package/src/components/docs/generated/docs-index._common.json +1757 -1757
  593. package/src/components/docs/generated/docs-index.agent-console.json +376 -376
  594. package/src/components/docs/generated/docs-index.ai-chat-assistant.json +8 -8
  595. package/src/components/docs/generated/docs-index.ai-chat.json +104 -104
  596. package/src/components/docs/generated/docs-index.ai-support-bot.json +8 -8
  597. package/src/components/docs/generated/docs-index.analytics-dashboard.json +168 -168
  598. package/src/components/docs/generated/docs-index.app-config.json +136 -136
  599. package/src/components/docs/generated/docs-index.audit-trail.json +48 -48
  600. package/src/components/docs/generated/docs-index.calendar-google.json +8 -8
  601. package/src/components/docs/generated/docs-index.content-generation.json +8 -8
  602. package/src/components/docs/generated/docs-index.crm-pipeline.json +160 -160
  603. package/src/components/docs/generated/docs-index.email-gmail.json +8 -8
  604. package/src/components/docs/generated/docs-index.feature-flags.json +216 -216
  605. package/src/components/docs/generated/docs-index.files.json +176 -176
  606. package/src/components/docs/generated/docs-index.generated.ts +19 -19
  607. package/src/components/docs/generated/docs-index.health.json +96 -96
  608. package/src/components/docs/generated/docs-index.identity-rbac.json +312 -312
  609. package/src/components/docs/generated/docs-index.in-app-docs.json +8 -8
  610. package/src/components/docs/generated/docs-index.integration-hub.json +264 -264
  611. package/src/components/docs/generated/docs-index.integration-posthog.json +8 -8
  612. package/src/components/docs/generated/docs-index.integration-stripe.json +8 -8
  613. package/src/components/docs/generated/docs-index.integration-supabase.json +8 -8
  614. package/src/components/docs/generated/docs-index.jobs.json +136 -136
  615. package/src/components/docs/generated/docs-index.kb-update-pipeline.json +128 -128
  616. package/src/components/docs/generated/docs-index.knowledge-canon.json +8 -8
  617. package/src/components/docs/generated/docs-index.learning-journey-ambient-coach.json +8 -8
  618. package/src/components/docs/generated/docs-index.learning-journey-crm-onboarding.json +48 -48
  619. package/src/components/docs/generated/docs-index.learning-journey-duo-drills.json +8 -8
  620. package/src/components/docs/generated/docs-index.learning-journey-platform-tour.json +48 -48
  621. package/src/components/docs/generated/docs-index.learning-journey-quest-challenges.json +8 -8
  622. package/src/components/docs/generated/docs-index.learning-journey-registry.json +32 -32
  623. package/src/components/docs/generated/docs-index.learning-journey-studio-onboarding.json +48 -48
  624. package/src/components/docs/generated/docs-index.learning-journey-ui-coaching.json +8 -8
  625. package/src/components/docs/generated/docs-index.learning-journey-ui-gamified.json +8 -8
  626. package/src/components/docs/generated/docs-index.learning-journey-ui-onboarding.json +8 -8
  627. package/src/components/docs/generated/docs-index.learning-journey-ui-shared.json +8 -8
  628. package/src/components/docs/generated/docs-index.learning-journey.json +216 -216
  629. package/src/components/docs/generated/docs-index.learning-patterns.json +8 -8
  630. package/src/components/docs/generated/docs-index.lifecycle-cli.json +8 -8
  631. package/src/components/docs/generated/docs-index.lifecycle-dashboard.json +8 -8
  632. package/src/components/docs/generated/docs-index.locale-jurisdiction-gate.json +48 -48
  633. package/src/components/docs/generated/docs-index.manifest.json +376 -376
  634. package/src/components/docs/generated/docs-index.marketplace.json +336 -336
  635. package/src/components/docs/generated/docs-index.meeting-recorder-providers.json +8 -8
  636. package/src/components/docs/generated/docs-index.meeting-recorder.json +48 -48
  637. package/src/components/docs/generated/docs-index.metrics.json +200 -200
  638. package/src/components/docs/generated/docs-index.minimal.json +16 -16
  639. package/src/components/docs/generated/docs-index.notifications.json +64 -64
  640. package/src/components/docs/generated/docs-index.openbanking-powens.json +8 -8
  641. package/src/components/docs/generated/docs-index.openbanking.json +64 -64
  642. package/src/components/docs/generated/docs-index.opencode-cli.json +16 -16
  643. package/src/components/docs/generated/docs-index.personalization.json +8 -8
  644. package/src/components/docs/generated/docs-index.platform-acp.json +72 -72
  645. package/src/components/docs/generated/docs-index.platform-agent.json +96 -96
  646. package/src/components/docs/generated/docs-index.platform-context.json +56 -56
  647. package/src/components/docs/generated/docs-index.platform-database.json +48 -48
  648. package/src/components/docs/generated/docs-index.platform-docs.json +88 -88
  649. package/src/components/docs/generated/docs-index.platform-integrations.json +320 -320
  650. package/src/components/docs/generated/docs-index.platform-knowledge.json +56 -56
  651. package/src/components/docs/generated/docs-index.platform-provider-ranking.json +96 -96
  652. package/src/components/docs/generated/docs-index.pocket-family-office.json +120 -120
  653. package/src/components/docs/generated/docs-index.policy-safe-knowledge-assistant.json +8 -8
  654. package/src/components/docs/generated/docs-index.product-intent.json +8 -8
  655. package/src/components/docs/generated/docs-index.project-management-sync.json +8 -8
  656. package/src/components/docs/generated/docs-index.saas-boilerplate.json +208 -208
  657. package/src/components/docs/generated/docs-index.service-business-os.json +192 -192
  658. package/src/components/docs/generated/docs-index.team-hub.json +184 -184
  659. package/src/components/docs/generated/docs-index.unknown.json +512 -512
  660. package/src/components/docs/generated/docs-index.versioned-knowledge-base.json +80 -80
  661. package/src/components/docs/generated/docs-index.video-api-showcase.json +32 -32
  662. package/src/components/docs/generated/docs-index.video-docs-terminal.json +8 -8
  663. package/src/components/docs/generated/docs-index.video-marketing-clip.json +8 -8
  664. package/src/components/docs/generated/docs-index.voice-providers.json +8 -8
  665. package/src/components/docs/generated/docs-index.wealth-snapshot.json +152 -152
  666. package/src/components/docs/generated/docs-index.workflow-system.json +432 -432
  667. package/src/components/docs/generated/docs-index.workspace-cli.json +8 -8
  668. package/src/components/docs/generated/index.ts +6 -6
  669. package/src/components/docs/generated/loader.ts +49 -49
  670. package/src/components/docs/getting-started/CLIPage.tsx +157 -157
  671. package/src/components/docs/getting-started/CompatibilityPage.tsx +69 -69
  672. package/src/components/docs/getting-started/DataViewTutorialPage.tsx +63 -63
  673. package/src/components/docs/getting-started/DeveloperToolsPage.tsx +141 -140
  674. package/src/components/docs/getting-started/HelloWorldPage.tsx +88 -88
  675. package/src/components/docs/getting-started/InstallationPage.tsx +78 -78
  676. package/src/components/docs/getting-started/StartHerePage.tsx +64 -64
  677. package/src/components/docs/getting-started/TroubleshootingPage.tsx +68 -68
  678. package/src/components/docs/getting-started/VSCodeExtensionPage.tsx +233 -233
  679. package/src/components/docs/getting-started/getting-started.docblocks.ts +30 -30
  680. package/src/components/docs/getting-started/index.ts +6 -5
  681. package/src/components/docs/guides/GuideCIDiffGatingPage.tsx +88 -88
  682. package/src/components/docs/guides/GuideContractTypesPage.tsx +266 -266
  683. package/src/components/docs/guides/GuideDocsPipelinePage.tsx +78 -78
  684. package/src/components/docs/guides/GuideGenerateDocsClientsSchemasPage.tsx +89 -89
  685. package/src/components/docs/guides/GuideImportExistingCodebasesPage.tsx +360 -360
  686. package/src/components/docs/guides/GuideNextjsOneEndpointPage.tsx +117 -117
  687. package/src/components/docs/guides/GuideSpecValidationTypingPage.tsx +82 -82
  688. package/src/components/docs/guides/GuidesIndexPage.tsx +109 -99
  689. package/src/components/docs/guides/guides.docblocks.ts +60 -60
  690. package/src/components/docs/guides/index.ts +4 -4
  691. package/src/components/docs/index.ts +26 -40
  692. package/src/components/docs/integrations/IntegrationsCircuitBreakersPage.tsx +22 -22
  693. package/src/components/docs/integrations/IntegrationsElevenLabsPage.tsx +41 -41
  694. package/src/components/docs/integrations/IntegrationsGithubPage.tsx +66 -66
  695. package/src/components/docs/integrations/IntegrationsGmailPage.tsx +44 -44
  696. package/src/components/docs/integrations/IntegrationsGoogleCalendarPage.tsx +31 -31
  697. package/src/components/docs/integrations/IntegrationsHealthRoutingPage.tsx +80 -80
  698. package/src/components/docs/integrations/IntegrationsMistralPage.tsx +65 -65
  699. package/src/components/docs/integrations/IntegrationsOpenAIPage.tsx +54 -54
  700. package/src/components/docs/integrations/IntegrationsOverviewPage.tsx +124 -529
  701. package/src/components/docs/integrations/IntegrationsPostmarkPage.tsx +97 -97
  702. package/src/components/docs/integrations/IntegrationsPowensPage.tsx +165 -165
  703. package/src/components/docs/integrations/IntegrationsQdrantPage.tsx +44 -44
  704. package/src/components/docs/integrations/IntegrationsResendPage.tsx +40 -40
  705. package/src/components/docs/integrations/IntegrationsS3Page.tsx +48 -48
  706. package/src/components/docs/integrations/IntegrationsSlackPage.tsx +70 -70
  707. package/src/components/docs/integrations/IntegrationsSpecModelPage.tsx +139 -139
  708. package/src/components/docs/integrations/IntegrationsStripePage.tsx +153 -153
  709. package/src/components/docs/integrations/IntegrationsTwilioPage.tsx +50 -50
  710. package/src/components/docs/integrations/IntegrationsWhatsappMetaPage.tsx +69 -69
  711. package/src/components/docs/integrations/IntegrationsWhatsappTwilioPage.tsx +73 -73
  712. package/src/components/docs/integrations/index.ts +1 -1
  713. package/src/components/docs/intent/ContractFirstApiPage.tsx +61 -61
  714. package/src/components/docs/intent/DeterministicCodegenPage.tsx +81 -80
  715. package/src/components/docs/intent/GenerateClientFromSchemaPage.tsx +108 -108
  716. package/src/components/docs/intent/OpenapiAlternativePage.tsx +98 -98
  717. package/src/components/docs/intent/SchemaValidationTypescriptPage.tsx +79 -79
  718. package/src/components/docs/intent/SpecDrivenDevelopmentPage.tsx +67 -67
  719. package/src/components/docs/intent/index.ts +3 -3
  720. package/src/components/docs/intent/intent-pages.docblocks.ts +186 -186
  721. package/src/components/docs/knowledge/KnowledgeCategoriesPage.tsx +304 -304
  722. package/src/components/docs/knowledge/KnowledgeExamplesPage.tsx +84 -84
  723. package/src/components/docs/knowledge/KnowledgeOverviewPage.tsx +76 -285
  724. package/src/components/docs/knowledge/KnowledgeSourcesPage.tsx +171 -171
  725. package/src/components/docs/knowledge/KnowledgeSpacesPage.tsx +132 -132
  726. package/src/components/docs/knowledge/index.ts +1 -1
  727. package/src/components/docs/libraries/LibrariesAccessibilityPage.tsx +95 -95
  728. package/src/components/docs/libraries/LibrariesAiAgentPage.tsx +58 -58
  729. package/src/components/docs/libraries/LibrariesAnalyticsPage.tsx +39 -39
  730. package/src/components/docs/libraries/LibrariesContentGenPage.tsx +41 -41
  731. package/src/components/docs/libraries/LibrariesContractsPage.tsx +132 -132
  732. package/src/components/docs/libraries/LibrariesCostTrackingPage.tsx +47 -47
  733. package/src/components/docs/libraries/LibrariesDataBackendPage.tsx +73 -73
  734. package/src/components/docs/libraries/LibrariesDataViewsPage.tsx +76 -76
  735. package/src/components/docs/libraries/LibrariesDesignSystemPage.tsx +115 -115
  736. package/src/components/docs/libraries/LibrariesEvolutionPage.tsx +64 -64
  737. package/src/components/docs/libraries/LibrariesGraphQLPage.tsx +92 -92
  738. package/src/components/docs/libraries/LibrariesGrowthPage.tsx +37 -37
  739. package/src/components/docs/libraries/LibrariesMultiTenancyPage.tsx +47 -47
  740. package/src/components/docs/libraries/LibrariesObservabilityPage.tsx +58 -58
  741. package/src/components/docs/libraries/LibrariesOverlayEnginePage.tsx +51 -51
  742. package/src/components/docs/libraries/LibrariesOverviewPage.tsx +137 -301
  743. package/src/components/docs/libraries/LibrariesPersonalizationPage.tsx +57 -57
  744. package/src/components/docs/libraries/LibrariesProgressiveDeliveryPage.tsx +51 -51
  745. package/src/components/docs/libraries/LibrariesResiliencePage.tsx +54 -54
  746. package/src/components/docs/libraries/LibrariesRuntimePage.tsx +96 -96
  747. package/src/components/docs/libraries/LibrariesSLOPage.tsx +52 -52
  748. package/src/components/docs/libraries/LibrariesSchemaPage.tsx +131 -131
  749. package/src/components/docs/libraries/LibrariesSupportBotPage.tsx +59 -59
  750. package/src/components/docs/libraries/LibrariesTestingPage.tsx +64 -64
  751. package/src/components/docs/libraries/LibrariesUIKitPage.tsx +85 -85
  752. package/src/components/docs/libraries/LibrariesWorkflowComposerPage.tsx +38 -38
  753. package/src/components/docs/libraries/LibrariesWorkflowsPage.tsx +79 -79
  754. package/src/components/docs/libraries/index.ts +4 -4
  755. package/src/components/docs/manifesto/ManifestoPage.tsx +61 -132
  756. package/src/components/docs/ops/AutoEvolutionOpsPage.tsx +81 -81
  757. package/src/components/docs/ops/DistributedTracingOpsPage.tsx +28 -28
  758. package/src/components/docs/ops/ops-lifecycle.docblocks.ts +32 -32
  759. package/src/components/docs/ops/ops-runbooks-a.docblocks.ts +60 -60
  760. package/src/components/docs/ops/ops-runbooks-b.docblocks.ts +60 -60
  761. package/src/components/docs/ops/ops-slo-tenant.docblocks.ts +61 -61
  762. package/src/components/docs/ops/ops-top.docs.ts +10 -10
  763. package/src/components/docs/ops/ops.docs.ts +6 -6
  764. package/src/components/docs/product/product.docblocks.ts +60 -60
  765. package/src/components/docs/reference/DocsMarkdownContent.tsx +74 -74
  766. package/src/components/docs/reference/DocsReferenceContent.tsx +51 -51
  767. package/src/components/docs/reference/DocsReferenceIndexClient.tsx +106 -105
  768. package/src/components/docs/reference/DocsReferenceIndexPage.tsx +2 -2
  769. package/src/components/docs/reference/DocsReferencePage.tsx +3 -3
  770. package/src/components/docs/reference/docsMarkdownParser.ts +90 -90
  771. package/src/components/docs/safety/SafetyAuditingPage.tsx +189 -189
  772. package/src/components/docs/safety/SafetyMigrationsPage.tsx +189 -189
  773. package/src/components/docs/safety/SafetyOverviewPage.tsx +70 -157
  774. package/src/components/docs/safety/SafetyPDPPage.tsx +163 -163
  775. package/src/components/docs/safety/SafetySecurityTrustPage.tsx +89 -89
  776. package/src/components/docs/safety/SafetySigningPage.tsx +38 -38
  777. package/src/components/docs/safety/SafetyTenantIsolationPage.tsx +39 -39
  778. package/src/components/docs/safety/index.ts +3 -3
  779. package/src/components/docs/shared/StudioPrompt.tsx +17 -17
  780. package/src/components/docs/specs/SpecsCapabilitiesPage.tsx +79 -79
  781. package/src/components/docs/specs/SpecsDataViewsPage.tsx +142 -142
  782. package/src/components/docs/specs/SpecsOverlaysPage.tsx +202 -202
  783. package/src/components/docs/specs/SpecsOverviewPage.tsx +118 -193
  784. package/src/components/docs/specs/SpecsPolicyPage.tsx +233 -233
  785. package/src/components/docs/specs/SpecsWorkflowsPage.tsx +156 -156
  786. package/src/components/docs/specs/index.ts +3 -3
  787. package/src/components/docs/studio/StudioBYOKPage.tsx +11 -11
  788. package/src/components/docs/studio/StudioDeploymentsPage.tsx +11 -11
  789. package/src/components/docs/studio/StudioGettingStartedPage.tsx +11 -11
  790. package/src/components/docs/studio/StudioIntegrationsPage.tsx +11 -11
  791. package/src/components/docs/studio/StudioOverviewPage.tsx +94 -73
  792. package/src/components/docs/studio/StudioVisualBuilderPage.tsx +11 -11
  793. package/src/components/docs/studio/index.ts +4 -4
  794. package/src/components/docs/tech/contracts/tech-docs.docblocks.ts +10 -10
  795. package/src/components/integrations/molecules/IntegrationCard.tsx +71 -72
  796. package/src/components/integrations/organisms/IntegrationMarketplace.tsx +116 -116
  797. package/src/components/integrations/organisms/IntegrationSettings.tsx +201 -201
  798. package/src/components/integrations/organisms/KnowledgeSourceList.tsx +93 -94
  799. package/src/components/legal/PrivacyTemplate.tsx +611 -611
  800. package/src/components/legal/TermsTemplate.tsx +675 -675
  801. package/src/components/shared/FeatureGateNotice.tsx +26 -27
  802. package/src/components/shell/WorkspaceHeader.tsx +80 -80
  803. package/src/components/shell/WorkspaceProjectShellLayout.tsx +59 -58
  804. package/src/components/shell/WorkspaceShellRenderer.tsx +69 -68
  805. package/src/components/shell/WorkspaceSidebar.tsx +58 -58
  806. package/src/components/shell/index.ts +1 -1
  807. package/src/components/templates/engine/index.ts +29 -28
  808. package/src/components/templates/index.ts +1 -1
  809. package/src/components/templates/messaging/ConversationList.tsx +68 -69
  810. package/src/components/templates/messaging/MessageComposer.tsx +59 -59
  811. package/src/components/templates/messaging/MessageThread.tsx +73 -74
  812. package/src/components/templates/messaging/MessagingWorkspace.tsx +18 -19
  813. package/src/components/templates/messaging/index.ts +1 -1
  814. package/src/components/templates/messaging/types.ts +17 -17
  815. package/src/components/templates/recipes/LanguageSwitcher.tsx +20 -20
  816. package/src/components/templates/recipes/RecipeCard.tsx +56 -56
  817. package/src/components/templates/recipes/RecipeDetail.tsx +43 -43
  818. package/src/components/templates/recipes/RecipeList.tsx +62 -63
  819. package/src/components/templates/recipes/index.ts +2 -2
  820. package/src/components/templates/recipes/types.ts +24 -24
  821. package/src/components/templates/todos/FilterBar.tsx +84 -84
  822. package/src/components/templates/todos/TaskForm.tsx +118 -119
  823. package/src/components/templates/todos/TaskItem.tsx +78 -78
  824. package/src/components/templates/todos/TaskList.tsx +106 -107
  825. package/src/components/templates/todos/index.ts +2 -2
  826. package/src/components/templates/todos/types.ts +11 -11
  827. package/src/config/contractspec-blueprint.ts +55 -55
  828. package/src/config/contractspec-branding.ts +37 -37
  829. package/src/config/contractspec-routes.ts +22 -22
  830. package/src/config/index.ts +14 -15
  831. package/src/features/contracts-registry.ts +118 -118
  832. package/src/features/docs/docs.contracts.ts +6 -6
  833. package/src/features/docs/index.ts +6 -6
  834. package/src/features/docs.feature.ts +27 -27
  835. package/src/features/index.ts +59 -63
  836. package/src/features/mcp.feature.ts +24 -24
  837. package/src/features/presentations.feature.ts +27 -27
  838. package/src/features/registry.ts +14 -14
  839. package/src/index.ts +2 -2
  840. package/src/infrastructure/elysia/logger.ts +21 -21
  841. package/src/libs/email/client.test.ts +81 -81
  842. package/src/libs/email/client.ts +111 -111
  843. package/src/libs/email/contact.ts +35 -35
  844. package/src/libs/email/newsletter.ts +46 -46
  845. package/src/libs/email/types.ts +29 -29
  846. package/src/libs/email/utils.ts +5 -5
  847. package/src/libs/email/waitlist-application.ts +69 -69
  848. package/src/libs/email/waitlist.ts +46 -46
  849. package/src/libs/email.ts +7 -7
  850. package/src/libs/posthog/client.ts +44 -44
  851. package/src/libs/posthog/native.ts +23 -22
  852. package/src/libs/posthog/server.ts +7 -7
  853. package/src/libs/pricing-examples.ts +12 -12
  854. package/src/presentation/features/atoms/FeatureIcon/FeatureIcon.tsx +90 -90
  855. package/src/presentation/features/atoms/FeatureIcon/index.ts +3 -3
  856. package/src/presentation/features/hooks/index.ts +9 -9
  857. package/src/presentation/features/hooks/useContractsRegistry.ts +23 -23
  858. package/src/presentation/features/hooks/useFeatureFilters.ts +117 -117
  859. package/src/presentation/features/hooks/useFeatureRegistry.ts +40 -40
  860. package/src/presentation/features/hooks/useRelatedDocs.ts +28 -28
  861. package/src/presentation/features/index.ts +50 -52
  862. package/src/presentation/features/molecules/FeatureCard/FeatureCard.tsx +80 -80
  863. package/src/presentation/features/molecules/FeatureCard/types.ts +6 -6
  864. package/src/presentation/features/molecules/FeatureCategoryHeader/FeatureCategoryHeader.tsx +54 -54
  865. package/src/presentation/features/molecules/FeatureCategoryHeader/index.ts +2 -2
  866. package/src/presentation/features/molecules/FeatureFilters/FeatureFilters.tsx +67 -67
  867. package/src/presentation/features/molecules/FeatureFilters/types.ts +20 -20
  868. package/src/presentation/features/molecules/FeatureHoverPreview/FeatureHoverPreview.tsx +120 -121
  869. package/src/presentation/features/molecules/FeatureHoverPreview/index.ts +2 -2
  870. package/src/presentation/features/molecules/index.ts +8 -8
  871. package/src/presentation/features/organisms/FeatureDataViewsList.tsx +21 -21
  872. package/src/presentation/features/organisms/FeatureDetail/FeatureDetail.tsx +86 -86
  873. package/src/presentation/features/organisms/FeatureDetail/types.ts +4 -4
  874. package/src/presentation/features/organisms/FeatureDiscovery/FeatureDiscovery.tsx +210 -210
  875. package/src/presentation/features/organisms/FeatureDiscovery/index.ts +3 -3
  876. package/src/presentation/features/organisms/FeatureDiscovery/types.ts +10 -10
  877. package/src/presentation/features/organisms/FeatureEventsList.tsx +19 -19
  878. package/src/presentation/features/organisms/FeatureFormsList.tsx +19 -19
  879. package/src/presentation/features/organisms/FeatureOperationsList.tsx +21 -21
  880. package/src/presentation/features/organisms/FeaturePresentationsList.tsx +21 -21
  881. package/src/presentation/features/organisms/index.ts +6 -6
  882. package/src/presentation/features/templates/FeatureDataViewDetailTemplate/FeatureDataViewDetailTemplate.tsx +219 -219
  883. package/src/presentation/features/templates/FeatureDataViewDetailTemplate/types.ts +7 -7
  884. package/src/presentation/features/templates/FeatureDataViewsTemplate/FeatureDataViewsTemplate.tsx +26 -26
  885. package/src/presentation/features/templates/FeatureEventDetailTemplate/FeatureEventDetailTemplate.tsx +195 -195
  886. package/src/presentation/features/templates/FeatureEventDetailTemplate/types.ts +7 -7
  887. package/src/presentation/features/templates/FeatureEventsTemplate/FeatureEventsTemplate.tsx +26 -26
  888. package/src/presentation/features/templates/FeatureFormDetailTemplate/FeatureFormDetailTemplate.tsx +216 -216
  889. package/src/presentation/features/templates/FeatureFormDetailTemplate/types.ts +7 -7
  890. package/src/presentation/features/templates/FeatureFormsTemplate/FeatureFormsTemplate.tsx +26 -26
  891. package/src/presentation/features/templates/FeatureOperationDetailTemplate/FeatureOperationDetailTemplate.tsx +228 -228
  892. package/src/presentation/features/templates/FeatureOperationDetailTemplate/types.ts +7 -7
  893. package/src/presentation/features/templates/FeatureOperationsTemplate/FeatureOperationsTemplate.tsx +26 -26
  894. package/src/presentation/features/templates/FeatureOverviewTemplate/FeatureOverviewTemplate.tsx +24 -24
  895. package/src/presentation/features/templates/FeaturePresentationDetailTemplate/FeaturePresentationDetailTemplate.tsx +201 -201
  896. package/src/presentation/features/templates/FeaturePresentationDetailTemplate/types.ts +8 -8
  897. package/src/presentation/features/templates/FeaturePresentationsTemplate/FeaturePresentationsTemplate.tsx +26 -26
  898. package/src/presentation/features/templates/types.ts +2 -2
  899. package/tsconfig.json +12 -12
  900. package/tsdown.config.js +5 -5
@@ -1,9 +1,9 @@
1
1
  // @bun
2
- // src/components/docs/safety/SafetyOverviewPage.tsx
2
+ // src/components/docs/safety/SafetyAuditingPage.tsx
3
3
  import Link from "@contractspec/lib.ui-link";
4
4
  import { ChevronRight } from "lucide-react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
- function SafetyOverviewPage() {
6
+ function SafetyAuditingPage() {
7
7
  return /* @__PURE__ */ jsxs("div", {
8
8
  className: "space-y-8",
9
9
  children: [
@@ -11,345 +11,19 @@ function SafetyOverviewPage() {
11
11
  className: "space-y-4",
12
12
  children: [
13
13
  /* @__PURE__ */ jsx("h1", {
14
- className: "text-4xl font-bold",
15
- children: "Safety Overview"
16
- }),
17
- /* @__PURE__ */ jsxs("p", {
18
- className: "text-muted-foreground",
19
- children: [
20
- "ContractSpec is designed with ",
21
- /* @__PURE__ */ jsx("strong", {
22
- children: "safety by default"
23
- }),
24
- ". Every operation is governed by policies, every change is audited, and every deployment is reversible. This section covers the core safety mechanisms that protect your application and data."
25
- ]
26
- })
27
- ]
28
- }),
29
- /* @__PURE__ */ jsxs("div", {
30
- className: "space-y-4",
31
- children: [
32
- /* @__PURE__ */ jsx("h2", {
33
- className: "text-2xl font-bold",
34
- children: "Core safety features"
35
- }),
36
- /* @__PURE__ */ jsxs("div", {
37
- className: "space-y-6",
38
- children: [
39
- /* @__PURE__ */ jsxs("div", {
40
- className: "space-y-2",
41
- children: [
42
- /* @__PURE__ */ jsx("h3", {
43
- className: "text-xl font-semibold",
44
- children: /* @__PURE__ */ jsx(Link, {
45
- href: "/docs/safety/signing",
46
- className: "text-violet-400 hover:text-violet-300",
47
- children: "Spec Signing"
48
- })
49
- }),
50
- /* @__PURE__ */ jsx("p", {
51
- className: "text-muted-foreground",
52
- children: "All specifications are cryptographically signed before deployment. This ensures that only authorized changes reach production and that specs cannot be tampered with in transit or at rest. Signatures are verified at runtime, and unsigned specs are rejected."
53
- })
54
- ]
55
- }),
56
- /* @__PURE__ */ jsxs("div", {
57
- className: "space-y-2",
58
- children: [
59
- /* @__PURE__ */ jsx("h3", {
60
- className: "text-xl font-semibold",
61
- children: /* @__PURE__ */ jsx(Link, {
62
- href: "/docs/safety/pdp",
63
- className: "text-violet-400 hover:text-violet-300",
64
- children: "Policy Decision Points (PDP)"
65
- })
66
- }),
67
- /* @__PURE__ */ jsx("p", {
68
- className: "text-muted-foreground",
69
- children: "Every API call, UI render, and data access passes through a centralized Policy Decision Point. The PDP evaluates attribute-based access control (ABAC) rules and PII policies to determine whether the operation is allowed. This ensures consistent enforcement across your entire application."
70
- })
71
- ]
72
- }),
73
- /* @__PURE__ */ jsxs("div", {
74
- className: "space-y-2",
75
- children: [
76
- /* @__PURE__ */ jsx("h3", {
77
- className: "text-xl font-semibold",
78
- children: /* @__PURE__ */ jsx(Link, {
79
- href: "/docs/safety/auditing",
80
- className: "text-violet-400 hover:text-violet-300",
81
- children: "Audit Logs"
82
- })
83
- }),
84
- /* @__PURE__ */ jsx("p", {
85
- className: "text-muted-foreground",
86
- children: "ContractSpec automatically records every operation in tamper-evident audit logs. These logs capture who did what, when, and why\u2014including policy decisions, data access, and administrative actions. Audit logs are essential for compliance, security investigations, and debugging."
87
- })
88
- ]
89
- }),
90
- /* @__PURE__ */ jsxs("div", {
91
- className: "space-y-2",
92
- children: [
93
- /* @__PURE__ */ jsx("h3", {
94
- className: "text-xl font-semibold",
95
- children: /* @__PURE__ */ jsx(Link, {
96
- href: "/docs/safety/migrations",
97
- className: "text-violet-400 hover:text-violet-300",
98
- children: "Migrations"
99
- })
100
- }),
101
- /* @__PURE__ */ jsxs("p", {
102
- className: "text-muted-foreground",
103
- children: [
104
- "Schema and data migrations are managed through",
105
- " ",
106
- /* @__PURE__ */ jsx("strong", {
107
- children: "MigrationSpecs"
108
- }),
109
- ". Each migration is versioned, reversible, and tested before deployment. This allows you to evolve your application safely without downtime or data loss."
110
- ]
111
- })
112
- ]
113
- }),
114
- /* @__PURE__ */ jsxs("div", {
115
- className: "space-y-2",
116
- children: [
117
- /* @__PURE__ */ jsx("h3", {
118
- className: "text-xl font-semibold",
119
- children: "Dark Launch & Rollback"
120
- }),
121
- /* @__PURE__ */ jsx("p", {
122
- className: "text-muted-foreground",
123
- children: 'New features can be deployed in "dark launch" mode, where they run in production but are not visible to users. This allows you to test performance and correctness with real traffic before enabling the feature. If issues arise, you can instantly roll back to the previous version without redeploying.'
124
- })
125
- ]
126
- }),
127
- /* @__PURE__ */ jsxs("div", {
128
- className: "space-y-2",
129
- children: [
130
- /* @__PURE__ */ jsx("h3", {
131
- className: "text-xl font-semibold",
132
- children: "Data Classification"
133
- }),
134
- /* @__PURE__ */ jsx("p", {
135
- className: "text-muted-foreground",
136
- children: "Fields in your specs can be tagged with sensitivity levels (e.g., PII, PHI, confidential). The policy engine uses these tags to enforce access controls, redaction rules, and data retention policies automatically. This reduces the risk of accidental data leaks."
137
- })
138
- ]
139
- })
140
- ]
141
- })
142
- ]
143
- }),
144
- /* @__PURE__ */ jsxs("div", {
145
- className: "space-y-4",
146
- children: [
147
- /* @__PURE__ */ jsx("h2", {
148
- className: "text-2xl font-bold",
149
- children: "Why safety matters"
150
- }),
151
- /* @__PURE__ */ jsx("p", {
152
- className: "text-muted-foreground",
153
- children: "Modern applications handle sensitive data and critical operations. A single bug or misconfiguration can lead to data breaches, compliance violations, or service outages. ContractSpec's safety features are not optional add-ons\u2014they are built into the core platform and enforced automatically."
154
- }),
155
- /* @__PURE__ */ jsx("p", {
156
- className: "text-muted-foreground",
157
- children: "By making safety the default, ContractSpec allows you to move fast without breaking things. You can deploy new features confidently, knowing that policies are enforced, changes are audited, and rollbacks are always available."
158
- })
159
- ]
160
- }),
161
- /* @__PURE__ */ jsxs("div", {
162
- className: "space-y-4",
163
- children: [
164
- /* @__PURE__ */ jsx("h2", {
165
- className: "text-2xl font-bold",
166
- children: "Next steps"
167
- }),
168
- /* @__PURE__ */ jsx("p", {
169
- className: "text-muted-foreground",
170
- children: "Explore each safety feature in detail using the links above, or continue with the advanced topics:"
171
- }),
172
- /* @__PURE__ */ jsxs("div", {
173
- className: "flex flex-wrap gap-4 pt-4",
174
- children: [
175
- /* @__PURE__ */ jsxs(Link, {
176
- href: "/docs/safety/signing",
177
- className: "btn-primary",
178
- children: [
179
- "Spec Signing ",
180
- /* @__PURE__ */ jsx(ChevronRight, {
181
- size: 16,
182
- className: "inline"
183
- })
184
- ]
185
- }),
186
- /* @__PURE__ */ jsxs(Link, {
187
- href: "/docs/safety/pdp",
188
- className: "btn-ghost",
189
- children: [
190
- "Policy Decision Points ",
191
- /* @__PURE__ */ jsx(ChevronRight, {
192
- size: 16,
193
- className: "inline"
194
- })
195
- ]
196
- }),
197
- /* @__PURE__ */ jsxs(Link, {
198
- href: "/docs/safety/auditing",
199
- className: "btn-ghost",
200
- children: [
201
- "Audit Logs ",
202
- /* @__PURE__ */ jsx(ChevronRight, {
203
- size: 16,
204
- className: "inline"
205
- })
206
- ]
207
- }),
208
- /* @__PURE__ */ jsxs(Link, {
209
- href: "/docs/safety/migrations",
210
- className: "btn-ghost",
211
- children: [
212
- "Migrations ",
213
- /* @__PURE__ */ jsx(ChevronRight, {
214
- size: 16,
215
- className: "inline"
216
- })
217
- ]
218
- }),
219
- /* @__PURE__ */ jsxs(Link, {
220
- href: "/docs/safety/security-trust",
221
- className: "btn-ghost",
222
- children: [
223
- "Security & Trust ",
224
- /* @__PURE__ */ jsx(ChevronRight, {
225
- size: 16,
226
- className: "inline"
227
- })
228
- ]
229
- })
230
- ]
231
- })
232
- ]
233
- })
234
- ]
235
- });
236
- }
237
-
238
- // src/components/docs/safety/SafetySigningPage.tsx
239
- import Link2 from "@contractspec/lib.ui-link";
240
- import { ChevronRight as ChevronRight2 } from "lucide-react";
241
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
242
- function SafetySigningPage() {
243
- return /* @__PURE__ */ jsxs2("div", {
244
- className: "space-y-8",
245
- children: [
246
- /* @__PURE__ */ jsxs2("div", {
247
- className: "space-y-2",
248
- children: [
249
- /* @__PURE__ */ jsx2("h1", {
250
- className: "text-4xl font-bold",
251
- children: "Spec Signing"
252
- }),
253
- /* @__PURE__ */ jsx2("p", {
254
- className: "text-muted-foreground text-lg",
255
- children: "Signing ensures specs haven't been tampered with and provides an audit trail of all changes."
256
- })
257
- ]
258
- }),
259
- /* @__PURE__ */ jsxs2("div", {
260
- className: "space-y-6",
261
- children: [
262
- /* @__PURE__ */ jsxs2("div", {
263
- className: "space-y-3",
264
- children: [
265
- /* @__PURE__ */ jsx2("h2", {
266
- className: "text-2xl font-bold",
267
- children: "How it works"
268
- }),
269
- /* @__PURE__ */ jsx2("p", {
270
- className: "text-muted-foreground",
271
- children: "Every spec is cryptographically signed before deployment. The signature proves that the spec hasn't been modified since it was signed and creates a permanent record of who deployed it and when."
272
- })
273
- ]
274
- }),
275
- /* @__PURE__ */ jsxs2("div", {
276
- className: "space-y-3",
277
- children: [
278
- /* @__PURE__ */ jsx2("h2", {
279
- className: "text-2xl font-bold",
280
- children: "Signing a spec"
281
- }),
282
- /* @__PURE__ */ jsx2("div", {
283
- className: "bg-background/50 border-border text-muted-foreground overflow-x-auto rounded-lg border p-4 font-mono text-sm",
284
- children: /* @__PURE__ */ jsx2("pre", {
285
- children: `contractspec sign app.spec.ts --key ~/.contractspec/key.pem
286
- contractspec deploy --signed app.spec.ts.signed`
287
- })
288
- })
289
- ]
290
- }),
291
- /* @__PURE__ */ jsxs2("div", {
292
- className: "space-y-3",
293
- children: [
294
- /* @__PURE__ */ jsx2("h2", {
295
- className: "text-2xl font-bold",
296
- children: "Verifying signatures"
297
- }),
298
- /* @__PURE__ */ jsx2("div", {
299
- className: "bg-background/50 border-border text-muted-foreground overflow-x-auto rounded-lg border p-4 font-mono text-sm",
300
- children: /* @__PURE__ */ jsx2("pre", {
301
- children: `contractspec verify app.spec.ts.signed
302
- # Output: \u2713 Signature valid
303
- # Signed by: alice@example.com
304
- # Timestamp: 2024-11-08T10:30:00Z`
305
- })
306
- })
307
- ]
308
- }),
309
- /* @__PURE__ */ jsx2("div", {
310
- className: "flex items-center gap-4 pt-4",
311
- children: /* @__PURE__ */ jsxs2(Link2, {
312
- href: "/docs/safety/pdp",
313
- className: "btn-primary",
314
- children: [
315
- "Next: Policy Decision Points ",
316
- /* @__PURE__ */ jsx2(ChevronRight2, {
317
- size: 16
318
- })
319
- ]
320
- })
321
- })
322
- ]
323
- })
324
- ]
325
- });
326
- }
327
-
328
- // src/components/docs/safety/SafetyAuditingPage.tsx
329
- import Link3 from "@contractspec/lib.ui-link";
330
- import { ChevronRight as ChevronRight3 } from "lucide-react";
331
- import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
332
- function SafetyAuditingPage() {
333
- return /* @__PURE__ */ jsxs3("div", {
334
- className: "space-y-8",
335
- children: [
336
- /* @__PURE__ */ jsxs3("div", {
337
- className: "space-y-4",
338
- children: [
339
- /* @__PURE__ */ jsx3("h1", {
340
- className: "text-4xl font-bold",
14
+ className: "font-bold text-4xl",
341
15
  children: "Audit Logs"
342
16
  }),
343
- /* @__PURE__ */ jsxs3("p", {
17
+ /* @__PURE__ */ jsxs("p", {
344
18
  className: "text-muted-foreground",
345
19
  children: [
346
20
  "An ",
347
- /* @__PURE__ */ jsx3("strong", {
21
+ /* @__PURE__ */ jsx("strong", {
348
22
  children: "audit log"
349
23
  }),
350
24
  " (also called an audit trail) is a chronological record of system activities. According to",
351
25
  " ",
352
- /* @__PURE__ */ jsx3("a", {
26
+ /* @__PURE__ */ jsx("a", {
353
27
  href: "https://www.sumologic.com/glossary/audit-log/",
354
28
  target: "_blank",
355
29
  rel: "noopener noreferrer",
@@ -361,59 +35,59 @@ function SafetyAuditingPage() {
361
35
  })
362
36
  ]
363
37
  }),
364
- /* @__PURE__ */ jsxs3("div", {
38
+ /* @__PURE__ */ jsxs("div", {
365
39
  className: "space-y-4",
366
40
  children: [
367
- /* @__PURE__ */ jsx3("h2", {
368
- className: "text-2xl font-bold",
41
+ /* @__PURE__ */ jsx("h2", {
42
+ className: "font-bold text-2xl",
369
43
  children: "Why audit logs matter"
370
44
  }),
371
- /* @__PURE__ */ jsxs3("div", {
45
+ /* @__PURE__ */ jsxs("div", {
372
46
  className: "space-y-3",
373
47
  children: [
374
- /* @__PURE__ */ jsxs3("div", {
48
+ /* @__PURE__ */ jsxs("div", {
375
49
  children: [
376
- /* @__PURE__ */ jsx3("h3", {
377
- className: "text-lg font-semibold",
50
+ /* @__PURE__ */ jsx("h3", {
51
+ className: "font-semibold text-lg",
378
52
  children: "Accountability"
379
53
  }),
380
- /* @__PURE__ */ jsx3("p", {
54
+ /* @__PURE__ */ jsx("p", {
381
55
  className: "text-muted-foreground",
382
56
  children: 'Audit logs answer the question "who did what, when?" This is essential for holding users and administrators accountable for their actions. If data is deleted or modified, the audit log shows exactly who made the change.'
383
57
  })
384
58
  ]
385
59
  }),
386
- /* @__PURE__ */ jsxs3("div", {
60
+ /* @__PURE__ */ jsxs("div", {
387
61
  children: [
388
- /* @__PURE__ */ jsx3("h3", {
389
- className: "text-lg font-semibold",
62
+ /* @__PURE__ */ jsx("h3", {
63
+ className: "font-semibold text-lg",
390
64
  children: "Security"
391
65
  }),
392
- /* @__PURE__ */ jsx3("p", {
66
+ /* @__PURE__ */ jsx("p", {
393
67
  className: "text-muted-foreground",
394
68
  children: "Audit logs help detect and investigate security incidents. For example, if an attacker gains unauthorized access, the logs reveal which resources they accessed and what actions they performed. This information is critical for incident response and forensics."
395
69
  })
396
70
  ]
397
71
  }),
398
- /* @__PURE__ */ jsxs3("div", {
72
+ /* @__PURE__ */ jsxs("div", {
399
73
  children: [
400
- /* @__PURE__ */ jsx3("h3", {
401
- className: "text-lg font-semibold",
74
+ /* @__PURE__ */ jsx("h3", {
75
+ className: "font-semibold text-lg",
402
76
  children: "Compliance"
403
77
  }),
404
- /* @__PURE__ */ jsx3("p", {
78
+ /* @__PURE__ */ jsx("p", {
405
79
  className: "text-muted-foreground",
406
80
  children: "Many regulations (GDPR, HIPAA, SOC 2, PCI DSS) require organizations to maintain audit logs. These logs must be tamper-evident, retained for a specified period, and available for inspection by auditors."
407
81
  })
408
82
  ]
409
83
  }),
410
- /* @__PURE__ */ jsxs3("div", {
84
+ /* @__PURE__ */ jsxs("div", {
411
85
  children: [
412
- /* @__PURE__ */ jsx3("h3", {
413
- className: "text-lg font-semibold",
86
+ /* @__PURE__ */ jsx("h3", {
87
+ className: "font-semibold text-lg",
414
88
  children: "Debugging"
415
89
  }),
416
- /* @__PURE__ */ jsx3("p", {
90
+ /* @__PURE__ */ jsx("p", {
417
91
  className: "text-muted-foreground",
418
92
  children: "When something goes wrong in production, audit logs provide a detailed timeline of events leading up to the failure. This makes it much easier to diagnose and fix issues."
419
93
  })
@@ -423,36 +97,36 @@ function SafetyAuditingPage() {
423
97
  })
424
98
  ]
425
99
  }),
426
- /* @__PURE__ */ jsxs3("div", {
100
+ /* @__PURE__ */ jsxs("div", {
427
101
  className: "space-y-4",
428
102
  children: [
429
- /* @__PURE__ */ jsx3("h2", {
430
- className: "text-2xl font-bold",
103
+ /* @__PURE__ */ jsx("h2", {
104
+ className: "font-bold text-2xl",
431
105
  children: "What ContractSpec logs"
432
106
  }),
433
- /* @__PURE__ */ jsx3("p", {
107
+ /* @__PURE__ */ jsx("p", {
434
108
  className: "text-muted-foreground",
435
109
  children: "ContractSpec automatically logs every significant operation, including:"
436
110
  }),
437
- /* @__PURE__ */ jsxs3("ul", {
438
- className: "text-muted-foreground list-inside list-disc space-y-2",
111
+ /* @__PURE__ */ jsxs("ul", {
112
+ className: "list-inside list-disc space-y-2 text-muted-foreground",
439
113
  children: [
440
- /* @__PURE__ */ jsxs3("li", {
114
+ /* @__PURE__ */ jsxs("li", {
441
115
  children: [
442
- /* @__PURE__ */ jsx3("strong", {
116
+ /* @__PURE__ */ jsx("strong", {
443
117
  children: "API calls"
444
118
  }),
445
119
  " \u2013 Every invocation of a capability, including inputs, outputs, and the user who made the call."
446
120
  ]
447
121
  }),
448
- /* @__PURE__ */ jsxs3("li", {
122
+ /* @__PURE__ */ jsxs("li", {
449
123
  children: [
450
- /* @__PURE__ */ jsx3("strong", {
124
+ /* @__PURE__ */ jsx("strong", {
451
125
  children: "Policy decisions"
452
126
  }),
453
127
  " \u2013 Every decision made by the",
454
128
  " ",
455
- /* @__PURE__ */ jsx3(Link3, {
129
+ /* @__PURE__ */ jsx(Link, {
456
130
  href: "/docs/safety/pdp",
457
131
  className: "text-violet-400 hover:text-violet-300",
458
132
  children: "Policy Decision Point"
@@ -460,33 +134,33 @@ function SafetyAuditingPage() {
460
134
  ", including the rule that matched and the reason for the decision."
461
135
  ]
462
136
  }),
463
- /* @__PURE__ */ jsxs3("li", {
137
+ /* @__PURE__ */ jsxs("li", {
464
138
  children: [
465
- /* @__PURE__ */ jsx3("strong", {
139
+ /* @__PURE__ */ jsx("strong", {
466
140
  children: "Data access"
467
141
  }),
468
142
  " \u2013 Every query to a data view, including which fields were accessed and whether any were redacted."
469
143
  ]
470
144
  }),
471
- /* @__PURE__ */ jsxs3("li", {
145
+ /* @__PURE__ */ jsxs("li", {
472
146
  children: [
473
- /* @__PURE__ */ jsx3("strong", {
147
+ /* @__PURE__ */ jsx("strong", {
474
148
  children: "Workflow execution"
475
149
  }),
476
150
  " \u2013 Every step in a workflow, including retries, compensations, and failures."
477
151
  ]
478
152
  }),
479
- /* @__PURE__ */ jsxs3("li", {
153
+ /* @__PURE__ */ jsxs("li", {
480
154
  children: [
481
- /* @__PURE__ */ jsx3("strong", {
155
+ /* @__PURE__ */ jsx("strong", {
482
156
  children: "Administrative actions"
483
157
  }),
484
158
  " \u2013 Spec deployments, configuration changes, user role assignments, and other privileged operations."
485
159
  ]
486
160
  }),
487
- /* @__PURE__ */ jsxs3("li", {
161
+ /* @__PURE__ */ jsxs("li", {
488
162
  children: [
489
- /* @__PURE__ */ jsx3("strong", {
163
+ /* @__PURE__ */ jsx("strong", {
490
164
  children: "Authentication events"
491
165
  }),
492
166
  " \u2013 Login attempts, password resets, and session expirations."
@@ -496,20 +170,20 @@ function SafetyAuditingPage() {
496
170
  })
497
171
  ]
498
172
  }),
499
- /* @__PURE__ */ jsxs3("div", {
173
+ /* @__PURE__ */ jsxs("div", {
500
174
  className: "space-y-4",
501
175
  children: [
502
- /* @__PURE__ */ jsx3("h2", {
503
- className: "text-2xl font-bold",
176
+ /* @__PURE__ */ jsx("h2", {
177
+ className: "font-bold text-2xl",
504
178
  children: "Audit log format"
505
179
  }),
506
- /* @__PURE__ */ jsx3("p", {
180
+ /* @__PURE__ */ jsx("p", {
507
181
  className: "text-muted-foreground",
508
182
  children: "Each audit log entry is a structured JSON object containing:"
509
183
  }),
510
- /* @__PURE__ */ jsx3("div", {
511
- className: "bg-background/50 border-border text-muted-foreground overflow-x-auto rounded-lg border p-4 font-mono text-sm",
512
- children: /* @__PURE__ */ jsx3("pre", {
184
+ /* @__PURE__ */ jsx("div", {
185
+ className: "overflow-x-auto rounded-lg border border-border bg-background/50 p-4 font-mono text-muted-foreground text-sm",
186
+ children: /* @__PURE__ */ jsx("pre", {
513
187
  children: `{
514
188
  "timestamp": "2025-11-13T14:32:15.123Z",
515
189
  "eventId": "evt_abc123",
@@ -546,43 +220,43 @@ function SafetyAuditingPage() {
546
220
  })
547
221
  ]
548
222
  }),
549
- /* @__PURE__ */ jsxs3("div", {
223
+ /* @__PURE__ */ jsxs("div", {
550
224
  className: "space-y-4",
551
225
  children: [
552
- /* @__PURE__ */ jsx3("h2", {
553
- className: "text-2xl font-bold",
226
+ /* @__PURE__ */ jsx("h2", {
227
+ className: "font-bold text-2xl",
554
228
  children: "Storage and retention"
555
229
  }),
556
- /* @__PURE__ */ jsx3("p", {
230
+ /* @__PURE__ */ jsx("p", {
557
231
  className: "text-muted-foreground",
558
232
  children: "Audit logs are stored in a tamper-evident append-only log. Once written, entries cannot be modified or deleted. This ensures the integrity of the audit trail."
559
233
  }),
560
- /* @__PURE__ */ jsx3("p", {
234
+ /* @__PURE__ */ jsx("p", {
561
235
  className: "text-muted-foreground",
562
236
  children: "ContractSpec supports multiple storage backends:"
563
237
  }),
564
- /* @__PURE__ */ jsxs3("ul", {
565
- className: "text-muted-foreground list-inside list-disc space-y-2",
238
+ /* @__PURE__ */ jsxs("ul", {
239
+ className: "list-inside list-disc space-y-2 text-muted-foreground",
566
240
  children: [
567
- /* @__PURE__ */ jsxs3("li", {
241
+ /* @__PURE__ */ jsxs("li", {
568
242
  children: [
569
- /* @__PURE__ */ jsx3("strong", {
243
+ /* @__PURE__ */ jsx("strong", {
570
244
  children: "Local file system"
571
245
  }),
572
246
  " \u2013 For development and testing."
573
247
  ]
574
248
  }),
575
- /* @__PURE__ */ jsxs3("li", {
249
+ /* @__PURE__ */ jsxs("li", {
576
250
  children: [
577
- /* @__PURE__ */ jsx3("strong", {
251
+ /* @__PURE__ */ jsx("strong", {
578
252
  children: "Cloud object storage"
579
253
  }),
580
254
  " \u2013 S3, GCS, or Azure Blob Storage for production."
581
255
  ]
582
256
  }),
583
- /* @__PURE__ */ jsxs3("li", {
257
+ /* @__PURE__ */ jsxs("li", {
584
258
  children: [
585
- /* @__PURE__ */ jsx3("strong", {
259
+ /* @__PURE__ */ jsx("strong", {
586
260
  children: "SIEM integration"
587
261
  }),
588
262
  " \u2013 Forward logs to Splunk, Datadog, or other security information and event management systems."
@@ -590,86 +264,86 @@ function SafetyAuditingPage() {
590
264
  })
591
265
  ]
592
266
  }),
593
- /* @__PURE__ */ jsx3("p", {
267
+ /* @__PURE__ */ jsx("p", {
594
268
  className: "text-muted-foreground",
595
269
  children: "You can configure retention policies to automatically archive or delete old logs after a specified period (e.g., 7 years for GDPR compliance)."
596
270
  })
597
271
  ]
598
272
  }),
599
- /* @__PURE__ */ jsxs3("div", {
273
+ /* @__PURE__ */ jsxs("div", {
600
274
  className: "space-y-4",
601
275
  children: [
602
- /* @__PURE__ */ jsx3("h2", {
603
- className: "text-2xl font-bold",
276
+ /* @__PURE__ */ jsx("h2", {
277
+ className: "font-bold text-2xl",
604
278
  children: "Querying audit logs"
605
279
  }),
606
- /* @__PURE__ */ jsx3("p", {
280
+ /* @__PURE__ */ jsx("p", {
607
281
  className: "text-muted-foreground",
608
282
  children: "ContractSpec provides a query API for searching audit logs. You can filter by:"
609
283
  }),
610
- /* @__PURE__ */ jsxs3("ul", {
611
- className: "text-muted-foreground list-inside list-disc space-y-2",
284
+ /* @__PURE__ */ jsxs("ul", {
285
+ className: "list-inside list-disc space-y-2 text-muted-foreground",
612
286
  children: [
613
- /* @__PURE__ */ jsx3("li", {
287
+ /* @__PURE__ */ jsx("li", {
614
288
  children: "Time range"
615
289
  }),
616
- /* @__PURE__ */ jsx3("li", {
290
+ /* @__PURE__ */ jsx("li", {
617
291
  children: "Event type"
618
292
  }),
619
- /* @__PURE__ */ jsx3("li", {
293
+ /* @__PURE__ */ jsx("li", {
620
294
  children: "Actor (user ID, role, IP address)"
621
295
  }),
622
- /* @__PURE__ */ jsx3("li", {
296
+ /* @__PURE__ */ jsx("li", {
623
297
  children: "Resource (capability, data view, workflow)"
624
298
  }),
625
- /* @__PURE__ */ jsx3("li", {
299
+ /* @__PURE__ */ jsx("li", {
626
300
  children: "Result (success, failure, denied)"
627
301
  })
628
302
  ]
629
303
  }),
630
- /* @__PURE__ */ jsx3("p", {
304
+ /* @__PURE__ */ jsx("p", {
631
305
  className: "text-muted-foreground",
632
306
  children: 'Example query: "Show all failed login attempts from IP address 203.0.113.42 in the last 24 hours."'
633
307
  })
634
308
  ]
635
309
  }),
636
- /* @__PURE__ */ jsxs3("div", {
310
+ /* @__PURE__ */ jsxs("div", {
637
311
  className: "space-y-4",
638
312
  children: [
639
- /* @__PURE__ */ jsx3("h2", {
640
- className: "text-2xl font-bold",
313
+ /* @__PURE__ */ jsx("h2", {
314
+ className: "font-bold text-2xl",
641
315
  children: "Best practices"
642
316
  }),
643
- /* @__PURE__ */ jsxs3("ul", {
644
- className: "text-muted-foreground list-inside list-disc space-y-2",
317
+ /* @__PURE__ */ jsxs("ul", {
318
+ className: "list-inside list-disc space-y-2 text-muted-foreground",
645
319
  children: [
646
- /* @__PURE__ */ jsxs3("li", {
320
+ /* @__PURE__ */ jsxs("li", {
647
321
  children: [
648
- /* @__PURE__ */ jsx3("strong", {
322
+ /* @__PURE__ */ jsx("strong", {
649
323
  children: "Review logs regularly"
650
324
  }),
651
325
  " \u2013 Set up alerts for suspicious activity (e.g., repeated failed login attempts, unauthorized access attempts)."
652
326
  ]
653
327
  }),
654
- /* @__PURE__ */ jsxs3("li", {
328
+ /* @__PURE__ */ jsxs("li", {
655
329
  children: [
656
- /* @__PURE__ */ jsx3("strong", {
330
+ /* @__PURE__ */ jsx("strong", {
657
331
  children: "Protect log access"
658
332
  }),
659
333
  " \u2013 Only authorized personnel should be able to view audit logs. Use role-based access control to restrict access."
660
334
  ]
661
335
  }),
662
- /* @__PURE__ */ jsxs3("li", {
336
+ /* @__PURE__ */ jsxs("li", {
663
337
  children: [
664
- /* @__PURE__ */ jsx3("strong", {
338
+ /* @__PURE__ */ jsx("strong", {
665
339
  children: "Retain logs long enough"
666
340
  }),
667
341
  " \u2013 Check your compliance requirements and configure retention policies accordingly."
668
342
  ]
669
343
  }),
670
- /* @__PURE__ */ jsxs3("li", {
344
+ /* @__PURE__ */ jsxs("li", {
671
345
  children: [
672
- /* @__PURE__ */ jsx3("strong", {
346
+ /* @__PURE__ */ jsx("strong", {
673
347
  children: "Test log integrity"
674
348
  }),
675
349
  " \u2013 Periodically verify that logs have not been tampered with by checking cryptographic signatures."
@@ -679,20 +353,20 @@ function SafetyAuditingPage() {
679
353
  })
680
354
  ]
681
355
  }),
682
- /* @__PURE__ */ jsxs3("div", {
356
+ /* @__PURE__ */ jsxs("div", {
683
357
  className: "flex items-center gap-4 pt-4",
684
358
  children: [
685
- /* @__PURE__ */ jsx3(Link3, {
359
+ /* @__PURE__ */ jsx(Link, {
686
360
  href: "/docs/safety/pdp",
687
361
  className: "btn-ghost",
688
362
  children: "Previous: Policy Decision Points"
689
363
  }),
690
- /* @__PURE__ */ jsxs3(Link3, {
364
+ /* @__PURE__ */ jsxs(Link, {
691
365
  href: "/docs/safety/migrations",
692
366
  className: "btn-primary",
693
367
  children: [
694
368
  "Next: Migrations ",
695
- /* @__PURE__ */ jsx3(ChevronRight3, {
369
+ /* @__PURE__ */ jsx(ChevronRight, {
696
370
  size: 16
697
371
  })
698
372
  ]
@@ -704,30 +378,30 @@ function SafetyAuditingPage() {
704
378
  }
705
379
 
706
380
  // src/components/docs/safety/SafetyMigrationsPage.tsx
707
- import Link4 from "@contractspec/lib.ui-link";
708
- import { ChevronRight as ChevronRight4 } from "lucide-react";
709
- import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
381
+ import Link2 from "@contractspec/lib.ui-link";
382
+ import { ChevronRight as ChevronRight2 } from "lucide-react";
383
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
710
384
  function SafetyMigrationsPage() {
711
- return /* @__PURE__ */ jsxs4("div", {
385
+ return /* @__PURE__ */ jsxs2("div", {
712
386
  className: "space-y-8",
713
387
  children: [
714
- /* @__PURE__ */ jsxs4("div", {
388
+ /* @__PURE__ */ jsxs2("div", {
715
389
  className: "space-y-4",
716
390
  children: [
717
- /* @__PURE__ */ jsx4("h1", {
718
- className: "text-4xl font-bold",
391
+ /* @__PURE__ */ jsx2("h1", {
392
+ className: "font-bold text-4xl",
719
393
  children: "Migrations"
720
394
  }),
721
- /* @__PURE__ */ jsxs4("p", {
395
+ /* @__PURE__ */ jsxs2("p", {
722
396
  className: "text-muted-foreground",
723
397
  children: [
724
398
  "A ",
725
- /* @__PURE__ */ jsx4("strong", {
399
+ /* @__PURE__ */ jsx2("strong", {
726
400
  children: "schema migration"
727
401
  }),
728
402
  " (also called a database migration) is a set of incremental, reversible changes to a database schema. According to",
729
403
  " ",
730
- /* @__PURE__ */ jsx4("a", {
404
+ /* @__PURE__ */ jsx2("a", {
731
405
  href: "https://en.wikipedia.org/wiki/Schema_migration",
732
406
  target: "_blank",
733
407
  rel: "noopener noreferrer",
@@ -739,96 +413,96 @@ function SafetyMigrationsPage() {
739
413
  })
740
414
  ]
741
415
  }),
742
- /* @__PURE__ */ jsxs4("div", {
416
+ /* @__PURE__ */ jsxs2("div", {
743
417
  className: "space-y-4",
744
418
  children: [
745
- /* @__PURE__ */ jsx4("h2", {
746
- className: "text-2xl font-bold",
419
+ /* @__PURE__ */ jsx2("h2", {
420
+ className: "font-bold text-2xl",
747
421
  children: "Why migrations matter"
748
422
  }),
749
- /* @__PURE__ */ jsx4("p", {
423
+ /* @__PURE__ */ jsx2("p", {
750
424
  className: "text-muted-foreground",
751
425
  children: "As your application evolves, you'll need to change your data model\u2014adding new fields, renaming tables, changing data types, or restructuring relationships. Without a disciplined approach, these changes can lead to:"
752
426
  }),
753
- /* @__PURE__ */ jsxs4("ul", {
754
- className: "text-muted-foreground list-inside list-disc space-y-2",
427
+ /* @__PURE__ */ jsxs2("ul", {
428
+ className: "list-inside list-disc space-y-2 text-muted-foreground",
755
429
  children: [
756
- /* @__PURE__ */ jsx4("li", {
430
+ /* @__PURE__ */ jsx2("li", {
757
431
  children: "Data loss or corruption"
758
432
  }),
759
- /* @__PURE__ */ jsx4("li", {
433
+ /* @__PURE__ */ jsx2("li", {
760
434
  children: "Downtime during deployments"
761
435
  }),
762
- /* @__PURE__ */ jsx4("li", {
436
+ /* @__PURE__ */ jsx2("li", {
763
437
  children: "Inconsistencies between environments (dev, staging, production)"
764
438
  }),
765
- /* @__PURE__ */ jsx4("li", {
439
+ /* @__PURE__ */ jsx2("li", {
766
440
  children: "Difficulty rolling back failed changes"
767
441
  })
768
442
  ]
769
443
  }),
770
- /* @__PURE__ */ jsx4("p", {
444
+ /* @__PURE__ */ jsx2("p", {
771
445
  className: "text-muted-foreground",
772
446
  children: "Migrations solve these problems by treating schema changes as versioned, tested, and reversible operations."
773
447
  })
774
448
  ]
775
449
  }),
776
- /* @__PURE__ */ jsxs4("div", {
450
+ /* @__PURE__ */ jsxs2("div", {
777
451
  className: "space-y-4",
778
452
  children: [
779
- /* @__PURE__ */ jsx4("h2", {
780
- className: "text-2xl font-bold",
453
+ /* @__PURE__ */ jsx2("h2", {
454
+ className: "font-bold text-2xl",
781
455
  children: "How MigrationSpec works"
782
456
  }),
783
- /* @__PURE__ */ jsxs4("p", {
457
+ /* @__PURE__ */ jsxs2("p", {
784
458
  className: "text-muted-foreground",
785
459
  children: [
786
460
  "In ContractSpec, migrations are defined using",
787
461
  " ",
788
- /* @__PURE__ */ jsx4("strong", {
462
+ /* @__PURE__ */ jsx2("strong", {
789
463
  children: "MigrationSpec"
790
464
  }),
791
465
  ". Each migration has:"
792
466
  ]
793
467
  }),
794
- /* @__PURE__ */ jsxs4("ul", {
795
- className: "text-muted-foreground list-inside list-disc space-y-2",
468
+ /* @__PURE__ */ jsxs2("ul", {
469
+ className: "list-inside list-disc space-y-2 text-muted-foreground",
796
470
  children: [
797
- /* @__PURE__ */ jsxs4("li", {
471
+ /* @__PURE__ */ jsxs2("li", {
798
472
  children: [
799
- /* @__PURE__ */ jsx4("strong", {
473
+ /* @__PURE__ */ jsx2("strong", {
800
474
  children: "Version"
801
475
  }),
802
476
  ' \u2013 A unique identifier (e.g., "2025-11-13-001") that determines the order of execution.'
803
477
  ]
804
478
  }),
805
- /* @__PURE__ */ jsxs4("li", {
479
+ /* @__PURE__ */ jsxs2("li", {
806
480
  children: [
807
- /* @__PURE__ */ jsx4("strong", {
481
+ /* @__PURE__ */ jsx2("strong", {
808
482
  children: "Up function"
809
483
  }),
810
484
  ` \u2013 The forward migration that applies the change (e.g., "add column 'email_verified'").`
811
485
  ]
812
486
  }),
813
- /* @__PURE__ */ jsxs4("li", {
487
+ /* @__PURE__ */ jsxs2("li", {
814
488
  children: [
815
- /* @__PURE__ */ jsx4("strong", {
489
+ /* @__PURE__ */ jsx2("strong", {
816
490
  children: "Down function"
817
491
  }),
818
492
  ` \u2013 The reverse migration that undoes the change (e.g., "drop column 'email_verified'").`
819
493
  ]
820
494
  }),
821
- /* @__PURE__ */ jsxs4("li", {
495
+ /* @__PURE__ */ jsxs2("li", {
822
496
  children: [
823
- /* @__PURE__ */ jsx4("strong", {
497
+ /* @__PURE__ */ jsx2("strong", {
824
498
  children: "Dependencies"
825
499
  }),
826
500
  " \u2013 Other migrations that must run before this one."
827
501
  ]
828
502
  }),
829
- /* @__PURE__ */ jsxs4("li", {
503
+ /* @__PURE__ */ jsxs2("li", {
830
504
  children: [
831
- /* @__PURE__ */ jsx4("strong", {
505
+ /* @__PURE__ */ jsx2("strong", {
832
506
  children: "Validation"
833
507
  }),
834
508
  ' \u2013 Optional checks to ensure the migration succeeded (e.g., "verify all users have an email address").'
@@ -838,20 +512,20 @@ function SafetyMigrationsPage() {
838
512
  })
839
513
  ]
840
514
  }),
841
- /* @__PURE__ */ jsxs4("div", {
515
+ /* @__PURE__ */ jsxs2("div", {
842
516
  className: "space-y-4",
843
517
  children: [
844
- /* @__PURE__ */ jsx4("h2", {
845
- className: "text-2xl font-bold",
518
+ /* @__PURE__ */ jsx2("h2", {
519
+ className: "font-bold text-2xl",
846
520
  children: "Example MigrationSpec"
847
521
  }),
848
- /* @__PURE__ */ jsx4("p", {
522
+ /* @__PURE__ */ jsx2("p", {
849
523
  className: "text-muted-foreground",
850
524
  children: "Here's a migration that adds an email verification field to the users table:"
851
525
  }),
852
- /* @__PURE__ */ jsx4("div", {
853
- className: "bg-background/50 border-border text-muted-foreground overflow-x-auto rounded-lg border p-4 font-mono text-sm",
854
- children: /* @__PURE__ */ jsx4("pre", {
526
+ /* @__PURE__ */ jsx2("div", {
527
+ className: "overflow-x-auto rounded-lg border border-border bg-background/50 p-4 font-mono text-muted-foreground text-sm",
528
+ children: /* @__PURE__ */ jsx2("pre", {
855
529
  children: `migrationId: add-email-verified
856
530
  version: 2025-11-13-001
857
531
  dependencies: []
@@ -880,144 +554,144 @@ validation:
880
554
  })
881
555
  ]
882
556
  }),
883
- /* @__PURE__ */ jsxs4("div", {
557
+ /* @__PURE__ */ jsxs2("div", {
884
558
  className: "space-y-4",
885
559
  children: [
886
- /* @__PURE__ */ jsx4("h2", {
887
- className: "text-2xl font-bold",
560
+ /* @__PURE__ */ jsx2("h2", {
561
+ className: "font-bold text-2xl",
888
562
  children: "Running migrations"
889
563
  }),
890
- /* @__PURE__ */ jsx4("p", {
564
+ /* @__PURE__ */ jsx2("p", {
891
565
  className: "text-muted-foreground",
892
566
  children: "Migrations are applied automatically during deployment. The ContractSpec runtime:"
893
567
  }),
894
- /* @__PURE__ */ jsxs4("ol", {
895
- className: "text-muted-foreground list-inside list-decimal space-y-2",
568
+ /* @__PURE__ */ jsxs2("ol", {
569
+ className: "list-inside list-decimal space-y-2 text-muted-foreground",
896
570
  children: [
897
- /* @__PURE__ */ jsx4("li", {
571
+ /* @__PURE__ */ jsx2("li", {
898
572
  children: "Checks which migrations have already been applied (stored in a migrations table)."
899
573
  }),
900
- /* @__PURE__ */ jsx4("li", {
574
+ /* @__PURE__ */ jsx2("li", {
901
575
  children: "Identifies new migrations that need to run."
902
576
  }),
903
- /* @__PURE__ */ jsx4("li", {
577
+ /* @__PURE__ */ jsx2("li", {
904
578
  children: "Executes them in order, respecting dependencies."
905
579
  }),
906
- /* @__PURE__ */ jsx4("li", {
580
+ /* @__PURE__ */ jsx2("li", {
907
581
  children: "Runs validation checks to ensure success."
908
582
  }),
909
- /* @__PURE__ */ jsx4("li", {
583
+ /* @__PURE__ */ jsx2("li", {
910
584
  children: "Records the migration as applied."
911
585
  })
912
586
  ]
913
587
  }),
914
- /* @__PURE__ */ jsx4("p", {
588
+ /* @__PURE__ */ jsx2("p", {
915
589
  className: "text-muted-foreground",
916
590
  children: "If a migration fails, the deployment is aborted, and the system remains in its previous state. You can then fix the migration and redeploy."
917
591
  })
918
592
  ]
919
593
  }),
920
- /* @__PURE__ */ jsxs4("div", {
594
+ /* @__PURE__ */ jsxs2("div", {
921
595
  className: "space-y-4",
922
596
  children: [
923
- /* @__PURE__ */ jsx4("h2", {
924
- className: "text-2xl font-bold",
597
+ /* @__PURE__ */ jsx2("h2", {
598
+ className: "font-bold text-2xl",
925
599
  children: "Rolling back migrations"
926
600
  }),
927
- /* @__PURE__ */ jsxs4("p", {
601
+ /* @__PURE__ */ jsxs2("p", {
928
602
  className: "text-muted-foreground",
929
603
  children: [
930
604
  "If you need to roll back a deployment, ContractSpec automatically runs the ",
931
- /* @__PURE__ */ jsx4("strong", {
605
+ /* @__PURE__ */ jsx2("strong", {
932
606
  children: "down"
933
607
  }),
934
608
  " functions of any migrations that were applied. This restores the database to its previous state."
935
609
  ]
936
610
  }),
937
- /* @__PURE__ */ jsx4("p", {
611
+ /* @__PURE__ */ jsx2("p", {
938
612
  className: "text-muted-foreground",
939
613
  children: "Note that rollbacks are not always possible\u2014for example, if you've deleted a column, you cannot recover the data unless you have a backup. For destructive changes, it's best to use a multi-step migration:"
940
614
  }),
941
- /* @__PURE__ */ jsxs4("ol", {
942
- className: "text-muted-foreground list-inside list-decimal space-y-2",
615
+ /* @__PURE__ */ jsxs2("ol", {
616
+ className: "list-inside list-decimal space-y-2 text-muted-foreground",
943
617
  children: [
944
- /* @__PURE__ */ jsx4("li", {
618
+ /* @__PURE__ */ jsx2("li", {
945
619
  children: "Add the new column (reversible)."
946
620
  }),
947
- /* @__PURE__ */ jsx4("li", {
621
+ /* @__PURE__ */ jsx2("li", {
948
622
  children: "Backfill data from the old column to the new column (reversible)."
949
623
  }),
950
- /* @__PURE__ */ jsx4("li", {
624
+ /* @__PURE__ */ jsx2("li", {
951
625
  children: "Update application code to use the new column (reversible)."
952
626
  }),
953
- /* @__PURE__ */ jsx4("li", {
627
+ /* @__PURE__ */ jsx2("li", {
954
628
  children: "Drop the old column (irreversible\u2014only do this after confirming the new column works)."
955
629
  })
956
630
  ]
957
631
  })
958
632
  ]
959
633
  }),
960
- /* @__PURE__ */ jsxs4("div", {
634
+ /* @__PURE__ */ jsxs2("div", {
961
635
  className: "space-y-4",
962
636
  children: [
963
- /* @__PURE__ */ jsx4("h2", {
964
- className: "text-2xl font-bold",
637
+ /* @__PURE__ */ jsx2("h2", {
638
+ className: "font-bold text-2xl",
965
639
  children: "Best practices"
966
640
  }),
967
- /* @__PURE__ */ jsxs4("ul", {
968
- className: "text-muted-foreground list-inside list-disc space-y-2",
641
+ /* @__PURE__ */ jsxs2("ul", {
642
+ className: "list-inside list-disc space-y-2 text-muted-foreground",
969
643
  children: [
970
- /* @__PURE__ */ jsxs4("li", {
644
+ /* @__PURE__ */ jsxs2("li", {
971
645
  children: [
972
- /* @__PURE__ */ jsx4("strong", {
646
+ /* @__PURE__ */ jsx2("strong", {
973
647
  children: "Test migrations locally"
974
648
  }),
975
649
  " \u2013 Run them against a copy of production data to catch issues before deploying."
976
650
  ]
977
651
  }),
978
- /* @__PURE__ */ jsxs4("li", {
652
+ /* @__PURE__ */ jsxs2("li", {
979
653
  children: [
980
- /* @__PURE__ */ jsx4("strong", {
654
+ /* @__PURE__ */ jsx2("strong", {
981
655
  children: "Keep migrations small"
982
656
  }),
983
657
  " \u2013 Each migration should do one thing. This makes them easier to understand and roll back."
984
658
  ]
985
659
  }),
986
- /* @__PURE__ */ jsxs4("li", {
660
+ /* @__PURE__ */ jsxs2("li", {
987
661
  children: [
988
- /* @__PURE__ */ jsx4("strong", {
662
+ /* @__PURE__ */ jsx2("strong", {
989
663
  children: "Write reversible migrations"
990
664
  }),
991
665
  " \u2013 Always provide a down function, even if you don't plan to roll back."
992
666
  ]
993
667
  }),
994
- /* @__PURE__ */ jsxs4("li", {
668
+ /* @__PURE__ */ jsxs2("li", {
995
669
  children: [
996
- /* @__PURE__ */ jsx4("strong", {
670
+ /* @__PURE__ */ jsx2("strong", {
997
671
  children: "Use transactions"
998
672
  }),
999
673
  " \u2013 Wrap migrations in database transactions so they either fully succeed or fully fail."
1000
674
  ]
1001
675
  }),
1002
- /* @__PURE__ */ jsxs4("li", {
676
+ /* @__PURE__ */ jsxs2("li", {
1003
677
  children: [
1004
- /* @__PURE__ */ jsx4("strong", {
678
+ /* @__PURE__ */ jsx2("strong", {
1005
679
  children: "Avoid destructive changes"
1006
680
  }),
1007
681
  " \u2013 Prefer additive changes (adding columns) over destructive ones (dropping columns). If you must delete data, archive it first."
1008
682
  ]
1009
683
  }),
1010
- /* @__PURE__ */ jsxs4("li", {
684
+ /* @__PURE__ */ jsxs2("li", {
1011
685
  children: [
1012
- /* @__PURE__ */ jsx4("strong", {
686
+ /* @__PURE__ */ jsx2("strong", {
1013
687
  children: "Version your migrations"
1014
688
  }),
1015
689
  " \u2013 Use timestamps or sequential numbers to ensure migrations run in the correct order."
1016
690
  ]
1017
691
  }),
1018
- /* @__PURE__ */ jsxs4("li", {
692
+ /* @__PURE__ */ jsxs2("li", {
1019
693
  children: [
1020
- /* @__PURE__ */ jsx4("strong", {
694
+ /* @__PURE__ */ jsx2("strong", {
1021
695
  children: "Document breaking changes"
1022
696
  }),
1023
697
  " \u2013 If a migration requires application code changes, note this in the migration description."
@@ -1027,51 +701,51 @@ validation:
1027
701
  })
1028
702
  ]
1029
703
  }),
1030
- /* @__PURE__ */ jsxs4("div", {
704
+ /* @__PURE__ */ jsxs2("div", {
1031
705
  className: "space-y-4",
1032
706
  children: [
1033
- /* @__PURE__ */ jsx4("h2", {
1034
- className: "text-2xl font-bold",
707
+ /* @__PURE__ */ jsx2("h2", {
708
+ className: "font-bold text-2xl",
1035
709
  children: "Zero-downtime migrations"
1036
710
  }),
1037
- /* @__PURE__ */ jsx4("p", {
711
+ /* @__PURE__ */ jsx2("p", {
1038
712
  className: "text-muted-foreground",
1039
713
  children: "Some migrations can cause downtime if not handled carefully. For example, adding a NOT NULL column to a large table can lock the table for minutes. To avoid this, use a multi-step approach:"
1040
714
  }),
1041
- /* @__PURE__ */ jsxs4("ol", {
1042
- className: "text-muted-foreground list-inside list-decimal space-y-2",
715
+ /* @__PURE__ */ jsxs2("ol", {
716
+ className: "list-inside list-decimal space-y-2 text-muted-foreground",
1043
717
  children: [
1044
- /* @__PURE__ */ jsx4("li", {
718
+ /* @__PURE__ */ jsx2("li", {
1045
719
  children: "Add the column as nullable."
1046
720
  }),
1047
- /* @__PURE__ */ jsx4("li", {
721
+ /* @__PURE__ */ jsx2("li", {
1048
722
  children: "Backfill the column in batches (without locking the table)."
1049
723
  }),
1050
- /* @__PURE__ */ jsx4("li", {
724
+ /* @__PURE__ */ jsx2("li", {
1051
725
  children: "Add the NOT NULL constraint once all rows are populated."
1052
726
  })
1053
727
  ]
1054
728
  }),
1055
- /* @__PURE__ */ jsx4("p", {
729
+ /* @__PURE__ */ jsx2("p", {
1056
730
  className: "text-muted-foreground",
1057
731
  children: "ContractSpec's migration system supports this pattern by allowing you to split a logical change into multiple versioned migrations."
1058
732
  })
1059
733
  ]
1060
734
  }),
1061
- /* @__PURE__ */ jsxs4("div", {
735
+ /* @__PURE__ */ jsxs2("div", {
1062
736
  className: "flex items-center gap-4 pt-4",
1063
737
  children: [
1064
- /* @__PURE__ */ jsx4(Link4, {
738
+ /* @__PURE__ */ jsx2(Link2, {
1065
739
  href: "/docs/safety/auditing",
1066
740
  className: "btn-ghost",
1067
741
  children: "Previous: Audit Logs"
1068
742
  }),
1069
- /* @__PURE__ */ jsxs4(Link4, {
743
+ /* @__PURE__ */ jsxs2(Link2, {
1070
744
  href: "/docs/advanced/renderers",
1071
745
  className: "btn-primary",
1072
746
  children: [
1073
747
  "Next: Advanced Topics ",
1074
- /* @__PURE__ */ jsx4(ChevronRight4, {
748
+ /* @__PURE__ */ jsx2(ChevronRight2, {
1075
749
  size: 16
1076
750
  })
1077
751
  ]
@@ -1082,31 +756,130 @@ validation:
1082
756
  });
1083
757
  }
1084
758
 
759
+ // src/components/docs/safety/SafetyOverviewPage.tsx
760
+ import Link3 from "@contractspec/lib.ui-link";
761
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
762
+ var safetyPages = [
763
+ {
764
+ title: "Spec signing",
765
+ body: "Protect the integrity of what gets deployed and make changes verifiable.",
766
+ href: "/docs/safety/signing"
767
+ },
768
+ {
769
+ title: "Policy decision points",
770
+ body: "Apply governance consistently across operations, data access, and generated surfaces.",
771
+ href: "/docs/safety/pdp"
772
+ },
773
+ {
774
+ title: "Audit trails",
775
+ body: "Record operational and policy decisions with enough context to inspect and explain them later.",
776
+ href: "/docs/safety/auditing"
777
+ },
778
+ {
779
+ title: "Migrations",
780
+ body: "Evolve data and schema boundaries without losing control of the system.",
781
+ href: "/docs/safety/migrations"
782
+ },
783
+ {
784
+ title: "Tenant isolation",
785
+ body: "Keep configuration, access rules, and sensitive data bounded by tenant.",
786
+ href: "/docs/safety/tenant-isolation"
787
+ },
788
+ {
789
+ title: "Security and trust",
790
+ body: "Understand the trust model, release process, and security expectations around the OSS system.",
791
+ href: "/docs/safety/security-trust"
792
+ }
793
+ ];
794
+ function SafetyOverviewPage() {
795
+ return /* @__PURE__ */ jsxs3("div", {
796
+ className: "space-y-10",
797
+ children: [
798
+ /* @__PURE__ */ jsxs3("div", {
799
+ className: "space-y-3",
800
+ children: [
801
+ /* @__PURE__ */ jsx3("p", {
802
+ className: "editorial-kicker",
803
+ children: "Operate"
804
+ }),
805
+ /* @__PURE__ */ jsx3("h1", {
806
+ className: "font-serif text-4xl tracking-[-0.04em] md:text-5xl",
807
+ children: "Safety is part of the system model, not an afterthought."
808
+ }),
809
+ /* @__PURE__ */ jsx3("p", {
810
+ className: "max-w-3xl text-lg text-muted-foreground leading-8",
811
+ children: "ContractSpec is meant to survive real change: new generated surfaces, policy updates, migrations, integration churn, and operator handoffs. The safety layer makes those changes inspectable, reversible, and governed."
812
+ })
813
+ ]
814
+ }),
815
+ /* @__PURE__ */ jsxs3("div", {
816
+ className: "editorial-proof-strip",
817
+ children: [
818
+ /* @__PURE__ */ jsxs3("div", {
819
+ className: "editorial-stat",
820
+ children: [
821
+ /* @__PURE__ */ jsx3("span", {
822
+ className: "editorial-label",
823
+ children: "Operating rule"
824
+ }),
825
+ /* @__PURE__ */ jsx3("span", {
826
+ className: "editorial-stat-value",
827
+ children: "explicit change beats hidden mutation"
828
+ })
829
+ ]
830
+ }),
831
+ /* @__PURE__ */ jsx3("p", {
832
+ className: "max-w-2xl text-muted-foreground text-sm leading-7",
833
+ children: "Use policies, signing, audit trails, and migrations to keep the system legible even as AI-assisted workflows accelerate change volume."
834
+ })
835
+ ]
836
+ }),
837
+ /* @__PURE__ */ jsx3("div", {
838
+ className: "grid gap-4 md:grid-cols-2",
839
+ children: safetyPages.map((page) => /* @__PURE__ */ jsxs3(Link3, {
840
+ href: page.href,
841
+ className: "editorial-panel",
842
+ children: [
843
+ /* @__PURE__ */ jsx3("h2", {
844
+ className: "font-semibold text-xl",
845
+ children: page.title
846
+ }),
847
+ /* @__PURE__ */ jsx3("p", {
848
+ className: "mt-2 text-muted-foreground text-sm leading-7",
849
+ children: page.body
850
+ })
851
+ ]
852
+ }, page.href))
853
+ })
854
+ ]
855
+ });
856
+ }
857
+
1085
858
  // src/components/docs/safety/SafetyPDPPage.tsx
1086
- import Link5 from "@contractspec/lib.ui-link";
1087
- import { ChevronRight as ChevronRight5 } from "lucide-react";
1088
- import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
859
+ import Link4 from "@contractspec/lib.ui-link";
860
+ import { ChevronRight as ChevronRight3 } from "lucide-react";
861
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
1089
862
  function SafetyPDPPage() {
1090
- return /* @__PURE__ */ jsxs5("div", {
863
+ return /* @__PURE__ */ jsxs4("div", {
1091
864
  className: "space-y-8",
1092
865
  children: [
1093
- /* @__PURE__ */ jsxs5("div", {
866
+ /* @__PURE__ */ jsxs4("div", {
1094
867
  className: "space-y-4",
1095
868
  children: [
1096
- /* @__PURE__ */ jsx5("h1", {
1097
- className: "text-4xl font-bold",
869
+ /* @__PURE__ */ jsx4("h1", {
870
+ className: "font-bold text-4xl",
1098
871
  children: "Policy Decision Points"
1099
872
  }),
1100
- /* @__PURE__ */ jsxs5("p", {
873
+ /* @__PURE__ */ jsxs4("p", {
1101
874
  className: "text-muted-foreground",
1102
875
  children: [
1103
876
  "A ",
1104
- /* @__PURE__ */ jsx5("strong", {
877
+ /* @__PURE__ */ jsx4("strong", {
1105
878
  children: "Policy Decision Point (PDP)"
1106
879
  }),
1107
880
  " is a centralized component that evaluates access control policies and makes authorization decisions. According to",
1108
881
  " ",
1109
- /* @__PURE__ */ jsx5("a", {
882
+ /* @__PURE__ */ jsx4("a", {
1110
883
  href: "https://www.strongdm.com/blog/policy-decision-point",
1111
884
  target: "_blank",
1112
885
  rel: "noopener noreferrer",
@@ -1118,104 +891,104 @@ function SafetyPDPPage() {
1118
891
  })
1119
892
  ]
1120
893
  }),
1121
- /* @__PURE__ */ jsxs5("div", {
894
+ /* @__PURE__ */ jsxs4("div", {
1122
895
  className: "space-y-4",
1123
896
  children: [
1124
- /* @__PURE__ */ jsx5("h2", {
1125
- className: "text-2xl font-bold",
897
+ /* @__PURE__ */ jsx4("h2", {
898
+ className: "font-bold text-2xl",
1126
899
  children: "How the PDP works in ContractSpec"
1127
900
  }),
1128
- /* @__PURE__ */ jsx5("p", {
901
+ /* @__PURE__ */ jsx4("p", {
1129
902
  className: "text-muted-foreground",
1130
903
  children: "In ContractSpec, the PDP is invoked on every operation\u2014whether it's rendering a UI component, executing a capability, or querying a data view. The flow is:"
1131
904
  }),
1132
- /* @__PURE__ */ jsxs5("ol", {
1133
- className: "text-muted-foreground list-inside list-decimal space-y-3",
905
+ /* @__PURE__ */ jsxs4("ol", {
906
+ className: "list-inside list-decimal space-y-3 text-muted-foreground",
1134
907
  children: [
1135
- /* @__PURE__ */ jsxs5("li", {
908
+ /* @__PURE__ */ jsxs4("li", {
1136
909
  children: [
1137
- /* @__PURE__ */ jsx5("strong", {
910
+ /* @__PURE__ */ jsx4("strong", {
1138
911
  children: "Request evaluation"
1139
912
  }),
1140
913
  " \u2013 The runtime sends a request to the PDP containing:",
1141
- /* @__PURE__ */ jsxs5("ul", {
914
+ /* @__PURE__ */ jsxs4("ul", {
1142
915
  className: "mt-2 ml-6 list-inside list-disc space-y-1",
1143
916
  children: [
1144
- /* @__PURE__ */ jsx5("li", {
917
+ /* @__PURE__ */ jsx4("li", {
1145
918
  children: "The user's identity and attributes (roles, groups, location, etc.)"
1146
919
  }),
1147
- /* @__PURE__ */ jsx5("li", {
920
+ /* @__PURE__ */ jsx4("li", {
1148
921
  children: "The resource being accessed (capability, field, workflow step)"
1149
922
  }),
1150
- /* @__PURE__ */ jsx5("li", {
923
+ /* @__PURE__ */ jsx4("li", {
1151
924
  children: "The action being performed (read, write, execute)"
1152
925
  }),
1153
- /* @__PURE__ */ jsx5("li", {
926
+ /* @__PURE__ */ jsx4("li", {
1154
927
  children: "Contextual information (time of day, device type, IP address)"
1155
928
  })
1156
929
  ]
1157
930
  })
1158
931
  ]
1159
932
  }),
1160
- /* @__PURE__ */ jsxs5("li", {
933
+ /* @__PURE__ */ jsxs4("li", {
1161
934
  children: [
1162
- /* @__PURE__ */ jsx5("strong", {
935
+ /* @__PURE__ */ jsx4("strong", {
1163
936
  children: "Policy evaluation"
1164
937
  }),
1165
938
  " \u2013 The PDP evaluates the request against all applicable ",
1166
- /* @__PURE__ */ jsx5("strong", {
939
+ /* @__PURE__ */ jsx4("strong", {
1167
940
  children: "PolicySpecs"
1168
941
  }),
1169
942
  ". These specs define rules using attribute-based access control (ABAC) and can reference:",
1170
- /* @__PURE__ */ jsxs5("ul", {
943
+ /* @__PURE__ */ jsxs4("ul", {
1171
944
  className: "mt-2 ml-6 list-inside list-disc space-y-1",
1172
945
  children: [
1173
- /* @__PURE__ */ jsx5("li", {
946
+ /* @__PURE__ */ jsx4("li", {
1174
947
  children: `User attributes (e.g., "role == 'admin'")`
1175
948
  }),
1176
- /* @__PURE__ */ jsx5("li", {
949
+ /* @__PURE__ */ jsx4("li", {
1177
950
  children: `Resource attributes (e.g., "field.sensitivity == 'PII'")`
1178
951
  }),
1179
- /* @__PURE__ */ jsx5("li", {
952
+ /* @__PURE__ */ jsx4("li", {
1180
953
  children: 'Environmental attributes (e.g., "time.hour >= 9 AND time.hour < 17")'
1181
954
  })
1182
955
  ]
1183
956
  })
1184
957
  ]
1185
958
  }),
1186
- /* @__PURE__ */ jsxs5("li", {
959
+ /* @__PURE__ */ jsxs4("li", {
1187
960
  children: [
1188
- /* @__PURE__ */ jsx5("strong", {
961
+ /* @__PURE__ */ jsx4("strong", {
1189
962
  children: "Decision return"
1190
963
  }),
1191
964
  " \u2013 The PDP returns one of:",
1192
- /* @__PURE__ */ jsxs5("ul", {
965
+ /* @__PURE__ */ jsxs4("ul", {
1193
966
  className: "mt-2 ml-6 list-inside list-disc space-y-1",
1194
967
  children: [
1195
- /* @__PURE__ */ jsxs5("li", {
968
+ /* @__PURE__ */ jsxs4("li", {
1196
969
  children: [
1197
- /* @__PURE__ */ jsx5("code", {
1198
- className: "bg-background/50 rounded px-2 py-1",
970
+ /* @__PURE__ */ jsx4("code", {
971
+ className: "rounded bg-background/50 px-2 py-1",
1199
972
  children: "PERMIT"
1200
973
  }),
1201
974
  " ",
1202
975
  "\u2013 The operation is allowed."
1203
976
  ]
1204
977
  }),
1205
- /* @__PURE__ */ jsxs5("li", {
978
+ /* @__PURE__ */ jsxs4("li", {
1206
979
  children: [
1207
- /* @__PURE__ */ jsx5("code", {
1208
- className: "bg-background/50 rounded px-2 py-1",
980
+ /* @__PURE__ */ jsx4("code", {
981
+ className: "rounded bg-background/50 px-2 py-1",
1209
982
  children: "DENY"
1210
983
  }),
1211
984
  " ",
1212
985
  "\u2013 The operation is blocked."
1213
986
  ]
1214
987
  }),
1215
- /* @__PURE__ */ jsxs5("li", {
988
+ /* @__PURE__ */ jsxs4("li", {
1216
989
  children: [
1217
- /* @__PURE__ */ jsx5("code", {
1218
- className: "bg-background/50 rounded px-2 py-1",
990
+ /* @__PURE__ */ jsx4("code", {
991
+ className: "rounded bg-background/50 px-2 py-1",
1219
992
  children: "REDACT"
1220
993
  }),
1221
994
  " ",
@@ -1226,22 +999,22 @@ function SafetyPDPPage() {
1226
999
  })
1227
1000
  ]
1228
1001
  }),
1229
- /* @__PURE__ */ jsxs5("li", {
1002
+ /* @__PURE__ */ jsxs4("li", {
1230
1003
  children: [
1231
- /* @__PURE__ */ jsx5("strong", {
1004
+ /* @__PURE__ */ jsx4("strong", {
1232
1005
  children: "Enforcement"
1233
1006
  }),
1234
1007
  " \u2013 The runtime enforces the decision. If denied, the operation fails with a clear error message. If redacted, sensitive fields are replaced with placeholders."
1235
1008
  ]
1236
1009
  }),
1237
- /* @__PURE__ */ jsxs5("li", {
1010
+ /* @__PURE__ */ jsxs4("li", {
1238
1011
  children: [
1239
- /* @__PURE__ */ jsx5("strong", {
1012
+ /* @__PURE__ */ jsx4("strong", {
1240
1013
  children: "Auditing"
1241
1014
  }),
1242
1015
  " \u2013 Every PDP decision is logged to the",
1243
1016
  " ",
1244
- /* @__PURE__ */ jsx5(Link5, {
1017
+ /* @__PURE__ */ jsx4(Link4, {
1245
1018
  href: "/docs/safety/auditing",
1246
1019
  className: "text-violet-400 hover:text-violet-300",
1247
1020
  children: "audit log"
@@ -1253,20 +1026,20 @@ function SafetyPDPPage() {
1253
1026
  })
1254
1027
  ]
1255
1028
  }),
1256
- /* @__PURE__ */ jsxs5("div", {
1029
+ /* @__PURE__ */ jsxs4("div", {
1257
1030
  className: "space-y-4",
1258
1031
  children: [
1259
- /* @__PURE__ */ jsx5("h2", {
1260
- className: "text-2xl font-bold",
1032
+ /* @__PURE__ */ jsx4("h2", {
1033
+ className: "font-bold text-2xl",
1261
1034
  children: "Example PolicySpec"
1262
1035
  }),
1263
- /* @__PURE__ */ jsx5("p", {
1036
+ /* @__PURE__ */ jsx4("p", {
1264
1037
  className: "text-muted-foreground",
1265
1038
  children: "Here's a simple policy that restricts access to PII fields:"
1266
1039
  }),
1267
- /* @__PURE__ */ jsx5("div", {
1268
- className: "bg-background/50 border-border text-muted-foreground overflow-x-auto rounded-lg border p-4 font-mono text-sm",
1269
- children: /* @__PURE__ */ jsx5("pre", {
1040
+ /* @__PURE__ */ jsx4("div", {
1041
+ className: "overflow-x-auto rounded-lg border border-border bg-background/50 p-4 font-mono text-muted-foreground text-sm",
1042
+ children: /* @__PURE__ */ jsx4("pre", {
1270
1043
  children: `policyId: pii-access-control
1271
1044
  version: '1.0.0'.0.0
1272
1045
  rules:
@@ -1288,49 +1061,49 @@ rules:
1288
1061
  field.sensitivity == 'PII'`
1289
1062
  })
1290
1063
  }),
1291
- /* @__PURE__ */ jsx5("p", {
1064
+ /* @__PURE__ */ jsx4("p", {
1292
1065
  className: "text-muted-foreground",
1293
1066
  children: "With this policy, admins see all data, support staff see redacted PII, and other users cannot access PII at all."
1294
1067
  })
1295
1068
  ]
1296
1069
  }),
1297
- /* @__PURE__ */ jsxs5("div", {
1070
+ /* @__PURE__ */ jsxs4("div", {
1298
1071
  className: "space-y-4",
1299
1072
  children: [
1300
- /* @__PURE__ */ jsx5("h2", {
1301
- className: "text-2xl font-bold",
1073
+ /* @__PURE__ */ jsx4("h2", {
1074
+ className: "font-bold text-2xl",
1302
1075
  children: "Benefits of centralized decision-making"
1303
1076
  }),
1304
- /* @__PURE__ */ jsxs5("ul", {
1305
- className: "text-muted-foreground list-inside list-disc space-y-2",
1077
+ /* @__PURE__ */ jsxs4("ul", {
1078
+ className: "list-inside list-disc space-y-2 text-muted-foreground",
1306
1079
  children: [
1307
- /* @__PURE__ */ jsxs5("li", {
1080
+ /* @__PURE__ */ jsxs4("li", {
1308
1081
  children: [
1309
- /* @__PURE__ */ jsx5("strong", {
1082
+ /* @__PURE__ */ jsx4("strong", {
1310
1083
  children: "Consistency"
1311
1084
  }),
1312
1085
  " \u2013 Policies are enforced uniformly across all surfaces (API, UI, workflows)."
1313
1086
  ]
1314
1087
  }),
1315
- /* @__PURE__ */ jsxs5("li", {
1088
+ /* @__PURE__ */ jsxs4("li", {
1316
1089
  children: [
1317
- /* @__PURE__ */ jsx5("strong", {
1090
+ /* @__PURE__ */ jsx4("strong", {
1318
1091
  children: "Auditability"
1319
1092
  }),
1320
1093
  " \u2013 Every decision is logged, making it easy to trace why access was granted or denied."
1321
1094
  ]
1322
1095
  }),
1323
- /* @__PURE__ */ jsxs5("li", {
1096
+ /* @__PURE__ */ jsxs4("li", {
1324
1097
  children: [
1325
- /* @__PURE__ */ jsx5("strong", {
1098
+ /* @__PURE__ */ jsx4("strong", {
1326
1099
  children: "Flexibility"
1327
1100
  }),
1328
1101
  " \u2013 Policies can be updated without changing application code."
1329
1102
  ]
1330
1103
  }),
1331
- /* @__PURE__ */ jsxs5("li", {
1104
+ /* @__PURE__ */ jsxs4("li", {
1332
1105
  children: [
1333
- /* @__PURE__ */ jsx5("strong", {
1106
+ /* @__PURE__ */ jsx4("strong", {
1334
1107
  children: "Security"
1335
1108
  }),
1336
1109
  " \u2013 Reduces the risk of authorization bugs by removing ad-hoc checks scattered throughout the codebase."
@@ -1340,54 +1113,54 @@ rules:
1340
1113
  })
1341
1114
  ]
1342
1115
  }),
1343
- /* @__PURE__ */ jsxs5("div", {
1116
+ /* @__PURE__ */ jsxs4("div", {
1344
1117
  className: "space-y-4",
1345
1118
  children: [
1346
- /* @__PURE__ */ jsx5("h2", {
1347
- className: "text-2xl font-bold",
1119
+ /* @__PURE__ */ jsx4("h2", {
1120
+ className: "font-bold text-2xl",
1348
1121
  children: "Performance considerations"
1349
1122
  }),
1350
- /* @__PURE__ */ jsx5("p", {
1123
+ /* @__PURE__ */ jsx4("p", {
1351
1124
  className: "text-muted-foreground",
1352
1125
  children: "Because the PDP is invoked on every operation, performance is critical. ContractSpec optimizes this by:"
1353
1126
  }),
1354
- /* @__PURE__ */ jsxs5("ul", {
1355
- className: "text-muted-foreground list-inside list-disc space-y-2",
1127
+ /* @__PURE__ */ jsxs4("ul", {
1128
+ className: "list-inside list-disc space-y-2 text-muted-foreground",
1356
1129
  children: [
1357
- /* @__PURE__ */ jsx5("li", {
1130
+ /* @__PURE__ */ jsx4("li", {
1358
1131
  children: "Caching policy decisions for identical requests"
1359
1132
  }),
1360
- /* @__PURE__ */ jsx5("li", {
1133
+ /* @__PURE__ */ jsx4("li", {
1361
1134
  children: "Compiling policies into efficient bytecode"
1362
1135
  }),
1363
- /* @__PURE__ */ jsx5("li", {
1136
+ /* @__PURE__ */ jsx4("li", {
1364
1137
  children: "Evaluating only the minimal set of rules needed for each request"
1365
1138
  }),
1366
- /* @__PURE__ */ jsx5("li", {
1139
+ /* @__PURE__ */ jsx4("li", {
1367
1140
  children: "Running the PDP in-process to avoid network latency"
1368
1141
  })
1369
1142
  ]
1370
1143
  }),
1371
- /* @__PURE__ */ jsx5("p", {
1144
+ /* @__PURE__ */ jsx4("p", {
1372
1145
  className: "text-muted-foreground",
1373
1146
  children: "In practice, PDP overhead is typically less than 1ms per request."
1374
1147
  })
1375
1148
  ]
1376
1149
  }),
1377
- /* @__PURE__ */ jsxs5("div", {
1150
+ /* @__PURE__ */ jsxs4("div", {
1378
1151
  className: "flex items-center gap-4 pt-4",
1379
1152
  children: [
1380
- /* @__PURE__ */ jsx5(Link5, {
1153
+ /* @__PURE__ */ jsx4(Link4, {
1381
1154
  href: "/docs/safety/signing",
1382
1155
  className: "btn-ghost",
1383
1156
  children: "Previous: Spec Signing"
1384
1157
  }),
1385
- /* @__PURE__ */ jsxs5(Link5, {
1158
+ /* @__PURE__ */ jsxs4(Link4, {
1386
1159
  href: "/docs/safety/auditing",
1387
1160
  className: "btn-primary",
1388
1161
  children: [
1389
1162
  "Next: Audit Logs ",
1390
- /* @__PURE__ */ jsx5(ChevronRight5, {
1163
+ /* @__PURE__ */ jsx4(ChevronRight3, {
1391
1164
  size: 16
1392
1165
  })
1393
1166
  ]
@@ -1398,187 +1171,101 @@ rules:
1398
1171
  });
1399
1172
  }
1400
1173
 
1401
- // src/components/docs/safety/SafetyTenantIsolationPage.tsx
1402
- import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
1403
- function SafetyTenantIsolationPage() {
1404
- return /* @__PURE__ */ jsxs6("div", {
1405
- className: "space-y-8",
1406
- children: [
1407
- /* @__PURE__ */ jsxs6("div", {
1408
- className: "space-y-4",
1409
- children: [
1410
- /* @__PURE__ */ jsx6("h1", {
1411
- className: "text-4xl font-bold",
1412
- children: "Tenant Isolation"
1413
- }),
1414
- /* @__PURE__ */ jsx6("p", {
1415
- className: "text-muted-foreground text-lg",
1416
- children: 'Preventing cross-tenant data leaks is the #1 security priority for any SaaS. ContractSpec employs "Defense in Depth" to ensure safety.'
1417
- })
1418
- ]
1419
- }),
1420
- /* @__PURE__ */ jsxs6("div", {
1421
- className: "space-y-4",
1422
- children: [
1423
- /* @__PURE__ */ jsx6("h2", {
1424
- className: "text-2xl font-bold",
1425
- children: "Layer 1: RLS Middleware"
1426
- }),
1427
- /* @__PURE__ */ jsxs6("p", {
1428
- children: [
1429
- "The primary defense is the Prisma middleware that rewrites queries to include ",
1430
- /* @__PURE__ */ jsx6("code", {
1431
- children: "WHERE tenantId = ?"
1432
- }),
1433
- ". This protects against developer error (forgetting to filter)."
1434
- ]
1435
- })
1436
- ]
1437
- }),
1438
- /* @__PURE__ */ jsxs6("div", {
1439
- className: "space-y-4",
1440
- children: [
1441
- /* @__PURE__ */ jsx6("h2", {
1442
- className: "text-2xl font-bold",
1443
- children: "Layer 2: Isolation Validator"
1444
- }),
1445
- /* @__PURE__ */ jsxs6("p", {
1446
- children: [
1447
- "For high-security environments, you can use the",
1448
- " ",
1449
- /* @__PURE__ */ jsx6("code", {
1450
- children: "IsolationValidator"
1451
- }),
1452
- " in your test suite to verify that every query generated by your operations actually includes the tenant ID."
1453
- ]
1454
- }),
1455
- /* @__PURE__ */ jsx6("pre", {
1456
- className: "bg-muted rounded-lg border p-4 text-sm",
1457
- children: `import { IsolationValidator } from '@contractspec/lib.multi-tenancy/isolation';
1458
-
1459
- test('findUser query is isolated', () => {
1460
- const isValid = IsolationValidator.validateQuery(
1461
- 'User',
1462
- 'findFirst',
1463
- args,
1464
- 'tenant-123'
1465
- );
1466
- expect(isValid).toBe(true);
1467
- });`
1468
- })
1469
- ]
1470
- }),
1471
- /* @__PURE__ */ jsxs6("div", {
1472
- className: "space-y-4",
1473
- children: [
1474
- /* @__PURE__ */ jsx6("h2", {
1475
- className: "text-2xl font-bold",
1476
- children: "Layer 3: Policy Engine"
1477
- }),
1478
- /* @__PURE__ */ jsx6("p", {
1479
- children: "The Policy Decision Point (PDP) verifies that the authenticated user actually belongs to the requested tenant before any operation logic runs."
1480
- })
1481
- ]
1482
- })
1483
- ]
1484
- });
1485
- }
1486
-
1487
1174
  // src/components/docs/safety/SafetySecurityTrustPage.tsx
1488
- import Link6 from "@contractspec/lib.ui-link";
1489
- import { ChevronRight as ChevronRight6 } from "lucide-react";
1490
- import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
1175
+ import Link5 from "@contractspec/lib.ui-link";
1176
+ import { ChevronRight as ChevronRight4 } from "lucide-react";
1177
+ import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
1491
1178
  function SafetySecurityTrustPage() {
1492
- return /* @__PURE__ */ jsxs7("div", {
1179
+ return /* @__PURE__ */ jsxs5("div", {
1493
1180
  className: "space-y-8",
1494
1181
  children: [
1495
- /* @__PURE__ */ jsxs7("div", {
1182
+ /* @__PURE__ */ jsxs5("div", {
1496
1183
  className: "space-y-4",
1497
1184
  children: [
1498
- /* @__PURE__ */ jsx7("h1", {
1499
- className: "text-4xl font-bold",
1185
+ /* @__PURE__ */ jsx5("h1", {
1186
+ className: "font-bold text-4xl",
1500
1187
  children: "Security & Trust"
1501
1188
  }),
1502
- /* @__PURE__ */ jsx7("p", {
1189
+ /* @__PURE__ */ jsx5("p", {
1503
1190
  className: "text-muted-foreground",
1504
1191
  children: "ContractSpec focuses on deterministic, auditable software delivery. This page summarizes our security posture and trust commitments so teams can adopt with clarity."
1505
1192
  })
1506
1193
  ]
1507
1194
  }),
1508
- /* @__PURE__ */ jsxs7("div", {
1195
+ /* @__PURE__ */ jsxs5("div", {
1509
1196
  className: "card-subtle space-y-4 p-6",
1510
1197
  children: [
1511
- /* @__PURE__ */ jsx7("h2", {
1512
- className: "text-2xl font-bold",
1198
+ /* @__PURE__ */ jsx5("h2", {
1199
+ className: "font-bold text-2xl",
1513
1200
  children: "Security policy"
1514
1201
  }),
1515
- /* @__PURE__ */ jsx7("p", {
1202
+ /* @__PURE__ */ jsx5("p", {
1516
1203
  className: "text-muted-foreground text-sm",
1517
1204
  children: "We publish a dedicated security policy that explains how to report vulnerabilities and how we respond."
1518
1205
  }),
1519
- /* @__PURE__ */ jsxs7(Link6, {
1206
+ /* @__PURE__ */ jsxs5(Link5, {
1520
1207
  href: "/SECURITY.md",
1521
1208
  className: "btn-primary",
1522
1209
  children: [
1523
1210
  "Read the security policy ",
1524
- /* @__PURE__ */ jsx7(ChevronRight6, {
1211
+ /* @__PURE__ */ jsx5(ChevronRight4, {
1525
1212
  size: 16
1526
1213
  })
1527
1214
  ]
1528
1215
  })
1529
1216
  ]
1530
1217
  }),
1531
- /* @__PURE__ */ jsxs7("div", {
1218
+ /* @__PURE__ */ jsxs5("div", {
1532
1219
  className: "grid gap-4 md:grid-cols-2",
1533
1220
  children: [
1534
- /* @__PURE__ */ jsxs7("div", {
1221
+ /* @__PURE__ */ jsxs5("div", {
1535
1222
  className: "card-subtle space-y-3 p-6",
1536
1223
  children: [
1537
- /* @__PURE__ */ jsx7("h3", {
1538
- className: "text-lg font-semibold",
1224
+ /* @__PURE__ */ jsx5("h3", {
1225
+ className: "font-semibold text-lg",
1539
1226
  children: "Release hygiene"
1540
1227
  }),
1541
- /* @__PURE__ */ jsx7("p", {
1228
+ /* @__PURE__ */ jsx5("p", {
1542
1229
  className: "text-muted-foreground text-sm",
1543
1230
  children: "We ship with deterministic CI, changesets, and contract validation so teams can trust every release."
1544
1231
  }),
1545
- /* @__PURE__ */ jsxs7("ul", {
1546
- className: "text-muted-foreground space-y-2 text-sm",
1232
+ /* @__PURE__ */ jsxs5("ul", {
1233
+ className: "space-y-2 text-muted-foreground text-sm",
1547
1234
  children: [
1548
- /* @__PURE__ */ jsx7("li", {
1235
+ /* @__PURE__ */ jsx5("li", {
1549
1236
  children: "Changesets required for published packages."
1550
1237
  }),
1551
- /* @__PURE__ */ jsx7("li", {
1238
+ /* @__PURE__ */ jsx5("li", {
1552
1239
  children: "CI gate for contract validation and drift detection."
1553
1240
  }),
1554
- /* @__PURE__ */ jsx7("li", {
1241
+ /* @__PURE__ */ jsx5("li", {
1555
1242
  children: "Rollback-friendly release process."
1556
1243
  })
1557
1244
  ]
1558
1245
  })
1559
1246
  ]
1560
1247
  }),
1561
- /* @__PURE__ */ jsxs7("div", {
1248
+ /* @__PURE__ */ jsxs5("div", {
1562
1249
  className: "card-subtle space-y-3 p-6",
1563
1250
  children: [
1564
- /* @__PURE__ */ jsx7("h3", {
1565
- className: "text-lg font-semibold",
1251
+ /* @__PURE__ */ jsx5("h3", {
1252
+ className: "font-semibold text-lg",
1566
1253
  children: "Data handling"
1567
1254
  }),
1568
- /* @__PURE__ */ jsx7("p", {
1255
+ /* @__PURE__ */ jsx5("p", {
1569
1256
  className: "text-muted-foreground text-sm",
1570
1257
  children: "ContractSpec promotes strict data classification and policy-driven access. Specs can tag sensitive fields for enforcement."
1571
1258
  }),
1572
- /* @__PURE__ */ jsxs7("ul", {
1573
- className: "text-muted-foreground space-y-2 text-sm",
1259
+ /* @__PURE__ */ jsxs5("ul", {
1260
+ className: "space-y-2 text-muted-foreground text-sm",
1574
1261
  children: [
1575
- /* @__PURE__ */ jsx7("li", {
1262
+ /* @__PURE__ */ jsx5("li", {
1576
1263
  children: "Schema-level sensitivity tags."
1577
1264
  }),
1578
- /* @__PURE__ */ jsx7("li", {
1265
+ /* @__PURE__ */ jsx5("li", {
1579
1266
  children: "Policy Decision Point enforcement."
1580
1267
  }),
1581
- /* @__PURE__ */ jsx7("li", {
1268
+ /* @__PURE__ */ jsx5("li", {
1582
1269
  children: "Audit logs for operational traceability."
1583
1270
  })
1584
1271
  ]
@@ -1587,57 +1274,57 @@ function SafetySecurityTrustPage() {
1587
1274
  })
1588
1275
  ]
1589
1276
  }),
1590
- /* @__PURE__ */ jsxs7("div", {
1277
+ /* @__PURE__ */ jsxs5("div", {
1591
1278
  className: "grid gap-4 md:grid-cols-2",
1592
1279
  children: [
1593
- /* @__PURE__ */ jsxs7("div", {
1280
+ /* @__PURE__ */ jsxs5("div", {
1594
1281
  className: "card-subtle space-y-3 p-6",
1595
1282
  children: [
1596
- /* @__PURE__ */ jsx7("h3", {
1597
- className: "text-lg font-semibold",
1283
+ /* @__PURE__ */ jsx5("h3", {
1284
+ className: "font-semibold text-lg",
1598
1285
  children: "Supply chain"
1599
1286
  }),
1600
- /* @__PURE__ */ jsx7("p", {
1287
+ /* @__PURE__ */ jsx5("p", {
1601
1288
  className: "text-muted-foreground text-sm",
1602
1289
  children: "We track dependency updates and keep the monorepo build reproducible."
1603
1290
  }),
1604
- /* @__PURE__ */ jsxs7("ul", {
1605
- className: "text-muted-foreground space-y-2 text-sm",
1291
+ /* @__PURE__ */ jsxs5("ul", {
1292
+ className: "space-y-2 text-muted-foreground text-sm",
1606
1293
  children: [
1607
- /* @__PURE__ */ jsx7("li", {
1294
+ /* @__PURE__ */ jsx5("li", {
1608
1295
  children: "Dependabot + Renovate-style updates where available."
1609
1296
  }),
1610
- /* @__PURE__ */ jsx7("li", {
1297
+ /* @__PURE__ */ jsx5("li", {
1611
1298
  children: "Signed release artifacts planned for Studio release cycles."
1612
1299
  }),
1613
- /* @__PURE__ */ jsx7("li", {
1300
+ /* @__PURE__ */ jsx5("li", {
1614
1301
  children: "Transparent changelogs for every package."
1615
1302
  })
1616
1303
  ]
1617
1304
  })
1618
1305
  ]
1619
1306
  }),
1620
- /* @__PURE__ */ jsxs7("div", {
1307
+ /* @__PURE__ */ jsxs5("div", {
1621
1308
  className: "card-subtle space-y-3 p-6",
1622
1309
  children: [
1623
- /* @__PURE__ */ jsx7("h3", {
1624
- className: "text-lg font-semibold",
1310
+ /* @__PURE__ */ jsx5("h3", {
1311
+ className: "font-semibold text-lg",
1625
1312
  children: "Responsible disclosure"
1626
1313
  }),
1627
- /* @__PURE__ */ jsx7("p", {
1314
+ /* @__PURE__ */ jsx5("p", {
1628
1315
  className: "text-muted-foreground text-sm",
1629
1316
  children: "We respond quickly to security reports and coordinate fixes before public disclosure."
1630
1317
  }),
1631
- /* @__PURE__ */ jsxs7("ul", {
1632
- className: "text-muted-foreground space-y-2 text-sm",
1318
+ /* @__PURE__ */ jsxs5("ul", {
1319
+ className: "space-y-2 text-muted-foreground text-sm",
1633
1320
  children: [
1634
- /* @__PURE__ */ jsx7("li", {
1321
+ /* @__PURE__ */ jsx5("li", {
1635
1322
  children: "Security response within 5 business days."
1636
1323
  }),
1637
- /* @__PURE__ */ jsx7("li", {
1324
+ /* @__PURE__ */ jsx5("li", {
1638
1325
  children: "Private disclosure via security@contractspec.io."
1639
1326
  }),
1640
- /* @__PURE__ */ jsx7("li", {
1327
+ /* @__PURE__ */ jsx5("li", {
1641
1328
  children: "Credit for researchers (with permission)."
1642
1329
  })
1643
1330
  ]
@@ -1646,36 +1333,36 @@ function SafetySecurityTrustPage() {
1646
1333
  })
1647
1334
  ]
1648
1335
  }),
1649
- /* @__PURE__ */ jsxs7("div", {
1336
+ /* @__PURE__ */ jsxs5("div", {
1650
1337
  className: "space-y-4",
1651
1338
  children: [
1652
- /* @__PURE__ */ jsx7("h2", {
1653
- className: "text-2xl font-bold",
1339
+ /* @__PURE__ */ jsx5("h2", {
1340
+ className: "font-bold text-2xl",
1654
1341
  children: "Next steps"
1655
1342
  }),
1656
- /* @__PURE__ */ jsx7("p", {
1343
+ /* @__PURE__ */ jsx5("p", {
1657
1344
  className: "text-muted-foreground",
1658
1345
  children: "Explore the broader safety controls or read the roadmap to see upcoming trust investments."
1659
1346
  }),
1660
- /* @__PURE__ */ jsxs7("div", {
1347
+ /* @__PURE__ */ jsxs5("div", {
1661
1348
  className: "flex flex-wrap gap-4 pt-4",
1662
1349
  children: [
1663
- /* @__PURE__ */ jsxs7(Link6, {
1350
+ /* @__PURE__ */ jsxs5(Link5, {
1664
1351
  href: "/docs/safety",
1665
1352
  className: "btn-ghost",
1666
1353
  children: [
1667
1354
  "Safety overview ",
1668
- /* @__PURE__ */ jsx7(ChevronRight6, {
1355
+ /* @__PURE__ */ jsx5(ChevronRight4, {
1669
1356
  size: 16
1670
1357
  })
1671
1358
  ]
1672
1359
  }),
1673
- /* @__PURE__ */ jsxs7(Link6, {
1360
+ /* @__PURE__ */ jsxs5(Link5, {
1674
1361
  href: "/ROADMAP.md",
1675
1362
  className: "btn-ghost",
1676
1363
  children: [
1677
1364
  "Roadmap ",
1678
- /* @__PURE__ */ jsx7(ChevronRight6, {
1365
+ /* @__PURE__ */ jsx5(ChevronRight4, {
1679
1366
  size: 16
1680
1367
  })
1681
1368
  ]
@@ -1687,6 +1374,182 @@ function SafetySecurityTrustPage() {
1687
1374
  ]
1688
1375
  });
1689
1376
  }
1377
+
1378
+ // src/components/docs/safety/SafetySigningPage.tsx
1379
+ import Link6 from "@contractspec/lib.ui-link";
1380
+ import { ChevronRight as ChevronRight5 } from "lucide-react";
1381
+ import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
1382
+ function SafetySigningPage() {
1383
+ return /* @__PURE__ */ jsxs6("div", {
1384
+ className: "space-y-8",
1385
+ children: [
1386
+ /* @__PURE__ */ jsxs6("div", {
1387
+ className: "space-y-2",
1388
+ children: [
1389
+ /* @__PURE__ */ jsx6("h1", {
1390
+ className: "font-bold text-4xl",
1391
+ children: "Spec Signing"
1392
+ }),
1393
+ /* @__PURE__ */ jsx6("p", {
1394
+ className: "text-lg text-muted-foreground",
1395
+ children: "Signing ensures specs haven't been tampered with and provides an audit trail of all changes."
1396
+ })
1397
+ ]
1398
+ }),
1399
+ /* @__PURE__ */ jsxs6("div", {
1400
+ className: "space-y-6",
1401
+ children: [
1402
+ /* @__PURE__ */ jsxs6("div", {
1403
+ className: "space-y-3",
1404
+ children: [
1405
+ /* @__PURE__ */ jsx6("h2", {
1406
+ className: "font-bold text-2xl",
1407
+ children: "How it works"
1408
+ }),
1409
+ /* @__PURE__ */ jsx6("p", {
1410
+ className: "text-muted-foreground",
1411
+ children: "Every spec is cryptographically signed before deployment. The signature proves that the spec hasn't been modified since it was signed and creates a permanent record of who deployed it and when."
1412
+ })
1413
+ ]
1414
+ }),
1415
+ /* @__PURE__ */ jsxs6("div", {
1416
+ className: "space-y-3",
1417
+ children: [
1418
+ /* @__PURE__ */ jsx6("h2", {
1419
+ className: "font-bold text-2xl",
1420
+ children: "Signing a spec"
1421
+ }),
1422
+ /* @__PURE__ */ jsx6("div", {
1423
+ className: "overflow-x-auto rounded-lg border border-border bg-background/50 p-4 font-mono text-muted-foreground text-sm",
1424
+ children: /* @__PURE__ */ jsx6("pre", {
1425
+ children: `contractspec sign app.spec.ts --key ~/.contractspec/key.pem
1426
+ contractspec deploy --signed app.spec.ts.signed`
1427
+ })
1428
+ })
1429
+ ]
1430
+ }),
1431
+ /* @__PURE__ */ jsxs6("div", {
1432
+ className: "space-y-3",
1433
+ children: [
1434
+ /* @__PURE__ */ jsx6("h2", {
1435
+ className: "font-bold text-2xl",
1436
+ children: "Verifying signatures"
1437
+ }),
1438
+ /* @__PURE__ */ jsx6("div", {
1439
+ className: "overflow-x-auto rounded-lg border border-border bg-background/50 p-4 font-mono text-muted-foreground text-sm",
1440
+ children: /* @__PURE__ */ jsx6("pre", {
1441
+ children: `contractspec verify app.spec.ts.signed
1442
+ # Output: \u2713 Signature valid
1443
+ # Signed by: alice@example.com
1444
+ # Timestamp: 2024-11-08T10:30:00Z`
1445
+ })
1446
+ })
1447
+ ]
1448
+ }),
1449
+ /* @__PURE__ */ jsx6("div", {
1450
+ className: "flex items-center gap-4 pt-4",
1451
+ children: /* @__PURE__ */ jsxs6(Link6, {
1452
+ href: "/docs/safety/pdp",
1453
+ className: "btn-primary",
1454
+ children: [
1455
+ "Next: Policy Decision Points ",
1456
+ /* @__PURE__ */ jsx6(ChevronRight5, {
1457
+ size: 16
1458
+ })
1459
+ ]
1460
+ })
1461
+ })
1462
+ ]
1463
+ })
1464
+ ]
1465
+ });
1466
+ }
1467
+
1468
+ // src/components/docs/safety/SafetyTenantIsolationPage.tsx
1469
+ import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
1470
+ function SafetyTenantIsolationPage() {
1471
+ return /* @__PURE__ */ jsxs7("div", {
1472
+ className: "space-y-8",
1473
+ children: [
1474
+ /* @__PURE__ */ jsxs7("div", {
1475
+ className: "space-y-4",
1476
+ children: [
1477
+ /* @__PURE__ */ jsx7("h1", {
1478
+ className: "font-bold text-4xl",
1479
+ children: "Tenant Isolation"
1480
+ }),
1481
+ /* @__PURE__ */ jsx7("p", {
1482
+ className: "text-lg text-muted-foreground",
1483
+ children: 'Preventing cross-tenant data leaks is the #1 security priority for any SaaS. ContractSpec employs "Defense in Depth" to ensure safety.'
1484
+ })
1485
+ ]
1486
+ }),
1487
+ /* @__PURE__ */ jsxs7("div", {
1488
+ className: "space-y-4",
1489
+ children: [
1490
+ /* @__PURE__ */ jsx7("h2", {
1491
+ className: "font-bold text-2xl",
1492
+ children: "Layer 1: RLS Middleware"
1493
+ }),
1494
+ /* @__PURE__ */ jsxs7("p", {
1495
+ children: [
1496
+ "The primary defense is the Prisma middleware that rewrites queries to include ",
1497
+ /* @__PURE__ */ jsx7("code", {
1498
+ children: "WHERE tenantId = ?"
1499
+ }),
1500
+ ". This protects against developer error (forgetting to filter)."
1501
+ ]
1502
+ })
1503
+ ]
1504
+ }),
1505
+ /* @__PURE__ */ jsxs7("div", {
1506
+ className: "space-y-4",
1507
+ children: [
1508
+ /* @__PURE__ */ jsx7("h2", {
1509
+ className: "font-bold text-2xl",
1510
+ children: "Layer 2: Isolation Validator"
1511
+ }),
1512
+ /* @__PURE__ */ jsxs7("p", {
1513
+ children: [
1514
+ "For high-security environments, you can use the",
1515
+ " ",
1516
+ /* @__PURE__ */ jsx7("code", {
1517
+ children: "IsolationValidator"
1518
+ }),
1519
+ " in your test suite to verify that every query generated by your operations actually includes the tenant ID."
1520
+ ]
1521
+ }),
1522
+ /* @__PURE__ */ jsx7("pre", {
1523
+ className: "rounded-lg border bg-muted p-4 text-sm",
1524
+ children: `import { IsolationValidator } from '@contractspec/lib.multi-tenancy/isolation';
1525
+
1526
+ test('findUser query is isolated', () => {
1527
+ const isValid = IsolationValidator.validateQuery(
1528
+ 'User',
1529
+ 'findFirst',
1530
+ args,
1531
+ 'tenant-123'
1532
+ );
1533
+ expect(isValid).toBe(true);
1534
+ });`
1535
+ })
1536
+ ]
1537
+ }),
1538
+ /* @__PURE__ */ jsxs7("div", {
1539
+ className: "space-y-4",
1540
+ children: [
1541
+ /* @__PURE__ */ jsx7("h2", {
1542
+ className: "font-bold text-2xl",
1543
+ children: "Layer 3: Policy Engine"
1544
+ }),
1545
+ /* @__PURE__ */ jsx7("p", {
1546
+ children: "The Policy Decision Point (PDP) verifies that the authenticated user actually belongs to the requested tenant before any operation logic runs."
1547
+ })
1548
+ ]
1549
+ })
1550
+ ]
1551
+ });
1552
+ }
1690
1553
  export {
1691
1554
  SafetyTenantIsolationPage,
1692
1555
  SafetySigningPage,