Fix: validate composer.json