6.1 KiB
Delta 0.3.1-pre.001-fix.002 — taxonomie N1, STRUCTURAL et lifecycle RAW
1. Base
livraison : 0.3.1-pre.001-fix.001
Cargo : 0.3.1-pre.1
Le gate opérateur post-fix.001 fourni est vert pour cargo fmt --all, audits Rust/Markdown, cargo check --workspace et cargo clippy --workspace --all-targets. L'opérateur indique également que la validation des tests est OK.
Ce correctif reste strictement documentaire : aucune crate, API Rust, Config, dependency, migration ou runtime Store n'est créé.
2. Motif
Le brainstorming avant pre.002 révèle que la taxonomie précédente était encore trop proche d'un pipeline linéaire et traitait à tort les logs transactionnels et logsSubscribe comme une même famille persistante.
Le correctif doit aussi préserver deux besoins futurs avant qu'une API publique ne les rende difficiles à ajouter :
frontière claire ksp-interface-lib / ksp-store-api
processing versionné + retention/compaction/archive/purge du RAW
3. Taxonomie N1 corrigée
Règle d'admission : deux réponses HTTP/WS/gRPC/provider convergent vers le même modèle N1 seulement si elles satisfont intégralement la même sémantique KSP sans perte.
Classification courante :
RawTransaction + observation
= N1 persistant certain
transaction logMessages
= partie de RawTransaction ; extraction future en N2 STRUCTURAL
RawAccountState + observation
= modèle N1 à prévoir après matrice de compatibilité
TransactionStatusObservation
= modèle/observation à explorer et prévoir si la sémantique converge
logsSubscribe / slot / vote
= event-only candidats ; pas de persistence Store par défaut
RawBlock
= IDEA seulement ; getBlock sert d'abord de conteneur d'acquisition de transactions
Yellowstone Entry
= examiné et non retenu actuellement
4. N2 renommé STRUCTURAL
La chaîne historique :
RAW -> CORE -> DECODE -> SPECIALIZED
est remplacée comme vocabulaire cible par :
RAW -> STRUCTURAL -> DECODED -> DOMAIN
N2 décrit une décomposition structurelle, pas un « Core » métier. Le premier cas certain est RawTransaction -> STRUCTURAL avec transaction/message, account refs, instructions top-level, CPI/inner instructions, logs/meta/balances/return data.
Toutes les familles N1 ne sont pas obligées de passer par N2.
5. Frontière Interface / Store
La règle fixée est :
persistant / replayable / queryable
-> ksp-store-api
observation durable d'un fait Store
-> ksp-store-api
event-only passif inter-composants
-> ksp-interface-lib de préférence
format canonique « donnée persistée disponible »
-> ksp-store-api, publication par worker/runtime après commit
shape HTTP/WS/gRPC/provider
-> Transport seulement
Un modèle event-only n'implique jamais automatiquement une capability Store. Les conversions restent explicites lorsque les sémantiques diffèrent.
6. Processing et lifecycle RAW
L'audit des documents kbot2 embarqués dans l'archive kbot3 retrouve :
full -> compacted -> archived -> purged
et un replay piloté par une identité de processing incluant stage, processor/version et input hash.
KSP reprend les concepts en les redessinant :
- aucun
processed: boolne constitue la preuve durable unique ; - le futur processing ledger doit être version-aware et input-hash-aware ;
- la policy d'éligibilité à la rétention appartient à un worker/job/maintenance layer, pas au Store ;
- le Store applique uniquement une transition logique/atomique demandée ;
- un tombstone minimal reste après purge afin qu'un backfill normal n'acquière pas de nouveau la même transaction ;
- une réhydratation après purge exige un mode explicitement forcé ;
- les policies de rétention peuvent différer selon la famille RAW.
Le payload RAW n'a donc pas vocation à rester éternellement en stockage chaud lorsque les couches dérivées et la policy active permettent sa compaction/archive/purge.
7. ROADMAP
ROADMAP.md est corrigé pour :
- remplacer CORE par STRUCTURAL dans la progression future ;
- rappeler que les niveaux ne sont pas obligatoires pour toutes les familles ;
- préciser
0.3.1avec admission cross-source, events non persistés et lifecycle/tombstone ; - ajouter un bloc TODO/IDEAS N1/processing/rétention ;
- conserver
0.3.2 = ksp-store-lib + ksp-store-postgres-libinchangé.
8. Version Cargo
Fix documentaire uniquement. Conformément au workflow, workspace.package.version reste :
0.3.1-pre.1
9. Fichiers modifiés
ROADMAP.md
docs/plans/022-V0_3_1_STORE_RAW_PLAN.md
docs/validation/018-V0_3_1_STORE_RAW.md
10. Fichier ajouté
deltas/0.3.1/pre.001-fix.002.md
11. Fichiers supprimés
aucun
12. Validations exécutées
Dans l'environnement de génération du fix :
python3 scripts/audit_rust_workspace_rules.py
General Rust rule audit: clean
Rust export completeness audit: 0 candidate(s)
KSP workspace Rust rule audit: clean
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.3.1
Markdown table audit: clean (184 table(s), 123 file(s))
cargo n'est pas disponible dans cet environnement. Le fix est strictement documentaire et la base opérateur post-fix.001 a déjà passé cargo fmt, cargo check et Clippy. Après application du présent fix, le gate opérateur reste :
cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas/0.3.1
cargo check --workspace
cargo clippy --workspace --all-targets
Aucun code n'est modifié et aucun test Store ciblé n'existe encore.
13. Suite
pre.002 peut ensuite créer le scaffold ksp-store-api avec une taxonomie désormais suffisamment contrainte pour éviter de figer :
un faux RawLog persistant
un pipeline N1->N2 obligatoire
un processed bool irréversible
une retention éternelle du RAW
une dépendance implicite entre event runtime et Store