@tokenoftrust/storefront-runner 1.4.1 → 2.0.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 (474) hide show
  1. package/apps/storefront/astro.config.mjs +17 -1
  2. package/apps/storefront/env.d.ts +54 -5
  3. package/apps/storefront/integrations/materialize-guard.mjs +54 -0
  4. package/apps/storefront/migrations-apps/0002_good_switch.sql +26 -0
  5. package/apps/storefront/migrations-apps/0003_mute_marauders.sql +12 -0
  6. package/apps/storefront/migrations-apps/0004_deep_morph.sql +36 -0
  7. package/apps/storefront/migrations-apps/0005_common_mystique.sql +23 -0
  8. package/apps/storefront/migrations-apps/0006_broad_microchip.sql +16 -0
  9. package/apps/storefront/migrations-apps/0007_brave_outlaw_kid.sql +15 -0
  10. package/apps/storefront/migrations-apps/0008_blue_dazzler.sql +11 -0
  11. package/apps/storefront/migrations-apps/0009_bored_shinobi_shaw.sql +15 -0
  12. package/apps/storefront/migrations-apps/0010_ws4_verified_provider_measurement.sql +35 -0
  13. package/apps/storefront/migrations-apps/meta/0002_snapshot.json +1160 -0
  14. package/apps/storefront/migrations-apps/meta/0003_snapshot.json +1235 -0
  15. package/apps/storefront/migrations-apps/meta/0004_snapshot.json +1474 -0
  16. package/apps/storefront/migrations-apps/meta/0005_snapshot.json +1617 -0
  17. package/apps/storefront/migrations-apps/meta/0006_snapshot.json +1716 -0
  18. package/apps/storefront/migrations-apps/meta/0007_snapshot.json +1812 -0
  19. package/apps/storefront/migrations-apps/meta/0008_snapshot.json +1881 -0
  20. package/apps/storefront/migrations-apps/meta/0009_snapshot.json +1979 -0
  21. package/apps/storefront/migrations-apps/meta/_journal.json +56 -0
  22. package/apps/storefront/public/apps/tot.demo.analytics/0.1.0/entry.js +42 -0
  23. package/apps/storefront/public/js/dashboard-team.js +38 -2
  24. package/apps/storefront/public/platform/amplitude-http/v1/entry.mjs +19 -0
  25. package/apps/storefront/public/platform/google-measurement/v1/entry.mjs +19 -0
  26. package/apps/storefront/public/shared/commerce-chrome.css +20 -2
  27. package/apps/storefront/scripts/build-v84-clean-clone-standalone.mjs +68 -0
  28. package/apps/storefront/scripts/deny-v84-clean-clone-standalone-capabilities.mjs +111 -0
  29. package/apps/storefront/scripts/deny-v84-dogfood-capabilities.mjs +2 -0
  30. package/apps/storefront/scripts/deny-v84-lifecycle-capabilities.mjs +247 -0
  31. package/apps/storefront/scripts/dogfood-v84-nonportable-routes.ts +73 -0
  32. package/apps/storefront/scripts/fixed-v84-native-install-producer.ts +79 -0
  33. package/apps/storefront/scripts/generated/v84-clean-clone-replay.bundle.mjs +10982 -0
  34. package/apps/storefront/scripts/import-v84-through-ws2.ts +38 -0
  35. package/apps/storefront/scripts/initialize-v84-lifecycle-tooling-dependency.ts +2 -0
  36. package/apps/storefront/scripts/initialize-v84-lifecycle-tooling.ts +4 -0
  37. package/apps/storefront/scripts/install-v84-native-through-ws1.ts +185 -0
  38. package/apps/storefront/scripts/prove-clone-isolation.ts +506 -0
  39. package/apps/storefront/scripts/replay-v84-clean-clone-pass.ts +148 -0
  40. package/apps/storefront/scripts/replay-v84-clean-clone-standalone.ts +35 -0
  41. package/apps/storefront/scripts/replay-v84-clean-clone.ts +214 -0
  42. package/apps/storefront/scripts/run-fixed-v84-native-install-producer.mjs +18 -0
  43. package/apps/storefront/scripts/run-v84-clone-isolation-proof.mjs +18 -0
  44. package/apps/storefront/scripts/run-v84-clone-lifecycle-proof.mjs +18 -0
  45. package/apps/storefront/scripts/run-v84-import-through-ws2-proof.mjs +17 -0
  46. package/apps/storefront/scripts/run-v84-nonportable-route-dogfood.mjs +15 -0
  47. package/apps/storefront/scripts/sanitize-v84-proof-environment.mjs +21 -0
  48. package/apps/storefront/scripts/v84CleanCloneGraphPin.ts +42 -0
  49. package/apps/storefront/scripts/v84CleanCloneSourceGraph.ts +145 -0
  50. package/apps/storefront/scripts/validate-v84-clone-lifecycle.ts +18 -0
  51. package/apps/storefront/src/components/Img.astro +1 -1
  52. package/apps/storefront/src/components/Seo.astro +65 -1
  53. package/apps/storefront/src/components/admin/AdminBlogDetailRail.astro +878 -0
  54. package/apps/storefront/src/components/admin/AdminBlogTab.astro +1435 -0
  55. package/apps/storefront/src/components/admin/AdminCustomersTab.astro +3 -7
  56. package/apps/storefront/src/components/admin/AdminIntegrationsTab.astro +105 -0
  57. package/apps/storefront/src/components/admin/AdminPublishTab.astro +1980 -2564
  58. package/apps/storefront/src/components/admin/AdminSettingsTab.astro +2 -2
  59. package/apps/storefront/src/components/admin/AdminSubscriptionsTab.astro +1 -3
  60. package/apps/storefront/src/components/admin/orders/OrdersWorkspace.astro +5 -5
  61. package/apps/storefront/src/components/blog/BlogPaywall.astro +87 -0
  62. package/apps/storefront/src/components/blog/PostAccessBadge.astro +43 -0
  63. package/apps/storefront/src/components/blog/PostGrid.astro +57 -0
  64. package/apps/storefront/src/components/blog/ReactionBar.astro +214 -0
  65. package/apps/storefront/src/components/chrome/NavDropdown.astro +12 -0
  66. package/apps/storefront/src/components/chrome/SiteFooter.astro +7 -2
  67. package/apps/storefront/src/components/chrome/SiteHeader.astro +46 -10
  68. package/apps/storefront/src/components/compliance/AdultSignatureNotice.astro +1 -1
  69. package/apps/storefront/src/components/compliance/ComplianceNotice.astro +1 -2
  70. package/apps/storefront/src/components/compliance/ExciseTaxNotice.astro +1 -2
  71. package/apps/storefront/src/components/compliance/PactActNotice.astro +1 -1
  72. package/apps/storefront/src/components/compliance/Prop65Warning.astro +1 -2
  73. package/apps/storefront/src/components/compliance/PurchaseLimitNotice.astro +2 -3
  74. package/apps/storefront/src/components/compliance/ShippingRestrictionNotice.astro +2 -2
  75. package/apps/storefront/src/components/compliance/StateEligibilityNotice.astro +2 -3
  76. package/apps/storefront/src/components/content/TrustStrip.astro +4 -4
  77. package/apps/storefront/src/components/islands/MobileNav.tsx +26 -1
  78. package/apps/storefront/src/components/islands/VariantSelector.tsx +27 -2
  79. package/apps/storefront/src/components/islands/useCheckoutHandoffCorrelation.ts +75 -0
  80. package/apps/storefront/src/components/membership/IllustrativeLabel.astro +1 -2
  81. package/apps/storefront/src/components/membership/TierCards.astro +2 -2
  82. package/apps/storefront/src/components/membership/TierComparisonTable.astro +2 -2
  83. package/apps/storefront/src/components/subscription/SavingsExplainer.astro +2 -2
  84. package/apps/storefront/src/config/adminTenantLookup.ts +35 -0
  85. package/apps/storefront/src/config/devTenantSeed.ts +9 -9
  86. package/apps/storefront/src/config/resolver.ts +4 -4
  87. package/apps/storefront/src/layouts/Layout.astro +146 -21
  88. package/apps/storefront/src/lib/activity/alerts.ts +17 -19
  89. package/apps/storefront/src/lib/activity/candidateSubmitLease.ts +87 -0
  90. package/apps/storefront/src/lib/activity/changeActorAttribution.ts +89 -9
  91. package/apps/storefront/src/lib/activity/deployVersion.ts +20 -27
  92. package/apps/storefront/src/lib/activity/ingest.ts +8 -8
  93. package/apps/storefront/src/lib/activity/ingestAuth.ts +1 -1
  94. package/apps/storefront/src/lib/activity/killSwitch.ts +6 -6
  95. package/apps/storefront/src/lib/activity/query.ts +9 -9
  96. package/apps/storefront/src/lib/activity/recordActivity.ts +11 -15
  97. package/apps/storefront/src/lib/activity/store.ts +4 -6
  98. package/apps/storefront/src/lib/activity/uiActor.ts +12 -12
  99. package/apps/storefront/src/lib/activity/workerCommit.ts +6 -6
  100. package/apps/storefront/src/lib/admin/adminShell.ts +292 -0
  101. package/apps/storefront/src/lib/admin/ai/approvalMode.ts +2 -3
  102. package/apps/storefront/src/lib/admin/ai/audit.ts +3 -5
  103. package/apps/storefront/src/lib/admin/checkoutStyleInput.ts +7 -7
  104. package/apps/storefront/src/lib/admin/checkoutStyleTarget.ts +3 -3
  105. package/apps/storefront/src/lib/admin/envelope.ts +1 -2
  106. package/apps/storefront/src/lib/admin/orderClient.ts +3 -5
  107. package/apps/storefront/src/lib/admin/services/orders.ts +17 -19
  108. package/apps/storefront/src/lib/admin/viewmodels/aiWorkflows.ts +4 -6
  109. package/apps/storefront/src/lib/admin/viewmodels/settings.ts +1 -1
  110. package/apps/storefront/src/lib/apps/adminService.ts +14 -4
  111. package/apps/storefront/src/lib/apps/adminSession.ts +54 -45
  112. package/apps/storefront/src/lib/apps/apiAuth.ts +2 -2
  113. package/apps/storefront/src/lib/apps/apiRoute.ts +2 -2
  114. package/apps/storefront/src/lib/apps/appVersionStore.ts +281 -0
  115. package/apps/storefront/src/lib/apps/catalogMapper.ts +1 -1
  116. package/apps/storefront/src/lib/apps/consentConfigStore.ts +228 -0
  117. package/apps/storefront/src/lib/apps/credentials.ts +2 -2
  118. package/apps/storefront/src/lib/apps/gatewayKeys.ts +4 -4
  119. package/apps/storefront/src/lib/apps/gtmMigrationInstall.ts +447 -0
  120. package/apps/storefront/src/lib/apps/gtmMigrationReport.ts +367 -0
  121. package/apps/storefront/src/lib/apps/gtmMigrationTab.ts +315 -0
  122. package/apps/storefront/src/lib/apps/healthAggregate.ts +5 -5
  123. package/apps/storefront/src/lib/apps/integrationLifecycle.ts +614 -0
  124. package/apps/storefront/src/lib/apps/integrationLifecycleController.ts +125 -0
  125. package/apps/storefront/src/lib/apps/integrationReadModel.ts +563 -0
  126. package/apps/storefront/src/lib/apps/integrationsTab.ts +547 -0
  127. package/apps/storefront/src/lib/apps/integrationsView.ts +106 -0
  128. package/apps/storefront/src/lib/apps/managedAnalyticsService.ts +599 -0
  129. package/apps/storefront/src/lib/apps/orders/attributionService.ts +2 -2
  130. package/apps/storefront/src/lib/apps/orders/customerHash.ts +1 -1
  131. package/apps/storefront/src/lib/apps/orders/foxyOrderClient.ts +12 -12
  132. package/apps/storefront/src/lib/apps/orders/idempotency.ts +7 -7
  133. package/apps/storefront/src/lib/apps/orders/orderConversionD1.ts +150 -0
  134. package/apps/storefront/src/lib/apps/orders/orderForwardReceiver.ts +9 -1
  135. package/apps/storefront/src/lib/apps/orders/orderMapper.ts +2 -2
  136. package/apps/storefront/src/lib/apps/orders/ordersStore.ts +7 -7
  137. package/apps/storefront/src/lib/apps/orders/verifiedProviderMeasurement.ts +117 -0
  138. package/apps/storefront/src/lib/apps/registryService.ts +270 -16
  139. package/apps/storefront/src/lib/apps/scopes.ts +2 -2
  140. package/apps/storefront/src/lib/apps/tenantIntegrationMaterialization.ts +170 -0
  141. package/apps/storefront/src/lib/apps/tokenIssuer.ts +4 -4
  142. package/apps/storefront/src/lib/apps/tokenVerifier.ts +6 -6
  143. package/apps/storefront/src/lib/apps/v84CleanCloneReplayContext.ts +16 -0
  144. package/apps/storefront/src/lib/apps/v84CloneLifecycleCacheEvidence.ts +105 -0
  145. package/apps/storefront/src/lib/apps/v84CloneLifecycleEvidence.ts +177 -0
  146. package/apps/storefront/src/lib/apps/v84CloneLifecycleMaterialization.ts +251 -0
  147. package/apps/storefront/src/lib/apps/v84CloneLifecycleSemantics.ts +241 -0
  148. package/apps/storefront/src/lib/apps/v84CloneMigrationEvidence.ts +211 -0
  149. package/apps/storefront/src/lib/apps/v84CloneNativeInstallEvidence.ts +409 -0
  150. package/apps/storefront/src/lib/apps/v84NonportableCodeCoaching.ts +368 -0
  151. package/apps/storefront/src/lib/apps/v84NonportableRouteContract.ts +188 -0
  152. package/apps/storefront/src/lib/apps/v84NonportableRouteDogfood.ts +291 -0
  153. package/apps/storefront/src/lib/apps/widgets/eligibility.ts +2 -2
  154. package/apps/storefront/src/lib/apps/widgets/frameProps.ts +3 -3
  155. package/apps/storefront/src/lib/apps/widgets/launchToken.ts +4 -4
  156. package/apps/storefront/src/lib/apps/widgets/placements.ts +2 -2
  157. package/apps/storefront/src/lib/apps/widgets/renderSlot.ts +1 -1
  158. package/apps/storefront/src/lib/apps/ws1ManagedAnalyticsClient.ts +95 -0
  159. package/apps/storefront/src/lib/auth/adminApiGuard.ts +66 -0
  160. package/apps/storefront/src/lib/auth/adminEntry.ts +11 -11
  161. package/apps/storefront/src/lib/auth/adminLanding.ts +88 -0
  162. package/apps/storefront/src/lib/auth/identityToken.ts +6 -14
  163. package/apps/storefront/src/lib/auth/loginGate.ts +75 -13
  164. package/apps/storefront/src/lib/auth/mcpClientAssertion.ts +2 -4
  165. package/apps/storefront/src/lib/auth/operatorSession.ts +113 -0
  166. package/apps/storefront/src/lib/auth/session.ts +7 -8
  167. package/apps/storefront/src/lib/auth/totAccessClient.ts +8 -18
  168. package/apps/storefront/src/lib/basePath.ts +9 -2
  169. package/apps/storefront/src/lib/blog/access.ts +29 -0
  170. package/apps/storefront/src/lib/blog/collection.ts +400 -0
  171. package/apps/storefront/src/lib/blog/markdown.ts +174 -0
  172. package/apps/storefront/src/lib/blog/provider.ts +62 -3
  173. package/apps/storefront/src/lib/blog/reactions.ts +87 -0
  174. package/apps/storefront/src/lib/blog/rss.ts +92 -0
  175. package/apps/storefront/src/lib/blog/teaser.ts +83 -0
  176. package/apps/storefront/src/lib/blog/types.ts +34 -0
  177. package/apps/storefront/src/lib/blog/viewCounts.ts +243 -0
  178. package/apps/storefront/src/lib/chrome/examples/tokenoftrust.chrome-assignments.example.json +6 -0
  179. package/apps/storefront/src/lib/chrome/examples/tokenoftrust.chrome.example.json +79 -0
  180. package/apps/storefront/src/lib/chrome/model.ts +48 -253
  181. package/apps/storefront/src/lib/chrome/navCurrent.ts +29 -0
  182. package/apps/storefront/src/lib/chrome/parseConfig.ts +18 -32
  183. package/apps/storefront/src/lib/chrome/variant.ts +39 -0
  184. package/apps/storefront/src/lib/commerce/checkoutHandoffCorrelation.ts +105 -0
  185. package/apps/storefront/src/lib/compliance/tamper-sentinel-boot.ts +152 -0
  186. package/apps/storefront/src/lib/compliance/tamper-sentinel.ts +327 -0
  187. package/apps/storefront/src/lib/content/index.ts +5 -5
  188. package/apps/storefront/src/lib/content-edit/applyDiff.ts +1 -1
  189. package/apps/storefront/src/lib/content-edit/route.ts +1 -1
  190. package/apps/storefront/src/lib/d1/catalog.ts +14 -2
  191. package/apps/storefront/src/lib/d1/schema-apps.ts +372 -17
  192. package/apps/storefront/src/lib/dev/activityIngestToken.ts +2 -4
  193. package/apps/storefront/src/lib/dev/activityStore.ts +3 -5
  194. package/apps/storefront/src/lib/dev/apiBase.ts +1 -4
  195. package/apps/storefront/src/lib/dev/cockpit/ask.ts +49 -0
  196. package/apps/storefront/src/lib/dev/cockpit/clickToSource.ts +71 -0
  197. package/apps/storefront/src/lib/dev/cockpit/copyCommand.ts +227 -0
  198. package/apps/storefront/src/lib/dev/cockpit/files.ts +249 -0
  199. package/apps/storefront/src/lib/dev/cockpit/hostedActivity.ts +500 -0
  200. package/apps/storefront/src/lib/dev/cockpit/infoPopover.ts +12 -0
  201. package/apps/storefront/src/lib/dev/cockpit/mcpCopy.ts +34 -0
  202. package/apps/storefront/src/lib/dev/cockpit/monitor.ts +107 -0
  203. package/apps/storefront/src/lib/dev/cockpit/stepper.ts +116 -0
  204. package/apps/storefront/src/lib/dev/cockpit/themeToggle.ts +23 -0
  205. package/apps/storefront/src/lib/dev/cockpitStore.ts +1 -9
  206. package/apps/storefront/src/lib/dev/devDraft.ts +1 -1
  207. package/apps/storefront/src/lib/dev/previewStatus.ts +9 -21
  208. package/apps/storefront/src/lib/dev/rendezvousBroker.ts +9 -24
  209. package/apps/storefront/src/lib/dev/runtimeStore.ts +1 -1
  210. package/apps/storefront/src/lib/edgeCache.ts +34 -5
  211. package/apps/storefront/src/lib/email/candidateConflictEmail.ts +80 -0
  212. package/apps/storefront/src/lib/http/fetchTransport.ts +63 -0
  213. package/apps/storefront/src/lib/i18n.ts +25 -0
  214. package/apps/storefront/src/lib/integration/browserEnvironment.ts +137 -0
  215. package/apps/storefront/src/lib/integration/managedInstallDeclarations.ts +72 -0
  216. package/apps/storefront/src/lib/integration/nonceStamp.ts +49 -0
  217. package/apps/storefront/src/lib/integration/tenantDeclarations.ts +116 -0
  218. package/apps/storefront/src/lib/jsonld.ts +118 -0
  219. package/apps/storefront/src/lib/membership/eligibility.ts +1 -1
  220. package/apps/storefront/src/lib/membership/model.ts +1 -2
  221. package/apps/storefront/src/lib/monitoring/manifest.ts +11 -11
  222. package/apps/storefront/src/lib/newsletter/confirmationEmail.ts +30 -0
  223. package/apps/storefront/src/lib/newsletter/consent.ts +23 -0
  224. package/apps/storefront/src/lib/newsletter/digest.ts +117 -0
  225. package/apps/storefront/src/lib/newsletter/resendClient.ts +79 -0
  226. package/apps/storefront/src/lib/newsletter/send.ts +265 -0
  227. package/apps/storefront/src/lib/newsletter/subscribers.ts +156 -0
  228. package/apps/storefront/src/lib/previewReload.ts +57 -1
  229. package/apps/storefront/src/lib/publish/adminPublishTab.ts +4625 -0
  230. package/apps/storefront/src/lib/publish/apex-readiness.ts +41 -18
  231. package/apps/storefront/src/lib/publish/buildStream.ts +269 -0
  232. package/apps/storefront/src/lib/publish/collapsePersistence.ts +72 -0
  233. package/apps/storefront/src/lib/publish/dispatchHealth.ts +5 -7
  234. package/apps/storefront/src/lib/publish/domainState.ts +22 -13
  235. package/apps/storefront/src/lib/publish/lifecycleState.ts +369 -0
  236. package/apps/storefront/src/lib/publish/liveReleaseSummary.ts +29 -0
  237. package/apps/storefront/src/lib/publish/mergeDoctorOnFailure.ts +78 -0
  238. package/apps/storefront/src/lib/publish/mergeHealthBanner.ts +62 -0
  239. package/apps/storefront/src/lib/publish/mergeRowFindings.ts +124 -0
  240. package/apps/storefront/src/lib/publish/mergeSupportEscalation.ts +75 -0
  241. package/apps/storefront/src/lib/publish/panelPolling.ts +78 -0
  242. package/apps/storefront/src/lib/publish/publish-guard.ts +88 -0
  243. package/apps/storefront/src/lib/publish/publishFormat.ts +165 -0
  244. package/apps/storefront/src/lib/publish/publishHero.ts +177 -0
  245. package/apps/storefront/src/lib/publish/reviewRelease/changeState.ts +66 -0
  246. package/apps/storefront/src/lib/publish/reviewRelease/copy.ts +141 -0
  247. package/apps/storefront/src/lib/publish/reviewRelease/index.ts +41 -0
  248. package/apps/storefront/src/lib/publish/reviewRelease/permissions.ts +47 -0
  249. package/apps/storefront/src/lib/publish/reviewRelease/releaseState.ts +42 -0
  250. package/apps/storefront/src/lib/publish/reviewRelease/types.ts +59 -0
  251. package/apps/storefront/src/lib/publish/reviewRelease/viewModel.ts +440 -0
  252. package/apps/storefront/src/lib/publish/reviewReleaseWorkspace/actions.ts +161 -0
  253. package/apps/storefront/src/lib/publish/reviewReleaseWorkspace/controller.ts +325 -0
  254. package/apps/storefront/src/lib/publish/reviewReleaseWorkspace/render.ts +241 -0
  255. package/apps/storefront/src/lib/publish/shipWorkspace.ts +121 -51
  256. package/apps/storefront/src/lib/publish/sseRoute.ts +119 -0
  257. package/apps/storefront/src/lib/publish/stageBundleUpload.ts +215 -0
  258. package/apps/storefront/src/lib/publish/streamLogConsole.ts +142 -0
  259. package/apps/storefront/src/lib/publish/versionNumber.ts +52 -0
  260. package/apps/storefront/src/lib/rate/kvWindow.ts +53 -0
  261. package/apps/storefront/src/lib/rawChrome.ts +125 -47
  262. package/apps/storefront/src/lib/rawMarketingHtml.ts +74 -3
  263. package/apps/storefront/src/lib/search/index.ts +2 -2
  264. package/apps/storefront/src/lib/seo/alternates.ts +42 -0
  265. package/apps/storefront/src/lib/seo/meta.ts +65 -0
  266. package/apps/storefront/src/lib/social/golive.ts +212 -0
  267. package/apps/storefront/src/lib/social/notify.ts +32 -0
  268. package/apps/storefront/src/lib/social/tokenStore.ts +171 -0
  269. package/apps/storefront/src/lib/storyblok/content-model.ts +7 -33
  270. package/apps/storefront/src/lib/storyblok/provider.ts +168 -60
  271. package/apps/storefront/src/lib/subscription/model.ts +4 -4
  272. package/apps/storefront/src/lib/the-build/provider.ts +32 -0
  273. package/apps/storefront/src/lib/the-build/readingTime.ts +35 -0
  274. package/apps/storefront/src/lib/the-build/toc.ts +95 -0
  275. package/apps/storefront/src/lib/tot/ToTClient.ts +1 -1
  276. package/apps/storefront/src/lib/tot/d1Client.ts +2 -2
  277. package/apps/storefront/src/lib/tot/totClientInterface.ts +3 -4
  278. package/apps/storefront/src/lib/webhooks/deliveryStore.ts +16 -17
  279. package/apps/storefront/src/middleware/index.ts +385 -52
  280. package/apps/storefront/src/pages/[...slug].astro +9 -4
  281. package/apps/storefront/src/pages/admin/review-release.astro +265 -0
  282. package/apps/storefront/src/pages/admin/select.astro +96 -0
  283. package/apps/storefront/src/pages/admin.astro +25 -1313
  284. package/apps/storefront/src/pages/api/activity.ts +8 -8
  285. package/apps/storefront/src/pages/api/admin/activity-alerts.ts +5 -20
  286. package/apps/storefront/src/pages/api/admin/orders/[id].ts +7 -2
  287. package/apps/storefront/src/pages/api/admin/orders.ts +8 -2
  288. package/apps/storefront/src/pages/api/apps/admin/gtm-migration-install.ts +174 -0
  289. package/apps/storefront/src/pages/api/apps/admin/gtm-migration.ts +96 -0
  290. package/apps/storefront/src/pages/api/apps/admin/integration-lifecycle.ts +118 -0
  291. package/apps/storefront/src/pages/api/apps/admin/integrations.ts +89 -0
  292. package/apps/storefront/src/pages/api/apps/admin/platform-adapters.ts +85 -0
  293. package/apps/storefront/src/pages/api/apps/internal/order-forward.ts +74 -2
  294. package/apps/storefront/src/pages/api/blog/[collection]/[slug]/react.ts +104 -0
  295. package/apps/storefront/src/pages/api/commerce/checkout-handoff.ts +77 -0
  296. package/apps/storefront/src/pages/api/compliance/tamper.ts +88 -0
  297. package/apps/storefront/src/pages/api/integrations/v1/[operation].ts +108 -0
  298. package/apps/storefront/src/pages/api/newsletter/[collection]/subscribe.ts +146 -0
  299. package/apps/storefront/src/pages/api/newsletter/confirm.ts +75 -0
  300. package/apps/storefront/src/pages/api/newsletter/unsubscribe.ts +90 -0
  301. package/apps/storefront/src/pages/api/publish/stage-bundle.ts +70 -0
  302. package/apps/storefront/src/pages/api/rum/vitals.ts +20 -2
  303. package/apps/storefront/src/pages/blog/[slug].astro +99 -19
  304. package/apps/storefront/src/pages/blog/author/[author].astro +140 -0
  305. package/apps/storefront/src/pages/blog/category/[category].astro +67 -0
  306. package/apps/storefront/src/pages/blog/index.astro +4 -2
  307. package/apps/storefront/src/pages/blog/tag/[tag].astro +65 -0
  308. package/apps/storefront/src/pages/cockpit.astro +77 -1353
  309. package/apps/storefront/src/pages/dashboard/[appDomain]/team.astro +15 -11
  310. package/apps/storefront/src/pages/index.astro +10 -5
  311. package/apps/storefront/src/pages/llms.txt.ts +1 -1
  312. package/apps/storefront/src/pages/products/[handle].astro +7 -6
  313. package/apps/storefront/src/pages/search.astro +1 -1
  314. package/apps/storefront/src/pages/sitemap.xml.ts +21 -1
  315. package/apps/storefront/src/pages/style-guide/[tenant]/[theme].astro +31 -27
  316. package/apps/storefront/src/pages/style-guide/[tenant]/chrome/[theme].astro +1 -1
  317. package/apps/storefront/src/pages/tenants/[id]/[...path].ts +38 -2
  318. package/apps/storefront/src/pages/the-build/[slug].astro +129 -0
  319. package/apps/storefront/src/pages/the-build/index.astro +146 -0
  320. package/apps/storefront/src/pages/the-build/rss.xml.ts +33 -0
  321. package/apps/storefront/src/styles/admin.css +1106 -0
  322. package/apps/storefront/tsconfig.json +6 -1
  323. package/package.json +1 -1
  324. package/packages/public-runtime/package.json +3 -1
  325. package/packages/public-runtime/schemas/managed-analytics/v1/adapter-definition.schema.json +427 -0
  326. package/packages/public-runtime/schemas/managed-analytics/v1/create-integration-install-request.schema.json +161 -0
  327. package/packages/public-runtime/schemas/managed-analytics/v1/create-migration-draft-request.schema.json +157 -0
  328. package/packages/public-runtime/schemas/managed-analytics/v1/delete-integration-install-request.schema.json +84 -0
  329. package/packages/public-runtime/schemas/managed-analytics/v1/delete-migration-draft-request.schema.json +84 -0
  330. package/packages/public-runtime/schemas/managed-analytics/v1/error-envelope.schema.json +180 -0
  331. package/packages/public-runtime/schemas/managed-analytics/v1/get-adapter-definition-request.schema.json +52 -0
  332. package/packages/public-runtime/schemas/managed-analytics/v1/get-integration-install-request.schema.json +52 -0
  333. package/packages/public-runtime/schemas/managed-analytics/v1/get-integration-revision-request.schema.json +79 -0
  334. package/packages/public-runtime/schemas/managed-analytics/v1/get-migration-draft-request.schema.json +52 -0
  335. package/packages/public-runtime/schemas/managed-analytics/v1/integration-install.schema.json +167 -0
  336. package/packages/public-runtime/schemas/managed-analytics/v1/integration-revision.schema.json +208 -0
  337. package/packages/public-runtime/schemas/managed-analytics/v1/list-adapter-definitions-request.schema.json +53 -0
  338. package/packages/public-runtime/schemas/managed-analytics/v1/list-integration-installs-request.schema.json +53 -0
  339. package/packages/public-runtime/schemas/managed-analytics/v1/list-integration-revisions-request.schema.json +82 -0
  340. package/packages/public-runtime/schemas/managed-analytics/v1/migration-draft.schema.json +218 -0
  341. package/packages/public-runtime/schemas/managed-analytics/v1/mutation-request.schema.json +52 -0
  342. package/packages/public-runtime/schemas/managed-analytics/v1/mutation-success-envelope.schema.json +49 -0
  343. package/packages/public-runtime/schemas/managed-analytics/v1/read-request.schema.json +20 -0
  344. package/packages/public-runtime/schemas/managed-analytics/v1/read-success-envelope.schema.json +45 -0
  345. package/packages/public-runtime/schemas/managed-analytics/v1/revise-integration-install-request.schema.json +156 -0
  346. package/packages/public-runtime/schemas/managed-analytics/v1/set-integration-install-status-request.schema.json +92 -0
  347. package/packages/public-runtime/schemas/managed-analytics/v1/update-migration-draft-request.schema.json +184 -0
  348. package/packages/public-runtime/scripts/generate-managed-analytics-api-v1-schemas.mjs +13 -0
  349. package/packages/public-runtime/src/activity/catalog.ts +89 -33
  350. package/packages/public-runtime/src/activity/event.ts +6 -6
  351. package/packages/public-runtime/src/activity/index.ts +2 -2
  352. package/packages/public-runtime/src/activity/redaction.ts +4 -4
  353. package/packages/public-runtime/src/candidate-index.ts +42 -8
  354. package/packages/public-runtime/src/catalog-d1.ts +1 -1
  355. package/packages/public-runtime/src/checkout-orders.ts +2 -2
  356. package/packages/public-runtime/src/checkout-style-publish.ts +2 -2
  357. package/packages/public-runtime/src/checkout-style.ts +7 -7
  358. package/packages/public-runtime/src/checkout.ts +3 -3
  359. package/packages/public-runtime/src/chrome.ts +777 -0
  360. package/packages/public-runtime/src/compliance-obligations.ts +310 -0
  361. package/packages/public-runtime/src/csp.ts +99 -0
  362. package/packages/public-runtime/src/customization-preview.ts +25 -2
  363. package/packages/public-runtime/src/customization-runtime.ts +156 -3
  364. package/packages/public-runtime/src/customization-versioning.ts +10 -0
  365. package/packages/public-runtime/src/destination-webhook/contract.ts +353 -0
  366. package/packages/public-runtime/src/embed-catalog.d.mts +9 -0
  367. package/packages/public-runtime/src/embed-catalog.mjs +40 -0
  368. package/packages/public-runtime/src/evidence.ts +288 -0
  369. package/packages/public-runtime/src/gtm-migration/bounds.ts +138 -0
  370. package/packages/public-runtime/src/gtm-migration/disposition-rules.ts +361 -0
  371. package/packages/public-runtime/src/gtm-migration/dispositions.ts +181 -0
  372. package/packages/public-runtime/src/gtm-migration/draft-generator.ts +400 -0
  373. package/packages/public-runtime/src/gtm-migration/graph.ts +468 -0
  374. package/packages/public-runtime/src/gtm-migration/index.ts +95 -0
  375. package/packages/public-runtime/src/gtm-migration/parse.ts +410 -0
  376. package/packages/public-runtime/src/gtm-migration/references.ts +266 -0
  377. package/packages/public-runtime/src/gtm-migration/types.ts +86 -0
  378. package/packages/public-runtime/src/index.ts +17 -1
  379. package/packages/public-runtime/src/integration/assurance-decision.ts +259 -0
  380. package/packages/public-runtime/src/integration/assurance.ts +228 -0
  381. package/packages/public-runtime/src/integration/candidate-evidence.ts +377 -0
  382. package/packages/public-runtime/src/integration/commerce-broker.ts +497 -0
  383. package/packages/public-runtime/src/integration/consent-broker.ts +337 -0
  384. package/packages/public-runtime/src/integration/consent-cmp-demand.ts +115 -0
  385. package/packages/public-runtime/src/integration/consent-config.ts +260 -0
  386. package/packages/public-runtime/src/integration/consent-preview.ts +125 -0
  387. package/packages/public-runtime/src/integration/correlation-token.ts +444 -0
  388. package/packages/public-runtime/src/integration/csp-compiler.ts +267 -0
  389. package/packages/public-runtime/src/integration/csp.ts +105 -0
  390. package/packages/public-runtime/src/integration/digest.ts +43 -0
  391. package/packages/public-runtime/src/integration/environment.ts +228 -0
  392. package/packages/public-runtime/src/integration/events-catalog.ts +186 -0
  393. package/packages/public-runtime/src/integration/events.ts +701 -0
  394. package/packages/public-runtime/src/integration/g2-action-boundary.ts +106 -0
  395. package/packages/public-runtime/src/integration/index.ts +90 -0
  396. package/packages/public-runtime/src/integration/interim-bridge.ts +138 -0
  397. package/packages/public-runtime/src/integration/lifecycle-boot.ts +317 -0
  398. package/packages/public-runtime/src/integration/lifecycle-runtime.ts +393 -0
  399. package/packages/public-runtime/src/integration/lifecycle.ts +94 -0
  400. package/packages/public-runtime/src/integration/managed-analytics-api-v1-safety.d.mts +2 -0
  401. package/packages/public-runtime/src/integration/managed-analytics-api-v1-safety.mjs +10 -0
  402. package/packages/public-runtime/src/integration/managed-analytics-api-v1.schemas.ts +382 -0
  403. package/packages/public-runtime/src/integration/managed-analytics-api-v1.ts +684 -0
  404. package/packages/public-runtime/src/integration/managed-analytics-bridge.ts +383 -0
  405. package/packages/public-runtime/src/integration/managed-analytics-value-safety.ts +14 -0
  406. package/packages/public-runtime/src/integration/managed-analytics.ts +277 -0
  407. package/packages/public-runtime/src/integration/manifest.ts +470 -0
  408. package/packages/public-runtime/src/integration/native-amplitude.ts +362 -0
  409. package/packages/public-runtime/src/integration/native-ga4.ts +352 -0
  410. package/packages/public-runtime/src/integration/observability.ts +451 -0
  411. package/packages/public-runtime/src/integration/order-conversion.ts +0 -0
  412. package/packages/public-runtime/src/integration/phases.ts +182 -0
  413. package/packages/public-runtime/src/integration/plan.ts +112 -0
  414. package/packages/public-runtime/src/integration/platform-adapter-runtime.ts +146 -0
  415. package/packages/public-runtime/src/integration/platform-adapters.ts +671 -0
  416. package/packages/public-runtime/src/integration/promotion-gate.ts +451 -0
  417. package/packages/public-runtime/src/integration/provider-checkout-extension.ts +425 -0
  418. package/packages/public-runtime/src/integration/receipt-measurement.ts +370 -0
  419. package/packages/public-runtime/src/integration/regulated-parent-cert.ts +311 -0
  420. package/packages/public-runtime/src/integration/render-phases.ts +267 -0
  421. package/packages/public-runtime/src/integration/resolve.ts +465 -0
  422. package/packages/public-runtime/src/integration/result.ts +239 -0
  423. package/packages/public-runtime/src/integration/secrets.ts +92 -0
  424. package/packages/public-runtime/src/integration/tamper-evidence.ts +205 -0
  425. package/packages/public-runtime/src/integration/tamper-recovery.ts +127 -0
  426. package/packages/public-runtime/src/integration/version.ts +92 -0
  427. package/packages/public-runtime/src/integration-capabilities.ts +520 -0
  428. package/packages/public-runtime/src/membership.ts +2 -2
  429. package/packages/public-runtime/src/raw-html-policy.ts +2 -4
  430. package/packages/public-runtime/src/regulated-commerce/broker/consent-dedupe.ts +144 -0
  431. package/packages/public-runtime/src/regulated-commerce/correlation/contract.ts +177 -0
  432. package/packages/public-runtime/src/regulated-commerce/diagnostics/local-dispatch.ts +24 -0
  433. package/packages/public-runtime/src/regulated-commerce/diagnostics/read-model.ts +69 -0
  434. package/packages/public-runtime/src/regulated-commerce/dispatch/core.ts +134 -0
  435. package/packages/public-runtime/src/regulated-commerce/events/contract.ts +113 -0
  436. package/packages/public-runtime/src/regulated-commerce/ledger/core.ts +81 -0
  437. package/packages/public-runtime/src/regulated-commerce/mappings/ga4-ads.ts +87 -0
  438. package/packages/public-runtime/src/regulated-commerce/provider-order/bridge.ts +52 -0
  439. package/packages/public-runtime/src/regulated-commerce/purchase-truth/contract.ts +252 -0
  440. package/packages/public-runtime/src/regulated-commerce/sources/accepted-browser-operation.ts +67 -0
  441. package/packages/public-runtime/src/regulated-commerce/testing/fake-destination.ts +93 -0
  442. package/packages/public-runtime/src/static-bundle.ts +357 -0
  443. package/packages/public-runtime/src/tenant-assets.ts +143 -4
  444. package/packages/public-runtime/src/tenant.ts +81 -17
  445. package/packages/public-runtime/tests/fixtures/integration/browser-environment.example.json +8 -0
  446. package/packages/public-runtime/tests/fixtures/integration/commerce-event.example.json +44 -0
  447. package/packages/public-runtime/tests/fixtures/integration/commerce-order-event.example.json +44 -0
  448. package/packages/public-runtime/tests/fixtures/integration/compliance-assurance-record.example.json +50 -0
  449. package/packages/public-runtime/tests/fixtures/integration/integration-manifest-v2.example.json +120 -0
  450. package/packages/public-runtime/tests/fixtures/integration/managed-analytics-v1/fake-adapter-catalog.json +35 -0
  451. package/packages/public-runtime/tests/fixtures/integration/tenant-action-registry.example.json +11 -0
  452. package/packages/public-runtime/tests/fixtures/integration/tenant-local-example/README.md +22 -0
  453. package/packages/public-runtime/tests/fixtures/integration/tenant-local-example/entry.js +30 -0
  454. package/packages/public-runtime/tests/fixtures/integration/tenant-local-example/manifest.json +75 -0
  455. package/packages/public-runtime/tests/fixtures/integration/tenant-local-example/public-config.json +3 -0
  456. package/packages/public-runtime/tests/fixtures/regulated-commerce/fake-destinations.ts +38 -0
  457. package/packages/public-runtime/tests/gtm-migration/fixtures/gtm-sample-container-v84.provenance.json +29 -0
  458. package/packages/public-runtime/tests/gtm-migration/fixtures/gtm-sample-container-v84.redacted.json +3397 -0
  459. package/scripts/build/copy-tenant-assets.mjs +14 -4
  460. package/scripts/dev/ai-edit.mjs +1 -1
  461. package/scripts/dev/checkout-watch.mjs +2 -2
  462. package/scripts/dev/file-browser.mjs +4 -6
  463. package/scripts/dev/file-writer.mjs +3 -3
  464. package/scripts/dev/git-status.mjs +2 -2
  465. package/scripts/dev/integration-guardrails.mjs +498 -0
  466. package/scripts/dev/locate-handler.mjs +3 -3
  467. package/scripts/dev/port-check.mjs +3 -3
  468. package/scripts/dev/publish.mjs +5 -9
  469. package/scripts/dev/safe-path.mjs +2 -2
  470. package/scripts/dev/shot.mjs +1 -1
  471. package/scripts/dev/tenant-source-root.mjs +1 -1
  472. package/scripts/dev/unified-diff.mjs +8 -3
  473. package/scripts/tot-dev.mjs +8 -11
  474. package/apps/storefront/src/lib/dev/vcBinding.ts +0 -80
@@ -1,13 +1,11 @@
1
1
  /**
2
- * deploy.version_observed — the deploy-provenance / deploy-skew signal (card D2).
2
+ * deploy.version_observed — the deploy-provenance / deploy-skew signal.
3
3
  *
4
- * "A deployed worker version/commit was observed." This is the DERIVED signal D5's
5
- * query surface reads to answer *deploy skew* is the build serving traffic the
6
- * pushed umbrella tip, or is a stale isolate still live? D2's job is just to make
7
- * `worker_commit` reliably present on server events and to EMIT this observation at
8
- * least once per running build; the actual "== umbrella tip?" comparison and the
9
- * timeline query are D5's (this module intentionally does no comparison — it has no
10
- * notion of what the tip is, only what THIS build is).
4
+ * "A deployed worker version/commit was observed." This module makes
5
+ * `worker_commit` reliably present on server events and EMITs this observation at
6
+ * least once per running build. It intentionally does NO comparison it has no
7
+ * notion of what the umbrella tip is, only what THIS build is; the "== umbrella
8
+ * tip?" deploy-skew comparison and the timeline query live elsewhere.
11
9
  *
12
10
  * WHAT IT PRODUCES. A catalog `deploy.version_observed` event (ACTION_CATALOG:
13
11
  * actors [system|dev], source server, sinks logs+analytics+timeline). The FULL
@@ -15,24 +13,20 @@
15
13
  * never redacts — because that is where the authoritative, unscrubbed sha belongs.
16
14
  *
17
15
  * DELIBERATELY the full sha does NOT go in `payload`. The action's argsAllow names
18
- * `commit`, but a 40-char hex sha trips D0's `high_entropy` VALUE canary (redaction.ts:
16
+ * `commit`, but a 40-char hex sha trips the `high_entropy` VALUE canary (redaction.ts:
19
17
  * ≥28 chars of base64url) — it would be scrubbed to «redacted» AND set
20
- * `report.canaryTripped`, which D6/D7 alert on, firing a FALSE PII alarm on every cold
18
+ * `report.canaryTripped`, which alerting reads, firing a FALSE PII alarm on every cold
21
19
  * start. So payload carries only the SHORT `version` (7 chars, safe) plus `env` +
22
20
  * `observedFrom`; a reader wanting the full sha reads scope.workerCommit (a git sha is
23
- * public, so the core zone is its correct, alert-free home). See the D2 report note for
24
- * D5/D8: treat scope.workerCommit as the authoritative provenance, payload.version as a
21
+ * public, so the core zone is its correct, alert-free home). Treat scope.workerCommit
22
+ * as the authoritative provenance, payload.version as a
25
23
  * human-eyeball convenience.
26
24
  *
27
25
  * WHERE IT'S EMITTED. observeDeployVersion() fires ONCE PER WORKER ISOLATE (guarded
28
26
  * by a module-level flag) from the middleware's front door — a cold start emits one
29
- * observation, not one per request, so the stream is low-volume and honest. Until
30
- * D1's recordActivity()/D4's ingest+store land, the emission goes to the universal
31
- * `logs` sink (structured `[activity]` JSON to Workers Logs — the same pipeline the
32
- * interim recordActivity.ts uses, already provisioned via `[observability]`). When
33
- * D1's recordActivity() exists, swap `emitToLogs` for it (it will fan out to the
34
- * analytics+timeline sinks the action declares); the EVENT this module builds is
35
- * unchanged.
27
+ * observation, not one per request, so the stream is low-volume and honest. The
28
+ * emission goes to the universal `logs` sink (structured `[activity]` JSON to Workers
29
+ * Logs, already provisioned via `[observability]`).
36
30
  */
37
31
  import { createActivityEvent } from "@tot/public-runtime";
38
32
  import type { ActivityEvent, RedactionReport } from "@tot/public-runtime";
@@ -52,8 +46,8 @@ export interface DeployVersionObservedInput {
52
46
 
53
47
  /**
54
48
  * Build (do not emit) the `deploy.version_observed` ActivityEvent for the running
55
- * build. Pure + side-effect-free — the piece D5 ultimately consumes and the piece
56
- * tests assert against. Returns the safe-constructed event plus its redaction report.
49
+ * build. Pure + side-effect-free — the piece downstream consumers ultimately consume
50
+ * and the piece tests assert against. Returns the safe-constructed event plus its redaction report.
57
51
  */
58
52
  export function buildDeployVersionObservedEvent(
59
53
  input: DeployVersionObservedInput = {},
@@ -66,7 +60,7 @@ export function buildDeployVersionObservedEvent(
66
60
  source: "server",
67
61
  outcome: { status: "succeeded" },
68
62
  // worker_commit (full sha) in the CORE zone — never redacted; the authoritative
69
- // provenance every server event carries and D5 derives skew from.
63
+ // provenance every server event carries and deploy skew is derived from.
70
64
  scope: commit !== UNKNOWN_COMMIT ? { workerCommit: commit } : {},
71
65
  // Payload carries the SHORT version (safe from the high_entropy canary that would
72
66
  // scrub a full sha) + env + observedFrom. Unknown builds omit `version` rather than
@@ -82,10 +76,9 @@ export function buildDeployVersionObservedEvent(
82
76
  }
83
77
 
84
78
  /**
85
- * Serialize an ActivityEvent to the universal `logs` sink (Workers Logs). Interim
86
- * transport until D1's recordActivity() fans out to all of the action's sinks;
87
- * mirrors the `[activity]` tag the existing recordActivity.ts slice already emits so
88
- * one grep finds both. Best-effort, never throws.
79
+ * Serialize an ActivityEvent to the universal `logs` sink (Workers Logs)
80
+ * structured `[activity]` JSON so one grep finds all activity lines.
81
+ * Best-effort, never throws.
89
82
  */
90
83
  function emitToLogs(event: ActivityEvent): void {
91
84
  try {
@@ -108,7 +101,7 @@ export function observeDeployVersion(
108
101
  input: DeployVersionObservedInput = {},
109
102
  ): ActivityEvent | undefined {
110
103
  if (observedThisIsolate) return undefined;
111
- // Kill switch (D8): telemetry off ⇒ skip the observation entirely (fail-open). Do
104
+ // Kill switch: telemetry off ⇒ skip the observation entirely (fail-open). Do
112
105
  // NOT set the per-isolate guard, so re-enabling emits the observation on the next call.
113
106
  if (isActivityDisabled()) return undefined;
114
107
  observedThisIsolate = true;
@@ -1,13 +1,13 @@
1
1
  /**
2
- * Ingest validation + server-side redaction for `POST /api/activity` (card D4).
2
+ * Ingest validation + server-side redaction for `POST /api/activity`.
3
3
  *
4
4
  * PURE (no I/O) so it is unit-testable and the route stays a thin auth/parse/
5
- * respond shell. Takes the raw JSON events an emitter posted (CLI cohort D3, UI
6
- * cohort D6 — both send JSON matching the `ActivityEvent` shape) plus the
5
+ * respond shell. Takes the raw JSON events an emitter posted (the CLI and UI
6
+ * cohorts — both send JSON matching the `ActivityEvent` shape) plus the
7
7
  * AUTHENTICATED tenant id, and returns the accepted events (already rebuilt
8
8
  * through `createActivityEvent`, so re-redacted server-side) and the rejections.
9
9
  *
10
- * DEFENSE IN DEPTH (D8's future attack surface). Even though every emitter is
10
+ * DEFENSE IN DEPTH. Even though every emitter is
11
11
  * expected to have run the redaction contract itself, ingest NEVER trusts that:
12
12
  * it rebuilds each event through `createActivityEvent()`, which re-applies the
13
13
  * default-deny allowlist + canary scan. A malicious/careless client that posts a
@@ -61,9 +61,9 @@ export interface IngestRejection {
61
61
  export interface AcceptedActivity {
62
62
  event: ActivityEvent;
63
63
  /** True when a value-canary fired during server-side redaction — the signal
64
- * the route emits self-telemetry for and D6/D7 alert on. */
64
+ * the route emits self-telemetry for and alerting reads. */
65
65
  canaryTripped: boolean;
66
- /** The redaction hits (fact-of, never the value) for D8 audit / logging. */
66
+ /** The redaction hits (fact-of, never the value) for audit / logging. */
67
67
  redactionHits: RedactionFieldHit[];
68
68
  }
69
69
 
@@ -122,14 +122,14 @@ export function ingestOne(index: number, raw: unknown, tenantId: string): Accept
122
122
  const durationMs = typeof durationRaw === "number" && Number.isFinite(durationRaw) ? durationRaw : undefined;
123
123
 
124
124
  // `at`: keep the emit clock when well-formed; a PRESENT-but-malformed `at` is a
125
- // reject (a broken clock corrupts the D5 timeline ordering), a MISSING one is
125
+ // reject (a broken clock corrupts the timeline ordering), a MISSING one is
126
126
  // stamped server-side by createActivityEvent.
127
127
  const at = e.at;
128
128
  if (at !== undefined && !isIsoTimestamp(at)) return { index, reason: "bad_timestamp", attemptedAction: action };
129
129
 
130
130
  const rawScope = (e.scope && typeof e.scope === "object" ? e.scope : {}) as Record<string, unknown>;
131
131
 
132
- // CORE-ZONE PII GUARD (D8 hardening). actor.id / actor.ref and the client-supplied
132
+ // CORE-ZONE PII GUARD. actor.id / actor.ref and the client-supplied
133
133
  // scope ids land UNREDACTED in the core zone, whose contract is "opaque, never raw
134
134
  // PII/secret". The payload contract is enforced by re-redaction below, but the core
135
135
  // ids were NOT checked — a buggy/malicious (though authenticated) emitter could
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Service-auth for `POST /api/activity` (card D4) — HMAC-SHA256 over the raw
2
+ * Service-auth for `POST /api/activity` — HMAC-SHA256 over the raw
3
3
  * body, with the authenticated TENANT bound into the signed material.
4
4
  *
5
5
  * WHY HMAC (not the bare `x-mcp-service-secret` shared-secret seam the
@@ -1,13 +1,13 @@
1
1
  /**
2
- * The single operational KILL SWITCH for the whole activity-telemetry pipeline (D8).
2
+ * The single operational KILL SWITCH for the whole activity-telemetry pipeline.
3
3
  *
4
4
  * ONE flag — the `ACTIVITY_TELEMETRY_DISABLED` env var / Worker secret — switches
5
5
  * EVERY server-side emit path to a no-op in one place:
6
- * • `recordActivity()` (D1 server emitter) — and therefore `recordUiActivity()`
7
- * (D6 UI cohort), which is a thin wrapper over it;
8
- * • `observeDeployVersion()` (D2 deploy-provenance observer);
9
- * • `POST /api/activity` (D4 ingest) — accepts-and-drops so emitters never error.
10
- * The out-of-process CLI (`emitActivity`, D3) honours the SAME flag name in its own
6
+ * • `recordActivity()` (the server emitter) — and therefore `recordUiActivity()`
7
+ * (the UI cohort), which is a thin wrapper over it;
8
+ * • `observeDeployVersion()` (the deploy-provenance observer);
9
+ * • `POST /api/activity` (ingest) — accepts-and-drops so emitters never error.
10
+ * The out-of-process CLI (`emitActivity`) honours the SAME flag name in its own
11
11
  * JS mirror. Wiring it at these SHARED chokepoints means no call site checks it.
12
12
  *
13
13
  * FAIL-OPEN — this gates ONLY the observability layer. The underlying operation
@@ -1,18 +1,18 @@
1
1
  /**
2
- * Query surface over the D1 `activity_events` timeline (card D5).
2
+ * Query surface over the D1 `activity_events` timeline.
3
3
  *
4
4
  * The READ half of the operational-activity spine: given a tenant, return that
5
5
  * tenant's lifecycle activity newest-first for the `/admin` ops timeline UI
6
6
  * ("who shipped/rejected what, when, why — and what happened to my change/
7
7
  * deploy"). PURE over the injected `Queryable` seam (D1 in the Worker, an
8
8
  * in-memory `node:sqlite` in tests), same posture as `lib/d1/catalog.ts` and the
9
- * D4 write path (`store.ts`).
9
+ * write path (`store.ts`).
10
10
  *
11
11
  * TENANT ISOLATION IS THE INVARIANT. `tenantId` is REQUIRED on every query and is
12
12
  * ALWAYS the first `WHERE` predicate (`tenant_id = ?`, a bound param — never
13
13
  * string-interpolated). There is NO code path that reads `activity_events` without
14
14
  * a tenant equality bound in: a query with a missing/empty tenant THROWS rather
15
- * than degrading to a cross-tenant scan. This mirrors the D4 write-side isolation
15
+ * than degrading to a cross-tenant scan. This mirrors the write-side isolation
16
16
  * (ingest writes only the authenticated tenant) for the read side — a colliding
17
17
  * `changeId`/`actorId`/`action` across two tenants can never surface tenant B's
18
18
  * rows to a tenant-A query, because the collision is AND-ed under the tenant
@@ -24,12 +24,12 @@
24
24
  * the UI. We never re-expand or un-redact it; a malformed row degrades to an empty
25
25
  * payload rather than throwing the whole query.
26
26
  *
27
- * DEPLOY SKEW (card D2 data, lightweight). The `deploy.version_observed` action is
27
+ * DEPLOY SKEW (lightweight). The `deploy.version_observed` action is
28
28
  * in the timeline cohort, so its rows are queryable here. `deriveDeploySkew()`
29
29
  * folds those rows into the set of distinct build versions observed for the tenant
30
30
  * and compares them against the build serving THIS query (`workerCommitShort()`),
31
31
  * surfacing "a stale/newer isolate is (or was) live" as a visible signal. The full
32
- * alerting logic is D7's job — this only makes the data visibly queryable.
32
+ * alerting logic lives elsewhere — this only makes the data visibly queryable.
33
33
  */
34
34
  import {
35
35
  getActionSpec,
@@ -241,7 +241,7 @@ export async function queryActivity(
241
241
  return rows.map(toTimelineRow);
242
242
  }
243
243
 
244
- // ─── Deploy skew (card D2 data) ──────────────────────────────────────────────
244
+ // ─── Deploy skew ─────────────────────────────────────────────────────────────
245
245
 
246
246
  /** One distinct build version observed in the tenant's timeline. */
247
247
  export interface ObservedVersion {
@@ -256,8 +256,8 @@ export interface ObservedVersion {
256
256
  }
257
257
 
258
258
  /**
259
- * Deploy-skew summary for a tenant. Lightweight and derived, NOT an alert — D7
260
- * owns alerting. It answers: what build(s) has this tenant seen serving, and does
259
+ * Deploy-skew summary for a tenant. Lightweight and derived, NOT an alert —
260
+ * alerting lives elsewhere. It answers: what build(s) has this tenant seen serving, and does
261
261
  * the build serving THIS request match the newest one?
262
262
  */
263
263
  export interface DeploySkewSummary {
@@ -360,7 +360,7 @@ export function parseTimelineQuery(params: URLSearchParams, tenantId: string): A
360
360
  };
361
361
  }
362
362
 
363
- // ─── TODO (card D5 optional) — cross-tenant MCP ops query for ToT staff ──────
363
+ // ─── TODO — cross-tenant MCP ops query for ToT staff ────────────────────────
364
364
  // Deliberately NOT built: storefront has no in-repo MCP tool surface to hook into
365
365
  // (the MCP tools live in the external `tot-mcp` repo; this repo only *authenticates*
366
366
  // tot-mcp callers via the `x-mcp-service-secret` webhook seam — it exposes no tool
@@ -1,21 +1,17 @@
1
1
  /**
2
- * Server-side activity emitter (card D1) — the storefront's entry point onto the
3
- * D0 actor×action telemetry contract (`@tot/public-runtime/activity`).
2
+ * Server-side activity emitter — the storefront's entry point onto the
3
+ * actor×action telemetry contract (`@tot/public-runtime/activity`).
4
4
  *
5
- * This SUPERSEDES the interim admin-only slice that used to live here (a bespoke
6
- * `{surface, action, outcome, actor_email, …}` shape logged for candidate
7
- * accept/reject). That slice pre-dated the contract and imported `@/lib/change`
8
- * for a session type — a `renderer-no-controlplane` violation. It is gone: every
9
- * emitter now builds through {@link recordActivity}, which runs the SAFE
5
+ * Every emitter builds through {@link recordActivity}, which runs the SAFE
10
6
  * constructor `createActivityEvent()` so the payload zone is always redacted, and
11
7
  * writes the envelope as one structured JSON line to Workers Logs.
12
8
  *
13
9
  * TRANSPORT — Workers Logs (DECISIONS.md §8, tier 1 "universal"). `console.log` of
14
- * the structured envelope, tagged `[activity]` exactly as the interim slice was, so
15
- * existing `wrangler tail` / CF-dashboard grep tooling keeps working unchanged.
16
- * `[observability]` is already enabled in `apps/storefront/wrangler.toml`, so there
17
- * is nothing to provision. The analytics/timeline sinks named on each action's
18
- * `spec.sinks` are D4's ingest/store job — D1 emits to the firehose only.
10
+ * the structured envelope, tagged `[activity]`, so `wrangler tail` / CF-dashboard
11
+ * grep tooling works. `[observability]` is already enabled in
12
+ * `apps/storefront/wrangler.toml`, so there is nothing to provision. The
13
+ * analytics/timeline sinks named on each action's `spec.sinks` are the ingest/store
14
+ * job — this emitter writes to the firehose only.
19
15
  *
20
16
  * BEST-EFFORT + BOUNDED — a logging failure must NEVER throw or block the caller.
21
17
  * Every path is wrapped; a construction/serialize fault degrades to a single
@@ -31,7 +27,7 @@ import { isActivityDisabled } from "./killSwitch";
31
27
  * zone is guaranteed by construction. Best-effort + never throws.
32
28
  */
33
29
  export function recordActivity(input: CreateActivityEventInput): void {
34
- // Kill switch (D8): the whole pipeline is a no-op when disabled — fail-open, the
30
+ // Kill switch: the whole pipeline is a no-op when disabled — fail-open, the
35
31
  // action this describes is unaffected. Covers the UI cohort too (recordUiActivity
36
32
  // wraps this). Sync check so this fire-and-forget path stays synchronous.
37
33
  if (isActivityDisabled()) return;
@@ -60,9 +56,9 @@ export function recordActivity(input: CreateActivityEventInput): void {
60
56
  * one person stays correlatable across events) while being non-reversible.
61
57
  *
62
58
  * The salt is a Worker secret (`ACTIVITY_ACTOR_SALT`). The canonical salt is the
63
- * D1/D4 OPEN QUESTION flagged in `redaction.ts` — this SERVER-side helper is where
59
+ * open question flagged in `redaction.ts` — this SERVER-side helper is where
64
60
  * it lands, deliberately NOT baked into the edge-shipped `@tot/public-runtime`
65
- * package (which the D0 header warns against). Best-effort: on any crypto fault it
61
+ * package (which the redaction header warns against). Best-effort: on any crypto fault it
66
62
  * returns a coarse non-PII fallback so an emitter never throws.
67
63
  */
68
64
  export async function hashActorId(identifier: string, salt?: string | null): Promise<string> {
@@ -1,16 +1,15 @@
1
1
  /**
2
- * Sink fan-out for the activity spine (card D4) — routes ONE redacted
2
+ * Sink fan-out for the activity spine — routes ONE redacted
3
3
  * `ActivityEvent` to the sink(s) its catalog entry declares (`spec.sinks`), per
4
4
  * the store decision in DECISIONS.md §8:
5
5
  *
6
6
  * • "logs" — Workers Logs firehose, EVERY action. `console.log` of the
7
- * structured envelope (the interim `recordActivity.ts` slice's
8
- * transport). Zero provision, days-only retention.
7
+ * structured envelope. Zero provision, days-only retention.
9
8
  * • "analytics" — Cloudflare Analytics Engine (`ACTIVITY_ANALYTICS` binding).
10
9
  * High-volume / query-light cohort; aggregate SQL, ~90 days.
11
10
  * • "timeline" — D1 `STOREFRONT_APPS_DB.activity_events`. Low-volume / high-
12
11
  * value lifecycle cohort; point queries + joins + arbitrary
13
- * retention for the D5 ops timeline UI.
12
+ * retention for the ops timeline UI.
14
13
  *
15
14
  * PURE over injected seams (a `Queryable` for D1, an `AnalyticsEngineLike` for
16
15
  * Analytics Engine) so the same code serves the real Worker bindings and an
@@ -36,8 +35,7 @@ export interface ActivitySinks {
36
35
  ingestedAt: string;
37
36
  }
38
37
 
39
- /** Structured Workers-Logs line — grep-able on the `[activity]` tag, same shape
40
- * the interim admin slice emits. Never throws. */
38
+ /** Structured Workers-Logs line — grep-able on the `[activity]` tag. Never throws. */
41
39
  export function logActivity(event: ActivityEvent): void {
42
40
  try {
43
41
  console.log(`[activity] ${JSON.stringify(event)}`);
@@ -1,21 +1,21 @@
1
1
  /**
2
- * Shared emit helper for UI-ORIGINATED operational activity (card D6).
2
+ * Shared emit helper for UI-ORIGINATED operational activity.
3
3
  *
4
- * The UI cohort's entry point onto the D0 actor×action telemetry contract. It sits
5
- * ON TOP of D1's server emitter ({@link recordActivity}) — every admin/cockpit action
4
+ * The UI cohort's entry point onto the actor×action telemetry contract. It sits
5
+ * ON TOP of the server emitter ({@link recordActivity}) — every admin/cockpit action
6
6
  * handler already runs SERVER-SIDE in the same Worker, so a UI action reaches
7
- * telemetry through the same in-process `recordActivity()` call D1 uses (one
8
- * structured Workers-Logs line), NOT a client-side `fetch` to the D4 ingest endpoint.
7
+ * telemetry through the same in-process `recordActivity()` call the server path uses (one
8
+ * structured Workers-Logs line), NOT a client-side `fetch` to the ingest endpoint.
9
9
  * There is no browser-only signal to capture: an admin/cockpit "Publish / Connect /
10
10
  * Invite / Approve / Rollback" click is a server-rendered form/JSON POST to an API
11
11
  * route, so the route handler that already does the work is exactly where the emit
12
- * belongs (zero extra HTTP round-trip, no new auth/trust boundary). The D4 HMAC
12
+ * belongs (zero extra HTTP round-trip, no new auth/trust boundary). The HMAC
13
13
  * ingest path exists for emitters that CAN'T call `recordActivity()` directly (the
14
- * out-of-process CLI cohort, D3) — it is not this cohort's path.
14
+ * out-of-process CLI cohort) — it is not this cohort's path.
15
15
  *
16
16
  * WHAT THIS ADDS over calling `recordActivity()` raw: it stamps `source: "ui"` and,
17
17
  * critically, resolves the ACTOR KIND from the authenticated session so the timeline
18
- * (D5) can attribute an action to the right cohort:
18
+ * can attribute an action to the right cohort:
19
19
  *
20
20
  * • "admin" — a ToT-STAFF viewer (the session carries `staff[]` scope). ToT
21
21
  * operators acting through the admin shell / staff vendor selection.
@@ -29,10 +29,10 @@
29
29
  * The classifier is a PURE function ({@link classifyActorKind}) so the cohort mapping
30
30
  * is unit-tested without a live request. The opaque `actor.id` is the salted,
31
31
  * non-reversible hash of the acting identity (never raw PII in the core zone) — the
32
- * SAME {@link hashActorId} + `ACTIVITY_ACTOR_SALT` D1 established, so one person stays
32
+ * SAME {@link hashActorId} + `ACTIVITY_ACTOR_SALT` the server path uses, so one person stays
33
33
  * correlatable across the CLI, server, and UI cohorts.
34
34
  *
35
- * USAGE (mirrors D1's reject.ts — resolve the actor ONCE after auth, emit at each
35
+ * USAGE (mirrors reject.ts — resolve the actor ONCE after auth, emit at each
36
36
  * exit point, zero change to the handler's control flow):
37
37
  *
38
38
  * const actor = await resolveUiActor(context, { owner: auth.owner });
@@ -125,8 +125,8 @@ export async function resolveUiActor(
125
125
 
126
126
  /**
127
127
  * Emit ONE UI-originated activity event with a PRE-RESOLVED actor. A thin, SYNC
128
- * wrapper over D1's {@link recordActivity} that stamps `source: "ui"` — so a handler
129
- * calls it at each exit point (succeeded / failed / refused) exactly as D1's server
128
+ * wrapper over {@link recordActivity} that stamps `source: "ui"` — so a handler
129
+ * calls it at each exit point (succeeded / failed / refused) exactly as the server
130
130
  * emitters do, with no control-flow change. Best-effort + never throws (inherited
131
131
  * from `recordActivity`).
132
132
  */
@@ -1,9 +1,9 @@
1
1
  /**
2
- * worker_commit — build provenance for the running Worker (card D2).
2
+ * worker_commit — build provenance for the running Worker.
3
3
  *
4
4
  * The commit SHA THIS Worker build was cut from, made available REPO-WIDE at
5
5
  * runtime so every server-emitted ActivityEvent can carry it (see event.ts
6
- * `ActivityScope.workerCommit`) and D5 can later derive **deploy skew** — "is the
6
+ * `ActivityScope.workerCommit`) and the query surface can derive **deploy skew** — "is the
7
7
  * build serving this request == the pushed umbrella tip, or is a stale worker
8
8
  * still live?".
9
9
  *
@@ -15,8 +15,8 @@
15
15
  * — we read it through the identical `typeof` guard so both agree by construction,
16
16
  * and so the value is safe under vitest (where the define isn't applied → "unknown").
17
17
  *
18
- * This is the single accessor the whole repo threads through: D1's recordActivity()
19
- * spreads serverActivityScope() into every server event; D2's deploy.version_observed
18
+ * This is the single accessor the whole repo threads through: recordActivity()
19
+ * spreads serverActivityScope() into every server event; the deploy.version_observed
20
20
  * emitter (deployVersion.ts) reads workerCommit() directly.
21
21
  */
22
22
  import type { ActivityScope } from "@tot/public-runtime";
@@ -41,7 +41,7 @@ export function workerCommitShort(override?: string): string {
41
41
  }
42
42
 
43
43
  /**
44
- * True when the build has a real git commit (not the "unknown" sentinel). D5's
44
+ * True when the build has a real git commit (not the "unknown" sentinel). The
45
45
  * skew derivation only compares against the umbrella tip when this holds — an
46
46
  * "unknown" build can't be meaningfully skew-checked.
47
47
  */
@@ -51,7 +51,7 @@ export function hasKnownWorkerCommit(override?: string): boolean {
51
51
 
52
52
  /**
53
53
  * Build the CORE scope for a SERVER-sourced ActivityEvent with `worker_commit`
54
- * stamped in. This is the seam D1's recordActivity() spreads into every server
54
+ * stamped in. This is the seam recordActivity() spreads into every server
55
55
  * event so provenance is present WITHOUT each call site remembering it:
56
56
  *
57
57
  * createActivityEvent({ ..., source: "server", scope: serverActivityScope({ tenantId }) })