@deepseek-insight/dsi 0.6.12 → 0.6.14

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 (189) hide show
  1. package/.agents/skills/dsi-thin/SKILL.md +140 -0
  2. package/.agents/skills/dsi-thin/references/ADR-0019-snapshot.md +363 -0
  3. package/.agents/skills/dsi-thin/references/authority-adr.md +28 -0
  4. package/.agents/skills/dsi-thin/references/input-contract.md +42 -0
  5. package/.agents/skills/dsi-thin/references/proven-gates.md +61 -0
  6. package/.agents/skills/dsi-thin/references/two-lane-contract.md +53 -0
  7. package/build/client/_app/immutable/assets/0.B-dIufDc.css +2 -0
  8. package/build/client/_app/immutable/assets/2.B70dfiy3.css +1 -0
  9. package/build/client/_app/immutable/chunks/{B9fOkvHb.js → 0HT0ILkA.js} +1 -1
  10. package/build/client/_app/immutable/chunks/{Dwt_JXeR.js → 2KTqoQH-.js} +1 -1
  11. package/build/client/_app/immutable/chunks/{BIvFR1xA.js → 2M1KS72j.js} +1 -1
  12. package/build/client/_app/immutable/chunks/{a1Hqq5w-.js → 2XtVrxH4.js} +1 -1
  13. package/build/client/_app/immutable/chunks/38H6DLwz.js +1 -0
  14. package/build/client/_app/immutable/chunks/{Cdn_bzx2.js → 3E8jbhSl.js} +1 -1
  15. package/build/client/_app/immutable/chunks/{CmNEu9LM.js → A5Iiq81h.js} +1 -1
  16. package/build/client/_app/immutable/chunks/{C48u-2qp.js → ANnPTMPF.js} +1 -1
  17. package/build/client/_app/immutable/chunks/{BfChGCnE.js → B5S0Wke9.js} +1 -1
  18. package/build/client/_app/immutable/chunks/BBDOLPkB.js +1 -0
  19. package/build/client/_app/immutable/chunks/{DJ36HFmi.js → BImoJlJo.js} +1 -1
  20. package/build/client/_app/immutable/chunks/{DqRXQwgi.js → BJsp4NMH.js} +1 -1
  21. package/build/client/_app/immutable/chunks/{C7a8i7sD.js → BKU5-8Td.js} +1 -1
  22. package/build/client/_app/immutable/chunks/BMgyB-Sy.js +1 -0
  23. package/build/client/_app/immutable/chunks/BYHxHjHc.js +1 -0
  24. package/build/client/_app/immutable/chunks/{BC5nqwvj.js → BZ6uvzU8.js} +1 -1
  25. package/build/client/_app/immutable/chunks/{CvjdFV1E.js → B_Gknb5_.js} +1 -1
  26. package/build/client/_app/immutable/chunks/{CDTTZjYW.js → Bf1I5ROF.js} +1 -1
  27. package/build/client/_app/immutable/chunks/{CaAId7nh.js → Bh_Z0-Fh.js} +1 -1
  28. package/build/client/_app/immutable/chunks/{CLvIgAhR.js → BjafRUyA.js} +1 -1
  29. package/build/client/_app/immutable/chunks/{CG77uzLI.js → Bq4mG8qS.js} +1 -1
  30. package/build/client/_app/immutable/chunks/{CI1tkkzb.js → BqX9BB0G.js} +1 -1
  31. package/build/client/_app/immutable/chunks/BwNsQhd8.js +1 -0
  32. package/build/client/_app/immutable/chunks/{CvWnUnS1.js → Bx68-tOf.js} +1 -1
  33. package/build/client/_app/immutable/chunks/{RIIj2qfU.js → C1dC47iq.js} +1 -1
  34. package/build/client/_app/immutable/chunks/{BNx4_m7U.js → C6zqVyWx.js} +1 -1
  35. package/build/client/_app/immutable/chunks/{GLtnCmfd.js → C8seIiU_.js} +1 -1
  36. package/build/client/_app/immutable/chunks/{B_6pr4k2.js → CCWXLdgd.js} +1 -1
  37. package/build/client/_app/immutable/chunks/{D5ecapQY.js → CHYEvS-6.js} +1 -1
  38. package/build/client/_app/immutable/chunks/{OVDjSnH6.js → CIH5Juz4.js} +1 -1
  39. package/build/client/_app/immutable/chunks/CMByLjfJ.js +1 -0
  40. package/build/client/_app/immutable/chunks/{CnAA0dO8.js → CNJYmM8n.js} +1 -1
  41. package/build/client/_app/immutable/chunks/CP4wchdA.js +2 -0
  42. package/build/client/_app/immutable/chunks/{B2hm1w7K.js → CQTGR8fW.js} +1 -1
  43. package/build/client/_app/immutable/chunks/{Bp4vT1Ke.js → CW2uYEvb.js} +1 -1
  44. package/build/client/_app/immutable/chunks/{BPFR73BS.js → C_Gd0Wor.js} +1 -1
  45. package/build/client/_app/immutable/chunks/{Dn4fSUjR.js → C_MwBDNt.js} +1 -1
  46. package/build/client/_app/immutable/chunks/{Dea0pTfN.js → Ch7rc-L7.js} +4 -4
  47. package/build/client/_app/immutable/chunks/{J3KpJGd_.js → ChC4viXw.js} +1 -1
  48. package/build/client/_app/immutable/chunks/{4pCoNSa4.js → CiLhSVIj.js} +1 -1
  49. package/build/client/_app/immutable/chunks/{C7iYNw8X.js → Cx8YXmgi.js} +1 -1
  50. package/build/client/_app/immutable/chunks/{BRNBFqQ_.js → D4I0Dqwh.js} +1 -1
  51. package/build/client/_app/immutable/chunks/D6mTYwDH.js +6 -0
  52. package/build/client/_app/immutable/chunks/{l5GiMY16.js → D7-uGicP.js} +1 -1
  53. package/build/client/_app/immutable/chunks/{C8wGq5T2.js → D7XrPGMK.js} +1 -1
  54. package/build/client/_app/immutable/chunks/{xRO38jd8.js → D7eKc9ur.js} +1 -1
  55. package/build/client/_app/immutable/chunks/{CEj_BGCY.js → DCmONIPx.js} +1 -1
  56. package/build/client/_app/immutable/chunks/DJWLLhNJ.js +1 -0
  57. package/build/client/_app/immutable/chunks/{qkxAgKjo.js → DNf96C-O.js} +1 -1
  58. package/build/client/_app/immutable/chunks/{D4Ogpdhb.js → DSqRqQNp.js} +1 -1
  59. package/build/client/_app/immutable/chunks/{D4xFb7_b.js → DT1b6JaK.js} +1 -1
  60. package/build/client/_app/immutable/chunks/{D3bC95qg.js → DWYSL4om.js} +1 -1
  61. package/build/client/_app/immutable/chunks/{Bi5NvDds.js → DYfx-RRD.js} +1 -1
  62. package/build/client/_app/immutable/chunks/{Bi25XSWW.js → DfIqw6WM.js} +1 -1
  63. package/build/client/_app/immutable/chunks/{CGux-rdo.js → Dj4_qcIH.js} +4 -4
  64. package/build/client/_app/immutable/chunks/{Cx__ttXF.js → Dk9aRp2m.js} +1 -1
  65. package/build/client/_app/immutable/chunks/{C-58cZAk.js → DmLHHlla.js} +3 -3
  66. package/build/client/_app/immutable/chunks/{GNZHLVjs.js → Do0VAo0_.js} +1 -1
  67. package/build/client/_app/immutable/chunks/{BFsDYOFz.js → DrVddB75.js} +1 -1
  68. package/build/client/_app/immutable/chunks/{CdFbOrCf.js → Dso_gKeU.js} +1 -1
  69. package/build/client/_app/immutable/chunks/{Bl78Sc72.js → DykTZ90H.js} +1 -1
  70. package/build/client/_app/immutable/chunks/{DNlR6G0m.js → GdM4UPkS.js} +1 -1
  71. package/build/client/_app/immutable/chunks/{B52Khb6E.js → IBXFCASw.js} +1 -1
  72. package/build/client/_app/immutable/chunks/{BIUi504d.js → IoX9lmZK.js} +1 -1
  73. package/build/client/_app/immutable/chunks/{Bn64J6A-.js → bpkmZ_Dv.js} +1 -1
  74. package/build/client/_app/immutable/chunks/{iK_uzrhN.js → crRp5OG4.js} +1 -1
  75. package/build/client/_app/immutable/chunks/da2fibLv.js +8 -0
  76. package/build/client/_app/immutable/chunks/{BOKyldQm.js → dcghWWmq.js} +1 -1
  77. package/build/client/_app/immutable/chunks/{CItDRTlN.js → fJBuRi-A.js} +1 -1
  78. package/build/client/_app/immutable/chunks/{CRe9IZg0.js → gXyYVhfn.js} +1 -1
  79. package/build/client/_app/immutable/chunks/{C2vkjTiv.js → j2lJ25s0.js} +1 -1
  80. package/build/client/_app/immutable/chunks/{DypDva7F.js → l3etNtOh.js} +1 -1
  81. package/build/client/_app/immutable/chunks/{BGQXNvll.js → olUfRNXS.js} +1 -1
  82. package/build/client/_app/immutable/chunks/{D3W5wGWM.js → uEyn1Z7p.js} +1 -1
  83. package/build/client/_app/immutable/entry/app.CCuVGpQc.js +2 -0
  84. package/build/client/_app/immutable/entry/start.BtgtnpyB.js +1 -0
  85. package/build/client/_app/immutable/nodes/0.GHtnahSb.js +1 -0
  86. package/build/client/_app/immutable/nodes/1.CaQ_jAq8.js +1 -0
  87. package/build/client/_app/immutable/nodes/2.DxOLlTKc.js +337 -0
  88. package/build/client/_app/version.json +1 -1
  89. package/build/handler.js +7 -6
  90. package/build/index.js +7 -6
  91. package/build/server/chunks/chunks/{app-config.svelte.js-BW7TwbBy.js → app-config.svelte.js-D7wkLUkK.js} +2 -2
  92. package/build/server/chunks/chunks/{db.js-BylhmazO.js → db.js-DRhjT6xK.js} +2 -2
  93. package/build/server/chunks/chunks/{db2.js-Cm8FBINY.js → db2.js-DUta2B-n.js} +207 -222
  94. package/build/server/chunks/chunks/{dsh-connection.js-Lnv7PlHw.js → dsh-connection.js-DRtqPR_j.js} +959 -752
  95. package/build/server/chunks/chunks/{dsh-events.js-D9tSYE7f.js → dsh-events.js-B_E1BU9F.js} +141 -350
  96. package/build/server/chunks/chunks/{git-probe.js-D_H3YQbR.js → git-probe.js-Daf6r7Z9.js} +3 -3
  97. package/build/server/chunks/chunks/index-server.js-CV2lq-ha.js +147 -0
  98. package/build/server/chunks/chunks/{insight-config.js-XUD5BN0g.js → insight-config.js-CA-iT3lB.js} +5 -3
  99. package/build/server/chunks/chunks/{internal2.js-BcS47nI-.js → internal.js-BcS47nI-.js} +1 -1
  100. package/build/server/chunks/chunks/{internal.js-D_QJoxN-.js → internal2.js-DAPn3Vk8.js} +11 -153
  101. package/build/server/chunks/chunks/merge.js-yMwW440S.js +228 -0
  102. package/build/server/chunks/chunks/{server.js-11-pxAWV.js → server.js-DqHGsQU2.js} +2 -2
  103. package/build/server/chunks/chunks/{state.js-DbUk4Hrz.js → state.js-CsIZcr7q.js} +5 -4
  104. package/build/server/chunks/chunks/theme-prefs.svelte.js-8CaWz46g.js +109 -0
  105. package/build/server/chunks/chunks/{watcher.js-DU-MZGLU.js → watcher.js-CoR53lwR.js} +5 -5
  106. package/build/server/chunks/entries/endpoints/api/a2a/_id_/{_server.ts.js-DQenu1Rx.js → _server.ts.js-CpeC2QLb.js} +3 -3
  107. package/build/server/chunks/entries/endpoints/api/a2a/{_server.ts.js-BvEDeAhP.js → _server.ts.js-BKlF4XGH.js} +7 -6
  108. package/build/server/chunks/entries/endpoints/api/a2a/register/{_server.ts.js-DLJ4sQBq.js → _server.ts.js-BpEhlidV.js} +7 -6
  109. package/build/server/chunks/entries/endpoints/api/config/{_server.ts.js-zogZnK_B.js → _server.ts.js-BG78X__J.js} +3 -3
  110. package/build/server/chunks/entries/endpoints/api/dsh/directory/{_server.ts.js-BAfRDeE_.js → _server.ts.js-Dmh7f-hU.js} +3 -3
  111. package/build/server/chunks/entries/endpoints/api/dsh/pick-directory/{_server.ts.js-N21TnqYh.js → _server.ts.js-BEci0ZAx.js} +3 -3
  112. package/build/server/chunks/entries/endpoints/api/dsh/presets/{_server.ts.js-C5ckDTov.js → _server.ts.js-OXFzXBSp.js} +3 -3
  113. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/attachment/{_server.ts.js-CEPz4kVZ.js → _server.ts.js-x44GKy4R.js} +3 -3
  114. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/cancel/{_server.ts.js-CUB5TKnW.js → _server.ts.js-Da5ZqeJ7.js} +3 -3
  115. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/catalog/{_server.ts.js-BfDAa0Vb.js → _server.ts.js-BACv9hW-.js} +3 -3
  116. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/changes/{_server.ts.js-QiLS5yAj.js → _server.ts.js-BtiUS3iD.js} +3 -3
  117. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/command/{_server.ts.js-C5kJrRx-.js → _server.ts.js-BOOyd1LI.js} +3 -3
  118. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/events/{_server.ts.js-vydjdEkJ.js → _server.ts.js-D0GwQbdF.js} +5 -4
  119. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/fork/{_server.ts.js-y5sqH_UC.js → _server.ts.js-Bd0JYMlf.js} +3 -3
  120. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/goal/{_server.ts.js-BoYIpj-f.js → _server.ts.js-DqAV7OOv.js} +3 -3
  121. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/history/{_server.ts.js-SchAEll8.js → _server.ts.js-Cz4P-68E.js} +5 -4
  122. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/models/{_server.ts.js-B8bmQCwT.js → _server.ts.js-C4fXXBIM.js} +3 -3
  123. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/path/{_server.ts.js-DxiKkvE-.js → _server.ts.js-_SIiC8sn.js} +2 -2
  124. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/permission/{_server.ts.js-BBexDstc.js → _server.ts.js-BiqNZiiN.js} +3 -3
  125. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/prompt/{_server.ts.js-fd9StFXw.js → _server.ts.js-Bdx9V4oY.js} +3 -3
  126. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/rename/{_server.ts.js-98HaDusY.js → _server.ts.js-CuBqoV3c.js} +3 -3
  127. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/respond/{_server.ts.js-DN9APffn.js → _server.ts.js-CXPFI_Pn.js} +3 -3
  128. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/select-model/{_server.ts.js-CeROEmUY.js → _server.ts.js-CRcaw4Yo.js} +3 -3
  129. package/build/server/chunks/entries/endpoints/api/dsh/sessions/{_server.ts.js-DKHmiqIs.js → _server.ts.js-dYrtVHDP.js} +3 -3
  130. package/build/server/chunks/entries/endpoints/api/dsh/workspace-file/{_server.ts.js-S6XZDJmC.js → _server.ts.js-BtlfuMjf.js} +3 -3
  131. package/build/server/chunks/entries/endpoints/api/dsh/workspace-tree/{_server.ts.js-CA4PUERZ.js → _server.ts.js-D12kAP9B.js} +3 -3
  132. package/build/server/chunks/entries/endpoints/api/dsh/workspaces/{_server.ts.js-BObM3Axz.js → _server.ts.js-C9JHp1WU.js} +3 -3
  133. package/build/server/chunks/entries/endpoints/api/dsh/workspaces/_workspaceId_/delete/{_server.ts.js-CA34p4GV.js → _server.ts.js-bLF4Fbgn.js} +3 -3
  134. package/build/server/chunks/entries/endpoints/api/dsh/workspaces/_workspaceId_/rename/{_server.ts.js-DPoRM_7u.js → _server.ts.js-BSw_zD-0.js} +3 -3
  135. package/build/server/chunks/entries/endpoints/api/prompts/_id_/{_server.ts.js-u-regI3R.js → _server.ts.js-bRLZ5TWI.js} +3 -3
  136. package/build/server/chunks/entries/endpoints/api/prompts/{_server.ts.js-YtkQGu7O.js → _server.ts.js-ChzWZoFk.js} +3 -3
  137. package/build/server/chunks/entries/endpoints/api/prompts/use/{_server.ts.js-tv0ivn2x.js → _server.ts.js-DdH5QmPS.js} +3 -3
  138. package/build/server/chunks/entries/endpoints/api/settings/{_server.ts.js-DmU2MBc5.js → _server.ts.js-DwGQj520.js} +2 -2
  139. package/build/server/chunks/entries/endpoints/api/terminal/{_server.ts.js-DHhod6dT.js → _server.ts.js-CwXC6Stk.js} +3 -2
  140. package/build/server/chunks/entries/endpoints/api/workspace/file-write/{_server.ts.js-BmEUPTSa.js → _server.ts.js-CqyKA9g2.js} +6 -5
  141. package/build/server/chunks/entries/endpoints/api/workspace/git-events/{_server.ts.js-_1uYvYEA.js → _server.ts.js-yu695YoE.js} +6 -5
  142. package/build/server/chunks/entries/endpoints/api/workspace/git-file-head/{_server.ts.js-DaXO3et9.js → _server.ts.js-BhDAvM6y.js} +6 -5
  143. package/build/server/chunks/entries/endpoints/api/workspace/git-map/{_server.ts.js-hp85iKSu.js → _server.ts.js-BRUgPrJ2.js} +6 -5
  144. package/build/server/chunks/entries/endpoints/api/workspace/git-status/{_server.ts.js-CPB-9252.js → _server.ts.js-C7VJ2G4_.js} +6 -5
  145. package/build/server/chunks/entries/endpoints/api/workspace/write-gate/{_server.ts.js-DKqzSQBE.js → _server.ts.js-BH5BRA_d.js} +6 -5
  146. package/build/server/chunks/entries/pages/{_error.svelte.js-AsgAVyDR.js → _error.svelte.js-B5TEtccE.js} +10 -9
  147. package/build/server/chunks/entries/pages/_layout.svelte.js-DRfiLzlz.js +20 -0
  148. package/build/server/chunks/entries/pages/{_page.server.ts.js-DTjoTdYK.js → _page.server.ts.js-CityLNBO.js} +3 -3
  149. package/build/server/chunks/entries/pages/{_page.svelte.js-CFdCjELr.js → _page.svelte.js-i6KsWK9O.js} +4654 -2413
  150. package/build/server/chunks/{handler-Bx2fbkEJ.js → handler-XuK3Ihhf.js} +3 -3
  151. package/build/server/chunks/{index.js-BldXQ38P.js → index.js-D2FEiD0I.js} +5 -4
  152. package/build/server/chunks/{manifest.js-Du-9DaEd.js → manifest.js-B_kahcFI.js} +45 -45
  153. package/build/server/chunks/nodes/0.js-C0B2o0le.js +12 -0
  154. package/build/server/chunks/nodes/1.js-C2e7NFqd.js +9 -0
  155. package/build/server/chunks/nodes/{2.js-DGLcInR6.js → 2.js-Bh3kLeYq.js} +9 -8
  156. package/package.json +2 -2
  157. package/skills/dsi-sloc/SKILL.md +117 -0
  158. package/skills/dsi-sloc/references/measurement.md +79 -0
  159. package/skills/dsi-sloc/references/report-skeleton.md +79 -0
  160. package/skills/dsi-thin/SKILL.md +214 -0
  161. package/skills/dsi-thin/references/ADR-0019-snapshot.md +363 -0
  162. package/skills/dsi-thin/references/authority-adr.md +28 -0
  163. package/skills/dsi-thin/references/input-contract.md +42 -0
  164. package/skills/dsi-thin/references/proven-gates.md +61 -0
  165. package/skills/dsi-thin/references/two-lane-contract.md +53 -0
  166. package/template/.dsi/prompts.sqlite +0 -0
  167. package/template/.dsi/prompts.sqlite-shm +0 -0
  168. package/template/.dsi/prompts.sqlite-wal +0 -0
  169. package/template/.dsi/resources/skills-reff.md +5 -4
  170. package/build/client/_app/immutable/assets/0.CRU0GiZX.css +0 -2
  171. package/build/client/_app/immutable/assets/2.Bzy6Q5kl.css +0 -1
  172. package/build/client/_app/immutable/chunks/-BV4MEqr.js +0 -1
  173. package/build/client/_app/immutable/chunks/66qbK5h1.js +0 -2
  174. package/build/client/_app/immutable/chunks/BLxS3bAX.js +0 -6
  175. package/build/client/_app/immutable/chunks/CPhcxli7.js +0 -1
  176. package/build/client/_app/immutable/chunks/CT1m72HM.js +0 -1
  177. package/build/client/_app/immutable/chunks/CxnI-Htc.js +0 -8
  178. package/build/client/_app/immutable/chunks/D0uZseUH.js +0 -1
  179. package/build/client/_app/immutable/chunks/D73RufXg.js +0 -1
  180. package/build/client/_app/immutable/chunks/HwuqC1sa.js +0 -1
  181. package/build/client/_app/immutable/chunks/NtHUheoE.js +0 -1
  182. package/build/client/_app/immutable/entry/app.D8WfdLSe.js +0 -2
  183. package/build/client/_app/immutable/entry/start.CVl0g0cv.js +0 -1
  184. package/build/client/_app/immutable/nodes/0.k1Ikzbp6.js +0 -1
  185. package/build/client/_app/immutable/nodes/1.X0If5xAN.js +0 -1
  186. package/build/client/_app/immutable/nodes/2.CELzu2i6.js +0 -337
  187. package/build/server/chunks/entries/pages/_layout.svelte.js-EFiihTdF.js +0 -18
  188. package/build/server/chunks/nodes/0.js-B0560RI0.js +0 -12
  189. package/build/server/chunks/nodes/1.js-D55AmdZs.js +0 -9
@@ -0,0 +1,79 @@
1
+ # Measurement Reference — Raw-Code SLOC in DSI
2
+
3
+ How to count SLOC excluding comments and blank lines, per file, in this repo.
4
+
5
+ ## The metric
6
+
7
+ - **Raw-code SLOC** = physical lines minus blank lines minus comment lines (the `sloc` npm package's `source` key).
8
+ - **Why not `wc -l`**: DSI's comment+blank density is ~35% (measured 2026-10-10: 39,402 raw out of ~60,670 physical). Ranking by `wc -l` promotes comment-heavy files and hides dense ones.
9
+ - `*.svelte` files are analyzed as JS (the analyzer has no Svelte grammar; template markup counts as code). State this in the report methodology line.
10
+
11
+ ## Tooling gotchas (learned the hard way, 2026-10-10)
12
+
13
+ 1. `npx -y sloc` (the CLI) prints only an AGGREGATE — useless for ranking. You need per-file counts.
14
+ 2. `npx -y -p sloc node script.mjs` does **NOT** make `sloc` importable from the script — the npx install tree is not on the script's module resolution path (`ERR_MODULE_NOT_FOUND`).
15
+ 3. **Working pattern**: create a temp env and install into it, then run the script from the project root (the script walks relative paths, so cwd matters):
16
+
17
+ ```bash
18
+ mkdir -p tmp/slocenv
19
+ cp tmp/sloc-raw.mjs tmp/slocenv/ # script shown below
20
+ cd tmp/slocenv && npm init -y >/dev/null && npm i sloc >/dev/null && cd ../..
21
+ node tmp/slocenv/sloc-raw.mjs
22
+ ```
23
+
24
+ 4. The `sloc` package is CommonJS; under ESM import both the default and the named exports defensively:
25
+
26
+ ```js
27
+ import slocMod from 'sloc';
28
+ const sloc = slocMod.default ?? slocMod;
29
+ const getLang = slocMod.getLang ?? slocMod.default?.getLang ?? (() => null);
30
+ ```
31
+
32
+ ## The per-file script (`tmp/sloc-raw.mjs`)
33
+
34
+ ```js
35
+ import { readdirSync, readFileSync } from 'node:fs';
36
+ import { join, extname } from 'node:path';
37
+ import slocMod from 'sloc';
38
+ const sloc = slocMod.default ?? slocMod;
39
+ const getLang = slocMod.getLang ?? slocMod.default?.getLang ?? (() => null);
40
+
41
+ const roots = ['src/lib', 'bin', 'scripts', 'plugins']; // adjust scope per invocation
42
+ const exts = ['.svelte', '.ts', '.js', '.mjs'];
43
+ const out = [];
44
+
45
+ function walk(d) {
46
+ for (const e of readdirSync(d, { withFileTypes: true })) {
47
+ if (e.name === 'paraglide' || e.name === '.svelte-kit') continue; // generated
48
+ const p = join(d, e.name);
49
+ if (e.isDirectory()) walk(p);
50
+ else if (exts.includes(extname(e.name))) {
51
+ const lang = extname(e.name) === '.svelte' ? 'js' : (getLang(extname(e.name).slice(1)) || 'js');
52
+ out.push({ p, n: sloc(readFileSync(p, 'utf8'), lang).source });
53
+ }
54
+ }
55
+ }
56
+ roots.forEach(walk);
57
+ out.sort((a, b) => b.n - a.n);
58
+ for (const f of out.filter(f => f.n > 500)) console.log(String(f.n).padStart(6), f.p);
59
+ console.log('---');
60
+ console.log('files:', out.length, 'total raw SLOC:', out.reduce((s, f) => s + f.n, 0));
61
+ ```
62
+
63
+ To also capture TOTAL lines per file (the report's second column), add `total: c.split('\n').length` alongside `n`.
64
+
65
+ ## Scope rules
66
+
67
+ | Include | Exclude |
68
+ |---|---|
69
+ | `src/lib/**` (.svelte, .ts, .svelte.ts) | `src/lib/paraglide/**` (generated i18n) |
70
+ | `bin/**`, `scripts/**`, `plugins/**` | `.svelte-kit/**`, `build/**`, `node_modules/**` |
71
+ | `.mjs` tooling scripts | `static/**`, `messages/**`, docs and specs |
72
+
73
+ Extend `roots` when the user asks for a different scope; never silently include generated code.
74
+
75
+ ## Interpreting the two columns
76
+
77
+ - **raw ≈ total** → the file is dense logic (few comments) — size is real complexity.
78
+ - **raw << total** → comments/markup dominate — check whether the `wc -l` impression was misleading (Svelte components commonly halve).
79
+ - The gap itself is a report finding; state it in the Patterns section.
@@ -0,0 +1,79 @@
1
+ # Report Skeleton — the Four-Question Format
2
+
3
+ The report format hardened after the operator rejected the first draft as "copy-paste, not layman friendly". The failure mode to avoid: paragraphs that string together thirty backticked identifiers — technically accurate, unreadable.
4
+
5
+ ## File conventions
6
+
7
+ - Path: `dev/sloc/{TODAY} - SLOC Report - Files Over {N} Raw-Code Lines.md`
8
+ - `TODAY` from `date +%Y-%m-%d`, never from context
9
+ - Numbered sections, heaviest file first
10
+
11
+ ## Report structure (in order)
12
+
13
+ 1. **Header** — date, scope, file count, total raw-code SLOC, metric definition (one line: "Raw-code lines = SLOC excluding comments and blanks, measured with the `sloc` analyzer").
14
+ 2. **"How to read this report"** — names the four questions so the reader knows every section has the same shape.
15
+ 3. **The over-threshold table** — columns: raw code | total lines | file path. Ranked descending by raw.
16
+ 4. **Per-file sections** — the skeleton below.
17
+ 5. **"Patterns worth noticing"** — 2-4 cross-file takeaways. MANDATORY. Good pattern topics: infra vs UI weight; who owns state vs who is pure; "heavy because it wires, not because it renders"; the raw-vs-total gap.
18
+
19
+ ## The four-question skeleton (per file)
20
+
21
+ Every section answers the same four questions in the same order:
22
+
23
+ ```markdown
24
+ ### {n}. {FileName} — {raw} code lines
25
+
26
+ **What is it?** One plain sentence a newcomer understands. Name its role, not its functions.
27
+
28
+ **State it owns:**
29
+ - The data living inside it, in plain terms (one bullet per cluster, not per variable)
30
+ - Or: "None — it is a pure decision-maker / pure mapping library" when true
31
+
32
+ **Jobs it does (grouped):**
33
+ - *Concern name in italics* — what it does for the user/system, in a clause; `functionName` in backticks only as a handle
34
+ - Biggest concern first, 4-6 groups
35
+
36
+ **Who does it talk to?** Neighbours and boundaries over HTTP/events/imports. End with what has ALREADY been split out into siblings — it tells the reader the file's remaining weight is deliberate.
37
+ ```
38
+
39
+ ## Layman rules
40
+
41
+ 1. **The newcomer test**: after one read, could someone repeat the file's story to a colleague? If a bullet only works if you already know the function, rewrite it.
42
+ 2. **Lead with the metaphor, keep the handle second**: "the single phone line between DSI and the harness — every message goes through this one file". Then `getDshConnection` may appear once as the handle.
43
+ 3. **Group, don't list**: "Placement and selection — deciding where a new panel lands, deduping re-opens, removing a panel plus its children" — NOT a bare list of `insertionSlot`, `pinnedSlotIndex`, `removePanel`.
44
+ 4. **Verbs over nouns**: "detects gaps (missed messages)" beats "coverageFloor gap detection".
45
+ 5. **Say "none — pure" proudly**: statelessness is the most useful fact a reader can learn about a file.
46
+ 6. **Backticks are handles, not prose.** If removing all backticks makes a bullet meaningless, the bullet is a name-dump. Rewrite.
47
+
48
+ ## Worked example (the section that passed)
49
+
50
+ ```markdown
51
+ ### 3. prompts/db.ts — 777 code lines
52
+
53
+ **What is it?** The database behind the prompt Shelf — a small local SQLite file that
54
+ remembers your saved prompts and which ones you actually use.
55
+
56
+ **State it owns:**
57
+ - The SQLite database itself, opened from a config-path ladder and cached so it opens only once.
58
+
59
+ **Jobs it does (grouped):**
60
+ - *Setup* — migrates the schema to v4 (adds full-text search with typo-tolerant trigram matching, and a tags column).
61
+ - *Recording habit* — bumps a prompt's use count on every send; prunes the table at 5,000 rows.
62
+ - *Finding prompts* — a three-tier search waterfall: exact substring, then full-text, then a fuzzy re-rank by word similarity. Includes a guard so the search box doesn't match itself.
63
+ - *Manager editing* — list with sorting and tag filters, create, update, rename, delete.
64
+
65
+ **Who does it talk to?** Serves the composer's help finder and the PromptManagerPanel — but only
66
+ through the /api/prompts HTTP layer; the UI never imports this file directly.
67
+ ```
68
+
69
+ ## Subagent fan-out pattern
70
+
71
+ For 4+ offender files, read them in parallel subagents instead of serially:
72
+
73
+ - **Group by layer** (server / services / components) — 2-3 files per agent.
74
+ - The prompt must be **self-contained**: absolute repo path, the exact file list with raw-code figures, the four-question skeleton, the layman rules above, and this style anchor:
75
+
76
+ > Style example (do not copy content): "And what's in those 509 code lines now: the props contract, submit receipt ladder, sync registration, wiring of the four controllers, effects, and the template."
77
+
78
+ - Demand: "Return ONLY the finished markdown sections."
79
+ - **⛔ Never paste subagent output straight into the report.** Subagents drift toward identifier dumps even with the rules in front of them — treat their output as RESEARCH NOTES and re-render each section through the skeleton yourself. This re-render is where the layman language actually gets enforced.
@@ -0,0 +1,214 @@
1
+ ---
2
+ name: "dsi-thin"
3
+ description: "Meta skill: take the dsi-sloc over-threshold report as input and batch-refactor multiple files to the ADR-0019 thin-shell standard. Four phases in strict order: SLOC list → per-file ADR (dsi-adr) → per-file spec docs (dsi-spec: Karpathy + PRD + Tasks md + tasks.json) → VERIFICATION GATE (abort if any folder incomplete) → execution by a rolling pool of TWO parallel dsi-task sub-agents. Reserved keyword: /dsi-thin."
4
+ ---
5
+
6
+ # DSI Thin — Batch Refactor from the SLOC Report
7
+
8
+ One trigger → batch thin-shell refactor. The `dsi-sloc` report is the input
9
+ contract; the ADR-0019 standard is the authority. The batch runs as **five
10
+ phases in strict order, and the order itself is the gate**:
11
+
12
+ 1. **SLOC generation** — run `dsi-sloc`, curate the over-threshold list.
13
+ 2. **Per-file ADR** — `dsi-adr` for each listed file.
14
+ 3. **Document generation** — `dsi-spec` for each listed file: Karpathy
15
+ context + PRD + Tasks (md) + tasks.json, committed BEFORE any code.
16
+ 4. **Verification** — every spec folder must contain all four artifacts.
17
+ If ANY folder is incomplete: **ABORT the batch.** Do not "fix it later",
18
+ do not proceed with the complete ones. An incomplete folder at this gate
19
+ means the pipeline is broken; running code past it wastes the operator's
20
+ time (RCA 2026-10-10 — six folders, zero Karpathy, zero tasks.json).
21
+ 5. **Execution** — a rolling pool of TWO parallel sub-agents, each running
22
+ `dsi-task` only. Lanes never write specs; specs already exist and are
23
+ verified.
24
+
25
+ Why the order is hard: in the 2026-10-10 batch (ADR-0021), spec generation
26
+ lived inside the lane sub-agent's job. Dispatch prompts summarized the
27
+ four-artifact pipeline down to "write a short PRD", the artifacts were
28
+ silently dropped, and PRDs entered git in the same commit as — or after —
29
+ the code they governed. Green-outcome gates (tests, census, dep-graph)
30
+ could not see the violation. This skill's fix is structural: specs are
31
+ produced and verified by the orchestrator BEFORE any code wave may start.
32
+
33
+ ## When to Use
34
+
35
+ - User runs `/dsi-thin` or says "thin out the fat files" / "refactor the sloc report list"
36
+ - A freshly-landed thin-shell standard (e.g. ADR-0019) needs applying to the remaining over-threshold files
37
+
38
+ ### Prerequisites ⛔
39
+
40
+ - An **authority ADR** must exist that defines the thin-shell standard. If absent, STOP — draft it first via `dsi-adr`; this skill applies a standard, it does not invent one.
41
+ - **Resolving the authority ADR — see `references/authority-adr.md`** for the full rules. Summary:
42
+ 1. **Live first**: discover the newest thin-shell ADR in `dev/architectural-decission/` (grep for the standard's name, e.g. "Floor Registry" / "thin shell"). Pick the ADR that **DEFINES the standard**, not merely applies it: if a candidate's TL;DR says it applies/extends another ADR's method (e.g. ADR-0020 applies ADR-0019's move-whole method at component scale), climb to the one it cites. The defining ADR's path goes into the batch ADR citation; applying ADRs (e.g. ADR-0020) are cited as WORKED EXAMPLES, not authority.
43
+ 2. **Snapshot fallback**: `references/ADR-0019-snapshot.md` is a dated copy of the standard at skill-freeze time — use it when the repo has no match (fresh clone, wrong repo, mirror-only context), and LABEL the run as snapshot-based.
44
+ 3. **Drift check**: when both exist and the live ADR is newer than the snapshot, note "live ADR differs from snapshot" and follow the LIVE one; refresh the snapshot as part of batch close.
45
+ - A fresh `dsi-sloc` report under `dev/sloc/` (run it if the latest is stale — files refactored since the report dropped below threshold and must not be re-picked).
46
+
47
+ ---
48
+
49
+ ## Step 0.5: Date Resolution ⛔ MANDATORY
50
+
51
+ Resolve today's date via `date +%Y-%m-%d`. Store as `TODAY`. Never infer from context.
52
+
53
+ ## Phase 1: SLOC Generation — Curate the Input List
54
+
55
+ 1. Run the `dsi-sloc` skill → produces `dev/sloc/{date} - SLOC Report - *.md` with the over-threshold table.
56
+ 2. **Re-verify each candidate live** — re-run the per-file SLOC count (`references/input-contract.md`); the report may be stale.
57
+ 3. Present the ranked list to the user with, per file: raw code, its touchpoints (which shared registries/servers it hits), and a suggested **lane assignment** (see Phase 5).
58
+ 4. User picks, skips, and reorders. The confirmed list is the batch contract. Do NOT proceed without it.
59
+
60
+ ## Phase 2: Branch + Batch ADR + Per-File ADRs
61
+
62
+ 1. **One branch per batch**: `refactor/thin-batch-{TODAY}`, created and activated BEFORE any artifact.
63
+ 2. **One batch ADR** via `dsi-adr` — the depth rule applies to what is actually DECIDED here:
64
+ - Cite the authority ADR (ADR-0019) as the standard being applied; do NOT re-argue it.
65
+ - Decide only batch-specific questions: the confirmed file list, per-file exclusions and why, which frozen registries amend, the two-lane concurrency contract, and accepted give-ups.
66
+ - Numbered decisions (D1…Dn), each naming its rejected alternative; diagram showing the five-phase pipeline and the two-lane pool.
67
+ 3. **Per-file ADR** — for EVERY file on the confirmed list, run `dsi-adr` to produce that file's refactoring ADR (what moves whole, where it lands, which frozen crossings it touches), committed to the batch branch BEFORE Phase 3. Do not summarize a file's ADR into the batch ADR — one ADR per file, or the per-file plan is a dispatch-prompt rumor again.
68
+ - Excluded files get a named rejection in the batch ADR instead of a per-file ADR.
69
+
70
+ ## Phase 3: Document Generation — dsi-spec Per File ⛔
71
+
72
+ For EVERY file on the confirmed list, run the `dsi-spec` skill itself —
73
+ **never a hand-written summary of it** (RCA 2026-10-10: dispatch prompts
74
+ that summarized the pipeline produced 0 Karpathy contexts and 0 tasks.json
75
+ across six files). Each run generates its folder under
76
+ `dev/specs/{YYYY-MM}/{TODAY} - {File} Thin Shell/` containing ALL FOUR:
77
+
78
+ - Karpathy context (the self-interrogation document)
79
+ - PRD
80
+ - Tasks document (markdown, visible checklist)
81
+ - tasks.json (machine-readable)
82
+
83
+ **Commit each file's spec folder to the batch branch before any code for
84
+ that file exists.** A spec commit is a gate input, not a deliverable: the
85
+ execution phase refuses a file whose spec commit is not already in its
86
+ history.
87
+
88
+ ## Phase 4: Verification Gate ⛔ ABORT ON FAILURE
89
+
90
+ Before dispatching ANY lane, verify per file, mechanically — `ls` the
91
+ folder, do not trust self-reports (the 2026-10-10 audit found lane
92
+ self-reports said "spec artifacts written" while meaning "a PRD exists"):
93
+
94
+ - [ ] folder `dev/specs/{YYYY-MM}/{TODAY} - {File} Thin Shell/` exists
95
+ - [ ] Karpathy context file present and non-empty
96
+ - [ ] PRD present and non-empty
97
+ - [ ] Tasks markdown present and non-empty
98
+ - [ ] tasks.json present and valid JSON
99
+ - [ ] spec folder commit precedes any code commit for the file (`git log` — for a fresh batch there are no code commits yet, so trivially true)
100
+
101
+ **If ANY file fails: ABORT the entire batch.** Report which files, which
102
+ artifacts, and stop. Do not run the lanes on the "complete" subset — an
103
+ incomplete folder means the generation pipeline itself failed, and
104
+ executing past the gate is exactly the paperwork-after-the-machine defect
105
+ this gate exists to prevent. Fix the generation, re-run Phase 3, re-verify.
106
+
107
+ ## Phase 5: Execution — The Two-Lane Rolling Pool ⛔ THE CORE MECHANIC
108
+
109
+ Only reachable when Phase 4 is fully green. Run the batch through **two
110
+ lanes, each a sub-agent running `dsi-task`, always two in flight**. The
111
+ moment one lane's file fully completes (waves committed, gates green),
112
+ immediately dispatch the next queued file into that lane. Never zero
113
+ in-flight, never three. **Lane agents NEVER write specs** — the folder they
114
+ need is verified present; they read it and execute.
115
+
116
+ ### Concurrency safety — see `references/two-lane-contract.md` for the full contract
117
+
118
+ - **Lane isolation by git worktree**: each lane gets its own worktree (`.worktrees/lane-a`, `.worktrees/lane-b`) branched from the batch branch, so two agents never share one working tree, one dev-server port, or one suite baseline. `.worktrees/` MUST be in `.gitignore` before the first worktree is created (untracked lane dirs would pollute every main-tree `git status`/`add`).
119
+ - **Touchpoint disjointness**: when building the queue, pair files so the two in-flight files never mutate the same shared module (e.g. never floor-registry AND panel-registry together). If every pairing collides, fall back to strictly sequential for the colliding files — say so in the batch ADR.
120
+ - **Merge gate**: lane worktree commits merge back to the batch branch ONE LANE AT A TIME; the other lane keeps working undisturbed. After each merge, the merging lane re-bases its next file on the updated batch branch.
121
+ - **Suite baseline per lane**: each lane records the suite count from ITS starting commit; its gates compare against that. The merge gate re-runs the full suite on the batch branch after every merge.
122
+
123
+ ### Per-file unit (what each lane sub-agent does — dsi-task only)
124
+
125
+ 0. **Read the worked example first**: ADR-0020 + its spec folder + the wave completion notes (`dev/specs/2026-10/2026-10-10 - Composer Thin Shell/`) are the reference execution — and **check `references/proven-gates.md`** before writing any controller: paid-for lessons (`$effect.root` + `destroy()`, census assertion, live-getter props, focus fidelity) that fail quietly when skipped.
126
+ 1. Read the file's (already verified) spec folder + per-file ADR; run `dsi-task` for its waves — visible checklist in progress; behavior-neutral gates per wave: suites pass UNCHANGED (count + names), `svelte-autofixer` zero issues, `scripts/dep-graph.mjs --check` frozen crossings, **census assertion** (grep the shell for the moved declarations: zero hits)
127
+ 2. Commit per wave: `refactor(ADR-00XX Wn): {what moved whole} — suites pass unchanged (N), +M unit tests`
128
+ 3. If the file's floor registry must amend (the 500-line registry): stage the amendment in the lane, applied at merge time
129
+
130
+ ### Stop-the-line rule
131
+
132
+ A file whose suites cannot stay green unchanged, or that reveals the standard doesn't fit it, falls OUT of the batch: record it in the batch ADR as a named rejected/excluded item with the reason, and continue the pool with the next file. One bad file never blocks the batch.
133
+
134
+ ## Step 6: Goal + Todo Discipline (every batch)
135
+
136
+ - ONE batch goal at dispatch: objective = "Thin-shell refactor batch: {file list} per {authority ADR} on {branch}".
137
+ - Todos per phase per file: `file → ADR`, `file → spec`, `file → verify`, `file → W1`, `file → W2`, ..., plus one per merge-back and one for the final registry sweep.
138
+ - Update the todo the moment each unit completes; ALWAYS show the full todo list at every phase transition and after every lane completion. Never let the todo go stale between lane events.
139
+
140
+ ## Step 7: Close the Batch
141
+
142
+ 1. All files merged, pool drained.
143
+ 2. Registry sweep: every refactored file that dropped below threshold is removed from the floor registry; `dep-graph --check` green.
144
+ 3. Re-run `dsi-sloc` — the "after" report. The delta (before → after raw SLOC per file) is appended to the batch ADR as its evidence section.
145
+ 4. Batch ADR → Implemented ONLY when every picked file is done or explicitly excluded with reason.
146
+ 5. Show the final visible checklist: ALL `[✅]` / `[❌]` with reasons. Commit and push on user command (or per batch contract).
147
+
148
+ ---
149
+
150
+ ## Pipeline Checklist — MANDATORY
151
+
152
+ This is the ONLY checklist output to the user. Declared at the start. Verified at the end.
153
+
154
+ ```
155
+ 📋 dsi-thin: batch on {branch} — {n} files, spec-gated two-lane pool
156
+
157
+ [ ] 0.5 ⛔ Resolve today's date via `date +%Y-%m-%d` (store as TODAY)
158
+
159
+ Phase 1: SLOC Generation
160
+ [ ] 1.1 dsi-sloc run; report under dev/sloc/
161
+ [ ] 1.2 Candidates re-verified live; touchpoints identified; lane pairing plan built
162
+ [ ] 1.3 User confirmed the batch list
163
+
164
+ Phase 2: Branch + ADRs
165
+ [ ] 2.1 Branch refactor/thin-batch-{TODAY} created AND activated
166
+ [ ] 2.2 Batch ADR drafted via dsi-adr (cites authority ADR, decides batch specifics only)
167
+ [ ] 2.3 Per-file ADR via dsi-adr for EVERY confirmed file, committed (exclusions named in batch ADR)
168
+
169
+ Phase 3: Document Generation (per file)
170
+ [ ] 3.1 dsi-spec SKILL invoked per file (never summarized) — Karpathy + PRD + Tasks md + tasks.json
171
+ [ ] 3.2 Each spec folder committed to the batch branch
172
+
173
+ Phase 4: Verification Gate ⛔
174
+ [ ] 4.1 Per file: all four artifacts present and non-empty (checked via ls, not self-reports)
175
+ [ ] 4.2 tasks.json valid JSON
176
+ [ ] 4.3 ⛔ ANY failure = ABORT the batch, report, fix generation, re-run Phase 3
177
+ [ ] 4.4 Two-lane worktrees created from the batch branch (gate green only)
178
+
179
+ Phase 5: Execution — Rolling Pool (per file, until queue empty)
180
+ [ ] 5.1 dsi-task per file (visible checklist shown, behavior-neutral gates per wave)
181
+ [ ] 5.2 Lane merge-back one at a time, full suite green on batch branch after each
182
+ [ ] 5.3 Next file dispatched into the freed lane immediately (never 0 in-flight)
183
+ [ ] 5.4 Todos updated and SHOWN after every lane event
184
+
185
+ Step 7: Close
186
+ [ ] 7.1 Registry amendments applied; dep-graph --check green
187
+ [ ] 7.2 dsi-sloc re-run; before→after delta recorded in batch ADR
188
+ [ ] 7.3 Batch ADR marked Implemented (or exclusions recorded with reasons)
189
+ [ ] 7.4 Final checklist shown, all ✅/❌
190
+
191
+ ⛔ Behavioral Commitments:
192
+ [ ] I will NOT dispatch any lane until Phase 4 verification is fully green for EVERY file
193
+ [ ] I will NOT summarize dsi-spec into a dispatch prompt — the skill runs, all four artifacts
194
+ [ ] I will NOT proceed past a failed verification with a "complete subset" — I ABORT and fix generation
195
+ [ ] I will NOT run three sub-agents or let the pool drop to zero while queue remains
196
+ [ ] I will NOT let two in-flight files share a working tree or a shared-module mutation
197
+ [ ] I will NOT merge both lanes simultaneously — one lane at a time, suite-gated
198
+ [ ] I will NOT re-argue the authority ADR in the batch ADR
199
+ [ ] I will NOT let one failing file block the batch — it gets excluded with a reason
200
+ [ ] I will NOT go silent between lane events — todo + checklist always visible
201
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
202
+ ```
203
+
204
+ ### Check-Off Rules
205
+
206
+ - Re-output the checklist at each phase transition and after every lane merge with `[✅]` / `[🔄]` / `[ ]`
207
+ - At completion, output the final checklist: ALL `[✅]`, any `[❌]` for failures
208
+ - Do NOT deliver without showing the final checklist
209
+
210
+ ---
211
+
212
+ ## Attention-Degradation Protection
213
+
214
+ This skill stays SHORT. The input-contract mechanics live in `references/input-contract.md`; the full two-lane concurrency contract (worktrees, pairing, merge gate, failure recovery) lives in `references/two-lane-contract.md`; paid-for extraction lessons live in `references/proven-gates.md`; the verification-gate evidence lives in `dev/kb/rca/2026-10-10 - RCA — The Paperwork That Arrived With the Machine (Specs Written After the Code They Govern).md`. This file only orchestrates.