diff --git a/CHANGELOG.fr.md b/CHANGELOG.fr.md index 4b143c7..add449a 100644 --- a/CHANGELOG.fr.md +++ b/CHANGELOG.fr.md @@ -24,6 +24,7 @@ ### Sécurité - Mise à jour des dépendances Rust `rustls-webpki` (0.103.15 → 0.103.16) et `webpki-root-certs` (1.0.6 → 1.0.10), corrigeant RUSTSEC-2026-0382 et RUSTSEC-2026-0383. `rustls-webpki` valide sous Linux la chaîne de certificats de la vérification et du téléchargement des mises à jour automatiques, atteinte via `tauri-plugin-updater` ; sous Windows, c'est le système qui valide la chaîne. La 0.103.16 refuse désormais une chaîne qui passe par l'un de huit intermédiaires emSign déclarés non fiables (RUSTSEC-2026-0382). Les paquets de mise à jour restent vérifiés par leur signature : un certificat seul n'a jamais suffi à installer une mise à jour. `webpki-root-certs` n'est compilé ni dans l'application Linux ni dans l'application Windows ; il est mis à jour pour l'audit seulement (RUSTSEC-2026-0383). Les appels de licence, d'authentification, de cours et de rétroaction de l'application passent par un autre moteur TLS. Rien ne change dans le code de l'application elle-même : seul le fichier de verrouillage bouge (#484). +- Mise à jour de l'outil de build `vite` (6.4.3 → 6.4.4) par le seul fichier de verrouillage, dans la plage que `package.json` déclarait déjà, corrigeant GHSA-587h-7wmj-h5pm, GHSA-698v-4r3x-3vcv et GHSA-r825-w8mm-5pxw dans `launch-editor`, que vite embarque. Ces avis portent sur la fonction « ouvrir dans l'éditeur » du serveur de développement et n'ont jamais été atteignables dans l'application livrée, dont le résultat du build est inchangé (#483). ## [0.17.2] - 2026-10-18 diff --git a/CHANGELOG.md b/CHANGELOG.md index e42401d..c22501a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ ### Security - Updated the Rust dependencies `rustls-webpki` (0.103.15 → 0.103.16) and `webpki-root-certs` (1.0.6 → 1.0.10), clearing RUSTSEC-2026-0382 and RUSTSEC-2026-0383. `rustls-webpki` validates the certificate chain of the automatic update check and download on Linux, reached through `tauri-plugin-updater`; on Windows, the system validates the chain. 0.103.16 now refuses a chain through one of eight distrusted emSign intermediates (RUSTSEC-2026-0382). Update packages are still checked against their signature, so a certificate alone could never install an update. `webpki-root-certs` is compiled into neither the Linux nor the Windows application; it is updated for the audit only (RUSTSEC-2026-0383). The application's own licence, authentication, market-price and feedback calls use a different TLS backend. Nothing in the application's own code changes — only the lockfile moves (#484). +- Updated the build tool `vite` (6.4.3 → 6.4.4) through the lockfile alone, within the range `package.json` already declares, clearing GHSA-587h-7wmj-h5pm, GHSA-698v-4r3x-3vcv and GHSA-r825-w8mm-5pxw in `launch-editor`, which vite bundles. They concern the development server's “open in editor” feature and were never reachable in the shipped app, whose build output is unchanged (#483). ## [0.17.2] - 2026-10-18 diff --git a/CLAUDE.md b/CLAUDE.md index c0a870f..647f55d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -176,7 +176,7 @@ Pour maintenir l'éligibilité aux crédits d'impôt R&D (RS&DE fédéral + CRIC Workflows Forgejo Actions dans `.forgejo/workflows/`. Le runner est à **capacité 1** — les jobs se suivent, ils ne tournent pas en parallèle. - **`check-rust.yml`** — déclenché sur les PR touchant `src-tauri/**` ou `.cargo/**`, plus chaque lundi à 06:30 UTC sur `main` et par `workflow_dispatch`. Lance `cargo check --locked`, une vérification bloquante que les advisories acceptées restent non atteignables, une autre que les sept arêtes `windows-sys` à borne large du lock restent sur `0.61.2` ([ADR 0023](docs/adr/0023-windows-sys-pinning.md)), `cargo test --locked` et un `cargo audit` informatif, avec le cache `Swatinem/rust-cache`. Doit être vert avant tout merge. Avec `--locked` ([#449](https://git.lacompagniemaximus.com/maximus/simpl-resultat/issues/449)), un `Cargo.lock` qui ne correspond plus à `Cargo.toml` fait échouer le job au lieu d'être réécrit dans le checkout : les gardes et l'audit lisent le lock commité. Un `cargo update` voulu dans une PR reste possible, il commite le lock qu'il écrit. Un `cargo update` qui re-résout ces arêtes (`-p hyper` et `-p h2` l'ont fait) fait rougir le garde `windows-sys` : remettre les arêtes à la main selon l'ADR, ne jamais modifier la liste gardée pour le faire passer. -- **`check-frontend.yml`** — déclenché sur les PR, sauf si tous les fichiers modifiés sont du Rust, de la doc, du markdown, `check-rust.yml` ou `audit.yml` ; `.claude/**` et `release.yml` le déclenchent, car `scripts/build-latest-json.test.mjs` lit `verify-release.sh` et exécute l'étape « Publish » de `release.yml` (#419). Lance `npm run build` (tsc + vite) et `npm test` (vitest). Doit être vert avant tout merge. **Aucune étape `npm audit`** : les advisories npm ne sont pas un gate de CI. `npm audit` à 0 au 2026-10-10 ([#358](https://git.lacompagniemaximus.com/maximus/simpl-resultat/issues/358)), un constat daté : aucun job ne le fait échouer, mais `npm ci` en imprime le compte à chaque run de `check-frontend`, et le Défenseur relève les advisories de son côté (#358 en vient). +- **`check-frontend.yml`** — déclenché sur les PR, sauf si tous les fichiers modifiés sont du Rust, de la doc, du markdown, `check-rust.yml` ou `audit.yml` ; `.claude/**` et `release.yml` le déclenchent, car `scripts/build-latest-json.test.mjs` lit `verify-release.sh` et exécute l'étape « Publish » de `release.yml` (#419). Lance `npm run build` (tsc + vite) et `npm test` (vitest). Doit être vert avant tout merge. **Aucune étape `npm audit`** : les advisories npm ne sont pas un gate de CI. `npm audit` à 0 au 2026-10-20 ([#483](https://git.lacompagniemaximus.com/maximus/simpl-resultat/issues/483)), un constat daté : aucun job ne le fait échouer, mais `npm ci` en imprime le compte à chaque run de `check-frontend`, et le Défenseur relève les advisories de son côté (#358 en vient). - **`audit.yml`** — audit RustSec quotidien (06:00 UTC) + `workflow_dispatch`, pour couvrir les avis de sécurité entre deux PR Rust. Échec bloquant. **Un run vert signifie « zéro advisory hors de la liste acceptée »**, pas « zéro advisory » : cette liste est dans `.cargo/audit.toml` (preuve de non-atteignabilité et condition de retrait par entrée), encadrée par l'[ADR 0018](docs/adr/0018-suppression-advisories-non-atteignables.md). Ne jamais y ajouter une advisory atteignable ni élargir une entrée à un crate entier. - **`release.yml`** — déclenché par les tags `v*`. Build Windows (NSIS `.exe`) + Linux (`.deb`, `.rpm`), signe les binaires et publie le JSON d'updater pour les mises à jour automatiques. Les deux `npx tauri build` passent `-- --locked` à cargo (par cargo-xwin pour Windows) : les binaires livrés sont bâtis sur le lock commité, jamais réécrit, et l'étape 2 de `/release` vérifie le lock édité à la main par `cargo metadata --locked` (#449). cargo-xwin, qui tourne avec la clé de signature dans son environnement, est installé en version épinglée (`--version 0.23.1`) ; la toolchain Rust (`rustup`, `stable`) ne l'est pas. diff --git a/docs/architecture.md b/docs/architecture.md index ffe059d..586ce0d 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -718,7 +718,7 @@ Aucun `branches:` : une PR stackée sur une autre branche de feature — ce que Déclenché sur les PR, sauf si tous les fichiers modifiés sont du Rust, de la doc, du markdown, `check-rust.yml` ou `audit.yml` (`paths-ignore`). `.claude/**` et `release.yml` le déclenchent ([#419](https://git.lacompagniemaximus.com/maximus/simpl-resultat/issues/419)) : `scripts/build-latest-json.test.mjs` lit la liste de clés de `verify-release.sh` et exécute le texte de l'étape « Publish latest.json to package registry ». Lance `npm ci`, `npm run build` (tsc + vite) et `npm test` (vitest). Installe aussi `jq`, dont a besoin `scripts/build-latest-json.test.mjs` : ce test lance le script de génération de `latest.json` de `release.yml` ([#320](https://git.lacompagniemaximus.com/maximus/simpl-resultat/issues/320)). Pas de cache npm : ce workflow ne tourne que sur des PR, donc un cache ne servirait qu'aux pushes suivants d'une même PR, et `npm ci` y prend 9 s. -**Aucune étape `npm audit`** — contrairement au Rust, les advisories npm ne sont donc pas un gate de CI. `npm audit` est à 0 au 2026-10-10 ([#358](https://git.lacompagniemaximus.com/maximus/simpl-resultat/issues/358)), après un rafraîchissement du lock dans les bornes de `package.json`. Ce 0 est un constat daté, pas un état garanti : aucun job ne le fait échouer, mais l'étape `npm ci` de `check-frontend` audite à chaque run et en imprime le compte (`found 0 vulnerabilities`, ou le nombre trouvé), et le Défenseur relève les advisories de son côté (#358 en vient). `npm audit` n'a pas de mécanisme d'exclusion natif, il n'y a donc pas d'équivalent du `.cargo/audit.toml` côté npm. +**Aucune étape `npm audit`** — contrairement au Rust, les advisories npm ne sont donc pas un gate de CI. `npm audit` est à 0 au 2026-10-20 ([#483](https://git.lacompagniemaximus.com/maximus/simpl-resultat/issues/483)), après un rafraîchissement du lock dans les bornes de `package.json`. Ce 0 est un constat daté, pas un état garanti : aucun job ne le fait échouer, mais l'étape `npm ci` de `check-frontend` audite à chaque run et en imprime le compte (`found 0 vulnerabilities`, ou le nombre trouvé), et le Défenseur relève les advisories de son côté (#358 en vient). `npm audit` n'a pas de mécanisme d'exclusion natif, il n'y a donc pas d'équivalent du `.cargo/audit.toml` côté npm. ### `audit.yml` — Audit RustSec quotidien diff --git a/package-lock.json b/package-lock.json index cef1e67..5e3964d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3411,9 +3411,9 @@ } }, "node_modules/vite": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.3.tgz", - "integrity": "sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==", + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.4.tgz", + "integrity": "sha512-xGjU/SyjeNyb0E4KxXBvYz/1C+3JXuujvf2hXNOtnlcE+58o5ajd9N2/n2VhkiJvpCP2qQasnUpx5PXNeI+p1Q==", "dev": true, "license": "MIT", "dependencies": {