From 4b9d88536c0c06719fd8e1d009dc88415a6a5f8c Mon Sep 17 00:00:00 2001 From: "cmeans-claude-dev[bot]" <3223881+cmeans-claude-dev[bot]@users.noreply.github.com> Date: Sun, 12 Apr 2026 19:11:00 -0500 Subject: [PATCH 1/2] chore: add branding assets and PR lifecycle agent prompt Add Dev role branding logos (40px, 128px, 256px) and the PR lifecycle agent template used to manage CI transitions, Codecov checks, label automation, and sequential PR queue rebasing. Co-Authored-By: Claude Opus 4.6 (1M context) --- branding/logo_dev_final_128.png | Bin 0 -> 10855 bytes branding/logo_dev_final_256.png | Bin 0 -> 26022 bytes branding/logo_dev_final_40.png | Bin 0 -> 2305 bytes prompts/pr-lifecycle-agent.md | 128 ++++++++++++++++++++++++++++++++ 4 files changed, 128 insertions(+) create mode 100644 branding/logo_dev_final_128.png create mode 100644 branding/logo_dev_final_256.png create mode 100644 branding/logo_dev_final_40.png create mode 100644 prompts/pr-lifecycle-agent.md diff --git a/branding/logo_dev_final_128.png b/branding/logo_dev_final_128.png new file mode 100644 index 0000000000000000000000000000000000000000..10722d67104773b01f5878580242b1778484f1c6 GIT binary patch literal 10855 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 }wb?Y%Rqb?M1>KKlrs2Zfvks zxJ2r}G|uQ4PCk#fvO;BLwV?{vN)eUKUPCLDGI@egK$Nik8X=I5gRpFK&_z4mg_NX6 zhDnW#f+Y!7mhczvHE>U#Fz^A;eV^ zM6kZz)~%(&vannSjX=fw0xa7y|Mvs4QM6SZLf{Mzk{KOC*f!zDI{wl_vyzu6j87u? zXd$C1p|xgY=JeZI^IQjo6B^kO^A4!4yp)EgQdrqO+^K2oz8pFTsI0Ewt*y6b)eEt` zSff0zz4ZVoNevE?9vMM64pFg)fB&Az-f3u1K9S%fG;cnbd-u~eCPC_}f+PWW!oaWN z8I_8ZZ(PIb%i~T=kRG2PH8P5~x{9~9wkH8~7iqn75JL;_g=LW%8X`43jIb=CVv*qP z9in2Z?b=T!_?TU9Uj-0aYw}Yk#vIF<12XLt=A#6^iR&iQ8Qk#+?14eF)`W!u-r6c* zsX^L#3pdb8r%4SC;SThJltf!w1P|{Ml^RDVcj|g_!3RoCU>{moczan?=gr}nQ@@E8 zUulQ=M>_J`@ZDuPgEKOMGcW{F5|+#OYik6B!frbuDX1g_PCjpP^D`MxieO`%aCI3~ zX%cPRRo4>@K4|@)AI@F)WvUtgVC2B@87=I~AhPW>vPYQw)L92tV|krU=XLjA8A==-y>LCBV1c;K9%fgS9dEDj}3e%s)$p| zci&y0RsaBo4xawk0`c!!H?nKy9hcw3v#9_y=5O`oum^{*`v*V@lCGyZ4cgVB*y98radA8seCqx8 z-`|dti+bOA?BJP`5xfoL_cn4r%sVUJ*>R}d@t5%ybrtmX_|>*cJy!53+E|}jy!}@n z)_%EXU%=A*hgSvqA6Cyn`9TGr_?&_t67UsL|Gj$fX|y+RW&ZN3puh5i41Trz4*~c{ zq5t{An-_j3@wY~WR_8DOS0Th#8lQ;t6#TAAJzns&fPZ=a)`j0_SWBz;`N+Z3UqXog z0rYjqya_!8e}B|g`7NaW`;A8ac1`Uppo|_qc}7RpH-Ym{!T){$UtClodU^TQ#mlXp zZ0n4m<=a<3T%G894#YnLIytYjzF~X6c?y0n`Im$c|8~IHdcGa-X;%Z((#XM&9YpxQ z0^%R-UOQ;XYVS8s!S5CS5<>hp73yEFM)=yUwNnA8Qhw^hSju)^(WqYp@u?PU_I~pe z{QdIRLi3h}uQ{Rp+Y1YCFLzaQw*pX06GzWa1Yz`9q4^BxQy`84W5#e4ds5Dyg5L>u x;R9P5mVjGmeHkfUmzMt1``0f#+*jqm{|5wn-*HnXmWu!Y002ovPDHLkV1g4-J-z?{ literal 0 HcmV?d00001 diff --git a/branding/logo_dev_final_256.png b/branding/logo_dev_final_256.png new file mode 100644 index 0000000000000000000000000000000000000000..3eb0687c02d8d3919d97ea64970d2418c45b9458 GIT binary patch literal 26022 zcmY(pcQ}=Q{6Bu5bL_ne*?T5Yh&Tty%qAI`*+N$4Id%%!LRJVNWK_gKB72j4D0?0I z;EeBie}3Q3_qu+6oa;Wh<3SFn!xzv3)M>QnqyY-a zUnuvzH)^_WWg^O3+O-^1Vh-w-+ECo)WMvn;(Ul7YD8@Yga<`N zFd!lt6$0!(u63?y&G!SBBEko0%f8<%L4o|{f_a-2Mh$7#B9(XcB{?F(Yb9nE7pdCNbA9U%;R+WuCMG^!jORt zo=jFVIH-<2APK~v?0EWi7_SZxWD)5%o72wgUTpopmsBv1<>AqhaAnsJ!dXueN7HcN z$JX6DkfOi6`S>!lt@Ie-LB|7*n``%~7cQ4c;WH1%W~aY$V3Yjg6Yw(^pufvUp$8ZF zyA>rgcCNd>-!QE%0}6{zb=$sQ1a>Yr8TmJ#E`i~%G2)bmw_KjvVxE?VY*Ii(_mpLv zb60Ia7?HiN(|LK`|I5P@wEPL-X5HcPh(0n%>3sUw8Gw){USa4>m@T>V=)T=a%8{G!20rNja+gn!f0vc8RV6#IVe3`?Rap68x*R{&cZ;Lw zU^fccfD0MIc3E{)kQ!58x4VO;18Hwit8m5vtD&<-KS9JutD5!AsEBt{nxdDOx=IMJg z@=>Vb#WViPTR@_@qO}Xf#hr9N!v8Ww&Vk*!(3U354o?0;4xU^|64{r#U@zXsK5w>v z{wG{z=-&c?C@eXmu<$D&xSk40n~Yyo@GrXw8d%O{qAjpFA~#6eI$WOf{_1}X0UCyS z>lT@~`S-2&)Amt4rAJ$U>x*$A8T?NvjM6;(amW%WA-Rxn{g?yw8#8ct=<<4~af$`P zR`lEr^y~i}wt#xO<@rdGu=8tHYov1i4pKt-APU|)g8UWUBKpbz+7f=a|Iqf&2^GV` zF+w{ve)x1bvmmGw`FCTvM`bTN4gdAg{E`-!Z2^AbCyB;owSEp7i(uy3{9ic}$z#U7 z$#&WQalRM;wRsB~{q7e?&|Ax&_B$_ATGpQ)2L`tnA|(8v1*lqnA>ch7)*LsWV<4z>nNrw!8`2BqAt?v%m7#tB4zdEN=T) zGVBtzM1hS>ZDUjMyN*jYK*U_W*RDjoD!XKo%_={zTgQf4d{5JF9D@l7^%dr*=Mp)~q7GWxG*Vq$fUx|0i4Ia>C2SpQO+RQe>9(6ilF8OCu7sMRt0EjiU=L4wG3~N`wuqq%ehIRiX(sn zS_uMSQw%0k?=^@Te7KVQ#9^&dU2>s4$xfp@ojJtXIB7uqx*>NVEO;0A?b^to%Wl8b z6L3F*VDr+iVJC?nNmlg}gy9feC87&!X6Q^`==fd6<667~HHkNzG z_wwwrE}#Un|Cq79BIM;LZ6I^8GXG&5J)J<~{@(QVKskYI8-OrmC3Keb-VR&m+>PwK zTX?0bYwBaJBS75`c)x`{l=i_eyr;di_!h?Kmwk)xXvX55W%*>tUKI2k zk3(F*tWz3?fu3Z%E#~f?O=D++ z>BTvg+z$lS5-2GK+_8pvj4rp{_x87iz7}Xwiz_bp`*CL~@2Ymo)|(j8}D zI|G(j_+(ge2N5p|NT8N3fFMbKJe}jeK@-v4#n$!XI?K-S$vav5i;%Bf)|Pfa-yf}_ zZ*ZPVdhV#juhZj(dHJ2#wKwmOfwY{@j%5V>s!q3ua5E>hUzxG5`P~#l*Pmkp3*Ox; zIYY{`B3(M)?$UJlQ?rGwD*Wf5PptE1I;|`^ur>1)!-I_x{U4OcQiNUX07yJt@i!MP zS%;d}7gdjM2OWmTWY!G6y1e(i+|xz>MJo| z*?)80=o#&sV7q@t@_W?zez=BXmPIgz;>}m@pSFEv;-=64-IPSFv>tRxvW!A+M;>j8 zYDNF?x8A)MN+(c0Vz)Ky^`Dna_0rFHxjbH(nZ-{C^4XH0X#+^v^1{4#z7Pq(D1otg z`K}K(IiRnI`Y^h|Vdc?t945Kg`lf7atI7FCpqL1y-J^z&k>i_eL{Y_TDR`*V4h`Dv zuLesl{UFPF-Ff$ZZ@^5I{JHG}a-R<^vHI0z-x@TwIGgS-|6Ir%uqbGs$lUB3+KQ%*0PIGg zaydR}(`JGPQAiu6F4)Cy!MG7+QWu|Ze7o0yE*;W06G8Q11Sy5>ly|iWchL4Zc4BYuXqf5)qvY*dba(X6cX zK3n(KYi-El=Q}A>{-ENIKnmJxV|_?|6pw%F@sOKKG%?ah`<#4x-6O&B_}8MWyWg?J z`vM}AdxkpyaDD~Ic%|4QN+>u+8l(b&wWP)#cN9YuL@qi<&J-K zP_K9xm&k9*v+#2@zfzD6S@Hnvl*b_0VNbyx>k&NkPzS~jqo5cd(G~qTCZ^%^x;pAj zdp$%n$pH4w*~S6fVeAmREw?W9Ui0*@gf4ki9UP$nCFWQHV$3LFY$U{t%BvI)zAPc1 z4&%JwzJ37hIGViUQ~;9YNR_txqw`$^0za-}BYqNN!E|b!Bn_uh@`{Oz{po4V#e(hA zE+Wc^)AI=PdzBA*k?cXepV(#DK|S}ohwaD&`O8EY$eh@~_9Xk0r$XGUnxZssi|(s{ zf?U1sIG9#B;QNVo-!kg@&@(~BA4Se4PrT{{S<%Y=dBMkgNJOi352~_(?S2Snmu05W zBN=hU8zTmqzXArA^mzwJ*o7_PP}Ma`+)niT{_ovgUai}ys2fM z>eC=%iuJ=Pt`xow7zU!hX;HA8@2eAvDJ{wZKHDii>05X1roW5HB>5grQxw$ceVvL3 zz=Co51^O>GM7m*K5p=o}6BWaE+w8oMg{<*gGAjR6SJ}cFvu3uxK`SU|u2Q)k?`uwm8-tG^c29WjD*d(|rk*H(dBi zPmFsOJO4~7hK3#RM;elgKXUGkZby?u_!ojs=rFNfj&?_Ear%We1iJ4(64xr-Ou1D$ zoP{RyJ~;2~HRmssq~3m`U*40+!A?daab`dvH)5AD^G!=T0QdK=PaN6IF7(;MA0Iw2 z&X_EHe!dSOi}23|osePnUO>qV-glwu|9ZUGP?r&Jcw2ubfP87yIKswz)mO92kUNOR z2jx=THBsyvkfsIub6tzVhr#LC&@;NaT_vNJuBZ{tqs2yBSf5zuZxzh`-02~fH;QM` z5tygPcP-(F84+DL(L4;Icsu^X&fJ1w`L+PPD!Dt6u#bTY3H(Ca8{1>kbKhEY9`H^? zN$dHrRNQ@)T@?LSM$&^>mftY+grb3U#8K$kLu?W8Tzg=iJi?xBQ|V4ZD(#C6@__-1 zmY~N%i<^QJCvn1A0loRso(m`Qs`GuoonJ<;oy3$QPjDd_4w{9O#R@;j*P@wy`f(mA zXW7~HFE5ygd5o8=UQ1Bt+hJM69tinF)B%;i%%)i1&R(l1A6>TPHo3m8#FIqMmE@8m zz7~HV;oOkl@wSqj4VIe$jU;7@vn-bq6pz$5HzsC~zRN0QF^^JdAd)u7xQhYS9ige* zk4yiP9k$R%1id7Q78x!gpi=_|U-A*L!rs@tC4oQtg29atMxnlVa6G&gq*t%4+Dl? zEiG_fueI%59pd1ykR^h_7&~Q=66&$@4-x4wcO26n{OSjtmP6N%et{=<7$YUiCew^4 z&g8X!j7c<_^k|5~i=`ix-Jy;8EGP~F?RPNr|0OqMV}IJ4Xz{bFNy6e=$h~I|7w(}n z@iaxpsILP!wpT+hd)#FU9;}TyNwi)~?ObE+TAuWV!ilZ& zfzYCCUT!S^C0$~%x2LDqoezn1FRtj;rEFYp-?)9NpDg0v0H8<_!OwD@WRLzQc9LXJ z?bvf%|AL^Bb)YYBG?zr}{X#1)XR;^#P&q(g&J8yI+W`AHQyGqQxrLXXzT)S-nXb9r_p=M3c5~UY3o-d0SQO6fU zUwz5wcph)Qd{C8HAiaDrekm9YP^g!Q_)r6~e`?p>%lq8C(A9nS-Ji0j#!8fjO???( z-}HQ)tN5(r?HL;^Xb<}zIQ#6FyWFtVs8^>-oilwgPi?wuJkkB$N!xg2EV4)#obsZm z!u%)plmn&pfiSv~e3nU$8B>I8GGTId9NzyMo9>ZZ$eb0 zlKDwPioq!{UeVDoA&EZ6_Z+Eud-KWG>PH}`r6XX&a@E?X8JpjtH2uk@RcYTiTTAD6 zZn^)xW=bPTahv32c4bwUbFT=LW*}MJqEYw-BV(i|bt$vAPuVor-l3G2!0l2V1Qw8f zL@`5Zp%$_z7B;T3Mjheg2($tCGmwrNf|DHag=avRNwv{{$LEPs(Dv>(HlPdOBqQcH zE8?N;CvC|)l$Pb#&bRCA9dc1ndd8cFybT$aoyRSCFCDW(vJ|Ko&3?8NboiQnNDKT+ z_oB_xpA74o3_9uRTYg#Vo~0#H&Z2nu@L#}^V56>5MyYApYyz(&N7qzHRL97V!=pv} zdg}N^((D+S-L34BMu_$o z8~&5pGtO6_VT|RA@lt0abNWUK`Tfm%#yF_s?I}C#Ey9-B8w2GqEa!@|ET%92(iX5i z<@@WhM7U?_aO za|eeM4=B+GEo=MZ`lWhTfuSAr0i>Ju=!0>oaFp9s$J?Z8pcS=TmXvSF z*oGo^y$Sh4N|372_4uOw9HVjSa=zV6>IKErTY@+5qGkPzbH46TwY5&(xce{Vqp8}3 z*@(2)x$|c@o-gdV)xrD{03D|(n(095D#P6Bm?KHunixS2Q+|4Bc3Os56=xD2HQ~D3 zr*s%bq69&B8wopns6Azu6?${|( zWi)OYAlwjM)VtqOVwt|x@{D0f%<=zt)Z9_MEPIP@T@NBKE`<-bYViVztwBs>y!GZ} z4*_P_4{_^ek7JL*FT1tQ?G1~l-Z|Hf{Xl$i2_{Ae_tax@R=T6h5YDl*lm7DbKv71n zR3EM^JOOT%`Zh^^@6Hb?%!HukncW)lvX+lLj_-}osntAaUe3-E;Wo9wHe%rK7NPvG z4T$i62>$Ks>?LBpd2O8Iy(5ZRI#s5OeeQj8@)O!YlonWz*SXB=pu#JE@>@(Xu%oa& zY%AUwx*z+flP8^%JMw&i+Q;^aQ9-Y4j0wb`fk?cu-j!;qZ8bAk3z^ut?p5y{N{anm z2ntj979^}w_*^Y->NlXLE;dUeaJ#a8iJg+|14XIoPy15LtI5K(ev)xIDA@Cc-GpiR zS1W{MCd2)U6Z0fNmI4(Beu~2mYDlN12ABgej2%pz+9{KRysr_iQ`ofm-{d3iqq-=~ zcABCI)JBcG`U~xy)JN${9fGDSjC>iQo;h|CWRkkGQ%Nm0`HpCE#h`Eo1Ovd=!BR=p zC_~;?vBJ$=h_?jSRmXrH#0&EccnmanKNv$ve>04t0aE~;xkb{|kf%Ckt+!}8RROAS zhFJFq$ti3j$>bU5ap}kNnajfS8<kRpkOjTZWRsid3lmnx+s9M$)BexRSJp~$o;kZG%_GzqzC157b@R8D#wnB%z-s;ZG z!OWhd5e@cbbzEfzyx9TxG8vCXJAK^X&C2d9;}@h%*#SRzMaPNQ8>zU?lwe&CS z7?#SP#t{BZ^sg6u6pg_Rd#~UZ=|MjMM%8YWbK|Ho5=N2FXL~X_!p2nE#ma<63=g+5 zsQJC#ALfPzlrhgAUq)_d0&3GY;MWsnWYBWl@!YbiVytm#-&V41v=TvvUsF2A2d zQGf4mEiKt-FuMFNJg~>nmL6-Fv;GYgMLqkNEc=Rak4Ix|01m$Q#Rd0~h8eF}sBy=a z?HA#MRr+104ETfL7P%9NGnvsOezn{D6&u#v2E@h*&8)fU{3+zU+m6(4SNTc`Ct}5-0Xkrrza{@M=8~loS{<_#LVGz|k?F z!JPTlr)ofw@x98|+ZYp~cNZN^K{f7#055zPzAVs7WlrYaYqnG`7GQLI(;pu}Sd%AQ z7eq)&wJ(|KStbZ44k3Bq?NjG3${Q<3Dx#O0JM}?dtmAffAlX-Z=X;uKy0(w@uZ9d? zqNTA72Avl}c}2P9cQ%YlB|&6m{-D`m4tT+=Ixk) zmvNr*8*AKQsuy3Gs)lsM1W|P-_#v!Oee`*uoV=@rx7yProrbr0rTNU z@_p8=pKe=|;=3b0bGcFp{WfN|=0t~6Y^r{8roOza|t|JkqwsYh{?;e&mAO0KZ{4vF@BZgi5bI~2#L&~bVJ-iG>xVqARDuk1c;p>~_$jsVENcL*A zU#GgR*;=}B%hF=41#_OcHrhdRVRz%>hv9w>@Wuwt@el=;qvY>95 zq2^Tkg#0LQVxPgQ6KH0~ww-G2Oac)lV}74aVLN&*d?psJVLXUzW!t*f^#bjw+xrSWa3-LtE z6_36m=Od3d#6>@5NapF&V7c@0pd*B!+)*Wd>$@TO6tA4@vv1c+*8z1z?2{QA1-Wmv ziLO|?kFt7IX;L5mcNai%_~%O>R?`|Vr>b@PEA(%p2PKX*29_oY5hPR4m!z==5zJAb z^@n411urDa-tF{xI9}gg!rR7!P8cvIxn9%sA+p;Qbaf!Cj;DV2e`IaP@A4ox*&ghb zjR@SolQRJ8Ubs)Sd_h+61^j6W(Lugb1@uj~zIx>D*;9_B-TFq6Twu7~K|`A-?~TaH zR-L+b?Z_j?2adKeMWQqH@BoL=OIN0;k#O$)bHerNT5xx@w@mdy+!MFu9p*te>zx{i zr^H*0pu?}P|08K;R4x}}d>g0TQvJua9rejNc+e8+NxZTG#S%o@&Q$P-b7 z?hPy?8Xa+d&iMX*-bkOV&BK*>+j!p~s>W|c2(!v4>PFyrv<$|5W zrC_kw1mSMR(th=bEodKceVs2W+w@0R4cU>IWsP8Ogzy24u%U(00sTR6e-t z=j>-G7P7j}Pp5C=?i!YTVh46SA2OCYvFVA1U3pYQtVnEkKTnTJcL70Tjwg^1L0&9C8I(QWeCQHh3acvRrW9(Rz69M4sML@k)`vUgt08t`^9=;<)M@<{6$ zRvXnTdXok_z6xv=vYq25t83_vfOzJJtADm4VLk1GN>d!n8g#%fbF9BHUvMuRz^Qv` zIJWUW8Y?=?j$!TD{{StSjpj+0_vg3PEmP589e>1ny4m2-%Qa90E z7(~!egeiEpe`aEkEf)m5xPXvEO3(jjVGhUv?JA)2n!lW~nz?&Qof82O1wVQ6a-=slPZHolg*BL@Dn)(dP=BM_N9-p@E%qL9m{dxi)3i-&dAlKFRH>cBe=^OZySg#<4 zTl6zkbrndAyKMK=ou;%F((f^f!v`5&El7w@etmQVy#zDdes7DUTWp}p&8X)@NeFke z6|pVs<7~;HEn=WX68v4dYg|W=SC6BM04DPDKUrY7QD#pX4u^&w(fn|Mj&+Ispo;}9 z@Pv~Sy@!GNxJanxu-42hb5U9=l4n*gVrS^K&Gvj_<9T7#i?e6f2({KE!DcD7y*Eft z6-cub9dgo56y%<4c5g^~KaIUAL2B$Z6h7{slItV{c~0<2Ck81OAMb_eTEj?t$(>^;f<09GU69gAqU1-)^faRobxH zk`L}=ucX0F&uz`!hUfUe#PdFV>o=Xt(K@M%3KSfWcfXo@yE3r)MH z%t8k5V07mexxI~YZ3prPMg13J=*2M@?w;F!Ix~7ac@Ce~ z@WDDMcWR|OEq<%khmTZA;MFQKBV>fQQeQmLpWXZm`bC*E=#hw2Z5z7NS*uMLuc2s) zwU8!OQ(~C?ob*e;JH+VLeG*`2TcbnT=xTB!ZCh(^a3*wrq6pR%Lh$-U;y*6Xt*#>r z^8YA)7+A%=(|8**rcIVI-&go5J@^w~{QQH{=I{0pHTox`B5(pP5wwi1+D6v>j&v!{ zUEt(9U9Fb8GpO1?3T#Fc2cz1F#jm!O1+h-SVQ+^UoX z?S=dn&tw(Z!cu@q`gHEO+Jx``#b=?n#B4N_9>mOvs6c*GOkV_DYp^%hgMIMjd>=`9 zrxp2)Rg(4(6LymYvKd~_bD9p#Z(Y7wp#--@_Itp0Gv-o)-(v@TmR>%JhU-TnzbxEC zm$&NA<4wxp=|?k#g2cTL zE6MP%P6}Bo1k$%5Z!~7e&m?Jn+e~cbcLKy7c_kw@E4{SKd=3waF?j!AZvtK+=P(a* zQt-ypoV6m&9N;u~9gX=>Tt+_6y-4WZWtA7<PvoLt8Ro51u}OwC5VvgSiW%b{4y66+u^B^N43+H4&{> z+H4i!+d_tHT|WXTql()|115z8%)&*-caZ5huw#^F0Zowr%3E4Y+cT4?G(y7)r#$}s zUjP$L@im8L{ir9Bs##`zpV4SR_reQ-%vm{d-Z^g^)3g~H#WCkqg8Qed zE%6?5AVCnIaL}^3_B&$ZF@hJvbM?|=AZ35L5!Hr~5ltgP<|A;tLlN_RAxddr_klLA z5+;=#vgw5`@3v#wDL;_P>cl}PM3RfnRwe9y4wJr`zF6+U58dLuzG0S@Xf}r*j)XVu z)aLp*tTx)jq>IStDy-L3>0E4F=v?uTTAs|PLLd1dZoUIRQ8Zc%F;0KHamLq}!nbp- zvkFYr*nc>?f|Hz2d3XK@hZxI{lnF5y1WP@9|LNXn;8&ZX>5jL7?6C6A5n6}G)EO^3 z6CRorT8)YzkM`($-xd*5&CWm-5oEy1O$BePX(Zg2@q=Z}az3Q&-s6CMMZUA%2iog} zJ-?ykEB}~hbJP0I=%LAalaWxxTlUv?MH;!8i(n!Wav2GR4;i}a;5a`71^)YT-=99k z#aue~!f?`k`gY3W;UqzXD7T3Ne}-j-cc)d|UU*)DB{_7?9iW9#b>lXZbg2YKvGDZsb*a= zCMB0#5~USuEcH{i)+Xk-$Ky2JR`Ya9{aLHe(N1L*vzfN?s9*eFUWE|x29xyQJ(&ti zlkb$P-yay;fSls42q78H;1oMLkPNH>lsY*Lin5C$9)e(?(0}h$-(dRn^P4#ry=a~qX+#0?xa4q&=S@eQ$p`p%p0W1ZrqC;@ zZz)48&5SuSQk}S2`p1z-Fy?M%SCxbV^o9n!_y{j@O2x%Gw&FNzNezA{Ut1X#qo{T} z5I;M4Rv7Cb%zKx4G!5n{#WFe@0rQDCbVMLf39?>+pWeYv%Wf5++q{7^K8ug*LL4}m z5XfmRalrFM=D#+43&^?*E$0AyBev?kn8qzM@HCBtQ(B8}99a)p&7knBn!L0T*T$zI$K8Fz+b=vyX=-k-q0yIv0DvEuz|^6}S;p z^W$Ct8>~<=4!JG?_5k*s0IN-PA~_$>ZAj1u27ane`%<<*mdJa6#$mw$X%&n(NxDup z%7OA;rGqK13baG=)Oy=?s#VklD)61zG7x(KnS%wy)%h~{&EYL4Ze4~ZDwNqZOo^6K zj?bqw1Ch$-R|fszJA=^9dXt><+Tc^B-&JnT>ob{f$@x}7t!8~8Vp!OEWV594ROWOB zw^da^8Hq+YT`gu^8isDY5e?h9rAmar#%Oc4C?^UncN+dba>6OMF!jM+9j0IB12;B$ z9%mIYZLcEr!#ZP`+;2s2f4OhE{MGA6;+B<9#HF~aFE_vbvQ3rf)&SLA&62%B ze<}5e>J2#`s#n6vP9F6w;N$(9Lij61)dbJZ|CEQ&zIj(8)lzrFWH$b>=_1JTUHtKR zZP&Z@%z=iCHPy+dVNbqC&wm!ra=&qTW2%eOa^Wk72_B^>OJmn+fcFfQoEH9dZs&C= zYqoTS`Xlz>s&_`E==#$hoY*%gj<0()YIvy?{ONNA&3Em?Yix^A{h69i2yN>AnMAC{oiHt=*fG}nB>fUP*7Vo)VAmnXLxeNp&|%x ze)aY*P6K!6j@|=-60brghv(O)t-QB&lznwP4e||*-igmo>0j<&U(b6*=s!@shO5gw zE&21-)l)KEPja27^Ci}B#7Kg0!;@fB7vLwUzmp3$B6+Q5xGDcRyoqY3MxJloc|IHb z@L}epE1Tl2$cn2B|9nO22+wXHgbM4mTw-hv8hC#2nN365+j{)`%5eT?z#VJs>XcNe z4GM5OT$c9#S9qP^Wp>EwqcqM z$|DpFak!Shn|GWmRD{)CaAPY-VoQtkopVCj3w%O)#3dg?jN*&i`KRUTjUjDJI~+AO z-b}B*bC7lY6q!W2*DgxgVYN|6eXBPB30Zo3$(J*p zbVh|E)kyl|{!j|d-g)k4cND+}jy&;K4Lk_y`o(Xb`9yw)m_GSwRs<uKna&>gVC&2m?#{kH==>4PWoiWqHd_N&$SV1T@@GJX)m|=@Wg^9rid!LM zEq1zl-wpWYlya#tNt!|SHf=?cGzH}~JSx0@L*mI4q$0k|Vwza_QZ$UWRfrPaeS)r4 zbjkf5nC4WcdRhf9{WSRk1!)qutL+Hi3$18B=}lRSY}VvT((eex%lbs%1u{>~w@cHj z4eCZ`5=4~NbaI(eO%kA`&r~htK8*R69i!Ge?e&%?hxH;}kfL0hj%w4(;r+R){h1se zYa$QST7=BA zqj@NDKtJDl^1&z9H5r|N)FkciesLgFD8m$$v^?azclqJz#I5M7FPT4|zU_j*bE|i&a24wZ6|g9+nDV9G zoGWSZP5R2Yd=|+wZ^ZR2wfSAZ_CK9l+i^8_J@vW9wdXQTCjol|4al(vwo<;Vewq$1 z0!Pi2`e3EeN`*1U14sj*{K*+s(PKUVu(pwlo|k}F4Xylkvxlx5zRc=DBf(A>G1||c z7#|dwn|$@w{5u}Zbsy)5mheUH50-vVcvf80_3i3%1vf0hnC#N%={f1q6xC&bBtOJ( zS9~db-x9`k#;K&dbuS%o`W8^Q_4BoSW_vR$7Vr{*xUN3f@a&XLdzQ9$*ViT8um#{} zph+?OD04{R1ILRK%P{r2`G}fJG>REUp@0l|G*yVEZLDip97J=cxk#zm+Jq95k z#}XYAcE6?k=&rdq?+|txqg?mUy0^cr^HIz40WI1wlnr*=kY#T{$aK5INBbav z4c%S6F5-!=v3Z{ApjrVS`{bH2GqrlHS2L58@xK<#p6{$ zUo2uI&wfIWX`=c}h%L5A^7B(-43j3UZ#1O;rxSbMBxLyTN7FNhs$PwUI^+yw9vce+ zD9v+rSkII4>jrFA^k!m}m4`eh>H?H?awBE&A6NoSd~6AP?jvpQ=$RElZoK0EbI?}F zmNdHUn7=~CXWI4V)%KKlgW>9BRVF;)_b%clM`!Ba1d>Tf_OG=P%ONAWYB?PDR~1#~ zz`q{qye+Pk-o4I8E%aLrif!N_HfTKcQRgc^E*#nD{gZz7zeuYyi-cP8U_&~FBrCNt z6%BYC+Wu!9(y6eCCd@{ne!VB;mME}ODZ<16cP+`;1g{#mjW5)>x+X!e9KLK_LkEOC z{IK`7^S~W_u6q57;e8lWC$qsi1TP(Ryi?fmBgiV==T_CHK_XOgE5?M{pj|dKUpX!J z^Qv?cw@5a*A+BE2MuyqI@5bCqTE9|mSjf-Pj3~hXG11RkaZ}3H(srxY(N%>VSNR5& zSN?hb3d5)nF#%g#*RwekG`-e|UAqsNFP5@^d$z_PHZI=Ihfsm?P+pP`A}S1?m+0bQq1=2N8fr;AN1{H_*Rso~C6k468q3aJm0lfMB{ruv<;g z%Y_5d-nJ%d?ci%?RSOZ%7D=+I4$|6@6sd_wsWT5NczvSXQ8gIu+2J8-^iS5~ zNloWy&U?4-2SMkbPV;U;9u;MH_4}C0(<=>rB*sf+Zwt4*4VskC zyJ1xEnKWU_4RUO>d!gw&nIl7}cjM#C2jI0M5r+Wb8clMfwgha>F(JO=~z!nuR{q(!*IJ= zDVMUe+LL5DYvA-9%=7AP6(>j15@S;X z31+wJP&#G#BJ$c+cj>!}YGh0>AbVqEGAtD`zO2;B=LC?j!q06 zqFKNlKXTpMAoGF{PBkU!DXv&SU}s%Ongr{(ktSy$-*U7(p#}D5(bQ^L!gi@K^koDZ#o*P`?b*Q%my7a!EZ*LFA zGIimY(FI|u@v}|dJ6~&&zjlP9kSLRxci&w7ns`!MlTHqtF zD;NBpG(x}X9((5zQ#D={K$uB(+FJj?vKnt!Ae|TOO=co7{#vq;7Pmz~JJX~HHhgNs zo-Bw7J=_L7U|Rnvmfusv{Zd_T`-Z?Bg&3_ar=3)ImNEXBznI*?lBo#X^U6RIX{59Y z4?8OF^cEu3`Eyh4x-P{zCnD%9_!*=Rf}N4-YRLq{y>4Q}`swfw;A7ovHO96_D%MYR zet?v8_f~2jk&Qk<_X=m&RSpA#4!*i%fES%99o$=!fvV1IEbKd^ho6P zBPRb@r0DB#u$-3>cJ{_h zqqGp-M1cMC3-^AMh`r}c-yWyyZ~Ct6+$uBsoJ!9QXUHI%bQln?g*DJ)CTH7Pn@F|q zbrHG-a}w~(1=&G_Q*^eV;Glsbl z{gXK`%#HzWMKZYY%uY9gLcp5uD;H&JB_{gf6zwUk?vdN+V} zI*FRWLmv+lkxjBBg92>LNxyApDxGL&s{|3l#wr+(RFFSC7C`l0vjyIj8JmcZ$MX%U zQ6^TO*PR3a0Kd;4R|tRp#z_1BDeAl9;p(Dx<Uq5}nbzsL>g{g%HuZ=)HFtqlJVp zh>{>gi4tA(=n*Xu(R(La5PcZjdB5-e?)`tCefC=GIeV4;th0kaw(35|A>S3Ica3N< z2qO*oLqcl~RrIa1C!CD1Ka%dlve*ad$a_%ZnThC}!f!#fqkAb_-;r zIg|hJ7A$Fcf?BJ=!5yMt0+3OwicQ1q`xksVA?NQr-4=20T2 z`Wjul%{J>T@1Mw4cg=U0-0+kYGs{GFS*T8S;bC@@j1$q6v!!6~p3Vz}vNp?K8(Fic zKBG9Z-{ZNlc6?bUT(p%_Go|~qJU3m7!;T$}!!(g}bc&Z4+GevbQIR1QV7djrO0-Bc z9Y3|5CGFKV#x39-<%WR1rCv~uiMA)*VgomO;kJ<8+j#SR?xm92wY(S1XNSM+STbfg z44yiAytnNGv}29r^)N#VQ0pTU}kw>I5-dLtg+dg`J!guvig z1q`DfCYxATy|+P3{M<1tY(&Bl(k+lFY6_nIm`za38C7g3&aI`G_xT9W!M|*@35nGu zYHaw`_u>zYFvsM4yz<;6NybT{phcFqpxFr^n%(vLc2Lg4j6u6i({CY=~ zz3@mwX63(U{uPTs%-r`y?LO6=CAksn=`hWyhl8IvWXWS)*%o`xVFUXeO4mD&tEA4wPg zi6rX?C|-~h25qns>nB7ixv$s$%{2HsvW@?ozibvyEMeTzG|Mwgm$-4W7BpILk zBgVV;wwR_P_|BMZq!;z*@(Tb6_W{;!t1`su&Ew`~@aBrSf>mCt`Ih?=t5?dOQz5Wv z(}0`d1zSkr$J@W>cnCqf=)IXT)j z*T`WF&AWfjP77oXZUv+3-b5yu%Rr<~<2#L^@L->^as{a%*PpD_F!IzALxzV2T;eD0 zEH#8rs}v10*DT>g-+%OdH<%XeEZ*;xy{0POkIti*<>kQ@mU~}*DBla&zLiB#XKC#% z1{*Y$qKn!FY$)D)EF3>k0Mq58Jv)=$#rr($D*224m)Av(e#?F}q;LG%NepOJ=^F}< z4EprD7#pwj%HD|=-pP9g^WNY>-X!&yz6TS5<|MI$Ue9^lH(VO2TCVc1?$oYK zd*0Vwr4;j&6P`aJKV;G{WFG#rX%j*GXK#V8Y`{WmJoDKk9R~Vq)R54haVO^e1{7F7 zo+hv~-$Vve5O{P0m^276e6b-Ph97)S3v@Hl_xe#1BVqs^DkYAlvdM9dDkm&P4)$cq z*Z9J@{N6p`>+A``eL2lD*l{s8M$2J#Ec59dw4YF`$ykv{zndvyes?NXWSD9$pI$W> z9^FBgp5~?aeOw^-v-fU7Ct)l!1{QQO1VwXT4?@ZvKIEi}$>pB?g~1oUOxE`E__-8G zn`204JXep5pmLfb2)oL~j)loWjYhsCWsqHobk$+zmk%5T3J5^SZ9wYJiT7IG6;I*# zDm97Mlkp(KVLw)u8(cBZ5W)yrF|x@eSZC9>(k_pw(;8-;U%sq*YzSSUI!}$;y8Vr{U#}< zpSxzF&1tMb4!LGodB*0h%Zt0@exy7(Kg%-zz%(;{vOI6iQ6YPL$}6ULvysmrEkvSG zYoNjwp+g3Z5h6R;vO?MvEO-+|R@bz|2Pdr5`Ib(;W6>Q zD{L#Ac5r-Jm1<+uqYck<4WvN#Hucy|8ZJlfe1jV2zkY1z6mr=_s%MjrDFFJ4Zp>++{xc?*p4_{y9qjn7oqe|+twJdY~P%Tl;?EW3X7_O7o3z5l6N zwy>>o`Z;E4Z%lCFWS*rGpVO=B6VN-5Zg@tJgPiIRwQY-M-s2Rd_d9kIC@f?7IcoR> zy(cyt5MDePydTdaoe5fgsK)=G#U4*lRhSV^$+5&WKQfcJXtjxkz1D8y+Kb?Owzd)v)VbUto<=J6i^p2_(A{h}0F0rDzE|U+#*6`o#jf%mqw)S#U z84-?s$`j3K!i(q6jYXU{qc<>8_jdS|TB5Z89p>A%)w5BOs>QQ3e9k!~N6SwH6b}O& zOoK@uBB`{p8!ppDSHAsgAb+n?w$st1h5W$2JFK26Iu!>}^~4!%Y_`+0QkSZwvD|r< zR98>zZ^y;^L(AMmx$XtD&hIG>of22zqCcnIob7}`(7kTrkPBNk6AZgtvh{u^)qvis z*wFe?`?u_>#xik%1$X3ozGm;<$%<;dC9%Q7TQv$ z&;4fLEJ6z6I=>gi)?k%7wlm2L(8a0XCn*x<)lkF4Tdq*sEnBLv3Zy_!Gb4O?Cs2 zP99r>rE<%cGRxOFETY6zmq!y^h6NJxI2Z3vX(t80NR1y%3S6bqfM=7_VY*Z8&wMUZ zlxIl?MV~S<^$njHQg&e%AE}s15D$3D032dNZ5@nMyaoHuAiV$^4kW`+!*SB+d?%wM zIu=o8%#!%iOs32@PUO;Tp{Plhw_edz|52N) z|G_JZSGt3WFD(EE>|M#obN=KvO4$_$&1dMOWLO6Qd=tZ%XF!jw&z_vS@4!OofmKqn zA_>Wb0M8~LN4o8979K)Y*`U2*iQwX*KbrYrTH1nnH!uZ3vl1+BmG0bDqOMs>+~@oM zm;(3k_@qA#C)SMQ2NGNQiW-%3Vu7g3QB}q^wFU~JU-Y8ihIx2ib9*TD)+#2)`1p3Z zD!4o#^odtb3%t2sXs>71s{f46V|c8te%KgjG&4Tolu0ipkcmqRtJS-pnz|Bo7%E&;B`whCDqP;1Di^i;wQz4FI@~SO*}RVG^uIa>ip)naRPblXzb{y z?x5~u9=%@}>dB%Ee z^8&Ny^qU?MnYaaDPE_C}4qoUpTfdg9)!q)*HkvwTi$j@Z;R3l(V48HzSZq)KgJ)}o zpFrQz`6UA!xAUIY653Xs63!4~C3F&Wy#&WzI>+ZOWf9qaa?8*-CV@;~ZRo@Vf`7F+ zm4|8)b>T_&z(Weu3-MrP+)T4^gR%C)#+OP`qz6uvZVzE=9}d^CpITxe*|7{-`qi)g zZD%`1Cvkm|h0)W>cFza8z;4OQmIBh9TmDuT;ap}y)3fj5TNGOU-E86?ZH45pj}olw zA<@<%X6e;eMrE@a$@aQq`Wn93w9yjwh=~%33mlL7?esrO>*V$&Ljt z#W#-FbN*h!Z&r>eJ2)7MO)T-Nj~p1g0ef*!$J+?zfHzQ?k^5W58Sfl z;zyL=K*9R?4ExenqV}B^3MIJ`ZQ%3FyVbSedR1vhSTDpzPVpmuFDXu9{lfB;bz)t? z_(QZ?ciI9uzK$OZZ;?cDbSc2btMzHX;>g`b@=a*%zv=TpjdAza31&i^=}{Z_$M{QO zT50+r=Z~6aOK0*bP-{!V>;q%s^xrvQg`>bjFludzcq}t>X~|#fW$`Cl^|Gl$Q|e;F z;iXq(yIk~@nNVLEr@hdxTFI%1mA7x-uB$o)UfY9 zQu|hxRav5xhTZ-^5X9f!3F_ZhVU^N2U0#BarH-htA`eO zMrl^V%gWWkAxM(;!1PU6v405-bt)etjkl|}cbqAOwZaMe0oSS{TNhbFL~Kx2jd2&e zqx8k8K7O;H^bp}@fXqWR_HG;YaMhqi7lnGkn!0#jv?$4C#|N*L&J`#PaxFc+xTJ?F zAH7y%GvttJZANe>Vcm&ew;w4zlp>6~Dw?*Uar2wB$rf}>WCJ#kn^?3U@|MX#-?nwUgYI8?N}(PrjS^mZ^&q~$BvgDFb5tM%zC@%Hbl$szCvMfz3-$>=B5A6FSb zYQBl7ABZAUR@=v}JA52pkpXER=-!}J2R#=NZ%@#-$_1_Gwu5c=C+SdUI)oW(7g_sL z4gYX{AFYu&fwRU&7q&Qr(dQ^yrJ*e@MgejCRMr}Pe73I8UD%Go&?w&N^{KmV|{ zkhK3!cyi}H;^k~}6#P5%8hcyO`}YA7%1zQ;iP86;IWIjr5l>(8-I5($xzJK@`_xNw z9`yx1O$dL2mOc^ZY*o;X6Z6s-HTB29j0{P#3p+XJ+bv0pO^sm2?#lF)uFmNVCSjvE zgMhxc2@FFoIcD_kZj~|@VgJ6i1RF-xv2^l1>;AZ^-cUd*EhonNOo z+p^#AHsW)EEz=1| z8}s3wbk}}o@}M=T+6p6xz5WR*Wbc4;hm36yC8wEcJH^M|2%Vs&UgGY$>{w{zdv9@x zN82;U344i$^^*nlLW*>c?6A%8qnry-B4#`7R#w5E{mB*54sO&35-B|1vQTALDhg7s z1<2IypQlpboM&V(vwKVKxhO;k7fi2vq(fs!x`{FH*(iYDKm6gw=>sa+rYWeYR!gKj z)^mO*{Q1FP7_J{zdI-Vu=*oR$1D)yAo~G-(D)tLcrgBu=YIu{IkvMdbK{zq{#mR;T z*k>8G$cxd{M#1^2im66?k43ow!8?W;g!(S)4t{ncUo0>g(Ic4f&XxlsZ6Xdn;8Y@N zVB-9o_}v>5Bp-9Lb2HzAFU$&G$MxC0E@3SvJWvOZCh*SbJVkc=)2^K(0;YQu=G#+nLuji> zQNHtl<Ha1>sZ*GTtHvy zGuyPAzR}_}Q;Cp>iI16TEyBCG=^-eb1SU!6j>bstkfDvI&)(05ml}@10-U9DMgiIIYD<>mfmGdv# z*a}Ga1=&1_^G{_{iApE``l(R%oky+^^5QR~pDJoC-b`eKvG0{^`wdoBUxav8`pqpJ zFt}LONT5KX#R2fOL|~M4=#~PB`FowM5x%#? ze5JBiw{|Y%rHgir$D&jkH$eJJOEv9I?Hs9`)P{+?{Bc4!J~A>up53eTXP1)pS3W7q zx>^neDo`$&k_-YCrSR5@Qa;e5!g~Uk-sRLpml*VfCp#9RHivA5loGh}-$A)zO62)R=u#(Ee@uEeJ%Q(pY zy%=F&oe&iNG)5a+ULo6_O8diH-jZVl=t#hyAE!8Ld?btt8TK|AcJY>vwI>zJB|x>` zb@9izD8HzSCxF_WNvEyEuS%FNkQEqeYu2>?j^4~jGj0eK&xa*WBG#!G@q#+2J&;=O zh!2d3M#Y`5MWT86Hj_wun1W-3a8Cg6OSlxHKrSRkXLN2JL*Ve}V5uo&jX-Lcf zz0#uTE$&FkN#D zB#GD&B?ia|I()Cz)@zXvDb44aLe?r3;xng@PK+t@22zyi2V&8sEVcY4r$k-A>ddEy za>F}B>TqbZf3uU^AEf9Z7xPzcqYC|4dy7>j`>*9q5FZ_)MPb$wL!J+h4Q3h}qf;j|X zUFroZc}>S-MM6BN_MRNwYz;hHH^Q{-BNE{<6qbWk{L*eqLzHjAHUri~Y;hZdn`-Bb zt!k1xKpT_$L}h4ev9SES?M9q=p+Fc}$>RS4XSbgd8IY^*IODeC0XxvzVD_v37w`%( zq6!Bf1zp9c#u<1&`9b^yHM83pC(FIoU_Zt9=lz0ed}UCyZ!MX9BrJ?-jgG~;O>no3 zMt}14@_>)35HOU+(8NDdE6XI6_atIQEp~F9&44J;OHY*y6Apx4P{}E$U^E!BMHGKa zk)d#sibY()*wti`f(Fs5xS?bW5+4KPu^Qrb0k#Lw?lR-&Rs&*YQN``L!l9qH)OlY@ zM^b?mu|M%(@RxvnU@W^#z321!#%(53k=L7gYuAy9sW;++m@Vz2_8<&9n%_J%7LskT zfF?jRf8vQa-Wk!kdx%P_R$bhV?s2&dqTe&6qg^sYM>AF2h{qZdh7_hj! z(0ZO|4dwXv0@CjQP@LSXR#BT@9x9ueM}>Jx&vLwN6t9=`>h_xa4R6Ks3V5C>z)0Hu z8_)pjOf1sJ0U-;4>>oZ*o(Xj^2ndbK0HEdFZUM>X!3vtZB)jg9k@7;?z{1PcONxuT zL~;kNO|sC*%hfC#8sZi1C?TE4SMQ3P6VM8=z>gSt(=BjWKgDFp7K@YBs6%S|yC}1o zqJ~Sq&0h9Whp>K~kkXA&LU9r|S5neuj877KoSiP9GA%BwhSN;^>kUmL3&jxOmwvTo zR=hw@Wf`pPHBe$NP9mLUTOt7j#~qMdu$<)j&Po)%bJ zL>au_?{LxR=7D~ErVyL0|6Vx#fu<{oj&Zjj_^Uk#f;7Z2(2m*gISxX*heL}8$FxtY zVflep?ZCk>`Hw6iOZFY^bJf>HnuAc#BAYpncb5%o&o5aD9FUp7yXok=*J8``idNX|uR`;7{x92Hvpy2N@N zT+2X`jq!@R0f85B;JEP z{FqquQ&xN%GW8oVMDMkQe_CxmNRxzKuKM`HZ<9DQ>jxJD3B172lG3XLvi9GIx~?PR zkyn(I!?U?Iz3M zvc8MUr;L!?6TYtZ_P0bkGbtz{+LL@*zs-h5XYaj;7QIv z^l1g(WE|&UNo(iQOH7`w-b(!0nk;ghoEVWd!fwQOk+)4W020cwV?HF~{U(j=yj&BD z-XJN}JM!$hH<9*N7PNQOHtu#s?Fdlu%)ZmCBD4ra1$%u$PM*_K+xcDI=2{Qh z4ACU>zz{hlO|atYB*RXGVI8)?=CgcRCU6i6Fn0Ws+)+Aq`QL(xu-b2=Z;bx+;K^sA z-hu$c_;rpA3u`A;)-k^>{F@zcou6AWq5p@5^#M`AvwbkAec~mC(o|`DLo>^03nbwC zN#HdinDct zpyU$rNQoabk+d6Ndis(C15i|9hbGE*v_3Tj;*ocEw>PB{udgxp6PTL5*q|h>i-c;p zDZ|Ow84xZrdMui8a+~9F#bWd6vY8~G&7+K}qQd)CIm})f465)_^<3-xW5o_>AZYi) zE;Y|F{bq|;h3nSX4HKtBNxykBA1vNk+YrPMO8=a-LpQ<3G`U5L6{shmP$;a$H`QZm#D#o=|>U>0E5R9TI~<9RO-c zi5h>UU>0Nwhd67b(5Q4%9%e5uq1aRgaRkb*-5h}Mz51$+?XvhG>OWHB?bi0CaKOSN zn|S(^NXg6KyQ3eOgJ2Q>_)!BtlUG`|u;b*~%>Rn^eImGPHbc8fIPgjugHMLq5yxY5 zCamYZGg7KUu3GOsPhzkY&QE?<)sQK0srJW>UvHaejXA$0)ER{NqUyBLI5a~gDN|?A z3CbpL<-1emq)qOKt*whH7<16#ZbF&@&+zv@AYb={ZV}&q-glKqsI``Vdjx)aL^d*V z_~eG&7zG{tgzncj=ri`WGJRn`!Fr(r#69EI`fvVpHO!Q1l_&hsuYxa{y&`G1SM|jJ zKq};V&8lZ77&xPK@*2$gEgbOR*vx;89%5s?N3j{B za#`+dz4r%T37FnI41P~0+V53ke{ue&ivJzrgd&bS@%wYJq5+k_A`L!@h{MmnaK`$L zSv^L+p^^O8#dF*+?q281Ca>E$&G$(YxIlwr%YO;V3GsmWe@}0kGueC>%BDF@)BJ5&r+HDT{^8R!PuLV z!@PTrSCNd}dbrTg|Nqi=+^}0y;eVqon;MK5@koOXmxf02Y;ccD?ldgXIr+%Qlao?5 z*Y86@h#KC^vwu9*ol3Of1U?j)JvE|O~U06xl zk4)V^X%;YpZK0}@~R_RmgpFeMiKCt-H;o+u0Tt6vwcgXuhY(|;}**$29n zMx;E^8GQGD$Ixz49#XEI3N?G(S}@X|s~m_Sybg|*Q7J`OH?&F-pzaN=;XO5FIL9VT zBZ=DvNWnjAy$wYJO7}gffs19M>I(Q~lp3wC||NJNX%}s|oIwhKrzC+%*_7 zBrVv7;-cVZgn*)%B2~vdnUyjIhhNdGd~OlIvhYkgV0{0-f)fFSAz%I9h=`Hm@Sekn{_29^L?GE7 zL032ZS6+?D)8v#?euARFmjPAnL>QomO<0Wf? zX%Zc6F}MM+DVAhPz-edS}0JxaSScwQ@D1|dfOcW z zw6d6XaE$;aX}j?egBH43dH50LfB9>cfA}bx$u{RTmnXdL2C$CWwbwKMi^o}c_z|?w zom7A}Hd{t2Gi~8Wmc_YEkD}QeD-S+I^`=|EDr)>xSA^OpuS2~YvQ|M#Ww1*1rdwEf z@F6stYin1XwuMUo+qX>GIIc8a0#$Ii9Oc7braE>TL>4nOL(k8C0@W(2it__1`wv3o z2u_@!`12p*O-w>$sgB*o$^&1=<#NfkOKpQ|3%6;BQ@C`AwYmQ^pJnyX15|E12z85@ zo1^c@ckt$Bk}OoTP@sOvZip=T=Z@k{P11YhyO`M-s9UNx@27mTi-)M(n!wG^(|hE5n8^v$*;vo>sf--}^)Pb__@_^zQ5`cqMemOu z!JL~-AP=y5*L}E5wrOA6l%NKSX$RMQI|aOe%7Htm9JnKfTUem@==braK8*KJBM5$m zaNlPkvSi+T9l|i4a}IB2isDayfLU08nxk^-7h-!}(Duk&&tlrcrBT-)pgOi6>JFla zuE!t4pPop%lw@U$;06b=eIrn_m7r9neEa>>hewl6D%Nqvuy*t3p;EycKZBW@My+kmD^MRErF{GS zP%1;IMDF>gAq<;3odVU8B#q7LY*OK)I=NSmk$>(fST3V=rF8GNh=z8i4TBd@yX+cR zTO<3|m(!xG3L@BnVM_OY6Rj&Om&rf>TXL@)gQ(s-PCEt4w1aCda^gh73i((6K>np? zpj1Y!vU2Cwumd|l4AJPNaW}oZLiUY6Hyxv3dj=@o^;OgYr82o!o+bbCGe}rT?YBMC zV-_#hGkByG4*XmW6%%(gs^BdC)LBp=>Kj5G)GoW4VB$2DeV@Y>iumKF$^P?ikhEm3 zr=Qa858{G6)M{i;yhh=*7m!+*xHK3)Kvc1f3)Uu<1hDmL=xQO^fgMC^tB5i2o7xC} z`U6yaZ1(`FLNvG&JG2X&rSO;E z@2AL&zf0HO|A<6Udir<)>iLL9ND~6Y^HAr=_Vr_z7I2kH+gk!i3fSr1njhUotrlX# zDk5G>%dbI}Xyj7-nX^c(0nx@=k_civR4slcOD3NuoSxqD>x0<}4us0o1lgV*jPa9l zVA3O6L24nvN2ignwn5(RX}q8@KG|aLdErPq>aB15)$y}r`}*+w0GvaNhpg|Wt!v*g zH_J#IIjqHa0lEHusuLfc7cPmQSX#!$8^5Zf`q4N+cL6V7z(o;i42ZWCSJKIQs4=)G z!t3fH+ucn#@nPCwZ2<>Z6MsDH4A+#Y5>8Hlt&txbj7y2Lh%xc9vo4}Z8HsOg7Sxg7 zF^I8sYBN(wWjHS!Ak#kRn;-|bgj@eg%gea(D!HMHP*tkS%ki>%Ug}sBwGm39RkMS6?>6PHlC~3u%+enbP(xS=Q_f{TeD|R++bAI zITPJ&gxPJw!N!OP#fjjRJ4~Cm%9X z$6H?^w+Z)_QMYgU>^uL0bzk`t2d4j$tGM bzajn&TwJSUBWr%r00000NkvXXu0mjfd4XUp literal 0 HcmV?d00001 diff --git a/prompts/pr-lifecycle-agent.md b/prompts/pr-lifecycle-agent.md new file mode 100644 index 0000000..73212bb --- /dev/null +++ b/prompts/pr-lifecycle-agent.md @@ -0,0 +1,128 @@ +# PR Lifecycle Agent + +Dispatch this agent after every implementation agent completes. It handles the full PR lifecycle from push through Ready for QA, including sequential queue management. + +## Usage + +``` +Agent( + description="PR lifecycle: #", + prompt=, + run_in_background=true +) +``` + +## Template + +``` +You are managing the PR lifecycle for PR #{{PR_NUMBER}} in {{REPO}}. + +## Your Job + +### Phase 1: CI Transition + +1. Remove Dev Active label: + `gh pr edit {{PR_NUMBER}} --remove-label "Dev Active"` + +2. Poll CI every 30 seconds until complete. Do NOT use `gh pr checks --watch` (it blocks on QA Gate). + ``` + gh pr checks {{PR_NUMBER}} 2>&1 | grep -E 'pending|fail' | grep -v 'QA Gate' + ``` + When this returns empty, all CI checks have passed. If any line says "fail", CI has failed. + +3. **If CI passes:** + - Wait 15 seconds for on-unlabel automation to fire + - Check labels: `gh pr view {{PR_NUMBER}} --json labels --jq '[.labels[].name]'` + - If Ready for QA is present: success, go to Phase 2 + - If not present after 30s: add it manually `gh pr edit {{PR_NUMBER}} --remove-label "Awaiting CI" --add-label "Ready for QA"` + - Go to Phase 2 + +4. **If CI fails:** + - Get failure details: find the failed run ID from `gh pr checks {{PR_NUMBER}}` and run `gh run view --log-failed 2>&1 | tail -30` + - Also check the Codecov PR comment for coverage gaps: + `gh api repos/{{REPO}}/issues/{{PR_NUMBER}}/comments --jq '.[] | select(.user.login | test("codecov")) | .body' | head -100` + - Notify the user: + `notify-send -u critical "CI Failed on PR #{{PR_NUMBER}}" "" && paplay /usr/share/sounds/freedesktop/stereo/dialog-warning.oga` + - Report the failure details and stop. Dev will fix and re-dispatch you. + +### Phase 2: Codecov Detail Check + +Even if Codecov check passes at the high level, read the actual Codecov bot COMMENT on the PR: +``` +gh api repos/{{REPO}}/issues/{{PR_NUMBER}}/comments --jq '.[] | select(.user.login | test("codecov")) | .body' | head -200 +``` + +Check for: +- Any files with new lines that have <100% patch coverage +- The specific uncovered line numbers + +If there are uncovered lines: +- Notify dev: + `notify-send -u normal "Codecov gaps on PR #{{PR_NUMBER}}" "Uncovered lines found — check details" && paplay /usr/share/sounds/freedesktop/stereo/dialog-warning.oga` +- Report the uncovered files and line numbers +- Stop. Dev decides whether to add tests or accept the gap. + +If coverage is clean (100% patch or no new lines), proceed to Phase 3. + +### Phase 3: Notify Ready for QA + +Notify the user that the PR is ready: +``` +notify-send -u normal "PR #{{PR_NUMBER}} Ready for QA" "{{PR_TITLE}} — CI green, coverage clean" && paplay /usr/share/sounds/freedesktop/stereo/complete.oga +``` + +Report final label state and stop. + +{{#if NEXT_PR}} +### Phase 4: Queue Management (if NEXT_PR provided) + +After reporting Ready for QA, monitor for merge. Poll every 60 seconds: +``` +gh pr view {{PR_NUMBER}} --json state --jq .state +``` + +When state is "MERGED": +1. Notify: `notify-send -u normal "PR #{{PR_NUMBER}} Merged" "Rebasing #{{NEXT_PR}} next"` +2. Rebase the next PR: + ``` + git fetch origin main + git checkout {{NEXT_BRANCH}} + git rebase origin/main + ``` +3. If rebase has conflicts: notify dev and stop. Do not force anything. +4. If rebase is clean: + ``` + git push origin {{NEXT_BRANCH}} --force-with-lease + ``` +5. The push will trigger on-push which adds Awaiting CI. +6. Remove Dev Active if present: `gh pr edit {{NEXT_PR}} --remove-label "Dev Active"` +7. Notify: `notify-send -u normal "PR #{{NEXT_PR}} Rebased and Pushed" "CI running"` +8. Report and stop. A new lifecycle agent will be dispatched for #{{NEXT_PR}}. +{{/if}} + +## Important + +- Never merge PRs — dev does that after QA Approved +- Never fix CI failures — report them and stop +- Never skip the Codecov detail check — passing status is not enough +- If anything unexpected happens, report and stop +``` + +## Variables + +| Variable | Description | Example | +|----------|-------------|---------| +| `{{PR_NUMBER}}` | PR number to manage | `114` | +| `{{REPO}}` | Repository | `cmeans/mcp-awareness` | +| `{{PR_TITLE}}` | PR title for notifications | `fix: prompt sync owner scoping` | +| `{{NEXT_PR}}` | Next PR in queue (optional) | `113` | +| `{{NEXT_BRANCH}}` | Branch name of next PR | `fix/intention-fired-transition` | + +## Queue Example + +For a queue of PRs 114 → 113 → 115: + +1. Dispatch lifecycle agent for #114 with NEXT_PR=113, NEXT_BRANCH=fix/intention-fired-transition +2. Agent handles #114 CI/labels, waits for merge, rebases #113 +3. Dispatch new lifecycle agent for #113 with NEXT_PR=115, NEXT_BRANCH=... +4. Repeat From 403f223ea21f16e5aefbd728664199c827fef4b1 Mon Sep 17 00:00:00 2001 From: "cmeans-claude-dev[bot]" <3223881+cmeans-claude-dev[bot]@users.noreply.github.com> Date: Sun, 12 Apr 2026 19:16:54 -0500 Subject: [PATCH 2/2] fix(prompts): address QA review feedback on PR lifecycle agent - Add checks-exist guard before declaring CI passed (prevents false positive when checks haven't started yet) - Remove Handlebars {{#if}} syntax; note to remove Phase 4 manually when no NEXT_PR is provided - Add git fetch for NEXT_BRANCH and note that Phase 4 assumes a local clone with the branch available - Add platform notes section for notify-send/paplay alternatives Co-Authored-By: Claude Opus 4.6 (1M context) --- prompts/pr-lifecycle-agent.md | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/prompts/pr-lifecycle-agent.md b/prompts/pr-lifecycle-agent.md index 73212bb..6096a38 100644 --- a/prompts/pr-lifecycle-agent.md +++ b/prompts/pr-lifecycle-agent.md @@ -25,10 +25,15 @@ You are managing the PR lifecycle for PR #{{PR_NUMBER}} in {{REPO}}. `gh pr edit {{PR_NUMBER}} --remove-label "Dev Active"` 2. Poll CI every 30 seconds until complete. Do NOT use `gh pr checks --watch` (it blocks on QA Gate). + ``` + gh pr checks {{PR_NUMBER}} 2>&1 | grep -v 'QA Gate' + ``` + First verify checks exist -- if the output (excluding QA Gate) is empty or only whitespace, checks haven't started yet; keep polling. + Once checks appear, filter for pending/failed: ``` gh pr checks {{PR_NUMBER}} 2>&1 | grep -E 'pending|fail' | grep -v 'QA Gate' ``` - When this returns empty, all CI checks have passed. If any line says "fail", CI has failed. + When this returns empty (and checks exist), all CI checks have passed. If any line says "fail", CI has failed. 3. **If CI passes:** - Wait 15 seconds for on-unlabel automation to fire @@ -73,8 +78,7 @@ notify-send -u normal "PR #{{PR_NUMBER}} Ready for QA" "{{PR_TITLE}} — CI gree Report final label state and stop. -{{#if NEXT_PR}} -### Phase 4: Queue Management (if NEXT_PR provided) +### Phase 4: Queue Management (optional -- remove this section if no NEXT_PR) After reporting Ready for QA, monitor for merge. Poll every 60 seconds: ``` @@ -83,9 +87,9 @@ gh pr view {{PR_NUMBER}} --json state --jq .state When state is "MERGED": 1. Notify: `notify-send -u normal "PR #{{PR_NUMBER}} Merged" "Rebasing #{{NEXT_PR}} next"` -2. Rebase the next PR: +2. Rebase the next PR (assumes a local clone with the branch available): ``` - git fetch origin main + git fetch origin main {{NEXT_BRANCH}} git checkout {{NEXT_BRANCH}} git rebase origin/main ``` @@ -98,14 +102,17 @@ When state is "MERGED": 6. Remove Dev Active if present: `gh pr edit {{NEXT_PR}} --remove-label "Dev Active"` 7. Notify: `notify-send -u normal "PR #{{NEXT_PR}} Rebased and Pushed" "CI running"` 8. Report and stop. A new lifecycle agent will be dispatched for #{{NEXT_PR}}. -{{/if}} ## Important -- Never merge PRs — dev does that after QA Approved -- Never fix CI failures — report them and stop -- Never skip the Codecov detail check — passing status is not enough +- Never merge PRs -- dev does that after QA Approved +- Never fix CI failures -- report them and stop +- Never skip the Codecov detail check -- passing status is not enough - If anything unexpected happens, report and stop + +## Platform notes + +- `notify-send` and `paplay` are Linux-specific (freedesktop). On macOS, substitute `osascript -e 'display notification'` and `afplay`. On other platforms, adjust or remove notifications. ``` ## Variables @@ -115,8 +122,8 @@ When state is "MERGED": | `{{PR_NUMBER}}` | PR number to manage | `114` | | `{{REPO}}` | Repository | `cmeans/mcp-awareness` | | `{{PR_TITLE}}` | PR title for notifications | `fix: prompt sync owner scoping` | -| `{{NEXT_PR}}` | Next PR in queue (optional) | `113` | -| `{{NEXT_BRANCH}}` | Branch name of next PR | `fix/intention-fired-transition` | +| `{{NEXT_PR}}` | Next PR in queue (optional -- remove Phase 4 if unused) | `113` | +| `{{NEXT_BRANCH}}` | Branch name of next PR (optional -- remove Phase 4 if unused) | `fix/intention-fired-transition` | ## Queue Example