From 6b7b8414e276690a883c780196289165e6ef2b06 Mon Sep 17 00:00:00 2001
From: Claude
{note}
) - } - { - notScanned ? ( -- No passive scan recorded yet for this server. The nightly run adds one when it can read - the server's metadata; until then the atlas page shows what documentation says. -
- ) : summary.state !== "scanned" ? null : ( - <> -{note}
- ))} - > - ) - } -- The requests behind the evidence below, in the order the scanner makes them, each with - the newest answer this report records. None carries a credential or a message. -
-- {ev.url ? ( - <> - - source - - {ev.note && {ev.note}} - > - ) : ev.note ? ( - ev.note - ) : ( - "No scanner observation." - )} -
-- Judged against MCP Authorization {report.revision.revision} - { - scannedAt && ( - <> - ยท newest scanner observation - > - ) - } - ยท method passive scan ยท {report.scanner} -
-{note}
) + ) : !view.scanned || ladder.length === 0 ? ( ++ No passive scan recorded yet for this server. The nightly run adds one when it can read the + server's metadata; until then the rows above show what documentation says. +
+ ) : ( + <> ++ The requests behind the rows marked passive scan above, in the order the scanner makes + them, each with the newest answer recorded. None carries a credential or a message. +
+{note}
+ ))} + > + ) + } +
+ {
+ view.scannedAt && (
+ <>
+ Newest scanner observation ยท{" "}
+ >
+ )
+ }
+ {SCANNER_ID} ยท reproduce with pnpm scan {server.id} ยท{" "}
+ scan JSON ยท{" "}
+ data file ยท{" "}
+ how the scanner works
+
- The summary belongs to one report at one time and is counted from the statuses shown. + The summary belongs to one server's newest scan and is counted from the statuses its + rows show. The atlas never sorts or ranks servers by it.
@@ -156,9 +157,10 @@ const ladder = [
The scanner has no list of its own. Its results live in the{" "}
MCP auth atlas: the matrix cells are the latest observations, and
- "report" next to each server name, like every server page, links to
- the full report at /mcp/servers/<server>/scan/, which lists
- each of the {checks.length} checks with the metadata it read. A server without a scanner
+ "scan" next to each server name opens that server's page. There the {checks.length} checks
+ are rows of the feature tables, marked passive scan with the metadata each one read; the
+ status panel counts them per requirement level, and "What the scanner asked" lists the
+ requests behind them with the answer each got. A server without a scanner
observation reads "not scanned": the nightly run has not yet been able to read its metadata, or
has not run since it was listed. Servers whose auth class is API
key or no authentication read "no OAuth" and are not scanned; a server whose class is not yet
@@ -186,15 +188,16 @@ pnpm scan notion --write # append what the nightly rule wouldWhat it does not check
{unscanned.length} server-side requirements need a token, a scope or a reading of the - implementation and stay out of a passive scan: for example{" "} - {unscanned.slice(0, 3).map((f, i) => ( - <> - {i > 0 && ", "} - {f.name} - > - ))}. Their cells come from documentation and manual checks until active probes exist for - verified owners. + implementation and stay out of a passive scan. Their cells come from documentation and + manual checks until active probes exist for verified owners.
+If you run a listed server and do not want it scanned,{" "} @@ -295,6 +298,13 @@ pnpm scan notion --write # append what the nightly rule would Math.round((n / columns.length) * 1000) / 10; const scanView = latestScan(data, server); +const ladder = requestLadder(scanView); const access = accessOf(server); const auth = authOf(server); const classes = [ @@ -194,28 +197,34 @@ const classes = [ ))} -
- Passive scan - {scanView.scanned ? ( - <> - - {scanView.summary.state === "scanned" - ? `${scanView.checks.length} checks` - : scanView.summary.label} - - {" ยท "} - - {" ยท "} - Report - > - ) : ( - <> - not scanned yet - {" ยท "} - Report - > +
+ Passive scan + {scanView.scanned ? ( + <> + + {" ยท "} + Requests + > + ) : ( + <> + {scanView.summary.state === "no-oauth" ? "no OAuth to check" : "not scanned yet"} + {" ยท "} + Why + > + )} +
+ {scanView.summary.tallies.length > 0 && ( +
Contribute a correction
@@ -341,6 +350,8 @@ const classes = [
);
})}
+
+ Scan report
-
- This server was withdrawn on {" "}
- and is not scanned. Reason given: {server.withdrawn.reason}.
-
- Counted from the statuses above at build time; never used to sort or rank
- servers. About the scanner.
-
- These requirements need a token, a scope or a reading of the implementation. Their cells on the atlas page{" "}
- come from documentation and manual checks.
- {server.name}
- {server.url} against MCP Authorization {view.revisionId}
- {view.scannedAt && (
-
- {" "}ยท newest scanner observation
-
- )}
- Withdrawn from the atlas
- How the summary is counted
- {SUMMARY_RULE.map((line) =>
- Not checked by the scanner
-
- {unscanned.map((f) => (
-
- Hu?S8rO3Ig_drG!+jr@X !nUAhJBx1lVz2Fj
(Pz!)DeX(Fj~V*s#V_+=xnE;kvW>}- zzmszQ4-Q!GegCgm!2i7@|Nl-W9qMckpR3b1F?qjs^!xYk(o(h# zLA*`C_I!o$Vl1oHZcFdxlXl`evG``sGJP|yl-StV@04zF#dqWUOB!4Y{}0~g2raLj z#@f-s1en`;m^gi6vEBExj?N-scsJe6H-%JzowjR4iN2bO$~#Lq@k-A^uH9XuFXuNg z5PbFY@}d>6`L&pI-{;Xo>_`8}+)R4OM`1;ibARH96ZFxf0^RhA-@d+Cpz+ WhjWk;H`w+z zBhvu|k8{@DeXRG?4NH#?7QK|WG1@E>6A?82&< 0Y7Am2?v=#yvELh z8D1wG64MaD*STmsD``dnV;J`CMM~|dv*zSJrUP9UEM{K zEG}>J@)%$w#OV<6^Gh=0H%zpc%%h7uhSK!dpDPOoVw4HQU}-~AQo&MEQr1eK+0&`= zmKyJW9tq ?jq7k#r1s|{w^A#YBv;l@3QJkD^0G{}tFKRdBW@TkL zVL6F(U=$(%*e0AA7;a|k>$P wrL3v zKRTe7U>!RfZL4!?O$Jit!g{{le?TS F;3Zx|W*K6|Y9y^yevlglF*^jpT1&3#XMPgQ*j9SF4Lq1dvvg_bYw&DM1DAWo>n z!wy}KMB_42P7Zr%fqsK$9xr*Em#_Gtr`uzlm%5)Ksp``2GFU(Em~6Nq2`lG~wrO z$d(M@V_s+v4BTI9^`)e#V0~sD_Mli|mroMTXWsMlx&n2P GEj7sJBHy{Vcdk4iat`L?;%<_ efl;Hp z8qu!X2fnGmJa@` zc^_{&q1~IE4etbPFt$ha=IHkaaKFWsdv8H+G_A6jXK6U-6O}4i`{K{2FsFCA?E$FO zRctCTzyFp__k=uLj>%c2jK>rKqz?(}Ut>UkqcmU}ImS>f+G1p}8l1465fG4}>-5UZ z&XmMcGC_eH{QTGBd638gKieI7d^7lE?05pJwotKm*TD}Q2Yt3g7~1J@%>0z2&yNGW zP(kBuvEOuxKYsM9LsG~CZqvZv*?O>wC+vkN#USEgjiv2vC$X49#>Ka-t^S+CDb1dX zdf6K^-WM@FMYqfRIOwy6Bn ^;-UpX zf@#lbXr?cSXHS7;z+V9+p`Cv#%5)dAROn(Bysb-@)2HmUpo;BvU7RbJx^82NB!01r z1zGc+2wN4pXF=lVo8!8jhVoWp wnjZ>_h}c_dT@jo?-$2_3AQ0-I zqv^mU7G`D}m6zf|Mt3IT3#F(1!{rzBpLm)3`}zufZ`|tOIa!p%&&auI4+RVP&9;WA zCG4-4g9vCoFMstdSoA&bYDQ9U`^;2kOa8!j^l<>!=H`9~O`4N;{+ra?Ml396Q_Sg! z=n%G>w8;*pAVBM}CHiAh3!IQ>@!O02P$GQXZg%FoNB_ZZessSQ1Ty~k@pI7M2RP4W zGCq%F{(ycvJK1wzls@3I;!B$t9}fm;ny4)2%Eql9%~QmeOxjsniTkX}Ob}5CTtsFB z^9dz1=(hTvJE^!Ht;>ez{oVmrb8}O22))X}IQ;(@`(*uPIvuka`(J@wE`LYF(F=&K z>$5;d9tuhWfKY(Ojkd8rL+uYt3qKJDXDw${ikWtN=rF^@fBe|Sk9W_mVXFOpJv|c! z)XdDPt?ja_lY4V|hCiaj-WIJ|5S2j@k5R(%M_o0fX3DFg2@NEsc*}WH%O5?0{ZoN+ zet^-Dq7pA&IUHe9&R}C^s}!zEjy$KG5yuRGreGHr7aAHG#dIHd3#)eNU*+HOWUyug z1@|kb_cAg+7r+*~PpgPnSXfdsN^^5_JE%hwBF7zSD57P2HDBlrL!n9kq9@DPb*ET< zz8^m}IN<|w*LT+@y59dDs4>-W!z@lPX(egez&Ewtt2SGcZ`FIFD4|R|wf@)B;_p%8 zmIdXyWfMCT*e1bhHct*IalBEK6pN1mfPyH*zx6d^?I{-9r;eWB3}N4JaS8c|FxsiJ z2M51iOOg&6FAsL7D>ABE=H;0~q%AFngU9DZC^AhPifSLTA7aL2c+O#&2cmquLlt({ z<;yL6)L*(Uc+4(jvUwM1T$(Yxuc{g|suf8kcvJyEO^uakmmBnBs-OA>MLgi^4ZZE6 z2`+Y*)f-S37r=;;lBE@}Vi;eJ!?1<9_Iq*wWPpR`B9l&7_ oQ5Z5& zX@9 jIF- zQ6D{qrYh7Iu%DJhU-XKnChul6z{c!Q>B0|H4(vJ+-%yo_dhJ z7%2QN?t!FP5J-Vp0U|--#&p9oSqE*l z=lHaI2F@lu5#$}1iZZSgwW1UFf-Y4ja<<0W$0zl!Pq6q)Be6{Y6~n5ks`$7>L_`n> z Im4m-j9CG0k9kqwY*MalvNB(kyR3Y<_rTNd%62gp*pBi< zw18)4XYq%1NToj*>z _ujS z2t;0C_}%gG30nUX?WtgLa&lmqG5X@>5}z^io#|gguSE|&06>@tljJ3#HHHb((d}{g z&rg>{aXk1JlVKnK^uT$|JR$Pa8fG^UoY*IvmXwe}LZya0nfv+xr>VIaDw=i9C@ZTt z1c5;9P#GyYPya*$;jF{gAu#mP7#jvK%pB;W60uQP{F}9Ga%g>;${TgxS ^y$IHE$rv-NLm&6Y6U%<;2t z&|TwWm1VQj+-J}KjoBk$2VWEHRg{(z>)9Zo_}n!T**~L!L(Qy$boFNm+KId_uS=T5 zFcWnTvq8lO?` R z(oRg;aUW88`(yBtGMhUW11Sj^z@YIRJG(yyl@#{ed#)!zb+rU`+Zsq `#H)_`Z6cBg`L5MbIM4St?2HbwT1o<6>E~o$f` K{@nU)L>}6~fyj zhoSQELY~nQ>XjE3Zg+(?=YKi sDQxZO>XPs0Msti{Rew&G7)WNG6BGeW{mO`kLn05#sn=dFBhrj zV`F2VZI4N=ELV@$MWT0Mw@v0-QNE0e-0s^d(nMPsL%v=UzMz1n#eN(7yT%>1-&%tz zzNaLjq}*EDFC+G-%_#L aPjAnW%5HVbRuG*}^PK 7_T9H}G$U*-Dk|Dtr_K^@mdL?EDqR Y|Hf4%#0wWf|7SYE#{BKS(wZ$26?PzcTRExu6;Ivgh{(Y*V@s8$^qQ-97SxI@-J z ^yqAS_~DJ*Jivs9$TkAZWE4LpY3_=LfhU| zoLp%u{T{WMN?-`i dv?+j(7d`UPuCH?lL-0;?x)jAYrN0^tdEtB=>?e;M@ zmz(?`RJb|&9ldDH;a+5MO^v|(<|s2ITDF3Rc#~un8Je$WssHgkLF6X}{vABL5i2Xw z)HEPw`n(s#G(rO~kQE=@bp8F4&46-7AE13zLomRI-=q14xS&*i5))Z=Xk6(`*p1o_ z-lfBkg!n3?2<1Uu9v{Vga?agDfx5SAoe7lBrj#X%g&9RTMGc$;j(S-2xr$wb2Z0Br zy-dLa-8|+^4vFry-Bg$g9D9Bm*1Bme%?h81%UV%dr^Ph;TFhyO?{5~Ex&+;&mvnS% zekN8#eWVsVRjmrta**M~< o-YY-B=BWwX`B~*n&Fi>e?F# zy)SZm^B>MU`Qr_`K}9}bm`*H>$IwxOm)xDgVSrSY4c96)$+?h Ss9%IJaQMQBgZ3qAQ(wcOPPXcJK#Pi(u_ z2%gUyEB7VR@#t-6i2=mF{JzU@h)*dpDbBucQ{I^^ c-4EYG+$l)k%a4{ZHFj-u(8B_fB2?&R8{wA=qk|PUC)m##@k-<8o%B8 z;zD;iwjC(fFyR->$M`V-0~k^ej*7oei9xJW2vrF|bN)4csc|# H0<$VEI>9=v7maVVsN@S=wc`s(AQ={ zs~FqgCOsliN<^~_K4OZZDH;__dgjyuV^In`n}dlFh3H)?rjpLX&?m#(8xs15+zw=% zq&-jJWaX;ODY(jS5Q6a@js}{)G5N}UvXzQbHU;6>WZR?Y$y9ZMJgCC5&8JYciB6au zOD(l5>oJml6y{8)JuX}y_&qucqOh2h?Bf_Q0&rbk?ptE%-}pNipHpNjh3&HWC7=`M zf^|{j9z8O%n42tjPjS#b{u#?7{(b5du~1*UvO2|m>M40D?3Q{xu^9T_nvbrh+ncZL znkwPkUhU^qoBcTE*pK#L@kY88awT9MeufWBV{Dl_uzBf3C!1Q8yn5rTmi5t&2MNVX z^vK65`32LTq~`6;sxylXd8Ph*2}p(PgiM?qeJXLA)Zh(WU~-W0LobPadwty3)^#Ej z^hM4Q)*(q(N6jh^KPz^8K_TgypKUMm6KILx?>!2(N3l(uQNP##R2&ynj~9<9H_g!q z>kk--gDPrPQf))m9QEcI=GtNm%fM-EN)_ZE>k>0%1}B3b+Gx6FPp(e@-6OnK5Sp5* zDi$1yv$s{#fl7l12a5&K@U)c0EL?J`GOjme=r?6{o+V=by-gb-3kpKlLGaj3Qf+HB z&30RLI>k_Xeri_76SAU|1huPcW<~GjiR0pSm3Qe%@^7iAw{tY*$Gb)L{3tO|g_35? z`;~)CboB+%r7fk)3Z9;_;C-FxzMth878y6f{R{LzBBztfrsad*N)O9?+fTGMP{W*b z8%w;Y-`aHL4p#}db@yy5|83=79TbwUtsI$@)aBE5a6(?S0Os?UJQ>qDZU9x-{9fo3 zXPI2P**Q|8IIrd|fC#zoPn4*82TbpzTDl(`93nT6yRYjHPj+q~W~L!ZQS&=Lb;9cl z+M{(KU~b*uq~Zck=*OPZGuI@Uhx!Bt!U7HX2G0kEb1jm59|d3eCT=l-TGlB|8({9* zRFlSv +?wU6HX;Ijc9+rq;C1GnJ;mgDl-~DqzoONpveK@F=jgVVCPE87Y(=Uk z*&|LWtY@8ow-YR@d2i-0A~x#Qg&v2}U0NNlgtnLUnji^+?=2|A?|2gw{#T;}Hj`#u zMq!;sv}MoI-_IU{6A|Eku$+5tbp6ioHzIGp*p+Bu((u8;B(`kkjg3(dksGUrU`qa< zUwzC&D}QfNJ8k{{($z_HgiahSEloWt#$=Imot4!BP!?8$H^?RrF(;w8MR7K*4!xbi z5{<9^57rrQlt@T%cNokaz@n${?7tq`U^p1FZa(N}8lU88EgggBlFs}{LrIH0f5o}J zLB8I)MjMJd4?c=4eg~vfO&8`iaOLBMz9M+ZU0^);6(8uAYFoG?E345G9sLoMq!;U_ zu XI0ty3vZI zz5E=;7dhKMG$BBL@bV~Q76$H-yx?bsA6%!kaS-Xrtddahi}V>rcsvSDdSg^|NH0&g zgubwmmBR5@pS+g7Ox)VqeOS?F+6htKyI2laPqMF$lpcwR`*D@XfVg2 Pl}crt@|SjWzQ}Ft*sd-nx?Ez$u@khww{+Tj(`Gq?a73bsyfUvS9ol^33q}HtkW$1GCqWtdW zz-lk*=L)JhRh_SVE|xA|FZBG&Y A z_xkedeq58H2gDuM2KK$rqH!xJ#-leMMua!!>>_U9ZUA1@m{oq9W~J>bWBfmMWpZXh zhBMoZ_e-)1Hz!wn0(C5IV; |c&@ORl&!*D_il3&n*;t|P-G+z@vHvu6)%$sx=7BC3O43{ gRVda-;b82Ulo^?#A_MwZ8 zc21)cSL601c8Hgv-ey4ArA+!&ld8d9X@;uA?OjaPYbqfuXx7dc{AS3;(atkeuPm|o zZ70&0CpX8W$$?bp$4L~8h`?nlbV<+&_(n6|A;4vd=!}As>phi@nA)~YGv64?hj+Pw zM=M{+|+N2(#&SA;kw19ZYApDGedlG)oDA z@W5u}Cy3h|-c%)~wk41KUxqjvh {REFU+$gMGhFL)%HC} JqwYl;~aqU zPxCs>E&21^)Ak$n4GAezIJCZlG1_R2#|vznmR-DH$o;ond;7A YL4hZl}aycV`M5TehKOw##?;*(5ySYaYg7C^j)lPqcq0QY4|hw`1K*{Kp)U zw)>B110Ivu(!qwUOBJRy5FjoGor-TCrBQnU#Xbuc1xp ozJxwkEN5i1~;Kq-(vIb$94LzL&GzlUqRwQ?zNlDRwZJ}*7)a|{f LHNrX*>uc3hPnJpwy0Uq<)ZXX4K9?!qxvlJ@c>*T4(szzLsLxzXEt)u~NRhzM z)1jTo5|h0| z^5uZ~$sHo~(B$#XDKk)CysD|#^aL%k92^^0_r^neAnTG7bzh^mWcUgHMxG_#gd`Vw zr6ylG^~|YI@LPkFK3tDoY^bga!B-I6lKx+@fI4w3d*M@`fs-fo69wXWt#$A(o)~7C zPJ@riu>m(Bp}u)gHZ{YrJQn=KRkq_S5VfD>h?DSHTFKYlXYxS6ar3KOVBl$;yq+$; zH`rTii *>M(zI4L>~`f+-4 zC=e64qZTZ!(mtcIa*`L$pbIJ$*0fG!O;QurF-6A8u6{QAmBeWeyJQ_o)E^>)bbl?A zx2gfREU^8gFaOrn8q^%!o>X^W;wh`>t0rcUVCK7y*vZOB+9OCz1T7tR*v@|wom}Ld zL*Ryn_%cO5lQCXm2{>527RV0sKnJnQyxAPKHsZWllHqevv zc|K3HEZb$z7qa(@4|jA>F6~?+XB8jE$I6bXjjW5gi#pudRfN*34(Uo6gZh0=tJv>p zEPfjNRpX`YT0tHMx;Y;G8+**)P2L-wZz1GQmpk n5x}G20h#Wy~GH(|R-X(m%dMD8+s&^VWP&f6qK$ ze5Nwf{3>6M;V>$N%Oi`+d<|BDJs(_>)R*cClwFxa`7mi?(3)k^mdDd1oCOBRMXS>3 zFxI+zg%VT;rz)5@lM7-w3K0AO^+_pO^KpGRS%F_2s$@ gJVPruG$C8?Qe`QBXtWO E@CB1_=p?R%kB5$)RE#WZFC< zwmJXI;f!-VKhLj?si3lJnfprH3sS<`WboD|p`H?F>f_r`wKDfO9^ssc(mZL{rSB%f z$TT~qwG(x%97V;&b-I|4rj~)%k?^A>hrH=v$^U^ya02IRIdwz~mH$SaFGY%nH$#4Q z>T_c$yVe?31{TgZg LAJ?SI4q1Aaw7}sT7k~m2%k#v1g@=(%8c1R*M+3;yxLVblmIY}7I z=%?+Xw66D28Cf7kH9uV^J!_9-Ns@U{RcFe(XR^Ua!Esiuzv*mRW|&sgxtOm&UtXC? zL6nw|yf6j{@UX&I6RhIK@i9|ET_%tc;%{DY-227W$!b=NY=riLKabHgkublXE~0$; z Gwa*+q31{SDzJ z*Y5zI1UkpOv;$Q9QP{X4nrYb>#NEshlg}v>Vj$mO2GW@eB3VtC8DiR0JPfYzc zAq)Is2PeadI7D973<%Qr6>gB K7S3&qHQafv>JYdTc&!uB5ILB&Koj`{oVdeQ%-#evxkF^(Y$6| zzI5_gOWmmrO2gAoAO1;Ct$E!j2T5DNo97r%@e3(B)D$Ooof0y7; zK1c{gKAXw9p&4|&`fTSTX5))hTubI;t5qX#yJZ^AFdQ%6^7}{km9M+AHV%H;yHRL* z;E|sc4uK+Cb*+~G4?dYK;nh~Dpx~?x_d7e<7IfY0 ^;-yjxJt9vbM@82n2y-LM3>K`hat!6#}y|L)RPm_afsA_ zIGPk;|H8n1SBmnaoZBjl6QMJHOu?HEYM;xAV>~M7%tkyaDu4t$Pdy-VAZy0NPVyR} z=lIMxCVG@IW=EviM(s4XIPWnzTq12ZMg;?}cG03}XuFt4AfQvXv+jX2^~g3=jghsc zR78f5AYYd>V@x5>Dzk20b}rlpJPl!BoR=!N3O+^TsR}Kq4?gN0ms`I_)D!GAS-`;C zWLNRpADWaRvD_76jen%A^?$T?<>72?UEh6MTD071O;wcE)F3TtO3_Qv8lpwS5TROg z%ri0Ew(6?tWNIm@rV2r;5h0}1tcD_{h jlO#g*e7*fJEGIa#_|aoPeR}A1aBSazjasnBhZm&bw$OKT zaUb62TvPrn(@4cqbdz&d5V79XVgtiTH&``$eJ!jI>y->yW8dWVRk0BFE6O+gv`gPH zT@>B^rdF{!acWa7uwBs3 1our7e%fZKa>5nFY`qN_xpO*|)2a%Wg0WG=$iBU|sZ z`bM>d*IWxB%1A|7yPQzhzriW&K_GXmDP1ruZGMsTDui&4w7j`SHr?lGWY{ecAec;% z3u40~riXovI(Fd;ycv2ijU#pKizsC>=$l14k$?@3_~^CeY*h{dovCr$6Yo)sTt_!I z?4UA}Cnc)-GK8+Wj4{N>p (6@JXlI(5N)=J->pLDvL{?a7;bnvVlfp8HrKapKlwv&5y zf7Ql%VPW U+Nz E7^D05dr{|_8Optgz?nsE=76=BPDub%TnAINd4y9}L1SE^Ei_pv z%Z*yxq#C*sPq<=&YB!9O+TUICB%5P#6ZE0@FiwuQD~(^8iEbbp%F@U+E1$bAdZQzS zXYmi#Od B&14;6zeRb(U58w7444kn=6{Zn2w) dPBX@U`EaeD-MgUKsR^>gexvWH&`_p)Jo{33x*vurc_S z zWd9?@42FEM{XNP`P*`L5+t>|n$}fA5T^$WRqqEnftcJT9g@vw$dabPiO!eNRU|<%K zs&2&tGvqrxh%m`r(`t;|uUp1H7!sS}m$XxDNLhtAp|3@*tVW8hgU?J3H8tSlCOWrj z^ji_g7JugPWu&eKU3u}9$z3qx11j7n;$e*$`JEU zo*KuVDfBq@tM2+$LFTx^ca5_}3hwv4po)5v!(=O(1LR)$4b f{s;_etl-U#iqG^F6g-jMtYBh#Lf%?UBvatFU%7wD Xwj(e60J(QqfQ|3>z2ye)3!8<&IS}y^e{6oBfl2n? zkZ}IzDd&GhnmJcS>-+$=LN9w`%`{p=j)0&uUr8|lQjhC|E1~e)o=~TgZkUR&Wl z%J+kyH&da}&)zKd@+QlPbD}!OV(N@jMK67G80D?C7SHGKHqJ9;Y<4K^6d?$rh$6*4 zYZ9FsWj4QY@aG7D@BT-M@z0B1``3QCZRw5l{6)RWx^`VHaAcl6TTHVBw@cfuE3z$d zFFtl4Klo1ZY((AX(`U|z<_K2To#0bYfUKH2vmfb{=|0rkvkpYs5A^o(fFHm@v+~&i z&ZLZoJ1i%KdaAUJO*;~B<@3Cx2d(ALgboBdE~y4eLfG7%@^Ko!dLCwjlr6hhStu=s zu?ZWpkjN!X{*-oc<~)#g;ywt}F7{NWcF?}PK~%#Mk_6P$V1lYQPdsjEg`z?Jz2GqB z6!QC@x-AC=MLI4e3>Z6~LZsB$-N_@j83e`rl$k_xGD&MzcmKH;aG+fV&>nN)9$; @DD+Q(0^pA8TJEyv4ef{(>bwAjjV66S8~?WQ?yq@x=mjGK`(A zw>-%{6-Q^@;V-F$u9R2rHgEm;#0aLurb%vxk`fdBhxHmbZ?Df40JJry8V;-aRI;Yt zh#zy4QYu4e6kQisnTYX;^jqb1YpROmD*oAQ` HfG9A_MzIWdy(d{BDyfbWXQW!PDJq!43eQkQdH1f@e zqcYKM@6}utw|=6uaPschL$J7lfQD5Nv+G$O>^te8RrVG$iK%`MU8>p*r)LUIE1d~O zoa Uz!D@dB~sAh7xxY9p2g|I_xJJRT1xt~uWxoH^gpU!dt6h%PX*w9Z*LrQy2$ z$P;IJ-6tzdYr2geV}RTpDZ7(7rmJ2i+V8=LGm0&m)6?!)%WmO)% Lt`v9_Cbyrh5f+iZ}QhTNQZktU)Rv$Wd^je zo{W@vYWGmsb%s>-2&s@HLt#~yCb;%NVrPU^hm2qZH^3ZZsXs8~m(ulUgzj{u^cJoQ z?j9ryofRT_?$Y)b5$cT zjK_h7wot?Sd-$ai84%A6e5z;RkJVRZ@%Gs;L3z|SXkXbC5tVjh^3({cNllhB1!=tt zBVWg4O9r((AxFtnFOO%s)?0#_J2@Ps9=D|mVSgQ9)4$_C25FbI@cG7d?e4~Hl8%*2 z$D;iFqKFowdqdIwYF;p-lQT_VZc^x4NGomMElke8F>YyL2el ^Y1(<)X_mf@82`+s|9y`Pc5lUekQ~H~^$)A#6(`^0{Jov~3UZSSz9%l4 zugnys8D3sXUF}9(SvYEFPPF|Xw;UNIu2FVBS2mDQ6R9=dAdn}gJWwQgcfBQllY7fB zaGM}eXW&Z06iXR_`4-`y7xA3b)tO{z(u@#|e3f3OL0HQR1O^7X&|A_Uj8gU^Z|j^GoKntNPG&D7O^^2+SKv>vpPizk{j(A7WK-!k}(J@G}V zzw#BTBv}X8DFzU;bGhnH!0*RnsHfYXrJok0YJD8mf9lSYSMgaC?A2PbdK%X$s`ZeW zn}%4fX})n~X94u8Y6me)zg$#1Q4eF@PC9v#tIZu*qIiWOIpIc0yq4inW(#RnR#k_- z#0OF9cV~4(La6n9Ww~}yE=oC$0+H$ISAtp}=*Be|@o6XoZ}^<%sYnu}Fjit*H+Z92 z%|~UqpGH0o&MmX_9rM8&Tc#|Xa9%3V|0BeGqab4kp2+I MFTfs+{xP+tpet|g8^lsXU^i1ID}9Jcs(5{WkUhaze}K|bdQ>JAw?>tE zkTKI&g%yBH^m583vRU7;@H;2R!<`VVm5DU2hQfq|c=Bwe^568>NrLh}=;<3r_O$Ce zLq`1Xx~1ByG2%N><3>RivLE>^?JbaZ);070fodI#?T@xHyXc-*&bLOFNRkb -&wAO ICG=XHzRREh#EcX^b1{utT&~*mM4F7S+(O{y{k;aCr2-!16wT%KTC5;W?ovAlUQZ zxpe({*Ok&L;z-)dIGaJ3LrboEnA)QW^7CgEOK@-@RB|Q8hR%r7Ity?IOA_PBoB+KM z(ym@+=g!?+j9%(%+3c`U%OcDz+-Nlt7Iod~sW!_)kwtP8%P@b4V{1EIY$tqxA}3{+ zjvy`La>w%Fh8WXJwS2CZ&Ch71Q4;Co<|Y`tk}C=l;69j)ybGaQxJWhYgSdiEL>KvJ z=8H MKA@)#R3>}=$1 zUzDS!U77-VWkMMo5Rlir`HWv5zPFkesJ+qF>Z&Bc1N-9$@yWJ?XZa?d>IHQJEQbKe zv+XvR`tgx(Y9(f3vO#gFaW(nJ;0kYg2#qk=-p+ gGP;z&0^k%; z_KM65_M*XWQQroV%rBl4)=)PPDHU `7-TZ&!c`H~E!ZM<<*#yd>p=8Be9| z(&~vQFFwkvQlEQvZyXq_`n-nEI966;gh(TG*(DEU8WcUC?w*-8_qKcdShdy0wu1@m z8Ug_Ue!hb*M3& nm#~I8HS==Xe;|rNy=u_FiP)RiS%2XH(~U< z*iOL3w!q+x 48I(_*bj}M$nsdVhxJN{U3R%lGg@}E>GEuP4mx_MtFq^63%{l)#c~+K4!5{Z+?nx zehS YQj5G`o$qE_lG@E^AzPgDokTlFX@v5HauihyAmvQe%HZg{6dM$z z-D-2L$yz+-xp2jJms=~ezlO%88}yJUy)kgU>Q`Fs=QH-%lVptm7~=bkEhQo+8^Exr z_~2K#;M--^!4V}uon?L7^ $`z)64cn#=eR2>3mpBm&yFAUg_j2oieYqOJwcJ zp*K<#(*TvFgLS@l)t?OwI3-;Pl}ISx=6;mrZd}=xN0}RXPhF3(sdi8qK6GU)^;6it zFf&irp3)E=mVJ;v*QuSk&<#`*eR&h@QTNjkvF!ers1@;KXNJcHC!g{SPuLL_4)wLx zU#9=vVGz6)FBqvf)gT;B^vqC@D<38>t^tnAIR%9+^Ulr5$+mWHSHDBA!B0@_V738J zsp^=dxA%6uOPYLpUoQt+TLc9GsFS&|^PSp25uulz0@v5H4o&=xpN@f2=V61~5h)d% zp4N*HU%tzpjoC50AdpOOC2dT5*RWjUM|+*MxJeL34R$Hd6tmC=(DEG%V~idf4aQaf z>#^`Z{i{EKdX#+Ua(`GJ(ex57H&;(QiJf$Q>_g7pd)j-xDPMbStnaNXMe zR&Zs+s@V8K4`0XNHhQ<5 z-Hr9am&4Pf|CIFUzrYOt5h}zV!~*qCEQ7ah{ASAZ_uFCmZ$JtEFKwMg91IZn-{a#i zd;<~tjwFu5l7*vNR-E1zpU-~*Y%G2J0I-Pt0CwZcg9BLf;=eEdZIiz{#Q)RL@GCIb m_xDeKuuTCDSPtg7BTPdc;I))OiI2b)rd!(38-<#-5B>=e@87fl diff --git a/tests/e2e/__screenshots__/scanner.spec.ts/report-light.png b/tests/e2e/__screenshots__/scanner.spec.ts/report-light.png deleted file mode 100644 index ec1b9ba77e8c782e800db889183bd5f9dd37e369..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42627 zcmb4qcT`hL`!4E1L=+Cvq}xCQ0TJo#03y<*_uiz0-a}Co6c7+;QbH&~=%I%mdha!q zgx*W2Nk~GtoNwLlpZi;Pt$X)B@9e#1-g(!|ynCK`p1q?!Xe!^o%W{{DjO@P3`?oq| zWaQVyn`3uwUYmb7Rd0}y{Y|FwR$eb4b010h554_b?{SgQPkldqM*9Z6S2q~C=yb-_ z)lLiF#Os{$h}2FDy{R73;hTI}tFAk^hE6bX=G_EX@Nj(pd6PGLap2csZp`4sLRgB@ zIwC@;GW#-g^&ANT1#YG}-u4S4NDJGZZVkV@?v#w|(^aGLzp;>!m6F|f_^-8MxYPEp zB`f)d?DoIbi2UZOe{CD@-=F@|#^5vAy?-B6-2KbyU;9b_5!tPO3#B*zPZu9{ZdM40 zh@SY^Da;@t#eW?;4YWW4p~XHa$@$T=TbjeXwvk_7uE5nZvNAJ^m`L~S%S{rqj@+lq z=&w{`^y>-=KfN1s`IR^!!ceJk<*}C3+88Y@&08MD@hj{Ys{EoRt>18UvQ|N9Ks74% z#|xrELNW^-bB4{~aQo4S-LaH*`|HYtgoGj%#r{BdsR*jdKWzl#7i45S >J=0J#fAIzzxjxy7*Cm%826(8L z(gg-YzG0uWP_@3r6U$Y?hwOCEv{|s2-{n0y;>n95g DWpt;=T2%mf+0~^-I&gW`-WrWNZ4AeL{3_`{dIt{`y6LepK`uHUP^=n z9n{dGiH}+j=momeKR15;;u5;ZnC2_TcRk76b9a(|eDOEsTv&Rl)mwZ!u<5Ri{}F?y zO~($;boT9X 064NilX-fYbb;pY<;R7+w1Y;IoFn>~@PKS}0x z5pr;#x}lK&F*;i20k4-Y4cs$YFS4`h!6dgbHv-0tC4G9QBOl_nAs5&s`@Iygq~&;_ zfvRw=fPrvlMTv>`banZSJr>d#(x863yJ)ND*Q+S{-^Buo2`jnXQHhwOG#+i(?8<7i z`Td(2D5-y*`GoJpCwv)EUItT0^*SOLQ`IS1^bb97uE*5^eJ3a`FWG%4U3%}~bf(>` z_DYcyRavI5hAXp;%scA(pB8Y^XJs}7V@~g%$f>OR(uSqYA1uTQ&(CcLE=;eS9TvW9 zuMC}q!Ewuh?%x!+9y+`SOb<#4pBcHPbTk3r O%!u zjsg-7lV8;1e0Mh=T&%e@85%-4)+)-jtHR1G8wpd%Lu?By=a)?_m+ehj%*E*p4Nfbo zV48P54!dkgs4{%(WqU~(Ljm`^66t6>wfF1urL5y(coFnY&CZHcDAFI_A(B&$rjrRe zcQr5sx^48TjXF?uWU74I51|Of6@W2aDH_0B0gJ&psJY;B8tF0|`Nsx}*g0UuezjEZ z|21{KGX@JA?TLG!v3_zvShNT!$;iOX37_JyOB`-T^WPf@4h#Z-?=6qkxxpynH1@e5 z>4m4u9I%V;^GJkTF^cak*v_Vfe8`|pw(oqN)^?@kUGv0 z6bAIBywY=LKW1;MbiyZa>%6VGljjr%TRQaTz-cb^=3{x`YG?;=@QPOfDo4KhIZ$?~ zGAi#akIDRZykX2t`^qXFI_s1bvUScFX>)Ef8Pc*8xGgnm2W?u&;wlD&d7jVic>y&- zYa`4`uRgmw93-8E`TJ0Kx`?dAY>~KufgRaB6E;orcEIS%% o&GRAc9U`8_zSQW_~YxVLw}lVdHhL8%tdj+>p^6I!LJU zYiy2noX9zifQ6`$cE6tKIQznTA!*!=(6U!ajCHnqt!t^}RB^IpyN;Gqf5ic-L3umK zKm6yg(&eM~ |+d0%V=7eB# z{sVK@yrUe=1V#G3 #ACjQ-{Ad~Wj15FF;3 8JqbX7B5lUZ2OCwI@CIL`n-&k5n!g7x^R)}{#vIN0@ai<`F~1}W-z zc*xW4KK6&Er)Gj30W$E(4`evptO!9h+7`tjdo)0cW%4sSU`GMz!UuBAU2gc*NwC(A zNo?BX^iZpSA$6#*WB1NIT{@A*Aw*x{WCD{2_bBb;TX*9|3Hce%GeV-W99K^T*WQTJ z`fy~3ba9~hY+T}&01iL=k1>9Z|FPk&U)X8PC?xLV3klAu4WC8}aHtn@RC@yQF8GP& zy$71mB@SzcJ6WY4omMH#T0}Q&sxEb*T9>%kx`~(tSf+5xAJkM3Rf}`uO`8=a0hYU0 zXGn`UN X7Vi-#(*EH&|h+E*hXxC(u9}x2mzZBB`np-2?al9CK=f{I9n!RIhdh& zedS;04%A<~0A3Be#@j}(J?m9jY0{;O8}eKnJ+(qen;Bqwl#7EZ-x~C-wS e!KF>77M9x>67w*>+}Xv?J9aY{G23ePFrN1&wEy%P}-r-VG evcL;J;kb8*4XdInLD)mJ|CgyTliY K$9v8 z!MKeYfyXmP(tATRXu!NrJ}FztvSrh cNcWb3bk>YJpG^32-TOapBYWYvaRJLg^Q-=kqV< zy)j^rt;6IL r3W?mUe0V^Zofbm*Pb#@dfIa3U^3&Xjz1#_TTK zVX49qnX9e4I`&7mm&{Q}7`8o!9q2}P*DUrJ2SMMQH`H?NWrr0heYz~3q)eZQd#zac z8jM=ywo5et x nM1Gat%2XwTXS3+S1 zi!!jDoX>DrUKywiX32Mr McuVR_Ar|{%W6rFYO^sqVmrUHd~xL z_ZgCx-5skULt0K-_os_A(Q#8ELB7Q783DiWLGLf~ 3(Egd*D} z8oT^?k%!ypEzt7GCA8O%b4Z Seg5!PMU2`? zb-oTwxsl87lFuFC-i7;YY_9i(W5D|Aqsz;=^-TtygfN5R<3XP_Ro^1sM2113V86dz z*-x2jb;Tv=`Gwu*rl!;%Zy_KdCSgI)!=mDsX;(+aYvt+|xQ*pQ%jhVW`Rr$C>%8iC zTUVEkm=+im$S=IHdyN9`a?eR;afLn-2>$DR=0fw4`Wa1(ti*v4e0=SkMZ^XB^)dTY ziUl5k92KJ633DcA4XOJ(dz9hjv&vMJQ#pVtpi6(JTQ>g}Sa!G+D^Qenm!8*5r`bbz zf$uokAw^p+=e)7bS)Xv0wmp>6%A{opb0?MpD~Wsw5|Z; >N@}06?&VuQ!cZeb(Hg*GLp3%mb5RnU^T+VyQmji`KJr z(+2JePhJhxVw+4Yqe|=4$INv1$i1D~rdox8^c%HJIOh}+ig%wK$@Yxt>jY-GrJ!#6 zA>W#~5KK99P&QP(y3}ApLUveeJOmJ7u`gQ(1^UxO56-=xAoo@te;SuxlO@} U8JL*?j#Y^y5@W;Oi$LVqr47`h8((&U zS9m%ft%pmn+v>W(c&iFOC~C`H-S5%VwzP)m+MD>~_ncHQTzOXrm-cDCYBt>1{tJ}G z;y~Fmt|=iQVFNmBeKFrpPaS@o^Cd=cbN<3T*hlij#yPI6?C09AJYg8W-vPcwj5M^~ zfR=_Uc$6;HEo9GH(&J7t|H}oOI+DF1%Pubdal^>t%xweE#OJdh`WQm;aA&$cXoh{` zgaH<~S{3~P3;*1UxqB=_R4sTM9BpZ_Rro+p!e(FZcc7f#5zu!rky5SIn79)?GuV3} zhnSr)F5(4^9IZT6wtx7@@QurY#P9OoUpmS^=XnU7Sd|thD&$1Vct~pez01UpsCRWP zVP<8N-qOL53o%oXpn@puX93JvCD`z##c`-zLFZMhK~iSD=R2vix#$?qTlOb-kTU$( ztdica9<2tw(Ea#kdyRb6aagT43{`LM8*Ml7y=PWbkaU5kgZ|){f6qN`F)tp5L<*EF zx~_dw2|;}ups@04(OSIhD{ZwZznTB4rDd0jl`$ocC(7G4Y%byGJ5>WyxkOD+do5zi zp+(j-5d{8TlkUROa)}(>%b%8i=CUD35F)N7@9T!mxNTVCnw7m{wj&&T>$2|1K~)mo ze4Ndece|Bw01^BOacq*EZfmt`(LgJwwfqGADq{Mv<>5@4+U7dX-;m;**k@$6Ozzv~ zQZh&YNDB-seqlUZortGvAL3|$u0hypd9^MaG79?~Od1&;q aBj`V{N6qmd%Y`+AW0%SI<;ffi)F zzBFrQBwdh`lB}?UcS)j60Tod(Kg0CZ)Hr+s4#K6Be;k_`9Y3mx^q1;n$Y2OHH fRould+Z_Rx!^1*=Hdn3 z-d9YUSpyIB0 cq43z!gM8QZvHEa$(rQ`}o&Nb*Zc{_o^zXMV%_uK|*(rKVV#)e89#Ts9VL) zKk)m2T*Vx25I5_8)hwv8x%9^^N^1!(_Y{-a%;VN5drC~GW`QxrM*Bh10jG_!Wp*zJ zSYl|IUko=R|C5AiEHoq3%m2? 3;MgxMa$?{-46`Cn%|@{ zS}xJw#?j&IGu >$i+K)_ziNfprY j2lwF8Ad%41Ri$Rc6_eZ)8Eax4qs{K}zyKqgC!c=-~&I=oN zmyU9pCJMid3N@~EUwH9}G8tuKW+8Z%<9*-6Gd8nkj|B!Lh#Mo)G~45`64lG!o$~5s z#*{@88_*S`q3L~=eNe+r9wp}pNXmO4sXL)3*T=YcO1(YbeAcbZ{3`+}$Eh~l-#=j5 zR0QacHW3Q!>yx1Hy)StVJeaOS)fv+i#juin3i~I2|HeoYy-&!>Duc578hboF3c!jW zWxaUwam#W0SB1-%@5v8Dsqx;XI?nu6=9|UyPUbvQ)>fpbX|@YQWv%I53+x(K15#VC zWJ{(CGyd9T0b!+&ttI`^&)U6FehLaX)4z*;Kf=K=$lco+p(uv@)5G~`uCqyO-JIkd zrN%q^EYjGOAAFMzWf`K@O*uaBR?FbuFjt7mWaQS6C1KbF2^SjLLSQ=ONvLzyq)eVk zkf_;TY92ynf0ZmRkP#YVov#`W2cZ%EOZ!*E _ln)^D@k$=AuR-wNUt5yzM&MWUa_S9tvDEYxU{hrM<31MN_ z&=a0}Sc~|Iy6-IJw9~i&89dawNNNr!eY?6`NMnj4`6-qiuwsBs8aeGlo4Y@m^0<66 zYD!x+AbhbFFDy#ul-Rlt#V;e&h43sv^<58NepQkZbKyzco}`OAKs-&r!#v;%@(xup zTnaIy5a`P*c!N8$YF*Jn)#!JOTZExof2**m%v#9^0DoRzL)>cC7oT#O$<9)D_oLxf z-}Z9%70i(BNvCI@_^|6~;}-w^FRD0B-37PJwv02^oK8g()W0j965GHK8|lj-(tgo} z?iI8jOh0Gd#Vi!qv3fVD2qet}k;kmFb5P%($8xajbN7=b*WV?f4Rux>0=c*%_H=hw zOoE{;PQ^9*E(N@QM%8g4gPJN=J)wt;_ddTO>4Qc0K#pOe(q&6KWoeu~y5i4jPOCw+ z9(@bca>MS9+Y!E=%~jd{->@eRJJ|ERGXB6s&$Cv;KJN$)Y}0Ha-zn#rGbEl7K5h*l z>1XqoTelBVqrSii{q_ru<`7|49~QCUjX|f#)64_2`SXLC)k_IQ$swU; i|^Xi|P$?56#CkNc<8F`6BgRpUfdM_nnC;H$NZT4uu z=l&@wgt54BBujW+YVWMB8!RBbd2*Pp6!=(*Pvo_zKCwU)t!flbzVIvgLB`Kw?<0)c zqcwUfvVW5G^KTu=6+a?N4Js~^FouK@Ka%Fh3Y)EM<4{`E9AZu$QcSW6dTwdGa8MJk z33?`U+f nA_fAfuXUZPpVK9VR6LN!ijjB7$n@mT{ @f>i(3 zC5vHJmX-T)#^