From 71a696e2245aa2f3c64c5481285ac7268a9b240e Mon Sep 17 00:00:00 2001 From: vitya Date: Sun, 23 Aug 2026 11:52:43 +0300 Subject: [PATCH] =?UTF-8?q?feat(skills):=20task-format=20v2=20=E2=80=94=20?= =?UTF-8?q?5-digit=20numbers=20in=20task=20files/headers,=20done/=20folder?= =?UTF-8?q?,=20#n=20references=20(tasks-global-numbering)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - task-format 0.1.1→0.2.0: header `[#n slug]`, mandatory `**Created:**`, numbering rules (server counter, 5-digit file name, no # in file) - setup-tasks 1.0.0→1.1.0: v2 folder canon (yyyy-mm-dd-#####-slug.md), done/ phase, numbering in migrate - using-tasks 1.6.0→1.7.0: create via tasks_create (server number), close → done/, Created: field - delegate-task 0.4.0→0.5.0: number in inputs, staged blockers by #n, review blocker by #n - inter-session-messaging 1.1.0→1.2.0: task refs by number (#452), lifecycle letters by number Also synced catalog with newer installed versions (using-tasks 1.4.1→1.6.0, delegate-task 0.2.6→0.4.0, inter-session-messaging 1.0.0→1.1.0) — edits had gone straight to ~/.agents/skills/. fnf-testing + workshop-promote-brainstorm updated directly in ~/.agents/skills/ (no catalog source). --- dist/delegate-task.skill | Bin 4785 -> 6007 bytes dist/inter-session-messaging.skill | Bin 4607 -> 5346 bytes dist/setup-tasks.skill | Bin 5827 -> 6464 bytes dist/task-format.skill | Bin 2906 -> 3527 bytes dist/using-tasks.skill | Bin 9654 -> 11284 bytes skills/delegate-task/SKILL.md | 72 ++++++++++++++++++++---- skills/inter-session-messaging/SKILL.md | 29 +++++++++- skills/setup-tasks/SKILL.md | 26 +++++++-- skills/task-format/SKILL.md | 28 ++++++--- skills/using-tasks/SKILL.md | 69 +++++++++++++++++------ 10 files changed, 182 insertions(+), 42 deletions(-) diff --git a/dist/delegate-task.skill b/dist/delegate-task.skill index c29a00cd8f798add6618083c4c42a2226c692327..1559428a29d509da66a65ae5b6c351cb9f760115 100644 GIT binary patch delta 5980 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 a4PAf?w(lbn007)FlQ$PS23HaQ0001kYVU6V diff --git a/dist/inter-session-messaging.skill b/dist/inter-session-messaging.skill index 0dfe8c001361938d4b94a56ede7a366acb791f27..58daf2ac73f103c09054bf8ba97b1c6fec0f6681 100644 GIT binary patch delta 5294 zcmV;f6jAH{BjPC-P)h>@6aWAK2mo_l7hOODK;S?W007c8kr*d`TU&1%SCW43UvU6G zjHs|FS;+(oIpcjuyoiBZ24iCaB3ly26r0;k$uZVD&?UYE_C}K+nJlt9x$VAX z2TM_;MT!>#`UTCukYBP@U!Bu^niqRA0X#Oz?sMwY<*To%&bY4Y)cxIHT~+JNAadg% zj;mqa-KD?%?P`60+wu3BJ7Ki0!o4VV_JfFjURPI3Yo%4E62#@G+Gygd>yA>%*GVh6 zP|5S8H#tmNlcUK~mGtQI0 zypq2i)SK~2wZ0jCwBi*?D)}bq@Nx>z9VO$*BdmSF67W`kt)!iFCQo>!u}UuJ^N81< z94mVED1GE2>8&gJSBE~680uGw1)QAldoB8NVMHI3tQYiROBSO8vebNxC3@rBS_2#P z`7svgEa{O*UOB9ng9aU;5rw}G%FWpIE0u^e>~4nPoziZ_Q%PIJJAM>Y)ZOZxYN4nm zACssDqArMkMIz9W{Cz9wCxfI_R9jJ4Z|?d{G8}J1A9p=E1WD1Rmp_|5O;L%SNX9c# zVT(U@^VVXEB&SK2wES%{n0!iVVJ*^zJyHO_+u~=&^m>=%dj{S1CMWA80lpt6r;|@a zSYCU~;*)YF$FwDHJ7#U2@dHrkPX}L!j=QwtfS!1NX5KA|bmD*2=DlkQ&yd|=^fsPj zkLl0#gApHE8+ssXvMzcoB`JX9d9Jsox4PJxm%N~Z{{U}2V<}1SC+q6+M_G=RcnqIN z9dxYTusvjQeEo7z?MX8+nk8H94VEV?}x_zaafR)Ju}YZD@eLq9=2YnO&d5 zDEttAImtZHSTkh6BlcoewKneL7)sDKYfm1qfhQ*rmQA)qVh&5EY+fAPmCU-3{y2W*8NK684hk98=_zkLU-yw_9#( zY@`9S8#Mimjiw*pi8q!DCC4QkbFM4|F(>(dQoGI*iB63O3t&iM_&GZiDUKXKhyC($ z4nKMvG0V$2e<)hdYSbe=;<=*3hs3XRu#?%i;+RVM;@xEJE{D!&ZoH9|mKs42sh>Xi zE{hP-gCou>VSF)pNRRg5p!v;>H*ehh#~bt;dnX_46o-U= zKr@~|FZ}xbcW%Dw2km1QGE}<(4B^OvM=SJyJ2)E-U%CCQF(sUB)1Jp zt?<>6{h&16-8j=3&yJ#Vr*sWg-{U{Y;tkZ}xpU>(k)9YhMLgnuO9 zf?^&b8+2i;p_&F`%_*{koOx2od6icFl2kC5Lmb+fuXfoTM{FT-E^WOmp=3Fkat)Im z4Xq=XQPPA&ICfyvno40w3)&NZUlAyk%%ML#H>=n(72)xCBfpy9R7X-S?Z`Mfunb-R zRj}lz$9ezE+adf2dF$AE5&EWY&*7J!vA=3vPL5qZ7LIoWuV*aaWPHL}qgPK#8Zo}6 z4G>_g5reKhwv#bYHyJvP=Xs9hg>Ph1Twlo(%r~0x^$%U^0e2enSviw`lk4QASk`fs z$1iy>rT07f&wck@_pP^Xzx_7<?Pd9DFdj&s6H zSFpu=0)+AhAsNhU-6+_v26rj7^P_&fLhPXueB@RL5?sG56naT^XJ4=j2*ekMR9xHJ zW~QKiOSv*|*|Ervr#-L(x6|RyI%X_m5{Kw#{G_iQAyh65_L6IVtI5Cf6FPWV&u~8R zSAzu-KV)&RuoN&`X`N!=fkTI)zpI`6A1t2FF1PDPcgPv)NVUxR*VSKPW~KkT^0ES< zn*nFh9LP3e(si0KZF%$7`);#JB&+G~Hqzy@O=diqv@sM6>LC7~np`ykZ+cODIMw<_ z6f|o0Hku)y7J|EfSuy0=HowmMv&Q`P6CB zL%m?pauoQ@pt3@FDyF|SYhn2g{S6l-$-}7Wum{o>%vxRk_slLYmb#l}mK@rGFLQ=q zmn7d}r=TPW1Q!}5F?^gnWggyWE7|b*! z{#?>NqVoFKP+-|BZ5FiQb$zb0yP9*ighmUg1D_gj32SsKA2QbEAYZlxKZN^p!qTM% zXT&LPz#fl(9Lk#^U=*s;F+yRKGX9)B=IN0`F4FYe@iQUp!>P<7T1#^ zgy#@};<5+*7x50#gJ$5$lV`Vs=Eml|4U(2?uWt;XXven#bv>nYFdf_V6r}S|&BtpZ z=F-ri$E`-sbiqE7rb>Z}OUc+NCK?AF8w3C?%JL2zV(#8W-qf=oS15u>7ksD(f+nV= zW1+8qVP=1#gnEcV63&}$!lI#wps=4;BrPft74pweqk`#EX$GxN*q_p@xO=XQ?M)t- ztcG7fRnM_95*0c?U!|YZBu@${ZAN~z9yh~icg0H`p#)D@@yx3HV7_IEl4HSXr%FOO zb!sDXx}Q@BqYPPI*4`tsLtA=VyIh*i{{`@WP|ZfhngVGUPE)m=IMD(@M>fauH2*)4 zzJ>A(<1^hKwN%}0)Ph~sk}CU6zZPz*yZ(Nl)(TqYbKSq|O2-Ucm{HcdB9z1?)0Gp{ zbk2vG7SeeQM)+YNNo)&$9k5w?=!eWn#RcVoDtOS8Hu&8BtknuJJr=tglJB-?!{_^d zEnTU#KhJ-eZ?_E$#mu$b)QTcEZMZwcrA_nBo7;Kw3f#FRq`p}vZe6W!E9sgAv8vY9 zy>Ks5cz*qIK#O|+gb)9$-r%9ZbzMvg=AT1N{dpZllCdqGW3w(k@WS>MTSL=Sf+-C* z-Ki3LM1g~Tv9)T}?V8j5*SxwoANM|g%`kU9$ijy}0;Vj`pK`>s_Q`kDdaxa0i{yF8 zXP1MurWhXl$}oz@+_B+6cr2dG_7avt;t}gBN=v)NO=Rq;ixK31@?&dN<`3k;xt2gi z9j*Mxd%Pe;E*rF?49{zwauq&#%1JqOdfg{9Nodx>RscHAb#;3u5LZ*xSosQn?alIz zU#|zXqN;~Y`i?%5Q-)hgmw_equ5nhjoAT+g9eNG$n_`V01^jMUs|Eh{Uhs=p(U}@y z?AKyQSEqoccht@vt*LljBJw53BVUm`w5$s2wR>5!Rc(cls#GJ=4K}G)R9p@lfk}Vg z&dGPbo@v>ZxPAQn&mWsCfsAo~13wCDfy>cYkvK-%+Ugi_%1bT~y_Y|3hH=ETzN_`dUK2AhK%S(U-rNBVw_q56zsJL9HFK$K3h7+RnwhZtd3HD>sGALE<|IB= z%5XbMljs%k?GC%So;R!SsmwT*VeFq4Je=k>|@X$ zxsc!#2z>cteiPj~oHb3-;^7St2g9{|^DTo;^l}e$2jXM2KYO~ZK&BF7{Ew7G+}RNM zlRmR>riEx~2u0?C8co^{uFY&`wJ{cNMscn*vmc-x(h^ zG~#bS>it-4hJI8ja2J$L^B)%Zo}Jv!3F!;7mC}wd%qnxSIhXv^X6dXDoQusw6%ox*Y#wn_PS(-Xj< z=}^+NgDSq7YM#u00OHFF(Pa+~`vsc(7b!`YKLqEV;?x*?>M}%bs@h%W$;UAYT+0oN zZUv?g9fn`P^^4O%V)aiymCn4xjp=`;-`Yo(<4MQNV_GR+>@_O+FZ@O$s8=>BLAlDA ze4|PAR}J-nO!#NYsT6cmX&80dm`NQ;2O?joQu<>5=x7~(^jI%symS&`cXjogaIEKq z)`8e)Vr2XIOxYMu7)-TtLebGLz)a^z^_;Q}VE3L#>Ut z+^RE}&{jAoS9@q0Smp9SgA7^v!b*5qLt`Z4Qwb((b!S1s9GSs>*Q;VriX5> z1vWy{D+fw{C>suQ9!n~it!4>~(eVMqn>cwTN5_$^azW(0I8v4tN5+aB7%N#^6pHx@ zz)bb%turNKe*h>BOiOTC=VaxkU5n=1rFr6EI;FXmC?PGnZ!Ck3gFM(+9l&+Rxi5qh zISXpO&r`G`)5UoVbKlPxbOit2voqlHkNtVn&$A!^Hg&EoA zo&dMe-V2-6t$QB7BAtGb^s}k_K#sPeee;5+&rt6(9Krs#o)XX+S<8N=F>%#hv!>K^ zm{)Rt&CZq7zP+@uMW&Mx`9YT5EifSO`_o)~IrJjxco~M}GX{^|ze)Zx`ClRk-`Mb% z^ZX@2rKFR!^Ee3PK1<=+BJY^m*vVyLp?(YUr?$w7Ek!9`e~o9TciPwUDnTvSCYN&= zt2~Eu2Zih}ujM2q&K|17gy`scs2Ha)NMvPDoq=NcU%+dwO+GJ!ZD817B+a6 z4i3rwUoeDP*3ij{mFL2Jp+(MXnk7DiVRQ;U1517^Xe|l%P)$CDlKRp$wF}C=(#;5r zTe3EimFb=7YXIVNz1(1mPx27iWPm$^-=haP(g?{RL+5)ykp_u}=0Y9N2QDpiHR}m~ zJt^AfIn;T;(KyW9HGin$B7&|pgv<$EjyWQU_!sD#EEhx@<*?oiK5A|VQQc_x&7F;K zYoiwUadRUI;%eOV>t&)OILsK;1}Zt-NLrt=7sIM))*U(XDiYKz#W^rK9=f#wCBB9jmmq~rn^btdIyO(YjDFE=c`Z;^?zoO zWk!1Wc$<4~#hI?=ne5X#|EDV)*TyCdZuwVS1LYXi^Bs{Rs%cNy>rCy4N{N-8wHC4o z^fjrppwG;!*@ieBks)%hN5Gy_uHiIYJ0^P!O#PCtzt|3ce>rfR<>hzxYR#&Dxs9mG z{ywF)>^=g635sVfio^XNimH`>?R%)CucxmXq%)RtNGYus=7(RW+&8ZiN4S_E=_s|4 zMF)(>_KQjfRv*60!!*X?v>KJ8^KYXUv;&HHfk{SvCFp<%X6{ZSp%?c&q)9B-YP*Yz z=0uNx(I2sHwaI)@7u>1c#K;SOL+;S-Q#sPvN~=%4O`T0V1T&7fW|9U!J>3y%Y`WbV zUxX%-jHr7U_7311!tZUVVLCnHh{DoKkNF62p7RB^(wnk3f94PiiN$T^^#B)t?K0VM*_Da4ju7 zgxXHK=2(&r)*Ga^wE1R;TpKikxb|_a_ErE;I~h%RoNaP%1xvzISKS*vav=Y?nMBroLt`#-sn;Mi9B%dwx{G70^Zm?$7YW zAH&G!YL9POZ*%wB;V+}TdYxVh@780NP>k;lMR*#njbH{B*nBPwf1zR>X~RGyNIvs>&o_6G}sEFfcO=652ZraGc}Y? zbN){RGo$?VMPp5W?!sjk!U4@E*^s>Tw_Qrk-AKk=!ngf;CEVJ|6(ssXz@f z#;sd7-+zx^wnW{Lw;<$if*KdR^lKEbhXwTt-)n5T^shY+y$B|0T;*CLZN9nhX*u0W zH7-{hwQ4<}75^VlO928D02BZK00;ncUKd?J13=(F6aWAM(lwK{5kv-l6aWAK05I!6 A?f?J) delta 4549 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 j02BZK00;o}X%t=VcEICZ5dZ*OEt8lOLlD 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 K1}GK)0001fN(9pY diff --git a/dist/task-format.skill b/dist/task-format.skill index 3324ab1f895f735e573c250b568d20d95142eaa6..9fd718d98191977e784c6dfa33f5940b607c0cd7 100644 GIT binary patch delta 3503 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 diff --git a/dist/using-tasks.skill b/dist/using-tasks.skill index 58582243fb8f0d9734f658a086d16af037b5f9c8..37bd34c6950e5f5dffb7085046e3f77392f441d0 100644 GIT binary patch delta 8248 zcmV-8AjjXfOO#l!p$iUZUKd@F?5$3)9{>QJO_Q$+8-HBwjvL37{Xf9GLoEfwB+ceX zvK`wTS%EA&i4j{8BpHrl80sFfIBZX|o9S-Oi1`5gf!)N2H{K1rfAYsku)9AtSU_>? zjUvf0;3wd`f?r_s2z$=GRozW;MzXO=EOFS~)m3%B&OP_m1VOO9l}1xLF!Lf#_k%Jj z4vOuqXn$T#vV35&d5)hBZC=D#Ixy$@PxsGmZ;fm*%;Q-p-(B3^GUi&A#KVOt4&o#+ z<19BvS$=@=%u!rUOq3dXJ1$Co5%%R3JE7UjqI_i9Gn>m>%{WeMVIDU(ZeF_i>W%(% z)ai5RR|{*7CN{O0g()W%6UB$PFa^dQPB`YCEq{-!O^uA)Gr2A1Q+^+rS%kYsa-nC6 zGRjN+KD9?2TffI&{I-R+y|n_GUGg(nowsYFAk34gE%x%X%5fz&*FdETLDdAd+W@q z0c>ww^h!;2o0wrQ8-*nbjCJQR9>weVn7c!S&Y_1{fm;fTDUD?BOGq!BW8^+w zOS2Ih-Oun`TA1#*XqJILGYt?3)K8my>Q>$D(wIo_(^K!s3g6iu^pLFUR zNgPd2T~Vd1dr3BgY((g)o?bWGfB*QSPa(=OKD1`X{QcvPfA9Usj``}h|0Ob8=#@X1 zQI_gmAAP1{TJc-;gw~CMv*I%&YiEI199jzJ=3fhyYq&1ix^3$Kz+tg<7H0&_L6izVuzImy{UX_??VK5mBd$-BR92QRf zZ0}TuAl{%Ssw#SmdF=S7ynkcP=fiTI!)IJglZA=KC4{g(jWjMMc%Z-z;LT;NuNhWJ ze}z|7vhjL;!w=1$!!X?5y5N04kY`zWafklOJ;jfv-V{^)`Rbqk#p{Hq@xX|7I<-`N zY-%4&zR2=Y?QfRH@D=4kM_=GiFr5aYQE-NTf(u?L^)*z;%9BwSHGeu%S4BN-g!tB0 zDVxLd9UYbWzhhSZaIiJ;!@UfXjQT7_qkeH?tiI^c##s40E#s-J+#v7Th5qluEA4Yf zN8K(WkpKiZ=V@GG{eH+OM=(6JZijWg!Rz=Fyz)x5^xBf0TbRNXl5LIg0b*x(3?W#&(*$SduV4TijWAI`N#8-H8#19P>Y781`Pq)499KbIk7<9EI)qe*Xf!fw4`Bib7`cxuj}`zJthiK@KCtPhlpJ8wgcSZ4&

fw_#(J%L4V6o21rkUJp?lawu>>VWWgt& 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¥xB7>^)#r2R$#YaPjrXIf9C;b$qhlO>qLt}iOT@$4|Fhm$2>2hFe zuBoYikE~Oewgh;B@W;=|Kcb=?Z-V^EBPY+msTsZ?YzC6>Tqy4tj?S5tkU}td=o_Yz z+a!tj&}-x!)n+kZw|{#D$ncyzC;e`&$45r+gUT8rN1W`CIg%oLh6Fwu1(R$DEsGLB zLe&_@ldinkb?#8=1NyLR77s55dQ&J@v{Gq8SI(0!_guM8M&uM#r#K2Bh#y9-oa>pD zpU?NCz$GL<1#-(39L<-1Tz-Vq`G1z5Y9f664zgoG#mDa8p-o#xc`IWUoY=!Mtu+2G{!xC@A%iu#Fk&+7AD+xm!H7vQe7jK zONW$g4)=%)e=(THU5>o`EAsC47}Y^>wH@C2CO@%vcIhelTW4*tH2A23UuGH$xZCvlnU zIQ|7Lzk?oP9x!I${yfoTh~@b>Ws`1cN;!X|TYUL>!8M=%I~G{^re|8S|8 zCx#^f@#TH97e_^>;(@)|RQV&J;nb2;jtlzps1&9sf`9c${zs5d>9A0c+#hIN=qn~f z;f#a99@#{e@u#7IDO&9if{XD%c#oK!whodq4_(;~<{N(`pSy zfwPZpsnq?qw+fq#8*|i-Lf4wVujMvSetqpR2>f{$ysbJt zD)_+B8GkQJf7S{5SOv>QpJxrt+HQX|WceUA-sk}9c-rKA}WhNEGYJA&KotUMKvv*~zfDvY`$S~*LM+9lUu-xX&QoI13u zn1AyRD*&}GlnMe-R>tE+pk4t^;{n|S-O*iBZ?rhmyYM&n#I?e61uHJ=bI9T|P_F24K|=Y9MR!*c3H(0J=kUl`Y7CrjS$^DP#J>;`es=tB6>?S->o1foc8`|=*+{4k z+eKiqcg37ngQIR~V^9Vzs81DI9k2c#f}f~3Bb?E&$W@rH-v8YxA_4BebQlotD@Ewi zVwk6{v#Z>ZgD&5fP^J)CxoK&Vz!T5X+9XxpMCu!j zdqjG5Ba%y&r-wdQen_L~$}rkzq#)Y`jzagT{WW_KUB82LAQs5PJG-toV!gFGvC*MR z?p&s;{WDnkxwDOWQy?X8$2NVV0y6gGs_TfBAKRT)j_XqRVg}QvByAYgPY_kjt*PH6y;5}od9Tmp1o{*F#lY#i8IfwtcCiTK`MI$!P3^Lxkd%N-3r^J@(9`xTUa zcllT2a*cZf^RUIciED8!n^8?&txv1^&9UA?1aY4$$>d zRt3>d8kg5L8qN{I=F@p1^`3NPVbp%y6bYH<-3Q?5aI=D@lRTQR>%;Y|NBS%icKX3R zA@aRzB$d5+z{s>+Pk+-q7c*;3=KIaYDNQ-peSr=70S^tVZp~n2VbX6dnDm6MJl_`{ zX*+%5OE%UuC*GW}D-BYmItWSe|0rYm(kEMPjxxNFDOWLoo9~!BW^;1w@0FI*0>fIG zrG>v|I!gSt_c}&S(lj=(iWMp!>DyiDanK>2b{*%XU!=C`4S#J6r@8M+U!LL>!Mnvk zLEubbCdIB&eJ~lw)l>_w`!U@<3I{JH0LVM~-_rTd!MjT>B8R3+0hi zT#}ND{ip^tLw2*Hfe?VLSBabw#DF1mpB-&w=8|Bd8Gp@XB&;KqkxYhpiqSU7(vdn4 zi5Ohuon#O1Y8tpYUU43eIQ8TUH%?0qC1rOtQ!l#htw+~%SXOAuRlr(rZ|YHKaT53* zVI-|;i(e+_gdq}11kK}5y2UFk%d*I$iAb}2%(o5zxQyqCn)7}lnSYx~&dnD`+H-xo z6@>wxB7cVhN<9HAJ>vVUE;|ms>0cS3u4SB?+dFY|nCD!(lcqCi{BuHLrErxHc8|5g zF^ps&J*eaOwtOgnk&`HglhkqQ9wyq?K-&P8|1GIJ<;eJuhs?0Ss<&0< zqkrnnz+W`Z%W9!MWdD3R@_cE)?#+0{ETO@{2ExzIqMiIyrE$;cnetEVo^D?KRD4_5XQ2qS!u%P7E<*C%UPU3RiS-Zns0_jm2A{Au|FnC55#rB z1yl3H3G)La(l_7Bv-yl6#P@zEIT8QF3Q~~mW^{pzX3Lw@X_PDMcG(U+&azUPzJGWp z+h4}39WvUwp-iN9BM(e?xp~LHTrtfv+ic}xlc8a^bRm=xvZB-L$5pRRryuGuU`YqB zTs-ShNp7|7=ilH9>do>zcFr@nK-r6`Uu{)?<|#dLtaiJy3Nz1zQxi(J8>fm;*fFY5 zPyiKcZ#l7qXrT~0nY4GbRN=MNaDSrR^~{%!M!Vvx+%KY_2N&X3e4#&AUMa2Tg$cx| zzb$vJi!83+IyoLrF5A_`SpHezK9>*VmQ5kf@hnwwoWwKN0VsXSt9MGXSR8;yQ zlf4$jJiw&Cs$oT#A#EBV#}@i%piOIZ7_5vTIU+KwYBxsx(CW=DM)Llq)PKxu5*1L* zwRUEDn!=x5`F@r%6<+PoaXetf)p%^anr^vdL3)3ydM-_G*L8`;b!K9t+}|Qi(Yv15 z<307jnE8&hCsj3t1GnWe1r0NzI!>xW?dLEHMQwL9mb<4VBTXz_9DmN?2vg#b~B zn;H^RS&01N6~B51YU<9Nz<;@i>O3j4jmD{2j^^Iue<4TDWkc?uL9W#k4pem`RO|6a z9o!H!uoi#m4JJK;TwC(H6GDWb1H|QGhnIGWe7J)>y@by^HSx^Tp&Nd+KZ#kKq#{y^ zaW7~ddk_ncr_;HVW!xAJzp9{DvvSF5^wcGf5$P+WPsN=)&S=7Vbbs8R!by%8eTOGB z@T}{f8(O`rxF>v6X*k)?=~W|BCcarncpRTdvGsq$9teW4+&!2jHbD9B8L9 zV<_8mSRH#9FSTNUihtQ0SK)t4N3;ehy^J4z+#WFC(g`I-DMRyj`1oolL%&Q|&5efx z17E9b`odL?*?06e>0Uh&sbtG3)b$klQMluZ&0~1(*F8+4IMoiLO$xoSk0&qqX*c1Q z8!=!lV0#y{4vRRLEi_o|u0^nBAZM09H<+y>9WTVMU*L38Ie)dvspY9g$#R8=7OAbi z=CoR1d!;(}kRsY?1+!DiWxn4;YGjWT&XbjMm7`g57NOC|^o!rDw-dSjse6|m*0E$r zszn=JM|G1)TW$0?*Lu|R%|FjcBaxuko~b%+p4(_PaoXH8=5N%NMJxY5P)h*<6aW+e q000O82fn6UQj;ttJ`QMJ7hRF;txm8X005p%lXxXK26-z00002LE)DMh delta 6589 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 Use when delegating a task to another agent or project via - mcp__projects-meta__tasks_create. Triggers: «делегировать таску», - «delegate task», «создать задачу на агента», «поставить задачу агенту», - «tasks_create для». Does NOT apply to self-assigned tasks on your own - board («создать задачу себе», «task for myself», «поставить себе задачу» - → using-tasks), to work you do yourself, or to workshop-internal tasks. + mcp__projects-meta__tasks_create. Every cross-project delegation is a + pair: tasks_create + covering letter to the recipient's inbox (event: + created) — a task on the board does not ping a live session. Triggers: + «делегировать таску», «delegate task», «создать задачу на агента», + «поставить задачу агенту», «tasks_create для». Does NOT apply to + self-assigned tasks on your own board («создать задачу себе», «task for + myself», «поставить себе задачу» → using-tasks), to work you do yourself, + or to workshop-internal tasks. --- # delegate-task @@ -36,6 +39,8 @@ description: > - `notify` — slug проекта-комиссионера (кому писать inbox при close/park) - `allow_upgrade` — `true/false` (опционально; разрешить ли fallback на tier выше если нет matching backend) +Номер задаче присваивает сервер (`tasks_create` из счётчика `OpeItcLoc03/agenda/task-counter`) — постановщик номер не придумывает и не резервирует. Возвращённый `#n` из preview/confirm — машинный ключ задачи: им ссылаются блокеры, письма, decision-trail. + ## Steps ### 1. Pre-flight gate (6 вопросов пользователю) @@ -59,6 +64,8 @@ description: > ``` <Цель — одно-два предложения. Acceptance criteria если есть.> +**Спека:** — обязательно для задач +из дизайна/решения: импл читает дизайн, не угадывает ## Обязательные скилы — вызвать до начала работы @@ -85,6 +92,13 @@ description: > Значение: `true` (следующий трек = «см. STATUS.md») либо строка-hint с названием следующего трека. Потребитель — `using-tasks` v1.2.0+ (Task completion step 6): после close печатает `🔚 SESSION BOUNDARY …` и останавливается, не клеймя следующую задачу. Дизайн: `.wiki/concepts/delegate-task-session-break.md`. +**Этапные цепочки (staged breakdown):** если решение бьётся на этапы +(1 → 1b → 3), создавай каждый этап отдельной таской со `status: blocked` + +`blocker: <номера-предшественников> (#n1, #n2 — номера, не слаги; номер = +машинный ключ)`. Доска показывает порядок, поллер не возьмёт зависимую +работу раньше времени. Таски в один репо создавай последовательно, не +параллельно (иначе sha-lock конфликт — см. Failure modes). + **Почему `invoke` а не триггер-фраза:** AGENTS.md ненадёжен (уплывает при compression, слабые модели игнорируют). Тело задачи читается активно — императив `invoke` это прямая команда, не пассивный матчинг. ### 3. Dry-run preview @@ -95,9 +109,33 @@ description: > После OK пользователя: `tasks_create(confirm=true)`. -### 5. Парная review-таска (только для impl-задач) +### 5. Сопроводительное письмо — обязательно при кросс-проектной делегации -Если задача имплементационная — создать парную `-review` (status=blocked, blocker=``). Пропустить для: pointers-тасок, ops-тасок, research-тасок, любых non-impl. +После создания **каждая кросс-проектная делегация** дублируется письмом в +инбокс получателя (канон — `inter-session-messaging`, адрес из адресной +книги `~/projects/.wiki/concepts/projects-address-book.md`): + +``` +<адрес-получателя>/.agents/inbox/Z-<своя-папка>.md +--- +from: <своя-папка> +event: created +slug: +--- +Тело: 1-2 строки — что за задача, почему, slug; «разбери и возьми». +``` + +Причина: таска на борде **не пингует живую сессию** получателя. Поллер +подхватит по `Weight`/`Notify`, но живая интерактивная сессия узнаёт только +через inbox-монитор — т.е. через письмо. Правило «task + letter, не только +task» — общий случай (шаг 7 — его частность для downstream-задач). + +Пропуск: self-assigned задачи на своей доске; `target=agenda` (общая доска, +конкретного получателя нет — steering-loop через `Notify`). + +### 6. Парная review-таска (только для impl-задач) + +Если задача имплементационная — создать парную `-review` (status=blocked, blocker=`#n` — номер impl-таски). Пропустить для: pointers-тасок, ops-тасок, research-тасок, любых non-impl. **`weight` review-таски — наследовать от impl-таски, но не ниже `needs-claude`** (проставлять явно при `tasks_create`): @@ -107,7 +145,7 @@ description: > Без явного `weight` поллер не маршрутизирует review-таску (reconciler её пропускает) — поэтому проставлять всегда, даже когда impl и review совпадают по tier'у. -### 6. Downstream-задача для ЖИВОЙ сессии → требовать task + inbox-письмо +### 7. Downstream-задача для ЖИВОЙ сессии → требовать task + inbox-письмо Если тело задачи **поручает агенту самому создать downstream-задачу** для другого проекта, где работает **живая интерактивная сессия** (напр. прог сам ставит deploy-таску админу), — в ТЗ **явно потребуй И `tasks_create`, И inbox-письмо** тому проекту (`/.agents/inbox/-.md`). @@ -121,7 +159,10 @@ description: > - **Пользователь отклоняет dry-run preview** → abort. - **notify не указан** → переспросить, не пропускать молча. Без notify steering-loop не замыкается. - **weight не указан** → переспросить. Без weight поллер не знает кому отдать задачу. -- **tasks_create упал** → сообщить пользователю, не делать retry без явного запроса. +- **tasks_create упал** → различить: **PushRejected** (sha-lock конфликт — + репо уехало между preview и confirm; бывает при параллельном создании в один + репо) → **retry**: повторить confirm — сервер перечитает актуальный base_sha. + Другие ошибки → сообщить пользователю, не делать retry без явного запроса. ## Side effects @@ -135,8 +176,15 @@ description: > - Не пропускать `notify` — без него boss не узнает о завершении. - Не пропускать `weight` — без него fleet routing слеп. - Не создавать review-таску для pointers/ops/research задач — только для impl. -- Не создавать review-таску без `weight` — reconciler/поллер её пропустит. Наследовать от impl, флор `needs-claude` (см. Step 5). +- Не создавать review-таску без `weight` — reconciler/поллер её пропустит. Наследовать от impl, флор `needs-claude` (см. Step 6). - Не назначать `weight: cheap-ok` для задач где дисциплина критична (review, security, schema migration) — слабые модели могут игнорировать invoke-инструкции. - Не назначать `weight: needs-claude` или `cheap-ok` задачам, меняющим критическую инфраструктуру (поллер, MCP серверы, deploy, CI/CD) — только `needs-human`. - Не ставить `session_break` рутинно на каждую задачу — это маркер реальной границы (domain-switch / milestone / heavy infra), не дефолт; иначе `using-tasks` рвёт сессию после каждого close. -- **Не поручать агенту создать downstream-таску для живой сессии без парного inbox-письма** (см. Step 6). `tasks_create` в чужой борд живую сессию не пингует — ТЗ обязано требовать И таску, И письмо, иначе downstream-таска висит незамеченной. +- **Не создавать задачи из дизайна/решения без `**Спека:**`-ссылки** — + импл-агент угадывает пороги/скоуп вместо чтения дизайна. +- **Не создавать несколько тасок в один репо параллельно** — sha-lock + конфликты (PushRejected); сериализуй confirm'ы. +- **Не делегировать кросс-проектную задачу без сопроводительного письма** в + инбокс получателя (шаг 5). `tasks_create` в чужой борд живую сессию не + пингует — task без letter остаётся незамеченной до поллера/руки. +- **Не поручать агенту создать downstream-таску для живой сессии без парного inbox-письма** (см. Step 7). `tasks_create` в чужой борд живую сессию не пингует — ТЗ обязано требовать И таску, И письмо, иначе downstream-таска висит незамеченной. diff --git a/skills/inter-session-messaging/SKILL.md b/skills/inter-session-messaging/SKILL.md index ebafb0f..ac83bb0 100644 --- a/skills/inter-session-messaging/SKILL.md +++ b/skills/inter-session-messaging/SKILL.md @@ -1,7 +1,7 @@ --- name: inter-session-messaging author: ours -version: 1.0.0 +version: 1.2.0 description: > Как писать и принимать межсессионные письма (`.agents/inbox/`). Один источник правды по канону отправки: адрес = имя папки проекта как есть (из адресной книги @@ -65,6 +65,16 @@ slug: # опционально — если пись Тело — свободный markdown. ``` +### Ссылки на задачи — по номеру (формат v2) + +Ссылка на задачу в письме — **по глобальному номеру**: `#452` (формат v2, +номера — машинный ключ, уникальны по всей федерации). Не слаг — слаг может +повторяться между проектами. Первое упоминание задачи в письме — с номером и +слагом для читаемости: `#452 (tasks-v2-search-by-id)`, далее — просто `#452`. +Пример: «Разбери и возьми: `#452 tasks-v2-search-by-id` (готово к имплу)». +Резолв номера в {project, slug} — через `mcp__projects-meta__tasks_search` +(ищет и по id) или `tasks_get_by_id`. + Ответ на письмо: пиши в инбокс отправителя (`from` в frontmatter полученного), имя файла — со своим адресом отправителя, в `in_reply_to` — имя исходного письма. @@ -122,6 +132,23 @@ slug: # опционально — если пись это разговор.** Значимый дизайн-выбор должен лечь на доску (или в вики), инбокс лишь указывает на него. +### Lifecycle-уведомления: task + letter + +Кросс-проектное действие с задачей — всегда пара «доска + письмо». Доска — +источник правды (существование/статус/скоуп), письмо — пинг и контекст. В +теле письма задачу называй **по номеру** (`#452`), а не только слагом: + +| Событие | Кто пишет | Куда | event | +|---|---|---|---| +| Создание | комиссионер | инбокс получателя | created | +| Закрытие | исполнитель (живая сессия) или поллер (авто-ран) | инбокс комиссионера (`Notify`) | closed | +| Блокировка/парк | то же | то же | blocked | + +Тело письма — 1-2 строки + номера/слаги, не дублировать доску. Живая сессия +узнаёт о задаче ТОЛЬКО через письмо (борд не пингует); комиссионер узнаёт о +закрытии только через `Notify`/письмо. Правило постановки — `delegate-task` +шаг 5; правило закрытия — `using-tasks` Task completion шаг 4. + ### Против чего это Две сессии пинг-понгуют, каждая соглашается с фреймом другой и добавляет скоуп, diff --git a/skills/setup-tasks/SKILL.md b/skills/setup-tasks/SKILL.md index 79d4893..b0f856d 100644 --- a/skills/setup-tasks/SKILL.md +++ b/skills/setup-tasks/SKILL.md @@ -1,7 +1,7 @@ --- name: setup-tasks author: ours -version: 1.0.0 +version: 1.1.0 description: Creates or migrates a project's `.tasks/` board to the canonical layout — `STATUS.md` (the board, with emoji status legend) plus per-task `.md` files for each active or paused task. Use when the user says "set up tasks", "init tasks", "настрой таски", "инициализируй таски", "create task tracking", "migrate tasks to canon", "tasks broken", or whenever `using-tasks` detects a missing or non-canonical `.tasks/`. Two modes — greenfield (no `.tasks/`) and migrate (existing flat STATUS.md without per-task files). Confirmation gate before writing. Cross-platform. --- @@ -93,12 +93,13 @@ _Updated: _ + --- ``` ## The two load-bearing rules -1. **Header must match exactly:** `## [] — ` +1. **Header must match exactly:** `## [# ] — ` - `## ` (h2, two hashes) — **not** `### `, not a bullet. - - One status **emoji**, then `[slug]` in square brackets, then ` — ` (space, em-dash `—`, space), then the description. A `-` hyphen or `:` will not match. + - One status **emoji**, then `[# ]` in square brackets — **global task number** (`#1234`, no leading zeros) + slug — then ` — ` (space, em-dash `—`, space), then the description. A `-` hyphen or `:` will not match. + - **Number is the machine key.** Global, unique across the whole federation, encodes creation order. References (`#452` in letters, blocker fields, decision trails) point at the number. The slug is the human-readable part only. - Slug: short, lowercase, kebab-case, Latin. - A header that doesn't match is **not seen as a task at all**. 2. **Fields are `**Label:** value` lines** — bold label, colon, space, value. Bullet-list fields (`- **weight:** …`) and prose ("notify workshop when done") are **ignored** — the poller never reads them. +3. **`**Created:** yyyy-mm-dd` is mandatory** — the creation date. Written once at task creation, never edited after. + +## Numbering + +- **Numbers are assigned by the server** (`mcp__projects-meta__tasks_create`) from the counter in `OpeItcLoc03/agenda/task-counter` — never invent or reuse a number by hand. +- The **file name** is `yyyy-mm-dd-#####-.md` — number **5 digits with leading zeros, no `#`**: `2026-06-05-00019-fix-nl-vds-reality-pq-dest.md`. Leading zeros make folder sort = numeric up to 99999. No `#` in the filename (it would break markdown links and Gitea URLs). +- In the **header and text references** the number is written **without** leading zeros: `[#19 slug]`. + ## Status emoji ↔ state | Emoji | State | | @@ -84,8 +94,12 @@ The poller routes each claimed task to a backend by its weight tier: | Mistake | Fix | |---|---| -| `### Title` or a `- **id:** …` bullet list | Use the exact `## [slug] — desc` h2 header + `**Field:**` lines. | +| `### Title` or a `- **id:** …` bullet list | Use the exact `## [#n slug] — desc` h2 header + `**Field:**` lines. | | 🟢 for a ready task | 🟢 is *done*. Ready is ⚪. | +| Header `[slug]` without a number | Header is `[#n slug]` — the number is the machine key. | +| `**Created:**` missing | Add `**Created:** yyyy-mm-dd` — mandatory field. | +| Inventing a number by hand | Numbers come only from `tasks_create` (counter). Never invent/reuse. | +| File named `2026-06-05-19-slug.md` (no leading zeros) | File is `yyyy-mm-dd-#####-slug.md`, number 5 digits: `00019`. | | Inventing `risk: low`, `tier: L`, `priority`, `claimable-by` | The poller routes on `**Weight:**` with three fixed values only. | | Notification written as prose / "Done-signal" | Use a real `**Notify:** /` field line. | | Omitting Weight on a task you want auto-run | Always set Weight, or the task parks. | @@ -93,4 +107,4 @@ The poller routes each claimed task to a backend by its weight tier: ## Verify -After editing, the block is correct when: header is `## [slug] — …`, the emoji matches `**Status:**`, every machine-read field is a `**Label:**` line (not a bullet), and a task meant for the poller has both `**Weight:**` (not `needs-human` unless intended) and `**Notify:**`. +After editing, the block is correct when: header is `## [#n slug] — …`, the emoji matches `**Status:**`, `**Created:** yyyy-mm-dd` is present, every machine-read field is a `**Label:**` line (not a bullet), and a task meant for the poller has both `**Weight:**` (not `needs-human` unless intended) and `**Notify:**`. diff --git a/skills/using-tasks/SKILL.md b/skills/using-tasks/SKILL.md index 8fd1098..dca1bf7 100644 --- a/skills/using-tasks/SKILL.md +++ b/skills/using-tasks/SKILL.md @@ -1,7 +1,7 @@ --- name: using-tasks author: ours -version: 1.4.1 +version: 1.7.0 description: > Policy skill for working with an existing `.tasks/` board (per-task files + STATUS.md). Use whenever the user is switching between tasks, resuming a paused task, starting a new @@ -35,7 +35,8 @@ If `.tasks/` is **missing**, or `STATUS.md` exists but is non-canonical (e.g. fl / .tasks/ STATUS.md ← active board: 🔴 / 🟡 / ⚪ / 🔵 blocks, sorted by priority - .md ← deep context per task, one file each + yyyy-mm-dd-#####-.md ← deep context per task, one file each (format v2) + done/ ← per-task files of closed 🟢 tasks (format v2) .lock ← runtime session lock; **gitignored** (never committed) .archive/ done-YYYY-MM.md ← 🟢 done blocks moved off the board, one file per month @@ -43,7 +44,7 @@ If `.tasks/` is **missing**, or `STATUS.md` exists but is non-canonical (e.g. fl Commit `.tasks/` to git. Decision history is valuable; diffs show how thinking evolved. -`STATUS.md` is the **active** board — it must stay lean so orientation reads stay cheap. Closed 🟢 tasks are archived to `.archive/done-YYYY-MM.md` once they pile up; see "### Archiving done tasks". +`STATUS.md` is the **active** board — it must stay lean so orientation reads stay cheap. Closed 🟢 tasks are archived to `.archive/done-YYYY-MM.md` once they pile up; their **per-task files** move to `.tasks/done/` (see "### Task completion" step 9). > **`.tasks/.lock` must be listed in `.gitignore`** (add `.tasks/.lock` to your project's `.gitignore`). The lock file is ephemeral runtime state, not project history — it must never be committed. @@ -55,8 +56,9 @@ Commit `.tasks/` to git. Decision history is valuable; diffs show how thinking e # Task Board _Updated: YYYY-MM-DD_ -## 🔴 [task-slug] — short description +## 🔴 [#1234 task-slug] — short description **Status:** active | paused | blocked | done +**Created:** YYYY-MM-DD **Where I stopped:** one sentence — the exact thought or action interrupted **Next action:** one concrete step to resume immediately **Blocker:** (only if blocked) what is preventing progress @@ -66,6 +68,8 @@ _Updated: YYYY-MM-DD_ --- ``` +**Task numbering (format v2).** Every block header carries a **global task number**: `## [#1234 slug] — …`. The number is the machine key — global, unique across the federation, encodes creation order. Numbers are assigned by the server (`mcp__projects-meta__tasks_create`) from the counter in `OpeItcLoc03/agenda/task-counter`; **never invent or reuse a number by hand** (a hand-written number collides with the counter). Per-task files are named `yyyy-mm-dd-#####-.md` — number 5 digits with leading zeros, no `#` (folder sort = numeric). References in text use the number: `#452`. + **Emoji convention:** - 🔴 Active — currently worked on (only one at a time) - 🟡 Paused — in progress, resumable @@ -87,10 +91,10 @@ The check is enforced in the **Task completion** flow below (after close, before --- -## Per-task file format (`.md`) +## Per-task file format (`yyyy-mm-dd-#####-.md`) ```markdown -# +# ## Goal One paragraph. What this achieves and why it matters in the monorepo. @@ -114,6 +118,8 @@ Reverse-chronological. Append only — never rewrite past entries. Temporary hypotheses, links, names of people to consult. ``` +The file name mirrors the header: date + 5-digit number + slug, e.g. `2026-06-05-00019-fix-nl-vds-reality-pq-dest.md` for header `[#19 fix-nl-vds-reality-pq-dest]`. + --- ## Agent operations @@ -156,11 +162,32 @@ Temporary hypotheses, links, names of people to consult. 4. Confirm orientation before starting work. ### New task creation -1. Ask: task name (slug), goal, known key files, branch name. -2. Create `.md` with Goal and Key files populated. -3. Add ⚪ block to `STATUS.md`. + +1. **Create via the server, not by hand.** New tasks are created with `mcp__projects-meta__tasks_create` — the server assigns the global number from the counter and writes the header `[#n slug]`, the `**Created:**` field, and the per-task file `yyyy-mm-dd-#####-.md`. Hand-editing a new block into STATUS.md with an invented number collides with the counter — don't. +2. Ask: task name (slug), goal, known key files, branch name. +3. After the server create: fill `` content (Goal and Key files) into the per-task file `yyyy-mm-dd-#####-.md`. 4. Create and checkout branch if it doesn't exist. +Exceptions (hand-edited board): migration, retro-fitting existing tasks, or a board whose project is not in the federation cache. In those cases take the next number from `OpeItcLoc03/agenda/task-counter` (read → +1 → write) before writing the block. + +### Design-derived impl tasks — review umbrella + +When creating **N≥1 implementation tasks derived from a design/spec** (not +ad-hoc), also create the review umbrella: + +- slug: `-review` +- status: `blocked` +- blocker: the impl-task slugs (`-impl-1, -impl-2, …`) +- next_action: «Дождаться 🟢 у всех blocker-тасок, затем отревьюить каждую + против acceptance criteria из дизайна. Findings → follow-up tasks.» +- **reviewer contract: не имплементер** — следующая сессия в проекте с + чистым контекстом (борьба с «я только что это написал» bias). + +The umbrella is the only mechanism that guarantees a non-implementer review: +`workshop-promote-brainstorm` generates it for the boss-flow, this rule +covers in-project designs. Skip for ad-hoc single tasks and for +self-implemented work closed with the coverage check. + ### Task completion 1. **Pre-close coverage check.** Before setting 🟢: - List acceptance criteria from the per-task `.md` (or the STATUS block if no per-task file). @@ -168,23 +195,31 @@ Temporary hypotheses, links, names of people to consult. - Missing evidence on any criterion → flag to user and ask "закрывать или подождать coverage'а?". Never silently close. - If acceptance criteria are policy / docs-only and have no testable shape, an explicit user "ok, closed by inspection" is required (record this in the close-note). 2. Resolve or drop all open questions. -3. Set status to 🟢 in STATUS.md. -4. Append final summary line to Decisions log. -5. Remind user to delete the branch after merge. -6. **Session-break check (after close, before claiming the next task).** Once the task is 🟢 and committed — and **before** any `tasks_claim_next` or starting the next task — read the closed task's `session_break` marker (its frontmatter `session_break`, or the `**Session break:**` field in its STATUS.md block). If present: +5. Set status to 🟢 in STATUS.md. +6. **Notify-письмо при закрытии (кросс-проектные таски).** Если закрываемая + таска пришла из другого проекта (в блоке есть `**Notify:**` или + ``) — отправить письмо + комиссионеру в его инбокс: `/.agents/inbox/Z-<своя-папка>.md`, + frontmatter `event: closed`, `slug: `, тело = итог (сделано, + acceptance, ссылки). Поллер пишет это письмо за авто-раны; **живая сессия + пишет сама** — статус 🟢 на борде ≠ комиссионер узнал. +7. Append final summary line to Decisions log. +8. Remind user to delete the branch after merge. +9. **Move the per-task file to `.tasks/done/`** (format v2): `git mv .tasks/yyyy-mm-dd-#####-.md .tasks/done/`. The board block is 🟢 (archived to `.archive/done-YYYY-MM.md` when it piles up); the deep-context file leaves the active folder. +10. **Session-break check (after close, before claiming the next task).** Once the task is 🟢 and committed — and **before** any `tasks_claim_next` or starting the next task — read the closed task's `session_break` marker (its frontmatter `session_break`, or the `**Session break:**` field in its STATUS.md block). If present: - Print this line **verbatim**, substituting the closed task's slug for `[slug]` and the marker's string value for `[value | "см. STATUS.md"]` (use the literal `см. STATUS.md` when the marker is just `true`): `🔚 SESSION BOUNDARY — [slug] закрыта. Рекомендую завершить текущую сессию. Следующий трек: [value | "см. STATUS.md"]` - **Stop.** Do not claim or start the next task. - If the marker is absent → behaviour is unchanged: proceed to claim / start the next task as usual. -7. **Archival check.** After the close is committed, if `STATUS.md` now holds **≥ 10** 🟢 done blocks, archive them (see "### Archiving done tasks"). This keeps the board lean for the next orientation read. +11. **Archival check.** After the close is committed, if `STATUS.md` now holds **≥ 10** 🟢 done blocks, archive them (see "### Archiving done tasks"). This keeps the board lean for the next orientation read. ### Archiving done tasks 🟢 done blocks accumulate in `STATUS.md` and bloat it — and since orientation reads the whole board, a bloated file burns context on every session start (the recurring "huge STATUS.md" complaint). Keep the board lean: done blocks stay only until merged, then move to a monthly archive. -**Threshold.** When `STATUS.md` holds **≥ 10** 🟢 done blocks, archive them. Check at two moments: (a) right after closing a task (Task completion step 7), and (b) at session start, before orienting (Session start step 7). The threshold is a ceiling, not a target — archive in batches; don't churn one block at a time. +**Threshold.** When `STATUS.md` holds **≥ 10** 🟢 done blocks, archive them. Check at two moments: (a) right after closing a task (Task completion step 8), and (b) at session start, before orienting (Session start step 7). The threshold is a ceiling, not a target — archive in batches; don't churn one block at a time. **Where.** Append the archived blocks to `.tasks/.archive/done-YYYY-MM.md` — one file per calendar month, keyed by the date of archival. Create `.tasks/.archive/` and the month file if absent. If the month file already exists, **append**; never overwrite. @@ -248,5 +283,7 @@ Pair: `using-projects-meta` declares local-first for **reads**; this rule extend - **One active task at a time** — only one 🔴 in STATUS.md. - **Keep the board lean** — orientation reads the local `STATUS.md` whole, so archive 🟢 done blocks to `.tasks/.archive/done-YYYY-MM.md` once ≥10 pile up. Never enumerate the current project's board via `tasks_aggregate` (cross-project cache) or `tasks_get_status` (single-task, by slug). See "### Archiving done tasks". - **Never close a task without a coverage check** — see "### Task completion" step 1. Acceptance criteria with no evidence → ask, don't auto-close. -- **Honour `session_break`** — a closed task carrying a `session_break` marker means stop after close; never chain into `tasks_claim_next`. See "### Task completion" step 6. +- **Honour `session_break`** — a closed task carrying a `session_break` marker means stop after close; never chain into `tasks_claim_next`. See "### Task completion" step 7. - **Local-first recommendations** — cwd-project board comes first; cross-project urgents are at most one footnote line. +- **Notify-письмо при закрытии** — кросс-проектная таска закрыта → письмо комиссионеру (event: closed). Поллер пишет за авто-раны; живая сессия — сама. See "### Task completion" step 4. +- **Design → impl tasks ⇒ review umbrella** — N≥1 impl tasks derived from a design get a `-review` umbrella (status=blocked, blocker=impl-slugs, reviewer = non-implementer session). See "### Design-derived impl tasks — review umbrella".