Files
khadhroony-solana-project/deltas/0.3.14/pre.005.md
2026-09-11 23:15:00 +02:00

9.9 KiB

Delta 0.3.14-pre.005 — preuve conservative de coverage redondante

Base requise

0.3.14-pre.004
workspace.package.version = 0.3.14-pre.4
deltas/0.3.14/pre.004.md présent

Gate de la base

Le gate opérateur de 0.3.14-pre.004 est validé avant ouverture de cette tranche :

cargo fmt --all : PASS
cargo fmt --all -- --check : PASS
audit Rust workspace rules : PASS
audit Markdown tables : PASS
cargo check --workspace : PASS
cargo clippy --workspace --all-targets --all-features -- -D warnings : PASS
cargo test -p ksp-onchain-transport-lib --all-targets --all-features : PASS
cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features : PASS

Le gate Transport comprend notamment :

391 unit tests : PASS
public_api : 53 PASS
release_completeness : 46 PASS
smokes live : ignorés par défaut conformément au contrat existant

Le gate Worker comprend notamment :

120 unit tests : PASS
cross_layer_completeness : 8 PASS
dependency_boundary : 19 PASS
hardening : 29 PASS
public_api : 20 PASS
release_completeness : 6 PASS

Objectif

Implémenter strictement la tranche pre.005 du plan 035 :

matérialiser les relations conservative Exact / Superset
matérialiser des epochs et ranges de coverage run-local bornés
n'autoriser une preuve redondante que depuis une source distincte
exiger un commitment strictement identique
exiger que l'epoch couvre intégralement la plage du gap
interdire toute équivalence opportuniste entre familles exactes différentes
conserver KnownReferences impropre à TargetCoverage
ne modifier encore aucune décision runtime de supervisor
ne déclencher aucun repair HTTP et aucun replay supplémentaire

Relations de coverage

RawTransactionIngestCoverageScope possède maintenant une relation privée et directionnelle :

FullLedgerTransactions -> FullLedgerTransactions : Exact
FullLedgerTransactions -> ExactSourceScope(...)  : Superset
ExactSourceScope(family, fingerprint)
    -> ExactSourceScope(même family, même fingerprint) : Exact
autres combinaisons : aucune relation prouvée

Cette relation est volontairement conservative.

Deux scopes exacts qui partagent le même fingerprint mais pas le même family_code ne sont jamais considérés équivalents. Ainsi, par exemple, aucune correspondance standard_logs <-> helius_transaction ou standard_block <-> yellowstone n'est inventée à partir d'une similarité de sélecteur.

La relation est également indépendante de l'identité provider/endpoint : cette indépendance vient uniquement du scope sémantique déjà normalisé, tandis que l'obligation de redondance exige une source_key différente.

Commitments

La redondance requiert un commitment strictement identique :

Confirmed couvre seulement Confirmed
Finalized couvre seulement Finalized

Aucune hiérarchie Confirmed <-> Finalized n'est inférée dans cette tranche.

TargetCoverage

La construction de RawTransactionIngestTargetCoverage réutilise désormais la relation conservative plutôt qu'une comparaison ad hoc :

un FullLedgerTransactions au même commitment subsume les requirements exacts
un requirement exact identique est dédupliqué
un scope exact cross-family reste distinct
un commitment différent reste distinct
KnownReferences reste interdit comme target scope

Aucune broadening cross-family n'est introduite.

Epochs et ranges de coverage

La tranche matérialise des contrats privés :

RawTransactionIngestCoverageRange
RawTransactionIngestCoverageEpoch
RawTransactionIngestCoverageEpochLedger
RawTransactionIngestCoverageRelation

Un CoverageRange est inclusif et rejette uniquement une plage inversée. Contrairement au GapRange, il n'est pas limité artificiellement à MAX_RAW_TRANSACTION_INGEST_REPAIR_RANGE_SLOTS, car un epoch de continuité saine peut être plus long qu'une seule obligation de repair.

Un epoch conserve :

epoch_id
source_key
commitment
scope
range inclusif

Le ledger est run-local et borné à :

MAX_RAW_TRANSACTION_INGEST_COVERAGE_EPOCHS = 256

Il vérifie :

IDs non nuls et uniques
next_epoch_id strictement monotone
borne de cardinalité
range valide
scope admissible comme configured target scope
source_key présente dans l'inventaire exact des capabilities
commitment et scope strictement identiques à la capability de cette source

Le ledger est initialisé vide avec les autres continuity contracts. Aucune coverage n'est pré-déclarée à partir de la simple configuration d'une source.

Preuve de redondance

Un epoch peut prouver une obligation uniquement si toutes les conditions suivantes sont vraies :

source de preuve != source cible
commitment de preuve == commitment requis
range de preuve contient intégralement le GapRange inclusif
scope de preuve relation Exact ou Superset avec le scope requis

Un epoch partiel, une source identique, un commitment différent, un filtre différent ou une famille différente ne ferment donc aucune obligation.

FullLedgerTransactions peut fournir une preuve Superset d'un scope exact au même commitment, parce qu'il représente toutes les transactions de tous les blocs produits. L'inverse est interdit.

Activation runtime

Cette tranche ne change pas encore la politique de source-loss/reconciliation :

aucun gap n'est fermé automatiquement
aucune source n'est maintenue en vie grâce à cette preuve
aucune terminalité fail-closed de pre.003/pre.004 n'est encore remplacée

pre.008 restera responsable de l'intégration de ces preuves dans le supervisor et le gap ledger. pre.005 fournit uniquement le modèle conservative nécessaire.

Tests ajoutés

Les unit tests Worker couvrent :

Exact pour même famille + même fingerprint
Superset uniquement FullLedger -> exact
absence de relation exact -> FullLedger
absence de relation pour filtre exact différent
absence de relation cross-family malgré fingerprint identique
source distincte obligatoire
commitment strictement identique
range complet obligatoire
ledger borné à 256 epochs
next_epoch_id monotone
capability source/scope/commitment obligatoire

Les canaris hardening et release_completeness garantissent en plus :

présence des contrats Exact/Superset/epoch
absence d'équivalence cross-family codée en dur
absence de hiérarchie opportuniste de commitment
absence d'exposition publique des nouveaux types de preuve

Fichiers ajoutés

deltas/0.3.14/pre.005.md

Fichiers modifiés

Cargo.toml
crates/ksp-worker-raw-transaction-ingest-lib/src/continuity.rs
crates/ksp-worker-raw-transaction-ingest-lib/tests/hardening.rs
crates/ksp-worker-raw-transaction-ingest-lib/tests/release_completeness.rs
crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/continuity.rs

Fichiers supprimés

aucun

Version Cargo

Conformément à VER-ID-009, cette nouvelle prerelease synchronise la version workspace :

header Cargo.toml : 571 -> 572
workspace.package.version : 0.3.14-pre.4 -> 0.3.14-pre.5

Versions des fichiers modifiés :

ksp-worker-raw-transaction-ingest-lib/src/continuity.rs : 4 -> 5
ksp-worker-raw-transaction-ingest-lib/tests/hardening.rs : 28 -> 29
ksp-worker-raw-transaction-ingest-lib/tests/release_completeness.rs : 23 -> 24
ksp-worker-raw-transaction-ingest-lib/unit_tests/continuity.rs : 3 -> 4

Frontières préservées

aucun changement Transport
aucun changement Config
aucun changement Store
aucun changement Job Backfill
aucune nouvelle dépendance
aucune nouvelle feature
aucun repair HTTP
aucun replay Worker
aucun nouveau socket/actor/retry
aucun set_from_slot dans Worker
aucune nouvelle surface publique Worker
aucune équivalence cross-family opportuniste
aucune hiérarchie implicite de commitment

Validations exécutées dans le sandbox de préparation

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
scan des frontières et de la surface crate-root Worker
comparaison exacte 0.3.14-pre.004 -> 0.3.14-pre.005
contrôle des versions de fichiers modifiés
contrôle du contenu de l'archive delta
unzip -t de l'archive delta
réapplication de l'archive sur la base puis comparaison byte-exacte

Validations non exécutées dans le sandbox de préparation

Le sandbox ne fournit pas le toolchain Cargo/Rust. Les gates suivants restent à exécuter côté opérateur :

cargo fmt --all
cargo fmt --all -- --check
cargo check --workspace
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features

Décisions prises

coverage relationnelle directionnelle, jamais symétrisée implicitement
FullLedger est un superset d'un exact scope au même commitment
un exact scope n'est équivalent qu'à même family + même fingerprint
une redondance doit provenir d'une source_key distincte
un epoch doit contenir toute la plage du gap
aucune coverage initiale n'est créée depuis la configuration seule
pre.005 ne modifie pas encore la terminalité runtime

Questions ouvertes

aucune pour pre.005

Tranche suivante

pre.006 reste dédiée au scan HTTP de réparation : détection des capabilities run-wide réellement disponibles, fenêtres bornées, découverte getBlocks/getBlocksWithLimit conservative et récupération getBlock observed, sans broadening de scope.

Gate opérateur après application

cargo fmt --all
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 --all-targets --all-features