Commit Graph

17 Commits

Author SHA1 Message Date
Дмитрий 9d9553d863 fix(research-tooling): gate read_only + perplexity via aitunnel base URL
Закрывает spec-gap Perplexity Pack — enforce-mcp-classification default-блокировал
неклассифицированные MCP-инструменты. Добавлены mcp__perplexity__*, mcp__exa__*,
mcp__firecrawl__* как read_only (ADR-019 постура, решение владельца 2026-06-14).
TDD RED-GREEN, регрессия tools-only 3931 passed / 2 skip.

.mcp.json: PERPLEXITY_BASE_URL=https://api.aitunnel.ru/v1 — роутинг sonar через AITUNNEL.
Live-smoke перезапуском: perplexity (sonar-pro), exa, firecrawl — все три GREEN.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 13:57:41 +03:00
Дмитрий 9e6d35710c feat(research): Perplexity Pack — вет IS9 + перенос 3 MCP-серверов research-tooling (plan-v13, owner waiver)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 12:47:49 +03:00
Дмитрий 2993d2f617 chore(mcp): disable marketing MCP servers (metrika/wordstat/telegram)
Свёрнуты в _disabled note (restorable via git + рецепт восстановления в файле).
Маркетинговые серверы из github:-исходников с авто-генерируемыми схемами
(wordstat — 128 tools из Яндекс.Директа) — главный подозреваемый в API 400
tools.110/113, ронявшем субагентов при bulk-load всех инструментов
(subagent-driven-development). Off-phase, без OAuth-токенов не стартовали —
потерь для текущей работы нет.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 12:26:55 +03:00
Дмитрий d581ca0c31 fix(c1): post-integration sweep — vetted github sources + role corrections
- .mcp.json: #78/#79 → github: source URLs (revert subagent npm substitution
  to IS9-vetted github:atomkraft/yandex-metrika-mcp + github:SvechaPVL/yandex-mcp);
  Tooling §4 refs corrected (§4.53/§4.54); behavioral Direct-mutation lock noted.
- Pravila §13.2 v1.39 entry: «Tooling v2.27+» → «v2.23+» (typo).
- routing-off-phase: #74/#75/#76 descriptions fixed (marketing = Anthropic plugin,
  marketingskills = vendored community, brand-voice = Anthropic partner — subagent
  narrative confusion in source).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 17:59:47 +03:00
Дмитрий 579a55f1ee feat(c1): Metrika/Wordstat/Telegram MCP #78-80 + Postiz #81 skeleton + C1 home doc 2026-05-22 17:59:46 +03:00
Дмитрий 9ada842bdc feat(deals/drawer): inline status picker — статус-chip кликабельный, без мутации props
UX-request 18.05.2026 (п.3):
- DealDetailHero: v-chip → v-menu со списком всех статусов из lead_statuses
  store; форма и цвет chip'а не меняются
- DealDetailBody: emit 'status-changed' наверх (без мутации props.deal)
- DealDetailDrawer: forward события наружу
- DealsView: onDrawerStatusChanged → optimistic update dealsState + PATCH
  /api/deals/{id} + rollback
- KanbanView: onDrawerStatusChanged → перенос карточки между колонками
  dealsByStatus + transitionDeals + rollback на ошибку

Vue правило vue/no-mutating-props соблюдено (логика в parent'е, не в Body).

Vitest 5 файлов / 38 passed на затронутых; build 2.29s.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 15:34:07 +03:00
Дмитрий 4ec83457ad @
feat(a3): register openapi-mcp-server in .mcp.json

openapi MCP server (@ivotoby/openapi-mcp-server v1.14.0, MIT, stdio) —
отдаёт docs/api/openapi.yaml как MCP-ресурс/тулы. Smoke verified
(npx --help, native-Windows OK). Конфиг — env-vars API_BASE_URL +
OPENAPI_SPEC_PATH (README stdio-форма).

Task 2 плана A3 integration-tooling.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@
2026-05-17 15:20:43 +03:00
Дмитрий b996a37e34 feat(a4): register Universal Icons MCP #45 in .mcp.json
Off-phase A4 design-tooling. Smoke verified post-reload: health_check OK, get_icon home/lucide returns a valid framework-neutral SVG. Comment ADR ref corrected ADR-004 -> ADR-006.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 14:07:25 +03:00
Дмитрий a00d82ef0b feat(c9): enable GitHub MCP projects toolset for Projects v2 (GH1) 2026-05-17 09:10:44 +03:00
Дмитрий 61cd01aef9 feat(ruflo): install scaffold + MCP entry + cost-budget — Phase 2 install
ruflo v3.7.0-alpha.38 installed via npx ruflo init --full --no-global
--with-embeddings --force. 86 files / 9 directories scaffolded.

Successful artifacts (kept, gitignored):
- .claude-flow/ — V3 runtime (config.yaml, data/, logs/, sessions/)
- .claude/agents/ — +23 ruflo agent subdirs (analysis, architecture,
  browser, consensus, core, custom, data, development, devops,
  documentation, flow-nexus, github, goal, optimization, payments, sona,
  sparc, specialized, sublinear, swarm, templates, testing, v3)
  — auto-regenerable via ruflo init, не tracking
- .claude/commands/ — 10 ruflo slash-commands (gitignored)
- .claude/helpers/ — ruflo CLI helpers (gitignored)

Restored from backups (ruflo init --force overwrote, intentional plan §3
will rewrite manually):
- CLAUDE.md (76068 bytes / 280 lines — original restored from
  CLAUDE.md.pre-ruflo.bak; Phase 3 Task 3.3 will manually add ruflo
  level −1 chapter)
- .claude/settings.json (2681 bytes — original restored from
  .claude.pre-ruflo.bak/settings.json; Phase 2 Task 2.10 will manually
  add memory reindex PostToolUse hook)
- .mcp.json (3718 bytes — git checkout HEAD; now extended manually with
  ruflo entry below)

Custom subagents preserved untouched:
- .claude/agents/pest-parallel-debugger.md
- .claude/agents/rls-reviewer.md
- .claude/skills/ untouched

This commit changes (tracked):
- .gitignore — +21 ruflo paths (.claude-flow/, CLAUDE.local.md, agent
  subdirs, commands/, helpers/, backups, transient logs)
- .mcp.json — +ruflo entry (7th MCP server: playwright + github +
  laravel-boost + semgrep + sentry + redis + ruflo). stdio mode,
  Task 1.6 verified no port-conflict.

Not committed (gitignored):
- .env.local — RUFLO_DAEMON_MAX_USD_PER_DAY=10 (spec §7 cost-budget)
- CLAUDE.md.pre-ruflo.bak — backup, kept on disk
- .claude.pre-ruflo.bak/ — backup, kept on disk

Out of scope Phase 2 (deferred decision):
- Task 2.5 settings.json enabledPlugins.ruflo-* — plan based on
  misunderstanding (ruflo is not a Claude Code plugin, it's MCP server +
  CLI; «plugins» внутри ruflo управляются `ruflo plugins install`, не
  через ~/.claude/settings.json). Skipped.
- Task 2.8 PM2 daemon-as-service — deferred to Phase 6 (post-regression
  verification что ruflo MCP не ломает существующие tests).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 10:22:13 +03:00
Дмитрий bd4ec48f05 feat(mcp): add redis-mcp server entry
Memurai (Redis 7-совместимый Windows service, localhost:6379).
Pending формализация в Tooling §3.3 #35 — sync нормативки отдельным планом.

Package: @modelcontextprotocol/server-redis@2025.4.25 — DEPRECATED
по npm статусу («Package no longer supported»), но Anthropic source,
простой протокол, рабочий. Post-MVP migration на community alternative
(e.g., @easy-mcps/redis-mcp-server@1.0.8 или @wenit/redis-mcp-server@1.0.3)
когда подтвердим trust.

READ-ONLY use — отладка очередей, кэша, Pest --parallel quirk 72.
Gitleaks scan (manual via absolute path): no leaks found.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 07:48:20 +03:00
Дмитрий 6f7e7d72fa feat(mcp): add sentry-mcp server entry
Self-hosted Sentry в Yandex Cloud (CLAUDE.md §2). Pending формализация
в Tooling §3.3 #34 — sync нормативки отдельным планом.

Package: @sentry/mcp-server@0.33.0+ (official sentry-bot,
repo getsentry/sentry-mcp, bin sentry-mcp).
Env vars: SENTRY_URL, SENTRY_AUTH_TOKEN — injected via shell, не commit'ятся.

Gitleaks scan (manual via absolute path due to worktree): 800 bytes,
no leaks found. ${SENTRY_*} placeholders confirmed safe.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 07:47:41 +03:00
Дмитрий 40125ba5a5 feat(tooling): Semgrep MCP server in .mcp.json (#25) 2026-05-10 08:42:25 +03:00
Дмитрий e04f53b103 phase1(boost): laravel/boost v2.4.6 + Vuetify guideline (Прил. Н #10)
Установка Laravel Boost вручную (без `php artisan boost:install`):
wizard падает в обоих режимах из-за двух багов окружения:
  - интерактив: PHP fatal на кириллице-пути при рендере laravel/prompts
    multiselect (нет UTF-8 codepage в Windows PowerShell)
  - --no-interaction: ConfiguresPrompts::multiselectFallback возвращает
    null → array_map() crash в L13 framework

Manual setup вместо wizard'а:
  - app/composer.json: laravel/boost ^2.4 + транзитивы (laravel/mcp v0.7,
    laravel/roster v0.5.1, symfony/yaml v7.4)
  - app/boost.json: agents=[claude_code], guidelines=true, mcp=true
  - .mcp.json (корень): добавлен блок laravel-boost — command=php,
    args=[app/artisan, boost:mcp]. Заменяет PostgreSQL MCP из фазы 0
    (был убран в _comment_postgres ещё ранее).
  - app/.ai/guidelines/vuetify.md: кастомный Vuetify 3 guideline по
    Tooling §10.2 + Forest-палитра + 14 slug'ов воронки берутся из
    schema.sql:2076 (НЕ из BRANDBOOK_v2 §3.6).

Smoke-test (boost:mcp via JSON-RPC):
  - protocolVersion 2024-11-05, serverInfo "Laravel Boost"
  - 9 tools: application-info, browser-logs, database-(connections|query|
    schema), get-absolute-url, last-error, read-log-entries, search-docs

Уточнение к CLAUDE.md §7: «отключать guidelines Inertia/Livewire/Tailwind/
Filament/Sail/PHPUnit» — избыточно. Boost через laravel/roster детектит
установленные пакеты из composer.lock; то, что не установлено, не серверит.
Pest 4 будет detected, PHPUnit guideline не активируется (PHPUnit убран
из direct deps в коммите 30f0335). Тех-уточнение к §10.1 шаг 4 — отдельно.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 11:05:21 +03:00
Дмитрий 887abf444e rebrand(v8.5→Лидерра): дизайн-handoff Платона v8 Forest + Лидпоток→Лидерра
Получен handoff-пакет liderra_v8_handoff/ от дизайнера Платона
(kpd9363@gmail.com) от 07.05.2026 — v8 Forest. Заказчик 08.05 решил
применить только в части дизайна, имени, логотипа. Функционал, состав
страниц и правила (CTO-11, click-wrap, SSO break-glass, 14 статусов
воронки) — без изменений (источник — ТЗ v8.5/schema v8.5).

Что сделано:

- Массовая замена Лидпоток→Лидерра (с учётом падежей: Лидерры/Лидерре)
  в 33 файлах (449 вхождений) — все .md/.sql/.json/.toml/.yml/.txt/.html,
  кроме исторических упоминаний внутри liderra_v8_handoff/
- Удалён docs/brandbook.md v1.1 — заменён на BRANDBOOK_v2.md из handoff
- Скопированы 13 концептов liderra_v8_handoff/concepts/v8_*.html в
  web/v8/. Удалены старые web/01-login.html, 02-dashboard.html,
  03-deals.html, index.html (палитра v1.1 deprecated)
- CLAUDE.md v1.0→v1.1: §0 (BRANDBOOK_v2 + DEVELOPER_HANDOFF в источниках),
  §2 (палитра Forest, Inter+JBM, Lucide), §5 п.6 (anti-pattern Inter
  снят — в Forest Inter наш основной шрифт), §6 (13 концептов в web/v8/)
- Реестр Открытые_вопросы_v8_3.md v1.12→v1.13: добавлена запись о
  ребрендинге + 4 точечных расхождений handoff vs ТЗ (статусы воронки,
  click-wrap чекбоксы, SSO fallback, axe violations)
- package.json/package-lock.json: name lidpotok→liderra

4 расхождения handoff vs ТЗ (НЕ применены, источник истины — ТЗ/schema):

1. 14 «обобщённых» статусов в BRANDBOOK_v2 §3.6 ≠ 14 slug'ов в
   schema.sql:2076 (совпадает 2 из 14: «Переговоры», «Оплачено»).
   Источник — schema/ТЗ §6.4 (реселлерская модель из аудита crm.bp-gr.ru,
   6 системных + 8 настраиваемых статусов).
2. 3-й click-wrap в v8_login.html («маркетинг-опционально») ≠ ТЗ §1.5/§4.1
   («согласие на ПДн», обязательное, OPEN-Ж-3).
3. SSO в v8_admin.html («локальный 2FA fallback») ≠ ТЗ OPEN-И-13
   (break-glass super_admin, локальный 2FA выключен).
4. Заявление «axe-core 4.10.2 — 0 violations» в README handoff — локально
   Pa11y 9.1.1 + axe нашёл 81 violation на 10/13 HTML (преимущественно
   color-contrast на декоративных separator'ах с --ink-disabled).
   Чисто: settings/errors/palette_options.

Что НЕ включено в коммит:
- лендинг/TZ_landing_v1_0.md — untracked, не моя работа в этой сессии
- .tmp/ — gitignored

Что осталось (для следующих сессий):
- Возможное переименование GitHub-репо CoralMinister/lidpotok → liderra
  (отдельное решение заказчика)
- Опционально: обратная связь Платону по 4 расхождениям handoff vs ТЗ

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 07:11:58 +03:00
Дмитрий 626b7cd602 chore(mcp): remove postgres-disabled stub server
Заглушка `_postgres_disabled` всё равно подгружалась Claude Code как
deferred MCP tool, что создавало «зомби» — инструмент, который никогда
не сработает (нет локальной БД на localhost:5432).

Убрал блок целиком, оставил `_comment_postgres` с инструкцией как
вернуть, когда поднимется dev-БД. Также см. Прил. Н §10.1 — процедура
перехода фаза 0 → 1, в фазе 1 PostgreSQL MCP заменяется Laravel Boost
полностью.

Архитектурных изменений: 0.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 04:51:28 +07:00
Дмитрий 6ff05fd7ea chore: phase 0 tooling baseline
Установлены 9 инструментов фазы 0 + lefthook для pre-commit/pre-push hooks.

Конфиги в корне:
- package.json + package-lock.json (10 dev-deps, 7 npm-скриптов)
- .markdownlint.json + .markdownlintignore — стиль Markdown
- cspell.json + cspell-words.txt — орфография ru/en + 350+ проектных терминов
- .lychee.toml — проверка ссылок с игнором плейсхолдеров
- .stylelintrc.json — стиль CSS в HTML-прототипах
- .gitleaks.toml — 8 кастомных правил для РФ-контекста (телефон, ИНН, ОГРН,
  паспорт, Yandex Cloud-tokens, webhook secrets) + allowlist для масок
- pa11y.config.json — WCAG 2.1 AA для web/01-login.html и web/02-dashboard.html
- .mcp.json — 3 MCP-сервера (Playwright, GitHub через офиц. hosted endpoint,
  PostgreSQL — заглушка)
- .gitignore — node_modules, bin/*, артефакты + задел на фазы 1–3
- .claude/settings.json — permissions allow/deny + хук авто-fix .md
- lefthook.yml — pre-commit (gitleaks + markdownlint + cspell + stylelint)
  и pre-push (полный gitleaks по истории)

Связано: docs/Tooling_v8_3.md (Прил. Н v1.0) — реестр 28 инструментов в 4
фазах; CLAUDE.md в корне — оперативная карта приоритета правил и команд.

Архитектурных изменений в проекте: 0.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 04:44:20 +07:00