@contractspec/bundle.library 3.4.2 → 3.5.0

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