From a9ca62fd73324a212468e5cf8ed2fde91cedfb82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sat, 8 Aug 2026 18:53:27 +0300 Subject: [PATCH] =?UTF-8?q?docs=20=D0=BE=D0=B1=D0=B7=D0=B2=D0=BE=D0=BD:=20?= =?UTF-8?q?=D0=B2=20=D0=BE=D1=82=D1=87=D1=91=D1=82=20=D1=81=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=2012=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BD?= =?UTF-8?q?=20=D1=80=D0=B0=D0=B7=D0=B1=D0=BE=D1=80=20=D0=B7=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=BE=20=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...moshchnika-tumbler-vidimosti-2026-08-08.md | 60 ++++++++++++++++++- 1 file changed, 57 insertions(+), 3 deletions(-) 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` — заведён этот файл отчёта.