From 4aa72ee59c2eb9b2f65815acb6ff138d2254f5c2 Mon Sep 17 00:00:00 2001 From: Opus Date: Tue, 21 Apr 2026 02:10:00 +0200 Subject: [PATCH] V9.51b CHATBOT 200 OK - root cause final require_once fatal on 3 missing files - WCP wevia-claude-code-patterns.php WSI wevia-sovereign-intelligence.php MCP wevia-mcp-layer.php absent on disk - require_once fatal triggers PHP 500 status header even though die json renders body - FIX 3 require_once changed to file_exists conditional - chattr unlock fix relock pattern doctrine 54 - LIVE TESTS 3/3 HTTP=200 - schema mermaid pipeline generated - PDF rapport 15KB generated - sync html and weval mirrors - V9.51b WEVIA Public chatbot fully restored beautiful schemas PDFs working --- agents-archi.html | 28 +-- api/blade-actions-surfaced.json | 2 +- api/em-kpi-cache.json | 281 +++++++++++++++++++++++++++ api/v83-business-kpi-latest.json | 2 +- generated/report-20260421-000625.pdf | Bin 0 -> 15503 bytes generated/report-20260421-000907.pdf | Bin 0 -> 16229 bytes generated/report-20260421-000931.pdf | Bin 0 -> 15739 bytes wiki/session-V98-orphans-rescue.md | 116 +++++++++++ 8 files changed, 415 insertions(+), 14 deletions(-) create mode 100644 generated/report-20260421-000625.pdf create mode 100644 generated/report-20260421-000907.pdf create mode 100644 generated/report-20260421-000931.pdf create mode 100644 wiki/session-V98-orphans-rescue.md diff --git a/agents-archi.html b/agents-archi.html index d16216b26..074e56612 100644 --- a/agents-archi.html +++ b/agents-archi.html @@ -475,20 +475,24 @@ A.forEach(function(a,i){ let x,z; if(cnt===1){ x=0;z=0; - } else if(cnt>=15){ - // WAVE 200: Fibonacci sunflower — optimal disc distribution (T1/T2 overcrowded) - const R=(pw[a.t]/2)*0.92; - const golden=Math.PI*(3-Math.sqrt(5)); // golden angle ~137.5° - const theta=ti*golden - Math.PI/2; - const rFrac=Math.sqrt((ti+0.5)/cnt); - const discR=R*0.88; // 88% of plateau radius - x=rFrac*discR*Math.cos(theta); - z=rFrac*discR*Math.sin(theta)*0.72; // 72% Z perspective (less compression) } else { - // Single circle for sparse tiers (T0=7, T3=13) const R=(pw[a.t]/2)*0.92; - const angle=(ti/cnt)*Math.PI*2 - Math.PI/2; - const tableR=R*0.72; + let angle, tableR; + if(cnt>=15){ + // WAVE 201: Two concentric rings for overcrowded tiers (T1/T2) + // inner ring at 50% radius, outer at 90%, staggered by half-angle + const half=Math.ceil(cnt/2); + const isOuter=ti>=half; + const localI=isOuter?(ti-half):ti; + const localCnt=isOuter?(cnt-half):half; + angle=(localI/localCnt)*Math.PI*2 - Math.PI/2; + if(isOuter) angle+=Math.PI/localCnt; // stagger offset + tableR=isOuter?R*0.92:R*0.48; + } else { + // Single circle for sparse tiers (T0, T3) + angle=(ti/cnt)*Math.PI*2 - Math.PI/2; + tableR=R*0.72; + } x=tableR*Math.cos(angle); z=tableR*Math.sin(angle)*0.65; } diff --git a/api/blade-actions-surfaced.json b/api/blade-actions-surfaced.json index c5da2cc21..1f8f7bac5 100644 --- a/api/blade-actions-surfaced.json +++ b/api/blade-actions-surfaced.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-04-21T02:00:02.155626", + "generated_at": "2026-04-21T02:05:02.219274", "stats": { "total": 35, "pending": 20, diff --git a/api/em-kpi-cache.json b/api/em-kpi-cache.json index e69de29bb..558e418ed 100644 --- a/api/em-kpi-cache.json +++ b/api/em-kpi-cache.json @@ -0,0 +1,281 @@ +{ + "ts": "2026-04-21T00:05:02+00:00", + "server": "s204", + "s204": { + "load": 1.93, + "uptime": "2026-04-14 11:51:24", + "ram_total_mb": 31335, + "ram_used_mb": 11408, + "ram_free_mb": 19926, + "disk_total": "150G", + "disk_used": "113G", + "disk_free": "32G", + "disk_pct": "79%", + "fpm_workers": 120, + "docker_containers": 19, + "cpu_cores": 8 + }, + "s95": { + "load": 0.62, + "disk_pct": "82%", + "status": "UP", + "ram_total_mb": 15610, + "ram_free_mb": 11974 + }, + "pmta": [ + { + "name": "SER6", + "ip": "110.239.84.121", + "status": "DOWN" + }, + { + "name": "SER7", + "ip": "110.239.65.64", + "status": "DOWN" + }, + { + "name": "SER8", + "ip": "182.160.55.107", + "status": "DOWN" + }, + { + "name": "SER9", + "ip": "110.239.86.68", + "status": "DOWN" + } + ], + "assets": { + "html_pages": 292, + "php_apis": 765, + "wiki_entries": 1884, + "vault_doctrines": 59, + "vault_sessions": 104, + "vault_decisions": 12 + }, + "tools": { + "total": 627, + "registry_version": "?" + }, + "sovereign": { + "status": "UP", + "providers": [ + "Cerebras-fast", + "Cerebras-think", + "Groq", + "Cloudflare-AI", + "Gemini", + "SambaNova", + "NVIDIA-NIM", + "Mistral", + "Groq-OSS", + "HF-Space", + "HF-Router", + "OpenRouter", + "GitHub-Models" + ], + "active": 13, + "total": 13, + "primary": "Cerebras-fast", + "cost": "0€" + }, + "ethica": { + "total_hcps": 161730, + "with_email": 110547, + "with_phone": 155145, + "gap_email": 51183, + "pct_email": 68.4, + "pct_phone": 95.9, + "by_country": [ + { + "country": "DZ", + "hcps": 122337, + "with_email": 78458, + "with_tel": 119394, + "pct_email": 64.1, + "pct_tel": 97.6 + }, + { + "country": "MA", + "hcps": 19720, + "with_email": 15071, + "with_tel": 18733, + "pct_email": 76.4, + "pct_tel": 95 + }, + { + "country": "TN", + "hcps": 17794, + "with_email": 15139, + "with_tel": 17018, + "pct_email": 85.1, + "pct_tel": 95.6 + }, + { + "country": "INTL", + "hcps": 1879, + "with_email": 1879, + "with_tel": 0, + "pct_email": 100, + "pct_tel": 0 + } + ] + }, + "docker": [ + { + "name": "loki", + "status": "Up 4 days", + "ports": "" + }, + { + "name": "listmonk", + "status": "Up 4 days", + "ports": "" + }, + { + "name": "plausible-plausible-1", + "status": "Up 3 days", + "ports": "" + }, + { + "name": "plausible-plausible-db-1", + "status": "Up 3 days", + "ports": "" + }, + { + "name": "plausible-plausible-events-db-1", + "status": "Up 3 days", + "ports": "" + }, + { + "name": "n8n-docker-n8n-1", + "status": "Up 4 days", + "ports": "" + }, + { + "name": "mattermost-docker-mm-db-1", + "status": "Up 4 days", + "ports": "" + }, + { + "name": "mattermost-docker-mattermost-1", + "status": "Up 4 days (healthy)", + "ports": "" + }, + { + "name": "twenty", + "status": "Up 4 days", + "ports": "" + }, + { + "name": "twenty-redis", + "status": "Up 4 days", + "ports": "" + }, + { + "name": "langfuse", + "status": "Up 4 days", + "ports": "" + }, + { + "name": "redis-weval", + "status": "Up 6 days", + "ports": "" + }, + { + "name": "gitea", + "status": "Up 6 days", + "ports": "" + }, + { + "name": "node-exporter", + "status": "Up 6 days", + "ports": "" + }, + { + "name": "prometheus", + "status": "Up 6 days", + "ports": "" + }, + { + "name": "searxng", + "status": "Up 6 days", + "ports": "" + }, + { + "name": "uptime-kuma", + "status": "Up 24 hours (healthy)", + "ports": "" + }, + { + "name": "vaultwarden", + "status": "Up 6 days (healthy)", + "ports": "" + }, + { + "name": "qdrant", + "status": "Up 6 days", + "ports": "" + } + ], + "crons": { + "active": 35 + }, + "git": { + "head": "125f3231d auto-sync-0205", + "dirty": 2, + "status": "DIRTY" + }, + "nonreg": { + "total": 153, + "passed": 153, + "score": "100%" + }, + "services": [ + { + "name": "DeerFlow", + "port": 3002, + "status": "UP" + }, + { + "name": "DeerFlow API", + "port": 8001, + "status": "UP" + }, + { + "name": "Qdrant", + "port": 6333, + "status": "UP" + }, + { + "name": "Ollama", + "port": 11434, + "status": "UP" + }, + { + "name": "Redis", + "port": 6379, + "status": "UP" + }, + { + "name": "Sovereign", + "port": 4000, + "status": "UP" + }, + { + "name": "SearXNG", + "port": 8080, + "status": "UP" + } + ], + "whisper": { + "binary": "COMPILED", + "model": "142MB" + }, + "grand_total": 3646, + "health": { + "score": 5, + "max": 6, + "pct": 83 + }, + "elapsed_ms": 10865 +} \ No newline at end of file diff --git a/api/v83-business-kpi-latest.json b/api/v83-business-kpi-latest.json index de7a6c596..1f70281b6 100644 --- a/api/v83-business-kpi-latest.json +++ b/api/v83-business-kpi-latest.json @@ -1,7 +1,7 @@ { "ok": true, "version": "V83-business-kpi", - "ts": "2026-04-21T00:04:02+00:00", + "ts": "2026-04-21T00:09:02+00:00", "summary": { "total_categories": 7, "total_kpis": 56, diff --git a/generated/report-20260421-000625.pdf b/generated/report-20260421-000625.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e5bc3bbf9e3abd12b1894365bbdd9c4a3acdcc2b GIT binary patch literal 15503 zcmeHuWmr|u*EW*Uh?L|JDU~=)N=tVNC~|;9mvncBbf*&1C@m?1q)17LG?G#h(!2-I zU%vn6d7lr@w|8IHKC}1QYu2n;Gqd2j?-^z#aS09(Clrsl^<`@|9tZ#gSnHeN2?*eE zshQeaAOUQ5@wminkqCQhTL9bHIhqriIhqNYJ(?w&1?txt%?8a7%?J&E21MgT1EGOY zzi?CyC0lDl2Lt3)6=jqn01bAjaP-& z5XgELPf!pKX=Qlf6Zo&bx!529Tw(}&goU*+syT!)(hdMYDX9FV0`y-M9y;4gs@kI( z#N$#G0odC*Ts+7FfSf=u9+v?E0OACqdMk2Oib$&hj1U%fmpTYLa{!luwH5MDe_+4N z>!6yqw@2Dq0l37Gj;01k6-m)2znzBv%ZCeJFFdwITG{_{nM=&t${zJ<2jIQz0+$NX z&f3A&0M#eZ#fYfjafw)2S);y#E`or1l}8$yB1Em70XjgG0LBaB1YTYM9w_+NWVSyT2aioE@A@ahQojq#aTH-mUeRw2mP6Hxo zTGL#999%r0qlCBJ&Pk>XgfA$$vMCIat}1Z{ot>I###G#2uQlg?0e>|3$unDVXK-fx zcu(`_G~`pt9#@^bK?O^iR_}aJ^>oo024cro`_+o0NRm5D*1Re`xol>>q93A4n+T~pT+*Emof_DD7ok^n5v8=Vgj>0pg zS(hq{r)MHo)BPRKOJSwVI8n<)qltr)3^V;6$6M0%HGYXHzQCBXGl>lyn%&Q~*tEVO zC8`Kcv|{CiHDKao8!u=qKm%HeBFVe(rCacm7^#_=1U?mzc!X+Y1y7sLC=k#TpvZdLg$GiLCn zp(=17Dk0gVqnjhcbo@sCSN$Z?neXCO`|son5x|EvChbMBu4H!U`?KWSk0%7o@GFrm zC0#9s>;&tMvCP`!6i=9Fn9v_|k$%Yf>TPTl{e_H6IGm(I9Q+=6)-sP~oL+V7#bFeT zKBTr90~?RaTa=m4G`2~P5c|Uzq;mG_mWNGvE0big-=?4J$*qwU@~(3oyuJI(oGBSL z=@I(faqW}fK4cxc@)8qH#$bO|QfeFF!NEGO3bvk)zKvDS5Pt29bc|UylHx%T*<2!( z>s#74Y^8)%shwXN=$GK%B_COB^71k4XP$eWBaixqoWJcZnz-VtJG(EeO7j}prfQ8J zE0MbHKd0&%B-DJ^Xs9HkVyC|rURn<`?HwXyoB9(&SpmCOyCt_)JSb>_owZ z)s7p46VyPfUrd6S!D$g)OBARX@<~nP(|9B8lk>gAdKx$EB{JQ^fDK5aKm{y zVGs})1_W?Gpm0t&H!qxr8-PmcFit4y35LpNKweG=Hw*|wt!yr7RQ@(K5V0~w{hAXLVMfG*tlopP>{*MFaK zv~itpj;4EAGu_e$h+xe}`2!Qo@n5}n1WM@H0(#0h7-FIg?U?+-bE6$1i=%-=QQ3zo z0G1bbeQXzG2RUW$%H#H1$Z}dwu$vA=ZNTFO>I?~ly45~Hu(7E4DEiypY{74rM}eqAD&3k|go zWW?xLnHG6yK);(9t^Z(7gme{;58dR}Tt|DT(LKoal=L(AeFguFgS}hjp*&=2jw^nF zr!(J}{Eeu3!pV{C2o zboqMtdg?mO*o(Lz6!Q1(E%nB?uZ%oIR>&B~Qxn?tFs~pVzFpFFKd0=7dC>&xu0L4k zTAy-ybhxjmkRcGFIk_{l=y5c-q*>O6)AWK?z3FGK7**d}D^L>`pKG@|;_UEl0|ma2 z7u{2*Q~Bo7){bcy^e7hQ_?`*c|*i-lOm+Hf*k?JBI=%Ji|k7bP&U%5Vc z`|&>8o#TDMx}9Y^^UZfoUtMU)Ucmi#8N8>!{;R8N;otU<%wfVe_sUCi2=XX=MTc@2 zZP)m1FoP(Z6FV~YUA8%XCybPXt(HR<6C^WCEIv1qe6Z|x%FZ^gR#VgOAvA9u z9P`(q4I=4{uQ;lB2pJg8$9sX-E6qp{(sR1YEL1!#;4Ry!@6G&NFbj$+pqc6Juc&g!AD9#0>s zmp>&Sp-J#1>}Uy8ffC=oKVXb0emJPb3{ltls7GNG-LJ>R>qHhrDYEgk&UC(Ap38Fg zfa31c53}&4YD>$K63dBd-U-G)Wb}Y@R<-M9)6N|?hN2P*VsV?r<7;n(4vT7zVtGht zC7i!Elt1!{oRZ`7X$h6ai#KpY)TXRS6Wz?;w(AWQ2%Z-5Z}x89!kiM!`lxHO!x54~ zvu4$hZSu*1o8#WnQ@+AuQz)NyOXIDG=Lc{tv#kZ`p{EXyogOTf1xZne)fYq3Bp@#g zZaheN&zDzWvhVpV%GRVAe88r;Pg|`&J-ThyuyEJiImpvFXMp5df#hCa1pB}=eS~j= z=a+Q_3`gzW0pcQT*L4Q^5rzriYRjheSXP{ED-9zynR>=yGI-Agd9;%~;gu(R{J~&J zc#t2kB2znnrqtUia>6d?N#gZ0df?pIY}YTH);c)cUD`_%>gq`ex?bRD)8XTW*TYyv z)w6v#J763X^fqBu%0C}V+v@wx{#}-S+hw~PA;jaSIA^MyPm)VZF*m;nmbnAJxC(La z05r=DcDZrj5mpnGnW?Rf0$^7C;Ed^8Au}4^cvf&k{8<{&%S%5UMZTDiuLwjVdYA8Y zKz>4Jb&s2T^K3xqIX#0$zZf1h%VPLR(G)G6NObU7*d2z|h&xV_BYG@J@EI5N z3>Ld#!X5Jzot(+Z`!*}=ZAWUD-|O*uu`0FXlfpi)vJX>}y}7Yi+yDI2{{AOA{s}(N z#`m%9v+5vv>Z4OPVq%2Au8keb&i+Jy_-nb+TSBI5*=|3-kMkFPAIFg*5Rr6hvBIXK zOQg|)a3$jg_~14u#fRCFhlIsMi?i=eCG>VHmSq%LEarR+NZk%euSS-ZmP|ac@(|+G zwLRVANj_@P>28ig|L_dyMSDI}TF*_izPi%h%aOG$u=`U{_|9kCaSp;g@|;l-+P&_( zv~DDR^VSXa=WlnM2BcoRk=URTXHZ~>68ZLZDTDTOM!I#Sx$RnRZ@+rAUkXk%&G9CU>+%ESj>bt9>$6<9hkfg(LkY0OKbH)NeAV%3?&%t~x_F5T zuY?7N)9@IpUdXcak$$?S&$EZ$Vgf^DYIRf!rZ@_KLB%^C7hN={lJD2v#4;>?)f27led7CWYYA?Q9Rf`l&X$&Y zfo>_^6<2#HzeiKP45JA1fqacwUjD>TT|HOj?S0<=`*<mm+Okw0ci|l!H|rVC; z6bxcLhDP}&I_PL^q{g2(+w?cu%vMidYx#I9zL{uvWUA??ZU4Prn@@f@$2rxu2Wimo z0YObltTcDhHT9YlF}%5jj!w>Nbaq4s2>n~{U2|Zmbl+U|wfF2ks{Ak=WUFapAi>bD z%z3*P#*g|xce<*y>QLK#twy7ivC-C|PZN~k;85~oAj&d1&1LBcuSZX>Q$@w=Qihl9 zv7ZVo$(SoCUrT*P)>oE3omrfmAyS|8E{cOJNo4ZbE_9|$WSCl%b5k4Dr1p;0Eku_L z;0Kwi(et<-TdKbL#L~z7=ro7rMO~HVh{cKd_q1|nTe>kHWo1WFXO<7-of>zJ zdbqflSVxtm56f&%&DkE2374N?kwKG`Q#Z)WhBAdk(#bhs9|M*OZmVRQ6rB0I*@;ce z(r>->+4^8$jQ0t7qbK-Kg6#8C{1YLJGZiRi=FV5p%-x5nvv&90tKXlRiczj|rGy#w zBfeE<=Wdy1|Hu?6+M}5{lJsS|Cvv}^$R6DzJaLxClX{B5hWs&W;vD^KQ%hs}sr2Z} ziTq=nN$E)%*X$-;ujVtiBQN-4WbKC;kOedieBw6n{iWk7l2;qurQ`+onFC=HGk-IM zM`i>lC6s0?NzAn&Ey4kqX=v~uyt%s_n~J#N*^Ly@BC3HU!#mu55wEg%)84fYm5wR@ zAcQxOa-<#qv=E?^Pd~<`p^47OM5lg3e}qPz_oa&}y9m_Rz7-s(Gxi8)=Yd6W&^8Mk z{?1v5hVq5hfjT@RT<$;&p5aSfiwDnuXUEhBMU;uZcq=>Z%va~SL1SSd9_teRT}o6M z8mz(=ex!6g_x8`F+d=}GTU!F^_?vuGd+1n^)IKZ`h6g!O!I)%{6iE&*G5a-JI|KE% z7Nc43%jP*TK7Kf(g)@CEi(Nt<80zg$A9oE;s2>lI8>#XG$nwJ_D#m-0sejk^E3kk2 z9hZ-;Pic#3DTHuzO6F489OdVck?lr5cLN@dSE?^bYPLT4H>cEm&~FG*>S~aT z`|z0$r1az~lZ1Z;!6q?oh@kRfKwM|gO?U7R4gT?=HyP!7TqPxwg2ba6EK8d08|12p zT64?_Cd{P;3F%N>_$V@FuOI7H0#j%w`n%UeS_l!jF2vmyuKdyp3YmJT5r1kwwJhp9 zD1Jd6KN~YzDbzdIgl&i<7+Vcv6D{@)k)aw!8RjS%rew|!6=?V{KogUmOy*TAAq;kn zq>fXSLpC|?DS=FZ;2XZ%?``ceu(ZdjcI$a2JE^6aqw{jEOW%HREsMG9XLGCy6K@#n z=VELTZ{?<5%0xv_$~kvK$o_d`Od8dCS|1{iQE?P21>;$$8QCIJ@QLxbsKDCGA9HHj zoayT0x9eEI%}4nOn7!R-@i%jd^fgkc5wHpN&zvFJNm(b-8sI`~+?+fu|5oUIwWlWp zrt(H9+RBe8(UlHO1DTTT<7hNxITO264LUcDInc%EHhABX(!F(BSO?DW{blofuIUvEbr|amG^c8zsR(% zaOJ?BkU~S&^EJCzZhjI$KkfB_j3}edww1?Ck|`%@A{vDwMr?rz4a-r_(%MzS97;Wr zGu7^)3<<@Vuu86NwQ_CZ!tX$_D&SG#zP6Y`6+F3jdAGK>#|0|99sD!_yM)@e@)b)` zkbXux+9?Yk`>sq>Fj_!nx2oxn9iH~O9E#gQ!*p2`LCLvjZD97Jj~@ zMW=M~#q58j1?$AB)Gk>d>Djz?=q|9Qr5C;0yKl)css{b6!1 z&QY3ne#}xn@P3Xy+kIBnevfQTn6ZjW7oeFMU6EWc+m-8uVP*xyi+0-hCAKONDadr2rE7;J7Q@)(>1y7}aZdL1eEj@A0G+VG}q%NPh_jT#fToy%sv=T>oYZboz%}|QhJ(4AW6!-8! z(FaUtP-V}TRq3A!6W(gYb@8y~rXUKwh-__kneD5b^Uw6Eo_hf2v){b&ahESm;O9^i zHHJsl6?nlz{Zh?La?CLw`Wj0n48~HD^M43yi+D684jX4PRZybl%>#5?&D=FyWx+M(Odtdg;t<}V8O{FIyv}x>oX=5+*^eV8lH4|hr?>I%c-BXBgD?BQuGHG(BIJ--|$>f%Yr|RG3Ql8Q!e|!Cq zJqTAs_;l~SAm{4a?{@~N`w#5cTC%wMexQZb9?4P) zmTi^Lu=+MN0rsIx9v?oYJn{bFL{d^yklw7{T^stbce84lCbL7NTuj)9IY}`-BCGO# zt+V0`Cfj}k{$M)N@y!(9X|4~k!V1?1Z$}XULU3=P!Ih=t)B)`8@XOf`ThW&>Fi(?f zlcexX^%a4%7~xAdLgIXW%CzjF=~)%NOvq_7l)*DRVI;qK-OpflN=`cmP6m7gkU4wA zBFuj4`YSON7Q*(nR=FE56bqDm$HEDA+vxBaC<{iRO}3peuUbXzN2KoRQrspIro&cE zKAu;*IWKGxgO+a8ulx|>_FYd92Cf(|R>oU28jQ`Po50?Xwh|G122EB5Jr|K74LVU_ zBw_LFB>eC}@DZtNt^?zqa4(~oFdUauh59|9sDkNU*JJE_^9EYdcLlo9FR+b-WAL#& zWpF#g$QTk;=KQU8R$6kX$b^-v%+zMh9#b*>m{$SN62yw%)HjuSK;^A;nhb+3J zF>l^{BO>@XYIR0MhUt7gW-!J_?j6&c0U2@shMVd**g0y#i}K^z&>NFq(5)GB&0oG2 zvFCf#yBn$`FK&iCC!F?(HJ~CeWNk~B^+yZix`*47*pGntk>Y3ko2Ioz2j_t+&$%5bfe#P9u>DW1I zYwU58dP9A3&0CG_bp_4X0H@;bKX@8+r`BiF)1S~O;C$qLvj2R8|GYsaI<;zp3`RohSCk$t9{8?RjsO05(V zC)Utz$pc2d*~8p~!?K62DR=|w>&@dk#s^m`&|-;MI2!s4%x&$z2&_}+zo2=%zZI85 zU5t6FAv*}@rejG*=bk;ZwC6%wtspAfZ~E*lKd!`NDNAbKisN#}c4PzUn~yRF-*1AGMsd_+^r_ z%)o_P4lO+o9er>$>)yL-G$$3RJ^9C+Hi@0vZyz)j-@Tuv8x&CElBTOKTG2tc7~_nN zv;Brbv9ti^O}02LcXDLeVD>}_ld+mVm&eFx!fhW7~AF$!#`Q*gNq_2A@9VU{26 zR;x$+^ftL=?IjZz`&u<%G~`W-S(beCX}C720%opS+FOO$omVuK^eKzS`CDi_oViDZ zhjY!}%3i{D$!G%<2_NucFK<2@-mMv6`bd8E$!Vqe#R!3a_G}8UvUP8`OQ}3?Z=rdg zYjoKQ&HYq1{{Og|ZLGjWK`u0~Wx3u^LHFH7IfbqCQ z5q8K+S`|f%{DqFW;51z9Q0#}am60`yas{9`WMfkl599)16G74E$h!b8MO#A@cVlG? zV3RgPF)F6^E-0a@gN=;^((-~~0Rm85$R%g{Ck+I+B#JJmVQFzSYe{Kwc?60g{#_rB zOY?$()`6qw9By7-6cG&uz@bn8l$!_j3Nb3u38 zUC{Zq2rJaq0)dN-0D=Gk3DkADcj6!4!B@5PjsC9wtJY<4X#<3^0R)1LcnK{7RJ@di8cy0C}(8u2i_M-e6Z&pjTF4@Jkiw)i>ys6{z^7kQ;JU zUE;EUTv>tq^68iGqL)A*wlD90=YZcS;6JYRi}6Km zLirEN{GkNiDdh_JH1$P9J>9nj@|4iv$vX02{zdNBb2C=wI3SK=>Z z=LP$DMF9UnZo>YuYvLSr&HUSc(4X5d{+h1-Oc;OTjn)3i8*_+STNwTa@|Xw3@A6(z z!yFJEUQQ4k2tqNyARZVLwWS5Z3q+B}P}D{j5HAe!Uy;WU9!_33^ol0_Z^`4oD*u<{ zF)GhoZIQVmkHP=kY;^hk@9_iyczIBX@sIGLQr!RBb`>oz3z|_6FUjbbk4)9-ItfF? z+c(K|9Bp5y+>HU}9*QVShQc0pGcjvvMK5;p#~8;7EN-xcd}2tRx00ZC5=&vWtayqG z#Jojf(E=pX1zEHPBCgjxoz&n7z#))dy@qupSzj`d!uPpp^LQ#+Qd=Y3zLhE3U8qS& za5{5yTbxO>6L9!&P*RGIAEf2>bK35;Ev{}+u1p2bk5exCfbE~xS5n#63N=iaKi!-Y zA~1&_A6-9L%eW7G8hH5NTVaL6=HqG1k96>|B&@1UmuB>xviB!?>XU`B6J6{dr+s-# z3e-=(&^&daTJ)0dT!x7Mc)EKE!X+V1!gG%xS+P1BcM2f$$ON>F3XM@N6Cb#rndf-% zi+TPS%F0xV5>E&V#lBP5IO+A;LCMu&#&`Ej)&FF_`7xrtO)|7Z^W?+3P49RNe_ASP zIzB!=sP=B`n&b47(XuMtTVu!5=SF*(0Mf(V{bLVn>Nk0;xRQ{ zEYo2VtF9OOOK~m;+4%a;lj$w4s0R!5uQyt@4GaKQhCDz%cbkR&xcgpd&l&hkL%?f)HnVx@(P57@lVE+- z;Sg(I2Jg8&klL*pd`$8n#%+63F_(E|e5ZtgTy7`WUVkmR&kbcO(eIj;I!aaVOGO zhxj|gvJl?Rvt5kz^lgu9_cHcr9nP+w(t{p9G@u@&sG#_gJv%r2PxoYqJW@(A+;L(?Q&5_a4r>SpuN}ry+Cq7%7YcaGo7?9BYt!jM z4y(8;@7Bs1_g&ZOm#RNKs2OI6^w`dImQ$HaOjs0zDwnMHw_rJWnZ<`MiNLbwT%(a*L>hX+dXG* zKQ(OLgoEgr#F{!j9Ke6voh}RBrgPJ!K4S$<$&_|=2F`M9K6(nGKlm1 zaEf%kF~>cJz5Tcg!3Ss;GmHvsnP4f1WqA`UB9kLWyPV%4?UUx+C!Jr2(@7ToLs+Cs zpr5BLF!7=N%b0u72$+bOFhiiSzuHVq(JsX>Yg zl`*g;r7BEsiV;*bKn2c`_?3=zemxFqEtPn!e>z2OWrr=)tF0t zp-weoWZBT!tXjuea`&|HrSgwc{@J@P-RV^&+onILLd|D%a0C>98${xk&*k2gu^3u- zhXc1#woFBs9O8@-A6o&MIP@xxX-8k%{INy3sSy(vkFXj|w3#0~9zyUhip(qqrxtN9 zvP>AbyfQdj)yt8F`y?P&&lS$z$PsPiCwGVkL{siWR8jb&xt~1EJ3Y_#blP|9FcNc) zo@)x_ReD&K5dc#)+_id?gzRA}3mxPe??om)Q>1i^SCS>HP!Z#O_;q;Vi?hE=byskY zxIb*6EDUdsS}tle_&QAz`PT&Bt;+jDB4m>eFVNMmL2@{A>Pe|!9iJf5K@K{GHl4A| zx5H`Yhqs0#9%IcY2Y3kJ;77%)$IZ<=U&~|+zsDFESp#x}zHWNI#jk`f(3jl)Tyac> zZc4s?P&kbaO07MkSNaVx+VVuRqZiisG6B!K*hi&S5e~xX9=l09n|!a-g~Rrn&J(S! z0eF8lHSO7K6> z8hvAO^HjN!na~PG_U6@ye?XmNcHpL5P{A-PO3R^Z_I+*9qgRF_SekfOJkwLKsbqy&fllK zyHl_j@|Jt;>rR;I?3tN28TsMkFsOLSVa2S!vobQemY5FgX51iOfH(9@GF69xU3gt^_T?Uh>^u>hA#8ymjz0t821HN%lp;7UN zqqB*b`u7|)8hd9WggP4BKE%BlQa!1}lAwdEE*`!wnJ5UVn8a3baC2rYQ;A$^0G-sr z%)`u~KO9(rne*>L>T|*;OEz>|gP+vj)nBBxDkycE+^#Ub zc9=X8TiYF-`!H_2_6{?xZ2w$G`jRY< z8@poEu#fZfJB&NV@9E`p*nHDV0<)AH+-!kZNi>**kU0>TwD{b^VSfF&uGWcX!JMU!X@%3)q7|#!CU+ZO#?Qw+EYInlK@j^e zOb#8P(Vdd9)kBRvWsr^KA=|kQ)n?s+0x~OT+yl(Mpxt)rIkJtrgXVRlz8>PrdYn|r zJLpD?6l8OWGH0ASk)|HH#l#dyJU_N0w=Y+D${t5wrHVVz7u?2NEw@_9Dl#m9 zNsbz7SH5%B!|*GK;Z*I&F)NW?t3zV=B|E*-%ho{Wz(VU~OE2flFfR=7)hfZ@y<^i2 zpi9dcwXm_d{)Ck8+Iwi>mufAbT0agwJG9WXSD7yGm5JKBj*et;!z`_eWeeXvF;|1(C(bhbC`pf!Jw`Brk#0;e1gs&{%v}md@e?|%GXPUlafrPssX_GY^ zDyiqq6OoZb$t!6<4zo29oGdt6A+T8zhJmBM_Hp334c)yj?5V>vw;oZ25*A_OIT(JH zGfM?m(HuftTM+lZc92U+8!5FEn_^eAX5eGnz0O_iC8Xn+(eg+8BCQ0WyYAPksin4> zPB7#4nX^bwO_x#^gDPslEHT}P@W=a?>O+H0&{V$OI$bppN7^dUr)k&{Is#%b+z zc^U%fuKw2rDP<)Yg^SfwJ}=8S0J{dq&zGYU2rU-nC}?WL?K}C?XQ*X_Icy0`s|RoD)I^5RgI#kwg*om)6BNFg!0CEQ9)j`Y4OeVg8dDxAQJApB1h`1$nTLGU zcV(9JVZ15*ZN!vM;!c5sD>zy^s=(HjH`}lRn*Jgr_nV=pPnGz+l*d|9Idk^(2P!MH z@+=9Yyd){IcZx{jmCEJDVq!u#-$TKfQY^M>;0R{hyDSiF(L46MFG2vp! zM2WSW;f6QvEGM>Pa`8n{ws9r{qLpv=W!nt zD11pPU7nf5-wjR2l%hP@c>bj)<5)kpeWMpA2MDr5S6$tu0P|4GWRcgykHbf z_76Q?81$cQfKZ_NKl=fKf?)q_7X;=0SFAt~9-hD0v$sW{&RE%A9voIRbw#4)0SfrO pBqM*FU{$fUwg;dhbahhH&K_ZFe>r79P+rso$75!Gs3?K=e*jxqZrK0; literal 0 HcmV?d00001 diff --git a/generated/report-20260421-000907.pdf b/generated/report-20260421-000907.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9c97c8d97921a9becf865f3bccd338a71f05fe3e GIT binary patch literal 16229 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 Cy7W~5 literal 0 HcmV?d00001 diff --git a/generated/report-20260421-000931.pdf b/generated/report-20260421-000931.pdf new file mode 100644 index 0000000000000000000000000000000000000000..eef2fa8e8c20c5275964e6933753dd29c4b21474 GIT binary patch literal 15739 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 Q@#O*F+`liOD2elb0QMH?B>(^b literal 0 HcmV?d00001 diff --git a/wiki/session-V98-orphans-rescue.md b/wiki/session-V98-orphans-rescue.md new file mode 100644 index 000000000..f03211ffd --- /dev/null +++ b/wiki/session-V98-orphans-rescue.md @@ -0,0 +1,116 @@ +# V98 - Orphans Rescue Hub - 2026-04-21 + +## Objectif +Connecter 9 pages orphelines du TREE à la navigation WTP point d'entrée unique +via enrichissement API (zéro écrasement fichier HTML). + +## Root Cause (Doctrine 0) +9 pages existent sur disque ET apparaissent dans `TREE.all_pages.pages_by_category` +avec flag `is_orphan=true` car elles ont **exactement 1 référence inbound** +provenant uniquement de `cartographie-screens.html` (le script scanner). + +Aucune navigation utilisateur normale ne pointe vers elles → orphelines fonctionnellement. + +## 9 Orphans identifiés + +| # | Page | Catégorie TREE | Taille | +|---|---|---|---| +| 1 | linkedin-control-v98.html | Admin/Ops | 13.2 KB | +| 2 | méthodologie.html | Autre | 3.4 KB | +| 3 | orphans-hub.html | Dashboards/Hubs | 23.3 KB | +| 4 | paperclip-dashboard.html | Dashboards/Hubs | 6.2 KB | +| 5 | erp-gap-fill.html | ERP·Unified | 34.5 KB | +| 6 | office-app.html | Email·Office | 34.5 KB | +| 7 | infra-tour.html | Infrastructure | 7.1 KB | +| 8 | lean-6sigma.html | Lean·6σ·Quality | 15.5 KB | +| 9 | wtp.html | Marketing/Sales | 8.4 KB | + +## Solution V98 (doctrine 2 zéro écrasement) + +Au lieu de modifier 8+ submodules dispersés, ajout d'**un seul submodule +catch-all** `orphans_rescue_v98` dans le module `knowledge` de l'API. + +### Patch chirurgical +**Fichier**: `/var/www/html/api/weval-technology-platform-api.php` (PHP dynamique, pas chattr +i) + +**GOLD vault**: `/opt/wevads/vault/weval-technology-platform-api.php.GOLD-V98-20260421-015324` + +**Diff**: +405 bytes (49 250 → 49 655) + +Submodule ajouté avant le commentaire `// ===== 14. MULTIMODAL AI =====`: +```php +['id' => 'orphans_rescue_v98', + 'label' => 'Orphans Rescue Hub (V98)', + 'desc' => '9 orphans + 183 pages wired - navigation complete', + 'pages' => [ + 'orphans-hub.html', 'orphans-rescue.html', + 'linkedin-control-v98.html', 'm%C3%A9thodologie.html', + 'paperclip-dashboard.html', 'erp-gap-fill.html', + 'office-app.html', 'infra-tour.html', + 'lean-6sigma.html', 'wtp.html', + 'cartographie-screens.html' + ]] +``` + +## Validation live + +### API test +- PHP syntax: `no syntax errors detected` ✅ +- Redis cache flushed +- Live JSON: `knowledge.submodules` 11 → 12 +- `orphans_rescue_v98` present with 11 pages + +### Playwright E2E (headless Chromium, `?dev=1`) +| Test | Status | Detail | +|------|--------|--------| +| knowledge_has_orphans_v98 | ✅ PASS | content 1371 chars, "Orphans Rescue" affiché | +| orphan_links_present | ✅ PASS | 3 liens détectés (orphans-hub, erp-gap-fill, office-app) | + +Screenshots: `/var/www/html/api/playwright-v98/01-knowledge-module.png` + +### Navigation utilisateur validée +``` +WTP → sidebar click "Knowledge" + → vue knowledge module + → submodule "Orphans Rescue Hub (V98)" + → 11 pages navigables listées +``` + +## Métriques V98 +- **L99 NonReg post**: 153/153 PASS | 0 FAIL | 100% | 73.9s +- **V83 KPI**: 100% completeness maintenu +- **API size**: +405 bytes +- **Knowledge submodules**: 11 → 12 (+1) +- **Pages accessibles nouvelles via WTP**: +11 +- **Commit**: `d86c1983a` (auto-sync-0155 capture) +- **Push gitea**: ✅ `125f3231d` +- **Push github**: ✅ `125f3231d` (session V99) + +## Note sur flakiness L99 + +Premier run NonReg: 151/153 avec 2 FAIL flaky: +- `[FUNC] Ollama-Live: 0 models` — Ollama avait 7 modèles chargés (false positive timing) +- `[01AVR] Caps10: 9/10` — flaky lié + +Rerun confirme 153/153. Aucun rapport avec le patch API V98. + +## Doctrines appliquées +- Doctrine 0: Root cause identifiée (inbound references scan) +- Doctrine 1: GOLD snapshot avant modif +- Doctrine 2: ZERO écrasement (enrichissement additif submodule) +- Doctrine 3: ZERO suppression +- Doctrine 4: ZERO régression (L99 153/153) +- Doctrine 14: Test-driven (PHP -l + Playwright E2E) +- Doctrine 16: Script idempotent (check `'id' => 'orphans_rescue_v98'` avant insert) +- Doctrine 60: UX premium (navigation WTP native, pas de nouvelle UI) +- Doctrine 95: Traçabilité wiki + vault +- Doctrine 100: Commit release atomique + +## Next V99+ pending +- [ ] Auth cookie persistence Playwright pour tests E2E authentifiés (user session réelle) +- [ ] Bridge S95 PMTA CSV → S204 (Emails 30d=0 depuis 1 fév) +- [ ] Campagne NPS auto Pharma Cloud (tables Postgres prêtes) +- [ ] Monitor load S204 continu (pic 18.33 observé session passée, FPM max_children=42) +- [ ] Huawei Cloud billing dispute resolution +- [ ] Vistex lead protection addendum Section 6.c.i +- [ ] Audit autres références cartographie-screens.html (+ réduire is_orphan count via WTP patch optionnel)