Zdůvodnění
Žádný dokument není druhou autoritou pro plán rozvoje a žádný milník netypuje vlastní verzi. Dokud existuje ručně psaná tabulka plánu rozvoje, nesmí uvádět release, ve kterém žádný milník nevyšel, ani skrýt ten, který milník nesl; release milníku (released_in) se odvozuje ze záznamů releasů, nikdy se nepíše.
Požadované chování
Žádný dokument není druhou autoritou pro plán rozvoje; release milníku se odvozuje ze záznamů o releasech, nikdy se nepíše ručně, a ručně psaná tabulka nemůže ani uvést release, v němž nebyl vydán žádný milník, ani zatajit ten, který milník nesl.
Záznam milníku nenese version; plan validate jej odmítne jako neznámý klíč. Release, ve kterém milník vyšel, je released_in: první záznam release (.ai/repo/releases/v*.yaml, sledované vyjádření tagu vMAJOR.MINOR.PATCH, v pořadí verzí), jehož commit: obsahuje merge posledního přijatého úkolu — úkolu DONE s nejpozdnějším completed_at — nalezený přes commit, který ten stamp zapsal, nebo jinak přes nejnovější merge, jehož zpráva úkol jmenuje. Záznamy a ne tagy, protože odvozená data nesmějí záviset na refech mimo strom. Release před prvním záznamem žádný nemají, takže práce dokončená před ním se čte jako nejstarší release, který tato vrstva eviduje (v0.3.1 ve vlastním repozitáři Majordomus). Milník, který není DONE nebo jej dosud neobsahuje commit žádného záznamu, se čte unreleased. Oba enginy odpovídají stejně (plan roadmap).
Chování při selhání
Porušení je nález FAIL v kategorii roadmap a příkaz, který ho našel, skončí s kódem 10. Pod watch se totéž porušení hlásí jako drift a příkaz skončí s kódem 11.
Ověření
Rozhoduje o tom mj_validate_roadmap, volaný z doctor, watch. Případy chování test/cases/49_roadmap_doctrine.sh a test/cases/3102_a_milestone_version_is_inferred.sh to dokazují a CI je spouští.