v0.0.3-pre.006

This commit is contained in:
2026-08-14 12:07:18 +02:00
parent 63bb90a46d
commit 2cb9f809b7
14 changed files with 1126 additions and 67 deletions

194
deltas/0.0.3/pre.006.md Normal file
View File

@@ -0,0 +1,194 @@
<!-- file: deltas/0.0.3/pre.006.md -->
<!-- version: 1 -->
# Delta 0.0.3-pre.006
## Base requise
`v0.0.3-pre.005`.
## Objectif
Formaliser les niveaux durables de données, la séparation Materializer/Store et les garanties nécessaires à la reconstruction/replay avant de détailler les workers/jobs.
## Version Cargo
`workspace.package.version` passe de :
```text
0.0.3-pre.5
```
à :
```text
0.0.3-pre.6
```
Le header de `Cargo.toml` passe de version 11 à 12.
## Fichiers ajoutés
- `docs/architecture/008-DATA_MATERIALIZATION_AND_STORE.md`
- `deltas/0.0.3/pre.006.md`
## Fichiers modifiés
- `Cargo.toml`
- `ROADMAP.md`
- `docs/architecture/000-README.md`
- `docs/architecture/002-LAYERS_AND_DEPENDENCIES.md`
- `docs/architecture/003-COMPONENT_CONTRACTS.md`
- `docs/architecture/004-COMPONENT_INVENTORY.md`
- `docs/architecture/005-DEPENDENCY_GRAPH.md`
- `docs/rules/RULES_DEPENDENCIES.md`
- `docs/rules/RULES_KSP.md`
- `docs/IDEAS.md`
- `docs/plans/001-V0_0_3_PLAN.md`
- `prompts/001-V0_1_X_START_PROMPT.md`
## Fichiers supprimés
Aucun.
## Décisions principales
### Niveaux durables
La persistence n'utilise pas N1/N2/N3/N4, réservés aux couches architecturales.
```text
D1 Raw
D2 Core canonique
D3 journal de matérialisation générique
D4 projections spécialisées/queryables
```
D1/D2/D3 sont destinés à être fortement stabilisés ; D4 reste plus évolutif.
### D1
D1 conserve suffisamment d'information raw/provenance pour rejouer le processing sans réacquérir la blockchain lorsque les données nécessaires ont déjà été capturées.
`ksp-worker-raw-retriever` et `ksp-job-backfill` produisent le même contrat D1 pour la même catégorie de donnée.
### D2
D2 contient les faits Core canoniques Solana.
Top-level et CPI restent des faits distincts lorsque leurs invariants/requêtes diffèrent.
### D3
D3 est un journal durable obligatoire, équivalent conceptuel du rôle historique de `k_sol_mat_outputs`.
Une extension externe de materializer doit pouvoir produire un output D3 générique sans imposer de table PostgreSQL spécialisée.
### D4
D4 contient les projections spécialisées/queryables.
Les projections sont modélisées par faits canoniques lorsque les invariants le permettent, et non par familles de tables propres à Meteora/Raydium/Orca/etc.
Les metadata d'assets/tokens peuvent normaliser Metaplex Token Metadata + Token-2022 Metadata ; SPM reste distinct.
### Materializer
Une seule API publique est prévue :
```text
ksp-materializer-api
```
avec des capacités conceptuelles D2 -> D3 et D3 -> D4.
`ksp-materializer-lib` transforme mais ne persiste pas et ne dépend pas du Store.
### Store
`ksp-store-api` possède les contrats persistants D1/D2/D3/D4 et reste indépendant de Program/Materializer/Transport.
`ksp-store-lib` contient PostgreSQL comme implémentation de référence.
Une nouvelle projection relationnelle D4 implique explicitement un contrat Store/migration/backend.
### Provenance et temporalités
Chaque niveau dérivé doit pouvoir remonter à son input durable et à l'identité/version du processor.
Les temporalités blockchain et locales restent distinctes. `block_time` reste optionnel et n'est jamais inventé.
### Idempotence
Le résultat durable est identifié conceptuellement par l'input logique, l'identité/version du processor et l'identité logique de l'output.
Une nouvelle version peut produire un résultat distinct/supersédant sans dupliquer incohéremment une même version.
### Replay
Les replays sont indépendants :
```text
D1 -> D2
D2 -> D3
D3 -> D4
```
Ils seront exécutés sous forme de jobs bornés, pas comme modes cachés des workers live.
### Notifications
`ksp-store-api` possède le format canonique des notifications de données persistées.
Une notification est seulement un wake-up et peut être perdue/dupliquée.
Le Store et les marqueurs durables de backlog/idempotence font autorité.
Ordre obligatoire :
```text
persist
commit
notify
```
Le mécanisme de diffusion reste séparé du contrat.
## Plan ajusté
La partie workers/jobs est déplacée vers une tranche dédiée :
- `pre.007` — acquisition/workers/jobs/replay/backlog ;
- `pre.008` — apps/managers/scenarios/orchestration ;
- `pre.009` — plan des premières releases fonctionnelles ;
- `pre.010` — clôture fondatrice.
## Questions reportées
### `pre.007`
- lifecycle des quatre workers ;
- jobs de replay ;
- backlog/cursors/checkpoints ;
- batching/concurrence ;
- hot reconfiguration ;
- mécanisme de notification de référence ;
- reprise après crash/process restart.
### Première release Store réelle
- noms exacts de tables/DTO/repositories ;
- contraintes/idempotence SQL ;
- index/pagination ;
- représentation des hashes/provenances/états ;
- migrations ;
- conversion des entiers Solana/PostgreSQL.
## Validations
- headers `file:` / `version:` vérifiés ;
- `Cargo.toml` parsé et version `0.0.3-pre.6` vérifiée ;
- référence vers `008-DATA_MATERIALIZATION_AND_STORE.md` vérifiée ;
- nomenclature D1D4 présente dans les documents structurants ;
- plan recalé jusqu'à `pre.010` ;
- aucune commande Cargo build/test exécutée : ce delta reste documentaire et n'ajoute aucun code Rust fonctionnel.