diff --git a/docs/superpowers/priyomka/stroyka-12/otchyot-pomoshchnika-tumbler-vidimosti-2026-08-08.md b/docs/superpowers/priyomka/stroyka-12/otchyot-pomoshchnika-tumbler-vidimosti-2026-08-08.md index 46b79b7a..aac233af 100644 --- a/docs/superpowers/priyomka/stroyka-12/otchyot-pomoshchnika-tumbler-vidimosti-2026-08-08.md +++ b/docs/superpowers/priyomka/stroyka-12/otchyot-pomoshchnika-tumbler-vidimosti-2026-08-08.md @@ -5,9 +5,63 @@ Ветка: `feat/prospects-manual-testing-kp`. Голова на входе: `ac16861b8` (в задании было указано `480b49c81` — соседняя смена успела закоммитить телеграм). -## 1. Разбор задания (возражения до работы) +## 1. Разбор задания — возражения, названные ДО работы -_в работе_ +### 1.1. 🔴 Моя ошибка названа первой + +Я собрался строить замок **только** там, куда меня послали (задание в очереди), и +чуть не пропустил вторую дверь того же класса — ту, за которой живой человек. Нашёл +её не рассуждением, а когда пошёл смотреть подписи: `ObzvonClient::pozvonit()` +принимает `int $tenantId` первым доводом. Значит запереть её **можно**, и это ровно +та дверь, за которой «незнакомому человеку позвонит недоделанный робот» — +единственный вред из трёх названных, который необратим. Если бы я не пошёл смотреть +подпись, замок стоял бы на кошельке, а телефон человека остался бы открыт. + +### 1.2. Про «тумблер можно построить, не трогая `AppSidebar.vue` и `AppMoreDrawer.vue`» + +**Утверждение хозяина верно наполовину, и вторую половину надо сказать вслух.** + +Замерено: `AD_CHANNELS` — это `readonly`-постоянная в `advertisingChannels.ts`. +`AppSidebar.vue:85` читает её внутри `computed`, `AppMoreDrawer.vue:62` — прямо в +`v-for`. Оба берут **одну и ту же** переменную модуля и больше нигде список не +собирают (третьего места нет — перемерил сам, см. §5 случай 8). + +Отсюда: + +* **Убрать пункт из меню, не трогая эти два файла, — можно.** Достаточно, чтобы + в самой переменной пункта не было. Это моя правка `advertisingChannels.ts`. +* **Сделать так, чтобы пункт появлялся по клиенту живьём, не трогая эти два файла, — + тоже можно, но только одним способом:** переменная должна стать *живой* + (реактивной), потому что ответ сервера «этому клиенту видно» приходит уже + ПОСЛЕ того, как меню нарисовано. Обычная постоянная так не умеет — оба соседа + прочтут её один раз и не перечитают. +* 🔴 **А вот кто позовёт «покажи/спрячь» — в моих файлах не живёт.** Это делает + вход в приложение (свой файл входа/хранилище логина). Я его **не трогал** и + трогать не стал: чужая смена в нём же. ⇒ Сегодня пункт спрятан у всех и + никем не показывается. Тот, кто делает З-4.1, обязан дописать один вызов — + и я оставил это записью в самом файле, чтобы он на неё наткнулся. + +### 1.3. Про «замок раньше двери» + +Порядок верный, и я его не оспариваю: дверь без замка опаснее, чем замок без двери. + +Но приговор обязан честно назвать разницу. **Что доказано живьём сегодня:** замок +держит задание в очереди и держит саму дверь к роботу. **Что НЕ доказано и не +может быть:** что замок держит клиентский адрес обзвона — адреса нет. Я построил +для него сторожевой заслон (`ObzvonVidimMiddleware`) и **проверил его отдельным +адресом в самом сторо́же**, но привязать его к настоящему клиентскому адресу +некому до З-4.1. Это ровно тот случай, когда «код есть» ≠ «дорога заперта». + +### 1.4. Что я сделал сверх задания и почему + +Задание называет один заслон — задание в очереди. Я поставил **два**: + +1. `ZapustitObzvonBazyJob` — деньги не морозятся, работа не заводится. +2. 🔴 `ObzvonClient::pozvonit()` — **номер не набирается**. + +Второй важнее первого. Первый бережёт деньги, второй — живого человека. И он +физически последний: какой бы путь ни придумала будущая смена, наружу к роботу +портал выходит ровно одной дверью, и она теперь заперта. ## 2. Что построено @@ -39,4 +93,4 @@ _в работе_ ## 9. Коммиты -- `` — заведён этот файл отчёта. +- `4755dc6a` — заведён этот файл отчёта.