diff --git a/docs/superpowers/priyomka/stroyka-8/otchyot-pomoshchnika-imya-za-zvonok-2026-08-07.md b/docs/superpowers/priyomka/stroyka-8/otchyot-pomoshchnika-imya-za-zvonok-2026-08-07.md index addfc892..f599f127 100644 --- a/docs/superpowers/priyomka/stroyka-8/otchyot-pomoshchnika-imya-za-zvonok-2026-08-07.md +++ b/docs/superpowers/priyomka/stroyka-8/otchyot-pomoshchnika-imya-za-zvonok-2026-08-07.md @@ -5,36 +5,108 @@ ## 1. Разбор задания -_пишется по ходу_ +Задание просили разобрать по существу. Разбираю. Возражения есть, и их четыре. + +### 1.1. Твои три замера подтвердились полностью + +Проверил своими командами, не по памяти: + +- общий файл имени — `most.py:293`, `PUT_IMENI = "/tmp/lena-inworld/imya.txt"`, + рядом тот самый комментарий про одноразовость; +- метка звонка у моста ЕСТЬ (`TIP_UUID = 0x01`, `most.py:144`), кладётся в + `self.uuid` и пишется в журнал (`most.py:496–498`); +- в настройке станции метка — КОНСТАНТА: `…0001` для обзвонщицы + (`extensions-lena.conf:135`) и `…0002` для приёмщицы (строка 182); +- замка на число линий нет ни одного. + +### 1.2. 🔴 Возражение первое: буквальное исполнение плана — ПЛАЦЕБО + +План говорит «файл, названный по номеру звонка». Сегодня номер звонка у моста +— константа. Значит файл `imya-00000000-…-0001.txt` будет ОДИН НА ВСЕ ЗВОНКИ, +ровно как `imya.txt` сейчас. Беда не лечится, а переезжает в файл с другим +именем и при этом ВЫГЛЯДИТ вылеченной — это хуже, чем не лечить. + +⇒ Лечение обязано УМЕТЬ ЗАМЕТИТЬ, что метка не своя, и вслух отказаться +считать её удостоверением звонка. Это и построено (§3). + +### 1.3. 🔴 Возражение второе: метка приходит ПОЗЖЕ, чем нужна + +Этого нет ни в плане, ни в твоих замерах. Мост берёт имя в `rabotat()` +(`most.py:632`) — а метку читает `chitat_asterisk()`, которую запускают +на 43 строки НИЖЕ (`most.py:674–675`). То есть в тот миг, когда мост решает, +кому он звонит, `self.uuid` ещё равен `"?"`. + +⇒ Мало сделать метку разной — надо ещё СНАЧАЛА её дождаться, а потом брать +имя. Порядок в мосте пришлось переставить. + +### 1.4. 🔴 Возражение третье: запасной общий файл — это возврат той же беды + +План: «Общий файл остаётся только запасным на время ручных проб». Если два +одновременных звонка оба свалятся в запасной файл — беда вернулась целиком, +только теперь через запасной вход. + +⇒ Запасной файл годен ТОЛЬКО пока стоит замок на одну линию. Замок здесь не +«заодно», как в плане, а ЕДИНСТВЕННОЕ, что сегодня вправду защищает человека. +Файл по звонку — это не лекарство, а то, что ПОЗВОЛИТ снять замок потом. +Я так и построил и так написал в коде. + +### 1.5. 🔴 Возражение четвёртое: `LENA_CALL_ID` по форме НЕ годится меткой + +Ты просил замерить, а не гадать. Замерил. + +- метка AudioSocket — 16 сырых байт, мост разбирает их `uuid.UUID(bytes=telo)` + (`most.py:497`), а станция в настройке принимает её строкой вида UUID; +- `NabornikAsterisk` выдаёт `call_id = "lena-" + uuid.uuid4().hex` + (`priyomnik.py:595`) — приставка `lena-` и 32 знака БЕЗ дефисов. + +⇒ Как есть — не годится: станция такую строку в `AudioSocket()` не примет. +Но 32 знака внутри — это ровно те же 16 байт настоящего uuid4. То есть +превращение туда-обратно возможно и однозначно, и это ОДНА строка в настройке +станции. Точная строка выписана в README, чтобы владелец применил её сам. + +**Настройку станции я НЕ ТРОГАЛ.** Почему — §5 и §7. ## 2. Что замерил до работы -_пишется по ходу_ +| Что | Чем мерил | Что вышло | +|---|---|---| +| общий файл имени | `grep -rn "/tmp/lena-inworld"` по папке Лены | `most.py:293` — один на всю машину | +| метка звонка у моста | чтение `most.py:144,496–498` | принимается, но только внутри `chitat_asterisk` | +| метка у станции | чтение `extensions-lena.conf:135,182` | две КОНСТАНТЫ, на все звонки | +| когда берётся имя | `most.py:632` против `most.py:674` | имя берут РАНЬШЕ, чем узнают метку | +| замок на линии | `grep -n "предел\|limit\|одновременн\|Semaphore" most.py` | ноль совпадений | +| формат номера звонка | `priyomnik.py:595` | `lena-` + 32 знака, не UUID по форме | +| кто чистит `imya.txt` | `chistka-zapisey.sh:80`, `proverka-chistki.sh:103–128` | 🔴 НЕ чистит НИКТО и НИКОГДА — сторож это прямо охраняет | +| точка отсчёта портала | твой замер, принят как есть | 5352 проверки, 5348 зелёных, 4 пропущено, красных 0 | + +🔴 Самая злая строка здесь — предпоследняя. Имя живого человека, положенное +перед звонком, которого не случилось, лежит в `/tmp` до перезагрузки машины, и +чистка его НЕ трогает нарочно. Про это в задании нет ни слова, а это ПДн. ## 3. Что построил -_пишется по ходу_ +*пишется по ходу* ## 4. Сторожа и как показывал их красными -_пишется по ходу_ +*пишется по ходу* ## 5. Вырезание второго рода -_пишется по ходу_ +*пишется по ходу* ## 6. Полный прогон -_пишется по ходу_ +*пишется по ходу* ## 7. Соседи -_пишется по ходу_ +*пишется по ходу* ## 8. Мои ошибки -_пишется по ходу_ +*пишется по ходу* ## 9. Что осталось незакрытым -_пишется по ходу_ +*пишется по ходу*