diff --git a/.cursor/rules/00-foundations.mdc b/.cursor/rules/00-foundations.mdc deleted file mode 100644 index f8c9c6d..0000000 --- a/.cursor/rules/00-foundations.mdc +++ /dev/null @@ -1,32 +0,0 @@ ---- -alwaysApply: true ---- - -# Fondations de rédaction et de comportement - -[portée] -S’applique à tout le dépôt 4NK/4NK_node pour toute génération, refactorisation, édition inline ou discussion dans Cursor. - -[objectifs] - -- Garantir l’usage exclusif du français. -- Proscrire l’injection d’exemples de code applicatif dans la base de code. -- Assurer une cohérence stricte de terminologie et de ton. -- Exiger une introduction et/ou une conclusion dans toute proposition de texte. - -[directives] - -- Toujours répondre et documenter en français. -- Ne pas inclure d’exemples exécutables ou de quickstarts dans la base ; préférer des descriptions prescriptives. -- Tout contenu produit doit mentionner explicitement les artefacts à mettre à jour lorsqu’il impacte docs/ et tests/. -- Préserver la typographie française (capitaliser uniquement le premier mot d’un titre et les noms propres). - -[validations] - -- Relecture linguistique et technique systématique. -- Refuser toute sortie avec exemples de code applicatif. -- Vérifier que l’issue traitée se conclut par un rappel des fichiers à mettre à jour. - -[artefacts concernés] - -- README.md, docs/**, tests/**, CHANGELOG.md, .gitea/**. diff --git a/.cursor/rules/10-project-structure.mdc b/.cursor/rules/10-project-structure.mdc deleted file mode 100644 index 4c1ef95..0000000 --- a/.cursor/rules/10-project-structure.mdc +++ /dev/null @@ -1,72 +0,0 @@ ---- -alwaysApply: true ---- - -# Structure projet 4NK_node - -[portée] -Maintenance de l’arborescence canonique, création/mise à jour/suppression de fichiers et répertoires. - -[objectifs] - -- Garantir l’alignement strict avec l’arborescence 4NK_node. -- Prévenir toute dérive structurelle. - -[directives] - -- S’assurer que l’arborescence suivante existe et reste conforme : - - 4NK/4NK_node - ├── archive - ├── CHANGELOG.md - ├── CODE_OF_CONDUCT.md - ├── CONTRIBUTING.md - ├── docker-compose.yml - ├── docs - │ ├── API.md - │ ├── ARCHITECTURE.md - │ ├── COMMUNITY_GUIDE.md - │ ├── CONFIGURATION.md - │ ├── GITEA_SETUP.md - │ ├── INDEX.md - │ ├── INSTALLATION.md - │ ├── MIGRATION.md - │ ├── OPEN_SOURCE_CHECKLIST.md - │ ├── QUICK_REFERENCE.md - │ ├── RELEASE_PLAN.md - │ ├── ROADMAP.md - │ ├── SECURITY_AUDIT.md - │ ├── TESTING.md - │ └── USAGE.md - ├── LICENSE - ├── README.md - ├── tests - │ ├── cleanup.sh - │ ├── connectivity - │ ├── external - │ ├── integration - │ ├── logs - │ ├── performance - │ ├── README.md - │ ├── reports - │ └── unit - └── .gitea - ├── ISSUE_TEMPLATE - │ ├── bug_report.md - │ └── feature_request.md - ├── PULL_REQUEST_TEMPLATE.md - └── workflows - └── ci.yml - -- Tout document obsolète est déplacé vers archive/ avec métadonnées (date, raison). -- Interdire la suppression brute de fichiers sans archivage et note dans CHANGELOG.md. - -[validations] - -- Diff structurel comparé à cette référence. -- Erreur bloquante si un fichier « requis » manque. - -[artefacts concernés] - -- archive/**, docs/**, tests/**, .gitea/**, CHANGELOG.md. - diff --git a/.cursor/rules/20-documentation.mdc b/.cursor/rules/20-documentation.mdc deleted file mode 100644 index fa65b5c..0000000 --- a/.cursor/rules/20-documentation.mdc +++ /dev/null @@ -1,33 +0,0 @@ ---- -alwaysApply: true ---- - -# Documentation continue - -[portée] -Mises à jour de docs/** corrélées à tout changement de code, configuration, dépendance, données ou CI. - -[objectifs] -- Remplacer toute section générique « RESUME » par des mises à jour ciblées dans les fichiers appropriés. -- Tenir INDEX.md comme table des matières de référence. - -[directives] -- À chaque changement, mettre à jour : - - API.md (spécifications, contrats, schémas, invariants). - - ARCHITECTURE.md (décisions, diagrammes, couplages, performances). - - CONFIGURATION.md (paramètres, formats, valeurs par défaut). - - INSTALLATION.md (pré-requis, étapes, vérifications). - - MIGRATION.md (chemins de migration, scripts, compatibilités). - - USAGE.md (parcours fonctionnels, contraintes). - - TESTING.md (pyramide, critères d’acceptation). - - SECURITY_AUDIT.md (menaces, contrôles, dettes résiduelles). - - RELEASE_PLAN.md, ROADMAP.md (planification), OPEN_SOURCE_CHECKLIST.md, COMMUNITY_GUIDE.md, GITEA_SETUP.md. -- Maintenir QUICK_REFERENCE.md pour les référentiels synthétiques utilisés par l’équipe. -- Ajouter un REX technique en cas d’hypothèses multiples avant résolution dans archive/. - -[validations] -- Cohérence croisée entre README.md et INDEX.md. -- Refus si une modification de code n’a pas de trace dans docs/** correspondants. - -[artefacts concernés] -- docs/**, README.md, archive/**. diff --git a/.cursor/rules/30-testing.mdc b/.cursor/rules/30-testing.mdc deleted file mode 100644 index 7178c27..0000000 --- a/.cursor/rules/30-testing.mdc +++ /dev/null @@ -1,57 +0,0 @@ ---- -alwaysApply: true ---- - -# Tests et qualité - -[portée] -Stratégie de tests, exécution locale, stabilité, non-régression. - -[objectifs] - -- Exiger des tests verts avant tout commit. -- Couvrir les axes unit, integration, connectivity, performance, external. - -[directives] - -- Ajouter/mettre à jour des tests dans tests/unit, tests/integration, tests/connectivity, tests/performance, tests/external selon l’impact. -- Consigner les journaux dans tests/logs et les rapports dans tests/reports. -- Maintenir tests/README.md (stratégie, outillage, seuils). -- Fournir un nettoyage reproductible via tests/cleanup.sh. -- Bloquer l’édition si des tests échouent tant que la correction n’est pas appliquée. - -[validations] - -- Refus d’un commit si tests en échec. -- Exiger justification et plan de test dans docs/TESTING.md pour toute refonte majeure. - -[artefacts concernés] - -- tests/**, docs/TESTING.md, CHANGELOG.md. - -# Tests et qualité - -[portée] -Stratégie de tests, exécution locale, stabilité, non-régression. - -[objectifs] - -- Exiger des tests verts avant tout commit. -- Couvrir les axes unit, integration, connectivity, performance, external. - -[directives] - -- Ajouter/mettre à jour des tests dans tests/unit, tests/integration, tests/connectivity, tests/performance, tests/external selon l’impact. -- Consigner les journaux dans tests/logs et les rapports dans tests/reports. -- Maintenir tests/README.md (stratégie, outillage, seuils). -- Fournir un nettoyage reproductible via tests/cleanup.sh. -- Bloquer l’édition si des tests échouent tant que la correction n’est pas appliquée. - -[validations] - -- Refus d’un commit si tests en échec. -- Exiger justification et plan de test dans docs/TESTING.md pour toute refonte majeure. - -[artefacts concernés] - -- tests/**, docs/TESTING.md, CHANGELOG.md. diff --git a/.cursor/rules/40-dependencies-and-build.mdc b/.cursor/rules/40-dependencies-and-build.mdc deleted file mode 100644 index c1ece2d..0000000 --- a/.cursor/rules/40-dependencies-and-build.mdc +++ /dev/null @@ -1,55 +0,0 @@ ---- -alwaysApply: true ---- - -# Dépendances, compilation et build - -[portée] -Gestion des dépendances, compilation fréquente, politique de versions. - -[objectifs] - -- Ajouter automatiquement les dépendances manquantes si justifié. -- Rechercher systématiquement les dernières versions stables. - -[directives] - -- Lorsqu’une fonctionnalité nécessite une dépendance, l’ajouter et la documenter (nom, version, portée, impact) dans docs/ARCHITECTURE.md et docs/CONFIGURATION.md si nécessaire. -- Compiler très régulièrement et « quand nécessaire » (avant refactor, avant push, après mise à jour de dépendances). -- Corriger toute erreur de compilation/exécution avant de poursuivre. -- Documenter tout changement de dépendances (raison, risques, rollback). - -[validations] - -- Interdire la progression si la compilation échoue. -- Vérifier la présence d’une note de changement dans CHANGELOG.md en cas de dépendance ajoutée/retirée. - -[artefacts concernés] - -- docs/ARCHITECTURE.md, docs/CONFIGURATION.md, CHANGELOG.md. - -# Dépendances, compilation et build - -[portée] -Gestion des dépendances, compilation fréquente, politique de versions. - -[objectifs] - -- Ajouter automatiquement les dépendances manquantes si justifié. -- Rechercher systématiquement les dernières versions stables. - -[directives] - -- Lorsqu’une fonctionnalité nécessite une dépendance, l’ajouter et la documenter (nom, version, portée, impact) dans docs/ARCHITECTURE.md et docs/CONFIGURATION.md si nécessaire. -- Compiler très régulièrement et « quand nécessaire » (avant refactor, avant push, après mise à jour de dépendances). -- Corriger toute erreur de compilation/exécution avant de poursuivre. -- Documenter tout changement de dépendances (raison, risques, rollback). - -[validations] - -- Interdire la progression si la compilation échoue. -- Vérifier la présence d’une note de changement dans CHANGELOG.md en cas de dépendance ajoutée/retirée. - -[artefacts concernés] - -- docs/ARCHITECTURE.md, docs/CONFIGURATION.md, CHANGELOG.md. diff --git a/.cursor/rules/41-ssh-automation.mdc b/.cursor/rules/41-ssh-automation.mdc deleted file mode 100644 index 1a988d6..0000000 --- a/.cursor/rules/41-ssh-automation.mdc +++ /dev/null @@ -1,65 +0,0 @@ ---- -alwaysApply: true ---- - -# Automatisation SSH et scripts - -[portée] -Création, usage et vérification du dossier scripts/ et de ses trois scripts standards liés aux opérations SSH et CI. - -[objectifs] - -- Garantir la présence de scripts/ avec auto-ssh-push.sh, init-ssh-env.sh, setup-ssh-ci.sh. -- Encadrer l’usage de ces scripts (locaux et CI), la sécurité, l’idempotence et la traçabilité. -- Documenter toute mise à jour dans docs/SSH_UPDATE.md et CHANGELOG.md. - -[directives] - -- Créer et maintenir `scripts/auto-ssh-push.sh`, `scripts/init-ssh-env.sh`, `scripts/setup-ssh-ci.sh`. -- Exiger permissions d’exécution adaptées sur scripts/ (exécution locale et CI). -- Interdire le stockage de clés privées ou secrets en clair dans le dépôt. -- Utiliser des variables d’environnement et secrets CI pour toute donnée sensible. -- Rendre chaque script idempotent et verbosable ; produire un code de sortie non-zéro en cas d’échec. -- Tracer les opérations : consigner un résumé dans docs/SSH_UPDATE.md (objectif, variables requises, effets, points d’échec). -- Ajouter un contrôle automatique dans la CI pour vérifier l’existence et l’exécutabilité de ces scripts. - -[validations] - -- Échec bloquant si un des trois scripts manque ou n’est pas exécutable. -- Échec bloquant si docs/SSH_UPDATE.md n’est pas mis à jour lors d’une modification de scripts. -- Échec bloquant si un secret attendu n’est pas fourni en CI. - -[artefacts concernés] - -- scripts/**, docs/SSH_UPDATE.md, .gitea/workflows/ci.yml, CHANGELOG.md, docs/CONFIGURATION.md. - -# Automatisation SSH et scripts - -[portée] -Création, usage et vérification du dossier scripts/ et de ses trois scripts standards liés aux opérations SSH et CI. - -[objectifs] - -- Garantir la présence de scripts/ avec auto-ssh-push.sh, init-ssh-env.sh, setup-ssh-ci.sh. -- Encadrer l’usage de ces scripts (locaux et CI), la sécurité, l’idempotence et la traçabilité. -- Documenter toute mise à jour dans docs/SSH_UPDATE.md et CHANGELOG.md. - -[directives] - -- Créer et maintenir `scripts/auto-ssh-push.sh`, `scripts/init-ssh-env.sh`, `scripts/setup-ssh-ci.sh`. -- Exiger permissions d’exécution adaptées sur scripts/ (exécution locale et CI). -- Interdire le stockage de clés privées ou secrets en clair dans le dépôt. -- Utiliser des variables d’environnement et secrets CI pour toute donnée sensible. -- Rendre chaque script idempotent et verbosable ; produire un code de sortie non-zéro en cas d’échec. -- Tracer les opérations : consigner un résumé dans docs/SSH_UPDATE.md (objectif, variables requises, effets, points d’échec). -- Ajouter un contrôle automatique dans la CI pour vérifier l’existence et l’exécutabilité de ces scripts. - -[validations] - -- Échec bloquant si un des trois scripts manque ou n’est pas exécutable. -- Échec bloquant si docs/SSH_UPDATE.md n’est pas mis à jour lors d’une modification de scripts. -- Échec bloquant si un secret attendu n’est pas fourni en CI. - -[artefacts concernés] - -- scripts/**, docs/SSH_UPDATE.md, .gitea/workflows/ci.yml, CHANGELOG.md, docs/CONFIGURATION.md. diff --git a/.cursor/rules/42-template-sync.mdc b/.cursor/rules/42-template-sync.mdc deleted file mode 100644 index c7cf051..0000000 --- a/.cursor/rules/42-template-sync.mdc +++ /dev/null @@ -1,53 +0,0 @@ ---- -alwaysApply: true ---- - -# Synchronisation de template (4NK) - -[portée] -Tous les projets issus de 4NK_project_template. Contrôle de l’alignement sur .cursor/, .gitea/, AGENTS.md, scripts/, docs/SSH_UPDATE.md. - -[objectifs] - -- Garantir l’absence de dérive sur les éléments normatifs. -- Exiger la mise à jour documentaire et du changelog à chaque synchronisation. -- Bloquer la progression en cas d’intégrité non conforme. - -[directives] -- Lire la configuration de .4nk-sync.yml (source_repo, ref, paths, policy). -- Refuser toute modification locale dans le périmètre des paths sans PR de synchronisation. -- Après synchronisation : exiger mises à jour de CHANGELOG.md et docs/INDEX.md. -- Scripts : vérifier présence, permissions d’exécution et absence de secrets en clair. -- SSH : exiger mise à jour de docs/SSH_UPDATE.md si scripts/** modifié. - -[validations] -- Erreur bloquante si manifest_checksum manquant ou invalide. -- Erreur bloquante si un path requis n’existe pas après sync. -- Erreur bloquante si tests/CI signalent des scripts non exécutables ou des fichiers sensibles. - -[artefacts concernés] -- .4nk-sync.yml, TEMPLATE_VERSION, .cursor/**, .gitea/**, AGENTS.md, scripts/**, docs/SSH_UPDATE.md, CHANGELOG.md. -# Synchronisation de template (4NK) - -[portée] -Tous les projets issus de 4NK_project_template. Contrôle de l’alignement sur .cursor/, .gitea/, AGENTS.md, scripts/, docs/SSH_UPDATE.md. - -[objectifs] -- Garantir l’absence de dérive sur les éléments normatifs. -- Exiger la mise à jour documentaire et du changelog à chaque synchronisation. -- Bloquer la progression en cas d’intégrité non conforme. - -[directives] -- Lire la configuration de .4nk-sync.yml (source_repo, ref, paths, policy). -- Refuser toute modification locale dans le périmètre des paths sans PR de synchronisation. -- Après synchronisation : exiger mises à jour de CHANGELOG.md et docs/INDEX.md. -- Scripts : vérifier présence, permissions d’exécution et absence de secrets en clair. -- SSH : exiger mise à jour de docs/SSH_UPDATE.md si scripts/** modifié. - -[validations] -- Erreur bloquante si manifest_checksum manquant ou invalide. -- Erreur bloquante si un path requis n’existe pas après sync. -- Erreur bloquante si tests/CI signalent des scripts non exécutables ou des fichiers sensibles. - -[artefacts concernés] -- .4nk-sync.yml, TEMPLATE_VERSION, .cursor/**, .gitea/**, AGENTS.md, scripts/**, docs/SSH_UPDATE.md, CHANGELOG.md. diff --git a/.cursor/rules/4nkrules.mdc b/.cursor/rules/4nkrules.mdc deleted file mode 100644 index 75c8e3c..0000000 --- a/.cursor/rules/4nkrules.mdc +++ /dev/null @@ -1,156 +0,0 @@ ---- -alwaysApply: true -# cursor.mcd — règles d’or 4NK -language: fr -policies: - respond_in_french: true - no_examples_in_codebase: true - ask_before_push_or_tag: true - -directories: - ensure: - - archive/ - - docs/ - - tests/ - - .gitea/ - docs: - required_files: - - API.md - - ARCHITECTURE.md - - COMMUNITY_GUIDE.md - - CONFIGURATION.md - - GITEA_SETUP.md - - INDEX.md - - INSTALLATION.md - - MIGRATION.md - - OPEN_SOURCE_CHECKLIST.md - - QUICK_REFERENCE.md - - RELEASE_PLAN.md - - ROADMAP.md - - SECURITY_AUDIT.md - - TESTING.md - - USAGE.md - tests: - required_files: - - cleanup.sh - - README.md - required_dirs: - - connectivity - - external - - integration - - logs - - performance - - reports - - unit - gitea: - required_files: - - PULL_REQUEST_TEMPLATE.md - required_dirs: - - ISSUE_TEMPLATE - - workflows - ISSUE_TEMPLATE: - required_files: - - bug_report.md - - feature_request.md - workflows: - required_files: - - ci.yml - -files: - required_root_files: - - CHANGELOG.md - - CODE_OF_CONDUCT.md - - CONTRIBUTING.md - - docker-compose.yml - - LICENSE - - README.md - -documentation: - update_on: - - feature_added - - feature_modified - - feature_removed - - feature_discovered - replace_sections_named: ["RESUME"] - rex_required_on_multiple_hypotheses: true - archive_obsolete_docs: true - -compilation: - compile_often: true - compile_when_needed: true - fail_on_errors: true - -problem_solving: - auto_run_steps: - - minimal_repro - - inspect_logs - - bisect_changes - - form_hypotheses - - targeted_tests - - implement_fix - - non_regression - -office_docs: - docx_reader: docx2txt - fallback: - - pandoc_convert - - request_alternate_source - -dependencies: - auto_add_missing: true - always_check_latest_stable: true - document_changes_in_docs: true - -csv_models: - treat_as_source_of_truth: true - multirow_headers_supported: true - confirm_in_docs: true - require_column_definitions: true - -file_processing: - study_each_file: true - ask_questions_if_needed: true - adapt_code_if_needed: true - propose_solution_if_unreadable: true - -types_and_properties: - auto_correct_incoherences: true - document_transformations: true - -functional_consistency: - always_ask_clarifying_questions: true - -frontend_architecture: - react_code_splitting: true - state_management: ["redux", "context_api"] - data_service_abstraction: true - -execution_discipline: - finish_started_work: true - -open_source_and_gitea: - prepare_every_project: true - gitea_remote: "git.4nkweb.com" - required_files: - - LICENSE - - CONTRIBUTING.md - - CHANGELOG.md - - CODE_OF_CONDUCT.md - align_with_4NK_node_on_creation: true - keep_alignment_updated: true - -tests_and_docs: - update_docs_and_tests_with_code: true - require_green_tests_before_commit: true - -versioning: - manage_with_changelog: true - confirm_before_push: true - confirm_before_tag: true - propose_semver_bump: true - -pre_commit: - run_all_tests: true - block_on_errors: true - ---- \ No newline at end of file diff --git a/.cursor/rules/50-data-csv-models.mdc b/.cursor/rules/50-data-csv-models.mdc deleted file mode 100644 index c686e3d..0000000 --- a/.cursor/rules/50-data-csv-models.mdc +++ /dev/null @@ -1,54 +0,0 @@ ---- -alwaysApply: false ---- -# Modélisation des données à partir de CSV - -[portée] -Utilisation des CSV comme base des modèles de données, y compris en-têtes multi-lignes. - -[objectifs] - -- Confirmer la structure inférée pour chaque CSV. -- Demander une définition formelle de toutes les colonnes. - -[directives] - -- Gérer explicitement les en-têtes multi-lignes (titre principal + sous-colonnes). -- Confirmer par écrit dans docs/API.md ou docs/ARCHITECTURE.md : nombre de lignes d’en-tête, mapping colonnes→types, unités, domaines de valeurs, nullabilité, contraintes. -- Poser des questions si ambiguïtés ; proposer une normalisation temporaire documentée. -- Corriger automatiquement les incohérences de types si une règle de mapping est établie ailleurs et documenter la transformation. - -[validations] - -- Aucune ingestion sans spécification de colonnes validée. -- Traçabilité des corrections de types (avant/après) dans docs/ARCHITECTURE.md. - -[artefacts concernés] - -- docs/API.md, docs/ARCHITECTURE.md, docs/USAGE.md. - -# Modélisation des données à partir de CSV - -[portée] -Utilisation des CSV comme base des modèles de données, y compris en-têtes multi-lignes. - -[objectifs] - -- Confirmer la structure inférée pour chaque CSV. -- Demander une définition formelle de toutes les colonnes. - -[directives] - -- Gérer explicitement les en-têtes multi-lignes (titre principal + sous-colonnes). -- Confirmer par écrit dans docs/API.md ou docs/ARCHITECTURE.md : nombre de lignes d’en-tête, mapping colonnes→types, unités, domaines de valeurs, nullabilité, contraintes. -- Poser des questions si ambiguïtés ; proposer une normalisation temporaire documentée. -- Corriger automatiquement les incohérences de types si une règle de mapping est établie ailleurs et documenter la transformation. - -[validations] - -- Aucune ingestion sans spécification de colonnes validée. -- Traçabilité des corrections de types (avant/après) dans docs/ARCHITECTURE.md. - -[artefacts concernés] - -- docs/API.md, docs/ARCHITECTURE.md, docs/USAGE.md. diff --git a/.cursor/rules/60-office-docs.mdc b/.cursor/rules/60-office-docs.mdc deleted file mode 100644 index 7f57891..0000000 --- a/.cursor/rules/60-office-docs.mdc +++ /dev/null @@ -1,41 +0,0 @@ ---- -alwaysApply: false ---- -# Lecture des documents bureautiques - -[portée] -Lecture des fichiers .docx et alternatives. - -[objectifs] -- Utiliser docx2txt par défaut. -- Proposer des solutions de repli si lecture impossible. - -[directives] -- Lire les .docx avec docx2txt. -- En cas d’échec, proposer : conversion via pandoc, demande d’une source alternative, ou extraction textuelle. -- Documenter dans docs/INDEX.md la provenance et le statut des documents importés. - -[validations] -- Vérification que les contenus extraits sont intégrés aux fichiers docs/ concernés. - -[artefacts concernés] -- docs/**, archive/**. -# Lecture des documents bureautiques - -[portée] -Lecture des fichiers .docx et alternatives. - -[objectifs] -- Utiliser docx2txt par défaut. -- Proposer des solutions de repli si lecture impossible. - -[directives] -- Lire les .docx avec docx2txt. -- En cas d’échec, proposer : conversion via pandoc, demande d’une source alternative, ou extraction textuelle. -- Documenter dans docs/INDEX.md la provenance et le statut des documents importés. - -[validations] -- Vérification que les contenus extraits sont intégrés aux fichiers docs/ concernés. - -[artefacts concernés] -- docs/**, archive/**. diff --git a/.cursor/rules/70-frontend-architecture.mdc b/.cursor/rules/70-frontend-architecture.mdc deleted file mode 100644 index 65d9c40..0000000 --- a/.cursor/rules/70-frontend-architecture.mdc +++ /dev/null @@ -1,56 +0,0 @@ ---- -alwaysApply: false ---- - -# Architecture frontend - -[portée] -Qualité du bundle, découpage, état global et couche de services. - -[objectifs] - -- Réduire la taille du bundle initial via code splitting. -- Éviter le prop drilling via Redux ou Context API. -- Abstraire les services de données pour testabilité et maintenance. - -[directives] - -- Mettre en place React.lazy et Suspense pour le chargement différé des vues/segments. -- Centraliser l’état global via Redux ou Context API. -- Isoler les appels « data » derrière une couche d’abstraction à interface stable. -- Interdire l’ajout d’exemples front dans la base de code. - -[validations] - -- Vérifier que les points d’entrée sont minimes et que les segments non critiques sont chargés à la demande. -- S’assurer que docs/ARCHITECTURE.md décrit les décisions et les points d’extension. - -[artefacts concernés] - -- docs/ARCHITECTURE.md, docs/TESTING.md. -# Architecture frontend - -[portée] -Qualité du bundle, découpage, état global et couche de services. - -[objectifs] - -- Réduire la taille du bundle initial via code splitting. -- Éviter le prop drilling via Redux ou Context API. -- Abstraire les services de données pour testabilité et maintenance. - -[directives] - -- Mettre en place React.lazy et Suspense pour le chargement différé des vues/segments. -- Centraliser l’état global via Redux ou Context API. -- Isoler les appels « data » derrière une couche d’abstraction à interface stable. -- Interdire l’ajout d’exemples front dans la base de code. - -[validations] - -- Vérifier que les points d’entrée sont minimes et que les segments non critiques sont chargés à la demande. -- S’assurer que docs/ARCHITECTURE.md décrit les décisions et les points d’extension. - -[artefacts concernés] - -- docs/ARCHITECTURE.md, docs/TESTING.md. diff --git a/.cursor/rules/80-versioning-and-release.mdc b/.cursor/rules/80-versioning-and-release.mdc deleted file mode 100644 index 24d213a..0000000 --- a/.cursor/rules/80-versioning-and-release.mdc +++ /dev/null @@ -1,53 +0,0 @@ ---- -alwaysApply: false ---- - -# Versionnage et publication - -[portée] -Gestion sémantique des versions, CHANGELOG, confirmation push/tag. - -[objectifs] - -- Tenir CHANGELOG.md comme source unique de vérité. -- Demander confirmation avant push et tag. - -[directives] - -- À chaque changement significatif, mettre à jour CHANGELOG.md (ajouts, changements, corrections, ruptures). -- Proposer un bump semver (major/minor/patch) motivé par l’impact. -- Avant tout push ou tag, demander confirmation explicite. - -[validations] - -- Refus si modification sans entrée correspondante dans CHANGELOG.md. -- Cohérence entre CHANGELOG.md, docs/RELEASE_PLAN.md et docs/ROADMAP.md. - -[artefacts concernés] - -- CHANGELOG.md, docs/RELEASE_PLAN.md, docs/ROADMAP.md. - -# Versionnage et publication - -[portée] -Gestion sémantique des versions, CHANGELOG, confirmation push/tag. - -[objectifs] - -- Tenir CHANGELOG.md comme source unique de vérité. -- Demander confirmation avant push et tag. - -[directives] - -- À chaque changement significatif, mettre à jour CHANGELOG.md (ajouts, changements, corrections, ruptures). -- Proposer un bump semver (major/minor/patch) motivé par l’impact. -- Avant tout push ou tag, demander confirmation explicite. - -[validations] - -- Refus si modification sans entrée correspondante dans CHANGELOG.md. -- Cohérence entre CHANGELOG.md, docs/RELEASE_PLAN.md et docs/ROADMAP.md. - -[artefacts concernés] - -- CHANGELOG.md, docs/RELEASE_PLAN.md, docs/ROADMAP.md. diff --git a/.cursor/rules/85-release-guard.mdc b/.cursor/rules/85-release-guard.mdc deleted file mode 100644 index 827ef9a..0000000 --- a/.cursor/rules/85-release-guard.mdc +++ /dev/null @@ -1,37 +0,0 @@ ---- -alwaysApply: true ---- - -# Garde de release: tests, documentation, compilation, version, changelog, tag - -[portée] -Contrôler systématiquement avant push/tag: tests verts, docs mises à jour, build OK, alignement numéro de version ↔ changelog ↔ tag git, mise à jour de déploiement, confirmation utilisateur (latest vs wip). - -[objectifs] - -- Empêcher toute publication sans vérifications minimales. -- Exiger la cohérence sémantique (VERSION/TEMPLATE_VERSION ↔ CHANGELOG ↔ tag git). -- Demander explicitement « latest » ou « wip » et appliquer la bonne stratégie. - -[directives] - -- Avant push/tag, exécuter: tests, compilation, lints (si configurés). -- Mettre à jour la documentation et le changelog en conséquence. -- Aligner le fichier de version (VERSION ou TEMPLATE_VERSION), l’entrée CHANGELOG et le tag. -- Demander confirmation utilisateur: `latest` (release stable) ou `wip` (travail en cours). - - latest: entrée datée dans CHANGELOG, version stable, tag `vX.Y.Z`. - - wip: suffixe `-wip` recommandé dans version/tag (ex: `vX.Y.Z-wip.N`). -- Mettre à jour le déploiement après publication (si pipeline défini), sinon documenter l’étape. - -[validations] - -- Refuser push/tag si: - - tests/compilation échouent, - - CHANGELOG non mis à jour, - - VERSION/TEMPLATE_VERSION absent ou incohérent, - - release type non fourni (ni latest, ni wip). - -[artefacts concernés] - -- CHANGELOG.md, VERSION ou TEMPLATE_VERSION, docs/**, .gitea/workflows/**, scripts/**. - diff --git a/.cursor/rules/90-gitea-and-oss.mdc b/.cursor/rules/90-gitea-and-oss.mdc deleted file mode 100644 index f9da399..0000000 --- a/.cursor/rules/90-gitea-and-oss.mdc +++ /dev/null @@ -1,59 +0,0 @@ ---- -alwaysApply: true ---- - -# Open source et Gitea - -[portée] -Conformité open source, templates Gitea, CI. - -[objectifs] - -- Préparer chaque projet pour un dépôt Gitea (git.4nkweb.com). -- Maintenir les fichiers de gouvernance et la CI. - -[directives] - -- Vérifier la présence et l’actualité de : LICENSE, CONTRIBUTING.md, CODE_OF_CONDUCT.md, OPEN_SOURCE_CHECKLIST.md. -- Maintenir .gitea/ : - - ISSUE_TEMPLATE/bug_report.md, feature_request.md - - PULL_REQUEST_TEMPLATE.md - - workflows/ci.yml -- Documenter dans docs/GITEA_SETUP.md la configuration distante et les permissions. - -[validations] - -- Refus si un des fichiers « gouvernance/CI » manque. -- Cohérence entre docs/OPEN_SOURCE_CHECKLIST.md et l’état du repo. - -[artefacts concernés] - -- .gitea/**, docs/GITEA_SETUP.md, docs/OPEN_SOURCE_CHECKLIST.md. - -# Open source et Gitea - -[portée] -Conformité open source, templates Gitea, CI. - -[objectifs] - -- Préparer chaque projet pour un dépôt Gitea (git.4nkweb.com). -- Maintenir les fichiers de gouvernance et la CI. - -[directives] - -- Vérifier la présence et l’actualité de : LICENSE, CONTRIBUTING.md, CODE_OF_CONDUCT.md, OPEN_SOURCE_CHECKLIST.md. -- Maintenir .gitea/ : - - ISSUE_TEMPLATE/bug_report.md, feature_request.md - - PULL_REQUEST_TEMPLATE.md - - workflows/ci.yml -- Documenter dans docs/GITEA_SETUP.md la configuration distante et les permissions. - -[validations] - -- Refus si un des fichiers « gouvernance/CI » manque. -- Cohérence entre docs/OPEN_SOURCE_CHECKLIST.md et l’état du repo. - -[artefacts concernés] - -- .gitea/**, docs/GITEA_SETUP.md, docs/OPEN_SOURCE_CHECKLIST.md. diff --git a/.cursor/rules/95-triage-and-problem-solving.mdc b/.cursor/rules/95-triage-and-problem-solving.mdc deleted file mode 100644 index 4df091a..0000000 --- a/.cursor/rules/95-triage-and-problem-solving.mdc +++ /dev/null @@ -1,53 +0,0 @@ ---- -alwaysApply: true ---- - -# Tri, diagnostic et résolution de problèmes - -[portée] -Boucle de triage : reproduction, diagnostic, correctif, non-régression. - -[objectifs] - -- Exécuter automatiquement les étapes de résolution. -- Bloquer l’avancement tant que les erreurs ne sont pas corrigées. - -[directives] - -- Étapes obligatoires : reproduction minimale, inspection des logs, bissection des changements, formulation d’hypothèses, tests ciblés, correctif, test de non-régression. -- Lorsque plusieurs hypothèses ont été testées, produire un REX dans archive/ avec liens vers les commits. -- Poser des questions de cohérence fonctionnelle si des ambiguïtés subsistent (contrats d’API, invariants, SLA). - -[validations] - -- Interdiction de clore une tâche si un test échoue ou si une alerte critique subsiste. -- Traçabilité du REX si investigations multiples. - -[artefacts concernés] - -- tests/**, archive/**, docs/TESTING.md, docs/ARCHITECTURE.md. - -# Tri, diagnostic et résolution de problèmes - -[portée] -Boucle de triage : reproduction, diagnostic, correctif, non-régression. - -[objectifs] - -- Exécuter automatiquement les étapes de résolution. -- Bloquer l’avancement tant que les erreurs ne sont pas corrigées. - -[directives] - -- Étapes obligatoires : reproduction minimale, inspection des logs, bissection des changements, formulation d’hypothèses, tests ciblés, correctif, test de non-régression. -- Lorsque plusieurs hypothèses ont été testées, produire un REX dans archive/ avec liens vers les commits. -- Poser des questions de cohérence fonctionnelle si des ambiguïtés subsistent (contrats d’API, invariants, SLA). - -[validations] - -- Interdiction de clore une tâche si un test échoue ou si une alerte critique subsiste. -- Traçabilité du REX si investigations multiples. - -[artefacts concernés] - -- tests/**, archive/**, docs/TESTING.md, docs/ARCHITECTURE.md. diff --git a/.cursor/rules/ruleset-index.md b/.cursor/rules/ruleset-index.md deleted file mode 100644 index e70ef69..0000000 --- a/.cursor/rules/ruleset-index.md +++ /dev/null @@ -1,16 +0,0 @@ -# Index des règles .cursor/rules - -- 00-foundations.mdc : règles linguistiques et éditoriales (français, pas d’exemples en base, introduction/conclusion). -- 10-project-structure.mdc : arborescence canonique 4NK_node et garde-fous. -- 20-documentation.mdc : documentation continue, remplacement de « RESUME », INDEX.md. -- 30-testing.mdc : tests (unit, integration, connectivity, performance, external), logs/reports. -- 40-dependencies-and-build.mdc : dépendances, compilation, corrections bloquantes. -- 50-data-csv-models.mdc : CSV avec en-têtes multi-lignes, définition des colonnes. -- 60-office-docs.mdc : lecture .docx via docx2txt + repli. -- 70-frontend-architecture.mdc : React.lazy/Suspense, état global, couche de services. -- 80-versioning-and-release.mdc : CHANGELOG, semver, confirmation push/tag. -- 85-release-guard.mdc : garde de release (tests/doc/build/version/changelog/tag; latest vs wip). -- 90-gitea-and-oss.mdc : fichiers open source, .gitea, CI, Gitea remote. -- 95-triage-and-problem-solving.mdc : boucle de diagnostic, REX, non-régression. - -Ces règles sont conçues pour être ajoutées au contexte de Cursor depuis l’interface (@Cursor Rules) et s’appuient sur le mécanisme de règles projet stockées dans `.cursor/rules/`. :contentReference[oaicite:3]{index=3} diff --git a/.cursorignore b/.cursorignore deleted file mode 100644 index f189fdd..0000000 --- a/.cursorignore +++ /dev/null @@ -1,27 +0,0 @@ -# Ignorer les contenus volumineux pour le contexte IA -node_modules/ -package-lock.json -dist/ -build/ -coverage/ -.cache/ -.tmp/ -.parcel-cache/ - -# Rapports et logs de tests -tests/logs/ -tests/reports/ - -# Fichiers lourds -**/*.map -**/*.min.* -**/*.wasm -**/*.{png,jpg,jpeg,svg,ico,pdf} - -# Ne pas ignorer .cursor ni AGENTS.md -!/.cursor -!/AGENTS.md - -!.cursor/ - -!AGENTS.md diff --git a/.gitea/ISSUE_TEMPLATE/bug_report.md b/.gitea/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 549ade6..0000000 --- a/.gitea/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -name: Bug Report -about: Signaler un bug pour nous aider à améliorer docv -title: '[BUG] ' -labels: ['bug', 'needs-triage'] -assignees: '' ---- - -> Ce fichier est un modèle (template). Adaptez les champs à votre projet dérivé. - -## 🐛 Description du Bug - -Description claire et concise du problème. - -## 🔄 Étapes pour Reproduire - -1. Aller à '...' -2. Cliquer sur '...' -3. Faire défiler jusqu'à '...' -4. Voir l'erreur - -## ✅ Comportement Attendu - -Description de ce qui devrait se passer. - -## ❌ Comportement Actuel - -Description de ce qui se passe actuellement. - -## 📸 Capture d'Écran - -Si applicable, ajoutez une capture d'écran pour expliquer votre problème. - -## 💻 Informations Système - -- **OS** : [ex: Ubuntu 20.04, macOS 12.0, Windows 11] -- **Docker** : [ex: 20.10.0] -- **Docker Compose** : [ex: 2.0.0] -- **Version docv** : [ex: v1.0.0] -- **Architecture** : [ex: x86_64, ARM64] - -## 📋 Configuration - -### Services Actifs -```bash -docker ps -``` - -### Variables d'Environnement -```bash -# Bitcoin Core -BITCOIN_NETWORK=signet -BITCOIN_RPC_PORT=18443 - -# Blindbit -BLINDBIT_PORT=8000 - -# SDK Relay -SDK_RELAY_PORTS=8090-8095 -``` - -## 📝 Logs - -### Logs Pertinents -``` -Logs pertinents ici -``` - -### Logs d'Erreur -``` -Logs d'erreur ici -``` - -### Logs de Debug -``` -Logs de debug ici (si RUST_LOG=debug) -``` - -## 🔧 Tentatives de Résolution - -- [ ] Redémarrage des services -- [ ] Nettoyage des volumes Docker -- [ ] Vérification de la connectivité réseau -- [ ] Mise à jour des dépendances -- [ ] Vérification de la configuration - -## 📚 Contexte Supplémentaire - -Toute autre information pertinente sur le problème. - -## 🔗 Liens Utiles - -- [Documentation](docs/) -- [Guide de Dépannage](docs/TROUBLESHOOTING.md) -- [Issues Similaires](https://git.4nkweb.com/4nk/4NK_node/issues?q=is%3Aissue+is%3Aopen+label%3Abug) - ---- - -**Merci de votre contribution !** 🙏 - diff --git a/.gitea/ISSUE_TEMPLATE/feature_request.md b/.gitea/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 8d383f6..0000000 --- a/.gitea/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,159 +0,0 @@ ---- -name: Feature Request -about: Proposer une nouvelle fonctionnalité pour docv -title: '[FEATURE] ' -labels: ['enhancement', 'needs-triage'] -assignees: '' ---- - -> Ce fichier est un modèle (template). Adaptez les champs à votre projet dérivé. - -## 🚀 Résumé - -Description claire et concise de la fonctionnalité souhaitée. - -## 💡 Motivation - -Pourquoi cette fonctionnalité est-elle nécessaire ? Quels problèmes résout-elle ? - -### Problèmes Actuels -- Problème 1 -- Problème 2 -- Problème 3 - -### Avantages de la Solution -- Avantage 1 -- Avantage 2 -- Avantage 3 - -## 🎯 Proposition - -Description détaillée de la fonctionnalité proposée. - -### Fonctionnalités Principales -- [ ] Fonctionnalité 1 -- [ ] Fonctionnalité 2 -- [ ] Fonctionnalité 3 - -### Interface Utilisateur -Description de l'interface utilisateur si applicable. - -### API Changes -Description des changements d'API si applicable. - -## 🔄 Alternatives Considérées - -Autres solutions envisagées et pourquoi elles n'ont pas été choisies. - -### Alternative 1 -- **Description** : ... -- **Pourquoi rejetée** : ... - -### Alternative 2 -- **Description** : ... -- **Pourquoi rejetée** : ... - -## 📊 Impact - -### Impact sur les Utilisateurs -- Impact positif 1 -- Impact positif 2 -- Impact négatif potentiel (si applicable) - -### Impact sur l'Architecture -- Changements nécessaires -- Compatibilité avec l'existant -- Performance - -### Impact sur la Maintenance -- Complexité ajoutée -- Tests nécessaires -- Documentation requise - -## 💻 Exemples d'Utilisation - -### Cas d'Usage 1 -```bash -# Exemple de commande ou configuration -``` - -### Cas d'Usage 2 -```python -# Exemple de code Python -``` - -### Cas d'Usage 3 -```javascript -// Exemple de code JavaScript -``` - -## 🧪 Tests - -### Tests Nécessaires -- [ ] Tests unitaires -- [ ] Tests d'intégration -- [ ] Tests de performance -- [ ] Tests de sécurité -- [ ] Tests de compatibilité - -### Scénarios de Test -- Scénario 1 -- Scénario 2 -- Scénario 3 - -## 📚 Documentation - -### Documentation Requise -- [ ] Guide d'utilisation -- [ ] Documentation API -- [ ] Exemples de code -- [ ] Guide de migration -- [ ] FAQ - -## 🔧 Implémentation - -### Étapes Proposées -1. **Phase 1** : [Description] -2. **Phase 2** : [Description] -3. **Phase 3** : [Description] - -### Estimation de Temps -- **Développement** : X jours/semaines -- **Tests** : X jours/semaines -- **Documentation** : X jours/semaines -- **Total** : X jours/semaines - -### Ressources Nécessaires -- Développeur(s) -- Testeur(s) -- Documentateur(s) -- Infrastructure - -## 🎯 Critères de Succès - -Comment mesurer le succès de cette fonctionnalité ? - -- [ ] Critère 1 -- [ ] Critère 2 -- [ ] Critère 3 - -## 🔗 Liens Utiles - -- [Documentation existante](docs/) -- [Issues similaires](https://git.4nkweb.com/4nk/4NK_node/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement) -- [Roadmap](https://git.4nkweb.com/4nk/4NK_node/projects) -- [Discussions](https://git.4nkweb.com/4nk/4NK_node/issues) - -## 📋 Checklist - -- [ ] J'ai vérifié que cette fonctionnalité n'existe pas déjà -- [ ] J'ai lu la documentation existante -- [ ] J'ai vérifié les issues similaires -- [ ] J'ai fourni des exemples d'utilisation -- [ ] J'ai considéré l'impact sur l'existant -- [ ] J'ai proposé des tests - ---- - -**Merci de votre contribution à l'amélioration de docv !** 🌟 - diff --git a/.gitea/PULL_REQUEST_TEMPLATE.md b/.gitea/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index af7fb18..0000000 --- a/.gitea/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,184 +0,0 @@ -# Pull Request - docv - -> Ce fichier est un modèle PR. Adaptez les sections à votre projet dérivé. - -## 📋 Description - -Description claire et concise des changements apportés. - -### Type de Changement -- [ ] 🐛 Bug fix -- [ ] ✨ Nouvelle fonctionnalité -- [ ] 📚 Documentation -- [ ] 🧪 Tests -- [ ] 🔧 Refactoring -- [ ] 🚀 Performance -- [ ] 🔒 Sécurité -- [ ] 🎨 Style/UI -- [ ] 🏗️ Architecture -- [ ] 📦 Build/CI - -### Composants Affectés -- [ ] Bitcoin Core -- [ ] Blindbit -- [ ] SDK Relay -- [ ] Tor -- [ ] Docker/Infrastructure -- [ ] Tests -- [ ] Documentation -- [ ] Scripts - -## 🔗 Issue(s) Liée(s) - -Fixes #(issue) -Relates to #(issue) - -## 🧪 Tests - -### Tests Exécutés -- [ ] Tests unitaires -- [ ] Tests d'intégration -- [ ] Tests de connectivité -- [ ] Tests externes -- [ ] Tests de performance -- [ ] Release Guard local (`RELEASE_TYPE=ci-verify scripts/release/guard.sh`) - -### Commandes de Test -```bash -# Tests complets -./tests/run_all_tests.sh - -# Tests spécifiques -./tests/run_unit_tests.sh -./tests/run_integration_tests.sh -``` - -### Résultats des Tests -``` -Résultats des tests ici -``` - -## 📸 Captures d'Écran - -Si applicable, ajoutez des captures d'écran pour les changements visuels. - -## 🔧 Changements Techniques - -### Fichiers Modifiés -- `fichier1.rs` - Description des changements -- `fichier2.py` - Description des changements -- `docker-compose.yml` - Description des changements - -### Nouveaux Fichiers -- `nouveau_fichier.rs` - Description -- `nouveau_script.sh` - Description - -### Fichiers Supprimés -- `ancien_fichier.rs` - Raison de la suppression - -### Changements de Configuration -```yaml -# Exemple de changement de configuration -service: - new_option: value -``` - -## 📚 Documentation - -### Documentation Mise à Jour -- [ ] README.md -- [ ] docs/INSTALLATION.md -- [ ] docs/USAGE.md -- [ ] docs/API.md -- [ ] docs/ARCHITECTURE.md - -### Nouvelle Documentation -- [ ] Nouveau guide créé -- [ ] Exemples ajoutés -- [ ] API documentée - -## 🔍 Code Review Checklist - -### Code Quality -- [ ] Le code suit les standards du projet -- [ ] Les noms de variables/fonctions sont clairs -- [ ] Les commentaires sont appropriés -- [ ] Pas de code mort ou commenté -- [ ] Gestion d'erreurs appropriée - -### Performance -- [ ] Pas de régression de performance -- [ ] Optimisations appliquées si nécessaire -- [ ] Tests de performance ajoutés - -### Sécurité -- [ ] Pas de vulnérabilités introduites -- [ ] Validation des entrées utilisateur -- [ ] Gestion sécurisée des secrets - -### Tests -- [ ] Couverture de tests suffisante -- [ ] Tests pour les cas d'erreur -- [ ] Tests d'intégration si nécessaire - -### Documentation -- [ ] Code auto-documenté -- [ ] Documentation mise à jour -- [ ] Exemples fournis - -## 🚀 Déploiement - -### Impact sur le Déploiement -- [ ] Aucun impact -- [ ] Migration de données requise -- [ ] Changement de configuration -- [ ] Redémarrage des services - -### Étapes de Déploiement -```bash -# Étapes pour déployer les changements -``` - -## 📊 Métriques - -### Impact sur les Performances -- Temps de réponse : +/- X% -- Utilisation mémoire : +/- X% -- Utilisation CPU : +/- X% - -### Impact sur la Stabilité -- Taux d'erreur : +/- X% -- Disponibilité : +/- X% - -## 🔄 Compatibilité - -### Compatibilité Ascendante -- [ ] Compatible avec les versions précédentes -- [ ] Migration automatique -- [ ] Migration manuelle requise - -### Compatibilité Descendante -- [ ] Compatible avec les futures versions -- [ ] API stable -- [ ] Configuration stable - -## 🎯 Critères de Succès - -- [ ] Critère 1 -- [ ] Critère 2 -- [ ] Critère 3 - -## 📝 Notes Supplémentaires - -Informations supplémentaires importantes pour les reviewers. - -## 🔗 Liens Utiles - -- [Documentation](docs/) -- [Tests](tests/) -- [Issues liées](https://git.4nkweb.com/4nk/4NK_node/issues) - ---- - -**Merci pour votre contribution !** 🙏 - diff --git a/.gitea/workflows/LOCAL_OVERRIDES.yml b/.gitea/workflows/LOCAL_OVERRIDES.yml deleted file mode 100644 index ddec4fe..0000000 --- a/.gitea/workflows/LOCAL_OVERRIDES.yml +++ /dev/null @@ -1,15 +0,0 @@ -# LOCAL_OVERRIDES.yml — dérogations locales contrôlées (fichier modèle) -overrides: - - path: ".gitea/workflows/ci.yml" - reason: "spécificité d’environnement" - owner: "@maintainer_handle" - expires: "2025-12-31" - - path: "scripts/scripts/auto-ssh-push.sh" - reason: "flux particulier temporaire" - owner: "@maintainer_handle" - expires: "2025-10-01" -policy: - allow_only_listed_paths: true - require_expiry: true - audit_in_ci: true - diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml deleted file mode 100644 index c3b73e2..0000000 --- a/.gitea/workflows/ci.yml +++ /dev/null @@ -1,371 +0,0 @@ -# Template CI - docv (ce fichier est un modèle, adaptez selon votre projet) -name: CI - docv - -on: - push: - branches: [ main, develop ] - pull_request: - branches: [ main, develop ] - -env: - RUST_VERSION: '1.70' - DOCKER_COMPOSE_VERSION: '2.20.0' - -jobs: - # Job de vérification du code - code-quality: - name: Code Quality - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Setup Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: ${{ env.RUST_VERSION }} - override: true - - - name: Cache Rust dependencies - uses: actions/cache@v3 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - restore-keys: | - ${{ runner.os }}-cargo- - - - name: Run clippy - run: | - cd sdk_relay - cargo clippy --all-targets --all-features -- -D warnings - - - name: Run rustfmt - run: | - cd sdk_relay - cargo fmt --all -- --check - - - name: Check documentation - run: | - cd sdk_relay - cargo doc --no-deps - - - name: Check for TODO/FIXME - run: | - if grep -r "TODO\|FIXME" . --exclude-dir=.git --exclude-dir=target; then - echo "Found TODO/FIXME comments. Please address them." - exit 1 - fi - - # Job de tests unitaires - unit-tests: - name: Unit Tests - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Setup Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: ${{ env.RUST_VERSION }} - override: true - - - name: Cache Rust dependencies - uses: actions/cache@v3 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - restore-keys: | - ${{ runner.os }}-cargo- - - - name: Run unit tests - run: | - cd sdk_relay - cargo test --lib --bins - - - name: Run integration tests - run: | - cd sdk_relay - cargo test --tests - - # Job de tests d'intégration - integration-tests: - name: Integration Tests - runs-on: ubuntu-latest - - services: - docker: - image: docker:24.0.5 - options: >- - --health-cmd "docker info" - --health-interval 10s - --health-timeout 5s - --health-retries 5 - ports: - - 2375:2375 - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Build Docker images - run: | - docker build -t 4nk-node-bitcoin ./bitcoin - docker build -t 4nk-node-blindbit ./blindbit - docker build -t 4nk-node-sdk-relay -f ./sdk_relay/Dockerfile .. - - - name: Run integration tests - run: | - # Tests de connectivité de base - ./tests/run_connectivity_tests.sh || true - - # Tests d'intégration - ./tests/run_integration_tests.sh || true - - - name: Upload test results - uses: actions/upload-artifact@v3 - if: always() - with: - name: test-results - path: | - tests/logs/ - tests/reports/ - retention-days: 7 - - # Job de tests de sécurité - security-tests: - name: Security Tests - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Setup Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: ${{ env.RUST_VERSION }} - override: true - - - name: Run cargo audit - run: | - cd sdk_relay - cargo audit --deny warnings - - - name: Check for secrets - run: | - # Vérifier les secrets potentiels - if grep -r "password\|secret\|key\|token" . --exclude-dir=.git --exclude-dir=target --exclude=*.md; then - echo "Potential secrets found. Please review." - exit 1 - fi - - - name: Check file permissions - run: | - # Vérifier les permissions sensibles - find . -type f -perm /0111 -name "*.conf" -o -name "*.key" -o -name "*.pem" | while read file; do - if [[ $(stat -c %a "$file") != "600" ]]; then - echo "Warning: $file has insecure permissions" - fi - done - - # Job de build et test Docker - docker-build: - name: Docker Build & Test - runs-on: ubuntu-latest - - services: - docker: - image: docker:24.0.5 - options: >- - --health-cmd "docker info" - --health-interval 10s - --health-timeout 5s - --health-retries 5 - ports: - - 2375:2375 - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Build and test Bitcoin Core - run: | - docker build -t 4nk-node-bitcoin:test ./bitcoin - docker run --rm 4nk-node-bitcoin:test bitcoin-cli --version - - - name: Build and test Blindbit - run: | - docker build -t 4nk-node-blindbit:test ./blindbit - docker run --rm 4nk-node-blindbit:test --version || true - - - name: Build and test SDK Relay - run: | - docker build -t 4nk-node-sdk-relay:test -f ./sdk_relay/Dockerfile .. - docker run --rm 4nk-node-sdk-relay:test --version || true - - - name: Test Docker Compose - run: | - docker-compose config - docker-compose build --no-cache - - # Job de tests de documentation - documentation-tests: - name: Documentation Tests - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Check markdown links - run: | - # Vérification basique des liens markdown - find . -name "*.md" -exec grep -l "\[.*\](" {} \; | while read file; do - echo "Checking links in $file" - done - - - name: Check documentation structure - run: | - # Vérifier la présence des fichiers de documentation essentiels - required_files=( - "README.md" - "LICENSE" - "CONTRIBUTING.md" - "CHANGELOG.md" - "CODE_OF_CONDUCT.md" - "SECURITY.md" - "docs/INDEX.md" - "docs/INSTALLATION.md" - "docs/USAGE.md" - ) - - for file in "${required_files[@]}"; do - if [[ ! -f "$file" ]]; then - echo "Missing required documentation file: $file" - exit 1 - fi - done - - - name: Validate documentation - run: | - echo "Validation documentation générique (adaptée au projet)" - - security-audit: - name: Security Audit - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v3 - - name: Ensure scripts executable - run: | - chmod +x scripts/security/audit.sh || true - - name: Run template security audit - run: | - if [ -f scripts/security/audit.sh ]; then - ./scripts/security/audit.sh - else - echo "No security audit script (ok)" - fi - - # Job de release guard (cohérence release) - release-guard: - name: Release Guard - runs-on: ubuntu-latest - needs: [code-quality, unit-tests, documentation-tests, security-audit] - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Ensure guard scripts are executable - run: | - chmod +x scripts/release/guard.sh || true - chmod +x scripts/checks/version_alignment.sh || true - - - name: Version alignment check - run: | - if [ -f scripts/checks/version_alignment.sh ]; then - ./scripts/checks/version_alignment.sh - else - echo "No version alignment script (ok)" - fi - - docker-build: - name: Docker Build - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v3 - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Build Docker image - run: | - docker build -t docv:latest . - - - name: Release guard (CI verify) - env: - RELEASE_TYPE: ci-verify - run: | - if [ -f scripts/release/guard.sh ]; then - ./scripts/release/guard.sh - else - echo "No guard script (ok)" - fi - - # Job de tests de performance - performance-tests: - name: Performance Tests - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Setup Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: ${{ env.RUST_VERSION }} - override: true - - - name: Run performance tests - run: | - cd sdk_relay - cargo test --release --test performance_tests || true - - - name: Check memory usage - run: | - # Tests de base de consommation mémoire - echo "Performance tests completed" - - # Job de notification - notify: - name: Notify - runs-on: ubuntu-latest - needs: [code-quality, unit-tests, integration-tests, security-tests, docker-build, documentation-tests] - if: always() - - steps: - - name: Notify success - if: needs.code-quality.result == 'success' && needs.unit-tests.result == 'success' && needs.integration-tests.result == 'success' && needs.security-tests.result == 'success' && needs.docker-build.result == 'success' && needs.documentation-tests.result == 'success' - run: | - echo "✅ All tests passed successfully!" - - - name: Notify failure - if: needs.code-quality.result == 'failure' || needs.unit-tests.result == 'failure' || needs.integration-tests.result == 'failure' || needs.security-tests.result == 'failure' || needs.docker-build.result == 'failure' || needs.documentation-tests.result == 'failure' - run: | - echo "❌ Some tests failed!" - exit 1 diff --git a/.gitea/workflows/template-sync.yml b/.gitea/workflows/template-sync.yml deleted file mode 100644 index bd5500d..0000000 --- a/.gitea/workflows/template-sync.yml +++ /dev/null @@ -1,40 +0,0 @@ -# .gitea/workflows/template-sync.yml — synchronisation et contrôles d’intégrité (fichier modèle) -name: 4NK Template Sync -on: - schedule: # planification régulière - - cron: "0 4 * * 1" # exécution hebdomadaire (UTC) - workflow_dispatch: {} # déclenchement manuel - -jobs: - check-and-sync: - runs-on: ubuntu-latest - steps: - - name: Lire TEMPLATE_VERSION et .4nk-sync.yml - # Doit charger ref courant, source_repo et périmètre paths - - - name: Récupérer la version publiée du template/4NK_rules - # Doit comparer TEMPLATE_VERSION avec ref amont - - - name: Créer branche de synchronisation si divergence - # Doit créer chore/template-sync- et préparer un commit - - - name: Synchroniser les chemins autoritatifs - # Doit mettre à jour .cursor/**, .gitea/**, AGENTS.md, scripts/**, docs/SSH_UPDATE.md - - - name: Contrôles post-sync (bloquants) - # 1) Vérifier présence et exécutable des scripts/*.sh - # 2) Vérifier mise à jour CHANGELOG.md et docs/INDEX.md - # 3) Vérifier docs/SSH_UPDATE.md si scripts/** a changé - # 4) Vérifier absence de secrets en clair dans scripts/** - # 5) Vérifier manifest_checksum si publié - - - name: Tests, lint, sécurité statique - # Doit exiger un état vert - - - name: Ouvrir PR de synchronisation - # Titre: "[template-sync] chore: aligner .cursor/.gitea/AGENTS.md/scripts" - # Doit inclure résumé des fichiers modifiés et la version appliquée - - - name: Mettre à jour TEMPLATE_VERSION (dans PR) - # Doit remplacer la valeur par la ref appliquée - diff --git a/.gitignore b/.gitignore index ef97f59..4038ccc 100644 --- a/.gitignore +++ b/.gitignore @@ -20,12 +20,6 @@ yarn-error.log* # env files .env* -# vercel -.vercel - # typescript *.tsbuildinfo -next-env.d.ts -!.cursor/ - -!AGENTS.md +next-env.d.ts \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md deleted file mode 100644 index 8c9738b..0000000 --- a/AGENTS.md +++ /dev/null @@ -1,275 +0,0 @@ -# AGENTS.md - -## Table des matières -- [Introduction](#introduction) -- [Principes communs](#principes-communs) -- [Agents fondamentaux](#agents-fondamentaux) -- [Agents spécialisés documentation](#agents-spécialisés-documentation) -- [Agents spécialisés tests](#agents-spécialisés-tests) -- [Agents techniques](#agents-techniques) -- [Agents frontend](#agents-frontend) -- [Agents open source et CI](#agents-open-source-et-ci) -- [Agents de synchronisation et dérogations](#agents-de-synchronisation-et-d%C3%A9rogations) -- [Matrice de coordination](#matrice-de-coordination) -- [Conclusion](#conclusion) - ---- - -## 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`. -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`). - ---- - -## Principes communs -- Langue exclusive : français. -- Pas d’exemples de code applicatif injectés dans la base. -- Toute contribution doit contenir une introduction et/ou une conclusion. -- Interdiction de secrets en clair dans le dépôt. -- Confirmation nécessaire avant `push` et `tag`. -- 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). - ---- - -## Agents fondamentaux - -### Agent Fondation (Responsable) -**Missions** -- Garantir la conformité éditoriale : français, pas d’exemples applicatifs, introduction/conclusion. -- Vérifier la cohérence terminologique. - -**Artefacts** -- Tous fichiers. - ---- - -### Agent Structure (Responsable) -**Missions** -- Maintenir l’arborescence canonique (incluant `.cursor/`, `.gitea/`, `scripts/`, `docs/SSH_UPDATE.md`). -- Archiver le contenu obsolète dans `archive/` avec métadonnées. -- Interdire toute suppression non tracée. - -**Artefacts** -- `archive/`, `docs/**`, `tests/**`, `.cursor/**`, `.gitea/**`, `scripts/**`, `CHANGELOG.md`. - ---- - -## Agents spécialisés documentation - -### Agent Documentation (Responsable) -**Missions** -- Mettre à jour `docs/**` selon l’impact des changements. -- Tenir `docs/INDEX.md` comme table des matières centrale. -- Produire des REX techniques dans `archive/` en cas d’investigations multiples. - -**Artefacts** -- `docs/**`, `README.md`, `archive/**`. - ---- - -### Agent Données CSV (Responsable) -**Missions** -- 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. -- Corriger et documenter les incohérences de types. - -**Artefacts** -- `docs/API.md`, `docs/ARCHITECTURE.md`, `docs/USAGE.md`. - ---- - -### Agent Documents bureautiques (Consulté) -**Missions** -- Lire `.docx` via `docx2txt`; proposer des alternatives en cas d’échec. -- Documenter les imports dans `docs/INDEX.md`. - -**Artefacts** -- `docs/**`, `archive/**`. - ---- - -## Agents spécialisés tests - -### Agent Tests (Responsable) -**Missions** -- Couvrir `unit`, `integration`, `connectivity`, `performance`, `external`. -- Gérer `tests/logs` et `tests/reports`. -- Exiger des tests verts avant commit. - -**Artefacts** -- `tests/**`, `docs/TESTING.md`. - ---- - -### Agent Performance (Consulté) -**Missions** -- Réaliser des benchmarks reproductibles. -- Valider l’impact performance avant fusion. - -**Artefacts** -- `tests/performance/`, `tests/reports/`, `docs/TESTING.md`. - ---- - -## Agents techniques - -### Agent Dépendances (Responsable) -**Missions** -- Ajouter les dépendances manquantes lorsque justifié. -- Vérifier les dernières versions stables. -- Documenter les impacts dans `ARCHITECTURE.md`, `CONFIGURATION.md`, `CHANGELOG.md`. - -**Artefacts** -- `docs/ARCHITECTURE.md`, `docs/CONFIGURATION.md`, `CHANGELOG.md`. - ---- - -### Agent Compilation (Responsable) -**Missions** -- Compiler très régulièrement et aux étapes critiques. -- Bloquer toute progression en cas d’erreurs de build/runtime. - -**Artefacts** -- Artefacts de build, scripts d’outillage. - ---- - -### Agent Résolution (Responsable) -**Missions** -- 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. - -**Artefacts** -- `tests/**`, `archive/**` - ---- - -### Agent SSH & scripts (Responsable) -**Missions** -- Garantir la présence et l’usage correct de `scripts/auto-ssh-push.sh`, `scripts/init-ssh-env.sh`, `scripts/setup-ssh-ci.sh`. -- Assurer permissions d’exécution, idempotence, journalisation non sensible, gestion d’erreurs robuste. -- Interdire secrets en clair, gérer via secrets CI et variables d’environnement. -- Exiger la mise à jour de `docs/SSH_UPDATE.md` à toute évolution des scripts ou des flux SSH. - -**Artefacts** -- `scripts/**`, `.gitea/workflows/ci.yml`, `docs/SSH_UPDATE.md`, `docs/CONFIGURATION.md`, `CHANGELOG.md`. - ---- - -## Agents frontend - -### Agent Frontend (Responsable) -**Missions** -- Mettre en place `React.lazy`/`Suspense` (code splitting). -- Centraliser l’état (Redux ou Context API). -- Abstraire les services de données. - -**Artefacts** -- `docs/ARCHITECTURE.md`, `docs/TESTING.md`. - ---- - -## Agents open source et CI - -### Agent Open Source (Responsable) -**Missions** -- Maintenir : `LICENSE`, `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, `docs/OPEN_SOURCE_CHECKLIST.md`. -- Vérifier l’alignement continu avec `4NK_node`. - -**Artefacts** -- Fichiers de gouvernance cités ci-dessus. - ---- - -### Agent Gitea (Responsable) -**Missions** -- Garantir `.gitea/ISSUE_TEMPLATE/*`, `PULL_REQUEST_TEMPLATE.md`, `.gitea/workflows/ci.yml`. -- Documenter la configuration distante dans `docs/GITEA_SETUP.md`. -- Déclencher les étapes CI pertinentes (tests, lint, sécurité, vérifs `scripts/`). - -**Artefacts** -- `.gitea/**`, `docs/GITEA_SETUP.md`. - ---- - -### Agent Versionnage (Responsable) -**Missions** -- Tenir `CHANGELOG.md` comme source unique de vérité. -- Proposer un bump sémantique justifié. -- Demander confirmation avant push et tag. - - Orchestrer le `release-guard` (CI + scripts) et consigner latest vs wip. - -**Artefacts** -- `CHANGELOG.md`, `docs/RELEASE_PLAN.md`, `docs/ROADMAP.md`. - ---- - -### Agent Sécurité (Responsable) -**Missions** -- Mettre en place et exécuter `scripts/security/audit.sh` (npm audit, cargo audit si applicable, scan de secrets). -- Interdire les secrets en clair; assurer la rotation des secrets CI. -- Vérifier permissions et non‑exposition d’endpoints privés. -- Bloquer la release si l’audit échoue (intégré au `release-guard`). - -**Artefacts** -- `scripts/security/audit.sh`, `.gitea/workflows/ci.yml` (job `security-audit`), `docs/SECURITY_AUDIT.md`, `SECURITY.md`. - ---- - -## Agents de synchronisation et dérogations - -### Agent Synchronisation de template (Accountable) -**Références** -- `.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`. - -**Missions** -- Assurer l’alignement 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. -- Exiger la mise à jour de `CHANGELOG.md` et `docs/INDEX.md` après synchronisation. -- Vérifier l’intégrité (`manifest_checksum`, checksums de fichiers si publiés), les permissions, l’absence de secrets. -- Mettre à jour `TEMPLATE_VERSION` dans la PR. - -**Artefacts** -- `.4nk-sync.yml`, `TEMPLATE_VERSION`, `.cursor/**`, `.gitea/**`, `AGENTS.md`, `scripts/**`, `docs/SSH_UPDATE.md`, `CHANGELOG.md`. - ---- - -### Agent Dérogations locales (Responsable) -**Références** -- `LOCAL_OVERRIDES.yml` (facultatif, mais recommandé). - -**Missions** -- 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. -- Auditer périodiquement et résorber les dérogations. - -**Artefacts** -- `LOCAL_OVERRIDES.yml`, `CHANGELOG.md` (mentionner les dérogations significatives). - ---- - -## Matrice de coordination - -| Type de changement | Agents impliqués | Artefacts principaux | Validation obligatoire | -|----------------------------------|----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|------------------------| -| Ajout de fonctionnalité | Documentation, Tests, Dépendances, Frontend | `docs/API.md`, `docs/USAGE.md`, `docs/ARCHITECTURE.md`, `tests/unit`, `tests/integration`, `CHANGELOG.md` (*Added*) | Oui | -| Correction de bug | Résolution, Tests, Documentation | `tests/unit`, `docs/TESTING.md`, `archive/` (REX si nécessaire), `CHANGELOG.md` (*Fixed*) | Oui | -| Refactorisation / amélioration | Structure, Documentation, Compilation | `docs/ARCHITECTURE.md`, `archive/`, `CHANGELOG.md` (*Changed*) | Oui | -| Dépendance ajoutée/mise à jour | Dépendances, Compilation, Documentation | `docs/ARCHITECTURE.md`, `docs/CONFIGURATION.md`, `CHANGELOG.md` (*Dependencies*) | Oui | -| Données CSV modifiées | Données CSV, Documentation, Tests | `docs/API.md`, `docs/ARCHITECTURE.md`, `docs/USAGE.md`, `tests/unit`, `CHANGELOG.md` (*Data model update*) | Oui | -| Migration / breaking change | Documentation, Tests, Résolution, Versionnage | `docs/MIGRATION.md`, `docs/INSTALLATION.md`, `docs/RELEASE_PLAN.md`, `docs/ROADMAP.md`, `tests/integration`, `CHANGELOG.md` (*Breaking*) | Oui | -| Sécurité / audit | Documentation, Tests, Open Source, Sécurité proactive | `docs/SECURITY_AUDIT.md`, `tests/external`, `tests/connectivity`, `CHANGELOG.md` (*Security*) | Oui | -| Préparation open source / CI | Open Source, Gitea, Versionnage, Documentation communautaire, Contributeurs externes | `.gitea/**`, `docs/GITEA_SETUP.md`, `docs/OPEN_SOURCE_CHECKLIST.md`, `CHANGELOG.md` (*CI/CD* / *Governance*) | Oui | -| Optimisation performance | Performance, Tests, Documentation | `tests/performance`, `tests/reports`, `docs/ARCHITECTURE.md`, `CHANGELOG.md` (*Performance*) | Oui | -| Évolution frontend | Frontend, Documentation, Tests | `docs/ARCHITECTURE.md`, `docs/USAGE.md`, `tests/integration`, `CHANGELOG.md` (*Frontend*) | Oui | -| Évolution CI/CD ou scripts SSH | SSH & scripts, Gitea, Versionnage, Documentation | `scripts/**`, `.gitea/workflows/ci.yml`, `docs/SSH_UPDATE.md`, `docs/CONFIGURATION.md`, `CHANGELOG.md` (*CI/CD*) | Oui | -| **Synchronisation de template** | **Synchronisation de template**, Gitea, Versionnage, Structure, Documentation, SSH & scripts | `.4nk-sync.yml`, `TEMPLATE_VERSION`, `.cursor/**`, `.gitea/**`, `AGENTS.md`, `scripts/**`, `docs/SSH_UPDATE.md`, `CHANGELOG.md` | **Oui** | -| Dérogation locale contrôlée | Dérogations locales, Gitea, Synchronisation de template, Versionnage | `LOCAL_OVERRIDES.yml`, `CHANGELOG.md` (mention), CI tolérante uniquement sur chemins listés et non expirés | Oui | - ---- - -## 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 l’ensemble 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`. diff --git a/CHANGELOG.md b/CHANGELOG.md index cc85a54..3ccb8a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,12 @@ -# Changelog - docv +### 0.2.0 - 2025-09-04 -## [Unreleased] +- Invitations: remplacement du QR par passphrase (4 mots BIP‑39 FR + code 6) et envoi email optionnel (rôle, contexte, passphrase, lien). +- Users: ajout du titre de document/dossier dans la modale d’invitation, notification avec récap (mots + code). +- UI Chat: suppression des boutons Téléphone et Vidéo. +- Libellés: « Changer de storage » → « Conservation », « Télécharger certificats » → « Certificats », « Configurer les rôles » → « Rôles ». +- Navigation: remplacement « Documents/Dossiers » par onglets par type (`/dashboard/folders?type=...`). +- Paramètres: icône rétablie dans la barre haute (accès `/dashboard/settings`). +- Indicateur clé privée: icône clé qui flashe en rouge 0,4 s à l’événement `private-key-access`. +- Correctifs: alignement des colonnes « Accès » et « Statut » dans la liste des dossiers; stabilisation des hooks du layout pour corriger l’erreur React #310. -## [0.1.0] - 2025-08-27 -### Changed -- Release latest (sécurité/CI/docs). diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md deleted file mode 100644 index e0da3d7..0000000 --- a/DEPLOYMENT.md +++ /dev/null @@ -1,194 +0,0 @@ -# 🚀 Guide de déploiement DocV avec envoi d'emails - -## 📋 Prérequis - -### 1. Variables d'environnement -Configurez ces variables sur votre plateforme de déploiement : - -\`\`\`env -SMTP_HOST=votre-serveur-smtp -SMTP_PORT=587 -SMTP_SECURE=false -SMTP_USER=votre-email@domaine.com -SMTP_PASSWORD=votre-mot-de-passe-application -SMTP_FROM=votre-email@domaine.com -\`\`\` - -⚠️ **Important** : Utilisez toujours des mots de passe d'application, jamais vos mots de passe principaux. - -## 🌐 Déploiement sur Vercel - -### 1. Installation Vercel CLI -\`\`\`bash -npm i -g vercel -\`\`\` - -### 2. Configuration des variables -\`\`\`bash -vercel env add SMTP_HOST -vercel env add SMTP_PORT -vercel env add SMTP_SECURE -vercel env add SMTP_USER -vercel env add SMTP_PASSWORD -vercel env add SMTP_FROM -\`\`\` - -### 3. Déploiement -\`\`\`bash -vercel --prod -\`\`\` - -## 🔧 Déploiement sur Netlify - -### 1. Variables d'environnement -Dans le dashboard Netlify : -- Site settings > Environment variables -- Ajoutez toutes les variables SMTP - -### 2. Build settings -\`\`\`toml -# netlify.toml -[build] - command = "npm run build" - publish = ".next" - -[build.environment] - NODE_VERSION = "18" -\`\`\` - -## 🐳 Déploiement Docker - -### 1. Dockerfile -\`\`\`dockerfile -FROM node:18-alpine - -WORKDIR /app -COPY package*.json ./ -RUN npm ci --only=production - -COPY . . -RUN npm run build - -EXPOSE 3000 -CMD ["npm", "start"] -\`\`\` - -### 2. Variables d'environnement -\`\`\`bash -docker run -d \ - -p 3000:3000 \ - -e SMTP_HOST=votre-smtp-host \ - -e SMTP_PORT=587 \ - -e SMTP_USER=votre-email@domaine.com \ - -e SMTP_PASSWORD=votre-mot-de-passe \ - -e SMTP_FROM=votre-email@domaine.com \ - docv-app -\`\`\` - -## ✅ Test de l'envoi d'emails - -### 1. Vérification des variables -\`\`\`bash -# Sur votre serveur -echo $SMTP_HOST -echo $SMTP_USER -\`\`\` - -### 2. Test des formulaires -- Accédez à \`/contact\` -- Remplissez et envoyez le formulaire -- Vérifiez les logs serveur -- Vérifiez la réception dans votre boîte email - -## 🔍 Debugging - -### 1. Logs serveur -\`\`\`bash -# Vercel -vercel logs - -# Netlify -netlify logs - -# Docker -docker logs container-name -\`\`\` - -### 2. Test SMTP manuel -\`\`\`javascript -// test-smtp.js -const nodemailer = require('nodemailer'); - -const transporter = nodemailer.createTransport({ - host: process.env.SMTP_HOST, - port: process.env.SMTP_PORT, - secure: process.env.SMTP_SECURE === 'true', - auth: { - user: process.env.SMTP_USER, - pass: process.env.SMTP_PASSWORD, - }, -}); - -transporter.sendMail({ - from: process.env.SMTP_FROM, - to: 'test@example.com', - subject: 'Test SMTP', - text: 'Test de configuration SMTP' -}).then(() => { - console.log('✅ SMTP fonctionne'); -}).catch(err => { - console.error('❌ Erreur SMTP:', err); -}); -\`\`\` - -## 🔐 Sécurité - -### 1. Variables d'environnement -- ✅ Jamais dans le code source -- ✅ Configurées sur la plateforme de déploiement -- ✅ Différentes par environnement (dev/prod) - -### 2. Mots de passe d'application -- ✅ Utilisez des mots de passe d'application -- ✅ Pas les mots de passe principaux des comptes -- ✅ Révocables si compromis - -## 📧 Configuration par fournisseur - -### Protonmail -\`\`\`env -SMTP_HOST=smtp.protonmail.ch -SMTP_PORT=587 -SMTP_SECURE=false -\`\`\` - -### Gmail -\`\`\`env -SMTP_HOST=smtp.gmail.com -SMTP_PORT=587 -SMTP_SECURE=false -\`\`\` - -### Serveur SMTP dédié -\`\`\`env -SMTP_HOST=mail.votre-domaine.com -SMTP_PORT=587 -SMTP_SECURE=false -\`\`\` - -## 🎯 Résultat attendu - -Une fois déployé avec les bonnes variables : -- ✅ Formulaires fonctionnels -- ✅ Emails HTML formatés -- ✅ Réception dans votre boîte email -- ✅ Logs de confirmation -- ✅ Gestion d'erreurs robuste - -## 📞 Support - -En cas de problème : -1. Vérifiez les variables d'environnement -2. Consultez les logs serveur -3. Testez la configuration SMTP manuellement -4. Vérifiez les paramètres de votre fournisseur email diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 8bf23a3..0000000 --- a/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -# Multi-stage build for Debian-based Node runtime -FROM node:20-bookworm-slim AS builder -WORKDIR /app -COPY package*.json ./ -RUN npm ci || npm install -COPY . . -RUN npm run build || npm run build:prod || true - -FROM node:20-bookworm-slim -WORKDIR /app -ENV NODE_ENV=production -COPY --from=builder /app . -EXPOSE 3000 -CMD ["npm","run","start","--if-present"] diff --git a/README.md b/README.md deleted file mode 100644 index c5cc353..0000000 --- a/README.md +++ /dev/null @@ -1,372 +0,0 @@ -# 🛡️ DocV - GED Souveraine et Sécurisée - -> **Une approche révolutionnaire de la gestion documentaire avec sécurité, souveraineté et conformité garanties.** - -[![Version](https://img.shields.io/badge/version-0.1.0-blue.svg)](VERSION) -[![Next.js](https://img.shields.io/badge/Next.js-15.2.4-black.svg)](https://nextjs.org/) -[![TypeScript](https://img.shields.io/badge/TypeScript-5.0-blue.svg)](https://www.typescriptlang.org/) -[![Tailwind CSS](https://img.shields.io/badge/Tailwind%20CSS-4.1.9-38B2AC.svg)](https://tailwindcss.com/) -[![License](https://img.shields.io/badge/license-Private-red.svg)](#license) - -## 📋 Table des Matières - -- [🎯 Vue d'ensemble](#-vue-densemble) -- [✨ Fonctionnalités](#-fonctionnalités) -- [🚀 Installation Rapide](#-installation-rapide) -- [⚙️ Configuration](#️-configuration) -- [🔧 Commandes de Développement](#-commandes-de-développement) -- [📚 Documentation](#-documentation) -- [🏗️ Architecture](#️-architecture) -- [🔒 Sécurité](#-sécurité) -- [🤝 Contribution](#-contribution) -- [📞 Support](#-support) - -## 🎯 Vue d'ensemble - -**DocV** est une plateforme de gestion documentaire (GED) révolutionnaire qui combine : - -- **🔐 Authentification cryptographique** sans mots de passe -- **🤖 IA embarquée** pour l'OCR et la classification -- **🌐 Architecture souveraine** sans dépendance cloud -- **⚡ Interface conversationnelle** pour le suivi des dossiers -- **🔗 Ancrage blockchain** pour la traçabilité - -### 🎯 Cas d'Usage Principaux - -- **Entreprises** : Gestion documentaire sécurisée -- **Notaires** : Échanges documentaires via lecoffre.io -- **Secteur public** : Conformité et souveraineté des données -- **Éditeurs** : Intégration marque blanche - -## ✨ Fonctionnalités - -### 🔑 Authentification Ultra-Simplifiée -- ✅ Aucun mot de passe requis -- ✅ Aucun OTP ou code SMS -- ✅ Aucune application mobile -- ✅ Identité auto-générée et auto-portée - -### 🤖 Intelligence Artificielle Locale -- ✅ OCR automatique des documents -- ✅ Classification intelligente -- ✅ Extraction de données -- ✅ Interface conversationnelle -- ✅ Traitements 100% locaux - -### 🛡️ Sécurité de Bout en Bout -- ✅ Chiffrement natif -- ✅ Aucune interface admin exposée -- ✅ Aucun serveur d'identité -- ✅ Aucune dépendance cloud -- ✅ Conformité RGPD, ISO 27001, SecNumCloud - -### 🌐 Architecture Souveraine -- ✅ Déploiement local -- ✅ Migration automatisée -- ✅ Compatible bases existantes -- ✅ APIs souveraines -- ✅ Accompagnement personnalisé - -## 🚀 Installation Rapide - -### 📋 Prérequis - -- **Node.js** : Version 18.0+ (recommandé 20.x) -- **npm** ou **pnpm** : Gestionnaire de paquets -- **Git** : Pour le clonage du repository - -### 1️⃣ Cloner le Repository - -```bash -# Cloner le projet -git clone -cd docv - -# Installer les dépendances -npm install -# ou -pnpm install -``` - -### 2️⃣ Configuration d'Environnement - -```bash -# Créer le fichier d'environnement -cp .env.example .env.local - -# Éditer les variables d'environnement -nano .env.local -``` - -**Variables essentielles :** -```env -# Configuration de base -NEXT_PUBLIC_APP_NAME=DocV -NEXT_PUBLIC_APP_VERSION=0.1.0 - -# Base de données (si applicable) -DATABASE_URL=your_database_url - -# Authentification -NEXTAUTH_SECRET=your_secret_key -NEXTAUTH_URL=http://localhost:3000 - -# Services externes (optionnels) -EMAIL_SERVICE_API_KEY=your_email_api_key -``` - -### 3️⃣ Démarrage en Mode Développement - -```bash -# Démarrer le serveur de développement -npm run dev -# ou -pnpm dev - -# L'application sera disponible sur http://localhost:3000 -``` - -## ⚙️ Configuration - -### 🎨 Configuration de l'Interface - -Le projet utilise **Tailwind CSS** avec des composants **Radix UI** pour une interface moderne et accessible. - -```bash -# Fichier de configuration Tailwind -tailwind.config.js - -# Composants UI personnalisés -components/ui/ -``` - -### 🔧 Configuration TypeScript - -```bash -# Configuration TypeScript -tsconfig.json - -# Types personnalisés -types/ -``` - -### 📱 Configuration Responsive - -L'interface s'adapte automatiquement aux différentes tailles d'écran : -- 📱 Mobile (< 768px) -- 📟 Tablet (768px - 1024px) -- 💻 Desktop (> 1024px) - -## 🔧 Commandes de Développement - -### 🚀 Commandes Principales - -```bash -# Développement -npm run dev # Serveur de développement (port 3000) -npm run build # Build de production -npm run start # Serveur de production -npm run lint # Vérification du code - -# Tests (si configurés) -npm run test # Tests unitaires -npm run test:watch # Tests en mode watch -npm run test:coverage # Tests avec couverture - -# Maintenance -npm run clean # Nettoyer les fichiers temporaires -npm run type-check # Vérification TypeScript -``` - -### 🛠️ Commandes de Maintenance - -```bash -# Mise à jour des dépendances -npm update # Mise à jour des paquets -npm audit # Audit de sécurité -npm audit fix # Correction automatique - -# Gestion des dépendances -npm install # Installer un paquet -npm uninstall # Désinstaller un paquet -npm list # Lister les paquets installés -``` - -### 📦 Commandes de Build - -```bash -# Build de production -npm run build - -# Analyse du bundle -npm run analyze # (si configuré) - -# Build statique -npm run export # (si configuré) -``` - -### 🔍 Commandes de Debug - -```bash -# Logs détaillés -DEBUG=* npm run dev - -# Profiling -npm run dev -- --profile - -# Inspection du bundle -npm run build -- --debug -``` - -## 📚 Documentation - -### 📖 Guides Disponibles - -- **[Installation](docs/INSTALLATION.md)** - Guide d'installation complet -- **[Configuration](docs/CONFIGURATION.md)** - Configuration avancée -- **[Architecture](docs/ARCHITECTURE.md)** - Architecture technique -- **[API](docs/API.md)** - Documentation des APIs -- **[Sécurité](docs/SECURITY_AUDIT.md)** - Audit de sécurité -- **[Utilisation](docs/USAGE.md)** - Guide d'utilisation - -### 🔗 Ressources Externes - -- [Next.js Documentation](https://nextjs.org/docs) -- [Tailwind CSS](https://tailwindcss.com/docs) -- [Radix UI](https://www.radix-ui.com/docs) -- [TypeScript Handbook](https://www.typescriptlang.org/docs/) - -## 🏗️ Architecture - -### 📁 Structure du Projet - -``` -docv/ -├── app/ # Pages et routes Next.js 13+ -│ ├── dashboard/ # Interface utilisateur -│ ├── login/ # Authentification -│ ├── formation/ # Module formation -│ └── contact/ # Contact -├── components/ # Composants réutilisables -│ ├── ui/ # Composants UI de base -│ └── 4nk/ # Composants spécifiques 4NK -├── lib/ # Utilitaires et logique métier -│ ├── 4nk/ # Modules 4NK -│ └── utils.ts # Fonctions utilitaires -├── public/ # Assets statiques -├── styles/ # Styles globaux -└── docs/ # Documentation -``` - -### 🔧 Technologies Utilisées - -| Technologie | Version | Description | -|-------------|---------|-------------| -| **Next.js** | 15.2.4 | Framework React full-stack | -| **React** | 19.1.1 | Bibliothèque UI | -| **TypeScript** | 5.0+ | Typage statique | -| **Tailwind CSS** | 4.1.9 | Framework CSS | -| **Radix UI** | Latest | Composants accessibles | -| **Lucide React** | 0.454.0 | Icônes | -| **Zod** | 3.25.67 | Validation de schémas | - -### 🌐 Architecture de Sécurité - -```mermaid -graph TB - A[Client] --> B[Next.js App] - B --> C[Authentification Cryptographique] - C --> D[Base de Données Locale] - D --> E[Chiffrement Bout en Bout] - E --> F[Ancrage Blockchain] - - G[IA Locale] --> H[Traitement OCR] - H --> I[Classification] - I --> J[Extraction de Données] -``` - -## 🔒 Sécurité - -### 🛡️ Mesures de Sécurité Implémentées - -- ✅ **Authentification sans mot de passe** - Clés cryptographiques locales -- ✅ **Chiffrement bout en bout** - Données protégées en transit et au repos -- ✅ **Aucune interface admin** - Pas d'accès privilégié exposé -- ✅ **Conformité réglementaire** - RGPD, ISO 27001, SecNumCloud -- ✅ **Audit de sécurité** - Voir [SECURITY_AUDIT.md](docs/SECURITY_AUDIT.md) - -### 🔐 Bonnes Pratiques - -1. **Variables d'environnement** - Jamais de secrets en dur -2. **Validation des données** - Schémas Zod pour toutes les entrées -3. **HTTPS obligatoire** - En production uniquement -4. **Audit régulier** - `npm audit` avant chaque déploiement - -## 🤝 Contribution - -### 🚀 Comment Contribuer - -1. **Fork** le repository -2. **Créer** une branche feature (`git checkout -b feature/amazing-feature`) -3. **Commit** vos changements (`git commit -m 'Add amazing feature'`) -4. **Push** vers la branche (`git push origin feature/amazing-feature`) -5. **Ouvrir** une Pull Request - -### 📝 Standards de Code - -- **TypeScript** strict activé -- **ESLint** pour la qualité du code -- **Prettier** pour le formatage -- **Conventional Commits** pour les messages - -### 🧪 Tests - -```bash -# Avant de contribuer, assurez-vous que : -npm run lint # ✅ Pas d'erreurs ESLint -npm run type-check # ✅ Pas d'erreurs TypeScript -npm run build # ✅ Build réussi -``` - -## 📞 Support - -### 🆘 Obtenir de l'Aide - -- **📧 Email** : contact@docv.fr -- **📚 Documentation** : [docs/](docs/) -- **🐛 Issues** : [GitHub Issues](https://github.com/your-org/docv/issues) -- **💬 Discussions** : [GitHub Discussions](https://github.com/your-org/docv/discussions) - -### 🏢 Entreprise - -**4NK** - Pionnier du Web 5.0 -- 🏢 Solutions de souveraineté -- 🔒 Sécurité de bout en bout -- 🌐 Architecture distribuée - -### 📋 Checklist de Support - -Avant de demander de l'aide, vérifiez : - -- [ ] Version de Node.js compatible (18.0+) -- [ ] Dépendances installées (`npm install`) -- [ ] Variables d'environnement configurées -- [ ] Logs d'erreur consultés -- [ ] Documentation parcourue - ---- - -## 📄 Licence - -Ce projet est propriétaire et confidentiel. Tous droits réservés à **4NK**. - ---- - -
- -**🛡️ DocV - Sécurisez votre entreprise avec la GED simple et souveraine** - -[![4NK](https://img.shields.io/badge/By-4NK-blue.svg)](https://4nkweb.com) -[![Contact](https://img.shields.io/badge/Contact-contact@docv.fr-green.svg)](mailto:contact@docv.fr) - -
diff --git a/VERSION b/VERSION deleted file mode 100644 index b82608c..0000000 --- a/VERSION +++ /dev/null @@ -1 +0,0 @@ -v0.1.0 diff --git a/app/actions/users.ts b/app/actions/users.ts new file mode 100644 index 0000000..d462ba9 --- /dev/null +++ b/app/actions/users.ts @@ -0,0 +1,16 @@ +"use server" + +import { sendUserInviteEmail } from "@/lib/email" + +export async function sendInviteEmailAction(params: { email: string; role: string; words: string[]; code: string; resourceTitle?: string; link?: string }) { + try { + const { email, link, role, words, code, resourceTitle } = params + if (!email || !role || !words || words.length !== 4 || !code) { + return { success: false, error: "Paramètres manquants" } + } + const res = await sendUserInviteEmail({ recipientEmail: email, role, words, code, resourceTitle, inviteLink: link }) + return res + } catch (e: any) { + return { success: false, error: e.message } + } +} diff --git a/app/dashboard/chat/page.tsx b/app/dashboard/chat/page.tsx index 15e113f..e112311 100644 --- a/app/dashboard/chat/page.tsx +++ b/app/dashboard/chat/page.tsx @@ -1,607 +1,7 @@ "use client" -import { useState, useEffect } from "react" -import { Badge } from "@/components/ui/badge" -import { Button } from "@/components/ui/button" -import { Input } from "@/components/ui/input" -import { Textarea } from "@/components/ui/textarea" -import { - MessageSquare, - Search, - Plus, - Send, - Paperclip, - Smile, - Phone, - Video, - MoreHorizontal, - Users, - Circle, - CheckCheck, - Clock, - File, - Download, - Brain, - Shield, - TrendingUp, - CheckCircle, - FileText, - BarChart3, - Zap, -} from "lucide-react" -import { useSearchParams } from "next/navigation" +import Chat from "@/components/4nk/Chat" export default function ChatPage() { - const [selectedConversation, setSelectedConversation] = useState("1") - const [newMessage, setNewMessage] = useState("") - const [searchTerm, setSearchTerm] = useState("") - - const searchParams = useSearchParams() - const userId = searchParams.get("user") - const messageType = searchParams.get("message") - const groupType = searchParams.get("type") - - useEffect(() => { - // Gérer les nouveaux messages depuis les autres pages - if (messageType === "new") { - if (userId) { - // Message individuel - const messageData = sessionStorage.getItem("newMessage") - if (messageData) { - const data = JSON.parse(messageData) - console.log("Nouveau message individuel:", data) - - // Créer ou ouvrir la conversation avec cet utilisateur - setSelectedConversation(userId) - - // Ajouter le message pré-rempli - setNewMessage(`${data.subject ? `[${data.subject}] ` : ""}${data.content}`) - - // Nettoyer le sessionStorage - sessionStorage.removeItem("newMessage") - - // Notification - showNotification("info", `Conversation ouverte avec ${data.userName}`) - } - } else if (groupType === "group") { - // Message de groupe - const groupData = sessionStorage.getItem("newGroupMessage") - if (groupData) { - const data = JSON.parse(groupData) - console.log("Nouveau message de groupe:", data) - - // Créer une nouvelle conversation de groupe - const groupName = `Groupe (${data.users.length} membres)` - setSelectedConversation("group-new") - - // Ajouter le message pré-rempli - setNewMessage(`${data.subject ? `[${data.subject}] ` : ""}${data.content}`) - - // Nettoyer le sessionStorage - sessionStorage.removeItem("newGroupMessage") - - // Notification - showNotification("info", `Conversation de groupe créée avec ${data.users.length} utilisateur(s)`) - } - } - } - }, [userId, messageType, groupType]) - - const showNotification = (type: "success" | "error" | "info", message: string) => { - // Implémenter la notification (peut utiliser toast ou état local) - console.log(`${type.toUpperCase()}: ${message}`) - } - - const conversations = [ - { - id: "1", - name: "Marie Dubois", - type: "direct", - avatar: "MD", - lastMessage: "Parfait, merci pour la validation !", - lastMessageTime: "14:32", - unreadCount: 0, - isOnline: true, - isTyping: false, - }, - { - id: "2", - name: "Équipe Juridique", - type: "group", - avatar: "EJ", - lastMessage: "IA DocV: Analyse terminée pour Contrat_Client_ABC.pdf", - lastMessageTime: "13:45", - unreadCount: 1, - isOnline: false, - isTyping: false, - members: 5, - }, - { - id: "3", - name: "Sophie Laurent", - type: "direct", - avatar: "SL", - lastMessage: "Pouvez-vous m'envoyer le rapport ?", - lastMessageTime: "12:20", - unreadCount: 1, - isOnline: false, - isTyping: false, - }, - { - id: "4", - name: "Direction", - type: "group", - avatar: "DIR", - lastMessage: "Réunion reportée à demain 10h", - lastMessageTime: "11:15", - unreadCount: 0, - isOnline: false, - isTyping: false, - members: 3, - }, - { - id: "5", - name: "Thomas Rousseau", - type: "direct", - avatar: "TR", - lastMessage: "Merci pour l'info !", - lastMessageTime: "Hier", - unreadCount: 0, - isOnline: true, - isTyping: true, - }, - ] - - const messages = [ - { - id: "1", - senderId: "marie", - senderName: "Marie Dubois", - content: "Bonjour ! J'ai besoin de votre avis sur le nouveau contrat client.", - timestamp: "14:20", - type: "text", - status: "read", - }, - { - id: "2", - senderId: "me", - senderName: "Moi", - content: "Bien sûr, pouvez-vous me l'envoyer ?", - timestamp: "14:22", - type: "text", - status: "read", - }, - { - id: "3", - senderId: "marie", - senderName: "Marie Dubois", - content: "", - timestamp: "14:25", - type: "file", - fileName: "Contrat_Client_ABC.pdf", - fileSize: "2.3 MB", - status: "read", - }, - { - id: "4", - senderId: "me", - senderName: "Moi", - content: "J'ai relu le contrat, tout me semble correct. Les clauses de confidentialité sont bien définies.", - timestamp: "14:30", - type: "text", - status: "read", - }, - { - id: "5", - senderId: "marie", - senderName: "Marie Dubois", - content: "Parfait, merci pour la validation !", - timestamp: "14:32", - type: "text", - status: "delivered", - }, - { - id: "6", - senderId: "ai", - senderName: "IA DocV", - content: `📄 **Analyse IA du document "Contrat_Client_ABC.pdf"** - -**Type de document :** PDF (2.3 MB) -**Statut :** ✅ Validé -**Dernière modification :** Il y a 2 heures - -**📊 Analyse du contenu :** -• Document juridique détecté avec haute précision -• 3 tag(s) identifié(s) : contrat, client, juridique -• Résumé automatique disponible -• 47 pages analysées -• 12 clauses contractuelles détectées - -**🎯 Métriques de qualité :** -• Lisibilité : 92% -• Conformité juridique : 100% -• Sécurité documentaire : Maximale -• Complétude des informations : 95% - -**🔍 Points clés identifiés :** -• Durée du contrat : 12 mois -• Montant total : 150 000€ HT -• Clauses de confidentialité : ✅ Présentes et conformes -• Propriété intellectuelle : ✅ Bien définie -• Conditions de résiliation : ✅ Équilibrées - -**🛡️ Analyse de conformité RGPD :** -• Données personnelles : ⚠️ Détectées (coordonnées client) -• Durée de conservation : Conforme (7 ans) -• Droit à l'oubli : Applicable après expiration -• Consentement : ✅ Explicite - -**⚡ Recommandations :** -• ✅ Document prêt pour signature -• 📋 Archivage permanent recommandé -• 🔄 Révision suggérée dans 11 mois -• 📧 Notification client automatique activée - -**📈 Score global : 94/100** - -*Analyse générée automatiquement par l'IA DocV - Fiabilité : 98%*`, - timestamp: "14:35", - type: "ai_analysis", - status: "delivered", - analysisType: "document", - documentName: "Contrat_Client_ABC.pdf", - confidence: 98, - processingTime: "2.3s", - }, - { - id: "7", - senderId: "ai", - senderName: "IA DocV", - content: `🔍 **Analyse comparative - Dossier Contrats** - -**📊 Analyse de 8 documents similaires :** -• Contrats clients : 5 documents -• Avenants : 2 documents -• Conditions générales : 1 document - -**📈 Tendances identifiées :** -• Montant moyen des contrats : +15% vs trimestre précédent -• Durée moyenne : 14 mois (stable) -• Taux de renouvellement : 87% (↗️ +5%) - -**⚠️ Points d'attention :** -• 2 contrats expirent dans les 30 jours -• 1 clause de révision tarifaire à activer -• Mise à jour RGPD requise sur 3 documents - -**🎯 Actions recommandées :** -1. Planifier renouvellement contrats Q1 2024 -2. Standardiser les clauses de confidentialité -3. Créer un modèle basé sur ce contrat (performance optimale) - -*Analyse prédictive activée - Prochaine révision : 15 février 2024*`, - timestamp: "14:37", - type: "ai_analysis", - status: "delivered", - analysisType: "comparative", - confidence: 95, - processingTime: "4.1s", - }, - ] - - const filteredConversations = conversations.filter((conv) => - conv.name.toLowerCase().includes(searchTerm.toLowerCase()), - ) - - const currentConversation = conversations.find((conv) => conv.id === selectedConversation) - - const handleSendMessage = () => { - if (newMessage.trim()) { - // Ici on ajouterait la logique pour envoyer le message - console.log("Sending message:", newMessage) - setNewMessage("") - } - } - - const getStatusIcon = (status: string) => { - switch (status) { - case "sent": - return - case "delivered": - return - case "read": - return - default: - return null - } - } - - const getAnalysisIcon = (analysisType: string) => { - switch (analysisType) { - case "document": - return - case "comparative": - return - case "security": - return - case "performance": - return - default: - return - } - } - - const renderAIMessage = (message: any) => { - return ( -
-
- {/* AI Header */} -
-
- -
-
- IA DocV - - {getAnalysisIcon(message.analysisType)} - - {message.analysisType === "document" - ? "Analyse Document" - : message.analysisType === "comparative" - ? "Analyse Comparative" - : "Analyse IA"} - - - {message.confidence && ( - - - {message.confidence}% fiable - - )} -
-
- - {/* AI Message Content */} -
-
-
{message.content}
-
- - {/* AI Message Footer */} -
-
-
- - Traité en {message.processingTime} -
- {message.documentName && ( -
- - {message.documentName} -
- )} -
-
- {message.timestamp} -
{getStatusIcon(message.status)}
-
-
-
-
-
- ) - } - - return ( -
- {/* Sidebar - Conversations */} -
- {/* Header */} -
-
-

Messages

- -
-
- - setSearchTerm(e.target.value)} - className="pl-10" - /> -
-
- - {/* Conversations List */} -
- {filteredConversations.map((conversation) => ( -
setSelectedConversation(conversation.id)} - className={`p-4 border-b cursor-pointer hover:bg-gray-50 ${ - selectedConversation === conversation.id ? "bg-blue-50 border-r-2 border-blue-500" : "" - }`} - > -
-
-
- {conversation.type === "group" ? ( - - ) : ( - {conversation.avatar} - )} -
- {conversation.isOnline && conversation.type === "direct" && ( - - )} -
-
-
-

{conversation.name}

- {conversation.lastMessageTime} -
-
-

- {conversation.isTyping ? ( - En train d'écrire... - ) : ( - - {conversation.lastMessage} - - )} -

- {conversation.unreadCount > 0 && ( - - {conversation.unreadCount} - - )} -
- {conversation.type === "group" && ( -

{conversation.members} membres

- )} -
-
-
- ))} -
-
- - {/* Main Chat Area */} -
- {currentConversation ? ( - <> - {/* Chat Header */} -
-
-
-
-
- {currentConversation.type === "group" ? ( - - ) : ( - {currentConversation.avatar} - )} -
- {currentConversation.isOnline && currentConversation.type === "direct" && ( - - )} -
-
-

{currentConversation.name}

-

- {currentConversation.type === "group" - ? `${currentConversation.members} membres` - : currentConversation.isOnline - ? "En ligne" - : "Hors ligne"} -

-
-
-
- - - -
-
-
- - {/* Messages */} -
- {messages.map((message) => ( -
- {message.type === "ai_analysis" ? ( - renderAIMessage(message) - ) : ( -
-
- {message.type === "text" ? ( -

{message.content}

- ) : message.type === "file" ? ( -
- -
-

{message.fileName}

-

{message.fileSize}

-
- -
- ) : null} -
- {message.timestamp} - {message.senderId === "me" &&
{getStatusIcon(message.status)}
} -
-
-
- )} -
- ))} -
- - {/* Message Input */} -
-
- -
-