Commit Graph

311 Commits

Author SHA1 Message Date
Дмитрий 968497ed44 docs: G1/SP3b план реализации — форма реквизитов (фронт) + UX гейта
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 07:20:12 +03:00
Дмитрий bacc7c5e24 feat: G1/SP3a фронт входа — регистрация + подтверждение почты
Переработка register под новый бэкенд SP1 (код на почту), новый ConfirmEmailView, капча-шов, роут /confirm-email. Проверено Playwright: register→код→confirm→dashboard, негатив, fallback email. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:33:26 +03:00
Дмитрий 08d51eb6c8 feat: G1/SP2 реквизиты клиента + ИНН по DaData + гейт первого проекта
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 22:25:23 +03:00
Дмитрий 53fb7b7760 feat: G1/SP1 самозапись клиента с подтверждением почты 6-значным кодом
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 19:33:33 +03:00
Дмитрий ae0a4174ea docs: G1/SP1 спека+план+хэндофф (печать стены не закрепилась, передаю в след. сессию) 2026-06-18 17:35:32 +03:00
Дмитрий ec03dd53df docs: план G1/SP1 самозапись с подтверждением почты
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 16:03:21 +03:00
Дмитрий f943871406 feat: G2-A дайджест новых сделок на почту - письмо-сводка раз в 30 минут вместо письма на каждую сделку
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 14:40:12 +03:00
Дмитрий 41adf00cba feat: G4 убрать неработающий push-канал из настроек уведомлений + находка G8 про сломанный фронт-тест-раннер
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 13:46:31 +03:00
Дмитрий 8ad9e1d17f fix(test): routing-snapshot today+tomorrow в CsvWebhookRaceTest + PII на slack/papertrail/stderr
C: LeadRouter.activeSnapshotDate после 21:00 МСК = завтра; снимок только на сегодня не активен -> снимки на обе даты. A: PII-процессор на остальные лог-каналы, 6/6.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 21:37:41 +03:00
Дмитрий 7f5288726a feat(security): PII-scrubbing процессор логов — Medium go-live
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>
2026-06-17 20:43:28 +03:00
Дмитрий b81a372e8f feat(security): webhook DNS-rebind пиннинг + аддитивный HMAC supplier-webhook — edge/P2 go-live
WebhookUrlGuard::safeDeliveryIp один резолв + CURLOPT_RESOLVE пиннинг в test(); supplier-webhook принимает HMAC X-Webhook-Signature как альтернативу URL-секрету + secretless-маршрут. Аддитивно, backward-compat. 6 новых тестов GREEN; 5 падений webhook-сюиты pre-existing (Phase-3 B-regex + CsvWebhookRaceTest), подтверждено baseline без моих файлов.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 20:21:11 +03:00
Дмитрий a0048448e1 docs(superpowers): спеки и планы церемоний синка квинтета v2.47 и починки lychee-ссылок
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 20:04:11 +03:00
Дмитрий 518d71e81f feat(security): per-IP route-throttle на auth-эндпоинтах — P1 go-live
Именованные лимитеры 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>
2026-06-17 19:56:23 +03:00
Дмитрий f18491b987 docs: починка 12 битых относительных .md-ссылок долг lychee — корректные относительные пути и снятие ссылок на отсутствующие цели
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 19:55:37 +03:00
Дмитрий abb349c012 feat(pdn): правила маскирования ПДн pg_anonymizer на проде — SECURITY LABEL на ПДн-колонки + план применения — закрытие остатка B2
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 19:33:58 +03:00
Дмитрий 380aedb04e feat(security): CSP Report-Only под Vue+Vuetify SPA — 2-я ZAP Medium go-live
Report-Only политика в middleware SecurityHeaders; Pest 6/6 GREEN.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 19:30:51 +03:00
Дмитрий 25f9016505 docs(superpowers): отчёт осмотра портала + баг-доки стены (walk/read-block) — для claude-brain
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 17:54:50 +03:00
Дмитрий d1976c9ccf feat(pdn): ретеншен ПДн удалённых лидов — анонимизация soft-deleted сделок — F-P1
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>
2026-06-17 17:24:48 +03:00
Дмитрий 84936929eb feat(security): middleware безопасных HTTP-заголовков — закрытие ZAP Medium anti-clickjacking
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>
2026-06-17 17:12:32 +03:00
Дмитрий e13b9e7bea docs(security): аудит доведён до конца + поправка по верификации кода + баги стены
Прогон всех 5 сканеров: gitleaks 0 / Semgrep 0 / Ward 2(dev) / Nuclei 0(medium+) / ZAP 0(high). pg_anonymizer не установлен (факт). Три ложных P0 сняты проверкой кода (E9/E18/admin/SSRF закрыты). Вердикт NO-GO держат F-P1, pg_anonymizer, прод-.env. Трекер открытых вопросов + файл-баг (чтение под стеной, десинк F-J, зацикл наставника) для claude-brain.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 16:25:23 +03:00
Дмитрий e693cfc6b7 docs(security): go-live security gate отчёт 17.06 + уроки прогона в wall-guide
Прогон 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>
2026-06-17 14:34:39 +03:00
Дмитрий cf813c1091 feat: wall - подписанные строки вердиктов роутера наставника и судьи во всплытии
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 13:16:32 +03:00
Дмитрий 9fe5b5f229 imitation phase1 merge
# Conflicts:
#	app/app/Console/Commands/PhoneRangesImportCommand.php
#	app/app/Jobs/RouteSupplierLeadJob.php
#	app/app/Services/LeadRegionResolver.php
#	app/database/migrations/2026_05_31_100000_create_phone_ranges_and_resolution_log.php
#	app/tests/Feature/Console/PhoneRangesImportCommandTest.php
#	app/tests/Feature/Jobs/RouteSupplierLeadJobTest.php
#	app/tests/Feature/PartitionsCreateMonthsTest.php
#	cspell-words.txt
#	docs/observer/STATUS.md
#	tools/enforce-powershell-gate.test.mjs
#	tools/enforce-router-gate.mjs
#	tools/enforce-router-gate.test.mjs
#	tools/enforce-tdd-gate.test.mjs
#	tools/enforce-tdd-real-test-verifier.mjs
#	tools/enforce-tdd-real-test-verifier.test.mjs
#	tools/enforce-verify-record.test.mjs
#	tools/mcp-tool-classifier.test.mjs
#	tools/shell-content-rules.test.mjs
2026-06-17 08:03:35 +03:00
Дмитрий a94e554a69 F-3 type: 3 vue-tsc TS2345 в region-тестах - cast findComponent к VueWrapper any + props - vue-tsc чисто
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 04:38:55 +03:00
Дмитрий 0ecfeb06a6 F-2 refactor: цвет stat-success вынесен из инлайна в scoped-правило по прецеденту .sep - тест TenantsStatsHeader зелёный
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 03:35:48 +03:00
Дмитрий 57f554ea7c F-2 a11y Tenants: label поиска по ИНН + AA-класс stat-success счётчика активных - 2 теста зелёные, регрессия 946 passed
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 03:17:32 +03:00
Дмитрий 33c5fbccbd docs deploy: F-1 CVE vendor-апдейт выполнен на проде - спека v3 + план + runbook
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 16:31:57 +03:00
Дмитрий 293edb3e07 docs session 2026-06-16: F-4 baseline, gitea push, wall push lesson, mentor bug, F-1 deploy runbook, lead-region already-in-main finding, etalon update 2026-06-16 15:57:06 +03:00
Дмитрий 1e524022cc docs router-mentor: gitea backup health-probe ceremony spec+plan, server verified alive
Accessibility (Pa11y live) / a11y (push) Has been cancelled
SAST — Semgrep / Semgrep SAST scan (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 13:50:05 +03:00
Дмитрий 317125e36a chore: regenerate larastan baseline - absorb lead-region drift
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 13:43:12 +03:00
Дмитрий 8e7a7803c1 fix: 152-FZ erasure - surgical scrub of deals.phones JSONB plus email no-op, F-P1b
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 11:54:45 +03:00
Дмитрий 9ac6d96dee feat router-mentor: arbitration fixes 1+2+3 - verdict visibility, round-memory judge-self-history and mentor-re-eval, owner-seal arbitration; 29/29 tools green
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 11:13:52 +03:00
Дмитрий 4f7e0b8f75 docs: lead-region merge runbook + domain-blockers F-T1/F-T2/F-P1 verification
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 09:04:00 +03:00
Дмитрий d74d3113e5 feat: research-tooling Perplexity Pack #87-89 — registry/router/normative sync + ADR-019
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 15:44:42 +03:00
Дмитрий f3ac36bef1 revert(wall): откат Post-advance — PostToolUse не срабатывает на упавшем Bash
Live-смоук: PostToolUse не запускается на exit≠0 → Post не двигает указатель на RED-шагах. Код возвращён к Pre-advance (3928 GREEN). Спека/план помечены ОТВЕРГНУТО. Настоящий фикс desync = перестановка skill-discipline перед supreme-gate.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 06:11:11 +03:00
Дмитрий 820ff23ccc fix(wall): supreme-gate сдвигает указатель на PostToolUse (фикс рассинхрона)
Pre-такт = ворота + журнал-намерение (без сдвига); Post-такт = сдвиг по подтверждённому исполнению. Лечит desync при блоке поздним хуком / user-deny. +runGatePre/runGatePost/isPostEvent, runGate → compat-обёртка. Регрессия tools-only 3938 passed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 05:34:33 +03:00
Дмитрий e243b8f77b feat(mentor): тупой судья навыков + фикс роутера prefilter-bypass
- router: classify({skipPrefilter}) — наставник зовёт мозг роутера мимо detectMicro
  (ловил 'format' подстрокой в имени модуля → роутер не доходил до LLM); recommendedChainOf
  в on-plan-write маппит node/recommended_node/recommended_chain (рекомендация не теряется)
- skills в ПОДПИСАННУЮ печать (Вариант 1): sealablePlan/freezePlan/sealPlan
- стена: isPlanDeclaredSkill — объявленный в опломбированном плане навык вызываем (снимает дедлок)
- enforce-domain-skill-discipline (новый хук): объявил → обязан вызвать (журнал M1) до
  первого мутирующего шага; поверх готового domain-skill-discipline
- гайд docs/superpowers/router-mentor-wall-GUIDE.md + дизайн/план-доки
- регрессия tools-only 3928 passed + 2 skip, 0 регрессий

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 04:08:53 +03:00
Дмитрий 40811c5bfd docs(mentor): спека+план мержа роутер↔наставник + протокол сессии Р1-Р9 + l1-l2 redesign
Design-of-record для коммита b739d5ad (мерж роутера в наставника):
- specs/plans 2026-06-13-router-mentor-merge-* (спека простым языком + 9-задачный TDD-план)
- session-protocol-2026-06-13 (решения Р1-Р9, записи только по команде владельца)
- specs/plans 2026-06-13-l1-l2-negotiation-redesign-* (redesign согласования, Фазы 0-6)
- cspell-words.txt +8 терминов (скилам/грепом/Пивот/таймаутил/эмбеддинги/мержа/стэк/вызыватель)
- markdownlint MD032 авто-фикс (пустые строки вокруг списков)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 11:42:09 +03:00
Дмитрий cefb1b9612 docs(mentor): two-level negotiation spec-v2 (anchored) + plans 2026-06-12 19:15:48 +03:00
Дмитрий dd41e474c2 docs(mentor): инцидент 12.06 — вход Фазы 8 на main, баннер в handoff #5, судьба d1ad4e85 (cherry-pick только внутри Ф8) + cspell словоформы + observer refresh 2026-06-12 10:45:53 +03:00
Дмитрий 328ac009d6 fix(mentor): smoke этап 4 пройден — деталь ошибки транспорта в catch вердикта + env ROUTER_LLM_BASE_URL в дефолте callAnthropicAPI (смена оператора на aitunnel) + контракт массива строк в промпте plan_points_addressed (F-C3); runbook этап 4 + env-таблица + блок смены оператора; smoke-план; cspell +aitunnel и словоформы. Регрессия tools 3753 GREEN 2026-06-12 07:55:31 +03:00
Дмитрий 8293ca2ce6 feat(mentor-activation): активационная обёртка наставника — рубильник SEAM + journal/verdict store + export PLAN_PATH_RE + контекст-в-плане + producer-хук PostToolUse + freeze-gate зубы в печать судьи (план T1-T7 + sharp-edges W-1..W-4) 2026-06-12 05:51:41 +03:00
Дмитрий 57b811b3c0 fix(mentor-finreview): финревью Фазы B 5-скил — FR-1 freeze-gate VF-1/SE-A1 inline + FR-2 единый рендер районов/staleness (W1-канон) + FR-4 balanced-парс JSON + VA-1 единый рендер контекста/ДР-1 + VA-2 маркер КОНТЕКСТ ПУСТ + VA-3 валидация request_district + F-C2-6/W7 ноты 2026-06-11 20:10:42 +03:00
Дмитрий 537154adf3 feat(mentor-integration): боевая проводка C2 — W1 catalog≠graph+районы (М3) + W2 гейт ДР-1 в стене (М2, аддитивно) + W3 onPlanWrite + W4 warn-прокидка O18 + W6 интеграционный тест + W7 контракты (sub-plan C2 + Д-С2-1..7 + sharp-edges F-C2-1..5) 2026-06-11 19:09:39 +03:00
Дмитрий ee65be2466 docs(router-mentor): sub-plan A-E R6.3 amendments — все 24 находки ревью закрыты (C-1/нах.F1-F7/SE1-SE13/VF-1/V-1..6) 2026-06-11 13:25:12 +03:00
Дмитрий 84e264f101 docs(router-mentor): sub-plan C2 (манифест интеграции V-1) + F (радары нах.F2)
- C2: реестр деферралов W1-W7 (renderDistricts/«(100%)», reading-wiring, onPlanWrite, warn, мастер-порядок, интеграционный тест, контракты инъекций)
- F: graph-radar + skeleton-radar (проверка полноты §8 Q3)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 16:25:17 +03:00
Дмитрий 1edddc420f docs(router-mentor): R6.3 §6.1 развод ролей наставника (C-1) + edit-план ревью
- спека §6.1 +R6.3 «два выхода наставника»: выбор-скила (router-трасса) vs разбор-плана (mentor-вердикт runMentorVerdict + onPlanWrite) — корень C-1
- новый edit-план (10 задач, 24 находки ревью 5-скил цепочки: F1-F7/SE1-SE13/VF-1/V1-V6/C1-C4)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 16:17:10 +03:00
Дмитрий 886c0ac5d5 docs(router-mentor): sub-plan B+D+E+C — декомпозиция R6.2 завершена 2026-06-10 14:31:01 +03:00
Дмитрий e69fd396b2 docs(router-mentor): R6.2 + sub-plan A + handoff-2 2026-06-10 13:36:57 +03:00
Дмитрий 5be1cd6e80 docs(escape-sign): отметить M6 FIX-5 как РЕАЛИЗОВАНО (спека §12 + план чек-боксы)
После закрытия реализации M6 FIX-5 (3 задачи TDD + гейт закрытия, регрессия
3478+2skip GREEN):

- spec 2026-06-10-floor-escape-signing-design.md: статус ЧЕРНОВИК → РЕАЛИЗОВАНО;
  §12 боксы «Ревью владельца» + «writing-plans» → [x] (+пометка одобренного
  отклонения Task 3: быстрый путь).
- plan 2026-06-10-floor-escape-signing.md: +статус-баннер (РЕАЛИЗОВАНО, регрессия,
  отклонение Task 3); все рабочие чек-боксы (Task 1/2/3 + гейт) → [x].

Только docs. Прод-код инертен до провижининга ключа (Фаза 8).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 05:38:21 +03:00