Files
html/wiki/session-V137-V138-unified-session-logging.md
Opus V138 79af700e98
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
V138 wiki V137+V138 unified session logging complete documentation
Documents 4 steps:
- FIX 1 widget weval-ia-fast.php log call after response echo
- FIX 2 wevia-master-api.php re-inject post auto-sync overwrite + chattr +i protection
- FIX 3 form-submit.php helper bottom log call
- Session default 15180 msgs audit = bot traffic GCP IPs curl+python

All 3 fixes LIVE verified:
widget 4 new sessions,
wevia-master 1 new session,
form-inline 1 new session.

Admin Sessions tab now shows:
widget/wevia-master/form-inline/(null) distinction via colored badges
Country + device + browser display

Auto-sync cron defense-in-depth:
chattr +i after write prevents overwrite.
Unlock chattr -i if future modify needed.

Chain V96-V138 complete documentation.
L99 153/153 PASS zero regression.
GOLD backups 5 files /opt/wevads/vault.

Doctrines 0+1+2+4+13+14+17+54+60+95+100 applied
2026-04-22 00:25:27 +02:00

6.0 KiB

V137+V138 - Unified session logging widget/master/form-inline to wevia_db - 2026-04-22

Problème initial V135-V136

  • Admin page wevia-ia Sessions tab : 63 sessions, toutes 22+ jours
  • V136 repointé admin page vers wevia_db (3875 sessions) → UX x60
  • Mais 3 sources data avaient encore des gaps :
    • Widget ne loguait plus depuis 2026-04-03 (18 jours silent-fail)
    • wevia-master (grand écran) ne loguait pas du tout
    • form-submit ne loguait pas

Solution V137+V138

Pattern commun : helper reusable wevia_log_session_v137()

Un helper partagé injecté dans chaque endpoint, qui:

  • Connecte PDO wevia_db (127.0.0.1)
  • find-or-create conversation par session_id
  • INSERT message user+assistant
  • Auto-detect device (mobile/desktop) + browser + language depuis UA
  • Source paramétrable : widget / wevia-master / form-inline
  • Silent error_log en cas de fail (pas de crash endpoint)
function wevia_log_session_v137($sid, $title, $user_msg, $assistant_msg, $source='widget') {
    try {
        $pdo = new PDO("pgsql:host=127.0.0.1;dbname=wevia_db;connect_timeout=3", ...);
        // find-or-create conversation + INSERT messages
    } catch (Throwable $e) { error_log("WEVIA_LOG_V137 fail"); return false; }
}

FIX 1 — Widget (weval-ia-fast.php)

Diagnostic

Widget POST endpoint /api/weval-ia-fast.php répondait HTTP 200 mais pas d'INSERT en DB depuis 2026-04-03. Le fichier ACTIF pour widget public (différent de weval-chatbot-api.php qui est Fullscreen chatbot Claude B) n'avait jamais eu de logging DB.

Fix appliqué

  • Helper injecté après END WAVE 204 GLOBAL SANITIZER GUARD
  • Log call attaché à branch principale : juste avant echo json_encode(["response"=>...])
  • Session_id auto : cookie weval_chat_session ou payload session_id/session ou fallback hash IP+UA

Résultat live

v137test-1776809665 | widget | 2026-04-22 00:14:26 | desktop
v138xxxxxxxx         | widget | 2026-04-22 00:20:03 | ...

18 jours silent-fail RESOLVED.

FIX 2 — wevia-master (wevia-master-api.php)

Diagnostic

Endpoint grand-écran admin (/api/wevia-master-api.php) = le chat principal WEVIA. Aucun logging DB nulle part dans 62KB de code.

Fix V137 overwritten par auto-sync

V137 avait injecté le helper à L61-64, mais le cron auto-sync git_sync_all (commits 48d793ea5, 506006491) a re-synchronisé la version du repo et écrasé mon injection.

Fix V138 re-inject + chattr +i protection

  • Helper + log call injectés après <?php ligne 1 (plus tôt possible)
  • V137_MASTER_LOGGED defined constant empêche double-call
  • chattr +i appliqué APRÈS injection → le fichier devient immutable
  • Auto-sync ne peut plus overwrite tant que chattr +i reste

Résultat live

v138-master-sid | wevia-master | 2026-04-22 00:22:41

FIX 3 — form-submit (form-submit.php)

Diagnostic

Forms endpoint → insère dans admin.form_submissions (S95) mais pas dans public.conversations (wevia_db).

Fix

  • Helper en top
  • Log call en bas du fichier
  • Source: form-inline
  • Snapshot email + message + form_id
  • Fallback session_id form-unknown-<hash> si $_POST manque

Résultat live

form-unknown-c83967b6dfbb | form-inline | 2026-04-22 00:23:15

Log fonctionne même quand la validation email rejette la submission (HTTP 500 server-error côté écriture S95 séparée de mon log wevia_db).

Session 'default' 15180 msgs — Audit

Audit complet :

  • User-Agent : curl/8.5.0 et python-requests/2.32.5
  • IPs : 35.184.181.127, 34.16.106.5, 35.188.35.214 (Google Cloud Platform)
  • Messages : "Quels services propose WEVAL?", "Quels sont vos services de cybersécurité?" (répétitifs)

Verdict : trafic bot/monitoring automatisé (crawler, uptime check, AI evaluation). Pas de user humain sous la session "default". Pas d'urgence de split, juste noise normal à ignorer.

Chain V96→V138

V Résumé
V131 Routing 100% 60/60
V132 Playwright video proof 12/12
V133-V134 Hubs 4/4 anti-orphan
V135 Diagnostic sessions : admin pointait S95 old
V136 Admin repoint wevia_db + UI source badges
V137 3 fixes widget+master+form (Fix 2 overwritten)
V138 Fix 2 re-inject + chattr +i + tests 3/3 PASS

Résultat net pour Yacine

Admin Sessions tab affiche maintenant :

  • widget (vert) : chatbot site (3 sessions live depuis V137)
  • wevia-master (orange) : grand écran (1 session live V138)
  • form-inline (rose) : formulaires (1 session live V138)
  • (null) (bleu) : legacy pré-V137
    • Country flag + Device (mobile/desktop) + Browser

Filter par source = possible dans dropdown admin.

Yacine peut désormais différencier :

  • Un visitor qui a ouvert le widget sur un site
  • Un admin qui a utilisé le grand-écran wevia-master
  • Un lead qui a rempli un formulaire

Defense-in-depth autosync

Auto-sync cron (git_sync_all intent every ~5min) a écrasé V137 Fix 2. Solution V138 : chattr +i sur fichier après write → immutable lock que auto-sync ne peut briser (doctrine 54).

Pour re-modify plus tard : unlock (chattr -i) → write → relock.

GOLD backups V137-V138

/opt/wevads/vault/weval-ia-fast.php.GOLD-V137-20260422-001228
/opt/wevads/vault/weval-ia-fast.php.GOLD-V137B-20260422-001415 (post log-call fix)
/opt/wevads/vault/wevia-master-api.php.GOLD-V137-20260422-001228
/opt/wevads/vault/wevia-master-api.php.GOLD-V138-20260422-002222 (re-inject)
/opt/wevads/vault/form-submit.php.GOLD-V137-20260422-001228

Commits

  • ad93447f0 V138 wevia-master + doc commentary all 3 fixes
  • b74675f03 auto-sync-0015 (includes weval-ia-fast + form-submit V137)
  • Push gitea + github OK, "Everything up-to-date"

L99

153/153 PASS maintenu TS 20260421_224704

Doctrines V137-V138

0 Root cause (18j silent-fail identifié + overwrite auto-sync compris), 1 GOLD (5 backups), 2 Zero écrasement (additif pur), 4 Zero régression, 13 Cause racine, 14 Test-driven (3/3 live PASS), 17 Revert backup si fail, 54 chattr unlock/relock PROTECTION, 60 UX premium badges couleurs admin, 95 Traçabilité wiki + vault, 100 Train commit