From 70af4cd9310dd1f3d5d44352c751840e81c0ad52 Mon Sep 17 00:00:00 2001 From: Luong NGUYEN Date: Sat, 8 Nov 2025 02:24:10 +0100 Subject: [PATCH] docs: Add push-all slash command documentation and screenshot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add comprehensive push-all command documentation - Include PR slash command screenshot - Update .gitignore configuration - Update slash commands README 🤖 Generated with Claude Code Co-Authored-By: Claude --- .gitignore | 2 + 01-slash-commands/README.md | 3 + 01-slash-commands/pr-slash-command.png | Bin 0 -> 34051 bytes 01-slash-commands/push-all.md | 473 +++++++++++++++++++++++++ 4 files changed, 478 insertions(+) create mode 100644 01-slash-commands/pr-slash-command.png create mode 100644 01-slash-commands/push-all.md diff --git a/.gitignore b/.gitignore index a2fcc2e..a8c8997 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,5 @@ yarn-error.log* # Temporary files *.tmp *.temp +# Keep .claude/ clean for hand-on section +.claude/ \ No newline at end of file diff --git a/01-slash-commands/README.md b/01-slash-commands/README.md index 98caac8..c6ad692 100644 --- a/01-slash-commands/README.md +++ b/01-slash-commands/README.md @@ -91,6 +91,9 @@ Guides you through PR preparation checklist including linting, testing, and comm - Creating conventional commit messages - Generating PR summary +**Screenshot** +![/pr](pr-slash-command.png) + ### 3. `/generate-api-docs` - API Documentation Generator Generates comprehensive API documentation from source code. diff --git a/01-slash-commands/pr-slash-command.png b/01-slash-commands/pr-slash-command.png new file mode 100644 index 0000000000000000000000000000000000000000..789e5c278312699a754382612f99ce03fa89c0c4 GIT binary patch literal 34051 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ÊK8=3;om;ZmBqgfYs#Fx4gB}8JhBO!^N3FcjaflC@l_5U8o@K=2+AW zb}zY4sY>}v`P_bmvFXYyg;MsBM~`4JhU`#0H2e)FgIsVR4j)hz6v0#&)`rW<7p!2k zwA3adx_vaO&DcA#y@`9e9YZB6h^l!uNZCXw`M4$qN?}5Sa|uX9J-|)d zeSTs1LR+J9cXy(Rkh(TP#x!nslXtqfHE|CWS>>^r9rC#W$@BIr>u`#hAHAQ6rm)9I zo0I)%w8Os_Nwb5b)(6s z%Y%Bjf-b}Uqzq7p%|(G>To+|4A*E~vt6Ft%a`RZ7{M*&mOBZ{S{5Y<!Il44u>E}x$d}jR z(xd)ID`Nl^*dRgQtw+lOFaUsZr}jPn{6DL`A7WmAU`%2L$w%AdDUuZjFntRV$ru0W zMHmszEsB^rovw34eYYf*=YzNL{W&32lI}TAdsdpkxAoz?vZ-*+-9Tat19@;Zxm!Q z5l>J2v2sh~&Ch?n3&09dXag*hxV+P>y$neJtK3ZRpn=Y|L$J6|I)YGt?6RGdIUUJy zx*h(Ki~GNZks$!eyZREZlu{B!Q#skxs`kBL(P=*Q$c&T$40yN0rG{D;Y8>2-uI?=S z9MJYCrg$HDe`k*biR4}_MBKisHWmh*73+S$mCwsl zp#+BP7@X!uI{pbvquVp*C#j_kB#CQr*8QgCd(oi;g+>+__Kl(jx1sGti~M(!NdBdqMZ*?J-&ZSOHUFeJe`I*EU8c0eKV4%$nSr8slQjg8l6doy9;+E3a7Y(8K30)Oe*DUL!2ueA znb%4Dw`2LBD-MrewM+PsxWa39DUY+bY2oFwX64Iu9Aj{qU;u0wWWS=o=69$)amXC` z_MI~FKQpx#y5>eRXh}ULHYdMPQ$i~RFNCC@{#HAS&%B*B!cl0IP!{|R!@4HAWPRuz z2Ov(ajPK1^T+|v>wJKJ{BG~OI(d)Tf6#LBrQnNO)fw15+z+K7P=%-St6x@qE<2+yc zIXlEHqQ0nIz*=$DxMXA<``h>MRu1Le&MLeBT57@hO8(1ogo5$8r#xMy(YhP+MW8Bp5s%v~|{zXN@BKdr3;^ zyj5&PEA)E<`M1&#ys^JW}xPi(8IbV zzrb$qnC%V~L8j4Zivg?Yo;j9Q`>V}bPrB0)kxJPit#z}SOeLvQRGrZgl0vZ@4C!qU zQ1f(pu~)O8m>_)6;v*;)xp+|?}-?*dfNaQ2DZslJ9ZPZZ(JHWP_V>MWhi_+|Q#YeA74Hj_&cDGjmkm0oH>3WGLn z{FJi<=Q(LZDJ_=g=trwTA9-?V-KFL1$tu&D)I18~iY9JuRjZSn@S~!=T#9te18TNM+kLJP+8NDh9w1Ft zhutrPrc>OmOZ_bGGnIk8XSD;9r~vU^p%Q{{Oj#aeh?cYk;ueKa-wep z$mx%Jo|)-z|K6<1^_%9 z9v*&=XcIXa;5fC~w!;`m;V|^)jZ)3F5#n@#h_W&(%NCoE0^gJYa~yDF*&>gwNU6;G z_4U(NY)%+c6_mCD#WC z6w#Ly1BMWl4cc&ou`gf@AYkYSL>Hc_$QHWS;B_7%hef{&$-(#ZN8oXjVU@VHQh~UJ zU@2PNT!=-V(dtZcPt_QF18R_$r>`*{LX4Se+(T4&hwagP>znp>Bg`L+KBD*YTx0ls z!EHF-75Mh~(t1^tqOSyf%Ja?d*Z!~o$-fE_3C8XurvCg8`e1Qs3 zj`#*|_o6b*v%|lqT})nKj(15^53!|$0|{^uf{a_YB6P<4x+w@OKC@U%7Y!hjihm&# z5H1)BBNBR@{{bJL?O8Pb$-T;#Jr2h}?1ASXHC3?(6Yd!pk-)U9eDlNS>eE&vs!D^0 zPXV!r=qemoHuYxA<1$c@HzT))P&OvDDPe0w*c%{c#p+j&3j zDffNOug<>qwf8;}7*yCxUhk1?!O}Sz`75y5W=UsfifgNM4R(x`bA_xZ(hZMmG0YK7 z@Y6=(0b;bUm_a_+KS#;{Fce_Fzb_Kyf3#Z5yp>Z&r=O|3Nl+Eu7I`U#{v&w6M=6ZA z48X@#;(mjI=r518(9O0#cs1#|qe!bkM-g91Nh%dfnTL%o&^(doZrcj1;IaTg-OYNm zlhsxPsWY=CG(J9f3L}9Gr~7ZIVhJ2NLle?rU_*&$YlCUvBb8wp{a5 z9J;TlHZ1sJ%Q(@+^8r4f4@EK|X5DP@IwJ`$8@s4%L=_^{-Q*S*2^I&&Plj{chqeu8 zWhx#~tTwtw9M%)eUydFPzvmloel2+nxQdP_b1)FTA8+B@{&Qs^T5m{lM=)I_`&QXZ zqfsIsf(k|AhGbn+O|*{la=Jf~PAwEl&C=QJeLqN2PUE={?)~6Pk^nKJwH(XZlybMv zkPJ9Pk(Q5Lw^saN(AXmJcoK_=)|%av1ic<@*dsDIi-|&IdOr(Mfo@$ci6Wv&GEQNc9p)-r6^7pdWF4q z#M6eSSxy)iJTFaF@QYsdkQH6JTK9rJoN8&y#;AOK^e9=RJ(44O_ll2y;~N4!&SL#oI~#Xp|v4##5IBoT7fk20eOK?{Cl(#lBP z9r9nM-x*02ri33a*^2ln2cGUcU26a+drV7Y0D)$lfJsND7Pa}}95PsKkR0NyT#sw@4+M4$q22malbzNoU`D&nuCImOR^#@T!RhEk zOPViw%SPo=ru!}zN2Bc@wbZ`Yr*!@i2@}KsrfcE16O5r?yn4W}g4R)|2FZrn&lm*$ zYi<)^GfKWf{_SY0R~X<--wIKdUM)33SI`HP3<*s5;}EP_;r4?d^v?@I8TICew|-E$ zGsS6pO!hxX)tOY9%4f0IOeulPA2}`x!7r)j)38(_cNge6`PSBZ3F#G6J0M4G57(tl zDjCGuo!*+JhbtR2?XsfRmnK&^ZZow8V=H$_oV!MKD4`e24QAN_)M%~dRLHGKY#%bX zgV}5BX?LQg=?%0F!p8<3xJS9~5Hmxs2|h{e-D znj?y}I%ufaMiR>VFEMMymp{(8)EQ68&n{NmA<(}gQGz)+;E~||gMdOrhax<`8pXSU z=b=_L(TiOnpL1OmbgkBtQ?0BsMd6biJ-eYPc5I2^AR4M+saWm2!eWtMX~|g0P+03t zIfh0>l>VRv2DzDP)&KGFo+%W5l#q=|JVI%3@fUj$>-V&H=ic?;bYVj1ZU0{cBZKE!wQm{n4Vydu>Fz8bQfea>^y^ zok5wvG)4(`w65b|Yy2H!U%(|{G84d3qaTn4L6k0Vyc9)Gum4@US#tQ5uPq$kI%=jB zS+(^$PFo260wZ)heI6bG6mWxSY{-%!GF7!k1j2gyD!I&qoGua?tX?ulzZ^fbw=Y`% zxW<9u$bF8z!uVs)C=epj;KU>@zBd?2_*|8=H=WI|G$OG*G9#t&@8R)^aLJLY7)i&D)45);Ga||9;P3h13c^kScbvDOUWS zPv!-IM+EqSH+f3=LGCAl(yfZ{EW*@P&qbmHfg`ma|AjO_#V?S^`wi$-*Rt=8C0n|T zrm$h+d|eW1T%Dv|FV=erAG33+1-nZQraV?o;M$-+b`%Z)cc7f% zYN^3Z-G8;TQIdWVwO=Ap_D3{KCDJSCHbxLSTFb3mx&wqu|3prdKgkMley7fy<%iSb zO9m1v7MV_Oz>Vk1>Mf%aEkY~aQxmu3!U3PC%b@ZHW1&d~Qhlx63#5nTL^*Q@TCh5u ze07Gt=3drcwYysh&VMQ61^C*nt{zB0&H1s#;m~i73O}=-iXt431sZ_!T>y(X+2JJx zi$@2M&R*9AQdndH;12lzwJ5OP3#g$9Q(VQjx3;M-_>`K2ow)0^`(nxY!{Oi8g}L@O>oG>&&EYl zfN}YNfL|}^Pm={A6-f17)VDiBR0HFMMLQYT=U=`~IJP24M3OnU-1Ci624{$i7NT!JBq3y>=TzM}YBdt2+L%bzw^0%wstri5w9A8v(NnS`+wSfnKWT$ZT$=gvC`6o1>H@0QmFIejav=^nucK8#ZsD*mv@YR^{%2aCM z0r9uA!l?c*h|m>do9h6;T!j{T8Y#4#thJF~lkhO<5^mE2ldZzJ%Jl>T1VB-_oZl9= zG<>Hw9L}3MZd;s-Ez9S}|DPoII~eLq{v`^~&{ycQf+jKk74;r)5qxkoUk`tAJQ8Sa z7*)uaOjW^JnH3gl_zyq$(G_fK{X>k=F&4dk9-xoS@w6CEnH|_vluDxQlU3wCqAd=* z;8uy|^N%azrTa<`DD<|JUbvkvf4=985gNv(+j3j^=7D9g><-apke5s-!E7@yv;TvGo5FXkRj3-?`THO4Rs8&AuyCJ;) zsybc0`A}3(N&neWn6eOdD0OQn)~JYne=1*2_^yCNu3)*8WMm=WRm#eq_$p;B^MynR zb|Aui$7R#qK)Q1wXb$ia4ZFJMoPg-p{&)$>>2y_2GOo1d3c#1+O}UZk_3>AKGC%lG zy-V+gkm*nh9ZJWoAI8#2JwBmFrb3)iG{G*>oB-UR(6Q=luVaJ6OhNr6UGEJi!zlGssx~~%#yN+AFTV;b9Vl##$N}4w z-Ok`&iYOAnV634!C7O^Z40gI2qJZ99_r*8vYt1+xSm?BhPC~eInP11WI`%)y+FNPr zlg>cD1_({hr{LD|LW4ga@(o}|-y>_N#_W)+!+95)FBa+tsv)&n3WDqZoR%$605|jo zYUYIh`MZR_LXbAz4N)vro1^`4i*KNMA%PA-nJbx6MA|!`!AeeaopaJ4Xc5z(QYQ)&^l%;zRG$-NdQ)dEzeny`@4y&VcozgELp?%Un=d!e5QVJ{h3EN;n>>`H z*{n-ktHE65Z1rb0sTTDc(O4qEE|9xAQ`(VQl&Roe0WAC8mNfm5J_8?ikd;+OrR6BL zT9yxtMW8e^G&qOJ0{)F9nM$!F4eF1-ovF?n-1O(~`vHpi44~Z9hKER6Sj?_J-6LQG0Ng>zC7=i7KkZkO+RF>pqcu1f zUuf1tFOW+0!}Clkz;$Oe*>d{1Y82&stKB4+s3{ zuU7ML4;04cBKWwLNy{|oAQTGHx;ICwFWq)BNBgl-Hi=yWKj8R1=(P?=fvzAfr?d9t z4PgGJA7PY2op7n0hhRIO{{L-pIHKdR(5RF_f7{Ixde63nbS86%SSfK~7yl2y0vP7A zU8N^VgYt*Z+c^dYSFPV+081Z2Bq6KU34Y0ZSqREdEQN>N-k4IZ(r7A+KhRa>bU6n@ zr_mIew`|j{JQh3oBeJWP>8zuy1R`xc^x{GRvX;rAxjxf~rmBHDDNCPIe8RPFs)jS)$XL80%WprXF z6o$mIY&28FweUdOKU(tJPI%k*!{t`2ir0j!>AQpbB8}Dna?4&p!wv<{FzoB>lq}IXgVVqnJ>gnPI3=D(T87LnR$|bKTzF4er zAzOrLMv#$`{;#K?*9xSXnGe6(VyzA}FcLeQPx@K)Pz2-E@`U!c`oP)MhW~Us7Q9rk zqNiA{(B@hkgIp0-y5r3Yr&&YN+7(&~qh-*LTtUw`4GVqHd2UB))`2AoOL$GY`WGFX z@A{f8_L%MMDt+wGcq?sg2zTdqpPyA}whcd7sM2g=qxOWLn$bEei7V6rK}l2!Vdlwz zW-zK!1yE;9e(k`?(A+EIX3HTI#%af)!?-zFMP@1YrD7fqQqhe2sz_pJahta&EJ9eY z1BcCuZF^~Um|#&-4u{o7m7!5HASQO13(%TDGBs8TeSaw@bfeob(Q7?bH29G#iU{ggKcAW9I6dR+0ED6`SVljH6k*0Mq{x$Mzy?oJhh63dEiaU zBbLuT4r4;boqHA*?eO9+Pl#2UIl}@b?A|K(W5J^H{RBg!xVve z`vZ6(GGS(0hV-_sA%GX3e*9fvq4nlhk$7^Vz3=IPXrrmwAwW+tnr#P0`DEv z0nx^^EnWOw%@v!O6I$l?C<2x#Ku1MHw@L=cxtEHk2cUF&Kf}lh%hCxBg@vkgnAz&T zn6aGk2MDoq&|CEeot_EK!y7N}G1y4BhiMs&_weYNW~-2D<`fNU0{KTe)ju1$q@xC- z2-K&t*_~;7tCBLfofb?Y>lrxVu=@VVWc6Vc{%!5Yj<>XF6MN>lWrsbcYVc5MQ|V8rTA~vK;SXc2d@Rh-QoD|>leq= zVTmX6r3JvxDc=mJyFLQ`!~%yLeQu8seP+41oSo&grm}G%&9JnCx=)W{tTEhnxJ)>h zy(y6+x+U={&bO?#_sNO{aUCx(wi(bKsuNp=>fi5I6(bxga12%>a9Z#ila}U$Scx({ z?xT}D9nbHKvm}>+1fh}xmP`#~pmb|pff&VY%f)_*IaCAEeB|dVG%>?tzfW(SQ~@*J z%6S!L^iSuT_uHpmFV|yWWhJI=8zYdCq7h`QZ$gqlP4Nj?y+st;#YTv+E@@J}enrVI zRw>qjpDaDPlFj@UW(zOg_g1*~d$DzpyfosE_kvM*vXd{WSmReKBWw@d;5(Y?4-Y3? z4@Wk~>)gN69d0z;6q4XXRS<_Cwh@BDL(%(tcHDf9K2>ZEspWS23SQI^1;!z`Hs|u* z{TSEseoJ#D?7IoF&_pJam+D!3EUs^XD>?qA=0}rr^)LUsiEKt4jwqWl>o1Wet;0`J zYF=oQAM1vGPUcdC3AaMMm!}yOQ>mvEQ+0HNw?C1;4Q&Z6EnV;|*fG&?c$g+Fo6Que zmL)L>_laYN-tO-pIP%r(btzHFg&?$CBR{73VH+`6$PWzy3M$Qp^NFfbf4FIIPoucf zDPOP11PiH6WIP>!d-M}tp5dH%vqR6B|hK`-^>2QD6WuX(7Ei0(f?GoQj zMSD(=8Vrl^>fTB8nCjKAx}^KwXf^YI+!sknJrHqkDB8EgonYpHy#D1;E96b!J%Qj| zc=HvQlR4<_CQTPp6_2{Dw!7p%FZ8plmxO8Rkk=yp_NR%V@Q7yM7n6E>DH$0tA9|qQ zc`<-_F14&i6+}qCOxnFrHQ4zFpprwoT4b<0sLFFWS6MR=)0tp7ySeePXB-j2xVX4f zIjx^gw51~4U;hMwf=bO&qTwO!)GC|(`~_`T%TLW4A7AK0KgNyTH~Yh6MK3NJwN#Ud z!&BxAB}XTZuBHUa@us}9^f`>d1f8=OJe&Mt9syx5B632KQ-6m;7EC4PW`b0B_Oy?T zmvCoao^9(Y_aDUZWW*-V;!0ae*r;7EDlGXaPJ-3WA0OS}N}+{q9Q1E!IzEIPgmY0* zX{2EYk6*{+kM!9c|D1WZOjcH+4hN^xyMi%eAh8`wP}oDlfZw+c`XnK(+`;`ma$=2a zOZ6!_U0h|T*mKXIZ1fDJ`y3rv`|lCft_3S;YO0%bo3C5^9KEr_#mU2?^{py?mUp;C zq9$BA0s`97I2M8(Dtq4^h^O@3rEXSRm}+rbO*Ss@t1u;?nl@1m6Pe8ftll<^K)ktRj8e0;cc*4Ngp{YkYJvZJ!=6JBCl>skB3%oE@6 zTr_YvQL_DgD?aDM(mHAl!*1GhE6)c^KN~?JA+E0vz?de4bYYg_%0i^745L+;iKWRw z9=|6-<0%>bJp$6jP`{u>^D{JYvHuyB&eyA{vIH@t94uFJPKfy5TKs*5v~QP*wWpzj zTU$AtT^*5xdzYpdCnj4e+wNnig3Y7L^ht5pb(O0R6G#$chGosOLuH~O@+_aMDMn*z zI7gw=2LHKNS|2f?PGZy;5?n9XJue<~z%2oJ`VEITjiBTQk-PjmK;EsHuCHK2LL&Tg z{*;XNhhBGyUjr`&O{H*_nG@br}W+2MDZTgpz`9CTUY)V zOwpg*>N5Gg34t4L(t?st;@dh}f#u{}LfiDbK5`Key=xO`Vb2yr^#;hCqF8~I**v?#~2_C$ezU*gYWnBc3KE{1VcNi-on%cW$(WX2jniz@S}8W^jgQjFNmf zP@#uVmH6;ga~lT-tDDMx%z2X!Eew~TYob6=|GF$0@oChl%4wYY)^W`|iNPqt`kBRT z4*l2JjMU~fnZMrMVP!{n1Vh4T^i*V6sI1Uo3DY&u;Z!61Vrf~Sh%RKJYL~}qBR`^R zW%X!8Ji>6`ZT0VpA-2XtEUKbXi{wIkQzuxsVdyhy)H(7rs;l+B1At>Te31uQn8%~1 zvm;vHlw${MBCjn3(=_Wu*|HIX#rz{H(Xly`AYSg+Ka?nyLR=lpqPm>6W4-l!Uj0aL zf#L4&a_x96-RQ{`eY4n603~R|+-`rmluX&67A^6$8Ij$V^&aaiFuoLNqbGR!Bb^OJ zlx&XQ&6*n)wSflTE-}2i^k=udViLiGjI=y~=$gyT2R+y;k++A_KWt>ir|7~k=;TSo z0lP_HveuYSW+S@mf#S|g%hK}l=LbiN&9gNhzJj$jP=RWISk9Wito_wt)gA~6DQly) zk*p_pdB#7_fLAjBgbyH6dZpsQr^p(SpVw?euMEQ$f{VRb5-E2=Orm5?DQZ z5^9^h!Lio&Gnjy3Ot{Q7>B3w>Z?T>OQ$!OQ6BBc5sU*I&sh|MIr?@GFcXKx}!#8l^ zOQX1?3}T1)AzQZ6{Zv@j*cd!Ewy968o!ml=0R?c*%d||jX$m}3Q;!Oy^Gp_s9nPI> zOjh7Xr*%8Zn+D-5S{C`5N9e21SS0lu=oQu^4C*cg-fJ=o)2rya99*-F{c%7%1oQfn z6Xw57_ZtJ-M@D4=&u}R~!0t|TTjI_`XLoT#QAuScMkSkCto0R9>#($o{sxbWi$B_7 zQ;d_-I6laU_vY z#>~CuzNUKQKqZAFl^~h2hVzTTrt2RkN0kG}d7~*72F{`erRpslur7Bi_-r4T<$KB{ z4mN&e`8Kt=)=w~Z7LMdfUq#5uz(j85N4b%V=US*0DIC6yc4TCbQ#TTS!G+Uxh0W|V^Kd&Hwk$(^9m2Ij!&bL}G^j7>x8s!C9gDEO@zc``) zKWx>6zqNG$eR4vjGqOh*jmPNx@e&@^TV}IsDtR{ ziU$Xe-c24Jy7^<4nzY`@FF+5Ke^sM(S4MoaIZkJJUFmdI1s#*aoPP;%L{;(@DZMoY5#{PEzwf$|}zrnWda!K%sr>~wwZ z_d%hw>kOI1TNAM!q+CROtlgaTJaL#&py#ZtjIw-7y2I1M-DV8UB@}(s7yKfzGsO=s zpeDkYGb1yTMw1dQxG!v?SbZ;SV^(5lM?R4uJkbz#G_|$+Y@0+pm2%##oUNvg-%gKZ z-cr;cdNf)UZQ9eorNH1Wymyq_47ql;ZR*!F)3b!aKU9HRh$;4w zD8~jF8Wh9o(Q=5SgWOy!I7C^~{{fNA1Kw0dEqs@+&iZ2=0k|^j{C$*Klv4ZIdC>3u z@)wi`eyG9+VXln2y?1;|&-_C>;|=CqU<8I?yEbM#sfm|8;i*|=ySz}_vLOSJf#E*s zKC8K|L}ua3onQXwO0DZn$Osn}qEqibyAb2uLKz?Z)pjs1iH?7SJ7{|v8|a{%vrE7) znNJhd{14|xIV;Q8=dNHajyID>g`E9LQ_pE>*x6bgh2HKx@_QfksPq&Q#8a3YLGbXb zoFC74ozHfk4HoU2>xj1Tw^gXSt#kjmHQr>TD$(5Qq9U>hFs-6BoQqFs+-^c|$W9X% zsBh05pI5*|?w)v)B|F>9DIFJ~vmzBqBhOY3pX>S!!cFMs=nW0n5^!1_K|LT4T;V`K zo`!4oZB4%P3-;Hl`)vyS1J-=#iKKO)gKO;=e*H35)2B5W&j^f*%JYylrDE=YI3fFGcLxqf??ZtKOQz=8bNpV)cuzmEwQ-AIiCm#i7jVQhafG4TJE`_FVG*grQgl? zKU_bN08}D`YJORL3OVa-6SnnRi0{;a@PU&`&*NN(W z7A7E=uP2PK(DCwyl7IYUr#@X%a&=X$+isi-6p%6dLm)7D3$r&sN{vTEc`_o8W%CQE zq?$I1Z)Xz(^7HZ{D7V|fk)w@l++TJ0vs_THHUC_FB5=oS521Nn=LfZ)yH!4Y!y~Rcfl~J=)xB}kNj=9 z;bhHBw`-GIm`E|pnW9hj`&&eDg%-<>ot^WLosD!bln1Bx>+_$g5_#+gEDQ>z(tY5t z8ojk5D{?XkSPfOG{EWJe)ox+Ibn)7q9{9nd-6wZ6+MwH{6Rxn3Y%D86D+a%SCrv{H@5Y$?WgkAi|C zlFYURL+c;=Gh2gZ0;WeeIy2~4G&y;|pXA2%>hSY)LAcJc6vrzLt#Wk$0p1j)Rwg}B z`5mFrGup;SepVZKbmJHZ6tmZ&gxVYsmKN=xfZJ z=zII91H-~#t7U7!wd^yGZ|a;kgTvB3?F6OK^Itw~eHjlaQL5bAgcgX4@{l_B6j5%3 zD%lQ!2Ul4GN|{Y-*8tMO=a_IQjWI^gGhMW%CPw7p!OWthI?H2t+~cLUePnS39rEsU zsn~2dikl;wfMRVUJHX%0lHB)xO*UgDz{E?^Sp=lKXp&}Q$37Z_tl;VlQ`LJ|!)8yT zRKl+8Dk<5GScJR$S$~{qwwh6SSoPX{`24adX`2iyQ`2j2Zw?;yh1~%c%;-l!RN6Pl zgzb_7q|0;t3+YxzoL}AX(GsaK()*9WFa9%Nzn&zeAX{M3Zw zK90x@$IZrLG+M30<2q*%w|^T5;Rgo+dHncr9xv;3b~Qg4z-(-$s^E5~XG$iOkKFbw zD+`|k9Ljq_UKEO+HMNx+b`B_w$NM~A_Lk(&zu3leA&YUS>Q!AfD=y8ns17fsWN3Uy zTw4!m?$|FXqS-v2)ImhT_8Wiv2cc(8jl_=f8>ye=Re7!&+9-G>#|mmBZ2w-4=E>fV z664Uq37$Wco;A6i>`{?a?`YwK85jho!uB(Jy5#i)H?DjtgT9q2!5mAww{Su$$jHz^ zFBmedte3;rFwgFaZ|kS>cC@>_LhdFa5u6$uvv`yBtH}g>m`3Y`ryj`}xnZr2vqmIT zB~v-50vEBC69ql@76Up0&_?OI2PfnZ)bLFJZ*L{gTZue7bd)Wva*BE#+{q1`Dl$i? z49l4at_HGmdvzhLv@@XIZ(sANzD;4V@+rbky-_S*5yW)hIJiy!jz1oQA3CRSEl#>S z>p^N02#F)m01VRy(!E*Pxw*@uDe0?cMSZ(3SEOF@3&zI#dk|ekabR$sa1op2M?fXn z;!@*Mv|Zk@tcO-9kXg&H=|Ja9PNcWt1cum&?EP6kFlc#Y~7vv|3&jbS3o zBxIz|9d@iCDroEcPc%FP$r{ltCt4)Te82JqG$Q1LkA~7*1*R~W@@^S=w0;m}Nm1E3 z?O`+yAFm6$&uH*^0)=}5!hi^45CBZye+OXt;?Q7cl}n{OnOMK`4bcm?=SOf1Z#(M? zL!Sjzk<|plwPH^j<$g3wks`rz1Jci?wJ z@EQ_YrGM6#qwe{fiHKY)y^xfbpUhJdEW;_}jLD)MCmr|G|bp>(@ZM=SIZ<@;KPB8;-=JB&<98(O8 zxoq^(+T1t2rB>Y1hLUn}GGOBGXkEZl47&S7q>OX9rxC5uTyjWiV^=1ToX+YZdy^a$ zzDbGOqJ7d#JY&D`mJ8XwWjgC~4=SBQWkOX$fsvBR=P9hLwG~+x`hc5@3#P|5oW9xU z)s9EpagPCUJQTHisifBclPT8mX#GHrMebeHJ|2r1O$GM_r5!+kV}?_$FoqT zS>+38bz~~2nOSlvvA?0Pyd=msK3TRO@xp!oApZZg1ipH^z}Ti@K)?+B_aBnHsgSB% z{CnpcVWPT7Ab&5{e-6S(Z$R2D{^X3`)XXFdI)SydFa_}O+wa?9$}Azeh5b7fIq8{q zZ$J(3Q*HI>n67_ld2LSiBm=mz5GW_yfXvFeY=o^Evw7TG*EugZlYa)|Z(?BXFE01B zLddH|4s*Ey-Q*0*DoMvsMc$$2UbB8)@u!y)F*cuk3H2HMNm^Z-ND_u~K`ihM6*^e0 zAy}t_D#QebpGA|G1{-%nUniA%ZvI{t=K7ybYM6q(PfFeXT2pVo4 zEnXOEWocBMY!QvX4!>iHNli5~HWS-{oXGK~i1Lm9ACIcMIppy#D;n^Ms{aPgQ?7BM zG>_NUj@Bnf;6I-PXo_Uo*n0;m1u?e-R{y9PHj8Y?h7(d;!2puiAN}aBl3`vW?ulyG z`?Deyn_#xC=kaQ-6f3LwTv@S9_{h)kk2LJWw`Sw6Iovy3NuqK2Z95lxj5)>H{pY&SR(s`YcB%(J zI){edLtCO@ctCtx(Gr^g&^PJPa^+L$i_uF8F^Uf$Tc(+z#M@4`NDp zfjFE$H{RfR(xO$U5Bb;4^aOCW4FZLf%w|nsaBM-(cbXrak^SOc8TNZB4LG%#e^c-%*M9GZZhSz zv9s__aa(LK0;e_0WV*k~Wm*w%eG;Z|J3x4K-Mlrm8>r9{xSOdX=-&Hksp+}TR(AOA z>R^7lywF*?QZ^sj9pw&c$y~p)r(CUT(e6iI$w*JRYBz!n#m0aEh2R5tc26JEUMo0n z=G{f^C(phQK^hHwdDBWZ_Y5d=L0}LNyu4C8)zJ2L=cu=y&-gu|t}|gnIS^zL{Oj*f zZS1rh9UXax1OFvq>68R_wAxZ2@ub2*&MDhSTzDQ^jA+8%Vd9V4^~J+;8HyFEmWdXu ztd#!hpYZvm*vo1YZyRi8(-AVASyq1E1Y*ZZ1v<#B-xDB^n$Ks%vW0a)cQ zcFk4=1U;avBH?|bHa=po?>Hy}shD${2{d*(>+LA~(YFdvMJuS}p>ait^Fy_{MFe^U zeJSKrPdaR1+hXFSiYLD=c{2UXj49+41Hs>A--iCdBZ+ThAU8b}c#gL=l=WO*^5u6f zFUye`pNg}(@ zo%y&%NKD+7kUMcH${o_jIW{4CvmbY#zh6UKR^<2E50_#PTb=y2W34MtM&+^-*di@~r9VkTe4=pQr>AFoz-(@A6MM}=qLyGaFn*tne`4WVu`P99 zdK5&8DBaUpgq|3<^yw7L7Q{5z?wV%#BEaLYml2-D|GC0C1EAz>Y)tH&5MtrrdzY7C zY9^~VE|fPNsSMujv~lt9;GLhJ$K~m2P!-Qt>F^H@563i|&UM348)-3P-<6^?;KOKfd4P3@@bCJ zlTNvLy3_oFtR@jIc1 zo|x7-RsZ`*+6rLGpQ=mtwRL`1IsfBhJD&tMUfxF1Bh{4kp+mg^{)h@n3RLiEfBk>$ CDQ+hK literal 0 HcmV?d00001 diff --git a/01-slash-commands/push-all.md b/01-slash-commands/push-all.md new file mode 100644 index 0000000..ee681ad --- /dev/null +++ b/01-slash-commands/push-all.md @@ -0,0 +1,473 @@ +--- +name: Commit and push everything +description: Stage all changes, create commit, and push to remote (use with caution) +tags: git, workflow, automation +--- + +# Commit and Push Everything + +⚠️ **CAUTION**: This command will stage ALL changes, commit them, and push to the remote repository. Use only when you're confident all changes should be committed together. + +## Pre-flight Safety Checks + +Before proceeding, I will verify: + +1. **Current Status** + - Run `git status` to see what will be committed + - Ensure no unwanted files are included + - Verify you're on the correct branch + +2. **Review Changes** + - Run `git diff --stat` to see change statistics + - Confirm all changes are intentional + - Check for any uncommitted work + +3. **Security Checks** + - ❌ No secrets or credentials in changes + - ❌ No API keys, passwords, or tokens + - ❌ No `.env` files or private keys + - ✅ `.gitignore` properly configured + - ✅ No large binary files without Git LFS + - ✅ No build artifacts (node_modules, dist, __pycache__) + +## Workflow Steps + +### Step 1: Show Current Status + +Run `git status` and display: +- Modified files +- Added files +- Deleted files +- Untracked files + +### Step 2: Show Change Statistics + +Run `git diff --stat` to show: +- Number of files changed +- Total insertions +- Total deletions + +### Step 3: Safety Verification + +⚠️ **STOP if any of these are detected:** + +```bash +# Sensitive files: +.env +.env.local +*.key +*.pem +credentials.json +secrets.yaml +config/database.yml (with passwords) +*.p12 +*.pfx +id_rsa +*.cer + +# Large files (>10MB) +*.mp4, *.mov, *.zip, *.tar.gz + +# Build artifacts: +node_modules/ +dist/ +build/ +__pycache__/ +*.pyc +.DS_Store +thumbs.db +*.swp +``` + +If any detected, **WARN USER** and ask for confirmation. + +### Step 4: Request Confirmation + +Present summary and ask: + +``` +📊 Changes Summary: +- X files modified +- Y files added +- Z files deleted +- Total: +AAA insertions, -BBB deletions + +⚠️ I will now: +1. Stage all changes (git add .) +2. Create a descriptive commit +3. Push to remote repository + +Current branch: [branch-name] +Remote: [remote-url] + +🔒 Safety checks: +✅ No secrets detected +✅ No large files +✅ .gitignore configured +⚠️ [Any warnings] + +Type 'yes' to proceed or 'no' to cancel. +``` + +**WAIT for explicit user confirmation before proceeding.** + +### Step 5: Stage All Changes (After Confirmation) + +Execute: +```bash +git add . +``` + +Verify staging: +```bash +git status +``` + +### Step 6: Generate Commit Message + +Analyze the changes and create a descriptive conventional commit message: + +**Format:** +``` +[type]: Brief summary (max 72 characters) + +Detailed description of changes: +- Key change 1 +- Key change 2 +- Key change 3 +``` + +**Commit Types:** +- `feat`: New feature or enhancement +- `fix`: Bug fix +- `docs`: Documentation changes only +- `style`: Code formatting, missing semicolons, etc. +- `refactor`: Code restructuring without behavior change +- `test`: Adding or updating tests +- `chore`: Maintenance, dependencies, config +- `perf`: Performance improvements +- `build`: Build system or external dependencies +- `ci`: CI/CD configuration changes + +**Examples:** +``` +feat: Add user authentication with JWT tokens + +- Implement login and registration endpoints +- Add JWT token generation and validation +- Create authentication middleware +- Add comprehensive auth tests +``` + +``` +docs: Update all concept README files with comprehensive documentation + +Extract and consolidate information from guide into individual folders +- Add architecture diagrams and tables +- Include practical examples +- Expand best practices sections +``` + +### Step 7: Create Commit + +Execute: +```bash +git commit -m "$(cat <<'EOF' +[Generated commit message] +EOF +)" +``` + +Show commit hash and message. + +### Step 8: Push to Remote + +Execute: +```bash +git push +``` + +If push fails, try: +```bash +git pull --rebase origin [branch-name] +git push +``` + +### Step 9: Verify Success + +Show: +```bash +git log -1 --oneline --decorate +``` + +Confirm: +``` +✅ Successfully pushed to remote! + +Commit: [hash] [message] +Branch: [branch] → origin/[branch] +Files changed: X +``` + +## Safety Guidelines + +### ❌ DO NOT Proceed If: + +- **Secrets detected**: API keys, passwords, tokens, certificates +- **Sensitive data**: Database dumps, user data, PII +- **Large files**: Files >10MB without Git LFS +- **Build artifacts**: node_modules, dist, __pycache__, .venv +- **Temporary files**: .DS_Store, *.swp, *.tmp, thumbs.db +- **User hasn't confirmed**: Always wait for explicit "yes" +- **Protected branch**: main/master without proper review process +- **Merge conflicts**: Unresolved conflicts exist +- **Failing tests**: Pre-commit hooks or CI failing + +### ✅ Good Use Cases: + +- Documentation updates across multiple files +- Feature implementation with tests and docs +- Bug fixes with related test updates +- Configuration and setup changes +- Refactoring with comprehensive changes +- Project-wide formatting or linting fixes +- End-of-day commit of working feature + +### ⚠️ Warning Signs - Ask User First: + +``` +Modified: .env +Modified: config/secrets.yml +Added: private_key.pem +Added: node_modules/ (1,234 files) +Warning: Large file detected: video.mp4 (45MB) +Warning: On protected branch: main +Warning: Pre-commit hook failed +``` + +## Error Handling + +### If `git add .` fails: +1. Check file permissions +2. Look for locked files +3. Verify repository is initialized +4. Run `git status` for diagnostics + +### If `git commit` fails: +1. **Pre-commit hooks failed**: Fix issues and retry +2. **No changes to commit**: Already up to date +3. **Invalid commit message**: Adjust format +4. **Git config missing**: Set user.name and user.email + +### If `git push` fails: +1. **Rejected (non-fast-forward)**: + ```bash + git pull --rebase + git push + ``` + +2. **Permission denied**: Check credentials and access + +3. **Remote branch doesn't exist**: + ```bash + git push -u origin [branch-name] + ``` + +4. **Protected branch**: Use pull request workflow + +## Alternative Workflows + +If user wants more control, suggest: + +**Option 1: Selective Staging** +``` +Would you like to: +1. Select specific files to commit? +2. Review each file individually? +3. Create multiple commits by category? +``` + +**Option 2: Interactive Staging** +``` +Use `git add -p` for interactive patch selection? +This lets you review each change before staging. +``` + +**Option 3: Pull Request Flow** +``` +Instead of direct push, would you like to: +1. Create a feature branch +2. Push to branch +3. Create pull request +Use the /pr command for this workflow. +``` + +## Post-Push Actions + +After successful push: + +### 1. Verify on Remote +- Check GitHub/GitLab/Bitbucket web interface +- Confirm commit appears correctly +- Review diff on remote + +### 2. CI/CD Pipeline (if applicable) +- Confirm pipeline started +- Monitor build status +- Check for any failures + +### 3. Team Notification (if applicable) +- Notify in Slack/Teams channel +- Update issue tracker (close/link issues) +- Tag reviewers for PR + +### 4. Local Cleanup +```bash +# Verify everything is clean +git status + +# Should show: +# On branch [name] +# Your branch is up to date with 'origin/[name]'. +# nothing to commit, working tree clean +``` + +## Example Interaction + +**User**: `/push-all` + +**Assistant**: +``` +🔍 Analyzing repository status... + +📊 Current Status: +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Modified files (9): + ✏️ 01-slash-commands/README.md + ✏️ 02-subagents/README.md + ✏️ 03-memory/README.md + ✏️ 04-mcp/README.md + ✏️ 05-skills/README.md + ✏️ 06-plugins/README.md + ✏️ 07-hooks/README.md + ✏️ 08-checkpoints/README.md + ✏️ 09-advanced-features/README.md + +📈 Change Statistics: + 9 files changed + +3,706 insertions + -587 deletions + +🔒 Safety Checks: + ✅ No secrets detected + ✅ No large files (>10MB) + ✅ .gitignore properly configured + ✅ No build artifacts + ✅ No temporary files + +🌿 Branch Information: + Current: main + Remote: origin/main + Status: Up to date (can fast-forward) + +📝 Proposed commit message: +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +docs: Update all concept README files with comprehensive documentation + +Extract and consolidate information from guide into individual folders: +- Add architecture diagrams, tables, and flowcharts +- Include practical code examples and templates +- Expand best practices and troubleshooting sections +- Provide installation instructions for all concepts + +Total: +3,706 lines of comprehensive documentation + +🤖 Generated with Claude Code +Co-Authored-By: Claude +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +⚠️ I will now: + 1. Stage all changes (git add .) + 2. Commit with the message above + 3. Push to origin/main + +⚠️ This affects 9 files. Please confirm. + +Type 'yes' to proceed, 'no' to cancel, or 'review' to see diffs. +``` + +**User**: `yes` + +**Assistant**: +``` +✅ Staging all changes... + git add . + +✅ Creating commit... + git commit -m "docs: Update all concept README files..." + +✅ Pushing to remote... + git push origin main + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +🎉 Successfully pushed to remote! + +Commit: 41527ae docs: Update all concept README files... +Branch: main → origin/main +Files: 9 changed (+3,706, -587) +Remote: https://github.com/user/repo + +✅ All changes have been successfully pushed! +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +``` + +## Quick Reference Card + +**What this command does:** +1. ✅ Checks git status and shows changes +2. ✅ Displays change statistics +3. ✅ Performs comprehensive safety checks +4. ⚠️ Requests explicit user confirmation +5. ✅ Stages all changes with `git add .` +6. ✅ Generates descriptive conventional commit +7. ✅ Creates commit with proper message +8. ✅ Pushes to remote repository +9. ✅ Verifies and confirms success + +**When to use:** +- ✅ Coordinated multi-file documentation updates +- ✅ Feature implementation with tests and docs +- ✅ Bug fixes affecting multiple files +- ✅ Project-wide refactoring or formatting +- ✅ End-of-day commits of working features +- ✅ Configuration and setup changes + +**When NOT to use:** +- ❌ Uncertain about what's being committed +- ❌ Contains sensitive data or secrets +- ❌ On protected branches (main/master) without review +- ❌ Merge conflicts are present +- ❌ Want granular commit history for different changes +- ❌ Pre-commit hooks are failing +- ❌ Want to review each change individually + +## Related Commands + +- **`/pr`** - Full pull request preparation with checklist +- **`/optimize`** - Code optimization before committing +- **Individual git commands** - For more granular control + +## Best Practices + +1. **Use descriptive branch names**: `feature/auth`, `fix/login-bug` +2. **Commit related changes together**: Don't mix features and fixes +3. **Review before pushing**: Always check `git diff` +4. **Pull before push**: Avoid conflicts with `git pull --rebase` +5. **Use conventional commits**: Helps with changelog generation +6. **Test before commit**: Run tests to catch issues early +7. **Keep commits atomic**: One logical change per commit when possible +8. **Write clear messages**: Future you will thank present you + +--- + +**⚠️ Remember**: With great automation comes great responsibility. Always review your changes before pushing! When in doubt, use individual git commands for more control.