v0.3.6-pre.002

This commit is contained in:
2026-09-01 10:45:39 +02:00
parent ecfc30a94b
commit a25d8dd55a
17 changed files with 1087 additions and 18 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/027-V0_3_6_JOB_API_BACKFILL_PLAN.md -->
<!-- version: 2 -->
<!-- version: 3 -->
# Plan v0.3.6 — Job API et premier backfill RAW
@@ -392,13 +392,15 @@ Le sizing tabulaire est remplacé par les présentes sous-sections afin que chaq
### `pre.002` — Identité, lifecycle et annulation Job API
**Statut : planifié.**
**Statut : matérialisé ; audits statiques propres, gate Cargo opérateur à exécuter.**
Budget cible : **15-20 min**. Entrée : plan 027 corrigé et gate Markdown fiable. Implémenter uniquement identité, transitions et token d'annulation runtime-neutral. Sortie : unitaires API et firewalls verts, sans notification concrète ni backfill.
Budget cible : **15-20 min**. Entrée : plan 027 corrigé, gate Markdown fiable et `cargo check --workspace` opérateur vert sur `pre.001-fix.001`. La crate `ksp-job-api` est ajoutée avec `JobId`, `JobKindCode`, `JobCompletion`, `JobState`, `JobLifecycle` et `JobCancellationToken`. Les identités utilisent un alphabet sûr et une borne de 128 octets ; leur valeur est privée et `JobId` est redacted en `Debug`. Le lifecycle possédé n'est pas cloneable, n'autorise que les transitions décidées et conserve les terminaux immuables. Le token partage un `AtomicBool` par `Arc`, rend la première demande observable et reste indépendant de tout runtime.
La tranche ajoute dix tests unitaires et onze canaries d'intégration réparties entre API publique, dépendances, complétude et sécurité. Les audits Rust/Markdown locaux sont propres ; `cargo`, `rustfmt`, Clippy et les tests Rust ne sont pas disponibles dans l'environnement d'assemblage. La sortie exige donc encore le gate opérateur `cargo fmt`, `cargo check`, Clippy et `cargo test -p ksp-job-api`. Aucune notification, séquence, snapshot, crate Backfill, dépendance Logging/Transport/Store ou surface Worker n'est ouverte.
### `pre.003` — Notifications latest-value génériques
**Statut : planifié.**
**Statut : planifié ; dépend du gate opérateur de `pre.002`.**
Budget cible : **15-20 min**. Entrée : transitions Job stables. Implémenter séquences, snapshot source et resynchronisation multi-listeners. Sortie : listener lent, terminal retenu et canary externe API verts.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/023-V0_3_6_JOB_API_BACKFILL.md -->
<!-- version: 2 -->
<!-- version: 3 -->
# Validation v0.3.6 — Job API et premier backfill RAW
@@ -45,6 +45,7 @@ Aucune entrée absolue, traversée, avec séparateur inversé ou lien symbolique
- [X] Le résultat historique `240 tables / 153 fichiers` de `pre.001` est identifié comme faux positif pour les nouveaux tableaux non alignés.
- [X] Contrats et tailles des trois nouveaux fichiers vérifiés.
- [X] Le journal opérateur fourni rapporte `cargo fmt`, audits, `cargo check`, `cargo clippy` et suites Interface ou Program verts sur v0.3.5.
- [X] Gate opérateur de `pre.001-fix.001` : 5 tests Python, audit Markdown 264/141, audit Rust et `cargo check --workspace` verts.
- [X] L'environnement courant ne fournit pas l'exécutable `cargo` ; aucune validation Rust locale n'est annoncée comme exécutée.
- [X] Le workspace compte 14 crates et aucune crate Job au point de départ.
@@ -60,16 +61,18 @@ Aucune entrée absolue, traversée, avec séparateur inversé ou lien symbolique
## 5. Contrat `ksp-job-api`
- [ ] `JobId` borné, validé et opaque.
- [ ] `JobKindCode` stable et sans texte humain libre.
- [ ] Transitions `Created`, `Running`, `Cancelling`, `Completed`, `Cancelled` et `Failed` contrôlées.
- [ ] États terminaux immuables et résultat complet ou partiel explicite.
- [ ] `JobCancellationToken` cloneable, idempotent et sans Tokio public.
- [X] `JobId` borné à 128 octets, validé, opaque et redacted en `Debug`.
- [X] `JobKindCode` stable, borné et limité à l'alphabet sûr KSP.
- [X] `JobCompletion` distingue `Complete` et `Partial` sans texte libre.
- [X] Transitions `Created`, `Running`, `Cancelling`, `Completed`, `Cancelled` et `Failed` contrôlées.
- [X] États terminaux immuables et lifecycle producteur non cloneable.
- [X] `JobCancellationToken` cloneable, idempotent, `Send + Sync` et sans Tokio public.
- [ ] `JobNotificationSequence` strictement monotone avec overflow traité sans panic.
- [ ] `JobNotification<S>` contient un snapshot complet, sûr et borné.
- [ ] `JobSnapshotSource` permet lecture courante et attente de changement sans callback producteur.
- [ ] Aucun type Transport, Store, Logging, Tokio ou serde dans l'API publique.
- [ ] Canaries externes de construction, observation et annulation vertes.
- [X] Aucun type Transport, Store, Logging, Tokio, serde, Worker ou Backfill dans l'API publique de `pre.002`.
- [X] Canaries externes de construction, lifecycle, annulation, firewalls, complétude et sécurité matérialisées.
- [ ] Dix unitaires et onze canaries Rust exécutés avec `cargo test -p ksp-job-api` par l'opérateur.
## 6. Notifications multi-listeners
@@ -168,13 +171,13 @@ Aucune entrée absolue, traversée, avec séparateur inversé ou lien symbolique
## 14. Firewalls et qualité Rust
- [ ] `ksp-job-api` ne dépend au plus que de Core.
- [X] `ksp-job-api` dépend exactement de Core et n'a aucune feature, dev-dependency ou build-dependency.
- [ ] `ksp-job-backfill-lib` ne dépend pas de Config, App, Wallet, Program, Interface ou backend Store.
- [ ] Aucun retour de dépendance vers Job depuis les couches basses.
- [ ] Versions et features des nouvelles dépendances auditées avant ajout.
- [ ] `cargo fmt --all -- --check` vert.
- [ ] `scripts/audit_rust_workspace_rules.py` vert.
- [ ] `scripts/audit_markdown_tables.py` vert.
- [X] `scripts/audit_rust_workspace_rules.py` vert sur `pre.002` dans l'environnement d'assemblage.
- [X] `scripts/audit_markdown_tables.py` vert sur `pre.002` dans l'environnement d'assemblage.
- [X] Contrats de fichiers de `FILE_CONTRACTS.md` vérifiés sur chaque ajout de `pre.001`.
- [ ] `cargo check --workspace` vert.
- [ ] `cargo clippy --workspace --all-targets --all-features -- -D warnings` vert.