ci(lint,releases): add markdownlint job; tag-trigger release via Gitea API; docs: config Gitea secrets and lint policy

This commit is contained in:
Nicolas Cantu 2025-08-27 22:33:56 +02:00
parent 93b42c9a24
commit be6c9c1745
11 changed files with 265 additions and 60 deletions

View File

@ -0,0 +1,9 @@
---
description:
globs:
alwaysApply: true
---
# Lint
respecter strictement les règles de lint du markdown

View File

@ -40,11 +40,13 @@ Si applicable, ajoutez une capture d'écran pour expliquer votre problème.
## 📋 Configuration ## 📋 Configuration
### Services Actifs ### Services Actifs
```bash ```bash
docker ps docker ps
``` ```
### Variables d'Environnement ### Variables d'Environnement
```bash ```bash
# Bitcoin Core # Bitcoin Core
BITCOIN_NETWORK=signet BITCOIN_NETWORK=signet
@ -60,17 +62,20 @@ SDK_RELAY_PORTS=8090-8095
## 📝 Logs ## 📝 Logs
### Logs Pertinents ### Logs Pertinents
```
```txt
Logs pertinents ici Logs pertinents ici
``` ```
### Logs d'Erreur ### Logs d'Erreur
```
```txt
Logs d'erreur ici Logs d'erreur ici
``` ```
### Logs de Debug ### Logs de Debug
```
```txt
Logs de debug ici (si RUST_LOG=debug) Logs de debug ici (si RUST_LOG=debug)
``` ```

View File

@ -3,6 +3,8 @@ name: CI - 4NK Node
on: on:
push: push:
branches: [ main, develop ] branches: [ main, develop ]
tags:
- 'v*'
pull_request: pull_request:
branches: [ main, develop ] branches: [ main, develop ]
@ -238,6 +240,17 @@ jobs:
echo "Checking links in $file" echo "Checking links in $file"
done done
markdownlint:
name: Markdown Lint
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Run markdownlint
run: |
npm --version || (curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt-get install -y nodejs)
npx -y markdownlint-cli@0.42.0 "**/*.md" --ignore "archive/**"
- name: Check documentation structure - name: Check documentation structure
run: | run: |
# Vérifier la présence des fichiers de documentation essentiels # Vérifier la présence des fichiers de documentation essentiels
@ -358,7 +371,7 @@ jobs:
release-guard: release-guard:
name: Release Guard name: Release Guard
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [code-quality, unit-tests, documentation-tests, security-audit, deployment-checks, bash-required] needs: [code-quality, unit-tests, documentation-tests, markdownlint, security-audit, deployment-checks, bash-required]
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v3 uses: actions/checkout@v3
@ -386,6 +399,36 @@ jobs:
echo "No guard script (ok)" echo "No guard script (ok)"
fi fi
release-create:
name: Create Release (Gitea API)
runs-on: ubuntu-latest
needs: [release-guard]
if: startsWith(github.ref, 'refs/tags/')
env:
RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }}
GITEA_BASE_URL: ${{ vars.GITEA_BASE_URL }}
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Validate token and publish release
run: |
set -e
if [ -z "${RELEASE_TOKEN}" ]; then
echo "RELEASE_TOKEN secret is missing" >&2; exit 1; fi
if [ -z "${GITEA_BASE_URL}" ]; then
GITEA_BASE_URL="https://git.4nkweb.com"; fi
TAG="${GITHUB_REF##*/}"
REPO="${GITHUB_REPOSITORY}"
OWNER="${REPO%%/*}"
NAME="${REPO##*/}"
echo "Publishing release ${TAG} to ${GITEA_BASE_URL}/${OWNER}/${NAME}"
curl -sSf -X POST \
-H "Authorization: token ${RELEASE_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"tag_name\":\"${TAG}\",\"name\":\"${TAG}\",\"draft\":false,\"prerelease\":false}" \
"${GITEA_BASE_URL}/api/v1/repos/${OWNER}/${NAME}/releases" >/dev/null
echo "Release created"
# Job de tests de performance # Job de tests de performance
performance-tests: performance-tests:
name: Performance Tests name: Performance Tests

11
.markdownlint.json Normal file
View File

@ -0,0 +1,11 @@
{
"MD013": {
"line_length": 200,
"code_blocks": false,
"tables": false,
"headings": false
},
"MD024": {
"siblings_only": true
}
}

168
AGENTS.md
View File

@ -1,6 +1,7 @@
# AGENTS.md # AGENTS.md
## Table des matières ## Table des matières
- [Introduction](#introduction) - [Introduction](#introduction)
- [Principes communs](#principes-communs) - [Principes communs](#principes-communs)
- [Agents fondamentaux](#agents-fondamentaux) - [Agents fondamentaux](#agents-fondamentaux)
@ -16,6 +17,7 @@
--- ---
## Introduction ## Introduction
Ce document définit les agents, leurs rôles et leurs responsabilités dans le projet `4NK/4NK_node` et, par extension, tout dépôt dérivé de `4NK_project_template`. Ce document définit les agents, leurs rôles et leurs responsabilités dans le projet `4NK/4NK_node` et, par extension, tout dépôt dérivé de `4NK_project_template`.
Il impose une coordination stricte entre code, documentation, tests, dépendances, CI/CD, synchronisation de template et gouvernance open source. Il impose une coordination stricte entre code, documentation, tests, dépendances, CI/CD, synchronisation de template et gouvernance open source.
Les règles opérationnelles détaillées sont précisées dans `.cursor/rules/` (notamment `41-ssh-automation.mdc` et `42-template-sync.mdc`). Les règles opérationnelles détaillées sont précisées dans `.cursor/rules/` (notamment `41-ssh-automation.mdc` et `42-template-sync.mdc`).
@ -23,35 +25,42 @@ Les règles opérationnelles détaillées sont précisées dans `.cursor/rules/`
--- ---
## Principes communs ## Principes communs
- Langue exclusive : français. - Langue exclusive : français.
- Pas dexemples de code applicatif injectés dans la base. - Pas dexemples de code applicatif injectés dans la base.
- Toute contribution doit contenir une introduction et/ou une conclusion. - Toute contribution doit contenir une introduction et/ou une conclusion.
- Interdiction de secrets en clair dans le dépôt. - Interdiction de secrets en clair dans le dépôt.
- Confirmation nécessaire avant `push` et `tag`. - Confirmation nécessaire avant `push` et `tag`.
- Toute modification impactant des éléments normatifs doit mettre à jour la documentation et le changelog. - Toute modification impactant des éléments normatifs doit mettre à jour la documentation et le changelog.
- Le flux de publication applique un garde de release (tests/doc/build/alignement version/changelog/tag, latest vs wip). - Le flux de publication applique un garde de release (tests/doc/build/alignement version/changelog/tag, latest vs wip).
--- ---
## Agents fondamentaux ## Agents fondamentaux
### Agent Fondation (Responsable) ### Agent Fondation (Responsable)
**Missions**
#### Missions
- Garantir la conformité éditoriale : français, pas dexemples applicatifs, introduction/conclusion. - Garantir la conformité éditoriale : français, pas dexemples applicatifs, introduction/conclusion.
- Vérifier la cohérence terminologique. - Vérifier la cohérence terminologique.
**Artefacts** #### Artefacts
- Tous fichiers. - Tous fichiers.
--- ---
### Agent Structure (Responsable) ### Agent Structure (Responsable)
**Missions**
#### Missions
- Maintenir larborescence canonique (incluant `.cursor/`, `.gitea/`, `scripts/`, `docs/SSH_UPDATE.md`). - Maintenir larborescence canonique (incluant `.cursor/`, `.gitea/`, `scripts/`, `docs/SSH_UPDATE.md`).
- Archiver le contenu obsolète dans `archive/` avec métadonnées. - Archiver le contenu obsolète dans `archive/` avec métadonnées.
- Interdire toute suppression non tracée. - Interdire toute suppression non tracée.
**Artefacts** #### Artefacts
- `archive/`, `docs/**`, `tests/**`, `.cursor/**`, `.gitea/**`, `scripts/**`, `CHANGELOG.md`. - `archive/`, `docs/**`, `tests/**`, `.cursor/**`, `.gitea/**`, `scripts/**`, `CHANGELOG.md`.
--- ---
@ -59,33 +68,42 @@ Les règles opérationnelles détaillées sont précisées dans `.cursor/rules/`
## Agents spécialisés documentation ## Agents spécialisés documentation
### Agent Documentation (Responsable) ### Agent Documentation (Responsable)
**Missions**
#### Missions
- Mettre à jour `docs/**` selon limpact des changements. - Mettre à jour `docs/**` selon limpact des changements.
- Tenir `docs/INDEX.md` comme table des matières centrale. - Tenir `docs/INDEX.md` comme table des matières centrale.
- Produire des REX techniques dans `archive/` en cas dinvestigations multiples. - Produire des REX techniques dans `archive/` en cas dinvestigations multiples.
**Artefacts** #### Artefacts
- `docs/**`, `README.md`, `archive/**`. - `docs/**`, `README.md`, `archive/**`.
--- ---
### Agent Données CSV (Responsable) ### Agent Données CSV (Responsable)
**Missions**
#### Missions
- Traiter les CSV comme source des modèles de données (en-têtes multi-lignes inclus). - Traiter les CSV comme source des modèles de données (en-têtes multi-lignes inclus).
- Exiger une définition complète de toutes les colonnes. - Exiger une définition complète de toutes les colonnes.
- Corriger et documenter les incohérences de types. - Corriger et documenter les incohérences de types.
**Artefacts** #### Artefacts
- `docs/API.md`, `docs/ARCHITECTURE.md`, `docs/USAGE.md`. - `docs/API.md`, `docs/ARCHITECTURE.md`, `docs/USAGE.md`.
--- ---
### Agent Documents bureautiques (Consulté) ### Agent Documents bureautiques (Consulté)
**Missions**
#### Missions
- Lire `.docx` via `docx2txt`; proposer des alternatives en cas déchec. - Lire `.docx` via `docx2txt`; proposer des alternatives en cas déchec.
- Documenter les imports dans `docs/INDEX.md`. - Documenter les imports dans `docs/INDEX.md`.
**Artefacts** #### Artefacts
- `docs/**`, `archive/**`. - `docs/**`, `archive/**`.
--- ---
@ -93,22 +111,28 @@ Les règles opérationnelles détaillées sont précisées dans `.cursor/rules/`
## Agents spécialisés tests ## Agents spécialisés tests
### Agent Tests (Responsable) ### Agent Tests (Responsable)
**Missions**
#### Missions
- Couvrir `unit`, `integration`, `connectivity`, `performance`, `external`. - Couvrir `unit`, `integration`, `connectivity`, `performance`, `external`.
- Gérer `tests/logs` et `tests/reports`. - Gérer `tests/logs` et `tests/reports`.
- Exiger des tests verts avant commit. - Exiger des tests verts avant commit.
**Artefacts** #### Artefacts
- `tests/**`, `docs/TESTING.md`. - `tests/**`, `docs/TESTING.md`.
--- ---
### Agent Performance (Consulté) ### Agent Performance (Consulté)
**Missions**
#### Missions
- Réaliser des benchmarks reproductibles. - Réaliser des benchmarks reproductibles.
- Valider limpact performance avant fusion. - Valider limpact performance avant fusion.
**Artefacts** #### Artefacts
- `tests/performance/`, `tests/reports/`, `docs/TESTING.md`. - `tests/performance/`, `tests/reports/`, `docs/TESTING.md`.
--- ---
@ -116,55 +140,70 @@ Les règles opérationnelles détaillées sont précisées dans `.cursor/rules/`
## Agents techniques ## Agents techniques
### Agent Qualité technique (Responsable) ### Agent Qualité technique (Responsable)
**Missions**
#### Missions
- Définir et faire respecter les standards de qualité: lint, formatage, conventions de code, revues. - Définir et faire respecter les standards de qualité: lint, formatage, conventions de code, revues.
- Superviser lanalyse statique (types, duplication, complexité, sécurité basique) et corriger les écarts. - Superviser lanalyse statique (types, duplication, complexité, sécurité basique) et corriger les écarts.
- Assurer lexécution automatique des contrôles qualité dans la CI et bloquer en cas déchec. - Assurer lexécution automatique des contrôles qualité dans la CI et bloquer en cas déchec.
**Artefacts** #### Artefacts
- `.gitea/workflows/ci.yml` (jobs de lint/format/type-check), `CHANGELOG.md`, `docs/ARCHITECTURE.md` (section standards). - `.gitea/workflows/ci.yml` (jobs de lint/format/type-check), `CHANGELOG.md`, `docs/ARCHITECTURE.md` (section standards).
--- ---
### Agent Dépendances (Responsable) ### Agent Dépendances (Responsable)
**Missions**
#### Missions
- Ajouter les dépendances manquantes lorsque justifié. - Ajouter les dépendances manquantes lorsque justifié.
- Vérifier les dernières versions stables. - Vérifier les dernières versions stables.
- Documenter les impacts dans `ARCHITECTURE.md`, `CONFIGURATION.md`, `CHANGELOG.md`. - Documenter les impacts dans `ARCHITECTURE.md`, `CONFIGURATION.md`, `CHANGELOG.md`.
**Artefacts** #### Artefacts
- `docs/ARCHITECTURE.md`, `docs/CONFIGURATION.md`, `CHANGELOG.md`. - `docs/ARCHITECTURE.md`, `docs/CONFIGURATION.md`, `CHANGELOG.md`.
--- ---
### Agent Compilation (Responsable) ### Agent Compilation (Responsable)
**Missions**
#### Missions
- Compiler très régulièrement et aux étapes critiques. - Compiler très régulièrement et aux étapes critiques.
- Bloquer toute progression en cas derreurs de build/runtime. - Bloquer toute progression en cas derreurs de build/runtime.
**Artefacts** #### Artefacts
- Artefacts de build, scripts doutillage. - Artefacts de build, scripts doutillage.
--- ---
### Agent Résolution (Responsable) ### Agent Résolution (Responsable)
**Missions**
#### Missions
- Conduire la boucle de diagnostic complète : reproduction minimale, logs, bissection, hypothèses, tests ciblés, correctif, non-régression. - Conduire la boucle de diagnostic complète : reproduction minimale, logs, bissection, hypothèses, tests ciblés, correctif, non-régression.
- Produire un REX quand plusieurs hypothèses ont été testées. - Produire un REX quand plusieurs hypothèses ont été testées.
**Artefacts** #### Artefacts
- `tests/**`, `archive/**` - `tests/**`, `archive/**`
--- ---
### Agent SSH & scripts (Responsable) ### Agent SSH & scripts (Responsable)
**Missions**
#### Missions
- Garantir la présence et lusage correct de `scripts/auto-ssh-push.sh`, `scripts/init-ssh-env.sh`, `scripts/setup-ssh-ci.sh`. - Garantir la présence et lusage correct de `scripts/auto-ssh-push.sh`, `scripts/init-ssh-env.sh`, `scripts/setup-ssh-ci.sh`.
- Assurer permissions dexécution, idempotence, journalisation non sensible, gestion derreurs robuste. - Assurer permissions dexécution, idempotence, journalisation non sensible, gestion derreurs robuste.
- Interdire secrets en clair, gérer via secrets CI et variables denvironnement. - Interdire secrets en clair, gérer via secrets CI et variables denvironnement.
- Exiger la mise à jour de `docs/SSH_UPDATE.md` à toute évolution des scripts ou des flux SSH. - Exiger la mise à jour de `docs/SSH_UPDATE.md` à toute évolution des scripts ou des flux SSH.
**Artefacts** #### Artefacts
- `scripts/**`, `.gitea/workflows/ci.yml`, `docs/SSH_UPDATE.md`, `docs/CONFIGURATION.md`, `CHANGELOG.md`. - `scripts/**`, `.gitea/workflows/ci.yml`, `docs/SSH_UPDATE.md`, `docs/CONFIGURATION.md`, `CHANGELOG.md`.
--- ---
@ -172,12 +211,15 @@ Les règles opérationnelles détaillées sont précisées dans `.cursor/rules/`
## Agents frontend ## Agents frontend
### Agent Frontend (Responsable) ### Agent Frontend (Responsable)
**Missions**
#### Missions
- Mettre en place `React.lazy`/`Suspense` (code splitting). - Mettre en place `React.lazy`/`Suspense` (code splitting).
- Centraliser létat (Redux ou Context API). - Centraliser létat (Redux ou Context API).
- Abstraire les services de données. - Abstraire les services de données.
**Artefacts** #### Artefacts
- `docs/ARCHITECTURE.md`, `docs/TESTING.md`. - `docs/ARCHITECTURE.md`, `docs/TESTING.md`.
--- ---
@ -185,81 +227,102 @@ Les règles opérationnelles détaillées sont précisées dans `.cursor/rules/`
## Agents open source et CI ## Agents open source et CI
### Agent Open Source (Responsable) ### Agent Open Source (Responsable)
**Missions**
#### Missions
- Maintenir : `LICENSE`, `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, `docs/OPEN_SOURCE_CHECKLIST.md`. - Maintenir : `LICENSE`, `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, `docs/OPEN_SOURCE_CHECKLIST.md`.
- Vérifier lalignement continu avec `4NK_node`. - Vérifier lalignement continu avec `4NK_node`.
**Artefacts** #### Artefacts
- Fichiers de gouvernance cités ci-dessus. - Fichiers de gouvernance cités ci-dessus.
--- ---
### Agent Gitea (Responsable) ### Agent Gitea (Responsable)
**Missions**
#### Missions
- Garantir `.gitea/ISSUE_TEMPLATE/*`, `PULL_REQUEST_TEMPLATE.md`, `.gitea/workflows/ci.yml`. - Garantir `.gitea/ISSUE_TEMPLATE/*`, `PULL_REQUEST_TEMPLATE.md`, `.gitea/workflows/ci.yml`.
- Documenter la configuration distante dans `docs/GITEA_SETUP.md`. - Documenter la configuration distante dans `docs/GITEA_SETUP.md`.
- Déclencher les étapes CI pertinentes (tests, lint, sécurité, vérifs `scripts/`). - Déclencher les étapes CI pertinentes (tests, lint, sécurité, vérifs `scripts/`).
**Artefacts** #### Artefacts
- `.gitea/**`, `docs/GITEA_SETUP.md`. - `.gitea/**`, `docs/GITEA_SETUP.md`.
--- ---
### Agent Versionnage (Responsable) ### Agent Versionnage (Responsable)
**Missions**
#### Missions
- Tenir `CHANGELOG.md` comme source unique de vérité. - Tenir `CHANGELOG.md` comme source unique de vérité.
- Proposer un bump sémantique justifié. - Proposer un bump sémantique justifié.
- Demander confirmation avant push et tag. - Demander confirmation avant push et tag.
- Orchestrer le `release-guard` (CI + scripts) et consigner latest vs wip. - Orchestrer le `release-guard` (CI + scripts) et consigner latest vs wip.
#### Artefacts
**Artefacts**
- `CHANGELOG.md`, `docs/RELEASE_PLAN.md`, `docs/ROADMAP.md`. - `CHANGELOG.md`, `docs/RELEASE_PLAN.md`, `docs/ROADMAP.md`.
--- ---
### Agent Sécurité (Responsable) ### Agent Sécurité (Responsable)
**Missions**
#### Missions
- Assurer une vigilance continue sécurité sur le code, la config et la CI. - Assurer une vigilance continue sécurité sur le code, la config et la CI.
- Orchestrer laudit de sécurité automatisé: `scripts/security/audit.sh` (cargo audit, npm audit, scan secrets). - Orchestrer laudit de sécurité automatisé: `scripts/security/audit.sh` (cargo audit, npm audit, scan secrets).
- Interdire lintroduction de secrets en clair et exiger la rotation des secrets CI. - Interdire lintroduction de secrets en clair et exiger la rotation des secrets CI.
- Valider les permissions sensibles (clés, cookies, conf) et la non-exposition dendpoints privés. - Valider les permissions sensibles (clés, cookies, conf) et la non-exposition dendpoints privés.
- Bloquer toute release si laudit de sécurité échoue (intégré au `release-guard`). - Bloquer toute release si laudit de sécurité échoue (intégré au `release-guard`).
**Artefacts** #### Artefacts
- `scripts/security/audit.sh`, `.gitea/workflows/ci.yml` (job `security-audit`), `docs/SECURITY_AUDIT.md`, `docs/CONFIGURATION.md`. - `scripts/security/audit.sh`, `.gitea/workflows/ci.yml` (job `security-audit`), `docs/SECURITY_AUDIT.md`, `docs/CONFIGURATION.md`.
--- ---
### Agent Déploiement (Responsable) ### Agent Déploiement (Responsable)
**Missions**
#### Missions
- Définir et documenter la stratégie de déploiement (environnements, prérequis, secrets, rollbacks). - Définir et documenter la stratégie de déploiement (environnements, prérequis, secrets, rollbacks).
- Vérifier la présence et la cohérence des artefacts de déploiement et des variables denvironnement requises. - Vérifier la présence et la cohérence des artefacts de déploiement et des variables denvironnement requises.
- Intégrer des contrôles CI « deployment-checks » avant toute release; coordonner avec `release-guard`. - Intégrer des contrôles CI « deployment-checks » avant toute release; coordonner avec `release-guard`.
**Artefacts** #### Artefacts
- `docs/DEPLOYMENT.md`, `.gitea/workflows/ci.yml` (job `deployment-checks`), `CHANGELOG.md`, `docs/RELEASE_PLAN.md`. - `docs/DEPLOYMENT.md`, `.gitea/workflows/ci.yml` (job `deployment-checks`), `CHANGELOG.md`, `docs/RELEASE_PLAN.md`.
--- ---
### Agent Gouvernance du Template (Accountable) ### Agent Gouvernance du Template (Accountable)
**Missions**
#### Missions
- Garantir la cohérence densemble du template (règles Cursor, CI, scripts, docs). - Garantir la cohérence densemble du template (règles Cursor, CI, scripts, docs).
- Examiner les issues « Template Feedback », arbitrer et prioriser. - Examiner les issues « Template Feedback », arbitrer et prioriser.
- Orchestrer la montée de version du template (`TEMPLATE_VERSION`) et le `CHANGELOG.md`. - Orchestrer la montée de version du template (`TEMPLATE_VERSION`) et le `CHANGELOG.md`.
- Communiquer les changements aux projets consommateurs. - Communiquer les changements aux projets consommateurs.
**Artefacts** #### Artefacts
- `.cursor/rules/**`, `.gitea_template/**`, `docs/TEMPLATE_*`, `TEMPLATE_VERSION`, `CHANGELOG.md`. - `.cursor/rules/**`, `.gitea_template/**`, `docs/TEMPLATE_*`, `TEMPLATE_VERSION`, `CHANGELOG.md`.
--- ---
### Agent Adaptation Projet (Responsable) ### Agent Adaptation Projet (Responsable)
**Missions**
#### Missions
- Accompagner ladaptation locale du template (CI, docs, `AGENTS.md`). - Accompagner ladaptation locale du template (CI, docs, `AGENTS.md`).
- Sassurer que `security-audit` et `release-guard` ne sont pas retirés. - Sassurer que `security-audit` et `release-guard` ne sont pas retirés.
- Remonter en feedback toute amélioration générique. - Remonter en feedback toute amélioration générique.
**Artefacts** #### Artefacts
- `.gitea/workflows/ci.yml`, `docs/INDEX.md`, `docs/SECURITY_AUDIT.md`, `AGENTS.md`, `LOCAL_OVERRIDES.yml` (si utilisé). - `.gitea/workflows/ci.yml`, `docs/INDEX.md`, `docs/SECURITY_AUDIT.md`, `AGENTS.md`, `LOCAL_OVERRIDES.yml` (si utilisé).
--- ---
@ -267,32 +330,40 @@ Les règles opérationnelles détaillées sont précisées dans `.cursor/rules/`
## Agents de synchronisation et dérogations ## Agents de synchronisation et dérogations
### Agent Synchronisation de template (Accountable) ### Agent Synchronisation de template (Accountable)
**Références**
#### Références
- `.4nk-sync.yml` (manifeste), `TEMPLATE_VERSION` (pointeur), `.gitea/workflows/template-sync.yml` (CI dédiée). - `.4nk-sync.yml` (manifeste), `TEMPLATE_VERSION` (pointeur), `.gitea/workflows/template-sync.yml` (CI dédiée).
- Règles Cursor : `.cursor/rules/42-template-sync.mdc` et `.cursor/rules/10-project-structure.mdc`. - Règles Cursor : `.cursor/rules/42-template-sync.mdc` et `.cursor/rules/10-project-structure.mdc`.
**Missions** #### Missions
- Assurer lalignement automatique sur le template pour : `.cursor/**`, `.gitea/**`, `AGENTS.md`, `scripts/**`, `docs/SSH_UPDATE.md`. - Assurer lalignement automatique sur le template pour : `.cursor/**`, `.gitea/**`, `AGENTS.md`, `scripts/**`, `docs/SSH_UPDATE.md`.
- Déclencher/valider la PR `[template-sync]` créée par la CI. - Déclencher/valider la PR `[template-sync]` créée par la CI.
- Exiger la mise à jour de `CHANGELOG.md` et `docs/INDEX.md` après synchronisation. - Exiger la mise à jour de `CHANGELOG.md` et `docs/INDEX.md` après synchronisation.
- Vérifier lintégrité (`manifest_checksum`, checksums de fichiers si publiés), les permissions, labsence de secrets. - Vérifier lintégrité (`manifest_checksum`, checksums de fichiers si publiés), les permissions, labsence de secrets.
- Mettre à jour `TEMPLATE_VERSION` dans la PR. - Mettre à jour `TEMPLATE_VERSION` dans la PR.
**Artefacts** #### Artefacts
- `.4nk-sync.yml`, `TEMPLATE_VERSION`, `.cursor/**`, `.gitea/**`, `AGENTS.md`, `scripts/**`, `docs/SSH_UPDATE.md`, `CHANGELOG.md`. - `.4nk-sync.yml`, `TEMPLATE_VERSION`, `.cursor/**`, `.gitea/**`, `AGENTS.md`, `scripts/**`, `docs/SSH_UPDATE.md`, `CHANGELOG.md`.
--- ---
### Agent Dérogations locales (Responsable) ### Agent Dérogations locales (Responsable)
**Références**
#### Références
- `LOCAL_OVERRIDES.yml` (facultatif, mais recommandé). - `LOCAL_OVERRIDES.yml` (facultatif, mais recommandé).
**Missions** #### Missions
- Enregistrer toute divergence locale dans le périmètre synchronisé (path, raison, propriétaire, échéance). - Enregistrer toute divergence locale dans le périmètre synchronisé (path, raison, propriétaire, échéance).
- Faire respecter : seules les dérogations listées et non expirées sont tolérées par la CI. - Faire respecter : seules les dérogations listées et non expirées sont tolérées par la CI.
- Auditer périodiquement et résorber les dérogations. - Auditer périodiquement et résorber les dérogations.
**Artefacts** #### Artefacts
- `LOCAL_OVERRIDES.yml`, `CHANGELOG.md` (mentionner les dérogations significatives). - `LOCAL_OVERRIDES.yml`, `CHANGELOG.md` (mentionner les dérogations significatives).
--- ---
@ -323,4 +394,5 @@ Les règles opérationnelles détaillées sont précisées dans `.cursor/rules/`
Quand tu fais une commande ou un requète complexe, explique là avant de la lancer. Quand tu fais une commande ou un requète complexe, explique là avant de la lancer.
## Conclusion ## Conclusion
Ce `AGENTS.md` mis à jour introduit l**Agent Synchronisation de template** et l**Agent Dérogations locales**, renforce l**Agent SSH & scripts**, et rattache lensemble aux règles Cursor et à la CI Gitea. La matrice de coordination formalise les validations obligatoires pour chaque type de changement, garantissant cohérence structurelle, qualité documentaire, sécurité, traçabilité et stabilité à long terme sur tous les projets issus de `4NK_project_template`. Ce `AGENTS.md` mis à jour introduit l**Agent Synchronisation de template** et l**Agent Dérogations locales**, renforce l**Agent SSH & scripts**, et rattache lensemble aux règles Cursor et à la CI Gitea. La matrice de coordination formalise les validations obligatoires pour chaque type de changement, garantissant cohérence structurelle, qualité documentaire, sécurité, traçabilité et stabilité à long terme sur tous les projets issus de `4NK_project_template`.

View File

@ -19,12 +19,15 @@ et ce projet adhère au [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
- Standards: `docs/QUALITY_STANDARDS.md`, `docs/OPEN_SOURCE_GUIDE.md` - Standards: `docs/QUALITY_STANDARDS.md`, `docs/OPEN_SOURCE_GUIDE.md`
- Fallback PowerShell pour tous les agents (`scripts/agents/run.ps1`) et normalisation: bash recommandé, PS en secours - Fallback PowerShell pour tous les agents (`scripts/agents/run.ps1`) et normalisation: bash recommandé, PS en secours
- CI: contrôle `bash-required` et prérequis `scripts/agents/run.sh` avant release-guard - CI: contrôle `bash-required` et prérequis `scripts/agents/run.sh` avant release-guard
- CI: job `markdownlint` pour contrôler les lints Markdown (MD013/MD024/MD036)
- CI: job `release-create` pour publier une release via lAPI Gitea (secret `RELEASE_TOKEN`)
### Changed ### Changed
- Documentation projet réécrite à partir des modèles `docs/templates/**` (générique, non applicative) - Documentation projet réécrite à partir des modèles `docs/templates/**` (générique, non applicative)
- `docs/INDEX.md` mis à jour (liens Déploiement et SSH) - `docs/INDEX.md` mis à jour (liens Déploiement et SSH)
- Alignement documentaire sur 4NK_template (titres, liens Gitea, wording) dans docs/** - Alignement documentaire sur 4NK_template (titres, liens Gitea, wording) dans docs/**
- Raccourcissement guides: `docs/SECURITY_AUDIT.md`, `docs/RELEASE_PLAN.md`, `docs/ROADMAP.md` (versions génériques concises) - Raccourcissement guides: `docs/SECURITY_AUDIT.md`, `docs/RELEASE_PLAN.md`, `docs/ROADMAP.md` (versions génériques concises)
- CI: déclenchement sur tags `v*` pour la publication de release
## [2025.08] - 2025-08-27 ## [2025.08] - 2025-08-27
@ -36,7 +39,7 @@ et ce projet adhère au [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
### Fixed ### Fixed
### Added ### Added (suite)
- Infrastructure de tests complète avec organisation par catégorie - Infrastructure de tests complète avec organisation par catégorie
- Scripts d'exécution automatisés pour les tests - Scripts d'exécution automatisés pour les tests
- Documentation technique complète (Architecture, API) - Documentation technique complète (Architecture, API)
@ -44,13 +47,13 @@ et ce projet adhère au [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
- Scripts de maintenance et nettoyage automatique - Scripts de maintenance et nettoyage automatique
- Garde de release (Cursor rule + scripts) imposant tests/doc/build/cohérence version/changelog/tag - Garde de release (Cursor rule + scripts) imposant tests/doc/build/cohérence version/changelog/tag
### Changed ### Changed (suite)
- Réorganisation complète de la structure des tests - Réorganisation complète de la structure des tests
- Amélioration de la documentation avec guides détaillés - Amélioration de la documentation avec guides détaillés
- Optimisation des scripts de démarrage et redémarrage - Optimisation des scripts de démarrage et redémarrage
- CI Gitea: ajout dun job release-guard (contrôles prépush/tag) - CI Gitea: ajout dun job release-guard (contrôles prépush/tag)
### Fixed ### Fixed (suite)
- Correction des problèmes de connectivité entre services - Correction des problèmes de connectivité entre services
- Amélioration de la gestion des erreurs dans les tests - Amélioration de la gestion des erreurs dans les tests
- Correction des configurations Docker - Correction des configurations Docker

View File

@ -145,7 +145,7 @@ docs(api): update WebSocket message format
test(integration): add multi-relay sync tests test(integration): add multi-relay sync tests
``` ```
**Types :** #### Types
- `feat` - Nouvelle fonctionnalité - `feat` - Nouvelle fonctionnalité
- `fix` - Correction de bug - `fix` - Correction de bug
- `docs` - Documentation - `docs` - Documentation

View File

@ -8,7 +8,7 @@ Nous prenons la sécurité très au sérieux. Si vous découvrez une vulnérabil
**NE PAS** créer d'issue publique pour les vulnérabilités de sécurité. **NE PAS** créer d'issue publique pour les vulnérabilités de sécurité.
**À la place :** #### À la place
1. Envoyez un email à [security@4nkweb.com](mailto:security@4nkweb.com) 1. Envoyez un email à [security@4nkweb.com](mailto:security@4nkweb.com)
2. Incluez "SECURITY VULNERABILITY" dans l'objet 2. Incluez "SECURITY VULNERABILITY" dans l'objet
3. Décrivez la vulnérabilité de manière détaillée 3. Décrivez la vulnérabilité de manière détaillée

View File

@ -1,13 +1,23 @@
# Configuration — 4NK_template (projet) # Configuration — 4NK_template (projet)
## Variables denvironnement (CI) ## Variables denvironnement (CI)
- Secrets CI uniquement (pas de secrets en clair) - Secrets CI uniquement (pas de secrets en clair)
- Variables agents : OPENAI_API_KEY, OPENAI_MODEL, OPENAI_API_BASE, OPENAI_TEMPERATURE - Variables agents : OPENAI_API_KEY, OPENAI_MODEL, OPENAI_API_BASE, OPENAI_TEMPERATURE
- Secret release: RELEASE_TOKEN (publication des releases via lAPI Gitea)
- Variable optionnelle: GITEA_BASE_URL (ex: `https://git.4nkweb.com`)
## Conventions ## Conventions
- Retours de ligne normalisés par CI - Retours de ligne normalisés par CI
- Dossiers `tests/logs` et `tests/reports` réservés aux artefacts - Dossiers `tests/logs` et `tests/reports` réservés aux artefacts
## Pré-requis agents ## Pré-requis agents
- bash requis (job CI `bash-required`) - bash requis (job CI `bash-required`)
- Fallback PowerShell utilisable localement - Fallback PowerShell utilisable localement
## Lints Markdown
- Configuration: `.markdownlint.json` (MD013 à 200 colonnes, MD024 en siblings_only)
- CI: job `markdownlint` exécute `markdownlint-cli` sur tous les `.md` (hors `archive/**`)

View File

@ -10,12 +10,17 @@
- Mise à jour obligatoire de la branche avant merge - Mise à jour obligatoire de la branche avant merge
## 3. Secrets et variables ## 3. Secrets et variables
- Secrets: `OPENAI_API_KEY` (optionnel), secrets de déploiement - Secrets: `OPENAI_API_KEY` (optionnel), `RELEASE_TOKEN` (obligatoire pour publier les releases via API Gitea)
- Variables: paramètres de CI non sensibles - Variables: paramètres de CI non sensibles, ex: `OPENAI_MODEL`, `OPENAI_API_BASE`, `OPENAI_TEMPERATURE`, `GITEA_BASE_URL`
### Ajouter `RELEASE_TOKEN`
- Aller dans Repository Settings → Secrets → New Repository Secret
- Nom: `RELEASE_TOKEN` ; Valeur: un token personnel avec portée API sur le dépôt
- Le job `release-create` utilisera ce secret lors dun push de tag `v*`
## 4. Workflows requis ## 4. Workflows requis
- `code-quality`, `unit-tests`, `documentation-tests`, `security-audit` - `code-quality`, `unit-tests`, `documentation-tests`, `security-audit`
- `deployment-checks`, `bash-required`, `release-guard` - `deployment-checks`, `bash-required`, `markdownlint`, `release-guard`, `release-create`
- (Optionnels) `agents-smoke`, `openia-agents` - (Optionnels) `agents-smoke`, `openia-agents`
## 5. Processus PR ## 5. Processus PR

View File

@ -0,0 +1,47 @@
Param(
[string]$Root = "."
)
$ErrorActionPreference = "Stop"
$files = Get-ChildItem -Path $Root -Recurse -Filter *.md | Where-Object { $_.FullName -notmatch '\\archive\\' }
$had = $false
foreach ($f in $files) {
try {
$lines = Get-Content -LiteralPath $f.FullName -Encoding UTF8 -ErrorAction Stop
} catch {
Write-Warning ("Impossible de lire: {0} — {1}" -f $f.FullName, $_.Exception.Message)
continue
}
$map = @{}
$firstMap = @{}
$dups = @{}
for ($i = 0; $i -lt $lines.Count; $i++) {
$line = $lines[$i]
if ($line -match '^\s{0,3}#{1,6}\s+(.*)$') {
$t = $Matches[1].Trim()
$norm = ([regex]::Replace($t, '\s+', ' ')).ToLowerInvariant()
if ($map.ContainsKey($norm)) {
if (-not $dups.ContainsKey($norm)) {
$dups[$norm] = New-Object System.Collections.ArrayList
$firstMap[$norm] = $map[$norm]
}
[void]$dups[$norm].Add($i + 1)
} else {
$map[$norm] = $i + 1
}
}
}
if ($dups.Keys.Count -gt 0) {
$had = $true
Write-Output "=== $($f.FullName) ==="
foreach ($k in $dups.Keys) {
$first = $firstMap[$k]
$others = ($dups[$k] -join ', ')
Write-Output ("Heading: '{0}' first@{1} duplicates@[{2}]" -f $k, $first, $others)
}
}
}
if (-not $had) {
Write-Output "No duplicate headings detected."
}