v0.3.5-pre.005-fix.001

This commit is contained in:
2026-08-31 11:23:40 +02:00
parent 7377a6f6cd
commit 749e53edc2
4 changed files with 120 additions and 6 deletions

View File

@@ -1,12 +1,12 @@
# file: Cargo.toml
# version: 387
# version: 388
[workspace]
resolver = "3"
members = ["crates/ksp-app-config-desk", "crates/ksp-app-solprices-desk", "crates/ksp-app-wallet-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-interface-lib", "crates/ksp-logging-lib", "crates/ksp-offchain-transport-lib", "crates/ksp-onchain-transport-lib", "crates/ksp-program-api", "crates/ksp-store-api", "crates/ksp-store-lib", "crates/ksp-store-postgres-lib", "crates/ksp-wallet-lib"]
[workspace.package]
version = "0.3.5-pre.5"
version = "0.3.5-pre.5.fix.1"
edition = "2024"
license = "MIT"
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-interface-lib/tests/dependency_boundary.rs
// version: 7
// version: 8
//! Dependency and passive-surface canaries for the Interface foundation.
@@ -166,7 +166,17 @@ fn v0_3_5_pre_005_manifest_keeps_exact_core_only_graph_without_features_or_hidde
assert!(!manifest.contains("[features]"));
assert!(!manifest.contains("[dev-dependencies]"));
assert!(!manifest.contains("[build-dependencies]"));
assert_eq!(manifest.matches("ksp-core-lib").count(), 1);
assert_eq!(manifest.matches("[dependencies]").count(), 1);
let dependencies_tail = manifest.split("[dependencies]").nth(1);
assert!(dependencies_tail.is_some(), "Interface dependencies section must exist");
let dependencies_tail = match dependencies_tail {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
let dependencies = match dependencies_tail.split("[lints]").next() {
std::option::Option::Some(value) => value,
std::option::Option::None => return,
};
assert_eq!(manifest_dependency_names(dependencies), std::vec!["ksp-core-lib"]);
return;
}

View File

@@ -0,0 +1,78 @@
# Delta `0.3.5-pre.005-fix.001`
## Objet
Corriger le faux négatif du canari de manifeste ajouté par `0.3.5-pre.005`, sans modifier le contrat fonctionnel ni le graphe de dépendances de `ksp-interface-lib`.
## Base
```text
0.3.5-pre.005
workspace.package.version = 0.3.5-pre.5
```
## Diagnostic opérateur
Le gate du `2026-08-31` est propre pour les audits Rust/Markdown et `cargo check --workspace`, mais le nouveau test :
```text
v0_3_5_pre_005_manifest_keeps_exact_core_only_graph_without_features_or_hidden_dependency_sections
```
échoue avec :
```text
left: 2
right: 1
```
La cause est le comptage textuel `manifest.matches("ksp-core-lib")` appliqué à la déclaration :
```text
ksp-core-lib = { path = "../ksp-core-lib" }
```
Cette ligne contient légitimement deux occurrences de la chaîne tout en déclarant une seule dépendance. Le manifeste lui-même est correct.
## Correction
- conserver les interdictions de sections `[features]`, `[dev-dependencies]` et `[build-dependencies]` ;
- conserver l'exigence d'une seule section `[dependencies]` ;
- extraire cette section puis réutiliser `manifest_dependency_names(...)` ;
- vérifier l'inventaire exact des clés de dépendance : `ksp-core-lib` uniquement ;
- ne modifier aucun manifeste de crate, source de production, type public ou dependency graph.
## Version
Le fix modifie une source Rust de test ; la version workspace devient :
```text
workspace.package.version = 0.3.5-pre.5.fix.1
```
Le numéro documentaire reste :
```text
0.3.5-pre.005-fix.001
```
## Fichiers modifiés
```text
Cargo.toml
crates/ksp-interface-lib/tests/dependency_boundary.rs
docs/validation/022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md
deltas/0.3.5/pre.005-fix.001.md
```
## Gate demandé
```bash
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.5
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-interface-lib
cargo test -p ksp-program-api
```

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/022-V0_3_5_INTERFACE_ACQUISITION_EVENTS.md -->
<!-- version: 6 -->
<!-- version: 7 -->
# Validation `0.3.5` — Interface passive acquisition events
@@ -17,7 +17,7 @@ workspace.package.version = 0.3.4
Version de travail :
```text
0.3.5-pre.3
0.3.5-pre.5.fix.1
```
## 2. Gate d'entrée `v0.3.4`
@@ -750,3 +750,29 @@ cargo test -p ksp-program-api
```
Les gates Cargo de `pre.005` restent à exécuter par l'opérateur dans le repository réel.
## 33. Gate opérateur `pre.005` et correction `pre.005-fix.001`
Le gate opérateur du `2026-08-31` confirme que les audits Rust/Markdown et `cargo check --workspace` sont propres, mais révèle un défaut dans le nouveau canari de manifeste :
```text
v0_3_5_pre_005_manifest_keeps_exact_core_only_graph_without_features_or_hidden_dependency_sections: FAILED
left: 2
right: 1
```
Le manifeste Interface reste pourtant strictement Core-only. Le canari comptait naïvement les occurrences textuelles de `ksp-core-lib` dans :
```text
ksp-core-lib = { path = "../ksp-core-lib" }
```
Le nom apparaît donc deux fois sur une seule déclaration de dépendance : une fois comme clé et une fois dans le chemin. `pre.005-fix.001` corrige uniquement ce faux négatif en réutilisant le parseur de clés de dépendances déjà présent dans `dependency_boundary.rs`. Le canari vérifie désormais que la section `[dependencies]` existe exactement une fois et que son inventaire de clés vaut exactement `ksp-core-lib`, tout en conservant les interdictions `[features]`, `[dev-dependencies]` et `[build-dependencies]`.
Le fix modifie une source Rust de test ; la version workspace évolue donc vers :
```text
0.3.5-pre.5.fix.1
```
Aucun manifeste de crate, source de production, contrat public ou dependency graph n'est modifié.