From 335d144ca3a461be68eac429f4d1e293999f4beb Mon Sep 17 00:00:00 2001 From: Taiga Date: Sat, 26 Sep 2026 11:02:28 +0000 Subject: [PATCH] [2026-09-26 11:02:28] taiga-vault: family/documents/vault-sync/2026-09-26-music-tags-merge-conflict.md --- .../2026-09-26-music-tags-merge-conflict.md | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 family/documents/vault-sync/2026-09-26-music-tags-merge-conflict.md diff --git a/family/documents/vault-sync/2026-09-26-music-tags-merge-conflict.md b/family/documents/vault-sync/2026-09-26-music-tags-merge-conflict.md new file mode 100644 index 00000000..fe91fe65 --- /dev/null +++ b/family/documents/vault-sync/2026-09-26-music-tags-merge-conflict.md @@ -0,0 +1,84 @@ +--- +title: Vault sync — маркеры конфликта в music-tags-review/1-needs-decision.md +type: incident +namespace: family +tags: [vault, git, sync, conflict, music-tags, eagle, whale, syncthing] +status: resolved +--- + +# Маркеры merge-конфликта в `1-needs-decision.md` (2026-09-26) + +## Симптом + +Тик sync 11:00 UTC: три SHA равны (`dfa5240d`), `git status --porcelain` пуст в обоих клонах, +но `grep '^<<<<<<<'` дал **8 строк** — по 4 маркера в `1-needs-decision.md` в `/vault` +и `/obsidian-syncthing`. Маркеры уже **закоммичены и разъехались по всем трём клонам** +(в Obsidian заметка выглядит как каша из `<<<<<<< HEAD` / `>>>>>>> nas/main`). + +Верхний коммит bare до фикса: + +``` +dfa5240d Alexey Martemyanov [2026-09-26] eagle: merge conflict — review needed +parents: aa0d26a2 (1-й, HEAD-сторона) 50e81dc (2-й, nas/main = сторона телефона) +``` + +## Механика — снова два писателя одного файла (класс «гонка автоматизаций», как watchlist 09-22) + +Обе стороны пошли от одной базы `3f48512f` (4 секции, все пункты `[ ]`) **в одну и ту же минуту**: + +| Сторона | Коммит | Время (UTC) | Что сделала | +|---|---|---|---| +| Eagle/`whale` | `aa0d26a2` | 10:56:14 | удалил секции `!A Not sorted` (Нашествие), Kazantip, `!Детские`; `Файлов: 4 → 1`; пункт `i am instructor` оставил в базовом виде (`[ ]`, `_title<-filename_`) | +| телефон (Syncthing → `nas/main`) | `81d15fa6` / `50e81dc` | 10:55:44 / 10:55:50 | удалил строку Нашествия, отметил `[x]` Kazantip (`artist: Kazantip 2008`, `title: Beat`) и `[x]` i am instructor (`I am instructor`, `artist: Techno Beat`); `!Детские` оставил `[ ]` | + +Затем Eagle мерджил `nas/main` своим `aa0d26a2`, получил конфликт и по своему алгоритму +закоммитил файл **вместе с маркерами** (`dfa5240d`) и запушил в bare. Наши фазы 10:56 / 11:00 +втянули его fast-forward в `/vault` и `/obsidian-syncthing`. Git-синк при этом штатный: +`exit 0`, `Pushed ✓` ×3, три SHA равны, `git status` пуст — на маркеры он не реагирует. + +Конфликтные регионы по существу были тривиальны: HEAD-сторона **не содержала уникального +контента** (только удаления секций и устаревшее состояние пункта), сторона телефона содержала +решения Алексея (`[x]` + проставленные значения). + +## Разрешение (Taiga, объединением, ничего не удаляя) + +Взят **контент стороны `nas/main` (телефон)** — `50e81dc:personal/plans/music-tags-review/1-needs-decision.md`, +байт-в-байт (md5 `03c6c9ca3137abe9074cda0303743082`), маркеры убраны. + +Почему телефон, а не whale: + +- у телефона `[x]`-решения Алексея и проставленные `artist`/`title` — у whale по этому пункту + состояние **до** решения (`[ ]`, `i am instructor` строчными, `_title<-filename_`); взятие whale потеряло бы решение; +- в версии whale удалены секции, включая `!Детские` (`Из чего же.mp3`) — там пункт всё ещё `[ ]`, + т.е. незакрытое решение; удалять его молча нельзя; +- Нашествие удалено **обеими** сторонами — не восстанавливалось. + +Счётчик `**Файлов:** 4` оставлен как на стороне телефона (не пересчитывался — файл активно +правится автоматизацией, минимальная дельта безопаснее). + +Коммит Taiga: + +``` +563a7fc taiga-vault: resolve merge conflict markers in personal/plans/music-tags-review/1-needs-decision.md + (union: nas/phone side kept — Alexey's [x] decisions and pending !Детские item preserved, nothing deleted) + → file:///vault.git dfa5240..563a7fc main -> main +``` + +## Проверка (после фикса) + +- `grep -c '^<<<<<<<|^=======|^>>>>>>>'` по файлу → **0**; маркеров по всем `.md` в `/vault` и `/obsidian-syncthing` → **0** +- md5 файла в `/vault` = md5 версии `50e81dc` из bare → `03c6c9ca…` +- три SHA равны (`563a7fc`), `git status --porcelain` пуст, `Push failed` 0, хук-ошибка (host-путь) — известная, безвредная + +## Хвосты и рекомендации владельцу + +- **Корень — гонка двух писателей** у `personal/plans/music-tags-review/*`: `whale`/Eagle + (обрабатывает решения, удаляет закрытые пункты) и телефон через Syncthing (Алексей ставит `[x]` + и вписывает значения). Файл правится обоими в течение одной минуты → Eagle мерджит с маркерами. + Устранение: разнести проходы по времени либо сделать проход `whale` идемпотентным + (не удалять пункт, пока он не `[x]` на стороне телефона), либо не править этот файл на телефоне. +- Родственный шум по тому же файлу за день: две конфликт-копии Syncthing + (`…sync-conflict-20260926-150525-XJRJQB2.md`, `…-165021-C6DYBCZ.md`) — см. + `2026-09-26-syncthing-conflict-1-needs-decision.md`. **Не удалять** без подтверждения владельца. +- Заметка создана автоматически (cron-тик sync-vault); контент решён объединением, финальное + слово по содержимому файла — за Алексеем.