@gian-tiaga/eda 3.14.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/MIGRATION.md +23 -2
  2. package/README.md +131 -223
  3. package/agents/eda-aim-executor/prompt.md +2 -0
  4. package/agents/eda-aim-verifier/prompt.md +2 -0
  5. package/agents/eda-review-api/prompt.md +4 -4
  6. package/agents/eda-review-architecture/prompt.md +4 -4
  7. package/agents/eda-review-business/prompt.md +5 -12
  8. package/agents/eda-review-code-quality/prompt.md +4 -4
  9. package/agents/eda-review-correctness/prompt.md +3 -3
  10. package/agents/eda-review-database/prompt.md +4 -4
  11. package/agents/eda-review-documentation/prompt.md +4 -4
  12. package/agents/eda-review-frontend/prompt.md +4 -4
  13. package/agents/eda-review-infra/agent.json +14 -0
  14. package/agents/eda-review-infra/prompt.md +36 -0
  15. package/agents/eda-review-performance/prompt.md +7 -7
  16. package/agents/eda-review-plan-alignment/prompt.md +4 -4
  17. package/agents/eda-review-previous-reviews/prompt.md +5 -4
  18. package/agents/eda-review-references/prompt.md +4 -4
  19. package/agents/eda-review-rules/prompt.md +4 -4
  20. package/agents/eda-review-security/prompt.md +4 -4
  21. package/agents/eda-review-seo/agent.json +14 -0
  22. package/agents/eda-review-seo/prompt.md +36 -0
  23. package/agents/eda-review-tests/prompt.md +4 -4
  24. package/agents/eda-review-triage/agent.json +14 -0
  25. package/agents/eda-review-triage/prompt.md +38 -0
  26. package/lib/catalog.js +28 -1
  27. package/lib/install.js +221 -590
  28. package/lib/prompts.js +53 -0
  29. package/lib/renderers/codex-agent.js +3 -1
  30. package/lib/renderers/codex-skill.js +21 -1
  31. package/lib/renderers/opencode-skill.js +2 -2
  32. package/package.json +2 -3
  33. package/skills/_shared/done.md +15 -0
  34. package/skills/_shared/questions.md +9 -0
  35. package/skills/eda-aim/SKILL.md +2 -3
  36. package/skills/eda-business/SKILL.md +5 -6
  37. package/skills/eda-commit/SKILL.md +2 -3
  38. package/skills/eda-discover-automations/SKILL.md +6 -7
  39. package/skills/eda-explore/SKILL.md +28 -15
  40. package/skills/eda-fix/SKILL.md +7 -7
  41. package/skills/eda-fix-by-review/SKILL.md +4 -3
  42. package/skills/eda-just-do-it/SKILL.md +4 -4
  43. package/skills/eda-manual-test/SKILL.md +7 -5
  44. package/skills/eda-merge-worktree/SKILL.md +2 -3
  45. package/skills/eda-new-project/SKILL.md +3 -5
  46. package/skills/eda-orhestra/SKILL.md +3 -4
  47. package/skills/eda-plan/SKILL.md +126 -168
  48. package/skills/eda-plan-execute/SKILL.md +72 -92
  49. package/skills/eda-plan-polish/SKILL.md +14 -14
  50. package/skills/eda-plan-review/SKILL.md +25 -10
  51. package/skills/eda-plan-review-fix/SKILL.md +10 -7
  52. package/skills/eda-polish/SKILL.md +9 -6
  53. package/skills/eda-prepare-ai/SKILL.md +35 -15
  54. package/skills/eda-prod-check/SKILL.md +129 -0
  55. package/skills/eda-review/SKILL.md +92 -64
  56. package/skills/eda-review/references/checks/api.md +18 -0
  57. package/skills/eda-review/references/checks/architecture.md +16 -0
  58. package/skills/eda-review/references/checks/business.md +13 -0
  59. package/skills/eda-review/references/checks/code-quality.md +18 -0
  60. package/skills/eda-review/references/checks/correctness.md +19 -0
  61. package/skills/eda-review/references/checks/database.md +17 -0
  62. package/skills/eda-review/references/checks/documentation.md +13 -0
  63. package/skills/eda-review/references/checks/frontend.md +19 -0
  64. package/skills/eda-review/references/checks/infra.md +16 -0
  65. package/skills/eda-review/references/checks/performance.md +21 -0
  66. package/skills/eda-review/references/checks/plan-alignment.md +16 -0
  67. package/skills/eda-review/references/checks/previous-reviews.md +9 -0
  68. package/skills/eda-review/references/checks/references.md +11 -0
  69. package/skills/eda-review/references/checks/rules.md +16 -0
  70. package/skills/eda-review/references/checks/security.md +26 -0
  71. package/skills/eda-review/references/checks/seo.md +16 -0
  72. package/skills/eda-review/references/checks/tests.md +18 -0
  73. package/skills/eda-review/references/defects.md +24 -0
  74. package/skills/eda-review/references/triage.md +23 -0
  75. package/skills/eda-roadmap/SKILL.md +2 -4
  76. package/skills/eda-send-review/SKILL.md +3 -5
  77. package/skills/eda-worktree/SKILL.md +2 -3
  78. package/skills/eda-review/references/review-matrix.md +0 -72
@@ -11,16 +11,16 @@ description: 'Закрывает проваленные пункты чек-ли
11
11
 
12
12
  Текст рядом с вызовом — главный вход. Разбери путь или название review, «последнее ревью» и прямые указания пользователя. Если вход однозначен, продолжай без вопроса; при нескольких равных review или противоречивом target — `AskUserQuestion`.
13
13
 
14
- В Codex exec не читай stdin: верни `blocked: нужен ответ пользователя` до любых правок.
14
+ В неинтерактивном запуске не читай stdin: верни `blocked: нужен ответ пользователя` до любых правок.
15
15
 
16
16
  ## Правила
17
17
 
18
18
  1. Работай только с review из `docs/artifacts/plan-reviews/` и его `plan` из `docs/artifacts/plans/`.
19
19
  2. Вычисли SHA-256 плана до правок. Он обязан совпасть с `plan_sha256` review. Не совпал — остановись: review устарел, нужен новый `eda-plan-review`.
20
- 3. Перед правкой прочитай план, `docs/rules.md`, `docs/arch.md` и только применимые карточки из `sources.business` и `sources.references`; для старого плана выбери только применимые карточки через `docs/business.md` и `docs/references.md`.
20
+ 3. Перед правкой прочитай план, `docs/rules.md`, `docs/arch.md` и все файлы из `sources` полностью; для старого плана без раздела `Рамка` выбери только применимые карточки через `docs/business.md` и `docs/references.md`.
21
21
  4. Закрой каждый пункт со статусом `fail`. Пункты `pass` и `n/a` не трогай. Своих замечаний не добавляй: чего нет в отчёте, того нет в работе.
22
- 5. **План не растёт.** Сначала ищи, что удалить или заменить, и только потом — что дописать. Прирост объёма за один fix не больше 3%; если пункт иначе не закрывается, остановись и верни `blocked: пункт требует роста плана` с объяснением.
23
- 6. Не повторяй один факт в двух разделах: поведение живёт в `Целевом алгоритме`, контракты — в `Контрактах реализации`, фаза на них ссылается.
22
+ 5. **План не растёт.** Сначала ищи, что удалить или заменить, и только потом — что дописать. Прирост объёма за один fix не больше 3%. Пункт, который иначе не закрывается, оставь открытым с объяснением в разделе `Не закрытые пункты`, закрой остальные и сохрани отчёт со `status: partial`.
23
+ 6. Не повторяй один факт в двух разделах: требования документов живут в `Рамке`, поведение — в `Целевом алгоритме` нумерованными шагами, контракты — в `Контрактах реализации`, фаза на них ссылается.
24
24
  7. Не добавляй в план сигнатуры чужих методов, приведения типов, форму классов, внутренние вычисления без контрактного смысла и пересказ карточек — это те же пункты 9 и 10 чек-листа, только с другой стороны. Не удаляй и не переписывай только из-за формы записи формулу, которая задаёт бизнес-правило, контракт, инвариант или критерий приёмки.
25
25
  8. Продуктовый выбор, конфликт с business, rules или architecture и расширение scope не решай сам: собери все такие случаи и задай один блокирующий вопрос до любых правок.
26
26
  9. Не правь код, конфиги, зависимости, миграции и другие документы. Не запускай проверки проекта.
@@ -31,7 +31,7 @@ description: 'Закрывает проваленные пункты чек-ли
31
31
  2. Собери реальные блокирующие вопросы. Частичную правку до ответа не делай.
32
32
  3. Закрой все пункты одним связным минимальным изменением плана.
33
33
  4. Обнови front matter плана: `status: meta-reviewed`, `plan_review`, `plan_review_fix`. `status: reviewed` не ставь — это может сделать только подтверждающий review.
34
- 5. Вычисли SHA-256 после правок как `$AFTER_SHA256`. Если пункты были, а хеш не изменился, остановись: `blocked: fix не изменил план`.
34
+ 5. Вычисли SHA-256 после правок как `$AFTER_SHA256`. Если пункты были, а хеш не изменился, сохрани отчёт со `status: no-change` и причиной в разделе `Не закрытые пункты`. `partial` и `no-change` — нормальные результаты, а не блокеры: решение о следующей итерации принимает вызывающий.
35
35
 
36
36
  ## Отчёт
37
37
 
@@ -45,7 +45,7 @@ before_sha256: <sha256 из review>
45
45
  after_sha256: <sha256 после изменения>
46
46
  before_bytes: <размер до>
47
47
  after_bytes: <размер после>
48
- status: done
48
+ status: <done | partial | no-change>
49
49
  date: <YYYY-MM-DD HH:MM>
50
50
  ---
51
51
 
@@ -56,6 +56,9 @@ date: <YYYY-MM-DD HH:MM>
56
56
  |---|---|---|
57
57
  | 6 | «разумный таймаут» заменён на «30 с» | Фаза 3 |
58
58
 
59
+ ## Не закрытые пункты
60
+ <Только для `partial` и `no-change`: номер пункта и почему он не закрыт. Иначе раздела нет.>
61
+
59
62
  ## Цепочка
60
63
  - **Before SHA-256:** `<hash>`
61
64
  - **After SHA-256:** `<hash>`
@@ -67,7 +70,7 @@ date: <YYYY-MM-DD HH:MM>
67
70
 
68
71
  ## Финал
69
72
 
70
- Сообщи пути к плану, review и fix, before/after SHA-256, изменение объёма, закрытые пункты, оставшиеся блокеры и что изменения не закоммичены. Дальше — подтверждающий `eda-plan-review` или возврат вызывающему `eda-plan-polish`.
73
+ Сообщи пути к плану, review и fix, status, before/after SHA-256, изменение объёма, закрытые и не закрытые пункты, оставшиеся блокеры и что изменения не закоммичены. Дальше — подтверждающий `eda-plan-review` или возврат вызывающему `eda-plan-polish`.
71
74
 
72
75
  ## Чего НЕ делать
73
76
 
@@ -19,10 +19,12 @@ description: 'Итеративно ревьюит и исправляет изм
19
19
 
20
20
  1. В `main` основной агент сам выполняет установленные контракты `eda-review` и `eda-fix-by-review` в текущем контексте. Не запускай для них верхнеуровневых или leaf-субагентов и не заменяй их отдельным CLI.
21
21
  2. В `subagents` каждый вызов `eda-review` и `eda-fix-by-review` запускай отдельным изолированным субагентом. В Claude Code используй `Agent`, в Codex — `spawn_agent` с `fork_turns: "none"`; не оставляй `fork_turns` по умолчанию и не используй `"all"`. Если нативные субагенты недоступны, остановись без CLI-fallback.
22
- 3. Успех требует одновременно: полный review со статусом `reviewed` или `reviewed-with-warnings`, `result: clean` и ноль находок. Score — только справочное число, условием завершения он не является.
22
+ 3. Успех требует одновременно: полный review со статусом `reviewed` или `reviewed-with-warnings`, `score: 100`, `result: clean` и ноль находок. Оценку бери только из review, сам её не повышай.
23
23
  4. Любая находка обязательно исправляется. Отклонить находку может только `eda-fix-by-review` и только при её фактической неверности.
24
24
  5. Не коммить и не отправляй ревью.
25
- 6. Останавливайся при повторном сбое обязательной проверки review, блокере fix-агента, несокращении числа открытых находок за полный круг или достижении лимита.
25
+ 6. Штатно завершай цикл только при подтверждённых 100/100 или достижении лимита. Кроме них цикл останавливают только: технический блокер субагента, сбой обязательной проверки ревью, невалидный review, вопрос пользователю, на который в текущей среде нельзя получить ответ, и блокер `eda-fix-by-review` вне его области — например, падение несвязанной с правками проверки; это `blocked`, а не успех. Отсутствие прогресса — не причина остановки: находок не стало меньше, они повторяются, score снизился, fix отклонил все находки или ничего не изменил — продолжай до лимита.
26
+
27
+ <!-- include: skills/_shared/done.md -->
26
28
 
27
29
  ## Технические остановки субагентов
28
30
 
@@ -58,7 +60,7 @@ description: 'Итеративно ревьюит и исправляет изм
58
60
  ```
59
61
 
60
62
  2. Если review остановился из-за обязательного агента, останови цикл. `reviewed-with-warnings` из-за недоступных previous reviews разрешён.
61
- 3. Если `result: clean` и находок нет, заверши успешно. Если `result` противоречит числу находок, считай файл невалидным и остановись.
63
+ 3. Если `score: 100`, `result: clean` и находок нет, заверши успешно. Если score или result противоречат находкам, считай файл невалидным и остановись с `blocked`: при отсутствии находок score должен быть 100, при наличии — ниже 100.
62
64
  4. Если находки есть, в `main` выполни `eda-fix-by-review` сам; в `subagents` запусти отдельного субагента:
63
65
 
64
66
  ```text
@@ -68,9 +70,9 @@ description: 'Итеративно ревьюит и исправляет изм
68
70
  Верни путь к fix-отчёту, число применённых и отклонённых находок и результат проверок.
69
71
  ```
70
72
 
71
- 5. После успешных исправлений начни новую итерацию с полным `eda-review`.
73
+ 5. После fix с любым содержательным результатом — все находки применены, часть или все отклонены, изменений нет — начни новую итерацию с полным `eda-review`. Если fix вернул вопрос пользователю, передай его по правилам текущей среды и после ответа продолжи тот же fix.
72
74
 
73
- Если после полного круга число открытых находок не уменьшилось, остановись раньше лимита с конкретными оставшимися проблемами. При достижении лимита не скрывай незавершённую сходимость.
75
+ Если после полного круга число открытых находок не уменьшилось или score не вырос, продолжай до 100/100 либо исчерпания `$LIMIT`. При достижении лимита не скрывай незавершённую сходимость; последнее исправление без следующего review не считай подтверждённым успехом.
74
76
 
75
77
  ## Финал
76
78
 
@@ -81,7 +83,8 @@ description: 'Итеративно ревьюит и исправляет изм
81
83
  - В `subagents` делать ревью или исправления основным агентом.
82
84
  - Брать режим цикла из `review.execution` или переключать его из-за размера diff.
83
85
  - Запускать отдельный этап проверки готового ревью.
84
- - Считать цикл успешным при наличии находок или завершать его по score.
86
+ - Считать цикл успешным без полного review с 100/100, `clean` и отсутствием находок.
87
+ - Останавливаться раньше лимита из-за отсутствия прогресса.
85
88
  - Выбирать или отклонять находки основным агентом: отклонение — работа `eda-fix-by-review`.
86
89
  - Переписывать `docs/settings.yaml`, правила или архитектуру ради чистого результата.
87
90
  - Коммитить, пушить или отправлять ревью.
@@ -5,7 +5,7 @@ description: 'Готовит проект к работе с AI: проекти
5
5
 
6
6
  # Скил: Подготовка проекта для AI (eda-prepare-ai)
7
7
 
8
- Превращаешь реальный проект или подтверждённый стартовый бриф в согласованную техническую рамку для людей и AI-агентов: проектируешь архитектуру, правила, строгий профиль инструментов, матрицу проверок и AI-процесс, затем создаёшь или обновляешь `docs/rules.md`, `docs/arch.md`, `docs/references.md`, карточки в `docs/references/`, `AGENTS.md` и `CLAUDE.md`.
8
+ Превращаешь реальный проект или подтверждённый стартовый бриф в согласованную техническую рамку для людей и AI-агентов: проектируешь архитектуру, правила, строгий профиль инструментов, матрицу проверок и AI-процесс, затем создаёшь или обновляешь `docs/rules.md`, `docs/arch.md`, `docs/references.md`, их карточки в `docs/rules/`, `docs/arch/` и `docs/references/`, `AGENTS.md` и `CLAUDE.md`.
9
9
 
10
10
  ## Вход из сообщения пользователя
11
11
 
@@ -13,7 +13,7 @@ description: 'Готовит проект к работе с AI: проекти
13
13
 
14
14
  ## Главные правила
15
15
 
16
- 1. **Не правишь код.** Меняй только `docs/rules.md`, `docs/arch.md`, `docs/references.md`, `docs/references/*.md`, `AGENTS.md` и `CLAUDE.md`; не ставь пакеты и не меняй конфиги.
16
+ 1. **Не правишь код.** Меняй только `docs/rules.md`, `docs/rules/*.md`, `docs/arch.md`, `docs/arch/*.md`, `docs/references.md`, `docs/references/*.md`, `AGENTS.md` и `CLAUDE.md`; не ставь пакеты и не меняй конфиги.
17
17
  2. **Опирайся на проект.** Читай код, структуру, зависимости, команды, тесты, инфраструктуру, git-историю и существующие документы. Не генерируй универсальный шаблон.
18
18
  3. **Разделяй документы по назначению.** Business-карточки задают подтверждённое целевое поведение и редактируются только через `eda-business`; `docs/rules.md` задаёт действия, запреты, команды проверки и требования к процессу, совместимости и безопасности; `docs/arch.md` фиксирует структуру исходного кода, назначение каталогов, модули и слои, ownership, зависимости, runtime/data-flow, данные и интеграции; references показывают уже устоявшуюся форму реализации; `AGENTS.md` объясняет, что это за проект и где читать обязательную рамку. У каждого факта должен быть ровно один документ-владелец: допустима ссылка на другой документ, но не вторая копия содержания даже в иной формулировке. Архитектурное решение не становится правилом только потому, что его удалось сформулировать как запрет.
19
19
  4. **Обновляй осмысленно.** Сохраняй актуальное, исправляй неверное, удаляй устаревшее и перестраивай документ настолько сильно, насколько требует проект. Не спрашивай отдельно, что делать с каждым существующим файлом.
@@ -25,14 +25,27 @@ description: 'Готовит проект к работе с AI: проекти
25
25
  10. **Не внедряй tooling.** Можешь рекомендовать пакеты, команды, конфиги, скилы и MCP, но не устанавливай и не настраивай их; для внедрения предложи `eda-plan`.
26
26
  11. **Новый проект разворачивается штатным CLI.** Для bootstrap из `eda-new-project` найди официальный генератор выбранного стека и точную воспроизводимую команду через его package manager (`composer create-project`, `npm create`, `npx`, `cargo new` или реальный аналог). Зафиксируй эту команду в `docs/rules.md` как обязательную для создания основы проекта; не предлагай вручную воспроизводить файлы, которые создаёт доступный официальный CLI.
27
27
 
28
+ ## Структура рамки
29
+
30
+ Каждый документ рамки — короткий индекс, который агент читает для любой задачи, и карточки областей, которые он читает только для задач своей области. Любой файл рамки — не больше 20 КБ: больший файл дели на карточки, а не урезай подтверждённое содержание.
31
+
32
+ | Документ | Индекс — читается всегда | Карточка — читается по задаче |
33
+ |---|---|---|
34
+ | Правила | `docs/rules.md`: правила для любой задачи по темам `## <Тема>` и таблица карточек | `docs/rules/<область>.md`: правила одной области кода или процесса |
35
+ | Архитектура | `docs/arch.md`: подход, дерево верхнего уровня, модули и допустимые зависимости, таблица карточек | `docs/arch/<область>.md`: состав, ответственность, границы, потоки, данные и интеграции одной области |
36
+ | Эталоны | `docs/references.md`: таблица карточек | `docs/references/<компонент>.md`: один минимальный пример формы компонента |
37
+ | Бизнес | `docs/business.md`, ведёт `eda-business` | `docs/business/<тема>.md` |
38
+
39
+ Таблица карточек в `docs/rules.md` и `docs/arch.md` — `| Описание | Карточка |`: описание позволяет решить, нужна ли карточка задаче, не открывая её. Карточку заводи, когда индекс не помещается в лимит или у области есть сведения, не нужные остальным задачам; маленькому проекту хватает индексов без карточек. Документы описывают текущее состояние: датированные разделы вроде «уточнение от …» или «обновление …», журналы изменений и история решений в них не попадают — изменение вносится в раздел-владелец на месте. Существующий документ больше лимита или с датированными разделами перестрой по этой структуре без потери действующего содержания.
40
+
28
41
  ## Интерактивные вопросы
29
42
 
30
- Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос.
31
- - Claude Code: используй `AskUserQuestion`.
32
- - Codex interactive: если доступен `request_user_input`, используй его. Если tool недоступен, задай один короткий вопрос в чат, дай варианты 1–3, напиши «Ответь номером или своим вариантом. Я продолжу только после ответа.» и остановись.
33
- - Codex exec / неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты.
43
+ Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос: задай его и остановись до ответа.
44
+ - Неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты.
34
45
  - Не запускай команды, которые ждут интерактивного ввода в терминале.
35
46
 
47
+ <!-- include: skills/_shared/questions.md -->
48
+
36
49
  ## Этапы
37
50
 
38
51
  ### 1. Проанализировать проект
@@ -43,7 +56,7 @@ description: 'Готовит проект к работе с AI: проекти
43
56
 
44
57
  ### 2. Прочитать существующую документацию
45
58
 
46
- Прочитай `docs/rules.md`, `docs/arch.md`, `docs/references.md`, карточки из `docs/references/`, `AGENTS.md` и `CLAUDE.md`, если они есть. Если существует `docs/business.md`, сначала определи область текущей подготовки, затем по описаниям выбери относящиеся к ней карточки; при полном bootstrap весь описанный продуктовый контекст может быть применим. Business-карточки используй как требования к целевому поведению, но не редактируй. Также прочитай релевантные документы из `docs/`, на которые они ссылаются. Найди дубли, противоречия и устаревшие сведения.
59
+ Прочитай `docs/rules.md`, `docs/arch.md`, `docs/references.md`, их карточки из `docs/rules/`, `docs/arch/` и `docs/references/`, `AGENTS.md` и `CLAUDE.md`, если они есть. Большой файл читай частями до последней строки. Если существует `docs/business.md`, сначала определи область текущей подготовки, затем по описаниям выбери относящиеся к ней карточки; при полном bootstrap весь описанный продуктовый контекст может быть применим. Business-карточки используй как требования к целевому поведению, но не редактируй. Также прочитай релевантные документы из `docs/`, на которые они ссылаются. Найди дубли, противоречия и устаревшие сведения.
47
60
 
48
61
  Если текущая задача подготовки противоречит business-карточке, остановись, покажи конфликт и через `AskUserQuestion` спроси: изменить задачу подготовки или сначала пересогласовать правило через `eda-business`. Не переноси противоречие молча в архитектуру или rules.
49
62
 
@@ -51,8 +64,8 @@ description: 'Готовит проект к работе с AI: проекти
51
64
 
52
65
  Определи область по текущему сообщению:
53
66
 
54
- - если пользователь вызвал просто `eda-prepare-ai` и не назвал документ — обнови весь набор: `docs/rules.md`, `docs/arch.md`, `docs/references.md`, все актуальные карточки в `docs/references/`, `AGENTS.md` и `CLAUDE.md`;
55
- - если явно назвал rules, architecture, `AGENTS.md` или `CLAUDE.md` — обнови только названные документы;
67
+ - если пользователь вызвал просто `eda-prepare-ai` и не назвал документ — обнови весь набор: `docs/rules.md`, `docs/arch.md`, `docs/references.md`, все актуальные карточки, `AGENTS.md` и `CLAUDE.md`;
68
+ - если явно назвал rules, architecture, `AGENTS.md` или `CLAUDE.md` — обнови только названные документы вместе с их карточками;
56
69
  - если явно назвал references — обнови `docs/references.md` и актуальные карточки, затем добавь или актуализируй ссылку на `docs/references.md` в `AGENTS.md`;
57
70
  - если явно назвал одну карточку — обнови только её и соответствующую строку `docs/references.md`.
58
71
  - если явно запросил проверки без полного вызова — проведи полный аудит проверок, предложи матрицу и после подтверждения обнови только относящиеся к ней правила в `docs/rules.md`;
@@ -96,17 +109,18 @@ description: 'Готовит проект к работе с AI: проекти
96
109
  4. **Стиль и качество:** formatter, linter, naming, complexity, duplication, dead code, unused exports/dependencies, forbidden patterns, TODO/FIXME и size limits.
97
110
  5. **Статический анализ:** typecheck, nullability, data-flow/taint, API misuse, unreachable code, unsafe behavior, memory/thread/address sanitizers и анализаторы языка.
98
111
  6. **Границы модулей:** forbidden imports, dependency direction, cycles, layers, public API, ownership, package boundaries, generated code и architecture fitness functions.
99
- 7. **Конфиги/IaC:** env, YAML/JSON/TOML, CI, Docker/Compose, Kubernetes/Helm, Terraform, proxy, feature flags, IAM, observability и env-example drift.
112
+ 7. **Конфиги/IaC:** env, YAML/JSON/TOML, CI, Docker/Compose и Dockerfile lint, Kubernetes/Helm, Terraform, proxy и его анализатор конфигурации, редиректы на HTTPS и канонический хост, HSTS, feature flags, IAM, observability и env-example drift.
100
113
  8. **API/compatibility:** OpenAPI/GraphQL/Proto, breaking changes, generated-code drift, serialization, backward/forward compatibility, idempotency и pagination/filter/sort.
101
114
  9. **БД/данные:** migrations forward/rollback/dry-run, schema drift, constraints, fixtures, transactions, concurrency, N+1/query plans, backup/restore, retention/anonymization и invariants.
102
115
  10. **Security/supply chain:** secrets, SAST, DAST, dependencies, licenses, SBOM, lockfiles, container/IaC, provenance, authn/authz, injection, XSS/CSRF/SSRF, CORS/CSP/headers, rate limits и PII leakage.
103
- 11. **Performance/reliability:** benchmarks/budgets, bundle size, load/stress/spike/soak, leaks, startup, timeout/retry/circuit breaker, graceful shutdown, chaos/fault injection и recovery.
116
+ 11. **Performance/reliability:** benchmarks/budgets, тесты на число запросов к БД и внешних вызовов на операцию, bundle size и бюджет веса CSS/JS, проверка сжатия и кеш-заголовков production после деплоя, load/stress/spike/soak, leaks, startup, timeout/retry/circuit breaker, graceful shutdown, chaos/fault injection и recovery.
104
117
  12. **Build/release:** clean-clone и reproducible builds, generated artifacts, package contents, runtime/OS/architecture matrix, install/upgrade/downgrade, semver/changelog, release dry-run, canary/rollback и post-deploy smoke.
105
118
  13. **Документация:** Markdown/style/spell, links, executable snippets, CLI help/API drift, diagrams/schemas и migration/release notes.
106
119
  14. **Эксплуатация:** health/readiness/liveness, metric/log/trace schemas, no secrets/PII in logs, alerts, dashboards as code, SLO/error budgets, disaster recovery и restore drills.
107
120
  15. **Домен:** платежи, почта, очереди/jobs, webhooks, поиск, files/media, mobile signing, offline/sync, localization, analytics events и прочие продуктовые инварианты.
108
121
  16. **AI:** prompt/output schemas, evals, prompt injection/jailbreak, data leakage, tool permissions, nondeterminism, latency и token/cost budgets.
109
122
  17. **MCP:** browser/Playwright MCP и MCP для БД, API, документации, GitHub/GitLab, cloud, observability и выбранного языка/фреймворка. Для каждого укажи сценарий, минимальные права, тестовые данные и почему CLI/CI недостаточно.
123
+ 18. **SEO и индексация:** для публичных страниц — коды ответов и редиректы, canonical, robots и `noindex` в production, sitemap, title/description, hreflang, структурированные данные и SEO-аудит страниц в CI.
110
124
 
111
125
  Для каждого предложения укажи конкретный инструмент, точную команду или сценарий, закрываемый риск и контур: `pre-commit`, `pre-push`, `PR CI`, `nightly`, `release`, `post-deploy`, `MCP/manual`. Отдели быстрый обязательный gate от тяжёлых scheduled/release-проверок, чтобы экстремальный профиль оставался исполнимым.
112
126
 
@@ -129,6 +143,8 @@ description: 'Готовит проект к работе с AI: проекти
129
143
  - для нового проекта — точная команда официального scaffold/generator CLI выбранного стека вместо ручного создания его основы;
130
144
  - действующие соглашения об именовании, формате и совместимости;
131
145
  - требования к изменениям, например обязательная миграция при изменении схемы или обновление контракта при изменении публичного API;
146
+ - действующие эксплуатационные и SEO-соглашения, подтверждённые конфигурацией или пользователем: канонический хост и протокол, политика редиректов и завершающего слэша, где задаются переменные окружения, политика базовых образов;
147
+ - production-конфигурация проекта, который отдаёт страницы или API, подтверждённая конфигурацией или пользователем, с указанием, где она задаётся: сжатие текстовых ответов, долгий кеш статики с хешем в имени, кто отдаёт статику, выключенный debug, кеш байткода (opcache и аналоги) и лимиты процессов runtime, сборка кешей фреймворка и установка зависимостей без dev-пакетов при деплое;
132
148
  - точечные запреты небезопасных конструкций, бесконтрольных подавлений, утечки секретов и персональных данных;
133
149
  - строгие режимы уже внедрённых инструментов.
134
150
 
@@ -161,7 +177,9 @@ description: 'Готовит проект к работе с AI: проекти
161
177
  | CQRS | Только независимые рабочие соглашения, которых нет в архитектуре | Разделение command/query, ответственность и data-flow | Устоявшаяся форма command/query handler |
162
178
  | Безопасность | Проверяемые запреты и обязательные security-команды | Trust boundaries, auth ownership и движение чувствительных данных | Устоявшийся безопасный пример конкретного компонента |
163
179
 
164
- Каждое принятое правило формулируй коротко, однозначно и проверяемо. Группируй правила по темам только когда это ускоряет поиск.
180
+ Каждое принятое правило — одна строка: короткое, однозначное и проверяемое действие или запрет. Правила для любой задачи держи в `docs/rules.md` по темам; правила, которые нужны только при работе с одной областью кода или процесса, вынеси в `docs/rules/<область>.md` по разделу «Структура рамки».
181
+
182
+ Всегда записывай в `docs/rules.md` правило ведения рамки: «Документы `docs/rules*`, `docs/arch*`, `docs/references*` меняй в разделе-владельце на месте, без датированных разделов и журналов изменений; файл больше 20 КБ дели на карточки области с записью в таблицу индекса».
165
183
 
166
184
  В файле должны быть только действующие правила проекта. Не добавляй введение, объяснения пользы, обоснования, предложения, наблюдения, архитектурное описание или декоративные разделы. Команду проверки указывай только как конкретное правило, например: «Перед финалом запусти `npm test`».
167
185
 
@@ -173,7 +191,7 @@ description: 'Готовит проект к работе с AI: проекти
173
191
 
174
192
  ### 7. Обновить `docs/arch.md`
175
193
 
176
- Опиши устройство проекта, не повторяя рабочие правила из `docs/rules.md`. Документ должен позволять понять, где находится нужная часть системы, за что она отвечает и как связана с остальными.
194
+ Опиши устройство проекта, не повторяя рабочие правила из `docs/rules.md`. Документ должен позволять понять, где находится нужная часть системы, за что она отвечает и как связана с остальными. В `docs/arch.md` остаются подход, дерево верхнего уровня, модули и допустимые зависимости между ними и таблица карточек; подробности одной области — в `docs/arch/<область>.md` по разделу «Структура рамки».
177
195
 
178
196
  `docs/arch.md` не должен содержать команды, чек-листы разработки, настройки линтеров и других инструментов или иные рабочие правила. Если архитектурную границу проверяет конкретная команда, в `docs/arch.md` оставь только саму границу, а требование и момент запуска команды запиши в `docs/rules.md` без пересказа границы.
179
197
 
@@ -204,7 +222,7 @@ description: 'Готовит проект к работе с AI: проекти
204
222
  | Контроллер | При добавлении HTTP endpoint | [Контроллер](references/controller.md) |
205
223
  ```
206
224
 
207
- Индекс содержит ссылки только на карточки. В каждой карточке должны быть:
225
+ Индекс содержит ссылки только на карточки. Карточка не больше 20 КБ и показывает одну форму компонента; несколько форм — несколько карточек. В каждой карточке должны быть:
208
226
 
209
227
  - назначение эталона и показываемая форма реализации без пересказа архитектурных границ компонента;
210
228
  - условия, при которых пример применим;
@@ -236,7 +254,7 @@ description: 'Готовит проект к работе с AI: проекти
236
254
 
237
255
  Сделай `AGENTS.md` короткой входной картой для AI-агента. В нём должны быть:
238
256
  - краткое описание проекта;
239
- - ссылки на `docs/rules.md`, `docs/arch.md`, `docs/references.md` и другие действительно обязательные документы из `docs/`;
257
+ - ссылки на `docs/rules.md`, `docs/arch.md`, `docs/references.md` и другие действительно обязательные документы из `docs/` с требованием выбирать по их таблицам только карточки, применимые к текущей задаче;
240
258
  - ссылка на `docs/business.md`, если индекс существует, с требованием выбирать по нему только карточки, применимые к текущей задаче;
241
259
  - требование прочитать их и следовать им до работы над проектом.
242
260
 
@@ -249,6 +267,7 @@ description: 'Готовит проект к работе с AI: проекти
249
267
  ### 12. Проверить результат
250
268
 
251
269
  Убедись, что:
270
+ - документы рамки построены по разделу «Структура рамки»: каждый файл не больше 20 КБ, индексы ведут ко всем карточкам, датированных разделов и журналов изменений нет, правило ведения рамки записано в `docs/rules.md`;
252
271
  - `docs/rules.md` содержит только лаконичные действующие правила;
253
272
  - каждое правило задаёт проверяемое действие или запрет, пути используются только как операнды команд или указатели на конфиги и артефакты, а топология исходного кода и архитектурные границы не продублированы в форме императива;
254
273
  - `docs/arch.md` объясняет подход, структуру папок, части системы и их связи без команд, чек-листов разработки, tooling-политик и повторения правил;
@@ -279,6 +298,7 @@ description: 'Готовит проект к работе с AI: проекти
279
298
  - Спрашивать, какие документы обновлять, если пользователь их не назвал: по умолчанию обновляется весь набор.
280
299
  - Просить выбрать режим перезаписи для каждого существующего файла.
281
300
  - Ограничивать правила фиксированным количеством или разбавлять их пояснениями и предложениями.
301
+ - Оставлять файл рамки больше 20 КБ, датированные разделы и журналы изменений.
282
302
  - Переносить архитектурное решение в `docs/rules.md`, просто переписав его как обязательное действие или запрет.
283
303
  - Дублировать правила и архитектуру в `AGENTS.md` или `CLAUDE.md`.
284
304
  - Ссылаться из карточек на код проекта или внешние материалы вместо самодостаточного примера.
@@ -0,0 +1,129 @@
1
+ ---
2
+ name: eda-prod-check
3
+ description: 'Read-only диагностика работающего окружения: находит в цифрах, почему прод или стейдж отвечает медленно или с ошибками, и сохраняет отчёт с исправлениями.'
4
+ ---
5
+
6
+ # Скил: Проверка окружения (eda-prod-check)
7
+
8
+ Находишь причину, почему работающее окружение — production или staging — отвечает медленно или с ошибками. Работаешь только на чтение: замеряешь, читаешь конфиги и логи, сравниваешь слои между собой. На сервере ничего не меняешь. Результат — отчёт с цифрами и списком исправлений с ожидаемым эффектом.
9
+
10
+ ## Вход из сообщения пользователя
11
+
12
+ Текст рядом с вызовом — главный вход: адрес сайта или API, симптом («каждая страница открывается 5 секунд», «500 на оплате»), окружение и доступ к серверу.
13
+
14
+ - Окружения, серверы, способ деплоя и пути к конфигам сначала ищи в `docs/rules.md`, `docs/arch.md` и их карточках; найденное не спрашивай.
15
+ - Нет адреса — спроси. Нет доступа к серверу — работай снаружи, а серверные слои отметь непроверенными.
16
+ - Симптом без числа превращается в число на первом этапе.
17
+
18
+ ## Главные правила
19
+
20
+ 1. **Только чтение.** Не перезапускай сервисы, не меняй конфиги и файлы, не чисти кеши, не ставь пакеты, не запускай миграции и запросы, которые пишут в базу. Нагрузочные тесты, полные дампы, долгие профилировщики и всё, что заметно нагружает окружение, — только после подтверждения пользователя.
21
+ 2. **Сначала симптом в цифрах.** До гипотез воспроизведи симптом одной повторяемой командой и запиши числа. Повтори 3–5 раз: одна медленная попытка — не симптом.
22
+ 3. **Снаружи — внутрь.** Проходи слои по порядку из чек-листа и сравнивай их замеры. Слой, на котором пропадает время или появляется ошибка, — кандидат в причину. Например, внешний ответ 4 с, а тот же запрос с самого сервера на `127.0.0.1` — 3,9 с: сеть и TLS ни при чём.
23
+ 4. **Гипотезы проверяемы.** После замера составь 3–5 гипотез по убыванию вероятности. Для каждой — предсказание: «если причина X, то проверка Y покажет Z». Покажи список в чате и начинай с самой вероятной, не дожидаясь ответа.
24
+ 5. **Вывод — только с доказательством.** У каждого вывода есть команда и её результат. Слой, который не удалось замерить, — «не проверено», а не «в порядке».
25
+ 6. **Секреты не выводи.** Пароли, токены, ключи и персональные данные из конфигов и логов не попадают в чат и отчёт: пиши `<скрыто>`. Из `.env` читай только нужные ключи, не печатая значения секретов.
26
+ 7. **Исправления не применяй.** Каждое исправление — что поменять и где, ожидаемый эффект в цифрах и риск. Применяет пользователь, `eda-fix` или `eda-plan`.
27
+
28
+ ## Интерактивные вопросы
29
+
30
+ Когда инструкция говорит `AskUserQuestion`, это означает блокирующий интерактивный вопрос: задай его и остановись до ответа.
31
+
32
+ - Неинтерактивный запуск: не задавай вопросы и не пытайся читать stdin. Если без ответа нельзя безопасно продолжать, заверши работу со статусом `blocked: нужен ответ пользователя`, перечисли вопросы и варианты, не выполняй рискованные действия.
33
+ - Не запускай команды, которые ждут интерактивного ввода: пароль SSH, `sudo` с паролем, интерактивные консоли.
34
+
35
+ ## Чек-лист слоёв
36
+
37
+ Команды — примеры для Linux, nginx, PHP и Laravel; для другого стека используй аналоги. Каждый слой получает статус: `проблема`, `в порядке` или `не проверено` с причиной.
38
+
39
+ | Слой | Что проверить |
40
+ |---|---|
41
+ | Снаружи | время DNS, соединения, TLS, первого байта и полной загрузки для главной, типовой страницы и API; код ответа; размер HTML; цепочки редиректов (HTTP → HTTPS → www); версия HTTP |
42
+ | Отдача статики | вес CSS, JS, шрифтов и изображений первого экрана; сжатие (`Content-Encoding: gzip` или `br`); `Cache-Control` и хеш в именах файлов; кто отдаёт статику — веб-сервер, CDN или приложение |
43
+ | Сервер | CPU и steal time (`st` — соседи на виртуалке забирают процессор), load average относительно числа ядер, память и swap, место на диске и iowait, что ещё запущено |
44
+ | Веб-сервер и прокси | сжатие, кеш статики, keep-alive, HTTP/2, таймауты и буферы; время upstream в access-логе; ошибки в error-логе |
45
+ | Runtime | PHP: opcache включён, памяти и слотов под файлы хватает, `validate_timestamps` выключен или проверяет редко; Xdebug и профилировщики не загружены. PHP-FPM: `pm.max_children` соответствует памяти, в логе нет «reached pm.max_children», slowlog. Для Node, Python и других — число воркеров и память процессов |
46
+ | Приложение | debug выключен; кеши фреймворка собраны (в Laravel — `config`, `route`, `view`, `event`); автозагрузчик оптимизирован, dev-пакеты не установлены; драйверы сессий, кеша и очередей (файлы вместо Redis под нагрузкой, очередь `sync` выполняет фоновую работу прямо в запросе); отладочные панели вроде Debugbar и Telescope не пишут каждый запрос; внешние вызовы на пути запроса и их таймауты; ошибки в логе приложения |
47
+ | База данных | медленные запросы и slow log, блокировки и долгие транзакции, число соединений против лимита, размер горячих таблиц и индексы для найденного медленного запроса |
48
+ | Фронтенд | блокирующие скрипты и стили в `<head>`, сторонние скрипты (метрики, чаты, виджеты) и их время, изображения первого экрана без размеров и сжатия, неиспользуемый CSS |
49
+
50
+ Команды по слоям:
51
+
52
+ - Снаружи, 3–5 раз: `curl -o /dev/null -s -w 'dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} ttfb=%{time_starttransfer} total=%{time_total} size=%{size_download} code=%{http_code} http=%{http_version}\n' <url>`; редиректы — `curl -sIL <url>`. Тот же замер с самого сервера на `127.0.0.1` с нужным заголовком `Host` отделяет сеть и TLS от приложения.
53
+ - Отдача статики: `curl -sI -H 'Accept-Encoding: br, gzip' <url файла>`; адреса CSS и JS — из HTML ответа.
54
+ - Сервер: `nproc`, `uptime`, `vmstat 1 5`, `free -m`, `df -h`, `top -bn1 | head -20`.
55
+ - Веб-сервер: `nginx -T` выводит действующий конфиг, ничего не меняя; access- и error-логи — `tail`.
56
+ - Runtime: `php-fpm<версия> -i | grep -E 'opcache|xdebug'` — настройки CLI и FPM различаются, смотри FPM; конфиги пулов и лог FPM.
57
+ - Приложение: `grep -E '^(APP_ENV|APP_DEBUG|CACHE_DRIVER|CACHE_STORE|SESSION_DRIVER|QUEUE_CONNECTION|LOG_LEVEL)=' .env`, `php artisan about`, `ls bootstrap/cache`, лог приложения.
58
+ - База: slow log, `SHOW FULL PROCESSLIST` или `pg_stat_activity`, `EXPLAIN` для найденного запроса. `EXPLAIN ANALYZE` выполняет запрос, поэтому только для `SELECT`.
59
+ - Фронтенд: HTML ответа; Lighthouse или аналог, если доступен.
60
+
61
+ Ориентиры, а не нормы: ответ сервера (TTFB) обычной страницы без тяжёлых запросов — сотни миллисекунд, не секунды; steal time выше 10% заметно замедляет всё; CSS и JS первого экрана в сотни килобайт без сжатия — заметная задержка на мобильном интернете.
62
+
63
+ ## Этапы
64
+
65
+ ### 1. Вход и доступы
66
+
67
+ Определи адрес, симптом, окружение и доступ. Команды на сервере выполняй через доступ, который дал пользователь, обычно `ssh <хост> '<команда>'`. Перед каждой серверной командой убедись, что она только читает.
68
+
69
+ ### 2. Замер симптома
70
+
71
+ Запиши базовые числа по слою «Снаружи». Если симптом не воспроизводится, сообщи это и спроси, когда и где он проявляется: время суток, страница, пользователь, устройство.
72
+
73
+ ### 3. Гипотезы
74
+
75
+ Составь 3–5 проверяемых гипотез по правилу 4 и покажи их.
76
+
77
+ ### 4. Проход по слоям
78
+
79
+ Иди по чек-листу сверху вниз. Если гипотеза подтвердилась, всё равно пройди остальные слои: медленный ответ часто складывается из нескольких причин. Для каждой причины оцени вклад — какую часть времени она даёт.
80
+
81
+ ### 5. Сохранить отчёт
82
+
83
+ Создай `docs/artifacts/prod-checks/{YYYY-MM-DD}_{HH-MM}_{slug}.md`:
84
+
85
+ ```markdown
86
+ ---
87
+ target: <адрес>
88
+ environment: <production | staging>
89
+ date: <YYYY-MM-DD HH:MM>
90
+ symptom: <симптом в цифрах>
91
+ status: <cause-found | partial | blocked>
92
+ ---
93
+
94
+ # Проверка окружения: <адрес>
95
+
96
+ ## Симптом
97
+ <команда и замеры до проверки>
98
+
99
+ ## Причины
100
+
101
+ ### 1. <причина простыми словами>
102
+ <1–2 абзаца: что происходит и почему это даёт симптом>
103
+ - **Вклад:** <какая часть времени или ошибок>
104
+ - **Доказательство:** <команда и ключевая строка вывода>
105
+ - **Исправление:** <что поменять и где>
106
+ - **Ожидаемый эффект:** <число>
107
+ - **Риск:** <что может пойти не так>
108
+
109
+ ## Слои
110
+ | Слой | Статус | Что видно |
111
+ |---|---|---|
112
+ | Снаружи | проблема / в порядке / не проверено | <цифры или причина> |
113
+
114
+ ## Гипотезы
115
+ | Гипотеза | Проверка | Результат |
116
+ |---|---|---|
117
+ ```
118
+
119
+ ### 6. Финал
120
+
121
+ Коротко сообщи путь к отчёту, главную причину с числами и 1–3 исправления с ожидаемым эффектом. Предложи применить их через `eda-fix`, а если исправление меняет инфраструктуру или несколько частей системы — через `eda-plan`.
122
+
123
+ ## Чего НЕ делать
124
+
125
+ - Менять что-либо на сервере, перезапускать сервисы, чистить кеши и писать в базу.
126
+ - Строить гипотезы до замера симптома и объявлять слой исправным без замера.
127
+ - Запускать нагрузочные тесты и тяжёлые профилировщики без подтверждения.
128
+ - Выводить секреты и персональные данные в чат и отчёт.
129
+ - Применять исправления вместо отчёта.