From 352a9af285585f10554aa483f40af73b85e92d02 Mon Sep 17 00:00:00 2001 From: vitya Date: Wed, 12 Aug 2026 17:10:31 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20diagnosing-bugs=20v0.1.0=20(mattpocock?= =?UTF-8?q?=20core=20+=20superpowers=20Iron=20Law)=20+=20writing-skills=20?= =?UTF-8?q?v0.1.0=20(TDD-for-skills,=20anti-sproul)=20=E2=80=94=20=D1=81?= =?UTF-8?q?=D1=83=D0=BF=D0=B5=D1=80=D0=BF=D0=B0=D1=83=D1=8D=D1=80=D1=81-?= =?UTF-8?q?=D0=B4=D1=8B=D1=80=D1=8B=202/3=20=D0=B7=D0=B0=D0=BA=D1=80=D1=8B?= =?UTF-8?q?=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 + README.ru.md | 2 + dist/diagnosing-bugs.skill | Bin 0 -> 6135 bytes dist/writing-skills.skill | Bin 0 -> 4386 bytes skills/diagnosing-bugs/SKILL.md | 298 ++++++++++++++++++++++++++++++++ skills/writing-skills/SKILL.md | 208 ++++++++++++++++++++++ 6 files changed, 510 insertions(+) create mode 100644 dist/diagnosing-bugs.skill create mode 100644 dist/writing-skills.skill create mode 100644 skills/diagnosing-bugs/SKILL.md create mode 100644 skills/writing-skills/SKILL.md diff --git a/README.md b/README.md index 18686eb..7a68164 100644 --- a/README.md +++ b/README.md @@ -115,6 +115,8 @@ an explicit `adapted-from` marker in its frontmatter. | `find-skills` | `adapted-from: vercel-labs/skills` (MIT) — vendored copy, upstream pin TBD | | `grilling` | `adapted-from: mattpocock/skills @ 84fdeffd` (MIT) — family collapsed to one skill (pi hides `disable-model-invocation` wrappers) | | `brainstorming` | `adapted-from: obra/superpowers @ 6.2.0` (MIT) — divergent phase, visual-companion dropped | +| `diagnosing-bugs` | `adapted-from: mattpocock/skills @ 84fdeffd` (MIT) + superpowers 6.2.0 concepts (Iron Law, red flags) | +| `writing-skills` | `adapted-from: obra/superpowers @ 6.2.0` (MIT) — TDD-for-skills core + ideya 8 self-skill-authoring | | all other `skills/*` | `author: ours` | Adaptation policy: a clone is rewritten to our conventions (`.tasks/` boards, diff --git a/README.ru.md b/README.ru.md index b42558f..943bf6d 100644 --- a/README.ru.md +++ b/README.ru.md @@ -85,6 +85,8 @@ bash scripts/build.sh caveman # один | `find-skills` | `adapted-from: vercel-labs/skills` (MIT) — вендорная копия, пин апстрима TBD | | `grilling` | `adapted-from: mattpocock/skills @ 84fdeffd` (MIT) — семейство схлопнуто в один скил (pi прячет `disable-model-invocation` обёртки) | | `brainstorming` | `adapted-from: obra/superpowers @ 6.2.0` (MIT) — расходящаяся фаза, visual-companion выброшен | +| `diagnosing-bugs` | `adapted-from: mattpocock/skills @ 84fdeffd` (MIT) + superpowers 6.2.0 (Iron Law, red flags) | +| `writing-skills` | `adapted-from: obra/superpowers @ 6.2.0` (MIT) — TDD-for-skills ядро + идея 8 self-skill-authoring | | остальные `skills/*` | `author: ours` | Политика адаптации: клон переписывается под наши конвенции (доски `.tasks/`, diff --git a/dist/diagnosing-bugs.skill b/dist/diagnosing-bugs.skill new file mode 100644 index 0000000000000000000000000000000000000000..48412d7a22cdaa93c9ddc580354b6a5d9b8f8695 GIT binary patch literal 6135 zcmZ{oMNk|Jl!OO&cXxMp3+@&)xH}93gA-hW6MS%YLU1QI1PLD82MF#C`|oWp+kNP& zu71~d__S2v;PC+f05V`F2Hmt(!a>-U2mrX}0RV{qYi%4Y?cLl#j&AlGR^Ij?E?re+ zH8oCG8*gJ%5Sb!4sK9&{A@esqdPthhQ~0%$?Dw?cq11MI{IwO&*o16EZm0!fem)I) zCe`Uib!jWBrgHUlPNw)-obI^3VER<~#1q_t`6bu5$iqE4Vp=T`PXFZD+QZ&D$o;`X zINr0%1Bp@jjGZemXC~^qKa>vg*Y+TFr^8k;EYRWW4YXz-I(o_q%hs9X&%Fxd_S6YkW$G_`t4;jZh%E+ofzJ^X(QjrKVQrb z`ob91Nd{p;47)lQuu|9UG&&YPcuMg*&oi1bb*t{+Yw=+y_3OGXCsNz?59k?^!Om9- za<`!F^7>sI@vqlVI1n;3S;}5-(rYmF+bVJt#2y6Xi)D=ywq8Z0!Y*?(KH)bq~YI!8++ z{Pq$IAI6+a>g#(-f=F$?dfZ$HeSmHbGq?I)r>3aPgCDNjgg)-}zG6L|eC)3Ebv+GE z6_~v*Z4YAkzD7f&x?eGZM|7m#-w%8qUkijjqAq#|YyP_pxVa7ppTU1Rgh**mw)zQz z2e%yWGO${AMi&Dy?$nKCz(2IyZ4xI2UW)QMx>H>bBCEd9hNoBfuGFDDVo7!KCLAx4 z_sZU~Z%+;-71LM=`j;dC40q@dUA$t5?}42|v~FV53ea6v)0~5K|3mc@d*=i|JFV(o z^S~jOvw7M40z(P&^X1jf)79nP;MMrx(J|l6(QVUrw43AO$E&78YtZ}Y%3pE{$v$D8 z3eAt_eXGE4NSXx_!`6pHdnqD$Io{gVXU>^@dfI2U(Czc1_!@|q-DnPL-W1!ZAjt^W zk%?r%n=||Gqe`)#4>he7jD~{f5;KF;0tS-xyTo2| zl&K&=F>ZhEv{d&ImaDY)x{F(M(uBl$cXEZ-xSvXp4-I)tjfcRo?Du+0WWl9to`_WP z{Hb9~15UIy!3T(PR^fPD6KoFas8^oOmr0dhKu$%OpqWTz zrqhSdo0*-kft)fRSCY~=Iaw}}I)AV{+rm*4!nF`)NK~$5iDr&NGC+A{VN578Ws{r> zGT3#7+#D{h>z`#P%+9i{TFWwcwR#H(fga^k?`k?jI&qWIX8P~&jUp?qZ1?Al-1xGt zn}NvcfLSLFJED@I19=I^e2Kc?#C*&<%xuD!5~I34+^Qi7Z%w=m{sQAsH$`jwyO-Ur zg*YYP4l<%t5fMJRDI&>Z(2f-`eL|6k5DxXvt<1uUhmx{8vp;i3OZ0l-^~LfjVgduT zAtDaLv_f3Sf?TWi%zndKIpu!1vGeTrxBY555ePt#1@y!=)Le@$3f}Ul>X&LoW(&L+ z6+fX>);qfv<(8u3qEi9Bn$-&20x5RYX>lbEU zsmJ&*`)fi@ELKd|98bAan4g_-K|M(k?${%W4Mw-D|mJ{(q|Jbe(*aLx*i~R0~aTYllFY>Y>a8@6lpd4~1I7`;M|6bb@)tUpJdUxZJ9S!8@^K9LwV7HrDbVAvOMT7m z8q(SaXLA}iFtM_i4yoA68*DRHm-2e5KzR0XFW5HsStG=y83ohE^1qi4QdT5JsKn_} zJeW?#tooGg&A8HQt(KJ zt-s)A5!h%^{J@BiOae`Pn6!thgRoB;7XQOZ3&l^1Hg@NYTT1oGyOUb>4@OM5`JlLj_8B-qxQ|oXu-BLh(|YCoyqCC@Y^Y2P74Xy`)N3 z>}jG`4vFt$7`zSn^Acgf<0UuSnUw@WA_2^Q@mramWQV|UL?%BlP+(Zc(P_@qJ6z`& zKJ)8Sm9n2`>cKNFPSD?JdV*^{vDEr}It+gkisWRVL-@_Jg%WSBx|)T(7OW5~D^chL z`=$UT35aS1_x#`*U@eLg8Tf2WAvgPn-14O2D6yV=9)!Brew}G|7;_X$UhUKk9hW#E zSDX0hRsmZgf+{|SB|weX~&7I+)uI}9HjhPrxj?&NI`g8&{b5e6q5=j%EsVCaRmR52y-!@EH}^9@;$bmaqM|LJ~M&Oj)-|j@G1j-e?t?GH=Fd%EA(us3D$v%zu3}xL>?P zh?g3P$g}ds>(d6MZOv(3?2yzohJ4ACSk(R@;Id?dq)WjlML=@zmd&PmRPEFMNzggFgz72{D*NEKcxo zI;;N>t%Pjr6d^4{PFfFkJ?g0;GQs}@3h!X;x{N4za@Z2}Q3r_sVgm1L&kblVCU7&X z*rArArUG0uO9?^ZWGK*Ml#Xc+vXoXjQ9AtybDJ)8)`{$fy@ zr`jiMIox^xfAn7U!>Rf{uKx$lWl5q&Li|EoQTm*TAoLYera+ISe_F{cL=V#tGmP=c z`S;a!26Y${Tsw)mlAiU}pc5f|q*(*T_6(U-t7DUKTeO#uSZWdCV*eV+T;ZBDx{V}R zgmc0sgK+Y0+EjcpPU56$g=luDB`k7Ld~wu|X;l`q%8$|nq@6@wc#iD6V9eZh)NnG~ z#A@W;TeMW9{-`7hWLe|N8VlATR#jPem{KZ5@@u64zGTJ;pibGk=^9p9U!kokA!=CP z-}K?+c7smKquvsXtvt_$(<_)4iYOd~l8omj1`3VbL}9l(T{;cQl+MYX>%w`he~jMC zq$7FgcdDv;`!sduFmvR{Ce6(C9f*(kh2kLHaaVIZUbZt0#{Me#vAC#S0lK&H41}tO zqBYF1b=L5ZoTaV-FKc2lEsN)Sz`GA3sGIn zFaz^^<19s>0*iC&rWlv*`Ds6w$0f6{R+P46E~w$z7j2=)meLinc)h(Z*ijfm~0q^m0Fm4U+xqoFvO*41$HvgwbPP0<);zt`RRr9d|{715tAq`p?pH@BkDsxed< zU`IChOb>pY41ogfdWb3Lg2R>p26^yhl29603-z@I6HxC~pM$Ta zhl)ZqdFq#}t5$16FF=(SCYd%$LaBwC0y&2bXEs8uU8gZ4mdp%P9P;YaeWA{^%T|NPb6NL2l3|IxcV0q5R<0 z_@@=Kf1&2AH-I53waW4^dsl|$#C$oQ-9cn8m)|6s{`+DS)hhdh-ucqwcFhH)xH#Vb z4)Z=|0FQK!A^xYn>vrvw?Z-cvLWNp)6gg5&T=)d)Zf-MwGZMbc>nW1c)YnZNtf7;eguf6 z?;(ip#?4Xm%9^x8V<<_B27%2WFQ?$=wXevvnO}kVbkR7`_RqRmEfZVpN9%m}L2s5^ z$BOvVzDhM_B2$&0Ox;^BVcIkBZCsQUlguNOFX5iR1c~>sC&&C30V;xWILVE5dc0kX zhRFy`z|`-k5+tByW}4S;6tpcLw^!p&C_p)#aU{h;SNc!W_&KgEvt4LZ5AqL+m(y!) zY*JY<9l(4m(c1g^Z%M?i73BXJ27E`mvipngqyh%mD3S-hw8QSv^I)XXo3u^u-AA z!fPC(P+c(VW+wkY@3qxhgnD>IQ;5p*kTkMyF%c_Nmof=AR9mzJYC`r0XU4Lj9koZ< z;WTHQxQ*-1YWGo(5R>bho+NJ)Z_P4cu}5j#WOWo8wZxMS{mtp}QPrZgN#?VT>Nf0# zytc(o4tRQDp-aC^DahfAtR$nu*LD*-*8mzO{WCssx^&$#5Y5H479ag8X;2%JC9bfC z!G!jeMjqA|2A=~9c7BpwtfeMts!sXura*TAB%7T1HbPIy6~1Fwv2Mb@={zu#5T-&L zWKzt3Ht4uHh1k7Af8gKHurx$SGI%=3vr~CF#e*xj4?6X#X8b$Ti37ujJSp z{dPi~`TemY_k-DdT~>NQ^~qcF5%n3V1Lwza%YmDWSP1g52C19h=A6-zT|$IRmOLM^ zXqx05wb^!V%Y$WchdL8W{qCzyu_@x?6h@)Pr;po}M{lb^`eK@P9blU`$h14iAm2S} zU~PjxwixuFm-i25<#Q7Du3DEICf8ckNE0KefU?bI!HlRZILoCXP@wk!Q7su5jOLU@ zq+y3KqS2j3ls||Rq4v!XmB!j^OA5YK@YSB5Gzj>l(vcR06|mAlf7s!&3TNoumKVXV zSf$m)T75SM)ZxnXm%}5V#-@I7_<84HsVc#<5zq6Jn_}Y(-B9#hyIX#pP1apI#uY>` zoiNbIg+=M-5JX8I%@U1y+YC3pv8*So9`dW|^Z6Yml2gQ;0n!AFzC4Bo?UWKgJJdff z_T3Z2?gZ+it($3xi)Zemn1fLPZ(HUM)>Itf^>^83s|eoN=QCEKxvHEg+(3`&i{2{h z<{jsif9-nO!Cn$h_aeOc;|z>GGKLXTyvv%sD0;&~8|BDIp?;uD(^b)fJQ%sI;B_7)>Sp=L-XG z)UiX(F%?fU?o%Bm60^Ire^keW~JRKCRk*`2eK=HOR2WzHUd3IYZ~3njUo8Nt=XyaGLov6 za3vVc_mhdj-Hwnl>Fh3dK9Kt&x)qDFwzN02vd5G-%V(%)Wbo9+vrfDAqAiTU(C>;Z1rA9Bv!m+gM%p9PjyBxd@Jvoq)LNQr zYFa0n$S-Mv2fSggNs6=?&~eDP!al9uSHPIUJVPBe zItQFYB)F)IqW&EF&iM8TRKeuT8*ybNH6cl>?w+&*=hZY&2r(eyK^AipPWQq>t`02u zp6JMs=rNEqI7Uu=-}Uv_hW_j7kTmuS-%4>*#|wBK?Zq^vukFbp_{txbpSSN>BzQ@# znqBUjDn>EXuq$@>COJZadl|&aw)E#$!Pd|UBXjfaiK?f=%07~?OzYz9stfjUnq`*o z<{pSVl_pKw2uD(IK7Si@@Z*eQYXtgP)8PZSO%JiY)reu7L(082^&8<_vCd@anH*rQ z#Un>4l1#Q>_6= zq=}NU)dBu%S3|NWYSmb$MtwN8WjRLn3*e|#I~niK4q0C(&zzT-jbzx8a7c77nF_F+ ztk_}Ny1XaGNi+b<1bt6qXa90ySFq@R@mSXc-m*#U6W^B^6jPr;8t_ zwlAMj{l*{{oon9$tKX1qiJpE<_~Ur>l)H$l20poR8THf_#0*C&j6+N|Q5dgl#*>c; zZ#XubWLtP<`1k>%r3wR!5BUG#{C|A@|LFfi^;)V3i2pl-`OgafCFDQ64*>iRk|m{4 literal 0 HcmV?d00001 diff --git a/dist/writing-skills.skill b/dist/writing-skills.skill new file mode 100644 index 0000000000000000000000000000000000000000..10f88b7efc33dfdad2d38f5a8cb1ef9e683dae6e GIT binary patch literal 4386 zcmZ{oiY_L|skd2yxNY+8g3foGK>&2h&&ygPkI z=|`K0%RQv1arpJ^GJf?kuqD8Bw(5a-X7C`+<@1z1pHFT5*UTNctJNSjhFwhGyfqfSlDuS32qc}irzjh(rR8)~~bywzq4{j246N4l`O*mnTEy}rIUUWIPk z9aP=zUZWm||2wi*x&?apP91<(-clbtmlQ_GpE>`|^2D*_D9Fk~yQ0A+KG#p?veqRb z$y-*g-USZ-nAu<~3UpdWQP-wl`g)OM5=qrCwZ5**zxBbCnclAA;q z`Z3S?+1CTKPO|grkxWb&m3&Mt;$4K&^{5 z6t;!h-|O`e*`m5)Z@>0uLmGv|!)TLJ+2FeA?}~fVGBe})c94Ri&nH*)SySFFa%*f8 zHrD5i#Xs?{Tk&71OtHP7t%`ditq4^a^Y(~VVF|x$y^^gBZkKrlQiLWunN{gCEa$Y@ z6gLNnK|_PC|613}G+Pw&e%@rDTwj>J{v~2S6&!Y4dUp8tO7ydoBDO^&FNE`+e1is^wV@)|`u;*alXN0rIalP+}+Yfq&7BKApaT5M%*H`dGK z$oa<}zyJ8Gk|p%q63UIojrY%g!i0?pbM-xm*{HuBpF#Z`n$OQ=dHvpA;@u#C%kX*Z zJs|Er?Qs2+sZfiTp4s=E@^{FZ8{$0O-U%>)>~_Na5q@#4Y`=Grmb9TXWzR{e>p&&q z>}D;=dl;9Nw7*6Pg#JR*p$u$ zhWGixD}uex(vD?Cm?W66@+^+yj7zdrRpsVHuJ}>EpqMBj z06P50gQGz3b4Oc~Zh9QQ8(96en@bYi%N5|2O#Y0PVZ^3pyPLhdd2LFJ9z@2YV5Qm9 zo7$?=s@@Fgt*Iy)ghH)Pd!CqKA)Ei|Y=cX_08KA*Z&L#{k-q5ld9I(`x3!|aFPl1CcV|Yyk(?0$@s9Q0 z2-QVEpa*3hXEmpTGN^K9j7`L#!#sZcZI_Vt7#)$VGgB4KOs-6ZK@JQ5J(W;dCzT|U zy($UT=+BVu?}CO24*1r+2S<6^NiqnQ>0Zzdd{$ z1uXRJ{jecGD=EPF8lDaHdPU}3RuLe*ZrGN8JuqA;9OJ>@*jhZoQQW`p52YrFlU8iE zob0?7km#=`Ih|K^BP7SKE6?2_?0aV#jwOd=eJG|6j_4VK0< zai6^0(phV{FC7!c^1ZkBZLQT6BGJvG=WL)6!aN+`tE7lmFqG#cl<|WGTd}I9vkLS% z1+#u((1PWepcdOg-*!h;G?G#&cDNR0Nt@_c*P`*VSJA5C=$X8pjS-RKg%PkwmF|FI zKafR>ln1d*y)$4^%{eC*Yo)v%8LrO>$Le;60ji`Z!+fToKiW$M5rwPbWB|;;CUkTdM5Ully6N_1npN9s5 z%vI?I&+tJUHY{G*=Oz}vis%%tc7(ab5D1totsB6@z>32tGj<5rWH|*+ISAC=kUfGT1aEhU(SBnR8H%?#>e#f@81( zxjFTMx=BO^SW1J1FDjw%PbJq!aHa5bWN%kPVLhx}#=?GNIN$Aga+7S|d+%r|^{8mXWC2>F=_hM6gx}FyQRr}&`pCAp*O!iX=iq5rQ`l(p za+fZP8n-c4Gb0>Zx+W@J|BK%D3KJ_$%4G~Cd8GE?K{14PGw%<2O@^(Q6Y)p2!^#`d zAeHD2(yxYKRYmGZ=t9+LIw$!$P9z8E=x%G-BFJ+8?ya*pW^DG~*=LUN9sBQJR{G@I z0i~^60j$Q&f@4AjymbXA$i9*abJqZSJeku6c}V*HEYK0desRImcW{9(9e@RDeTpgz z(7h_5d6VLCd+XKYF?%DXnuND{H$iotiDuultJFrkZKG&=X6;v=-kz*-!a7E`;j zFcxpXOqsQu$nuK{&S9ZF3Tirz7NXdn(^mf2b16FtlnL&a(Y-Y52jx5ji_>V=lC#IQ z`RQw?Zr`VWLCsMCw0DsK;v|g!pT32|(k3cmjer^!j!zU2l%U*FXP!By@jLI}=CtIbRr{c?;R_a!9hqe?i(3zI7eGzYUuW1X(xs*) ztPG~aXxP_j(bdm=7Oi1R0C8QfnXe0wtiVjh5_!#?A%9uw|B?46@9-3GkHKY=6Cv;a zR(2IXOwVms;C}F>fd}@Jhs@VBDN4PG*WYl+7@@kH^y8zvgTk`JfW(mq;cx^V*AXEr zPAD=IUl=3O8HUjSN5*!0+IW3S(LN`uQAu;Pm5h3tL6Zl9v=AL)o~FJBR=-}#yR!LY zW?#!&t*FsC%|qMfDpj(OGC&GSNfdbxn7(h?6VQ&ynkLrQ4a*I9fA6=t)dMOO*jw*@ zrgb^$(>QA@?Smc~8V0HD%^y$Xd?sW^h^X+SCd&e?s4qOlK62Fsc5+6J*1CFE3a$A^ zV1S^<#8^tJI|G6R953VO7Wk7l+ie|m$Phz?7z*Z-{ABN|QRwE@Pd+z&9*2KBpXzsN zTHcNm5mxjFBVXG>-5rbYLlSv z2gvI#fyC0xQy&kla!t)w-*^eSsB`Y3}x z0ai(*Aeio^uHlL-$V+*~sS}m#Ngu;RI9u`CEc;=~+XYHEI7tq#cN0OUzy@QzP=lW} z?i_gcy!t7{=~gVO$ui*J)<6m^f#Yj2z|4^HAPEF5#{QJKGyWNhPJm^*qwuGe&F9si&~z%rG!vL(!G*=6@%Q+GyCa|i`63io&m#jlC%2eZ)5s!deCFcnIm&eI(#uU!6&WCovOH$6 zreb;^=4A`t)OoDjtpG?-W9*AT3`vA+QL6ph?}-UXNeJ!Ck(qCe0Zqa$F^bE39oqZL zxozGJ~gn;7uAMMVdjXAbyPEn9*(3O@!sPvM)vbXho+UGnOgKNzz6twwH{s;CGf<#EpUhZVAiK!)x4yZ@^q;+HNWwUxhpEl&ap>fE zli?oKj|=qY-`xUE3#a{4bGd~GbnPCl zIpAD(HqN8L28(rJQEedSoP^eUTYca?9t(mUwfD?^TG=@;Jf$Up{Y!Ztw&z= z0@Q>C#2G=1S(oEaHsTNN|0N#3R+K-gS!k)345Vva>p?a3 z{HR1-wSHK2=g)acf)mb(jDhar7d#fnI@EtMw{IQTB)(BGzte|!ehx2FfjfaqLz?3? z1zvT7=@7^@2RQqK2Uls@qAL4)_O6zn`F6;Ro|PFP@2Cx71cbDJ|6gSM=Q93J{vWMj W2qOXh?~CBSYW%l-|CtZ~;C}$^7eB`U literal 0 HcmV?d00001 diff --git a/skills/diagnosing-bugs/SKILL.md b/skills/diagnosing-bugs/SKILL.md new file mode 100644 index 0000000..9759352 --- /dev/null +++ b/skills/diagnosing-bugs/SKILL.md @@ -0,0 +1,298 @@ +--- +name: diagnosing-bugs +adapted-from: mattpocock/skills @ 84fdeffd12f2ee307994d1eb6feb48173b6e0502 (MIT); concepts from obra/superpowers @ 6.2.0 (MIT) +version: 0.1.0 +description: > + Diagnosis loop for hard bugs and performance regressions. Use when the user + says "diagnose"/"debug this", or reports something broken/throwing/failing/ + slow, or any test failure / unexpected behavior / build failure / integration + issue — before proposing fixes. Triggers: «диагностируй», «почему падает», + «разберись с багом», "debug this", "diagnose", "it's broken", "why is it + failing". Cross-agent — no tool refs beyond generic harness commands. +--- + +# Diagnosing Bugs + +A discipline for hard bugs. Skip phases only when explicitly justified. + + +NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST. If you haven't completed +Phase 1 (a tight red-capable feedback loop), you cannot propose fixes. + + +When exploring the codebase, read `CONTEXT.md` (if it exists) to get a clear +mental model of the relevant modules, and check ADRs in the area you're +touching. + +## Redact + +This skill has you show commands, outputs and captured artifacts. **Redact +every secret first** — write `` in its place. Build loops against env +vars, so the credential stays in the environment rather than in what you show. +Captured artifacts carry auth headers: quote only the lines that carry the +signal. + +If the redacted output is not enough to diagnose the bug, say so and ask the +user. + +## Phase 1 — Build a feedback loop + +**This is the skill.** Everything else is mechanical. If you have a **tight** +pass/fail signal for the bug — one that goes red on _this_ bug — you will find +the cause; bisection, hypothesis-testing, and instrumentation all just consume +it. If you don't have one, no amount of staring at code will save you. + +Spend disproportionate effort here. **Be aggressive. Be creative. Refuse to +give up.** + +### Ways to construct one — try them in roughly this order + +1. **Failing test** at whatever seam reaches the bug — unit, integration, e2e. +2. **Curl / HTTP script** against a running dev server. +3. **CLI invocation** with a fixture input, diffing stdout against a known-good + snapshot. +4. **Headless browser script** (Playwright / Puppeteer) — drives the UI, + asserts on DOM/console/network. +5. **Replay a captured trace.** Save a real network request / payload / event + log to disk; replay it through the code path in isolation. +6. **Throwaway harness.** Spin up a minimal subset of the system (one service, + mocked deps) that exercises the bug code path with a single function call. +7. **Property / fuzz loop.** If the bug is "sometimes wrong output", run 1000 + random inputs and look for the failure mode. +8. **Bisection harness.** If the bug appeared between two known states + (commit, dataset, version), automate "boot at state X, check, repeat" so you + can `git bisect run` it. +9. **Differential loop.** Run the same input through old-version vs new-version + (or two configs) and diff outputs. +10. **HITL bash script.** Last resort. If a human must click, drive _them_ + with a structured loop so the captured output feeds back to you. + +Build the right feedback loop, and the bug is 90% fixed. + +### Tighten the loop + +Treat the loop as a product. Once you have _a_ loop, **tighten** it: + +- Can I make it faster? (Cache setup, skip unrelated init, narrow the test + scope.) +- Can I make the signal sharper? (Assert on the specific symptom, not "didn't + crash".) +- Can I make it more deterministic? (Pin time, seed RNG, isolate filesystem, + freeze network.) + +A 30-second flaky loop is barely better than no loop; a 2-second deterministic +one is tight — a debugging superpower. + +### Non-deterministic bugs + +The goal is not a clean repro but a **higher reproduction rate**. Loop the +trigger 100×, parallelise, add stress, narrow timing windows, inject sleeps. A +50%-flake bug is debuggable; 1% is not — keep raising the rate until it's +debuggable. + +### When you genuinely cannot build a loop + +Stop and say so explicitly. List what you tried. Ask the user for: (a) access +to whatever environment reproduces it, (b) a redacted captured artifact (HAR +file, log dump, core dump, screen recording with timestamps), or (c) permission +to add temporary production instrumentation. Do **not** proceed to hypothesise +without a loop. + +### Completion criterion — a tight loop that goes red + +Phase 1 is done when the loop is **tight** and **red-capable**: you can name +**one command** — a script path, a test invocation, a curl — that you have +**already run at least once** (show the invocation and its output, redacted), +and that is: + +- [ ] **Red-capable** — it drives the actual bug code path and asserts the + **user's exact symptom**, so it can go red on this bug and green once + fixed. Not "runs without erroring" — it must be able to _catch this + specific bug_. +- [ ] **Deterministic** — same verdict every run (flaky bugs: a pinned, high + reproduction rate, per above). +- [ ] **Fast** — seconds, not minutes. +- [ ] **Agent-runnable** — you can run it unattended. + +If you catch yourself reading code to build a theory before this command +exists, **stop — jumping straight to a hypothesis is the exact failure this +skill prevents.** No red-capable command, no Phase 2. + +## Phase 2 — Reproduce + minimise + +Run the loop. Watch it go red — the bug appears. + +Confirm: + +- [ ] The loop produces the failure mode the **user** described — not a + different failure that happens to be nearby. Wrong bug = wrong fix. +- [ ] The failure is reproducible across multiple runs (or, for + non-deterministic bugs, reproducible at a high enough rate to debug + against). +- [ ] You have captured the exact symptom (error message, wrong output, slow + timing) so later phases can verify the fix actually addresses it. + +### Minimise + +Once it's red, shrink the repro to the **smallest scenario that still goes +red**. Cut inputs, callers, config, data, and steps **one at a time**, re-running +the loop after each cut — keep only what's load-bearing for the failure. + +Why bother: a minimal repro shrinks the hypothesis space in Phase 3 (fewer +moving parts left to suspect) and becomes the clean regression test in Phase 5. + +Done when **every remaining element is load-bearing** — removing any one of +them makes the loop go green. + +Do not proceed until you have reproduced **and** minimised. + +## Phase 3 — Hypothesise + +Generate **3–5 ranked hypotheses** before testing any of them. +Single-hypothesis generation anchors on the first plausible idea. + +Each hypothesis must be **falsifiable**: state the prediction it makes. + +> Format: "If is the cause, then will make the bug disappear +> / will make it worse." + +If you cannot state the prediction, the hypothesis is a vibe — discard or +sharpen it. + +**Show the ranked list to the user before testing.** They often have domain +knowledge that re-ranks instantly ("we just deployed a change to #3"), or know +hypotheses they've already ruled out. Cheap checkpoint, big time saver. Don't +block on it — proceed with your ranking if the user is AFK. + +## Phase 4 — Instrument + +Each probe must map to a specific prediction from Phase 3. **Change one +variable at a time.** + +Tool preference: + +1. **Debugger / REPL inspection** if the env supports it. One breakpoint beats + ten logs. +2. **Targeted logs** at the boundaries that distinguish hypotheses. +3. Never "log everything and grep". + +**Tag every debug log** with a unique prefix, e.g. `[DEBUG-a4f2]`. Cleanup at +the end becomes a single grep. Untagged logs survive; tagged logs die. + +**Perf branch.** For performance regressions, logs are usually wrong. Instead: +establish a baseline measurement (timing harness, `performance.now()`, +profiler, query plan), then bisect. Measure first, fix second. + +**Multi-component systems:** when the failure path crosses components +(CI → build → signing, API → service → database), before proposing fixes add +diagnostic instrumentation at each component boundary — log what enters, what +exits, and verify environment/config propagation at each layer. Run once to +gather evidence showing WHERE it breaks, then investigate that component. + +## Phase 5 — Fix + regression test + +Write the regression test **before the fix** — but only if there is a +**correct seam** for it. + +A correct seam is one where the test exercises the **real bug pattern** as it +occurs at the call site. If the only available seam is too shallow +(single-caller test when the bug needs multiple callers, unit test that can't +replicate the chain that triggered the bug), a regression test there gives +false confidence. + +**If no correct seam exists, that itself is the finding.** Note it. The +codebase architecture is preventing the bug from being locked down. Flag this +in the post-mortem. + +If a correct seam exists: + +1. Turn the minimised repro into a failing test at that seam. +2. Watch it fail. +3. Apply the fix. +4. Watch it pass. +5. Re-run the Phase 1 feedback loop against the original (un-minimised) + scenario. + +**One change at a time.** No "while I'm here" improvements, no bundled +refactoring. + +### If the fix doesn't work + +- Count how many fixes you've tried. +- If < 3: return to Phase 1, re-analyze with new information. +- **If ≥ 3: STOP and question the architecture.** Each fix revealing new + shared state / coupling / problems in different places is the pattern of an + architectural problem, not a failed hypothesis. Discuss with the user before + attempting more fixes. This is NOT a failed hypothesis — this is a wrong + architecture. + +## Phase 6 — Cleanup + post-mortem + +Required before declaring done: + +- [ ] Original repro no longer reproduces (re-run the Phase 1 loop) +- [ ] Regression test passes (or absence of seam is documented) +- [ ] All `[DEBUG-...]` instrumentation removed (`grep` the prefix) +- [ ] Throwaway prototypes deleted (or moved to a clearly-marked debug + location) +- [ ] The hypothesis that turned out correct is stated in the commit / PR + message — so the next debugger learns + +**Then ask: what would have prevented this bug?** If the answer involves +architectural change (no good test seam, tangled callers, hidden coupling) +hand the specifics off to the project owner / architecture skill. Make the +recommendation **after** the fix is in, not before — you have more information +now than when you started. + +## Red Flags — STOP and return to Phase 1 + +If you catch yourself thinking any of these, stop and go back: + +- "Quick fix for now, investigate later" +- "Just try changing X and see if it works" +- "Add multiple changes, run tests" +- "Skip the test, I'll manually verify" +- "It's probably X, let me fix that" +- "I don't fully understand but this might work" +- "Pattern says X but I'll adapt it differently" +- Proposing solutions before tracing data flow +- "One more fix attempt" (when already tried 2+) +- Each fix reveals a new problem in a different place + +**All of these mean: STOP. Return to Phase 1.** + +## Common Rationalizations + +| Excuse | Reality | +|--------|---------| +| "Issue is simple, don't need process" | Simple issues have root causes too. Process is fast for simple bugs. | +| "Emergency, no time for process" | Systematic debugging is FASTER than guess-and-check thrashing. | +| "Just try this first, then investigate" | First fix sets the pattern. Do it right from the start. | +| "I'll write test after confirming fix works" | Untested fixes don't stick. Test first proves it. | +| "Multiple fixes at once saves time" | Can't isolate what worked. Causes new bugs. | +| "I see the problem, let me fix it" | Seeing symptoms ≠ understanding root cause. | +| "One more fix attempt" (after 2+ failures) | 3+ failures = architectural problem. Question the architecture, don't fix again. | + +## When Process Reveals "No Root Cause" + +If systematic investigation reveals the issue is truly environmental, +timing-dependent, or external: + +1. You've completed the process. +2. Document what you investigated. +3. Implement appropriate handling (retry, timeout, error message). +4. Add monitoring/logging for future investigation. + +**But:** 95% of "no root cause" cases are incomplete investigation. + +## Cross-agent applicability + +Pure methodology — no harness-specific tool references. Works on pi, Claude, +or any agent. The sub-agent mention is a generic capability note; without +sub-agent support the agent looks facts up directly. + +## Out of scope + +- Does NOT cover code review (that's a separate review process). +- Does NOT write the regression-test policy (see `tdd-criteria` for the + bright-line rules on when tests are required). diff --git a/skills/writing-skills/SKILL.md b/skills/writing-skills/SKILL.md new file mode 100644 index 0000000..463ad19 --- /dev/null +++ b/skills/writing-skills/SKILL.md @@ -0,0 +1,208 @@ +--- +name: writing-skills +adapted-from: obra/superpowers @ 6.2.0 (MIT) — TDD-for-skills core; ideya 8 self-skill-authoring (workshop record) +version: 0.1.0 +description: > + Authoring agent skills TDD-style — RED-GREEN-REFACTOR applied to SKILL.md + documents. Use when creating a new skill, editing an existing one, or + verifying a skill works before deploying. Trigger (user): «напиши скил», + «создай скил», "write a skill", "create a skill"; or self-authoring trigger + (Hermes-mode): the third time you do the same thing without instruction, or + the user says «запомни»/«зафиксируй»/«в следующий раз». Anti-sproul: BEFORE + writing a new skill, check the catalog for an existing cover. +--- + +# Writing Skills + +**Writing skills IS Test-Driven Development applied to process documentation.** + +You write test cases (pressure scenarios with subagents), watch them fail +(baseline behavior without the skill), write the skill (documentation), watch +tests pass (agents comply), and refactor (close loopholes). + +**Core principle:** If you didn't watch an agent fail without the skill, you +don't know if the skill teaches the right thing. + + +NO SKILL WITHOUT A FAILING TEST FIRST. This applies to NEW skills AND edits to +existing skills. Write the skill before testing? Delete it. Start over. No +exceptions — not for "simple additions", not for "documentation updates". + + +## Anti-sproul guard (check before writing) + +At 45+ skills in the catalog, "just write another one" is harm, not help. On +any self-authoring trigger, FIRST check for a double/coverage: + +1. Does a skill already exist that covers this? (catalog + adapted-from + sources: mattpocock/skills, obra/superpowers, vendor skills) +2. Should this be a **new skill**, an **extension of an existing one**, a + **rule in CLAUDE.md**, or **nothing** (one-off coincidence)? + +Only proceed to the TDD cycle if the answer is genuinely "new skill". If the +pattern is project-specific, it belongs in the project's `.agents/skills/` +(copy, project owns it) — NOT the catalog. Cross-project value → promote to +the sovereign catalog. + +## What is a Skill? + +A **skill** is a reference guide for proven techniques, patterns, or tools. +Skills help future agents find and apply effective approaches. + +**Skills are:** reusable techniques, patterns, tools, reference guides. +**Skills are NOT:** narratives about how you solved a problem once. + +## TDD Mapping for Skills + +| TDD Concept | Skill Creation | +|---|---| +| **Test case** | Pressure scenario with subagent | +| **Production code** | Skill document (SKILL.md) | +| **Test fails (RED)** | Agent violates rule without skill (baseline) | +| **Test passes (GREEN)** | Agent complies with skill present | +| **Refactor** | Close loopholes while maintaining compliance | +| **Write test first** | Run baseline scenario BEFORE writing skill | +| **Watch it fail** | Document exact rationalizations agent uses | +| **Minimal code** | Write skill addressing those specific violations | +| **Watch it pass** | Verify agent now complies | + +## RED — Write the failing test (baseline) + +Run a pressure scenario with a fresh-context subagent **WITHOUT the skill**. +Document exact behavior: + +- What choices did they make? +- What rationalizations did they use (verbatim)? +- Which pressures triggered violations? + +This is "watch the test fail" — you must see what agents naturally do before +writing the skill. + +**Pressure types for discipline skills** (combine 3+): time pressure, sunk +cost, authority ("the user asked for it"), exhaustion/length, "it's simple". + +## GREEN — Write the minimal skill + +Write the skill that addresses those **specific** rationalizations. Don't add +content for hypothetical cases. + +### Skill structure (our catalog conventions) + +``` +skills//SKILL.md +``` + +Frontmatter (YAML): + +- `name` — letters, numbers, hyphens only. Verb-first, active voice: + `pulling-before-work`, `diagnosing-bugs`, `writing-skills` (gerund works for + processes). +- `description` — **when to use, NOT what it does.** Start with "Use when..." / + trigger phrases. Third person (injected into system prompt). NEVER summarize + the skill's process or workflow — agents follow the description instead of + reading the body. +- `version` — semver; bump on every edit (project-discipline Rule 3). +- `author: ours` or `adapted-from: / @ (license)` for + vendored/adapted copies — with the real upstream pin, not "TBD". + +Body: + +- Overview: core principle in 1-2 sentences. +- When to use: bullet list with symptoms and triggers; when NOT to use. +- Core pattern / Quick reference: table or bullets for scanning. +- Common mistakes / rationalizations: table (excuse → reality). +- Red flags: self-check list ("all of these mean STOP and start over"). +- Cross-agent applicability note (no harness-specific tool refs). +- Out of scope: what this skill explicitly does NOT do. + +**Guidance form must match the failure type:** + +| Baseline failure | Right form | Wrong form | +|---|---|---| +| Skips/violates a rule under pressure | Prohibition + rationalization table + red flags | Soft guidance ("prefer...") | +| Complies, but output has wrong shape | Positive recipe/contract: state what the output IS | Prohibition list | +| Omits a required element | Structural: REQUIRED field in the template | Prose reminders | + +**No nuance clauses.** "Don't X unless it matters" reopens the negotiation — +express a real exception as its own conditional on an observable predicate. + +### Micro-test wording before full scenarios + +Full pressure-scenario runs are the final gate but slow. Verify the wording +first: + +1. One fresh-context sample per call; system prompt = the realistic context. +2. Always include a **no-guidance control**. If the control doesn't exhibit + the failure, there is nothing to fix — stop. +3. 5+ reps per variant. Single samples lie. +4. Manually read every flagged match (template echoes masquerade as hits). +5. Variance is a metric: five different interpretations across five reps means + the wording isn't binding — tighten the form. + +Micro-tests verify wording; they do not replace pressure scenarios for +discipline skills. + +## REFACTOR — close loopholes + +- Agent found a new rationalization? Add an explicit counter. +- Build the rationalization table from all test iterations. +- Create the red-flags list. +- Re-test until bulletproof. + +## Verification checklist (before declaring done) + +- [ ] Baseline failure documented (RED evidence: what the agent did without + the skill) +- [ ] Skill addresses those specific failures (not hypotheticals) +- [ ] Scenario passes WITH the skill (GREEN evidence) +- [ ] Description = when to use only, no workflow summary +- [ ] Frontmatter: name (verb-first, hyphens), description (triggers), version + (bumped), provenance (author/adapted-from with real pin) +- [ ] Lint passes (catalog: `scripts/lint-skills.py`), dist rebuilt + (`scripts/build.sh`), installed (`scripts/install.sh `) +- [ ] README provenance table updated (catalog) +- [ ] Cross-agent — no harness-specific tool references +- [ ] One excellent example, not multi-language dilution + +## Deploying (catalog) + +1. Edit `skills//SKILL.md`. +2. Lint: `python scripts/lint-skills.py`. +3. Build: `bash scripts/build.sh` (→ `dist/.skill`). +4. Install: `bash scripts/install.sh ` (→ `~/.claude/skills/`). +5. Update README provenance table (en+ru). +6. Commit + push; bump version in the commit (project-discipline Rule 3). + +**STOP after each skill.** Don't batch-create skills without testing each one. +Deploying untested skills = deploying untested code. + +## Common Rationalizations for Skipping Testing + +| Excuse | Reality | +|--------|---------| +| "Skill is obviously clear" | Clear to you ≠ clear to other agents. Test it. | +| "It's just a reference" | References can have gaps, unclear sections. | +| "Testing is overkill" | Untested skills have issues. Always. | +| "I'll test if problems emerge" | Problems = agents can't use skill. Test BEFORE deploying. | +| "Too tedious to test" | Testing is less tedious than debugging a bad skill in production. | +| "I'm confident it's good" | Overconfidence guarantees issues. Test anyway. | +| "Academic review is enough" | Reading ≠ using. Test application scenarios. | +| "There's already a similar skill, close enough" | Similar ≠ cover. Verify the double actually covers the failure. | + +**All of these mean: test before deploying. No exceptions.** + +## Cross-agent applicability + +Pure authoring methodology — no harness-specific tool references. The +"subagent" for pressure scenarios is any fresh-context agent run (pi -p, +claude -p, codex exec, hermes headless). Local skills live in the agent's +skills directory (`~/.claude/skills/`, `~/.hermes/skills/`, project +`.agents/skills/`); the catalog deploy steps are our repo's convention. + +## Out of scope + +- Does NOT tell you WHAT skill to write — that's the anti-sproul guard + the + user's call. +- Does NOT cover how to run the catalog pipeline beyond the deploy steps above + (see the repo's `scripts/` and README). +- Does NOT enforce TDD for code — that's `tdd-criteria`.