Переработка register под новый бэкенд SP1 (код на почту), новый ConfirmEmailView, капча-шов, роут /confirm-email. Проверено Playwright: register→код→confirm→dashboard, негатив, fallback email. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Пошаговый деплой-пайплайн liderra.ru: clone из gitea, npm build на проде,
artisan down, rsync overlay с исключениями, composer и optimize от www-data,
миграции через postgres superuser, up и smoke. Грабли PowerShell-ssh кавычек,
heredoc с dollar-dollar, привилегии www-data и crm_app_user, rollback.
GitHub Actions deploy.yml мёртв, аккаунт CoralMinister suspended.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
C: LeadRouter.activeSnapshotDate после 21:00 МСК = завтра; снимок только на сегодня не активен -> снимки на обе даты. A: PII-процессор на остальные лог-каналы, 6/6.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Monolog PiiScrubbingProcessor (телефоны/email -> [PHONE]/[EMAIL]) + ScrubPii tap на single/daily в config/logging.php. Pest 6/6 GREEN. Sentry-scrubbing (OPEN-И-16) не реализуем: sentry-laravel не установлен — open-item.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Именованные лимитеры auth-login/auth-2fa/auth-password (perMinute 20 by IP) в AppServiceProvider; throttle-middleware на login/forgot/reset/2fa-verify/recovery в web.php. Закрывает per-IP объёмный перебор. Pest tests/Feature/Auth 97/97 GREEN.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
152-ФЗ блокер B1/F-P1: телефоны и имена контактов soft-deleted сделок не
вычищались и хранились бессрочно. Добавлена плановая команда-ретеншен.
Команда pd:scrub-soft-deleted-deals анонимизирует phone/contact_name/phones
сделок с deleted_at старше N дней; N из system_settings
pd_scrub_soft_deleted_deals_days, по умолчанию no-op — юр.срок не зашит в код.
Значения затирания идентичны PdErasureService. Cross-tenant через
pgsql_supplier BYPASSRLS, идемпотентно, summary-запись в pd_processing_log
системным актором. Планировщик ежедневно 03:30 МСК с heartbeat.
Схема v8.41: partial index deals_deleted_at_index ON deals deleted_at WHERE
deleted_at IS NOT NULL для дешёвой выборки; счётчик индексов 120 на 121.
F-T2 проверен: /api/admin за middleware saas-admin fail-closed 503 — кодовой
правки не требует.
TDD: 4 Pest ScrubSoftDeletedDealsCommandTest GREEN. Escape-per-write — печать
церемонии не опечатывала план.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
X-Frame-Options SAMEORIGIN + X-Content-Type-Options nosniff + Referrer-Policy на все web-ответы (go-live аудит 17.06). CSP вынесен отдельно (SPA Vue+Vuetify). TDD-тест на публичном /.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Прогон security-go-live на main, локальная цель 127.0.0.1:8000 — вердикт NO-GO.
Блокеры: pg_anonymizer не установлен (ПДн в дампах), F-P1 (телефоны лидов не
вычищаются по сроку), P0 из STRIDE (SAAS_ADMIN_TEST_BYPASS / SSRF webhooks-test /
открытые ручки). Nuclei чисто (1 info php). Semgrep/ZAP — PENDING.
Гайд стены: новый раздел уроков — читать контекст до печати плана, запасной
канал вставки в чат, недетерминизм судьи и рассинхрон указателя F-J.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Частые ошибки +floor-safe планы (не ставить node -e/curl/rm-rf/PS-write/runtime-write Bash-шагами плана — пол блокирует, стена после Δ7+ встаёт колом, escape не двигает указатель; файловые операции — Write/Edit). Async-нота: per-attempt таймаут тяжёлых LLM 30с→90с.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Ещё два пользовательских пункта (по запросу владельца): (A) maintenance — точные шаги выключить/включить стену через settings.json hooks; (D) если lefthook ругается на STATUS.md — git restore --staged --worktree перед commit. Согласовано.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>