[2026-09-18 11:36:09] taiga-vault: family/documents/vault-sync/2026-09-18-window-cap-silent-tick-undercount.md

This commit is contained in:
Taiga
2026-09-18 11:36:10 +00:00
parent 54d69ca885
commit 0a4a40c819
@@ -0,0 +1,40 @@
# Окно сверки лога: кап по следующему тику (2026-09-18)
Связано: `family/documents/vault-sync/2026-09-16-silent-tick-clusters.md`
## Суть
Метод сверки `executions.db` с `/tmp/vault-sync.log` по окну `[claimed_at 45 с; finished_at + 90 с]` **занижает** число молчащих тиков, если тик был затянувшимся: его окно заходит в интервал следующего тика и захватывает его строку `[syncthing] Pushed ✓`.
**Наблюдение:** тик `2026-09-18T09:35:51``finished_at 09:39:41` (230,8 с — LLM-раунд растянулся, вероятно деградация провайдера). Строк в логе за этот тик нет вообще. Окно без капа: `[09:35:06; 09:41:11]` — а строка следующего тика `09:40:55` попадает внутрь, поэтому тик считался «не молчащим».
## Исправленный метод
Верхняя граница = `min(finished_at + 90 с, claimed_at следующего тика)`.
```python
for i,(cl,fin,st,err) in enumerate(sel):
if st!='completed' or not fin: continue
a,b=P(cl),P(fin)
nxt=P(sel[i+1][0]) if i+1<len(sel) else None
hi=b+timedelta(seconds=90)
if nxt: hi=min(hi, nxt)
if not any(a-timedelta(seconds=45)<=t<=hi for t in logts):
silent.append((cl[:16],round((b-a).total_seconds(),1)))
```
## Замер (окно лога 2026-09-15 11:35:19 → 2026-09-18 11:35:16, 853 строки)
- тиков: **863**, молчащих: **15 (1,7 %)**, failed: 1 (старый `Fire claim lost`, 2026-09-15 11:30)
- без капа по следующему тику выходило 14 (1,6 %) — расхождение ровно на затянувшемся тике 09:35
- длительности: медиана 10,1 с, p95 20,9 с, максимум 230,8 с (тот самый тик)
## Состояние на момент проверки (2026-09-18 11:35 UTC)
Ручной прогон `cd /opt/data && bash /opt/data/sync-vault.sh` → exit 0, `Pushed ✓` по всем трём фазам.
- bare `/vault.git` = `/vault` = `/obsidian-syncthing` = `54d69ca885d42249b9d4a1af6bd697d30c9b51ad`
- `git status --porcelain` пуст в обоих клонах
- ошибок в логе (`No such file or directory`, `error`, `fatal`) — 0
Вывод: молчащие тики — известный и безвредный режим (git-синк идемпотентен, следующий тик догоняет всё); методика сверки обновлена, вмешательство в конфиг не требуется.