La actualización del package de compositor personalizado falla si los packages se requieren el uno al otro

Estoy trabajando con varios packages de compositores como biblioteca y, a veces, esos packages se requieren mutuamente. Por ejemplo, en modolib/phpunit tengo:

 "require": { "modolib/doctrine": "~1.2", } 

y en el package modolib/doctrine tengo:

 "require-dev": { // ... "modolib/phpunit": "~1.3" }, 

Para versionar los packages, uso tags. Llamar a la git tag para modolib/phpunit en branch master saca:

 // ... 1.2.8 1.2.9 1.2.10 1.3.0 1.3.1 // ... 1.3.10 

y la git tag para modolib/doctrine en branch master saca:

 // ... 1.2.8 1.2.9 1.2.10 1.2.11 1.2.12 

Sin embargo, una composer update en modolib/phpunit funcionará perfectamente, pero una actualización en modolib/doctrine arrojará este error:

 Problem 1 - modolib/phpunit 1.3.9 requires moodlib/doctrine ~1.2 -> no matching packages found - modolib/phpunit 1.3.8 requires moodlib/doctrine ~1.2 -> no matching packages found - modolib/phpunit 1.3.7 requires moodlib/doctrine ~1.2 -> no matching packages found - modolib/phpunit 1.3.5 requires moodlib/doctrine 1.2.* -> no matching packages found - modolib/phpunit 1.3.4 requires moodlib/doctrine 1.2.* -> no matching packages found - modolib/phpunit 1.3.3 requires moodlib/doctrine 1.2.* -> no matching packages found - modolib/phpunit 1.3.2 requires moodlib/doctrine 1.2.* -> no matching packages found - modolib/phpunit 1.3.10 requires moodlib/doctrine 1.*.* -> no matching packages found - modolib/phpunit 1.3.1 requires moodlib/doctrine 1.2.* -> no matching packages found - modolib/phpunit 1.3.0 requires moodlib/doctrine 1.2.* -> no matching packages found - Installation request for modolib/phpunit ~1.3 -> satisfiable by modolib/phpunit[1.3.0, 1.3.1, 1.3.10, 1.3.2, 1.3.3, 1.3.4, 1.3.5, 1.3.7, 1.3.8, 1.3.9] 

La versión actual de modolib/doctrine es 1.2.12 y no se han agregado commits desde que creé esta label, excepto para la combinación de master (estoy usando git flow).

Ahora parece que la expresión "modolib/doctrine": "~1.2" es correcta, ya que puedo actualizar los packages en modolib/phpunit , pero el compositor tiene problemas para darse count de que estoy trabajando en el package que está intentando solicitar. ¿O podría tener algo que ver con la diferencia entre require y require-dev ?

¿Cómo puedo resolver este error y actualizar mis packages en modolib/doctrine ?

ACTUALIZAR:

La razón por la cual la actualización en modolib/phpunit funcionó es porque modolib/doctrine requiere modolib/phpunit en require-dev , pero el compositor no carga las secciones require-dev de los packages que carga durante la actualización. Por lo tanto, desde la vista de modolib/phpunit los packages no se requieren mutuamente. Solo se carga el modolib/doctrine , pero no intenta cargar modolib/phpunit mientras se trabaja en este repository.

El compositor se da count si el requisito es el package en el que está trabajando actualmente. Lo que no nota es la versión labelda. Por supuesto, Composer no puede leer sus tags de repository, por lo que debe proporcionarlas en el composer.json :

 "name": "modolib/doctrine", "version": "1.2.12", // ... "require-dev": { // ... "modolib/phpunit": "~1.3" }, 

Ahora el compositor conoce tanto el nombre como la versión de su package y puede validar la dependencia.