labfy-investigation/docs/CONVENTIONS.md
2026-07-15 23:10:24 +02:00

3.2 KiB

Conventions de développement

Version : 1.0


Philosophie

Labfy Investigation est développé comme un logiciel d'enquête numérique.

Les choix d'architecture privilégient :

  • la lisibilité ;
  • la maintenabilité ;
  • la robustesse ;
  • la traçabilité ;
  • la simplicité.

Une solution simple et cohérente est toujours préférée à une solution complexe.


Langue

Le domaine métier est écrit en français.

Exemples :

  • preuve
  • entite
  • personne
  • source
  • chronologie
  • journal
  • hypothese
  • recherche

Les standards techniques conservent leur nom d'origine.

Exemples :

  • uuid
  • sha256
  • mime_type
  • sqlite
  • created_at
  • updated_at
  • relative_path

Architecture

Le projet est organisé par domaine métier.

Exemple :

preuve
    ↓
preuve.h
preuve.c

entite
    ↓
entite.h
entite.c

Chaque module possède une responsabilité unique.


SQL

Une table représente un objet métier.

Une table importante possède :

  • une structure C ;
  • un module C ;
  • des tests.

Les objets métier utilisent :

TEXT PRIMARY KEY

contenant un UUID.

Les tables de référence utilisent :

INTEGER PRIMARY KEY

UUID

Tous les objets métier utilisent un UUID.

Exemple :

preuve
entite
personne
source
chronologie
journal

Il n'existe pas simultanément :

id
uuid

La colonne :

id

contient directement l'UUID.


Dates

Toutes les dates sont enregistrées en UTC.

Format :

YYYY-MM-DDTHH:MM:SSZ

Chemins

Les chemins sont toujours relatifs à la racine de l'enquête.

Autorisé :

01_Preuves_Originales/Documents/facture.pdf

Interdit :

/home/user/Documents/...

Suppression

Les objets métier importants ne sont jamais supprimés immédiatement.

Une suppression est une modification d'état.

Exemple :

active
archived
deleted

Une purge physique éventuelle devra être explicite.


Nommage

Le SQL utilise :

  • snake_case
  • minuscules
  • aucun accent
  • aucun espace

Code C

Norme :

C17

Variables :

Toujours explicites.

Autorisé :

relative_path
description
commentaire
created_at

Interdit :

path
desc
comm
crt

Les fonctions utilisent le nom du module.

Exemple :

preuve_create()
preuve_load()
preuve_update()
preuve_delete()

Structures

Une structure représente un objet métier.

Exemple :

typedef struct Preuve Preuve;

Les structures publiques sont opaques lorsque cela est possible.


Tests

Toute nouvelle fonctionnalité importante possède un test.

Le développement suit toujours l'ordre :

Conception

↓

Implémentation

↓

Tests

↓

Commit

Git

Un ticket terminé correspond à un commit.

Le message de commit est rédigé en anglais.

Exemple :

feat(database): initialize investigation database

Documentation

Les décisions importantes sont documentées.

Les changements de schéma SQLite sont précédés d'un audit.

Aucune décision importante ne doit exister uniquement dans le code.


Objectif

Le projet doit rester compréhensible plusieurs années après sa création.

La priorité est donnée à la qualité du code plutôt qu'à la rapidité de développement.