<!-- file: docs/reports/PUMP_FEES_EVENT_COVERAGE_REPORT.md -->

# Pump Fees event coverage report — 0.7.55 final

## Portée

Programme cible : `pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ`.

Source locale prioritaire : `idls/pump_fees.pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ.json`.

L'IDL locale couvre `29` instructions, `20` events Anchor, `9` accounts et `34` types. La tranche ajoute un decoder local maximal `pump_fees` depuis l'IDL locale, le registre Carbon partiel et les discriminators observés via Solscan/corpus.

## Décisions métier

- `pump_fees` est traité comme programme fee/config/accounting.
- Aucun `k_sol_trade_events` ni candle ne doit être créé pour `pump_fees` sans preuve transactionnelle stricte d'un swap autonome.
- `get_fees` reste decoded-only : il décrit un calcul/preview de fees, pas un paiement réalisé.
- Les claims social fee alimentent `k_sol_reward_events` seulement si transaction OK et montant/acteur/mint exploitables.
- Les flux donation/buyback alimentent `k_sol_fee_events` seulement si transaction OK et montant fiable.
- Les créations/configurations/autorités/tiers alimentent `k_sol_pool_lifecycle_events` ou `k_sol_pool_admin_events` selon classification.
- Les transactions failed restent decoded-only/audit-only.

## Résultat build/test

```text
cargo test -p kb_lib -> 431 passed / 0 failed
cargo clippy -p kb_lib --all-targets -- -D warnings -> OK
```

## Replay final rapporté

```text
127 replayed
0 decode skipped
150 ledger upserts
125 unsafe ledger rows
4 trades
0 liquidity
115 lifecycle
0 tokenAccount
16 candle upserts
instructionObservations = 2234
resetDeleted = 1644
catalog = 11 tokens / 10 pools / 10 pairs
```

Les `4 trades` et `16 candle upserts` du replay proviennent d'autres surfaces du corpus local ; le contrôle anti-trade `pump_fees` est vide.

## Coverage local

### Instructions observées et couvertes

| Instruction | Discriminator | Observation principale | Matérialisation |
|---|---:|---:|---|
| `sweep_buyback` | `8a21cc26cfa19fe2` | `96` | `k_sol_fee_events` |
| `create_fee_sharing_config` | `c34e564c6f34fbd5` | `42` observations / `36` decoded | `k_sol_pool_lifecycle_events` |
| `update_fee_shares` | `bd0d8863bba4ed23` | `26` observations / `16` decoded | `k_sol_pool_admin_events` |
| `claim_social_fee_pda_v2` | `114df0863abc3595` | `25` | `k_sol_reward_events` |
| `update_fee_shares_v2` | `6ffb31064e4e6a12` | `19` | `k_sol_pool_admin_events` |
| `claim_social_fee_pda` | `e115fb85a11ec7e2` | `15` observations / `10` decoded | `k_sol_reward_events` |
| `crank_donation_fee_pda` | `dc0abda7a9111945` | `14` | `k_sol_fee_events` |
| `get_fees` | `e7257e55cf5b3f34` | `13` observations / `5` decoded | decoded-only |
| `transfer_fee_sharing_authority` | `ca0a4bc8a422d260` | `12` | `k_sol_pool_admin_events` |
| `initialize_fee_program_global` | `23d78254e9387ca7` | `1` | `k_sol_pool_lifecycle_events` |

Le discriminator `e445a52e51cb9a1d` est classé comme `pump_fees.anchor_self_cpi_log` transport Anchor self-CPI : `271` observations / `119` tx.

### Instructions IDL non observées mais programmées

Ces entrées n'ont pas de signature Solscan/corpus au moment de la clôture, mais restent décodables si des transactions futures apparaissent :

| Instruction | Discriminator | Classification | Target prévu |
|---|---:|---|---|
| `reset_fee_sharing_config_v2` | `a9f511d15e5bf880` | admin_config | `k_sol_pool_admin_events` |
| `set_authority` | `85fa25156ea31a79` | admin_config | `k_sol_pool_admin_events` |
| `set_claim_rate_limit` | `b9d39faed4315804` | audit | decoded-only |
| `set_disable_flags` | `c2d9702372de33be` | admin_config | `k_sol_pool_admin_events` |
| `set_social_claim_authority` | `9336b89a88edb999` | admin_config | `k_sol_pool_admin_events` |

### Anchor events IDL non observés mais testés synthétiquement

| Event Anchor | Discriminator | Statut |
|---|---:|---|
| `SetAuthorityEvent` | `12af8442d0c957f2` | decoder + test synthétique |
| `SetClaimRateLimitEvent` | `0d8f8febb5133328` | decoder + test synthétique |
| `SetDisableFlagsEvent` | `0508b3413137917e` | decoder + test synthétique |
| `SetSocialClaimAuthorityEvent` | `3c767f84ef34fe0e` | decoder + test synthétique |

### Discriminators Solscan hors IDL locale

Ces discriminators ont été trouvés par filtres Solscan, mais ne sont pas observés dans le corpus local final et ne sont pas dans l'IDL locale fournie. Ils restent conservés en coverage comme surfaces futures :

| Event | Discriminator | Statut |
|---|---:|---|
| `revoke_fee_sharing_authority_event` | `7217653c0ebe993e` | `upstream_git_mapped_unverified` |
| `transfer_fee_sharing_authority_event` | `7c8fc6f54db808ec` | `upstream_git_mapped_unverified` |

## Écarts observed/materialized

Les écarts `observed_count > materialized_count` sont expliqués par des transactions failed ou par une politique decoded-only. La requête `09b` documente notamment :

| Entrée | Observed | Materialized | Explication |
|---|---:|---:|---|
| `get_fees` | `5` | `0` | decoded-only volontaire |
| `claim_social_fee_pda_v2` | `25` | `21` | `4` failed decoded |
| `create_fee_sharing_config` | `36` | `33` | `3` failed decoded |
| `initialize_fee_config` | `5` | `2` | `3` failed decoded |
| `social_fee_pda_claimed` | `17` | `15` | `2` failed decoded |
| `crank_donation_fee_pda` | `14` | `12` | `2` failed decoded |
| `update_fee_shares_v2` | `19` | `17` | `2` failed decoded |
| `revoke_fee_sharing_authority` | `6` | `5` | `1` failed decoded |

La requête `06` confirme qu'il n'existe aucun successful non-materialized sans skip/policy explicite.

## Checks de fermeture

SQL dédié : `validation_sql/SQL_VALIDATION_PUMP_FEES_0_7_55.sql`.

Résultats de fermeture rapportés :

- fallback `upstream_git` `pump_fees` : vide ;
- `instruction_name` `pump_fees` vide : vide ;
- `event_family = unknown` ou vide pour instruction/event : vide ;
- decoded `pump_fees` sans coverage : vide ;
- fallback résiduel pour entrées couvertes localement : vide ;
- successful non-materialized sans skip/policy : vide ;
- failed transaction avec business materialization : vide ;
- multi-target materialization : vide ;
- anti-trade/candle direct `pump_fees` : vide ;
- watchlist globale : plus aucun `pump_fees`, reste seulement `jupiter_swap.route_v2` comme backlog ponctuel.

## Statut final

`0.7.55 pump_fees` est clôturé techniquement. Ne pas rouvrir `pump_fees`, `pump_fun`, `pump_swap` ou Raydium sans bug prouvé par SQL/code ou apparition d'un nouveau discriminant/corpus externe exploitable.
