doctrines 153-158: rollback, marker-N, conditional, scheduled, D3-timeline, playwright-per-marker
This commit is contained in:
53
weval-ops/wiki/doctrine-153-rollback-pattern.md
Normal file
53
weval-ops/wiki/doctrine-153-rollback-pattern.md
Normal 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
|
||||
38
weval-ops/wiki/doctrine-154-marker-N-indexed.md
Normal file
38
weval-ops/wiki/doctrine-154-marker-N-indexed.md
Normal 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
|
||||
60
weval-ops/wiki/doctrine-155-conditional-presets.md
Normal file
60
weval-ops/wiki/doctrine-155-conditional-presets.md
Normal 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)
|
||||
53
weval-ops/wiki/doctrine-156-scheduled-presets.md
Normal file
53
weval-ops/wiki/doctrine-156-scheduled-presets.md
Normal 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)
|
||||
50
weval-ops/wiki/doctrine-157-d3-timeline-dashboard.md
Normal file
50
weval-ops/wiki/doctrine-157-d3-timeline-dashboard.md
Normal 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)
|
||||
49
weval-ops/wiki/doctrine-158-playwright-per-marker.md
Normal file
49
weval-ops/wiki/doctrine-158-playwright-per-marker.md
Normal 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
|
||||
Reference in New Issue
Block a user