@rubytech/create-sitedesk-code 0.1.523 → 0.1.525

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 (804) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/lib/agent-dispatch-rule/dist/index.d.ts +99 -0
  3. package/payload/platform/lib/agent-dispatch-rule/dist/index.d.ts.map +1 -0
  4. package/payload/platform/lib/agent-dispatch-rule/dist/index.js +228 -0
  5. package/payload/platform/lib/agent-dispatch-rule/dist/index.js.map +1 -0
  6. package/payload/platform/lib/agent-dispatch-rule/package.json +6 -0
  7. package/payload/platform/lib/agent-dispatch-rule/src/__tests__/rule.test.ts +384 -0
  8. package/payload/platform/lib/agent-dispatch-rule/src/index.ts +269 -0
  9. package/payload/platform/lib/agent-dispatch-rule/tsconfig.json +9 -0
  10. package/payload/platform/lib/agent-dispatch-rule/vitest.config.ts +9 -0
  11. package/payload/platform/lib/routine-templates/dist/roster.js +1 -1
  12. package/payload/platform/lib/routine-templates/src/roster.ts +1 -1
  13. package/payload/platform/package.json +2 -2
  14. package/payload/platform/plugins/admin/PLUGIN.md +1 -0
  15. package/payload/platform/plugins/admin/hooks/__tests__/mailbox-inject.test.sh +501 -0
  16. package/payload/platform/plugins/admin/hooks/mailbox-inject.sh +299 -0
  17. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +54 -21
  18. package/payload/platform/plugins/admin/skills/superpowers-sprint/SKILL.md +26 -0
  19. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +12 -0
  20. package/payload/platform/plugins/docs/references/admin-ui.md +49 -18
  21. package/payload/platform/plugins/docs/references/workflows.md +4 -2
  22. package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.js +72 -1
  23. package/payload/platform/plugins/email/mcp/dist/__tests__/email-status.test.js.map +1 -1
  24. package/payload/platform/plugins/email/mcp/dist/__tests__/mailbox-resolve.test.js +4 -1
  25. package/payload/platform/plugins/email/mcp/dist/__tests__/mailbox-resolve.test.js.map +1 -1
  26. package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts.map +1 -1
  27. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +4 -2
  28. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js.map +1 -1
  29. package/payload/platform/plugins/email/mcp/dist/tools/email-status.d.ts +0 -6
  30. package/payload/platform/plugins/email/mcp/dist/tools/email-status.d.ts.map +1 -1
  31. package/payload/platform/plugins/email/mcp/dist/tools/email-status.js +24 -2
  32. package/payload/platform/plugins/email/mcp/dist/tools/email-status.js.map +1 -1
  33. package/payload/platform/plugins/email/references/email-reference.md +1 -1
  34. package/payload/platform/plugins/memory/PLUGIN.md +10 -0
  35. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.js +5 -1
  36. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.js.map +1 -1
  37. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.d.ts +2 -0
  38. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.d.ts.map +1 -0
  39. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.js +141 -0
  40. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/temporal-type-preserve.test.js.map +1 -0
  41. package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.d.ts +1 -1
  42. package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.d.ts.map +1 -1
  43. package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.js +6 -0
  44. package/payload/platform/plugins/memory/mcp/dist/lib/log-ingest.js.map +1 -1
  45. package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.d.ts +45 -0
  46. package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.d.ts.map +1 -0
  47. package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.js +122 -0
  48. package/payload/platform/plugins/memory/mcp/dist/lib/temporal-type-preserve.js.map +1 -0
  49. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-by-name.test.js +26 -0
  50. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-by-name.test.js.map +1 -1
  51. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.d.ts +2 -0
  52. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.d.ts.map +1 -0
  53. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.js +201 -0
  54. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-type-preserve.test.js.map +1 -0
  55. package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.d.ts.map +1 -1
  56. package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js +89 -33
  57. package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js.map +1 -1
  58. package/payload/platform/plugins/memory/mcp/vitest.config.ts +2 -0
  59. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.d.ts +2 -0
  60. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.d.ts.map +1 -0
  61. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.js +322 -0
  62. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mail-search-delegated-ids.test.js.map +1 -0
  63. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mailbox-registry.test.js +21 -1
  64. package/payload/platform/plugins/outlook/mcp/dist/__tests__/mailbox-registry.test.js.map +1 -1
  65. package/payload/platform/plugins/outlook/mcp/dist/auth/mailbox-registry.d.ts +13 -0
  66. package/payload/platform/plugins/outlook/mcp/dist/auth/mailbox-registry.d.ts.map +1 -1
  67. package/payload/platform/plugins/outlook/mcp/dist/auth/mailbox-registry.js +16 -0
  68. package/payload/platform/plugins/outlook/mcp/dist/auth/mailbox-registry.js.map +1 -1
  69. package/payload/platform/plugins/outlook/mcp/dist/index.js +5 -5
  70. package/payload/platform/plugins/outlook/mcp/dist/index.js.map +1 -1
  71. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.d.ts.map +1 -1
  72. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js +6 -0
  73. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js.map +1 -1
  74. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.d.ts +7 -0
  75. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.d.ts.map +1 -1
  76. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.js +122 -8
  77. package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.js.map +1 -1
  78. package/payload/platform/plugins/scheduling/PLUGIN.md +26 -1
  79. package/payload/platform/plugins/scheduling/mcp/dist/index.js +6 -4
  80. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
  81. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/agent-dispatch.test.js +8 -36
  82. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/agent-dispatch.test.js.map +1 -1
  83. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.d.ts +2 -0
  84. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.d.ts.map +1 -0
  85. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.js +148 -0
  86. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/meeting-retype.test.js.map +1 -0
  87. package/payload/platform/plugins/scheduling/mcp/dist/lib/agent-dispatch.d.ts +10 -65
  88. package/payload/platform/plugins/scheduling/mcp/dist/lib/agent-dispatch.d.ts.map +1 -1
  89. package/payload/platform/plugins/scheduling/mcp/dist/lib/agent-dispatch.js +29 -122
  90. package/payload/platform/plugins/scheduling/mcp/dist/lib/agent-dispatch.js.map +1 -1
  91. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.d.ts +83 -6
  92. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.d.ts.map +1 -1
  93. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.js +90 -5
  94. package/payload/platform/plugins/scheduling/mcp/dist/lib/booking-reconcile.js.map +1 -1
  95. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js +111 -2
  96. package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/routine-roster-audit.test.js.map +1 -1
  97. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts +38 -0
  98. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts.map +1 -1
  99. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js +116 -0
  100. package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js.map +1 -1
  101. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +13 -1
  102. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  103. package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js +81 -8
  104. package/payload/platform/plugins/scheduling/mcp/dist/scripts/reconcile-bookings.js.map +1 -1
  105. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-agent.test.js +39 -0
  106. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-event-agent.test.js.map +1 -1
  107. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.d.ts +2 -0
  108. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.d.ts.map +1 -0
  109. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.js +305 -0
  110. package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-update-status.test.js.map +1 -0
  111. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts.map +1 -1
  112. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +9 -1
  113. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
  114. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts +46 -1
  115. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts.map +1 -1
  116. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js +172 -4
  117. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js.map +1 -1
  118. package/payload/platform/plugins/scheduling/skills/routine-control/SKILL.md +48 -0
  119. package/payload/platform/plugins/sweep/skills/email-graph-sweep/SKILL.md +21 -7
  120. package/payload/platform/scripts/__tests__/check-canonical-tool-names.test.sh +162 -0
  121. package/payload/platform/scripts/__tests__/check-no-task-id-leaks.test.sh +53 -0
  122. package/payload/platform/scripts/__tests__/mailbox-inject-registered.test.sh +80 -0
  123. package/payload/platform/scripts/__tests__/task-id-citation.test.sh +72 -0
  124. package/payload/platform/scripts/check-canonical-tool-names.mjs +36 -4
  125. package/payload/platform/scripts/check-no-task-id-leaks.mjs +80 -62
  126. package/payload/platform/scripts/lib/__tests__/account-settings-mailbox-inject.test.sh +166 -0
  127. package/payload/platform/scripts/lib/account-settings-mailbox-inject.sh +91 -0
  128. package/payload/platform/scripts/lib/canonical-tool-names.mjs +130 -26
  129. package/payload/platform/scripts/lib/provision-account-dir.sh +1 -0
  130. package/payload/platform/scripts/lib/task-id-citation.mjs +67 -0
  131. package/payload/platform/scripts/setup-account.sh +15 -0
  132. package/payload/server/public/activity.html +5 -5
  133. package/payload/server/public/agents.html +4 -4
  134. package/payload/server/public/assets/{AdminLoginScreens-uknqh2Pm.js → AdminLoginScreens-BgDjueVe.js} +1 -1
  135. package/payload/server/public/assets/AdminLoginScreens-BgDjueVe.js.br +0 -0
  136. package/payload/server/public/assets/AdminLoginScreens-BgDjueVe.js.gz +0 -0
  137. package/payload/server/public/assets/{AdminShell-GqtMImyQ.js → AdminShell-YctTrR-D.js} +1 -1
  138. package/payload/server/public/assets/AdminShell-YctTrR-D.js.br +0 -0
  139. package/payload/server/public/assets/AdminShell-YctTrR-D.js.gz +0 -0
  140. package/payload/server/public/assets/{activity-B4KfMJqO.js → activity-DGQt5ys_.js} +1 -1
  141. package/payload/server/public/assets/activity-DGQt5ys_.js.br +0 -0
  142. package/payload/server/public/assets/activity-DGQt5ys_.js.gz +0 -0
  143. package/payload/server/public/assets/admin-DnUxbB3P.js +1 -0
  144. package/payload/server/public/assets/admin-DnUxbB3P.js.br +0 -0
  145. package/payload/server/public/assets/admin-DnUxbB3P.js.gz +0 -0
  146. package/payload/server/public/assets/agents-Bc2LZjwC.js +1 -0
  147. package/payload/server/public/assets/agents-Bc2LZjwC.js.br +0 -0
  148. package/payload/server/public/assets/agents-Bc2LZjwC.js.gz +0 -0
  149. package/payload/server/public/assets/{arc-DaI5MLTq.js → arc-DaudCnXg.js} +1 -1
  150. package/payload/server/public/assets/arc-DaudCnXg.js.br +0 -0
  151. package/payload/server/public/assets/arc-DaudCnXg.js.gz +0 -0
  152. package/payload/server/public/assets/architecture-YZFGNWBL-DPFsm5jD.js +1 -0
  153. package/payload/server/public/assets/architecture-YZFGNWBL-DPFsm5jD.js.br +0 -0
  154. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-CBGVUEN9.js → architectureDiagram-Q4EWVU46-BEEC3s7i.js} +1 -1
  155. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BEEC3s7i.js.br +0 -0
  156. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BEEC3s7i.js.gz +0 -0
  157. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DS6dS4GZ.js → blockDiagram-DXYQGD6D-BIWyfb18.js} +1 -1
  158. package/payload/server/public/assets/blockDiagram-DXYQGD6D-BIWyfb18.js.br +0 -0
  159. package/payload/server/public/assets/blockDiagram-DXYQGD6D-BIWyfb18.js.gz +0 -0
  160. package/payload/server/public/assets/{browser-B3hSzI3O.js → browser-BtF7SzvG.js} +1 -1
  161. package/payload/server/public/assets/browser-BtF7SzvG.js.br +0 -0
  162. package/payload/server/public/assets/browser-BtF7SzvG.js.gz +0 -0
  163. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-hBSBUZPt.js → c4Diagram-AHTNJAMY--h6oE2cv.js} +1 -1
  164. package/payload/server/public/assets/c4Diagram-AHTNJAMY--h6oE2cv.js.br +0 -0
  165. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-hBSBUZPt.js.gz → c4Diagram-AHTNJAMY--h6oE2cv.js.gz} +0 -0
  166. package/payload/server/public/assets/{calendar-BggxXxhS.js → calendar-D25EhXbD.js} +1 -1
  167. package/payload/server/public/assets/calendar-D25EhXbD.js.br +0 -0
  168. package/payload/server/public/assets/calendar-D25EhXbD.js.gz +0 -0
  169. package/payload/server/public/assets/channel-TwxCDSpK.js +1 -0
  170. package/payload/server/public/assets/channel-TwxCDSpK.js.br +0 -0
  171. package/payload/server/public/assets/chat-z4jsHFXg.js +1 -0
  172. package/payload/server/public/assets/chat-z4jsHFXg.js.br +0 -0
  173. package/payload/server/public/assets/chat-z4jsHFXg.js.gz +0 -0
  174. package/payload/server/public/assets/chevron-left-BD09SN6R.js +1 -0
  175. package/payload/server/public/assets/chevron-right-ChmWeo7T.js +1 -0
  176. package/payload/server/public/assets/chevron-right-ChmWeo7T.js.br +0 -0
  177. package/payload/server/public/assets/{chunk-2KRD3SAO-B6koUoB7.js → chunk-2KRD3SAO-BwEVlnxo.js} +1 -1
  178. package/payload/server/public/assets/chunk-2KRD3SAO-BwEVlnxo.js.br +0 -0
  179. package/payload/server/public/assets/chunk-2KRD3SAO-BwEVlnxo.js.gz +0 -0
  180. package/payload/server/public/assets/{chunk-336JU56O-BF6BRh8u.js → chunk-336JU56O-DQddTATH.js} +2 -2
  181. package/payload/server/public/assets/chunk-336JU56O-DQddTATH.js.br +0 -0
  182. package/payload/server/public/assets/chunk-336JU56O-DQddTATH.js.gz +0 -0
  183. package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js +1 -0
  184. package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js.br +0 -0
  185. package/payload/server/public/assets/chunk-426QAEUC-BDC8wptW.js.gz +0 -0
  186. package/payload/server/public/assets/{chunk-4BX2VUAB-7sO95xR2.js → chunk-4BX2VUAB-C5p3xTC6.js} +1 -1
  187. package/payload/server/public/assets/chunk-4BX2VUAB-C5p3xTC6.js.br +0 -0
  188. package/payload/server/public/assets/chunk-4BX2VUAB-C5p3xTC6.js.gz +0 -0
  189. package/payload/server/public/assets/{chunk-4TB4RGXK-GCTndJYx.js → chunk-4TB4RGXK-gClfNc1w.js} +1 -1
  190. package/payload/server/public/assets/chunk-4TB4RGXK-gClfNc1w.js.br +0 -0
  191. package/payload/server/public/assets/chunk-4TB4RGXK-gClfNc1w.js.gz +0 -0
  192. package/payload/server/public/assets/{chunk-55IACEB6-ggIJf_TC.js → chunk-55IACEB6-DDU_m1ra.js} +1 -1
  193. package/payload/server/public/assets/chunk-55IACEB6-DDU_m1ra.js.br +0 -0
  194. package/payload/server/public/assets/chunk-55IACEB6-DDU_m1ra.js.gz +0 -0
  195. package/payload/server/public/assets/{chunk-5FUZZQ4R-DeGmkimt.js → chunk-5FUZZQ4R-CZ2jQWNR.js} +1 -1
  196. package/payload/server/public/assets/chunk-5FUZZQ4R-CZ2jQWNR.js.br +0 -0
  197. package/payload/server/public/assets/chunk-5FUZZQ4R-CZ2jQWNR.js.gz +0 -0
  198. package/payload/server/public/assets/{chunk-5PVQY5BW-aFIQKk_U.js → chunk-5PVQY5BW-kcZ5kfTg.js} +1 -1
  199. package/payload/server/public/assets/chunk-5PVQY5BW-kcZ5kfTg.js.br +0 -0
  200. package/payload/server/public/assets/chunk-5PVQY5BW-kcZ5kfTg.js.gz +0 -0
  201. package/payload/server/public/assets/{chunk-67CJDMHE-LS8rUbii.js → chunk-67CJDMHE-9W0Qv0jm.js} +1 -1
  202. package/payload/server/public/assets/chunk-67CJDMHE-9W0Qv0jm.js.br +0 -0
  203. package/payload/server/public/assets/chunk-67CJDMHE-9W0Qv0jm.js.gz +0 -0
  204. package/payload/server/public/assets/{chunk-7N4EOEYR-JKOVngS0.js → chunk-7N4EOEYR-B3gqydR3.js} +1 -1
  205. package/payload/server/public/assets/chunk-7N4EOEYR-B3gqydR3.js.br +0 -0
  206. package/payload/server/public/assets/chunk-7N4EOEYR-B3gqydR3.js.gz +0 -0
  207. package/payload/server/public/assets/{chunk-AA7GKIK3-CoXnTVK6.js → chunk-AA7GKIK3-DW8a-2NK.js} +1 -1
  208. package/payload/server/public/assets/chunk-AA7GKIK3-DW8a-2NK.js.br +4 -0
  209. package/payload/server/public/assets/chunk-AA7GKIK3-DW8a-2NK.js.gz +0 -0
  210. package/payload/server/public/assets/{chunk-BSJP7CBP-CcsqObFg.js → chunk-BSJP7CBP-DqXIO_5R.js} +1 -1
  211. package/payload/server/public/assets/chunk-BSJP7CBP-DqXIO_5R.js.br +0 -0
  212. package/payload/server/public/assets/chunk-BSJP7CBP-DqXIO_5R.js.gz +0 -0
  213. package/payload/server/public/assets/{chunk-CIAEETIT-CpsybR7q.js → chunk-CIAEETIT-BMJfgj2u.js} +1 -1
  214. package/payload/server/public/assets/chunk-CIAEETIT-BMJfgj2u.js.br +0 -0
  215. package/payload/server/public/assets/chunk-CIAEETIT-BMJfgj2u.js.gz +0 -0
  216. package/payload/server/public/assets/{chunk-EDXVE4YY-BZ2I9PSq.js → chunk-EDXVE4YY-BxdLPk0b.js} +1 -1
  217. package/payload/server/public/assets/chunk-EDXVE4YY-BxdLPk0b.js.br +0 -0
  218. package/payload/server/public/assets/chunk-EDXVE4YY-BxdLPk0b.js.gz +0 -0
  219. package/payload/server/public/assets/{chunk-ENJZ2VHE-DbTwt6OZ.js → chunk-ENJZ2VHE-Cfe2DCjQ.js} +1 -1
  220. package/payload/server/public/assets/chunk-ENJZ2VHE-Cfe2DCjQ.js.br +0 -0
  221. package/payload/server/public/assets/chunk-ENJZ2VHE-Cfe2DCjQ.js.gz +0 -0
  222. package/payload/server/public/assets/{chunk-FMBD7UC4-D27VnSCa.js → chunk-FMBD7UC4-CdPjwbtf.js} +1 -1
  223. package/payload/server/public/assets/chunk-FMBD7UC4-CdPjwbtf.js.br +0 -0
  224. package/payload/server/public/assets/chunk-FMBD7UC4-CdPjwbtf.js.gz +0 -0
  225. package/payload/server/public/assets/{chunk-FOC6F5B3-C0tU2UFl.js → chunk-FOC6F5B3-Dl6l1KAh.js} +1 -1
  226. package/payload/server/public/assets/chunk-FOC6F5B3-Dl6l1KAh.js.br +0 -0
  227. package/payload/server/public/assets/chunk-FOC6F5B3-Dl6l1KAh.js.gz +0 -0
  228. package/payload/server/public/assets/{chunk-ICPOFSXX-UPPu2OIq.js → chunk-ICPOFSXX-PnsGrqtx.js} +2 -2
  229. package/payload/server/public/assets/chunk-ICPOFSXX-PnsGrqtx.js.br +0 -0
  230. package/payload/server/public/assets/chunk-ICPOFSXX-PnsGrqtx.js.gz +0 -0
  231. package/payload/server/public/assets/{chunk-K5T4RW27-DIKxqyYw.js → chunk-K5T4RW27--g29_wjW.js} +1 -1
  232. package/payload/server/public/assets/chunk-K5T4RW27--g29_wjW.js.br +0 -0
  233. package/payload/server/public/assets/chunk-K5T4RW27--g29_wjW.js.gz +0 -0
  234. package/payload/server/public/assets/{chunk-KGLVRYIC-CiL4YVLo.js → chunk-KGLVRYIC-CI77ENeO.js} +1 -1
  235. package/payload/server/public/assets/chunk-KGLVRYIC-CI77ENeO.js.br +3 -0
  236. package/payload/server/public/assets/chunk-KGLVRYIC-CI77ENeO.js.gz +0 -0
  237. package/payload/server/public/assets/{chunk-LIHQZDEY-ejKezVlD.js → chunk-LIHQZDEY-CE-XByg6.js} +1 -1
  238. package/payload/server/public/assets/chunk-LIHQZDEY-CE-XByg6.js.br +0 -0
  239. package/payload/server/public/assets/chunk-LIHQZDEY-CE-XByg6.js.gz +0 -0
  240. package/payload/server/public/assets/{chunk-ORNJ4GCN-Cc0vqc-D.js → chunk-ORNJ4GCN-DkjJQQSm.js} +1 -1
  241. package/payload/server/public/assets/chunk-ORNJ4GCN-DkjJQQSm.js.br +0 -0
  242. package/payload/server/public/assets/chunk-ORNJ4GCN-DkjJQQSm.js.gz +0 -0
  243. package/payload/server/public/assets/{chunk-OYMX7WX6-Drxn1qG0.js → chunk-OYMX7WX6-DhogFeD7.js} +1 -1
  244. package/payload/server/public/assets/chunk-OYMX7WX6-DhogFeD7.js.br +0 -0
  245. package/payload/server/public/assets/chunk-OYMX7WX6-DhogFeD7.js.gz +0 -0
  246. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js +1 -0
  247. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js.br +0 -0
  248. package/payload/server/public/assets/chunk-QZHKN3VN-DnqqL1de.js.gz +0 -0
  249. package/payload/server/public/assets/{chunk-U2HBQHQK-DnbQIkRP.js → chunk-U2HBQHQK-CeaRXuiO.js} +1 -1
  250. package/payload/server/public/assets/chunk-U2HBQHQK-CeaRXuiO.js.br +0 -0
  251. package/payload/server/public/assets/chunk-U2HBQHQK-CeaRXuiO.js.gz +0 -0
  252. package/payload/server/public/assets/{chunk-X2U36JSP-CauTSVWg.js → chunk-X2U36JSP-BqxXeOqf.js} +1 -1
  253. package/payload/server/public/assets/chunk-X2U36JSP-BqxXeOqf.js.br +0 -0
  254. package/payload/server/public/assets/chunk-X2U36JSP-BqxXeOqf.js.gz +0 -0
  255. package/payload/server/public/assets/{chunk-XPW4576I-DZqqB9Zi.js → chunk-XPW4576I-DtqJwn2x.js} +1 -1
  256. package/payload/server/public/assets/chunk-XPW4576I-DtqJwn2x.js.br +0 -0
  257. package/payload/server/public/assets/chunk-XPW4576I-DtqJwn2x.js.gz +0 -0
  258. package/payload/server/public/assets/{chunk-YZCP3GAM-BGHo4Li-.js → chunk-YZCP3GAM-COBlEwQw.js} +1 -1
  259. package/payload/server/public/assets/chunk-YZCP3GAM-COBlEwQw.js.br +0 -0
  260. package/payload/server/public/assets/chunk-YZCP3GAM-COBlEwQw.js.gz +0 -0
  261. package/payload/server/public/assets/{chunk-ZZ45TVLE-DWGJKPd7.js → chunk-ZZ45TVLE-CcL088y6.js} +1 -1
  262. package/payload/server/public/assets/chunk-ZZ45TVLE-CcL088y6.js.br +0 -0
  263. package/payload/server/public/assets/chunk-ZZ45TVLE-CcL088y6.js.gz +0 -0
  264. package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js +1 -0
  265. package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js.br +0 -0
  266. package/payload/server/public/assets/classDiagram-6PBFFD2Q-Bc3P4dpc.js.gz +0 -0
  267. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js +1 -0
  268. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js.br +0 -0
  269. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DgEF_rR_.js.gz +0 -0
  270. package/payload/server/public/assets/clock-Yqf7Ke7I.js +1 -0
  271. package/payload/server/public/assets/clock-Yqf7Ke7I.js.br +0 -0
  272. package/payload/server/public/assets/clock-Yqf7Ke7I.js.gz +0 -0
  273. package/payload/server/public/assets/clone-B3vq32j7.js +1 -0
  274. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-D-95BzXL.js → cose-bilkent-S5V4N54A-kEHVkDNn.js} +1 -1
  275. package/payload/server/public/assets/cose-bilkent-S5V4N54A-kEHVkDNn.js.br +0 -0
  276. package/payload/server/public/assets/cose-bilkent-S5V4N54A-kEHVkDNn.js.gz +0 -0
  277. package/payload/server/public/assets/{dagre-BZYNBHvT.js → dagre-D2wUw1zC.js} +1 -1
  278. package/payload/server/public/assets/dagre-D2wUw1zC.js.br +0 -0
  279. package/payload/server/public/assets/dagre-D2wUw1zC.js.gz +0 -0
  280. package/payload/server/public/assets/{dagre-KV5264BT-DyU4HQLQ.js → dagre-KV5264BT-BWfTDwEs.js} +1 -1
  281. package/payload/server/public/assets/dagre-KV5264BT-BWfTDwEs.js.br +0 -0
  282. package/payload/server/public/assets/dagre-KV5264BT-BWfTDwEs.js.gz +0 -0
  283. package/payload/server/public/assets/data-RmnKj5nC.js +1 -0
  284. package/payload/server/public/assets/data-RmnKj5nC.js.br +2 -0
  285. package/payload/server/public/assets/data-RmnKj5nC.js.gz +0 -0
  286. package/payload/server/public/assets/{diagram-5BDNPKRD-CCttJ9XA.js → diagram-5BDNPKRD-Tl9dS8w0.js} +1 -1
  287. package/payload/server/public/assets/diagram-5BDNPKRD-Tl9dS8w0.js.br +0 -0
  288. package/payload/server/public/assets/diagram-5BDNPKRD-Tl9dS8w0.js.gz +0 -0
  289. package/payload/server/public/assets/{diagram-G4DWMVQ6-DvkpgSLO.js → diagram-G4DWMVQ6-CeSe6TMu.js} +1 -1
  290. package/payload/server/public/assets/diagram-G4DWMVQ6-CeSe6TMu.js.br +0 -0
  291. package/payload/server/public/assets/diagram-G4DWMVQ6-CeSe6TMu.js.gz +0 -0
  292. package/payload/server/public/assets/{diagram-MMDJMWI5-DHmW5Y9k.js → diagram-MMDJMWI5-DYBNJCmk.js} +1 -1
  293. package/payload/server/public/assets/diagram-MMDJMWI5-DYBNJCmk.js.br +0 -0
  294. package/payload/server/public/assets/diagram-MMDJMWI5-DYBNJCmk.js.gz +0 -0
  295. package/payload/server/public/assets/{diagram-TYMM5635-C6T4hwzO.js → diagram-TYMM5635-BmpUGltx.js} +1 -1
  296. package/payload/server/public/assets/diagram-TYMM5635-BmpUGltx.js.br +0 -0
  297. package/payload/server/public/assets/diagram-TYMM5635-BmpUGltx.js.gz +0 -0
  298. package/payload/server/public/assets/{erDiagram-SMLLAGMA-5v_o7s3T.js → erDiagram-SMLLAGMA-DuwuNGqx.js} +1 -1
  299. package/payload/server/public/assets/erDiagram-SMLLAGMA-DuwuNGqx.js.br +0 -0
  300. package/payload/server/public/assets/erDiagram-SMLLAGMA-DuwuNGqx.js.gz +0 -0
  301. package/payload/server/public/assets/file-download-CiGklOfA.js +1 -0
  302. package/payload/server/public/assets/file-download-CiGklOfA.js.br +0 -0
  303. package/payload/server/public/assets/file-download-CiGklOfA.js.gz +0 -0
  304. package/payload/server/public/assets/{file-text-BKs9eyiw.js → file-text-XjJPULAZ.js} +1 -1
  305. package/payload/server/public/assets/file-text-XjJPULAZ.js.br +0 -0
  306. package/payload/server/public/assets/file-text-XjJPULAZ.js.gz +0 -0
  307. package/payload/server/public/assets/{flatten-BtIc9jX7.js → flatten-Bu-b1uTY.js} +1 -1
  308. package/payload/server/public/assets/flatten-Bu-b1uTY.js.br +0 -0
  309. package/payload/server/public/assets/flatten-Bu-b1uTY.js.gz +0 -0
  310. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-3UhCDsjt.js → flowDiagram-DWJPFMVM-Bpp8P6Ba.js} +1 -1
  311. package/payload/server/public/assets/flowDiagram-DWJPFMVM-Bpp8P6Ba.js.br +0 -0
  312. package/payload/server/public/assets/flowDiagram-DWJPFMVM-Bpp8P6Ba.js.gz +0 -0
  313. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-F2zgHIIQ.js → ganttDiagram-T4ZO3ILL-CE6ppjB4.js} +1 -1
  314. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CE6ppjB4.js.br +0 -0
  315. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-CE6ppjB4.js.gz +0 -0
  316. package/payload/server/public/assets/gitGraph-7Q5UKJZL-B0OUwOUx.js +1 -0
  317. package/payload/server/public/assets/gitGraph-7Q5UKJZL-B0OUwOUx.js.br +0 -0
  318. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-oQc1N3dT.js → gitGraphDiagram-UUTBAWPF-BdK1GjPr.js} +1 -1
  319. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-BdK1GjPr.js.br +0 -0
  320. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-BdK1GjPr.js.gz +0 -0
  321. package/payload/server/public/assets/{graph-DTi71NaZ.js → graph-BjHJ0z_6.js} +1 -1
  322. package/payload/server/public/assets/graph-BjHJ0z_6.js.br +0 -0
  323. package/payload/server/public/assets/graph-BjHJ0z_6.js.gz +0 -0
  324. package/payload/server/public/assets/{graph-labels-BT3S6e9H.js → graph-labels-D-0u37KA.js} +1 -1
  325. package/payload/server/public/assets/graph-labels-D-0u37KA.js.br +0 -0
  326. package/payload/server/public/assets/graph-labels-D-0u37KA.js.gz +0 -0
  327. package/payload/server/public/assets/{graphlib-DY4-AT2Q.js → graphlib-CHEXylyU.js} +1 -1
  328. package/payload/server/public/assets/graphlib-CHEXylyU.js.br +0 -0
  329. package/payload/server/public/assets/graphlib-CHEXylyU.js.gz +0 -0
  330. package/payload/server/public/assets/info-OMHHGYJF-C_8TwPDe.js +1 -0
  331. package/payload/server/public/assets/info-OMHHGYJF-C_8TwPDe.js.br +0 -0
  332. package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js +2 -0
  333. package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js.br +0 -0
  334. package/payload/server/public/assets/infoDiagram-42DDH7IO-msfwyvbV.js.gz +0 -0
  335. package/payload/server/public/assets/{isEmpty-Bu4fZ8Kf.js → isEmpty-CjH0UASp.js} +1 -1
  336. package/payload/server/public/assets/isEmpty-CjH0UASp.js.br +0 -0
  337. package/payload/server/public/assets/isEmpty-CjH0UASp.js.gz +0 -0
  338. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-wJhSOkuw.js → ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js} +1 -1
  339. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js.br +0 -0
  340. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-CgkVZ4-3.js.gz +0 -0
  341. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-DgadC6Pz.js → journeyDiagram-VCZTEJTY-ByUPv8q6.js} +1 -1
  342. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-ByUPv8q6.js.br +0 -0
  343. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-ByUPv8q6.js.gz +0 -0
  344. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-Bs4nQqXI.js → kanban-definition-6JOO6SKY-CFinqhpu.js} +1 -1
  345. package/payload/server/public/assets/kanban-definition-6JOO6SKY-CFinqhpu.js.br +0 -0
  346. package/payload/server/public/assets/kanban-definition-6JOO6SKY-CFinqhpu.js.gz +0 -0
  347. package/payload/server/public/assets/{line-Bnmxy1hO.js → line-Y4ns5Ghi.js} +1 -1
  348. package/payload/server/public/assets/line-Y4ns5Ghi.js.br +0 -0
  349. package/payload/server/public/assets/line-Y4ns5Ghi.js.gz +0 -0
  350. package/payload/server/public/assets/{linear-RvwZxFzh.js → linear-l39GooQ5.js} +1 -1
  351. package/payload/server/public/assets/linear-l39GooQ5.js.br +0 -0
  352. package/payload/server/public/assets/linear-l39GooQ5.js.gz +0 -0
  353. package/payload/server/public/assets/{maximize-2-zC94tsxY.js → maximize-2-BJ9S-nfS.js} +1 -1
  354. package/payload/server/public/assets/maximize-2-BJ9S-nfS.js.br +0 -0
  355. package/payload/server/public/assets/maximize-2-BJ9S-nfS.js.gz +0 -0
  356. package/payload/server/public/assets/{mermaid-parser.core-DeNV8RtA.js → mermaid-parser.core-5w0T1dRj.js} +2 -2
  357. package/payload/server/public/assets/mermaid-parser.core-5w0T1dRj.js.br +0 -0
  358. package/payload/server/public/assets/mermaid-parser.core-5w0T1dRj.js.gz +0 -0
  359. package/payload/server/public/assets/{mermaid.core-BU9IiSCP.js → mermaid.core-DBADY5VW.js} +3 -3
  360. package/payload/server/public/assets/mermaid.core-DBADY5VW.js.br +0 -0
  361. package/payload/server/public/assets/mermaid.core-DBADY5VW.js.gz +0 -0
  362. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-D1PMUxxm.js → mindmap-definition-QFDTVHPH-rHz37loq.js} +1 -1
  363. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-rHz37loq.js.br +0 -0
  364. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-rHz37loq.js.gz +0 -0
  365. package/payload/server/public/assets/{operator-BtWNEMh-.js → operator-Cay4rOOK.js} +1 -1
  366. package/payload/server/public/assets/operator-Cay4rOOK.js.br +0 -0
  367. package/payload/server/public/assets/operator-Cay4rOOK.js.gz +0 -0
  368. package/payload/server/public/assets/{ordinal-C2TEWKNu.js → ordinal-D6D6WcTC.js} +1 -1
  369. package/payload/server/public/assets/ordinal-D6D6WcTC.js.br +0 -0
  370. package/payload/server/public/assets/ordinal-D6D6WcTC.js.gz +0 -0
  371. package/payload/server/public/assets/packet-4T2RLAQJ-CCQdbIqO.js +1 -0
  372. package/payload/server/public/assets/packet-4T2RLAQJ-CCQdbIqO.js.br +0 -0
  373. package/payload/server/public/assets/{page-Ccl0FazM.js → page-Cci_j_y7.js} +3 -3
  374. package/payload/server/public/assets/page-Cci_j_y7.js.br +0 -0
  375. package/payload/server/public/assets/page-Cci_j_y7.js.gz +0 -0
  376. package/payload/server/public/assets/page-shuh4ES9.js +1 -0
  377. package/payload/server/public/assets/page-shuh4ES9.js.br +0 -0
  378. package/payload/server/public/assets/page-shuh4ES9.js.gz +0 -0
  379. package/payload/server/public/assets/{pdf-render-C257cidb.js → pdf-render-BSgBp8Fr.js} +1 -1
  380. package/payload/server/public/assets/pdf-render-BSgBp8Fr.js.br +0 -0
  381. package/payload/server/public/assets/pdf-render-BSgBp8Fr.js.gz +0 -0
  382. package/payload/server/public/assets/pie-ZZUOXDRM-Bdw3Iqs7.js +1 -0
  383. package/payload/server/public/assets/pie-ZZUOXDRM-Bdw3Iqs7.js.br +0 -0
  384. package/payload/server/public/assets/{pieDiagram-DEJITSTG-BzdNzoKA.js → pieDiagram-DEJITSTG-as0e_DSH.js} +1 -1
  385. package/payload/server/public/assets/pieDiagram-DEJITSTG-as0e_DSH.js.br +0 -0
  386. package/payload/server/public/assets/pieDiagram-DEJITSTG-as0e_DSH.js.gz +0 -0
  387. package/payload/server/public/assets/{public-BpC6cn9S.js → public-BbJcQGsO.js} +1 -1
  388. package/payload/server/public/assets/public-BbJcQGsO.js.br +0 -0
  389. package/payload/server/public/assets/public-BbJcQGsO.js.gz +0 -0
  390. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-oFr1MJRO.js → quadrantDiagram-34T5L4WZ-B4t8HO9J.js} +1 -1
  391. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-B4t8HO9J.js.br +0 -0
  392. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-B4t8HO9J.js.gz +0 -0
  393. package/payload/server/public/assets/radar-PYXPWWZC-D3FUdA3r.js +1 -0
  394. package/payload/server/public/assets/radar-PYXPWWZC-D3FUdA3r.js.br +0 -0
  395. package/payload/server/public/assets/{reduce-BGpN5lgn.js → reduce-BtXXK8Ma.js} +1 -1
  396. package/payload/server/public/assets/reduce-BtXXK8Ma.js.br +0 -0
  397. package/payload/server/public/assets/reduce-BtXXK8Ma.js.gz +0 -0
  398. package/payload/server/public/assets/{requirementDiagram-MS252O5E-C9QBQxDh.js → requirementDiagram-MS252O5E-yxh30zHX.js} +1 -1
  399. package/payload/server/public/assets/requirementDiagram-MS252O5E-yxh30zHX.js.br +0 -0
  400. package/payload/server/public/assets/requirementDiagram-MS252O5E-yxh30zHX.js.gz +0 -0
  401. package/payload/server/public/assets/{rotate-ccw-BNcqbHkZ.js → rotate-ccw-jeSVwUAv.js} +1 -1
  402. package/payload/server/public/assets/rotate-ccw-jeSVwUAv.js.br +0 -0
  403. package/payload/server/public/assets/rotate-ccw-jeSVwUAv.js.gz +0 -0
  404. package/payload/server/public/assets/routines-D3M1Wh3a.js +1 -0
  405. package/payload/server/public/assets/routines-D3M1Wh3a.js.br +0 -0
  406. package/payload/server/public/assets/routines-D3M1Wh3a.js.gz +0 -0
  407. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-c_y3bvVv.js → sankeyDiagram-XADWPNL6-j-k9Wfty.js} +1 -1
  408. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-j-k9Wfty.js.br +0 -0
  409. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-j-k9Wfty.js.gz +0 -0
  410. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-YwlCBPHE.js → sequenceDiagram-FGHM5R23-DGLgcLhC.js} +1 -1
  411. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DGLgcLhC.js.br +0 -0
  412. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DGLgcLhC.js.gz +0 -0
  413. package/payload/server/public/assets/{skills-COLAw_jt.js → skills-Bhej2ub1.js} +1 -1
  414. package/payload/server/public/assets/skills-Bhej2ub1.js.br +0 -0
  415. package/payload/server/public/assets/skills-Bhej2ub1.js.gz +0 -0
  416. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BFE3e-FM.js → stateDiagram-FHFEXIEX-C9p1OUMI.js} +1 -1
  417. package/payload/server/public/assets/stateDiagram-FHFEXIEX-C9p1OUMI.js.br +0 -0
  418. package/payload/server/public/assets/stateDiagram-FHFEXIEX-C9p1OUMI.js.gz +0 -0
  419. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js +1 -0
  420. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js.br +0 -0
  421. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bf808Apk.js.gz +0 -0
  422. package/payload/server/public/assets/{tasks-CZDQI4nB.js → tasks-qY-dtOI2.js} +1 -1
  423. package/payload/server/public/assets/tasks-qY-dtOI2.js.br +0 -0
  424. package/payload/server/public/assets/tasks-qY-dtOI2.js.gz +0 -0
  425. package/payload/server/public/assets/{time-entry-format-laTFzawg.js → time-entry-format-r5UY9rjG.js} +1 -1
  426. package/payload/server/public/assets/time-entry-format-r5UY9rjG.js.br +0 -0
  427. package/payload/server/public/assets/time-entry-format-r5UY9rjG.js.gz +0 -0
  428. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-azqhmRwZ.js → timeline-definition-GMOUNBTQ-B1g7pgkH.js} +1 -1
  429. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B1g7pgkH.js.br +0 -0
  430. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B1g7pgkH.js.gz +0 -0
  431. package/payload/server/public/assets/treeView-SZITEDCU-DetKw0D0.js +1 -0
  432. package/payload/server/public/assets/treeView-SZITEDCU-DetKw0D0.js.br +0 -0
  433. package/payload/server/public/assets/treemap-W4RFUUIX-zQkIANxW.js +1 -0
  434. package/payload/server/public/assets/treemap-W4RFUUIX-zQkIANxW.js.br +0 -0
  435. package/payload/server/public/assets/{triangle-alert-DrwqhEog.js → triangle-alert--PCKaewD.js} +1 -1
  436. package/payload/server/public/assets/triangle-alert--PCKaewD.js.br +2 -0
  437. package/payload/server/public/assets/triangle-alert--PCKaewD.js.gz +0 -0
  438. package/payload/server/public/assets/{useCopyFeedback-Cxme5GK6.js → useCopyFeedback-Dg5lNgqH.js} +1 -1
  439. package/payload/server/public/assets/useCopyFeedback-Dg5lNgqH.js.br +0 -0
  440. package/payload/server/public/assets/useCopyFeedback-Dg5lNgqH.js.gz +0 -0
  441. package/payload/server/public/assets/useSubAccountSwitcher-BYfe9vj8.css +1 -0
  442. package/payload/server/public/assets/useSubAccountSwitcher-BYfe9vj8.css.br +0 -0
  443. package/payload/server/public/assets/useSubAccountSwitcher-BYfe9vj8.css.gz +0 -0
  444. package/payload/server/public/assets/{useVoiceRecorder-DUBpVa2T.js → useVoiceRecorder-BY6ZsGMH.js} +2 -2
  445. package/payload/server/public/assets/useVoiceRecorder-BY6ZsGMH.js.br +0 -0
  446. package/payload/server/public/assets/useVoiceRecorder-BY6ZsGMH.js.gz +0 -0
  447. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-Da2RfFs8.js → vennDiagram-DHZGUBPP-D2ZjFfh4.js} +1 -1
  448. package/payload/server/public/assets/vennDiagram-DHZGUBPP-D2ZjFfh4.js.br +0 -0
  449. package/payload/server/public/assets/vennDiagram-DHZGUBPP-D2ZjFfh4.js.gz +0 -0
  450. package/payload/server/public/assets/wardley-RL74JXVD-DkQV3DvB.js +1 -0
  451. package/payload/server/public/assets/wardley-RL74JXVD-DkQV3DvB.js.br +0 -0
  452. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-HdrdBYES.js → wardleyDiagram-NUSXRM2D-BFAhfkD8.js} +1 -1
  453. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-BFAhfkD8.js.br +0 -0
  454. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-BFAhfkD8.js.gz +0 -0
  455. package/payload/server/public/assets/{wrench-DWuxPnzF.js → wrench-Bw1FMolk.js} +1 -1
  456. package/payload/server/public/assets/wrench-Bw1FMolk.js.br +0 -0
  457. package/payload/server/public/assets/wrench-Bw1FMolk.js.gz +0 -0
  458. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-DMk6rTcQ.js → xychartDiagram-5P7HB3ND-Dt94h2RQ.js} +1 -1
  459. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-Dt94h2RQ.js.br +0 -0
  460. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-Dt94h2RQ.js.gz +0 -0
  461. package/payload/server/public/brand-defaults.css +1 -0
  462. package/payload/server/public/browser.html +4 -4
  463. package/payload/server/public/calendar.html +7 -7
  464. package/payload/server/public/chat.html +14 -14
  465. package/payload/server/public/data.html +13 -12
  466. package/payload/server/public/graph.html +9 -9
  467. package/payload/server/public/index.html +16 -15
  468. package/payload/server/public/operator.html +15 -15
  469. package/payload/server/public/public.html +14 -14
  470. package/payload/server/public/routines.html +7 -6
  471. package/payload/server/public/skills.html +5 -5
  472. package/payload/server/public/tasks.html +6 -6
  473. package/payload/server/server.js +744 -425
  474. package/payload/platform/.docs/search-surface-contract.md +0 -58
  475. package/payload/platform/docs/superpowers/plans/2026-06-02-task-610-follower-202-retry.md +0 -372
  476. package/payload/platform/docs/superpowers/plans/2026-06-04-public-agent-knowledge-delivery.md +0 -230
  477. package/payload/platform/docs/superpowers/plans/2026-06-23-account-filesystem-schema.md +0 -544
  478. package/payload/platform/docs/superpowers/plans/2026-07-11-task-1557-operator-on-behalf-preference-attribution.md +0 -542
  479. package/payload/platform/docs/superpowers/plans/2026-07-13-account-schema-ontology-projection.md +0 -547
  480. package/payload/platform/docs/superpowers/plans/2026-07-14-graph-top-level-labels-ontology-single-source.md +0 -458
  481. package/payload/platform/docs/superpowers/plans/2026-07-17-task-1736-retire-mcp-stderr-tee.md +0 -397
  482. package/payload/platform/docs/superpowers/plans/2026-07-18-graph-native-ledger.md +0 -807
  483. package/payload/platform/docs/superpowers/plans/2026-07-18-ledger-write-path-fix.md +0 -109
  484. package/payload/platform/docs/superpowers/plans/2026-07-20-storage-pages-create.md +0 -82
  485. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1704-data-portal-standing-audit.md +0 -673
  486. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1789-reseat-channel-row-fork.md +0 -1244
  487. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1818-loop-gate-app-routes.md +0 -462
  488. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1819-top-level-label-allowlist.md +0 -321
  489. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1829-platform-ui-typecheck.md +0 -830
  490. package/payload/platform/docs/superpowers/plans/2026-07-20-task-1831-data-portal-class-derived-allowlist.md +0 -2177
  491. package/payload/platform/docs/superpowers/plans/2026-07-21-graph-caption-resolver.md +0 -124
  492. package/payload/platform/docs/superpowers/plans/2026-07-21-task-1877-bash-schema-enforcement.md +0 -107
  493. package/payload/platform/docs/superpowers/plans/2026-07-21-task-1887-reconcile-allowed-top-level.md +0 -205
  494. package/payload/platform/docs/superpowers/plans/2026-07-22-task-1899-reconcile-report-only.md +0 -748
  495. package/payload/platform/docs/superpowers/plans/2026-07-22-task-1910-two-way-portal-exchange.md +0 -1716
  496. package/payload/platform/docs/superpowers/plans/2026-07-23-task-1930-adherence-enforcement.md +0 -422
  497. package/payload/platform/docs/superpowers/plans/2026-07-24-task-1942-subaccount-switcher-brand-head.md +0 -327
  498. package/payload/platform/docs/superpowers/plans/2026-07-25-task-1974-uploads-intake-inbox.md +0 -235
  499. package/payload/platform/docs/superpowers/plans/2026-07-25-task-1976-intra-folder-hygiene.md +0 -215
  500. package/payload/platform/docs/superpowers/plans/2026-07-26-task-1902-account-owned-entry-declarations.md +0 -555
  501. package/payload/platform/docs/superpowers/plans/2026-07-26-task-1926-portal-push-concurrency-guard.md +0 -482
  502. package/payload/platform/docs/superpowers/plans/2026-07-26-task-2023-sidebar-sessions-async-reads.md +0 -394
  503. package/payload/platform/docs/superpowers/plans/2026-07-27-task-2016-disabled-agent-routing.md +0 -624
  504. package/payload/platform/docs/superpowers/plans/2026-07-27-task-2028-declared-file-write-deny.md +0 -303
  505. package/payload/platform/docs/superpowers/plans/2026-07-27-task-2052-account-machinery-write-fence.md +0 -250
  506. package/payload/platform/docs/superpowers/plans/2026-07-28-task-2097-email-signature-set.md +0 -65
  507. package/payload/platform/docs/superpowers/specs/2026-06-02-task-610-follower-202-retry-design.md +0 -116
  508. package/payload/platform/docs/superpowers/specs/2026-06-23-account-filesystem-schema-design.md +0 -170
  509. package/payload/platform/docs/superpowers/specs/2026-07-11-task-1557-operator-on-behalf-preference-attribution-design.md +0 -90
  510. package/payload/platform/docs/superpowers/specs/2026-07-13-account-schema-ontology-projection-design.md +0 -178
  511. package/payload/platform/docs/superpowers/specs/2026-07-14-graph-top-level-labels-ontology-single-source-design.md +0 -119
  512. package/payload/platform/docs/superpowers/specs/2026-07-17-task-1736-retire-mcp-stderr-tee-design.md +0 -128
  513. package/payload/platform/docs/superpowers/specs/2026-07-18-graph-native-ledger-design.md +0 -241
  514. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1704-data-portal-standing-audit-design.md +0 -177
  515. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1789-reseat-channel-row-fork-design.md +0 -201
  516. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1818-loop-gate-app-routes-design.md +0 -217
  517. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1819-top-level-label-allowlist-design.md +0 -80
  518. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1820-cpu-triage-admin-tools-design.md +0 -97
  519. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1829-platform-ui-typecheck-design.md +0 -163
  520. package/payload/platform/docs/superpowers/specs/2026-07-20-task-1831-data-portal-class-derived-allowlist-design.md +0 -163
  521. package/payload/platform/docs/superpowers/specs/2026-07-22-task-1899-reconcile-report-only-design.md +0 -121
  522. package/payload/platform/docs/superpowers/specs/2026-07-22-task-1910-two-way-portal-exchange-design.md +0 -103
  523. package/payload/platform/docs/superpowers/specs/2026-07-23-task-1930-adherence-enforcement-design.md +0 -81
  524. package/payload/platform/docs/superpowers/specs/2026-07-24-task-1942-subaccount-switcher-brand-head-design.md +0 -35
  525. package/payload/platform/docs/superpowers/specs/2026-07-26-task-1902-account-owned-entry-declarations-design.md +0 -232
  526. package/payload/platform/docs/superpowers/specs/2026-07-26-task-1926-portal-push-concurrency-guard-design.md +0 -200
  527. package/payload/platform/docs/superpowers/specs/2026-07-26-task-2014-ui-suite-nondeterminism-design.md +0 -169
  528. package/payload/platform/docs/superpowers/specs/2026-07-27-task-2016-disabled-agent-routing-design.md +0 -139
  529. package/payload/platform/docs/superpowers/specs/2026-07-27-task-2028-declared-file-write-deny-design.md +0 -127
  530. package/payload/platform/docs/superpowers/specs/2026-07-27-task-2052-account-machinery-write-fence-design.md +0 -150
  531. package/payload/platform/docs/superpowers/specs/2026-07-28-task-2097-email-signature-set-design.md +0 -155
  532. package/payload/server/public/assets/AdminLoginScreens-uknqh2Pm.js.br +0 -0
  533. package/payload/server/public/assets/AdminLoginScreens-uknqh2Pm.js.gz +0 -0
  534. package/payload/server/public/assets/AdminShell-GqtMImyQ.js.br +0 -0
  535. package/payload/server/public/assets/AdminShell-GqtMImyQ.js.gz +0 -0
  536. package/payload/server/public/assets/activity-B4KfMJqO.js.br +0 -0
  537. package/payload/server/public/assets/activity-B4KfMJqO.js.gz +0 -0
  538. package/payload/server/public/assets/admin-DxCZeVw0.js +0 -1
  539. package/payload/server/public/assets/admin-DxCZeVw0.js.br +0 -0
  540. package/payload/server/public/assets/admin-DxCZeVw0.js.gz +0 -0
  541. package/payload/server/public/assets/agents-BtwBuO4G.js +0 -1
  542. package/payload/server/public/assets/agents-BtwBuO4G.js.br +0 -0
  543. package/payload/server/public/assets/agents-BtwBuO4G.js.gz +0 -0
  544. package/payload/server/public/assets/arc-DaI5MLTq.js.br +0 -0
  545. package/payload/server/public/assets/arc-DaI5MLTq.js.gz +0 -0
  546. package/payload/server/public/assets/architecture-YZFGNWBL-DWZIX5aV.js +0 -1
  547. package/payload/server/public/assets/architecture-YZFGNWBL-DWZIX5aV.js.br +0 -0
  548. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-CBGVUEN9.js.br +0 -0
  549. package/payload/server/public/assets/architectureDiagram-Q4EWVU46-CBGVUEN9.js.gz +0 -0
  550. package/payload/server/public/assets/blockDiagram-DXYQGD6D-DS6dS4GZ.js.br +0 -0
  551. package/payload/server/public/assets/blockDiagram-DXYQGD6D-DS6dS4GZ.js.gz +0 -0
  552. package/payload/server/public/assets/browser-B3hSzI3O.js.br +0 -0
  553. package/payload/server/public/assets/browser-B3hSzI3O.js.gz +0 -0
  554. package/payload/server/public/assets/c4Diagram-AHTNJAMY-hBSBUZPt.js.br +0 -0
  555. package/payload/server/public/assets/calendar-BggxXxhS.js.br +0 -0
  556. package/payload/server/public/assets/calendar-BggxXxhS.js.gz +0 -0
  557. package/payload/server/public/assets/channel-BEokjAeE.js +0 -1
  558. package/payload/server/public/assets/channel-BEokjAeE.js.br +0 -0
  559. package/payload/server/public/assets/chat-flivHt0t.js +0 -1
  560. package/payload/server/public/assets/chat-flivHt0t.js.br +0 -0
  561. package/payload/server/public/assets/chat-flivHt0t.js.gz +0 -0
  562. package/payload/server/public/assets/chevron-left-nVRThX7f.js +0 -1
  563. package/payload/server/public/assets/chevron-right-CLqfrkRA.js +0 -1
  564. package/payload/server/public/assets/chevron-right-CLqfrkRA.js.br +0 -0
  565. package/payload/server/public/assets/chunk-2KRD3SAO-B6koUoB7.js.br +0 -0
  566. package/payload/server/public/assets/chunk-2KRD3SAO-B6koUoB7.js.gz +0 -0
  567. package/payload/server/public/assets/chunk-336JU56O-BF6BRh8u.js.br +0 -0
  568. package/payload/server/public/assets/chunk-336JU56O-BF6BRh8u.js.gz +0 -0
  569. package/payload/server/public/assets/chunk-426QAEUC-pbQ4PWBU.js +0 -1
  570. package/payload/server/public/assets/chunk-426QAEUC-pbQ4PWBU.js.br +0 -0
  571. package/payload/server/public/assets/chunk-426QAEUC-pbQ4PWBU.js.gz +0 -0
  572. package/payload/server/public/assets/chunk-4BX2VUAB-7sO95xR2.js.br +0 -0
  573. package/payload/server/public/assets/chunk-4BX2VUAB-7sO95xR2.js.gz +0 -0
  574. package/payload/server/public/assets/chunk-4TB4RGXK-GCTndJYx.js.br +0 -0
  575. package/payload/server/public/assets/chunk-4TB4RGXK-GCTndJYx.js.gz +0 -0
  576. package/payload/server/public/assets/chunk-55IACEB6-ggIJf_TC.js.br +0 -0
  577. package/payload/server/public/assets/chunk-55IACEB6-ggIJf_TC.js.gz +0 -0
  578. package/payload/server/public/assets/chunk-5FUZZQ4R-DeGmkimt.js.br +0 -0
  579. package/payload/server/public/assets/chunk-5FUZZQ4R-DeGmkimt.js.gz +0 -0
  580. package/payload/server/public/assets/chunk-5PVQY5BW-aFIQKk_U.js.br +0 -0
  581. package/payload/server/public/assets/chunk-5PVQY5BW-aFIQKk_U.js.gz +0 -0
  582. package/payload/server/public/assets/chunk-67CJDMHE-LS8rUbii.js.br +0 -2
  583. package/payload/server/public/assets/chunk-67CJDMHE-LS8rUbii.js.gz +0 -0
  584. package/payload/server/public/assets/chunk-7N4EOEYR-JKOVngS0.js.br +0 -2
  585. package/payload/server/public/assets/chunk-7N4EOEYR-JKOVngS0.js.gz +0 -0
  586. package/payload/server/public/assets/chunk-AA7GKIK3-CoXnTVK6.js.br +0 -0
  587. package/payload/server/public/assets/chunk-AA7GKIK3-CoXnTVK6.js.gz +0 -0
  588. package/payload/server/public/assets/chunk-BSJP7CBP-CcsqObFg.js.br +0 -0
  589. package/payload/server/public/assets/chunk-BSJP7CBP-CcsqObFg.js.gz +0 -0
  590. package/payload/server/public/assets/chunk-CIAEETIT-CpsybR7q.js.br +0 -0
  591. package/payload/server/public/assets/chunk-CIAEETIT-CpsybR7q.js.gz +0 -0
  592. package/payload/server/public/assets/chunk-EDXVE4YY-BZ2I9PSq.js.br +0 -0
  593. package/payload/server/public/assets/chunk-EDXVE4YY-BZ2I9PSq.js.gz +0 -0
  594. package/payload/server/public/assets/chunk-ENJZ2VHE-DbTwt6OZ.js.br +0 -0
  595. package/payload/server/public/assets/chunk-ENJZ2VHE-DbTwt6OZ.js.gz +0 -0
  596. package/payload/server/public/assets/chunk-FMBD7UC4-D27VnSCa.js.br +0 -0
  597. package/payload/server/public/assets/chunk-FMBD7UC4-D27VnSCa.js.gz +0 -0
  598. package/payload/server/public/assets/chunk-FOC6F5B3-C0tU2UFl.js.br +0 -0
  599. package/payload/server/public/assets/chunk-FOC6F5B3-C0tU2UFl.js.gz +0 -0
  600. package/payload/server/public/assets/chunk-ICPOFSXX-UPPu2OIq.js.br +0 -0
  601. package/payload/server/public/assets/chunk-ICPOFSXX-UPPu2OIq.js.gz +0 -0
  602. package/payload/server/public/assets/chunk-K5T4RW27-DIKxqyYw.js.br +0 -0
  603. package/payload/server/public/assets/chunk-K5T4RW27-DIKxqyYw.js.gz +0 -0
  604. package/payload/server/public/assets/chunk-KGLVRYIC-CiL4YVLo.js.br +0 -0
  605. package/payload/server/public/assets/chunk-KGLVRYIC-CiL4YVLo.js.gz +0 -0
  606. package/payload/server/public/assets/chunk-LIHQZDEY-ejKezVlD.js.br +0 -0
  607. package/payload/server/public/assets/chunk-LIHQZDEY-ejKezVlD.js.gz +0 -0
  608. package/payload/server/public/assets/chunk-ORNJ4GCN-Cc0vqc-D.js.br +0 -0
  609. package/payload/server/public/assets/chunk-ORNJ4GCN-Cc0vqc-D.js.gz +0 -0
  610. package/payload/server/public/assets/chunk-OYMX7WX6-Drxn1qG0.js.br +0 -0
  611. package/payload/server/public/assets/chunk-OYMX7WX6-Drxn1qG0.js.gz +0 -0
  612. package/payload/server/public/assets/chunk-QZHKN3VN-Dhlh7Pkk.js +0 -1
  613. package/payload/server/public/assets/chunk-QZHKN3VN-Dhlh7Pkk.js.br +0 -0
  614. package/payload/server/public/assets/chunk-QZHKN3VN-Dhlh7Pkk.js.gz +0 -0
  615. package/payload/server/public/assets/chunk-U2HBQHQK-DnbQIkRP.js.br +0 -0
  616. package/payload/server/public/assets/chunk-U2HBQHQK-DnbQIkRP.js.gz +0 -0
  617. package/payload/server/public/assets/chunk-X2U36JSP-CauTSVWg.js.br +0 -0
  618. package/payload/server/public/assets/chunk-X2U36JSP-CauTSVWg.js.gz +0 -0
  619. package/payload/server/public/assets/chunk-XPW4576I-DZqqB9Zi.js.br +0 -0
  620. package/payload/server/public/assets/chunk-XPW4576I-DZqqB9Zi.js.gz +0 -0
  621. package/payload/server/public/assets/chunk-YZCP3GAM-BGHo4Li-.js.br +0 -0
  622. package/payload/server/public/assets/chunk-YZCP3GAM-BGHo4Li-.js.gz +0 -0
  623. package/payload/server/public/assets/chunk-ZZ45TVLE-DWGJKPd7.js.br +0 -0
  624. package/payload/server/public/assets/chunk-ZZ45TVLE-DWGJKPd7.js.gz +0 -0
  625. package/payload/server/public/assets/classDiagram-6PBFFD2Q-D2z_ZV1x.js +0 -1
  626. package/payload/server/public/assets/classDiagram-6PBFFD2Q-D2z_ZV1x.js.br +0 -0
  627. package/payload/server/public/assets/classDiagram-6PBFFD2Q-D2z_ZV1x.js.gz +0 -0
  628. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BJwJoNEK.js +0 -1
  629. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BJwJoNEK.js.br +0 -0
  630. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BJwJoNEK.js.gz +0 -0
  631. package/payload/server/public/assets/clock-Dj3SRZKo.js +0 -1
  632. package/payload/server/public/assets/clock-Dj3SRZKo.js.br +0 -0
  633. package/payload/server/public/assets/clock-Dj3SRZKo.js.gz +0 -0
  634. package/payload/server/public/assets/clone-Bn7XXVhr.js +0 -1
  635. package/payload/server/public/assets/clone-Bn7XXVhr.js.br +0 -0
  636. package/payload/server/public/assets/cose-bilkent-S5V4N54A-D-95BzXL.js.br +0 -0
  637. package/payload/server/public/assets/cose-bilkent-S5V4N54A-D-95BzXL.js.gz +0 -0
  638. package/payload/server/public/assets/dagre-BZYNBHvT.js.br +0 -0
  639. package/payload/server/public/assets/dagre-BZYNBHvT.js.gz +0 -0
  640. package/payload/server/public/assets/dagre-KV5264BT-DyU4HQLQ.js.br +0 -0
  641. package/payload/server/public/assets/dagre-KV5264BT-DyU4HQLQ.js.gz +0 -0
  642. package/payload/server/public/assets/data-Ckjkne54.js +0 -1
  643. package/payload/server/public/assets/data-Ckjkne54.js.br +0 -3
  644. package/payload/server/public/assets/data-Ckjkne54.js.gz +0 -0
  645. package/payload/server/public/assets/diagram-5BDNPKRD-CCttJ9XA.js.br +0 -0
  646. package/payload/server/public/assets/diagram-5BDNPKRD-CCttJ9XA.js.gz +0 -0
  647. package/payload/server/public/assets/diagram-G4DWMVQ6-DvkpgSLO.js.br +0 -0
  648. package/payload/server/public/assets/diagram-G4DWMVQ6-DvkpgSLO.js.gz +0 -0
  649. package/payload/server/public/assets/diagram-MMDJMWI5-DHmW5Y9k.js.br +0 -0
  650. package/payload/server/public/assets/diagram-MMDJMWI5-DHmW5Y9k.js.gz +0 -0
  651. package/payload/server/public/assets/diagram-TYMM5635-C6T4hwzO.js.br +0 -0
  652. package/payload/server/public/assets/diagram-TYMM5635-C6T4hwzO.js.gz +0 -0
  653. package/payload/server/public/assets/erDiagram-SMLLAGMA-5v_o7s3T.js.br +0 -0
  654. package/payload/server/public/assets/erDiagram-SMLLAGMA-5v_o7s3T.js.gz +0 -0
  655. package/payload/server/public/assets/file-text-BKs9eyiw.js.br +0 -0
  656. package/payload/server/public/assets/file-text-BKs9eyiw.js.gz +0 -0
  657. package/payload/server/public/assets/flatten-BtIc9jX7.js.br +0 -0
  658. package/payload/server/public/assets/flatten-BtIc9jX7.js.gz +0 -0
  659. package/payload/server/public/assets/flowDiagram-DWJPFMVM-3UhCDsjt.js.br +0 -0
  660. package/payload/server/public/assets/flowDiagram-DWJPFMVM-3UhCDsjt.js.gz +0 -0
  661. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-F2zgHIIQ.js.br +0 -0
  662. package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-F2zgHIIQ.js.gz +0 -0
  663. package/payload/server/public/assets/gitGraph-7Q5UKJZL-C-FvNTHZ.js +0 -1
  664. package/payload/server/public/assets/gitGraph-7Q5UKJZL-C-FvNTHZ.js.br +0 -0
  665. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-oQc1N3dT.js.br +0 -0
  666. package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-oQc1N3dT.js.gz +0 -0
  667. package/payload/server/public/assets/graph-DTi71NaZ.js.br +0 -0
  668. package/payload/server/public/assets/graph-DTi71NaZ.js.gz +0 -0
  669. package/payload/server/public/assets/graph-labels-BT3S6e9H.js.br +0 -0
  670. package/payload/server/public/assets/graph-labels-BT3S6e9H.js.gz +0 -0
  671. package/payload/server/public/assets/graphlib-DY4-AT2Q.js.br +0 -0
  672. package/payload/server/public/assets/graphlib-DY4-AT2Q.js.gz +0 -0
  673. package/payload/server/public/assets/info-OMHHGYJF-BjLPgHAC.js +0 -1
  674. package/payload/server/public/assets/info-OMHHGYJF-BjLPgHAC.js.br +0 -0
  675. package/payload/server/public/assets/infoDiagram-42DDH7IO-CXNKLTui.js +0 -2
  676. package/payload/server/public/assets/infoDiagram-42DDH7IO-CXNKLTui.js.br +0 -0
  677. package/payload/server/public/assets/infoDiagram-42DDH7IO-CXNKLTui.js.gz +0 -0
  678. package/payload/server/public/assets/isEmpty-Bu4fZ8Kf.js.br +0 -0
  679. package/payload/server/public/assets/isEmpty-Bu4fZ8Kf.js.gz +0 -0
  680. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-wJhSOkuw.js.br +0 -0
  681. package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-wJhSOkuw.js.gz +0 -0
  682. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-DgadC6Pz.js.br +0 -0
  683. package/payload/server/public/assets/journeyDiagram-VCZTEJTY-DgadC6Pz.js.gz +0 -0
  684. package/payload/server/public/assets/kanban-definition-6JOO6SKY-Bs4nQqXI.js.br +0 -0
  685. package/payload/server/public/assets/kanban-definition-6JOO6SKY-Bs4nQqXI.js.gz +0 -0
  686. package/payload/server/public/assets/line-Bnmxy1hO.js.br +0 -0
  687. package/payload/server/public/assets/line-Bnmxy1hO.js.gz +0 -0
  688. package/payload/server/public/assets/linear-RvwZxFzh.js.br +0 -0
  689. package/payload/server/public/assets/linear-RvwZxFzh.js.gz +0 -0
  690. package/payload/server/public/assets/maximize-2-zC94tsxY.js.br +0 -0
  691. package/payload/server/public/assets/maximize-2-zC94tsxY.js.gz +0 -0
  692. package/payload/server/public/assets/mermaid-parser.core-DeNV8RtA.js.br +0 -0
  693. package/payload/server/public/assets/mermaid-parser.core-DeNV8RtA.js.gz +0 -0
  694. package/payload/server/public/assets/mermaid.core-BU9IiSCP.js.br +0 -0
  695. package/payload/server/public/assets/mermaid.core-BU9IiSCP.js.gz +0 -0
  696. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-D1PMUxxm.js.br +0 -0
  697. package/payload/server/public/assets/mindmap-definition-QFDTVHPH-D1PMUxxm.js.gz +0 -0
  698. package/payload/server/public/assets/operator-BtWNEMh-.js.br +0 -0
  699. package/payload/server/public/assets/operator-BtWNEMh-.js.gz +0 -0
  700. package/payload/server/public/assets/ordinal-C2TEWKNu.js.br +0 -0
  701. package/payload/server/public/assets/ordinal-C2TEWKNu.js.gz +0 -0
  702. package/payload/server/public/assets/packet-4T2RLAQJ-BBAZASfb.js +0 -1
  703. package/payload/server/public/assets/packet-4T2RLAQJ-BBAZASfb.js.br +0 -0
  704. package/payload/server/public/assets/page-BFm91p0e.js +0 -1
  705. package/payload/server/public/assets/page-BFm91p0e.js.br +0 -0
  706. package/payload/server/public/assets/page-BFm91p0e.js.gz +0 -0
  707. package/payload/server/public/assets/page-Ccl0FazM.js.br +0 -0
  708. package/payload/server/public/assets/page-Ccl0FazM.js.gz +0 -0
  709. package/payload/server/public/assets/pdf-render-C257cidb.js.br +0 -0
  710. package/payload/server/public/assets/pdf-render-C257cidb.js.gz +0 -0
  711. package/payload/server/public/assets/pie-ZZUOXDRM-CCJUnMeG.js +0 -1
  712. package/payload/server/public/assets/pie-ZZUOXDRM-CCJUnMeG.js.br +0 -0
  713. package/payload/server/public/assets/pieDiagram-DEJITSTG-BzdNzoKA.js.br +0 -0
  714. package/payload/server/public/assets/pieDiagram-DEJITSTG-BzdNzoKA.js.gz +0 -0
  715. package/payload/server/public/assets/public-BpC6cn9S.js.br +0 -0
  716. package/payload/server/public/assets/public-BpC6cn9S.js.gz +0 -0
  717. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-oFr1MJRO.js.br +0 -0
  718. package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-oFr1MJRO.js.gz +0 -0
  719. package/payload/server/public/assets/radar-PYXPWWZC-BsRU8Aep.js +0 -1
  720. package/payload/server/public/assets/radar-PYXPWWZC-BsRU8Aep.js.br +0 -0
  721. package/payload/server/public/assets/reduce-BGpN5lgn.js.br +0 -0
  722. package/payload/server/public/assets/reduce-BGpN5lgn.js.gz +0 -0
  723. package/payload/server/public/assets/requirementDiagram-MS252O5E-C9QBQxDh.js.br +0 -0
  724. package/payload/server/public/assets/requirementDiagram-MS252O5E-C9QBQxDh.js.gz +0 -0
  725. package/payload/server/public/assets/rotate-ccw-BNcqbHkZ.js.br +0 -0
  726. package/payload/server/public/assets/rotate-ccw-BNcqbHkZ.js.gz +0 -0
  727. package/payload/server/public/assets/routines-D5iia-XG.js +0 -1
  728. package/payload/server/public/assets/routines-D5iia-XG.js.br +0 -0
  729. package/payload/server/public/assets/routines-D5iia-XG.js.gz +0 -0
  730. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-c_y3bvVv.js.br +0 -0
  731. package/payload/server/public/assets/sankeyDiagram-XADWPNL6-c_y3bvVv.js.gz +0 -0
  732. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-YwlCBPHE.js.br +0 -0
  733. package/payload/server/public/assets/sequenceDiagram-FGHM5R23-YwlCBPHE.js.gz +0 -0
  734. package/payload/server/public/assets/skills-COLAw_jt.js.br +0 -0
  735. package/payload/server/public/assets/skills-COLAw_jt.js.gz +0 -0
  736. package/payload/server/public/assets/stateDiagram-FHFEXIEX-BFE3e-FM.js.br +0 -0
  737. package/payload/server/public/assets/stateDiagram-FHFEXIEX-BFE3e-FM.js.gz +0 -0
  738. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CpjB4ykI.js +0 -1
  739. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CpjB4ykI.js.br +0 -4
  740. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CpjB4ykI.js.gz +0 -0
  741. package/payload/server/public/assets/tasks-CZDQI4nB.js.br +0 -0
  742. package/payload/server/public/assets/tasks-CZDQI4nB.js.gz +0 -0
  743. package/payload/server/public/assets/time-entry-format-laTFzawg.js.br +0 -0
  744. package/payload/server/public/assets/time-entry-format-laTFzawg.js.gz +0 -0
  745. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-azqhmRwZ.js.br +0 -0
  746. package/payload/server/public/assets/timeline-definition-GMOUNBTQ-azqhmRwZ.js.gz +0 -0
  747. package/payload/server/public/assets/treeView-SZITEDCU-BDzhKA6v.js +0 -1
  748. package/payload/server/public/assets/treeView-SZITEDCU-BDzhKA6v.js.br +0 -0
  749. package/payload/server/public/assets/treemap-W4RFUUIX-epHpdeWa.js +0 -1
  750. package/payload/server/public/assets/treemap-W4RFUUIX-epHpdeWa.js.br +0 -0
  751. package/payload/server/public/assets/triangle-alert-DrwqhEog.js.br +0 -0
  752. package/payload/server/public/assets/triangle-alert-DrwqhEog.js.gz +0 -0
  753. package/payload/server/public/assets/useCopyFeedback-Cxme5GK6.js.br +0 -0
  754. package/payload/server/public/assets/useCopyFeedback-Cxme5GK6.js.gz +0 -0
  755. package/payload/server/public/assets/useSubAccountSwitcher-B-K8y5a4.css +0 -1
  756. package/payload/server/public/assets/useSubAccountSwitcher-B-K8y5a4.css.br +0 -0
  757. package/payload/server/public/assets/useSubAccountSwitcher-B-K8y5a4.css.gz +0 -0
  758. package/payload/server/public/assets/useVoiceRecorder-DUBpVa2T.js.br +0 -0
  759. package/payload/server/public/assets/useVoiceRecorder-DUBpVa2T.js.gz +0 -0
  760. package/payload/server/public/assets/vennDiagram-DHZGUBPP-Da2RfFs8.js.br +0 -0
  761. package/payload/server/public/assets/vennDiagram-DHZGUBPP-Da2RfFs8.js.gz +0 -0
  762. package/payload/server/public/assets/wardley-RL74JXVD-DNSZCrxV.js +0 -1
  763. package/payload/server/public/assets/wardley-RL74JXVD-DNSZCrxV.js.br +0 -0
  764. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-HdrdBYES.js.br +0 -0
  765. package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-HdrdBYES.js.gz +0 -0
  766. package/payload/server/public/assets/wrench-DWuxPnzF.js.br +0 -0
  767. package/payload/server/public/assets/wrench-DWuxPnzF.js.gz +0 -0
  768. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DMk6rTcQ.js.br +0 -0
  769. package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DMk6rTcQ.js.gz +0 -0
  770. /package/payload/server/public/assets/{_baseFor-Be3EKK3K.js → _baseFor-B12He5Rp.js} +0 -0
  771. /package/payload/server/public/assets/{_baseFor-Be3EKK3K.js.br → _baseFor-B12He5Rp.js.br} +0 -0
  772. /package/payload/server/public/assets/{_baseFor-Be3EKK3K.js.gz → _baseFor-B12He5Rp.js.gz} +0 -0
  773. /package/payload/server/public/assets/{array-X0JlPOfd.js → array-DO1uCttT.js} +0 -0
  774. /package/payload/server/public/assets/{array-X0JlPOfd.js.br → array-DO1uCttT.js.br} +0 -0
  775. /package/payload/server/public/assets/{cytoscape.esm-CI2IWMLB.js → cytoscape.esm-DFn2foqy.js} +0 -0
  776. /package/payload/server/public/assets/{cytoscape.esm-CI2IWMLB.js.br → cytoscape.esm-DFn2foqy.js.br} +0 -0
  777. /package/payload/server/public/assets/{cytoscape.esm-CI2IWMLB.js.gz → cytoscape.esm-DFn2foqy.js.gz} +0 -0
  778. /package/payload/server/public/assets/{defaultLocale-B6RGN4id.js → defaultLocale-ieI3yFoA.js} +0 -0
  779. /package/payload/server/public/assets/{defaultLocale-B6RGN4id.js.br → defaultLocale-ieI3yFoA.js.br} +0 -0
  780. /package/payload/server/public/assets/{defaultLocale-B6RGN4id.js.gz → defaultLocale-ieI3yFoA.js.gz} +0 -0
  781. /package/payload/server/public/assets/{dist-QvbmK1IP.js → dist-DlU7AEeD.js} +0 -0
  782. /package/payload/server/public/assets/{dist-QvbmK1IP.js.br → dist-DlU7AEeD.js.br} +0 -0
  783. /package/payload/server/public/assets/{dist-QvbmK1IP.js.gz → dist-DlU7AEeD.js.gz} +0 -0
  784. /package/payload/server/public/assets/{init-BmUWJJHz.js → init-BCRlEgNP.js} +0 -0
  785. /package/payload/server/public/assets/{init-BmUWJJHz.js.br → init-BCRlEgNP.js.br} +0 -0
  786. /package/payload/server/public/assets/{init-BmUWJJHz.js.gz → init-BCRlEgNP.js.gz} +0 -0
  787. /package/payload/server/public/assets/{katex-BjZuzSQn.js → katex-gkTaZgi6.js} +0 -0
  788. /package/payload/server/public/assets/{katex-BjZuzSQn.js.br → katex-gkTaZgi6.js.br} +0 -0
  789. /package/payload/server/public/assets/{katex-BjZuzSQn.js.gz → katex-gkTaZgi6.js.gz} +0 -0
  790. /package/payload/server/public/assets/{path-CoPyR7c2.js → path-DTmzQFjQ.js} +0 -0
  791. /package/payload/server/public/assets/{path-CoPyR7c2.js.br → path-DTmzQFjQ.js.br} +0 -0
  792. /package/payload/server/public/assets/{path-CoPyR7c2.js.gz → path-DTmzQFjQ.js.gz} +0 -0
  793. /package/payload/server/public/assets/{preload-helper-BQrMkyGX.js → preload-helper-eAV8hweq.js} +0 -0
  794. /package/payload/server/public/assets/{preload-helper-BQrMkyGX.js.br → preload-helper-eAV8hweq.js.br} +0 -0
  795. /package/payload/server/public/assets/{preload-helper-BQrMkyGX.js.gz → preload-helper-eAV8hweq.js.gz} +0 -0
  796. /package/payload/server/public/assets/{rough.esm-jSt7UMyi.js → rough.esm-BFJ-MgcB.js} +0 -0
  797. /package/payload/server/public/assets/{rough.esm-jSt7UMyi.js.br → rough.esm-BFJ-MgcB.js.br} +0 -0
  798. /package/payload/server/public/assets/{rough.esm-jSt7UMyi.js.gz → rough.esm-BFJ-MgcB.js.gz} +0 -0
  799. /package/payload/server/public/assets/{src-C2WwTWSY.js → src-9CNk4JU0.js} +0 -0
  800. /package/payload/server/public/assets/{src-C2WwTWSY.js.br → src-9CNk4JU0.js.br} +0 -0
  801. /package/payload/server/public/assets/{src-C2WwTWSY.js.gz → src-9CNk4JU0.js.gz} +0 -0
  802. /package/payload/server/public/assets/{useSubAccountSwitcher-C_1E11Dv.js → useSubAccountSwitcher-CnpeWIYq.js} +0 -0
  803. /package/payload/server/public/assets/{useSubAccountSwitcher-C_1E11Dv.js.br → useSubAccountSwitcher-CnpeWIYq.js.br} +0 -0
  804. /package/payload/server/public/assets/{useSubAccountSwitcher-C_1E11Dv.js.gz → useSubAccountSwitcher-CnpeWIYq.js.gz} +0 -0
@@ -0,0 +1,148 @@
1
+ // Task 2148 — two halves of the same blindness.
2
+ //
3
+ // `memory-update` retyped five :Meeting timestamps to strings on one account.
4
+ // A STRING-to-DATETIME comparison in Neo4j is NULL, so every calendar reader
5
+ // dropped those rows silently and the booking page published a golf afternoon
6
+ // as open time. The standing drift audit that exists to catch exactly that read
7
+ // `MATCH (b:ConnectorBusy ...)` and nothing else, so it reported
8
+ // `busy=3 conflicts=0 outcome=verified` throughout — an all-clear that was
9
+ // structurally incapable of seeing a meeting.
10
+ //
11
+ // `classifyMeetingRetype` decides which corrupted rows the standing repair can
12
+ // restore. `censusBusyIntervals` splits the busy census by source, so one total
13
+ // can no longer read as healthy when the meeting leg is empty.
14
+ import { describe, it, expect } from "vitest";
15
+ import { classifyRetypeError, censusBusyIntervals, classifyPublishedDrift, planBlockWrites, MEETING_RETYPE_SELECT, MEETING_RETYPE_APPLY, BUSY_UNION_SELECT, } from "../booking-reconcile.js";
16
+ describe("classifyRetypeError", () => {
17
+ it("calls a Neo4j client error a verdict on the value", () => {
18
+ const err = Object.assign(new Error("Text cannot be parsed to a DateTime"), {
19
+ code: "Neo.ClientError.Statement.ArgumentError",
20
+ });
21
+ expect(classifyRetypeError(err)).toBe("unparseable");
22
+ });
23
+ it("calls anything else a failed write, not a bad value", () => {
24
+ // A timeout says nothing about the timestamp. Counting it as unparseable
25
+ // would tell the operator a row needs a human when it needs a retry.
26
+ const transient = Object.assign(new Error("Connection was closed"), {
27
+ code: "Neo.TransientError.General.DatabaseUnavailable",
28
+ });
29
+ expect(classifyRetypeError(transient)).toBe("failed");
30
+ expect(classifyRetypeError(new Error("socket hang up"))).toBe("failed");
31
+ expect(classifyRetypeError(null)).toBe("failed");
32
+ });
33
+ });
34
+ describe("the retype Cypher", () => {
35
+ it("selects only meetings whose bounds are stored as strings", () => {
36
+ // A repaired row stops matching, which is what keeps this a standing repair
37
+ // rather than a migration someone has to remember to delete.
38
+ expect(MEETING_RETYPE_SELECT).toContain("MATCH (m:Meeting {accountId: $accountId})");
39
+ expect(MEETING_RETYPE_SELECT).toContain("valueType(m.startsAt) STARTS WITH 'STRING'");
40
+ expect(MEETING_RETYPE_SELECT).toContain("valueType(m.endsAt) STARTS WITH 'STRING'");
41
+ });
42
+ it("rebuilds each string bound with datetime() and leaves a null bound alone", () => {
43
+ expect(MEETING_RETYPE_APPLY).toContain("datetime($startsAt)");
44
+ expect(MEETING_RETYPE_APPLY).toContain("datetime($endsAt)");
45
+ expect(MEETING_RETYPE_APPLY).toContain("$startsAt IS NULL");
46
+ expect(MEETING_RETYPE_APPLY).toContain("$endsAt IS NULL");
47
+ });
48
+ it("re-asserts the label and account on the write, not just on the select", () => {
49
+ // Account scope is a property; a write carrying none cannot enforce it.
50
+ expect(MEETING_RETYPE_APPLY).toContain("MATCH (m:Meeting {accountId: $accountId})");
51
+ });
52
+ });
53
+ describe("censusBusyIntervals", () => {
54
+ const meeting = (start, end) => ({ start, end, src: "meeting" });
55
+ const connector = (start, end) => ({ start, end, src: "connector" });
56
+ it("splits the census by source so one total cannot hide an empty meeting leg", () => {
57
+ const census = censusBusyIntervals([
58
+ meeting("2026-07-29T13:30:00Z", "2026-07-29T17:30:00Z"),
59
+ connector("2026-07-30T09:00:00Z", "2026-07-30T10:00:00Z"),
60
+ connector("2026-07-31T09:00:00Z", "2026-07-31T10:00:00Z"),
61
+ ]);
62
+ expect(census.busyMeetings).toBe(1);
63
+ expect(census.busyConnector).toBe(2);
64
+ expect(census.unusable).toBe(0);
65
+ expect(census.usable).toHaveLength(3);
66
+ });
67
+ it("distinguishes three connector intervals from three meetings", () => {
68
+ // `busy=3` could mean either, which is exactly why the old line read as
69
+ // healthy while five meetings were invisible.
70
+ const connectorsOnly = censusBusyIntervals([
71
+ connector("2026-07-29T09:00:00Z", "2026-07-29T10:00:00Z"),
72
+ connector("2026-07-29T11:00:00Z", "2026-07-29T12:00:00Z"),
73
+ connector("2026-07-29T13:00:00Z", "2026-07-29T14:00:00Z"),
74
+ ]);
75
+ expect(connectorsOnly.busyMeetings).toBe(0);
76
+ expect(connectorsOnly.busyConnector).toBe(3);
77
+ });
78
+ it("excludes a row with an unparseable start and counts it", () => {
79
+ const census = censusBusyIntervals([
80
+ meeting("not-a-time", "2026-07-29T17:30:00Z"),
81
+ meeting("2026-07-29T13:30:00Z", "2026-07-29T17:30:00Z"),
82
+ ]);
83
+ expect(census.usable).toEqual([
84
+ { start: "2026-07-29T13:30:00Z", end: "2026-07-29T17:30:00Z" },
85
+ ]);
86
+ expect(census.busyMeetings).toBe(1);
87
+ expect(census.unusable).toBe(1);
88
+ });
89
+ it("gives a meeting with no end the same end the public page gives it", () => {
90
+ // `:Meeting.endsAt` is nullable by schema and the free/busy route substitutes
91
+ // start + durationMins. Dropping the row instead would make a real conflict
92
+ // unreportable — this task's own failure shape.
93
+ const census = censusBusyIntervals([{ start: "2026-07-29T13:30:00Z", end: null, src: "meeting" }], 30);
94
+ expect(census.usable).toEqual([
95
+ { start: "2026-07-29T13:30:00Z", end: "2026-07-29T14:00:00.000Z" },
96
+ ]);
97
+ expect(census.busyMeetings).toBe(1);
98
+ expect(census.unusable).toBe(0);
99
+ });
100
+ it("counts a no-end meeting as unusable only when no duration is configured", () => {
101
+ const census = censusBusyIntervals([{ start: "2026-07-29T13:30:00Z", end: null, src: "meeting" }]);
102
+ expect(census.usable).toEqual([]);
103
+ expect(census.unusable).toBe(1);
104
+ });
105
+ it("reads UNION ALL so two meetings sharing bounds are counted twice", () => {
106
+ // Plain UNION de-duplicates the whole result, so a double booking or a
107
+ // re-ingested export would collapse and the census would undercount.
108
+ expect(BUSY_UNION_SELECT).toContain("UNION ALL");
109
+ });
110
+ it("keeps the connector leg separate, because block-writing depends on it alone", () => {
111
+ // planBlockWrites treats a non-empty busy set as proof the connector sync is
112
+ // alive. Handed the widened set, a deauthorised connector on an account with
113
+ // any meeting reads as healthy and every held block row is deleted.
114
+ const census = censusBusyIntervals([
115
+ meeting("2026-07-29T13:30:00Z", "2026-07-29T17:30:00Z"),
116
+ ]);
117
+ expect(census.connectorOnly).toEqual([]);
118
+ expect(census.usable).toHaveLength(1);
119
+ const plan = planBlockWrites({
120
+ publishedReadable: true,
121
+ busyReadable: true,
122
+ published: [{ start: "2026-07-29T14:00:00Z", end: "2026-07-29T14:30:00Z" }],
123
+ busy: census.connectorOnly,
124
+ taken: new Set(),
125
+ current: [{ bookingId: "blk-1", slotStart: "2026-07-29T14:00:00Z" }],
126
+ nowMs: Date.parse("2026-07-29T09:00:00Z"),
127
+ });
128
+ expect(plan.outcome).toBe("no-busy-data");
129
+ expect(plan.diff).toEqual({ toInsert: [], toDelete: [] });
130
+ });
131
+ it("makes a meeting-only conflict visible to the unchanged classifier", () => {
132
+ // The reported symptom, reduced: Adam's golf afternoon is a :Meeting with no
133
+ // :ConnectorBusy row, and the page published a slot inside it. Against the
134
+ // ConnectorBusy-only read the busy list was empty and conflicts was 0.
135
+ const published = [{ start: "2026-07-29T14:00:00Z", end: "2026-07-29T14:30:00Z" }];
136
+ const census = censusBusyIntervals([meeting("2026-07-29T13:30:00Z", "2026-07-29T17:30:00Z")]);
137
+ expect(classifyPublishedDrift(published, census.usable).conflicts).toBe(1);
138
+ expect(classifyPublishedDrift(published, []).conflicts).toBe(0);
139
+ });
140
+ it("reads both labels in one statement, tagged by source", () => {
141
+ expect(BUSY_UNION_SELECT).toContain("MATCH (m:Meeting {accountId: $accountId})");
142
+ expect(BUSY_UNION_SELECT).toContain("MATCH (b:ConnectorBusy {accountId: $accountId})");
143
+ expect(BUSY_UNION_SELECT).toContain("UNION");
144
+ expect(BUSY_UNION_SELECT).toContain("'meeting' AS src");
145
+ expect(BUSY_UNION_SELECT).toContain("'connector' AS src");
146
+ });
147
+ });
148
+ //# sourceMappingURL=meeting-retype.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meeting-retype.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/meeting-retype.test.ts"],"names":[],"mappings":"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"}
@@ -1,67 +1,19 @@
1
- export type AgentChannel = "whatsapp" | "telegram";
2
- /**
3
- * Reason codes are the true cause, not a symptom (Task 1439 observability):
4
- * - `not-registered`: the destination is in no authoritative list (house's
5
- * `adminPhones`/`accountManagers` for WhatsApp; the creating account's
6
- * `telegram.adminUsers` for Telegram).
7
- * - `cross-account`: the destination IS registered, but to an account other
8
- * than the one that created the schedule (and the creator is not the house).
9
- * Names both accounts so the mismatch is explained, not guessed.
10
- */
11
- export type DestinationValidity = {
12
- valid: true;
13
- } | {
14
- valid: false;
15
- reason: "not-registered";
16
- } | {
17
- valid: false;
18
- reason: "cross-account";
19
- destinationAccount: string;
20
- scheduleAccount: string;
21
- };
22
- /**
23
- * Replica of `normalize.ts:normalizeE164` — strip whitespace/dashes/parens, a
24
- * `whatsapp:` prefix, and a leading `+` or `00`; return digits-only or `''`.
25
- */
26
- export declare function normalizeE164(value: string): string;
27
- /** Replica of `normalize.ts:phonesMatch` — normalized equality, non-empty. */
28
- export declare function phonesMatch(a: string, b: string): boolean;
29
- interface WhatsAppAdmins {
30
- adminPhones: string[];
31
- accountManagers: Record<string, string>;
32
- }
33
- /** Read the channel admin config from `<accountDir>/account.json`. Missing or
34
- * malformed config yields empty lists (a fail-closed default: no destination
35
- * validates against empty config). */
36
- export declare function readChannelAdmins(accountDir: string, channel: "whatsapp"): WhatsAppAdmins;
37
- export declare function readChannelAdmins(accountDir: string, channel: "telegram"): {
38
- adminUsers: number[];
39
- };
40
- /**
41
- * The account a WhatsApp `destination` is registered to on the HOUSE's lists,
42
- * or null if it is in neither list. A manager binding wins over an admin match:
43
- * if the number is an `accountManagers` key its registered account is the bound
44
- * sub-account (the isolation-relevant fact); otherwise if it is an `adminPhones`
45
- * entry its registered account is the house. `houseDir` is the house account's
46
- * directory; `houseAccountId` its id.
47
- */
48
- export declare function registeredAccountForDestination(houseDir: string, houseAccountId: string, destination: string): string | null;
1
+ import { type AgentChannel, type DestinationValidity } from "../../../../../lib/agent-dispatch-rule/dist/index.js";
2
+ export { normalizeE164, phonesMatch, readChannelAdmins, registeredAccountForDestination, boundSubAccountFor, } from "../../../../../lib/agent-dispatch-rule/dist/index.js";
3
+ export type { AgentChannel, DestinationValidity };
49
4
  /**
50
5
  * Validate a dispatch destination under the Task 1439 two-part rule.
51
6
  * `accountsDir` is the PARENT accounts directory
52
7
  * (`$PLATFORM_ROOT/../data/accounts`); `creatingAccountId` is the account that
53
8
  * created (or owns) the schedule.
54
9
  *
55
- * - whatsapp: resolve the socket-owning house, read ITS authoritative lists,
56
- * and compute the destination's registered account. `not-registered` if it
57
- * is in no house list. Otherwise valid iff the creator IS the house (owner
58
- * exception: it owns the single line and may target any registered
59
- * admin/manager) OR the registered account equals the creating account.
60
- * Any other case is `cross-account`.
61
- * - telegram: house-only (Task 1378; 1380 deferred). Reads the creating
62
- * account's own `telegram.adminUsers`; there is no manager surface and thus
63
- * no cross-account concept — an integer chat id present in the list is valid,
64
- * anything else is `not-registered`.
10
+ * The house is resolved here rather than in the rule module.
11
+ * `resolveHouseOrSoleAccountId` throws when the install has no `role:'house'`
12
+ * account and does not have exactly one valid account; that throw is the
13
+ * caller's to handle and is deliberately not swallowed here
14
+ * `connector-sync-provision.ts` already documents catching it.
15
+ *
16
+ * Telegram never consults the house, so the resolver is not called for it.
65
17
  */
66
18
  export declare function validateAgentDestination(accountsDir: string, creatingAccountId: string, channel: AgentChannel, destination: string): DestinationValidity;
67
19
  /**
@@ -113,11 +65,4 @@ export declare function resolveAccountAdminUserIds(accountsDir: string, accountI
113
65
  * IO — so it is trivially unit-testable and safe to call on either write path.
114
66
  */
115
67
  export declare function buildScheduleProvenance(input: ScheduleProvenance): ScheduleProvenance;
116
- /**
117
- * The sub-account a WhatsApp manager destination is bound to, or null. Telegram
118
- * has no account-manager surface (house-only, Task 1378 scope), so it always
119
- * returns null. Used by the standing audit to detect a deleted sub-account.
120
- */
121
- export declare function boundSubAccountFor(accountDir: string, destination: string): string | null;
122
- export {};
123
68
  //# sourceMappingURL=agent-dispatch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-dispatch.d.ts","sourceRoot":"","sources":["../../src/lib/agent-dispatch.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;AAEnD;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GACf;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAC1C;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnG;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAIzD;AAED,UAAU,cAAc;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;uCAEuC;AACvC,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,GAClB,cAAc,CAAC;AAClB,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,GAClB;IAAE,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AA8B5B;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAOf;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,MAAM,EACzB,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,MAAM,GAClB,mBAAmB,CAmBrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE;IAAE,OAAO,EAAE,YAAY,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5E,IAAI,CAsBN;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB;iFAC6E;IAC7E,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,wEAAwE;IACxE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAY3F;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,GAAG,kBAAkB,CAWrF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMzF"}
1
+ {"version":3,"file":"agent-dispatch.d.ts","sourceRoot":"","sources":["../../src/lib/agent-dispatch.ts"],"names":[],"mappings":"AA0BA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACzB,MAAM,sDAAsD,CAAC;AAE9D,OAAO,EACL,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,+BAA+B,EAC/B,kBAAkB,GACnB,MAAM,sDAAsD,CAAC;AAC9D,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAElD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,MAAM,EACzB,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,MAAM,GAClB,mBAAmB,CAIrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE;IAAE,OAAO,EAAE,YAAY,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5E,IAAI,CAsBN;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB;iFAC6E;IAC7E,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,wEAAwE;IACxE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAY3F;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,GAAG,kBAAkB,CAWrF"}
@@ -1,128 +1,48 @@
1
1
  /**
2
+ * Destination validation for agent-bearing scheduled dispatch.
2
3
  * Task 1378 — agent-bearing scheduled dispatch: destination validation.
3
4
  * Task 1439 — house single-authority + creating-account match.
4
5
  *
5
- * The scheduling MCP cannot import `platform/ui` (plugin boundary), so this
6
- * module replicates the minimal E.164 matching from
7
- * `platform/ui/app/lib/whatsapp/normalize.ts`. For WhatsApp the authoritative
8
- * `adminPhones` + `accountManagers` lists live ONLY on the socket-owning house
9
- * account (Tasks 1377/1382), so the validator resolves the house via
10
- * `resolveHouseOrSoleAccountId` the same authority the inbound gate uses — and
11
- * reads its config, NOT the event's own account. It then requires the
12
- * destination's registered account to match the account that created the
13
- * schedule (the house/owner account excepted), so a schedule created in account
14
- * X cannot message another account's people. One `validateAgentDestination` is
15
- * shared by `schedule-event`, `schedule-update`, and the dispatcher's standing
16
- * audit so create-time and fire-time cannot diverge on rule or reason codes.
6
+ * The rule itself now lives in `platform/lib/agent-dispatch-rule`, because the
7
+ * admin UI needs the same rule and `platform/ui` must never import from
8
+ * `platform/plugins`. This module is the plugin's face onto it: it resolves the
9
+ * socket-owning house (the one thing the lib deliberately refuses to do) and
10
+ * delegates. Every exported signature here is unchanged, so `schedule-event`,
11
+ * `schedule-update`, the dispatcher's standing audit and the connector-sync
12
+ * provisioner are untouched by the move.
13
+ *
14
+ * For WhatsApp the authoritative `adminPhones` + `accountManagers` lists live
15
+ * ONLY on the socket-owning house account (Tasks 1377/1382), so the house is
16
+ * resolved via `resolveHouseOrSoleAccountId` the same authority the inbound
17
+ * gate uses and its config is read, NOT the event's own account.
18
+ *
19
+ * The provenance marker below is NOT part of the destination rule and stays
20
+ * here: it is stamped by this plugin's own dispatcher and travels outward on
21
+ * the inject POST, so it is this plugin's contract to keep, not shared logic
22
+ * two packages need to agree on.
17
23
  */
18
24
  import { readFileSync } from "node:fs";
19
25
  import { resolve } from "node:path";
20
26
  import { resolveHouseOrSoleAccountId } from "../../../../../lib/account-enumeration/dist/index.js";
21
- /**
22
- * Replica of `normalize.ts:normalizeE164` strip whitespace/dashes/parens, a
23
- * `whatsapp:` prefix, and a leading `+` or `00`; return digits-only or `''`.
24
- */
25
- export function normalizeE164(value) {
26
- let candidate = value.trim().replace(/[\s\-().]/g, "");
27
- candidate = candidate.replace(/^whatsapp:/i, "");
28
- if (candidate.startsWith("+"))
29
- candidate = candidate.slice(1);
30
- else if (candidate.startsWith("00"))
31
- candidate = candidate.slice(2);
32
- if (!/^\d+$/.test(candidate))
33
- return "";
34
- return candidate;
35
- }
36
- /** Replica of `normalize.ts:phonesMatch` — normalized equality, non-empty. */
37
- export function phonesMatch(a, b) {
38
- const na = normalizeE164(a);
39
- const nb = normalizeE164(b);
40
- return na.length > 0 && na === nb;
41
- }
42
- export function readChannelAdmins(accountDir, channel) {
43
- let config = {};
44
- try {
45
- config = JSON.parse(readFileSync(resolve(accountDir, "account.json"), "utf-8"));
46
- }
47
- catch {
48
- config = {};
49
- }
50
- if (channel === "whatsapp") {
51
- const wa = config.whatsapp ?? {};
52
- const adminPhones = Array.isArray(wa.adminPhones)
53
- ? wa.adminPhones.filter((p) => typeof p === "string")
54
- : [];
55
- const managersRaw = wa.accountManagers ?? {};
56
- const accountManagers = {};
57
- for (const [k, v] of Object.entries(managersRaw)) {
58
- if (typeof v === "string")
59
- accountManagers[k] = v;
60
- }
61
- return { adminPhones, accountManagers };
62
- }
63
- const tg = config.telegram ?? {};
64
- const adminUsers = Array.isArray(tg.adminUsers)
65
- ? tg.adminUsers.filter((u) => typeof u === "number")
66
- : [];
67
- return { adminUsers };
68
- }
69
- /**
70
- * The account a WhatsApp `destination` is registered to on the HOUSE's lists,
71
- * or null if it is in neither list. A manager binding wins over an admin match:
72
- * if the number is an `accountManagers` key its registered account is the bound
73
- * sub-account (the isolation-relevant fact); otherwise if it is an `adminPhones`
74
- * entry its registered account is the house. `houseDir` is the house account's
75
- * directory; `houseAccountId` its id.
76
- */
77
- export function registeredAccountForDestination(houseDir, houseAccountId, destination) {
78
- const { adminPhones, accountManagers } = readChannelAdmins(houseDir, "whatsapp");
79
- for (const [managerPhone, subAccountId] of Object.entries(accountManagers)) {
80
- if (subAccountId && phonesMatch(managerPhone, destination))
81
- return subAccountId;
82
- }
83
- if (adminPhones.some((p) => phonesMatch(p, destination)))
84
- return houseAccountId;
85
- return null;
86
- }
27
+ import { validateAgentDestination as validateAgainstHouse, } from "../../../../../lib/agent-dispatch-rule/dist/index.js";
28
+ export { normalizeE164, phonesMatch, readChannelAdmins, registeredAccountForDestination, boundSubAccountFor, } from "../../../../../lib/agent-dispatch-rule/dist/index.js";
87
29
  /**
88
30
  * Validate a dispatch destination under the Task 1439 two-part rule.
89
31
  * `accountsDir` is the PARENT accounts directory
90
32
  * (`$PLATFORM_ROOT/../data/accounts`); `creatingAccountId` is the account that
91
33
  * created (or owns) the schedule.
92
34
  *
93
- * - whatsapp: resolve the socket-owning house, read ITS authoritative lists,
94
- * and compute the destination's registered account. `not-registered` if it
95
- * is in no house list. Otherwise valid iff the creator IS the house (owner
96
- * exception: it owns the single line and may target any registered
97
- * admin/manager) OR the registered account equals the creating account.
98
- * Any other case is `cross-account`.
99
- * - telegram: house-only (Task 1378; 1380 deferred). Reads the creating
100
- * account's own `telegram.adminUsers`; there is no manager surface and thus
101
- * no cross-account concept — an integer chat id present in the list is valid,
102
- * anything else is `not-registered`.
35
+ * The house is resolved here rather than in the rule module.
36
+ * `resolveHouseOrSoleAccountId` throws when the install has no `role:'house'`
37
+ * account and does not have exactly one valid account; that throw is the
38
+ * caller's to handle and is deliberately not swallowed here
39
+ * `connector-sync-provision.ts` already documents catching it.
40
+ *
41
+ * Telegram never consults the house, so the resolver is not called for it.
103
42
  */
104
43
  export function validateAgentDestination(accountsDir, creatingAccountId, channel, destination) {
105
- if (channel === "whatsapp") {
106
- const houseAccountId = resolveHouseOrSoleAccountId(accountsDir);
107
- const houseDir = resolve(accountsDir, houseAccountId);
108
- const registered = registeredAccountForDestination(houseDir, houseAccountId, destination);
109
- if (registered === null)
110
- return { valid: false, reason: "not-registered" };
111
- if (creatingAccountId === houseAccountId)
112
- return { valid: true };
113
- if (registered === creatingAccountId)
114
- return { valid: true };
115
- return {
116
- valid: false,
117
- reason: "cross-account",
118
- destinationAccount: registered,
119
- scheduleAccount: creatingAccountId,
120
- };
121
- }
122
- const { adminUsers } = readChannelAdmins(resolve(accountsDir, creatingAccountId), "telegram");
123
- const asNumber = Number(destination);
124
- const ok = Number.isInteger(asNumber) && adminUsers.includes(asNumber);
125
- return ok ? { valid: true } : { valid: false, reason: "not-registered" };
44
+ const houseAccountId = channel === "whatsapp" ? resolveHouseOrSoleAccountId(accountsDir) : creatingAccountId;
45
+ return validateAgainstHouse(accountsDir, houseAccountId, creatingAccountId, channel, destination);
126
46
  }
127
47
  /**
128
48
  * Validate an `agentDispatch` at write time (shared by `schedule-event` and
@@ -188,17 +108,4 @@ export function buildScheduleProvenance(input) {
188
108
  dispatchedAt: input.dispatchedAt,
189
109
  };
190
110
  }
191
- /**
192
- * The sub-account a WhatsApp manager destination is bound to, or null. Telegram
193
- * has no account-manager surface (house-only, Task 1378 scope), so it always
194
- * returns null. Used by the standing audit to detect a deleted sub-account.
195
- */
196
- export function boundSubAccountFor(accountDir, destination) {
197
- const { accountManagers } = readChannelAdmins(accountDir, "whatsapp");
198
- for (const [managerPhone, subAccountId] of Object.entries(accountManagers)) {
199
- if (subAccountId && phonesMatch(managerPhone, destination))
200
- return subAccountId;
201
- }
202
- return null;
203
- }
204
111
  //# sourceMappingURL=agent-dispatch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-dispatch.js","sourceRoot":"","sources":["../../src/lib/agent-dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-dispatch.js","sourceRoot":"","sources":["../../src/lib/agent-dispatch.ts"],"names":[],"mappings":"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"}
@@ -140,20 +140,97 @@ export interface PublishedDrift {
140
140
  outcome: PublishedDriftOutcome;
141
141
  /** Size of the published-open set the comparison ran against. */
142
142
  published: number;
143
- /** Size of the connector-busy set the comparison ran against. */
143
+ /** Size of the busy set the comparison ran against, both labels together.
144
+ * Task 2148 split the reported census into `busyMeetings` / `busyConnector`
145
+ * at the call site: one total cannot distinguish "3 connector intervals, no
146
+ * meetings" from "3 meetings, no connector", and that ambiguity is what made
147
+ * `busy=3 conflicts=0` read as healthy while five meetings were invisible. */
144
148
  busy: number;
145
149
  /** Published-open slots overlapping any busy interval. Necessarily 0 on the
146
150
  * two degraded outcomes, which is why the outcome token has to be read. */
147
151
  conflicts: number;
148
152
  }
149
153
  /**
150
- * Classify published-open booking slots against the connector-busy set — the
151
- * drift the standing audit reports. `outcome: "verified"` with a nonzero
152
- * `conflicts` means the booking page is currently offering a slot the connector
153
- * shows busy. An empty published set reports `no-published-slots` even when the
154
- * busy set is also empty: the site never publishing is the upstream condition.
154
+ * Classify published-open booking slots against the busy set — the drift the
155
+ * standing audit reports. The busy set is both labels the public free/busy page
156
+ * subtracts, `:Meeting` and `:ConnectorBusy`, so `outcome: "verified"` with a
157
+ * nonzero `conflicts` means the booking page is currently offering a slot that
158
+ * is genuinely taken, whether by a meeting or by a connector block. An empty
159
+ * published set reports `no-published-slots` even when the busy set is also
160
+ * empty: the site never publishing is the upstream condition. `no-busy-data`
161
+ * now means neither label held a usable interval.
155
162
  */
156
163
  export declare function classifyPublishedDrift(published: BusyInterval[], busy: BusyInterval[]): PublishedDrift;
164
+ /** A `:Meeting` with at least one string-typed bound. A null member means that
165
+ * bound already carries a temporal type and must be left alone. */
166
+ export interface MeetingRetypeRow {
167
+ meetingId: string;
168
+ startsAt: string | null;
169
+ endsAt: string | null;
170
+ }
171
+ /** Meetings still holding a string bound. A repaired row stops matching, which
172
+ * is what lets this stay a standing repair rather than a one-off migration. */
173
+ export declare const MEETING_RETYPE_SELECT = "\n MATCH (m:Meeting {accountId: $accountId})\n WHERE valueType(m.startsAt) STARTS WITH 'STRING' OR valueType(m.endsAt) STARTS WITH 'STRING'\n RETURN elementId(m) AS meetingId,\n CASE WHEN valueType(m.startsAt) STARTS WITH 'STRING' THEN m.startsAt ELSE null END AS startsAt,\n CASE WHEN valueType(m.endsAt) STARTS WITH 'STRING' THEN m.endsAt ELSE null END AS endsAt\n";
174
+ /** Rebuild each string bound as a ZONED DATETIME. A null param leaves that
175
+ * bound exactly as it is, so a half-corrupted row is half-repaired and its
176
+ * correctly-typed bound is never rewritten. The label and `accountId` are
177
+ * re-asserted here rather than trusted from the select: account scope is a
178
+ * property, and a write that carries no property cannot enforce it. */
179
+ export declare const MEETING_RETYPE_APPLY = "\n MATCH (m:Meeting {accountId: $accountId}) WHERE elementId(m) = $meetingId\n SET m.startsAt = CASE WHEN $startsAt IS NULL THEN m.startsAt ELSE datetime($startsAt) END,\n m.endsAt = CASE WHEN $endsAt IS NULL THEN m.endsAt ELSE datetime($endsAt) END\n";
180
+ /** Why a scanned row was not repaired. `unparseable` is a value no `datetime()`
181
+ * can rebuild and needs a human; `failed` is the write not landing — a driver
182
+ * timeout, a disconnect — which says nothing about the value and will be
183
+ * retried on the next tick. Neo4j names the difference in the error code, so
184
+ * the two are never reported under one count. */
185
+ export type RetypeFailure = "unparseable" | "failed";
186
+ export declare function classifyRetypeError(err: unknown): RetypeFailure;
187
+ /** A raw busy row, tagged with the label it came from. `end` is nullable here
188
+ * and nowhere downstream: `:Meeting.endsAt` is null when the event carries no
189
+ * end, and `censusBusyIntervals` resolves that before any comparison. */
190
+ export interface BusySourceRow {
191
+ start: string;
192
+ end: string | null;
193
+ src: "meeting" | "connector";
194
+ }
195
+ /** The busy set the public free/busy page computes from: meetings AND connector
196
+ * blocks. The old audit read only the second, so any meeting conflict was
197
+ * outside what it could measure.
198
+ *
199
+ * `UNION ALL`, not `UNION`: plain `UNION` de-duplicates the whole result, so two
200
+ * distinct meetings sharing bounds (a double booking, a re-ingested export)
201
+ * would collapse and be counted once. The census only earns its keep if the
202
+ * count is trustworthy, and the `src` column alone prevents cross-leg collapse,
203
+ * not collapse within a leg. */
204
+ export declare const BUSY_UNION_SELECT = "\n MATCH (m:Meeting {accountId: $accountId})\n RETURN toString(m.startsAt) AS start, toString(m.endsAt) AS end, 'meeting' AS src\n UNION ALL\n MATCH (b:ConnectorBusy {accountId: $accountId})\n RETURN toString(b.startsAt) AS start, toString(b.endsAt) AS end, 'connector' AS src\n";
205
+ export interface BusyCensus {
206
+ /** Every usable interval, both legs — what `classifyPublishedDrift` compares. */
207
+ usable: BusyInterval[];
208
+ /** The connector leg alone. `planBlockWrites` must keep reading this and not
209
+ * `usable`: its empty-set rule is a liveness test for the connector sync, and
210
+ * a set widened with meetings would report a deauthorised connector as live
211
+ * and delete every held block row. */
212
+ connectorOnly: BusyInterval[];
213
+ /** Counts are over `usable` only: a count that included rows the comparison
214
+ * ignored would be the same unqualified number this audit exists to remove. */
215
+ busyMeetings: number;
216
+ busyConnector: number;
217
+ /** Rows excluded for a bound no substitution could resolve. Reported on the
218
+ * audit line — an interval dropped without a count is the silent drop this
219
+ * task exists to remove. */
220
+ unusable: number;
221
+ }
222
+ /**
223
+ * Reduce the raw busy rows to the intervals the comparison can run against.
224
+ *
225
+ * `:Meeting.endsAt` is nullable by schema — `writeMeeting` stores null when an
226
+ * event carries no end — and the public free/busy route substitutes
227
+ * `start + durationMins` for those rows rather than ignoring them. This mirrors
228
+ * that substitution, because a no-end meeting IS busy on the page: dropping it
229
+ * would make a real conflict unreportable, which is this task's own failure
230
+ * shape. `durationMins` comes from the same `calendar-availability.json` the
231
+ * page reads; when it is absent the row has no resolvable end and is counted.
232
+ */
233
+ export declare function censusBusyIntervals(rows: BusySourceRow[], durationMins?: number): BusyCensus;
157
234
  /** A slot as it appears in the published `availability_snapshot` payload. */
158
235
  export interface PublishedSlot {
159
236
  start: string;
@@ -1 +1 @@
1
- {"version":3,"file":"booking-reconcile.d.ts","sourceRoot":"","sources":["../../src/lib/booking-reconcile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"booking-reconcile.d.ts","sourceRoot":"","sources":["../../src/lib/booking-reconcile.ts"],"names":[],"mappings":"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"}