Merge checkbox state on pull instead of overwriting it #12
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
При pull объединять состояние чекбоксов вместо перезаписи: для строк-чекбоксов
с совпадающим текстом
[x]с любой стороны выигрывает. Остальное телопо-прежнему затирается целиком.
Spec
none
Depends on
доменном слое, слой sync его импортирует, а не переопределяет
Motivation
Галочка теряется в обе стороны. Pull пишет тело сервера как есть
(
skills/sync/scripts/pull.py:191), push шлёт локальное тело как есть(
skills/sync/scripts/map.py:171), и кто записал последним, тот и прав:отметил в вебе — потерял на первом
push.py --update; отметил локально —потерял на первом pull.
Обычный ответ на это — отслеживание drift и слияние, от которых репозиторий
отказался осознанно (
skills/sync/SKILL.md:193). Здесь он и не нужен.Тик монотонен: пункт едет только из
[ ]в[x], поэтому объединениедвух сторон — это объединение множеств, а не разрешение конфликта. Правило на
один тип строки заменяет весь механизм, и «стор не зеркало» остаётся в силе.
Отказаться от объединения — значит запретить отмечать в веб-интерфейсе, а
отмечают там, где читают. Запрет, который невозможно проверить, выполняться не
будет.
Цену признаём явно: снятие галочки монотонности не подчиняется, поэтому снятая
в вебе галочка вернётся следующим pull. Снимать — локально, потом push.
Acceptance criteria
локальной копии, состояние
[x]сохраняется, с какой бы стороны оно нистояло
как есть — включая её состояние
на строки-чекбоксы, проза не сливается
изменений и не падает
--cachedповедения не меняет: пропущенный issue не читается и несливается
skills/issue/, вskills/sync/недублируется
skills/sync/SKILL.mdописывает правило и его цену: снятая в вебегалочка возвращается следующим pull, снимать надо локально и пушить
skills/issue/не изменёнConstraints
затираются pull'ом как раньше.
upstream, трёхсторонний merge с базовой версией.
уезжает целиком в
push.py --update.feat/issue-cache-scriptsto feat/issue-cache-scripts