Вы можете сделать это с Trac (команда из моей компании делает нечто подобное), но для этого потребуется определенная работа по настройке.
Во-первых, вам нужна возможность назначить трех человек на билет. Для этого добавьте настраиваемые поля заявки (введите «текст») с такими именами, как «Reviewer» и «Tester». Они будут использоваться для хранения имен не-разработчиков, назначенных для заявки.
Вы также захотите добавить новое состояние в рабочий процесс заявки Trac , чтобы представить состояние, в котором выполняется тестирование и проверка. Ради обсуждения я назову это состояние «проверка». Вставьте это состояние в рабочий процесс так, чтобы билет отправлялся из назначенного / принятого -> подтверждения -> закрытого.
Вам также потребуется, чтобы тестировщик и рецензент указали, что они подписали изменения. Для этого вы можете добавить еще два настраиваемых поля (типа «флажок») в заявку. Вы можете назвать их «Проверка завершена» и «Тест завершен». По умолчанию эти билеты не проверяются, и тестировщик / рецензент проверит их, как только они успешно завершат свою работу по тестированию / проверке.
Это должно помочь вам начать работу. Что касается некоторых более сложных частей вашего вопроса, у вас есть несколько вариантов.
Вы можете добавить немного пользовательского javascript, который не позволит пользователю отображаться в нескольких полях владельца. Javascript запускается всякий раз, когда изменяется поле владельца, рецензента или тестера. Если новое значение в этом поле совпадает со значением в одном из двух других полей, другое поле будет очищено. Вместо написания собственного Javascript, один из следующих плагинов может сделать это за вас: