Reconcile the feature-container convention with the depends validator #14
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
references/format.mdвелит дочерним issue ссылаться на контейнер черезdepends:, а валидатор требует обратного ребра — контейнер обязан перечислятьдетей в своём
depends:. Выполнить оба правила разом нельзя: получается цикл, ион ловится как ERROR. Любой
type/featureс непустой секцией## Issuesзаканчивается либо варнингами, либо ошибкой.
Spec
skills/issue/references/format.mdSteps to reproduce
(
skills/issue/references/format.md:261-262— «Child issues carry their owntype/*… and link back via theirdepends:»):- [ ] child-y — частьв секцию## Issuesконтейнера, как требуетшаблон
type/feature(format.md:277-279).python3 skills/issue/scripts/issue_check.pychild-yвdepends:контейнера — и прогнать проверку снова.Expected
Канонический контейнер из шаблона проходит проверку без варнингов и с кодом
выхода 0.
Actual
Шаг 3 — варнинг на контейнере, и он называет секцию, которой в файле нет:
Шаг 4 — жёсткая ошибка, выход 1:
Третьего варианта нет: либо варнинги, либо ошибка. Побочно ломается и картинка —
при ребре «ребёнок → контейнер»
issue_tree.pyрисует контейнер листом подкаждым ребёнком, повторяя его столько раз, сколько детей
(
skills/issue/scripts/issue_tree.py:38-47). Это читается ровно наоборототносительно вложенности.
Environment
Причина в трёх местах:
skills/issue/scripts/issue.py:270-285—body_dep_refs()считает## Issuesтаким же источником рёбер, как## Depends on:active = line.strip() in (DEPENDS_SECTION, "## Issues"). Для контейнера эторазворачивает направление графа.
skills/issue/scripts/issue.py:347-350— текст варнинга всегда подставляетDEPENDS_SECTION, даже когда ссылка пришла из## Issues. Отсюда упоминаниенесуществующей секции.
skills/issue/scripts/issue_check.py:58-61— детектор циклов, который делает«выполнить оба правила» невозможным.
Развилка, которую надо решить до правки (в этой issue она не выбрана):
## Issuesперестаёт быть источником рёберdepends:детей смотрит на контейнер — как и написано вformat.mdсейчасdepends:, дети про контейнер не знают; граф читается как вложенность, чек зелёныйformat.md:260-263Аргумент за B: «контейнер закрыт, когда закрыты дети» — это и есть отношение
зависимости, а «ребёнок принадлежит фиче» — отношение принадлежности, ему в
графе зависимостей делать нечего.
Acceptance criteria
type/featureс заполненной## Issuesи ребёнок,оформленный по
format.md, даютissue_check.pyбез варнингов и с кодом 0format.mdи валидатор называют одно направление ребраконтейнер↔ребёнок, и оно проверяется тестом
а не
## Depends onвсегдаissue_tree.pyрисует контейнер корнем, дети под нимfeat/issue-cache-scriptsto feat/issue-cache-scripts