Дмитрий
64b0a3d944
docs(billing-v2-c): спек C + план реализации (преfflight + VTB)
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-26 20:38:50 +03:00
Дмитрий
9ca75a788a
docs(slepok): spec v0.4 + plan + CLAUDE.md v2.29 + ПИЛОТ — design-only artefacts, прод не затронут (audit session 135a4adf)
2026-05-26 19:21:33 +03:00
Дмитрий
6f70cca90e
docs: spec + plan for hard-rule enforcement (10 rules + override vocab)
2026-05-25 18:10:31 +03:00
Дмитрий
da4ab729df
docs(supplier): spec + 3 plans for webhook reliability (phases 1-3)
...
Investigation 2026-05-25: for tenant client1 (tenant_id=2) on prod liderra.ru:
- 205 leads at supplier (info@lkomega.ru , visit=rt) vs 160 deals on portal
- 82 leads lost (76 via 302-redirect from ValidationException, mostly
non-B-prefix projects: client.carmoney.ru, cashmotor.ru, etc.)
- 37 duplicate deals (CSV-recovered SupplierLead vid=null + later
webhook with real vid "create two Deals because supplier_lead_deliveries
locks on supplier_lead_id, not phone+project)
Three independent fixes, three plans, three deploys:
Phase 1 (low risk): Always JSON 422 for webhook ValidationException
Phase 2 (med risk, billing): merge webhook-after-CSV-recovered into
existing deal, no double-charge
Phase 3 (high risk, migration): accept non-B projects as platform=DIRECT
end-to-end (controller + 4 services + migration)
Phase 3 includes new LeadRouter fallback path: DIRECT-supplier_projects
match Liderra projects via signal_type+signal_identifier directly
(no project_supplier_links pivot required, since psl rows don't exist
for auto-created DIRECT supplier_projects).
Refs: docs/superpowers/specs/2026-05-25-supplier-webhook-reliability-design.md
2026-05-25 16:25:22 +03:00
Дмитрий
26999ca597
chore: working tree cleanup pre-llm-first-router merge
...
Три группы накопившихся auto-правок (НЕ ручные):
1. markdownlint --fix auto-format (~25 .md в docs/superpowers/, docs/security/marketing-vet.md, docs/adr/015, docs/deploy/lkomega-runbook): MD031/MD032 (blank lines around fence/list) + MD004 (bullet markers `+`→`-`). Содержательных текстовых правок 3: ADR-015 bullet, sprint5d-cleanup bullet, router-discipline trailing space.
2. lefthook 2.1.6 → 2.1.8 (package.json + lock): patch-bump, авто-резолвил npm.
3. Observer runtime (docs/observer/): episodes-2026-05.jsonl +420 строк (текущая активность мозга), STATUS.md regen, .pii-counters / .read-counter тики, +2026-05-24-brain-retro.md note.
Цель — разблокировать merge feat/llm-first-router → main (этап 0 плана постановки в боевой). Содержание ветки не трогает.
2026-05-25 14:23:11 +03:00
Дмитрий
b2cbc57533
docs(brain): spec v2.3 + plan v1.2 — coverage announcement (§4.9) + decision confirmed
...
Coverage announcement — новая фича прозрачности (brainstorm 2026-05-25):
заказчик всегда видит чем покрыта задача (skill/node/hook/direct) в прозе
+ TodoWrite. Источник — classifier_output. Enforcement через economy-mode
reminder (economy сохраняется). Flag coverage-annotation-mode (10-й).
Тайминг — в составе overhaul Phase 3.
spec v2.2 → v2.3:
- §4.9 (новое) Coverage announcement — 2 поверхности, формат пометки,
источник, enforcement, flag, тайминг, откат.
- §10 flags table +coverage-annotation-mode (9→10 флагов).
- §11.3 Phase 3 +task coverage announcement.
- §23 (новое) changelog v2.2→v2.3.
plan v1.1 → v1.2:
- DECISION POINT ✅ ПОДТВЕРЖДЁН: economy keep / §12 remove.
- Task 19 +step 8 coverage announcement (economy-mode reminder + Pravila §17
подпункт + memory feedback_coverage_announcement + flag).
brainstorm Q&A: Q1 поверхности=проза+TodoWrite; Q2 состав=skill+node+hook+direct;
Q3 enforcement=convention+reminder; Q4 тайминг=в составе overhaul.
НЕ исполняется (per user — план).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-25 07:31:33 +03:00
Дмитрий
7d31d0be39
docs(brain): plan v1.1 — откат мозга первым + 9 пробелов 0%-аудита
...
v1.0 → v1.1 после полного 0%-аудита плана.
ГЛАВНОЕ: Task 1 = «Откат мозга» — полная инфра + snapshot user-level
(~/.claude/settings.json + hooks/*.py + runtime flags) + dry-run +
END-TO-END SMOKE (тривиальная правка → откат → verify) ДО любой
деструкции. Если откат не зелёный — дальше не идём.
9 закрытых пробелов:
- G3 (КРИТИЧЕСКОЕ): user-level hooks смешивают economy-mode (0%/5%/100%,
СОХРАНИТЬ) и §12 skill-discipline (СНЯТЬ). Task 2 разделяет: snimaet
skill-marker.py+skill-check.py, оставляет economy-*.py, чистит §12 из
economy-state-guard.py + economy-mode.py. DECISION POINT для заказчика.
- G16: brain-retro-opus-reviewer.mjs НЕ существует → Task 18 CREATE
(не «keep from v2.0» как было в v1.0/spec).
- G11: router-accuracy-runner.mjs:11 import classifyByRegex сломается →
Task 10 чинит на regex-fallback модуль.
- G14: registry-to-classification-map.mjs нейтрализуется (Task 4).
- G8/G9: C1/C2 адаптируются рано (Task 6), чтобы lefthook не блокировал
коммиты Task 7-15.
- G5: parser forward-compat к v4 эпизодам после отката (Task 15).
- user-level rollback + episodes preservation в test-rollback.mjs/ROLLBACK.md.
Прочее: test-rollback.mjs использует execFileSync (не execSync — без shell,
без инъекции). 21 задача (было 22 в v1.0, консолидация rollback в Task 1).
Self-review: spec coverage + 16 находок v2.2 + 9 находок аудита плана,
type consistency, 0 placeholders.
НЕ исполняется сейчас (per user «только план»).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-25 06:31:11 +03:00
Дмитрий
2b7a71c5b6
docs(brain): implementation plan фазы 1+2+3 LLM-first router overhaul
...
План из spec v2.2 — 22 задачи (Task 0 pre-flight + 8 phase-1 + 8 phase-2
+ 6 phase-3) в bite-sized TDD-формате.
Phase 1 (foundation+archive): tag + archive scaffold + inventory hooks +
discipline-metrics decision + test-rollback.mjs (TDD) + archive §12/routing-
docs/memory + §17+ADR-016 + cross-refs §12→§17 + flags+ROLLBACK.md.
Phase 2 (classifier): router-config + nodes.yaml capabilities + prefilter
3 группы/manual-override/anchor (TDD) + Sonnet 4.6 classifier+памятка (TDD)
+ missed-activations на nodes.yaml (TDD) + embedding (TDD) + §17 gate (TDD,
D1 continuation-not-exempt) + prehook inheritance+cost (TDD) + parser v4.0
+ C1/C2 adapters + warmup hook + flags flip.
Phase 3 (evidence loop): Stop-hook execution_trace+chain_gaps+inheritance-
copy (TDD) + self_assessment (TDD) + reviewer subagent verify + direct-API
fallback handler + sanity-generator + brain-retro v2 procedure + self-
retrospect skill + analyzer v4 + status-md cost sections + schema v4.3 +
final flags + rollback dry-run verification.
Self-review: spec coverage (8 слоёв + §17 + 16 находок v2.2), 0 placeholders
(кроме намеренного model-ID резолва Task 0/9), type consistency проверена.
Реализация — после Биллинга v2 Спек C. Фаза 4 (distillation) — отдельный
план через ~6 месяцев. НЕ исполняется сейчас (per user).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-25 06:08:08 +03:00
Дмитрий
af6c328933
docs(billing-v2-c): спек C + план реализации (preflight + VTB)
...
Спек: preflight баланса на cut-off 18:00 MSK (защита от заказа лидов
клиентам без денег) + VTB-эквайринг через TopupGateway-интерфейс
(безнал полный, СБП/карты dev-заглушки до Б-1).
План: 6 фаз TDD-разбивкой, ~30 задач, subagent-driven-development
с git-verify-протоколом per Pravila §15.1.
Брейнсторм 24.05.2026, реализация стартует 25.05.
Lint: гибрид «Преfflight»→«Префлайт» (опечатка предыдущей сессии),
+6 терминов в cspell (Atol/uniqid/ОФД/брейнсторме/префлайт/Префлайт).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-25 03:09:07 +03:00
Дмитрий
352354e30b
docs(billing): plan — sync after Phase 1 impact-checks (RED FLAG: webhook_dedup_keys жив)
...
Phase 1 impact-check выявил что webhook_dedup_keys использует HistoricalImportService
(CSV-канал) для идемпотентности — таблицу и модель НЕ удаляем.
Изменения в плане:
- Task 1.8: заполнена финальная таблица (13 удалить, 2 оставить).
- Task 3.0 NEW: чистка tenants.webhook_token из 7 тест-файлов + фабрики + Tenant model.
- Task 3.3 CANCELLED: WebhookDedupKey.php остаётся.
- Task 4.1: миграция БЕЗ DROP webhook_dedup_keys; verify-команды скорректированы.
- Task 4.2: db/schema.sql baseline сохраняет CREATE TABLE webhook_dedup_keys.
2026-05-24 15:30:38 +03:00
Дмитрий
136bad4db2
docs(router-stage3): план — 3 follow-up фикса с TDD-шагами
...
Декомпозиция: Task 1 (UTF-8 helper + 3 хука), Task 2 (state-enricher),
Task 3 (parser enrichment), Task 4 (smoke + continuity + push).
Subagent-driven последовательно: Task 1-3 Sonnet, Task 4 controller Opus.
Worktree от свежего origin/main + junction'ы. Финал — push на main FF.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-24 15:20:23 +03:00
Дмитрий
36ada767f4
docs(plan): implementation plan for controller-offload agents (3 tasks)
...
3-task TDD-ish plan to create two new project agents:
- Task 1: .claude/agents/normative-sync.md (full Sonnet 4.6 system prompt)
- Task 2: .claude/agents/prod-deploy-validator.md (8 SSH checks + quirks 104-108)
- Task 3: First dry-run smoke test for both + capture lessons in memory
Spec: docs/superpowers/specs/2026-05-24-controller-offload-agents-design.md (71a5dd6 ).
Also: +2 cspell-words (маппинге, dogfooded).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-24 15:19:01 +03:00
Дмитрий
4dbf78b204
docs(billing): plan — legacy ProcessWebhookJob removal implementation
...
7 фаз: Phase 0 worktree → Phase 1 impact-checks (8 grep'ов) →
Phase 2 удаление core (job + 1 dedicated test) →
Phase 3 удаление обвязки (controller + route + model + conditional
NotificationService методы + Mailable) →
Phase 4 DROP-миграция БД (3 таблицы + 2 колонки tenants) →
Phase 5 регрессия + code review →
Phase 6 merge + deploy + 7д наблюдение.
Все conditional-блоки гейтятся на impact-checks Phase 1
(финальный список — Task 1.8 inline).
Spec: 2026-05-24-legacy-direct-webhook-removal-design.md
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-24 15:05:19 +03:00
Дмитрий
a68ea3964c
Merge remote-tracking branch 'origin/feat/router-overhaul-stage-2-measurements' into worktree-router-stage3-enforcement
2026-05-24 09:17:18 +03:00
Дмитрий
688da5d38b
docs(stage3): spec amendment (Task 0a/0b + chain governance) + implementation plan
...
Spec amendment 2026-05-24:
- Task 0a — доменная разметка реестра (keyword-триггеры на 30+ узлах)
- Task 0b — цепочки L1-L16 в рекомендациях classifier'а
- Chain governance — правила создания/изменения цепочек (без auto-правок Claude)
Plan этапа 3: 10 тасков, 2 checkpoint'а (Phase A accuracy review,
24h warn-only window перед enforce). Phase A — classifier без блокировок.
Phase B — enforcement. Phase C — continuity + push.
Triggered by заказчик 2026-05-24 после закрытия этапа 2:
«есть скилы для биллинга/маркетинга/безопасности — но не используются»
+ «как создаются и меняются цепочки».
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-24 09:06:37 +03:00
Дмитрий
b8adeeb9fd
docs(stage2): commit plan + observer evidence from this session
...
План этапа 2 (8 тасков subagent-driven) + эпизоды наблюдателя
текущей сессии разработки + PII-counters file.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-24 07:50:05 +03:00
Дмитрий
3fdfd92c9e
docs(billing-v2): спек B — план реализации (политика дублей)
...
8 задач: baseline → таблица-замок supplier_lead_deliveries → раздача
по клиентам (LeadRouter DISTINCT ON) → удаление DuplicateDetector из
обоих джобов → замок insertOrIgnore → тесты (model-agnostic) → регрессия.
Вариант B. Заякорено на always-rub LedgerService (Спек A в origin/main).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-23 20:44:51 +03:00
Дмитрий
9bbc653640
docs(plan): admin tenant balance edit implementation plan
2026-05-23 20:02:37 +03:00
Дмитрий
6c6939a473
feat(audit): hole #2 partitioning APPLIED on prod — rewrite SQL + docs (Phase B/C)
...
Партиционирование 7 audit-таблиц применено на боевой liderra.ru 23.05.2026.
Закрывает ПОСЛЕДНЮЮ (7-ю) дыру аудита журналирования — эпик завершён.
* `db/migrations/2026_05_23_hole2_partition_audit_tables.sql` — фактический
rewrite-SQL применённый на проде (источник истины = pg_dump прода, НЕ schema.sql):
- 7 таблиц → PARTITION BY RANGE (created_at|received_at), PK→(id, partition_key)
- 6 месячных партиций _yYYYY_mMM (m02..m07) + DEFAULT на таблицу
- FK на webhook_log удалены (W1)
- SET session_replication_role=replica при копировании → исходные log_hash
сохранены as-is (НЕ пересчёт): иначе триггер под postgres BYPASSRLS построил
бы global-within-partition chain ≠ per-tenant chain прода → false breach
- RLS tenant_isolation + оба триггера (audit_chain_hash + audit_block_mutation)
+ sequences + GRANT'ы воспроизведены из реального pg_dump прода
- retention seeds в формате команды: partition_retention_months_<table>
* Метод деплоя (max-safety, клиент info@lkomega.ru не пострадал):
- РЕПЕТИЦИЯ на liderra_rehearsal (restore прод-dump) ДО боя — counts/lkomega-t2/
chain-fingerprints совпали байт-в-байт, audit:verify-chains intact
- На боевом: backup pre-partitioning-20260523-162357.dump → apply в транзакции →
verify (counts 414/275/34/9/4, lkomega t2 414/275 цел, 7×7 партиций) →
partitions renamed _YYYY_MM→_yYYYY_mMM → retention keys → verify-chains intact
rc=0 → portal HTTPS 200
* ПИЛОТ.md §6 п.11 — #2 ✅ + известные нюансы (create-months под app-роль / schema.sql drift)
* tracker — все 7 дыр ✅ , эпик завершён
NB: db/schema.sql разошёлся с реальным продом по колонкам 4 таблиц
(activity_log/webhook_log/balance_transactions/pd_processing_log) — прод-rewrite
построен из pg_dump прода. Ресинхронизация schema.sql↔prod — отдельная задача.
Phase A (tooling: VerifyAuditChains per-partition + PartitionsDropExpired +
MonthlyPartitionManager whitelist + schema.sql v8.31) уже на main (60ab5be3 ).
2026-05-23 19:30:32 +03:00
Дмитрий
60ab5be3eb
feat(audit): partitioning 7 audit-таблиц по месяцам (hole #2 Phase A)
...
Закрывает последнюю дыру #2 аудита журналирования. Phase A (dev) — миграция
схемы + retention tooling. Phase B (прод-rewrite через SQL под postgres) —
отдельным шагом с явным approve.
Решения заказчика:
* Scope: все 7 таблиц (auth_log, activity_log, tenant_operations_log,
webhook_log, balance_transactions, pd_processing_log, saas_admin_audit_log)
* FK на webhook_log: W1 — удалить FK от failed_webhook_jobs+rejected_deals_log
* Retention defaults: auth:24м, activity:36м, tenant_ops:24м, webhook:3м,
balance:84м, pd:36м, saas_admin:84м. Cron Sundays 03:00 МСК
* Hash-chain: per-partition (audit_chain_hash трг через TG_TABLE_NAME уже
работает per-partition; совместимо с hole #1 per-RLS-scope fix)
Phase A:
* db/schema.sql v8.30→v8.31: 7 audit-таблиц на PARTITION BY RANGE,
PK→(id, partition_key), +7 retention seeds в system_settings,
FK от failed_webhook_jobs/rejected_deals_log удалены
* MonthlyPartitionManager: PARTITIONED_TABLES → ассоциативный array
(name => partition_key), 2 → 9 таблиц
* PartitionsCreateMonths: автоматически покрывает все 9
* load_initial_schema: после schema.sql вызывает Artisan
partitions:create-months --ahead=2 (без этого первый INSERT падает)
* 2026_05_22_000001_tenant_operations_log: idempotency guard
* VerifyAuditChains: per-partition scan через pg_inherits;
fallback на single-scope для не-партиционированной таблицы;
per-RLS-scope partition_clause сохранён внутри каждой партиции
* AuditChainBreachMail: +partitionName param (NULL=fallback на tableName)
* PartitionsDropExpired (новая): cron Sundays 03:00 МСК, retention из
system_settings, dry-run mode, safety guard retention=0
* SchedulerHeartbeatTracker +partitions:drop-expired (10080 мин)
Без Laravel-миграции для прода — она оставляла БД пустой при migrate:fresh.
Подход: schema.sql декларирует партиционированные + ad-hoc SQL под postgres
для прод-rewrite (отдельный commit + ручной деплой + pg_dump backup).
Тесты: 1219/1231 (35/35 hole #2 specs, 88 assertions). 3 fail —
pre-existing AdminPdSubjectRequestsControllerTest::executeErasure_*
(FK actor_admin_user_id после partitioning pd_processing_log, отдельная
задача для hole #4 follow-up, не блокирует).
cspell +2 слова (партиционировать, дёшева). Pint --fix чистый.
Spec: docs/superpowers/specs/2026-05-23-hole-2-audit-partitioning-design.md
Plan: docs/superpowers/plans/2026-05-23-hole-2-audit-partitioning-plan.md
2026-05-23 15:50:37 +03:00
Дмитрий
aad48de6f6
docs(plan): router overhaul этап 1 — машиночитаемый реестр (13 tasks)
...
Plan для этапа 1 (Справочник) router discipline overhaul. 13 атомарных задач,
TDD-стиль, экзотические шаги (как парсить Tooling) — ручные с верификацией.
Структура:
- Pre-flight (PF-1..3): sync + npm deps + tools/ структура.
- Phase A (Task 1-4): JSON Schema + 3 пилотных узла + registry-load.mjs
+ 11 unit-тестов.
- Phase B (Task 5-7): registry-render.mjs + auto-region маркеры
+ snapshot-тесты.
- Phase C (Task 8-10): 83 узла + L1-L16 chains + diff-check совместимости.
- Phase D (Task 11-13): lefthook job warn-only + полный README + STATUS.md
continuity + memory tracker + PR.
Поведение Claude не меняется — реестр пока ничего не enforce ит.
Это фундамент для этапов 2-4.
cspell: +валидируется, +рендериться.
Spec: docs/superpowers/specs/2026-05-23-router-discipline-overhaul-design.md
Self-review встроен в конец плана.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-23 13:54:27 +03:00
Дмитрий
705608b5ad
docs(plan): observer parser skill/hook expand — 5-task TDD plan
...
Spec terminology aligned with codebase: recommended_skill →
recommended_node (classification-map хранит Tooling IDs `#NN`, не имена
skill'ов). Test runner — vitest (npm run test:tools), не node --test.
Missed-activations filter тоже поднимается до >=2.
5 atomic TDD commits: hook-resolver, recommended-node, parser+smoke,
analyzer factor-axis, brain-retro template.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-23 13:10:06 +03:00
Дмитрий
7a9fef3785
docs(pilot): закрытие #6 + #3+#5 + #4 на боевой (6 из 7 дыр аудита, 23.05 вечер)
...
ПИЛОТ.md §6 п.11 — детали закрытия 3 дыр в одной сессии:
* #6 scheduler heartbeat (push c76038d0+33462bf5, schema v8.30,
12 baseline rows, warn-only при отсутствии admin)
* #3+#5 расширение incidents:watch-failures (push 527f628a ,
+failed_jobs, 3 правила spike/daily-total/persistent)
* #4 152-ФЗ минимум удаления (push 77e98afa + Eloquent fix f5482f4 ,
backend + frontend build deploy, smoke OK)
Master overview tracker обновлён: 6/7 закрыто, #2 partitioning
сознательно отложена на отдельную сессию (большая миграция БД).
UI-приёмка #4 (визуальная проверка вкладки в админке) — за заказчиком.
cspell: +3 слова (алертил/бэкапом/залогиненную).
2026-05-23 12:34:20 +03:00
Дмитрий
970648b3fd
docs(plan): Billing v2 Spec A implementation plan
...
Детальный TDD-план реализации Спека A (двухфазный релиз).
Phase A — 24 задачи (code + data migration, 1 PR):
- A.1-A.13: backend (TYPE_MIGRATION, BalanceToLeadsConverter, упрощение LedgerService,
обновлённый wallet API, runwayDays через конвертер, transactions без refund +
display_amount_rub, AdminPricingTiers bcmul, charges export JOIN,
artisan migration command, seeders cleanup)
- A.14-A.21: фронт (Wallet/BillingTransaction типы, BalanceCard rewrite,
BillingView обрезка, новый TierPricesPanel, TransactionsTable без Возвраты,
InvoicesTable ₽, ChargesTab без Источник)
- A.22-A.24: регрессия + Playwright smoke + PR
Phase B — 3 задачи (schema cleanup, 1 PR, ≥72ч после Phase A в проде):
- B.1: миграция DROP balance_leads + 5 колонок tariff_plans
- B.2: sync db/schema.sql + CHANGELOG_schema.md
- B.3: регрессия + PR
Каждая задача — TDD: failing test → verify fail → impl → verify pass → commit.
Все мутации денег — bcmath. Pravila §15.1: субагенты для git-задач — Sonnet/Opus, не Haiku.
cspell: +1 слово (ревьюю).
2026-05-23 11:47:16 +03:00
Дмитрий
cfe94d9178
fix(projects): closable-chips на селекторах регионов — удаление по одному
...
Раньше чтобы убрать один регион из выбора, приходилось сбрасывать все
и выбирать заново. Добавлен closable-chips на v-autocomplete регионов в
трёх местах: карточка создания проекта (NewProjectDialog), панель
редактирования (ProjectDetailsDrawer) и массовое изменение регионов
(RegionsBulkDialog). Теперь у каждого чипа есть крестик.
Покрыто Vitest: closableChips=true на каждом селекторе.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-23 10:21:10 +03:00
Дмитрий
3fde7f1dd5
docs(plans): 7-hole audit closure — overview + hole #7 plan (+4 RU cspell words)
2026-05-23 09:38:51 +03:00
Дмитрий
5df34a61eb
style+done(p2): pint formatting + P2 plan DONE marker
2026-05-22 18:53:11 +03:00
Дмитрий
d3197095b7
Merge remote-tracking branch 'origin/main' into feat/supplier-group-sync-fix
2026-05-22 18:17:32 +03:00
Дмитрий
dc7b136a0b
docs(plan): C1 marketing-tooling implementation plan
...
13 задач (Phase 0 IS9-вет → Phase 1 установка → Phase 2 нормативка →
Phase 3 верификация), #74–#83, subagent-driven по паттерну A8/finance.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-22 17:59:40 +03:00
Дмитрий
9fa187780b
style+fix(auth): pint formatting + nullsafe.neverNull fix + P1 plan DONE marker
2026-05-22 17:43:18 +03:00
Дмитрий
1be2d62f9e
feat(supplier): group recompute + pause + source-change + root auto-link
...
Закрывает замечания заказчика (22.05.2026) по проектам/поставщику. Все 4 куска
имеют общий корень: online-синхронизация одного проекта работала с данными ЭТОГО
проекта, а не пересчитывала всю «группу» (проекты разных tenant'ов с одним
identifier) — отсюда переплата ×3 при изменении лимита, затирание регионов/дней
группы, неотправленная пауза, и осиротевшие проекты при смене источника.
1. Групповой пересчёт в SyncSupplierProjectJob::handleOnline (#1 при изменении,
#2 дни, #3 регионы, C2/C3): union regions, computeOrder eligible,
distributeForPlatform — те же расчёты, что в ночном syncGroup. Online и
ночной теперь дают идентичный supplier-state, расхождение устранено.
2. Пауза #10 :
- ProjectController::toggleActive — диспатчит SyncSupplierProjectJob;
- ProjectService::bulkPauseResume — диспатчит sync per project;
- DTO status вычисляется из groupActive (paused когда группа без активных);
- sp.inactive_since пишется при пересинке (для UI/DTO консистентности).
3. Смена источника #8/#9 в ProjectService::update:
- до update снимается старый buildUniqueKeyAgnostic;
- если изменился — отвязываем старые supplier_projects от этого project
(pivot + legacy FK), DeleteSupplierProjectJob удаляет их у поставщика
при отсутствии других потребителей, либо пересинкает агрегат.
4. Перенос auto-link корня из feat/root-domain-auto-link: новый
App\Support\SupplierIdentifier::extractRootDomain + блоки auto-link в
обоих джобах (online + nightly).
Тесты: TDD на каждый кусок. SyncSupplierProjectJobTest +2 (group recompute,
pause). ProjectUpdateDedupTest +1 (source detach + cleanup dispatch).
ProjectsActionsTest +2 (toggle + bulk pause dispatches).
Регрессия: 186/186 passed (Project/Plan5/Projects + Supplier), 502 assertions.
Деплой: дельтой на боевой (база = root-domain ветка; на боевом джобы СТАРЕЕ
main, deliver через копию изменённых файлов + config:cache + restart queue).
План: docs/superpowers/plans/2026-05-22-замечания-проекты-чеклист.md
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-22 16:52:30 +03:00
Дмитрий
a575d55e9a
docs(plans): mark P0 audit-pd-impersonation DONE
2026-05-22 16:50:22 +03:00
Дмитрий
9bf97efb0b
docs(audit): comprehensive audit journaling closure — 3 plans + PILOT update
...
Sweeping audit of portal journaling (static + config + live dev/prod data)
found 9+ holes; three TDD plans authored to close them:
- P0 (152-ФЗ): docs/superpowers/plans/2026-05-22-audit-pd-impersonation.md
Empty pd_processing_log despite 417 deals on prod; impersonation outside
saas_admin_audit_log. 13 tasks + self-review.
- P1 (auth + attribution): docs/superpowers/plans/2026-05-22-audit-auth-attribution.md
auth_log only covers login; logout/2FA/password-reset/register missing.
activity_log 412 rows all with user_id=NULL. 9 tasks.
- P2 (operational + auto-incidents): docs/superpowers/plans/2026-05-22-audit-operational.md
Project/API-key/webhook-URL mutations unlogged; inbound supplier webhook
not in webhook_log; incidents_log not auto-populated (25k failed_webhook_jobs
passed silently). New tenant_operations_log table + cron watcher. 10 tasks.
ПИЛОТ.md §6 +pp.7-9 with plan references and priority order.
Execution: subagent-driven, P0 → P1 → P2 sequential (DealController in P0+P1).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-22 14:50:07 +03:00
Дмитрий
9ae505b490
docs(plan): импорт активных проектов lkomega → info@lkomega.ru — план реализации
...
10 TDD-задач: SupplierRegions::mapFromSupplier (обратная карта) + SupplierImportMapper
(pure-хелперы) + SupplierProjectImporter (buildPlan/commit) + artisan-команда
supplier:import-projects (dry-run/--commit) + runbook деплоя. Без записи на портал.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-22 10:17:04 +03:00
Дмитрий
1933129497
docs(security): replace Enlightn ( #70 ) with Ward per IS9 vet + L13
...
Enlightn abandoned (Packagist) + no Laravel 13 support. User chose to find
a replacement. Ward (Eljakani/ward, Go, MIT, 316★) — same niche, Go binary
so no Laravel-version dependency. infosec-vet.md §ПЕРЕСМОТР #70 + spec/plan
amendment notes. Node #70 keeps number/niche; tool + type change.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-21 14:32:49 +03:00
Дмитрий
b35a8c4311
docs(security): A8 infosec-tooling spec + implementation plan
...
Эпик A8 «Информационная безопасность»: +6 узлов (#68 OWASP ZAP MCP,
#69 Nuclei MCP, #70 Enlightn, #71 pdn-152fz-audit, #72 threat-model,
#73 security-go-live). Spec + 13-task plan. Worktree off origin/main 3b6992d .
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-21 14:32:48 +03:00
Дмитрий
4f16cc3c83
docs(superpowers): plan — observer missed activations (Pravila §16.4 v1.36)
...
Implementation plan for conditional missed-activation detection.
Architecture: hybrid mapping (manual classification map + auto-extracted
dormancy from Tooling). 12 tasks, TDD-driven.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-21 09:59:56 +03:00
Дмитрий
472ea8c75c
docs(plan): project delete + source dedup + human errors implementation plan
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-21 06:31:45 +03:00
Дмитрий
4f5cf263f6
docs(observer): chain attribution L1-L13 spec + plan + brain-retro #2
...
Brain-retro #2 (весь май) → кандидат: атрибуция canonical chains L1-L13.
Spec + 9-task TDD plan (chain_ref в primary_rationale, C6 sync-контролёр,
ретрофилл). Исполнение разблокировано — epic observer-instrument-expansion
влит в main. +cspell словарь.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-21 04:42:41 +03:00
Дмитрий
01562afd31
docs(backend): A1 backend-tooling spec + plan + cspell words
...
Spec: docs/superpowers/specs/2026-05-20-a1-backend-tooling-design.md
Plan: docs/superpowers/plans/2026-05-20-a1-backend-tooling.md
4 узла A1 (#64-67): Rector / PHP Insights / laravel-backend-patterns / NightOwl.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-21 04:21:26 +03:00
Дмитрий
b0ce510155
docs(observer): retro note + epic plan v1.1 (Task 21)
...
Closes the «Observer instrument expansion v2» epic. The retro note is
the source of all #1-#19 references in commit messages; the plan is
the procedural source (with REVISION v1.1 after parallel-session rebase).
Both kept in repo for traceability of the 20-commit epic.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-20 13:47:45 +03:00
Дмитрий
9729909c31
docs(supplier): fix naked app/ refs to ../../../app/ in failover plan (lychee gate)
2026-05-20 13:36:55 +03:00
Дмитрий
d1ddd28250
docs(plan): Plan 4 (админка + ЛК) — переделка миграции проектов
...
5 TDD-задач: тумблер режима экспорта (endpoint + UI), экран «Проекты у поставщика»
(кто заказывал/дата последней поставки + bulk-delete бэк/фронт), ЛК require-region
UI-гейт + «Вся РФ» предупреждение/подтверждение, полная регрессия. Финальный из
4 планов эпика. +cspell.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-20 10:09:26 +03:00
Дмитрий
34458df474
docs(plan): Plan 3 (экспорт + заказ) — переделка миграции проектов
...
8 TDD-задач: R-SAVE live smoke (гейт), SupplierExportMode тумблер, формула заказа
max(наиб,ceil(Σ/3)) + убран split, saveProjectMultiFlag R5/R6/R7 (захват 3 id),
SyncSupplierProjectsJob группировка источник×субъект + pivot, онлайн mode-aware
sync + grouping-хелперы, крон 18:00, регрессия. Третий из 4 планов. +cspell.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-20 10:09:24 +03:00
Дмитрий
467f1cdbf2
docs(plan): Plan 2 (входящее распределение) — переделка миграции проектов
...
5 TDD-задач: RegionTagResolver (тег субъекта -> код, зеркало regions.ts),
LeadRouter на pivot без phone-фильтра, LeadDistributor cap=3 (seedable RNG),
RouteSupplierLeadJob (cap + deal.subject_code из тега), регрессия.
Второй из 4 планов эпика. +cspell. Реализация не начата.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-20 10:09:22 +03:00
Дмитрий
cd2353b57d
docs(plan): Plan 1 (фундамент данных) — переделка миграции проектов
...
7 TDD-задач: supplier_projects.subject_code + per-subject unique (NULLS NOT
DISTINCT), pivot project_supplier_links (замена 3 FK-слотов), deals.subject_code,
seed supplier_export_mode, belongsToMany связи, backfill pivot, регрессия.
Первый из 4 планов эпика (см. spec §3). +cspell сид/бэкофилл. Реализация не начата.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-20 10:09:20 +03:00
Дмитрий
de11da2b06
docs(finance): C6+C7 finance-tooling implementation plan
...
11 задач в 3 фазах: Ф1 billing-audit скил (C6), Ф2 finance plugin enable +
ru-tax-accounting скил (C7), Ф3 нормативка (Tooling/PSR/Pravila/CLAUDE) +
роутер (routing-off-phase L13 + router-procedure) + наблюдатель (9-атрибутные
блоки + C1/C2) + карта (+3 узла) + ADR-012 + push.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-20 09:19:50 +03:00
Дмитрий
426983ffaa
docs(map): iter9 implementation plan
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-20 04:59:29 +03:00
Дмитрий
8df5a3fe00
docs(supplier): plan for migration follow-up — HTTP-200 login detect + form rewrite + 3-tier smoke
2026-05-19 17:29:52 +03:00
Дмитрий
702c2ff7b5
fix(brain): correct vitest command in plan — run from app/
...
The config's include `../tools/*.test.mjs` resolves relative to its
own dir (app/), not cwd. Baseline verified 2026-05-19 from app/:
11 files, 169 tests passing, 0 failures.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-19 16:23:44 +03:00