From c835707a132e1c6c6141f1409b8b8f8a749e64d9 Mon Sep 17 00:00:00 2001 From: Taiga Date: Tue, 22 Sep 2026 13:02:30 +0000 Subject: [PATCH] [2026-09-22 13:02:30] taiga-vault: family/documents/vault-sync/2026-09-22-watchlist-merge-conflict.md --- .../2026-09-22-watchlist-merge-conflict.md | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 family/documents/vault-sync/2026-09-22-watchlist-merge-conflict.md diff --git a/family/documents/vault-sync/2026-09-22-watchlist-merge-conflict.md b/family/documents/vault-sync/2026-09-22-watchlist-merge-conflict.md new file mode 100644 index 00000000..64a7e24a --- /dev/null +++ b/family/documents/vault-sync/2026-09-22-watchlist-merge-conflict.md @@ -0,0 +1,109 @@ +--- +date: 2026-09-22 +tags: [vault-sync, conflict, watchlist, kraken, eagle, incident] +--- + +# 2026-09-22 — конфликтные маркеры в `movies-watchlist.md` (гонка двух инстансов автоматизации) + +## Что случилось + +Тик `sync-vault` 12:55 UTC отработал штатно (`Pushed ✓` ×3, exit 0), но верхний +коммит bare был от Kraken: + +``` +d6d992d8 Hermes [2026-09-22] kraken: merge conflict — review needed +``` + +В `family/documents/movies-watchlist.md` лежали **три блока конфликтных маркеров** +(`<<<<<<< HEAD` / `>>>>>>> origin/main`) в строках 86, 170, 223 — то есть в +заметке, которую Алексей видит в Obsidian. + +## Причина — не git, а два писателя + +Одну и ту же заметку переписывают **два инстанса одной автоматизации** в одну и ту же минуту: + +| сторона | коммит | время (+0600) | что делает с записью | +|---|---|---|---| +| Kraken (локальная, `HEAD` в мердже) | `51ca391` | 19:00:02 | маркерный проход `❓` (переносил маркеры между соседними строками), сохранил `★`-подзаписи | +| Eagle (уже в bare, `origin/main`) | `d10bc1a` | 18:19:06 | нормализация: снял `❓`, проставил год (`Духless 2012`, `Бумбараш 1972`, `Everything Everywhere All at Once 2022`), удалил `★`-подзаписи (текущий формат — inline `IMDb … KP …`) | + +Kraken мерджил Eagle-коммит, получил конфликт на трёх участках и, как заложено в +`sync-vault-lib.sh`, закоммитил файл **вместе с маркерами** и подписал «review needed». +Плюс Kraken сохранил бэкап: `family/documents/movies-watchlist.md.bak-questions` +(682 строки, без маркеров). + +Конфликты (по 1–2 строки, семантически безобидные): + +- `Everything Everywhere All at Once 2021` (Kraken, год неверен) → `… 2022` (Eagle) +- `❓ Спрут сериал` / `Духless` (Kraken) → `Спрут сериал` / `Духless 2012` (Eagle) +- `❓ Идиот Бортко` / `❓ Замок Балабанов` / `Бумбараш` (Kraken) → без `❓`, `Бумбараш 1972` (Eagle) + +В каждом блоке Kraken-сторона дополнительно несла `★`-подзаписи (TMDB-оценки старого формата). + +## Решение (Taiga, 13:01 UTC — объединение, без потери данных) + +Для каждой пары взяты **обе** полезные части: нормализованные строки Eagle +(снятый `❓`, правильный год) + `★`-подзаписи Kraken под ними. + +```diff +- - [ ] Everything Everywhere All at Once 2021 ++ - [ ] Everything Everywhere All at Once 2022 + - Всё везде и сразу (2022) ★7.7 + - Almost Everything You Ever Wanted to Know About Everything Everywhere All at Once (2022) ★10.0 + +- - [ ] ❓ Спрут сериал +- - [ ] Духless ++ - [ ] Спрут сериал ++ - [ ] Духless 2012 + - Духless (2012) ★5.8 + - Духless 2 (2015) ★5.5 + +- - [ ] ❓ Идиот Бортко +- - [ ] ❓ Замок Балабанов +- - [ ] Бумбараш ++ - [ ] Идиот Бортко ++ - [ ] Замок Балабанов ++ - [ ] Бумбараш 1972 + - Бумбараш (1972) ★5.8 + - Бумбараш (1972) ★0.0 +``` + +Коммит: `9a2220e` — `[2026-09-22 13:01:52] taiga-vault: resolve merge conflict markers in movies-watchlist.md …`. + +## Проверка (фактом, не на глаз) + +``` +bare /vault /obsidian-syncthing HEAD = 9a2220e (все три равны) +git status --porcelain — пусто во всех трёх +grep -rn '^<<<<<<<\|^>>>>>>>' /vault /obsidian-syncthing --include='*.md' → 0 +bash /opt/data/sync-vault.sh → exit 0, Pushed ✓ по всем трём фазам (13:01:55) +``` + +## Что осталось / к решению Алексея + +1. **Гонка не устранена.** Если Kraken-nightly (01:00) и Eagle будут писать заметку в + одну минуту, конфликт повторится и снова встанет маркерами. Кандидат на разбор: + разносить писателей по времени либо делать маркерный проход идемпотентным + (писать только при реальном изменении и без переноса `❓` на соседнюю строку — + в диффе Kraken маркер «съезжал» на соседние позиции, что и создало конфликт). +2. **`movies-watchlist.md.bak-questions`** (682 строки, создал Kraken) — лежит в + `family/documents/`. Расширение не `.md`, Obsidian его не показывает. Не удаляла + без подтверждения. Сказать — уберу. +3. **Хук `post-receive` в `/vault.git` ссылается на хостовый путь** + (`GIT_DIR=/mnt/RED_2TB/storage/git/obsidian-vault.git`, worktree + `/mnt/RED_2TB/storage/obsidian`), которого **не существует внутри контейнера + hermes-taiga** — при пушах от Taiga хук падает: + + ``` + remote: fatal: not a git repository: '/mnt/RED_2TB/storage/git/obsidian-vault.git' + remote: [hook] obsidian sparse export updated + ``` + + Пуш при этом проходит (в bare всё попадает), но хост-экспорт `/mnt/RED_2TB/storage/obsidian` + при пушах **из контейнера** не обновляется — его догоняет только следующий пуш с хоста + (Eagle/Kraken), где этот путь есть. Хук можно сделать устойчивым (искать bare по + списку кандидатов `/vault.git`, `/mnt/RED_2TB/storage/git/obsidian-vault.git`), + но правка хостовой инфраструктуры — по решению Алексея. + +Связано: [[family/documents/vault-sync/2026-09-21-bare-repo-push-permission-denied]], +[[family/projects/watchlist-automation]], [[personal/plans/watchlist-tmdb-missing-marker]]