From 9ee3cd4a532186f6ea73a582787b7c33efbf1199 Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Sun, 13 Sep 2026 11:29:38 +0200 Subject: [PATCH] v0.3.15-pre.005-fix.002 --- Cargo.toml | 4 +- .../frontend/main.html | 127 +++++++------- .../frontend/sass/_app.scss | 34 +++- .../frontend/ts/main.ts | 15 +- .../tests/desktop_contract.rs | 33 +++- .../tests/release_completeness.rs | 4 +- deltas/0.3.15/pre.005-fix.002.md | 164 ++++++++++++++++++ 7 files changed, 310 insertions(+), 71 deletions(-) create mode 100644 deltas/0.3.15/pre.005-fix.002.md diff --git a/Cargo.toml b/Cargo.toml index 4f3c99d..f76dedd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 600 +# version: 601 [workspace] resolver = "3" members = ["crates/ksp-app-backfill-desk", "crates/ksp-app-config-desk", "crates/ksp-app-raw-transaction-ingest-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] -version = "0.3.15-pre.5.fix.1" +version = "0.3.15-pre.5.fix.2" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" diff --git a/crates/ksp-app-raw-transaction-ingest-desk/frontend/main.html b/crates/ksp-app-raw-transaction-ingest-desk/frontend/main.html index a7cd5ba..5f5583a 100644 --- a/crates/ksp-app-raw-transaction-ingest-desk/frontend/main.html +++ b/crates/ksp-app-raw-transaction-ingest-desk/frontend/main.html @@ -1,5 +1,5 @@ - + @@ -8,27 +8,30 @@ - KSP Raw Transaction Ingest Desk + Raw Transaction Ingest Desk — Routes -
-
- -
-
KSP Raw Transaction Ingest Desk
- Composition et supervision des routes live RawTransaction +
+
+
-
-
- -
-
-
-
-
-
-

Routes live

-

Fondation statique V1 ; la composabilité Config sera matérialisée en pre.006.

+
+
+
+
+
+
+
+

Routes live

+

Fondation statique V1 ; la composabilité Config sera matérialisée en pre.006.

+
+
- -
-
- Aucun Worker n'est démarré par ce scaffold. Les cinq IDs ci-dessous ne constituent aucune preuve de disponibilité runtime. -
-
-
-
États réservés
-
-
+
+ Aucun Worker n'est démarré par ce scaffold. Les cinq IDs ci-dessous ne constituent aucune preuve de disponibilité runtime.
-
-
+
+
+
États réservés
+
+
+
+
+
- +
+
diff --git a/crates/ksp-app-raw-transaction-ingest-desk/frontend/sass/_app.scss b/crates/ksp-app-raw-transaction-ingest-desk/frontend/sass/_app.scss index 30e0c99..754d79b 100644 --- a/crates/ksp-app-raw-transaction-ingest-desk/frontend/sass/_app.scss +++ b/crates/ksp-app-raw-transaction-ingest-desk/frontend/sass/_app.scss @@ -1,5 +1,5 @@ // file: crates/ksp-app-raw-transaction-ingest-desk/frontend/sass/_app.scss -// version: 1 +// version: 2 $app-header-height: 72px; $app-footer-height: 42px; @@ -52,6 +52,17 @@ body { height: 42px; } +.app-scrollable { + height: 100%; + max-height: 100%; +} + +.app-shell-card { + width: 100%; + max-width: 1320px; + min-width: 0; +} + .app-sidebar { width: $app-sidebar-width; min-width: $app-sidebar-width; @@ -77,12 +88,30 @@ body { font-family: var(--bs-font-monospace); } +.app-route-grid { + margin-right: 0; + margin-left: 0; +} + +.app-route-grid > * { + min-width: 0; +} + .app-route-card { + min-width: 0; + max-width: 100%; + overflow: hidden; border-left: 4px solid rgba($primary, 0.55); } +.app-route-code { + min-width: 0; + overflow-wrap: anywhere; + word-break: break-word; +} + .app-placeholder { - min-height: 220px; + min-height: 320px; display: flex; flex-direction: column; align-items: center; @@ -90,6 +119,7 @@ body { gap: 1rem; padding: 2rem; border: 1px dashed var(--bs-border-color); + border-radius: var(--bs-border-radius-lg); color: var(--bs-secondary-color); background: var(--bs-body-bg); text-align: center; diff --git a/crates/ksp-app-raw-transaction-ingest-desk/frontend/ts/main.ts b/crates/ksp-app-raw-transaction-ingest-desk/frontend/ts/main.ts index 5168a67..7217ecf 100644 --- a/crates/ksp-app-raw-transaction-ingest-desk/frontend/ts/main.ts +++ b/crates/ksp-app-raw-transaction-ingest-desk/frontend/ts/main.ts @@ -1,5 +1,5 @@ // file: crates/ksp-app-raw-transaction-ingest-desk/frontend/ts/main.ts -// version: 1 +// version: 2 import "bootstrap"; import ResizeObserver from "resize-observer-polyfill"; @@ -14,6 +14,11 @@ installFrontendConsoleBridge("main"); type ViewId = "routes" | "diagnostics"; +const viewTitles: Record = { + routes: "Routes", + diagnostics: "Diagnostics", +}; + function isViewId(value: string | undefined): value is ViewId { return value === "routes" || value === "diagnostics"; } @@ -27,7 +32,11 @@ function activateView(viewId: ViewId, source: "startup" | "user"): void { button.classList.toggle("active", active); button.setAttribute("aria-current", active ? "page" : "false"); }); - document.title = `Raw Transaction Ingest Desk — ${viewId === "routes" ? "Routes" : "Diagnostics"}`; + const header = document.querySelector("#headerViewTitle"); + if (header) { + header.textContent = viewTitles[viewId]; + } + document.title = `Raw Transaction Ingest Desk — ${viewTitles[viewId]}`; frontendTrace("main", "Raw Transaction Ingest Desk view DOM updated", { viewId, source }); } @@ -83,7 +92,7 @@ function renderRouteFoundation(foundation: RawIngestRouteFoundationDto): void { routeRoot.replaceChildren(); for (const routeId of foundation.routeIds) { const column = document.createElement("div"); - column.className = "col-12 col-xl-6"; + column.className = "col-12 col-xl-6 app-route-column"; const card = document.createElement("div"); card.className = "card h-100 shadow-sm app-route-card"; const body = document.createElement("div"); diff --git a/crates/ksp-app-raw-transaction-ingest-desk/tests/desktop_contract.rs b/crates/ksp-app-raw-transaction-ingest-desk/tests/desktop_contract.rs index 0b3f853..0455adb 100644 --- a/crates/ksp-app-raw-transaction-ingest-desk/tests/desktop_contract.rs +++ b/crates/ksp-app-raw-transaction-ingest-desk/tests/desktop_contract.rs @@ -1,5 +1,5 @@ // file: crates/ksp-app-raw-transaction-ingest-desk/tests/desktop_contract.rs -// version: 1 +// version: 2 //! Desktop scaffold contract canaries for Raw Transaction Ingest Desk. @@ -122,3 +122,34 @@ fn pre_005_route_foundation_is_backend_owned_and_has_exact_five_ids_and_seven_st assert!(!tauri.contains(forbidden), "scaffold Tauri surface contains premature runtime marker {forbidden}"); } } + +#[test] +fn pre_005_fix_002_shell_reuses_common_light_template_and_bounds_route_foundation() { + let html = read_text(app_root().join("frontend/main.html").as_path()); + for required in [ + "
", + "navbar h-100 py-0 bg-light text-dark", + "col-auto app-sidebar border-end bg-body-tertiary", + "col app-content app-scrollable h-100", + "card app-shell-card mx-auto shadow-sm border-0", + "id=\"routeFoundation\" class=\"row g-3 app-route-grid\"", + ] { + assert!(html.contains(required), "missing common shell marker: {required}"); + } + for forbidden in ["app-header bg-dark", "app-sidebar bg-dark text-light", "app-content flex-grow-1"] { + assert!(!html.contains(forbidden), "obsolete shell marker remains: {forbidden}"); + } + let styles = read_text(app_root().join("frontend/sass/_app.scss").as_path()); + for required in [ + ".app-scrollable {", + ".app-shell-card {", + ".app-route-grid {", + ".app-route-grid > * {", + "min-width: 0;", + "max-width: 100%;", + "overflow: hidden;", + "overflow-wrap: anywhere;", + ] { + assert!(styles.contains(required), "missing bounded layout marker: {required}"); + } +} diff --git a/crates/ksp-app-raw-transaction-ingest-desk/tests/release_completeness.rs b/crates/ksp-app-raw-transaction-ingest-desk/tests/release_completeness.rs index 78a3e95..dd08c69 100644 --- a/crates/ksp-app-raw-transaction-ingest-desk/tests/release_completeness.rs +++ b/crates/ksp-app-raw-transaction-ingest-desk/tests/release_completeness.rs @@ -1,5 +1,5 @@ // file: crates/ksp-app-raw-transaction-ingest-desk/tests/release_completeness.rs -// version: 1 +// version: 2 //! Release-completeness canaries for the Raw Transaction Ingest Desk scaffold tranche. @@ -46,7 +46,7 @@ fn pre_005_production_module_inventory_is_exact_and_scaffold_only() { #[test] fn pre_005_public_surface_exposes_only_application_run_entry_point() { let lib = read_text(app_root().join("src/lib.rs").as_path()); - let public_reexports = lib.lines().filter(|line| line.starts_with("pub use ")).collect::>(); + let public_reexports = lib.lines().filter(|line| return line.starts_with("pub use ")).collect::>(); assert_eq!(public_reexports, vec!["pub use self::tauri::run;"]); } diff --git a/deltas/0.3.15/pre.005-fix.002.md b/deltas/0.3.15/pre.005-fix.002.md new file mode 100644 index 0000000..9f67880 --- /dev/null +++ b/deltas/0.3.15/pre.005-fix.002.md @@ -0,0 +1,164 @@ + + + +# Delta `0.3.15-pre.005-fix.002` — réalignement du template Desk et bornage de `routeFoundation` + +## Base requise + +```text +0.3.15-pre.005-fix.001 +workspace.package.version = 0.3.15-pre.5.fix.1 +deltas/0.3.15/pre.005.md présent +deltas/0.3.15/pre.005-fix.001.md présent +``` + +## Défauts observés + +Le contrôle visuel du nouveau `ksp-app-raw-transaction-ingest-desk` montre deux dérives du scaffold livré en `pre.005` : + +```text +le shell principal utilise un header et une sidebar sombres alors que les autres ksp-app-*-desk utilisent le template clair commun ; +les cartes générées dans #routeFoundation peuvent déborder horizontalement à droite de la fenêtre. +``` + +Le gate opérateur de `pre.005-fix.001` révèle également un second défaut Clippy strict dans `tests/release_completeness.rs` : + +```text +error: missing `return` statement +-D clippy::implicit-return +``` + +La closure de filtrage du canari de surface publique utilisait un retour implicite. + +## Correction du template desktop + +Le shell principal est réaligné sur le contrat visuel déjà utilisé par Config Desk, Wallet Desk, SOL Prices Desk, Store Desk et Backfill Desk : + +```text +header app-header contenant une navbar bg-light text-dark ; +sidebar col-auto app-sidebar border-end bg-body-tertiary ; +contenu col app-content app-scrollable h-100 avec SimpleBar ; +container-fluid px-4 py-4 ; +card app-shell-card mx-auto shadow-sm border-0 ; +footer sombre commun inchangé. +``` + +Le titre de vue du header est désormais explicitement possédé par `#headerViewTitle` et synchronisé par la navigation frontend entre `Routes` et `Diagnostics`. + +Aucune couleur métier spécifique n'est introduite : `_variables.scss` et `_bootswatch.scss` restent ceux du template Pulse déjà copié depuis les autres Desk. + +## Correction du débordement de `routeFoundation` + +La structure commune manquante est restaurée et la grille de routes reçoit en plus des gardes explicites : + +```text +app-shell-card avec width 100 %, max-width 1320px et min-width 0 ; +app-route-grid sans marge horizontale négative effective ; +enfants de grille avec min-width 0 ; +cartes avec min-width 0, max-width 100 % et overflow hidden ; +IDs monospace avec overflow-wrap anywhere et word-break break-word. +``` + +Les colonnes générées par TypeScript portent également `app-route-column` en plus des classes Bootstrap `col-12 col-xl-6`. + +Ces protections empêchent un identifiant ou une carte de forcer la largeur du flex item principal au-delà de la fenêtre. + +## Correction Clippy + +Le canari `pre_005_public_surface_exposes_only_application_run_entry_point` utilise maintenant un `return` explicite dans sa closure : + +```rust +.filter(|line| return line.starts_with("pub use ")) +``` + +La règle workspace `clippy::implicit_return = deny` est ainsi respectée également dans ce test d'intégration. + +## Canari de régression desktop + +`tests/desktop_contract.rs` vérifie désormais explicitement : + +```text +le header clair commun ; +la sidebar bg-body-tertiary ; +le flex item Bootstrap col app-content app-scrollable ; +le wrapper app-shell-card ; +l'absence des anciens marqueurs bg-dark/flex-grow-1 ; +les gardes CSS de largeur et de wrapping de routeFoundation. +``` + +Le test ne fige pas le contenu fonctionnel futur des routes et ne transforme pas le scaffold en runtime Worker. + +## Frontières conservées + +```text +aucun Start/Stop Worker ; +aucune composition Transport/Store/Worker ; +aucune ouverture d'endpoint ; +aucun changement Config ; +aucune nouvelle API publique ; +aucune nouvelle dépendance ou feature ; +aucun changement des cinq IDs de route ; +aucun changement des sept états applicatifs ; +aucun endpoint, secret ou handle exposé au frontend. +``` + +## Fichiers ajoutés + +```text +deltas/0.3.15/pre.005-fix.002.md +``` + +## Fichiers modifiés + +```text +Cargo.toml +crates/ksp-app-raw-transaction-ingest-desk/frontend/main.html +crates/ksp-app-raw-transaction-ingest-desk/frontend/sass/_app.scss +crates/ksp-app-raw-transaction-ingest-desk/frontend/ts/main.ts +crates/ksp-app-raw-transaction-ingest-desk/tests/desktop_contract.rs +crates/ksp-app-raw-transaction-ingest-desk/tests/release_completeness.rs +``` + +## Fichiers supprimés + +```text +aucun +``` + +## Version Cargo + +Le fix modifie le frontend applicatif et un test Rust. Conformément aux règles de versioning du workspace : + +```text +header Cargo.toml : 600 -> 601 +workspace.package.version : 0.3.15-pre.5.fix.1 -> 0.3.15-pre.5.fix.2 +``` + +## Audits disponibles dans l'environnement d'assemblage + +```text +General Rust rule audit: clean +Rust export completeness audit: 0 candidate(s) +KSP workspace Rust rule audit: clean +Markdown table audit: clean (318 table(s), 195 file(s)) +HTML parse: clean +``` + +La toolchain Cargo/Rust n'est pas disponible dans l'environnement d'assemblage. Les gates Cargo, Clippy et tests restent donc à confirmer après application du delta. + +## Gate opérateur attendu + +```bash +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/0.3.15 +cargo check --workspace +cargo clippy --workspace --all-targets --all-features -- -D warnings +cargo test -p ksp-app-raw-transaction-ingest-desk --all-targets --all-features +cargo test --workspace --all-targets --all-features +(cd crates/ksp-app-raw-transaction-ingest-desk && npm run build) +(cd crates/ksp-app-raw-transaction-ingest-desk && cargo tauri dev) +``` + +Le dernier lancement est le contrôle visuel explicite du shell commun et de l'absence de débordement horizontal de `routeFoundation`.