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