dsh-desktop-kit 0.0.0-stage → 1.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 (177) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +87 -2
  3. package/client.js +3349 -0
  4. package/cordis.patch.yml +5 -0
  5. package/index.js +80 -0
  6. package/package.json +60 -4
  7. package/plugins/dsh-gkb-ru-ui/cordis.patch.yml +6 -0
  8. package/plugins/dsh-gkb-ru-ui/lib/client.js +1083 -0
  9. package/plugins/dsh-gkb-ru-ui/lib/index.js +142 -0
  10. package/plugins/dsh-gkb-ru-ui/lib/skills.js +376 -0
  11. package/plugins/dsh-gkb-ru-ui/package.json +28 -0
  12. package/plugins/dsh-peak-guard/README.md +70 -0
  13. package/plugins/dsh-peak-guard/client.js +741 -0
  14. package/plugins/dsh-peak-guard/cordis.patch.yml +5 -0
  15. package/plugins/dsh-peak-guard/icon.svg +12 -0
  16. package/plugins/dsh-peak-guard/index.js +2 -0
  17. package/plugins/dsh-peak-guard/locale/en.json +6 -0
  18. package/plugins/dsh-peak-guard/locale/ru.json +6 -0
  19. package/plugins/dsh-peak-guard/locale/zh.json +6 -0
  20. package/plugins/dsh-peak-guard/package.json +33 -0
  21. package/plugins/dsh-profile-transfer/README.md +62 -0
  22. package/plugins/dsh-profile-transfer/bootstrap/01-INSTALL.cmd +7 -0
  23. package/plugins/dsh-profile-transfer/bootstrap/README-ARCHIVE.md +54 -0
  24. package/plugins/dsh-profile-transfer/bootstrap/README-/320/243/320/241/320/242/320/220/320/235/320/236/320/222/320/232/320/220.md +42 -0
  25. package/plugins/dsh-profile-transfer/bootstrap/install-on-clean-machine.ps1 +119 -0
  26. package/plugins/dsh-profile-transfer/bootstrap//320/243/320/241/320/242/320/220/320/235/320/236/320/222/320/230/320/242/320/254.cmd +5 -0
  27. package/plugins/dsh-profile-transfer/client.js +806 -0
  28. package/plugins/dsh-profile-transfer/cordis.patch.yml +3 -0
  29. package/plugins/dsh-profile-transfer/icon.svg +13 -0
  30. package/plugins/dsh-profile-transfer/index.js +375 -0
  31. package/plugins/dsh-profile-transfer/locale/en.json +6 -0
  32. package/plugins/dsh-profile-transfer/locale/ru.json +6 -0
  33. package/plugins/dsh-profile-transfer/locale/zh.json +6 -0
  34. package/plugins/dsh-profile-transfer/package.json +36 -0
  35. package/plugins/dsh-profile-transfer/transfer.js +1004 -0
  36. package/plugins/dsh-project-memory/README.md +71 -0
  37. package/plugins/dsh-project-memory/cordis.patch.yml +4 -0
  38. package/plugins/dsh-project-memory/icon.svg +12 -0
  39. package/plugins/dsh-project-memory/index.js +1240 -0
  40. package/plugins/dsh-project-memory/locale/en.json +6 -0
  41. package/plugins/dsh-project-memory/locale/ru.json +6 -0
  42. package/plugins/dsh-project-memory/locale/zh.json +6 -0
  43. package/plugins/dsh-project-memory/package.json +26 -0
  44. package/plugins/dsh-session-move/README.md +67 -0
  45. package/plugins/dsh-session-move/client.js +719 -0
  46. package/plugins/dsh-session-move/cordis.patch.yml +5 -0
  47. package/plugins/dsh-session-move/icon.svg +14 -0
  48. package/plugins/dsh-session-move/index.js +497 -0
  49. package/plugins/dsh-session-move/locale/en.json +6 -0
  50. package/plugins/dsh-session-move/locale/ru.json +6 -0
  51. package/plugins/dsh-session-move/locale/zh.json +6 -0
  52. package/plugins/dsh-session-move/package.json +31 -0
  53. package/skills/code-review-checklist/SKILL.md +37 -0
  54. package/skills/content-writing/README.md +87 -0
  55. package/skills/content-writing/SKILL.md +348 -0
  56. package/skills/content-writing/assets/checklists/fact-check.md +53 -0
  57. package/skills/content-writing/assets/checklists/publish.md +65 -0
  58. package/skills/content-writing/assets/checklists/social.md +40 -0
  59. package/skills/content-writing/assets/templates/article.md +47 -0
  60. package/skills/content-writing/assets/templates/brief.md +44 -0
  61. package/skills/content-writing/assets/templates/doctor-card.md +41 -0
  62. package/skills/content-writing/assets/templates/image-prompts.md +128 -0
  63. package/skills/content-writing/assets/templates/post-telegram.md +36 -0
  64. package/skills/content-writing/assets/templates/post-vk.md +42 -0
  65. package/skills/content-writing/assets/templates/press-release.md +56 -0
  66. package/skills/content-writing/assets/templates/science-pop-note.md +55 -0
  67. package/skills/content-writing/assets/templates/service-card.md +46 -0
  68. package/skills/content-writing/references/anti-ai-style.md +248 -0
  69. package/skills/content-writing/references/editing.md +185 -0
  70. package/skills/content-writing/references/fact-checking.md +205 -0
  71. package/skills/content-writing/references/government-medical.md +246 -0
  72. package/skills/content-writing/references/images.md +212 -0
  73. package/skills/content-writing/references/journalism.md +252 -0
  74. package/skills/content-writing/references/science-popular.md +218 -0
  75. package/skills/content-writing/references/seo-content.md +172 -0
  76. package/skills/content-writing/references/social-media.md +253 -0
  77. package/skills/content-writing/references/templates.md +291 -0
  78. package/skills/database-safety/SKILL.md +31 -0
  79. package/skills/debugging-playbook/SKILL.md +39 -0
  80. package/skills/design-critique/SKILL.md +118 -0
  81. package/skills/dev-workflow/SKILL.md +41 -0
  82. package/skills/git-and-ci/SKILL.md +40 -0
  83. package/skills/pg-upgrade-verify/SKILL.md +48 -0
  84. package/skills/project-deep-dive/SKILL.md +170 -0
  85. package/skills/project-deep-dive/references/recon-commands.md +78 -0
  86. package/skills/project-deep-dive/references/section-templates.md +102 -0
  87. package/skills/project-memory-maintenance/SKILL.md +170 -0
  88. package/skills/project-memory-maintenance/references/journal-template.md +48 -0
  89. package/skills/project-memory-maintenance/references/section-rules.md +57 -0
  90. package/skills/release-and-deploy/SKILL.md +39 -0
  91. package/skills/requirements-and-planning/SKILL.md +115 -0
  92. package/skills/security-review/SKILL.md +36 -0
  93. package/skills/seo/README.md +60 -0
  94. package/skills/seo/SKILL.md +329 -0
  95. package/skills/seo/assets/README.md +66 -0
  96. package/skills/seo/assets/scripts/LICENSE-playwright-core.txt +202 -0
  97. package/skills/seo/assets/scripts/README.md +179 -0
  98. package/skills/seo/assets/scripts/lib/args.mjs +105 -0
  99. package/skills/seo/assets/scripts/lib/browser.mjs +620 -0
  100. package/skills/seo/assets/scripts/lib/zip.mjs +191 -0
  101. package/skills/seo/assets/scripts/seo-audit.mjs +1675 -0
  102. package/skills/seo/assets/snippets/jsonld-breadcrumb.json +30 -0
  103. package/skills/seo/assets/snippets/jsonld-faq.json +39 -0
  104. package/skills/seo/assets/snippets/jsonld-medical-clinic.json +49 -0
  105. package/skills/seo/assets/snippets/jsonld-medical-webpage.json +33 -0
  106. package/skills/seo/assets/snippets/jsonld-organization.json +74 -0
  107. package/skills/seo/assets/snippets/jsonld-physician.json +46 -0
  108. package/skills/seo/assets/snippets/meta.blade.php +61 -0
  109. package/skills/seo/assets/snippets/robots.txt +61 -0
  110. package/skills/seo/assets/snippets/sitemap-urlset-example.xml +72 -0
  111. package/skills/seo/assets/snippets/sitemap.xml +36 -0
  112. package/skills/seo/references/audit-checklist.md +305 -0
  113. package/skills/seo/references/content-seo.md +198 -0
  114. package/skills/seo/references/eeat-medical.md +217 -0
  115. package/skills/seo/references/measurement.md +223 -0
  116. package/skills/seo/references/on-page.md +209 -0
  117. package/skills/seo/references/stack-recipes.md +693 -0
  118. package/skills/seo/references/structured-data.md +485 -0
  119. package/skills/seo/references/technical-seo.md +294 -0
  120. package/skills/service-desk-conventions/SKILL.md +40 -0
  121. package/skills/service-desk-db-safety/SKILL.md +52 -0
  122. package/skills/service-desk-release/SKILL.md +43 -0
  123. package/skills/service-desk-testing/SKILL.md +47 -0
  124. package/skills/service-desk-ui/SKILL.md +33 -0
  125. package/skills/skills-router/SKILL.md +91 -0
  126. package/skills/testing-strategy/SKILL.md +37 -0
  127. package/skills/ui-design-system/SKILL.md +45 -0
  128. package/skills/web-research/SKILL.md +40 -0
  129. package/skills/wow-design/SKILL.md +168 -0
  130. package/skills/wow-design/assets/kit/README.md +195 -0
  131. package/skills/wow-design/assets/kit/assets/css/base.css +158 -0
  132. package/skills/wow-design/assets/kit/assets/css/components.css +1001 -0
  133. package/skills/wow-design/assets/kit/assets/css/fonts.css +73 -0
  134. package/skills/wow-design/assets/kit/assets/css/pages.css +737 -0
  135. package/skills/wow-design/assets/kit/assets/css/tokens.css +218 -0
  136. package/skills/wow-design/assets/kit/assets/fonts/LICENSE-golos-text.txt +93 -0
  137. package/skills/wow-design/assets/kit/assets/fonts/LICENSE-lora.txt +93 -0
  138. package/skills/wow-design/assets/kit/assets/fonts/LICENSE-unbounded.txt +93 -0
  139. package/skills/wow-design/assets/kit/assets/fonts/golos-text-cyrillic-400-normal.woff2 +0 -0
  140. package/skills/wow-design/assets/kit/assets/fonts/golos-text-cyrillic-500-normal.woff2 +0 -0
  141. package/skills/wow-design/assets/kit/assets/fonts/golos-text-cyrillic-600-normal.woff2 +0 -0
  142. package/skills/wow-design/assets/kit/assets/fonts/golos-text-cyrillic-700-normal.woff2 +0 -0
  143. package/skills/wow-design/assets/kit/assets/fonts/golos-text-latin-400-normal.woff2 +0 -0
  144. package/skills/wow-design/assets/kit/assets/fonts/golos-text-latin-500-normal.woff2 +0 -0
  145. package/skills/wow-design/assets/kit/assets/fonts/golos-text-latin-600-normal.woff2 +0 -0
  146. package/skills/wow-design/assets/kit/assets/fonts/golos-text-latin-700-normal.woff2 +0 -0
  147. package/skills/wow-design/assets/kit/assets/fonts/lora-cyrillic-400-italic.woff2 +0 -0
  148. package/skills/wow-design/assets/kit/assets/fonts/lora-cyrillic-400-normal.woff2 +0 -0
  149. package/skills/wow-design/assets/kit/assets/fonts/lora-cyrillic-500-normal.woff2 +0 -0
  150. package/skills/wow-design/assets/kit/assets/fonts/lora-cyrillic-600-normal.woff2 +0 -0
  151. package/skills/wow-design/assets/kit/assets/fonts/lora-latin-400-normal.woff2 +0 -0
  152. package/skills/wow-design/assets/kit/assets/fonts/lora-latin-500-normal.woff2 +0 -0
  153. package/skills/wow-design/assets/kit/assets/fonts/lora-latin-600-normal.woff2 +0 -0
  154. package/skills/wow-design/assets/kit/assets/fonts/unbounded-cyrillic-400-normal.woff2 +0 -0
  155. package/skills/wow-design/assets/kit/assets/fonts/unbounded-cyrillic-500-normal.woff2 +0 -0
  156. package/skills/wow-design/assets/kit/assets/fonts/unbounded-cyrillic-600-normal.woff2 +0 -0
  157. package/skills/wow-design/assets/kit/assets/fonts/unbounded-latin-400-normal.woff2 +0 -0
  158. package/skills/wow-design/assets/kit/assets/fonts/unbounded-latin-500-normal.woff2 +0 -0
  159. package/skills/wow-design/assets/kit/assets/fonts/unbounded-latin-600-normal.woff2 +0 -0
  160. package/skills/wow-design/assets/kit/assets/js/kit.js +550 -0
  161. package/skills/wow-design/assets/kit/pages/dashboard.html +539 -0
  162. package/skills/wow-design/assets/kit/pages/hospital.html +430 -0
  163. package/skills/wow-design/assets/kit/showcase.html +1164 -0
  164. package/skills/wow-design/assets/scripts/LICENSE-axe-core.txt +362 -0
  165. package/skills/wow-design/assets/scripts/LICENSE-playwright-core.txt +202 -0
  166. package/skills/wow-design/assets/scripts/README.md +312 -0
  167. package/skills/wow-design/assets/scripts/audit.mjs +1200 -0
  168. package/skills/wow-design/assets/scripts/capture.mjs +337 -0
  169. package/skills/wow-design/assets/scripts/package.json +30 -0
  170. package/skills/wow-design/references/anti-patterns.md +249 -0
  171. package/skills/wow-design/references/critique-rubric.md +259 -0
  172. package/skills/wow-design/references/design-brief-template.md +46 -0
  173. package/skills/wow-design/references/inspiration.md +200 -0
  174. package/skills/wow-design/references/presets.md +96 -0
  175. package/skills/wow-design/references/principles.md +368 -0
  176. package/skills/wow-design/references/stack-recipes.md +93 -0
  177. package/skills/wow-design/references/visual-qa.md +79 -0
@@ -0,0 +1,170 @@
1
+ ---
2
+ name: project-memory-maintenance
3
+ description: "Правила ведения локальной памяти проектов через project_memory: журнал после каждой значимой сессии, обновление секций досье, дедупликация поиском, лимиты размера, свежесть INDEX.json."
4
+ whenToUse: "После любой значимой сессии в проекте (до финального ответа), при изменении архитектуры, инвариантов или команд, при найденной ловушке, при устаревании досье и по просьбе «запомни это»."
5
+ user-invocable: true
6
+ ---
7
+
8
+ # PROJECT-MEMORY-MAINTENANCE — ведение памяти проекта
9
+
10
+ > Память полезна, только если она актуальна, не дублируется и не превращается в свалку.
11
+ > Хранилище локальное: `%USERPROFILE%\.dsh\projects-memory\<slug>\`.
12
+ > Содержимое проекта не отправляется в сеть никогда.
13
+
14
+ ## 0. Контракт
15
+
16
+ 1. Журнал пишется **после каждой значимой сессии**, до финального ответа пользователю.
17
+ 2. В секции досье попадают только долговечные факты; ход работы — в журнал.
18
+ 3. Перед записью — `search`: дубликат дописывай в существующий пункт, а не создавай новый.
19
+ 4. В досье, журнале и `INDEX.json` нет секретов, PII, копий кода и дампов.
20
+ 5. Пиши только через `project_memory`; файлы хранилища руками не редактируй.
21
+
22
+ ## 1. API (кратко)
23
+
24
+ Сигнатура: `project_memory(action, project?, file?, content?, query?, root?, name?, mode?, maxChars?)`.
25
+ В текущей сборке инструмента у `register` есть также необязательный `stack`.
26
+ Хранилище: `%USERPROFILE%\.dsh\projects-memory\<slug>\` — `PROJECT.md`, `ARCHITECTURE.md`, `CODE-MAP.md`, `INVARIANTS.md`, `GOTCHAS.md`, `RUNBOOK.md`, `JOURNAL/YYYY-MM.md`, `INDEX.json`.
27
+
28
+ | action | Когда | Аргументы |
29
+ |---|---|---|
30
+ | `status` | в начале и в конце сессии | — |
31
+ | `list` | если нужно найти проект | — |
32
+ | `read` | перед правкой секции | `project`, `file`, `maxChars` |
33
+ | `search` | перед любой записью (дедуп) | `project`, `query`, `maxChars` |
34
+ | `append_journal` | после сессии | `project`, `content` |
35
+ | `update_section` | долговечный факт | `project`, `file`, `content`, `mode` |
36
+ | `register` | новый проект | `name`, `root` (+ `stack`) |
37
+
38
+ - `file` — `PROJECT`, `ARCHITECTURE`, `CODE-MAP`, `INVARIANTS`, `GOTCHAS`, `RUNBOOK`, `JOURNAL`.
39
+ - `mode` — `replace` (по умолчанию) или `append`.
40
+ - `project` по умолчанию — проект текущей сессии; при работе с чужим проектом указывай slug явно.
41
+ - `maxChars` ограничивает вывод `read` (500–30000, по умолчанию 12000); не выкачивай досье целиком без нужды.
42
+
43
+ ## 2. Что считать значимой сессией
44
+
45
+ Да:
46
+ - изменение кода/конфига/схемы данных;
47
+ - архитектурное или продуктовое решение;
48
+ - найденная и исправленная ошибка, подтверждённая проверкой;
49
+ - новый инвариант или ловушка, которые должны пережить сессию;
50
+ - деплой, откат, смена окружения или команд запуска;
51
+ - глубокий анализ проекта (`project-deep-dive`).
52
+
53
+ Нет:
54
+ - тривиальный вопрос, чтение файла без выводов;
55
+ - повторное обсуждение уже записанного;
56
+ - неудачная попытка без нового знания.
57
+
58
+ Сомневаешься — пиши короткую запись в журнал: лишняя строка дешевле потерянного знания.
59
+
60
+ ## 3. Журнал: когда и как
61
+
62
+ Пиши `append_journal` в конце каждой значимой сессии (файл `JOURNAL/YYYY-MM.md` текущего месяца).
63
+ Несколько связанных шагов в одной сессии — одна запись, а не десять.
64
+
65
+ Точный шаблон записи:
66
+ ```markdown
67
+ ## YYYY-MM-DD — <краткое название сессии>
68
+ - Что делали: ...
69
+ - Что выявили: ...
70
+ - Решения: ...
71
+ - Проверки: ...
72
+ - Осталось: ...
73
+ ```
74
+
75
+ Правила:
76
+ - Вызов: `project_memory(action="append_journal", project="<slug>", content="<запись>")`.
77
+ - Все пять пунктов обязательны; если пункт пуст — пиши «нет», не удаляй его.
78
+ - 1–3 строки на пункт; без копий кода, логов, дампов и пересказа чата.
79
+ - «Что выявили» — факты, меняющие понимание проекта (причина, зависимость, ловушка).
80
+ - «Проверки» — что реально запускалось и результат: тесты, линтер, сборка, ручной сценарий, тест на копии.
81
+ - «Осталось» — конкретные следующие шаги или риски; «нет» допустимо.
82
+ - Секреты и PII вырезай: «ошибка с `DB_PASSWORD` (значение не сохранено)».
83
+ - Подробный шаблон и примеры — `references/journal-template.md`.
84
+
85
+ ## 4. Правила обновления секций
86
+
87
+ | Секция | Обновляй, когда | Не пиши сюда |
88
+ |---|---|---|
89
+ | `PROJECT` | сменились стек, пути, прод, владелец, статус | историю сессий (это журнал) |
90
+ | `ARCHITECTURE` | новые/удалённые компоненты, границы, потоки, внешние сервисы | детали реализации алгоритмов |
91
+ | `CODE-MAP` | новый модуль, маршрут, точка входа; сдвинулись якоря | код целиком |
92
+ | `INVARIANTS` | новое жёсткое правило, подтверждённое тестом или пользователем | советы и вкусовые предпочтения |
93
+ | `GOTCHAS` | каждая неочевидная ловушка с симптомом | банальности «проверяй null» |
94
+ | `RUNBOOK` | изменились команды, окружение, деплой, откат | объяснение архитектуры |
95
+ | `JOURNAL` | каждая значимая сессия | дампы, секреты, чат |
96
+
97
+ - `mode="append"` — добавляешь пункт; `mode="replace"` — перестраиваешь или чистишь секцию (сначала `read`).
98
+ - Долговечный факт = верен через месяц и вне контекста сегодняшней задачи.
99
+ - Один факт — одно место. Нужен в двух секциях — дай ссылку `path:line`, а не копию.
100
+ - Подробные правила по каждой секции — `references/section-rules.md`.
101
+
102
+ ## 5. Дедупликация: поиск до записи
103
+
104
+ 1. Сформулируй 1–3 термина по теме (имя модуля, команда, текст ошибки, синонимы: «очереди/jobs/queue»).
105
+ 2. По каждому: `project_memory(action="search", project="<slug>", query="<термин>", maxChars=4000)`.
106
+ 3. Нашёл — `read` секцию и дополни существующий пункт; не создавай второй.
107
+ 4. Не нашёл — добавь новый пункт.
108
+ 5. После записи — `read` секцию: дубля нет, секрета нет, ссылка существует.
109
+
110
+ Запрещено: дублировать один факт в журнале и нескольких секциях; писать почти одинаковые пункты разными словами.
111
+
112
+ ## 6. Лимиты размера
113
+
114
+ - Каждая секция ≤ 40 KB. Приближаешься к лимиту — сокращай до выводов и ссылок.
115
+ - 1 пункт — 1–3 строки; без воды, повторов и пересказа кода.
116
+ - Подробности, таблицы и длинные списки — в reference-файлы проекта (`docs/`, `references/`, README); в секции — ссылка `path:line`.
117
+ - `JOURNAL/` уже разделён по месяцам: не раздувай месяц, повторяющиеся выводы своди в секции.
118
+ - Раздутая секция — признак того, что в досье тащат детали реализации; перенеси их в проект и оставь ссылки.
119
+
120
+ ## 7. Свежесть и INDEX.json
121
+
122
+ `INDEX.json` — машинный файл хранилища; вручную не редактируется. Значимые поля:
123
+ - `lastAnalyzedAt` — когда досье проанализировано целиком (а не косметически поправлено);
124
+ - `git.branch`, `git.head` — ветка и коммит, на которых сделан анализ;
125
+ - `confidence` — сводная уверенность: высокая при ключевых `[проверено]`, средняя при смеси, низкая при заметном `[устарело]`.
126
+
127
+ Правила:
128
+ - В начале сессии `status`; сравни `git.head`/ветку с текущими:
129
+ `git -C <root> rev-parse --abbrev-ref HEAD` и `git -C <root> rev-parse --short HEAD`.
130
+ - Расходятся — досье устарело: перечитай затронутые секции, обнови факты, старые пометь `[устарело]`.
131
+ - Полный анализ (`project-deep-dive`) — в отчёте укажи, на каком коммите он сделан; частичная правка не должна выглядеть как полный анализ.
132
+ - `confidence` повышай только новыми `[проверено]`; понижай при `[устарело]` и большом объёме `[выведено]`.
133
+ - Если после записи `status` показывает неактуальные поля — это расхождение инструмента: зафиксируй в отчёте и сообщи, но `INDEX.json` руками не правь.
134
+
135
+ ## 8. Порядок конца сессии (5 шагов)
136
+
137
+ 1. `status` — проект и свежесть.
138
+ 2. `search` по темам сессии (1–3 запроса).
139
+ 3. `append_journal` — запись по шаблону §3.
140
+ 4. `update_section` — только долговечные факты, одна секция — один вызов.
141
+ 5. `read` 1–2 изменённые секции и проверка по чек-листу §9; в отчёт — что записано.
142
+
143
+ ## 9. Финальный чек-лист
144
+
145
+ - [ ] `status` вызван, проект определён.
146
+ - [ ] `search` был до записи, дублей нет.
147
+ - [ ] Журнал записан по шаблону, все пять пунктов на месте.
148
+ - [ ] Секции обновлены только долговечными фактами.
149
+ - [ ] Секретов, PII и копий кода нет.
150
+ - [ ] У ключевых утверждений метка `[проверено]`/`[выведено]`/`[устарело]` и ссылка `path:line`.
151
+ - [ ] Секции ≤ 40 KB; детали вынесены в references.
152
+ - [ ] Свежесть в порядке: `git.head` соответствует анализу, устаревшее помечено.
153
+ - [ ] Пользователю перечислено, что записано.
154
+
155
+ ## 10. Антипаттерны
156
+
157
+ - Писать в досье после каждого шага: журнал — да, секции — нет.
158
+ - Дублировать один факт в нескольких секциях и журнале.
159
+ - Копировать код, логи, дампы, переписку.
160
+ - Секреты и PII в журнале («пароль ...», «токен ...»).
161
+ - Править файлы досье и `INDEX.json` руками.
162
+ - Превращать `PROJECT.md` в дневник.
163
+ - Заявлять полный анализ после косметической правки.
164
+ - Раздувать секцию до огромного размера вместо ссылок.
165
+ - Записывать одноразовые детали, которые не переживут сессию.
166
+
167
+ ## 11. Связанное
168
+
169
+ - Первичный анализ проекта — `project-deep-dive`.
170
+ - Процесс разработки — `dev-workflow`; финальное ревью — `code-review-checklist`.
@@ -0,0 +1,48 @@
1
+ # Шаблон журнала проекта
2
+
3
+ Журнал — хронология значимых сессий. Файл: `JOURNAL/YYYY-MM.md` (месяц определяется датой записи).
4
+ Пишется действием `append_journal`, не вручную.
5
+
6
+ ## Точный шаблон
7
+
8
+ ```markdown
9
+ ## YYYY-MM-DD — <краткое название сессии>
10
+ - Что делали: ...
11
+ - Что выявили: ...
12
+ - Решения: ...
13
+ - Проверки: ...
14
+ - Осталось: ...
15
+ ```
16
+
17
+ ## Требования к записи
18
+
19
+ | Пункт | Что писать | Объём |
20
+ |---|---|---|
21
+ | Что делали | конкретные действия и затронутые области | 1–3 строки |
22
+ | Что выявили | факты, меняющие понимание проекта: причины, зависимости, ловушки | 1–3 строки |
23
+ | Решения | что выбрали и почему (альтернативу — одной фразой) | 1–3 строки |
24
+ | Проверки | что запускалось и результат: тесты, линтер, сборка, ручной сценарий | 1–3 строки |
25
+ | Осталось | следующие шаги, риски, открытые вопросы | 1–3 строки, «нет» допустимо |
26
+
27
+ - Все пять пунктов обязательны; пустой пункт не удаляй, пиши «нет».
28
+ - Ссылки на файлы — `path:line`, без копий кода и логов.
29
+ - Секреты и PII вырезаются: «ошибка с `DB_PASSWORD` (значение не сохранено)».
30
+ - Одна сессия — одна запись. Продолжение в тот же день — дополняй последнюю запись или пиши отдельную с пометкой «продолжение».
31
+
32
+ ## Пример
33
+
34
+ ```markdown
35
+ ## 2026-11-04 — разбор очередей и деплоя
36
+ - Что делали: прочитали `config/queue.php`, `app/Jobs/*`, CI-пайплайн; проверили команды запуска.
37
+ - Что выявили: воркер запускается только на проде через systemd, локально очередь работает в sync-режиме; ретраи не настроены.
38
+ - Решения: в досье зафиксировали как ловушку; локальные тесты очередей требуют `QUEUE_CONNECTION=database`.
39
+ - Проверки: `php artisan queue:work --once` на тестовой БД — успешно; PHPUnit — 42 теста зелёные.
40
+ - Осталось: проверить поведение при падении воркера; уточнить таймаут ретраев у владельца.
41
+ ```
42
+
43
+ ## Антипримеры
44
+
45
+ - «Сделали задачу» — что именно, где, чем проверено, что осталось.
46
+ - Копия вывода тестов на 100 строк — оставь счётчик и путь к отчёту.
47
+ - «Исправили пароль в .env на SECRET123» — секрет, так нельзя.
48
+ - Шесть записей за один день по одному шагу — одна запись на сессию.
@@ -0,0 +1,57 @@
1
+ # Правила обновления секций досье
2
+
3
+ Общие принципы для всех секций:
4
+ - Только долговечные факты: верны через месяц и вне сегодняшнего контекста.
5
+ - Ссылка `path:line` вместо копии кода; одно утверждение — один источник.
6
+ - Ключевые утверждения с меткой `[проверено]/[выведено]/[устарело]`.
7
+ - Объём секции ≤ 40 KB; детали — в файлах проекта, в секции — ссылка.
8
+ - Перед правкой — `read`, после правки — `read` обратно (проверка дублей и секретов).
9
+
10
+ ## PROJECT.md
11
+ - Обновляй: сменился стек или версии, переехал репозиторий/прод, другой способ запуска, изменился владелец или статус.
12
+ - Структура: назначение, стек и версии, расположение (копия/прод), запуск, статус и владелец.
13
+ - Не пиши: историю сессий, подробности реализации, списки файлов (это `CODE-MAP`).
14
+ - Ошибка: «сегодня настроили окружение» — это журнал, а не проект.
15
+
16
+ ## ARCHITECTURE.md
17
+ - Обновляй: новый/удалённый компонент, изменение границ, потока данных, очередей/крона, внешних сервисов, ключевое решение.
18
+ - Структура: компоненты и границы, точки входа, поток данных (текстом), внешние зависимости, решения и компромиссы.
19
+ - Не пиши: детали алгоритмов, полный список классов, код.
20
+ - Помечай `[выведено]`, если границы восстановлены по косвенным признакам.
21
+
22
+ ## CODE-MAP.md
23
+ - Обновляй: новый модуль/маршрут/точка входа/сервис/конфиг/тест; сдвинулись якоря после рефакторинга.
24
+ - Структура: таблица «область | путь | зачем»; точки входа; модели и схема; тесты; конфиги.
25
+ - Не пиши: код и пересказ методов; записи без назначения.
26
+ - Проверяй актуальность путей перед сохранением: мёртвая ссылка хуже отсутствующей.
27
+
28
+ ## INVARIANTS.md
29
+ - Обновляй: появилось жёсткое правило, подтверждённое тестом, пользователем или инцидентом.
30
+ - Структура на пункт: правило → почему → как проверить → источник `path:line`/тест.
31
+ - Не пиши: советы, вкусовые предпочтения, «желательно».
32
+ - Устаревший инвариант не удаляй молча: помечай `[устарело]` и указывай, чем заменён.
33
+
34
+ ## GOTCHAS.md
35
+ - Обновляй: встретили неочевидную ловушку с воспроизводимым симптомом и обходом.
36
+ - Структура: симптом → причина → обход → риск, если игнорировать.
37
+ - Не пиши: банальности («проверяй null»), предположения без подтверждения.
38
+ - Ловушка, исправленная навсегда (например, баг закрыт), помечается `[устарело]`.
39
+
40
+ ## RUNBOOK.md
41
+ - Обновляй: изменились команды запуска/тестов/сборки, окружение, деплой, откат, бэкап, места логов.
42
+ - Структура: окружение, установка, запуск, тесты, сборка, деплой и откат, бэкап, диагностика.
43
+ - Не пиши: объяснение архитектуры (это `ARCHITECTURE`).
44
+ - Команды копируй из README/AGENTS/CI; не сочиняй «примерно так».
45
+ - Для опасных команд явно: когда нельзя запускать (прод, боевая БД).
46
+
47
+ ## JOURNAL/YYYY-MM.md
48
+ - Обновляй: каждая значимая сессия (см. §3 основного файла).
49
+ - Пиши только через `append_journal`.
50
+ - Не пиши: дампы, длинные логи, секреты, пересказ чата.
51
+ - Не смешивай журнал с досье: «что делали» остаётся здесь, «как устроено» — в секциях.
52
+
53
+ ## INDEX.json
54
+ - Ручная правка запрещена.
55
+ - Отражает свежесть: `lastAnalyzedAt`, `git.branch`, `git.head`, `confidence`.
56
+ - `lastAnalyzedAt` — только после полного анализа, не после каждой правки секции.
57
+ - Если `status` показывает расхождение с фактическим состоянием — зафиксируй в отчёте, не правь файл.
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: release-and-deploy
3
+ description: "Универсальный выпуск и выкатка — версионирование, сборка артефакта, checksums, безопасный деплой, smoke-проверки, откат."
4
+ whenToUse: "При подготовке релиза/обновления любого проекта и при выкатке на сервер."
5
+ user-invocable: true
6
+ ---
7
+
8
+ # Релиз и выкатка (универсально)
9
+
10
+ ## Принципы
11
+ - Артефакт собирается **один раз** и выкатывается неизменным (immutable release).
12
+ - Версия — по SemVer/правилам проекта: feature → minor, fix → patch, breaking → major; фиксируется в артефакте и на сервере.
13
+ - Перед выкаткой — бэкап БД/файлов и известный план отката.
14
+ - Выкатка — контролируемая: maintenance-режим на время миграций, smoke после.
15
+
16
+ ## Сборка
17
+ 1. Все проверки зелёные: линтер, статанализ, тесты (unit/feature), E2E/UI для интерфейса.
18
+ 2. Не включать в артефакт: `.env`, `vendor/`, `node_modules/`, сборки, `storage/`, `.git`.
19
+ 3. **Checksums** (SHA-256) артефакта; записать в `checksums.txt`.
20
+ 4. Зафиксировать состав изменений (CHANGELOG/RELEASE-NOTES): что изменилось, миграции, риски.
21
+
22
+ ## Выкатка
23
+ 1. Проверить целостность артефакта (`sha256sum`).
24
+ 2. Бэкап БД + файлов + текущего кода (для отката).
25
+ 3. Применить артефакт по штатной процедуре проекта.
26
+ 4. Зависимости/сборка — только как в штатном скрипте (не руками вразнобой).
27
+ 5. Миграции — аддитивные; при риске maintenance-режим.
28
+ 6. Перезапустить процессы (очереди, php-fpm, воркеры), сбросить/собрать кэши.
29
+ 7. Smoke: ключевые URL, вход, основная функция, логи без ошибок.
30
+
31
+ ## Откат
32
+ - Код: предыдущий артефакт/папка/тег.
33
+ - БД: восстановление из бэкапа — только если релиз менял данные/схему.
34
+ - Снять maintenance, повторить smoke, сообщить пользователям.
35
+
36
+ ## После релиза
37
+ - Наблюдать логи/метрики 15–30 минут; проверить фоновые задачи.
38
+ - Записать факт выкатки и результат проверок в память проекта/CHANGELOG.
39
+ - Старые артефакты хранить до подтверждения стабильности (потом чистить).
@@ -0,0 +1,115 @@
1
+ ---
2
+ name: requirements-and-planning
3
+ description: "Анализ задачи и планирование: требования, критерии приёмки, декомпозиция, риски, варианты решений и проверяемый план — для кода, дизайна, SEO, данных, релизов и любых проектов."
4
+ whenToUse: "Любая новая задача до реализации: понять запрос, уточнить неясное, зафиксировать критерии приёмки, спланировать шаги и проверки; анализ/исследование/сравнение вариантов."
5
+ user-invocable: true
6
+ ---
7
+
8
+ # REQUIREMENTS & PLANNING — сначала думать, потом делать
9
+
10
+ > Цель: не «начать кодить и по ходу разобраться», а **понять задачу, договориться о результате и
11
+ > спланировать проверяемые шаги**. Это снижает переделки, риски и потерю данных — и повышает качество.
12
+
13
+ ## 0. Контракт
14
+ 1. **Одно предложение:** переформулируй запрос своими словами — что должно измениться для пользователя.
15
+ 2. **Неясное — уточняй** (одним сообщением, 1–3 вопроса), но не блокируйся: если вопрос не критичен,
16
+ зафиксируй допущение и двигайся; критичное (данные, деньги, права, необратимость) — только после ответа.
17
+ 3. **Критерии приёмки — до кода.** «Готово» должно быть проверяемым (Given/When/Then или чек-лист).
18
+ 4. **План — до правок:** шаги, затронутые файлы/системы, зависимости, проверки, откат.
19
+ 5. **Scope guard:** явно перечисли, что входит и что НЕ входит; не расширяй молча.
20
+ 6. **Финал:** отчёт «что сделано / как проверено / риски / что дальше» — по факту критериев.
21
+
22
+ ## 1. Процесс (8 шагов)
23
+
24
+ ### Шаг 1. Понять запрос
25
+ - Кто пользователь и в каком контексте? Что болит? Какая цель (сэкономить время, снизить ошибки, продать, найти)?
26
+ - Что уже есть (текущее поведение/скриншот/код)? Что должно стать?
27
+ - Формат результата: экран? файл? архив? релиз? отчёт? API?
28
+
29
+ ### Шаг 2. Контекст и разведка
30
+ - Прочитай память/досье проекта (`memory/INDEX.md`, `memory/projects/<проект>.md`), `AGENTS.md`.
31
+ - Найди затронутые файлы, маршруты, модели, шаблоны, тесты, конфиги.
32
+ - Проверь ограничения: стек, версии, окружение, права, бэкапы, кэш, SEO, дизайн-система.
33
+ - Не проектируй вслепую: 10 минут разведки экономят часы.
34
+
35
+ ### Шаг 3. Требования и критерии приёмки
36
+ Заполни:
37
+ - **Цель:** <одно предложение>
38
+ - **Пользователь и сценарий:** <кто/что делает/зачем>
39
+ - **Входит:** <...>
40
+ - **Не входит:** <...>
41
+ - **Критерии приёмки:** проверяемые пункты (например: «заявка создаётся с выбранной срочностью», «на 390px нет overflow», «title/description/canonical на странице», «PHPUnit зелёный, +2 теста»).
42
+ - **Ограничения:** <бюджет времени, стек, нельзя ломать…>
43
+
44
+ ### Шаг 4. Варианты решения
45
+ - 2–3 варианта (если выбор неочевиден): плюсы, минусы, риски, трудозатраты.
46
+ - Выбери и обоснуй. Для рискованных — предпочти самый обратимый.
47
+ - Для крупных задач — вертикальный срез (тонкая сквозная реализация), а не «сначала весь бэкенд».
48
+
49
+ ### Шаг 5. План
50
+ ```
51
+ 1. <шаг> — файлы: ... — проверка: ...
52
+ 2. <шаг> — файлы: ... — проверка: ...
53
+ ...
54
+ ```
55
+ - Декомпозируй до 1–2 часовых шагов; отметь зависимости и параллелизм.
56
+ - Для каждого шага — как проверить (тест/скриншот/запрос/аудит).
57
+ - Зафиксируй порядок: сначала бэкап/подготовка, потом изменения, потом проверка, потом откат-план.
58
+
59
+ ### Шаг 6. Риски и откат
60
+ - Таблица: риск → вероятность/влияние → митигация.
61
+ - Что может сломаться (данные, прод, кэш, SEO, дизайн, интеграции)? Как откатим?
62
+ - Перед необратимым: бэкап, dry-run, копия, feature-флаг.
63
+
64
+ ### Шаг 7. Исполнение с чекпоинтами
65
+ - Двигайся по плану; после каждого блока — быстрая проверка (тест/линт/скриншот).
66
+ - Отклонение от плана — фиксируй и объясняй; scope creep — в отдельный список «потом».
67
+ - Для UI/SEO/БД используй соответствующие скиллы и их гейты.
68
+
69
+ ### Шаг 8. Сдача
70
+ - Сверь результат с критериями приёмки (таблица «критерий → как проверено → результат»).
71
+ - Отчёт: что сделано, как проверено, риски/ограничения, что дальше.
72
+ - Обнови память (`SESSIONS.md`, досье) и версию/документацию, если применимо.
73
+
74
+ ## 2. Шаблон брифа (короткий)
75
+ ```
76
+ Задача: <одно предложение>
77
+ Зачем: <польза>
78
+ Пользователь/сценарий: <...>
79
+ Входит / Не входит: <...>
80
+ Критерии приёмки: <3–7 проверяемых пунктов>
81
+ Ограничения: <стек, сроки, нельзя ломать>
82
+ Риски/откат: <...>
83
+ План: <3–7 шагов с проверками>
84
+ ```
85
+
86
+ ## 3. Шаблон критериев приёмки
87
+ - Given <контекст>, when <действие>, then <результат>.
88
+ - UI: 1440/768/390, light/dark, состояния, контраст AA, нет overflow.
89
+ - SEO: title/description, один H1, canonical, OG, schema, sitemap/robots (если применимо).
90
+ - API/данные: код ответа, валидация, транзакция, права, отсутствие N+1.
91
+ - Тесты: baseline не ухудшен, новые тесты зелёные.
92
+ - Релиз: артефакт собран, checksum, инструкция, откат.
93
+
94
+ ## 4. Эвристики оценки
95
+ - Небольшая правка — 0,5–2 ч; компонент — 2–6 ч; экран — 0,5–2 дня; фича с БД/тестами — 1–3 дня.
96
+ - Неизвестный стек/чужая кодовая база — ×1,5–2 к оценке.
97
+ - Всегда добавляй время на проверку (тесты/скриншоты/аудит) и на непредвиденное (+20–30%).
98
+ - Если оценка > 2 дней — дели на этапы с отдельной сдачей.
99
+
100
+ ## 5. Антипаттерны
101
+ - Начать с кода, не поняв, что считать «готово».
102
+ - Уточнять «потом», когда уже всё сломано.
103
+ - План из одного пункта «сделать всё».
104
+ - Нет критериев приёмки → бесконечные правки и споры.
105
+ - Нет откат-плана для миграций/релизов/прод-правок.
106
+ - Молча расширить scope («заодно переделал ещё 10 страниц»).
107
+ - Считать «сделал» = «написал код» (без проверки и отчёта).
108
+
109
+ ## 6. Чек-лист перед стартом
110
+ - [ ] Запрос переформулирован одним предложением.
111
+ - [ ] Критичные неясности уточнены или зафиксированы допущения.
112
+ - [ ] Прочитана память/досье, найдены затронутые файлы.
113
+ - [ ] Критерии приёмки зафиксированы.
114
+ - [ ] Есть план с проверками и откатом.
115
+ - [ ] Подобраны скиллы (`skills-router`) под типы работ.
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: security-review
3
+ description: "Универсальный чек-лист безопасности — аутентификация, авторизация, ввод/вывод, загрузки, секреты, зависимости."
4
+ whenToUse: "При добавлении маршрутов, форм, API, загрузок, прав доступа; перед релизом и ревью."
5
+ user-invocable: true
6
+ ---
7
+
8
+ # Безопасность (универсальный чек-лист)
9
+
10
+ ## Доступ
11
+ - [ ] Каждый маршрут явно защищён (auth + нужное право/роль); публичными остаются только осознанные.
12
+ - [ ] Нет IDOR: доступ к объекту проверяет владельца/право, а не только «авторизован».
13
+ - [ ] Привилегированные действия (назначить роль, удалить, изменить чужие данные) — отдельное право.
14
+ - [ ] Сессия: регенерация при входе, корректный выход, разумный срок жизни, cookie HttpOnly/Secure.
15
+
16
+ ## Ввод
17
+ - [ ] Валидация на сервере для всех полей (тип, длина, диапазон, формат); клиентская — только UX.
18
+ - [ ] Нет SQL-конкатенации пользовательских данных; только параметры/query builder/ORM.
19
+ - [ ] Массовое присвоение ограничено (`fillable`/явные поля).
20
+ - [ ] Загрузки: whitelist расширений и MIME, лимит размера, хранение вне webroot (или безопасная отдача), уникальные имена.
21
+ - [ ] Нет SSRF/XXE/десериализации недоверенных данных; внешние URL — валидировать.
22
+
23
+ ## Вывод
24
+ - [ ] Экранирование по контексту; «безопасный HTML» — только через санитайзер с whitelist.
25
+ - [ ] Никаких `{!! !!}`/`innerHTML` для пользовательских данных.
26
+ - [ ] Заголовки безопасности: CSP, X-Content-Type-Options, правильный Content-Disposition для файлов.
27
+ - [ ] Персональные данные не попадают в логи/URL/скриншоты.
28
+
29
+ ## Секреты и зависимости
30
+ - [ ] Секреты только в `.env`/секрет-хранилище; `.env` в `.gitignore`; ротация при утечке.
31
+ - [ ] Нет дебаг-флагов в продакшене (`APP_DEBUG=false`), подробные ошибки не отдаются наружу.
32
+ - [ ] Зависимости: аудит (`composer audit`, `npm audit`), обновление критичных.
33
+ - [ ] Ограничение частоты на вход/чувствительные действия; защита от перебора.
34
+
35
+ ## Реакция на инцидент
36
+ - Зафиксировать, изолировать, сменить секреты, выпустить фикс, уведомить по политике; записать в память.
@@ -0,0 +1,60 @@
1
+ # SEO-скилл (`seo`) — установка и карта
2
+
3
+ Полноценный скилл «SEO-эксперт» для агента: техническое SEO, on-page, структурированные данные, E-E-A-T/YMYL
4
+ (медицина), контент, стек-рецепты (Laravel/Blade, Bitrix/Aspro, React/Vite, статика), аудит и измерение.
5
+ Правило скилла: **любой веб-артефакт (страница, шаблон, мета, URL, контент) пишется с SEO по умолчанию**.
6
+
7
+ Актуальность: **04.11.2026** (Google Search Central + Яндекс Вебмастер + schema.org + web.dev).
8
+ Спорные/меняющиеся места в текстах помечены «проверить на актуальной версии».
9
+
10
+ ## Установка
11
+
12
+ 1. Скопировать каталог в скиллы DSH:
13
+ `projects/seo-skill/` → `%USERPROFILE%\.dsh\skills\seo\`
14
+ (SKILL.md в корне, `references/`, `assets/` — рядом).
15
+ 2. Проверить каталог скиллов: скилл должен появиться как `seo` (frontmatter: `name: seo`,
16
+ `whenToUse`, `user-invocable: true`).
17
+ 3. Агент загружает его через tool `skill` перед любой веб-задачей; глобальный контракт в `~/.dsh/AGENTS.md`
18
+ §1b требует загружать `seo` для любого веб-артефакта.
19
+ 4. Инструмент `assets/scripts/seo-audit.mjs` добавляет qa-toolsmith (task-5) — контракт интерфейса уже
20
+ зафиксирован в `assets/scripts/README.md`.
21
+
22
+ ## Что внутри
23
+
24
+ | Файл | Назначение |
25
+ |---|---|
26
+ | `SKILL.md` | контракт «SEO по умолчанию», процесс 8 шагов, матрица по типам страниц, SEO-GATE, антипаттерны, шаблоны title/description, Google vs Яндекс, lite-режим |
27
+ | `references/technical-seo.md` | краулинг/индексация, статусы, robots.txt, sitemap, canonical, дубли, пагинация, фасеты, hreflang, CWV, JS/SPA, лог-анализ, миграции URL, топ-20 ошибок |
28
+ | `references/on-page.md` | title/description/H1–H6, URL, структура страницы услуги, изображения, анкоры, OG/Twitter, крошки, сниппет, примеры «плохо→хорошо» |
29
+ | `references/structured-data.md` | JSON-LD: граф сайта, BreadcrumbList, MedicalWebPage, Physician, MedicalClinic, Service/MedicalProcedure, FAQPage, Article, Event, Product + что устарело в 2026 + валидация |
30
+ | `references/eeat-medical.md` | YMYL: авторство врачей, рецензент, даты, источники, дисклеймеры, лицензия, локальная клиника (NAP, Яндекс Бизнес, 2ГИС, GBP), 152-ФЗ/38-ФЗ, чек-лист YMYL-гейта |
31
+ | `references/stack-recipes.md` | Laravel/Blade (SeoData, meta-компонент, sitemap/robots-роуты, 301, кэш), Bitrix/Aspro (SEO-шаблоны инфоблоков, canonical, 404, редиректы, robots/sitemap, кэш), React/Vite (Astro/Next/SPA), статика, nginx/.htaccess, проверки |
32
+ | `references/content-seo.md` | SEO-бриф, интенты, семантика/кластеры (Вордстат, Москва), структура лендинга и статьи, перелинковка, CTA, freshness, локализация, ИИ-ответы, редакционный процесс |
33
+ | `references/audit-checklist.md` | 107 проверок P0/P1/P2 по 12 областям + **автоматизируемые проверки (seo-audit.mjs)** + шаблоны отчёта + приоритизация |
34
+ | `references/measurement.md` | GSC, Яндекс Вебмастер, GA4/Метрика, KPI, «до/после», UTM, мониторинг/алерты, шаблоны отчётов |
35
+ | `assets/snippets/` | `meta.blade.php`, JSON-LD (организация, клиника, врач, MedicalWebPage, FAQ, крошки), `robots.txt`, `sitemap.xml` + urlset |
36
+ | `assets/README.md` | как пользоваться сниппетами, статусы разметки в 2026, особенности Битрикса |
37
+ | `assets/scripts/README.md` | контракт `seo-audit.mjs`: интерфейс, выходные файлы, схема JSON, список проверок |
38
+
39
+ ## Ключевые правила (краткая версия)
40
+
41
+ 1. Каждая страница: `title`, `description`, `canonical`, `robots`, OG, **один H1**, семантика, JSON-LD, `alt`,
42
+ внутренние ссылки, читаемый URL — иначе страница не готова.
43
+ 2. Интент важнее ключевых слов; один интент = один URL, без каннибализации.
44
+ 3. Медицина = YMYL: автор-врач, рецензент, даты, источники, дисклеймер, без обещаний излечения.
45
+ 4. SEO-данные — в **исходном HTML** (SSR/SSG), а не после JS.
46
+ 5. Любая смена URL — только с 301 + обновлением sitemap и внутренних ссылок.
47
+ 6. **Google + Яндекс сразу**: ИКС, регион, Clean-param, Яндекс Бизнес; не оптимизируй под одного.
48
+ 7. Проверяемо: Rich Results Test / Schema validator / GSC / Вебмастер / PSI — а не «я добавил meta».
49
+ 8. 2026: FAQ rich results отключены (07.05.2026), HowTo удалён, llms.txt Google не использует,
50
+ AI Overviews/AI Mode учитываются в общем трафике GSC.
51
+
52
+ ## Проверка комплектности
53
+
54
+ - [x] SKILL.md с frontmatter (`name`, `description`, `whenToUse`, `user-invocable`), 8 шагов, гейт, антипаттерны.
55
+ - [x] 8 файлов в `references/` (technical, on-page, structured-data, eeat-medical, stack-recipes, content-seo,
56
+ audit-checklist, measurement).
57
+ - [x] 107 проверок с P0/P1/P2 + порог сдачи + шаблон отчёта.
58
+ - [x] Готовые сниппеты и README для assets.
59
+ - [x] Русский рынок (Google + Яндекс) и медицинский YMYL учтены в каждом релевантном файле.
60
+ - [x] Ссылки на первоисточники; спорные данные помечены «проверить».