fix(security): add http-cache-semantics and postcss-selector-parser floors #131

Merged
maximus merged 2 commits from issue-128-129-http-cache-semantics-postcss-selector-parser-floors into master 2026-10-05 23:34:42 +00:00
Owner

Résumé

Deux planchers d'override pour les advisories corrigeables du rapport Défenseur du 2026-10-05.

Paquet Advisory Override Résolu Chemin
http-cache-semantics GHSA-ch52-4w7c-c8xp (high) ^4.3.0 4.3.0 @expo/ngrok > got > cacheable-request (tunnel de dev)
postcss-selector-parser GHSA-w9m9-85wc-3x92 (low) @^6.0.0 → ^6.1.3 6.1.4 tailwindcss@3 (pipeline NativeWind)

L'advisory http-cache-semantics ne liste aucune version corrigée, mais 4.3.0 sort de la borne <=4.2.0 (et cacheable-request@7 déclare ^4.0.0). postcss-selector-parser est limité au majeur 6 par une clé version-scoped.

Vérifications

  • Lockfile : 2 strophes, 2084 → 2084 paquets.
  • npm audit après npm ci : 33 → 31 clés (http-cache-semantics et postcss-selector-parser sortent).
  • Livrable : bundle JS Android (npx expo export --platform android --no-bytecode) identique octet pour octet avant/après, y compris avec --clear (a8eeb00a…). Le hash .hbc ne sert pas de preuve : Hermes n'est pas déterministe ici, deux exports du même arbre diffèrent.
  • npm test : smoke OK + 11/11. Deux nouvelles gardes de plancher dans tests/smoke.test.cjs, contrôle négatif fait (planchers relevés → FAIL).

Hors PR

  • #130 : braces (high, 22 parents) — tête publiée 3.0.3 vulnérable, plancher suivi.
  • #123 : node-forge — inchangé, toujours sans version corrigée.
  • #126 : fermée, decode-uri-component@0.5.0 est ESM pur et casse require() dans query-string@7.

Resolves #128
Resolves #129

🤖 Generated with Claude Code

## Résumé Deux planchers d'override pour les advisories corrigeables du rapport Défenseur du 2026-10-05. | Paquet | Advisory | Override | Résolu | Chemin | |---|---|---|---|---| | `http-cache-semantics` | GHSA-ch52-4w7c-c8xp (high) | `^4.3.0` | 4.3.0 | `@expo/ngrok > got > cacheable-request` (tunnel de dev) | | `postcss-selector-parser` | GHSA-w9m9-85wc-3x92 (low) | `@^6.0.0` → `^6.1.3` | 6.1.4 | `tailwindcss@3` (pipeline NativeWind) | L'advisory `http-cache-semantics` ne liste aucune version corrigée, mais 4.3.0 sort de la borne `<=4.2.0` (et `cacheable-request@7` déclare `^4.0.0`). `postcss-selector-parser` est limité au majeur 6 par une clé version-scoped. ## Vérifications - Lockfile : 2 strophes, 2084 → 2084 paquets. - `npm audit` après `npm ci` : 33 → 31 clés (`http-cache-semantics` et `postcss-selector-parser` sortent). - **Livrable** : bundle JS Android (`npx expo export --platform android --no-bytecode`) identique octet pour octet avant/après, y compris avec `--clear` (`a8eeb00a…`). Le hash `.hbc` ne sert pas de preuve : Hermes n'est pas déterministe ici, deux exports du même arbre diffèrent. - `npm test` : smoke OK + 11/11. Deux nouvelles gardes de plancher dans `tests/smoke.test.cjs`, contrôle négatif fait (planchers relevés → FAIL). ## Hors PR - #130 : `braces` (high, 22 parents) — tête publiée 3.0.3 vulnérable, plancher suivi. - #123 : `node-forge` — inchangé, toujours sans version corrigée. - #126 : fermée, `decode-uri-component@0.5.0` est ESM pur et casse `require()` dans `query-string@7`. Resolves #128 Resolves #129 🤖 Generated with [Claude Code](https://claude.com/claude-code)
maximus added 1 commit 2026-10-05 23:27:47 +00:00
- http-cache-semantics ^4.3.0 (GHSA-ch52-4w7c-c8xp, high): 4.3.0 is out of
  the <=4.2.0 range although the advisory lists no patched version. Single
  copy via @expo/ngrok > got > cacheable-request (^4.0.0), dev tunnel only.
- postcss-selector-parser@^6.0.0 -> ^6.1.3 (GHSA-w9m9-85wc-3x92, low),
  version-scoped to the tailwindcss@3 major. Resolves to 6.1.4.

Lockfile: two stanzas, package count unchanged (2084). npm audit 33 -> 31.
Android JS bundle (expo export --no-bytecode, cache cleared) is byte-identical
before and after. Smoke test guards both floors.

Resolves #128
Resolves #129

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Owner

Revue adversariale — verdict : APPROVE

Résumé : deux planchers d'override ciblés, lockfile limité à 2 strophes, gardes de smoke qui rougissent bien sur la mutation exacte. Rien de bloquant.

Vérifications rejouées (tête 62efdba)

  • npm test : 24/24 OK au smoke (dont les 2 nouvelles gardes) + 11/11 feedback.
  • npm ls : une seule copie de chaque — http-cache-semantics@4.3.0 overridden (@expo/ngrok > got > cacheable-request@7.0.4, qui déclare ^4.0.0), postcss-selector-parser@6.1.4 overridden (tailwindcss@3.4.17, et postcss-nested dédupliqué ; tous deux déclarent ^6.1.x, donc compatible).
  • npm audit : 31 clés, aucune ne concerne http-cache-semantics ni postcss-selector-parser.
  • Mutations (copie hors dépôt, faux node_modules) :
    • M1, versions d'avant le correctif (4.2.0 / 6.1.2) → 2 FAIL sur 2.
    • M2, copie vulnérable imbriquée (got/node_modules/http-cache-semantics@4.1.1) + majeur inattendu (@foo/bar/node_modules/postcss-selector-parser@7.1.0) → 2 FAIL, chemins imbriqués bien remontés.
    • M3, paquets absents → 2 FAIL (« is not installed »), pas de vert sur un arbre vide.
    • Base (4.3.0 / 6.1.4) → 2 OK. Copie supprimée.

Points vérifiés

  • Clé version-scoped postcss-selector-parser@^6.0.0 cohérente avec la convention déjà en place (js-yaml@^3.0.0, brace-expansion@^1.0.0).
  • Plancher http-cache-semantics global : justifié, une seule copie et un seul majeur dans l'arbre.
  • Commit au format conventionnel, Resolves #128 / Resolves #129 : la timeline des deux issues porte bien un pull_ref closes depuis #131.
  • Pas de secret, pas de .env, pas de migration touchée.

Non rejoué

  • L'identité octet pour octet du bundle expo export n'a pas été refaite : acceptée sur la foi du corps de PR. Les deux paquets sont dans des chemins de build/dev (tunnel ngrok, pipeline Tailwind), le risque d'impact runtime est faible.

Suggestions (non bloquantes)

  • Le plancher http-cache-semantics n'est pas borné au majeur 4 (contrairement à postcss-selector-parser). Si un futur parent tire un 5.x, l'override le forcerait en 4.x. Sans objet aujourd'hui (une seule copie), à garder en tête si la garde de smoke venait à rougir sur un majeur inattendu.

Label

Les issues #128 et #129 portent status:ready, pas status:review : label laissé tel quel, à ajuster à la main si besoin.

## Revue adversariale — verdict : APPROVE **Résumé** : deux planchers d'override ciblés, lockfile limité à 2 strophes, gardes de smoke qui rougissent bien sur la mutation exacte. Rien de bloquant. ### Vérifications rejouées (tête `62efdba`) - `npm test` : 24/24 OK au smoke (dont les 2 nouvelles gardes) + 11/11 feedback. - `npm ls` : une seule copie de chaque — `http-cache-semantics@4.3.0 overridden` (`@expo/ngrok > got > cacheable-request@7.0.4`, qui déclare `^4.0.0`), `postcss-selector-parser@6.1.4 overridden` (`tailwindcss@3.4.17`, et `postcss-nested` dédupliqué ; tous deux déclarent `^6.1.x`, donc compatible). - `npm audit` : 31 clés, aucune ne concerne `http-cache-semantics` ni `postcss-selector-parser`. - **Mutations** (copie hors dépôt, faux `node_modules`) : - M1, versions d'avant le correctif (4.2.0 / 6.1.2) → **2 FAIL** sur 2. - M2, copie vulnérable imbriquée (`got/node_modules/http-cache-semantics@4.1.1`) + majeur inattendu (`@foo/bar/node_modules/postcss-selector-parser@7.1.0`) → **2 FAIL**, chemins imbriqués bien remontés. - M3, paquets absents → **2 FAIL** (« is not installed »), pas de vert sur un arbre vide. - Base (4.3.0 / 6.1.4) → 2 OK. Copie supprimée. ### Points vérifiés - Clé version-scoped `postcss-selector-parser@^6.0.0` cohérente avec la convention déjà en place (`js-yaml@^3.0.0`, `brace-expansion@^1.0.0`). - Plancher `http-cache-semantics` global : justifié, une seule copie et un seul majeur dans l'arbre. - Commit au format conventionnel, `Resolves #128` / `Resolves #129` : la timeline des deux issues porte bien un `pull_ref` `closes` depuis #131. - Pas de secret, pas de `.env`, pas de migration touchée. ### Non rejoué - L'identité octet pour octet du bundle `expo export` n'a pas été refaite : acceptée sur la foi du corps de PR. Les deux paquets sont dans des chemins de build/dev (tunnel ngrok, pipeline Tailwind), le risque d'impact runtime est faible. ### Suggestions (non bloquantes) - Le plancher `http-cache-semantics` n'est pas borné au majeur 4 (contrairement à `postcss-selector-parser`). Si un futur parent tire un 5.x, l'override le forcerait en 4.x. Sans objet aujourd'hui (une seule copie), à garder en tête si la garde de smoke venait à rougir sur un majeur inattendu. ### Label Les issues #128 et #129 portent `status:ready`, pas `status:review` : label laissé tel quel, à ajuster à la main si besoin.
maximus added 1 commit 2026-10-05 23:34:28 +00:00
Review follow-up on #131: a blanket override would force any future 5.x
consumer down to 4.x. The version-scoped key keeps the floor within the
current major, like postcss-selector-parser. No lockfile change.

Refs #128

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
maximus merged commit cb53a43422 into master 2026-10-05 23:34:42 +00:00
maximus deleted branch issue-128-129-http-cache-semantics-postcss-selector-parser-floors 2026-10-05 23:34:42 +00:00
Author
Owner

Merge fast-forward sur cb53a43. Le commit cb53a43 (portee de http-cache-semantics limitee au majeur 4, suggestion de la revue) a ete ajoute apres l APPROVE et n a pas ete relu. Valide avant merge : npm ci, npm test (smoke 24/24, feedback 11/11, rc=0), tsc --noEmit, npm audit 31 cles, lock inchange.

Merge fast-forward sur `cb53a43`. Le commit `cb53a43` (portee de `http-cache-semantics` limitee au majeur 4, suggestion de la revue) a ete ajoute apres l APPROVE et n a pas ete relu. Valide avant merge : `npm ci`, `npm test` (smoke 24/24, feedback 11/11, rc=0), `tsc --noEmit`, `npm audit` 31 cles, lock inchange.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/simpl-liste#131
No description provided.