[все дашборды](index.html) · категория: Прочее · [← Windowless-MyOwnPC-Natalia](Windowless-MyOwnPC-Natalia.html) · [grusha-torso-artur-2026-08-14 →](grusha-torso-artur-2026-08-14.html)

# Паспорт: tracker_write.py — запись размещений в трекер в момент публикации

**Дом:** `<волт>\_Dashboards\tracker_write.py` (рядом с трекером и `posting_day.py`)
**Заведено:** 06.08.2026, машина NATALY-WIN-NB, по просьбе Наташи «приделай запись в трекере к моменту публикации».

## Что делает

Единственная дверь записи в `content-distribution-tracker.html` — файл, из которого дашборд постинга берёт «сколько обычных постов вышло в день».

| команда | что делает |
|---|---|
| `add` | одно размещение: пост, площадка, тир, язык, URL, дата |
| `sync` | реконсилер: дочитывает журнал фактов `registry\PUB-REGISTRY.md` и добавляет всё, чего в трекере нет |
| `apply-rows --file x.json` | вливает пачку готовых строк (использовалось для разового восстановления 61 строки) |
| `status` | сколько строк, какая последняя дата, сколько дней тишины |

## Зачем понадобилась

Трекер пополнялся только руками. Он встал 28.07.2026, и дашборд полторы недели честно рисовал «постов = 0», пока посты выходили каждый день. Замер 06.08: потерялось **61 размещение** за 29.07–05.08 плюс ещё **51** за 05–06.08, которые нашлись в журнале фактов. Ручное довнесение лечит случай, дверь лечит класс.

## Вход и выход

- **Вход:** аргументы CLI; для `sync` — `_imports\content-factory\registry\PUB-REGISTRY.md` (таблица «Опубликовано»).
- **Выход:** строка в трекере, строка счётчика в `_usage-tracker-write.jsonl`, отметка времени в `_tracker-sync.log`.

## Кто дёргает

1. `registry\pub_registry.py` → `cmd_posted` → `writeback_tracker(...)` — **автоматически в момент факта публикации**.
2. `_gen_posting_full.py` → `sync()` перед отрисовкой — ночная страховка на публикации, прошедшие мимо двери. ⚠️ С 06.08 по 11.08.2026 этой ноги НЕ БЫЛО: паспорт её описывал, а в генераторе не было даже `import tracker_write`. Цена: трекер стоял 5 дней, из дашборда выпало 100 размещений, страница показывала полноту, которой нет. Приделано 11.08.2026, сторожат случаи [8] и [9] в `_test_gen_posting_full.py`: [8] проверяет саму ПРОВОДКУ (мутация «убрать вызов» краснеет), [9] что упавший реконсилер не валит сборку.
3. Человек руками.

## Что ломается и как понять

| симптом | причина | что делать |
|---|---|---|
| код выхода 3, «ТРЕКЕР СЛОМАН» | формат строк трекера сменился либо файла нет | посмотреть `ROW_RE` в `posting_day.py`: дверь пишет ровно в этом формате |
| «пропуск: незнакомая площадка X» | в журнале фактов появилась площадка, которой нет в `PLATFORMS` | добавить строку в `PLATFORMS` |
| строка не появилась, а ошибки нет | размещение без URL: факт без адреса доказать нечем, такие не пишем | занести вручную через `add --url` |
| `_tracker-sync.log` старше 30 часов | реконсилер не отработал | запустить `python tracker_write.py sync` руками, проверить ночную задачу пересборки дашборда |

## Границы

- Три полосы дня (просьба, факап, инсайт) сюда **не пишутся**: у них свой журнал в шине, и попади они в трекер, дневной план «1–2 обычных поста» считался бы вдвое.
- Дверь ничего не публикует и не ходит в сеть.
- Перед каждой правкой делается бэкап; после правки файл перечитывается парсером дашборда, и если он не разобрался — откат на бэкап.

## Тест

`_test_tracker_write.py`, 9 проверок. Проверено, что тест краснеет: с константой вместо хэша в `make_id` падает T3 (лонгрид и дев-лог одного поста получали одинаковый id, и второе размещение молча уходило в дубль).

## Артефакт-доказательство (правило Наташи 06.08)

`_tracker-sync.log` — переписывается каждым прогоном реконсилера. Возраст протухания **30 часов** (ночная пересборка дашборда плюс запас). Регистрируется у сторожа `~/.claude/scripts/_shared/output_freshness.py` строкой `posting-tracker-sync`.

## Важное про эту машину

До 06.08.2026 волт на NATALY-WIN-NB был смонтирован **receive-only**: всё, что писалось в `_Dashboards` отсюда, жило локально и до флота не доезжало (замер того дня: 273 файла работы застряли на узле). Поэтому дверь и обвязка сперва ушли хабу канон-предложением `tracker-write-at-publish-20260806`.

В 15:33 06.08 шара `anton-knowledge` на этом узле переведена в **sendreceive** (плюс включено локальное версионирование, 10 копий). Теперь правки волта отсюда уезжают на флот сами, и этот файл — первая проверка: он записан уже после переключения.
