doctrines 153-158: rollback, marker-N, conditional, scheduled, D3-timeline, playwright-per-marker

This commit is contained in:
Yanis Mahboub
2026-04-23 23:54:01 +02:00
parent 8599e300a0
commit c20cbdbacc
6 changed files with 303 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
# DOCTRINE 153 - Rollback Pattern + GOLD restore
**Date**: 2026-04-23 23:55 CET
## 1. Contexte
WEVIA patche des HTML. Il faut pouvoir revenir en arriere en 1 commande.
## 2. Solution
### 2.1 Script `/opt/wevia-brain/scripts/wevia-rollback.sh`
Parametres env : `MARKER` et/ou `TARGET`.
- Si MARKER fourni : trouve la page qui contient le marker, puis le GOLD le plus recent lie a ce marker.
- Si TARGET fourni : rollback le plus recent GOLD de ce target.
- Cree un GOLD-OF-ROLLBACK avant de restaurer (rollback du rollback possible).
- Commit git auto + push 3-way.
### 2.2 Routes API
- `/api/wevia-autowire-trigger.php?action=list-gold` : liste tous les GOLDs.
- `/api/wevia-autowire-trigger.php?action=rollback&marker=<m>` : restaure.
### 2.3 Intents WEVIA
- `wevia_rollback_list` : triggers "list gold backups", "liste gold", etc.
- (TODO) `wevia_rollback_exec` avec marker en parametre.
## 3. Safety rules
- Chattr -i AVANT restore, +i APRES.
- Checksum hash_before + hash_after dans la reponse JSON.
- GOLD-OF-ROLLBACK preserve l etat courant avant rollback (replay possible).
- Commit git auto pour traçabilite.
## 4. Tests
- 27 GOLDs listes (audit 23/04 23:55).
- Restore non-execute (pour safety en prod), mais code en place + testable via API.
- Fichier `/var/www/html/proofs/wevia-e2e-marker-*/` contient screenshots de verification.
## 5. Audit
Chaque GOLD est identifie par nom :
`<page>.html.GOLD-<TS>-pre-<MARKER_SLUG>`
Exemple : `all-ia-hub.html.GOLD-20260423-234221-pre-WEVIA_AUDIT_LINK_MULTI_v1`
## 6. Reference
- Doctrine 148 (preset system) : GOLD cree automatiquement a chaque patch
- Doctrine 149 (audit trail) : le dashboard liste les markers, avec option rollback
- Doctrine 150 (multi-targets) : 1 commande genere N GOLDs, rollback peut toutes les restaurer

View File

@@ -0,0 +1,38 @@
# DOCTRINE 154 - Marker {N} per-target indexed
**Date**: 2026-04-23
## 1. Probleme
Un preset multi-targets avec marker unique crashe : les 2+ pages auraient le
meme marker → audit confondu, et rollback ambigu.
## 2. Solution
Dans le preset JSON, inclure `{N}` dans le marker :
```json
{
"marker": "WEVIA-ROLLBACK-LINK-P{N}-v1",
"targets": ["page1.html", "page2.html", "page3.html"]
}
```
L apply-preset-engine.py substitue `{N}` par l index 1-based a chaque target.
## 3. Exemples valides
- `WEVIA-AUDIT-LINK-P1-v1`, `WEVIA-AUDIT-LINK-P2-v1`, ...
- Permet un audit net par page
- Rollback peut cibler une page specifique
## 4. Tests (23/04 23:37)
Commits :
- `e6b1a07da` feat(rollback): marker N-indexed (target 1/2 WTP = P1)
- `157de181f` feat(rollback): marker N-indexed (target 2/2 cloudbot-social = P2)
## 5. Reference
- Doctrine 150 : multi-targets origine
- Doctrine 153 : rollback par marker

View File

@@ -0,0 +1,60 @@
# DOCTRINE 155 - Conditional presets (5 types)
**Date**: 2026-04-23
## 1. Idee
Preset peut contenir un champ `condition` qui doit etre vraie pour executer.
## 2. Types supportes
### 2.1 file_exists
```json
{"condition": {"type": "file_exists", "path": "/opt/my-file"}}
```
### 2.2 file_absent
```json
{"condition": {"type": "file_absent", "path": "/opt/my-file"}}
```
### 2.3 marker_absent
```json
{"condition": {"type": "marker_absent", "marker": "WEVIA-FOO-v1"}}
```
Passe si le marker n est dans AUCUNE page HTML.
### 2.4 http
```json
{"condition": {"type": "http", "url": "https://x.com", "expected_status": 200}}
```
### 2.5 env
```json
{"condition": {"type": "env", "name": "PRODUCTION"}}
```
## 3. Comportement
Si condition not met :
- `ok: false, err: condition_not_met`
- Exit code 0 (non fatal - condition eval = normal)
- Preset pas execute, pas de GOLD cree
## 4. Tests (23/04 23:38)
Preset `conditional-test` avec `marker_absent` :
- 1er call : pass=True (marker absent) → execute (commit `661c1c97f`)
- 2e call : pass=False (marker now present) → skip (exit clean)
## 5. Cas d usage
- Auto-repair cron : condition `marker_absent` pour re-patcher si un autre Claude a efface
- Feature flag : condition `env` pour activer seulement en PROD
- Dependency check : `file_exists` pour ne patcher que si la dep est la
- Health gate : `http` pour ne patcher que si le service upstream repond
## 6. Reference
- Doctrine 148 : preset origine
- Doctrine 156 : scheduled (souvent combine avec condition)

View File

@@ -0,0 +1,53 @@
# DOCTRINE 156 - Scheduled presets (cron injection)
**Date**: 2026-04-23
## 1. Idee
Preset peut avoir un `schedule.cron` pour s executer periodiquement via cron.
```json
{
"schedule": {"cron": "0 */6 * * *", "enabled": true, "comment": "every 6h"},
"target": "/var/www/html/foo.html",
...
}
```
## 2. Script `/opt/wevia-brain/scripts/schedule-preset.sh`
Actions env `SCHEDULE_ACTION` :
- `list` : liste les crons WEVIA actifs
- `install PRESET=<slug>` : cree `/etc/cron.d/wevia-preset-<slug>`
- `remove PRESET=<slug>` : supprime le cron
## 3. Routes API
- `/api/wevia-autowire-trigger.php?action=schedule-list`
- `/api/wevia-autowire-trigger.php?action=schedule-install&preset=<slug>`
- `/api/wevia-autowire-trigger.php?action=schedule-remove&preset=<slug>`
## 4. Intent WEVIA
- `wevia_schedule_list` : "list schedules", "wevia crons actifs"
- (TODO) `wevia_schedule_install`, `wevia_schedule_remove`
## 5. Cron file layout
```
/etc/cron.d/wevia-preset-<slug>
# WEVIA scheduled preset (doctrine 156)
# Preset: <slug>
# Schedule: 0 */6 * * *
0 */6 * * * root bash /opt/wevia-brain/scripts/apply-preset.sh <slug> > /var/log/wevia-schedule-<slug>.log 2>&1
```
## 6. Cas d usage
- Re-audit : cron toutes les heures pour remettre les markers en place si supprimes
- Periodic refresh : dashboard regeneration
- Nightly tests : Playwright E2E automatise tous les jours a 2h
## 7. Reference
- Doctrine 155 : conditional (combiner pour execution conditionnelle planifiee)

View File

@@ -0,0 +1,50 @@
# DOCTRINE 157 - D3.js Timeline dans dashboard Audit
**Date**: 2026-04-23
## 1. Idee
Visualisation chronologique des patches WEVIA dans le dashboard `/wevia-audit.html`.
## 2. Architecture
### 2.1 API enrichie
`/api/wevia-audit-api.php` retourne maintenant :
- `last_commit_iso` (ISO 8601 avec timezone)
- `doctrine` (extract du commit message via regex)
### 2.2 Dashboard section "0. Timeline"
- Import `<script src="https://d3js.org/d3.v7.min.js">`
- SVG time-scale horizontal (axe X format HH:MM)
- Circles avec jitter Y pour eviter overlap
- Couleur par doctrine (14 couleurs pre-definies pour D146-D158+)
- Tooltip hover : marker, fichier, doctrine, commit hash, message
- Legende doctrine en bas
### 2.3 Couleurs doctrines (palette)
| Doctrine | Color |
|---|---|
| 146 | `#10b981` (vert) |
| 147 | `#3b82f6` (bleu) |
| 148 | `#8b5cf6` (violet) |
| 149 | `#f59e0b` (orange) |
| 150 | `#ec4899` (rose) |
| 151 | `#06b6d4` (cyan) |
| 152 | `#ef4444` (rouge) |
| 153 | `#14b8a6` (teal) |
| 154 | `#a855f7` (magenta) |
| 155 | `#eab308` (jaune) |
| 156 | `#6366f1` (indigo) |
| 157 | `#f472b6` (pink) |
| 158 | `#22d3ee` (sky) |
## 3. Commits ref
- `bc2c70af1` feat(audit-dashboard-v3): D3.js timeline
## 4. Reference
- Doctrine 149 (audit dashboard origine)

View File

@@ -0,0 +1,49 @@
# DOCTRINE 158 - Playwright E2E per-marker
**Date**: 2026-04-23 23:55 CET
## 1. Idee
Pour CHAQUE marker WEVIA detecte dans l audit, lancer un test automatique :
- Goto la page URL
- Verifier marker dans le DOM (Playwright)
- Verifier marker dans le fichier source (grep)
- Screenshot full-page
- OK si soit file, soit DOM positive
## 2. Script `/opt/wevia-brain/scripts/wevia-e2e-per-marker.sh`
Flow :
1. GET /api/wevia-audit-api.php (liste markers)
2. Chromium headless, 1 context
3. Pour chaque marker :
- `open(file_path).read() in marker` → file check
- `page.goto(url, wait_until='networkidle')` → DOM check (retry 1x)
- Screenshot `{idx:02d}-{marker}.png`
4. Generate `index.html` + `e2e-results.json` dans `/proofs/wevia-e2e-marker-<TS>/`
## 3. Robustesse
- `networkidle` (pas `domcontentloaded`) pour pages avec JS dynamique
- Retry 1x si Page.content fail
- `ignore_https_errors=True` si cert issues
- Fallback file check : OK meme si DOM absent (pages gated / crash Playwright)
## 4. Tests reels (23/04 23:51)
9 markers testes :
- **9/9 overall OK** (file check fiable)
- 4/9 DOM OK (pages publiques)
- 5/9 DOM FAIL (pages gated OU Playwright timeout - non bloquant car file OK)
Preuves : `/proofs/wevia-e2e-marker-20260423-235151/index.html`
## 5. Intent WEVIA
- `wevia_e2e_markers` : triggers "wevia e2e markers", "test markers playwright", etc.
- Duree typique : 30-60s pour 9 markers (depend du reseau)
## 6. Reference
- Doctrine 149 : audit trail (source of truth markers)
- Doctrine 146 : Playwright wevia test initial