+
    9jS                         ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RIHu H	t
 RtRtRtRtRtRt/ t]! 4       t/ t/ tR	 tR
 tR tR t]R8X  d
   ]! 4        R# R# )    N)datetimetimezonez/app/src/androidTest/java/com/yorvana/regressionz7macrobenchmark/src/main/java/com/yorvana/macrobenchmarkzdocs/regression-history.jsonzdocs/regression-dashboard.mdz?app/build/outputs/managed_device_android_test_additional_outputz;**/build/outputs/androidTest-results/managedDevice/**/*.xmlc                    . p \         P                  ! \        4       FV  w  rpV FJ  pVP                  R4      '       g   K  V P	                  \         P
                  P                  W4      4       KL  	  KX  	  \         P                  ! \        4       FV  w  rpV FJ  pVP                  R4      '       g   K  V P	                  \         P
                  P                  W4      4       KL  	  KX  	  V  EF~  p\        VRRR7      ;_uu_ 4       pVP                  4       pRRR4       \        P                  ! RX4      pV'       d   VP                  ^4      MRp\        \        P                  ! RV4      4      p	\        V	4       EF  w  rVP                  ^4      ;'       g    RpVP                  ^4      pV'       d   V R	V 2MTpRpR
V9   d   R
pMRV9   d   RpM	RV9   d   RpVP!                  4       pV
^,           \#        V	4      8  d   W^,           ,          P!                  4       M
\#        V4      pVVV p\        P                  ! RV4      pV EF  pVP                  ^4      ;'       g    RpVP                  ^4      pRV9   ;'       g    RV9   pV'       d   VR,9   d   KS  TpR
V9   d   R
pMRV9   d   RpM	RV9   d   RpRp\        P                  ! RV4      pV'       d   VP                  ^4      pM\        P$                  ! RV4      pV'       d5   RVP                  ^4      P'                  4        VP                  ^4       2pM6\        P$                  ! RV4      pV'       d   RVP                  ^4       2pMTpRp/ p\        P                  ! RV4      pV'       d   RpVP                  ^4      p \        P                  ! RV 4      p!\        P                  ! RV 4      p"\        P                  ! RV 4      p#RV!'       d   V!P                  ^4      MRRV"'       d   \)        V"P                  ^4      4      M^ RV#'       d   V#P                  ^4      MR/pMR V9   g   R!V9   d   Rp\        P                  ! RV4      p$V$'       d   V$P                  ^4      p%\        P                  ! RV%4      p!\        P                  ! RV%4      p"\        P                  ! RV%4      p#RV!'       d   V!P                  ^4      MRRV"'       d   \)        V"P                  ^4      4      M^ RV#'       d   V#P                  ^4      MR/pMRRR^ RR/pV R"V 2p&R#TR$T;'       g    RRVR%V/\*        V&&   \,        P/                  V4       T;'       g    Rp'V\0        9   d   \0        V,          p(\*        P3                  4        U)U*u. uF  w  p)p*V*R#,          V8X  g   K  V)NK  	  p+p)p*\5        R&V R'V+ R(V& R)2\6        P8                  R*7       V(V'8w  d9   R^R^R
^/p,V,P;                  V'^ 4      V,P;                  V(^ 4      8  d
   V'\0        V&   M	V'\0        V&   V'       g   EK  R%TR$T;'       g    RR+V&/\<        V&   EK  	  EK  	  EK  	  R#   + '       g   i     ELc; iu up*p)i )-zcScans Kotlin test files to build the mapping of test methods to scenario IDs and quarantine status.z.ktrzutf-8)encodingNzpackage\s+([a-zA-Z0-9_.]+) z(?:^|[\r\n])\s*((?:@[A-Za-z0-9_.\(\)\s=,\":]*?\s*)*)(?:open\s+|abstract\s+|sealed\s+|value\s+|inner\s+)?class\s+([A-Za-z0-9_]+).RegressionFull
RegressionBillingSandboxz?((?:@[A-Za-z0-9_.\(\)\s=,\"-]*?\s*)*)fun\s+([A-Za-z0-9_]+)\s*\(z@Testz
@Benchmarkz@ScenarioId\(\s*"([^"]+)"\s*\)^[rR]([a-zA-Z])(\d{2})_R-z^[mM](\d{2})_zM-Fz@Quarantined\(([^)]+)\)Tzsince\s*=\s*"([^"]+)"zissue\s*=\s*(\d+)zreason\s*=\s*"([^"]+)"sinceunknownissuereasonquarantinedz@QuarantinedQuarantined#scenario_idtierq_metaz WARNING: Duplicate scenario ID 'z' found! Already mapped to: z. Now also mapped to: 'z'.filemethod)setUptearDownsetup)oswalkTEST_SRC_DIRendswithappendpathjoinBENCHMARK_SRC_DIRopenreadresearchgrouplistfinditer	enumeratestartlenmatchupperintSCENARIOS_MAPSCENARIO_IDS_SEENaddSCENARIO_ID_TO_TIERitemsprintsysstderrgetQUARANTINED_INFO)-pathsroot_filesfr$   contentpackage_matchpackageclass_matchesidxclass_matchclass_annotations_raw
class_namefqcn
class_tier	start_posend_pos
class_bodymethod_matchesmethod_matchannotations_rawmethod_nameis_testmethod_tierr   	sid_match
conv_matchm_matchr   r   q_matchq_argssince_missue_mreason_mqc_matchqc_argskeyr   existing_tierkvexisting_methodstier_prioritys-                                                C/home/Messier82/projects/service-book/tools/aggregate_regression.pyparse_kotlin_sourcesrg      s   E'',/Azz%  RWW\\$23  0 ''"34Azz%  RWW\\$23  5
 $g..!ffhG / 		"?I,9-%%a(r R[[  *l  nu  v  w )- 8C$/$5$5a$8$>$>B!$**1-J07gYa
|,ZD J#88-
!66)
!%::-
 $))+I8;a#mBT8Tm!G,224Z]^eZfG 73J  [[RN !/"."4"4Q"7"="=2*003 "_4WW8W+1O"O )#6"2K!_4".K%8"2K #II&GY	"+//!"4K "$*Dk!RJ!(*:+;+;A+>+D+D+F*G
HXHXYZH[G\&]"$((+;["I",.w}}Q/?.@*AK*5K $))$>P"&K$]]1-F ii(@&IG ii(<fEG!yy)BFKHWq!1)'W]]1%5!6q x(.."3]F
 $6-K`:`"&K!yy)CEZ[H"*.."3"$)),Dg"N"$)),@'"J#%99-F#P#W]]1%5i#gSq)9%:1$8hnnQ&7" #*9gq(M!Za}-!;K77<!;f	&c" "%%k2"22l"55$7$DM6C6I6I6K'o6KdaqQ^O_cnOn6K$'o<[M J00@/AAXY\X]]_agjgqgqs$,)91lAO_ab(c(,,T158I8I-YZ8[[?C/<7;'4; & ; ;| #5$[1y !/1 !9 ...` (ps   Y2.ZZ2Zc                N   V  RV 2pVP                  RR4      P                  RR4      P                  RR4      P                  RR4      P                  RR4      p\         RV R2R	V R2R
V R2.pV F.  p\        P                  ! VRR7      p\        V4      ^ 8  g   K-   R# 	  R# )zjChecks if a flake marker file exists for the given test case within the host additional outputs directory.r   [r@   ]= z
/**/flake-z.txtz.tmp-reports/**/flake-ztmp-reports/**/flake-T	recursiveF)replaceADDITIONAL_OUTPUT_DIRglobr0   )	classname
methodnametest_keysanitized_keyr>   r$   rA   s   &&     rf   check_flake_filerv      s    Aj\*H$$S#.66sC@HHcRZZ[^`cdllmpruvM !
!M?$?
 t4
d3E
 		$$/u:>      c            	     p   / p \         P                   ! RRR7      \         P                   ! RRR7      ,           pV'       g   \         P                   ! RRR7      pV EF  p \        P                  ! V4      pVP                  4       pVP	                  R4       EF  pVP                  R4      pVP                  R4      pV'       d	   V'       g   K8  \        P                  ! R	R
V4      pV RV 2p	R
p
\        P                  ! RV4      pV'       d   VP                  ^4      p
\        P                  V	4      pV'       g[   \        P                  4        Uu. uF   qP                  RV 24      '       g   K  VNK"  	  ppV'       d   \        V^ ,          ,          pV'       d   VR,          pV V
 2pM[\        P                  ! RV4      pV'       d5   RVP                  ^4      P                  4        VP                  ^4       2pMTpV V
 2pRpVP                  R4      f   VP                  R4      e   RpM)VP                  R4      e   RpM\!        Wh4      '       d   RpVV 9  g   EK  VV V&   EK  	  EK  	  V # u upi   \"         d.   p\%        RT RT 2\&        P(                  R7        Rp?EKV  Rp?ii ; i)z7Parses JUnit XML report files to extract test outcomes.z%**/regression-core-preserved/**/*.xmlTrm   z**/managedDevice/**/*.xmlz**/androidTest-results/**/*.xmlz.//testcaserr   name\[.*\]$r   r   z	(\[.*\])$r   r   r   passfailureNerrorfailskippedskipflakezError parsing XML file z: r   )rq   ETparsegetrootfindallr<   r)   subr*   r+   r4   keysr"   r1   r2   findrv   	Exceptionr9   r:   r;   )results	xml_filesxml_filetreer?   testcaserr   ry   	base_namer`   variant_suffix	var_matchscenario_inforb   fallback_keyr   final_scenario_idrW   outcomees                       rf   parse_xml_reportsr      si   G		9TJ
))/4
@	A  II?4P	5	N88H%D<<>D LL7$LL5	||F+  FF:r48	"1YK0 "$IIlD9	%.__Q%7N - 1 1# 6$/</A/A/C#c/C!zzTUV_U`RaGbAA/CL#c#(5l1o(F "/">K+6-7G(H% "$*Di!PJ!(*:+;+;A+>+D+D+F*G
HXHXYZH[G\&]&/+6-7G(H% !==+78==;Q;]$G]]9-9$G (	==")$G318G-.a 8	 n NA $d<  	N+H:Rs;#**MM	NsW   A,I=AI=-I=<I=I82I88%I=.I=BI='
I=8I==J5!J00J5c                     \        4        \        4       p \        V 4      ^ 8H  pV'       dS   \        R4        \        P
                  ! RRR7       \        RR4      ;_uu_ 4       pVP                  R4       RRR4       R. /p\        P                  P                  \        4      '       d9    \        \        R4      ;_uu_ 4       p\        P                  ! V4      pRRR4       R\         P"                  ! \$        P&                  4      P)                  4       R,           RV RV/pVR,          P+                  V4       VR,          RiR VR&   \        P
                  ! \        P                  P-                  \        4      RR7       \        \        R4      ;_uu_ 4       p\        P.                  ! WB^R7       RRR4       VR,           Uu. uF  qfR,          '       d   K  VNK  	  pp\        V4      p/ p	\1        \2        4      p
V FJ  pVR,          P5                  4        F,  p\6        P8                  ! RRV4      pV
P;                  V4       K.  	  KL  	  V
 F  pR^ R^ R^ R^ R^ R^ R^ R. /W&   K  	  V EF  p/ pVR,          P=                  4        F>  w  r\6        P8                  ! RRV4      pW9  d   . W&   W,          P+                  V4       K@  	  V
 EFX  pW,          pVP?                  V. 4      pV'       g   VR,          P+                  R4       K@  VR;;,          ^,          uu&   RV9   d0   VR;;,          ^,          uu&   VR,          P+                  R4       K  RV9   d0   VR;;,          ^,          uu&   VR,          P+                  R4       K  \@        ;QJ d    R  V 4       F  '       d   K   R!M	  RM! R  V 4       4      '       d1   VR;;,          ^,          uu&   VR,          P+                  R"4       EK+  VR;;,          ^,          uu&   VR,          P+                  R#4       EK[  	  EK  	  V	P=                  4        F[  w  pp^ p^ pVR,           F:  pVR8X  d   ^ pMVRj9   d
   V^,          pVRk9   d   ^ pK(  VR#8X  g   K1  V^,          pK<  	  VVR&   VVR&   K]  	  Tp\C        R$ VR,           4       4      pVR,          '       d   VR,          Rl,          R,          MR!p. pVP+                  R%4       V'       d#   VP+                  R&4       VP+                  R'4       VP+                  R(\         P"                  ! \$        P&                  4      PE                  R)4       R*24       VP+                  R+\        VR,          4       R,V R-V R*24       VP+                  R.4       VP+                  R/4       VP+                  R04       ^ p^ p^ pV	P=                  4        FR  w  ppVVR,          VR,          ,           VR,          ,           ,          pVVR,          ,          pVVR,          ,          pKT  	  R1VV,
          ,          \G        V^4      ,          pR1V,          \G        V^4      ,          pVP+                  R2VR3 R424       VP+                  R5VR3 R624       VP+                  R7V R824       VP+                  R94       VP+                  R:4       VP+                  R;4       VP+                  R<4       VP+                  R=4       ^ p\        PH                  P?                  R>R?4      p\J        P=                  4        EFG  w  ppV^,          pV	P?                  VR^ R^ R^ R^ R^ /4      pVR,          VR,          ,           VR,          ,           p R@p!V ^ 8  d*   R1VR,          VR,          ,           ,          V ,          RA RB2p!VR,          p"V"^8  d   RCMRDV" RE2p#VRF,          P?                  RGRH4      p$VRF,          P?                  RI^ 4      p%VRF,          P?                  RJRK4      p&RLV RMV% 2p'VP+                  RNV ROVRP,           RQVRR,           RSV$ RTV% RUV' RVV& RWV! RXVR,          VR,          ,            RYV  RVV" RWV# RZ24       EKJ  	  V^ 8X  d   VP+                  R[4       VP+                  R\4       VP+                  R]4       VP+                  R^4       \M        V
 U(u. uF  p(V(\J        9  g   K  V(\2        9   g   K  V(NK!  	  up(4      p)V) F  pW,          pVR,          VR,          ,           VR,          ,           p RKp!RKp*R_p+V ^ 8  d[   R1VR,          VR,          ,           ,          V ,          p,R1VR,          ,          V ,          p-V,RA RB2p!V-RA RB2p*V-R`8  d   Rap+V,Rb8  d   Rcp+\N        P?                  VRd4      p.VP+                  RNV ROV. RSV! RWV* RWVR,           RWV+ RZ24       K  	  \        \P        R4      ;_uu_ 4       pVP                  RePS                  V4      4       RRR4       \        Rf\         Rg\P         Rh24       R#   + '       g   i     E	L; i  \         d*   p\        R	T 2\        P                  R
7        Rp?E
LRp?ii ; i  + '       g   i     E	L; i  \         d*   p\        RT 2\        P                  R
7        Rp?E	LRp?ii ; i  + '       g   i     E	L*; iu upi u up(i   + '       g   i     L; i)mr   zEWARNING: No test results parsed! Recording as infrastructure failure.ztmp-reportsT)exist_okztmp-reports/infra_failed.txtwtrueNz$Error writing infra failure marker: r   runsr   zError reading history JSON: 	timestampZr   infra_failure)indentrz   r   
pass_countflake_count
fail_count
skip_countconsecutive_greenconsecutive_passesruns_evaluatedoutcomes_historymissingr~   r   c              3   *   "   T F	  qR 8H  x  K  	  R# 5i)r   N ).0os   & rf   	<genexpr>main.<locals>.<genexpr>T  s     3(Q&[(s   Fr   r{   c              3   F   "   T F  qR ,          '       g   K  ^x  K  	  R# 5i)r   Nr   )r   runs   & rf   r   r   q  s     P;O;O11s   !
!z)# Regression Test Dashboard & Flake Auditz
> [!CAUTION]z> **Infrastructure Failure Detected**: The most recent scheduled run failed due to system/infrastructure issues (e.g., emulator or runner crash) and did not produce test results.z
Generated on: **z%Y-%m-%d %H:%M:%S UTCz**z"
Total historical runs tracked: **z** | Non-infra runs: **z** | Infra noise failures: **z
## Suite Health Summaryz | Metric | Value | Description |z|---|---|---|g      Y@z| **Overall Pass Rate** | z.2fz5% | Evaluated tests passing or flaking successfully |z| **Suite Flake Rate** | u9   % | Tests requiring 1 or more retries (Budget: ≤1.0%) |z| **Infra Noise Runs** | z= | Build runs failing due to runner/emulator infrastructure |z
## Quarantined Testsz> [!WARNING]z> Quarantined tests are excluded from gating PR builds to protect developer velocity, but continue to run in nightly regression runs.z|
| Scenario ID | Test Name / File | Tier | Since | Issue | Reason | Pass Rate (Last 100) | Streak | Eligible for Promotion |z%|---|---|---|---|---|---|---|---|---|GITHUB_REPOSITORYzyorvana/androidz0%z.1f%u   ✅ Yes (≥30 Green Runs)u   ❌ No (z/30)r   r   r   r   r   zN/Azhttps://github.com/z/issues/z| **z** | `r   z` | `r   z` | z | [#z](z) | z | z (/z |zB| - | No tests currently quarantined | - | - | - | - | - | - | - |z
## Active Regression TestszM| Scenario ID | Tier | Pass Rate | Flake Rate | Consecutive Passes | Status |z|---|---|---|---|---|---|u   🟢 Healthyg      @u   🟡 Flaky (Needs Quarantine)g     W@u   🔴 Failing (Needs Attention)r   
zAggregation complete. Updated z and r	   i)r{   r   )r~   r   )*rg   r   r0   r9   r   makedirsr'   writer   r:   r;   r$   existsHISTORY_JSONjsonloadr   nowr   utc	isoformatr#   dirnamedumpsetr5   r   r)   r   r6   r8   r<   allsumstrftimemaxenvironr=   sortedr7   DASHBOARD_MDr%   )/current_resultsr   rB   r   historycurrent_runr   runs_to_processnum_runsscenario_statsall_known_idsrb   base_idrun_rolled_upfinal_idr   statsoutcomesconsec_greenconsec_passestotal_non_infra_runstotal_infra_runslast_run_infra_failuremdtotal_evalstotal_flakestotal_failsoverall_pass_rateoverall_flake_ratequarantine_countrepoinfototal_validpass_rate_strconseceligibler   r   r   	issue_urlsidactive_scenariosflake_rate_strstatus	pass_rate
flake_rater   s/                                                  rf   mainr      s
   ')O(A-MUV	OKK54c::a ; rlG	ww~~l##	GlC((A))A, ) 	X\\(,,/99;cA?K
 FO;' fode,GFO KK-=	lC	 	 A		'Q' 
! '.foRos=Q=QssoOR?#HN )*MY$$&AffZQ/Gg& ' 
 !!1!! !a	#
 ! !$Y!5!5!7HffZX6G+)+&"))'2	 "8 %G"+E$(("5H()00;"#q(#!l#q(#()008H$m$)$()0093(33(333l#q(#()008l#q(#()008+ % B )..0/00G&  --! ++ !F"" 1 &2!"&3"## 1( $PPP FMV__WV_R0AZ_ 
BII9:
		"#
		  G  	HII"8<<#=#F#FG^#_"``bcdII3C4H3II`au`v  wT  Ue  Tf  fh  i  j II)*II01IIo KLK(..0u\*U=-AAE,DWWWm,,u\** 1
 {!:;c+q>QQ-K0CCII*+<S*AAvwxII)*<S)AAz{|II)*:);;xyz II&'IInII  V  WII  N  OII56::>>-/@AD)//1A""7\1mQP\^_aqst  wJ  LM  -N  OL)E-,@@5CVV?$l(;eM>R(RSVaabeffghM*+39R</xPVxW[E\X""7I6X""7A.h##He4)$xw?	
		D	X'7uT&\N$ugUZ[`Zaacdmcnnrsyrzz}  L  ~M  MO  PU  Vb  Pc  fk  ly  fz  Pz  O{  {|  }H  |I  IM  NT  MU  UX  Ya  Xb  bd  e  	f! 2$ 1
		VW II,-II]^II)*mxmssJZ?Zs_bfw_wssmxy#'L)E-,@@5CVV?|!4u]7K!KL{ZI}!55CJ(oQ/M *3/q1NC849"&&w=
		D	vT-NCSSVW\]qWrVssvw}v~  A  B  	C' $* 
lC	 	 A			" 
! 
*<.l^1
MN_ ;:: 	O8<3::NN	O )(( 	G043::FF	G  
!	 	  Sn y, 
!	 s   ,i #h=5i +j jj kk'k'k,(k,5k,8!k1=i	i i jj  jj	j j k'kkk$	1l	__main__)r   r)   r:   r   rq   r   r   xml.etree.ElementTreeetreeElementTreer   r!   r&   r   r   rp   XML_REPORTS_DIR_PATTERNr4   r   r5   r=   r7   rg   rv   r   r   __name__r   rw   rf   <module>r      s    	 	 
   ' " " AM --Y W  E   M^ AFWOr zF rw   