@rubytech/create-maxy-code 0.1.500 → 0.1.502

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 (194) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/docs/superpowers/plans/2026-07-25-task-1974-uploads-intake-inbox.md +235 -0
  3. package/payload/platform/docs/superpowers/plans/2026-07-25-task-1976-intra-folder-hygiene.md +215 -0
  4. package/payload/platform/lib/graph-style/dist/index.d.ts +9 -0
  5. package/payload/platform/lib/graph-style/dist/index.d.ts.map +1 -1
  6. package/payload/platform/lib/graph-style/dist/index.js +152 -6
  7. package/payload/platform/lib/graph-style/dist/index.js.map +1 -1
  8. package/payload/platform/lib/graph-style/src/__tests__/caption-coverage.test.ts +69 -0
  9. package/payload/platform/lib/graph-style/src/__tests__/coverage-source.ts +73 -0
  10. package/payload/platform/lib/graph-style/src/__tests__/icons.test.ts +20 -3
  11. package/payload/platform/lib/graph-style/src/index.ts +166 -5
  12. package/payload/platform/plugins/admin/PLUGIN.md +1 -0
  13. package/payload/platform/plugins/admin/skills/agent-builder/SKILL.md +15 -0
  14. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +52 -2
  15. package/payload/platform/plugins/admin/skills/summarise/SKILL.md +37 -0
  16. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +7 -0
  17. package/payload/platform/plugins/docs/references/admin-ui.md +50 -0
  18. package/payload/platform/plugins/docs/references/internals.md +1 -1
  19. package/payload/platform/plugins/docs/references/summarise-skill.md +7 -0
  20. package/payload/platform/templates/account-schema/SCHEMA.md +36 -1
  21. package/payload/platform/templates/specialists/agents/data-manager.md +4 -2
  22. package/payload/server/public/activity.html +6 -6
  23. package/payload/server/public/assets/AdminLoginScreens-Bv_bKKeL.js +1 -0
  24. package/payload/server/public/assets/AdminShell-Gq8DU_ig.js +2 -0
  25. package/payload/server/public/assets/{activity-CKUYOLd2.js → activity-DZFYDHNA.js} +1 -1
  26. package/payload/server/public/assets/admin-DLUOixl6.js +1 -0
  27. package/payload/server/public/assets/{arc-CpWWSum8.js → arc-CvlzUHOf.js} +1 -1
  28. package/payload/server/public/assets/architecture-YZFGNWBL-BQc779DH.js +1 -0
  29. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-D2EzaII0.js → architectureDiagram-Q4EWVU46-I1Hs0RJA.js} +1 -1
  30. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-8kDpaNSZ.js → blockDiagram-DXYQGD6D-Df5jTGtl.js} +1 -1
  31. package/payload/server/public/assets/{bot-DESMpxSQ.js → bot-CrEhKW1l.js} +1 -1
  32. package/payload/server/public/assets/{browser-CpLq_DIo.js → browser-Bt4-LKLU.js} +1 -1
  33. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-CbwmZpK3.js → c4Diagram-AHTNJAMY-B6WY5IDv.js} +1 -1
  34. package/payload/server/public/assets/{calendar-ClOwyuz-.js → calendar-D0qIvLUR.js} +1 -1
  35. package/payload/server/public/assets/channel-AqnC3SHu.js +1 -0
  36. package/payload/server/public/assets/chat-geSkx0j2.js +1 -0
  37. package/payload/server/public/assets/chevron-left-CQ8rcBoO.js +1 -0
  38. package/payload/server/public/assets/chevron-right-CSRSqblN.js +1 -0
  39. package/payload/server/public/assets/{chunk-2KRD3SAO-PFheZ9mw.js → chunk-2KRD3SAO-BsIIFDkc.js} +1 -1
  40. package/payload/server/public/assets/{chunk-336JU56O-CCFOp5VK.js → chunk-336JU56O-j9z1VtyC.js} +2 -2
  41. package/payload/server/public/assets/chunk-426QAEUC-CO02gU5d.js +1 -0
  42. package/payload/server/public/assets/{chunk-4BX2VUAB-Hz4JWOf2.js → chunk-4BX2VUAB-C9i7prxq.js} +1 -1
  43. package/payload/server/public/assets/{chunk-4TB4RGXK-4xeV0s85.js → chunk-4TB4RGXK-DH0QVGcv.js} +1 -1
  44. package/payload/server/public/assets/{chunk-55IACEB6-4QKgBpoh.js → chunk-55IACEB6-Dnd_YCPA.js} +1 -1
  45. package/payload/server/public/assets/{chunk-5FUZZQ4R-ms3K6Z5z.js → chunk-5FUZZQ4R-D5sSz3yN.js} +1 -1
  46. package/payload/server/public/assets/{chunk-5PVQY5BW-CIC4GIGi.js → chunk-5PVQY5BW-CJrwWjAT.js} +1 -1
  47. package/payload/server/public/assets/{chunk-67CJDMHE-B-XrWVmV.js → chunk-67CJDMHE-SjP6_hUw.js} +1 -1
  48. package/payload/server/public/assets/{chunk-7N4EOEYR-C7ECOUYQ.js → chunk-7N4EOEYR-fAuhVJD0.js} +1 -1
  49. package/payload/server/public/assets/{chunk-AA7GKIK3-DOZ6Fxwk.js → chunk-AA7GKIK3-DZxa7KVg.js} +1 -1
  50. package/payload/server/public/assets/{chunk-BSJP7CBP-4cJ_b0c6.js → chunk-BSJP7CBP-DjeG3eQ-.js} +1 -1
  51. package/payload/server/public/assets/{chunk-CIAEETIT--mhZipWM.js → chunk-CIAEETIT-RYQULNJm.js} +1 -1
  52. package/payload/server/public/assets/{chunk-EDXVE4YY-jZpVwob_.js → chunk-EDXVE4YY-Cahapnon.js} +1 -1
  53. package/payload/server/public/assets/{chunk-ENJZ2VHE-Nn-p-xIA.js → chunk-ENJZ2VHE-1146X1L4.js} +1 -1
  54. package/payload/server/public/assets/{chunk-FMBD7UC4-DyNpcKOS.js → chunk-FMBD7UC4-BCFumtcP.js} +1 -1
  55. package/payload/server/public/assets/{chunk-FOC6F5B3-C0P8q1uz.js → chunk-FOC6F5B3-CkrtX8Zt.js} +1 -1
  56. package/payload/server/public/assets/{chunk-ICPOFSXX-CdXQ5SfI.js → chunk-ICPOFSXX-Ba1y3DaW.js} +2 -2
  57. package/payload/server/public/assets/{chunk-K5T4RW27-BVZJKKsT.js → chunk-K5T4RW27-CF-PI3uQ.js} +1 -1
  58. package/payload/server/public/assets/{chunk-KGLVRYIC-QlVWTe0V.js → chunk-KGLVRYIC-SFFC6ZC-.js} +1 -1
  59. package/payload/server/public/assets/{chunk-LIHQZDEY-CpGVZutP.js → chunk-LIHQZDEY-DbOLEP4R.js} +1 -1
  60. package/payload/server/public/assets/{chunk-ORNJ4GCN-WVcS6fUC.js → chunk-ORNJ4GCN-VB963bkN.js} +1 -1
  61. package/payload/server/public/assets/{chunk-OYMX7WX6-B7hiSTed.js → chunk-OYMX7WX6-DWYY1pQa.js} +1 -1
  62. package/payload/server/public/assets/chunk-QZHKN3VN-BiFMbK8t.js +1 -0
  63. package/payload/server/public/assets/{chunk-U2HBQHQK-DJPnZxGy.js → chunk-U2HBQHQK-DAH1diYP.js} +1 -1
  64. package/payload/server/public/assets/{chunk-X2U36JSP-DilBs1Yc.js → chunk-X2U36JSP-Dmw9coXz.js} +1 -1
  65. package/payload/server/public/assets/{chunk-XPW4576I-B5-uyrJ0.js → chunk-XPW4576I-DaAUON1-.js} +1 -1
  66. package/payload/server/public/assets/{chunk-YZCP3GAM-BNO4z0Mv.js → chunk-YZCP3GAM-BUcfkEef.js} +1 -1
  67. package/payload/server/public/assets/{chunk-ZZ45TVLE-BzHMQpip.js → chunk-ZZ45TVLE-BLD-vFRO.js} +1 -1
  68. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BdRqzScB.js +1 -0
  69. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-ChPLgHbS.js +1 -0
  70. package/payload/server/public/assets/clock-B7Ba8AZL.js +1 -0
  71. package/payload/server/public/assets/clone-TKtrjWBC.js +1 -0
  72. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-3DWYmn1o.js → cose-bilkent-S5V4N54A-CoZX0uki.js} +1 -1
  73. package/payload/server/public/assets/{dagre-Cpy31xJW.js → dagre-Bmjs8zJA.js} +1 -1
  74. package/payload/server/public/assets/{dagre-KV5264BT-C8fyxHFd.js → dagre-KV5264BT-BZCP2wnq.js} +1 -1
  75. package/payload/server/public/assets/data-BdlGqjKM.js +1 -0
  76. package/payload/server/public/assets/{diagram-5BDNPKRD-ycyhnLvr.js → diagram-5BDNPKRD-8Nt9a4xX.js} +1 -1
  77. package/payload/server/public/assets/{diagram-G4DWMVQ6-BkeYicIt.js → diagram-G4DWMVQ6-vh5tcYqJ.js} +1 -1
  78. package/payload/server/public/assets/{diagram-MMDJMWI5-BcGZU-Q3.js → diagram-MMDJMWI5-DGf--jc8.js} +1 -1
  79. package/payload/server/public/assets/{diagram-TYMM5635-DuBDCFb_.js → diagram-TYMM5635-CsO7TIdw.js} +1 -1
  80. package/payload/server/public/assets/{dist-BYc_arNy.js → dist-cdnE4DqK.js} +1 -1
  81. package/payload/server/public/assets/{erDiagram-SMLLAGMA-DmkeOzvp.js → erDiagram-SMLLAGMA-4a78yV8_.js} +1 -1
  82. package/payload/server/public/assets/file-text-BpLcZKld.js +1 -0
  83. package/payload/server/public/assets/{flatten-QjnJ1Gcl.js → flatten-BtIc9jX7.js} +1 -1
  84. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-CkE-pjuB.js → flowDiagram-DWJPFMVM-BoQBXs6t.js} +1 -1
  85. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-Cjiy3kvE.js → ganttDiagram-T4ZO3ILL-CvzqwCC8.js} +1 -1
  86. package/payload/server/public/assets/gitGraph-7Q5UKJZL-DfcaTE9L.js +1 -0
  87. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-CsI4lKZm.js → gitGraphDiagram-UUTBAWPF-D_nBxay_.js} +1 -1
  88. package/payload/server/public/assets/graph-HB0199x-.js +51 -0
  89. package/payload/server/public/assets/graph-labels-Bx19ZYvJ.js +1 -0
  90. package/payload/server/public/assets/{graphlib-BkXxC6D5.js → graphlib-D0NdsKJI.js} +1 -1
  91. package/payload/server/public/assets/info-OMHHGYJF-CD-u6gw9.js +1 -0
  92. package/payload/server/public/assets/infoDiagram-42DDH7IO-C6gPQCvO.js +2 -0
  93. package/payload/server/public/assets/{isEmpty-BavJI9Cn.js → isEmpty-Bu4fZ8Kf.js} +1 -1
  94. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-D8lZtjRc.js → ishikawaDiagram-UXIWVN3A-auW-s0i0.js} +1 -1
  95. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-kLE7SiR_.js → journeyDiagram-VCZTEJTY-3Q6AWK4A.js} +1 -1
  96. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-ove6JuD3.js → kanban-definition-6JOO6SKY-B4MPFp98.js} +1 -1
  97. package/payload/server/public/assets/{line-CZMSoxM6.js → line-26MdeG5Z.js} +1 -1
  98. package/payload/server/public/assets/{linear-Be8IK9hK.js → linear-Dq9s_bDO.js} +1 -1
  99. package/payload/server/public/assets/{maximize-2-BbzPm7o8.js → maximize-2-BhR-Ec21.js} +1 -1
  100. package/payload/server/public/assets/{mermaid-parser.core-BBADqbnp.js → mermaid-parser.core-vLEpOXgf.js} +2 -2
  101. package/payload/server/public/assets/{mermaid.core-mH3N7K0I.js → mermaid.core-Durk4m6D.js} +3 -3
  102. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-BjwwwWil.js → mindmap-definition-QFDTVHPH-DOIg-TyG.js} +1 -1
  103. package/payload/server/public/assets/operator-DejfJlvi.js +1 -0
  104. package/payload/server/public/assets/{ordinal-BHeIKG-K.js → ordinal-C2TEWKNu.js} +1 -1
  105. package/payload/server/public/assets/packet-4T2RLAQJ-BaLYeIrU.js +1 -0
  106. package/payload/server/public/assets/page-DomkejEB.js +32 -0
  107. package/payload/server/public/assets/page-FnCmAeHc.js +1 -0
  108. package/payload/server/public/assets/{pdf-render-fJz4vym9.js → pdf-render-C257cidb.js} +1 -1
  109. package/payload/server/public/assets/pie-ZZUOXDRM-CL-XJtk-.js +1 -0
  110. package/payload/server/public/assets/{pieDiagram-DEJITSTG-D-lXWWta.js → pieDiagram-DEJITSTG-DtgBHZfi.js} +1 -1
  111. package/payload/server/public/assets/{public-DqJjXR4p.js → public-Be_Galv6.js} +1 -1
  112. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-13QyG_AO.js → quadrantDiagram-34T5L4WZ-BTc5Qn2y.js} +1 -1
  113. package/payload/server/public/assets/radar-PYXPWWZC-Cn-g6F_h.js +1 -0
  114. package/payload/server/public/assets/{reduce-Fm685to3.js → reduce-BGpN5lgn.js} +1 -1
  115. package/payload/server/public/assets/{requirementDiagram-MS252O5E-Bx45Bgn4.js → requirementDiagram-MS252O5E-BNgOO5YW.js} +1 -1
  116. package/payload/server/public/assets/{rotate-ccw-L42fL8ey.js → rotate-ccw-D9qOBLig.js} +1 -1
  117. package/payload/server/public/assets/routines-lGiYaMiX.js +1 -0
  118. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-Cj-Gq25v.js → sankeyDiagram-XADWPNL6-MyUATmVt.js} +1 -1
  119. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-B8RDRq93.js → sequenceDiagram-FGHM5R23-CBJrF5Vi.js} +1 -1
  120. package/payload/server/public/assets/skills-D9nWOqoz.js +1 -0
  121. package/payload/server/public/assets/{src-D3VYuW_Z.js → src-DekKlUCp.js} +1 -1
  122. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-DoyFF1Kl.js → stateDiagram-FHFEXIEX-6wbUjn1Q.js} +1 -1
  123. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BdMdfBeC.js +1 -0
  124. package/payload/server/public/assets/{tasks-GNtvZL8F.js → tasks-Cyc1EfLA.js} +1 -1
  125. package/payload/server/public/assets/{time-entry-format-BreNpFLJ.js → time-entry-format-RkCW7hKu.js} +1 -1
  126. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-Df4RQXm6.js → timeline-definition-GMOUNBTQ-BHjTMCGY.js} +1 -1
  127. package/payload/server/public/assets/treeView-SZITEDCU-CmZoOGlC.js +1 -0
  128. package/payload/server/public/assets/treemap-W4RFUUIX-H27WFS-y.js +1 -0
  129. package/payload/server/public/assets/{triangle-alert-DumCWC08.js → triangle-alert-k8ulav-N.js} +1 -1
  130. package/payload/server/public/assets/{useCopyFeedback-DHCtz8qX.js → useCopyFeedback-DN1WA5vU.js} +1 -1
  131. package/payload/server/public/assets/useSubAccountSwitcher-fvBunpOC.css +1 -0
  132. package/payload/server/public/assets/useSubAccountSwitcher-iQGqNJhI.js +9 -0
  133. package/payload/server/public/assets/useVoiceRecorder-v--TIxaM.js +2 -0
  134. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-D2o5og9l.js → vennDiagram-DHZGUBPP-yo3-cf0U.js} +1 -1
  135. package/payload/server/public/assets/wardley-RL74JXVD-DNpWIvU4.js +1 -0
  136. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-BDueObbS.js → wardleyDiagram-NUSXRM2D-DZlyFzrg.js} +1 -1
  137. package/payload/server/public/assets/{wrench-iWkROE1V.js → wrench-CKhz8KnQ.js} +1 -1
  138. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-BTYs4Fgh.js → xychartDiagram-5P7HB3ND-B5HV5h80.js} +1 -1
  139. package/payload/server/public/browser.html +5 -5
  140. package/payload/server/public/calendar.html +8 -8
  141. package/payload/server/public/chat.html +16 -15
  142. package/payload/server/public/data.html +13 -12
  143. package/payload/server/public/graph.html +10 -10
  144. package/payload/server/public/index.html +17 -16
  145. package/payload/server/public/operator.html +17 -16
  146. package/payload/server/public/public.html +16 -15
  147. package/payload/server/public/routines.html +7 -7
  148. package/payload/server/public/skills.html +19 -0
  149. package/payload/server/public/tasks.html +7 -7
  150. package/payload/server/server.js +1157 -789
  151. package/payload/server/public/assets/AdminLoginScreens-CKg_Dlpv.js +0 -1
  152. package/payload/server/public/assets/AdminShell-BFVVkWFC.js +0 -2
  153. package/payload/server/public/assets/admin-wtSUU5N0.js +0 -1
  154. package/payload/server/public/assets/architecture-YZFGNWBL-D-AX2VuA.js +0 -1
  155. package/payload/server/public/assets/channel-DZ5sh6YQ.js +0 -1
  156. package/payload/server/public/assets/chat-DRuIxGtE.js +0 -1
  157. package/payload/server/public/assets/chevron-left-BzIg4in6.js +0 -1
  158. package/payload/server/public/assets/chevron-right-BcFSa9C3.js +0 -1
  159. package/payload/server/public/assets/chunk-426QAEUC-CcjBLp4a.js +0 -1
  160. package/payload/server/public/assets/chunk-QZHKN3VN-B2WjDYBE.js +0 -1
  161. package/payload/server/public/assets/classDiagram-6PBFFD2Q-CT3jNrze.js +0 -1
  162. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DJRsjAkC.js +0 -1
  163. package/payload/server/public/assets/clock-Dr3NGtjR.js +0 -1
  164. package/payload/server/public/assets/clone-FcEDnoMT.js +0 -1
  165. package/payload/server/public/assets/data-BdZCvyvN.js +0 -1
  166. package/payload/server/public/assets/gitGraph-7Q5UKJZL-D1uhnP9U.js +0 -1
  167. package/payload/server/public/assets/graph-B7niLM97.js +0 -51
  168. package/payload/server/public/assets/graph-labels-DykmXYHA.js +0 -1
  169. package/payload/server/public/assets/info-OMHHGYJF-oNm27GAV.js +0 -1
  170. package/payload/server/public/assets/infoDiagram-42DDH7IO-LxTftqyS.js +0 -2
  171. package/payload/server/public/assets/operator-DglDYmdV.js +0 -1
  172. package/payload/server/public/assets/packet-4T2RLAQJ-eQNVGiK3.js +0 -1
  173. package/payload/server/public/assets/page-C-5sTAE-.js +0 -32
  174. package/payload/server/public/assets/page-C8G5p4jr.js +0 -1
  175. package/payload/server/public/assets/pie-ZZUOXDRM-E1u-48rt.js +0 -1
  176. package/payload/server/public/assets/radar-PYXPWWZC-Cn2cGN90.js +0 -1
  177. package/payload/server/public/assets/routines-JOV6xdYh.js +0 -1
  178. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bml-X4-H.js +0 -1
  179. package/payload/server/public/assets/treeView-SZITEDCU-CimabhXy.js +0 -1
  180. package/payload/server/public/assets/treemap-W4RFUUIX-Cg264rpM.js +0 -1
  181. package/payload/server/public/assets/useSubAccountSwitcher-Bc7XHr0L.js +0 -9
  182. package/payload/server/public/assets/useSubAccountSwitcher-DPHQJO7E.css +0 -1
  183. package/payload/server/public/assets/useVoiceRecorder-Cj-VZDKO.js +0 -2
  184. package/payload/server/public/assets/wardley-RL74JXVD-tbgfCg0E.js +0 -1
  185. /package/payload/server/public/assets/{_baseFor-Bvwvhrz4.js → _baseFor-Be3EKK3K.js} +0 -0
  186. /package/payload/server/public/assets/{array-D3d-WgFW.js → array-X0JlPOfd.js} +0 -0
  187. /package/payload/server/public/assets/{chunk-fQC6bEKA.js → chunk-CCr-iYLO.js} +0 -0
  188. /package/payload/server/public/assets/{cytoscape.esm-Cun-OM6a.js → cytoscape.esm-CI2IWMLB.js} +0 -0
  189. /package/payload/server/public/assets/{defaultLocale-CisKV5Ew.js → defaultLocale-B6RGN4id.js} +0 -0
  190. /package/payload/server/public/assets/{init-D9ZOVaZ3.js → init-BmUWJJHz.js} +0 -0
  191. /package/payload/server/public/assets/{katex-C-3ZDK8o.js → katex-BjZuzSQn.js} +0 -0
  192. /package/payload/server/public/assets/{path-BMOgQSLM.js → path-CoPyR7c2.js} +0 -0
  193. /package/payload/server/public/assets/{preload-helper-DL2DwvxV.js → preload-helper-BQrMkyGX.js} +0 -0
  194. /package/payload/server/public/assets/{rough.esm-BrTFrov0.js → rough.esm-jSt7UMyi.js} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-maxy-code",
3
- "version": "0.1.500",
3
+ "version": "0.1.502",
4
4
  "description": "Install Maxy — AI for Productive People",
5
5
  "bin": {
6
6
  "create-maxy-code": "./dist/index.js"
@@ -0,0 +1,235 @@
1
+ # Task 1974 — uploads/ intake inbox Implementation Plan
2
+
3
+ > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
4
+
5
+ **Goal:** Reclassify the account `uploads/` directory from tool-owned scratch to a temporary intake inbox, and add a `stranded-intake` reconcile count so a node file-reference left pointing into `uploads/` is visible.
6
+
7
+ **Architecture:** Doctrine plus audit change, no code path change. Three prose files are edited (`SCHEMA.md`, `data-manager.md`, `internals.md`), then the `platform-architecture` SKILL.md twin is regenerated from the docs corpus so the no-drift gate passes. Detection-only, mirroring the outbound `output/` rule landed by task 1930.
8
+
9
+ **Tech Stack:** Markdown doctrine files; Node regen scripts (`docs/scripts/copy-docs.mjs`, `maxy-code/scripts/assemble-architecture-skill.mjs`); the drift gate `maxy-code/platform/scripts/check-architecture-skill-no-drift.mjs`; the bash test `fs-schema-guard.test.sh`.
10
+
11
+ ## Global Constraints
12
+
13
+ - Zero em-dashes in all shipped prose.
14
+ - The 1930 outbound rule must survive intact: the `output/` promote-out sentence and the `scratch-refs` / `stranded` counts stay present. `stranded-intake` is appended to the output contract, never a rename of `stranded`.
15
+ - `uploads` stays in the `allowed-top-level` block of SCHEMA.md (files still land there).
16
+ - The write-path guard, the admin-UI upload handler, and `memory-ingest` `sourcePath` behaviour are unchanged.
17
+ - Reconcile output contract after this task: `unreachable=N broken-refs=M scratch-refs=P stranded=Q stranded-intake=R`.
18
+ - Paths are relative to the `maxy-code/` subtree root inside the worktree.
19
+
20
+ ---
21
+
22
+ ### Task 1: SCHEMA.md — reclassify uploads/ as intake inbox
23
+
24
+ **Files:**
25
+ - Modify: `platform/templates/account-schema/SCHEMA.md:31-39`
26
+
27
+ **Interfaces:**
28
+ - Produces: the doctrine text data-manager.md and internals.md refer to. No code symbols.
29
+
30
+ - [ ] **Step 1: Remove `uploads/` from the "recreated on the next write" list.**
31
+
32
+ At `SCHEMA.md:36-39`, change the list so `uploads/` is no longer among tool-owned rebuilt dirs:
33
+
34
+ ```
35
+ The internal structure of these is owned by the writing tool and is recreated on
36
+ the next write: `url-get/`, `output/`, `generated/`, `extracted/`,
37
+ any published/served tree (`sites/`, `public/`), `agents/`, `specialists/`, and
38
+ platform-internal areas (`cache/`, `secrets/`, `state/`, `logs/`, `tmp/`).
39
+ ```
40
+
41
+ - [ ] **Step 2: Add the intake-inbox rule paragraph.**
42
+
43
+ Immediately after the `output/` promote-out paragraph (ends at `SCHEMA.md:34`), insert a new paragraph. It states uploads is a temporary intake inbox, a file is promoted to its canonical bucket when its node is created, no persisted graph reference points into `uploads/`, and the per-`<attachmentId>` reason it is safe to move out of (unlike `output/`):
44
+
45
+ ```
46
+ `uploads/` is a temporary intake inbox, not rebuilt scratch. A file lands at
47
+ `uploads/<attachmentId>/` on upload and is promoted to its canonical entity
48
+ bucket when its graph node is created: a Person or Organization file to
49
+ `contacts/<name>/`, a Project file to `projects/<name>/`, anything else to
50
+ `documents/`. A persisted graph reference must never point into `uploads/`.
51
+ Unlike `output/`, each upload writes its own `uploads/<attachmentId>/` dir and no
52
+ tool walks or rebuilds the subtree, so promoting a file out of it through the
53
+ `data-manager` specialist is safe.
54
+ ```
55
+
56
+ - [ ] **Step 3: Verify the edit.**
57
+
58
+ Run:
59
+ ```bash
60
+ cd platform/templates/account-schema
61
+ # uploads no longer in the recreated-on-next-write list
62
+ awk '/recreated on/,/logs.*tmp/' SCHEMA.md | grep -c 'uploads/' | grep -qx 0 && echo "OK: uploads removed from scratch list"
63
+ # intake-inbox rule present
64
+ grep -q 'temporary intake inbox' SCHEMA.md && echo "OK: intake rule present"
65
+ # uploads still allowed-top-level
66
+ grep -A40 'allowed-top-level' SCHEMA.md | grep -qx 'uploads' && echo "OK: uploads still allowed-top-level"
67
+ # 1930 output/ rule survives
68
+ grep -q 'promoted out of `output/`' SCHEMA.md && echo "OK: 1930 output rule intact"
69
+ # zero em-dashes in this file
70
+ ! grep -q '—' SCHEMA.md && echo "OK: no em-dash"
71
+ ```
72
+ Expected: all five OK lines.
73
+
74
+ - [ ] **Step 4: Commit.**
75
+
76
+ ```bash
77
+ git add platform/templates/account-schema/SCHEMA.md
78
+ git commit -m "task: reclassify uploads/ as intake inbox in account SCHEMA.md (1974)"
79
+ ```
80
+
81
+ ---
82
+
83
+ ### Task 2: data-manager.md — reconcile case (e), walk uploads/, promotion permission, output contract
84
+
85
+ **Files:**
86
+ - Modify: `platform/templates/specialists/agents/data-manager.md:24` (reconcile brief), `:30` (output contract), and the "What success looks like" area for the promotion permission.
87
+
88
+ **Interfaces:**
89
+ - Consumes: the SCHEMA.md intake-inbox rule from Task 1.
90
+ - Produces: the `stranded-intake=R` field that internals.md documents in Task 3.
91
+
92
+ - [ ] **Step 1: Add reconcile case (e) and include uploads/ in the walk.**
93
+
94
+ At `data-manager.md:24`, extend the counted list. After case (d), add case (e): a graph file-reference that resolves into `uploads/`, the inbound intake mirror of the `output/` scratch case. State that the walk now includes `uploads/` (a file under `uploads/` with no referencing node folds into `unreachable`). Exact appended clause inside the sentence that enumerates (a) to (d):
95
+
96
+ ```
97
+ , and (e) graph file-references that resolve into the `uploads/` intake inbox,
98
+ which is a temporary landing area a file should have been promoted out of when
99
+ its node was created. The walk now includes `uploads/`; a file under `uploads/`
100
+ that no node references counts under (a) unreachable.
101
+ ```
102
+
103
+ - [ ] **Step 2: Add the stewardship promotion permission for uploads/.**
104
+
105
+ In "## What success looks like" (after `data-manager.md:16`, the paired-move paragraph), add a sentence permitting promotion out of `uploads/`:
106
+
107
+ ```
108
+ - A file in the `uploads/` intake inbox whose graph node exists is promoted to
109
+ its canonical bucket (Person or Organization to `contacts/<name>/`, Project to
110
+ `projects/<name>/`, else `documents/`), paired with a `database-operator`
111
+ `sourcePath` update in the same pass, exactly as any other move.
112
+ ```
113
+
114
+ - [ ] **Step 3: Change the output contract.**
115
+
116
+ At `data-manager.md:30`, change the reconcile summary line:
117
+
118
+ ```
119
+ For the reconcile audit: `unreachable=N broken-refs=M scratch-refs=P stranded=Q stranded-intake=R`.
120
+ ```
121
+
122
+ - [ ] **Step 4: Verify the edit.**
123
+
124
+ Run:
125
+ ```bash
126
+ cd platform/templates/specialists/agents
127
+ grep -q 'stranded-intake=R' data-manager.md && echo "OK: contract has stranded-intake"
128
+ grep -q 'scratch-refs=P stranded=Q' data-manager.md && echo "OK: 1930 fields survive"
129
+ grep -q '(e) graph file-references that resolve into the `uploads/`' data-manager.md && echo "OK: case e present"
130
+ grep -q 'promoted to' data-manager.md && grep -q 'sourcePath` update' data-manager.md && echo "OK: promotion permission present"
131
+ ! grep -q '—' data-manager.md && echo "OK: no em-dash"
132
+ ```
133
+ Expected: five OK lines.
134
+
135
+ - [ ] **Step 5: Commit.**
136
+
137
+ ```bash
138
+ git add platform/templates/specialists/agents/data-manager.md
139
+ git commit -m "task: data-manager reconcile counts uploads/ intake drift as stranded-intake (1974)"
140
+ ```
141
+
142
+ ---
143
+
144
+ ### Task 3: internals.md — document the reclassification and the stranded-intake count
145
+
146
+ **Files:**
147
+ - Modify: `platform/plugins/docs/references/internals.md:411`
148
+
149
+ **Interfaces:**
150
+ - Consumes: the reconcile contract from Task 2.
151
+ - Produces: the corpus text the architecture SKILL.md twin regenerates from in Task 4.
152
+
153
+ - [ ] **Step 1: Append the intake-inbox rule to the placement paragraph.**
154
+
155
+ At `internals.md:411`, the sentence currently ends: "...is counted by the `data-manager` reconcile audit (`scratch-refs`, `stranded`); making that audit run on a standing periodic cadence is a filed follow-up." Extend it with the inbound mirror. Append after the `scratch-refs`/`stranded` clause:
156
+
157
+ ```
158
+ The inbound mirror is the `uploads/` intake inbox: an uploaded file lands at `uploads/<attachmentId>/` and is promoted to its canonical entity bucket when its graph node is created, so a persisted node reference resolving into `uploads/` is intake drift, counted by the same reconcile audit as `stranded-intake`. Unlike `output/`, `uploads/` is never rebuilt by a tool, so the `data-manager` may promote a file out of it. The reconcile output contract is `unreachable=N broken-refs=M scratch-refs=P stranded=Q stranded-intake=R`.
159
+ ```
160
+
161
+ - [ ] **Step 2: Verify the edit.**
162
+
163
+ Run:
164
+ ```bash
165
+ grep -q 'stranded-intake' platform/plugins/docs/references/internals.md && echo "OK: internals mentions count"
166
+ grep -q 'intake inbox' platform/plugins/docs/references/internals.md && echo "OK: internals mentions reclassification"
167
+ ! grep -q '—' platform/plugins/docs/references/internals.md && echo "OK: no em-dash added"
168
+ ```
169
+ Expected: three OK lines. (The last check should already pass before the edit; keep the added prose em-dash-free.)
170
+
171
+ - [ ] **Step 3: Commit.**
172
+
173
+ ```bash
174
+ git add platform/plugins/docs/references/internals.md
175
+ git commit -m "task: internals.md documents uploads/ intake inbox and stranded-intake count (1974)"
176
+ ```
177
+
178
+ ---
179
+
180
+ ### Task 4: Regenerate the architecture skill twin and pass the gates
181
+
182
+ **Files:**
183
+ - Modify (generated): `platform/plugins/admin/skills/platform-architecture/SKILL.md`
184
+ - Run: `docs/scripts/copy-docs.mjs`, `maxy-code/scripts/assemble-architecture-skill.mjs`, `platform/scripts/check-architecture-skill-no-drift.mjs`, `platform/plugins/admin/hooks/__tests__/fs-schema-guard.test.sh`
185
+
186
+ **Interfaces:**
187
+ - Consumes: the edited internals.md from Task 3.
188
+ - Produces: a SKILL.md byte-equal to what the gate regenerates.
189
+
190
+ - [ ] **Step 1: Regenerate the corpus and the skill twin.**
191
+
192
+ Run from the worktree repo root:
193
+ ```bash
194
+ node docs/scripts/copy-docs.mjs
195
+ node maxy-code/scripts/assemble-architecture-skill.mjs --brand maxy-code
196
+ ```
197
+ Expected: `[copy-docs]` and `[platform-arch-assemble] op=write` lines, no error.
198
+
199
+ - [ ] **Step 2: Run the drift gate.**
200
+
201
+ Run:
202
+ ```bash
203
+ node maxy-code/platform/scripts/check-architecture-skill-no-drift.mjs --brand maxy-code
204
+ ```
205
+ Expected: exit 0, no drift reported. If it reports drift, the regen in Step 1 did not run or the SKILL.md was not re-written; re-run Step 1.
206
+
207
+ - [ ] **Step 3: Run the write-guard test (regression boundary).**
208
+
209
+ Run:
210
+ ```bash
211
+ bash maxy-code/platform/plugins/admin/hooks/__tests__/fs-schema-guard.test.sh
212
+ ```
213
+ Expected: all assertions pass. The guard is unchanged; `uploads/` is still an allowed write, so this stays green.
214
+
215
+ - [ ] **Step 4: Commit the regenerated twin (and any corpus artefact the gate expects committed).**
216
+
217
+ ```bash
218
+ git add platform/plugins/admin/skills/platform-architecture/SKILL.md
219
+ git status --porcelain docs/public
220
+ # stage docs/public/llms-full.*.txt only if it is a tracked artefact that changed
221
+ git commit -m "task: regenerate platform-architecture skill twin for 1974"
222
+ ```
223
+
224
+ ---
225
+
226
+ ## Land (Phase 6 handles this — not an implementation task)
227
+
228
+ LANES.md and task-file archival are done in Phase 6c of the sprint, not here. The task's "LANES Ready row" line describes the pre-implementation state; because this sprint implements and archives in one motion, the end state is: task file under `.tasks/archive/`, no Ready row referencing 1974, and the archive sentence naming 1974. This is a deliberate deviation from the task's literal LANES line, recorded in Plan Conformity.
229
+
230
+ ## Self-Review
231
+
232
+ - **Spec coverage:** SCHEMA.md reclassification (Task 1), data-manager.md case (e) + walk + promotion + contract (Task 2), internals.md + twin regen (Tasks 3-4), LANES (Phase 6c). Every in-scope item maps to a task.
233
+ - **Out of scope confirmed untouched:** no auto-promotion hook, no cadence (1931), no CC-native uploads reach, no write-guard edit, no ingest-path edit.
234
+ - **Type consistency:** the single shared token is the output-contract string; it reads `unreachable=N broken-refs=M scratch-refs=P stranded=Q stranded-intake=R` identically in Tasks 2 and 3.
235
+ - **Placeholder scan:** none; every edit carries its literal text.
@@ -0,0 +1,215 @@
1
+ # Task 1976 Intra-folder Filing Hygiene Implementation Plan
2
+
3
+ > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
4
+
5
+ **Goal:** Teach the `data-manager` reconcile audit to count three intra-folder drift kinds (superseded versions, format twins, stray subfolders) and state the three governing rules in `SCHEMA.md`, `data-manager.md`, and `internals.md`, so version and format sprawl becomes visible before a cleanup is asked for.
6
+
7
+ **Architecture:** Detection-and-doctrine only, matching the 1930/1974 precedent. Three markdown source files gain the rules and counts; the `platform-architecture/SKILL.md` twin is regenerated from `internals.md` by the assembler, never hand-edited. No new write-time guard, no automatic deletion.
8
+
9
+ **Tech Stack:** Markdown templates, Node ESM regen scripts (`docs/scripts/copy-docs.mjs`, `maxy-code/scripts/assemble-architecture-skill.mjs`), Bash test harness (`fs-schema-guard.test.sh`), drift gate (`check-architecture-skill-no-drift.mjs`).
10
+
11
+ ## Global Constraints
12
+
13
+ - Zero em-dashes in shipped prose (use commas, colons, or full stops).
14
+ - Detection-only: the reconcile audit counts, it never removes. Removal is a stewardship dispatch under operator direction (deletion is destructive).
15
+ - The three new fields are **appended** to the output contract, never substituted: `scratch-refs`, `stranded`, and `stranded-intake` all survive.
16
+ - The no-subfolder rule is scoped to `projects/<name>/` and `contacts/<name>/` only. `documents/` is allowed one document-folder deep (`documents/<doc>/file`) and is out of scope for the subfolder rule.
17
+ - Version-group definition: `<base>.ext` and `<base>-vN.ext` sharing basename stem and extension are versions of one deliverable.
18
+ - Format-twin definition: same basename where a delivered `.pdf` sits beside its source render `.html`/`.md`; count the source renders whose delivered twin exists.
19
+ - The reconcile has no automated harness (it runs as a Sonnet agent). Verification of the counts is manual on a seeded folder; the automated gates that must stay green are `fs-schema-guard.test.sh` and `check-architecture-skill-no-drift.mjs`.
20
+
21
+ ---
22
+
23
+ ### Task 1: SCHEMA.md — Intra-folder hygiene section
24
+
25
+ **Files:**
26
+ - Modify: `platform/templates/account-schema/SCHEMA.md` (insert a new `## Intra-folder hygiene` section between `## Naming convention` and `## Tool-owned`)
27
+
28
+ **Interfaces:**
29
+ - Produces: the three named rules (current-version-only, one-canonical-format, no-subfolder) that Task 2 and Task 3 reference by name.
30
+
31
+ - [ ] **Step 1: Insert the section** after the Naming convention section (currently ending at line 27), before `## Tool-owned`:
32
+
33
+ ```markdown
34
+ ## Intra-folder hygiene
35
+
36
+ The operator-data buckets hold one current copy of each deliverable, in one
37
+ canonical format, with no subtree. Three rules keep them that way; the standing
38
+ reconcile counts any that predate them, and `data-manager` clears them on a
39
+ stewardship dispatch.
40
+
41
+ - **Current version only.** `<base>.ext` and `<base>-vN.ext` (for example
42
+ `charlotte-deck.pdf` and `charlotte-deck-v2.pdf` through
43
+ `charlotte-deck-v6.pdf`) are versions of one deliverable, not separate files.
44
+ Keep the newest; the superseded copies are removed through `data-manager`.
45
+ - **One canonical format.** A delivered `.pdf` and its source render sharing the
46
+ same basename (`charlotte-deck.html` beside `charlotte-deck.pdf`,
47
+ `invoice-rbt-2026-005.html` beside `invoice-rbt-2026-005.pdf`) are one
48
+ deliverable in two formats. The pdf is the deliverable; the `.html` or `.md`
49
+ render that produced it is not a second one and is removed through
50
+ `data-manager`.
51
+ - **No subfolder.** No folder nests under `projects/<name>/` or
52
+ `contacts/<name>/`; files live directly inside the entity folder. This is the
53
+ flat rule from the buckets above, restated as a standing invariant: the write
54
+ guard blocks the depth as you create it, and the reconcile counts any subtree
55
+ that predates the guard or was created off-path.
56
+ ```
57
+
58
+ - [ ] **Step 2: Verify the section reads and has no em-dashes**
59
+
60
+ Run: `grep -n 'Intra-folder hygiene' platform/templates/account-schema/SCHEMA.md && ! grep -n '—' platform/templates/account-schema/SCHEMA.md && echo "no em-dash"`
61
+ Expected: the heading line prints, then `no em-dash`.
62
+
63
+ - [ ] **Step 3: Verify the write guard is untouched (green baseline holds)**
64
+
65
+ Run: `bash platform/plugins/admin/hooks/__tests__/fs-schema-guard.test.sh 2>&1 | tail -1`
66
+ Expected: `----- 22 passed, 0 failed -----`
67
+
68
+ - [ ] **Step 4: Commit**
69
+
70
+ ```bash
71
+ git add platform/templates/account-schema/SCHEMA.md
72
+ git commit -m "task: SCHEMA.md states intra-folder hygiene rules (1976)"
73
+ ```
74
+
75
+ ---
76
+
77
+ ### Task 2: data-manager.md — three counts, output contract, stewardship
78
+
79
+ **Files:**
80
+ - Modify: `platform/templates/specialists/agents/data-manager.md` (reconcile brief at line 25, output contract at line 31, "What success looks like" at line 17)
81
+
82
+ **Interfaces:**
83
+ - Consumes: the three rule names from Task 1.
84
+ - Produces: the output-contract line `unreachable=N broken-refs=M scratch-refs=P stranded=Q stranded-intake=R versioned=S format-twins=T stray-subdir=U` that Task 3 mirrors verbatim.
85
+
86
+ - [ ] **Step 1: Extend the reconcile brief** (line 25). Insert immediately before `Move nothing, dispatch nothing.`:
87
+
88
+ ```
89
+ Then, per operator-data entity folder (`projects/<name>/`, `contacts/<name>/`), count three intra-folder drifts from disk structure alone, no graph resolution needed: (f) files in a version group, where `<base>.ext` and `<base>-vN.ext` share a basename stem and extension and all but the newest are superseded, counting every superseded copy as `versioned`; (g) format twins, a source-render file (`.html`, `.md`) whose delivered `.pdf` twin of the same basename sits in the same folder, counting each such render as `format-twins`; (h) stray subfolders nested under an entity folder, which the flat rule forbids, counting each subfolder as `stray-subdir`.
90
+ ```
91
+
92
+ - [ ] **Step 2: Extend the output contract** (line 31). Change the reconcile-audit string from:
93
+
94
+ ```
95
+ `unreachable=N broken-refs=M scratch-refs=P stranded=Q stranded-intake=R`
96
+ ```
97
+
98
+ to:
99
+
100
+ ```
101
+ `unreachable=N broken-refs=M scratch-refs=P stranded=Q stranded-intake=R versioned=S format-twins=T stray-subdir=U`
102
+ ```
103
+
104
+ - [ ] **Step 3: Add the stewardship bullet** to "What success looks like", immediately after the `uploads/` promotion bullet (line 17):
105
+
106
+ ```
107
+ - Superseded versions and redundant format twins are removed, and a subfolder nested under `projects/<name>/` or `contacts/<name>/` is flattened or re-filed, when a stewardship brief asks for it. Each removal or move pairs with a `database-operator` reference update in the same pass, exactly as any other move: the surviving current render keeps the node reference, and a removed file's node is repointed or its reference dropped. Removal is destructive, so it happens only on an explicit stewardship dispatch, never in the read-only reconcile audit.
108
+ ```
109
+
110
+ - [ ] **Step 4: Verify the contract line and no em-dashes**
111
+
112
+ Run: `grep -c 'versioned=S format-twins=T stray-subdir=U' platform/templates/specialists/agents/data-manager.md && grep -o 'scratch-refs=P stranded=Q stranded-intake=R' platform/templates/specialists/agents/data-manager.md && ! grep '—' platform/templates/specialists/agents/data-manager.md && echo "no em-dash"`
113
+ Expected: `1`, then the preserved `scratch-refs=P stranded=Q stranded-intake=R` fragment, then `no em-dash`.
114
+
115
+ - [ ] **Step 5: Commit**
116
+
117
+ ```bash
118
+ git add platform/templates/specialists/agents/data-manager.md
119
+ git commit -m "task: data-manager reconcile counts versioned/format-twins/stray-subdir (1976)"
120
+ ```
121
+
122
+ ---
123
+
124
+ ### Task 3: internals.md — reconcile rules and contract string
125
+
126
+ **Files:**
127
+ - Modify: `platform/plugins/docs/references/internals.md` (the reconcile paragraph at line 411)
128
+
129
+ **Interfaces:**
130
+ - Consumes: the output-contract line from Task 2 (must match verbatim).
131
+ - Produces: the corpus source the assembler reads to regenerate the SKILL.md twin in Task 4.
132
+
133
+ - [ ] **Step 1: Insert the intra-folder description** into line 411, immediately before the final sentence `The reconcile output contract is ...`:
134
+
135
+ ```
136
+ Beyond placement and intake, the same audit counts intra-folder sprawl inside each operator-data entity folder from disk structure alone: superseded version copies (`<base>.ext` and `<base>-vN.ext` are one deliverable, all but the newest counted `versioned`), format twins (a source `.html`/`.md` render kept beside its delivered `.pdf` of the same basename, counted `format-twins`), and subfolders nested under `projects/<name>/` or `contacts/<name>/` that the flat rule forbids (counted `stray-subdir`). These are read-only counts; removal or flattening happens only on a `data-manager` stewardship dispatch, each paired with a `database-operator` reference update.
137
+ ```
138
+
139
+ - [ ] **Step 2: Update the contract string** in the same paragraph, from:
140
+
141
+ ```
142
+ The reconcile output contract is `unreachable=N broken-refs=M scratch-refs=P stranded=Q stranded-intake=R`.
143
+ ```
144
+
145
+ to:
146
+
147
+ ```
148
+ The reconcile output contract is `unreachable=N broken-refs=M scratch-refs=P stranded=Q stranded-intake=R versioned=S format-twins=T stray-subdir=U`.
149
+ ```
150
+
151
+ - [ ] **Step 3: Verify the string matches Task 2 and no em-dashes in the changed region**
152
+
153
+ Run: `grep -c 'versioned=S format-twins=T stray-subdir=U' platform/plugins/docs/references/internals.md && grep -o 'counted `stray-subdir`' platform/plugins/docs/references/internals.md`
154
+ Expected: `1`, then `counted `stray-subdir``.
155
+
156
+ - [ ] **Step 4: Commit**
157
+
158
+ ```bash
159
+ git add platform/plugins/docs/references/internals.md
160
+ git commit -m "task: internals.md documents intra-folder hygiene counts (1976)"
161
+ ```
162
+
163
+ ---
164
+
165
+ ### Task 4: Regenerate the platform-architecture SKILL.md twin and gate it
166
+
167
+ **Files:**
168
+ - Regenerate (do not hand-edit): `platform/plugins/admin/skills/platform-architecture/SKILL.md`
169
+
170
+ **Interfaces:**
171
+ - Consumes: the edited `internals.md` from Task 3 (via the docs corpus).
172
+
173
+ - [ ] **Step 1: Rebuild the docs corpus** (mirrors internals.md into `docs/public/llms-full.<brand>.txt`). From the repo root:
174
+
175
+ Run: `cd "$(git rev-parse --show-toplevel)" && node docs/scripts/copy-docs.mjs 2>&1 | tail -2`
176
+ Expected: no error.
177
+
178
+ - [ ] **Step 2: Assemble both brand skills** (the maxy-code run writes SKILL.md):
179
+
180
+ Run: `cd "$(git rev-parse --show-toplevel)" && node maxy-code/scripts/assemble-architecture-skill.mjs --brand maxy-code && node maxy-code/scripts/assemble-architecture-skill.mjs --brand realagent-code`
181
+ Expected: `[platform-arch-assemble] op=write brand=maxy-code path=.../SKILL.md ...`.
182
+
183
+ - [ ] **Step 3: Run the drift gate**
184
+
185
+ Run: `cd maxy-code && node platform/scripts/check-architecture-skill-no-drift.mjs 2>&1 | tail -3`
186
+ Expected: `[check-architecture-skill-no-drift] ok brand=maxy-code (...)` and `... ok brand=realagent-code (...)`.
187
+
188
+ - [ ] **Step 4: Confirm the new fields reached the regenerated twin**
189
+
190
+ Run: `grep -c 'versioned=S format-twins=T stray-subdir=U' maxy-code/platform/plugins/admin/skills/platform-architecture/SKILL.md`
191
+ Expected: `1` (or more).
192
+
193
+ - [ ] **Step 5: Commit**
194
+
195
+ ```bash
196
+ git add maxy-code/platform/plugins/admin/skills/platform-architecture/SKILL.md maxy-code/docs docs/public 2>/dev/null; git add -A
197
+ git commit -m "task: regenerate platform-architecture skill twin for 1976"
198
+ ```
199
+
200
+ ---
201
+
202
+ ## Self-Review
203
+
204
+ **Spec coverage:**
205
+ - SCHEMA.md three rules → Task 1. ✓
206
+ - data-manager three counts + contract + stewardship → Task 2. ✓
207
+ - internals.md rules + counts → Task 3. ✓
208
+ - SKILL.md regenerated twin → Task 4. ✓
209
+ - LANES.md Ready row + archive → Phase 6 of the sprint (not a plan task; the sprint owns archive/LANES). ✓
210
+
211
+ **Placeholder scan:** every edit shows verbatim insert text. No TBD/TODO. ✓
212
+
213
+ **Type consistency:** the output-contract string is byte-identical in Task 2, Task 3, and the Task 4 grep: `unreachable=N broken-refs=M scratch-refs=P stranded=Q stranded-intake=R versioned=S format-twins=T stray-subdir=U`. ✓
214
+
215
+ **Out of scope (deferred, no task needed here):** automatic deletion, a write-time guard for versions/twins, per-vertical canonical-format policy, the `uploads/` intake (1974, landed), the `/data` 524 (1975, archived), the `output/` promote-out counts (1930, landed). These are stated out-of-scope in the task brief, not dropped work.
@@ -61,6 +61,15 @@ export declare const EXTERNAL_LABEL_SHAPES: readonly ["dot", "triangle", "square
61
61
  export type GraphNodeShape = (typeof EXTERNAL_LABEL_SHAPES)[number];
62
62
  export declare const FALLBACK_LABEL_SHAPE: GraphNodeShape;
63
63
  export declare function shapeForLabel(label: string): GraphNodeShape;
64
+ /**
65
+ * Node labels written by code with no schema node-type-table row and no
66
+ * typed-edge declaration. They still render as graph nodes, so they must carry
67
+ * a colour + glyph like any other node type. The reconciliation gate in
68
+ * __tests__/icons.test.ts folds this set into the node-label universe. Add a
69
+ * label here when the runtime `op=icon-fallback` census names one that no
70
+ * schema table or typed edge declares.
71
+ */
72
+ export declare const CODE_EMITTED_NODE_LABELS: ReadonlySet<string>;
64
73
  /**
65
74
  * Inner SVG markup (Lucide glyph) for a label, or null when the label has no
66
75
  * registered icon. A null return is the signal the caller renders the fallback
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqItD,CAAA;AAED,eAAO,MAAM,qBAAqB,YAAY,CAAA;AAE9C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,MAAM,CAE/B,CAAA;AAExB,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAE7C,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAOzE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAiBD,eAAO,MAAM,qBAAqB,sFAQxB,CAAA;AAEV,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnE,eAAO,MAAM,oBAAoB,EAAE,cAAsB,CAAA;AAUzD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAE3D;AA8ED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIzD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAY7D;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAA;CACxB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,kBAAkB,CAU/E;AASD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC;AAKD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI7D;AAED,iEAAiE;AACjE,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIjE;AA2BD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAqH1D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAoF3D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6NtD,CAAA;AAED,eAAO,MAAM,qBAAqB,YAAY,CAAA;AAE9C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,MAAM,CAE/B,CAAA;AAExB,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAE7C,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAOzE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAiBD,eAAO,MAAM,qBAAqB,sFAQxB,CAAA;AAEV,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnE,eAAO,MAAM,oBAAoB,EAAE,cAAsB,CAAA;AAUzD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAE3D;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAEjC,CAAA;AA2IxB;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIzD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAY7D;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAA;CACxB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,kBAAkB,CAU/E;AASD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC;AAKD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI7D;AAED,iEAAiE;AACjE,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIjE;AA2BD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAqH1D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAoF3D"}