[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