Composer 2.11.0-RC1 est sorti le 22 octobre comme version préliminaire. Le tag est signé par Seldaek, Jordi Boggiano, et pointe vers le commit 31eb692. Les mainteneurs demandent des tests et des rapports de régression accompagnés de traces de pile et d'un cas reproductible. Les changements couvrent l'intervalle entre Composer 2.10.3 et 2.11.0-RC1.

terminal
composer self-update --preview
composer self-update --stable

L'option de configuration source-fallback, ajoutée temporairement dans la version 2.10, disparaît. Les installations dist ne basculent plus automatiquement vers une source. L'API composer-plugin-api passe à la version 2.11.0.

Composer 2.11 RC1 renforce la sécurité des dépendances
Capture d’écran : Composer Releases ↗

Composer refuse désormais les connexions TLS qui présentent des certificats intermédiaires qui ne sont plus dignes de confiance, notamment les certificats eMudhra compromis, même si le magasin d'autorités système approuve leurs certificats racines. Les proxies bin échappent correctement les chemins et les shebangs contrôlés par les paquets. Les chemins bin contenant des métacaractères shell sont rejetés. Le contrôle secure-http couvre maintenant les URL non sécurisées mal formées et la syntaxe de transport Git. Les en-têtes HTTP personnalisés d'un dépôt ne sont plus transmis à des URL dist d'autres hôtes dont le nom commence seulement par celui du dépôt.

Une politique de cooldown peut retenir pendant une durée configurable les versions de paquets fraîchement publiées. Cette mesure vise à limiter l'exposition aux paquets compromis. Les politiques personnalisées disposent d'une option block-scope qui permet aussi de bloquer pendant l'installation. L'affichage de la progression et de l'état du terminal peut utiliser les séquences d'échappement OSC 7501 et OSC 9. La variable COMPOSER_TERMINAL_STATUS permet de le configurer.

La commande audit accepte --direct, ou -D, pour vérifier uniquement les dépendances directes. Composer prend en charge le nouvel hôte SSH ssh.bitbucket.org de Bitbucket Cloud et l'utilise aussi pour le repli SSH. L'option de configuration strict-psr-autoloader rejoint le paramètre --strict-psr-autoloader. Un dump d'autoload optimisé avertit lorsque des chemins ne diffèrent que par la casse.

L'option only-branches limite les branches chargées depuis les dépôts VCS. show --tree --format=json affiche désormais les versions installées des sous-dépendances. Les requêtes vers l'API des avis de sécurité sont regroupées pour les projets qui possèdent un très grand graphe de dépendances. Face aux réponses HTTP 429 et aux en-têtes Retry-After, Composer attend puis réessaie. Le User-Agent identifie maintenant les agents de codage IA. Lors de la création d'une bibliothèque avec init, Composer propose d'ajouter composer.lock à .gitattributes avec export-ignore.

La résolution des dépendances consomme moins de temps et de mémoire. Composer ne demande plus HTTP/3, ce qui évite un délai avec les versions récentes de curl. outdated et show --latest chargent les métadonnées des paquets en parallèle. Les erreurs de conflit expliquent mieux le blocage de versions par des avis de sécurité.

Le statut obsolète du fichier de verrouillage après une modification de la configuration des politiques est corrigé. L'installation s'arrête correctement lorsque composer.lock contient un conflit de fusion dans content-hash. Les téléchargements ZIP tronqués sont retentés et ne sont jamais mis en cache. Les fichiers générés, comme l'autoloader et composer.json, sont remplacés de façon atomique. Cela évite des problèmes avec les liens physiques et les lecteurs concurrents.

Les URL SSH conservent leur nom d'utilisateur dans les commandes Git, ce qui corrige les échecs d'authentification apparus avec la version 2.10.3. L'authentification par jeton de tâche GitLab CI est corrigée. Les en-têtes personnalisés provenant du auth.json du projet et de COMPOSER_AUTH sont fusionnés avec les en-têtes globaux. Les requêtes parallèles réutilisent les identifiants obtenus par une autre requête au lieu de signaler immédiatement des identifiants invalides.

Composer signale désormais la limite de l'API GitHub lorsque le repli par clonage échoue. outdated ne marque plus comme obsolètes les paquets qui n'ont aucune version installable. update --minimal-changes gère les noms de paquets avec joker. bump traite correctement les contraintes du type >=10 et n'assouplit plus les contraintes OR. Les avis de sécurité ne s'appliquent plus à tort aux branches de développement nommées comme dev-main.

Le répertoire vendor est exclu de l'analyse de la classmap racine dans les cas où il était auparavant inclus. self-update ne se termine plus par une erreur de classe introuvable lors du remplacement du PHAR. clear-cache --no-cache indique maintenant que le cache est désactivé au lieu de signaler des répertoires absents. Les commandes de script vides sont traitées comme des opérations sans effet.

suggests renvoie maintenant une erreur lorsqu'un filtre vise un paquet non installé ou exclu par --no-dev. JsonManipulator::addSubNode() ne modifie plus une clé imbriquée portant le même nom. Les avertissements des dépôts ne sont plus répétés. Les classes de capacités des plugins ne sont instanciées qu'après la vérification de leurs interfaces. Composer n'émet plus d'avertissement lors de la recherche de paquets inline sans UID.