[2026-09-26] eagle: family/documents/vault-sync/2026-09-26-syncthing-clone-root-objects-acl-confusion.md family/how-to/vault-git-sync.md personal/plans/music-tags-review/music-tags-review.md personal/tech/music-tags-repair-truenas.md
This commit is contained in:
1 parent
44d2c48574
commit
3ebaca6e74
4 files changed
+221
-20
No files matched your search
+57
-2
@@ -4,12 +4,13 @@ type: log
|
||||
namespace: family
|
||||
tags: [vault, sync, syncthing, git, permissions, acl, nfsv4, root]
|
||||
date: 2026-09-26
|
||||
status: resolved
|
||||
---
|
||||
|
||||
# `obsidian-syncthing`: 4031 root-объект, битый remote, ACL/chown не стоит
|
||||
|
||||
**Когда:** 2026-09-26, разбор по запросу Alex «почему документ не доехал до телефона».
|
||||
**Статус:** диагностика завершена, **фиксы НЕ применены** — ждём решения Alex.
|
||||
**Статус:** ✅ **РЕШЕНО** — ACL с `nas_users` + INHERIT применён, синк работает (см. «РЕШЕНИЕ» ниже).
|
||||
|
||||
## Симптом
|
||||
|
||||
@@ -95,7 +96,61 @@ midclt call filesystem.getacl /mnt/RED_2TB/Edu > .../acl-edu-before-YYYYmmdd-HHM
|
||||
> POSIX-gid файла, а не ACE. Без смены gid группа не получает ничего. Менять gid надо через
|
||||
> `midclt filesystem.setacl` (root-контекст), а не `chgrp`/`chown` из шелла.
|
||||
|
||||
## Почему однократный `chown` не лечил
|
||||
## ✅ РЕШЕНИЕ (2026-09-26, после требования Alex «Да, ставь acl inherit»)
|
||||
|
||||
Alex отверг предложенные варианты и дал прямую команду: **«Да, ставь acl inherit»**.
|
||||
Выбран **вариант A** — ACL + INHERIT, применён на `/mnt/RED_2TB/storage/obsidian-syncthing`.
|
||||
|
||||
**Что сделано (по порядку):**
|
||||
|
||||
```bash
|
||||
# 1. бэкап ACL
|
||||
midclt call filesystem.getacl /mnt/RED_2TB/storage/obsidian-syncthing \
|
||||
> /home/truenas_admin/variantA_bk/acl-obsidian-syncthing-before-20260926-154827.json
|
||||
|
||||
# 2. скрипт read-modify-write (файлом, не инлайном) → scp на NAS → python3
|
||||
# payload: gid=3000 (nas_users), uid=950, recursive=true,
|
||||
# все ACE → FILE_INHERIT+DIRECTORY_INHERIT, stripacl=false
|
||||
# → job 25046 SUCCESS
|
||||
|
||||
# 3. remote клона
|
||||
git remote set-url origin /mnt/RED_2TB/storage/git/obsidian-vault.git
|
||||
```
|
||||
|
||||
**Результат (проверено ФАКТОМ):**
|
||||
|
||||
| | До | После |
|
||||
|---|---|---|
|
||||
| `nfs4xdr_getfacl` | `trivial_acl: true` | **`trivial_acl: false`** |
|
||||
| `group` | 950 | **3000** (`nas_users`) |
|
||||
| флаги ACE | `-------` (NOINHERIT) | **`fd-----`** (FILE+DIRECTORY_INHERIT) |
|
||||
| объекты от root | 4051 | **0** (все 4073 = `truenas_admin`) |
|
||||
| `git fetch` | падал | `Already up to date` |
|
||||
| новый файл `touch` | — | `truenas_admin:nas_users` ✅ |
|
||||
|
||||
**Наследование подтверждено:** `touch .inherit_test` и `mkdir .inherit_dir_test` внутри папки
|
||||
получили `truenas_admin:nas_users` (тестовые артефакты удалены после проверки).
|
||||
|
||||
**Нота доехала:** коммит с Mac `f2501dc` (`1-needs-decision.md`, разбор 28 файлов) найден в
|
||||
истории клона, поверх уже лежал `8efe5c8` от Taiga.
|
||||
|
||||
### 🔴 ГЛАВНЫЙ ПИТФОЛЛ: `midclt getacl` = КЭШ
|
||||
|
||||
Сразу после `setacl` скрипт делал верификацию через `midclt filesystem.getacl` — и получал
|
||||
**старые** значения (`trivial: True`, `gid: 950`, `NOINHERIT`), печатая ложный «VERIFY FAILED».
|
||||
Правка на диске при этом была уже применена.
|
||||
|
||||
> **Реальное состояние проверять только:** `nfs4xdr_getfacl <path>` (`trivial_acl: false`,
|
||||
> флаги `fd-----`) + `stat -c '%A %U:%G %n'` + фактический `touch` нового файла.
|
||||
> **Не откатывать и не повторять `setacl` по показаниям `getacl`.**
|
||||
|
||||
### Альтернативный вариант B (не использован, для истории)
|
||||
|
||||
`user: "950:950"` в taiga service — устранил бы корень (контейнер не от root), но риск:
|
||||
образ может требовать root для `/opt/data`. Оставлен как возможное усиление;
|
||||
текущий ACL-INHERIT закрывает последствия.
|
||||
|
||||
## ℹ️ Почему однократный `chown` не лечил (историческая справка)
|
||||
|
||||
Прошлый разовый `chown` объектов на `truenas_admin` чинил только **уже существующие** объекты.
|
||||
Следующий `git pull` от root снова рождал root-owned объекты — и `chown` приходилось повторять.
|
||||
|
||||
@@ -25,20 +25,40 @@ tags:
|
||||
> реальная доставка до телефона — в пределах тика. Перезапись `schedule_display` через
|
||||
> `hermes cron edit 29851c413903 --schedule '*/5 * * * *'` — на решение Алексея (косметика, на исполнение не влияет).
|
||||
|
||||
> **🔴 STATE 2026-09-26 (later) — `obsidian-syncthing` НЕ получает обновления: root-owned objects + битый remote.**
|
||||
> Нота `1-needs-decision.md` была запушена с Mac (`66d4d62..f2501dc`), но в клон
|
||||
> `/obsidian-syncthing` **не доехала**. Два независимых дефекта:
|
||||
> **(1)** `origin` в клоне был **`/vault.git`** (потерян префикс пути) → `git fetch` падал
|
||||
> `does not appear to be a git repository`. Переписан на полный путь `git remote set-url`.
|
||||
> **(2)** **4051 из 4055 объектов принадлежат `root`** — контейнер `hermes-taiga` работает от
|
||||
> root (`Config.User` пусто, `id` → `uid=0`), он и делает pull → новые объекты root-owned,
|
||||
> git под uid 950 не может писать (`insufficient permission for adding an object`).
|
||||
> **ACL на `obsidian-syncthing` НЕ СТОИТ** — `nfs4xdr_getfacl` показывает `trivial_acl: true`
|
||||
> (только `owner@`/`group@`/`everyone@`, ни одной именованной записи). Рекурсивный ACL с группой
|
||||
> ставился ранее (2026-09-23), но на **`/mnt/RED_2TB/Edu`**, не на эту папку.
|
||||
> 🔴 **Урок: «ACL уже ставили» ≠ «ACL стоит на этой папке» — проверять фактом.**
|
||||
> **✅ STATE 2026-09-26 (later, RESOLVED) — ACL с `nas_users`+INHERIT применён на `obsidian-syncthing`, синк работает.**
|
||||
> Оба дефекта закрыты:
|
||||
> **(1) Битого remote** — `origin = /vault.git` переписан на полный путь (но **снова слетел** после
|
||||
> `sync-vault.sh`: тот форсит `file:///vault.git` внутри контейнера — это правильно для `/vault`,
|
||||
> но для хостового клона путь другой. Проверять `git remote -v` перед диагностикой прав).
|
||||
> **(2) Права — решено перманентно:** `midclt filesystem.setacl` рекурсивно на
|
||||
> `/mnt/RED_2TB/storage/obsidian-syncthing` с `gid=3000` (`nas_users`) и флагами
|
||||
> `FILE_INHERIT`+`DIRECTORY_INHERIT` на **все** ACE. Было `trivial_acl: true` + 4051 объект root →
|
||||
> стало `trivial_acl: false`, `group: 3000`, **0 объектов root** (все 4073 = `truenas_admin`).
|
||||
> Группа `nas_users` (gid 3000) содержит `root`, `truenas_admin`, `nas`, `mallexxx`, `transmission` —
|
||||
> поэтому и root-процесс Taiga, и Syncthing (uid 950) пишут в одну папку.
|
||||
> **Наследование проверено ФАКТОМ:** `touch .inherit_test` → `truenas_admin:nas_users`,
|
||||
> `mkdir .inherit_dir_test` → `truenas_admin:nas_users`. Артефакты после теста удалены.
|
||||
> `git fetch origin main` → `Already up to date`; HEAD клона содержал коммит с Mac (`f2501dc`).
|
||||
> **Бэкап ACL перед правкой:** `/home/truenas_admin/variantA_bk/acl-obsidian-syncthing-before-20260926-154827.json`.
|
||||
> **Скрипт:** `acllib_obsidian_syncthing_fix.py` (см. раздел «ACL repair» → рецепт).
|
||||
>
|
||||
> **🔴 ГЛАВНЫЙ ПИТФОЛЛ ЭТОЙ ПРАВКИ: `midclt filesystem.getacl` отдаёт КЭШ.**
|
||||
> Сразу после `setacl` он печатал старые значения (`trivial: True`, `gid: 950`, `NOINHERIT`),
|
||||
> и скрипт рапортовал ложный «VERIFY FAILED». Реальное состояние видно только через
|
||||
> **`nfs4xdr_getfacl`** и **`stat`**. Никогда не верить `midclt getacl` сразу после `setacl` —
|
||||
> сверять `nfs4xdr_getfacl` (там `trivial_acl: false` и `fd-----` = FILE_INHERIT+DIRECTORY_INHERIT)
|
||||
> плюс `stat -c '%A %U:%G'`.
|
||||
>
|
||||
> **Историческая путаница (для будущих сессий):** рекурсивный ACL с `nas_users` действительно
|
||||
> ставился 2026-09-23, но на **`/mnt/RED_2TB/Edu`** (запрос Alex: «можешь просто группу под acl
|
||||
> сделать с inherit чтобы весь edu был доступен группе включающей truenas_admin?»), **не** на
|
||||
> `obsidian-syncthing`. Отсюда «я это уже чинил» — чинил, но другую папку. Искать прошлые сессии:
|
||||
> `sqlite3 ~/.hermes/hermes-whale/state.db "SELECT session_id, substr(content,1,300) FROM messages WHERE content LIKE '%setfacl%' ORDER BY id DESC LIMIT 40;"`.
|
||||
>
|
||||
> Разовый `chown` лечит только уже существующие объекты; следующий pull от root возвращает дефект.
|
||||
> Фиксы НЕ применены. Подробно: `family/documents/vault-sync/2026-09-26-syncthing-clone-root-objects-acl-confusion.md`.
|
||||
> Перманентно лечит `ACL`+`INHERIT` (наследование новыми объектами) либо запуск процесса **не от root**.
|
||||
> Корень по-прежнему не устранён: контейнер `hermes-taiga` работает от root.
|
||||
> Подробно: `family/documents/vault-sync/2026-09-26-syncthing-clone-root-objects-acl-confusion.md`.
|
||||
>
|
||||
> **🔴 STATE 2026-09-26 — РАСХОЖДЕНИЕ РАСПИСАНИЯ: Taiga-сервер синкается РАЗ В ЧАС, не 5 минут.**
|
||||
> Job `sync-vault` внутри контейнера `hermes-taiga` (Hermes cron, id `29851c413903`) расписан
|
||||
@@ -226,9 +246,10 @@ cd ~/Developer/vault-sync-test && bash test-sync.sh
|
||||
## Pitfalls
|
||||
|
||||
- **`nfs4xdr_getfacl`, а НЕ `getfacl`, если проверяешь наличие расширенного ACL** (2026-09-26). POSIX-вид (`getfacl`, `ls -l`) показывает `user::rwx group::rwx` и **скрывает** отсутствие именованных ACE. Только `nfs4xdr_getfacl` печатает `trivial_acl: true` — что значит «кастомного ACL нет». Все диагностики прав на TrueNAS начинать с него.
|
||||
- 🔴 **`midclt filesystem.getacl` СРАЗУ ПОСЛЕ `setacl` отдаёт КЭШ** (2026-09-26). Печатает старые значения (`trivial: True`, старый `gid`, `NOINHERIT`), из-за чего правка выглядит неприменённой. Реальное состояние — только `nfs4xdr_getfacl <path>` (`trivial_acl: false`, флаги `fd-----`) + `stat -c '%A %U:%G %n'` + фактический `touch` внутрь папки. Не откатывать и не повторять `setacl` по показаниям `getacl`.
|
||||
- **`chgrp` / `chown` от `truenas_admin` → `Operation not permitted`** (2026-09-26). В NFSv4 `group@` — это POSIX-gid файла, а не ACE: без смены gid группа не получает доступа. Менять gid/uid только через `midclt filesystem.setacl` (root-контекст). TrueNAS `sudo` требует пароль (в отличие от Kraken, где `sudo -n` работает).
|
||||
- **Разовый `chown` — лечение симптома, не фикс** (2026-09-26). Если root-процесс продолжает писать в папку, root-owned объекты вернутся на следующем же запуске. Перманентно лечит только `ACL`+`INHERIT` (наследование новыми объектами) либо запуск процесса **не от root**.
|
||||
- **«Этот фикс уже делали» — проверить, что он на ТОЙ САМОЙ папке** (2026-09-26). Рекурсивный ACL с группой `nas_users` ставился 2026-09-23, но на `/mnt/RED_2TB/Edu`. На `obsidian-syncthing` ACL не было никогда. Каждый «известный фикс» верифицировать фактом на целевом объекте, а не памятью. Искать прошлые сессии: `sqlite3 ~/.hermes/hermes-whale/state.db "SELECT session_id, substr(content,1,300) FROM messages WHERE content LIKE '%setfacl%' ORDER BY id DESC LIMIT 40;"`.
|
||||
- **«Этот фикс уже делали» — проверить, что он на ТОЙ САМОЙ папке** (2026-09-26). Рекурсивный ACL с группой `nas_users` ставился 2026-09-23, но на `/mnt/RED_2TB/Edu` (запрос Alex про `Маскелиаде`). На `obsidian-syncthing` ACL не было никогда — отсюда ложное «я это уже чинил». Каждый «известный фикс» верифицировать фактом на целевом объекте, а не памятью. Искать прошлые сессии: `sqlite3 ~/.hermes/hermes-whale/state.db "SELECT session_id, substr(content,1,300) FROM messages WHERE content LIKE '%setfacl%' ORDER BY id DESC LIMIT 40;"`.
|
||||
- **Клон может иметь битый `origin`** (2026-09-26). `obsidian-syncthing` имел `origin = /vault.git` (потерян префикс пути) → `fatal: does not appear to be a git repository`. Проверять `git remote -v` в клоне до диагностики прав — это независимый дефект, который выглядит как проблема доступа.
|
||||
- **`sync-vault-lib.sh` глушит ошибки (`2>/dev/null` на fetch/merge)** → «Pushed ✓» / `exit 0` при фактически упавшем pull. Это уже второй раз, когда поломка синка была не видна в логе. Диагностировать по `git status`/`git log` в клоне, не по exit-code.
|
||||
- `git add pathspec` fails with `fatal: pathspec did not match any files` when a directory doesn't exist on disk — use `git add -A` instead
|
||||
@@ -255,8 +276,42 @@ midclt call filesystem.setacl '{"path":"/x","acltype":"NFS4","dacl":[…],
|
||||
|
||||
Pitfalls: `setacl`/`setperm` are **async** (return a job id) — poll `core.get_jobs` until `SUCCESS`/`FAILED`, or the immediate `WAITING` reads as a failure. `filesystem.setperm` refuses when a non-trivial ACL is present (`[EINVAL] … Option "stripacl" required`).
|
||||
|
||||
### ✅ Рабочий рецепт: группа + INHERIT на папку (проверено 2026-09-26)
|
||||
|
||||
Скрипт (`acllib_obsidian_syncthing_fix.py`, отработал на `/mnt/RED_2TB/storage/obsidian-syncthing`):
|
||||
read-modify-write ACL — читает существующий dacl, **сохраняет `id` полей** (без них TrueNAS падает
|
||||
`missing required keys: {'id'}`), переписывает `flags` в `FILE_INHERIT+DIRECTORY_INHERIT`,
|
||||
ставит `gid` нужной группы, `recursive: true`, `stripacl: false`.
|
||||
|
||||
```python
|
||||
payload = {
|
||||
"path": TARGET,
|
||||
"uid": 950, # truenas_admin — оставить владельцем
|
||||
"gid": 3000, # nas_users — группа, в которой и root, и uid 950
|
||||
"acltype": "NFS4",
|
||||
"dacl": new_dacl, # read-modify-write, флаги INHERIT, id сохранены
|
||||
"options": {"recursive": True, "traverse": True, "stripacl": False},
|
||||
}
|
||||
```
|
||||
|
||||
Запуск: `scp` скрипта на NAS → `ssh truenas_admin@mallexxx.duckdns.org "python3 /home/truenas_admin/<script>.py"`.
|
||||
|
||||
**Критические детали:**
|
||||
- `stripacl: false` — `true` не убирает DENY и ломает наследование (проверено 2026-09-21).
|
||||
- `gid` в payload при `recursive: true` **заодно переписывает владельца всех вложенных объектов**
|
||||
(4051 root-объект → `truenas_admin` одной операцией).
|
||||
- `group@` в NFSv4 — это POSIX-gid, а **не** ACE. `chgrp` от `truenas_admin` даёт `Operation not permitted`;
|
||||
менять gid только через `midclt`.
|
||||
- 🔴 **VERIFY через `midclt getacl` бесполезен — это кэш.** После `setacl` он печатает старые значения.
|
||||
Проверять: `nfs4xdr_getfacl <path>` (`trivial_acl: false`, `fd-----`) + `stat -c '%A %U:%G %n'` +
|
||||
фактический `touch` нового файла внутрь папки.
|
||||
- **Бэкап перед правкой:** `midclt call filesystem.getacl <path> > /home/truenas_admin/variantA_bk/acl-<name>-before-$(date +%Y%m%d-%H%M%S).json`.
|
||||
- **Приёмка:** `find <path> -type f -printf '%u\n' | sort | uniq -c` → 0 объектов от root;
|
||||
`git fetch origin main` → `Already up to date`.
|
||||
|
||||
## History
|
||||
|
||||
- **2026-09-26 (ACL на `obsidian-syncthing` — закрыто)**: синк не доезжал до телефона. Два независимых дефекта: **(1)** `origin` клона = `/vault.git` (потерян префикс) → `fetch` падал; **(2)** 4051 из 4055 объектов принадлежали `root` — контейнер `hermes-taiga` работает от root (`Config.User` пусто, `id` → `uid=0`), он делает pull, git под uid 950 не мог писать (`insufficient permission for adding an object`). Пользователь потребовал поставить ACL с INHERIT на папку — **сделано**: `midclt filesystem.setacl` recursive, `gid=3000` (`nas_users`) + `FILE_INHERIT+DIRECTORY_INHERIT` на все ACE. Было `trivial_acl: true` → стало `false`, `group: 3000`, 0 root-объектов (4073 = `truenas_admin`). Наследование подтверждено `touch`/`mkdir` фактом. `git fetch` → `Already up to date`. Коммит с Mac `f2501dc` найден в истории клона. 🔴 `midclt getacl` после `setacl` отдаёт кэш (ложный «не применилось») — сверять `nfs4xdr_getfacl` + `stat`. Бэкап: `/home/truenas_admin/variantA_bk/acl-obsidian-syncthing-before-20260926-154827.json`.
|
||||
- **2026-09-26**: клон `/obsidian-syncthing` потерял рабочий remote — Syncthing переписал `.git/config` (mtime 09:36:19, owner uid 950 ≠ наши root-записи) на хост-путь `/mnt/RED_2TB/storage/git/obsidian-vault.git`. Первый за всю историю лога `Fetch failed` (тик 09:40:31) → фазы 1 и 3 молча скипались при `exit 0`; `/obsidian-syncthing` отстал на 1 коммит Eagle (`66d4d626` vs bare `5c939ed8`). Фикс: `sync-vault.sh` форсит `origin = file:///vault.git` каждый тик + `insteadOf` для хост-пути и Gitea-URL; after-fix три SHA равны `3edbddf5`, статусы пусты, новых `Fetch failed` нет. Корень (`.git` клона синкается Syncthing'ом — отсюда же `.sync-conflict-*` внутри `.git`) — на решение владельца. Подробно: `family/documents/vault-sync/2026-09-26-syncthing-clone-origin-url-flip.md`.
|
||||
- **2026-09-26 (поправка каденции)**: снято ложное «Taiga синкается раз в час». `hermes cron list` и `jobs.json:schedule_display` показывают `0 * * * *`, но `schedule.expr = "*/5 * * * *"` и `executions.db` дают 985 интервалов по 5 мин из 1001 тика (288,6/сутки). Диагностировать каденцию — только по `executions.db`/`schedule.expr`.
|
||||
|
||||
|
||||
@@ -16,7 +16,16 @@ status: awaiting-approval
|
||||
> [!tip] Блок 1 разобран вручную (2026-09-26)
|
||||
> 28 файлов «требует решения» — прошёл глазами по одному. **10 артистов вписано вручную**
|
||||
> (Hans Zimmer, Михаил Круг, Мумий Тролль, Kub vs Ray Charles, Lil Jon…), 18 — только title.
|
||||
> См. [[1-needs-decision]].
|
||||
> Затем **Alex прошёл по ноте сам** и дополнил artist из Shazam (Сява, СПЛИН, Ирина Аллегрова,
|
||||
> Наутилус Помпилиус, MBrother, Валдай, Each Others, D.I.P. Project feat. Infiniti).
|
||||
> Нужен финальный апрув по его правкам. См. [[1-needs-decision]].
|
||||
|
||||
> [!warning] Средняя уверенность — найден мусор от автоматики (2026-09-26)
|
||||
> 4 строки в `2-medium-confidence.md` содержат `яю` вместо значений — это **UTF-16 BOM (`ÿþ`)**,
|
||||
> ошибочно «починенный» как mojibake. Пример: `06 Steel Deluxe - Сердце открой.mp3` →
|
||||
> title предложен `яю!@54F5 B:@>9` вместо `Сердце открой`. Требует ручной правки.
|
||||
> В vault лежит **старая неразбитая версия** (586 КБ / 2096 чекбоксов) — разбитые 56 нот
|
||||
> собраны в `/tmp/rg3/`, но **ещё не скопированы** в vault.
|
||||
|
||||
## Что в каком блоке
|
||||
|
||||
|
||||
@@ -19,14 +19,96 @@ related:
|
||||
|
||||
# Music Tags Repair — TrueNAS (7906 файлов)
|
||||
|
||||
> **Статус: ЭТАПЫ 1–3 ЗАВЕРШЕНЫ (2026-09-26). CSV v5 + ноты ревью отданы Alex, блок 1 разобран вручную. Правки файлов НЕ начаты.**
|
||||
> **Статус: ЭТАПЫ 1–3 ЗАВЕРШЕНЫ (2026-09-26). CSV v5 + ноты ревью отданы Alex, блок 1 разобран вручную
|
||||
> (я — 28 файлов, Alex — поверх моих правок). Правки файлов НЕ начаты.**
|
||||
> Следующий шаг — апрув Alex по нотам ревью, затем бэкап + применение.
|
||||
> Прогонялись **пять волн** проверок: полный аудит всех строк (`audit_plan.py` + `final_gate.py`) → 6 багов,
|
||||
> Прогонялись **шесть волн** проверок: полный аудит всех строк (`audit_plan.py` + `final_gate.py`) → 6 багов,
|
||||
> третья волна по замечаниям Alex → 3 бага (en-dash + подстроковый поиск стоп-слов),
|
||||
> **четвёртая волна (ручной проход) → 10 багов (track-номера, disc-track, восклицательные знаки, регистр)**,
|
||||
> **пятая волна (ручной разбор блока 1 глазами) → 28 файлов, 10 артистов вписано вручную**.
|
||||
> **пятая волна (ручной разбор блока 1 глазами) → 28 файлов, 10 артистов вписано вручную**,
|
||||
> **шестая волна (Alex правит мои md + ACL-фикс синка) → найдены баг `ÿþ`-BOM и конфликтные файлы**.
|
||||
> Итог v5: 6773 `fix`, mojibake = 0, 121 тест PASS, блок «требует решения» 296 → 28.
|
||||
|
||||
## 🔴 ШЕСТАЯ ВОЛНА: ALEX ПРАВИТ МОИ НОТЫ + ACL-ФИКС СИНКА (2026-09-26)
|
||||
|
||||
Alex: **«Needs decision — забирай из syncthing. Medium confidence — там у тебя явный мусор,
|
||||
ты походу хуй забил его обрабатывать. И какие-то конфликтные файлы там зачем?»**
|
||||
|
||||
### ✅ Ноты доехали И были отредактированы Alex'ом
|
||||
|
||||
`1-needs-decision.md` в Syncthing = **7705 байт** (я записал 6843) — то есть Alex прошёл по нему
|
||||
руками и вписал artist там, где я не смог. Его правки (все — из Shazam, со ссылками в тексте):
|
||||
|
||||
| Файл | artist | title |
|
||||
|---|---|---|
|
||||
| `lil jon` | **Lil Jon & The East Side Boyz & Lil Scrappy** | What U Gon' Do (feat. Lil Scrappy) |
|
||||
| `I M P R E Z A` | **Each Others** | Fast Car (feat. Tameko'Star) [Gianluca Motta Remix] |
|
||||
| `клубняк3` | **MBrother** | Trebles (feat. MBrother) |
|
||||
| `Перец` | **Валдай** | Перцы |
|
||||
| `dj toll` | **D.I.P. Project feat. Infiniti** | Где ты (DJ Toll Club Version Remix) |
|
||||
| `029_Mast` | — | Master Spensor — «Потанцуй со мной» |
|
||||
| `Нарк`, `БОДРЯЧКОМ`, `Бык не быкуй!`, `волна по ебалу на` | **Сява** | — |
|
||||
| `Казанова` | **Наутилус Помпилиус** | Казанова |
|
||||
| `Младший лейтенант` | **Ирина Аллегрова** | Младший лейтенант |
|
||||
| `Остаёмся зимовать` | **СПЛИН** | Остаёмся зимовать |
|
||||
|
||||
**Три файла Alex вычеркнул** (`~~НАШЕСТВИЕ 2009 - ДЕНЬ ВТОРОЙ~~`), `Из чего же` оставил `- [ ]`.
|
||||
По `i am instructor`: **«artist — Не найден, какой нибудь yechno beat поставь»** ← не выяснено, что имелось в виду.
|
||||
|
||||
> 🔴 **Фикс artist из папки, который я мог сделать, но не сделал.** `Dj Riga ceh-126 Track` —
|
||||
> Alex поправил `title` на `Цех-126 Track` (кириллица). Вывод: в папках `!Radio/*`
|
||||
> artist почти всегда = первые 1–3 слова имени, остальное = название. Проверять это первым.
|
||||
|
||||
### 🔴 БАГ: `ÿþ` (UTF-16 BOM) «починен» в мусор — 4 строки в `2-medium-confidence.md`
|
||||
|
||||
```
|
||||
06 Steel Deluxe - Сердце открой.mp3
|
||||
title: ÿþ!@54F5 B:@>9 → яю!@54F5 B:@>9 ← МУСОР вместо названия
|
||||
10 Boom (Bimbo Jones Mix).mp3
|
||||
title: ÿþY → яюY
|
||||
artist: ÿþd → яюd
|
||||
album: ÿþY → яюY
|
||||
```
|
||||
|
||||
**Причина:** байты `FF FE` в начале строки — это **UTF-16 BOM**, а не CP1251→Latin-1 mojibake.
|
||||
`fix_encoding` конвертировал их как mojibake → `ÿþ` → `яю`. Результат **хуже исходного**.
|
||||
|
||||
> 🔴 **ПИТФОЛЛ: `ÿþ` (0xFF 0xFE) в начале тега — это BOM, не mojibake.**
|
||||
> Не конвертировать. Настоящее значение — в имени файла (`Сердце открой`), artist — из имени.
|
||||
> **Ложное срабатывание grep:** строки `Òåðÿþ ñâåò → Теряю свет` в `3-high-confidence.md`
|
||||
> содержат `ÿþ` **внутри слова «Теряю»** — это корректная конвертация, НЕ баг. Различать по позиции.
|
||||
|
||||
**Реальных багов — 4 строки (1 файл), не 2096.** Проверять адресно, а не по всему файлу.
|
||||
|
||||
### 📂 Конфликтные файлы Syncthing — зачем и что с ними
|
||||
|
||||
Три в `music-tags-review/` + два в других местах vault (всего 5 в vault):
|
||||
|
||||
```
|
||||
1-needs-decision.sync-conflict-20260926-150525-XJRJQB2 89 КБ ← СТАРАЯ версия (296 «решений»)
|
||||
1-needs-decision.sync-conflict-20260926-165021-C6DYBCZ 6.8 КБ ← дубль моей версии
|
||||
1-needs-decision.md 7.7 КБ ← АКТУАЛЬНАЯ (Alex отредактировал)
|
||||
family/index.sync-conflict-20260915-124537-XJRJQB2.md
|
||||
family/documents/fasteners-nomenclature.sync-conflict-20260716-164505-C6DYBCZ.md
|
||||
family/documents/bring-to-russia.sync-conflict-20260831-161030-C6DYBCZ.md
|
||||
```
|
||||
|
||||
**Откуда берутся:** `.git/` клона `obsidian-syncthing` **сам синкается Syncthing'ом** — когда
|
||||
два устройства правят файл между тиками git-синка, Syncthing сохраняет обе версии с суффиксом
|
||||
`sync-conflict-<timestamp>-<deviceID>`. Суффикс `XJRJQB2` / `C6DYBCZ` = разные устройства.
|
||||
|
||||
> ⚠️ Старые конфликты (`20260915`, `20260716`, `20260831`) висят с прошлых сессий — **не удалять
|
||||
> без апрува Alex**, но помнить: это мусор, засоряющий `git status`.
|
||||
|
||||
### 🔴 МОЙ ПРОБЕЛ: ноты разбиты, но в vault не залиты
|
||||
|
||||
`2-medium-confidence.md` в vault = **586 КБ / 2096 чекбоксов** — старая НЕразбитая версия.
|
||||
Разбитые 56 файлов собраны в `/tmp/rg3/`, но в vault не скопированы. Отсюда «ты забил обрабатывать» —
|
||||
выглядит как монолит без прогресса.
|
||||
|
||||
**Что нужно сделать:** скопировать `/tmp/rg3/*.md` → `personal/plans/music-tags-review/`,
|
||||
удалить старые `2-medium-confidence*.md`, синк.
|
||||
|
||||
## 🖐 ПЯТАЯ ВОЛНА: РУЧНОЙ РАЗБОР БЛОКА 1 (2026-09-26)
|
||||
|
||||
Alex: **«Ты проверил все вручную?»** → **«Без правила берешь и руками правишь. Без скриптов!!»** →
|
||||
|
||||
Reference in new issue
Block a user