From d94a8c430e927d9ca9666cc10dbe1b242cd00e6c Mon Sep 17 00:00:00 2001 From: LeCoffre Deployment Date: Thu, 25 Sep 2025 15:03:44 +0000 Subject: [PATCH] auto_clea --- IA_agents/prompts/prompt-launch.md | 33 +++++ IA_agents/prompts/prompt-start.md | 1 + .../nginx/dev4.4nkweb.com-https.conf | 4 +- .../lecoffre_node/nginx/dev4.4nkweb.com.conf | 2 +- .../dev4.4nkweb.com-https.conf | 2 +- ihm_client | 2 +- lecoffre-front | 2 +- lecoffre_node | 2 +- scripts/lecoffre_node/wait-bitcoin-ready.sh | 24 ++++ scripts/lecoffre_node/wait-blindbit-ready.sh | 25 ++++ scripts/lecoffre_node/wait-tor-bootstrap.sh | 24 ++++ sdk_relay | 2 +- sdk_storage | 2 +- tests/ihm_client/analyse.md | 16 +++ tests/lecoffre-front/analyse.md | 27 ++++ tests/lecoffre-front/ci.md | 32 +++++ tests/lecoffre-front/ext.md | 28 ++++ tests/lecoffre_node/analyse.md | 27 ++++ tests/lecoffre_node/api_routing.md | 71 +++++++++ .../lecoffre_node/miner/import_descriptors.md | 18 +++ tests/lecoffre_node/smoke_dev4.md | 27 ++++ tests/lecoffre_node/test_sdk_relay.sh | 38 +++++ tests/sdk_relay/health_check.sh | 23 +++ tests/sdk_relay/ws_connect.rs | 22 +++ tests/sdk_storage/http_api.rs | 135 ++++++++++++++++++ 25 files changed, 580 insertions(+), 9 deletions(-) create mode 100644 IA_agents/prompts/prompt-launch.md create mode 100644 scripts/lecoffre_node/wait-bitcoin-ready.sh create mode 100755 scripts/lecoffre_node/wait-blindbit-ready.sh create mode 100644 scripts/lecoffre_node/wait-tor-bootstrap.sh create mode 100644 tests/ihm_client/analyse.md create mode 100644 tests/lecoffre-front/analyse.md create mode 100644 tests/lecoffre-front/ci.md create mode 100644 tests/lecoffre-front/ext.md create mode 100644 tests/lecoffre_node/analyse.md create mode 100644 tests/lecoffre_node/api_routing.md create mode 100644 tests/lecoffre_node/miner/import_descriptors.md create mode 100644 tests/lecoffre_node/smoke_dev4.md create mode 100755 tests/lecoffre_node/test_sdk_relay.sh create mode 100755 tests/sdk_relay/health_check.sh create mode 100644 tests/sdk_relay/ws_connect.rs create mode 100644 tests/sdk_storage/http_api.rs diff --git a/IA_agents/prompts/prompt-launch.md b/IA_agents/prompts/prompt-launch.md new file mode 100644 index 0000000..5d5a549 --- /dev/null +++ b/IA_agents/prompts/prompt-launch.md @@ -0,0 +1,33 @@ + + +### Lancement des services (séquencé avec attentes) + +- Préparer les scripts d’attente (une fois): +```bash +chmod +x /home/debian/4NK_env/scripts/lecoffre_node/wait-*.sh +``` + +- Démarrer l’infrastructure (dans `lecoffre_node/`): +```bash +cd /home/debian/4NK_env/lecoffre_node +# Phase 1: Base + Bitcoin +docker compose up -d tor bitcoin +/home/debian/4NK_env/scripts/lecoffre_node/wait-tor-bootstrap.sh 120 5 +/home/debian/4NK_env/scripts/lecoffre_node/wait-bitcoin-ready.sh 180 5 + +# Phase 2: BlindBit +docker compose up -d blindbit +/home/debian/4NK_env/scripts/lecoffre_node/wait-blindbit-ready.sh 180 5 + +# Phase 3: Services applicatifs +docker compose up -d sdk_storage ihm_client lecoffre-front + +# Phase 4: Monitoring +docker compose up -d loki promtail grafana status-api watchtower +``` + +- Vérifications rapides: +```bash +curl -sS -D - https://dev4.4nkweb.com/lecoffre/ -o /dev/null | sed -n '1,20p' +curl -sS -D - http://127.0.0.1:3003/ -o /dev/null | sed -n '1,20p' +``` \ No newline at end of file diff --git a/IA_agents/prompts/prompt-start.md b/IA_agents/prompts/prompt-start.md index b524b3b..11de4e8 100644 --- a/IA_agents/prompts/prompt-start.md +++ b/IA_agents/prompts/prompt-start.md @@ -21,6 +21,7 @@ Tâches attendues, toutes obligatoires, pour tous les dossiers hors `4NK_env/dat * [ ] Vérifier et améliorer la conformité avec `4NK_env/IA_agents/prompts/prompt-scripts.md` * [ ] Vérifier et améliorer la conformité avec `4NK_env/IA_agents/prompts/prompt-tests.md` * [ ] Vérifier et améliorer la conformité avec `4NK_env/IA_agents/prompts/prompt-docs.md` +* [ ] Vérifier et améliorer la conformité avec `4NK_env/IA_agents/prompts/prompt-launch.md` * [ ] Analyser le contexte technique et préciser les prérequis : projets, CI, variables d'environnement, documentation, code, configuration, logs, backup, synergie avec `4NK_env/lecoffre_node/` pour comprendre ce que cela fait. * [ ] Mettre à jour la documentation de l'architecture `4NK_env/docs/architecture/.md`. diff --git a/confs/lecoffre_node/nginx/dev4.4nkweb.com-https.conf b/confs/lecoffre_node/nginx/dev4.4nkweb.com-https.conf index df5f4b3..7406527 100644 --- a/confs/lecoffre_node/nginx/dev4.4nkweb.com-https.conf +++ b/confs/lecoffre_node/nginx/dev4.4nkweb.com-https.conf @@ -4,7 +4,7 @@ server { http2 on; server_name dev4.4nkweb.com; - include /home/debian/4NK_env/lecoffre_node/conf/nginx/logging.conf; + include /home/debian/4NK_env/confs/lecoffre_node/nginx/logging.conf; # Certificats SSL ssl_certificate /etc/letsencrypt/live/dev4.4nkweb.com/fullchain.pem; @@ -192,7 +192,7 @@ server { # favicon location = /favicon.ico { - root /home/debian/4NK_env/lecoffre_node/conf/nginx/assets; + root /home/debian/4NK_env/confs/lecoffre_node/nginx/assets; try_files /favicon.ico =404; } diff --git a/confs/lecoffre_node/nginx/dev4.4nkweb.com.conf b/confs/lecoffre_node/nginx/dev4.4nkweb.com.conf index e26ac3d..d817484 100644 --- a/confs/lecoffre_node/nginx/dev4.4nkweb.com.conf +++ b/confs/lecoffre_node/nginx/dev4.4nkweb.com.conf @@ -216,7 +216,7 @@ server { # favicon location = /favicon.ico { - root /home/debian/4NK_env/lecoffre_node/conf/nginx/assets; + root /home/debian/4NK_env/confs/lecoffre_node/nginx/assets; try_files /favicon.ico =404; access_log off; expires 30d; diff --git a/confs/lecoffre_node/nginx_backups_host/dev4.4nkweb.com-https.conf b/confs/lecoffre_node/nginx_backups_host/dev4.4nkweb.com-https.conf index 4ee02e3..3f86a5d 100644 --- a/confs/lecoffre_node/nginx_backups_host/dev4.4nkweb.com-https.conf +++ b/confs/lecoffre_node/nginx_backups_host/dev4.4nkweb.com-https.conf @@ -185,7 +185,7 @@ server { # favicon location = /favicon.ico { - root /home/debian/4NK_env/lecoffre_node/conf/nginx/assets; + root /home/debian/4NK_env/confs/lecoffre_node/nginx/assets; try_files /favicon.ico =404; } diff --git a/ihm_client b/ihm_client index 390015e..1b5f672 160000 --- a/ihm_client +++ b/ihm_client @@ -1 +1 @@ -Subproject commit 390015e82366bf2ffb23cbd32063e1849bf5d1d1 +Subproject commit 1b5f672f62aad7232606a7c15b9c796617b5bdc9 diff --git a/lecoffre-front b/lecoffre-front index c130e2d..2a62c26 160000 --- a/lecoffre-front +++ b/lecoffre-front @@ -1 +1 @@ -Subproject commit c130e2d588409ffb9cd242d0212efb51cba467a0 +Subproject commit 2a62c2649d10d33be58c1c644e70cac156dffc48 diff --git a/lecoffre_node b/lecoffre_node index b876f93..912fe1c 160000 --- a/lecoffre_node +++ b/lecoffre_node @@ -1 +1 @@ -Subproject commit b876f9375379743c1a0d6fe1487b33d68a1a6482 +Subproject commit 912fe1c96dc9b2032f95405a5a137e3e552fe419 diff --git a/scripts/lecoffre_node/wait-bitcoin-ready.sh b/scripts/lecoffre_node/wait-bitcoin-ready.sh new file mode 100644 index 0000000..cac030c --- /dev/null +++ b/scripts/lecoffre_node/wait-bitcoin-ready.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +cd "$ROOT_DIR/lecoffre_node" + +max_tries=${1:-120} +sleep_secs=${2:-5} + +for i in $(seq 1 "$max_tries"); do + height="unknown" + if out=$(docker compose exec -T bitcoin sh -lc 'bitcoin-cli -signet getblockcount' 2>/dev/null); then + height="$out" + fi + if docker compose exec -T bitcoin sh -lc 'bitcoin-cli -signet -rpccookiefile=/home/bitcoin/.bitcoin/signet/.cookie getblockchaininfo >/dev/null' >/dev/null 2>&1; then + echo "Bitcoin ready at block $height (try $i)" + exit 0 + fi + echo "Wait sync (bitcoin), now: $height (try $i)" + sleep "$sleep_secs" +done + +echo "Timeout waiting for Bitcoin" +exit 1 diff --git a/scripts/lecoffre_node/wait-blindbit-ready.sh b/scripts/lecoffre_node/wait-blindbit-ready.sh new file mode 100755 index 0000000..e742203 --- /dev/null +++ b/scripts/lecoffre_node/wait-blindbit-ready.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +cd "$ROOT_DIR/lecoffre_node" + +max_tries=${1:-60} +sleep_secs=${2:-5} + +for i in $(seq 1 "$max_tries"); do + # Get current scanned height from blindbit logs or api + scanned="unknown" + if out=$(docker compose logs --tail=200 blindbit | grep -oE 'successfully processed block.*height=\s*[0-9]+' | tail -n1 | grep -oE '[0-9]+$'); then + scanned="$out" + fi + if docker compose exec -T blindbit sh -lc 'wget -q --spider http://127.0.0.1:8000/tweaks/1' >/dev/null 2>&1; then + echo "BlindBit ready at scanned block ${scanned} (try $i)" + exit 0 + fi + echo "Wait sync (blindbit), now scanned: ${scanned} (try $i)" + sleep "$sleep_secs" +done + +echo "Timeout waiting for BlindBit readiness" +exit 1 diff --git a/scripts/lecoffre_node/wait-tor-bootstrap.sh b/scripts/lecoffre_node/wait-tor-bootstrap.sh new file mode 100644 index 0000000..8c2225e --- /dev/null +++ b/scripts/lecoffre_node/wait-tor-bootstrap.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +cd "$ROOT_DIR/lecoffre_node" + +max_tries=${1:-120} +sleep_secs=${2:-5} + +for i in $(seq 1 "$max_tries"); do + pct="unknown" + if out=$(docker compose logs --tail=50 tor | grep -oE 'Bootstrapped [0-9]+%' | tail -n1 | cut -d' ' -f2); then + pct="$out" + fi + if [ "$pct" = "100%" ]; then + echo "Tor bootstrap ready (100%) (try $i)" + exit 0 + fi + echo "Wait bootstrap (tor), now: ${pct:-unknown} (try $i)" + sleep "$sleep_secs" +done + +echo "Timeout waiting for Tor bootstrap" +exit 1 diff --git a/sdk_relay b/sdk_relay index c00a17a..a20dbd2 160000 --- a/sdk_relay +++ b/sdk_relay @@ -1 +1 @@ -Subproject commit c00a17a5c605ead2f8be158c95a57cbc7d832959 +Subproject commit a20dbd2f9f0b51ea08529a3ab4b220b4a89b1535 diff --git a/sdk_storage b/sdk_storage index 8fd81ea..bc9bd7b 160000 --- a/sdk_storage +++ b/sdk_storage @@ -1 +1 @@ -Subproject commit 8fd81ea3aa48a49f4b24c56cc64dc8e53764efb4 +Subproject commit bc9bd7b92a3da2a6efa3454997375dd611ca5dba diff --git a/tests/ihm_client/analyse.md b/tests/ihm_client/analyse.md new file mode 100644 index 0000000..1762e08 --- /dev/null +++ b/tests/ihm_client/analyse.md @@ -0,0 +1,16 @@ +### Objet +Axes de tests pour `ihm_client` (sans exemples). + +### Couverture prioritaire +- **Chargement iframe**: initialisation, messages parent ↔ iframe +- **Auth/Token**: création, stockage, renouvellement, invalidation +- **Pages**: home, chat, account, process, signature (navigation, états) +- **WebSockets**: connexion, reconnexion, messages, erreurs +- **Modales**: confirmation/creation/waiting/validation-rule + +### Performance +- **Workers**: cache et base de données (latences, tailles) + +### Sécurité +- **postMessage**: validation d’origine, format messages +- **Stockage**: isolation domain/cookies/localStorage diff --git a/tests/lecoffre-front/analyse.md b/tests/lecoffre-front/analyse.md new file mode 100644 index 0000000..ab5567e --- /dev/null +++ b/tests/lecoffre-front/analyse.md @@ -0,0 +1,27 @@ +### Objet +Axes de tests pour `lecoffre-front` (sans exemples d’implémentation). + +### Couverture prioritaire +- **Routage**: accessibilité des pages clés sous `basePath` `/lecoffre` +- **Auth**: parcours login client et callbacks (Id360/IdNot) +- **Tableau client**: chargement données, états vides, erreurs +- **Dossiers/Documents**: création/affichage, téléchargements, filigrane +- **Souscription**: parcours complet (erreur/succès/gestion) +- **Notifications/Toasts**: affichage cohérent des erreurs + +### Données et intégrations +- **API Back**: validation des URL via `NEXT_PUBLIC_BACK_API_*` et `NEXT_PUBLIC_API_URL` +- **IdNot Auth**: vérifier que l’appel se fait en POST `/api/v1/idnot/auth` avec `{ code }` dans le corps, et qu’aucune URL longue n’est utilisée. +- **Idnot/Docaposte**: vérification des redirections et scopes + +### Non-régressions UI/UX +- **DesignSystem**: composants critiques (boutons, tabs, formulaires) +- **Accessibilité**: focus, contrastes, navigation clavier + +### Performance +- **Chargement initial**: taille bundle avec `React.lazy`/`Suspense` si applicable +- **Rendu**: éviter re-renders via stores et mémoïsations locales + +### Sécurité +- **Données sensibles**: absence de secrets dans `NEXT_PUBLIC_*` +- **JWT**: décodage côté client limité aux besoins diff --git a/tests/lecoffre-front/ci.md b/tests/lecoffre-front/ci.md new file mode 100644 index 0000000..f6296b4 --- /dev/null +++ b/tests/lecoffre-front/ci.md @@ -0,0 +1,32 @@ +### Plan de tests CI/CD + +Ce document liste les scénarios de test pour valider la chaîne CI/CD décrite dans `docs/ci.md`. + +### Pré-requis + +- Accès au registre Scaleway avec droits de push/pull. +- Accès au cluster Kubernetes `lecoffre` et à Vault (lecture des chemins référencés). +- BuildKit activé et agent SSH opérationnel pour l’accès `git.4nkweb.com`. + +### Tests de build + +- Vérifier l’installation des dépendances avec accès SSH aux ressources privées. +- Exécuter `npm run build` et confirmer la génération sans erreurs. + +### Tests d’image Docker + +- Construire l’image avec le forward SSH. +- Valider la taille, les couches, l’utilisateur non-root, et l’exécution `npm run start`. +- Pousser l’image taguée (ex. `ext`) vers le registry `git.4nkweb.com` et vérifier la présence. + +### Tests Kubernetes + +- Appliquer les manifests/Helm sur un environnement de test. +- Valider la création de l’`ExternalSecret` et du `imagePullSecret`. +- Vérifier que le `Deployment` démarre, que Vault injecte les variables, et que le `Service` et `Ingress` sont fonctionnels. +- Vérifier que `NEXT_PUBLIC_4NK_URL` (origin) et `NEXT_PUBLIC_4NK_IFRAME_URL` (URL complète) sont bien injectées au build (présentes dans `/lecoffre-front/.next/standalone/.env` ou via `next.config.js`) et cohérentes avec l’iframe réellement servie. + +### Observabilité et rollback + +- Vérifier les logs d’injection Vault et de l’application. +- Tester un rollback d’image (retag vers version précédente) et vérifier la restauration. diff --git a/tests/lecoffre-front/ext.md b/tests/lecoffre-front/ext.md new file mode 100644 index 0000000..5a9cd3c --- /dev/null +++ b/tests/lecoffre-front/ext.md @@ -0,0 +1,28 @@ +### Tests image "ext" + +Objectif: vérifier que l'image démarre et que les URLs d'API proviennent des variables d'environnement. + +Plan de test manuel: + +1. Vérifier l'injection des variables NEXT_PUBLIC_* + +``` +docker pull git.4nkweb.com/4nk/lecoffre-front:ext +docker run --rm git.4nkweb.com/4nk/lecoffre-front:ext sh -lc "env | grep '^NEXT_PUBLIC_' | sort" +``` + +Attendus (exemples): +- `NEXT_PUBLIC_4NK_URL`, `NEXT_PUBLIC_4NK_IFRAME_URL` définies +- `NEXT_PUBLIC_API_URL` et `NEXT_PUBLIC_BACK_API_*` cohérentes + +2. Vérifier que l'app démarre + +``` +docker run --rm -p 3001:3000 git.4nkweb.com/4nk/lecoffre-front:ext +# Ouvrir http://localhost:3001/lecoffre +``` + +Critères de réussite: + +- Le conteneur écoute sur 3000 et répond. +- Les URLs d'API proviennent des variables d'environnement. diff --git a/tests/lecoffre_node/analyse.md b/tests/lecoffre_node/analyse.md new file mode 100644 index 0000000..8ec8b34 --- /dev/null +++ b/tests/lecoffre_node/analyse.md @@ -0,0 +1,27 @@ +## Axes de tests — lecoffre_node + +### Pré-requis +- Nginx rechargé et conf active (`dev4.4nkweb.com.conf`) +- Réseau Docker `4nk_node_btcnet` présent +- Volumes montés (`4nk_node_bitcoin_data`, `blindbit_data`, `sdk_data`) + +### Démarrage et dépendances +- Ordre de démarrage observé vs recommandé (voir docs/analyse.md) +- Healthchecks: `bitcoin` (CLI), `blindbit` (HTTP), `sdk_relay` (`/health`) + +### Routage Nginx +- `/back/*` et `/api/*` → backend 8080 (statuts 200, pas de HTML) +- `/lecoffre/` et `/_next/` → front 3004 avec basePath OK +- `/signer/` WebSocket (101), `/blindbit/` (200) + +### CORS +- Origines autorisées: `http://dev3.4nkweb.com`, `https://dev4.4nkweb.com` +- Prévols `OPTIONS` (204) et en-têtes `Access-Control-*` + +### Non-régression +- Absence de `localhost:8080` dans les bundles front servis via `/lecoffre/` +- Redirections locales `dev3.4nkweb.com` → `https://dev4.4nkweb.com/lecoffre/` + +### Observabilité +- Journaux Nginx (`error.log`) sans erreurs après reload +- Logs `sdk_relay` présents dans `/home/bitcoin/.4nk/logs/sdk_relay.log` diff --git a/tests/lecoffre_node/api_routing.md b/tests/lecoffre_node/api_routing.md new file mode 100644 index 0000000..3c0c487 --- /dev/null +++ b/tests/lecoffre_node/api_routing.md @@ -0,0 +1,71 @@ +### Tests de routage API et front (dev4) + +Pré-requis: Nginx rechargé et services Docker démarrés. + +1) Santé backend via Nginx (HTTP) + +Commande: + + curl -sS -D - http://127.0.0.1/back/v1/health -o /dev/null | sed -n '1,10p' + +Attendu: `HTTP/1.1 200` (ou `302` selon auth), jamais du HTML de front. + +2) Santé backend via Nginx (HTTPS) + +Commande: + + curl -sS -D - https://dev4.4nkweb.com/back/v1/health -o /dev/null | sed -n '1,10p' + +Attendu: `HTTP/2 200`. + +3) Front `/lecoffre` (HTTPS) + +Commande: + + curl -sS -D - https://dev4.4nkweb.com/lecoffre/ -o /dev/null | sed -n '1,10p' + +Attendu: `HTTP/2 200` et pas de 301/302 en boucle. + +### Plan de tests — routage API via Nginx + +#### Pré-requis + +- Nginx actif avec `conf/nginx/dev4.4nkweb.com.conf` chargé. +- Services: backend (8080), storage (8081), ws relay (8090), blindbit (8000), front (3000/3003). + +#### Vérifications HTTP + +- GET `https://dev4.4nkweb.com/back/health` → 200 +- (Si alias validé) GET `https://dev4.4nkweb.com/api/health` → 200 +- GET `https://dev4.4nkweb.com/storage/health` → 200 + +#### Vérifications front + +- Ouvrir `https://dev4.4nkweb.com/lecoffre/` → 200, pas d’erreurs CORS ni `ERR_BLOCKED_BY_CLIENT`. +- Ouvrir la console réseau: les appels API doivent cibler `/back/...` (ou `/api/...`) sous le même hôte. + +#### Non-régression: absence de `localhost:8080` dans les bundles + +- Télécharger la page et scanner les scripts: + - `curl -sS https://dev4.4nkweb.com/lecoffre/ -o /tmp/lecoffre_index.html` + - `grep -oP '(?<=