From 6e5644aa8b02c88fe32ef656ac533d32d33ebac5 Mon Sep 17 00:00:00 2001 From: valerii Date: Sat, 21 Feb 2026 12:38:06 +0100 Subject: [PATCH 1/2] Fix review script feedback --- .../multi_agent_review.cpython-313.pyc | Bin 0 -> 39947 bytes .github/scripts/multi_agent_review.py | 33 ++++++++++-------- 2 files changed, 18 insertions(+), 15 deletions(-) create mode 100644 .github/scripts/__pycache__/multi_agent_review.cpython-313.pyc diff --git a/.github/scripts/__pycache__/multi_agent_review.cpython-313.pyc b/.github/scripts/__pycache__/multi_agent_review.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85aa8fc56d66fd68069017a147030a4099d7753a GIT binary patch literal 39947 zcmch=3s_uNb|!l2UDO+@c!P9!36OXQfgT`P5&|TU07)Fml7(zkK!K2;z^6cuvfWLm z@1#+8+A78EsFZkOocNnYo&I9_CUZm2WG3oIzN_TU%stg58(hseO4>Iaf8V`#aHRCZ zJ-PS(Yo9u&3aKR9ndFwlIs2UbUVE*z*IIk+eID5D77o9){}36!d4=PCLJ!K%l?Xi0 zXK>u>Tm>g^g60?}%6E;ZVb5Ao%kDZ+hr9Ne{-{AT@RUY(%y`r!npjwW%zQLM%s6Th zEk~`Q^{7p>9kq*g7NR@1jdX=w7^SDg$i zA;BzU?9|FnV)p0AXE~d#=F2&oTgrWoyjH=c8zj{Mn5t~Bj@CfPnE zq_k7W*^5`==Fd@6?*C9t{O71C?};_#_kDVwNoe3;DioeA6N&^)lU^t; z;4bLJa$(b1lTdWF3~x5GHx&X;Y1o?*_GSxv(h8;QsZuCIeEHd2_SPs=u(wt0t(@VYO}DF;x1^!ttsiZvGm&#Z)|7F3>ay&r-r?+NxZk8wVkz`Ejydh zq@{TJ!y7p*dxIRcEJv+ScQ!+)XLVZ7X0XzX!gdx{w;}G4@|ui714~se>|ijks%>dx z@3#w0XA|$x`(*4+7TX}~!n;SxWa%DxhnDVUId-JYu}3L6ZC<0$%mhb+W7qbR8lj`kDDGkX zRUpB};cT;TxDuly96|d!Q~E;f>tbza5so5`;)~AG+hgqQUZGn}O>xN=nOuUD<2ZhJvF{f z@SQ!V_FxFT7{=cS{!-yl*5nfWtiSC-YMN2B<`J9}#x~@Y@t^XaXZbr+S}r(GvX}jvbTBr zTKkXp4YEXWM^EeN!S=4hhX>m_Tl<8#Vb6B_;@R~2L|@0VgZS&}IHklk?4Vf7@$T-{ zp4LHcUw0_y{LIXBOMQLAj@@2nm>D1RjbX$UC{ACE>n5hg#4_aAOj&brnd3gx zXUunnhr?dUQuub+H@CjEHKwn9fG94mp9UtT2ShL8U+27Bp9%`fA^#LKSHwLZM1Q0t z06y{)G=f&pHEYYcF@3e6_Y=eH%xLYNxN&?eFeUn{wQ;jQFg!H^$i$5R)|40&vrq&g zjQ%SiiC{cK^!r8zXZ%-Y0FVmA$p8^c5fp2b3(59D>h~PCYO;Rir7ykol~=y>%Bs_S z{R`K=uyA?l%KR53=RwJQaMfxT%aJaw_laY{VT9BlXqYqM@4;zw891Ou^r>U7z9Js2 zsRwSH)TE?KgBeecWx&w~G+s@gFiUS`!3w(FJmerlPb*CjJ@Ppi4losuvSR1l_|tG4yV zbwK6AKzc&-so5E^1gYYN;q(6Ciz0zqq-jbdyKNyVb#MuD2YuAa6xFtd4Q=maszH!74MDxdOeY1g?@kxINVOv~( zVQM@eZbuz)1K8vEbhS>br6E3xFQZ#M9z?nj-UVOBWsX}jXI*!E)v=o4 zn0JId^NuxV{`D_j`(om@>TrLYVaPDfwXWMZbH-O*{?g0g7h|TpRfqHX`D^E|PhFde zj4hs@pOPHA=XGn2f=K^D**B}+s#5t^&* z4LK~9f&M;kZ(D1BNBi>@@KoJ|KTxd|+mJ+T$0bO0CPpxB#+(uu_RaXkBX~<1Qm`Bs zwAy5uZ}{@1aQ2tKxaxGxn*rnbXXpL%%~I~xsCBEP-zq~jl^g1jlXZX~@FZSI98iI9 zIu4ma8oJ)N#;))`ljxtG@D2OLeJC7sK>bN!eesORkwJfO*f;GLyAj2rix2<<1bQ@I zYYz8EcEqfkR;=YwYkADNMbdAPN5e1)I+%zXK{b=pGw}?f29V)kaF{xy{D>2>&V2~@ zQRloG>Pnq1piALt1lvb`eI$lG@*7aO8#s*)v#H9>`j|awWAakYt5Y~opUTCOX#|x& z5x3i}5ln))Ss&1E`V^j>jt8DTBxE#ewOqj9HS}dB>rg_<@TB8vf?lu)R`6P5N`E{` z&g32aQ7uyelh@Qo^YSA9DYIXiTv<=b zHJa#kwYwLSlGuX+L=t{zdV=gR8M4>=rpN0cX!%8A95gwFY;9A48HirB{a2^`A(wA@ zdSV=G1;Ts%h2RuTLdS)EOmTXW`{O3!m3|ST-K2l!{L~1zlqo@VY?>2yP<>|6ADo^F z1pSN!gtngYi2(>kEqn*a^eV5!@}rvzQszVTiO1ooK)^pt%}C6XeAReR zNej+LZ?!va zoE0Y~#)slyR4>l@p}m;; z2(qP;S1%u7hBIW@u?xcpbvx!`uzcV_n4EveVRBcHPop_uQo2GqN zsceV^{uimn;B;I+G&OQn6c8<*qBI(RkQfkV_{2}1;4FaE;1mO~coFe5Sp-jlSmwC< znK`Rjd8=8uADawLY0csX6IMz zl~H@;B7)mjGdD{mjgqTr)tSAX!C6bzIfKIt}Iv< z55;opS8{hob9csach7fz;4WNqxuu+gce3x8Bv0o(SJ$e$@aJ~Uv2Vq`7yo~Se%P|E z@4L2d#mYym`~yy77}7u>k&3(j)0w;7(&@9(^Djte2c^PuF^5kw`+l`%b*@-9N3EMF zZL6Gi?{e#Mqf~ex<{)7kNjwy}kCn4)>BXgCsjwyH*ejX${%T!^h);qvRNwOyx9#S> z*U-AHZHw*)MHzVb!4^wflj#TBbrf!5*WH^s>UBTN&TikT`{CAHg#TRQ=y2-(+-aw9 zk)va)?$5Ux5Z<8BsFU;^R7CTb%KI>P$x=l+6=%b=je&pkC+Je9^>p$2WPAYiq^$$9 zm%^FT#+#DyR0bp-b7<1iJ0(tnN<)60G=7k}%mgrnPtVTq|wA$u6AD7rj3}Hgexr9)o zA_InS>WK zIjg zlVI$_65yjhuR3Kvtv;pDI*0mA!kA!UB?0bUgP^a4xEV0?5PTt2QVcC+^*{(>u@KxyP!zOk3>FYid%Q;E zM0t8B8zf>`ITEI-GkQb1bLY;NqpuCc^5FU2*lRGZnP2Q_vE)Ec}D zBM-umCT5s@k7mcqmb*`=E?JM&3Ifpd_HJKwvAI>J}fMvZ+K=<&Ps$jI5l(u(uDYHNF1cU3bcQY`@m|0 zVdcKlb^Y?S%U`=X*ST)w%&rwvLDW<<|VjRr9fv zb5yTqaW>aeIM3EcIFBzIxb;*DR48_YupKl!pz@%kq8#7`RBn^<792~>4Y?J0i374< zI)f4vm8Z5u;d27l1dCouJ5)LgXg;-uWLoWjO6OkffK6$cLaS=aq2fS^(WTIJl9Qw{ zPC>=gH|nT`#F6M;0(#ucjcHZ&CJ6j9z;tqu-N6C{=icr#%%Sm5`s+5>|nU!Os3P7*;-YF)g^D>db%sd+)0bbP; zLWLwOLmuD*Q!~6Tpd_ps!(&`i9dfgH*(}C0al3{8=q}n`ZIcCYnxq-=i^ROdbGXDU z<3Unw<>?XI+k0rI3nflkX$<+8ac43nbd@)Y4;|qC zL&c#z-1o{_T?l`_Nk`W`+C%$v-*3@ScprOnz|)?k`++;FZJX`~6&ea}v(t5tv)!)y zp^4u7&~CsruDJpelJCmk_>6xtxWO(*BSS3av9%B{ms|yTj7Y)O>M`{xHo9`ytbn@W zucM&2egdX^JiLkr@j5OWZE`STVX6YgyoRVhqG%o$vLt4QeQ$VHtec|NO{>n#`3$nk zotYn>e@4>h$vhU-sz2g@tlw%(n5|eooj>DIcy2%e{B+o57-X9Q4U;W?fuxm zIg2o9+MIJo8H9<-M@KiPRKz_QoaZqky^djr%=XlI1Mr*#JR$RbHffT{T;Tdhug+?y zGx1YoT#Sz@EhnK2+3ZgfQrkY10GXMJAek|3-Kr^3oo#?oJeFi|r=+&V2khKG*)3bX4FV;8M9K7jeWL3)LA#tWNetJ_<^wcHr$q3cZ z*c-CaQ1P|3v|92J;p;~ z-@*k(>fC$?V=m84=MCq3u9A8Es@2IBG@e!Q>tDd}@M{gW`t$V&>%?TOpYoW-= zuYZx`y^PIwj|k z4{|rp@4*tuf)|%x{=JTKb!r%9d?kOk{%zxKJr;bKSz-e)iFg?s`AY;8HUbcyAy$#X zdY`~FlJ*sa7@x*0(y?ZhP@z_P9!{HO>S!OMQ% zMTPBu2MO2k7km~M3>7i?A3Ho??{-%>>t@c4oQP%NP%N`DX0KYY*G27hut2WZcSY^H zV)i{uS_=0?nqM1y-{x60Td!NLS;9MBb$pz`!8mD2QbOFm0Yx^53+gbIYdG!&BTQ^b zodW=5CN}WE6dHldot{RN0RcTg16Sw)TvSg~)(Nf*O`lMP{lFj7%nqrBI~6g|vPXYP zU6aO?S;W|+5p;0vF?)4xb;(63ML`k9!8_42ecBm9bxHU+gML~|H! zY@i70S|k1*V7}n?Ysxqtbiuj~bIMd^zjiO)U*cXjplGO0RP-3PTQ{m$Wqp7nksySiqi>#q5lIw2X0OTHGJsMyw)%M}yE12FC+3r>@&KF$G(HaDSbe`2VJY z+_?PWBVd{2sQW#8q#=Ch)yuzU|K$Tc-hVmMqXBX=Y*sNGlS$yJjNB#}x&LP*l{u1% zPqKMK#d^8Tgi@p%@cco!-FZ)HtoZMd^l$MOq`H4Wib5VF^LhJUSM7{>c74mf&~WqA zjZ?q%+->_@kL20)*(ij>BgZ{Q-COpUqi)4o7qiwWQwE7hCZY~`p7`b8+qvxBLBhl9 z`G@R!@%IqgKpq4h#^uf-@Pd}c^D+NpO}Ys~MNn-D%4>n3T85w?DJ6x1px`~a-lt#{ zaCReB!JIXf`Lwz>U|jxV7>C)1z>Zb3e~X)pbZrQ2Ksxb%!JByba6A^8LR1-IY=tXa*lUoQw}t(Xg<=7N~HXs(qZz|OZ`i8*%0tUD$BPO%(GH;gO| zIvZJ%-e1s@IDq{OPZo1^X+~bJC=-E{Ifxm03@HX3)nqcMPhnPi;DYf<%nG<*3e8xs zOo{cxOIVq_A-?$oL5xz31@~Fe&-*X=#j8pt ztP-+3uq#kD7#ucC4Rsb~?(7Yf51hSRS6}=5wzG9r2U@1DzI=6Z;^nJ8TrSSMe8G3g z_wwXOHAB|^e|{b)<0H9u#H~v6Al|0I%Q^)XgHwTts~aVuG#IMIOcKQ0q+n?Mx3U*n z!^hrpZvIyGFU4gm_|X!)n33cL*(( zklSKmZms0S#8)x1HXq7h6cDU#v4DfnbjnmBjLj_yGY;|>6nYDnxSrPS)uG|#xyV9F z*5D{iUk*ym`5Lx$w@>yEAu3B`ZW|FB=sgk_kfOqhwQ$Y+6lieI8!?X z*)nAFUqLG-uCga`BE>qscr|Vs@(o{{8Xb*WG1CJyV7a~t@JNyoLuT?j;K`t19zo}5 z(5sDcBiu%@rV!HOUKcmf6S-s>Xhi^azTmVkzp+R#m0J&524Gw%&^OQMO+xsuXu;QA4_;+Ye8a7qVkPbbb z@xlB$2*D~1bIK)5OcB$zf6KJc5I*|q7r$jn@FtDO=1VQBM*N8C(&BP1f!djm)gqGU zm!mR0vMfO`+J4&X62?qR(Z{i{*)*)asrqnTb42{4Ue0qGi2A263XU8$0Qd(xI zfs=S*ND()|l1})q_$T4lZ+VIw_dlW?$TQ>riT=bj>E^>N)Z#(xR2ZKO4$e#sQajV2 z+UAX@RX( zsvP&A%yHdm+9duA3G=BH#2YXPLLj#|9u?vWDpv|>qXo6^71UpI%o|p*nArNYmN(q@ zigw;U6)W1glD{*SzjMu9zHny6-5hf_zn@zK@xE|7iTCmuZGMM&+HbE z?0|(ZYzOoyd_*-ZrZYS$*h|aF3U)EYvI2@_a*-a%l5*hbzDMzK1k|3y^T*>EzV>q5 z@vNt%V)gn^k{MlPKcz*!EWA}0=}w<~tbR~k&lk{QU0PFRswxa~H&caGOUp<*83)vw zAgnPc?*3ubiFwi~wB9P_Pz1&`<#S6%L#mK&Bx!#C`!uI&3($J|jES+jEC*q&T0 zFa>8P;dXR&1Hq`1EzRYhelxqoNNa(iB2zcnnbi;IUMn8%nQE5T|#fPoFXs zJRt>b`H@v_#_$;0B$0*GOol+W_2Mrn{C9L=7{l;{0F%TLm%N!L0l~qki{gJr{82)U z69|x&>bhPWKD1&kj+%>O=FM}h%oW4)SEl?Qney+I?p*S%l(t7p+u@$@fyr~Pm{6nm zV6^xkUaVQMM7m<#6SeNa6Xa4^q1B;e<)_N~G(G$ajnk2h;{>0eL<^LW9N7g%kYs?6 z&){mOPiMaMVs&4Dzma18aHLG#Nnay)3Vj1x2*9)jBlHJTBW!VkMhO8YK>F2Yc??5) z`q&0LOxg0{MUWrDG%hc#2e6}S+CMx#IzF6mvZGC2@Y0_WXX-+p$8th5{zQvOAHHB* zNLN=^7uVEb+DoDcjjpVM9H!8(a0zb2h)tsZvWS^8vCT`tjPcRIOTMvLzsLbMP7!{9 z1wR=-x2k6mdkqK`B4j*0%)~{S#w@_Q^cG#! zc^_t1c!tn4*0V*vCnv|G|4O=T23}PdP_UJ3+E3eX0N*sd3I~X#f;Qb21bC_GlD;Ja zFzCs@@?kq@FffjFxf#gywLG*1 zCjF00`GbKwDc^9>xyoPkU%fmfjs$BGg+NuO5`8>Wt9UQy%^U_ zq|tQiphPi0LCE?arFa7qFgwAVES!rXsh!J}n;3CaL zxfIU}GwrJY9D?#9Iq?PT7sl>D#+|>5$7-vnL3OgJh*^pLjuK%{85_W$tijOaDZWe* zMrbt`VeZgQ1VkgXlO$=H@8w@YyD5B1heZdnkvTX>y8SPp#a$V7SH9=2o;UqCGjF~XuGLsPcjeJ)`-0{@SLp)- zmzDpqj`M7NXy#m=Z?xa+xzV#w74vM1Icw%R@1qi1Nz_&nvz5(t{H@guE8_L5*RDpg zrOl0R>)vi#H2nV2C2fpvl=7Qm&YhBZ=l#5bxx+tpxZykrOC*-mzjhRUS!6A!x^*Sy zs9LdB#jI7U*keG>n5Fk@#k8)!>uWDX#@}^TzVFKZ*vdIQKXY&;mGe!^X7+5%S|sWF z7Te$Hy4|(pm-e0bQ{jj1JKi4@-0h1!b3)p6GFH=v1hOCl(5gR0sClpzuU_ZQa&-0( z&K=T-x(e>B{wy4L!BORqjzWT7G>#cy+A_4#hU)QO2ejjQa%h7+Yif8l$kx_+;XrW> zspFQxLHOLyPQcwQZW|nYan?5>JHN%9gR=iD5nNyj-f*-UMsIxqtg*2TLP2E89vp-Z z-OTv#pl=4)10lnY*Q^rO8>aV)F0_JOs5wC!O8N?S-(vqVW?aXw%icLGI+Wiw1vA?4 z3=RYc@>}>moDJX`8i#ww)zIo;*r8!%NXCof!HYqx1<0mFEK*-3%LH2C57s9vhc#d~ zY)>Hg5Qs4lgqaZw0=@|zW(}CNDJ?R=h)4E|5xDkanV|;j0wS3j*(M>Z8{iG|D&*k@ zLWah%8nCz#o_0i0wjeydsP;PkFhQ6<-rM~gxE-QK{Pkdh7e`^gQ{^y7Q?1?I$4@Et z-8z_WGYLLfxPxnMv0Ao|=B!-@N{nRL|K5$}_VTJe9*-4n|$Yhro z4ua;0zZS;X;6Jh3q3nL_wW3izKEzgb665^7fCB~)10xhgQ{7Xk30nABY{95UYy4x_ z#)f_*QUcPn_%lND6$Wf%3}fmG(%>bm!1dU(2D@*tp1Q^oQQ_w?HnR9D0+c`m+Luj( zUdOjj@x90Ufm3u=1v7RfXG}P)%+k^Z4{tXA#OPin6`SQY46ritb)oDwY*ImoySsb% z_Hk@tp<(ie-s_&4y2wsf7)E?O_QApmC;Fy=+t}#lrw!pyL|HD{x<(zsmVZC6lFVteAa+hnQ!*?BLvjLX@Rv!3q&M&dB%gD_c&eBQq9m}w{S5wQKsKIv z|H*q+H_|tG{3gU!S|s7sHpSbQ+s{Qt$= zK82Z`$NV>#WN8Y~^Hrc=P;bIyTU{zM0jyLECMNh4HXtWXkg}2#!#*`}33_3YlgQ~3 zG^?az2t7!Fp^Ai64DVUI5BDPBfcvIY^~g!p(Dv0|ld+b22Rwfq=@A zpi^j0h9qrHWjrF`1B{N#Q)QxXIHD+|R!v2vfK@4Ih{=}2nD?O3${_cFGG%_3pih-u z$R@fP9J!R1IRKe2f@s@hhvXK1AM46~z7{gh6jtlTrlz32WA-b>j43l9l8-@tpy-iO zs_ighN3kP(>T)gAYFW0yL`uv+8R+`tNY<-EMM4q@P8U@gM`0ZhI9NwgI;*lMlCF~d zrMY^BXNM1r4?mr?qz(tjEZNq<3{Gz2FZ&=)hw_l9P4?7CMvYU<8;I#oO#U=WLaKz8gc5-E z%F;Gd>=b)C1a1fg#8+sjQ)-ooj1)o0%Bj4gMt-7QYYJw`!Z=F=bW$i5`(#NN!G3m9 zNH7mGE0*}b0cIbO)g6cEkkKYIV!@$_{T)3mOuF_V6Ql@IabTwN2gavF5VCJ{bQ^@B z(V5E>?+?Ho#!n_XXn>GvAvHlUz+xU+#AY@HawIv^sd|7+k;Sr6-l>9242>VIIPguX zu~-h{TsmR!aNqGBcKRM)MZAO#izC+}(jDYQcuM_$SS)Rc%)Gck&;!T`mJGzQ>_+Md zb55#D72&8CRQ8405%TPjL7F1KDZ<-xki;f^SLFgX3UQ| z^zrk7DX5WTT99QfVrCe4(iKQ>KrnPq3M7Rx8O7RzyO{|RqD-_?sF0KIMOm_Yb@8D&Et8TOdt7Bj9f`$61F zTOkL9w$6^8R#^GSuOP+LS3r-2bSa_>t>4A%@?2ufhdY1|A4`$okD2ldgRyB?}CyI7yuq{mM zkvI%&6;%=r!{@0@JoercEmX}SftLciE2Dj!y$=l!>e`;OK+Sr;=x1< z)LJ{G)i^Zk&BZqT&s&uC?kzUhm52pqsR!MNwQX&NIt4ZPaes)+N)*|an0TXrx(`qUE zrQ_z7DuH;SLl{G4GZi~#hMRKwcd0b$3Bpi%qD?BrC;v=@~ z&|GOvc+s)b*ktUKVJ8DD823DqPsUFt!_Pr7dowqm(93BUBXk~8q{x&5{#PY)#_Br0 z$4|Btb_gYDI;_4#x*##(DR4*}+S%8?L3lgShgm^BrPN~S>LntrBGLm%AI70bHre5L zkeyT_mQeS}#S`5>f}7}|3%Oj%`;pHg6n7|xnaae=NE{p39wFH(Dyo_;Z1MdTl`)D- zn(b>InFs+=A5C`EV2}`aAzdQVuOzz2_6jb@1c3G)AoMc<=<(Ig2uG%QbBt82!Yi7 z1j?e@EIK#c%nPrrdo6b8-9{~GN^qrCWW^Vvs|iRW-ZXNvI#2emlWVw z53hJlkMuC(u^x`eJ;b3NbSfqZZdN8%+8Pa1Hcm%Fjq(p0{HtjJH3b?F?-(>ToOZ@T zxWgd;swb6KT>@>=C5{llS!nDC0d^*uy8YjY!(o{xU~edY;~4<*M9hx<32hQ)hsoYK z3X$Y0=4l+>m@wS2v%*3JhuNW-B$Tm8`QQK+_lXv=N=6?!4wGCE;$=gFEDwR=bPl?i}Vj6$@G&Q3*O%R;Fqmf?&t-(~q+ zGIHvV+gKYC+=u+7FYmw!F0i)ji0h%a?U2tSvZZXvw)>uW&rhBFkDNTE(np5F z`z2cm(#?-Y4B^YtCOjUvheLRCi`O}>MAUxFae1P4-bN=cRK%Qh^ZE~*ZkAW#;e&Eo z>VHn!bVhQYk!)u^%mFiv}U!-8INmrJ&CtXJav z%NG{g7k4ccEe|hy@03V|?UJ)yGPnPNol2%f=cxnyLiU1bL0l|ZbW66{d*(WT z_|*x2pVZR{QW&}}ovSoXfKpkf!eW(ss>|x9mScQMIVp_#Q_F$;q_A?O9m*X$=Cv{_ z7c!V0Z}F1fmbKBu&Sui~%q1L2wStu<2*^ve-cPh!x6YDK)v|RfRy|-o{hK%bmE{vX z9xd=aroG3EB*i~Onz#-Y%}?~T{MN0ZOeEl82kJBq?8V{nE1+*CedyQ$tI3_a z5J&c6z#iGJD;}VCRK9o+p&-r83EGqi(=j@UO_tOY`LK&aNJaj+!GD94v~dv&`R;H> zcz2{ua#l;`YOJHr&(4prbGwyoy{>#5Ry6eH=&jL(Q;S2fO%1Vv9WhtqykX5<^oFpI z_062OauzL1hhinWW5s*m&^&KmbL76EiyV6M@U6oOI~Pl1MYXZKI&1)%*I~zR*c0}L zPf0~}i&qveEL-oi-Pw6pD>;uv&Bwl~OKt-Wd#<%e`fPcn9c@;BG!rru4k7TlP%UW6m(GTKmkLeE`b8PiUNiN3K)CEX8_NTML__IMcj`UpJ;0nqo_@eBKBId z0VL0EdBgRq2nF@H(1^*yWv1a`r;>D_oJkre0SRcJT*^SzNX|;hT=~dAv10}R+N^JM zy)nE{@;jq356)`bvM_{Ujhd?gR~_7K;Xu0qs;ET$k(|Jw`Wpz4LZeDhNHwN`Yg20K zL^dyc(4W<)2N95an+DEdR1W(kWt8M5trY0u$RupLPPn(>paFHyp}KWhgQEuwy&+RA zqcC}cg4m9hC}hGk>uyvgPj6b;OPax!a7KZwl^~n2tBXgF{}KV0EHpB3o%uL^>-z3% zyT5CQx%dA&!%_oID#?GlapA?^-xbT>D&=ik+!6ECeb*3m?~hpzNcsc6{E>S<+cXd< zZPl2ES$7i`RW~H>xs4)n^4vZMt4S~s8nB-N9GtC{j8%nNHCB@ns|to{EClFuhovjp zo;t96sy2$F4H5&4mQfGbFP&c@`Nj$c_VIxf;a@NgkfoIUlBa=zgiNU-_5dKFq!}Pr zFZNUTGCQ;qHq}ReO3N|-B)tMvA6(2PKs@=E^m$Ab;=$WtolR9Kptb<*|v~644z4rAm4{IS0yDQQOhL6eD_8@?#jWQ~?^JxNy$&I>5?KZm@NxsYl@bO} zoBVr1`5v`Y_48)R8?QQx2VDQ8vU8M@gj@yhls745XL?=efronF%|s}N^@X?%`#quE z>Zh@Ue5GvU&HGGw)sI~Xg(-OpSPLxaK6jNKU!Ksilo3PE(4(~Dnpdw{qMneVAella zs!PH06ihBo-!jn1rc_>Vyy!FK+3dx7M5>aH6Gb!9!Q=FQJpGSNDaL>!nx21~n6%Y3 zj*;vQJg-z4c__>H%vU{pl<6P!tX>0(O;UVC3U{+8xzM96sXZDvpyEdgWqOTXeCPs} zKu)M^HU+X$s8i(_UX`ARIs@*2Cy?#+q|oPiv^$A?p0uM^rL;>>smALOsvg0<^m(h* zyed^7Z}n%&yH(Ab#9WWC^)uz&mNxIU&y=?&ZQdG|w^bbpK!A47B{>r~Rkof}A(NW2 z`mvO`EG2`3*DP4s5j_~?fz(`EAInw9a>)=#O}Xs}DdqmArmT5FO4d7SJH;#bG4c$! zl)9zQw;gj9J`2~^robS1$2qc`fIcaZquC_|v(?RWLN43ELbG2zX1^?&Q1I!Q1U4PV z2j-GbgeMzXLz-j*i}uV-8*sd)r4 zRtntqdUL>o_IYzRa>#+6&sQqjvUxO3$8fy^1OK}We~m`!1x?w zN>iTD>diy@4#9?y@68w5lF|s?wx`NVLPw*4<)L(knf84op?c*fWgGP9A|1fg3AeQH_NpHh~> zeMHvUp3hwF)=w!nU+DeJWo`S^vW|b|vT8oHtP@IE!bv#rq%vYD^psxKNs)+@u~Y7WLT^Dj2}9_6qGTg@3pdhWPd~=#^On+2vX0}x96c#F9!kMHKnXeqv?Ucz`NFeLY&|G60c%w!7~vV7ol?i(v=U0u z;q1b53U5?mg)?%f2eTQdYT%z|L}V_a)G+9-xE5PzomI3&U!j5jEszJbqNcyQfYc{Y8#Bb7eA#9m~l6>;rwHL8W*@@HGveZ%3IV2DdW+f zqL3@C;W^<#x>m{>Jt*(u04;m7AD$*Q%;J-craJt4C3G7%b zWL`(CXxj5H9-~V)U3zf|8D(&VEbw^8Vy_=AoMIC)hVmX?eoS~{G*Q0YDo6lc77$H&gs zVv7V;erYoT+XjYX_1PfQg)$SEk_2nWrMyzsjc38jxxe}Ch5xpEJ%R2#KJ^OlDl5_- zjZot%6R?Jp47_T{kCM(GP(XMdt~j!Ha;UbAzLuE)<_6F+H$PDxGG)h2NU8IQV~B$Z z=<`-0Ei8xvUHa+b#RVJf)ToeafPJ9%d4)RoP`T{LtZbdasMArxj3O0BK#-7WP6k=#xb`%y;f22r*L&0z=tI3#u!;H?X9`=_QA^uZfD-t;AQ2~d;pC@=?h+6;gf z4!r1ve=GC($8*iT#7OVA>`Ropzm+l3#QS~q%4?*yQt1HL>@?QGS}~9zS`OuBc_11E z64;pf$u~L|j=VUkWXA?`ZEdZ^f?{Tg1#jJ&$RSq=p90y}BDH`zET>vRC4IijYEjAu zH_2_&a_-zYIwZ?7zKkWVkddB|-oACKARik;?TVWZC3c2|Y*@;zRhVnY*3Y&!!ifbA z?D33~^wBxyky2n$8p@y!H`glm!DaZ9hRjNpAp@%|WVh_ASHWlr8Ccd(-oBFBTFga> zk6pKr1N0yqpq~jDaGv^pOQ8Ozm@c4+ zbF)5NK6M66KzQrc4&tl?jYPHblnO`WB=hxwWvjKp@0ef-zhVZ`6Ld--Z7TwkXt6ZZ z@m*=Z0_Z+q*}>w-hnTq%fe`w!#p4oKIqkMMU}>!5Wmco^$b~;Iynq4Z1Qb#AlYl30 zF(CMfFQWU^4YC_d4Z`sZ^8Fp8Pl3msNv~h_LZpQ$=E)Z~!j*Thr#)_w&p{#Nk@w@1 zZAhf0F%dc$$4-|Q|A0b==;Egf%rl%wE;1sJjT7^Tp|LH)+6r=-sc=&&#eFXquZT0X`{R;=C1g66la&`DCK;1ELJ5vkuOk) zTpj5njBG-UI~a=}R5rQFLPam7BXKV2VI-t486YMN3@p)>VnPI}<Y%ZGWjizBhT#(Dc%Ud`h3vAn$qA^%il zGBPOp5W$H$qhu|&?6oh_S74ZZzB zQFtQPwi8NB)%GRNpX7ZfZ+Tm+;qYBetm-IY3ZtHi`<~JjPj%E&y;`#6n+0zbtd>=N zbI)6Q7Q2?jSXs+zdCh87(`r@CJLcQwrA>FTVpZ*{71iH7{nqKli_1G=75hK7o3`aV zkiKDx!!xNH_`#G zu)-ZHw#JVk1LYL`>{$)x+C+Y5uC9BwqxbVmRtrzA7Hz_@;`G0GGwR&zSm#Weob$a8 zv$zbK;6D_twyy14tDy|?!+g<{(d-D!=L9!AX3sBQCFdClUfcLr_` zEEmOU3H0Sh5z~!hKi0~&EgpI2*zIG>)>uvZ9bc@h6EVl4HvYrPLw9!HJrHdJR*l6f zFH2WK($$bu`4Zygb{xEud$%~+dP;h3I93sqW-dvym!yizh^N+oCc`hqoTY19TJKce z-5NdQl}`C$TV9mJ87Vj;ZJ7<5A{Kl%Zmp{A&XK#_(e~%00e`G&R=RXWx_m{dx{7#P z)K#&@+Oap<#_Fk5>Z!bpcx%*Ej=c(=!pMOY_qGq*{OXRq%k6*G_1&&JlT!b)lJ{BZ z@Tu6o)6(AOr0r+!oxdneT#cO%Nw0h%cK!>|7e?Tl*r7c_&WR13T0Cs;(uR*jj{nG0 zbAS68seXVSqIhr@M4rK?=2o|MOVvH7*B*6k`H*m<>|I+q1+q#P_Ab;)uI=}14cHU$ zoMuELl^?uQc(?!Vu+-Wo9TcLa{ixsqTzYUT?bm+LKP2(Tqnl5#x83x1T+^c^6x+lT zep!vVj`<@$$A?XFzS{D;wSRczPc3(L|EKnqJtw1kPX4%XZ`ib2RQBevTgMhnOIfj^ zrj??WW$llOTEgvXg*D$6mOOv(+_HV8@Nl&7@LFD>w5e|K^5VF(dq6sSP8#q@MML-U zhS%`jtKf3eA6>;+VTC7Rg(uRdd@pbKK?Ya67w$|&L^7FmaLhE@7n&CL#>#fx*tFao zHFwS%XvE2@tz5Ei#^Eq#i{z?!+Yk4(?msPFcHWtl96eEU4~q#q7tE0mNX}6kHP_B- z|H|tA>K=GkNuJtopI=*NT5LwkN}H)5&t7~y$5kYMoN-}fapyZN zw_6r#mPVEvmdm8_{qMOB+WuX4fHZJcDu4bx*9$nUXG<+kBg(MOk6a(W zHXgCX92JYksG}}wuAA3>sI~+E3LlNkz8Sg|icBn)OIh_%TmAf@58Sz{t}H31E$V6u zYguq#)U}TVzi~biTxgHwR7YLa>_zxu)KwDJzVFHdJi|S2SAV;0N&hG2@0geK?;MJ4 zKN73yjFomtB}ea~d~l)TG7Re$3Ksj{Ieq)|(uF&vvD%K6+GBUKVp(8t-AaN@iMgll zZfUHcXQe@qP71NC{-~{g{?JdI)%Tp$Xd2q{g~ge7uH3$|?7+e5^~YA~Pu>+{Iek%A zpVHu$a7?arkE)Kt^4QbRT6bVps?uW3Kt3{d^Nlu<0hoW`iFku@N^?QQd7;nGNq z-y6jUk4LkPL~TbBBg{w5ygb6=*PIMBC0EsA9=toZNDlfEE}(37teEqo=KM(M!exm< z^-MTwc-Oq+7Y|=DaIX9ZoEDM@@uJ41)+Ky*diOosp4D9b)lPD2&M5iS!_ykhQ~ZF_ zL$IJPMAt3Oz7x6~TAWxeT|T+oCV39tbG5GJ;JZt&jfQorIeEC`7XFt0SL+$b@~elV zdd`;pfXk8PGDq1$>q4VstGs8f`ms5W#GS4c8;^-2W-GmCE?YMm^4JC#!`#U)=gjNp z-E&2Am@xIue8?9CDSF) zHHR~=Td!GvwO)%hd=k6?0rS^dYetH>@71>!;r0WYWvG$+K~8HX9)4KWQ88So{Y$$B z4}a+>q;U1oYCOD~bCfdOHy)zf-!xi=^K^gnjBD7f`-$C%H$QP3@a89ZItmwBMhXl+ zsn|M_ZTQehu^(m|@aDq;iv6(IGP*_gVP)&i(GuO?mKg9rpGPEtc5tv-GhPFs7G_P_ z-Bqpm=mgpe6ARggdaJwH&Zf9_Dkzd=SXK?Jec62GJifgyV%-hL zjNt=}u;7VgMij}mD4OVErb`Acafke+_PWGoRq-^%JcsJVGjt)_eB9&@TpGvu?4pk% zRjnzmqYbr8&vHNDR15M zc#$qsbon*9e4Q?@(IrBcZ_Ko_PBG6j#^@I|J$kL*cl$W^d z`*!E`GuO`0H|8VV($+&Ud)u4^Jc+&>!Q|bRm~G37t!A-w#o8FPHsaGKbLRKmxe@J~ zmRpuL9k(1(WwW%GN{hLBu~+TB!*%__wF}n+*8-8VF~`;w$M(gc75na}eRs^>EIo5F zYCnk@Ht}y>xOL&pz^#B(+ZEe%bY;_tyF)9*r=rEDV#Uu%&%YQgeo^8IaQ1PsN4sO$ zdsea!EVr$A4o5wQW1dc_`&`s>PU12l+~wxqyl~^f&A^R-RM8yEX<5lRxIDCyeI%NF zB$nMJ_4uOMK8ed(*K0L(^TIlZTe$xr-PRpCjU(KSEq5A6M0iNIb(=-=%zSX2!z~jf1W*8+;cZ82}D>~`@(3a+2fWNS*p z!F3L|$n3)D#gV1PW!=)A+kt4sGs{=*>c0DmRM8#X-1Cr9tZ&z8^5tgcFR<3;FX|VC z+Zoi<{B@g2;|!NUH_=RpvU{oX_7|dC_d`|EIM+Qc#3MIuN^S(#w@|0` z3&L9&tpC)K+v5osAX}t=p?o2@*tT%xt-5G&1FHoxMbjPK9pR4oyZfWNjwXt?p!j~& z99(K!ymGrPTG339aNaGy8~h9GgG5j|eO7uNx~g9qyC4l+h(3QYdU}H3$vQ3)K8)HH)6b z;oJFgco_hucX!+Vf!+T;i*t2o;`Z%v=MLDW;;#0%+Xuz2Qafj#p9!}`JdxpB`QhHE zv+Mytrd`j{Xc`ElxGAkdkXnV?x-moJil9}vEutpemS!H(Z9T6Pu$WnFd+X{thu|_2 z;U@KwtQGAWke|+tNdEKDbAUDC){kl|a%s3xX}H~Kx~uyh1ENbh>7~B9)(e1Ci)|Eb zUq+8{LzMLFbJ3G$Wutqy|E-$J7PWTTLsLJlskDAIQ0>bjGjT%0lEVJ3wFnj)0y$XwUqem^UF-GDnv zMLrXS%v^Rpp~6CA Tuple[Optional[Dict[str, Any]], Optional[str]]: if not js: # Try parsing the whole string as JSON (maybe it's already clean) try: - return json.loads(s.strip()), None - except: + parsed = json.loads(s.strip()) + if not isinstance(parsed, dict): + return None, f"JSON is not an object (got {type(parsed).__name__})" + return parsed, None + except json.JSONDecodeError: + return None, "No JSON object found in response" + except Exception: return None, "No JSON object found in response" js = sanitize_jsonish(js) parsed = json.loads(js) @@ -299,14 +304,9 @@ def filter_bullets_by_fact_gate(items: List[str], diff_lower: str, allowed_files # If no allowed files, skip file-based filtering if allowed_files: - # Relaxed: allow items that mention files OR are general enough - if not must_mention_file(s, allowed_files): - # Still allow if it doesn't mention any specific files (general advice) - if mentions_only_allowed_files(s, allowed_files): - # It mentions files but they're not in allowed_files - skip - continue - elif not mentions_only_allowed_files(s, allowed_files): - # Mentions allowed file but also non-allowed files - skip + # Allow: general advice (no file paths) or items that only mention allowed files. + # Skip only when the item mentions at least one path that is not in allowed_files. + if not mentions_only_allowed_files(s, allowed_files): continue # Fact gating only applies if STRICT_FACT_GATING is enabled @@ -315,14 +315,17 @@ def filter_bullets_by_fact_gate(items: List[str], diff_lower: str, allowed_files out.append(s) - # If everything was filtered but we have items, return at least one + # If everything was filtered but we have items, return at most one item that + # still satisfies file constraints (do not surface content that failed file filtering). if not out and items: - # Return the first item that's not empty, even if it doesn't pass all filters for x in items: s = str(x).strip() - if s: - out.append(s) - break + if not s: + continue + if allowed_files and not mentions_only_allowed_files(s, allowed_files): + continue + out.append(s) + break return out From dedbd709afff7149bce2974d332c00b0fe2f9412 Mon Sep 17 00:00:00 2001 From: valerii Date: Sat, 21 Feb 2026 13:05:14 +0100 Subject: [PATCH 2/2] Fix review script feedback --- .github/scripts/multi_agent_review.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/scripts/multi_agent_review.py b/.github/scripts/multi_agent_review.py index 99ccfb9..62a969b 100644 --- a/.github/scripts/multi_agent_review.py +++ b/.github/scripts/multi_agent_review.py @@ -348,8 +348,8 @@ def rewrite_agent_summary_if_vague(summary: str, diff_lower: str, allowed_files: if not s: return "Reviewed changes but found no specific issues to report." - # Only rewrite if STRICT_FACT_GATING is enabled - if STRICT_FACT_GATING and not agent_summary_ok(s, diff_lower, allowed_files): + # Always rewrite when summary fails validation (file constraints; fact-gating only when STRICT_FACT_GATING) + if not agent_summary_ok(s, diff_lower, allowed_files): if allowed_files: return f"Reviewed changes in {', '.join(allowed_files[:2])}{'...' if len(allowed_files) > 2 else ''}." return "Reviewed changes but found no specific issues to report."