0.1.0-pre.004

This commit is contained in:
2026-07-23 18:25:10 +02:00
parent 0da75c1311
commit 149d4c6ef6
85 changed files with 25696 additions and 227 deletions

View File

@@ -1,7 +1,7 @@
<!-- file: docs/TRACING_CONTRACT.md -->
<!-- version: 12 -->
<!-- version: 13 -->
# Contrat de tracing par crate
# Contrat de tracing par crate et composant
## Objectif
@@ -21,19 +21,21 @@ Une crate passive contient uniquement des types, contrats, DTO, traits sans impl
## Cible canonique
Toute crate qui déclare `tracing.workspace = true` doit :
Toute crate opérationnelle hors `kb-lib` qui déclare `tracing.workspace = true` doit :
- posséder `src/constants.rs` ;
- définir exactement une constante `pub(crate) const TRACING_TARGET` ;
- utiliser comme valeur le nom exact du package Cargo ;
- appeler les macros avec `target: crate::constants::TRACING_TARGET` ;
- réexporter la constante depuis sa façade puis appeler les macros avec `target: crate::TRACING_TARGET` ;
- déplacer la granularité interne dans des champs structurés.
`kb-lib` constitue une exception architecturale volontaire : chaque décodeur, matérialiseur ou exécuteur opérationnel possède son propre `constants.rs` et un target hiérarchique `kb-lib.<famille>.<surface>`. La façade de `kb-lib` réexporte chaque target sous un alias interne préfixé afin que plusieurs composants puissent coexister sans collision.
Exemple :
```rust
tracing::error!(
target: crate::constants::TRACING_TARGET,
target: crate::SOLANA_CORE_TRACING_TARGET,
action = "decoder_outcome_failure",
campaign_id = %campaign_id,
signature = %input.signature,
@@ -47,40 +49,19 @@ tracing::error!(
);
```
Les targets `khbot.*`, les targets suffixés par module et les targets de fenêtre ne sont plus utilisés par les crates opérationnelles migrées. Les identifiants frontend historiques restent acceptés comme valeurs du champ `frontend_target`, mais lévénement Rust est émis sous `kb_app_demo`.
Les targets `khbot.*` et les targets de fenêtre ne sont plus utilisés par les composants opérationnels migrés. Les identifiants frontend historiques restent acceptés comme valeurs du champ `frontend_target`, mais lévénement Rust est émis sous le target canonique de lapplication.
## Crates actuellement routées
La configuration couvre toutes les crates qui déclarent actuellement `tracing.workspace = true` :
Les targets déjà migrés vers les noms canoniques bot3 sont :
```text
kb_app_demo
kb_decoder_solana_core
kb_decoder_spl_associated_token_account
kb_decoder_spl_memo
kb_decoder_spl_token
kb_decoder_spl_token_2022
kb_executor_metadata_spl_name_service
kb_execution_solana
kb_executor_solana_core
kb_executor_spl_account_compression
kb_executor_spl_associated_token_account
kb_executor_spl_memo
kb_executor_spl_noop
kb_executor_spl_single_pool
kb_logging
kb_materializer_admin
kb_materializer_compliance_audit
kb_materializer_lifecycle
kb_materializer_staking
kb_materializer_transaction_annotations
kb_pipeline
kb_rpc
kb_store_pg
kb_wallet
kb-lib.decoder.solana.core
kb-logging
kb-store
```
Le test `every_tracing_crate_has_one_canonical_target_constant` détecte automatiquement toute crate avec `tracing.workspace = true` et vérifie la présence dune unique constante canonique. Le test de `kb_config` vérifie parallèlement la matrice de routes de chaque profil.
Laudit `audit_khadhroony_workspace_rules.py` vérifie les targets de crates et les targets hiérarchiques de `kb-lib`. Il interdit également les faux usages `let _target` et impose que chaque macro de `kb-lib` utilise un alias réexporté par la façade.
Les routes sont filtrées au niveau de leur writer plutôt que par un `Filtered` layer distinct. Un seul filtre dadmission agrégé empêche en amont le formatage des événements refusés par toutes les routes. Cette architecture préserve toutes les sorties globales et par crate au-delà de la limite interne de 64 identifiants de filtres de `tracing-subscriber`. Le test `more_than_64_routes_compose_without_filtered_layer_ids` protège explicitement ce contrat.
@@ -137,10 +118,10 @@ Ils sont journalisés en `debug`, `info` ou `warn` selon leur impact.
## Responsabilité
- `kb_rpc` : sélection dendpoint, requêtes, réponses bornées, retry, rate limit et transport.
- `kb_execution_solana` : assemblage du message, contrôle du contrat de signataires, liaison de simulation et signature transactionnelle.
- `kb_store_pg` : transactions SQL, commit/rollback, compteurs et erreurs de persistance.
- `kb_pipeline` : sélection, dispatch, concurrence, annulation, backfill et agrégation.
- `kb-rpc` : sélection dendpoint, requêtes, réponses bornées, retry, rate limit et transport.
- composants `kb-lib.executor` : assemblage du message, contrôle du contrat de signataires, liaison de simulation et signature transactionnelle.
- `kb-store` : transactions SQL, commit/rollback, compteurs et erreurs de persistance.
- `kb-pipeline` : sélection, dispatch, concurrence, annulation, backfill et agrégation.
- décodeur : reconnaissance, validation du format, décision et diagnostic borné.
- matérialiseur : applicabilité exacte, politique de transaction et sorties produites.
- exécuteur : support, construction, simulation et garde-fous.
@@ -166,3 +147,5 @@ Lajout ou la suppression de `tracing.workspace = true` impose dans le même d
3. la mise à jour de `config/example.config.json` ;
4. la mise à jour des tests de contrat ;
5. la mise à jour de la liste ci-dessus.
Pour un composant de `kb-lib`, les mêmes obligations sappliquent au target hiérarchique, à son alias de façade et à ses routes dédiées.