2025-12-17 13:07:35 +00:00
<!DOCTYPE html>
< html style = 'scrollbar-gutter: stable both-edges;' >
< head >
< meta charset = 'UTF-8' >
< meta name = 'color-scheme' content = 'dark light' >
< meta name = 'viewport' content = 'width=device-width, initial-scale=1.0' >
< title > Playwright Test Report< / title >
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
< script type = "module" > v a r N A = O b j e c t . d e f i n e P r o p e r t y ; v a r B A = ( l , u , c ) = > u i n l ? N A ( l , u , { e n u m e r a b l e : ! 0 , c o n f i g u r a b l e : ! 0 , w r i t a b l e : ! 0 , v a l u e : c } ) : l [ u ] = c ; v a r y n = ( l , u , c ) = > B A ( l , t y p e o f u ! = " s y m b o l " ? u + " " : u , c ) ; ( f u n c t i o n ( ) { c o n s t u = d o c u m e n t . c r e a t e E l e m e n t ( " l i n k " ) . r e l L i s t ; i f ( u & & u . s u p p o r t s & & u . s u p p o r t s ( " m o d u l e p r e l o a d " ) ) r e t u r n ; f o r ( c o n s t r o f d o c u m e n t . q u e r y S e l e c t o r A l l ( ' l i n k [ r e l = " m o d u l e p r e l o a d " ] ' ) ) f ( r ) ; n e w M u t a t i o n O b s e r v e r ( r = > { f o r ( c o n s t o o f r ) i f ( o . t y p e = = = " c h i l d L i s t " ) f o r ( c o n s t h o f o . a d d e d N o d e s ) h . t a g N a m e = = = " L I N K " & & h . r e l = = = " m o d u l e p r e l o a d " & & f ( h ) } ) . o b s e r v e ( d o c u m e n t , { c h i l d L i s t : ! 0 , s u b t r e e : ! 0 } ) ; f u n c t i o n c ( r ) { c o n s t o = { } ; r e t u r n r . i n t e g r i t y & & ( o . i n t e g r i t y = r . i n t e g r i t y ) , r . r e f e r r e r P o l i c y & & ( o . r e f e r r e r P o l i c y = r . r e f e r r e r P o l i c y ) , r . c r o s s O r i g i n = = = " u s e - c r e d e n t i a l s " ? o . c r e d e n t i a l s = " i n c l u d e " : r . c r o s s O r i g i n = = = " a n o n y m o u s " ? o . c r e d e n t i a l s = " o m i t " : o . c r e d e n t i a l s = " s a m e - o r i g i n " , o } f u n c t i o n f ( r ) { i f ( r . e p ) r e t u r n ; r . e p = ! 0 ; c o n s t o = c ( r ) ; f e t c h ( r . h r e f , o ) } } ) ( ) ; f u n c t i o n U A ( l ) { r e t u r n l & & l . _ _ e s M o d u l e & & O b j e c t . p r o t o t y p e . h a s O w n P r o p e r t y . c a l l ( l , " d e f a u l t " ) ? l . d e f a u l t : l } v a r M f = { e x p o r t s : { } } , E i = { } ; / * *
2025-12-17 13:07:35 +00:00
* @license React
* react-jsx-runtime.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
*/var D1;function QA(){if(D1)return Ei;D1=1;var l=Symbol.for("react.transitional.element"),u=Symbol.for("react.fragment");function c(f,r,o){var h=null;if(o!==void 0& & (h=""+o),r.key!==void 0& & (h=""+r.key),"key"in r){o={};for(var v in r)v!=="key"& & (o[v]=r[v])}else o=r;return r=o.ref,{$$typeof:l,type:f,key:h,ref:r!==void 0?r:null,props:o}}return Ei.Fragment=u,Ei.jsx=c,Ei.jsxs=c,Ei}var M1;function zA(){return M1||(M1=1,Mf.exports=QA()),Mf.exports}var m=zA();const YA=15,xt=0,bn=1,LA=2,ye=-2,Ut=-3,j1=-4,xn=-5,Me=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],L2=1440,GA=0,XA=4,VA=9,ZA=5,qA=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,
2025-12-17 13:07:35 +00:00
* @license React
* react.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
*/var T2;function B5(){if(T2)return dt;T2=1;var l=Symbol.for("react.transitional.element"),u=Symbol.for("react.portal"),c=Symbol.for("react.fragment"),f=Symbol.for("react.strict_mode"),r=Symbol.for("react.profiler"),o=Symbol.for("react.consumer"),h=Symbol.for("react.context"),v=Symbol.for("react.forward_ref"),y=Symbol.for("react.suspense"),A=Symbol.for("react.memo"),E=Symbol.for("react.lazy"),S=Symbol.for("react.activity"),O=Symbol.iterator;function X(C){return C===null||typeof C!="object"?null:(C=O& & C[O]||C["@@iterator"],typeof C=="function"?C:null)}var B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},b=Object.assign,p={};function x(C,L,W){this.props=C,this.context=L,this.refs=p,this.updater=W||B}x.prototype.isReactComponent={},x.prototype.setState=function(C,L){if(typeof C!="object"& & typeof C!="function"& & C!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,C,L,"setState")},x.prototype.forceUpdate=function(C){this.updater.enqueueForceUpdate(this,C,"forceUpdate")};function R(){}R.prototype=x.prototype;function U(C,L,W){this.props=C,this.context=L,this.refs=p,this.updater=W||B}var Z=U.prototype=new R;Z.constructor=U,b(Z,x.prototype),Z.isPureReactComponent=!0;var F=Array.isArray;function j(){}var D={H:null,A:null,T:null,S:null},N=Object.prototype.hasOwnProperty;function K(C,L,W){var et=W.ref;return{$$typeof:l,type:C,key:L,ref:et!==void 0?et:null,props:W}}function J(C,L){return K(C.type,L,C.props)}function k(C){return typeof C=="object"& & C!==null& & C.$$typeof===l}function nt(C){var L={"=":"=0",":":"=2"};return"$"+C.replace(/[=:]/g,function(W){return L[W]})}var P=/\/+/g;function st(C,L){return typeof C=="object"& & C!==null& & C.key!=null?nt(""+C.key):L.toString(36)}function it(C){switch(C.status){case"fulfilled":return C.value;case"rejected":throw C.reason;default:switch(typeof C.status=="string"?C.then(j,j):(C.status="pending",C.then(function(L){C.status==="pending"& & (C.status="fulfilled",C.value=L)},function(L){C.status==="pending"& & (C.status="rejected",C.reason=L)})),C.status){case"fulfilled":return C.value;case"rejected":throw C.reason}}throw C}function H(C,L,W,et,rt){var ot=typeof C;(ot==="undefined"||ot==="boolean")&&(C=null); var gt=!1;if(C===null)gt=!0;else switch(ot){case"bigint":case"string":case"number":gt=!0;break;case"object":switch(C.$$typeof){case l:case u:gt=!0;break;case E:return gt=C._init,H(gt(C._payload),L,W,et,rt)}}if(gt)return rt=rt(C),gt=et===""?"."+st(C,0):et,F(rt)?(W="",gt!=null& & (W=gt.replace(P,"$& /")+"/"),H(rt,L,W,"",function(On){return On})):rt!=null&&(k(rt)&&(rt=J(rt,W+(rt.key==null||C&&C.key===rt.key?"":(""+rt.key).replace(P,"$&/")+"/")+gt)),L.push(rt)),1; gt=0;var Ft=et===""?".":et+":";if(F(C))for(var Qt=0;Qt< C.length ; Qt + + ) et = C[Qt],ot=Ft+st(et,Qt),gt+=H(et,L,W,ot,rt);else if ( Qt = X(C),typeof Qt = ="function")for(C=Qt.call(C),Qt=0;!(et=C.next()).done;)et=et.value,ot=Ft+st(et,Qt++),gt+=H(et,L,W,ot,rt);else if ( ot = =="object"){if(typeof C . then = ="function")return H ( it ( C ) , L , W , et , rt ) ; throw L = String(C),Error("Objects are not valid as a React child ( found: " + ( L = =="[object Object ] " ? " object with keys { " + Object . keys ( C ) . join ( " , " ) + " } " :L ) + " ) . If you meant to render a collection of children , use an array instead . " ) } return gt } function _ ( C , L , W ) { if ( C = =null)return C ; var et = [],rt=0;return H ( C , et , " " , " " , function ( ot ) { return L . call ( W , ot , rt + + ) } ) , et } function $ ( C ) { if ( C . _status = ==-1){var L = C._result;L=L(),L.then(function(W){(C._status===0||C._status===-1)&&(C._status=1,C._result=W)},function(W){(C._status===0||C._status===-1)&&(C._status=2,C._result=W)}),C._status===-1&&(C._status=0,C._result=L)}if(C._status===1)return C . _result . default ; throw C . _result } var ht = typeof reportError = ="function"?reportError:function(C){if(typeof window = ="object"&&typeof window . ErrorEvent = ="function"){var L = new window . ErrorEvent ( " error " , { bubbles: ! 0 , cancelable: ! 0 , message:typeof C = ="object"&&C!==null&&typeof C . message = ="string"?String(C.message):String(C),error:C});if(!wi
2025-12-17 13:07:35 +00:00
* @license React
* scheduler.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
*/var O2;function U5(){return O2||(O2=1,(function(l){function u(H,_){var $=H.length;H.push(_);t:for(;0< $;){var ht=$-1>>>1,tt=H[ht];if(0< r ( tt , _ ) ) H [ ht ] = _ , H [ $ ] = tt , $ = ht ; else break t } } function c ( H ) { return H . length = ==0?null:H[0]}function f ( H ) { if ( H . length = ==0)return null ; var _ = H[0],$=H.pop();if($!==_){H[0]=$;t:for(var ht = 0,tt=H.length,C=tt > >>1;ht< C ; ) { var L = 2*(ht+1)-1,W=H[L],et=L+1,rt=H[et];if(0 > r(W,$))et< tt & & 0 > r(rt,W)?(H[ht]=rt,H[et]=$,ht=et):(H[ht]=W,H[L]=$,ht=L);else if(et< tt & & 0 > r(rt,$))H[ht]=rt,H[et]=$,ht=et;else break t}}return _}function r(H,_){var $=H.sortIndex-_.sortIndex;return $!==0?$:H.id-_.id}if(l.unstable_now=void 0,typeof performance=="object"& & typeof performance.now=="function"){var o=performance;l.unstable_now=function(){return o.now()}}else{var h=Date,v=h.now();l.unstable_now=function(){return h.now()-v}}var y=[],A=[],E=1,S=null,O=3,X=!1,B=!1,b=!1,p=!1,x=typeof setTimeout=="function"?setTimeout:null,R=typeof clearTimeout=="function"?clearTimeout:null,U=typeof setImmediate< "u"?setImmediate:null;function Z(H){for(var _=c(A);_!==null;){if(_.callback===null)f(A);else if(_.startTime< =H)f(A),_.sortIndex=_.expirationTime,u(y,_);else break;_=c(A)}}function F(H){if(b=!1,Z(H),!B)if(c(y)!==null)B=!0,j||(j=!0,nt());else{var _=c(A);_!==null& & it(F,_.startTime-H)}}var j=!1,D=-1,N=5,K=-1;function J(){return p?!0:!(l.unstable_now()-K< N ) } function k ( ) { if ( p = !1,j){var H = l.unstable_now();K=H;var _ = !0;try{t:{B=!1,b&&(b=!1,R(D),D=-1),X=!0;var $ = O ; try { e: { for ( Z ( H ) , S = c(y);S!==null&&!(S.expirationTime > H&&J()); ){var ht=S.callback;if(typeof ht=="function"){S.callback=null,O=S.priorityLevel;var tt=ht(S.expirationTime< =H);if(H=l.unstable_now(),typeof tt=="function"){S.callback=tt,Z(H),_=!0;break e}S===c(y)& & f(y),Z(H)}else f(y);S=c(y)}if(S!==null)_=!0;else{var C=c(A);C!==null& & it(F,C.startTime-H),_=!1}}break t}finally{S=null,O=$,X=!1}_=void 0}}finally{_?nt():j=!1}}}var nt;if(typeof U=="function")nt=function(){U(k)};else if(typeof MessageChannel< "u"){var P=new MessageChannel,st=P.port2;P.port1.onmessage=k,nt=function(){st.postMessage(null)}}else nt=function(){x(k,0)};function it(H,_){D=x(function(){H(l.unstable_now())},_)}l.unstable_IdlePriority=5,l.unstable_ImmediatePriority=1,l.unstable_LowPriority=4,l.unstable_NormalPriority=3,l.unstable_Profiling=null,l.unstable_UserBlockingPriority=2,l.unstable_cancelCallback=function(H){H.callback=null},l.unstable_forceFrameRate=function(H){0>H||125< H ? console . error ( " forceFrameRate takes a positive int between 0 and 125 , forcing frame rates higher than 125 fps is not supported " ) :N = 0<H?Math.floor(1e3/H):5},l.unstable_getCurrentPriorityLevel=function(){return O } , l . unstable_next = function(H){switch(O){case 1:case 2:case 3:var _ = 3;break;default:_=O}var $ = O ; O = _;try{return H ( ) } finally { O = $}},l.unstable_requestPaint=function(){p=!0},l.unstable_runWithPriority=function(H,_){switch(H){case 1:case 2:case 3:case 4:case 5:break ; default:H = 3}var $ = O ; O = H;try{return _ ( ) } finally { O = $}},l.unstable_scheduleCallback=function(H,_,$){var ht = l.unstable_now();switch(typeof $ = = " object " & & $ ! = = null ? ( $ = $ . delay , $ = typeof $ = = " number " & & 0 < $ ? ht + $ :ht ) : $ = ht , H ) { case 1:var tt = -1;break;case 2:tt = 250;break;case 5:tt = 1073741823;break;case 4:tt = 1e4;break;default:tt=5e3}return tt = $+tt,H={id:E++,callback:_,priorityLevel:H,startTime:$,expirationTime:tt,sortIndex:-1},$ > ht?(H.sortIndex=$,u(A,H),c(y)===null& & H===c(A)& & (b?(R(D),D=-1):b=!0,it(F,$-ht))):(H.sortIndex=tt,u(y,H),B||X||(B=!0,j||(j=!0,nt()))),H},l.unstable_shouldYield=J,l.unstable_wrapCallback=function(H){var _=O;return function(){var $=O;O=_;try{return H.apply(this,arguments)}finally{O=$}}}})(qf)),qf}var w2;function Q5(){return w2||(w2=1,Zf.exports=U5()),Zf.exports}var If={exports:{}},ce={};/**
2025-12-17 13:07:35 +00:00
* @license React
* react-dom.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
*/var R2;function z5(){if(R2)return ce;R2=1;var l=xr();function u(y){var A="https://react.dev/errors/"+y;if(1< arguments.length ) { A + = " ? args [ ] = " + encodeURIComponent ( arguments [ 1 ] ) ; for ( var E = 2;E<arguments.length;E++)A+="&args[]="+encodeURIComponent(arguments[E])}return"Minified React error # " + y + " ; visit " + A + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings . " } function c ( ) { } var f = {d:{f:c,r:function(){throw Error ( u ( 522 ) ) } , D:c , C:c , L:c , m:c , X:c , S:c , M:c } , p:0 , findDOMNode:null } , r = Symbol.for("react.portal");function o ( y , A , E ) { var S = 3<arguments.length&&arguments[3]!==void 0 ? arguments [ 3 ] :null ; return { $ $ typeof:r , key:S = =null?null:""+S,children:y,containerInfo:A,implementation:E}}var h = l.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function v ( y , A ) { if ( y = =="font")return"";if(typeof A = ="string")return A = =="use-credentials"?A:""}return ce . __DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = f,ce.createPortal=function(y,A){var E = 2<arguments.length&&arguments[2]!==void 0 ? arguments [ 2 ] :null ; if ( ! A | | A . nodeType ! = = 1 & & A . nodeType ! = = 9 & & A . nodeType ! = = 11 ) throw Error ( u ( 299 ) ) ; return o ( y , A , null , E ) } , ce . flushSync = function(y){var A = h.T,E=f.p;try{if(h.T=null,f.p=2,y)return y ( ) } finally { h . T = A,f.p=E,f.d.f()}},ce.preconnect=function(y,A){typeof y = ="string"&&(A?(A=A.crossOrigin,A=typeof A = ="string"?A==="use-credentials"?A:"":void 0 ) :A = null,f.d.C(y,A))},ce.prefetchDNS=function(y){typeof y = ="string"&&f.d.D(y)},ce.preinit=function(y,A){if(typeof y = ="string"&&A&&typeof A . as = ="string"){var E = A.as,S=v(E,A.crossOrigin),O=typeof A . integrity = ="string"?A.integrity:void 0 , X = typeof A . fetchPriority = ="string"?A.fetchPriority:void 0 ; E = =="style"?f.d.S(y,typeof A . precedence = ="string"?A.precedence:void 0 , { crossOrigin:S , integrity:O , fetchPriority:X } ) :E = =="script"&&f.d.X(y,{crossOrigin:S,integrity:O,fetchPriority:X,nonce:typeof A . nonce = ="string"?A.nonce:void 0 } ) } } , ce . preinitModule = function(y,A){if(typeof y = ="string")if(typeof A = ="object"&&A!==null){if(A.as==null||A.as==="script"){var E = v(A.as,A.crossOrigin);f.d.M(y,{crossOrigin:E,integrity:typeof A . integrity = ="string"?A.integrity:void 0 , nonce:typeof A . nonce = ="string"?A.nonce:void 0 } ) } } else A = =null&&f.d.M(y)},ce.preload=function(y,A){if(typeof y = ="string"&&typeof A = ="object"&&A!==null&&typeof A . as = ="string"){var E = A.as,S=v(E,A.crossOrigin);f.d.L(y,E,{crossOrigin:S,integrity:typeof A . integrity = ="string"?A.integrity:void 0 , nonce:typeof A . nonce = ="string"?A.nonce:void 0 , type:typeof A . type = ="string"?A.type:void 0 , fetchPriority:typeof A . fetchPriority = ="string"?A.fetchPriority:void 0 , referrerPolicy:typeof A . referrerPolicy = ="string"?A.referrerPolicy:void 0 , imageSrcSet:typeof A . imageSrcSet = ="string"?A.imageSrcSet:void 0 , imageSizes:typeof A . imageSizes = ="string"?A.imageSizes:void 0 , media:typeof A . media = ="string"?A.media:void 0 } ) } } , ce . preloadModule = function(y,A){if(typeof y = ="string")if(A){var E = v(A.as,A.crossOrigin);f.d.m(y,{as:typeof A . as = ="string"&&A.as!=="script"?A.as:void 0 , crossOrigin:E , integrity:typeof A . integrity = ="string"?A.integrity:void 0 } ) } else f . d . m ( y ) } , ce . requestFormReset = function(y){f.d.r(y)},ce.unstable_batchedUpdates=function(y,A){return y ( A ) } , ce . useFormState = function(y,A,E){return h . H . useFormState ( y , A , E ) } , ce . useFormStatus = function(){return h . H . useHostTransitionStatus ( ) } , ce . version = "19.2.1" , ce } var D2 ; function Y5 ( ) { if ( D2 ) return If . exports ; D2 = 1;function l ( ) { if ( ! ( typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ > "u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(l)}catch(u){console.error(u)}}return l(),If.exports=z5(),If.exports}/**
2025-12-17 13:07:35 +00:00
* @license React
* react-dom-client.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
*/var M2;function L5(){if(M2)return xi;M2=1;var l=Q5(),u=xr(),c=Y5();function f(t){var e="https://react.dev/errors/"+t;if(1< arguments.length ) { e + = " ? args [ ] = " + encodeURIComponent ( arguments [ 1 ] ) ; for ( var n = 2;n<arguments.length;n++)e+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error # " + t + " ; visit " + e + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings . " } function r ( t ) { return ! ( ! t | | t . nodeType ! = = 1 & & t . nodeType ! = = 9 & & t . nodeType ! = = 11 ) } function o ( t ) { var e = t,n=t;if(t.alternate)for(;e.return;)e=e.return;else{t=e;do e = t,(e.flags&4098)!==0&&(n=e.return),t=e.return;while(t)}return e . tag = ==3?n:null}function h ( t ) { if ( t . tag = ==13){var e = t.memoizedState;if(e===null&&(t=t.alternate,t!==null&&(e=t.memoizedState)),e!==null)return e . dehydrated } return null } function v ( t ) { if ( t . tag = ==31){var e = t.memoizedState;if(e===null&&(t=t.alternate,t!==null&&(e=t.memoizedState)),e!==null)return e . dehydrated } return null } function y ( t ) { if ( o ( t ) ! = = t ) throw Error ( f ( 188 ) ) } function A ( t ) { var e = t.alternate;if(!e){if(e=o(t),e===null)throw Error ( f ( 188 ) ) ; return e ! = = t ? null:t } for ( var n = t,a=e;;){var i = n.return;if(i===null)break;var s = i.alternate;if(s===null){if(a=i.return,a!==null){n=a;continue}break}if(i.child===s.child){for(s=i.child;s;){if(s===n)return y ( i ) , t ; if ( s = ==a)return y ( i ) , e ; s = s.sibling}throw Error ( f ( 188 ) ) } if ( n . return ! = = a . return ) n = i,a=s;else{for(var d = !1,g=i.child;g;){if(g===n){d=!0,n=i,a=s;break}if(g===a){d=!0,a=i,n=s;break}g=g.sibling}if(!d){for(g=s.child;g;){if(g===n){d=!0,n=s,a=i;break}if(g===a){d=!0,a=s,n=i;break}g=g.sibling}if(!d)throw Error ( f ( 189 ) ) } } if ( n . alternate ! = = a ) throw Error ( f ( 190 ) ) } if ( n . tag ! = = 3 ) throw Error ( f ( 188 ) ) ; return n . stateNode . current = ==n?t:e}function E ( t ) { var e = t.tag;if(e===5||e===26||e===27||e===6)return t ; for ( t = t.child;t!==null;){if(e=E(t),e!==null)return e ; t = t.sibling}return null } var S = Object.assign,O=Symbol.for("react.element"),X=Symbol.for("react.transitional.element"),B=Symbol.for("react.portal"),b=Symbol.for("react.fragment"),p=Symbol.for("react.strict_mode"),x=Symbol.for("react.profiler"),R=Symbol.for("react.consumer"),U=Symbol.for("react.context"),Z=Symbol.for("react.forward_ref"),F=Symbol.for("react.suspense"),j=Symbol.for("react.suspense_list"),D=Symbol.for("react.memo"),N=Symbol.for("react.lazy"),K=Symbol.for("react.activity"),J=Symbol.for("react.memo_cache_sentinel"),k=Symbol.iterator;function nt ( t ) { return t = ==null||typeof t ! = " object " ? null: ( t = k&&t[k]||t["@@iterator"],typeof t = ="function"?t:null)}var P = Symbol.for("react.client.reference");function st ( t ) { if ( t = =null)return null ; if ( typeof t = ="function")return t . $ $ typeof = ==P?null:t.displayName||t.name||null;if(typeof t = ="string")return t ; switch ( t ) { case b:return " Fragment " ; case x:return " Profiler " ; case p:return " StrictMode " ; case F:return " Suspense " ; case j:return " SuspenseList " ; case K:return " Activity " } if ( typeof t = ="object")switch(t.$$typeof){case B:return " Portal " ; case U:return t . displayName | | " Context " ; case R:return ( t . _context . displayName | | " Context " ) + " . Consumer " ; case Z:var e = t.render;return t = t.displayName,t||(t=e.displayName||e.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case D:return e = t.displayName||null,e!==null?e:st(t.type)||"Memo";case N:e = t._payload,t=t._init;try{return st ( t ( e ) ) } catch { } } return null } var it = Array.isArray,H=u.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,_=c.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,$={pending:!1,data:null,method:null,action:null},ht=[],tt=-1;function C ( t ) { return { current:t } } function L ( t ) { 0 > tt||(t.current=ht[tt],ht[tt]=null,tt--)}function W(t,e){tt++,ht[tt]=t.current,t.current=e}var et=C(null),rt=C(null),ot=C(null),gt=C(null);function Ft(t,e){switch(W(ot,e),W(rt,t),W(et,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?Pd(t):0; break;default:if(t=e.tagName,e=e.namespaceURI)e=Pd(e),t=$d(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}L(et),W(et,t)}function Qt(){L(et),L(rt),L(ot)}function On(t){t.memoizedState!==null&&W(gt,t); var e=et.current,n=$d(e,t.type);e!==n& & (W(rt,t),W(et,n))}function
2025-12-17 13:07:35 +00:00
at`)?" (< anonymous > )":-1< n.stack.indexOf ( " @ " ) ? " @ unknown:0:0 " : " " } return `
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
`+wn+t+Ba}var Ua=!1;function Rn(t,e){if(!t||Ua)return"";Ua=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var a={DetermineComponentFrameRoot:function(){try{if(e){var I=function(){throw Error()};if(Object.defineProperty(I.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"& & Reflect.construct){try{Reflect.construct(I,[])}catch(G){var Y=G}Reflect.construct(t,[],I)}else{try{I.call()}catch(G){Y=G}t.call(I.prototype)}}else{try{throw Error()}catch(G){Y=G}(I=t())& & typeof I.catch=="function"& & I.catch(function(){})}}catch(G){if(G& & Y& & typeof G.stack=="string")return[G.stack,Y.stack]}return[null,null]}};a.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var i=Object.getOwnPropertyDescriptor(a.DetermineComponentFrameRoot,"name");i&&i.configurable&&Object.defineProperty(a.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"}); var s=a.DetermineComponentFrameRoot(),d=s[0],g=s[1];if(d& & g){var T=d.split(`
`),z=g.split(`
`);for(i=a=0;a< T.length & & ! T [ a ] . includes ( " DetermineComponentFrameRoot " ) ; ) a + + ; for ( ; i < z . length & & ! z [ i ] . includes ( " DetermineComponentFrameRoot " ) ; ) i + + ; if ( a = ==T.length||i===z.length)for(a=T.length-1,i=z.length-1;1<=a&&0<=i&&T[a]!==z[i];)i--;for(;1<=a&&0<=i;a--,i--)if(T[a]!==z[i]){if(a!==1||i!==1)do if ( a-- , i-- , 0 > i||T[a]!==z[i]){var V=`
`+T[a].replace(" at new "," at ");return t.displayName&&V.includes("<anonymous>")&&(V=V.replace("<anonymous>",t.displayName)),V}while(1<=a&&0<=i); break}}}finally{Ua=!1,Error.prepareStackTrace=n}return(n=t?t.displayName||t.name:"")?Ee(n):""}function Qa(t,e){switch(t.tag){case 26:case 27:case 5:return Ee(t.type);case 16:return Ee("Lazy");case 13:return t.child!==e& & e!==null?Ee("Suspense Fallback"):Ee("Suspense");case 19:return Ee("SuspenseList");case 0:case 15:return Rn(t.type,!1);case 11:return Rn(t.type.render,!1);case 1:return Rn(t.type,!0);case 31:return Ee("Activity");default:return""}}function Bi(t){try{var e="",n=null;do e+=Qa(t,n),n=t,t=t.return;while(t);return e}catch(a){return`
Error generating stack: `+a.message+`
`+a.stack}}var mc=Object.prototype.hasOwnProperty,gc=l.unstable_scheduleCallback,Ac=l.unstable_cancelCallback,om=l.unstable_shouldYield,dm=l.unstable_requestPaint,pe=l.unstable_now,hm=l.unstable_getCurrentPriorityLevel,Dr=l.unstable_ImmediatePriority,Mr=l.unstable_UserBlockingPriority,Ui=l.unstable_NormalPriority,mm=l.unstable_LowPriority,jr=l.unstable_IdlePriority,gm=l.log,Am=l.unstable_setDisableYieldValue,wl=null,be=null;function Dn(t){if(typeof gm=="function"& & Am(t),be& & typeof be.setStrictMode=="function")try{be.setStrictMode(wl,t)}catch{}}var xe=Math.clz32?Math.clz32:Em,vm=Math.log,ym=Math.LN2;function Em(t){return t>>>=0,t===0?32:31-(vm(t)/ym|0)|0}var Qi=256,zi=262144,Yi=4194304;function oa(t){var e=t&42; if(e!==0)return e;switch(t& -t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return t&261888; case 262144:case 524288:case 1048576:case 2097152:return t&3932160; case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560; case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Li(t,e,n){var a=t.pendingLanes;if(a===0)return 0;var i=0,s=t.suspendedLanes,d=t.pingedLanes;t=t.warmLanes;var g=a&134217727; return g!==0?(a=g& ~s,a!==0?i=oa(a):(d& =g,d!==0?i=oa(d):n||(n=g& ~t,n!==0& & (i=oa(n))))):(g=a& ~s,g!==0?i=oa(g):d!==0?i=oa(d):n||(n=a& ~t,n!==0& & (i=oa(n)))),i===0?0:e!==0& & e!==i& & (e& s)===0& & (s=i& -i,n=e& -e,s>=n||s===32& & (n& 4194048)!==0)?e:i}function Rl(t,e){return(t.pendingLanes& ~(t.suspendedLanes& ~t.pingedLanes)& e)===0}function pm(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Hr(){var t=Yi;return Yi< < =1,(Yi& 62914560)===0& & (Yi=4194304),t}function vc(t){for(var e=[],n=0;31>n;n++)e.push(t);return e}function Dl(t,e){t.pendingLanes|=e,e!==268435456& & (t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function bm(t,e,n,a,i,s){var d=t.pendingLanes;t.pendingLanes=n,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=n,t.entangledLanes&=n,t.errorRecoveryDisabledLanes&=n,t.shellSuspendCounter=0; var g=t.entanglements,T=t.expirationTimes,z=t.hiddenUpdates;for(n=d&~n; 0< n ; ) { var V = 31-xe(n),I=1<<V;g[V]=0,T[V]=-1;var Y = z[V];if(Y!==null)for(z[V]=null,V=0;V<Y.length;V++){var G = Y[V];G!==null&&(G.lane&=-536870913)}n&=~I}a!==0&&Nr(t,a,0),s!==0&&i===0&&t.tag!==0&&(t.suspendedLanes|=s&~(d&~e))}function Nr ( t , e , n ) { t . pendingLanes | = e , t . suspendedLanes & = ~ e ; var a = 31-xe(e);t.entangledLanes|=e,t.entanglements[a]=t.entanglements[a]|1073741824|n&261930}function Br ( t , e ) { var n = t.entangledLanes|=e;for(t=t.entanglements;n;){var a = 31-xe(n),i=1<<a;i&e|t[a]&e&&(t[a]|=e),n&=~i}}function Ur ( t , e ) { var n = e&-e;return n = (n&42)!==0?1:yc(n),(n&(t.suspendedLanes|e))!==0?0:n}function yc ( t ) { switch ( t ) { case 2:t = 1;break;case 8:t = 4;break;case 32:t = 16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:t = 128;break;case 268435456:t = 134217728;break;default:t=0}return t } function Ec ( t ) { return t & = -t , 2 < t ? 8 < t ? ( t & 134217727 ) ! = = 0 ? 32:268435456:8:2 } function Qr ( ) { var t = _.p;return t ! = = 0 ? t: ( t = window.event,t===void 0 ? 32:x1 ( t . type ) ) } function zr ( t , e ) { var n = _.p;try{return _ . p = t,e()}finally{_.p=n}}var Mn = Math.random().toString(36).slice(2),te="__reactFiber$"+Mn,oe="__reactProps$"+Mn,za="__reactContainer$"+Mn,pc="__reactEvents$"+Mn,xm="__reactListeners$"+Mn,Sm="__reactHandles$"+Mn,Yr="__reactResources$"+Mn,Ml="__reactMarker$"+Mn;function
`).replace(eA,"")}function Wd(t,e){return e=Fd(e),Fd(t)===e}function Dt(t,e,n,a,i,s){switch(n){case"children":typeof a=="string"?e==="body"||e==="textarea"& & a===""||Za(t,a):(typeof a=="number"||typeof a=="bigint")&&e!=="body"&&Za(t,""+a); break;case"className":Xi(t,"class",a);break;case"tabIndex":Xi(t,"tabindex",a);break;case"dir":case"role":case"viewBox":case"width":case"height":Xi(t,n,a);break;case"style":Fr(t,a,s);break;case"data":if(e!=="object"){Xi(t,"data",a);break}case"src":case"href":if(a===""&&(e!=="a"||n!=="href")){t.removeAttribute(n); break}if(a==null||typeof a=="function"||typeof a=="symbol"||typeof a=="boolean"){t.removeAttribute(n);break}a=Zi(""+a),t.setAttribute(n,a);break;case"action":case"formAction":if(typeof a=="function"){t.setAttribute(n,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof s=="function"&&(n==="formAction"?(e!=="input"&&Dt(t,e,"name",i.name,i,null),Dt(t,e,"formEncType",i.formEncType,i,null),Dt(t,e,"formMethod",i.formMethod,i,null),Dt(t,e,"formTarget",i.formTarget,i,null)):(Dt(t,e,"encType",i.encType,i,null),Dt(t,e,"method",i.method,i,null),Dt(t,e,"target",i.target,i,null))); if(a==null||typeof a=="symbol"||typeof a=="boolean"){t.removeAttribute(n);break}a=Zi(""+a),t.setAttribute(n,a);break;case"onClick":a!=null&&(t.onclick=tn); break;case"onScroll":a!=null&&yt("scroll",t); break;case"onScrollEnd":a!=null&&yt("scrollend",t); break;case"dangerouslySetInnerHTML":if(a!=null){if(typeof a!="object"||!("__html"in a))throw Error(f(61));if(n=a.__html,n!=null){if(i.children!=null)throw Error(f(60));t.innerHTML=n}}break;case"multiple":t.multiple=a& & typeof a!="function"& & typeof a!="symbol";break;case"muted":t.muted=a& & typeof a!="function"& & typeof a!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(a==null||typeof a=="function"||typeof a=="boolean"||typeof a=="symbol"){t.removeAttribute("xlink:href");break}n=Zi(""+a),t.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",n);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":a!=null& & typeof a!="function"& & typeof a!="symbol"?t.setAttribute(n,""+a):t.removeAttribute(n);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":a& & typeof a!="function"& & typeof a!="symbol"?t.setAttribute(n,""):t.removeAttribute(n);break;case"capture":case"download":a===!0?t.setAttribute(n,""):a!==!1& & a!=null& & typeof a!="function"& & typeof a!="symbol"?t.setAttribute(n,a):t.removeAttribute(n);break;case"cols":case"rows":case"size":case"span":a!=null& & typeof a!="function"& & typeof a!="symbol"&&!isNaN(a)&&1<=a?t.setAttribute(n,a):t.removeAttribute(n); break;case"rowSpan":case"start":a==null||typeof a=="function"||typeof a=="symbol"||isNaN(a)?t.removeAttribute(n):t.setAttribute(n,a);break;case"popover":yt("beforetoggle",t),yt("toggle",t),Gi(t,"popover",a);break;case"xlinkActuate":$e(t,"http://www.w3.org/1999/xlink","xlink:actuate",a);break;case"xlinkArcrole":$e(t,"http://www.w3.org/1999/xlink","xlink:arcrole",a);break;case"xlinkRole":$e(t,"http://www.w3.org/1999/xlink","xlink:role",a);break;case"xlinkShow":$e(t,"http://www.w3.org/1999/xlink","xlink:show",a);break;case"xlinkTitle":$e(t,"http://www.w3.org/1999/xlink","xlink:title",a);break;case"xlinkType":$e(t,"http://www.w3.org/1999/xlink","xlink:type",a);break;case"xmlBase":$e(t,"http://www.w3.org/XML/1998/namespace","xml:ba
2025-12-17 13:07:35 +00:00
linear-gradient(-45deg, #80808020 25%, transparent 25%),
linear-gradient(45deg, transparent 75%, #80808020 75%),
linear-gradient(-45deg, transparent 75%, #80808020 75%)`,backgroundSize:"20px 20px",backgroundPosition:"0 0, 0 10px, 10px -10px, -10px 0px",boxShadow:`rgb(0 0 0 / 10%) 0px 1.8px 1.9px,
rgb(0 0 0 / 15%) 0px 6.1px 6.3px,
rgb(0 0 0 / 10%) 0px -2px 4px,
rgb(0 0 0 / 15%) 0px -6.1px 12px,
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
rgb(0 0 0 / 25%) 0px 6px 12px`},um=({diff:l,noTargetBlank:u,hideDetails:c})=>{const[f,r]=ct.useState(l.diff?"diff":"actual"),[o,h]=ct.useState(!1),[v,y]=ct.useState(null),[A,E]=ct.useState("Expected"),[S,O]=ct.useState(null),[X,B]=ct.useState(null),[b,p]=Wh();ct.useEffect(()=>{(async()=>{var K,J,k,nt;y(await kf((K=l.expected)==null?void 0:K.attachment.path)),E(((J=l.expected)==null?void 0:J.title)||"Expected"),O(await kf((k=l.actual)==null?void 0:k.attachment.path)),B(await kf((nt=l.diff)==null?void 0:nt.attachment.path))})()},[l]);const x=v& & S& & X,R=x?Math.max(v.naturalWidth,S.naturalWidth,200):500,U=x?Math.max(v.naturalHeight,S.naturalHeight,200):500,Z=Math.min(1,(b.width-30)/R),F=Math.min(1,(b.width-50)/R/2),j=R*Z,D=U*Z,N={flex:"none",margin:"0 10px",cursor:"pointer",userSelect:"none"};return m.jsx("div",{"data-testid":"test-result-image-mismatch",style:{display:"flex",flexDirection:"column",alignItems:"center",flex:"auto"},ref:p,children:x& & m.jsxs(m.Fragment,{children:[m.jsxs("div",{"data-testid":"test-result-image-mismatch-tabs",style:{display:"flex",margin:"10px 0 20px"},children:[l.diff& & m.jsx("div",{style:{...N,fontWeight:f==="diff"?600:"initial"},onClick:()=>r("diff"),children:"Diff"}),m.jsx("div",{style:{...N,fontWeight:f==="actual"?600:"initial"},onClick:()=>r("actual"),children:"Actual"}),m.jsx("div",{style:{...N,fontWeight:f==="expected"?600:"initial"},onClick:()=>r("expected"),children:A}),m.jsx("div",{style:{...N,fontWeight:f==="sxs"?600:"initial"},onClick:()=>r("sxs"),children:"Side by side"}),m.jsx("div",{style:{...N,fontWeight:f==="slider"?600:"initial"},onClick:()=>r("slider"),children:"Slider"})]}),m.jsxs("div",{style:{display:"flex",justifyContent:"center",flex:"auto",minHeight:D+60},children:[l.diff& & f==="diff"& & m.jsx(En,{image:X,alt:"Diff",hideSize:c,canvasWidth:j,canvasHeight:D,scale:Z}),l.diff& & f==="actual"& & m.jsx(En,{image:S,alt:"Actual",hideSize:c,canvasWidth:j,canvasHeight:D,scale:Z}),l.diff& & f==="expected"& & m.jsx(En,{image:v,alt:A,hideSize:c,canvasWidth:j,canvasHeight:D,scale:Z}),l.diff& & f==="slider"& & m.jsx(Dv,{expectedImage:v,actualImage:S,hideSize:c,canvasWidth:j,canvasHeight:D,scale:Z,expectedTitle:A}),l.diff& & f==="sxs"& & m.jsxs("div",{style:{display:"flex"},children:[m.jsx(En,{image:v,title:A,hideSize:c,canvasWidth:F*R,canvasHeight:F*U,scale:F}),m.jsx(En,{image:o?X:S,title:o?"Diff":"Actual",onClick:()=>h(!o),hideSize:c,canvasWidth:F*R,canvasHeight:F*U,scale:F})]}),!l.diff& & f==="actual"& & m.jsx(En,{image:S,title:"Actual",hideSize:c,canvasWidth:j,canvasHeight:D,scale:Z}),!l.diff& & f==="expected"& & m.jsx(En,{image:v,title:A,hideSize:c,canvasWidth:j,canvasHeight:D,scale:Z}),!l.diff& & f==="sxs"& & m.jsxs("div",{style:{display:"flex"},children:[m.jsx(En,{image:v,title:A,canvasWidth:F*R,canvasHeight:F*U,scale:F}),m.jsx(En,{image:S,title:"Actual",canvasWidth:F*R,canvasHeight:F*U,scale:F})]})]}),!c& & m.jsxs("div",{style:{alignSelf:"start",lineHeight:"18px",marginLeft:"15px"},children:[m.jsx("div",{children:l.diff& & m.jsx("a",{target:"_blank",href:l.diff.attachment.path,rel:"noreferrer",children:l.diff.attachment.name})}),m.jsx("div",{children:m.jsx("a",{target:u?"":"_blank",href:l.actual.attachment.path,rel:"noreferrer",children:l.actual.attachment.name})}),m.jsx("div",{children:m.jsx("a",{target:u?"":"_blank",href:l.expected.attachment.path,rel:"noreferrer",children:l.expected.attachment.name})})]})]})})},Dv=({expectedImage:l,actualImage:u,canvasWidth:c,canvasHeight:f,scale:r,expectedTitle:o,hideSize:h})=>{const v={position:"absolute",top:0,left:0},[y,A]=ct.useState(c/2),E=l.naturalWidth===u.naturalWidth&&l.naturalHeight===u.naturalHeight; return m.jsxs("div",{style:{flex:"none",display:"flex",alignItems:"center",flexDirection:"column",userSelect:"none"},children:[!h& & m.jsxs("div",{style:{margin:5},children:[!E& & m.jsx("span",{style:{flex:"none",margin:"0 5px"},children:"Expected "}),m.jsx("span",{children:l.naturalWidth}),m.jsx("span",{style:{flex:"none",margin:"0 5px"},children:"x"}),m.jsx("span",{children:l.naturalHeight}),!E& & m.jsx("span",{style:{flex:"none",margin:"0 5px 0 15px"},children
2025-12-17 13:07:35 +00:00
# Instructions
- Following Playwright test failed.
- Explain why, be concise, respect Playwright best practices.
- Provide a snippet of code with the fix, if possible.
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
`.trimStart();async function zv({testInfo:l,metadata:u,errorContext:c,errors:f,buildCodeFrame:r,stdout:o,stderr:h}){var S;const v=new Set(f.filter(O=>O.message& & !O.message.includes(`
`)).map(O=>O.message));for(const O of f)for(const X of v.keys())(S=O.message)!=null&&S.includes(X)&&v.delete(X); const y=f.filter(O=>!(!O.message||!O.message.includes(`
`)&&!v.has(O.message))); if(!y.length)return;const A=[Qv,"# Test info","",l];o& & A.push("","# Stdout","","```",Jf(o),"```"),h& & A.push("","# Stderr","","```",Jf(h),"```"),A.push("","# Error details");for(const O of y)A.push("","```",Jf(O.message||""),"```");c&&A.push(c); const E=await r(y[y.length-1]);return E& & A.push("","# Test source","","```ts",E,"```"),u!=null& & u.gitDiff& & A.push("","# Local changes","","```diff",u.gitDiff,"```"),A.join(`
`)}const Yv=new RegExp("([\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)|(?:(?:\\d{1,4}(?:; \\d{0,4})*)?[\\dA-PR-TZcf-ntqry=>< ~])))","g");function Jf(l){return l.replace(Yv,"")}function Lv(l,u){var f;const c=new Map;for(const r of l){const o=r.name.match(/^(.*)-(expected|actual|diff|previous)(\.[^.]+)?$/);if(!o)continue;const[,h,v,y=""]=o,A=h+y;let E=c.get(A);E||(E={name:A,anchors:[`attachment-${h}`]},c.set(A,E)),E.anchors.push(`attachment-${u.attachments.indexOf(r)}`),v==="actual"& & (E.actual={attachment:r}),v==="expected"& & (E.expected={attachment:r,title:"Expected"}),v==="previous"& & (E.expected={attachment:r,title:"Previous"}),v==="diff"& & (E.diff={attachment:r})}for(const[r,o]of c)!o.actual||!o.expected?c.delete(r):(l.delete(o.actual.attachment),l.delete(o.expected.attachment),l.delete((f=o.diff)==null?void 0:f.attachment));return[...c.values()]}const Gv=({test:l,result:u,testRunMetadata:c,options:f})=>{const{screenshots:r,videos:o,traces:h,otherAttachments:v,diffs:y,errors:A,otherAttachmentAnchors:E,screenshotAnchors:S,errorContext:O}=ct.useMemo(()=>{const B=u.attachments.filter(N=>!N.name.startsWith("_")),b=new Set(B.filter(N=>N.contentType.startsWith("image/"))),p=[...b].map(N=>`attachment-${B.indexOf(N)}`),x=B.filter(N=>N.contentType.startsWith("video/")),R=B.filter(N=>N.name==="trace"),U=B.find(N=>N.name==="error-context"),Z=new Set(B);[...b,...x,...R].forEach(N=>Z.delete(N));const F=[...Z].map(N=>`attachment-${B.indexOf(N)}`),j=Lv(b,u),D=u.errors.map(N=>N.message);return{screenshots:[...b],videos:x,traces:R,otherAttachments:Z,diffs:j,errors:D,otherAttachmentAnchors:F,screenshotAnchors:p,errorContext:U}},[u]),X=P5(async()=>{if(f!=null&&f.noCopyPrompt)return; const B=u.attachments.find(R=>R.name==="stdout"),b=u.attachments.find(R=>R.name==="stderr"),p=B!=null& & B.body& & B.contentType==="text/plain"?B.body:void 0,x=b!=null& & b.body& & b.contentType==="text/plain"?b.body:void 0;return await zv({testInfo:[`- Name: ${l.path.join(" >> ")} >> ${l.title}`,`- Location: ${l.location.file}:${l.location.line}:${l.location.column}`].join(`
`),metadata:c,errorContext:O!=null& & O.path?await fetch(O.path).then(R=>R.text()):O==null?void 0:O.body,errors:u.errors,buildCodeFrame:async R=>R.codeframe,stdout:p,stderr:x})},[l,O,c,u],void 0);return m.jsxs("div",{className:"test-result",children:[!!A.length& & m.jsxs(ke,{header:"Errors",children:[X& & m.jsx("div",{style:{position:"absolute",right:"16px",padding:"10px",zIndex:1},children:m.jsx(Nv,{prompt:X})}),A.map((B,b)=>{const p=Xv(B,y);return m.jsxs(m.Fragment,{children:[m.jsx(wr,{code:B},"test-result-error-message-"+b),p& & m.jsx(Bv,{diff:p})]})})]}),!!u.steps.length& & m.jsx(ke,{header:"Test Steps",children:u.steps.map((B,b)=>m.jsx(cm,{step:B,result:u,test:l,depth:0},`step-${b}`))}),y.map((B,b)=>m.jsx(Si,{id:B.anchors,children:m.jsx(ke,{dataTestId:"test-results-image-diff",header:`Image mismatch: ${B.name}`,revealOnAnchorId:B.anchors,children:m.jsx(um,{diff:B})})},`diff-${b}`)),!!r.length&&m.jsx(ke,{header:"Screenshots",revealOnAnchorId:S,children:r.map((B,b)=>m.jsxs(Si,{id:`attachment-${u.attachments.indexOf(B)}`,children:[m.jsx("a",{href:Ve(B.path),children:m.jsx("img",{className:"screenshot",src:Ve(B.path)})}),m.jsx(nc,{attachment:B,result:u})]},`screenshot-${b}`))}),!!h.length&&m.jsx(Si,{id:"attachment-trace",children:m.jsx(ke,{header:"Traces",revealOnAnchorId:"attachment-trace",children:m.jsxs("div",{children:[m.jsx("a",{href:Ve(nm(h)),children:m.jsx("img",{className:"screenshot",src:Cv,style:{width:192,height:117,marginLeft:20}})}),h.map((B,b)=>m.jsx(nc,{attachment:B,result:u,linkName:h.length===1?"trace":`trace-${b+1}`},`trace-${b}`))]})})}),!!o.length&&m.jsx(Si,{id:"attachment-video",children:m.jsx(ke,{header:"Videos",revealOnAnchorId:"attachment-video",children:o.map(B=>m.jsxs("div",{children:[m.jsx("video",{controls:!0,children:m.jsx("source",{src:Ve(B.path),type:B.contentType})}),m.jsx(nc,{attachment:B,result:u})]},B.path))})}),!!v.size&&m.jsx(ke,{header:"Attachments",revealOnAnchorId:E,dataTestId:"attachments",children:[...v].map((B,b)=>m.jsx(Si,{id:`attachment-${u.attachments.indexOf(B)}`,children:m.jsx(nc,{attachment:B,result:u,openInNewTab:B.contentType.startsWith("text/html")})},`attachment-link-${b}`))})]})}; function Xv(l,u){const c=l.split(`
`)[0];if(!(!c.includes("toHaveScreenshot")& & !c.includes("toMatchSnapshot")))return u.find(f=>l.includes(f.name))}const cm=({test:l,step:u,result:c,depth:f})=>{const r=se();return m.jsx(Tv,{title:m.jsxs("div",{"aria-label":u.title,className:"step-title-container",children:[hc(u.error||u.duration===-1?"failed":u.skipped?"skipped":"passed"),m.jsxs("span",{className:"step-title-text",children:[m.jsx("span",{children:u.title}),u.count>1& & m.jsxs(m.Fragment,{children:[" ✕ ",m.jsx("span",{className:"test-result-counter",children:u.count})]}),u.location& & m.jsxs("span",{className:"test-result-path",children:["— ",u.location.file,":",u.location.line]})]}),m.jsx("span",{className:"step-spacer"}),u.attachments.length>0& & m.jsx("a",{className:"step-attachment-link",title:"reveal attachment",href:Ve(Cn({test:l,result:c,anchor:`attachment-${u.attachments[0]}`},r)),onClick:o=>{o.stopPropagation()},children:Ih()}),m.jsx("span",{className:"step-duration",children:Ol(u.duration)})]}),loadChildren:u.steps.length||u.snippet?()=>{const o=u.snippet?[m.jsx(wr,{testId:"test-snippet",code:u.snippet},"line")]:[],h=u.steps.map((v,y)=>m.jsx(cm,{step:v,depth:f+1,result:c,test:l},y));return o.concat(h)}:void 0,depth:f})},Vv=({projectNames:l,test:u,testRunMetadata:c,run:f,next:r,prev:o,options:h})=>{const[v,y]=ct.useState(f),A=se(),E=u.annotations.filter(S=>!S.type.startsWith("_"))??[];return m.jsxs(m.Fragment,{children:[m.jsx(Or,{title:u.title,leftSuperHeader:m.jsx("div",{className:"test-case-path",children:u.path.join(" › ")}),rightSuperHeader:m.jsxs(m.Fragment,{children:[m.jsx("div",{className:Ze(!o& & "hidden"),children:m.jsx(Tn,{href:Cn({test:o},A),children:"« previous"})}),m.jsx("div",{style:{width:10}}),m.jsx("div",{className:Ze(!r& & "hidden"),children:m.jsx(Tn,{href:Cn({test:r},A),children:"next »"})})]})}),m.jsxs("div",{className:"hbox",style:{lineHeight:"24px"},children:[m.jsx("div",{className:"test-case-location",children:m.jsxs(Sr,{value:`${u.location.file}:${u.location.line}`,children:[u.location.file,":",u.location.line]})}),m.jsx("div",{style:{flex:"auto"}}),m.jsx(tm,{test:u,trailingSeparator:!0}),m.jsx("div",{className:"test-case-duration",children:Ol(u.duration)})]}),m.jsx($h,{style:{marginLeft:"6px"},projectNames:l,activeProjectName:u.projectName,otherLabels:u.tags}),u.results.length===0& & E.length!==0& & m.jsx(ke,{header:"Annotations",dataTestId:"test-case-annotations",children:E.map((S,O)=>m.jsx(z2,{annotation:S},O))}),m.jsx(Sv,{tabs:u.results.map((S,O)=>({id:String(O),title:m.jsxs("div",{style:{display:"flex",alignItems:"center"},children:[hc(S.status)," ",Zv(O),u.results.length>1& & m.jsx("span",{className:"test-case-run-duration",children:Ol(S.duration)})]}),render:()=>{const X=S.annotations.filter(B=>!B.type.startsWith("_"));return m.jsxs(m.Fragment,{children:[!!X.length&&m.jsx(ke,{header:"Annotations",dataTestId:"test-case-annotations",children:X.map((B,b)=>m.jsx(z2,{annotation:B},b))}),m.jsx(Gv,{test:u,result:S,testRunMetadata:c,options:h})]})}}))||[],selectedTab:String(v),setSelectedTab:S=>y(+S)})]})}; function z2({annotation:{type:l,description:u}}){return m.jsxs("div",{className:"test-case-annotation",children:[m.jsx("span",{style:{fontWeight:"bold"},children:l}),u& & m.jsxs(Sr,{value:u,children:[": ",Di(u)]})]})}function Zv(l){return l?`Retry #${l}`:"Run"}const sm=({file:l,projectNames:u,isFileExpanded:c,setFileExpanded:f,footer:r})=>{const o=se();return m.jsx(im,{expanded:c?c(l.fileId):void 0,noInsets:!0,setExpanded:f?(h=>f(l.fileId,h)):void 0,header:m.jsx("span",{className:"chip-header-allow-selection",children:l.fileName}),footer:r,children:l.tests.map(h=>m.jsxs("div",{className:Ze("test-file-test","test-file-test-outcome-"+h.outcome),children:[m.jsxs("div",{className:"hbox",style:{alignItems:"flex-start"},children:[m.jsxs("div",{className:"hbox",children:[m.jsx("span",{className:"test-file-test-status-icon",children:hc(h.outcome)}),m.jsxs("span",{children:[m.jsx(Tn,{href:Cn({test:h},o),title:[...h.path,h.title].join(" › "),children:m.jsx("span",{className:"test-file-title",children:[...h.path,h.title].join(" › ")})}),m
2025-12-17 13:07:35 +00:00
< / script >
Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales
Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config
Bloc C - Backend:
- Extraction routes_auth.go depuis router.go
Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 16:23:32 +00:00
< style type = 'text/css' > : r o o t { - - c o l o r - c a n v a s - d e f a u l t - t r a n s p a r e n t : r g b a ( 2 5 5 , 2 5 5 , 2 5 5 , 0 ) ; - - c o l o r - m a r k e t i n g - i c o n - p r i m a r y : # 2 1 8 b f f ; - - c o l o r - m a r k e t i n g - i c o n - s e c o n d a r y : # 5 4 a e f f ; - - c o l o r - d i f f - b l o b - a d d i t i o n - n u m - t e x t : # 2 4 2 9 2 f ; - - c o l o r - d i f f - b l o b - a d d i t i o n - f g : # 2 4 2 9 2 f ; - - c o l o r - d i f f - b l o b - a d d i t i o n - n u m - b g : # C C F F D 8 ; - - c o l o r - d i f f - b l o b - a d d i t i o n - l i n e - b g : # E 6 F F E C ; - - c o l o r - d i f f - b l o b - a d d i t i o n - w o r d - b g : # A B F 2 B C ; - - c o l o r - d i f f - b l o b - d e l e t i o n - n u m - t e x t : # 2 4 2 9 2 f ; - - c o l o r - d i f f - b l o b - d e l e t i o n - f g : # 2 4 2 9 2 f ; - - c o l o r - d i f f - b l o b - d e l e t i o n - n u m - b g : # F F D 7 D 5 ; - - c o l o r - d i f f - b l o b - d e l e t i o n - l i n e - b g : # F F E B E 9 ; - - c o l o r - d i f f - b l o b - d e l e t i o n - w o r d - b g : r g b a ( 2 5 5 , 1 2 9 , 1 3 0 , . 4 ) ; - - c o l o r - d i f f - b l o b - h u n k - n u m - b g : r g b a ( 8 4 , 1 7 4 , 2 5 5 , . 4 ) ; - - c o l o r - d i f f - b l o b - e x p a n d e r - i c o n : # 5 7 6 0 6 a ; - - c o l o r - d i f f - b l o b - s e l e c t e d - l i n e - h i g h l i g h t - m i x - b l e n d - m o d e : m u l t i p l y ; - - c o l o r - d i f f s t a t - d e l e t i o n - b o r d e r : r g b a ( 2 7 , 3 1 , 3 6 , . 1 5 ) ; - - c o l o r - d i f f s t a t - a d d i t i o n - b o r d e r : r g b a ( 2 7 , 3 1 , 3 6 , . 1 5 ) ; - - c o l o r - d i f f s t a t - a d d i t i o n - b g : # 2 d a 4 4 e ; - - c o l o r - s e a r c h - k e y w o r d - h l : # f f f 8 c 5 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - c o m m e n t : # 6 e 7 7 8 1 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - c o n s t a n t : # 0 5 5 0 a e ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - e n t i t y : # 8 2 5 0 d f ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - s t o r a g e - m o d i f i e r - i m p o r t : # 2 4 2 9 2 f ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - e n t i t y - t a g : # 1 1 6 3 2 9 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - k e y w o r d : # c f 2 2 2 e ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - s t r i n g : # 0 a 3 0 6 9 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - v a r i a b l e : # 9 5 3 8 0 0 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - b r a c k e t h i g h l i g h t e r - u n m a t c h e d : # 8 2 0 7 1 e ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - i n v a l i d - i l l e g a l - t e x t : # f 6 f 8 f a ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - i n v a l i d - i l l e g a l - b g : # 8 2 0 7 1 e ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - c a r r i a g e - r e t u r n - t e x t : # f 6 f 8 f a ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - c a r r i a g e - r e t u r n - b g : # c f 2 2 2 e ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - s t r i n g - r e g e x p : # 1 1 6 3 2 9 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - l i s t : # 3 b 2 3 0 0 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - h e a d i n g : # 0 5 5 0 a e ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - i t a l i c : # 2 4 2 9 2 f ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - b o l d : # 2 4 2 9 2 f ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - d e l e t e d - t e x t : # 8 2 0 7 1 e ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - d e l e t e d - b g : # F F E B E 9 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - i n s e r t e d - t e x t : # 1 1 6 3 2 9 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - i n s e r t e d - b g : # d a f b e 1 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - c h a n g e d - t e x t : # 9 5 3 8 0 0 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - c h a n g e d - b g : # f f d 8 b 5 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - i g n o r e d - t e x t : # e a e e f 2 ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m a r k u p - i g n o r e d - b g : # 0 5 5 0 a e ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - m e t a - d i f f - r a n g e : # 8 2 5 0 d f ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - b r a c k e t h i g h l i g h t e r - a n g l e : # 5 7 6 0 6 a ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - s u b l i m e l i n t e r - g u t t e r - m a r k : # 8 c 9 5 9 f ; - - c o l o r - p r e t t y l i g h t s - s y n t a x - c o n s t a n t - o t h e r - r e f e r e n c e - l i n k : # 0 a 3 0 6 9 ; - - c o l o r - c o d e m i r r o r - t e x t : # 2 4 2 9 2 f ; - - c o l o r - c o d e m i r r o r - b g : # f f f f f f ; - - c o l o r - c o d e m i r r o r - g u t t e r s - b g : # f f f f f f ; - - c o l o r - c o d e m i r r o r - g u t t e r m a r k e r - t e x t : # f f f f f f ; - - c o l o r - c o d e m i r r o r - g u t t e r m a r k e r - s u b t l e - t e x t : # 6 e 7 7 8 1 ; - - c o l o r - c o d e m i r r o r - l i n e n u m b e r - t e x t : # 5 7 6 0 6 a ; - - c o l o r - c o d e m i r r o r - c u r s o r : # 2 4 2 9 2 f ; - - c o l o r - c o d e m i r r o r - s e l e c t i o n - b g : r g b a ( 8 4 , 1 7 4 , 2 5 5 , . 4 ) ; - - c o l o r - c o d e m i r r o r - a c t i v e l i n e - b g : r g b a ( 2 3 4 , 2 3 8 , 2 4 2 , . 5 ) ; - - c o l o r - c o d e m i r r o r - m a t c h i n g b r a c k e t - t e x t : # 2 4 2 9 2 f ; - - c o l o r - c o d e m i r r o r - l i n e s - b g : # f f f f f f ; - - c o l o r - c o d e m i r r o r - s y n t a x - c o m m e n t : # 2 4 2 9 2 f ; - - c o l o r - c o d e m i r r o r - s y n t a x - c o n s t a n t : # 0 5 5 0 a e ; - - c o l o r - c o d e m i r r o r - s y n t a x - e n t i t y : # 8 2 5 0 d f ; - - c o l o r - c o d e m i r r o r - s y n t a x - k e y w o r d : # c f 2 2 2 e ; - - c o l o r - c o d e m i r r o r - s y n t a x - s t o r a g e : # c f 2 2 2 e ; - - c o l o r - c o d e m i r r o r - s y n t a x - s t r i n g : # 0 a 3 0 6 9 ; - - c o l o r - c o d e m i r r o r - s y n t a x - s u p p o r t : # 0 5 5 0 a e ; - - c o l o r - c o d e m i r r o r - s y n t a x - v a r i a b l e : # 9 5 3 8 0 0 ; - - c o l o r - c h e c k s - b g : # 2 4 2 9 2 f ; - - c o l o r - c h e c k s - r u n - b o r d e r - w i d t h : 0 p x ; - - c o l o r - c h e c k s - c o n t a i n e r - b o r d e r - w i d t h : 0 p x ; - - c o l o r - c h e c k s - t e x t - p r i m a r y : # f 6 f 8 f a ; - - c o l o r - c h e c k s - t e x t - s e c o n d a r y : # 8 c 9 5 9 f ; - - c o l o r - c h e c k s - t e x t - l i n k : # 5 4 a e f f ; - - c o l o r - c h e c k s - b t n - i c o n : # a f b 8 c 1 ; - - c o l o r - c h e c k s - b t n - h o v e r - i c o n : # f 6 f 8 f a ; - - c o l o r - c h e c k s - b t n - h o v e r - b g : r g b a ( 2 5 5 , 2 5 5 , 2 5 5 , . 1 2 5 ) ; - - c o l o r - c h e c k s - i n p u t - t e x t : # e a e e f 2 ; - - c o l o r - c h e c k s - i n p u t - p l a c e h o l d e r - t e x t : # 8 c 9 5 9 f ; - - c o l o r - c h e c k s - i n p u t - f o c u s - t e x t : # 8 c 9 5 9 f ; - - c o l o r - c h e c k s - i n p u t - b g : # 3 2 3 8 3 f ; - - c o l o r - c h e c k s - i n p u t - s h a d o w : n o n e ; - - c o l o r - c h e c k s - d o n u t - e r r o r : # f a 4 5 4 9 ; - - c o l o r - c h e c k s - d o n u t - p e n d i n g : # b f 8 7 0 0 ; - - c o l o r - c h e c k s - d o n u t - s u c c e s s : # 2 d a 4 4 e ; - - c o l o r - c h e c k s - d o n u t - n e u t r a l : # a f b 8 c 1 ; - - c o l o r - c h e c k s - d r o p d o w n
2025-12-17 13:07:35 +00:00
< / style >
< / head >
< body >
< div id = 'root' > < / div >
< / body >
< / html >
chore: consolidate CI, E2E, backend and frontend updates
- CI: workflows updates (cd, ci), remove playwright.yml
- E2E: global-setup, auth/playlists/profile specs
- Remove playwright-report and test-results artifacts from tracking
- Backend: auth, handlers, services, workers, migrations
- Frontend: components, features, vite config
- Add e2e-results.json to gitignore
- Docs: REMEDIATION_PROGRESS, audit archive
- Rust: chat-server, stream-server updates
2026-02-17 15:43:21 +00:00
< script id = "playwrightReportBase64" type = "application/zip" > d a t a : a p p l i c a t i o n / z i p ; b a s e 6 4 , U E s D B B Q A A A g I A K G C U V y C 6 G i a 2 i U A A F H 9 A Q A Z A A A A N D I x O T k y M m Z l Y T J l M m J k M 2 M 2 O T E u a n N v b u 2 d W 3 P c S J a Y / w q 2 Y m J J d p C o v O J S b c l W a 6 h Z 7 a q l X o m a 8 V r F n c 4 C E i R G V U A F g J K a I y l i X + w X h 2 M j d v Z p w 4 7 x g x 8 8 7 3 7 w e / + T + Q O e n + D I T A A F Z K F Y F x b J k p T q h y 7 i c v J + 8 u T B + T I / 9 K J 4 z J + G v U G P I O j 7 C E W c I Y 5 G I Q 4 c H / a O 5 f 3 n b M J 7 g 1 4 + S d 9 y O 5 / y w C 7 y 3 n G v 4 H m R 9 w Z v P s h f S 4 W c Q B o F 3 E E I w s C n Z A T C Q E o u 4 m I s x D 5 O J 9 M x L 7 g 1 y 3 l m / S 6 d Z Q m / G l j P 0 o s 4 s f 7 8 X / 7 F e j 0 d p y y U P x 9 n n B X c + m H M r s Z x X s h r j 8 L Q O s t Y 8 L Z 3 3 J t m 6 e 9 4 U J Q Z D i 6 z d B L P J r 3 j 3 j g N W B G n S W / w Q R a p o z j j O O G 9 A f G O e 0 E 6 n k 2 S 3 g B / O u 6 F s 6 x 8 E X u + C 4 9 7 L E n S Q l 4 S Z T 8 / 7 h X s o v y V z o o g l S n P E v 7 T l A c F D 0 W m W H H Z G 7 z p P c 7 i I g 7 Y 2 H o t C v p k n L 7 P r R P r N A l P i v T k N A l 7 5 8 e 9 j O e z c V m r 8 6 Q h B g Q d 9 / K C Z c V Z L F N A A D k n A J 1 A 9 w z S A f Q G F N k Y k v / U E z K K 7 K o 3 A O I F P i 1 b q K z s 7 3 i U Z t z 6 m z R 9 K 8 q 8 W q I v J M 5 z g g D t E j u S Y k 9 Z c G l d p u n b d S Q j o E v G X Z K f x D 8 V s 4 x b w 9 4 o S 9 / n P B v 2 1 p G O a V u 6 6 3 Y J f 8 Z m S X B p l Z L X k q v V h 4 v m c s + P e 6 w o W H A 5 4 U l R X g j S W V L 0 B v C 4 l 7 + N p 1 M e 9 g Y R G + f 8 0 0 Y P H 3 f V R 5 A m B f + p W K s + C H T 1 2 u 6 q j 3 J 4 l Z L X k Y t g W y 6 k 9 1 Y f U 3 b B 1 6 s M r F W G Q 6 6 p D C F 2 L a F a z 3 D u p G d 0 P b y 2 r s N 4 r u u 8 T 8 t T O e 7 l i f i 7 6 A 1 6 l m V h Z H 0 c J u I H t j 5 a l i W 0 v z 3 X A I c s v 0 o C 6 / C D r D r r 0 5 H 1 4 K H 1 Q b 5 g W f I F + e 8 f l Q h S X g n S J C 8 s n m V p 9 p h N Z Z M + s H J e z K a n j W u H Q u T R t 7 2 t u 8 t z 9 i 6 + E M 1 a p N a w 1 x + L S W a t T k O R 0 2 5 f H 6 x o 4 L W b g d J 5 M 0 B n / X a g z b p L x 9 w e p x e H B 3 / 5 4 x / + h / X m 8 c u n Z 0 8 f P 3 p m P X n 2 4 j f n 1 q u C T y 0 4 U D O P L L R t 2 w d H 3 8 o 2 o L S U w 9 6 z u J C t Z l + k R X r 4 4 y 8 + n J 2 + O v v t 4 x f P n z z 9 l f 3 k 5 Y v n Z 6 f P f / n b 1 y + f f V J V 9 2 M p o t m w 7 Q a m z q J w 8 e t J m j 1 L W f i q Y A U / P A j T i V Q 6 S S G m e h 4 e i D Z u N N t v x L t R K v L O Q i s X L 1 n D n v 7 W G g 2 J b Y I 1 l b W z Z n S 2 b M a b V / / W l b y q 8 V z r 4 x r t k P D i f Z q 9 j c P x O g p Y N I E 2 l q C D 4 K 5 a w d + y F b y y E v p 9 q y 5 l l G Y T o S l G 3 M o 4 C 6 + s Q z a O L x L r f V x c W m x W X F b J H 6 n q 8 t d p h k Z t H R x b H 6 w i n v B 0 V g w s C A A A 1 q c j O 2 B F c H l 4 q B S n 9 W l l M z m g l a 4 y P a W q t G W 9 p d n h g S j K w d G R X a T f 8 V / H e T w a 8 8 O O t N v D 7 l R K s o a 9 x l v D n q U J X d n i 1 A Y O 0 l o c A L D C V F i 7 y R 0 w b 3 I C P h 3 3 5 C w i s i / + P 7 C G M w D g 6 A 2 a l B V T / Y 0 m 5 S 8 M J 2 W R q g v + p H 7 p y J 4 / 3 6 y G 6 v 6 i O D Q 5 m l + z I h a P e T h M h s k z l c Z A r 7 9 h c l o u F g b W u 1 J 6 c t Z q m U k + T M r S 8 D E X l X S Y H 1 l J K r r p L J H S H 7 P x W K j 2 w T C p 8 2 G J 9 U V 3 G 8 o u X D Z / n c a 8 J G 0 Z o l v F y U U 5 8 t u Z b 7 z T W 3 + 0 3 e p I 2 e V 4 W D r 0 l v 0 r h y R c n Y U 4 m c 6 K N 8 X V l D 8 Y 9 v i E x e N h 7 / z Y U p c T N m l e P j i y o z j L i 8 P l W a Z d I / h R V P B s n e W e P w B i m G q W M f a 9 6 x d l 6 x j d U j R 2 t P X e C o V / K 2 u h M i e a A d B d x s f j N F 9 z K a T E + k R b A G x b w o W H 4 c b 1 k R d p x i 6 4 H E d r V Q p x c D v 3 Y E f K G X l b r T G Q K 8 d P v 2 + 9 5 D k v r L J A p c k h 9 F B x y X M u 1 x 6 5 m K J 5 k o u i v 5 e P Z I U 1 S 8 T 8 z B P h c S m E / h V C v f l 6 Z Z a L w d O s p 4 H 1 w Q r S 9 G 3 M 8 4 H 1 5 v z Y S r P 4 I k 7 k H 9 a n T l 2 g x j r y h Z W 0 U E t g z V b 7 T Z q 9 5 Z n 1 e M x Z M p u u 1 V a a c w N 3 L u Y 3 9 p y U w j X b D L l 3 t I 6 V s 7 Y q w o T n u V h 2 m y n 8 r q d w 8 d 9 O j O F b n O E f 3 s Y E v 9 n 8 f o / T u 0 w e L a 3 c s t M d U g D K Z 3 H p r b F Y Y f U v 0 w n v 5 z x 5 y / s X c d E v 2 J j l / X f 8 9 6 z P p t O 8 / 5 6 P + h z x v l S r / Z Z G H z h g Q I A 0 8 U I e Z c r D b l m W q I n + N 9 8 o T S i y 9 Y 3 V 5 e g + R a f W m Z C q 3 D 7 q w S e n J 2 K F e w I g G s i 7 y j d x b M 2 k y / / Y m l a O / k A 4 4 + I 0 s b h y l / N E q X S i B K n l l / p 9 d h n n U s d b + S y W 3 s x 3 P M v F f G F N U i m q z F 3 z e 0 M + U G a b E g H t h q f E i s b p e 3 n X V X e R r b 4 3 l L m c 3 / f U f W z P P 1 D U + a 4 f 8 h s 5 h q D K 8 n w u K y e y 4 p I V M s + B 8 N d H s y Q Q Y t g 4 L q 4 s M W T E p H f B i 0 u e W T l n k z H P 8 / G V r a T K z v l N X / 1 R O e u g r H P 1 U 9 R a P J m m W S H G H M + L 4 7 I L W 5 + s K E s n 1 s F / E D X / P o s v L g v Z G Q 7 U O I G 0 8 a a 6 o l w P D U f F s b r u z q + / f n X 6 8 l V 5 W W m W K M 0 C / m o 2 m s g + O y n v K Z U R x e P x k 5 i P Q 3 U V q b F e d e + U 5 U V 5 Q 4 3 B B R 9 h e V c N k X T K k + / T k I 3 L q 6 I S q j L a d n 9 W x O N c F v D k k o + n P M v L g q J W F c l W 5 N + n w d v v f 8 D f z a K I Z 0 0 p k Z p p 8 7 6 w h H R B t K x / J C p K m h 4 h z 4 M s H v H D g 1 V f h A 6 O r c O G + 3 R / j S J h A q m B r V p r z I v K K y m b J h 9 Y e Z H F y c W b c + u B 9 e Z c v Y V h / X A 5 E V Q P P 8 o y d v X v P l i z b F y 9 + a 0 s 5 i w f W M l s M u L Z t 9 a E F 5 d p W N 2 3 P j 1 s i t 7 a R 7 2 d R 1 q 9 S h u v 1 k W 3 H r S E 2 K 2 b 5 Y u V / 6 5 V D f q L r Z v l i 6 p H V M 2 A v a r U a i h V e p m U 8 + U 3 V s s v L D z C n V 9 f V d d W 2 q 9 I F 7 W w E g o r o e p P V P 3 Z U M D x Z D Z m B c 8 t J m y G U u X m A U 9 Y F q d K 5 R J c v d f Q u r k V l 4 m Q 6 i 4 q 7 y q l K y Q W Q g m r p 2 j 1 F C 6 f U i N W P F V l X j 3 o V A + S 8 k E W h m p u U H J 5 q M S K Y o u r 7 b f d 8 m 2 l W s l 8 5 B w e 7 O w r 9 s G x t b x z k s q q k v 0 5 5 0 U 1 3 U N P 2 D N H 3 w r l g K 1 J n M x E 6 Y V K C K q M 1 T M Q B W U v o b D d X 6 s P C P / 2 T x 0 f E F g m 7 c e g s 7 / I 7 D S + K F S j j + K 5 I f m g / m e 9 O j v 9 Q X S + Z y 9 + 9 f R 5 4 4 Z 6 Z 3 8 + a 9 z M r y 6 8 5 + r H f v u W H 9 6 3 x 8 y q 1 k U q 2 T L F d k p H 9 S r s f r 1 r K v 0 N 7 O + 5 A e 6 Q e T d 4 E q u l n j A v 0 2 y i 7 r c 7 b G 0 H H a q 7 T l 2 j I j 1 l z z h u f X G z A p e v e / X r c 0 P N D n n E Z u P C V g / L 5 6 r O V x b J B d f l 1 I U d O X X R k p x O W Z 6 / T 7 N w M b O N O 2 V + X X x d f u v n 5 a N E y 3 J l h 7 n O v B W U B a q G I k t C 6 3 0 1 O B P 1 m b i a 6 l y 3 o Z K K x t 0 f R I B R L g y D Z h 9 4 / f J Z W R P z + j 2 c Z W M 5 6 G b Z 2 B Y R Q a K Q Q v V Z B / 2 Q 5 Z e j l G X h g f X x Y 9 c D V f H 9 W l x z 4 K m u q V Y g o F 1 q D 5 a l 9 t o 9 V r O / 5 d A 5 t s o h X r 6 K W 2 8 s l L l 8 i l Q J 0 H m 1 / p p n c X S l Z o g 4 t x Z t T s 9 Z N n 7 F + P s b 9 o 6 L K u w P h / 3 D u m 4 + / u K o X 2 X N X T 3 8 E / b u T Z a O R T 9 q N K b o Y y y P Q 9 5 5 b 0 G 7 q d T m j d h W d q p R v K p R K u X g V 9 O r D z v U v q i M 0 m B X y l + s F e K 8 q h l / t W a B o F Y t f q V a / L b R G u e P m n V u P W i K 4 + / Y e C Z m i + b S w q f z Q m Z X 1 U W n o c S V Z J H 9 V + W y 4 4 F 0 J I 3 L P + 0 L X j w t + O T w Q D x z U i 4 i q t 7 k u w 1 R c W Q d N g Q d V c l 5 r T l D J T h l W S 5 L 8 L e v X j y 3 5 V + t d 0 v x f u v V j B e z L C n f t W V t / 3 t 7 o V I e P L C K b K Y 6 M g S g I e G T u j T X Y 5 8 s O W + q j E K A G s + W a U k 3 Z i l q r q V K Q a S + 0 P E 0 b f c f C K p a L / u 1 l m / V R Q 9 F z q s X m t q p N p j + / N / / 8 1 J 7 S V m l + S w I e J 5 H s / F B J a l c P 0 D g z 7 u u b r e h g f X 6 h 2 c v H v 3 S O n v 5 6 P H f a e Y b h K A r N 3 / 5 4 x / + V 3 d 2 h D h p G g v r U t r e c x s O w l J / Q Y j m G W r G