@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.
- package/package.json +1 -1
- package/payload/platform/docs/superpowers/plans/2026-07-25-task-1974-uploads-intake-inbox.md +235 -0
- package/payload/platform/docs/superpowers/plans/2026-07-25-task-1976-intra-folder-hygiene.md +215 -0
- package/payload/platform/lib/graph-style/dist/index.d.ts +9 -0
- package/payload/platform/lib/graph-style/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/graph-style/dist/index.js +152 -6
- package/payload/platform/lib/graph-style/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-style/src/__tests__/caption-coverage.test.ts +69 -0
- package/payload/platform/lib/graph-style/src/__tests__/coverage-source.ts +73 -0
- package/payload/platform/lib/graph-style/src/__tests__/icons.test.ts +20 -3
- package/payload/platform/lib/graph-style/src/index.ts +166 -5
- package/payload/platform/plugins/admin/PLUGIN.md +1 -0
- package/payload/platform/plugins/admin/skills/agent-builder/SKILL.md +15 -0
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +52 -2
- package/payload/platform/plugins/admin/skills/summarise/SKILL.md +37 -0
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +7 -0
- package/payload/platform/plugins/docs/references/admin-ui.md +50 -0
- package/payload/platform/plugins/docs/references/internals.md +1 -1
- package/payload/platform/plugins/docs/references/summarise-skill.md +7 -0
- package/payload/platform/templates/account-schema/SCHEMA.md +36 -1
- package/payload/platform/templates/specialists/agents/data-manager.md +4 -2
- package/payload/server/public/activity.html +6 -6
- package/payload/server/public/assets/AdminLoginScreens-Bv_bKKeL.js +1 -0
- package/payload/server/public/assets/AdminShell-Gq8DU_ig.js +2 -0
- package/payload/server/public/assets/{activity-CKUYOLd2.js → activity-DZFYDHNA.js} +1 -1
- package/payload/server/public/assets/admin-DLUOixl6.js +1 -0
- package/payload/server/public/assets/{arc-CpWWSum8.js → arc-CvlzUHOf.js} +1 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-BQc779DH.js +1 -0
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-D2EzaII0.js → architectureDiagram-Q4EWVU46-I1Hs0RJA.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-8kDpaNSZ.js → blockDiagram-DXYQGD6D-Df5jTGtl.js} +1 -1
- package/payload/server/public/assets/{bot-DESMpxSQ.js → bot-CrEhKW1l.js} +1 -1
- package/payload/server/public/assets/{browser-CpLq_DIo.js → browser-Bt4-LKLU.js} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-CbwmZpK3.js → c4Diagram-AHTNJAMY-B6WY5IDv.js} +1 -1
- package/payload/server/public/assets/{calendar-ClOwyuz-.js → calendar-D0qIvLUR.js} +1 -1
- package/payload/server/public/assets/channel-AqnC3SHu.js +1 -0
- package/payload/server/public/assets/chat-geSkx0j2.js +1 -0
- package/payload/server/public/assets/chevron-left-CQ8rcBoO.js +1 -0
- package/payload/server/public/assets/chevron-right-CSRSqblN.js +1 -0
- package/payload/server/public/assets/{chunk-2KRD3SAO-PFheZ9mw.js → chunk-2KRD3SAO-BsIIFDkc.js} +1 -1
- package/payload/server/public/assets/{chunk-336JU56O-CCFOp5VK.js → chunk-336JU56O-j9z1VtyC.js} +2 -2
- package/payload/server/public/assets/chunk-426QAEUC-CO02gU5d.js +1 -0
- package/payload/server/public/assets/{chunk-4BX2VUAB-Hz4JWOf2.js → chunk-4BX2VUAB-C9i7prxq.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-4xeV0s85.js → chunk-4TB4RGXK-DH0QVGcv.js} +1 -1
- package/payload/server/public/assets/{chunk-55IACEB6-4QKgBpoh.js → chunk-55IACEB6-Dnd_YCPA.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-ms3K6Z5z.js → chunk-5FUZZQ4R-D5sSz3yN.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-CIC4GIGi.js → chunk-5PVQY5BW-CJrwWjAT.js} +1 -1
- package/payload/server/public/assets/{chunk-67CJDMHE-B-XrWVmV.js → chunk-67CJDMHE-SjP6_hUw.js} +1 -1
- package/payload/server/public/assets/{chunk-7N4EOEYR-C7ECOUYQ.js → chunk-7N4EOEYR-fAuhVJD0.js} +1 -1
- package/payload/server/public/assets/{chunk-AA7GKIK3-DOZ6Fxwk.js → chunk-AA7GKIK3-DZxa7KVg.js} +1 -1
- package/payload/server/public/assets/{chunk-BSJP7CBP-4cJ_b0c6.js → chunk-BSJP7CBP-DjeG3eQ-.js} +1 -1
- package/payload/server/public/assets/{chunk-CIAEETIT--mhZipWM.js → chunk-CIAEETIT-RYQULNJm.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-jZpVwob_.js → chunk-EDXVE4YY-Cahapnon.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-Nn-p-xIA.js → chunk-ENJZ2VHE-1146X1L4.js} +1 -1
- package/payload/server/public/assets/{chunk-FMBD7UC4-DyNpcKOS.js → chunk-FMBD7UC4-BCFumtcP.js} +1 -1
- package/payload/server/public/assets/{chunk-FOC6F5B3-C0P8q1uz.js → chunk-FOC6F5B3-CkrtX8Zt.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-CdXQ5SfI.js → chunk-ICPOFSXX-Ba1y3DaW.js} +2 -2
- package/payload/server/public/assets/{chunk-K5T4RW27-BVZJKKsT.js → chunk-K5T4RW27-CF-PI3uQ.js} +1 -1
- package/payload/server/public/assets/{chunk-KGLVRYIC-QlVWTe0V.js → chunk-KGLVRYIC-SFFC6ZC-.js} +1 -1
- package/payload/server/public/assets/{chunk-LIHQZDEY-CpGVZutP.js → chunk-LIHQZDEY-DbOLEP4R.js} +1 -1
- package/payload/server/public/assets/{chunk-ORNJ4GCN-WVcS6fUC.js → chunk-ORNJ4GCN-VB963bkN.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-B7hiSTed.js → chunk-OYMX7WX6-DWYY1pQa.js} +1 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-BiFMbK8t.js +1 -0
- package/payload/server/public/assets/{chunk-U2HBQHQK-DJPnZxGy.js → chunk-U2HBQHQK-DAH1diYP.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-DilBs1Yc.js → chunk-X2U36JSP-Dmw9coXz.js} +1 -1
- package/payload/server/public/assets/{chunk-XPW4576I-B5-uyrJ0.js → chunk-XPW4576I-DaAUON1-.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-BNO4z0Mv.js → chunk-YZCP3GAM-BUcfkEef.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-BzHMQpip.js → chunk-ZZ45TVLE-BLD-vFRO.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-BdRqzScB.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-ChPLgHbS.js +1 -0
- package/payload/server/public/assets/clock-B7Ba8AZL.js +1 -0
- package/payload/server/public/assets/clone-TKtrjWBC.js +1 -0
- package/payload/server/public/assets/{cose-bilkent-S5V4N54A-3DWYmn1o.js → cose-bilkent-S5V4N54A-CoZX0uki.js} +1 -1
- package/payload/server/public/assets/{dagre-Cpy31xJW.js → dagre-Bmjs8zJA.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-C8fyxHFd.js → dagre-KV5264BT-BZCP2wnq.js} +1 -1
- package/payload/server/public/assets/data-BdlGqjKM.js +1 -0
- package/payload/server/public/assets/{diagram-5BDNPKRD-ycyhnLvr.js → diagram-5BDNPKRD-8Nt9a4xX.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-BkeYicIt.js → diagram-G4DWMVQ6-vh5tcYqJ.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-BcGZU-Q3.js → diagram-MMDJMWI5-DGf--jc8.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-DuBDCFb_.js → diagram-TYMM5635-CsO7TIdw.js} +1 -1
- package/payload/server/public/assets/{dist-BYc_arNy.js → dist-cdnE4DqK.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-DmkeOzvp.js → erDiagram-SMLLAGMA-4a78yV8_.js} +1 -1
- package/payload/server/public/assets/file-text-BpLcZKld.js +1 -0
- package/payload/server/public/assets/{flatten-QjnJ1Gcl.js → flatten-BtIc9jX7.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-CkE-pjuB.js → flowDiagram-DWJPFMVM-BoQBXs6t.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-Cjiy3kvE.js → ganttDiagram-T4ZO3ILL-CvzqwCC8.js} +1 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-DfcaTE9L.js +1 -0
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-CsI4lKZm.js → gitGraphDiagram-UUTBAWPF-D_nBxay_.js} +1 -1
- package/payload/server/public/assets/graph-HB0199x-.js +51 -0
- package/payload/server/public/assets/graph-labels-Bx19ZYvJ.js +1 -0
- package/payload/server/public/assets/{graphlib-BkXxC6D5.js → graphlib-D0NdsKJI.js} +1 -1
- package/payload/server/public/assets/info-OMHHGYJF-CD-u6gw9.js +1 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-C6gPQCvO.js +2 -0
- package/payload/server/public/assets/{isEmpty-BavJI9Cn.js → isEmpty-Bu4fZ8Kf.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-D8lZtjRc.js → ishikawaDiagram-UXIWVN3A-auW-s0i0.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-kLE7SiR_.js → journeyDiagram-VCZTEJTY-3Q6AWK4A.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-ove6JuD3.js → kanban-definition-6JOO6SKY-B4MPFp98.js} +1 -1
- package/payload/server/public/assets/{line-CZMSoxM6.js → line-26MdeG5Z.js} +1 -1
- package/payload/server/public/assets/{linear-Be8IK9hK.js → linear-Dq9s_bDO.js} +1 -1
- package/payload/server/public/assets/{maximize-2-BbzPm7o8.js → maximize-2-BhR-Ec21.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-BBADqbnp.js → mermaid-parser.core-vLEpOXgf.js} +2 -2
- package/payload/server/public/assets/{mermaid.core-mH3N7K0I.js → mermaid.core-Durk4m6D.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-BjwwwWil.js → mindmap-definition-QFDTVHPH-DOIg-TyG.js} +1 -1
- package/payload/server/public/assets/operator-DejfJlvi.js +1 -0
- package/payload/server/public/assets/{ordinal-BHeIKG-K.js → ordinal-C2TEWKNu.js} +1 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-BaLYeIrU.js +1 -0
- package/payload/server/public/assets/page-DomkejEB.js +32 -0
- package/payload/server/public/assets/page-FnCmAeHc.js +1 -0
- package/payload/server/public/assets/{pdf-render-fJz4vym9.js → pdf-render-C257cidb.js} +1 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-CL-XJtk-.js +1 -0
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-D-lXWWta.js → pieDiagram-DEJITSTG-DtgBHZfi.js} +1 -1
- package/payload/server/public/assets/{public-DqJjXR4p.js → public-Be_Galv6.js} +1 -1
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-13QyG_AO.js → quadrantDiagram-34T5L4WZ-BTc5Qn2y.js} +1 -1
- package/payload/server/public/assets/radar-PYXPWWZC-Cn-g6F_h.js +1 -0
- package/payload/server/public/assets/{reduce-Fm685to3.js → reduce-BGpN5lgn.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-Bx45Bgn4.js → requirementDiagram-MS252O5E-BNgOO5YW.js} +1 -1
- package/payload/server/public/assets/{rotate-ccw-L42fL8ey.js → rotate-ccw-D9qOBLig.js} +1 -1
- package/payload/server/public/assets/routines-lGiYaMiX.js +1 -0
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-Cj-Gq25v.js → sankeyDiagram-XADWPNL6-MyUATmVt.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-B8RDRq93.js → sequenceDiagram-FGHM5R23-CBJrF5Vi.js} +1 -1
- package/payload/server/public/assets/skills-D9nWOqoz.js +1 -0
- package/payload/server/public/assets/{src-D3VYuW_Z.js → src-DekKlUCp.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-DoyFF1Kl.js → stateDiagram-FHFEXIEX-6wbUjn1Q.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BdMdfBeC.js +1 -0
- package/payload/server/public/assets/{tasks-GNtvZL8F.js → tasks-Cyc1EfLA.js} +1 -1
- package/payload/server/public/assets/{time-entry-format-BreNpFLJ.js → time-entry-format-RkCW7hKu.js} +1 -1
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-Df4RQXm6.js → timeline-definition-GMOUNBTQ-BHjTMCGY.js} +1 -1
- package/payload/server/public/assets/treeView-SZITEDCU-CmZoOGlC.js +1 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-H27WFS-y.js +1 -0
- package/payload/server/public/assets/{triangle-alert-DumCWC08.js → triangle-alert-k8ulav-N.js} +1 -1
- package/payload/server/public/assets/{useCopyFeedback-DHCtz8qX.js → useCopyFeedback-DN1WA5vU.js} +1 -1
- package/payload/server/public/assets/useSubAccountSwitcher-fvBunpOC.css +1 -0
- package/payload/server/public/assets/useSubAccountSwitcher-iQGqNJhI.js +9 -0
- package/payload/server/public/assets/useVoiceRecorder-v--TIxaM.js +2 -0
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-D2o5og9l.js → vennDiagram-DHZGUBPP-yo3-cf0U.js} +1 -1
- package/payload/server/public/assets/wardley-RL74JXVD-DNpWIvU4.js +1 -0
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-BDueObbS.js → wardleyDiagram-NUSXRM2D-DZlyFzrg.js} +1 -1
- package/payload/server/public/assets/{wrench-iWkROE1V.js → wrench-CKhz8KnQ.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-BTYs4Fgh.js → xychartDiagram-5P7HB3ND-B5HV5h80.js} +1 -1
- package/payload/server/public/browser.html +5 -5
- package/payload/server/public/calendar.html +8 -8
- package/payload/server/public/chat.html +16 -15
- package/payload/server/public/data.html +13 -12
- package/payload/server/public/graph.html +10 -10
- package/payload/server/public/index.html +17 -16
- package/payload/server/public/operator.html +17 -16
- package/payload/server/public/public.html +16 -15
- package/payload/server/public/routines.html +7 -7
- package/payload/server/public/skills.html +19 -0
- package/payload/server/public/tasks.html +7 -7
- package/payload/server/server.js +1157 -789
- package/payload/server/public/assets/AdminLoginScreens-CKg_Dlpv.js +0 -1
- package/payload/server/public/assets/AdminShell-BFVVkWFC.js +0 -2
- package/payload/server/public/assets/admin-wtSUU5N0.js +0 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-D-AX2VuA.js +0 -1
- package/payload/server/public/assets/channel-DZ5sh6YQ.js +0 -1
- package/payload/server/public/assets/chat-DRuIxGtE.js +0 -1
- package/payload/server/public/assets/chevron-left-BzIg4in6.js +0 -1
- package/payload/server/public/assets/chevron-right-BcFSa9C3.js +0 -1
- package/payload/server/public/assets/chunk-426QAEUC-CcjBLp4a.js +0 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-B2WjDYBE.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-CT3jNrze.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DJRsjAkC.js +0 -1
- package/payload/server/public/assets/clock-Dr3NGtjR.js +0 -1
- package/payload/server/public/assets/clone-FcEDnoMT.js +0 -1
- package/payload/server/public/assets/data-BdZCvyvN.js +0 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-D1uhnP9U.js +0 -1
- package/payload/server/public/assets/graph-B7niLM97.js +0 -51
- package/payload/server/public/assets/graph-labels-DykmXYHA.js +0 -1
- package/payload/server/public/assets/info-OMHHGYJF-oNm27GAV.js +0 -1
- package/payload/server/public/assets/infoDiagram-42DDH7IO-LxTftqyS.js +0 -2
- package/payload/server/public/assets/operator-DglDYmdV.js +0 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-eQNVGiK3.js +0 -1
- package/payload/server/public/assets/page-C-5sTAE-.js +0 -32
- package/payload/server/public/assets/page-C8G5p4jr.js +0 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-E1u-48rt.js +0 -1
- package/payload/server/public/assets/radar-PYXPWWZC-Cn2cGN90.js +0 -1
- package/payload/server/public/assets/routines-JOV6xdYh.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Bml-X4-H.js +0 -1
- package/payload/server/public/assets/treeView-SZITEDCU-CimabhXy.js +0 -1
- package/payload/server/public/assets/treemap-W4RFUUIX-Cg264rpM.js +0 -1
- package/payload/server/public/assets/useSubAccountSwitcher-Bc7XHr0L.js +0 -9
- package/payload/server/public/assets/useSubAccountSwitcher-DPHQJO7E.css +0 -1
- package/payload/server/public/assets/useVoiceRecorder-Cj-VZDKO.js +0 -2
- package/payload/server/public/assets/wardley-RL74JXVD-tbgfCg0E.js +0 -1
- /package/payload/server/public/assets/{_baseFor-Bvwvhrz4.js → _baseFor-Be3EKK3K.js} +0 -0
- /package/payload/server/public/assets/{array-D3d-WgFW.js → array-X0JlPOfd.js} +0 -0
- /package/payload/server/public/assets/{chunk-fQC6bEKA.js → chunk-CCr-iYLO.js} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-Cun-OM6a.js → cytoscape.esm-CI2IWMLB.js} +0 -0
- /package/payload/server/public/assets/{defaultLocale-CisKV5Ew.js → defaultLocale-B6RGN4id.js} +0 -0
- /package/payload/server/public/assets/{init-D9ZOVaZ3.js → init-BmUWJJHz.js} +0 -0
- /package/payload/server/public/assets/{katex-C-3ZDK8o.js → katex-BjZuzSQn.js} +0 -0
- /package/payload/server/public/assets/{path-BMOgQSLM.js → path-CoPyR7c2.js} +0 -0
- /package/payload/server/public/assets/{preload-helper-DL2DwvxV.js → preload-helper-BQrMkyGX.js} +0 -0
- /package/payload/server/public/assets/{rough.esm-BrTFrov0.js → rough.esm-jSt7UMyi.js} +0 -0
package/package.json
CHANGED
|
@@ -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,
|
|
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"}
|