Итог параллельной волны фиксов (worktree-изоляция, cherry-pick в master): - ingest-dedup-integrity (F1, F6) → спека ingest - retry-stall-basis (MAJOR-1, MAJOR-2) → спека state-reconciliation - linking-transition-robustness (MAJOR-4, MINOR-7) → спеки file-layout и state-reconciliation Дельты влиты в openspec/specs, changes перенесены в openspec/changes/archive/2026-07-08-*. Беклог не трогаю (по решению). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2.8 KiB
ADDED Requirements
Requirement: Claim раскладки коммитится до хардлинков и устойчив к сбою учёта
Раскладка — «claim-then-side-effect»: система SHALL сперва зафиксировать переход
задачи в linking (claim шага раскладки), и только затем создавать хардлинки.
Если запись claim перехода в linking провалилась, система НЕ SHALL создавать
хардлинки и SHALL прервать раскладку, оставив задачу в исходном состоянии
(review/deferred при ручном применении; recognizing при авто-раскладке) —
чтобы у шага сохранился владелец, а хардлинки не легли при незакоммиченном claim
(иначе финальный переход linking → done из фактического состояния был бы
отклонён графом, и задача застряла бы со stale-планом).
Если хардлинки уже созданы, но запись их учёта (file_link) провалилась
(транзиентная ошибка хранилища), задача НЕ SHALL оставаться в linking: система
SHALL перевести её в review с причиной. Повторное применение SHALL быть
идемпотентным — уже созданные хардлинки распознаются как существующие
(StatusExists), а их учёт дописывается.
Scenario: Провал claim не создаёт хардлинков
- GIVEN задача в
reviewс готовым источником и валидным планом - WHEN запись перехода в
linkingпроваливается - THEN хардлинки не создаются, учёт
file_linkне пишется - AND задача остаётся в
review, а команда отказывает с ошибкой
Scenario: Провал учёта уводит в review, не оставляя в linking
- GIVEN хардлинки по плану уже созданы на файловой системе
- WHEN запись строк
file_linkпроваливается транзиентной ошибкой - THEN задача переходит в
reviewс причиной (кодpersist), а не остаётся вlinking - AND созданные хардлинки остаются на диске
- AND повторное «Применить» идемпотентно дописывает учёт и доводит до
done