v0.3.12-pre.001
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
# file: Cargo.toml
|
# file: Cargo.toml
|
||||||
# version: 518
|
# version: 519
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
resolver = "3"
|
resolver = "3"
|
||||||
members = ["crates/ksp-app-backfill-desk", "crates/ksp-app-config-desk", "crates/ksp-app-solprices-desk", "crates/ksp-app-store-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-interface-lib", "crates/ksp-job-api", "crates/ksp-job-backfill-lib", "crates/ksp-logging-lib", "crates/ksp-offchain-transport-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-program-api", "crates/ksp-raw-transaction-lib", "crates/ksp-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib", "crates/ksp-worker-api", "crates/ksp-worker-raw-transaction-ingest-lib"]
|
members = ["crates/ksp-app-backfill-desk", "crates/ksp-app-config-desk", "crates/ksp-app-solprices-desk", "crates/ksp-app-store-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-interface-lib", "crates/ksp-job-api", "crates/ksp-job-backfill-lib", "crates/ksp-logging-lib", "crates/ksp-offchain-transport-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-program-api", "crates/ksp-raw-transaction-lib", "crates/ksp-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib", "crates/ksp-worker-api", "crates/ksp-worker-raw-transaction-ingest-lib"]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.3.11"
|
version = "0.3.12-pre.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||||
|
|||||||
270
deltas/0.3.12/pre.001.md
Normal file
270
deltas/0.3.12/pre.001.md
Normal file
@@ -0,0 +1,270 @@
|
|||||||
|
<!-- file: deltas/0.3.12/pre.001.md -->
|
||||||
|
<!-- version: 1 -->
|
||||||
|
|
||||||
|
# Delta 0.3.12-pre.001 — audit Yellowstone, hydration HTTP et continuité Worker
|
||||||
|
|
||||||
|
## Base
|
||||||
|
|
||||||
|
```text
|
||||||
|
archive : khadhroony-solana-project-v0.3.11.zip
|
||||||
|
SHA-256 : a6bb59935650a7f48630d12ef80fbd1a44a84819dd129b085ff7f467369535fc
|
||||||
|
ZIP bytes : 8125100
|
||||||
|
ZIP entries : 1950
|
||||||
|
unzip -t : PASS
|
||||||
|
workspace members : 21
|
||||||
|
workspace.package.version base : 0.3.11
|
||||||
|
stable delta : deltas/0.3.11/rel.001.md
|
||||||
|
```
|
||||||
|
|
||||||
|
Le ZIP a une racine unique et a été contrôlé sans entrée absolue, path traversal, symlink, `.git/`, `target/`, `node_modules/`, `Cargo.lock` ou `.env`.
|
||||||
|
|
||||||
|
Préconditions du prompt `031` confirmées :
|
||||||
|
|
||||||
|
```text
|
||||||
|
Worker RawTransaction présent et documenté
|
||||||
|
aucune source réseau productive Worker stable
|
||||||
|
Common RAW présente
|
||||||
|
Transport Yellowstone générique présent
|
||||||
|
Store facade présente
|
||||||
|
Backfill indépendant du Worker
|
||||||
|
```
|
||||||
|
|
||||||
|
## Type de livraison
|
||||||
|
|
||||||
|
```text
|
||||||
|
ksp-general-0.3.12-pre.001.zip
|
||||||
|
```
|
||||||
|
|
||||||
|
Le type `general` est requis par le bump `Cargo.toml` de toute prerelease non-fix (`VER-ID-009`). L'archive d'échange contient uniquement les fichiers ajoutés/modifiés par cette tranche et son delta.
|
||||||
|
|
||||||
|
## Baseline exécutée avant modification
|
||||||
|
|
||||||
|
```text
|
||||||
|
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
|
||||||
|
Markdown table audit: clean (340 table(s), 798 file(s))
|
||||||
|
```
|
||||||
|
|
||||||
|
## Objectif
|
||||||
|
|
||||||
|
Exécuter le gate `pre.001` de `prompts/031-V0_3_12_START_PROMPT.md` : audit complet de la stable et des règles, inventaire Worker/Transport/Common RAW/Store/Config, fraîcheur Yellowstone/Solana/providers/crates, matrice des signaux, architecture d'injection, hydration/provenance, continuité/frontier, threat model, smokes, graphe Cargo et sizing, sans implémentation réseau productive.
|
||||||
|
|
||||||
|
## Audit des règles
|
||||||
|
|
||||||
|
Aucune contradiction normative active n'a été trouvée dans les règles courantes. Aucun fichier de règles n'est modifié.
|
||||||
|
|
||||||
|
Contraintes fermées :
|
||||||
|
|
||||||
|
```text
|
||||||
|
Worker/Job séparés
|
||||||
|
Config seul propriétaire des endpoints/secrets/composition
|
||||||
|
Store facade seulement
|
||||||
|
pas de public enqueue
|
||||||
|
pas de second moteur Yellowstone
|
||||||
|
nouvelle prerelease => Cargo 0.3.12-pre.1
|
||||||
|
tranches <= 15–20 minutes
|
||||||
|
```
|
||||||
|
|
||||||
|
## Décisions fermées
|
||||||
|
|
||||||
|
### Edge et injection
|
||||||
|
|
||||||
|
```text
|
||||||
|
seul nouvel edge autorisé : Worker -> ksp-onchain-transport-lib
|
||||||
|
Worker -> Config reste interdit
|
||||||
|
Worker -> Backfill reste interdit
|
||||||
|
caller supérieur construit channel/request Yellowstone + pool/role HTTP
|
||||||
|
RawTransactionIngestYellowstoneSource + RawTransactionIngestRuntimeResources retenus
|
||||||
|
start stable source-neutral conservé
|
||||||
|
start_with_runtime_resources(settings, Arc<Store>, resources) retenu
|
||||||
|
```
|
||||||
|
|
||||||
|
### Matrice Yellowstone
|
||||||
|
|
||||||
|
```text
|
||||||
|
Transaction -> candidat hydration
|
||||||
|
TransactionStatus -> candidat hydration
|
||||||
|
Block transactions-> candidats hydration
|
||||||
|
BlockMeta -> continuity/health seulement
|
||||||
|
Slot -> continuity/health seulement
|
||||||
|
from_slot -> reconnect/replay Transport, pas checkpoint historique
|
||||||
|
ReplayInfo -> borne de rétention seulement
|
||||||
|
```
|
||||||
|
|
||||||
|
### RAW/hydration
|
||||||
|
|
||||||
|
```text
|
||||||
|
RAW-direct Yellowstone non prouvé et interdit en P0
|
||||||
|
get_transaction_observed = hydration P0
|
||||||
|
Base64 + confirmed/finalized + maxSupportedTransactionVersion=0
|
||||||
|
processed exclu du chemin hydraté P0
|
||||||
|
get_block_observed non requis au P0
|
||||||
|
```
|
||||||
|
|
||||||
|
### Provenance
|
||||||
|
|
||||||
|
Le modèle Store existant est conservé sans migration. La route multi-hop est représentée par des codes sûrs composites `yellowstone_http` contenant les identités logiques Yellowstone et le winner HTTP, toutes bornées par `RawProvenanceCode`. Aucune URL/token/header n'est conservé.
|
||||||
|
|
||||||
|
### Continuité
|
||||||
|
|
||||||
|
```text
|
||||||
|
Transport high-watermark != Worker processing frontier
|
||||||
|
processing frontier != blockchain completeness
|
||||||
|
reconnect != replay != repair
|
||||||
|
replay attempt != preuve de couverture
|
||||||
|
continuity gap prouvé par ReplayInfo => fault sûr
|
||||||
|
aucun Backfill/repair automatique en 0.3.12
|
||||||
|
frontier run-local, non persistante
|
||||||
|
```
|
||||||
|
|
||||||
|
## Fraîcheur externe du 8 septembre 2026
|
||||||
|
|
||||||
|
```text
|
||||||
|
yellowstone-grpc-proto latest = 12.7.0 (2026-08-29)
|
||||||
|
workspace = ^12.7 => aucun bump requis
|
||||||
|
Solana getTransaction fournit blockTime/meta/slot/transaction/version
|
||||||
|
Solana getBlock reste disponible mais non requis au P0
|
||||||
|
OrbitFlare documente Devnet gRPC et free Devnet-only
|
||||||
|
Helius LaserStream documente Yellowstone compatibility et replay provider-specific ~216k slots/~24h
|
||||||
|
```
|
||||||
|
|
||||||
|
Le changelog Yellowstone du 22 juillet 2026 corrige un défaut `from_slot` + `blocks` pouvant reprendre au live head sans rejouer les Blocks. KSP ne considérera donc jamais l'acceptation de `from_slot` comme une preuve de continuité.
|
||||||
|
|
||||||
|
## Smokes
|
||||||
|
|
||||||
|
Smokes Transport existants :
|
||||||
|
|
||||||
|
```text
|
||||||
|
OrbitFlare Devnet : opt-in, token opérateur
|
||||||
|
PublicNode Mainnet/Testnet : opt-in, tokens opérateur
|
||||||
|
```
|
||||||
|
|
||||||
|
Aucun secret live n'est fourni dans l'archive. Aucun smoke Worker n'est exécuté en `pre.001` et aucun faux PASS live n'est déclaré.
|
||||||
|
|
||||||
|
## Graphe Cargo cible
|
||||||
|
|
||||||
|
Après `pre.002` :
|
||||||
|
|
||||||
|
```text
|
||||||
|
ksp-worker-raw-transaction-ingest-lib
|
||||||
|
-> ksp-core-lib
|
||||||
|
-> ksp-logging-lib
|
||||||
|
-> ksp-onchain-transport-lib
|
||||||
|
-> ksp-raw-transaction-lib
|
||||||
|
-> ksp-store-lib default-features=false
|
||||||
|
-> ksp-worker-api
|
||||||
|
-> sha2
|
||||||
|
-> tokio macros,rt,sync,time
|
||||||
|
```
|
||||||
|
|
||||||
|
Pas d'edge Worker direct vers Config, Backfill, Store backend, Tonic, Reqwest, Yellowstone proto ou SDK provider.
|
||||||
|
|
||||||
|
## Sizing recalibré
|
||||||
|
|
||||||
|
```text
|
||||||
|
pre.002 Transport resource/source contract
|
||||||
|
pre.003 Transaction + TransactionStatus adapters
|
||||||
|
pre.004 HTTP hydration + provenance
|
||||||
|
pre.005 Block + BlockMeta + Slot
|
||||||
|
pre.006 source task + supervisor/coalescence
|
||||||
|
pre.007 processing frontier
|
||||||
|
pre.008 reconnect/from_slot/ReplayInfo
|
||||||
|
pre.009 race/retry/backpressure hardening
|
||||||
|
pre.010 cross-layer completeness/security
|
||||||
|
pre.011 technical/live gate
|
||||||
|
pre.012 documentation reconciliation
|
||||||
|
pre.013 publication preparation
|
||||||
|
rel.001
|
||||||
|
```
|
||||||
|
|
||||||
|
Décision : maintenir `0.3.12`. Le split frontier/replay évite une tranche de continuité trop large ; toute tranche dépassant réellement 15–20 minutes sera encore scindée avant exécution.
|
||||||
|
|
||||||
|
## Fichiers ajoutés
|
||||||
|
|
||||||
|
```text
|
||||||
|
docs/plans/033-V0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY_PLAN.md
|
||||||
|
docs/validation/029-V0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY.md
|
||||||
|
deltas/0.3.12/pre.001.md
|
||||||
|
```
|
||||||
|
|
||||||
|
## Fichiers modifiés
|
||||||
|
|
||||||
|
```text
|
||||||
|
Cargo.toml
|
||||||
|
```
|
||||||
|
|
||||||
|
Versions :
|
||||||
|
|
||||||
|
```text
|
||||||
|
Cargo.toml : 518 -> 519
|
||||||
|
workspace.package.version : 0.3.11 -> 0.3.12-pre.1
|
||||||
|
```
|
||||||
|
|
||||||
|
Le bump Cargo est requis par `VER-ID-009` pour une prerelease non-fix, même si la tranche ne modifie aucun Rust.
|
||||||
|
|
||||||
|
## Fichiers supprimés
|
||||||
|
|
||||||
|
```text
|
||||||
|
aucun
|
||||||
|
```
|
||||||
|
|
||||||
|
## Validation après modification
|
||||||
|
|
||||||
|
Audits statiques réellement exécutés sur le delta complet :
|
||||||
|
|
||||||
|
```text
|
||||||
|
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
|
||||||
|
Markdown table audit: clean (340 table(s), 801 file(s))
|
||||||
|
```
|
||||||
|
|
||||||
|
Résultat : PASS.
|
||||||
|
|
||||||
|
## Validations non exécutées localement
|
||||||
|
|
||||||
|
`cargo` n'est pas installé dans l'environnement d'assemblage. Ne sont donc pas déclarés PASS localement :
|
||||||
|
|
||||||
|
```text
|
||||||
|
cargo fmt --all -- --check
|
||||||
|
cargo check --workspace
|
||||||
|
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
||||||
|
cargo test --workspace --all-targets --all-features
|
||||||
|
cargo tree --duplicates
|
||||||
|
```
|
||||||
|
|
||||||
|
Le journal opérateur fourni avec la stable montre un gate Cargo complet vert sur `0.3.11`; cette preuve reste distincte du delta `0.3.12-pre.001`.
|
||||||
|
|
||||||
|
## Gate opérateur demandé
|
||||||
|
|
||||||
|
Après application :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo fmt --all -- --check
|
||||||
|
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
|
||||||
|
cargo check --workspace
|
||||||
|
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
||||||
|
cargo test -p ksp-worker-raw-transaction-ingest-lib
|
||||||
|
cargo tree -p ksp-worker-raw-transaction-ingest-lib --edges normal
|
||||||
|
cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features
|
||||||
|
```
|
||||||
|
|
||||||
|
## Questions reportées
|
||||||
|
|
||||||
|
```text
|
||||||
|
RAW-direct Yellowstone après preuve byte-exact
|
||||||
|
retry Worker borné spécifique au null getTransaction
|
||||||
|
multi-source redundancy/failover
|
||||||
|
hot listener reconfiguration complète
|
||||||
|
repair automatique 0.3.14
|
||||||
|
checkpoint durable inter-process
|
||||||
|
provider-specific capabilities permanentes
|
||||||
|
```
|
||||||
1081
docs/plans/033-V0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY_PLAN.md
Normal file
1081
docs/plans/033-V0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY_PLAN.md
Normal file
File diff suppressed because it is too large
Load Diff
533
docs/validation/029-V0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY.md
Normal file
533
docs/validation/029-V0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY.md
Normal file
@@ -0,0 +1,533 @@
|
|||||||
|
<!-- file: docs/validation/029-V0_3_12_YELLOWSTONE_HYDRATION_CONTINUITY.md -->
|
||||||
|
<!-- version: 1 -->
|
||||||
|
|
||||||
|
# Validation v0.3.12 — Yellowstone + hydration HTTP + continuité de run du Worker RawTransaction
|
||||||
|
|
||||||
|
## 1. Rôle du document
|
||||||
|
|
||||||
|
Ce document enregistre les preuves réellement exécutées, les non-claims et les gates progressifs de `0.3.12`. Une commande non exécutée n'est jamais déclarée PASS.
|
||||||
|
|
||||||
|
`pre.001` est un gate de lecture/audit/sizing. Il ne contient aucun code Worker réseau productif.
|
||||||
|
|
||||||
|
## 2. Gate `pre.001` — base stable
|
||||||
|
|
||||||
|
### 2.1 Archive contrôlée
|
||||||
|
|
||||||
|
```text
|
||||||
|
archive : khadhroony-solana-project-v0.3.11.zip
|
||||||
|
SHA-256 : a6bb59935650a7f48630d12ef80fbd1a44a84819dd129b085ff7f467369535fc
|
||||||
|
bytes : 8125100
|
||||||
|
entries : 1950
|
||||||
|
unzip -t : PASS
|
||||||
|
root unique : PASS
|
||||||
|
absolute entries : 0
|
||||||
|
path traversal : 0
|
||||||
|
symlinks : 0
|
||||||
|
.git/ : 0
|
||||||
|
target/ : 0
|
||||||
|
node_modules/ : 0
|
||||||
|
Cargo.lock : 0
|
||||||
|
.env : 0
|
||||||
|
workspace members : 21
|
||||||
|
workspace.package.version : 0.3.11
|
||||||
|
```
|
||||||
|
|
||||||
|
`deltas/0.3.11/rel.001.md` est présent.
|
||||||
|
|
||||||
|
### 2.2 Préconditions fonctionnelles
|
||||||
|
|
||||||
|
Contrôlé dans la stable :
|
||||||
|
|
||||||
|
```text
|
||||||
|
ksp-worker-raw-transaction-ingest-lib présent
|
||||||
|
README/USAGE présents
|
||||||
|
aucun edge Worker -> Transport
|
||||||
|
aucune source réseau productive dans src/
|
||||||
|
ksp-raw-transaction-lib présent
|
||||||
|
ksp-onchain-transport-lib présent avec Yellowstone gRPC générique
|
||||||
|
ksp-store-lib présent
|
||||||
|
ksp-job-backfill-lib ne dépend pas du Worker
|
||||||
|
```
|
||||||
|
|
||||||
|
Résultat : PASS.
|
||||||
|
|
||||||
|
## 3. Baseline statique locale avant modification
|
||||||
|
|
||||||
|
Exécuté dans l'archive extraite :
|
||||||
|
|
||||||
|
```text
|
||||||
|
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
|
||||||
|
```
|
||||||
|
|
||||||
|
Résultat : PASS.
|
||||||
|
|
||||||
|
Exécuté :
|
||||||
|
|
||||||
|
```text
|
||||||
|
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas
|
||||||
|
Markdown table audit: clean (340 table(s), 798 file(s))
|
||||||
|
```
|
||||||
|
|
||||||
|
Résultat : PASS.
|
||||||
|
|
||||||
|
## 4. Cargo local dans l'environnement d'assemblage
|
||||||
|
|
||||||
|
`cargo` n'est pas installé dans l'environnement d'assemblage utilisé pour `pre.001`.
|
||||||
|
|
||||||
|
Non exécuté localement :
|
||||||
|
|
||||||
|
```text
|
||||||
|
cargo fmt --all -- --check
|
||||||
|
cargo check --workspace
|
||||||
|
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
||||||
|
cargo test --workspace --all-targets --all-features
|
||||||
|
cargo tree --duplicates
|
||||||
|
```
|
||||||
|
|
||||||
|
Ces commandes ne sont pas déclarées PASS localement.
|
||||||
|
|
||||||
|
## 5. Preuve opérateur de la stable `0.3.11`
|
||||||
|
|
||||||
|
Le journal fourni avec la demande d'ouverture montre sur la stable :
|
||||||
|
|
||||||
|
```text
|
||||||
|
cargo clean : exécuté
|
||||||
|
cargo fmt --all -- --check : sans erreur visible
|
||||||
|
audit Rust : clean
|
||||||
|
audit Markdown : clean (340 tables, 798 fichiers)
|
||||||
|
cargo check --workspace : terminé sans erreur
|
||||||
|
cargo clippy --workspace --all-targets --all-features -- -D warnings : terminé sans erreur
|
||||||
|
cargo test --workspace : suites affichées vertes ; tests live opt-in ignorés conformément à leur contrat
|
||||||
|
cargo tree Worker normal/features : demandé dans le journal opérateur
|
||||||
|
```
|
||||||
|
|
||||||
|
Cette preuve opérateur concerne l'état stable d'entrée. Elle n'est pas réétiquetée comme exécution locale de `0.3.12-pre.001`.
|
||||||
|
|
||||||
|
## 6. Audit humain des règles
|
||||||
|
|
||||||
|
Sources lues pour le gate :
|
||||||
|
|
||||||
|
```text
|
||||||
|
RULES.md
|
||||||
|
ROADMAP.md
|
||||||
|
CHANGELOG.md
|
||||||
|
docs/000-README.md
|
||||||
|
docs/rules/RULES_GENERAL.md
|
||||||
|
docs/rules/RULES_KSP.md
|
||||||
|
docs/rules/RULES_RUST.md
|
||||||
|
docs/rules/RULES_DEPENDENCIES.md
|
||||||
|
docs/rules/RULES_DOCUMENTATION.md
|
||||||
|
docs/rules/FILE_CONTRACTS.md
|
||||||
|
docs/rules/VERSION_WORKFLOW.md
|
||||||
|
docs/rules/PROMPT_STRUCTURE.md
|
||||||
|
```
|
||||||
|
|
||||||
|
Résultat : aucune divergence normative active nécessitant une correction de règle en `pre.001`.
|
||||||
|
|
||||||
|
Vérifications clés :
|
||||||
|
|
||||||
|
```text
|
||||||
|
D2 reste STRUCTURAL
|
||||||
|
nom Worker canonique = ksp-worker-raw-transaction-ingest-lib
|
||||||
|
Worker/Job restent séparés
|
||||||
|
Config reste propriétaire de l'environnement et des secrets
|
||||||
|
Store backend direct reste interdit au Worker
|
||||||
|
VER-ID-009 impose 0.3.12-pre.1 pour cette prerelease non-fix
|
||||||
|
```
|
||||||
|
|
||||||
|
## 7. Sources internes de handoff auditées
|
||||||
|
|
||||||
|
Lecture/inventaire réalisés sur :
|
||||||
|
|
||||||
|
```text
|
||||||
|
docs/plans/032-V0_3_11_RAW_TRANSACTION_INGEST_WORKER_FOUNDATION_PLAN.md
|
||||||
|
docs/validation/028-V0_3_11_RAW_TRANSACTION_INGEST_WORKER_FOUNDATION.md
|
||||||
|
crates/ksp-worker-raw-transaction-ingest-lib/Cargo.toml
|
||||||
|
crates/ksp-worker-raw-transaction-ingest-lib/README.md
|
||||||
|
crates/ksp-worker-raw-transaction-ingest-lib/USAGE.md
|
||||||
|
crates/ksp-worker-raw-transaction-ingest-lib/src/
|
||||||
|
crates/ksp-worker-raw-transaction-ingest-lib/tests/
|
||||||
|
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/
|
||||||
|
|
||||||
|
docs/architecture/009-ACQUISITION_WORKERS_AND_JOBS.md
|
||||||
|
docs/architecture/011-RAW_TRANSACTION_ACQUISITION.md
|
||||||
|
docs/plans/031-V0_3_10_RAW_TRANSACTION_INGEST_PLAN.md
|
||||||
|
docs/validation/027-V0_3_10_RAW_TRANSACTION_INGEST.md
|
||||||
|
crates/ksp-raw-transaction-lib/README.md
|
||||||
|
crates/ksp-raw-transaction-lib/USAGE.md
|
||||||
|
crates/ksp-raw-transaction-lib/src/
|
||||||
|
crates/ksp-raw-transaction-lib/tests/
|
||||||
|
|
||||||
|
crates/ksp-onchain-transport-lib/Cargo.toml
|
||||||
|
crates/ksp-onchain-transport-lib/README.md
|
||||||
|
crates/ksp-onchain-transport-lib/USAGE.md
|
||||||
|
crates/ksp-onchain-transport-lib/src/grpc_*.rs
|
||||||
|
crates/ksp-onchain-transport-lib/src/rpc_transactions.rs
|
||||||
|
crates/ksp-onchain-transport-lib/src/rpc_blocks.rs
|
||||||
|
crates/ksp-onchain-transport-lib/tests/
|
||||||
|
|
||||||
|
crates/ksp-store-lib/README.md
|
||||||
|
crates/ksp-store-lib/USAGE.md
|
||||||
|
crates/ksp-store-lib/src/
|
||||||
|
crates/ksp-worker-api/README.md
|
||||||
|
crates/ksp-worker-api/USAGE.md
|
||||||
|
crates/ksp-worker-api/src/
|
||||||
|
crates/ksp-config-lib/README.md
|
||||||
|
crates/ksp-config-lib/USAGE.md
|
||||||
|
crates/ksp-config-lib/src/
|
||||||
|
```
|
||||||
|
|
||||||
|
Le résultat d'inventaire est détaillé dans le plan `033`.
|
||||||
|
|
||||||
|
## 8. Preuve Worker stable
|
||||||
|
|
||||||
|
Le Worker stable possède exactement huit fichiers de production sous `src/` :
|
||||||
|
|
||||||
|
```text
|
||||||
|
admission.rs
|
||||||
|
error.rs
|
||||||
|
identity.rs
|
||||||
|
lib.rs
|
||||||
|
persistence.rs
|
||||||
|
runtime.rs
|
||||||
|
settings.rs
|
||||||
|
snapshot.rs
|
||||||
|
```
|
||||||
|
|
||||||
|
Le manifest normal ne contient pas `ksp-onchain-transport-lib`, `ksp-config-lib`, `ksp-job-backfill-lib`, backend physique, Tonic, Reqwest ni Yellowstone proto.
|
||||||
|
|
||||||
|
Un scan source `grpc|yellowstone|http|ws|transport` ne révèle qu'une documentation signalant l'absence de source live ; aucun adapter réseau productif n'est présent.
|
||||||
|
|
||||||
|
Résultat : PASS pour la précondition `0.3.11`.
|
||||||
|
|
||||||
|
## 9. Preuve Transport actuelle
|
||||||
|
|
||||||
|
Contrats existants confirmés :
|
||||||
|
|
||||||
|
```text
|
||||||
|
YellowstoneGrpcChannel::open_standard_subscribe
|
||||||
|
SolanaYellowstoneGrpcSubscribeSession::next_update
|
||||||
|
SolanaYellowstoneGrpcSubscribeSession::snapshot
|
||||||
|
YellowstoneSubscribeRequest::set_from_slot
|
||||||
|
YellowstoneReplayInfo::first_available
|
||||||
|
HttpTransportPool::get_transaction_observed
|
||||||
|
HttpTransportPool::get_block_observed
|
||||||
|
HttpObservedValue::{value, endpoint_name, provider}
|
||||||
|
```
|
||||||
|
|
||||||
|
Le snapshot Yellowstone indique explicitement :
|
||||||
|
|
||||||
|
```text
|
||||||
|
continuity_gap_count : seulement gap prouvé par borne ReplayInfo
|
||||||
|
replay_attempt_count : tentative, pas preuve de couverture
|
||||||
|
duplicate_update_count : observabilité, duplicates toujours livrés
|
||||||
|
last_requested_from_slot
|
||||||
|
last_observed_slot
|
||||||
|
```
|
||||||
|
|
||||||
|
Résultat : PASS pour la réutilisation du moteur existant.
|
||||||
|
|
||||||
|
## 10. Audit externe de fraîcheur
|
||||||
|
|
||||||
|
### 10.1 Yellowstone versions
|
||||||
|
|
||||||
|
Source docs.rs courante :
|
||||||
|
|
||||||
|
```text
|
||||||
|
yellowstone-grpc-proto latest : 12.7.0
|
||||||
|
publication : 2026-08-29
|
||||||
|
workspace KSP : ^12.7
|
||||||
|
```
|
||||||
|
|
||||||
|
Résultat : aucune mise à jour de dépendance nécessaire en `pre.001`.
|
||||||
|
|
||||||
|
### 10.2 Replay upstream
|
||||||
|
|
||||||
|
Le changelog upstream du 22 juillet 2026 documente la correction `yellowstone-grpc-geyser 14.2.1` pour un cas où `from_slot` + `blocks` était accepté mais aucun Block replay n'était livré avant reprise live.
|
||||||
|
|
||||||
|
Impact de validation :
|
||||||
|
|
||||||
|
```text
|
||||||
|
subscribe accepted != replay proven
|
||||||
|
from_slot sent != replay proven
|
||||||
|
first_available compatible != replay proven
|
||||||
|
```
|
||||||
|
|
||||||
|
Cette menace doit posséder un canari KSP et, si un provider live est disponible, un smoke dédié.
|
||||||
|
|
||||||
|
### 10.3 Solana HTTP
|
||||||
|
|
||||||
|
La documentation officielle courante confirme que `getTransaction` à `confirmed/finalized`, en Base64, fournit les champs nécessaires à la conversion Common RAW déjà qualifiée : `blockTime`, `meta`, `slot`, `transaction`, `version`.
|
||||||
|
|
||||||
|
Résultat : hydration `getTransaction` maintenue comme référence P0.
|
||||||
|
|
||||||
|
### 10.4 Providers
|
||||||
|
|
||||||
|
OrbitFlare documente encore Devnet gRPC et un free tier Devnet-only. Helius LaserStream documente Yellowstone wire compatibility et un replay provider-specific d'environ 216 000 slots / 24 heures. Ces valeurs ne sont pas transposées dans les constantes KSP.
|
||||||
|
|
||||||
|
PublicNode reste operator-only dans KSP ; aucune nouvelle assertion provider n'est ajoutée faute de source primaire indexée suffisamment précise pendant ce gate.
|
||||||
|
|
||||||
|
## 11. Gate de matrice Yellowstone fermé
|
||||||
|
|
||||||
|
### 11.1 Transaction
|
||||||
|
|
||||||
|
Preuve interne : `YellowstoneTransactionUpdate` contient slot, filter names, created_at et `YellowstoneTransactionInfo`; ce dernier contient signature, transaction, meta, index.
|
||||||
|
|
||||||
|
Conclusion : candidat hydration ; RAW-direct non prouvé.
|
||||||
|
|
||||||
|
### 11.2 TransactionStatus
|
||||||
|
|
||||||
|
Preuve interne : slot, signature, index, is_vote, error optionnelle.
|
||||||
|
|
||||||
|
Conclusion : discovery/hydration seulement.
|
||||||
|
|
||||||
|
### 11.3 Block
|
||||||
|
|
||||||
|
Preuve interne : slot, block_time, transactions avec transaction/meta/signature/index, compteurs et metadata block.
|
||||||
|
|
||||||
|
Conclusion : chaque transaction peut devenir candidat hydration ; aucun pipeline block RAW parallèle.
|
||||||
|
|
||||||
|
### 11.4 BlockMeta
|
||||||
|
|
||||||
|
Conclusion : continuity/health only ; aucune signature donc aucune hydration transaction autonome.
|
||||||
|
|
||||||
|
### 11.5 Slot
|
||||||
|
|
||||||
|
Conclusion : continuity/health only ; aucune admission RAW.
|
||||||
|
|
||||||
|
### 11.6 from_slot
|
||||||
|
|
||||||
|
Conclusion : mécanisme Transport de replay au reconnect, pas checkpoint historique Worker.
|
||||||
|
|
||||||
|
### 11.7 ReplayInfo
|
||||||
|
|
||||||
|
Conclusion : `first_available` prouve seulement une limite de rétention. Un gap est prouvé quand la demande est antérieure à cette borne ; le cas inverse ne prouve pas que toutes les updates filtrées ont été livrées.
|
||||||
|
|
||||||
|
## 12. Gate architecture d'injection fermé
|
||||||
|
|
||||||
|
Décision :
|
||||||
|
|
||||||
|
```text
|
||||||
|
nouvel edge autorisé : Worker -> ksp-onchain-transport-lib
|
||||||
|
Worker -> Config : interdit
|
||||||
|
Worker -> Job : interdit
|
||||||
|
Worker -> backend : interdit
|
||||||
|
Worker -> Tonic/Reqwest/yellowstone-grpc-proto direct : non retenu
|
||||||
|
```
|
||||||
|
|
||||||
|
La composition supérieure construit `YellowstoneGrpcChannel`, `YellowstoneSubscribeRequest`, `HttpTransportPool` et `HttpRoleName`. `pre.002` matérialise exactement :
|
||||||
|
|
||||||
|
```text
|
||||||
|
RawTransactionIngestYellowstoneSource::new(...)
|
||||||
|
RawTransactionIngestRuntimeResources::new(yellowstone_source)
|
||||||
|
RawTransactionIngestWorker::start_with_runtime_resources(settings, Arc<Store>, resources)
|
||||||
|
```
|
||||||
|
|
||||||
|
Les champs restent privés. `RawTransactionIngestWorker::start(settings, Arc<Store>)` reste disponible comme foundation source-neutral. Aucune API publique `enqueue` n'est ouverte.
|
||||||
|
|
||||||
|
## 13. Gate hydration/provenance fermé
|
||||||
|
|
||||||
|
Hydration P0 :
|
||||||
|
|
||||||
|
```text
|
||||||
|
get_transaction_observed
|
||||||
|
Base64
|
||||||
|
confirmed/finalized uniquement
|
||||||
|
maxSupportedTransactionVersion = 0
|
||||||
|
```
|
||||||
|
|
||||||
|
Provenance : route composite encodée dans les champs `RawAcquisitionProvenance` existants, avec provider/endpoint réels du winner HTTP et identité sûre Yellowstone, sous `MAX_RAW_CODE_BYTES`. Aucune migration Store.
|
||||||
|
|
||||||
|
Un code composite impossible à représenter est rejeté ; aucune troncature silencieuse.
|
||||||
|
|
||||||
|
## 14. Gate continuité fermé
|
||||||
|
|
||||||
|
Décisions :
|
||||||
|
|
||||||
|
```text
|
||||||
|
Transport high-watermark != Worker processing frontier
|
||||||
|
processing frontier != blockchain completeness
|
||||||
|
reconnect != replay
|
||||||
|
replay != repair
|
||||||
|
continuity gap prouvé => fault Worker sûr
|
||||||
|
aucun Backfill automatique
|
||||||
|
aucun checkpoint persistant inter-process
|
||||||
|
pending hydration peut survivre au reconnect source dans le même run
|
||||||
|
```
|
||||||
|
|
||||||
|
Le split `pre.007`/`pre.008` évite de coder frontier et replay semantics dans une seule tranche.
|
||||||
|
|
||||||
|
## 15. Threat model à transformer en tests
|
||||||
|
|
||||||
|
Canaris obligatoires :
|
||||||
|
|
||||||
|
```text
|
||||||
|
secret/URL/header redaction
|
||||||
|
remote status/error text not copied
|
||||||
|
bounded signal/hydration queues
|
||||||
|
bounded coalescence
|
||||||
|
no duplicate HTTP in-flight for same key
|
||||||
|
no double retry storm
|
||||||
|
stop during connect/reconnect/hydration/replay
|
||||||
|
no admission after stop frontier
|
||||||
|
no orphan task after terminal
|
||||||
|
counter checked arithmetic
|
||||||
|
stale frontier never labelled complete
|
||||||
|
continuity gap terminal and safe
|
||||||
|
```
|
||||||
|
|
||||||
|
## 16. Smokes live
|
||||||
|
|
||||||
|
### 16.1 Disponibilité démontrée par le dépôt
|
||||||
|
|
||||||
|
Présents et ignored :
|
||||||
|
|
||||||
|
```text
|
||||||
|
yellowstone_orbitflare_smoke
|
||||||
|
yellowstone_publicnode_smoke
|
||||||
|
```
|
||||||
|
|
||||||
|
Ils exigent des tokens fournis de manière operator-only.
|
||||||
|
|
||||||
|
### 16.2 Disponibilité opérateur pour `pre.001`
|
||||||
|
|
||||||
|
Aucun secret live n'est fourni dans l'archive. Le journal stable montre ces tests comme ignorés par défaut.
|
||||||
|
|
||||||
|
Résultat :
|
||||||
|
|
||||||
|
```text
|
||||||
|
Worker live smoke : NON EXÉCUTÉ en pre.001
|
||||||
|
raison : pipeline productif pas encore implémenté + secret/provider live non fourni au gate
|
||||||
|
```
|
||||||
|
|
||||||
|
Aucun faux PASS live n'est enregistré.
|
||||||
|
|
||||||
|
## 17. Graphe Cargo cible vérifiable à partir de `pre.002`
|
||||||
|
|
||||||
|
Attendu :
|
||||||
|
|
||||||
|
```text
|
||||||
|
Worker -> core
|
||||||
|
Worker -> logging
|
||||||
|
Worker -> onchain-transport
|
||||||
|
Worker -> raw-transaction
|
||||||
|
Worker -> store facade default-features=false
|
||||||
|
Worker -> worker-api
|
||||||
|
Worker -> sha2
|
||||||
|
Worker -> tokio
|
||||||
|
```
|
||||||
|
|
||||||
|
Toujours absent :
|
||||||
|
|
||||||
|
```text
|
||||||
|
Config
|
||||||
|
Job Backfill
|
||||||
|
Store backend
|
||||||
|
Tauri
|
||||||
|
provider SDK
|
||||||
|
Tonic direct
|
||||||
|
Reqwest direct
|
||||||
|
Yellowstone proto direct
|
||||||
|
```
|
||||||
|
|
||||||
|
## 18. Sizing et décision release
|
||||||
|
|
||||||
|
Forecast retenu :
|
||||||
|
|
||||||
|
```text
|
||||||
|
pre.001 audit/sizing/plan
|
||||||
|
pre.002 Transport resource/source contract
|
||||||
|
pre.003 Transaction + TransactionStatus signal adapters
|
||||||
|
pre.004 HTTP hydration + provenance composite
|
||||||
|
pre.005 Block + BlockMeta + Slot adapters
|
||||||
|
pre.006 productive source task + supervisor/coalescence
|
||||||
|
pre.007 processing frontier
|
||||||
|
pre.008 reconnect/from_slot/ReplayInfo
|
||||||
|
pre.009 races/retry/backpressure hardening
|
||||||
|
pre.010 cross-layer completeness/security
|
||||||
|
pre.011 technical/live gate
|
||||||
|
pre.012 documentation reconciliation
|
||||||
|
pre.013 publication preparation
|
||||||
|
rel.001
|
||||||
|
```
|
||||||
|
|
||||||
|
Décision : `0.3.12` reste ouverte et n'est pas rescindée. Toute tranche dépassant réellement 15–20 minutes est scindée avant exécution.
|
||||||
|
|
||||||
|
## 19. Validation après modification de `pre.001`
|
||||||
|
|
||||||
|
Exécuté sur le delta complet :
|
||||||
|
|
||||||
|
```text
|
||||||
|
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
|
||||||
|
Markdown table audit: clean (340 table(s), 801 file(s))
|
||||||
|
```
|
||||||
|
|
||||||
|
Résultat : PASS pour les audits statiques locaux.
|
||||||
|
|
||||||
|
Cargo reste NON EXÉCUTÉ localement car l'outil n'est pas installé.
|
||||||
|
|
||||||
|
Le gate opérateur demandé après application du delta est :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo fmt --all -- --check
|
||||||
|
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
|
||||||
|
cargo check --workspace
|
||||||
|
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
||||||
|
```
|
||||||
|
|
||||||
|
`pre.001` n'ajoutant aucun Rust, les tests ciblés Worker restent une preuve de non-régression facultative mais recommandée :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo test -p ksp-worker-raw-transaction-ingest-lib
|
||||||
|
cargo tree -p ksp-worker-raw-transaction-ingest-lib --edges normal
|
||||||
|
cargo tree -p ksp-worker-raw-transaction-ingest-lib -e features
|
||||||
|
```
|
||||||
|
|
||||||
|
## 20. Non-claims `pre.001`
|
||||||
|
|
||||||
|
`pre.001` ne prétend pas avoir :
|
||||||
|
|
||||||
|
```text
|
||||||
|
ajouté l'edge Worker -> Transport dans Cargo
|
||||||
|
ouvert une session Yellowstone dans le Worker
|
||||||
|
hydraté une transaction live
|
||||||
|
persisté un RAW live Yellowstone
|
||||||
|
prouvé un RAW-direct Yellowstone
|
||||||
|
prouvé un replay provider complet
|
||||||
|
implémenté une frontier
|
||||||
|
implémenté un repair
|
||||||
|
enrichi les snapshots runtime
|
||||||
|
exécuté un smoke live Worker
|
||||||
|
exécuté Cargo dans l'environnement d'assemblage
|
||||||
|
```
|
||||||
|
|
||||||
|
## 21. Critère de sortie `pre.001`
|
||||||
|
|
||||||
|
Le gate est fermé si :
|
||||||
|
|
||||||
|
```text
|
||||||
|
base stable prouvée
|
||||||
|
règles auditées
|
||||||
|
surfaces internes inventoriées
|
||||||
|
fraîcheur externe auditée
|
||||||
|
matrice Yellowstone fermée
|
||||||
|
injection runtime décidée
|
||||||
|
hydration/provenance décidées
|
||||||
|
frontier/replay/repair distingués
|
||||||
|
threat model défini
|
||||||
|
smokes classifiés
|
||||||
|
Cargo graph cible défini
|
||||||
|
forecast <20 min par tranche
|
||||||
|
maintien/split décidé
|
||||||
|
plan + validation + delta créés
|
||||||
|
audits statiques post-modification verts
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user