---
title: "Archives Kimi Hub / Fusion / 3D + snapshot ZDASH sous zevent.vfg.lol"
subtitle: "Handoff 2026-09-05 : versions figées servies sous /archives/, CSP assouplie pour les APIs externes temps réel, procédure de redeploy sans casser la fleet."
date: 2026-09-05
time: "12:45"
author: VFG / Cursor
status: pub
tags: ["handoff", "zevent", "archives", "kimi", "zdash", "csp", "prod", "vps", "2026-09-05"]
---

## TL;DR

Après le go-live de `https://zevent.vfg.lol` (dashboard ZDASH live à la racine), la session a **figé en ligne** les livraisons Kimi et un snapshot de l’UI ZDASH, accessibles via un index :

| URL | Contenu |
|-----|---------|
| [https://zevent.vfg.lol/archives/](https://zevent.vfg.lol/archives/) | Index des versions figées |
| `/kimi-hub/` | Build `Kimi_Agent_Hub ZEvent temps réel` |
| `/kimi-fusion/` | Build `Kimi_Agent_Fusion Projet Sécurité` |
| `/kimi-3d/` | Build `Kimi_Agent_Projet VJ 3D POC` |
| `/zevent-dash/` | Snapshot UI ZDASH (APIs live du même serveur) |

Le dashboard **live** reste à `/`. Les archives appellent encore les APIs externes (zevent.fr, relais CORS, decapi, Twitch IRC, etc.) → CSP dédiée `ARCHIVE_CSP` avec `connect-src 'self' ws: wss: https:`.

Contexte ops du même jour (incident Caddy Lucien) déjà documenté :

→ [Incident Caddy — lucien.best offline (vhosts perdus) + prep zevent.vfg.lol](https://blog.vfg.lol/devblog/posts/handoffs-vps/2026-09-05-1225_incident-caddy-lucien-best-vhosts-perdus-prep-zevent.md.html)

---

## Pourquoi des archives sous le même host

Trois builds Kimi + un snapshot ZDASH existent dans le monorepo `Zevent2026`. Les servir sous le **même** `zevent.vfg.lol` évite :

- de multiplier les vhosts Caddy / ACME pour des artefacts de comparaison ;
- de perdre la trace « ce qui tournait » une fois la fusion produit avancée ;
- de devoir rouvrir un tunnel ou un static serveur ad hoc pour montrer Hub vs Fusion vs 3D vs ZDASH.

Le live (`public/index.html` + JS à la racine) continue d’utiliser la CSP stricte ZDASH (`connect-src 'self' ws: wss:` uniquement). Les builds archives, eux, parlent au monde extérieur → **deux CSP**, basculées par préfixe de chemin.

---

## Ce qui a changé dans le code

### Fichiers publics

```text
zevent-dash/public/
  archives/index.html     # hub de liens
  kimi-hub/               # dist figé
  kimi-fusion/
  kimi-3d/
  zevent-dash/            # copie UI snapshot (hors racine live)
```

L’index `/archives/` clarifie que le **dashboard live** reste à la racine et que les archives restent branchées sur les APIs temps réel externes.

### Serveur (`zevent-dash/server/server.js`)

1. **Index dossiers** — un `GET /kimi-hub/` (trailing slash) résout `…/kimi-hub/index.html` via `stat` + `isDirectory()`, sinon 404.
2. **`ARCHIVE_PREFIXES`** — `/kimi-hub`, `/kimi-fusion`, `/kimi-3d`, `/zevent-dash`, `/archives`.
3. **`ARCHIVE_CSP`** — notamment :
   - `connect-src 'self' ws: wss: https:` (poll zevent.fr, allorigins/jina, decapi, tmi, evenmorestats…) ;
   - `script-src` avec `'unsafe-inline'` (builds Vite inlinés) ;
   - `worker-src` / `media-src` pour le POC 3D.

La CSP live de la racine **n’est pas assouplie** : seuls les préfixes archives passent par `ARCHIVE_CSP`.

---

## Procédure de deploy (rejouable)

Ops : `debian@51.77.244.222` (sudo NOPASSWD). Identity locale : `~/.ssh/id_ed25519`.

Prérequis : stack ZDASH déjà up (`fg-zevent`, `:5200`, vhost `zevent.caddy`) — voir article incident § B.

### 1. Sync code + builds archives

Depuis le poste FG (`D:\Zevent2026\zevent-dash`) :

```bash
rsync -az --exclude node_modules --exclude data --exclude .env \
  ./ debian@51.77.244.222:/opt/vfg-fleet/repo/zevent-dash/
```

S’assurer que `public/{archives,kimi-hub,kimi-fusion,kimi-3d,zevent-dash}/` sont bien dans le tarball / rsync.

### 2. Rebuild image + recreate container

```bash
ssh debian@51.77.244.222 \
  "sudo docker build -t fg-zevent:latest /opt/vfg-fleet/repo/zevent-dash"

# Recreate UNIQUEMENT le service zevent — jamais compose --remove-orphans
# sur un seul fichier YAML (risque fleet).
ssh debian@51.77.244.222 \
  "cd /opt/vfg-fleet && sudo docker compose -f compose/t3-zevent.yml up -d --force-recreate"
```

Caddy n’a **pas** besoin d’être touché si `zevent.vfg.lol` reverse déjà vers `:5200` : les nouveaux chemins sont du static Node.

### 3. Smoke

```bash
for u in \
  https://zevent.vfg.lol/ \
  https://zevent.vfg.lol/archives/ \
  https://zevent.vfg.lol/kimi-hub/ \
  https://zevent.vfg.lol/kimi-fusion/ \
  https://zevent.vfg.lol/kimi-3d/ \
  https://zevent.vfg.lol/zevent-dash/ \
  https://zevent.vfg.lol/healthz
do
  curl -sS -o /dev/null -w "%{http_code} $u\n" "$u"
done
```

Attendu : **200** partout. Contrôle navigateur optionnel : Network → pas de blocage CSP sur `connect` vers `https://zevent.fr` / relais depuis une page archive.

### 4. Ne pas casser

| Anti-pattern | Pourquoi |
|--------------|----------|
| Assouplir la CSP de la **racine** live | Surface d’attaque inutile pour ZDASH |
| `docker compose … --remove-orphans` avec seulement `t3-zevent.yml` | Peut cueillir le reste de la fleet |
| `systemctl reload caddy` (admin off) | Échec trompeur — voir [article Lucien](https://blog.vfg.lol/devblog/posts/handoffs-vps/2026-09-05-1225_incident-caddy-lucien-best-vhosts-perdus-prep-zevent.md.html) |
| Committer `.env` / `ADMIN_TOKEN` | Secrets hors git |

---

## Cartographie rapide repo ↔ URL

| Source locale (indicatif) | URL prod |
|---------------------------|----------|
| `Kimi_Agent_Hub…/dist` (ou copie sync) | `/kimi-hub/` |
| `Kimi_Agent_Fusion…/app/dist` | `/kimi-fusion/` |
| `Kimi_Agent_Projet VJ 3D POC/dist` | `/kimi-3d/` |
| Copie figée `zevent-dash/public/{js,index…}` | `/zevent-dash/` |
| Live courant | `/` |

Canon serveur : `D:\Zevent2026\zevent-dash` → VPS `/opt/vfg-fleet/repo/zevent-dash`.

---

## État attendu post-session

| Check | Attendu |
|-------|---------|
| `https://zevent.vfg.lol/` | 200 — live ZDASH |
| `https://zevent.vfg.lol/archives/` | 200 — index |
| Quatre sous-chemins archives | 200 |
| `https://lucien.best/` | 200 — non régressé (fix Caddy du matin) |
| CSP HTML archive | header `Content-Security-Policy` avec `connect-src … https:` |
| CSP HTML racine | `connect-src 'self' ws: wss:` (strict) |

---

## Liens utiles

- Article lié (même jour) : [incident Caddy lucien.best + prep zevent](https://blog.vfg.lol/devblog/posts/handoffs-vps/2026-09-05-1225_incident-caddy-lucien-best-vhosts-perdus-prep-zevent.md.html)
- Live : [zevent.vfg.lol](https://zevent.vfg.lol/)
- Archives : [zevent.vfg.lol/archives/](https://zevent.vfg.lol/archives/)
- Runbook : `Zevent2026/zevent-dash/README.md`
- Code CSP : `zevent-dash/server/server.js` (`ARCHIVE_CSP`, `ARCHIVE_PREFIXES`)