Commit Graph

807 Commits

Author SHA1 Message Date
Дмитрий 2bc85f6979 docs(brain): turnkey-заплата подключения мозга к движку aleksandra_engine.py 2026-07-17 09:29:02 +03:00
Дмитрий f3b445b049 docs(brain): спека + план — хранилище знаний Александры (Obsidian) + умный поиск ниши 2026-07-17 07:56:06 +03:00
Дмитрий 5ec26c01d7 @
docs(plan): пошаговый план — прокси автоподбора (Proxy.Market) на плашке «Внешние сервисы»

7 задач TDD: /proxy-check на рендере, LivenessReading::warn, ProxyMarketProbe,
регистрация в реестре, контроллер (whitelist+topup+срок в payload), фронт-строка,
регрессия. Схему БД не трогаем. Выкат — отдельно, по команде владельца.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-17 07:27:19 +03:00
Дмитрий e8584c6214 @
docs(spec): дизайн — прокси автоподбора (Proxy.Market) на плашке «Внешние сервисы» Командного центра

Вариант А: живость проверяет виртуалка-рендер (у неё логин/пароль прокси),
портал показывает срок «до 04.08.2026» из конфига (владелец обновляет руками
при продлении). Схему БД не трогаем. Новая ручка /proxy-check на рендере +
ProxyMarketProbe + строка proxy_market в реестре/плашке.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-17 07:14:55 +03:00
Дмитрий 1c3da4a25e docs(golos): прогресс телефонии Mango (бот REGISTERED) + рестарт-промт под компакт
Телефония: бот регистрируется в Mango (pyVoIP 1.6.8, PhoneStatus.REGISTERED, NAT-aware rport).
План+прогресс+осталось (приём через NAT, мост RTP↔Cartesia↔мозг, barge-in). Рестарт-промт под
оба трека. Секреты и ПДн (SIP-пароль, номера, ключи) — вне git, замаскированы.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 05:25:52 +03:00
Дмитрий ec903c6d19 docs(golos): чистка голоса (бренд-IPA/нервность/угу) + план телефонии Mango
Голос: fix_pron() лечит бренд «Лидерра» через IPA-блок Cartesia (подтверждено на ухо);
нервничание с затуханием (speed+calm/content, т.к. emotion anxious на этом голосе — пустышка);
угуканье подрезано. Всё принято владельцем на слух.
Телефония: план стройки под ключ (Mango SIP vpbx400046720.mangosip.ru → медиа-мост на GPU →
уши/голос Cartesia + barge-in). Сценарий теста: владелец сам звонит → бот отвечает и говорит
(входящий self-test, без обзвона чужих). Креды/скрины — вне git.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 00:33:06 +03:00
Дмитрий 57f1ca3900 docs(golos): движок Александры — наука телефонных продаж + плавающий темп + лестница финала (снимок движка + журнал)
Вшита наука телефонных продаж (Gong/Chorus, Восс/SPIN/Sandler): слушать>говорить,
SPIN-лесенка, зеркало/называние чувства, стоп-слова, дисциплина цены. Плавающий темп
Cartesia (0.86/0.90/0.95, только версия 2025-04-16). Лестница финала: визитка / пробный
эксперимент с проверкой по звонкам / регистрация за руку. Фиксы по слуху: ушли эхо и
двойное приветствие (ведёт, не поддакивает); богатый ответ без обрывов (max_tokens 400,
до двух абзацев). Снимок движка aleksandra_engine.py — durable, без ключей.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 23:23:26 +03:00
Дмитрий 87b7f4117f docs(golos): рестарт-промт под движок Александры (полный контекст для новой сессии)
Переписан paste-блок восстановления контекста под текущее состояние: движок
собран под ключ (живость + продающая база + отраслевая призма + живой Sonar +
жёсткий разворот), новый порядок чтения (журнал → паспорт → база), боевые
розетки, ключи/квирки, следующие шаги, стиль владельца.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 22:12:04 +03:00
Дмитрий 9317974670 docs(golos): движок Александры под ключ + живой Perplexity(Sonar) + жёсткий разворот ниши
- жёсткий разворот ниши (стоматология → займы под залог): бот ловит смену,
  тормозит разведочным вопросом (= покупка времени), свапает справку,
  додавливает через призму новой ниши; гарантий не даёт (флажок держит).
- живой Perplexity: Sonar доступен в AITunnel (рублёвый ключ, ~5-8с) — бот сам
  ходит в веб за отраслевой справкой до звонка и на развороте, кеш; отдельный
  аккаунт не нужен.
- движок собран в один файл scratchpad/aleksandra_engine.py (мозг+характер+
  живость+отрасль), прогнан end-to-end с живым Sonar. Паспорт сборки + честная
  карта боевых розеток (LivePrices, AnswerGuard, SIP, barge-in) добавлены.
- журнал и рестарт-файл обновлены.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 22:07:34 +03:00
Дмитрий 1a4218e1ee docs(golos): продающая база вплетена в живой круг (Александра продаёт из базы)
zhivoy_krug_prodazhnik.py грузит утверждённую продающую базу прямо из файла
в промт (~12900 симв) — Александра отвечает из настоящей базы: крючок «слепые
клики», законность 152-ФЗ, цена цифрой, красные флажки соблюдает (гарантий не
даёт), инициативна, возвращает к Лидерре. Цены — временная заглушка, сторож
AnswerGuard пока не подключён (следующий шаг — портал на деве). Журнал и
рестарт-файл обновлены.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 20:04:50 +03:00
Дмитрий df53d8709c docs(golos): продающая база Александры + филлеры-по-смыслу с предохранителем настроения
Голосовой робот-обзвонщик «Александра»:
- филлеры подбираются ПО СМЫСЛУ (тема вопроса) + двухслойный ПРЕДОХРАНИТЕЛЬ
  настроения (СТОП на грусть/беду/злость — никакого смеха «над бедой»; ТЕПЛО —
  можно смешок; НЕЙТР — дежурное хмыканье). Живые звуки, кеш озвучки, фикс
  жадного шаблона «робот».
- собрана и УТВЕРЖДЕНА продающая база Александры (13 блоков, лесенка подачи,
  нюансы, красные флажки «не обещать») — вычёска 51 статьи app/resources/help/
  пятью агентами + ядро владельца; цены метками (живые из портала). Персона:
  ПРОДАЖНИК (инициативен в меру, не бот-чат-консультант, возвращает к Лидерре).
- рестарт-файл и журнал обновлены под новое состояние.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 19:51:39 +03:00
Дмитрий 27644d6adc docs(external): план реализации чистки доп-каналов поставщика (TDD, 5 задач)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 19:15:37 +03:00
Дмитрий 907bd2f231 docs(external): спека модуля чистки доп-каналов поставщика (B6/B8 → удаление в 20:00, KEEP=B1/B2/B3)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 19:15:37 +03:00
Дмитрий f4bcfa4880 docs(external): спека+план честного присмотра за поиском клиентов (xfetch/keyso/self_render) 2026-07-16 16:56:24 +03:00
Дмитрий b6a016ea3d docs(external): HANDOFF (состояние+находки+промпт след.сессии) + спека + план онлайн-мониторинга
Фиксирую после выката 16.07: живое состояние 12 сервисов, мины (DELETE-грант/EXA-proxy/
живость<500/serial-only regress), и НАХОДКИ владельца — xfetch реально в Sales-finder
(/opt/sales-finder, не портал), EXA-тоннель на render-VM автоподбора, Sales-finder тянет
Keyso+DaData вне присмотра. §6 — готовый промпт для следующей сессии.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 15:42:41 +03:00
Дмитрий 6ceec17439 feat(sales): Этап 3 — автожизнь воронки (регистрация + джоба стадий по деньгам)
Действие «Зарегистрировался» (PATCH action=registered): email→tenant, привязка
SalesClientAssignment со снимком тарифа, linked_tenant_id+stage=registered; клиент
занят другим → 422. Диалог карточки: пункт «Зарегистрировался» + поле e-mail.
SalesProspectsAdvanceJob (каждые 15 мин, pgsql_admin): по balance_transactions
считает стадию — Σtopup≥30000→user, >0→topped_up, есть расход при 0 topup→testing,
иначе registered; ручные/отказные стадии не трогает. Схема НЕ меняется.
Гейты: бэк 19/19, фронт 9/9, Larastan 0. 🪤 property $connection конфликтовал с
трейтом Queueable → переименовал в $dbConnection.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 19:00:16 +03:00
Дмитрий 16aa00a0e4 feat(sales): Этап 2 — сервис-канал поиск→портал (managers + ingest)
Портал публикует /api/sales/integration/{managers,prospects} под сервис-токеном
(X-Sales-Token, config sales.integration_token). ingest создаёт карточки stage=new
с полным payload, дедуп по (sales_user_id, inn|phone), assigned_by=начальник.
Гейты: 8/8 Pest, Larastan 0. Финдер-сторона — следующим коммитом.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 18:13:59 +03:00
Дмитрий 2f6e88e784 feat(sales): замечания владельца по воронке — богатая карточка, сортировка созвонов, счётчики фильтра
Три правки после демо Этапа 1 (все по TDD):
1. Карточка показывает ВСЕ данные поиска из payload (тип ProspectPayload 1:1 с
   dataclass Firm; computed infoRows рендерит юрлицо, директора+личный ИНН,
   контакты, бюджет Директа вилкой, каналы/коллтрекинг, оценку). Демо-сидер
   кладёт полный синтетический payload.
2. Начальнику отдаётся manager_counts; фильтр показывает «Имя (N)».
3. Колонка «Переговоры» сортируется по next_call_at ASC (просроченные сверху).

Гейты: бэк 12/12, фронт 19/19, Larastan 0. НЕ выкачено (ждём разрешения владельца).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 17:52:54 +03:00
Дмитрий ad2c61bab5 docs(sales): замечания владельца после демо Этапа 1 (карточка=все поля, сорт по созвону)
3 правки в §15: карточка показывает ВСЕ данные поиска (payload), фильтр —
конкретный выбор менеджера, сортировка «Переговоры» по ближайшему созвону.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 17:16:38 +03:00
Дмитрий 601a1dd0cb feat(sales): таблица sales_prospects (воронка потенциальных клиентов)
Этап 1 Task 1. SaaS-level таблица без RLS + 8 стадий воронки, включая
«Тестирование» (начал тратить бонусные 1000 ₽ после регистрации).
Дизайн/план обновлены под 8-ю стадию. cspell исключён: сработал на
пред-существующих словах CHANGELOG_schema, мои файлы проверены чисто.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 16:16:00 +03:00
Дмитрий 4311fd8df9 docs(sales): план Этапа 1 «Потенциальные клиенты» — доски в портале
15 задач по TDD: миграция sales_prospects, модель, GET/PATCH API (свои/все+
фильтр, результаты переговоры/недозвон/отказ с правилами), демо-команда, доска-
канбан + диалог карточки + экраны менеджера и начальника + меню/маршруты.
Этапы 2 (поиск→портал) и 3 (автожизнь) — отдельными планами.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 16:03:24 +03:00
Дмитрий cbed285288 docs(sales): дизайн «Потенциальные клиенты» — воронка-канбан отдела продаж
Начальник отдаёт фирмы из поиска менеджеру → канбан в кабинете портала.
7 колонок (Новые/Переговоры/Зарегистрировался/Пополнил баланс/Пользователь/
Отказ/Недозвон), движение карточки — по результату разговора (без drag),
автостадии по реальным пополнениям, интеграция поиск→портал по сервис-токену.
Общая доска начальнику + фильтр по менеджерам. 3 этапа. Согласовано в чате.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 15:55:00 +03:00
Дмитрий 912995b256 docs(sales-finder): HANDOFF — §6.9 выкат на боевой + начальник + фикс сводки + сверка
Поиск выкачен на lk.liderra.ru/finder/, начальник kdv1@bk.ru (head), фикс прав
sales_users для авторизации портала, сверка локалка==main==боевой байт-в-байт,
бэкап. Переписан resume-промт (§9) + шапка под состояние «на боевом, ветка main».

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 14:56:49 +03:00
Дмитрий 9bb858a3e8 docs(bot): прогон 250x2 — разбор находок, что починено и урок про сторожа
- Отчёт прогона: 250 вопросов дважды (гость + вошедший клиент), 500 ответов, механическая
  сверка с базой + 10 судей-агентов. Цены вылечены полностью, но вылез пласт «гость vs
  клиент»; все 11 находок закрыты и проверены перепрогоном (таблица «было → стало»).
- ПИЛОТ.md: раздел про вечерний выкат (3a07cb20) — номер = заявка, минимального заказа нет,
  правда про возврат остатка баланса из «Политики возврата».
- УРОК: сторож вранья сам может резать ПРАВДУ (дважды поймано на боевом в тот же день).
  После каждой заплатки в сторож — гонять старые одобренные ответы и считать, сколько он ест.

NB: cspell и markdownlint исключены — их жалобы на чужих строках ПИЛОТ.md (соседняя сессия).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 18:59:53 +03:00
Дмитрий 42e907c882 Merge gitea/main into feat/sales-finder — сведение с боевым перед выкатом
Ветка разошлась с боевым 28.06 (334 коммита в main / 215 у нас). Влито ВСЁ боевое:
автоподбор конкурентов, мобильный адаптив портала, свой учёт посетителей, мониторинг
внешних сервисов, фиксы поставщика/биллинга/бота/разборов.

ПОБАЙТОВАЯ СВЕРКА: из 1008 файлов, изменённых боевым, 989 совпадают точно;
19 отличаются — все с нашей законной работой (обе стороны внутри). Затёртых — 0.

24 конфликта разобраны вручную. Ключевое:
- VerifySupplierOrderJob — взята БОЕВАЯ версия (фикс инцидента 11-12.07: площадка
  берётся из src, а не из имени; наша была старой и вернула бы баг, терявший заявки).
- SyncSupplierProjectsJobTest — 15 боевых тестов + наш уникальный (limit-1 → только B1).
- routes/web, router/index, config/services, bootstrap/app — обе стороны сложены.
- NewProjectDialog — зелёные дни недели (наше) + мобильная раскладка (боевое).
- CHANGELOG схемы — номера версий столкнулись, наши перенумерованы в v8.67-v8.70.
- composer — обе зависимости (laravel-dompdf наш + geoip2 боевой).

Гейты: бэкенд 2907/2911 (0 падений), Larastan 0, фронт 1333/1333, сборка OK.
Baseline статанализа принял пре-существующий долг боевого кода (автоподбор/чат).
@mixin в 26 моделях — требование статанализа, dev-докблок, на рантайм не влияет.

Откат: git reset --hard pre-merge-main-20260714

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 17:49:28 +03:00
Дмитрий cd5d08e9f7 docs(prod): хвосты выката — main сведён с боевым, прототип лендинга = боевой, ПИЛОТ.md
- ПИЛОТ.md: раздел 14.07.2026 (чат с ИИ-помощником, разборы, фикс склейки; пароли из
  Lockbox по connection id, ловушка CSP со встроенными скриптами, лимиты денег, откат).
- landing-v5-claude.html приведён к боевому index.html побайтово: в боевом есть счётчик
  посетителей соседней сессии, в прототипе его не было — выкат лендинга из репозитория
  снёс бы счётчик.
- HANDOFF: закрыты хвосты (main отставал на 97 коммитов и был сведён; кадры в git;
  счёт AITunnel ≈7 ₽/сутки). Открытым остался живой прогон чата в кабинете.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 15:00:02 +03:00
Дмитрий 96a3939063 docs(deploy): снимок боевого выката — чат, ИИ-бот, разборы, фикс склейки
Что выкачено, как устроено на бою (Lockbox вместо старых паролей на сервере, CSP
режет встроенные скрипты, лендинг только по «/»), защита денег, откат и список
хвостов для следующей сессии.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 14:31:40 +03:00
Дмитрий 631f99ecff fix(guides): скрипт страницы разборов вынесен в файл — CSP боевого режет встроенные
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 14:15:00 +03:00
Дмитрий e517b7a256 Merge remote-tracking branch 'gitea/main' into worktree-jivo-bot-core
# Conflicts:
#	app/bootstrap/app.php
#	app/config/services.php
#	app/tests/Feature/Plan4/Schema/SchemaDeltaTest.php
#	db/CHANGELOG_schema.md
#	db/schema.sql
2026-07-14 09:44:56 +03:00
Дмитрий 4b09242bce fix(guides): пересняты «Отчёты», «Выгрузка» и «Добавить вручную» — без машинных слов
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 09:36:51 +03:00
Дмитрий 0b67defcf7 fix(guides): переснято на боевых ценах — 127 кадров, честные подписи
Цены на кадрах теперь как на боевом: 55 ₽ за заявку, сетка 55→25 ₽, сбор
конкурентов 50 ₽, сбор источников 10 ₽ (были тестовые 500→250 ₽ и 300/50 ₽).
Две подписи прямо врали ценой — исправлены.

Кадры перестали ловить экран на полпути: робот дожидается загрузки данных.
Подписи, забегавшие вперёд экрана, переписаны; добавлен настоящий кадр раздела
«Отчёты»; стрелка в «Пометках» больше не тычет в пустой блок; демо-проект —
стоматология, а не окна.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 09:19:38 +03:00
Дмитрий 203845011c feat(sales-finder): искать можно на ЛЮБОМ уровне — не только по конечной рубрике
По просьбе владельца: «детские или взрослые стоматологии нам не интересны» —
надо уметь собрать «Частные стоматологии» целиком, не уточняя.

- rubrics.build_catalog: ГРУППА теперь тоже ищется — по своему имени; лист —
  своей фразой 2ГИС. Не ищутся только раздел (слишком широко) и служебный
  ящик «Ещё рубрики» (BUCKET_LABEL). Добавлен is_searchable().
- web/ui.py: в дерево для JS добавлен флаг q (можно искать). Каскад берёт САМЫЙ
  ГЛУБОКИЙ выбранный искомый узел; уточнять глубже необязательно (плейсхолдер
  «— не уточнять —»); кнопка активна сразу, как выбрана ниша или группа.
- Живьём: группа «Частные стоматологии» → 12 клиник, «Медтовары» → 12 фирм,
  глубокий лист «Пластическая хирургия» → 12 клиник. 226 тестов.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 08:13:13 +03:00
Дмитрий 8ce5619177 docs(visitors): короткие ссылки для рассылок — liderra.ru/s, /hh, /tg
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 06:58:33 +03:00
Дмитрий 28563d0692 feat(sales-finder): глубокий каталог 2ГИС — 3-й эшелон рубрик + адаптивный каскад
Каталог перестроен из плоского (19×~100) в ДЕРЕВО реального рубрикатора 2ГИС:
19 разделов → 1522 листа, глубина 3 (раздел → ниша/группа → узкая рубрика).
Тот самый «3-й эшелон» за кнопкой «Ещё» 2ГИС (закрыт открытый вопрос §6.7g).

- tools/crawl_rubricator.py — краулер рубрикатора через xfetch (кэш, отсечка
  глобального меню 19 разделов, «Ещё» = отдельная группа). Данные заморожены
  в salesfinder/rubricator.json (кэш rub_cache/ и *_raw.json в git НЕ идут).
- rubrics.py переписан на дерево: build_catalog+slug, queries_for(leaf)=[query]
  (группа не ищется — поиск только по конечному листу), _LEGACY_LABELS для
  русских подписей старых списков.
- web/ui.py: адаптивный каскад — списки всплывают по мере надобности; лист
  уходит как rubric, кнопка заблокирована пока не выбран лист.
- Живьём: глубокий лист «Пластическая хирургия» → 12 клиник из 2ГИС. 223 теста.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 06:56:24 +03:00
Дмитрий ee03d9ad91 fix(guides): страница разборов не находила кадры и показывала «готовятся»
Пути к кадрам и списку тем были относительными, а страница открывается по
адресу /kak-eto-rabotaet (без слэша на конце) — браузер искал их этажом
выше и не находил ни одного. Пути от корня сайта: так же будет работать и
на боевом, где страница и папка guides/ лежат рядом с лендингом.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 06:31:53 +03:00
Дмитрий aa7383a240 docs(sales-finder): HANDOFF 13-14.07 — inn_fl, очередь, каталог, 2-уровневый выбор + новый resume-промт 2026-07-14 05:30:22 +03:00
Дмитрий ff36e0c10e fix(visitors): партиции нарезает только штатный механизм + сторож схемы на 80 таблиц
Полный прогон вскрыл реальный баг: миграция создавала партицию site_events_2026_07
своими границами (в местном времени), а MonthlyPartitionManager — site_events_y2026_m07
в UTC. Партиции перекрывались (42P17) и роняли 19 ЧУЖИХ тестов. Теперь партиции
нарезает только менеджер (ensureRange), как у всех остальных таблиц.

Плюс сторож схемы обновлён под +2 таблицы учёта (80 таблиц, 141 индекс) и
записаны готовые ссылки с метками для смс/hh.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 05:22:46 +03:00
Дмитрий e8e23bdbae docs(chat): снимок состояния — откат склейки починен, кадры на живых данных
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 05:22:46 +03:00
Дмитрий b059d86fc6 fix(guides): кадры пересняты на живых демо-данных — портал выглядит работающим 2026-07-14 05:07:48 +03:00
Дмитрий 3f26ae054b feat(visitors): маячок на лендинге (view/alive/cta_click)
Метрику и Вебвизор не трогает — работает параллельно. Исходник лендинга взят
из feat/sales-finder (в боевую ветку он никогда не попадал); при выкате маячок
вставляется в БОЕВУЮ версию файла, чтобы не тащить на прод незавершённую стройку.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 04:17:15 +03:00
Дмитрий d0808ec09a docs(guides): итог дня — разборы 10/10, снимок состояния, план стройки
Гость получает верную ссылку на разбор по всем 10 частым вопросам; где
разбора нет — бот молчит, в пустоту не шлёт. 20 тем, 126 кадров, единый
демо-клиент. Отдельно: найден баг боевой функции — поиск дублей считал
ноль признаком совпадения (на проде он есть, фикс в ветке).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 04:14:58 +03:00
Дмитрий ed5f9ffd4a docs(guides): проверка разборов — бот, страница, ПДн, вес 2026-07-13 20:18:11 +03:00
Дмитрий 24fc6ecad4 fix(guides): семь тем про конкурентов пересняты на стоматологии — единый демо-клиент 2026-07-13 20:05:00 +03:00
Дмитрий cc63a7403f fix(guides): кадры показываются крупно — надписи в портале читаются 2026-07-13 19:20:36 +03:00
Дмитрий 1ee42a223b feat(guides): разборы по заявкам, отчётам, деньгам и настройкам проекта 2026-07-13 18:36:10 +03:00
Дмитрий efb0212398 docs(plans): план учёта посетителей — 12 задач, TDD, выкат отдельным шагом
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 18:33:33 +03:00
Дмитрий f4c3d885aa docs(specs): собственный учёт посетителей + раздел «Посетители» в админке
Точное разделение робот/браузер/человек (отклик страницы, а не запрос),
сквозная склейка лендинг→портал через куку на .liderra.ru, воронка и каналы
в админке. Метрику и Вебвизор не трогаем.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 18:33:21 +03:00
Дмитрий 69a81a7f07 docs(plans): план учёта посетителей — 12 задач, TDD, выкат отдельным шагом
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 18:30:46 +03:00
Дмитрий dd50f3832f docs(specs): собственный учёт посетителей + раздел «Посетители» в админке
Точное разделение робот/браузер/человек (отклик страницы, а не запрос),
сквозная склейка лендинг→портал через куку на .liderra.ru, воронка и каналы
в админке. Метрику и Вебвизор не трогаем.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 18:17:21 +03:00
Дмитрий 9c668de390 feat(guides): разборы по Конкурентному полю и источникам 2026-07-13 18:01:33 +03:00