[2026-09-22 13:02:30] taiga-vault: family/documents/vault-sync/2026-09-22-watchlist-merge-conflict.md
This commit is contained in:
1 parent
9a2220e84f
commit
c835707a13
1 file changed
+109
@@ -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 <hermes@kraken> [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]]
|
||||||
Reference in new issue
Block a user