@rubytech/create-maxy-code 0.1.489 → 0.1.490

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 (220) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/docs/superpowers/plans/2026-07-22-task-1910-two-way-portal-exchange.md +1716 -0
  3. package/payload/platform/docs/superpowers/specs/2026-07-22-task-1910-two-way-portal-exchange-design.md +103 -0
  4. package/payload/platform/lib/storage-broker/dist/audit.d.ts +29 -1
  5. package/payload/platform/lib/storage-broker/dist/audit.d.ts.map +1 -1
  6. package/payload/platform/lib/storage-broker/dist/audit.js +25 -2
  7. package/payload/platform/lib/storage-broker/dist/audit.js.map +1 -1
  8. package/payload/platform/lib/storage-broker/dist/cf-exec.d.ts +13 -0
  9. package/payload/platform/lib/storage-broker/dist/cf-exec.d.ts.map +1 -1
  10. package/payload/platform/lib/storage-broker/dist/cf-exec.js +22 -0
  11. package/payload/platform/lib/storage-broker/dist/cf-exec.js.map +1 -1
  12. package/payload/platform/lib/storage-broker/src/audit.ts +59 -1
  13. package/payload/platform/lib/storage-broker/src/cf-exec.ts +48 -0
  14. package/payload/platform/plugins/admin/skills/agent-builder/references/agent-pattern.md +34 -5
  15. package/payload/platform/plugins/cloudflare/bin/portal-index-push.mjs +133 -35
  16. package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-delete-withdraw.test.ts +95 -0
  17. package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-index-push.test.ts +141 -9
  18. package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-moved-download.test.ts +83 -0
  19. package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-schema-shape.test.ts +48 -0
  20. package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-sign.test.ts +62 -0
  21. package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-target.test.ts +103 -0
  22. package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-upload-multipart.test.ts +211 -0
  23. package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-upload-target.test.ts +168 -0
  24. package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-uploads-listing.test.ts +138 -0
  25. package/payload/platform/plugins/cloudflare/mcp/__tests__/template-config.test.ts +111 -4
  26. package/payload/platform/plugins/cloudflare/mcp/__tests__/upload-route.test.ts +14 -13
  27. package/payload/platform/plugins/cloudflare/skills/data-portal/SKILL.md +52 -14
  28. package/payload/platform/plugins/cloudflare/skills/data-portal/schema.sql +70 -7
  29. package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/_lib/portal-sign.mjs +74 -0
  30. package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/_lib/target.ts +91 -0
  31. package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/_lib/types.ts +23 -0
  32. package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/delete.ts +45 -0
  33. package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/download.ts +59 -4
  34. package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/files.ts +58 -9
  35. package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/upload.ts +358 -16
  36. package/payload/platform/plugins/cloudflare/skills/data-portal/template/index.html +9 -1
  37. package/payload/platform/plugins/cloudflare/skills/data-portal/template/portal.css +45 -0
  38. package/payload/platform/plugins/cloudflare/skills/data-portal/template/portal.js +216 -20
  39. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +5 -122
  40. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  41. package/payload/platform/templates/agents/admin/IDENTITY.md +1 -1
  42. package/payload/platform/templates/agents/passive/IDENTITY.md +6 -0
  43. package/payload/platform/templates/agents/public/IDENTITY.md +6 -0
  44. package/payload/platform/templates/specialists/agents/citation-auditor.md +6 -0
  45. package/payload/platform/templates/specialists/agents/coding-assistant.md +6 -0
  46. package/payload/platform/templates/specialists/agents/compiled-truth-rewriter.md +6 -0
  47. package/payload/platform/templates/specialists/agents/content-producer.md +6 -0
  48. package/payload/platform/templates/specialists/agents/data-manager.md +6 -0
  49. package/payload/platform/templates/specialists/agents/database-operator.md +6 -0
  50. package/payload/platform/templates/specialists/agents/librarian.md +6 -0
  51. package/payload/platform/templates/specialists/agents/personal-assistant.md +6 -0
  52. package/payload/platform/templates/specialists/agents/project-manager.md +6 -0
  53. package/payload/platform/templates/specialists/agents/public-session-reviewer.md +6 -0
  54. package/payload/platform/templates/specialists/agents/research-assistant.md +7 -1
  55. package/payload/platform/templates/specialists/agents/typed-edge-classifier.md +6 -0
  56. package/payload/premium-plugins/writer-craft/agents/writer-craft--manuscript-reviewer.md +6 -0
  57. package/payload/server/{chunk-UFXRUKXO.js → chunk-KZFE3MOY.js} +49 -3
  58. package/payload/server/public/activity.html +5 -6
  59. package/payload/server/public/assets/AdminLoginScreens-DgVFsHtd.js +1 -0
  60. package/payload/server/public/assets/AdminShell-BwNqwb4k.js +2 -0
  61. package/payload/server/public/assets/activity-2DL2DwLr.js +1 -0
  62. package/payload/server/public/assets/admin-COe0dT2U.js +1 -0
  63. package/payload/server/public/assets/{arc-D-QzyndF.js → arc-CFMJyMm-.js} +1 -1
  64. package/payload/server/public/assets/architecture-YZFGNWBL-Cypt5qHL.js +1 -0
  65. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-W7f0Us4S.js → architectureDiagram-Q4EWVU46-CiSSgdL8.js} +1 -1
  66. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-CfPS4FXg.js → blockDiagram-DXYQGD6D-_sXtIW5c.js} +1 -1
  67. package/payload/server/public/assets/{bot-DnuyRsLS.js → bot-CpBuDQlF.js} +1 -1
  68. package/payload/server/public/assets/{browser-q4EFqKvR.js → browser-CSApuZrv.js} +1 -1
  69. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-Dq60cLVI.js → c4Diagram-AHTNJAMY-Bh7OAMXs.js} +1 -1
  70. package/payload/server/public/assets/{calendar-C-q9kWmA.js → calendar-DlvwZnS7.js} +1 -1
  71. package/payload/server/public/assets/channel-BMyXE4zc.js +1 -0
  72. package/payload/server/public/assets/chat-DWvYv9jq.js +1 -0
  73. package/payload/server/public/assets/chevron-down-Dnuuw6Q2.js +1 -0
  74. package/payload/server/public/assets/chevron-left-CC4zmWOr.js +1 -0
  75. package/payload/server/public/assets/chevron-right-CG_lHTx_.js +1 -0
  76. package/payload/server/public/assets/{chunk-2KRD3SAO-CXDjuDN0.js → chunk-2KRD3SAO-D4fktAwW.js} +1 -1
  77. package/payload/server/public/assets/{chunk-336JU56O-926ox0tj.js → chunk-336JU56O-CcQoKH2G.js} +2 -2
  78. package/payload/server/public/assets/chunk-426QAEUC-Xu6JKP4d.js +1 -0
  79. package/payload/server/public/assets/{chunk-4BX2VUAB-C2nrPCfN.js → chunk-4BX2VUAB-C13Wz3zS.js} +1 -1
  80. package/payload/server/public/assets/{chunk-4TB4RGXK-CuW3FOR6.js → chunk-4TB4RGXK-BL48D7gN.js} +1 -1
  81. package/payload/server/public/assets/{chunk-55IACEB6-B4_-In90.js → chunk-55IACEB6-TmOKdy8a.js} +1 -1
  82. package/payload/server/public/assets/{chunk-5FUZZQ4R-DnYGr9CP.js → chunk-5FUZZQ4R-DZ_jSF6N.js} +1 -1
  83. package/payload/server/public/assets/{chunk-5PVQY5BW-BYCOi9bf.js → chunk-5PVQY5BW-De4G1vfV.js} +1 -1
  84. package/payload/server/public/assets/{chunk-67CJDMHE-CBxsC4JP.js → chunk-67CJDMHE-Cif9Uu5C.js} +1 -1
  85. package/payload/server/public/assets/{chunk-7N4EOEYR-CAACaqFr.js → chunk-7N4EOEYR-WjTHCXnd.js} +1 -1
  86. package/payload/server/public/assets/{chunk-AA7GKIK3-BoamZdS6.js → chunk-AA7GKIK3-CwCfdQmb.js} +1 -1
  87. package/payload/server/public/assets/{chunk-BSJP7CBP-CHk82eFy.js → chunk-BSJP7CBP-9A67yXwT.js} +1 -1
  88. package/payload/server/public/assets/{chunk-CIAEETIT-DdeW9zxl.js → chunk-CIAEETIT-DPMiWSBi.js} +1 -1
  89. package/payload/server/public/assets/{chunk-EDXVE4YY-DJqSRv2w.js → chunk-EDXVE4YY-C2f_Qvx-.js} +1 -1
  90. package/payload/server/public/assets/{chunk-ENJZ2VHE-BRi4BwM5.js → chunk-ENJZ2VHE-B-Q9EbSQ.js} +1 -1
  91. package/payload/server/public/assets/{chunk-FMBD7UC4-OJp2CtUE.js → chunk-FMBD7UC4-Bmt_ZRlV.js} +1 -1
  92. package/payload/server/public/assets/{chunk-FOC6F5B3-BUAQ6spG.js → chunk-FOC6F5B3-DfGJGxpX.js} +1 -1
  93. package/payload/server/public/assets/{chunk-ICPOFSXX-DeRggD-Q.js → chunk-ICPOFSXX-Wyym1Q8K.js} +2 -2
  94. package/payload/server/public/assets/{chunk-K5T4RW27-EHiXZ8Py.js → chunk-K5T4RW27-DMpoaqw2.js} +1 -1
  95. package/payload/server/public/assets/{chunk-KGLVRYIC-tOajPcpn.js → chunk-KGLVRYIC-DYUFgri2.js} +1 -1
  96. package/payload/server/public/assets/{chunk-LIHQZDEY-uwO6oHIU.js → chunk-LIHQZDEY-x3LmeKmx.js} +1 -1
  97. package/payload/server/public/assets/{chunk-ORNJ4GCN-Dpa1_BCA.js → chunk-ORNJ4GCN-BeuNAWkW.js} +1 -1
  98. package/payload/server/public/assets/{chunk-OYMX7WX6-ChdDqaQL.js → chunk-OYMX7WX6-BUWVAfQA.js} +1 -1
  99. package/payload/server/public/assets/chunk-QZHKN3VN-7_kS3RBy.js +1 -0
  100. package/payload/server/public/assets/{chunk-U2HBQHQK-5JgWosPv.js → chunk-U2HBQHQK-DKS5adQo.js} +1 -1
  101. package/payload/server/public/assets/{chunk-X2U36JSP-BGJqysB2.js → chunk-X2U36JSP-CT_UM4IN.js} +1 -1
  102. package/payload/server/public/assets/{chunk-XPW4576I-GERE2ekx.js → chunk-XPW4576I-ByFnN4JO.js} +1 -1
  103. package/payload/server/public/assets/{chunk-YZCP3GAM-BskqX1V5.js → chunk-YZCP3GAM-DCetC20J.js} +1 -1
  104. package/payload/server/public/assets/{chunk-ZZ45TVLE-DG1iY-L9.js → chunk-ZZ45TVLE-Bh1QIv8N.js} +1 -1
  105. package/payload/server/public/assets/classDiagram-6PBFFD2Q-DJqbNcuC.js +1 -0
  106. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CGglqfQA.js +1 -0
  107. package/payload/server/public/assets/clone-BiTMTzp_.js +1 -0
  108. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-C8Rl4ykh.js → cose-bilkent-S5V4N54A-DgLEaApT.js} +1 -1
  109. package/payload/server/public/assets/{dagre-KV5264BT-C0YrJPF3.js → dagre-KV5264BT-BfkUPrEV.js} +1 -1
  110. package/payload/server/public/assets/{dagre-DTlv-FFy.js → dagre-unhMIyVo.js} +1 -1
  111. package/payload/server/public/assets/data-CJbC_cVy.js +1 -0
  112. package/payload/server/public/assets/{diagram-5BDNPKRD-Dfk5oepI.js → diagram-5BDNPKRD-BjjwcTD9.js} +1 -1
  113. package/payload/server/public/assets/{diagram-G4DWMVQ6-QRj55DiB.js → diagram-G4DWMVQ6-BbgWtVSS.js} +1 -1
  114. package/payload/server/public/assets/{diagram-MMDJMWI5-BAPKsohU.js → diagram-MMDJMWI5-DyAnkWGy.js} +1 -1
  115. package/payload/server/public/assets/{diagram-TYMM5635-C3iZXPkC.js → diagram-TYMM5635-SAMMoLxq.js} +1 -1
  116. package/payload/server/public/assets/{erDiagram-SMLLAGMA-DIbI7g_5.js → erDiagram-SMLLAGMA-Cvo-5-fD.js} +1 -1
  117. package/payload/server/public/assets/{flatten-DlAJeN0L.js → flatten-BXzaHgtL.js} +1 -1
  118. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-l3eJJr8R.js → flowDiagram-DWJPFMVM-y3o2Ycld.js} +1 -1
  119. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-aaEzHxIq.js → ganttDiagram-T4ZO3ILL-BEm_CQaK.js} +1 -1
  120. package/payload/server/public/assets/gitGraph-7Q5UKJZL-C_-XjxLd.js +1 -0
  121. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-Di-1eg_m.js → gitGraphDiagram-UUTBAWPF-CqmOxS7F.js} +1 -1
  122. package/payload/server/public/assets/{graph-Cyh6FWaV.js → graph-kaxS9a_7.js} +2 -2
  123. package/payload/server/public/assets/{graph-labels-CUQtXFKW.js → graph-labels-GgejRtgV.js} +1 -1
  124. package/payload/server/public/assets/{graphlib-D5awC2yp.js → graphlib-_HfbQcBf.js} +1 -1
  125. package/payload/server/public/assets/info-OMHHGYJF-BH8yDCfL.js +1 -0
  126. package/payload/server/public/assets/infoDiagram-42DDH7IO-DyDXyJ6U.js +2 -0
  127. package/payload/server/public/assets/{isEmpty-Dh1dF-tM.js → isEmpty-uB1dEu_Z.js} +1 -1
  128. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-CLOd_cNf.js → ishikawaDiagram-UXIWVN3A-C_d0vcZC.js} +1 -1
  129. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-cGyfW6Tg.js → journeyDiagram-VCZTEJTY-DsjRBqlW.js} +1 -1
  130. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-CRTKWPlh.js → kanban-definition-6JOO6SKY-BwtK6LS-.js} +1 -1
  131. package/payload/server/public/assets/{line-B8Brm0TD.js → line-szBCFOLJ.js} +1 -1
  132. package/payload/server/public/assets/{linear-BHnSKXBe.js → linear-X3O7lwK3.js} +1 -1
  133. package/payload/server/public/assets/{maximize-2-k3Fu5hdP.js → maximize-2-CPq3nwZA.js} +1 -1
  134. package/payload/server/public/assets/{mermaid-parser.core-BtNpdQct.js → mermaid-parser.core-BavvMAhU.js} +2 -2
  135. package/payload/server/public/assets/{mermaid.core-BY87anQZ.js → mermaid.core-Br2F9Hdm.js} +3 -3
  136. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-rUSv9qN1.js → mindmap-definition-QFDTVHPH-4qlwXoJ-.js} +1 -1
  137. package/payload/server/public/assets/operator-CldXXilj.js +1 -0
  138. package/payload/server/public/assets/{ordinal-Bnl5GL-x.js → ordinal-CZY9laxg.js} +1 -1
  139. package/payload/server/public/assets/packet-4T2RLAQJ-Bajcns4r.js +1 -0
  140. package/payload/server/public/assets/{page-Cno8NNMk.js → page-BE6DkJP9.js} +1 -1
  141. package/payload/server/public/assets/{page-DhwPG5Zf.js → page-BIwdWXnv.js} +3 -3
  142. package/payload/server/public/assets/{pdf-render-CrpAi4Ba.js → pdf-render-H884L3EI.js} +1 -1
  143. package/payload/server/public/assets/pie-ZZUOXDRM-D7hjM5w1.js +1 -0
  144. package/payload/server/public/assets/{pieDiagram-DEJITSTG-Cjn9IP-C.js → pieDiagram-DEJITSTG-BbXryIg0.js} +1 -1
  145. package/payload/server/public/assets/{public-BJ5Oo2Fw.js → public-BKQEQGPE.js} +1 -1
  146. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-BkSHkSsn.js → quadrantDiagram-34T5L4WZ-BHLjcvh3.js} +1 -1
  147. package/payload/server/public/assets/radar-PYXPWWZC-B46d5x7a.js +1 -0
  148. package/payload/server/public/assets/{reduce-Bp5oNw1n.js → reduce-BGQzAenn.js} +1 -1
  149. package/payload/server/public/assets/{requirementDiagram-MS252O5E-hLwgyB-F.js → requirementDiagram-MS252O5E-BXaVO0lk.js} +1 -1
  150. package/payload/server/public/assets/{rotate-ccw-D-ov5jM4.js → rotate-ccw-DieZzl10.js} +1 -1
  151. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-D6Dl1RIa.js → sankeyDiagram-XADWPNL6-CmN1s17Q.js} +1 -1
  152. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-j0QBqkbL.js → sequenceDiagram-FGHM5R23-DC08e5NY.js} +1 -1
  153. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-TvEBNsuV.js → stateDiagram-FHFEXIEX-DnoQMuOW.js} +1 -1
  154. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-CrstH34p.js +1 -0
  155. package/payload/server/public/assets/{tasks-DHMxTZVD.js → tasks-DYyCGz8W.js} +1 -1
  156. package/payload/server/public/assets/{time-entry-format-EmV5lz6o.js → time-entry-format-CC_9jFuR.js} +1 -1
  157. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-BfivOP-j.js → timeline-definition-GMOUNBTQ-eTn3uRaH.js} +1 -1
  158. package/payload/server/public/assets/treeView-SZITEDCU-3XQh5xQ1.js +1 -0
  159. package/payload/server/public/assets/treemap-W4RFUUIX-DwR-_l5z.js +1 -0
  160. package/payload/server/public/assets/{triangle-alert-CivyPfAL.js → triangle-alert-7mQfCQWP.js} +1 -1
  161. package/payload/server/public/assets/{useCopyFeedback-hbnPS-r9.js → useCopyFeedback-os7N0yCx.js} +1 -1
  162. package/payload/server/public/assets/useSubAccountSwitcher-Bgfqig1V.css +1 -0
  163. package/payload/server/public/assets/{useVoiceRecorder-QN9_GqB_.js → useVoiceRecorder-ZFwt5i6d.js} +2 -2
  164. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-Bvfw9aFJ.js → vennDiagram-DHZGUBPP-DNx6o_ZQ.js} +1 -1
  165. package/payload/server/public/assets/wardley-RL74JXVD-DZp9oCGv.js +1 -0
  166. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-C9h04G6b.js → wardleyDiagram-NUSXRM2D-BZOchqF3.js} +1 -1
  167. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-BMvi2m2q.js → xychartDiagram-5P7HB3ND-ZBEGH6ZI.js} +1 -1
  168. package/payload/server/public/browser.html +4 -4
  169. package/payload/server/public/calendar.html +6 -6
  170. package/payload/server/public/chat.html +14 -14
  171. package/payload/server/public/data.html +11 -11
  172. package/payload/server/public/graph.html +10 -11
  173. package/payload/server/public/index.html +16 -17
  174. package/payload/server/public/operator.html +15 -16
  175. package/payload/server/public/public.html +14 -14
  176. package/payload/server/public/tasks.html +6 -6
  177. package/payload/server/server.js +1488 -895
  178. package/payload/server/{src-YJF3UJNR.js → src-UYDFMWF4.js} +1 -1
  179. package/payload/platform/lib/active-rules/package-lock.json +0 -12
  180. package/payload/server/public/assets/AdminLoginScreens-Dic_fPt6.js +0 -1
  181. package/payload/server/public/assets/AdminShell-JN7rZ8aG.js +0 -2
  182. package/payload/server/public/assets/Checkbox-CB74kINA.js +0 -1
  183. package/payload/server/public/assets/activity-DbfpHg3i.js +0 -1
  184. package/payload/server/public/assets/admin-DvQPTxqe.js +0 -1
  185. package/payload/server/public/assets/architecture-YZFGNWBL-CGvD4r9F.js +0 -1
  186. package/payload/server/public/assets/channel-Bpg-ADC0.js +0 -1
  187. package/payload/server/public/assets/chat-DcefIV9q.js +0 -1
  188. package/payload/server/public/assets/chevron-down-Blma_CKl.js +0 -1
  189. package/payload/server/public/assets/chevron-left-xeYDxFiC.js +0 -1
  190. package/payload/server/public/assets/chevron-right-BonbtjqJ.js +0 -1
  191. package/payload/server/public/assets/chunk-426QAEUC-1poG7Nd3.js +0 -1
  192. package/payload/server/public/assets/chunk-QZHKN3VN-GN1tIO8J.js +0 -1
  193. package/payload/server/public/assets/classDiagram-6PBFFD2Q-DMGVq8Jv.js +0 -1
  194. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DfddT8UV.js +0 -1
  195. package/payload/server/public/assets/clone-Cc9vFIEk.js +0 -1
  196. package/payload/server/public/assets/data-Bu-5SUmR.js +0 -1
  197. package/payload/server/public/assets/gitGraph-7Q5UKJZL-DtjXE0UI.js +0 -1
  198. package/payload/server/public/assets/info-OMHHGYJF-CmArhGYf.js +0 -1
  199. package/payload/server/public/assets/infoDiagram-42DDH7IO-utWz7oZy.js +0 -2
  200. package/payload/server/public/assets/operator-8NVpNLeD.js +0 -1
  201. package/payload/server/public/assets/packet-4T2RLAQJ-BTfK0Zw4.js +0 -1
  202. package/payload/server/public/assets/pie-ZZUOXDRM-BvtPeMQY.js +0 -1
  203. package/payload/server/public/assets/radar-PYXPWWZC-D2UXvQgn.js +0 -1
  204. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Ur4eM6rb.js +0 -1
  205. package/payload/server/public/assets/treeView-SZITEDCU-0dE7FvM2.js +0 -1
  206. package/payload/server/public/assets/treemap-W4RFUUIX-BrwlXpr5.js +0 -1
  207. package/payload/server/public/assets/useSubAccountSwitcher-kwhG-aJj.css +0 -1
  208. package/payload/server/public/assets/wardley-RL74JXVD-CO9HdfJ-.js +0 -1
  209. /package/payload/server/public/assets/{_baseFor-BBkmqPEk.js → _baseFor-CMWvz0uA.js} +0 -0
  210. /package/payload/server/public/assets/{array-Bjtb2C_5.js → array-Cny_NT6T.js} +0 -0
  211. /package/payload/server/public/assets/{cytoscape.esm-B1dQ664k.js → cytoscape.esm-De0CCmB2.js} +0 -0
  212. /package/payload/server/public/assets/{defaultLocale-iwYA7ne8.js → defaultLocale-BahRht8U.js} +0 -0
  213. /package/payload/server/public/assets/{dist-CLmrZbY7.js → dist-C9D_xz81.js} +0 -0
  214. /package/payload/server/public/assets/{init-CxnBAgcf.js → init-DoIvjoJ_.js} +0 -0
  215. /package/payload/server/public/assets/{katex-DojHoLIr.js → katex-Bfn1OZEl.js} +0 -0
  216. /package/payload/server/public/assets/{path-JZiojYzQ.js → path-CTezU8L5.js} +0 -0
  217. /package/payload/server/public/assets/{preload-helper-CT1Z6Pdu.js → preload-helper-D_sPnjeL.js} +0 -0
  218. /package/payload/server/public/assets/{rough.esm-D5NinLFK.js → rough.esm-BJo4pvXu.js} +0 -0
  219. /package/payload/server/public/assets/{src-DQ0MSD6q.js → src-BTKk8KAG.js} +0 -0
  220. /package/payload/server/public/assets/{useSubAccountSwitcher-DotTrvX3.js → useSubAccountSwitcher-Q941cZYV.js} +0 -0
@@ -0,0 +1,103 @@
1
+ # Task 1910 — Two-way portal file exchange (design)
2
+
3
+ Design for [`.tasks/1910-two-way-portal-file-exchange.md`](../../../../.tasks/1910-two-way-portal-file-exchange.md). Operator decision 2026-07-22: the data portal becomes a two-way folder exchange, reversing the one-way scope decisions of Tasks 1831, 1905 and 1906.
4
+
5
+ ## The problem in one line
6
+
7
+ Today the portal is two stores that never meet: a flat, destination-less R2 upload area the client writes to, and a read-only device folder index the client browses. Neither can reach the other.
8
+
9
+ ## Manifest state machine
10
+
11
+ Three new columns on `manifest`: `targetPath` (the exposed folder chosen at upload, empty means untargeted), `devicePath` (where the bytes actually landed, written only after a verified device write, so its presence *is* the proof the move happened), and `deleted` (the client asked to withdraw a file that has already moved).
12
+
13
+ | State | Columns | Bytes live in | Uploads panel |
14
+ |---|---|---|---|
15
+ | In transit | `ingested=0`, `devicePath=''` | R2 | shown, downloads from R2 |
16
+ | Moved | `ingested=1`, `devicePath` set, R2 object gone | device | shown only when the file is not reachable in the folder tree |
17
+ | Withdrawn | `deleted=1` | device, pending removal | hidden |
18
+
19
+ **One listing rule:** the uploads panel shows a row when the bytes are still in R2, or when the moved file is not reachable in the folder tree. A targeted file therefore leaves the panel and appears in its folder; an untargeted file stays in the panel and downloads through the device. No file is ever listed twice, and no file becomes unreachable.
20
+
21
+ `devicePath` rather than a boolean is deliberate: a boolean would say a move happened without saying where, and the audit's `unpublishedRouted` check needs the path to compare against the published index.
22
+
23
+ **Withdrawal ends in row deletion, not a tombstone.** Once the device file is confirmed absent the row is removed. A tombstone would grow the manifest without bound and force every listing read to filter it, and the R2 object is already gone, so the row describes nothing.
24
+
25
+ ### Serving a moved untargeted file
26
+
27
+ A moved untargeted file sits at `uploads/<ownerId>/<filename>`, and `uploads` is deliberately never exposed (`schema-exposed-dirs.mjs:9-14`). `resolveFetchTarget` refuses any path whose top segment is outside the exposed set (`portal-fetch.ts:182`), and the signed message carries `accountId`, `relPath` and an expiry but no owner (`portal-fetch.ts:56`), so as it stands the device would both refuse the path and be unable to tell whose uploads folder was asked for.
28
+
29
+ Two link types with two distinct signed messages resolve this:
30
+
31
+ | Link type | Signed message | Device admission rule |
32
+ |---|---|---|
33
+ | Exposed-folder file | `accountId \n relPath \n exp` (unchanged) | top segment ∈ exposed set |
34
+ | Own-upload file | `accountId \n uploads \n ownerId \n relPath \n exp` | path is exactly `uploads/<signed ownerId>/…` |
35
+
36
+ The owner is inside the HMAC, so a portal cannot mint a link into another person's upload folder, and the device still decides admission itself rather than trusting the path. `uploads/` gains no exposure to the folder tree; only a link naming its own owner reaches it.
37
+
38
+ Two message shapes rather than one extended shape, because the exposed-folder message is unchanged and an already-deployed portal never mints the second type. Device and portal redeploy at different times (installer publish versus `site-deploy`), so a single extended message would break every existing download in the window between them.
39
+
40
+ ## Upload key
41
+
42
+ `ownerId/targetPath/filename`, collapsing to `ownerId/filename` when untargeted.
43
+
44
+ The target must be in the key. With a flat `ownerId/filename` key, the same filename dropped into two different folders collides on `objectKey UNIQUE`: the upsert would overwrite the first object, reset `ingested`, and the first file would never land. `authorizeKey` (`_lib/authorize.ts:22-32`) already admits deeper keys, rejecting only `..` and a leading separator, so the owner-isolation gate is unchanged by this.
45
+
46
+ Same owner, same folder, same filename still upserts, which is success criterion 7's replace case.
47
+
48
+ ## Target validation, and where the boundary actually is
49
+
50
+ A target is legal when it passes the person's grant (`grantAllows`, `_lib/session.ts:87`) **and** carries a folder row (`isDir=1`) in the published `directory` index for that account.
51
+
52
+ This means you can only drop where you can see, which introduces no new permission concept: the set of legal upload targets is exactly the set of folders already rendered to that person. An empty target is always legal.
53
+
54
+ **The portal check is convenience; the device check is the boundary.** The pull re-derives the exposed set itself through `resolveExposedDirs`, refusing anything outside it, the same two-ended pattern `portal-fetch.ts` uses for signed downloads. A compromised portal cannot route a file into a folder the device does not expose. The two ends are pinned to agree by a parity test over one shared fixture set, mirroring the existing HMAC parity test.
55
+
56
+ Refusal fails closed: the file stays pending, the refusal is logged with the exact failing segment, and it is never silently rerouted to the default. A silent reroute would put a client's file somewhere they did not choose and could not find.
57
+
58
+ ## Large uploads
59
+
60
+ The client slices anything above one part into 25 MiB pieces against an R2 multipart session; files at or below one part keep today's single request. The cap is 1 GiB, checked at session creation against the declared size and again at completion against the summed parts.
61
+
62
+ Slicing is on the client because the ceiling is the isolate: an upload is read wholly into Function memory (`upload.ts:137`), which is why 25 MiB was chosen in the first place (`upload.ts:8-15`). Parts preserve that bound exactly while removing the total-size limit. Cloudflare's proxied-body cap is not the constraint here; the portal is on Pages, not behind the tunnel that bounds the admin `/data` page (Task 1174).
63
+
64
+ ## Atomic index replace
65
+
66
+ `directory` gains a `generation` column and a per-account pointer table. The push writes rows at the next generation, flips the pointer in one statement, then deletes superseded rows.
67
+
68
+ The flip is the atomic point, so a listing racing a push sees the old tree or the new one, never a half-built one. Cleanup afterwards need not be atomic because nothing reads a superseded generation. This supersedes backlog Task 1842, which recorded the delete-then-insert window as an open defect; at 60 second cadence that window would otherwise be hit sixty times more often than at hourly.
69
+
70
+ ## Cadence
71
+
72
+ The index push becomes a 60 second loop in the admin server's loop registry, beside the pull that already runs there. The scheduling heartbeat's hourly gate and its `auditPortalIndexPush` are retired.
73
+
74
+ That heartbeat spawn is the path whose own header records it has "never been observed running on a device" (`portal-index-push.mjs:11-13`). Moving the push into the loop registry replaces an unobserved spawn with the mechanism the pull demonstrably uses, and removes the hourly gate that made the client's tree stale by up to two hours. Importing across the tree boundary is precedented: `portal-fetch.ts:22` already imports `schema-exposed-dirs.mjs` from the plugins tree. The script stays runnable standalone.
75
+
76
+ ## Audit
77
+
78
+ The five-minute `[data-portal-audit]` gains four fields, each answering a failure that emits no event of its own:
79
+
80
+ - `lastPushAgeSec` — the push stopped running. Healthy under 180.
81
+ - `unmovedObjects` — an R2 object survived its own pull, so the move leaked.
82
+ - `deletePendingRows` — a withdrawal never reached the device.
83
+ - `unpublishedRouted` — a routed file landed somewhere the index never published, so the client cannot see what they uploaded.
84
+
85
+ Enumeration becomes the union of accounts presenting a config and accounts with a prior push record, reporting `config-absent` rather than falling silent. That is Task 1901's fix, folded in here because this task retires the audit 1901 would have patched.
86
+
87
+ ## Download routing
88
+
89
+ `/api/download?key=` keeps serving R2 bytes while the row is in transit. Once the row has moved the object is gone, so the same request mints an own-upload signed link and 302s to the device, which is what keeps criterion 5 true without the client learning that the bytes changed home.
90
+
91
+ ## Client
92
+
93
+ Folder rows and the open listing become drop targets with a drop state. The picker takes multiple files and a multi-file drop uploads each in turn. Upload rows gain `DownloadURL` drag-out, matching what device rows already have (`portal.js:226-233`). Uploads show per-file progress and distinct messages per failure class, replacing today's single "Upload failed." for every status. The page re-reads every 60 seconds while its tab is visible.
94
+
95
+ Polling was rejected in Tasks 1885 and 1900 on the explicit reasoning that "a poll against an hourly tree is waste". The premise dies with the hourly push: against a 60 second tree the poll is the thing that makes a device-side change visible without the client clicking anything, which is success criterion 4.
96
+
97
+ ## Out of scope
98
+
99
+ Client deletion or rename of device-authored files the client did not upload; the trust boundary is that a client may withdraw their own file, not destroy a business record. Folder upload and zip download, both directions being files only. Portal-side folder creation, rename and move. The third D1 client (Task 1843). The admin `/data` page and Task 1174. Graph ingestion of pulled files, unchanged from Task 1906.
100
+
101
+ ## Dependency
102
+
103
+ Live acceptance is blocked until Task 1909 restores the quarantined `data-portal.json` on both sitedesk accounts; the portal has enumerated zero accounts since 2026-07-21T19:16:05Z. Code and unit verification do not depend on it.
@@ -60,6 +60,14 @@ export interface DataPortalRow {
60
60
  objectKey: string;
61
61
  ingested: number;
62
62
  uploadedAt: string;
63
+ /** Where the bytes landed on the device, set only after a verified write
64
+ * (Task 1910). Its presence IS the proof the move happened, which is what
65
+ * separates a healthy moved row from a phantom. Absent on a portal whose
66
+ * hand-run ALTER has not happened yet, which reads as "never moved". */
67
+ devicePath?: string;
68
+ /** 1 when the client has withdrawn an already-moved file and the device has
69
+ * not yet removed it. */
70
+ deleted?: number;
63
71
  }
64
72
  export interface DataPortalReconcile {
65
73
  /** DISTINCT keys, which is not the same quantity as the length of the list
@@ -80,6 +88,26 @@ export interface DataPortalReconcile {
80
88
  * excludes unparseable timestamps, so a backlog made entirely of them would
81
89
  * report a null age beside a zero count and read as an empty queue. */
82
90
  uningestedRows: number;
91
+ /** Objects still in R2 whose row says the bytes already reached the device
92
+ * (Task 1910). The move deletes the object after the claim commits, so a
93
+ * survivor is a leak. It emits nothing at request time — the pull has
94
+ * already returned and no later request touches the key — which is why it
95
+ * is counted here rather than logged somewhere. */
96
+ unmovedObjects: string[];
97
+ /** Withdrawals the device has not carried out yet. Healthy is 0; a number
98
+ * that persists across cycles is a withdrawal that will never complete. */
99
+ deletePendingRows: number;
100
+ /** Age of the oldest pending withdrawal, so a stuck one is dateable rather
101
+ * than merely present. Null when none are pending. */
102
+ oldestDeletePendingHrs: number | null;
103
+ /** Files routed into an exposed folder that the published index does not
104
+ * carry. The client uploaded into a folder, the file landed, and the tree
105
+ * still does not show it.
106
+ *
107
+ * NULL when the index was not supplied, never 0: an unread index is "not
108
+ * measured", and rendering it as zero would let a failed read present as a
109
+ * clean bill of health. */
110
+ unpublishedRouted: number | null;
83
111
  }
84
112
  /** Pure over two lists and an injected clock, so the age arithmetic is
85
113
  * deterministic under test rather than dependent on when the suite runs.
@@ -87,5 +115,5 @@ export interface DataPortalReconcile {
87
115
  * Unlike its two siblings this takes lists rather than callbacks: both sides
88
116
  * are read per account by a caller that must catch each independently, so
89
117
  * there is no fan-out here to carry a concurrency contract. */
90
- export declare function reconcileDataPortal(objects: DataPortalObject[], rows: DataPortalRow[], nowMs: number): DataPortalReconcile;
118
+ export declare function reconcileDataPortal(objects: DataPortalObject[], rows: DataPortalRow[], nowMs: number, publishedPaths?: Set<string>): DataPortalReconcile;
91
119
  //# sourceMappingURL=audit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,oBAAoB,CAAC;AAErF,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;;;;;;;;;;;;uDAiBuD;AACvD,MAAM,WAAW,SAAS;IACxB,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1B,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1B,yEAAyE;IACzE,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,mBAAmB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CAC9F;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,KAAK,EAAE,CAAA;CAAE,CAAC,CA8BpF;AAmBD;;;;;;2CAM2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChC,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAclF;AAoBD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;uEAKmE;IACnE,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB;4DACwD;IACxD,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;4EAGwE;IACxE,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;gEAKgE;AAChE,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,gBAAgB,EAAE,EAC3B,IAAI,EAAE,aAAa,EAAE,EACrB,KAAK,EAAE,MAAM,GACZ,mBAAmB,CA8BrB"}
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,oBAAoB,CAAC;AAErF,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;;;;;;;;;;;;uDAiBuD;AACvD,MAAM,WAAW,SAAS;IACxB,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1B,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1B,yEAAyE;IACzE,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,mBAAmB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CAC9F;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,KAAK,EAAE,CAAA;CAAE,CAAC,CA8BpF;AAmBD;;;;;;2CAM2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChC,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAclF;AAoBD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB;;;6EAGyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;8BAC0B;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;uEAKmE;IACnE,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB;4DACwD;IACxD,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;4EAGwE;IACxE,cAAc,EAAE,MAAM,CAAC;IACvB;;;;wDAIoD;IACpD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB;gFAC4E;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAC1B;2DACuD;IACvD,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC;;;;;;gCAM4B;IAC5B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED;;;;;gEAKgE;AAChE,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,gBAAgB,EAAE,EAC3B,IAAI,EAAE,aAAa,EAAE,EACrB,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B,mBAAmB,CA2DrB"}
@@ -61,9 +61,15 @@ async function reconcilePages(deps) {
61
61
  * Unlike its two siblings this takes lists rather than callbacks: both sides
62
62
  * are read per account by a caller that must catch each independently, so
63
63
  * there is no fan-out here to carry a concurrency contract. */
64
- function reconcileDataPortal(objects, rows, nowMs) {
64
+ function reconcileDataPortal(objects, rows, nowMs, publishedPaths) {
65
65
  const objectKeys = new Set(objects.map((o) => o.key));
66
66
  const rowKeys = new Set(rows.map((r) => r.objectKey));
67
+ // A moved row's bytes are deliberately NOT in R2, so it is neither a phantom
68
+ // nor an orphan — it is the healthy end state of the exchange. Splitting the
69
+ // row set here is what keeps the pre-existing counts meaning what they meant
70
+ // before the move existed.
71
+ const moved = rows.filter((r) => Boolean(r.devicePath));
72
+ const movedKeys = new Set(moved.map((r) => r.objectKey));
67
73
  // Date.parse of a truthy non-ISO value is NaN, which slips past a `??` guard
68
74
  // and renders as `oldestUningestedHrs=NaN` — the defect the availability
69
75
  // loop's snapshotAgeMs already had to fix. Unparseable rows are excluded from
@@ -80,13 +86,30 @@ function reconcileDataPortal(objects, rows, nowMs) {
80
86
  // goes dark once the backlog it is watching grows large. The throw would also
81
87
  // escape the caller's per-side catches and cost every later account its line.
82
88
  const oldestMs = uningestedMs.reduce((min, ms) => (ms < min ? ms : min), Infinity);
89
+ const pendingDeletes = rows.filter((r) => r.deleted === 1);
90
+ const pendingDeleteMs = pendingDeletes
91
+ .map((r) => Date.parse(r.uploadedAt))
92
+ .filter((ms) => !Number.isNaN(ms));
93
+ // Reduced rather than spread, for the same stack-overflow reason as above.
94
+ const oldestPendingMs = pendingDeleteMs.reduce((min, ms) => (ms < min ? ms : min), Infinity);
83
95
  return {
84
96
  distinctObjects: objectKeys.size,
85
97
  distinctRows: rowKeys.size,
86
98
  orphanObjects: [...objectKeys].filter((k) => !rowKeys.has(k)),
87
- phantomRows: [...rowKeys].filter((k) => !objectKeys.has(k)),
99
+ // A moved row is excluded: its object is SUPPOSED to be gone, so counting
100
+ // it would manufacture a defect on every healthy exchange.
101
+ phantomRows: [...rowKeys].filter((k) => !objectKeys.has(k) && !movedKeys.has(k)),
88
102
  oldestUningestedHrs: uningestedMs.length === 0 ? null : (nowMs - oldestMs) / 3_600_000,
89
103
  uningestedRows: uningested.length,
104
+ unmovedObjects: [...movedKeys].filter((k) => objectKeys.has(k)),
105
+ deletePendingRows: pendingDeletes.length,
106
+ oldestDeletePendingHrs: pendingDeleteMs.length === 0 ? null : (nowMs - oldestPendingMs) / 3_600_000,
107
+ unpublishedRouted: publishedPaths === undefined
108
+ ? null
109
+ : moved.filter((r) =>
110
+ // uploads/ is never published by design, so only a file routed
111
+ // into an exposed folder can be "unpublished".
112
+ !r.devicePath.startsWith("uploads/") && !publishedPaths.has(r.devicePath)).length,
90
113
  };
91
114
  }
92
115
  //# sourceMappingURL=audit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"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"}
@@ -35,6 +35,19 @@ export interface CfExec {
35
35
  uuid: string;
36
36
  }>;
37
37
  d1Query(name: string, sql: string): Promise<unknown>;
38
+ /**
39
+ * One statement with BOUND parameters, over the D1 HTTP API (Task 1910).
40
+ *
41
+ * `d1Query` above takes raw SQL and spawns wrangler per statement, so every
42
+ * caller must interpolate its values. The portal pull writes client-supplied
43
+ * filenames and paths, which must never be concatenated into SQL — a UUID
44
+ * gate on one field is not a substitute for binding.
45
+ *
46
+ * This is deliberately NOT the convergence of the three D1 clients (Task
47
+ * 1843); it is one bound path for the callers that need one, added where the
48
+ * house credential already lives so no second credential path appears.
49
+ */
50
+ d1Exec(name: string, sql: string, params?: unknown[]): Promise<unknown>;
38
51
  r2List(): Promise<{
39
52
  name: string;
40
53
  }[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"cf-exec.d.ts","sourceRoot":"","sources":["../src/cf-exec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cf-exec.d.ts","sourceRoot":"","sources":["../src/cf-exec.ts"],"names":[],"mappings":"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"}
@@ -179,6 +179,28 @@ function makeCfExec(cred, run = defaultRun, fetchFn = defaultFetch) {
179
179
  const { stdout } = await run("npx", ["wrangler", "d1", "execute", name, "--remote", "--json", "--command", sql], env);
180
180
  return parseJson(stdout, "d1 execute");
181
181
  },
182
+ async d1Exec(name, sql, params = []) {
183
+ // The database is addressed by uuid, so the name is resolved first. An
184
+ // exact name match, never "the first result": `?name=` is a filter whose
185
+ // matching rule is undocumented, and taking position on trust would run
186
+ // these statements against a near-named database.
187
+ const listUrl = `https://api.cloudflare.com/client/v4/accounts/${cred.accountId}` +
188
+ `/d1/database?name=${encodeURIComponent(name)}`;
189
+ const { parsed: listed } = await cfApiJson(fetchFn, listUrl, { method: "GET", headers: { Authorization: `Bearer ${cred.apiToken}` } }, "d1 database lookup");
190
+ const hit = (listed.result ?? []).find((d) => d.name === name);
191
+ if (!hit || typeof hit.uuid !== "string") {
192
+ throw new Error(`storage-broker: no D1 database named "${name}"`);
193
+ }
194
+ const { parsed } = await cfApiJson(fetchFn, `https://api.cloudflare.com/client/v4/accounts/${cred.accountId}/d1/database/${hit.uuid}/query`, {
195
+ method: "POST",
196
+ headers: {
197
+ Authorization: `Bearer ${cred.apiToken}`,
198
+ "Content-Type": "application/json",
199
+ },
200
+ body: JSON.stringify({ sql, params }),
201
+ }, "d1 query");
202
+ return parsed.result;
203
+ },
182
204
  async r2List() {
183
205
  // `wrangler r2 bucket list` has no --json flag and emits human prose, so
184
206
  // it can neither be parsed nor honour the "never grep a CLI's prose"
@@ -1 +1 @@
1
- {"version":3,"file":"cf-exec.js","sourceRoot":"","sources":["../src/cf-exec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cf-exec.js","sourceRoot":"","sources":["../src/cf-exec.ts"],"names":[],"mappings":"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"}
@@ -151,6 +151,14 @@ export interface DataPortalRow {
151
151
  objectKey: string;
152
152
  ingested: number;
153
153
  uploadedAt: string;
154
+ /** Where the bytes landed on the device, set only after a verified write
155
+ * (Task 1910). Its presence IS the proof the move happened, which is what
156
+ * separates a healthy moved row from a phantom. Absent on a portal whose
157
+ * hand-run ALTER has not happened yet, which reads as "never moved". */
158
+ devicePath?: string;
159
+ /** 1 when the client has withdrawn an already-moved file and the device has
160
+ * not yet removed it. */
161
+ deleted?: number;
154
162
  }
155
163
 
156
164
  export interface DataPortalReconcile {
@@ -172,6 +180,26 @@ export interface DataPortalReconcile {
172
180
  * excludes unparseable timestamps, so a backlog made entirely of them would
173
181
  * report a null age beside a zero count and read as an empty queue. */
174
182
  uningestedRows: number;
183
+ /** Objects still in R2 whose row says the bytes already reached the device
184
+ * (Task 1910). The move deletes the object after the claim commits, so a
185
+ * survivor is a leak. It emits nothing at request time — the pull has
186
+ * already returned and no later request touches the key — which is why it
187
+ * is counted here rather than logged somewhere. */
188
+ unmovedObjects: string[];
189
+ /** Withdrawals the device has not carried out yet. Healthy is 0; a number
190
+ * that persists across cycles is a withdrawal that will never complete. */
191
+ deletePendingRows: number;
192
+ /** Age of the oldest pending withdrawal, so a stuck one is dateable rather
193
+ * than merely present. Null when none are pending. */
194
+ oldestDeletePendingHrs: number | null;
195
+ /** Files routed into an exposed folder that the published index does not
196
+ * carry. The client uploaded into a folder, the file landed, and the tree
197
+ * still does not show it.
198
+ *
199
+ * NULL when the index was not supplied, never 0: an unread index is "not
200
+ * measured", and rendering it as zero would let a failed read present as a
201
+ * clean bill of health. */
202
+ unpublishedRouted: number | null;
175
203
  }
176
204
 
177
205
  /** Pure over two lists and an injected clock, so the age arithmetic is
@@ -184,10 +212,18 @@ export function reconcileDataPortal(
184
212
  objects: DataPortalObject[],
185
213
  rows: DataPortalRow[],
186
214
  nowMs: number,
215
+ publishedPaths?: Set<string>,
187
216
  ): DataPortalReconcile {
188
217
  const objectKeys = new Set(objects.map((o) => o.key));
189
218
  const rowKeys = new Set(rows.map((r) => r.objectKey));
190
219
 
220
+ // A moved row's bytes are deliberately NOT in R2, so it is neither a phantom
221
+ // nor an orphan — it is the healthy end state of the exchange. Splitting the
222
+ // row set here is what keeps the pre-existing counts meaning what they meant
223
+ // before the move existed.
224
+ const moved = rows.filter((r) => Boolean(r.devicePath));
225
+ const movedKeys = new Set(moved.map((r) => r.objectKey));
226
+
191
227
  // Date.parse of a truthy non-ISO value is NaN, which slips past a `??` guard
192
228
  // and renders as `oldestUningestedHrs=NaN` — the defect the availability
193
229
  // loop's snapshotAgeMs already had to fix. Unparseable rows are excluded from
@@ -206,12 +242,34 @@ export function reconcileDataPortal(
206
242
  // escape the caller's per-side catches and cost every later account its line.
207
243
  const oldestMs = uningestedMs.reduce((min, ms) => (ms < min ? ms : min), Infinity);
208
244
 
245
+ const pendingDeletes = rows.filter((r) => r.deleted === 1);
246
+ const pendingDeleteMs = pendingDeletes
247
+ .map((r) => Date.parse(r.uploadedAt))
248
+ .filter((ms) => !Number.isNaN(ms));
249
+ // Reduced rather than spread, for the same stack-overflow reason as above.
250
+ const oldestPendingMs = pendingDeleteMs.reduce((min, ms) => (ms < min ? ms : min), Infinity);
251
+
209
252
  return {
210
253
  distinctObjects: objectKeys.size,
211
254
  distinctRows: rowKeys.size,
212
255
  orphanObjects: [...objectKeys].filter((k) => !rowKeys.has(k)),
213
- phantomRows: [...rowKeys].filter((k) => !objectKeys.has(k)),
256
+ // A moved row is excluded: its object is SUPPOSED to be gone, so counting
257
+ // it would manufacture a defect on every healthy exchange.
258
+ phantomRows: [...rowKeys].filter((k) => !objectKeys.has(k) && !movedKeys.has(k)),
214
259
  oldestUningestedHrs: uningestedMs.length === 0 ? null : (nowMs - oldestMs) / 3_600_000,
215
260
  uningestedRows: uningested.length,
261
+ unmovedObjects: [...movedKeys].filter((k) => objectKeys.has(k)),
262
+ deletePendingRows: pendingDeletes.length,
263
+ oldestDeletePendingHrs:
264
+ pendingDeleteMs.length === 0 ? null : (nowMs - oldestPendingMs) / 3_600_000,
265
+ unpublishedRouted:
266
+ publishedPaths === undefined
267
+ ? null
268
+ : moved.filter(
269
+ (r) =>
270
+ // uploads/ is never published by design, so only a file routed
271
+ // into an exposed folder can be "unpublished".
272
+ !r.devicePath!.startsWith("uploads/") && !publishedPaths.has(r.devicePath!),
273
+ ).length,
216
274
  };
217
275
  }
@@ -53,6 +53,19 @@ export interface CfExec {
53
53
  d1List(): Promise<{ name: string; uuid: string }[]>;
54
54
  d1Create(name: string): Promise<{ uuid: string }>;
55
55
  d1Query(name: string, sql: string): Promise<unknown>;
56
+ /**
57
+ * One statement with BOUND parameters, over the D1 HTTP API (Task 1910).
58
+ *
59
+ * `d1Query` above takes raw SQL and spawns wrangler per statement, so every
60
+ * caller must interpolate its values. The portal pull writes client-supplied
61
+ * filenames and paths, which must never be concatenated into SQL — a UUID
62
+ * gate on one field is not a substitute for binding.
63
+ *
64
+ * This is deliberately NOT the convergence of the three D1 clients (Task
65
+ * 1843); it is one bound path for the callers that need one, added where the
66
+ * house credential already lives so no second credential path appears.
67
+ */
68
+ d1Exec(name: string, sql: string, params?: unknown[]): Promise<unknown>;
56
69
  r2List(): Promise<{ name: string }[]>;
57
70
  r2Create(name: string): Promise<void>;
58
71
  r2ObjectList(bucket: string, prefix?: string): Promise<R2Object[]>;
@@ -278,6 +291,41 @@ export function makeCfExec(
278
291
  );
279
292
  return parseJson(stdout, "d1 execute");
280
293
  },
294
+ async d1Exec(name, sql, params = []) {
295
+ // The database is addressed by uuid, so the name is resolved first. An
296
+ // exact name match, never "the first result": `?name=` is a filter whose
297
+ // matching rule is undocumented, and taking position on trust would run
298
+ // these statements against a near-named database.
299
+ const listUrl =
300
+ `https://api.cloudflare.com/client/v4/accounts/${cred.accountId}` +
301
+ `/d1/database?name=${encodeURIComponent(name)}`;
302
+ const { parsed: listed } = await cfApiJson(
303
+ fetchFn,
304
+ listUrl,
305
+ { method: "GET", headers: { Authorization: `Bearer ${cred.apiToken}` } },
306
+ "d1 database lookup",
307
+ );
308
+ const hit = ((listed as { result?: { name?: string; uuid?: string }[] }).result ?? []).find(
309
+ (d) => d.name === name,
310
+ );
311
+ if (!hit || typeof hit.uuid !== "string") {
312
+ throw new Error(`storage-broker: no D1 database named "${name}"`);
313
+ }
314
+ const { parsed } = await cfApiJson(
315
+ fetchFn,
316
+ `https://api.cloudflare.com/client/v4/accounts/${cred.accountId}/d1/database/${hit.uuid}/query`,
317
+ {
318
+ method: "POST",
319
+ headers: {
320
+ Authorization: `Bearer ${cred.apiToken}`,
321
+ "Content-Type": "application/json",
322
+ },
323
+ body: JSON.stringify({ sql, params }),
324
+ },
325
+ "d1 query",
326
+ );
327
+ return (parsed as { result?: unknown }).result;
328
+ },
281
329
  async r2List() {
282
330
  // `wrangler r2 bucket list` has no --json flag and emits human prose, so
283
331
  // it can neither be parsed nor honour the "never grep a CLI's prose"
@@ -59,10 +59,10 @@ named. Derive the allowlist from the skills the agent owns: read each skill, lis
59
59
  calls, take the union, and stop there. A vertical agent never inherits a horizontal agent's
60
60
  whole surface. Do not add a tool "in case"; an unused tool is a boundary you gave away.
61
61
 
62
- ## The body: identity, then the three-part contract
62
+ ## The body: identity, then the contract sections
63
63
 
64
64
  After the frontmatter the body opens with the agent's doctrine and identity (who it is, what it
65
- owns, and the standing git-write boundary the roster shares), then the three contract sections
65
+ owns, and the standing git-write boundary the roster shares), then the contract sections
66
66
  in this exact order and with these exact headings:
67
67
 
68
68
  ### Output contract
@@ -88,6 +88,35 @@ it:
88
88
  A headless agent with no human-in-the-loop step (a classifier, a rewriter) carries the
89
89
  untrusted-input line alone; review gates do not apply where there is no operator checkpoint.
90
90
 
91
+ ### Grounding
92
+
93
+ Heading `## Grounding`, last section in the file. Two sentences, the same wording in every agent
94
+ so a reviewer and a test can grep them, exactly as the untrusted-input line is. Copy them
95
+ character for character:
96
+
97
+ > Every factual claim you make carries a source you can name and, when it is time sensitive, the date you observed it; a fact you cannot source, or a date you cannot see, is a gap you flag, never one you supply from training recall.
98
+
99
+ > The only source for an attribute of a named person, the pronoun you use for them included, is that person's record; an attribute you cannot read there is one you leave out, never one you assume.
100
+
101
+ They live in their own section rather than inside the Output contract because they are
102
+ behavioural rules, not part of any deliverable. Several agents fix an exact machine-parseable
103
+ reply shape in their Output contract, and prose inside that section would contradict it.
104
+
105
+ The second sentence is worded so that an agent holding no read tool satisfies it by leaving the
106
+ attribute out. It never tells such an agent to attempt a lookup its own prompt forbids. That is
107
+ why it names the record as the only source rather than instructing a read.
108
+
109
+ Two further clauses bind the Output contract itself. **Recency**, universal: a time-sensitive
110
+ claim carries the date it was observed, and a date the agent cannot see is one it flags, never
111
+ one it infers. **Corroboration**, for agents whose deliverable is a pattern, a theme, a trend, a
112
+ signal: the agent names the independent sources behind it and does not report one as established
113
+ on a single occurrence. Corroboration is authoring guidance enforced by review, not by the gate,
114
+ because the subset it applies to cannot be detected statically.
115
+
116
+ `agent-grounding-drift.test.ts` fails if any shipped prompt carries either sentence anything
117
+ other than exactly once, and fails if the number of prompts it inspected is not the number it
118
+ expects. A new agent that skips them does not ship.
119
+
91
120
  ## Skills owned
92
121
 
93
122
  The body closes with the skills the agent owns, as a table: the skill, the plugin it lives in,
@@ -97,7 +126,7 @@ skill-builder flow, so the agent and its skills land together.
97
126
 
98
127
  ## Why this shape
99
128
 
100
- A fixed contract makes every agent legible. An operator reading the file knows in three sections
101
- what it produces, where it pauses for them, and that it will not act on text it was handed as
102
- data. A reviewer can check the same three things by grep. The reference agents prove this costs
129
+ A fixed contract makes every agent legible. An operator reading the file knows what it produces,
130
+ where it pauses for them, that it will not act on text it was handed as data, and what it may
131
+ treat as a source. A reviewer can check each of them by grep. The reference agents prove this costs
103
132
  about 320 words and is worth standardising.