Дмитрий
2f4575b8a0
feat(import): сервис MonthlyPartitionManager + рефактор partitions:create-months
...
Выносит DDL-логику создания месячных RANGE-партиций из команды
PartitionsCreateMonths в переиспользуемый сервис MonthlyPartitionManager.
Сервис используется командой (DRY) и будет использован HistoricalImportService
для партиций под исторические даты CSV.
- MonthlyPartitionManager::ensureRange(table, from, to) — гарантирует партиции
под диапазон дат, идемпотентно; отвергает незарегистрированные таблицы
- MonthlyPartitionManager::ensureMonth(table, monthStart) — одна партиция
- PartitionsCreateMonths рефакторена: убраны PARTITIONED_TABLES, partitionExists(),
use DB; inject MonthlyPartitionManager через handle()
- Test: MonthlyPartitionManagerTest (3 теста, DatabaseTransactions — DDL откат)
- Regression: PartitionsCreateMonthsTest (4 теста) — зелёный, поведение не изменилось
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 17:37:29 +03:00
Дмитрий
cf95b87f30
feat(import): Eloquent-модели ImportLog + ImportUnknownStatus
...
- ImportLog: $attributes зеркалят DB DEFAULT'ов (status/entity_type/dry_run),
CREATED_AT/UPDATED_AT=null (таблица использует started_at/finished_at),
casts для mapping_config (array) и dry_run (boolean)
- ImportUnknownStatus: scope unresolved() (whereNull mapped_to_slug),
BelongsTo tenant
- Фабрики ImportLogFactory + ImportUnknownStatusFactory
- Тест ImportModelsTest (2/2, DatabaseTransactions, idempotent)
- ide-helper:models перегенерирован под новые модели
- phpstan-baseline регенерирован (квирк 25: TestCall::$tenant/$user)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 17:29:33 +03:00
Дмитрий
b2086cd2aa
fix(import): Task 1 code-review — убран фантомный GRANT-блок + усилен UNIQUE-тест
...
Code-review Task 1: явный per-table GRANT-блок для import_unknown_statuses
использовал несуществующие роли (crm_app_admin / crm_readonly). Реальные роли —
crm_app_user / crm_admin_user / crm_migrator / crm_audit_writer /
crm_supplier_worker (db/00_create_roles.sql). Блок удалён целиком из
db/02_grants.sql и db/schema.sql: import_unknown_statuses — обычная
tenant-scoped таблица, покрыта umbrella GRANT ... ON ALL TABLES +
ALTER DEFAULT PRIVILEGES (как import_log), явный per-table grant не нужен.
ImportSchemaTest: UNIQUE-тест усилен — проверяет состав колонок
(status_ru, tenant_id), а не только наличие constraint'а типа 'u'.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 17:20:12 +03:00
Дмитрий
fada3f348c
feat(import): H1+H2 — схема import_unknown_statuses + enrichment import_log
...
Sprint 4 Task 1 (schema delta §6):
- H1: новая таблица import_unknown_statuses (RLS tenant_isolation,
UNIQUE(tenant_id,status_ru), FK→tenants/import_log/lead_statuses/users)
- H2: +5 колонок import_log (entity_type, source_system, mapping_config,
unknown_statuses_count, dry_run)
- schema.sql v8.20→v8.21 (64 таблицы / 118 индексов / 40 RLS-политик)
- db/CHANGELOG_schema.md v8.21 entry
- db/02_grants.sql v8.21 section (crm_app_user/crm_app_admin/crm_readonly)
- migrate: hasTable/hasColumn guards (fresh-safe)
- tests: 3 Pest-теста (ImportSchemaTest) + SchemaDeltaTest v8.21 metrics
- ide-helper: _ide_helper.php + _ide_helper_models.php (были отсутствуют
в worktree, phpstan падал молча из-за missing scanFiles entry)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 17:01:51 +03:00
Дмитрий
dfb25d0d79
docs(plan): Sprint 4 — историческая миграция лидов §6 (H1-H6/H8/H9)
...
План CSV-импорта исторических лидов из crm.bp-gr.ru. 12 задач: schema delta
(import_unknown_statuses + enrichment import_log), сервисы парсинга/маппинга/
upsert'а, ImportLeadsJob, ImportController, frontend ImportView + wizard
маппинга статусов, маршрут /import + инструкция H9. H7 (импорт проектов)
вынесен — формат CSV проектов не специфицирован в ТЗ §6.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 16:28:30 +03:00
Дмитрий
d424756aee
feat(map): automation-graph — полная актуализация по аудиту
...
Аудит карты против фактического состояния (~/.claude/settings.json,
project .claude/settings.json, .mcp.json, lefthook.yml, .claude/skills,
memory/). +20 узлов (83 → 103):
- плагины 5→9: +skill-creator, claude-code-setup, plugin-dev, context7
- хуки 5→12: +economy-self-check/skill-marker/skill-check/state-guard/
postcompact/verifier (Stop) + ruflo-queen-hook
- memory 16→24: +audit_B/C, supplier_crm, full_audit_05-12/14, sprint1/2/3
- скилы проекта 2→3: +regression
Квирк 72 устранён (commit ba865ac ) — 2 конфликта переоценены:
ag_pest↔mcp_redis BLACK→GREEN; ruflo_daemon↔ag_pest → квирки 73/77.
Все 103 узла размечены по разделам; E8 «Самообучение Claude» наполнен
(skill-creator, claude-code-setup). Топология 103 / 106 рёбер /
11 конфликтов (🔴 1/⚫ 3/🟢 7). Smoke ✓.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 16:08:07 +03:00
Дмитрий
1b3da1839d
feat(map): automation-graph — раздел E8 «Самообучение Claude»
...
+1 раздел в блок E «Мета и управление». Итого 40 разделов
(13 наполнены / 27 пусты). E8 — пустой каркас под будущий playbook.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 16:08:07 +03:00
Дмитрий
f93e6715f7
feat(map): automation-graph — слой функциональных разделов (iter7)
...
39 разделов деятельности Лидерры (5 блоков A–E) как классификация:
все 83 узла распределены по разделам — 13 наполнены, 26 пусты
(пустые — бизнес-домены, под которые в карте dev-автоматики узлов
ещё нет). Кнопка-панель «📂 Разделы» + строка «Раздел» в Паспорте
узла. Топология карты (83/90/11) и радиальный layout без изменений.
Основа будущего «мозга»: 1 раздел = 1 playbook.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 16:08:07 +03:00
Дмитрий
b24277efc3
feat(api): J1 — auth:sanctum+tenant middleware на /api/deals*
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-16 15:18:13 +03:00
Дмитрий
5ce5d3aa64
feat(api): J2 — стаб-гейт EnsureSaasAdmin на /api/admin/*
2026-05-16 15:01:07 +03:00
Дмитрий
8f42bbca3e
docs(plan): Sprint 3F — API middleware (J1/J2)
2026-05-16 14:56:11 +03:00
Дмитрий
9e8c6aea84
feat(admin): G5/G6 frontend — incident detail view + РКН-notify
2026-05-16 14:09:53 +03:00
Дмитрий
b0826ecc0c
feat(admin): G6 backend — incident РКН-notify endpoint
2026-05-16 14:09:53 +03:00
Дмитрий
f9e3a82b4c
feat(admin): G5 backend — incident detail endpoint
2026-05-16 14:09:53 +03:00
Дмитрий
5f28c0136c
fix(admin): G4 review — real AxiosError in error test + balance/NaN guards + a11y
2026-05-16 14:09:53 +03:00
Дмитрий
4fcf642963
feat(admin): G4 frontend — billing row-actions menu + dialogs
2026-05-16 14:09:53 +03:00
Дмитрий
a57f9cc511
fix(admin): G4 review — lockForUpdate on refund balance + self-contained tariff tests
2026-05-16 14:09:53 +03:00
Дмитрий
1b29e986d1
feat(admin): G4 backend — billing tenant actions (status/refund/tariff)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-16 14:09:53 +03:00
Дмитрий
117e2e3733
docs(plan): Sprint 3D — Admin actions (G4/G5/G6) implementation plan
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 14:09:53 +03:00
Дмитрий
24e902bf91
docs(map): automation-graph — нормативный sync под реколлаж ruflo 16.05
...
Карта приведена к реколлажу ruflo (Pravila v1.16 / CLAUDE.md v2.2 /
PSR_v1 v3.2 / Tooling v2.2): убраны «уровень −1», «§12 sub-policy»,
«R0 sub-policy delegation pattern».
- 4 узла-правила: лейблы v1.16/v2.2/v3.2/v2.2 + NODE_META.changed 16.05
- nd()-блоки правил: §12 — hard-rule уровня 0, R0 — головной фильтр,
цепочка 7-уровневая (0–6), §3.5/§4.10 — advisory-подсистема
- ruflo_queen: advisory/automation-подсистема, не entry-point;
reportsTo → Pravila §14 + CLAUDE.md §3.5/Tooling §4.10
- 4 ребра ruflo_queen→{правило} «перенял sub-policy» → flipped
{правило}→ruflo_queen (§14 queen-триггер / §3.5 / §4.10 описывают)
- конфликт ruflo_queen↔pravila 🔴 →🟢 (реколлаж = правило-фикс):
классификация 🔴 2/⚫ 4/🟢 5 → 🔴 1/⚫ 4/🟢 6
- §12 sub-policy → hard-rule level 0 в superpowers/hk_economy/mem_sp
+ CONFLICT hk_economy↔superpowers + EDGE_DETAILS
Топология 83/90/11 без изменений (downstream-sync, не iter).
Visual smoke 8/8 PASS (Playwright): 83 узла / 90 рёбер рендерятся,
0 JS-ошибок, легенды отредактированных узлов рендерятся корректно.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 13:44:14 +03:00
Дмитрий
eff7744c14
docs(fix): claude-brain spec — битая ссылка на CLAUDE.md (../../../../../→../../../)
...
Pre-existing баг: 5×../ перелетал repo-root на 2 уровня. Поймана pre-push lychee реколлажа. Корректный путь от docs/superpowers/specs/ до repo-root CLAUDE.md — 3×../
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 12:59:42 +03:00
Дмитрий
5d7ec570e3
docs(rules): PSR_v1 R13.1 — счётчик R0.6 «8» → «10 пунктов» (после удаления п.11)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 12:59:42 +03:00
Дмитрий
d76c2c1c14
docs(rules): Task 6 cross-consistency — вычистить остаточные R0→sub-policy cross-refs
...
Pravila §11.5 + §13.2 содержали живой cross-ref «PSR_v1 v3.0+, R0 → sub-policy под ruflo Queen-led routing» — после реколлажа R0 уже top-of-stack gate, формулировка стала ложной. Task 1 вычистил §13.9/§13.10, но пропустил §11.5/§13.2. + §10 v1.16-row дополнен; PSR_v1 шапка-нарратив +v3.2.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 12:59:42 +03:00
Дмитрий
4c40b61467
docs(plan): ruflo hierarchy factual recollage — implementation plan
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 12:59:42 +03:00
Дмитрий
ed4b703b3c
docs(rules): CLAUDE.md v2.2 — §5 п.10 убран ruflo-routing loophole (Task 4 review fixup)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 12:59:42 +03:00
Дмитрий
c9f1e95c1e
docs(rules): CLAUDE.md v2.2 — реколлаж ruflo, убран уровень −1
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 12:59:42 +03:00
Дмитрий
cc8488b9f0
docs(rules): Tooling v2.2 — шапка changelog синхронизирована с §13-записью (Task 3 review fixup)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 12:59:42 +03:00
Дмитрий
86ba879a07
docs(rules): Tooling v2.2 — реколлаж §4.10 ruflo entry-point → advisory-подсистема
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 12:59:41 +03:00
Дмитрий
05893ca9e7
docs(rules): PSR_v1 v3.2 — §14 cross-ref + R0.6 п.11 + опечатка (Task 2 review fixup)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 12:59:41 +03:00
Дмитрий
b36864c4e8
docs(rules): PSR_v1 v3.2 — реколлаж ruflo, R0 sub-policy → top-of-stack gate
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 12:59:41 +03:00
Дмитрий
61bf38a745
docs(rules): Pravila v1.16 — §10 history row + §14.6 cleanup (Task 1 review fixup)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 12:59:41 +03:00
Дмитрий
a83711c4f2
chore(lefthook): cspell --no-gitignore — staged-файлы под gitignored .claude/worktrees/ не проверялись
...
cspell.json useGitignore:true заставлял cspell игнорировать все файлы worktree, расположенного под gitignored .claude/worktrees/ (Files checked: 0 — фейковый green). Staged-файлы по определению tracked, потому --no-gitignore для pre-commit cspell безопасен и чинит worktree-коммиты.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 12:59:41 +03:00
Дмитрий
9ccd960714
feat(reports): кнопка «Скачать» → signed download URL (F2 frontend)
2026-05-16 12:45:51 +03:00
Дмитрий
a132b93390
fix(reports): download/downloadUrl отклоняют expired-job по expires_at (F2 review fixup)
2026-05-16 12:42:00 +03:00
Дмитрий
7fc5c09ab7
feat(reports): download endpoint + signed URL 24ч (F2 backend)
2026-05-16 12:36:08 +03:00
Дмитрий
d1a5888315
feat(reports): BillingSummaryProvider + isSupported всех 4 типов (F1 закрыт)
2026-05-16 12:28:57 +03:00
Дмитрий
5521d172b6
feat(reports): SourcesSummaryProvider — агрегат сделок по utm_source (F1)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-16 12:21:51 +03:00
Дмитрий
05b8051303
feat(reports): ManagersSummaryProvider — агрегат сделок по менеджерам (F1)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 12:14:49 +03:00
Дмитрий
f0d18dfd95
docs(sprint3c): план Reports F1+F2 — 3 провайдера + download endpoint
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 12:05:58 +03:00
Дмитрий
b5a8ad6e0a
fix(deals): router в DealsViewRedesign.spec + idempotency guard + watch-test (C8/F3 review fixup)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 11:41:09 +03:00
Дмитрий
56b4c3e282
feat(deals): deep-link /deals?openId= из напоминаний и колокольчика (audit C8/F3)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 11:41:09 +03:00
Дмитрий
fbb346feeb
fix(dashboard): скрыть Live-бейдж при ошибке + formatRub guard + test hardening (C1 review fixup)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 11:41:09 +03:00
Дмитрий
3c3fd248e9
fix(dashboard): восстановить tenant-guard в load() + auth.user в тесте (C1 review fixup)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 11:41:09 +03:00
Дмитрий
b6489f7c7d
feat(dashboard): DashboardView на real API /api/dashboard/summary (audit C1)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 11:41:09 +03:00
Дмитрий
1000775df9
fix(dashboard): activity-бакеты в MSK + deltaBlock для leads + test hardening (J3 review fixup)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 11:41:09 +03:00
Дмитрий
2a7d6a91e4
fix(dashboard): runway_days опирается на фикс. 7д-окно, не на range (J3 review fixup)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 11:41:09 +03:00
Дмитрий
582fa8d0f5
docs(rules): Pravila v1.16 — реколлаж ruflo, §12 sub-policy → hard-rule
2026-05-16 11:41:09 +03:00
Дмитрий
a1ae5f9aeb
feat(dashboard): GET /api/dashboard/summary — агрегат KPI/баланса/активности (audit J3)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 11:41:08 +03:00
Дмитрий
621880f586
docs(plan): Sprint 3B dashboard & deep-links implementation plan
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 11:41:08 +03:00
Дмитрий
478f7c37ad
docs(spec): реколлаж ruflo в иерархии — декларация vs фактический рантайм
...
Дизайн-спека приведения нормативки к рантайму: убрать уровень -1 «ruflo entry-point для ВСЕХ задач» (рантайм — 0 задач, рой idle, 0 enforcement); §12 Superpowers и PSR_v1 R0 → обратно hard-rule/top-gate; §14 queen-триггер сохраняется без изменений; ruflo переописывается advisory/automation-подсистемой. Утверждена заказчиком 16.05.2026.
cspell-words.txt: +реколлажирована/реколлажем/фоллбэк.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 11:41:08 +03:00