From c688a60b2a4356c27f9b8de2885e9c02473c2dbb Mon Sep 17 00:00:00 2001 From: vitya Date: Mon, 24 Aug 2026 22:45:49 +0300 Subject: [PATCH] =?UTF-8?q?feat(mappa-brainstorm-promote):=20UPDATE=20work?= =?UTF-8?q?shop-promote-brainstorm=20v1.1.0=E2=86=921.2.0=20=E2=80=94=20ma?= =?UTF-8?q?ppa-service=20channel=20(fold-in=201:=20lease,=20wiki=5Fcreate,?= =?UTF-8?q?=20task=5Fcreate=20sequential,=20no=20pointers=20if=20spec=20in?= =?UTF-8?q?=20wiki,=20service=20review-umbrella,=20covering=20letter);=20o?= =?UTF-8?q?ld=20name=20=3D=20trigger=20synonym=20[skip-tdd:=20visual]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...26-08-24-01060-mappa-brainstorm-promote.md | 10 ++ dist/mappa-brainstorm-promote.skill | Bin 0 -> 11140 bytes dist/workshop-promote-brainstorm.skill | Bin 9442 -> 0 bytes .../SKILL.md | 119 +++++++++++------- 4 files changed, 86 insertions(+), 43 deletions(-) create mode 100644 dist/mappa-brainstorm-promote.skill delete mode 100644 dist/workshop-promote-brainstorm.skill rename skills/{workshop-promote-brainstorm => mappa-brainstorm-promote}/SKILL.md (76%) diff --git a/.tasks/2026-08-24-01060-mappa-brainstorm-promote.md b/.tasks/2026-08-24-01060-mappa-brainstorm-promote.md index 6000b37..b330f06 100644 --- a/.tasks/2026-08-24-01060-mappa-brainstorm-promote.md +++ b/.tasks/2026-08-24-01060-mappa-brainstorm-promote.md @@ -15,4 +15,14 @@ Fold-in 1: mappa-service target. Промоут в mappa-сервисные бо ## Completed steps +- [x] skills/mappa-brainstorm-promote/SKILL.md v1.2.0 (MINOR) — UPDATE workshop-promote-brainstorm: добавлена 4-я ветка маршрутизации **mappa-service** (fold-in 1: лиз через task_claim_next, спека через mcp__mappa__wiki_create, импл-таски через mcp__mappa__task_create, pointers-таска НЕ нужна если спека в вики w:NNNN, review-umbrella сервисная таска, covering-письмо в инбокс цели) +- [x] NB (2026-08-24, инцидент): tasks_create ПОСЛЕДОВАТЕЛЬНО, не батчем (гонка sha-CAS счётчика agenda; при промоуте mappa-skill-suite 6/7 упали) — в шаге 8 + failure modes + what-not-to-do +- [x] File channel (projects-meta → .tasks/STATUS.md) сохранён; шаги перенумерованы (вставлен шаг 4) +- [x] Старое имя workshop-promote-brainstorm — триггер-синоним в description; каталог git mv +- [x] lint clean (67 skills, 0 violations); build.sh → dist/mappa-brainstorm-promote.skill (старый .skill удалён); install.sh → dual; старый удалён из живых диров +- [x] GREEN micro-test: свежий pi -p на «промоутни брейнсторм… таргет mappa» → активация mappa-brainstorm-promote, service channel (лиз/task_create последовательно/wiki_create/без pointers/review-umbrella/covering-письмо) + ## Notes + +- RED-базис: UPDATE существующего скила (триггеры не менялись); дельта = fold-in 1 + NB последовательности. Полный behavioral smoke — за #1065. +- Актуальность шага 3 (определение канала): сервисные борды — mappa, .common (доска в mappa-сущностях); обычные проекты — файловая доска. Определение по наличию .tasks/STATUS.md. diff --git a/dist/mappa-brainstorm-promote.skill b/dist/mappa-brainstorm-promote.skill new file mode 100644 index 0000000000000000000000000000000000000000..eeb6d1cab524882ff9bc3f79f60a47df2ece37ce GIT binary patch literal 11140 zcmai)Q*a#)wDr^2Nn_i#?Gq<$Z1cpnZQE*`oD3E0!^HpOqfkwOl%xn-5gzj%uX(j zKu0$V)*lK0MMV~%`J%tCquz4*)fenLF^{RS;%}j}OSg@PW^AgPOKB%P-YQOb*x+5s zXjzOgEHqZY>dlTRI>7mI5MS_L`#hQWIe?w>qtw;eMi*=$OxIr+^p5xf{Y1I(u-4$p zLqCBUW5})a%(r26)v|1uxb2fi7o%KYt*Mn7qg&UiyJ%f(P{%8{3GN|iSv$2|Q&KLd zs(06#^N=pLyPTfD=YCLdgV%s27m>LwbQ(Rba)4_pWtg1kkfjg98OpM>TMm^zZ8_xYB~9M z3>t~4_Hd~3=v=Df&D0P#!m6X$tbYB}>Qjq%Yg+3c_}zBKdj^WNab>p|@S@gG&@v(F ztkMIr(i%|n{_raA)M=V&%7(9n4>(`t7D{ia{NAVa%#=@=?5;C zfh#5dwDJTC`+Q@4lCO3x-Ljr(iH$$gWsW`xMfEG-N^w|Ynj4?6+VsHwhxP^cD*fQl zyr%YG$-9Wj2s_Nnm?WQ-s;-lwhs2Vs_&V}%&5HmyJs;+dRBV_6=P za5f;f4-TP^kXs_tnw>|rv#J6j-T7N6> z)OOB((M7{=S`{g;5aj|s?!)&yA@*0#5=#|4bKmzDFU;}o;-Ei6vq(9XfqrPce)xIZ zP6V}QNE`U!`*fd(5uw6TH2RUjKGo=O(RjEf>tA6{gxh0H&L-EenH53C{mA>ie3bgU zf9iQZvEMzrLNE)pI5|7&nE(EPAl&^c+lAj7Tn_9vC!w(F3A$qo2$~<#AnrdyJINRa z`pkXb&{^W^O>9dAZbYzN?PL>(LNg4k=&=EdRyp61Uz*FDD%dCtU&;xDBMBeJ60c1Q zMH=t7A)Jk8B~4?=U3j_)`VV@c3AV=?P`z$q+CN^bgE;Aj>sO)`7+5B~_jsxFuQhsf z6hs&smi9_QI-a})O*nn`;d1Z>^b#YyauM`k-69!b!Q&z<7>T>qa+163S=re?CLbK2 zv7{@m21fMu-)!H}>m!nrH3hjc->$z+g*o8(qYGI%tXQB{|EL+QjrM zO!78!Yrk2Is-N0s!f_^NWjM z9muT@6;&}R@#W-ftCl#3U<9FiyDf{o@(lv(+Vf>K9wRGflE0&T;vc9_LN#*6IpJA> zb5%=P4ZPxJ!z28q@D!Yx1q2@f_j<-AE3e01@HMX@LA!Hiq?*`Zg? zY^uM~8L#1ZO|UU-u!npGDe*Smim7ECm6?B>;?C-47xui0ioCD>ygAPmWuRn}Qa76%w9)>PQe-<~g9v0Ht0ibd!qJSg?9 zAc7-GL&yJ#aN47V(*kOy*UoHP{0aGeLZJ!ZrB@nBqWtIFDi>%O0hk&*Cq@~Bf&35W z=Z4%q6ncq~dowsNmM|JKu_+aN_o>`54=E}29VHMG@=IQ`4`=EtCe%iacE z1~y3IH0@;kW!m7l1LL0fP7EX$~&vK_V2!|NiBmO{JE}r-1h89qj zp0pjEZMD8K&iRQzRk@50l4$Jy^FcJ5#>}6+zAI8kKF3e@#I2zI+JP5KO=)F@ytmK0 zKz=k$i>}U%`c_SW5lI<{WL>r1JBTHa7yNaM^#_XqVxQKQ(Mc$R*5|q5ztD?xF3d5~ zWEHPBZ;aYrJl3BFU_Q`7`GJ9}U)0A93V&;zx$914b=qIyUFWz-gztj}+{&4acTpw#1 z?I#2V+thDWEv~aosH_!fq_-j`a7viKK+A`iQPtG_1G<0vBQ-a_Wb}2eFYpXety?pT zT30_vm}D49{7G+4c2QQAL%%9`FJWKM-2I?f$Xh(IpVyyF5o>sr^Db(nC(UMKxyx#y zb%K_rNP9z`%URu6mM#O6sKjWqw6Jblyaph6u-vOIUG8JwqWHy9{}XR#Hl+eWbB45^ z{LABBj}7aS?RDy;W|nmKp{?`_GIIxwdg1Wke`So5A2mILyv6A%I!8U8!A5Ezzvvci`Bg z*`IOh5!SU#r}rO^u-&t-tei@7>6RHCHiJbI@(-56KrO;*P|lWI2}@N9uSN2HhhabW z0T7fvxq|iVc#Hb(_6=-H_L+h3^&+mFCG7?)+-OOv|54L`<#g@Y-}eQ%@vbo;nJhFm znxKnbSY86{i=QO?jvmkr<#CC_GM{tqd1{A3K9G4m;W6QZXiWA+W+%NW^vy}FhF4?d zT4PkJTN}zDCsBgu=KL?hBNjC#pJO+iana1Uc}!}0Kua!o+?`*x{s`0M+rJdg+1#@+ zbf#yiyi;74Ci^%BzpwK^(T1Ja$`H246=psa-k0eoE-dn7IBYjQlWB2%MDbzC@3eP} zD8dM#MMi>BS2no=1kc>hT5-M^@HJryJaS_FiSjXI;Z}Ro7}FJ-RpbS%_}%uFcFD|n zM>sdcw?ths(60`&Cx7vmByYN8LlDB_pI!KI*^sS7Q@#Lae+-jk>E<$ojED(8lXJ0wR{Mn~agh zyTm9C#0FK(AQ~IG5qVH(vlLr(SCx!fsp{WDB{@Ll?S)+YrXDSfZOYMbp1WA;YHRSs zz`AJCA(~bsMNRxY{E_n;c{+|)6&3~|LhD3W>K*GKNToX)Um#u-F;7NHl_PEXd6^n< zUE1liql7VGpcQ&r78cQX9k#0Vz}U;Iw`@*NiLHWVkPAJ*FN%s{p$$n>mD8jBSuj-l zhZ`9(D6#L4(tz{8!=*y?ytW=}4P)IV3w;5}W&>WTxp)X0df$>nKB4b;2U-ZhyT0|m z%f0iW3#R%Bv2BXtP}xVhLXKO99FG-9)CRwTN$I0dAvXNsbmX?OR zF8yl>A#uWl)ijKDaA9lyol(#SEH`f=_{EW|sE$yb){cmIHOKs0OahAcEuuJz-jI{9 zFE9x}O8Sm#6hBGCy*V3bGRMMc7fcKYV1-$y8Qwwg>1Fz2`V#=c1bH7{|K7}sz3)CB zPk-Ev)N+sGfnb=KADEvPYhHXYTh%k8+3(%L`AT-+bO5jK$Wm4qd~de|xd#D)BC>(F zH_$6mP>x;j*l|bs=(^!`zgbB4M!&0kaT|g})mCW+aDKYuTT zbr;irQ!IHb8RZ#6^Fmshi1HS5d2|%!pA6VDFFjTg^Z8EfZ}!jW8qr$|drzfiRz40h4gaaEBqBX?V?ec`4`<5209GzxUY5z8x*Ce!6epQBhg?jhW2J?nFp?<+o+1=m!SE`>c%~8%@wYDOHM@!~7&*$+ zor$*V>v;}{sR6T$=5;Zh&rjF5AMeMrhm&`=(zFJ4l%~AgMB_O~-!u_n&l9`a^Z+zj znO#i~ME3*>?42@_ms-%>&Z&;l9A1fg`9#VzmcFB%Arx0`ZcE|xa$KUAm0gK~X(omd zJUe6K=?9j3!Yh7bN|l_pheXlgB);L@^K|2?mL2bd+A(k<+QNR;|Bx?=H_FD^gS*%2 ztr@DdVT0>1H;DzeHM$tFvCR`9Wp?R5vUEa{R!WB_|9rV220GIQ$fukTZBswuzl!1-H5r=SC3=_r{Vw zGl@OcNy|N0&90#);Z_|!P*KvnkhJg5bW_!T?0#Ej`jO=}7kIy#MuSjS&Z(taSoJ%H z_#-HgtxFNc(CK9+F=e=AbjHTSIm$zg*a{{<@o8hh_|=kUXvW75;kOO99hX58zhN+~-t3 zWqpX0cDxNV&6>_$7JH*TV6uT-nLJWy4A=@-CcGqU{?@iqzWbdYdq$6qV=aw(D8`rS zs12lTd1Ejn?-kNJ$}~l;;~0ngs6(P#eBhi>)AGIIx$@5HuZ*aGuO=YC)CfuB)|3mJ z)3&UwCfEh&`%ZeI8tXO+_?&~q2bkXI8`qWy+lR3QrlFXZPD-EqjSB%etzuB^Qs&r( zeFhU4NP|SA0~4}qE#cmNm2zPlx<#`x(@!+?xwZP$`z_sxuo^(uSZ^iVhW=uM-y6f2kAEhR6jR&nyE-7}LajUC z=}qdFcYMLvB=`%lQpJN^`Fi)a_R&fmx276ny8UyhD^{uooePFz`7Ow8iPJ+(ua-^o z@K+i=-@y|xjBwVkWNnTM|E0l`nVsk?saDLj>c8U(nlPT}kI@>`4)|`XS(1qsWLu0| zT@G8a8t{=Trn@MgMa5}=kD9_h`~#S0mxE%}^uwfB`7Gpiy{(pn%{j!|@XN z==wy(@HkP~v4hR?@h(<(^dhBST%`>;F@oP(wNj@lRr>T~Z-SnA_tegUm2tEVCE)FkV$gJ*C(VUY`;Vj3 z*X#5PM-5T%4*mlVIZFi5oEJ05JZO4iwCV6Gv))9I`!ut!c)j-gKjF!FF=YM>cH(jx95$hdeC`c(g#>{N7XARpML;EZzpTr&v(X~uIgMRJpRIu{EF z4#?0D@nRy^CGK>;a|}=-S+y5&-hFI5ix;Gw4PGSP)Dp3IX=7|F@dfs?^ojR`75mq; z#K9t*m41-nx61VZ`B_5D9-rLk;}T1I{*)r(kwOm!U3bLmIDEG-m@SS|^2k7a*N;sW zuc`aZ{+JNL_$$3G z4hflI;tmlMp+P5UX$$YM9x*o2n0Efct_+JmIbmwE{*`emMsc$z=W$sBBdeyU;y-ja zuAKPeQj><%SNk3F0P|>#7UX=fCB@?wf`{Wh3!zGfi*Gh-mu~Ben&wcygebMW{5yUD zG&OhDWfaV9*xXe-Z-2~V!sij@K6rpjZ?a;g==~;5*XI3867A)n%0oA{7#C73q{s7* zhVk7m&eN9#XU@^?d&7^>*0X<2N4BR=5YA#ui6@%lyaA@J;yERC6|6Qk#J?NDB+Uo zY(=#weJ-JFY7{t0+ybtxR}VvQW5xDb+_1(jKKtrPX8B3Dfhh4$U%QrP-qOEmjgEx8 z0J3>G*ruO=>JS$4pw8a@fVmb*8n+k;s#w$@b&l`io-ADaI)%w^syEE6*YVA|p9`mn z8PYJXN+Ore5J*L%63fqYAxZExY@)cV;OsY{qUrEsHaNSqQ{yrSK~F)ROm{$dtPKdf zgUsx&Y*V-{(M!~YcH$BA;gd%g34lbwHoJv4ZT1p$zA%Q%r3p!5`8C*KiZFnQ*IN2{ zOyGoOufOS%SwL~gjXI-ftlEvI6Ga)rr`*=FWYDC3=VI$ssceP7;z%o&C4&;RRTq%K zGr#CV;j2b%@vRI%c*?=V1SGU^C{3B{oQJt_TjD51MArZY{Y!SQ&=#9({Sayd%W!&D z!h{)CyUvFv6-c9Y#*uoXYikP*}Ik>?k;0nYFIO!`>+prjZr8CuUjQ}+0N4xZJ#zO7)tJt zXd^1rG3Vu%0PA!!*3nVWV=WIv`@=*KsMdfqRwCm9-4q~9eN9L>&|*4HXhyrixkN>H zTJ?Q1#f7jA8Pu7sJ_H`&aq2PaOY+h@Ud9Pykd8*qMgBT=qeJ&~8hlo6|7dh!LR^Cj zxh;Ae0Tdx%F_#<~8aT30UwWv!*8c^oA*KbYP^?MjGRaqJMGCf*kvR?4UYPy)wLp`~ z&A4e#mPzGmc*8_1*RDyKQ!~IO6qWY5!UaI5ad&Y7)6-`obSnRKy?H~O5|ZQf@Q~N? zMac0{YDPiXsu14JUvs*h68gKfVF!|S@s5K4FE1EJxnR+7r$q!7=Ah1jd zG->>-gh9k~Sm=rO?qb&z7+?;e1V$~>n7jfV)WzL4%!)&jat{w9a}HKYEW^-H#)e88De03t8{jrTGdFyLB|)l?xIQp6FS)zubhOS)p#vRP zm?AUGBkIv`q>(}L5y4z;`o+yIhd?TRJiMF$J(SP|lc*BAq}2R$w5xfHw{>kQx1`Mq z1W4LD&kzu;l1%WaB`dKe*p{e`{x(lYDt})5xTR=|UBeTDlE+x1&3B!KPVA@EuMVuB zgj2JpPM9sxq7Z#q)5ySdd4WV_}i?j*B!7)xHtaM&wWpZ6oY8 zR_2T8F4>TRmUsUdLy9mWG%@>}5tsA}TI6O-b91`k3MmlIQ7TgQB*xh{OXwsr7$`x? ztmfT3|a&fdd1eLjmiyyL_{p)DQK7N;js*4_I6Hqbj0Vx}*i06DCFubv$eWB<- zm7hE}no3XHbE%!6pSd84n(GdY$RMiA-h8(Kdx6xNH#MTH*5mAnW7El2q_aQS6Rt84 z@@zYIVy#7n2YJWPj*KoxJ9i1KYEkJXVuHjyv66nkypi}>$}jZF+UQl#VamEqDCx?+{$J`a(6ZU%I!+(_v zaB5Uu-GlW}42X;yY5u2wfY-w+NmmHHyUVntj>~T>;y6X7MJ&IIUEZ(m79o~0e*j(g z20JgHopO?=k*mEELC<;V(-LWUnE zm#Gee=tomm6>JtS`?3y=pGQ9_hmlp$mZpf$w#6SSX7Wk8@f?`)i?Y0v?n*62)$)@F zE{6G8gtF;uU!k3A~zWIJBBoD?Y6RLCjzd6>3}YHU}m=oZnqa3 zxyuEDsrdHLthy-h3@0?@JLXOcMJg91)2bJ`Ag4-j~YJclU&F3FW$#CC1nJN*)sh_Szhzk9>Y_I^L#ALPx&9|MIF&!>JKs6 z&-yiH3OF9aB``WrA&+0rh(^9LDZ_0I!rwRMwYqGJ4KIr%c9~*&t1vMzos1HD1NR2E z4GN$m8(+yLN!#V$wQt$`u_F;Bm$k%xt;l6+V3jM~s+ysvxQAi8pR0_1(FJCJ8BC^4 ze>=s%`;AawLu*z3Fi_4TB+?N%mS$hA5QyymdvPd)nY=(8&q@dCYs9ZcS_L_T7M`<(AdDW9BlZDFqJiLllcR$hTp9b}r|qn%mR zwqaXYmf|4@lwIg+r%DNzOxkzX%e?s0e?}O=N+io(<%uZsXrN!;dPM0YoJSJO!Oh}E zh$YN?Xh)UVgus%4p}#^rvEgiQ>A)|p$uE1HabG*}cRsozCFb_wMDP0T;>Nf;u6Prr z_z5T4ny*g3tYT~*Tr(nrh-$=nN#lL8I^rBaH@WJ04tWGxZ$5sgwfZae$X1+!C_#T@ zh70!$HqX;1YAkj6Jm)r3@A9D*S&Reagx7+ia}FB@*{1g#oGO%tU>R*Iem1W>0@iRA zHwnS$f3wR9K6s~2d{Lkh@tCZ)4X9Z?OM+>=i^ez)Ty&xmoc13{WYJ!fxP8YHUIx5g zbqoCOEN9V7pM*T@asTe|w_d7ik}kC;!^ziGkqgf<>X6IzUi?V8ZH1(pfh8^``Dg1O z*k~VpyFx@<^a2FEseK0k<3Pm$Y8Am8)yn$W_Ip}^uj{w`h0X;;mqO9vhi-UHM{$vM zac;cNHbr1*N6tntw5C3$xjM`W8MH6XdkS+16_keFPX?8tN4)KaI_S0~1}#H(XrWZ4 zTz{FPLDgSk>5_x}-LFq7Z@Rn+Kso@Z2jxO3*J5cseB6I&8EJNF#~>)#w}J0oBQEEPdJ0+ z>V+3zE~ckGVuHLv@PF5bTY1QXh&COVSOOHM0N50okLQ<5L}DBs+|f^);u z*{|~gpv3nRU=9dZJzff6zDTouEpt{b!t}l+om4oF<{o^!!ALh@8V(K-j&m4qqcfrO zY_H_*ZpjJ!mLmwoTw`x-AL1d{ow;pSY1WE!xBX1L!ZbOMW<%R9YkmWlrs&R-5BZfh zi&Ia3Q?@^7u&-h9dbzO;w{WD4bRZd zvi9J`v;ft+)knFx$sA1Qvc1v!7M2=g$7=HY>8UttRz6N=8spkLgsJF&afhnTP3q(2 z*JLoT>*e)gv=vRgR%MFjRED43a1+wT$8#&UPf~07_%e&{AgezHuv88#-~Z0VS8t%2kU%RoQ_Y zSE##lKDBx!we3^L8_OP@jcKONZchoVj8kEqlh4SGbRp#`;AB|^vyZZ-ks6VXr}b<& zj zJONWQ?G90&#c6SoLcAtC|MXi`?@zNm9My^eujfPg{EpMvuQ~LQ@V&fLo#BEN7|tlW zM)lrgOO!|`MN)NL$i(Y}6uiZ8?^Yz2)M z11xDWO?z3of$JW2G($=SVK~#@L00J!dliRevpU^8>)K;EzdCn=wM#n$ zV-$rVW;P;h`9taLJ5YN@sJM+|G1DB&<+kXIiL>n9)6T914b4Zj^L_ud^%5y~NyCrlwAAolA*GB>#9u7Ez_yd4@c9SsP&B9Wl1kX_^dC-BLP7!fm# zB7EK1W&OSXV-~2{@y%`3pN(NEhr2%;ccARwQm#4ebdAc$y_yy@6hvyy8MX~|^tTNAdQp`b>gyPE?)oND#0;;nx}4Gk(M+qla7MMjeP!^b*4l5NwH z{b-$VW}1a${aIK_-?PezfBbe)RAjl1VLND^_wQ^q8dhMg!(}U57YAnDW4(2i_S%Bf zhBguZ&nwDLT0j*cZnTMjR8lFDp%dc>Ri^ZEhvhv@O=? zI+PcHQ!IB~DMto~+A?bg${PEvgVMZNw5mC>(f9Qg&Wux6DId0ukQ)J-iMJ$wPld>b zPfK>VSEs>7$XZL#1k}&Sfg8UG;2PdcV(hE@HS{zJKr^FA0x#RBH42{VZ0QN#rtvtQbI__1v*kS1q7XYa&~rkh~2X_?RglpA_W2CL2th=8PC;#aZ2f$lsZmNxLW_Mx%hgy4Yi) zyxDL_=d>)yAPb%0&bdUhX#~LWnrqXwvtXTr^H2nWiyUF@s)N1SQSqQy9RO{ULGztN zbD2v+Y{p*R?I|HM`4Q$YhSP_C|>` z6x7Ewf8!r6A=uWe!o$*=44uk`-)jB1=cz~m2hZvwc^1jVfvwNeBbdZ5Pj_e{>fxmi zVULdZsG$}#CR5EDlDa~AiX?2QP2)7eLnF}f_C-~ExEGi%NAQU+X5-5fM+ML3k2}D` zw=iMeqaS(b+k=q|&uQjtERKhkd-^~4P3A`BAF_gZ@pG!k+j#g%(AY`_ne zb)g%T>u`@J&nlgnVs|&Bo}!#kRIfah!v5}Q%LV4o7#7Ztxu)!(Me+R0j?DUTo`!Ok zeBn(E&$v3Wp(*#f@a3Kx;!&dRGjaD3yDqD&`TK+kc!8&;(*WUuiTGn#uOn&t^EjZ{ zpH|mZxK{*$fygkK@xFY;Q`6p~g(bi5>xbtCF;eX8>({*9rXMSB!OGSHA*dv#82ZD` zgTK7d*bcP%Wy0W`flh`GK0#I2JoYJo&6^x=5HWwN!51rg1^yWt#@y%&a#8Q@!_ASA zQAMITvjWcYHw(i{^S9!Y6b*+2l9QkQQ@%0Dy0s;$PKwRJ9o8;QsK~M zQg9Qej6RdjZyE*Ve1S?~5wpKKC=hcmwlgB&4ay*R4Lc9;!6v+xtIn1ux=;59$xu= zK-;OqR6B-F!H>)&4o6@yCsr2FN@uiV3Zz*dH1gbbv}9ea17%Y!td@0YKc-F3k_HqL z4-j(@wD;!j%yWb@{iy?e7OJ(K*#G6f3)~FYT9xS&FX;nN9ycb4D!U#7dddtojT|;x z{fowwMf|GPO3l6Kb7xkO8n!2#hY4eIqJ*C}ZTQY*I9rwEyLf9T<-YdHpmvnk=*2`8 zTO+ADv7dij9bpDw$}dp+UdUItgHBoYsPt4&%7}Vj4SH~+pyV-OFX2d_k!ye1pV-_}>B9{}|c-Z~jkQR#gE8_J97r{kJOrT~fyX GQU4FrpuqJ2 literal 0 HcmV?d00001 diff --git a/dist/workshop-promote-brainstorm.skill b/dist/workshop-promote-brainstorm.skill deleted file mode 100644 index 42d5cab7cac126ded670036e7185174472d6f927..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9442 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 diff --git a/skills/workshop-promote-brainstorm/SKILL.md b/skills/mappa-brainstorm-promote/SKILL.md similarity index 76% rename from skills/workshop-promote-brainstorm/SKILL.md rename to skills/mappa-brainstorm-promote/SKILL.md index d7cc3a3..75eab5c 100644 --- a/skills/workshop-promote-brainstorm/SKILL.md +++ b/skills/mappa-brainstorm-promote/SKILL.md @@ -1,21 +1,23 @@ --- -name: workshop-promote-brainstorm +name: mappa-brainstorm-promote author: ours -version: 1.1.0 +version: 1.2.0 description: > Finalize a matured brainstorm buffer on the boss's desk (~/projects/.workshop/.brainstorm/): ask routing (workshop-meta → local - .wiki/concepts/, domain → target project wiki via knowledge_ingest, skill → - claude-skills skeleton), extract action-items into target .tasks, create - pointers + review umbrella for impl tasks, archive the buffer. - Location-agnostic: fires from ANY folder; all paths resolve to - ~/projects/.workshop/ regardless of CWD. Triggers (user): «промоутни - брейнсторм», «finalize », «выкати в вики», «promote ». + .wiki/concepts/, domain → target project wiki via knowledge_ingest, + mappa-service → mappa-борд под лизом, skill → claude-skills skeleton), + extract action-items into target .tasks, create pointers + review umbrella + for impl tasks, archive the buffer. Старое имя — триггер-синоним: + workshop-promote-brainstorm. Location-agnostic: fires from ANY folder; all + paths resolve to ~/projects/.workshop/ regardless of CWD. Triggers (user): + «промоутни брейнсторм», «finalize », «выкати в вики», «promote + ». --- -# workshop-promote-brainstorm +# mappa-brainstorm-promote -Финализирует созревший брейнсторм-буфер на столе босса (`~/projects/.workshop/`). Три ветки маршрутизации: +Финализирует созревший брейнсторм-буфер на столе босса (`~/projects/.workshop/`). Четыре ветки маршрутизации: > **Location-agnostic.** Скил триггерится из любой папки — босс-штормы > происходят где угодно, запись живёт на столе. Все относительные пути ниже @@ -25,6 +27,7 @@ description: > - **workshop-meta** → локальный `.wiki/concepts/` (методология самой зоны). - **domain** → глобал через `mcp__projects-meta__knowledge_ingest` в `~/projects//.wiki/`. +- **mappa-service** → сервисные борды (mappa, .common, …): таски/вики-сущности через `mcp__mappa__task_create`/`wiki_create` **под лизом** (`task_claim_next`); pointers-таска НЕ нужна, если спека уже в вики проекта (w:NNNN); review-umbrella — сервисная таска; covering-письмо в инбокс цели. - **skill** → `~/projects/claude-skills/skills//SKILL.md` (только шапка + пустой каркас тела, локальный коммит без push/install/build-hermes). Буфер уезжает в `.archive/`. Action-items уходят тасками в target-проект. **Всегда, при любом маршруте, в воркшоп-вики остаётся summary-страница.** @@ -53,35 +56,43 @@ description: > │ ▼ ▼ │ ask: target proj ask: + check │ │ ~/projects/claude-skills/ - │ ▼ skills// NOT exists - │ knowledge_ingest │ - │ │ ▼ - │ │ dialog: description (trigger contract) - │ │ │ - │ │ ▼ - │ │ preview + confirm - │ │ │ - │ │ ▼ - ▼ │ mkdir + Write SKILL.md -write to │ (header + empty 6-section skeleton) -.wiki/concepts │ │ - │ │ ▼ - │ │ git add + commit in claude-skills/ - │ │ (local, no push, no install.sh, no build-hermes) - │ │ │ - └──────────────┴──────────────┘ + │ ┌─────┴─────┐ skills// NOT exists + │ ▼ ▼ │ + │ file channel service channel │ + │ (.tasks/) (mappa-борд) │ + │ │ │ │ + │ ▼ ▼ ▼ + │ knowledge_ingest mcp__mappa__wiki_create dialog: description (trigger contract) + │ │ (под лизом) │ + │ │ │ ▼ + │ │ │ preview + confirm + │ │ │ │ + │ │ │ ▼ + │ │ │ mkdir + Write SKILL.md + │ │ │ (header + empty 6-section skeleton) + │ │ │ │ + │ │ │ ▼ + │ │ │ git add + commit in claude-skills/ + │ │ │ (local, no push, no install.sh, no build-hermes) + │ │ │ │ + └────────┴───────────┴─────────────────┘ │ ▼ parse action-items + (for skill: prepend 3 baselines) │ ▼ - for each: mcp__projects-meta__tasks_create + for each: tasks_create (ПОСЛЕДОВАТЕЛЬНО, не батчем) + [file: mcp__projects-meta__tasks_create | service: mcp__mappa__task_create] │ ▼ if domain && N≥1: tasks_create [-review] (blocked-by impl) + if service: review-umbrella — сервисная таска (blocked, blocker=impl#) if skill: tasks_create [-review] (blocked-by impl, behavioral smoke-test) │ ▼ + covering-письмо в инбокс цели (оба канала; канон mappa-delegation) + │ + ▼ Write .wiki/concepts/.md ← ВСЕГДА, любой маршрут (summary: решения, куда промочено, задачи, ссылки) │ @@ -104,18 +115,27 @@ write to │ (header + empty 6-section skeleton) 3. **Если domain:** - Спросить целевой проект (имя папки в `~/projects/`). - Валидация: вызвать `mcp__projects-meta__meta_status`, убедиться что проект известен; иначе — abort с сообщением «зарегистрируй проект через setup-projects-meta». + - **Определить канал борда:** есть ли у проекта файловая доска `.tasks/STATUS.md` (file channel) или борд живёт в mappa-сущностях (service channel — сервисные проекты: mappa, .common, …). Проверка: файл `.tasks/STATUS.md` в чек-ауте (file) против `mcp__mappa__task_list(project=)` / `entity_search` (service). Если файловой доски нет, а mappa-сущности есть → **service channel**. -4. **Если skill:** +4. **Если domain + service channel (mappa-борд, fold-in 1):** + - **Лиз:** `mcp__mappa__task_claim_next(project=, owner=<своя>)` → `token`. + - **Спека → вики-сущность:** `mcp__mappa__wiki_create(project, slug, body, claim_token)` (или `wiki_update`, если страница уже есть). Если спека уже в вики проекта (w:NNNN) — не дублировать, описание импл-тасок ссылается на неё. + - **Pointers-таска НЕ нужна**, если спека уже в вики проекта — дыра pointers закрыта инлайн (описание импл-тасок прямо ссылается на спеку). + - **Импл-таски:** `mcp__mappa__task_create(project, slug, title, description, status='ready', claim_token)` — **ПОСЛЕДОВАТЕЛЬНО, не батчем** (см. NB в шаге 7). + - **Review-umbrella:** сервисная таска `mcp__mappa__task_create(status='blocked', blocker=<номера импл-тасок>)`. + - **Covering-письмо:** `mcp__mappa__inbox_send(project=, from=<своя>, subject='Промоушен : таски <#N>…', body=<перечень>).` — канон mappa-delegation: таска на борде не пингует живую сессию. + +5. **Если skill:** - Спросить `` нового скила (если не указан) — валидный slug (`[a-z0-9-]+`). - Валидация: `~/projects/claude-skills/skills//` НЕ должна существовать. Если существует — **abort** с сообщением «скил `` уже существует, обновляйся обычным маршрутом в `claude-skills/`, этот скил не для апдейтов». - Валидация: `~/projects/claude-skills/` сам репозиторий существует. Если нет — abort с сообщением «клонируй claude-skills/ через update-claude-skills или вручную». -5. **Парсинг action-items:** +6. **Парсинг action-items:** - regex по строкам вида `- [ ] ...`, `- [ ]`, секции после `## Следующие шаги`/`## TODO`/`## Next steps`/`## Action items`. - Показать список, дать редактировать/удалять/добавлять. - Если 0 action-items — продолжить, не блокировать. -6. **Промоушен контента:** +7. **Промоушен контента:** - **workshop-meta:** `Write` → `.wiki/concepts/.md` с frontmatter: @@ -204,7 +224,9 @@ write to │ (header + empty 6-section skeleton) **Проход второй** — пользователь явно зовёт «доведём ``» в этой же или следующей сессии. Источник лежит в `.archive/-.md`, тело каркаса дописывается глазами. Вне scope этого скила. -7. **Создание тасок:** +8. **Создание тасок:** + + > **NB (2026-08-24, инцидент mappa-skill-suite):** таски создавать **ПОСЛЕДОВАТЕЛЬНО**, не батчем и не параллельно. Параллельный `tasks_create` → гонка на sha-CAS общего счётчика (agenda-репо): часть тасок падает с PushRejected (при промоуте mappa-skill-suite 6/7 упали, повторены последовательно). Один `tasks_create` → дождаться ответа → следующий. - **domain (mandatory pre-impl) — `[-pointers]`:** **первой** создать таску, заполняющую `.wiki/CLAUDE.md` Domain conventions у target-проекта пойнтерами на спецификацию. Без неё импл-таски будут подняты со stub'ом в Domain conventions, и следующий агент попадёт в дыру: dense `where_stopped` one-liner + пустой stub = угадывание порогов / таксономий / pipeline-этапов. Параметры: @@ -276,9 +298,9 @@ write to │ (header + empty 6-section skeleton) Плюс content-таски из самого буфера (если были) — также в `project: claude-skills`, slug-prefix `-`. - Если N-я таска упала — продолжить остальные, в конце сообщить какие созданы / какие нет. - - Запомнить slug'и созданных импл-тасок для шага 8. + - Запомнить slug'и созданных импл-тасок для шага 9. -8. **Review-чекпоинт.** Создаётся всегда для skill-промоушена; для domain-промоушена — только если N≥1 импл-тасок; для workshop-meta или N=0 (domain) — skip с пометкой в логе. +9. **Review-чекпоинт.** Создаётся всегда для skill-промоушена; для domain-промоушена — только если N≥1 импл-тасок; для workshop-meta или N=0 (domain) — skip с пометкой в логе. - **domain (N≥1):** - `mcp__projects-meta__tasks_create`: @@ -296,7 +318,7 @@ write to │ (header + empty 6-section skeleton) **Спецификация:** <путь к промоушенному design-документу — concepts/.md в target-wiki>. **Pre-impl bootstrap:** `-pointers` (заполнил `.wiki/CLAUDE.md` Domain conventions — без него review бы читал stub). - **Импл-таски (review против их acceptance criteria):** <номера #n из шага 7, слаги в скобках>. + **Импл-таски (review против их acceptance criteria):** <номера #n из шага 9, слаги в скобках>. **Кто делает:** **не имплементер.** Следующая сессия в этом проекте (другая модель / другой день / другой агент) поднимает таску с чистым контекстом. «Я только что это написал» bias = главный риск. @@ -315,7 +337,7 @@ write to │ (header + empty 6-section skeleton) - `target_project: claude-skills` - `slug: -review` - `status: blocked` - - `blocker:` `«impl-tasks: -install, -hermes-mapping, -test-trigger[, content-impls если были]»` — номера `#n` из шага 7 (слаги в скобках для читаемости). + - `blocker:` `«impl-tasks: -install, -hermes-mapping, -test-trigger[, content-impls если были]»` — номера `#n` из шага 9 (слаги в скобках для читаемости). - `description:` шаблон ниже. - `next_action:` «Дождаться 🟢 у baseline-тасок. Прогнать поведенческий smoke-test (см. чек-лист в description). Findings → follow-up tasks через `tasks_create`.» @@ -325,7 +347,7 @@ write to │ (header + empty 6-section skeleton) Skill-review checkpoint для (промоушен ). **Источник дизайна:** .workshop/.archive/-.md. - **Импл-таски:** -install, -hermes-mapping, -test-trigger[, content-impls] — номера #n из шага 7. + **Импл-таски:** -install, -hermes-mapping, -test-trigger[, content-impls] — номера #n из шага 9. **Кто делает:** **не имплементер.** Другая сессия / другой день / другой агент. Identity-not-location: ревьюер работает в любой папке, где есть доступ к файлам (см. `.workshop/.wiki/concepts/workshop-architecture.md` §5.1). @@ -343,9 +365,13 @@ write to │ (header + empty 6-section skeleton) **NB по семверу:** `version: 0.1.0` записан промоутером. Дальнейшие инкременты — ответственность владельца `claude-skills/`, **не** этого скила и не ревьюера. Если ревью требует правок — правит владелец, бампит он же. ``` - - Если `tasks_create` review-таски упала — сообщить пользователю, **продолжить** к шагу 9 (архивация буфера). Review-таску можно создать вручную позже из `.archive/-.md`. + - Если `tasks_create` review-таски упала — сообщить пользователю, **продолжить** к шагу 11 (архивация буфера). Review-таску можно создать вручную позже из `.archive/-.md`. -9. **Workshop-wiki summary (обязательно для всех маршрутов):** + - **domain (service channel):** review-umbrella — **сервисная таска**: `mcp__mappa__task_create(project=, slug=-review, status='blocked', blocker=<номера импл-тасок через запятую>, description=<шаблон domain выше, спека = w:NNNN в вики проекта>, claim_token)` под тем же лизом. Pointers-таска отсутствует (спека в вики). + + **Covering-письмо в инбокс цели (оба канала; канон mappa-delegation).** После создания тасок — `inbox_send` получателю-проекту: таска на борде не пингует живую сессию, письмо = пинг + контекст. File channel: `mcp__mappa__inbox_send(project=, from=<своя>, subject='[event: created] тасок', body=<перечень: #N slug> )`. Service channel: то же, но `from` = своя папка (или сервисный адрес) и тело ссылается на w:NNNN-спеку. + +10. **Workshop-wiki summary (обязательно для всех маршрутов):** `Write` → `.wiki/concepts/.md` с frontmatter: @@ -370,7 +396,7 @@ write to │ (header + empty 6-section skeleton) Если `Write` упал → сообщить, **не блокировать** архивацию (summary менее критична чем content-промоушен). -10. **Архивация:** +11. **Архивация:** ```bash git -C ~/projects/.workshop mv .brainstorm/.md .archive/-.md @@ -378,7 +404,7 @@ write to │ (header + empty 6-section skeleton) **Только** если шаги 6 и 7 прошли (или прошли с допустимым partial — пользователь подтвердил). Иначе — оставить буфер на месте, чтобы можно было ретраиить. -11. **Лог:** дописать в `.wiki/log.md`: +12. **Лог:** дописать в `.wiki/log.md`: ``` promoted [created N tasks in ] @@ -386,7 +412,7 @@ write to │ (header + empty 6-section skeleton) Для skill — `` = `claude-skills/skills//SKILL.md (skeleton)`. -12. **Финальный отчёт пользователю:** +13. **Финальный отчёт пользователю:** - Куда промочено (полный путь). - Какие таски созданы (id, title, проект). - Куда уехал исходник. @@ -398,6 +424,9 @@ write to │ (header + empty 6-section skeleton) - `mcp__projects-meta` недоступен → abort до записей. - Целевой проект (для domain) не найден в `meta_status` → abort. - `knowledge_ingest` упал → abort до `tasks_create` и `git mv`. Буфер остаётся. +- **Service channel:** лиз занят (422 busy от `task_claim_next`) → abort или retry после освобождения; не писать без лиза. +- **Service channel:** `task_create` упал (гонка счётчика/переходный период) → **повторить последовательно**, не батчем; при стабильном отказе — abort до архивации. +- **Service channel:** спека уже существует в вики проекта (w:NNNN) → не дублировать `wiki_create`, ссылаться на неё. - **domain:** `tasks_create` для `[-pointers]` упал → **abort** до content-тасок и до review-таски. Без pointers оставшиеся таски бесполезны (агент будет угадывать). Сообщить пользователю; буфер оставить на месте для retry. - `tasks_create` упал на N-й content-таске → продолжить остальные. Сообщить partial. **Не делать** `git mv` без подтверждения пользователя. - `tasks_create` упал на review-таске (шаг 8) → не блокировать; перейти к архивации, сообщить пользователю чтобы создал вручную из `.archive/`. @@ -411,6 +440,7 @@ write to │ (header + empty 6-section skeleton) - **Всегда (любой маршрут):** создаёт summary-страницу `.wiki/concepts/.md` в `.workshop/` + добавляет строку в `index.md`. - **workshop-meta:** summary IS контент (шаг 6 записывает полное тело; шаг 9 дополняет секцию «задачи/ссылки» или пропускается если уже полный). - **domain:** создаёт запись в target-wiki через MCP (`mcp__projects-meta__knowledge_ingest`). +- **domain (service channel):** создаёт спека-сущность в вики mappa-проекта (`mcp__mappa__wiki_create` под лизом); импл-таски + review-umbrella — сервисные таски (`mcp__mappa__task_create` под лизом); covering-письмо в инбокс цели (`inbox_send`). Pointers-таска НЕ создаётся (спека уже в вики). - **domain:** создаёт также **mandatory pre-impl** таску `[-pointers]` в target — pre-filled блок текста для `.wiki/CLAUDE.md` Domain conventions (ссылки на global wiki slug + workshop archive trace + local overview.md). Без неё последующий импл-агент попадает в дыру: where_stopped one-liner + пустой Domain conventions stub. - **skill:** создаёт `~/projects/claude-skills/skills//SKILL.md` — **только шапка + пустой каркас**. Локальный коммит в `claude-skills/`. **Без** установки, push, или build-hermes — это всё в созданных baseline-тасках. - Создаёт N тасок в target `.tasks/` через MCP. @@ -421,7 +451,7 @@ write to │ (header + empty 6-section skeleton) ## What NOT to do -- Не писать доменное содержимое в локальный `.wiki/concepts/` (правило #1 из `.workshop/CLAUDE.md`). Summary-страница шага 9 — это trace/навигация, не domain-контент. +- Не писать доменное содержимое в локальный `.wiki/concepts/` (правило #1 из `.workshop/CLAUDE.md`). Summary-страница шага 11 — это trace/навигация, не domain-контент. - Не пропускать шаг 9 (workshop-wiki summary) — именно так следующая сессия узнаёт что буфер был и куда ушёл. - Не делать `git mv` буфера до успеха promotion+tasks. - Не удалять буфер вместо `git mv` — теряется история. @@ -430,3 +460,6 @@ write to │ (header + empty 6-section skeleton) - **Skill:** не бампить `version` после первой записи (это работа владельца `claude-skills/`). - **Skill:** не промоутить в существующий скил (см. Failure modes — abort). - **Skill:** не пропускать обязательный preview + confirm перед `Write` — действие выходит за пределы мастерской, изменяет соседний репозиторий. +- **Service channel:** не писать в mappa-борд без лиза (422 busy); не батчить `task_create` (гонка sha-CAS счётчика, инцидент 2026-08-24: 6/7 упали) — только последовательно. +- **Service channel:** не плодить pointers-таску, если спека уже в вики проекта (w:NNNN) — описание импл-тасок ссылается на неё инлайн. +- **Service channel:** не забывать covering-письмо в инбокс цели — таска на борде не пингует живую сессию.