docs: список остатков и приёмочный лист СМС ложатся в историю
Оба файла жили только на диске - ровно тот риск, о котором сам список и предупреждает. Кладём в историю. Список остатков дополнен итогами вечера 01.08: - мина статанализа закрыта, разбор оказался шире вчерашнего диагноза; - галочки 5.5 и Н.4 проставлены; - 62 обломка сорвавшихся команд убраны из корня; - копии веток владелец решил не делать, риск остаётся; - найден новый хвост: db/schema.sql отстал от миграций примерно на 28 столбцов и 3 таблицы. Дрейф признан в шапке самого файла, прод от него не падает - он собирается миграциями. Проверено по живой базе, а не по именам миграций: имя add_contacts_and_legal_name_to_* не равно именам столбцов, слабый датчик тут врёт в обе стороны; - числа долга документации пересчитаны: 73 файла, 813 разметки, 43 орфографии - прежние 192/282/14 были по другому охвату. В правила добавлена граблина про метку BOM. Она обоюдоострая: в файле настроек убивает статанализ молча, а в своём скрипте .ps1 с русскими буквами наоборот обязана быть, иначе powershell -File читает его как ANSI и падает на разборе. Живых номеров в обоих файлах нет - проверено, все синтетические. Сторож секретов запись сначала ОСТАНОВИЛ, и правильно: приёмочные листы лежат не в подпапке, а прямо в docs/superpowers/, поэтому под прежние разрешения для plans/specs/audits/runbooks не подпадали. Разрешение дописано узко, по имени PRIEMKA, с перечислением всех четырёх найденных номеров прямо в комментарии - 79995550123, 79995550001, 79995551234, 79995562002, все из тестового диапазона проекта. Узость проверена вырезанием: настоящий с виду номер, подложенный в СОСЕДНИЙ файл той же папки, ловится по-прежнему. Первая проба провалилась и это тоже урок: я взял номер с хвостом 1234567, а он давно разрешён как тестовый - подложка должна не попадать ни под одно прежнее разрешение, иначе "не поймал" означает только, что плохо выбрана подложка. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -153,6 +153,12 @@ paths = [
|
||||
# Internal design specs — внутренние проектные доки с демо-данными (демо-телефоны
|
||||
# в примерах, напр. spec про log-PII-scrubbing), не реальные ПДн. Как plans/audits.
|
||||
'''docs/superpowers/specs/.*\.md''',
|
||||
# Приёмочные листы (PRIEMKA) лежат не в подпапке, а прямо в docs/superpowers/,
|
||||
# поэтому под разрешения выше не подпадали. Содержат те же синтетические номера
|
||||
# 7999… из живых прогонов рассылки. Проверено поимённо 01.08.2026: 79995550123,
|
||||
# 79995550001, 79995551234, 79995562002 — все из тестового диапазона проекта,
|
||||
# живых номеров в файле нет. Та же категория, что plans/specs/audits/runbooks.
|
||||
'''docs/superpowers/.*-PRIEMKA-.*\.md''',
|
||||
# Файл-образец, который клиент скачивает перед загрузкой своего списка номеров.
|
||||
# Номера синтетические — 79001234567, 79161112233, 79995551234 и т.п. На main он
|
||||
# уже разрешён по коммиту 5a4c0e02, но при сведении ветки тот же текст приходит
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,186 @@
|
||||
# ПРОМТ следующей смене — сначала покажи владельцу список, потом работай
|
||||
|
||||
**Дата составления:** 01.08.2026, вечер. Составлен сменой, оживившей сторожей текста и
|
||||
починившей статанализ.
|
||||
|
||||
🔵🔵 **ВЛАДЕЛЕЦ СКАЗАЛ: первым делом НЕ начинай чинить. Составь и покажи список того, что
|
||||
осталось — коротко, человеческим языком, у каждого пункта цена и риск, — и ЖДИ, что он
|
||||
выберет.** Список ниже готов, но не вываливай его как есть: перескажи своими словами, проверив
|
||||
числа командой. Числа в этом файле — снимок на вечер 01.08, они устаревают.
|
||||
|
||||
---
|
||||
|
||||
## 0. Где мы сейчас (проверить командой, не верить на слово)
|
||||
|
||||
- **Главная рабочая папка** `c:\моя\проекты\портал crm\Документация`, ветка
|
||||
**`feat/prospects-manual-testing-kp`**, вершина на момент составления `97517575`.
|
||||
Отстаёт от `main` на 1 коммит. **Удалённой копии у ветки нет.**
|
||||
- 🔴 **В этой же папке параллельно работает другая смена.** Коммит `97517575` сделан ею через
|
||||
минуту после моего. Значит: перед любой правкой перечитывай `git log` и `git status`, не
|
||||
коммить `-A`, перечисляй пути поимённо, и не удивляйся чужим подготовленным к записи файлам.
|
||||
- **Рабочая папка ветки СМС** `.claude/worktrees/client-sms`, ветка
|
||||
**`feat/client-sms-broadcast`**, вершина `19d9eda3`, отстаёт от `main` на **185 коммитов**,
|
||||
удалённой копии нет.
|
||||
- Своя тестовая база ветки СМС — `liderra_testing_sms`. Гонять:
|
||||
`DB_DATABASE=liderra_testing_sms php artisan test <путь>`. На общую `liderra_testing`
|
||||
не возвращаться — в неё пишут чужие рабочие папки.
|
||||
|
||||
### Дописано вечером 01.08 — что сделано после составления списка
|
||||
|
||||
- ✅ **Мина «статанализ падает молча» закрыта** — коммит `821f9660`. Разбор оказался шире:
|
||||
вчерашний диагноз был **неполон, а способ его доказательства неверен**. Убивают молча ЧЕТЫРЕ
|
||||
вещи, а не одна: нет файла из `scanFiles`; **метка BOM в `phpstan.neon`** (её ставит
|
||||
`Set-Content -Encoding utf8` — то есть любой, кто правит настройку скриптом); подсказчик,
|
||||
собранный без ключа `-M`; подсказчик, просто устаревший. Вчера временную настройку записали
|
||||
с меткой и молчание списали на пропавший файл — вывод совпал случайно.
|
||||
Поставлен сторож `tools/storozh-statanaliza.mjs` (13 тестов, писались до него), встроен в
|
||||
`composer stan` и в хук перед larastan. Доказан вырезанием на всех четырёх поломках.
|
||||
- ✅ **Галочки 5.5 и Н.4 проставлены.**
|
||||
- ✅ **62 обломка сорвавшихся команд убраны** из корня (перенесены, не удалены).
|
||||
- ❌ **Копии веток владелец делать не стал** — риск «всё живёт на одном диске» остаётся в силе.
|
||||
- 🆕 **Найден новый хвост: `db/schema.sql` отстал от миграций.** Порядка **28 столбцов и
|
||||
3 таблиц** есть в живой базе и в миграциях, но нет в каноне схемы (проверено выборочно по
|
||||
живой базе: `ad_campaigns.shows_until/revived_at/banners_approved_at/yandex_creative_id/
|
||||
landing_url`, `client_tg_campaigns.mts_campaign_id/moderator_file_path/status_reason`,
|
||||
`saas_transactions.credit_target`, таблицы `sales_prospect_notes`, `personal_access_tokens`).
|
||||
Дрейф **известен и признан в самой шапке файла** («отдельный canon-sync закроет весь бэклог
|
||||
разом») — то есть это не открытие, а невыполненная работа. Прод от этого не падает: он
|
||||
собирается миграциями. Страдают те, кто читает канон, — в том числе проверка разграничения
|
||||
доступа. 🪤 Считать дрейф по ИМЕНАМ миграций нельзя: имя `add_contacts_and_legal_name_to_*`
|
||||
не равно именам столбцов. Мерить по живой базе.
|
||||
|
||||
### Что закрыто 01.08 и переделывать не надо
|
||||
|
||||
- **Сторожа текста живы**: `markdownlint`, `cspell`, `stylelint` запускаются и доказаны
|
||||
вырезанием. Причина смерти — оборванная установка пакетов, а НЕ «ставит десятую часть»;
|
||||
вылечено `npm ci --ignore-scripts`. Правок в git нет, только папка `node_modules`.
|
||||
- **Статанализ в главной папке даёт НОЛЬ** замечаний (было 42). Коммит `de144776`.
|
||||
- **Сторож наблюдателя** больше не врёт про пропавший `post-commit`. Коммит `8f004496`.
|
||||
- 🔑 **`LEFTHOOK_EXCLUDE` больше не нужен.** Если возникнет соблазн что-то исключить —
|
||||
сперва замерь, было ли это до тебя, и скажи вслух. Три смены подряд исключали вслепую.
|
||||
|
||||
---
|
||||
|
||||
## 1. ПЕРВОЕ ДЕЙСТВИЕ
|
||||
|
||||
Перепроверь числа, составь список и покажи владельцу. Ничего не чини, пока он не выберет.
|
||||
Формат — как он любит: простым языком, без программистских слов, коротко, с ценой каждого
|
||||
пункта. Обязательно раздели: **что мешает работе сейчас** и **что просто ждёт**.
|
||||
|
||||
---
|
||||
|
||||
## 2. ЧТО ОСТАЛОСЬ (каталог для тебя, не для владельца дословно)
|
||||
|
||||
### А. Свести ветку СМС с main — 185 коммитов позади
|
||||
|
||||
Самое крупное и самое рискованное. Чем дольше ждёт, тем хуже.
|
||||
🪤 При сведении столкнутся номера записей журнала схемы: наша — **v9.32**, взята с запасом
|
||||
именно поэтому. **Обе стороны столкновения — настоящие записи, сторону выбирать нельзя,
|
||||
надо разносить по номерам.** Так уже делали 01.08, см. память.
|
||||
Побочная польза: ветка получит починку статанализа (у неё сейчас 773 замечания против нуля
|
||||
в главной) и слово «досыл» в словаре, которого ей не хватает.
|
||||
|
||||
### Б. Полный прогон всех тестов ветки СМС
|
||||
|
||||
Не делали ни разу — мерили только область СМС и рекламу. Стенд починен коммитом `dc56c95e`,
|
||||
так что прогон теперь осмыслен. Гонять в своей базе ветки.
|
||||
|
||||
### В. Проверка разграничения доступа по миграциям ветки СМС
|
||||
|
||||
В приёмке Этапа 5 её не звали. Есть отдельный помощник `rls-reviewer`.
|
||||
|
||||
### Г. ✅ ЗАКРЫТО вечером 01.08 — см. блок выше
|
||||
|
||||
### Д. Обработчик наблюдателя не подключён
|
||||
|
||||
`observer-coverage-checker` честно пишет: `observer-stop-hook NOT registered in
|
||||
.claude/settings.json`. Это правда — я проверил, в настройках его нет вовсе. Сторож
|
||||
предупреждает, но коммит не блокирует. Решение владельца: нужен ли наблюдатель вообще,
|
||||
раз управляющий слой вынесен в отдельный репозиторий.
|
||||
|
||||
### Е. `l1-watcher` красный по делу
|
||||
|
||||
Плагин `ruflo-core` включён в настройках, но не оформлен в реестре инструментов.
|
||||
Блокирует только коммиты, трогающие сами настройки или реестр. Оформлять — **только** через
|
||||
`claude-md-management`, либо добавить алиас в `tools/.l1-watcher-aliases.txt`.
|
||||
|
||||
### Ж. Долг документации, накопленный пока сторожа молчали
|
||||
|
||||
Пересчитано вечером 01.08, прежние числа (192/282/14) были по другому охвату. По-настоящему:
|
||||
**73** изменённых и новых файла `.md`, в них **813** находок разметки и **43** орфографии
|
||||
(орфография — всего в 3 файлах, остальные папки сторож не смотрит по своим настройкам).
|
||||
Из разметки руками надо примерно **57** — сбитые таблицы (MD056), остальное машина чинит сама.
|
||||
Разметка почти вся из тех, что машина чинит сама, — коммит она не остановит. Орфография — 126
|
||||
разных слов, в основном законные слова дела, им место в `cspell-words.txt`.
|
||||
🔑 Большинство этих файлов — новые рабочие записки, **ещё не в git**. То есть долг не мешает
|
||||
обычной работе: сторожа проверяют только то, что кладут в коммит.
|
||||
|
||||
### З. ✅ ЗАКРЫТО вечером 01.08 — галочки 5.5 и Н.4 проставлены
|
||||
|
||||
### И. 🔴 Висящий риск, не техническая задача
|
||||
|
||||
**Ветка СМС живёт только на этой машине**, удалённой копии нет, своих коммитов больше семидесяти.
|
||||
Приёмочный лист тоже не в git. У ветки `feat/prospects-manual-testing-kp` удалённой копии
|
||||
тоже нет. Отказ диска — потеря всего. Сказать владельцу прямо.
|
||||
|
||||
### К. Сторона владельца, не наша
|
||||
|
||||
- Письмо в поддержку МТС (`supmarketolog@mts.ru`): канал не отправляет; заодно попросить
|
||||
образец письма-отчёта о доставке.
|
||||
- Договорная цена в боевые настройки (`SMS_MTS_PRICE_KOP`).
|
||||
- 🔴 **Выкат СМС-модуля бессмысленен, пока канал МТС на бою не отправляет:** рассылки будут
|
||||
создаваться и оплачиваться, а до людей не дойдёт ничего.
|
||||
|
||||
---
|
||||
|
||||
## 3. ОБЩИЕ ПРАВИЛА
|
||||
|
||||
- 🔑 **Сначала замер, потом лечение, потом замер снова.** Числа записывать.
|
||||
- 🔑 **Хук остановил — сперва проверь, было ли это ДО тебя:** спрятать свои правки
|
||||
(`git stash push -- <пути>`), прогнать, вернуть, сравнить.
|
||||
- 🔑 **Приёмка вырезанием обязательна.** Зелёный прогон без вырезания — не доказательство.
|
||||
- 🪤 **Не принимай на веру диагноз из промта — повтори замер у себя.** 01.08 промт называл
|
||||
корнем подмену моделей подсказчиком: в ветке это было правдой, в главной папке — нет,
|
||||
и одинаковый код давал **1865 и 42** замечания в двух папках. Лечение оказалось другим.
|
||||
- 🪤 **Одна точка замера не задаёт правило.** Запись «npm ставит десятую часть» родилась из
|
||||
одного наблюдения, пережила смену и увела следующую не туда.
|
||||
- 🪤 **Печать пути — не доказательство, что файл на месте.** Проверять содержимым, размером
|
||||
или хешем.
|
||||
- 🪤 `phpstan` на одном файле печатает пусто при коде возврата 1 — добавлять
|
||||
`--error-format=json -v`, иначе решишь, что ошибок нет.
|
||||
- 🪤 Вывод `phpstan` в этой среде **обрезается** до сводки; полный отчёт — с ключом `-v`.
|
||||
Надёжные признаки — **код возврата и размер вывода в байтах**, а не сам текст.
|
||||
- 🪤 **Метка BOM в Windows PowerShell 5.1 — обоюдоострая.** `Set-Content -Encoding utf8`
|
||||
ставит её всегда: в `phpstan.neon` она убивает статанализ молча, а вот скрипт `.ps1`
|
||||
с русскими буквами **без неё** не читается вовсе (`powershell -File` берёт его как ANSI).
|
||||
Правило: файлы настроек писать `[System.IO.File]::WriteAllText(путь, текст,
|
||||
(New-Object System.Text.UTF8Encoding($false)))`, а свои `.ps1` — с `$true`.
|
||||
|
||||
---
|
||||
|
||||
## 4. ЦЕРЕМОНИЯ КОММИТА
|
||||
|
||||
- Коммит делает смена сама, **попросив эскейп**: вызвать `AskUserQuestion`, где **метка опции —
|
||||
ТОЧНАЯ команда git**.
|
||||
- Сообщение держать **в файле**, звать `git commit -F <файл> <конкретные пути>`.
|
||||
Для новых файлов нужен `git add`.
|
||||
- В командной строке **не должно быть круглых скобок**.
|
||||
- Коммитить **перечисленные пути**, не `-A`. `docs/observer/STATUS.md` не пре-стейджить.
|
||||
🔴 Особенно важно теперь, когда в папке работает вторая смена: у неё бывают свои
|
||||
подготовленные к записи файлы, и `-A` заберёт их себе.
|
||||
- 🪤 После коммита хуки иногда оставляют `docs/observer/.pii-counters.json` и
|
||||
`docs/observer/episodes-*.jsonl` со следами столкновения. **Обе стороны там настоящие,
|
||||
надо склеивать обе, а не выбирать.**
|
||||
|
||||
---
|
||||
|
||||
## 5. ЧЕГО КАСАТЬСЯ НЕЛЬЗЯ
|
||||
|
||||
- 🔴🔴 **Боевой liderra.ru** — любое действие только с разрешения владельца, база по умолчанию
|
||||
только чтение.
|
||||
- Не пушить ветки и не вливать в `main` без отдельного разрешения.
|
||||
- Не понижать уровень проверки статанализа и не заметать замечания в `phpstan-baseline.neon`:
|
||||
01.08 оттуда как раз убрали 672 записи из 936, все — один ложный класс со счётчиками.
|
||||
- Не расширять правило `ignoreErrors` в `app/phpstan.neon`. Оно намеренно узкое: ровно три
|
||||
формулировки, ровно про `Pest\PendingCalls\TestCall`, ровно в `tests/`. Узость доказана
|
||||
вырезанием — подложенные настоящие поломки ловятся.
|
||||
Reference in New Issue
Block a user