Дмитрий
c4c2afd111
docs(plans): router-gate v4 master coordination plan (9 streams, parallel sessions)
...
Master plan orchestrates 9 streams (A-H + checkpoints) для параллельного
multi-session запуска. Каждый stream работает над disjoint set файлов
в tools/ или docs/ — 0 conflicts по конструкции.
Streams:
- A: Pure decision modules (8 файлов, ~250 unit tests) — independent
- B: Bash/PowerShell content rules — independent (stub path-norm)
- C: Static scan + framework boot + Glob F8 + MCP classifier — independent
- D: LLM-judge Layer 4 (multi-judge + per-tool + response scan) — independent
- E: AskUser parser + subagent return scanner — independent
- F: VM-sandbox setup (user hands-on) — independent
- G: Cleanup 5 v3.9 hooks + settings.json register — sequential after A-E
- Smokes 1-9 user-run — sequential after G
- H: Brain-retro Table 16-17 + recovery docs + Pravila/PSR/Tooling sync — sequential
Wall-clock: 16-23h parallel (vs 49-65h sequential).
User chose Subagent-Driven execution в параллельных сессиях.
Each parallel session invokes writing-plans для своего stream sub-plan'а,
затем subagent-driven-development для реализации.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-29 18:47:21 +03:00
Дмитрий
e964d70c28
docs(plans): ADR-018 Stage 5 follow-up — AuditRebuildChain per-tenant fix
...
8 TDD tasks (~день кода): extract shared AuditChainConfig, refactor VerifyAuditChains (regression-safe), failing tests для multi-tenant/BYPASSRLS/single-row, rewrite AuditRebuildChain через LAG OVER (partition_clause ORDER BY id) симметрично verify, активация ADR-018 enforcement rules, Pint/Larastan/Pest --parallel smoke, handoff для прод-cleanup activity_log_y2026_m05 через gh workflow run artisan-run.yml. Self-review GREEN на spec coverage / placeholders / типы. Execution mode: subagent-driven.
2026-05-29 15:56:35 +03:00
Дмитрий
8b60a18298
plan(router-gate): 51-task implementation plan (audit-integrated)
...
Master implementation plan covering:
- 6 phases per spec §8 Этапы (1 / 1.1-1.8 / 2 / 2.1.0 smoke / 2.1
subagent inheritance / 2.2 constraints + block-file / 2.3
branch-switch / 3 settings.json / 4 recovery / 6 brain-retro)
- 51 TDD tasks with bite-sized 3-5 steps each
- All 8 MUST critical inline fixes integrated (CRITICAL-1/3/4/5/6/8/9/10)
- All 5 SHOULD-FIX findings tasked (vitest globalSetup / git format-patch /
approved_action_pattern / chain reset organic-only / chain-state
malformed fail-CLOSE)
- 5 DOS findings tasked (D-1/2/3/8/9) + 2 deferred (D-7 subagent
reader-writer lock, partial coverage; full split deferred to refinement)
Architecture: single PreToolUse hook tools/enforce-router-gate.mjs
+ PostToolUse handler tools/router-gate-post.mjs. Pure decision
functions in tools/router-gate-{decide,bash,askuser,path,state,
static-scan,quality,chain,coverage,cache,config,subagent}.mjs +
thin I/O wrapper. 10 state files at ~/.claude/runtime/*.
Execution: subagent-driven-development (recommended) или
executing-plans inline. Plan self-review verified all 63 spec
design decisions + 13 audit-driven decisions covered.
Source spec: 2026-05-29-router-gate-hard-wall-design-condensed.md
(commit 71b07e52 , audit-integrated).
Audit report: 2026-05-29-router-gate-condensed-adversarial-audit.md
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-29 10:06:06 +03:00
Дмитрий
0067174154
docs(audit): mark Tasks 1-3 complete, add prod deploy instructions
...
Tasks 1-3 DONE on branch worktree-agent-acf422b86772ab536:
- Task 1 (06fbb238): race condition test (pcntl skip + pg_locks advisory check)
- Task 2 (41fb0d94): migration — pg_advisory_xact_lock in audit_chain_hash
- Task 3 (7081f2a7): audit:rebuild-chain command + 4 GREEN tests
Task 4 updated with factual prod deploy steps:
- merge worktree branch to main + deploy.yml
- artisan-run whitelist needs audit:rebuild-chain in MUTATING_RE
- --force flag required (non-interactive CI mode)
- consecutive_failures reset after verified clean chains
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-29 09:20:57 +03:00
Дмитрий
c454a3bedd
docs(plan): update Task 4 with actual deployment commands (no migrations needed)
...
Task 4 уточнён: нет миграций (только PHP), fast-fail активируется сразу после
деплоя. Добавлены конкретные gh workflow run команды для cleanup (Steps 3-4 из
sql-runner.yml) и верификации шторма + incidents алерта. Галочки [ ] оставлены
(задача контроллера, не агента).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-29 09:11:28 +03:00
Дмитрий
bf181350ca
docs: stage 5 day 1 handoff + 2 fix plans for findings 1 and 2 (audit-chain race + webhook storm) with PII masks
2026-05-29 07:02:14 +03:00
Дмитрий
5c02d33cce
feat(stage5): daily monitor workflow + remove non-existent partitions:list from artisan-run whitelist + checklist refinement (GitHub-cron 06:00 UTC daily 29.05-04.06 runs scheduler:check-heartbeats + incidents:watch-failures + migrate:status + 4 SQL signals from incidents_log/project_routing_snapshots/failed_webhook_jobs/scheduler_heartbeats; window auto-stops after 2026-06-05; result to job summary + artifact)
2026-05-29 05:42:30 +03:00
Дмитрий
c95445de47
plan(router-discipline): Level 1+2 implementation plan
...
5-task plan to close 3 enforcement gaps surfaced by brain-retro #10 :
1. Narrow 'recovery' override scope (5→2 categories)
2. Narrow 'ремонт инфраструктуры' override scope (11→3)
3. Per-rate-window in enforce-override-limit (5/10min)
4. Lower classifier-match threshold 0.8→0.6 + inline router-skip
Driver: 679 override events on 2026-05-28 vs 12 baseline on 25.05.
User selected option B (Level 1+2) after brain-retro #10 analysis.
All 4 implementation tasks completed via subagent-driven workflow
(commits 09f6e332 , 029dbe50 , 2b23a1f2 , 726c2121 ).
Final regression 1179/1179 GREEN. Plan saved post-implementation.
Also: cspell-words.txt += 'суппрессить' (project term used in plan).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-28 17:55:58 +03:00
Дмитрий
98dc24b33f
docs(plan): Phase 4 router-hooks — Semgrep-security hook + chain-hook measurement
2026-05-28 13:23:04 +03:00
Дмитрий
4d7e9e338b
docs(session 2026-05-28): brain-retro 8/9, self-retrospect, sanity, Phase 1-3 plans
...
Groups documentation produced during 2026-05-28 brain-retro session:
retro notes 8 (carryover) and 9, self-retrospect 1, sanity check JSON,
three Phase plans for router-hooks fixes. All implementation already
pushed in earlier commits — this commit groups artifact metadata.
Plus typo fixes in self-retrospect (agregatov, seryj) and cspell vocab
extensions for session-specific terms (PAMYATKA / procs / russian verbs).
Pure documentation. No code, no normative drift.
2026-05-28 12:26:05 +03:00
Дмитрий
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