WEB board

всеканоны и докиворкеры↗ iOS↗ Легаси
WEB-092 · Дефект · Инфраструктура · web

Указатели на прод-релиз ВРУТ: current/current-candidate/CURRENT-QW4-RELEASE протухли, истина только в systemd WorkingDirectory

Закрыт P1 · важно ведёт: backup-opus
Суть
## Найдено 21.08 волной gate3579 при попытке доказать гейт 1 на байтах прода
Три «источника истины» на Pi расходятся между собой и с реальностью:
| источник | значение | верен |
|---|---|---|
| `/home/pi/note-clone/current` → | `arm64-b0d4288b…-20260705T024136Z` | ❌ протух с 5 июля |
| `/home/pi/note-clone/current-candidate` → | тот же b0d4288b… | ❌ протух |
| `/home/pi/note-clone/CURRENT-QW4-RELEASE` | `arm64-f75ff4ad-20260811T150307Z` | ❌ протух с 11 авг |
| `systemctl show note-clone-3010 -p WorkingDirectory` | `arm64-f1e49bca-20260820T193140Z` | ✅ ИСТИНА |
Юнит НЕ использует симлинк current — он прибит к WorkingDirectory (подтверждено независимо: `readlink /proc/<MainPID>/cwd`).
## Почему это опасно
Любой человек или агент, который проверит прод «как принято» (по симлинку), получит НЕ ТЕ байты и сделает неверный вывод — включая проверку безопасности. Мы сами дважды за смену грепали релиз по пути из drop-in, и нам повезло.
## Фикс: (а) чинить симлинки при каждой посадке в stamp-canon/landing-скрипте (или убрать их совсем, чтобы не было ложного источника); (б) в PASSPORT и промт нулевого агента — правило «читай юнит, а не симлинк» (волна уже вписала в PASSPORT); (в) добавить в чеклист посадки проверку «все указатели сходятся с WorkingDirectory».
Источник: волна gate3579, отчёт M4 `/Users/milamarty/work/GATE3579-REPORT.md` (21.08). Эпик WEB-282, норматив PROD-MIGRATION-PLAN-R4.md.

## 21.08 ~12:40 ЗАКРЫТ в коммите 62f492e2 (см. WEB-091): указатели релиза чинятся при посадке + проверка совпадения с systemd WorkingDirectory.
Ветка archp0/fcsrc2/migfix от посадки-30 (23e0b944), worktree на A1. Отчёты: ~/waves/ARCHP0-REPORT.md, FCSRC2-REPORT.md, MIGFIX-REPORT.md.

## 21.08 — ВЫЕХАЛО НА ПРОД
**Посадка 30 состоялась 21.08 03:53 IST.** serving = `v4-504af77f`, релиз `arm64-504af77f-20260821T025311Z`, артефакт sha `a0afc41415db60377aeb4cf399d91b98a4c407217fc8839b0b1369a2542af362`, аттестация v18. Проверено после переключения: `active`, `NRestarts=0`, `paidReady=true`, `posture=enforce_ready`, `mode=enforce`, `failures=[]`, фатальных строк boot-контракта **0**, секрет сторожа файл≡процесс (`cbabe4a2b16008e3`), nft переприменены, канон проштампован (`CANON.json: serving=504af77f marker=v4-504af77f`).
Проверка байтов релиза и живая проба выполнены после переключения; подробный трейл посадки — в WEB-282.

## 23.08 — pointer equality доказан живьём координатором (по триажу btriage)
На Pi (read-only): systemd `WorkingDirectory` (unit note-clone-3010) = `/home/pi/note-clone/releases/arm64-26116cff032ad8f015e1e2d9cba302e1e8f7ec27-20260822T202100Z`; `cat /home/pi/note-clone/current` = тот же путь; root-owned `CURRENT-QW4-RELEASE` = тот же путь. Все три указателя равны на текущем runtime. Закрыт.
Починено в
26116cff
Воркер
не привязан — привязать: curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \ -d '{"issueId":"WEB-092","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-23T00:37:00.266Z