@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.
- package/.agents/skills/dsi-thin/SKILL.md +140 -0
- package/.agents/skills/dsi-thin/references/ADR-0019-snapshot.md +363 -0
- package/.agents/skills/dsi-thin/references/authority-adr.md +28 -0
- package/.agents/skills/dsi-thin/references/input-contract.md +42 -0
- package/.agents/skills/dsi-thin/references/proven-gates.md +61 -0
- package/.agents/skills/dsi-thin/references/two-lane-contract.md +53 -0
- package/build/client/_app/immutable/assets/0.B-dIufDc.css +2 -0
- package/build/client/_app/immutable/assets/2.B70dfiy3.css +1 -0
- package/build/client/_app/immutable/chunks/{B9fOkvHb.js → 0HT0ILkA.js} +1 -1
- package/build/client/_app/immutable/chunks/{Dwt_JXeR.js → 2KTqoQH-.js} +1 -1
- package/build/client/_app/immutable/chunks/{BIvFR1xA.js → 2M1KS72j.js} +1 -1
- package/build/client/_app/immutable/chunks/{a1Hqq5w-.js → 2XtVrxH4.js} +1 -1
- package/build/client/_app/immutable/chunks/38H6DLwz.js +1 -0
- package/build/client/_app/immutable/chunks/{Cdn_bzx2.js → 3E8jbhSl.js} +1 -1
- package/build/client/_app/immutable/chunks/{CmNEu9LM.js → A5Iiq81h.js} +1 -1
- package/build/client/_app/immutable/chunks/{C48u-2qp.js → ANnPTMPF.js} +1 -1
- package/build/client/_app/immutable/chunks/{BfChGCnE.js → B5S0Wke9.js} +1 -1
- package/build/client/_app/immutable/chunks/BBDOLPkB.js +1 -0
- package/build/client/_app/immutable/chunks/{DJ36HFmi.js → BImoJlJo.js} +1 -1
- package/build/client/_app/immutable/chunks/{DqRXQwgi.js → BJsp4NMH.js} +1 -1
- package/build/client/_app/immutable/chunks/{C7a8i7sD.js → BKU5-8Td.js} +1 -1
- package/build/client/_app/immutable/chunks/BMgyB-Sy.js +1 -0
- package/build/client/_app/immutable/chunks/BYHxHjHc.js +1 -0
- package/build/client/_app/immutable/chunks/{BC5nqwvj.js → BZ6uvzU8.js} +1 -1
- package/build/client/_app/immutable/chunks/{CvjdFV1E.js → B_Gknb5_.js} +1 -1
- package/build/client/_app/immutable/chunks/{CDTTZjYW.js → Bf1I5ROF.js} +1 -1
- package/build/client/_app/immutable/chunks/{CaAId7nh.js → Bh_Z0-Fh.js} +1 -1
- package/build/client/_app/immutable/chunks/{CLvIgAhR.js → BjafRUyA.js} +1 -1
- package/build/client/_app/immutable/chunks/{CG77uzLI.js → Bq4mG8qS.js} +1 -1
- package/build/client/_app/immutable/chunks/{CI1tkkzb.js → BqX9BB0G.js} +1 -1
- package/build/client/_app/immutable/chunks/BwNsQhd8.js +1 -0
- package/build/client/_app/immutable/chunks/{CvWnUnS1.js → Bx68-tOf.js} +1 -1
- package/build/client/_app/immutable/chunks/{RIIj2qfU.js → C1dC47iq.js} +1 -1
- package/build/client/_app/immutable/chunks/{BNx4_m7U.js → C6zqVyWx.js} +1 -1
- package/build/client/_app/immutable/chunks/{GLtnCmfd.js → C8seIiU_.js} +1 -1
- package/build/client/_app/immutable/chunks/{B_6pr4k2.js → CCWXLdgd.js} +1 -1
- package/build/client/_app/immutable/chunks/{D5ecapQY.js → CHYEvS-6.js} +1 -1
- package/build/client/_app/immutable/chunks/{OVDjSnH6.js → CIH5Juz4.js} +1 -1
- package/build/client/_app/immutable/chunks/CMByLjfJ.js +1 -0
- package/build/client/_app/immutable/chunks/{CnAA0dO8.js → CNJYmM8n.js} +1 -1
- package/build/client/_app/immutable/chunks/CP4wchdA.js +2 -0
- package/build/client/_app/immutable/chunks/{B2hm1w7K.js → CQTGR8fW.js} +1 -1
- package/build/client/_app/immutable/chunks/{Bp4vT1Ke.js → CW2uYEvb.js} +1 -1
- package/build/client/_app/immutable/chunks/{BPFR73BS.js → C_Gd0Wor.js} +1 -1
- package/build/client/_app/immutable/chunks/{Dn4fSUjR.js → C_MwBDNt.js} +1 -1
- package/build/client/_app/immutable/chunks/{Dea0pTfN.js → Ch7rc-L7.js} +4 -4
- package/build/client/_app/immutable/chunks/{J3KpJGd_.js → ChC4viXw.js} +1 -1
- package/build/client/_app/immutable/chunks/{4pCoNSa4.js → CiLhSVIj.js} +1 -1
- package/build/client/_app/immutable/chunks/{C7iYNw8X.js → Cx8YXmgi.js} +1 -1
- package/build/client/_app/immutable/chunks/{BRNBFqQ_.js → D4I0Dqwh.js} +1 -1
- package/build/client/_app/immutable/chunks/D6mTYwDH.js +6 -0
- package/build/client/_app/immutable/chunks/{l5GiMY16.js → D7-uGicP.js} +1 -1
- package/build/client/_app/immutable/chunks/{C8wGq5T2.js → D7XrPGMK.js} +1 -1
- package/build/client/_app/immutable/chunks/{xRO38jd8.js → D7eKc9ur.js} +1 -1
- package/build/client/_app/immutable/chunks/{CEj_BGCY.js → DCmONIPx.js} +1 -1
- package/build/client/_app/immutable/chunks/DJWLLhNJ.js +1 -0
- package/build/client/_app/immutable/chunks/{qkxAgKjo.js → DNf96C-O.js} +1 -1
- package/build/client/_app/immutable/chunks/{D4Ogpdhb.js → DSqRqQNp.js} +1 -1
- package/build/client/_app/immutable/chunks/{D4xFb7_b.js → DT1b6JaK.js} +1 -1
- package/build/client/_app/immutable/chunks/{D3bC95qg.js → DWYSL4om.js} +1 -1
- package/build/client/_app/immutable/chunks/{Bi5NvDds.js → DYfx-RRD.js} +1 -1
- package/build/client/_app/immutable/chunks/{Bi25XSWW.js → DfIqw6WM.js} +1 -1
- package/build/client/_app/immutable/chunks/{CGux-rdo.js → Dj4_qcIH.js} +4 -4
- package/build/client/_app/immutable/chunks/{Cx__ttXF.js → Dk9aRp2m.js} +1 -1
- package/build/client/_app/immutable/chunks/{C-58cZAk.js → DmLHHlla.js} +3 -3
- package/build/client/_app/immutable/chunks/{GNZHLVjs.js → Do0VAo0_.js} +1 -1
- package/build/client/_app/immutable/chunks/{BFsDYOFz.js → DrVddB75.js} +1 -1
- package/build/client/_app/immutable/chunks/{CdFbOrCf.js → Dso_gKeU.js} +1 -1
- package/build/client/_app/immutable/chunks/{Bl78Sc72.js → DykTZ90H.js} +1 -1
- package/build/client/_app/immutable/chunks/{DNlR6G0m.js → GdM4UPkS.js} +1 -1
- package/build/client/_app/immutable/chunks/{B52Khb6E.js → IBXFCASw.js} +1 -1
- package/build/client/_app/immutable/chunks/{BIUi504d.js → IoX9lmZK.js} +1 -1
- package/build/client/_app/immutable/chunks/{Bn64J6A-.js → bpkmZ_Dv.js} +1 -1
- package/build/client/_app/immutable/chunks/{iK_uzrhN.js → crRp5OG4.js} +1 -1
- package/build/client/_app/immutable/chunks/da2fibLv.js +8 -0
- package/build/client/_app/immutable/chunks/{BOKyldQm.js → dcghWWmq.js} +1 -1
- package/build/client/_app/immutable/chunks/{CItDRTlN.js → fJBuRi-A.js} +1 -1
- package/build/client/_app/immutable/chunks/{CRe9IZg0.js → gXyYVhfn.js} +1 -1
- package/build/client/_app/immutable/chunks/{C2vkjTiv.js → j2lJ25s0.js} +1 -1
- package/build/client/_app/immutable/chunks/{DypDva7F.js → l3etNtOh.js} +1 -1
- package/build/client/_app/immutable/chunks/{BGQXNvll.js → olUfRNXS.js} +1 -1
- package/build/client/_app/immutable/chunks/{D3W5wGWM.js → uEyn1Z7p.js} +1 -1
- package/build/client/_app/immutable/entry/app.CCuVGpQc.js +2 -0
- package/build/client/_app/immutable/entry/start.BtgtnpyB.js +1 -0
- package/build/client/_app/immutable/nodes/0.GHtnahSb.js +1 -0
- package/build/client/_app/immutable/nodes/1.CaQ_jAq8.js +1 -0
- package/build/client/_app/immutable/nodes/2.DxOLlTKc.js +337 -0
- package/build/client/_app/version.json +1 -1
- package/build/handler.js +7 -6
- package/build/index.js +7 -6
- package/build/server/chunks/chunks/{app-config.svelte.js-BW7TwbBy.js → app-config.svelte.js-D7wkLUkK.js} +2 -2
- package/build/server/chunks/chunks/{db.js-BylhmazO.js → db.js-DRhjT6xK.js} +2 -2
- package/build/server/chunks/chunks/{db2.js-Cm8FBINY.js → db2.js-DUta2B-n.js} +207 -222
- package/build/server/chunks/chunks/{dsh-connection.js-Lnv7PlHw.js → dsh-connection.js-DRtqPR_j.js} +959 -752
- package/build/server/chunks/chunks/{dsh-events.js-D9tSYE7f.js → dsh-events.js-B_E1BU9F.js} +141 -350
- package/build/server/chunks/chunks/{git-probe.js-D_H3YQbR.js → git-probe.js-Daf6r7Z9.js} +3 -3
- package/build/server/chunks/chunks/index-server.js-CV2lq-ha.js +147 -0
- package/build/server/chunks/chunks/{insight-config.js-XUD5BN0g.js → insight-config.js-CA-iT3lB.js} +5 -3
- package/build/server/chunks/chunks/{internal2.js-BcS47nI-.js → internal.js-BcS47nI-.js} +1 -1
- package/build/server/chunks/chunks/{internal.js-D_QJoxN-.js → internal2.js-DAPn3Vk8.js} +11 -153
- package/build/server/chunks/chunks/merge.js-yMwW440S.js +228 -0
- package/build/server/chunks/chunks/{server.js-11-pxAWV.js → server.js-DqHGsQU2.js} +2 -2
- package/build/server/chunks/chunks/{state.js-DbUk4Hrz.js → state.js-CsIZcr7q.js} +5 -4
- package/build/server/chunks/chunks/theme-prefs.svelte.js-8CaWz46g.js +109 -0
- package/build/server/chunks/chunks/{watcher.js-DU-MZGLU.js → watcher.js-CoR53lwR.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/a2a/_id_/{_server.ts.js-DQenu1Rx.js → _server.ts.js-CpeC2QLb.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/a2a/{_server.ts.js-BvEDeAhP.js → _server.ts.js-BKlF4XGH.js} +7 -6
- package/build/server/chunks/entries/endpoints/api/a2a/register/{_server.ts.js-DLJ4sQBq.js → _server.ts.js-BpEhlidV.js} +7 -6
- package/build/server/chunks/entries/endpoints/api/config/{_server.ts.js-zogZnK_B.js → _server.ts.js-BG78X__J.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/directory/{_server.ts.js-BAfRDeE_.js → _server.ts.js-Dmh7f-hU.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/pick-directory/{_server.ts.js-N21TnqYh.js → _server.ts.js-BEci0ZAx.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/presets/{_server.ts.js-C5ckDTov.js → _server.ts.js-OXFzXBSp.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/attachment/{_server.ts.js-CEPz4kVZ.js → _server.ts.js-x44GKy4R.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/cancel/{_server.ts.js-CUB5TKnW.js → _server.ts.js-Da5ZqeJ7.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/catalog/{_server.ts.js-BfDAa0Vb.js → _server.ts.js-BACv9hW-.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/changes/{_server.ts.js-QiLS5yAj.js → _server.ts.js-BtiUS3iD.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/command/{_server.ts.js-C5kJrRx-.js → _server.ts.js-BOOyd1LI.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/events/{_server.ts.js-vydjdEkJ.js → _server.ts.js-D0GwQbdF.js} +5 -4
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/fork/{_server.ts.js-y5sqH_UC.js → _server.ts.js-Bd0JYMlf.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/goal/{_server.ts.js-BoYIpj-f.js → _server.ts.js-DqAV7OOv.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/history/{_server.ts.js-SchAEll8.js → _server.ts.js-Cz4P-68E.js} +5 -4
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/models/{_server.ts.js-B8bmQCwT.js → _server.ts.js-C4fXXBIM.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/path/{_server.ts.js-DxiKkvE-.js → _server.ts.js-_SIiC8sn.js} +2 -2
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/permission/{_server.ts.js-BBexDstc.js → _server.ts.js-BiqNZiiN.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/prompt/{_server.ts.js-fd9StFXw.js → _server.ts.js-Bdx9V4oY.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/rename/{_server.ts.js-98HaDusY.js → _server.ts.js-CuBqoV3c.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/respond/{_server.ts.js-DN9APffn.js → _server.ts.js-CXPFI_Pn.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/select-model/{_server.ts.js-CeROEmUY.js → _server.ts.js-CRcaw4Yo.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/sessions/{_server.ts.js-DKHmiqIs.js → _server.ts.js-dYrtVHDP.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/workspace-file/{_server.ts.js-S6XZDJmC.js → _server.ts.js-BtlfuMjf.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/workspace-tree/{_server.ts.js-CA4PUERZ.js → _server.ts.js-D12kAP9B.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/workspaces/{_server.ts.js-BObM3Axz.js → _server.ts.js-C9JHp1WU.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/dsh/workspaces/_workspaceId_/delete/{_server.ts.js-CA34p4GV.js → _server.ts.js-bLF4Fbgn.js} +3 -3
- 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
- package/build/server/chunks/entries/endpoints/api/prompts/_id_/{_server.ts.js-u-regI3R.js → _server.ts.js-bRLZ5TWI.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/prompts/{_server.ts.js-YtkQGu7O.js → _server.ts.js-ChzWZoFk.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/prompts/use/{_server.ts.js-tv0ivn2x.js → _server.ts.js-DdH5QmPS.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/settings/{_server.ts.js-DmU2MBc5.js → _server.ts.js-DwGQj520.js} +2 -2
- package/build/server/chunks/entries/endpoints/api/terminal/{_server.ts.js-DHhod6dT.js → _server.ts.js-CwXC6Stk.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/workspace/file-write/{_server.ts.js-BmEUPTSa.js → _server.ts.js-CqyKA9g2.js} +6 -5
- package/build/server/chunks/entries/endpoints/api/workspace/git-events/{_server.ts.js-_1uYvYEA.js → _server.ts.js-yu695YoE.js} +6 -5
- package/build/server/chunks/entries/endpoints/api/workspace/git-file-head/{_server.ts.js-DaXO3et9.js → _server.ts.js-BhDAvM6y.js} +6 -5
- package/build/server/chunks/entries/endpoints/api/workspace/git-map/{_server.ts.js-hp85iKSu.js → _server.ts.js-BRUgPrJ2.js} +6 -5
- package/build/server/chunks/entries/endpoints/api/workspace/git-status/{_server.ts.js-CPB-9252.js → _server.ts.js-C7VJ2G4_.js} +6 -5
- package/build/server/chunks/entries/endpoints/api/workspace/write-gate/{_server.ts.js-DKqzSQBE.js → _server.ts.js-BH5BRA_d.js} +6 -5
- package/build/server/chunks/entries/pages/{_error.svelte.js-AsgAVyDR.js → _error.svelte.js-B5TEtccE.js} +10 -9
- package/build/server/chunks/entries/pages/_layout.svelte.js-DRfiLzlz.js +20 -0
- package/build/server/chunks/entries/pages/{_page.server.ts.js-DTjoTdYK.js → _page.server.ts.js-CityLNBO.js} +3 -3
- package/build/server/chunks/entries/pages/{_page.svelte.js-CFdCjELr.js → _page.svelte.js-i6KsWK9O.js} +4654 -2413
- package/build/server/chunks/{handler-Bx2fbkEJ.js → handler-XuK3Ihhf.js} +3 -3
- package/build/server/chunks/{index.js-BldXQ38P.js → index.js-D2FEiD0I.js} +5 -4
- package/build/server/chunks/{manifest.js-Du-9DaEd.js → manifest.js-B_kahcFI.js} +45 -45
- package/build/server/chunks/nodes/0.js-C0B2o0le.js +12 -0
- package/build/server/chunks/nodes/1.js-C2e7NFqd.js +9 -0
- package/build/server/chunks/nodes/{2.js-DGLcInR6.js → 2.js-Bh3kLeYq.js} +9 -8
- package/package.json +2 -2
- package/skills/dsi-sloc/SKILL.md +117 -0
- package/skills/dsi-sloc/references/measurement.md +79 -0
- package/skills/dsi-sloc/references/report-skeleton.md +79 -0
- package/skills/dsi-thin/SKILL.md +214 -0
- package/skills/dsi-thin/references/ADR-0019-snapshot.md +363 -0
- package/skills/dsi-thin/references/authority-adr.md +28 -0
- package/skills/dsi-thin/references/input-contract.md +42 -0
- package/skills/dsi-thin/references/proven-gates.md +61 -0
- package/skills/dsi-thin/references/two-lane-contract.md +53 -0
- package/template/.dsi/prompts.sqlite +0 -0
- package/template/.dsi/prompts.sqlite-shm +0 -0
- package/template/.dsi/prompts.sqlite-wal +0 -0
- package/template/.dsi/resources/skills-reff.md +5 -4
- package/build/client/_app/immutable/assets/0.CRU0GiZX.css +0 -2
- package/build/client/_app/immutable/assets/2.Bzy6Q5kl.css +0 -1
- package/build/client/_app/immutable/chunks/-BV4MEqr.js +0 -1
- package/build/client/_app/immutable/chunks/66qbK5h1.js +0 -2
- package/build/client/_app/immutable/chunks/BLxS3bAX.js +0 -6
- package/build/client/_app/immutable/chunks/CPhcxli7.js +0 -1
- package/build/client/_app/immutable/chunks/CT1m72HM.js +0 -1
- package/build/client/_app/immutable/chunks/CxnI-Htc.js +0 -8
- package/build/client/_app/immutable/chunks/D0uZseUH.js +0 -1
- package/build/client/_app/immutable/chunks/D73RufXg.js +0 -1
- package/build/client/_app/immutable/chunks/HwuqC1sa.js +0 -1
- package/build/client/_app/immutable/chunks/NtHUheoE.js +0 -1
- package/build/client/_app/immutable/entry/app.D8WfdLSe.js +0 -2
- package/build/client/_app/immutable/entry/start.CVl0g0cv.js +0 -1
- package/build/client/_app/immutable/nodes/0.k1Ikzbp6.js +0 -1
- package/build/client/_app/immutable/nodes/1.X0If5xAN.js +0 -1
- package/build/client/_app/immutable/nodes/2.CELzu2i6.js +0 -337
- package/build/server/chunks/entries/pages/_layout.svelte.js-EFiihTdF.js +0 -18
- package/build/server/chunks/nodes/0.js-B0560RI0.js +0 -12
- 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.
|