sealkeep 0.9.0 → 0.11.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 (274) hide show
  1. package/ARCHITECTURE.md +163 -14
  2. package/CHANGELOG.md +223 -1
  3. package/CONTROL_PLANE.md +2 -2
  4. package/LICENSE +1 -1
  5. package/README.md +108 -22
  6. package/THIRD_PARTY.md +2 -2
  7. package/THREAT_MODEL.md +23 -4
  8. package/dist/packages/{vaultline-crypto → sealkeep-crypto}/src/chunk-access.d.ts +26 -4
  9. package/dist/packages/sealkeep-crypto/src/chunk-access.js +219 -0
  10. package/dist/packages/{vaultline-crypto → sealkeep-crypto}/src/envelope.d.ts +11 -1
  11. package/dist/packages/{vaultline-crypto → sealkeep-crypto}/src/envelope.js +58 -21
  12. package/dist/packages/{vaultline-crypto → sealkeep-crypto}/src/format.d.ts +2 -2
  13. package/dist/packages/{vaultline-crypto → sealkeep-crypto}/src/index.d.ts +1 -0
  14. package/dist/packages/{vaultline-crypto → sealkeep-crypto}/src/index.js +1 -0
  15. package/dist/packages/{vaultline-crypto → sealkeep-crypto}/src/recipients.js +4 -4
  16. package/dist/packages/sealkeep-crypto/src/squeeze.d.ts +6 -0
  17. package/dist/packages/sealkeep-crypto/src/squeeze.js +39 -0
  18. package/dist/packages/{vaultline-crypto → sealkeep-crypto}/src/stream.d.ts +36 -3
  19. package/dist/packages/{vaultline-crypto → sealkeep-crypto}/src/stream.js +196 -37
  20. package/dist/site/index.html +1808 -1904
  21. package/dist/site/llms.txt +67 -0
  22. package/dist/site/trust/architecture-data-flow.html +53 -0
  23. package/dist/site/trust/audit-roadmap.html +37 -0
  24. package/dist/site/trust/deployment-responsibility.html +11 -0
  25. package/dist/site/trust/dpa-sample.html +30 -0
  26. package/dist/site/trust/release-provenance.html +21 -0
  27. package/dist/site/trust/subprocessors.html +15 -0
  28. package/dist/site/trust/threat-model.html +34 -0
  29. package/dist/site/trust/toms.html +41 -0
  30. package/dist/site/trust-document.css +32 -0
  31. package/dist/site/trust.html +73 -0
  32. package/dist/site/visual/assets/index-8Nxnkc7o.js +207 -0
  33. package/dist/site/visual/assets/index-oxLy1bpy.css +1 -0
  34. package/dist/site/visual/index.html +18 -0
  35. package/dist/site.zip +0 -0
  36. package/dist/src/activity.d.ts +9 -0
  37. package/dist/src/activity.js +90 -1
  38. package/dist/src/adapters.d.ts +175 -5
  39. package/dist/src/adapters.js +961 -73
  40. package/dist/src/agent-context.d.ts +135 -0
  41. package/dist/src/agent-context.js +1059 -0
  42. package/dist/src/archive-copies.d.ts +47 -0
  43. package/dist/src/archive-copies.js +179 -0
  44. package/dist/src/audit.d.ts +1 -1
  45. package/dist/src/audit.js +29 -4
  46. package/dist/src/autopilot.d.ts +52 -7
  47. package/dist/src/autopilot.js +143 -25
  48. package/dist/src/background-bandwidth.d.ts +46 -0
  49. package/dist/src/background-bandwidth.js +301 -0
  50. package/dist/src/background-cpu.d.ts +82 -0
  51. package/dist/src/background-cpu.js +212 -0
  52. package/dist/src/background-worker-error.d.ts +12 -0
  53. package/dist/src/background-worker-error.js +18 -0
  54. package/dist/src/branding.d.ts +24 -1
  55. package/dist/src/branding.js +31 -1
  56. package/dist/src/bridge.d.ts +233 -0
  57. package/dist/src/bridge.js +604 -0
  58. package/dist/src/byte-stream.d.ts +91 -0
  59. package/dist/src/byte-stream.js +385 -0
  60. package/dist/src/chunk-store.d.ts +41 -8
  61. package/dist/src/chunk-store.js +161 -65
  62. package/dist/src/cli.js +1698 -163
  63. package/dist/src/cloud.d.ts +841 -31
  64. package/dist/src/cloud.js +3196 -277
  65. package/dist/src/context-background.d.ts +37 -0
  66. package/dist/src/context-background.js +309 -0
  67. package/dist/src/context-drain-child.d.ts +1 -0
  68. package/dist/src/context-drain-child.js +98 -0
  69. package/dist/src/context-reader.d.ts +118 -0
  70. package/dist/src/context-reader.js +447 -0
  71. package/dist/src/control-plane/auth.d.ts +32 -4
  72. package/dist/src/control-plane/auth.js +85 -24
  73. package/dist/src/control-plane/server.js +19 -6
  74. package/dist/src/control-plane.d.ts +17 -1
  75. package/dist/src/control-plane.js +32 -6
  76. package/dist/src/crypto.d.ts +1 -1
  77. package/dist/src/crypto.js +5 -5
  78. package/dist/src/daemon-lease.d.ts +70 -0
  79. package/dist/src/daemon-lease.js +420 -0
  80. package/dist/src/daemon.d.ts +94 -1
  81. package/dist/src/daemon.js +1082 -105
  82. package/dist/src/darwin-service-policy.d.ts +41 -0
  83. package/dist/src/darwin-service-policy.js +60 -0
  84. package/dist/src/dashboard-cli.js +15 -15
  85. package/dist/src/device-authorization.d.ts +37 -0
  86. package/dist/src/device-authorization.js +199 -0
  87. package/dist/src/device-enrollment.d.ts +91 -0
  88. package/dist/src/device-enrollment.js +349 -0
  89. package/dist/src/disk.d.ts +17 -12
  90. package/dist/src/disk.js +43 -17
  91. package/dist/src/doctor.d.ts +35 -1
  92. package/dist/src/doctor.js +316 -41
  93. package/dist/src/durable-ticket-lock.d.ts +24 -0
  94. package/dist/src/durable-ticket-lock.js +232 -0
  95. package/dist/src/enroll.d.ts +1 -1
  96. package/dist/src/enroll.js +13 -7
  97. package/dist/src/env.d.ts +10 -1
  98. package/dist/src/env.js +11 -3
  99. package/dist/src/errors.d.ts +8 -8
  100. package/dist/src/errors.js +6 -6
  101. package/dist/src/flush.d.ts +12 -0
  102. package/dist/src/flush.js +37 -0
  103. package/dist/src/heartbeat.d.ts +86 -12
  104. package/dist/src/heartbeat.js +415 -29
  105. package/dist/src/index-background-watchdog.d.ts +1 -0
  106. package/dist/src/index-background-watchdog.js +94 -0
  107. package/dist/src/index-background-work.d.ts +21 -0
  108. package/dist/src/index-background-work.js +25 -0
  109. package/dist/src/index-background.d.ts +64 -0
  110. package/dist/src/index-background.js +394 -0
  111. package/dist/src/index-build-child.d.ts +1 -0
  112. package/dist/src/index-build-child.js +109 -0
  113. package/dist/src/index-manifest.d.ts +52 -0
  114. package/dist/src/index-manifest.js +444 -0
  115. package/dist/src/index-publication-proof.d.ts +84 -0
  116. package/dist/src/index-publication-proof.js +380 -0
  117. package/dist/src/index-publication-state.d.ts +149 -0
  118. package/dist/src/index-publication-state.js +696 -0
  119. package/dist/src/index-publication-verifier.d.ts +89 -0
  120. package/dist/src/index-publication-verifier.js +341 -0
  121. package/dist/src/index-publish.d.ts +62 -0
  122. package/dist/src/index-publish.js +540 -0
  123. package/dist/src/index-scratch-cleanup.d.ts +19 -0
  124. package/dist/src/index-scratch-cleanup.js +166 -0
  125. package/dist/src/index-segment-types.d.ts +132 -0
  126. package/dist/src/index-segment-types.js +21 -0
  127. package/dist/src/index-segments.d.ts +9 -0
  128. package/dist/src/index-segments.js +516 -0
  129. package/dist/src/index-store.d.ts +123 -0
  130. package/dist/src/index-store.js +495 -0
  131. package/dist/src/index-sync.d.ts +91 -15
  132. package/dist/src/index-sync.js +286 -53
  133. package/dist/src/index-upgrade-publication.d.ts +30 -0
  134. package/dist/src/index-upgrade-publication.js +179 -0
  135. package/dist/src/integration-manager.d.ts +32 -0
  136. package/dist/src/integration-manager.js +394 -0
  137. package/dist/src/leakscan.js +1 -1
  138. package/dist/src/local-api.d.ts +56 -15
  139. package/dist/src/local-api.js +4979 -541
  140. package/dist/src/machine-settings.d.ts +51 -0
  141. package/dist/src/machine-settings.js +166 -0
  142. package/dist/src/managed-chunks.d.ts +5 -2
  143. package/dist/src/managed-chunks.js +14 -14
  144. package/dist/src/mcp-install.d.ts +11 -9
  145. package/dist/src/mcp-install.js +73 -28
  146. package/dist/src/mcp-workspace.d.ts +18 -0
  147. package/dist/src/mcp-workspace.js +50 -0
  148. package/dist/src/mcp.js +294 -25
  149. package/dist/src/migrate.js +27 -21
  150. package/dist/src/notify.d.ts +1 -1
  151. package/dist/src/notify.js +5 -5
  152. package/dist/src/offload.d.ts +201 -14
  153. package/dist/src/offload.js +1848 -140
  154. package/dist/src/onboarding.d.ts +8 -1
  155. package/dist/src/onboarding.js +4 -4
  156. package/dist/src/packages.d.ts +2 -2
  157. package/dist/src/packages.js +10 -2
  158. package/dist/src/passkey.d.ts +0 -1
  159. package/dist/src/passkey.js +2 -7
  160. package/dist/src/password-lock.d.ts +2 -2
  161. package/dist/src/password-lock.js +6 -6
  162. package/dist/src/paths.d.ts +2 -0
  163. package/dist/src/paths.js +2 -0
  164. package/dist/src/presence.d.ts +86 -0
  165. package/dist/src/presence.js +240 -0
  166. package/dist/src/progress-deadline.d.ts +21 -0
  167. package/dist/src/progress-deadline.js +91 -0
  168. package/dist/src/project-repair.d.ts +55 -0
  169. package/dist/src/project-repair.js +131 -0
  170. package/dist/src/providers/gcs.d.ts +28 -7
  171. package/dist/src/providers/gcs.js +35 -24
  172. package/dist/src/providers/gdrive.d.ts +71 -8
  173. package/dist/src/providers/gdrive.js +223 -50
  174. package/dist/src/providers/index.d.ts +11 -3
  175. package/dist/src/providers/index.js +30 -10
  176. package/dist/src/providers/s3.d.ts +30 -8
  177. package/dist/src/providers/s3.js +41 -30
  178. package/dist/src/providers/safe-storage-fetch.d.ts +12 -0
  179. package/dist/src/providers/safe-storage-fetch.js +72 -0
  180. package/dist/src/queue.d.ts +136 -19
  181. package/dist/src/queue.js +862 -96
  182. package/dist/src/reclaim-transaction.d.ts +156 -0
  183. package/dist/src/reclaim-transaction.js +1027 -0
  184. package/dist/src/recovery-codes.d.ts +32 -0
  185. package/dist/src/recovery-codes.js +338 -0
  186. package/dist/src/recovery.js +12 -9
  187. package/dist/src/rehydrate.d.ts +25 -22
  188. package/dist/src/rehydrate.js +319 -23
  189. package/dist/src/restore.d.ts +57 -4
  190. package/dist/src/restore.js +272 -36
  191. package/dist/src/resume-stub.d.ts +92 -0
  192. package/dist/src/resume-stub.js +417 -0
  193. package/dist/src/retention.d.ts +98 -7
  194. package/dist/src/retention.js +1066 -62
  195. package/dist/src/rotate.js +3 -3
  196. package/dist/src/search.d.ts +566 -8
  197. package/dist/src/search.js +5897 -290
  198. package/dist/src/secrets.d.ts +51 -7
  199. package/dist/src/secrets.js +316 -24
  200. package/dist/src/service.d.ts +49 -11
  201. package/dist/src/service.js +776 -35
  202. package/dist/src/share.js +3 -3
  203. package/dist/src/shared-spaces.d.ts +98 -0
  204. package/dist/src/shared-spaces.js +214 -0
  205. package/dist/src/source-reader.d.ts +73 -0
  206. package/dist/src/source-reader.js +715 -0
  207. package/dist/src/spool.d.ts +1 -1
  208. package/dist/src/spool.js +1 -1
  209. package/dist/src/start-tui.js +2 -1
  210. package/dist/src/start.js +2 -2
  211. package/dist/src/storage-endpoint.d.ts +21 -0
  212. package/dist/src/storage-endpoint.js +122 -0
  213. package/dist/src/storage-setup.js +12 -12
  214. package/dist/src/storage-targets.d.ts +109 -6
  215. package/dist/src/storage-targets.js +975 -67
  216. package/dist/src/stream-to-cloud.d.ts +5 -1
  217. package/dist/src/stream-to-cloud.js +34 -14
  218. package/dist/src/sync-rules.d.ts +31 -6
  219. package/dist/src/sync-rules.js +153 -14
  220. package/dist/src/team-backfill-scheduling.d.ts +8 -0
  221. package/dist/src/team-backfill-scheduling.js +33 -0
  222. package/dist/src/team-backfill.d.ts +116 -0
  223. package/dist/src/team-backfill.js +1429 -0
  224. package/dist/src/team-index-cache.d.ts +16 -0
  225. package/dist/src/team-index-cache.js +152 -0
  226. package/dist/src/team-offboarding.d.ts +38 -0
  227. package/dist/src/team-offboarding.js +1043 -0
  228. package/dist/src/team-presence.d.ts +127 -0
  229. package/dist/src/team-presence.js +904 -0
  230. package/dist/src/team-publication-policy.d.ts +20 -0
  231. package/dist/src/team-publication-policy.js +140 -0
  232. package/dist/src/team-realtime.d.ts +68 -0
  233. package/dist/src/team-realtime.js +816 -0
  234. package/dist/src/team-source-facts-cache.d.ts +23 -0
  235. package/dist/src/team-source-facts-cache.js +255 -0
  236. package/dist/src/trash.d.ts +1 -1
  237. package/dist/src/trash.js +2 -2
  238. package/dist/src/tui.js +11 -12
  239. package/dist/src/types.d.ts +173 -7
  240. package/dist/src/types.js +20 -0
  241. package/dist/src/ui-server.d.ts +163 -35
  242. package/dist/src/ui-server.js +712 -72
  243. package/dist/src/ui.d.ts +1 -2
  244. package/dist/src/ui.js +1 -2
  245. package/dist/src/upload.d.ts +27 -0
  246. package/dist/src/upload.js +383 -43
  247. package/dist/src/vault.d.ts +226 -30
  248. package/dist/src/vault.js +1776 -192
  249. package/dist/src/watcher.d.ts +7 -1
  250. package/dist/src/watcher.js +198 -55
  251. package/dist/src/worker.d.ts +27 -3
  252. package/dist/src/worker.js +274 -55
  253. package/package.json +33 -12
  254. package/scripts/native-reboot-rehearsal.mjs +90 -0
  255. package/web/app.js +6032 -343
  256. package/web/bootstrap.js +17 -0
  257. package/web/index.html +255 -57
  258. package/web/rail.js +317 -40
  259. package/web/retention.html +2 -2
  260. package/web/rules-view.js +188 -16
  261. package/web/sessions-view.js +485 -62
  262. package/web/sessions.html +2 -2
  263. package/web/setup-api.js +152 -29
  264. package/web/setup-logic.js +68 -9
  265. package/web/setup.html +113 -44
  266. package/web/setup.js +604 -71
  267. package/web/style.css +513 -98
  268. package/dist/packages/vaultline-crypto/src/chunk-access.js +0 -93
  269. /package/dist/packages/{vaultline-crypto → sealkeep-crypto}/src/aead.d.ts +0 -0
  270. /package/dist/packages/{vaultline-crypto → sealkeep-crypto}/src/aead.js +0 -0
  271. /package/dist/packages/{vaultline-crypto → sealkeep-crypto}/src/format.js +0 -0
  272. /package/dist/packages/{vaultline-crypto → sealkeep-crypto}/src/recipients.d.ts +0 -0
  273. /package/dist/packages/{vaultline-crypto → sealkeep-crypto}/src/sha256-stream.d.ts +0 -0
  274. /package/dist/packages/{vaultline-crypto → sealkeep-crypto}/src/sha256-stream.js +0 -0
@@ -0,0 +1,73 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>Sealkeep Trust Center — architecture, privacy, and assurance</title>
7
+ <meta name="description" content="Inspect Sealkeep's architecture, data flow, public DPA template, security measures, subprocessor register, responsibility matrix, release evidence, threat model, and audit roadmap.">
8
+ <link rel="canonical" href="https://sealkeep.spala.ai/trust.html">
9
+ <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='5' fill='%2308100b'/%3E%3Cpath d='M8 8h16v16H8z' fill='none' stroke='%23e0a52c' stroke-width='3'/%3E%3C/svg%3E">
10
+ <style>
11
+ :root{color-scheme:dark;--bg:#08100b;--band:#0d1710;--surface:#111d14;--rule:#35432f;--soft-rule:#223025;--ink:#f4eee3;--soft:#aab3aa;--sage:#a9c779;--amber:#e0a52c;--cyan:#78d9ed;--rust:#d18768;--sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,system-ui,sans-serif;--mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace}
12
+ *{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);line-height:1.55}a{color:inherit}code{font-family:var(--mono)}
13
+ .wrap{width:min(1180px,calc(100% - 40px));margin-inline:auto}.nav{position:sticky;top:0;z-index:10;border-bottom:1px solid var(--soft-rule);background:rgb(8 16 11/92%);backdrop-filter:blur(14px)}.nav .wrap{min-height:60px;display:flex;align-items:center;gap:24px}.logo{font:800 .78rem var(--mono);letter-spacing:.15em;text-decoration:none;text-transform:uppercase}.logo::after{content:" .";color:var(--amber)}.navlinks{display:flex;gap:22px;margin-left:auto}.navlinks a{color:var(--soft);font:700 .65rem var(--mono);letter-spacing:.11em;text-decoration:none;text-transform:uppercase}.navlinks a:hover{color:var(--ink)}
14
+ .hero{padding:clamp(70px,10vw,128px) 0 72px;border-bottom:1px solid var(--rule);background:radial-gradient(circle at 78% 26%,rgb(224 165 44/10%),transparent 24%),linear-gradient(rgb(169 199 121/5%) 1px,transparent 1px),linear-gradient(90deg,rgb(169 199 121/5%) 1px,transparent 1px);background-size:auto,36px 36px,36px 36px}.eyebrow{display:block;color:var(--sage);font:700 .68rem var(--mono);letter-spacing:.16em;text-transform:uppercase}.hero-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(260px,.65fr);gap:clamp(38px,8vw,96px);align-items:end}.hero h1{max-width:12ch;margin:20px 0 24px;font-size:clamp(3rem,7.8vw,6.5rem);line-height:.88;letter-spacing:-.06em}.hero p{max-width:62ch;margin:0;color:var(--soft);font-size:clamp(1rem,1.6vw,1.16rem)}.hero-note{padding:24px;border:1px solid var(--rule);background:rgb(17 29 20/82%)}.hero-note b{display:block;margin-bottom:9px;color:var(--amber);font:700 .68rem var(--mono);letter-spacing:.12em;text-transform:uppercase}.hero-note p{font-size:.88rem;line-height:1.65}
15
+ .legend{display:flex;flex-wrap:wrap;gap:9px;margin-top:30px}.status{display:inline-flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid var(--rule);color:var(--soft);font:700 .6rem var(--mono);letter-spacing:.09em;text-transform:uppercase}.status::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--sage)}.status.draft::before{background:var(--amber)}.status.planned::before{background:var(--rust)}
16
+ .section{padding:84px 0;border-bottom:1px solid var(--soft-rule);scroll-margin-top:70px}.section-head{display:grid;grid-template-columns:minmax(160px,.34fr) minmax(0,.66fr);gap:40px;margin-bottom:38px}.section h2{margin:0;font-size:clamp(2rem,4.5vw,4rem);line-height:.96;letter-spacing:-.045em}.section-head p{max-width:64ch;margin:0;color:var(--soft)}
17
+ .artifacts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));border:1px solid var(--rule)}.artifact{min-width:0;padding:30px;border-top:1px solid var(--rule);border-left:1px solid var(--rule);background:var(--surface)}.artifact:nth-child(-n+2){border-top:0}.artifact:nth-child(odd){border-left:0}.artifact-top{display:flex;align-items:start;justify-content:space-between;gap:18px}.artifact h3{margin:0;font-size:1.25rem;letter-spacing:-.025em}.artifact p{margin:18px 0;color:var(--soft);font-size:.9rem}.artifact ul{margin:0;padding-left:18px;color:#d7ddd5;font-size:.86rem}.artifact li+li{margin-top:7px}.actions{display:flex;flex-wrap:wrap;gap:16px;margin-top:25px}.actions a{color:var(--cyan);font:700 .66rem var(--mono);letter-spacing:.08em;text-decoration:none;text-transform:uppercase}.actions a:hover{text-decoration:underline;text-underline-offset:4px}
18
+ .artifact:last-child:nth-child(odd){grid-column:1/-1}
19
+ .flow{padding:24px;border:1px solid var(--rule);background:var(--band)}.flow-path{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));align-items:stretch}.node{min-width:0;padding:20px 14px;border:1px solid var(--rule);background:var(--surface)}.node strong{display:block;font-size:.84rem}.node small{display:block;margin-top:8px;color:var(--soft);font-size:.69rem;line-height:1.45}.arrow{display:grid;place-items:center;color:var(--amber);font:700 .9rem var(--mono)}.boundary{margin-top:18px;padding:13px 16px;border:1px solid #52764a;color:var(--sage);font:700 .66rem var(--mono);letter-spacing:.06em;text-align:center;text-transform:uppercase}.data-table,.matrix{width:100%;margin-top:28px;border-collapse:collapse;background:var(--surface)}th,td{padding:15px;border:1px solid var(--rule);vertical-align:top;text-align:left;font-size:.82rem}th{color:var(--sage);font:700 .64rem var(--mono);letter-spacing:.08em;text-transform:uppercase}td{color:#d7ddd5}td small{color:var(--soft)}
20
+ .callout{display:grid;grid-template-columns:minmax(170px,.28fr) 1fr;gap:30px;margin-top:30px;padding:26px;border:1px solid var(--rule);background:var(--band)}.callout strong{color:var(--amber);font:700 .68rem var(--mono);letter-spacing:.09em;text-transform:uppercase}.callout p{margin:0;color:var(--soft);font-size:.88rem}.callout.warning strong{color:var(--rust)}
21
+ .roadmap{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border:1px solid var(--rule)}.roadmap article{padding:28px;border-left:1px solid var(--rule)}.roadmap article:first-child{border-left:0}.roadmap h3{margin:12px 0 20px;font-size:1.12rem}.roadmap ul{margin:0;padding-left:18px;color:var(--soft);font-size:.84rem}.roadmap li+li{margin-top:9px}
22
+ .public-boundary{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--rule)}.public-boundary>div{padding:30px}.public-boundary>div+div{border-left:1px solid var(--rule)}.public-boundary h3{margin:0 0 16px;font-size:1.2rem}.public-boundary ul{margin:0;padding-left:18px;color:var(--soft);font-size:.86rem}.public-boundary li+li{margin-top:8px}
23
+ .footer{padding:48px 0 70px}.footer-grid{display:flex;align-items:center;gap:28px}.footer p{max-width:58ch;margin:0;color:var(--soft);font-size:.82rem}.button{display:inline-flex;align-items:center;justify-content:center;margin-left:auto;padding:13px 18px;border:1px solid var(--amber);background:var(--amber);color:#10150f;font:800 .67rem var(--mono);letter-spacing:.1em;text-decoration:none;text-transform:uppercase}
24
+ @media(max-width:760px){.wrap{width:min(100% - 30px,1180px)}.navlinks a:not(:last-child){display:none}.hero-grid,.section-head,.callout{grid-template-columns:1fr}.hero h1{font-size:clamp(2.9rem,15vw,5rem)}.artifacts,.roadmap,.public-boundary{grid-template-columns:1fr}.artifact:nth-child(n),.roadmap article:nth-child(n),.public-boundary>div+div{border-left:0}.artifact+.artifact,.roadmap article+article,.public-boundary>div+div{border-top:1px solid var(--rule)}.artifact:last-child:nth-child(odd){grid-column:auto}.flow{overflow:hidden}.flow-path{grid-template-columns:1fr}.arrow{min-height:34px;transform:rotate(90deg)}.data-scroll{overflow:visible}.data-table,.matrix,.data-table tbody,.matrix tbody,.data-table tr,.matrix tr,.data-table td,.matrix td{display:block;width:100%}.data-table thead,.matrix thead{display:none}.data-table tr,.matrix tr{padding:10px 0;border:1px solid var(--rule);border-top:0}.data-table tr:first-child,.matrix tr:first-child{border-top:1px solid var(--rule)}.data-table td,.matrix td{padding:10px 14px;border:0;color:#d7ddd5}.data-table td::before,.matrix td::before{display:block;margin-bottom:4px;color:var(--sage);font:700 .58rem var(--mono);letter-spacing:.08em;text-transform:uppercase}.data-table td:nth-child(1)::before{content:"Data"}.data-table td:nth-child(2)::before{content:"Endpoint"}.data-table td:nth-child(3)::before{content:"Hosted Spala mode"}.data-table td:nth-child(4)::before{content:"Fully isolated mode"}.matrix td:nth-child(1)::before{content:"Control area"}.matrix td:nth-child(2)::before{content:"HM Software / Spala"}.matrix td:nth-child(3)::before{content:"Customer"}.footer-grid{display:block}.button{margin:24px 0 0;width:100%}}
25
+ @media(max-width:360px){.wrap{width:calc(100% - 24px)}.nav .wrap{gap:10px}.navlinks{gap:10px}.hero{padding-top:58px}.artifact,.public-boundary>div{padding:23px}.artifact-top{display:block}.artifact-top .status{margin-top:14px}.section{padding:64px 0}}
26
+ /* Shared site gutters and readable navigation on every screen. */
27
+ .wrap{width:min(1232px,calc(100% - 48px))}
28
+ .nav .wrap{min-height:64px;gap:24px}
29
+ .logo,.navlinks a{display:inline-flex;align-items:center;min-height:44px}
30
+ .navlinks a{font-size:.78rem;letter-spacing:.025em}
31
+ .artifact a{display:inline-flex;align-items:center;min-height:44px;font-size:.78rem}
32
+ .artifact-top{flex-wrap:wrap;gap:12px}
33
+ :focus-visible{outline:2px solid var(--amber);outline-offset:4px}
34
+ @media(max-width:760px){
35
+ .wrap{width:calc(100% - 32px)}
36
+ .navlinks a:not(:last-child){display:inline-flex}
37
+ .navlinks{gap:16px}
38
+ .nav .wrap{flex-wrap:wrap;gap:0;padding-block:4px}
39
+ .nav .logo{width:100%}
40
+ .navlinks{width:100%;justify-content:space-between}
41
+ .hero{padding-top:48px}
42
+ }
43
+ @media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
44
+ </style>
45
+ </head>
46
+ <body>
47
+ <nav class="nav"><div class="wrap"><a class="logo" href="/">⌑ Sealkeep</a><div class="navlinks"><a href="/#enterprise">Enterprise</a><a href="/trust.html">Trust Center</a></div></div></nav>
48
+
49
+ <main>
50
+ <header class="hero"><div class="wrap hero-grid"><div><span class="eyebrow">Public Trust Center · reviewed 5 September 2026</span><h1>Inspect before you ask.</h1><p>Architecture, privacy terms, operational ownership, known limitations, and assurance work should not require a sales call. These materials show the current contract framework, implemented controls, verification work, and open assurance items.</p><div class="legend"><span class="status">Published</span><span class="status draft">Public template</span><span class="status planned">Open item</span></div></div><aside class="hero-note"><b>Trust boundary</b><p>Public evidence accelerates review. Customer-specific contracts, exploitable vulnerability details, credentials, infrastructure identifiers, and restricted assessment reports remain controlled.</p></aside></div></header>
51
+
52
+ <section class="section" id="evidence"><div class="wrap"><div class="section-head"><span class="eyebrow">Evidence index</span><div><h2>Seven buyer questions. Seven inspectable answers.</h2><p>Each artifact opens as a dated, branded document that security, legal, and procurement teams can review, print, or retain. Status and open assurance items are stated directly.</p></div></div><div class="artifacts">
53
+ <article class="artifact"><div class="artifact-top"><h3>Architecture &amp; data flow</h3><span class="status">Published</span></div><p>Plaintext boundary, encrypted archive path, hosted metadata, key custody, deployment modes, and runtime egress.</p><ul><li>Hosted, connected self-hosted, and fully isolated paths</li><li>Fields visible and not visible to Spala</li></ul><div class="actions"><a href="#architecture">View diagram ↓</a><a href="/trust/architecture-data-flow.html">Open document</a></div></article>
54
+ <article class="artifact" id="dpa"><div class="artifact-top"><h3>Data Processing Agreement</h3><span class="status draft">Public template</span></div><p>HM Software LLC’s Article 28 contract framework covering roles, instructions, confidentiality, security, subprocessors, assistance, incidents, deletion, and audit.</p><ul><li>Internally approved for customer review</li><li>Customer annexes and applicable law completed for signature</li></ul><div class="actions"><a href="/trust/dpa-sample.html">Review the DPA</a><a href="mailto:legal@spala.ai?subject=Sealkeep%20DPA%20terms">Discuss contract terms</a></div></article>
55
+ <article class="artifact" id="toms"><div class="artifact-top"><h3>Technical &amp; organisational measures</h3><span class="status draft">Control statement</span></div><p>Current product controls are separated from operational measures supplied by the selected hosted or customer-operated deployment.</p><ul><li>Encryption, identity, network, secure development, logging, continuity</li><li>Deployment-specific evidence is identified clearly</li></ul><div class="actions"><a href="/trust/toms.html">Review controls</a></div></article>
56
+ <article class="artifact" id="subprocessors"><div class="artifact-top"><h3>Subprocessor register</h3><span class="status planned">Verification open</span></div><p>The public register distinguishes Spala-selected hosted services from infrastructure selected and contracted directly by a self-hosted customer.</p><ul><li>Known service categories shown now</li><li>Legal entities, regions, and transfer safeguards still require verification</li></ul><div class="actions"><a href="/trust/subprocessors.html">Inspect register</a></div></article>
57
+ <article class="artifact" id="responsibility"><div class="artifact-top"><h3>Deployment responsibility matrix</h3><span class="status">Published</span></div><p>Who owns application delivery, infrastructure, identity, keys, backups, monitoring, patches, support access, and exit.</p><ul><li>Connected and fully isolated boundaries</li><li>No standing Spala access in the isolated mode</li></ul><div class="actions"><a href="#matrix">View matrix ↓</a><a href="/trust/deployment-responsibility.html">Open document</a></div></article>
58
+ <article class="artifact"><div class="artifact-top"><h3>Release provenance &amp; SBOM</h3><span class="status planned">Partial today</span></div><p>Package locking, checksum manifests, optional signed manifests, test evidence, and the gaps before release provenance is a complete buyer control.</p><ul><li>No claim of OS code-signing today</li><li>Public CycloneDX SBOM publication remains planned</li></ul><div class="actions"><a href="/trust/release-provenance.html">Inspect release status</a></div></article>
59
+ <article class="artifact" id="assurance"><div class="artifact-top"><h3>Threat model &amp; audit roadmap</h3><span class="status draft">Audit prep · Q3 2026</span></div><p>Adversaries, trust assumptions, detected tampering, completed internal evidence, and the preparation path to independent review.</p><ul><li>Review package and public evidence are being prepared</li><li>External cryptographic review remains the next assurance gate</li></ul><div class="actions"><a href="/trust/threat-model.html">Inspect threat model</a><a href="/trust/audit-roadmap.html">Inspect roadmap</a></div></article>
60
+ </div></div></section>
61
+
62
+ <section class="section" id="architecture"><div class="wrap"><div class="section-head"><span class="eyebrow">Architecture / published</span><div><h2>Plaintext ends at the endpoint.</h2><p>The diagram describes the fully isolated path. In the hosted path, Spala operates the control plane and may arrange storage, but the endpoint still performs encryption before upload and retains the keys needed to open an archive.</p></div></div><div class="flow"><div class="flow-path"><div class="node"><strong>Coding agent</strong><small>Claude Code or Codex session file</small></div><div class="arrow">→</div><div class="node"><strong>Local Sealkeep client</strong><small>Capture, encryption, local search, keys</small></div><div class="arrow">→</div><div class="node"><strong>Customer service</strong><small>Identity, membership, opaque metadata</small></div><div class="arrow">→</div><div class="node"><strong>Customer storage</strong><small>Encrypted archive objects and index</small></div></div><div class="boundary">Customer security boundary · fully isolated operation has no mandatory Spala runtime service</div></div><div class="data-scroll"><table class="data-table"><thead><tr><th>Data</th><th>Endpoint</th><th>Hosted Spala mode</th><th>Fully isolated mode</th></tr></thead><tbody><tr><td>Session plaintext</td><td>Visible</td><td>Not designed to receive it</td><td>Not visible to Spala</td></tr><tr><td>Recovery phrase / private keys</td><td>Held locally</td><td>Not received</td><td>Not visible to Spala</td></tr><tr><td>Ciphertext and opaque archive metadata</td><td>Produced locally</td><td>Processed for selected hosted service</td><td>Customer systems only</td></tr><tr><td>Account, device, entitlement records</td><td>Uses identifiers</td><td>Processed by hosted control plane</td><td>Customer service; separate contract contacts may remain with Spala</td></tr></tbody></table></div><div class="callout"><strong>Exact scope</strong><p>Ciphertext size, timing, identifiers, and operational metadata are not described as anonymous. Support cannot decrypt an archive or replace a lost recovery phrase. Customer-selected infrastructure does not become a Spala subprocessor merely because Sealkeep interoperates with it.</p></div></div></section>
63
+
64
+ <section class="section" id="matrix"><div class="wrap"><div class="section-head"><span class="eyebrow">Shared responsibility / published</span><div><h2>You operate the boundary. We deliver the product.</h2><p>The exact allocation is completed in the order form, but the default fully isolated split is explicit.</p></div></div><div class="data-scroll"><table class="matrix"><thead><tr><th>Control area</th><th>HM Software / Spala</th><th>Customer</th></tr></thead><tbody><tr><td>Product</td><td>Application bundle, version, documentation, integrity information</td><td>Acceptance, approved configuration, permitted use</td></tr><tr><td>Infrastructure</td><td>Document requirements and optional dependencies</td><td>Runtime, network, PostgreSQL, storage, TLS, regions</td></tr><tr><td>Identity and keys</td><td>Preserve endpoint-encryption and recipient design</td><td>Identity, administrators, secrets, recovery material, recipients</td></tr><tr><td>Operations</td><td>Security updates and agreed support</td><td>Monitoring, backups, restore, capacity, patch timing, retention</td></tr><tr><td>Support access</td><td>No standing access; use approved minimum when invited</td><td>Authorize, time-bound, observe, and revoke any access</td></tr><tr><td>Exit</td><td>Document export and deletion within Spala-controlled systems</td><td>Export/delete customer database, objects, logs, endpoints, backups</td></tr></tbody></table></div><div class="actions"><a href="/trust/deployment-responsibility.html">Open complete matrix</a></div></div></section>
65
+
66
+ <section class="section"><div class="wrap"><div class="section-head"><span class="eyebrow">Active assurance roadmap</span><div><h2>Evidence first. Independent review next.</h2><p>The Q3 2026 workstream packages implemented controls, test evidence, and review scope so an external assessor can evaluate a precise, versioned target.</p></div></div><div class="roadmap"><article><span class="status">Shipping evidence</span><h3>Implemented and exercised</h3><ul><li>Authenticated-encryption vectors and tamper suite</li><li>Archive, verify, restore, and tenant-boundary tests</li><li>12/12 live company rehearsal recorded 20 August 2026</li><li>Checksum manifest generator and dependency lockfile</li></ul></article><article><span class="status draft">Q3 2026 · in progress</span><h3>Independent-review preparation</h3><ul><li>Threat model and known limitations</li><li>Public DPA template and TOMs control statement</li><li>Architecture and responsibility boundaries</li><li>Subprocessor and release-evidence verification</li></ul></article><article><span class="status planned">Next assurance gate</span><h3>External validation</h3><ul><li>Independent cryptographic implementation review</li><li>External key-lifecycle review</li><li>Independent application penetration test</li><li>Public per-release SBOM and signed provenance</li><li>Native OS code signing</li></ul></article></div><div class="callout warning"><strong>Current assurance boundary</strong><p>The review program is active, but Sealkeep does not currently claim an independent cryptographic audit or certification. Published tests and rehearsals give reviewers inspectable evidence while external validation remains the next gate.</p></div></div></section>
67
+
68
+ <section class="section"><div class="wrap"><div class="section-head"><span class="eyebrow">Disclosure boundary</span><div><h2>Public by default. Controlled where disclosure creates risk.</h2><p>Gating ordinary procurement facts creates friction without making the product safer. The boundary below keeps useful evidence discoverable while protecting customer and operational security.</p></div></div><div class="public-boundary"><div><h3>Keep public</h3><ul><li>Architecture and data categories</li><li>Standard DPA and TOMs samples</li><li>Current Subprocessor register</li><li>Deployment responsibility matrix</li><li>Threat model, known limitations, audit roadmap</li><li>Release checksums, SBOMs, and provenance status</li></ul></div><div><h3>Keep controlled</h3><ul><li>Executed customer agreements and negotiated terms</li><li>Customer-specific diagrams, identities, regions, and configurations</li><li>Unpatched vulnerability and exploit detail</li><li>Credentials, internal infrastructure identifiers, and runbooks</li><li>Restricted penetration-test reports and incident evidence</li><li>Time-bounded support-access records</li></ul></div></div></div></section>
69
+ </main>
70
+
71
+ <footer class="footer"><div class="wrap footer-grid"><div><a class="logo" href="/">⌑ Sealkeep</a><p>Sealkeep is a product of HM Software LLC, the company behind Spala AI.</p><p>Public samples support review; the signed agreement and customer-selected deployment remain authoritative.</p><nav aria-label="Company"><a href="https://spala.ai/about/">About the company</a> &middot; <a href="https://spala.ai/terms/">Company terms</a> &middot; <a href="https://spala.ai/privacy/">Company privacy policy</a></nav></div><a class="button" href="mailto:security@spala.ai?subject=Sealkeep%20security%20review">Ask a security question →</a></div></footer>
72
+ </body>
73
+ </html>