The v2 metadata endpoint for a package; one GET, and the response is immutable per version.
Routed by vendor, and getting this wrong made the whole check answer not-found for the entire
Drupal ecosystem. Drupal contrib is NOT on Packagist -- it is published to drupal.org's own
Composer repository, which core's own composer.json adds as a second repository. Measured:
So every /installable?module=drupal/* returned not-found with the plumbing working perfectly.
Three roadmap items are priced against this check, which means they were priced against a
function that could only ever say no for the packages the product exists to install.
drupal/core* is the exception inside the exception: core and its subtree packages ARE mirrored
to Packagist, but drupal.org serves them too, so routing the whole drupal/ vendor there is both
correct and simpler than special-casing.
The v2 metadata endpoint for a package; one GET, and the response is immutable per version.
Routed by vendor, and getting this wrong made the whole check answer
not-foundfor the entire Drupal ecosystem. Drupal contrib is NOT on Packagist -- it is published to drupal.org's own Composer repository, which core's owncomposer.jsonadds as a second repository. Measured:repo.packagist.org/p2/drupal/pathauto.json ................ 404 packages.drupal.org/8/p2/drupal/pathauto.json ............. 302 -> www.drupal.org, then 404 packages.drupal.org/files/packages/8/p2/drupal/pathauto.json 200 (the metadata) repo.packagist.org/p2/symfony/yaml.json ................... 200
So every
/installable?module=drupal/*returnednot-foundwith the plumbing working perfectly. Three roadmap items are priced against this check, which means they were priced against a function that could only ever say no for the packages the product exists to install.drupal/core*is the exception inside the exception: core and its subtree packages ARE mirrored to Packagist, but drupal.org serves them too, so routing the wholedrupal/vendor there is both correct and simpler than special-casing.