@dzhechkov/keysarium 1.4.0 → 1.5.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 (79) hide show
  1. package/README.md +50 -3
  2. package/bin/cli.js +0 -0
  3. package/package.json +5 -3
  4. package/templates/.claude/commands/analyst-manual.md +38 -0
  5. package/templates/.claude/commands/casarium.md +55 -4
  6. package/templates/.claude/commands/feature-adr.md +8 -0
  7. package/templates/.claude/rules/trust-tiers.md +5 -0
  8. package/templates/.claude/shards/feature-adr.shard.md +64 -10
  9. package/templates/.claude/shards/phase-ai-factory.shard.md +109 -0
  10. package/templates/.claude/skills/ai-factory-mapper/README.md +90 -0
  11. package/templates/.claude/skills/ai-factory-mapper/SKILL.md +309 -0
  12. package/templates/.claude/skills/ai-factory-mapper/assets/report-template.md +123 -0
  13. package/templates/.claude/skills/ai-factory-mapper/references/catalog.md +230 -0
  14. package/templates/.claude/skills/ai-factory-mapper/references/coverage-formula.md +219 -0
  15. package/templates/.claude/skills/ai-factory-mapper/references/decomposition-checklist.md +183 -0
  16. package/templates/.claude/skills/ai-factory-mapper/references/pattern-library.md +312 -0
  17. package/templates/.claude/skills/ai-factory-mapper/scripts/build_docx_report.js +423 -0
  18. package/templates/.claude/skills/analyst-manual-full/SKILL.md +286 -0
  19. package/templates/.claude/skills/edu-site-generator/SKILL.md +254 -0
  20. package/templates/.claude/skills/edu-site-generator/examples/sample-course-structure.md +116 -0
  21. package/templates/.claude/skills/edu-site-generator/modules/00-content-analysis.md +84 -0
  22. package/templates/.claude/skills/edu-site-generator/modules/01-course-structure.md +75 -0
  23. package/templates/.claude/skills/edu-site-generator/modules/02-data-generation.md +186 -0
  24. package/templates/.claude/skills/edu-site-generator/modules/03-scaffold.md +249 -0
  25. package/templates/.claude/skills/edu-site-generator/modules/04-components.md +130 -0
  26. package/templates/.claude/skills/edu-site-generator/modules/05-gamification.md +163 -0
  27. package/templates/.claude/skills/edu-site-generator/modules/06-deploy.md +88 -0
  28. package/templates/.claude/skills/edu-site-generator/modules/07-verification.md +97 -0
  29. package/templates/.claude/skills/edu-site-generator/references/component-templates.md +436 -0
  30. package/templates/.claude/skills/edu-site-generator/references/data-schemas.md +164 -0
  31. package/templates/.claude/skills/edu-site-generator/references/exercise-catalog.md +110 -0
  32. package/templates/.claude/skills/edu-site-generator/references/tech-stack.md +69 -0
  33. package/templates/.claude/skills/feature-adr/SKILL.md +245 -59
  34. package/templates/.claude/skills/feature-adr/modules/03-adr.md +43 -0
  35. package/templates/.claude/skills/feature-adr/modules/03.5-ideation-swarm.md +180 -0
  36. package/templates/.claude/skills/feature-adr/modules/06-implementation-plan.md +56 -7
  37. package/templates/.claude/skills/feature-adr/modules/08-qe.md +87 -23
  38. package/templates/.claude/skills/feature-adr/modules/09-fleet-qe.md +305 -0
  39. package/templates/.claude/skills/feature-adr/references/agentic-qe/README.md +143 -0
  40. package/templates/.claude/skills/feature-adr/references/agentic-qe/brutal-honesty-review.md +240 -0
  41. package/templates/.claude/skills/feature-adr/references/agentic-qe/chaos-engineering-resilience.md +163 -0
  42. package/templates/.claude/skills/feature-adr/references/agentic-qe/code-goal-planner.md +446 -0
  43. package/templates/.claude/skills/feature-adr/references/agentic-qe/enterprise-integration-testing.md +111 -0
  44. package/templates/.claude/skills/feature-adr/references/agentic-qe/mutation-testing.md +236 -0
  45. package/templates/.claude/skills/feature-adr/references/agentic-qe/performance-testing.md +315 -0
  46. package/templates/.claude/skills/feature-adr/references/agentic-qe/qcsd-ideation-swarm.md +126 -0
  47. package/templates/.claude/skills/feature-adr/references/agentic-qe/qcsd-production-swarm.md +108 -0
  48. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-coverage-analysis.md +193 -0
  49. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-requirements-validation.md +254 -0
  50. package/templates/.claude/skills/feature-adr/references/agentic-qe/regression-testing.md +233 -0
  51. package/templates/.claude/skills/feature-adr/references/agentic-qe/risk-based-testing.md +212 -0
  52. package/templates/.claude/skills/feature-adr/references/agentic-qe/security-testing.md +311 -0
  53. package/templates/.claude/skills/feature-adr/references/agentic-qe/shift-left-testing.md +231 -0
  54. package/templates/.claude/skills/feature-adr/references/agentic-qe/tdd-london-chicago.md +249 -0
  55. package/templates/.claude/skills/transcript-site-generator/SKILL.md +287 -0
  56. package/templates/.claude/skills/transcript-site-generator/examples/sample-text-only-site.md +123 -0
  57. package/templates/.claude/skills/transcript-site-generator/examples/sample-transcript-site.md +134 -0
  58. package/templates/.claude/skills/transcript-site-generator/modules/00-input-analysis.md +132 -0
  59. package/templates/.claude/skills/transcript-site-generator/modules/01-content-parsing.md +117 -0
  60. package/templates/.claude/skills/transcript-site-generator/modules/02-site-generation.md +293 -0
  61. package/templates/.claude/skills/transcript-site-generator/modules/03-interactivity.md +406 -0
  62. package/templates/.claude/skills/transcript-site-generator/modules/04-deploy.md +130 -0
  63. package/templates/.claude/skills/transcript-site-generator/modules/05-verification.md +155 -0
  64. package/templates/.claude/skills/transcript-site-generator/references/component-catalog.md +86 -0
  65. package/templates/.claude/skills/transcript-site-generator/references/data-schemas.md +123 -0
  66. package/templates/.claude/skills/transcript-site-generator/references/tech-stack.md +132 -0
  67. package/templates/CLAUDE.md +9 -2
  68. package/templates/docs/edu-site-generator/01-deployment-guide.md +911 -0
  69. package/templates/docs/edu-site-generator/02-admin-guide.md +901 -0
  70. package/templates/docs/edu-site-generator/03-user-guide.md +1008 -0
  71. package/templates/docs/edu-site-generator/04-infrastructure-requirements.md +489 -0
  72. package/templates/docs/edu-site-generator/05-architecture.md +902 -0
  73. package/templates/docs/edu-site-generator/06-user-flows.md +759 -0
  74. package/templates/docs/transcript-site-generator/01-deployment-guide.md +1042 -0
  75. package/templates/docs/transcript-site-generator/02-admin-guide.md +918 -0
  76. package/templates/docs/transcript-site-generator/03-user-guide.md +925 -0
  77. package/templates/docs/transcript-site-generator/04-infrastructure-requirements.md +482 -0
  78. package/templates/docs/transcript-site-generator/05-architecture.md +1068 -0
  79. package/templates/docs/transcript-site-generator/06-user-flows.md +855 -0
@@ -0,0 +1,759 @@
1
+ # Пользовательские потоки @dzhechkov/skills-edu-site
2
+
3
+ ## Содержание
4
+
5
+ 1. [Flow: Полный пайплайн (8 шагов)](#flow-полный-пайплайн-8-шагов)
6
+ 2. [Flow: Анализ контента](#flow-анализ-контента)
7
+ 3. [Flow: Выбор типа упражнения](#flow-выбор-типа-упражнения)
8
+ 4. [Flow: Упражнение Quiz](#flow-упражнение-quiz)
9
+ 5. [Flow: Упражнение Flashcards](#flow-упражнение-flashcards)
10
+ 6. [Flow: Упражнение Matching](#flow-упражнение-matching)
11
+ 7. [Flow: Упражнение Drag-to-Order](#flow-упражнение-drag-to-order)
12
+ 8. [Flow: Упражнение Command Builder](#flow-упражнение-command-builder)
13
+ 9. [Flow: Упражнение Scenario Game](#flow-упражнение-scenario-game)
14
+ 10. [Flow: Разблокировка достижения](#flow-разблокировка-достижения)
15
+ 11. [Flow: Отслеживание прогресса](#flow-отслеживание-прогресса)
16
+ 12. [Flow: Финальный тест](#flow-финальный-тест)
17
+ 13. [Flow: Сборка и деплой](#flow-сборка-и-деплой)
18
+
19
+ ---
20
+
21
+ ## Flow: Полный пайплайн (8 шагов)
22
+
23
+ ### Sequence Diagram
24
+
25
+ ```mermaid
26
+ sequenceDiagram
27
+ actor U as User
28
+ participant C as Claude (/edu-site)
29
+ participant FS as File System
30
+
31
+ U->>C: /edu-site "Learn Git basics"
32
+
33
+ Note over C: === Step 1: Content Analysis ===
34
+ C->>C: Определить тип входа (topic description)
35
+ C->>C: Generative mode: создать контент
36
+ C->>C: Определить язык: en
37
+ C->>C: Извлечь темы, концепции, термины
38
+ C-->>U: Step 1/8: 12 topics, 34 concepts, lang=en
39
+
40
+ Note over C: === Step 2: Course Structure ===
41
+ C->>C: Кластеризация тем -> секции
42
+ C->>C: Определить порядок изучения
43
+ C->>C: Назначить типы упражнений
44
+ C-->>U: Step 2/8: 5 sections, 19 exercises planned
45
+
46
+ Note over C: === Step 3: Data Generation ===
47
+ C->>FS: Write src/data/sections.js
48
+ C->>FS: Write src/data/exercises.js
49
+ C->>FS: Write src/data/quizQuestions.js
50
+ C->>FS: Write src/data/achievements.js
51
+ C-->>U: Step 3/8: 4 data files generated
52
+
53
+ Note over C: === Step 4: Scaffold ===
54
+ C->>FS: Write package.json
55
+ C->>FS: Write vite.config.js (base: /git-basics/)
56
+ C->>FS: Write index.html (OG tags, JSON-LD)
57
+ C->>FS: Write src/app.css (@theme)
58
+ C->>FS: Write src/main.jsx
59
+ C->>FS: Write .github/workflows/deploy.yml
60
+ C-->>U: Step 4/8: Project scaffold created
61
+
62
+ Note over C: === Step 5: Components ===
63
+ C->>FS: Write layout/ (Header, Footer, Sidebar, Navigation)
64
+ C->>FS: Write interactive/ (Quiz, Flashcards, Matching, DragToOrder, CommandBuilder, ScenarioGame)
65
+ C->>FS: Write common/ (Toast, ProgressBar, Badge, AchievementPopup, Button, Card)
66
+ C->>FS: Write pages/ (HomePage, SectionPage, FinalTestPage, ResultsPage)
67
+ C->>FS: Write sections/ (SectionList, ExerciseRenderer)
68
+ C->>FS: Write App.jsx (HashRouter + Routes)
69
+ C-->>U: Step 5/8: 22 components generated
70
+
71
+ Note over C: === Step 6: Gamification ===
72
+ C->>FS: Write src/store/useStore.js (Zustand + persist)
73
+ C->>FS: Write src/hooks/useAchievements.js
74
+ C-->>U: Step 6/8: Gamification configured
75
+
76
+ Note over C: === Step 7: Deploy ===
77
+ C->>C: Verify .github/workflows/deploy.yml exists
78
+ C->>C: Verify vite.config.js base path
79
+ C-->>U: Step 7/8: Deploy configuration ready
80
+
81
+ Note over C: === Step 8: Verification ===
82
+ C->>C: Check all imports resolve
83
+ C->>C: Validate data file structures
84
+ C->>C: Verify component hierarchy
85
+ C->>C: Check router configuration
86
+ C->>C: Simulate build (syntax check)
87
+ C-->>U: Step 8/8: All 5 checks passed!
88
+
89
+ C-->>U: Generation complete!
90
+ C-->>U: Next: cd git-basics && npm install && npm run dev
91
+ ```
92
+
93
+ ### Пошаговый разбор
94
+
95
+ **Шаг 1. Запуск пайплайна**
96
+ ```
97
+ User: /edu-site "Learn Git basics: init, add, commit, branch, merge, remote"
98
+ ```
99
+
100
+ **Шаг 2. Content Analysis**
101
+ - Определяется тип входа: topic description (нет URL, нет пути к файлу)
102
+ - Активируется generative mode
103
+ - Язык: en (латинские термины)
104
+ - Извлекаются темы: init, add, commit, branch, merge, remote
105
+
106
+ **Шаг 3. Course Structure**
107
+ - Темы кластеризуются в 5 секций
108
+ - Порядок: Setup -> Basics -> Branching -> Merging -> Remote
109
+ - Каждой теме назначается тип упражнения
110
+
111
+ **Шаг 4-8. Генерация**
112
+ - Последовательная генерация всех артефактов
113
+ - Финальная верификация
114
+
115
+ ---
116
+
117
+ ## Flow: Анализ контента
118
+
119
+ ### Flowchart
120
+
121
+ ```mermaid
122
+ flowchart TD
123
+ START(["/edu-site [input]"]) --> DETECT{"Тип входа?"}
124
+
125
+ DETECT -->|"http:// или https://"| URL_FLOW
126
+ DETECT -->|"Путь к файлу (.md, .txt)"| FILE_FLOW
127
+ DETECT -->|"Длинный текст (> 500 символов)"| TEXT_FLOW
128
+ DETECT -->|"Короткое описание"| TOPIC_FLOW
129
+
130
+ subgraph URL_FLOW ["URL Flow"]
131
+ FETCH["Fetch HTML страницы"]
132
+ PARSE_HTML["Парсинг HTML:<br/>извлечь body content"]
133
+ FOLLOW["Найти внутренние ссылки<br/>(depth <= 3)"]
134
+ FETCH_MORE["Fetch дополнительных страниц"]
135
+ MERGE_URL["Объединить весь контент"]
136
+
137
+ FETCH --> PARSE_HTML --> FOLLOW --> FETCH_MORE --> MERGE_URL
138
+ end
139
+
140
+ subgraph FILE_FLOW ["File Flow"]
141
+ READ_FILE["Прочитать файл(ы)"]
142
+ DETECT_FORMAT{"Формат?"}
143
+ PARSE_MD["Парсинг Markdown:<br/>заголовки, списки, код"]
144
+ PARSE_TXT["Парсинг plain text:<br/>абзацы, пустые строки"]
145
+ PARSE_FILE_HTML["Парсинг HTML:<br/>извлечь текст"]
146
+
147
+ READ_FILE --> DETECT_FORMAT
148
+ DETECT_FORMAT -->|".md"| PARSE_MD
149
+ DETECT_FORMAT -->|".txt"| PARSE_TXT
150
+ DETECT_FORMAT -->|".html"| PARSE_FILE_HTML
151
+ end
152
+
153
+ subgraph TEXT_FLOW ["Text Flow"]
154
+ PARSE_TEXT["Парсинг текста:<br/>абзацы, заголовки, код"]
155
+ end
156
+
157
+ subgraph TOPIC_FLOW ["Topic Flow"]
158
+ GENERATE["Generative mode:<br/>создать контент из знаний модели"]
159
+ end
160
+
161
+ MERGE_URL --> CLEAN
162
+ PARSE_MD --> CLEAN
163
+ PARSE_TXT --> CLEAN
164
+ PARSE_FILE_HTML --> CLEAN
165
+ PARSE_TEXT --> CLEAN
166
+ GENERATE --> LANG
167
+
168
+ CLEAN["Очистка контента:<br/>убрать навигацию, футеры,<br/>повторяющиеся блоки"] --> LANG
169
+
170
+ LANG["Определение языка<br/>(auto / --lang)"] --> EXTRACT
171
+
172
+ EXTRACT["Извлечение:<br/>- Темы (topics)<br/>- Концепции (concepts)<br/>- Термины (terms)<br/>- Примеры кода (code)"] --> OUTPUT
173
+
174
+ OUTPUT["Structured Analysis Result:<br/>{language, topics, concepts,<br/>codeExamples, estimatedSections}"]
175
+ ```
176
+
177
+ ---
178
+
179
+ ## Flow: Выбор типа упражнения
180
+
181
+ ### Flowchart
182
+
183
+ ```mermaid
184
+ flowchart TD
185
+ CONTENT["Тема / подсекция"] --> ANALYZE{"Характеристика контента?"}
186
+
187
+ ANALYZE -->|"Определения, глоссарий,<br/>термины с пояснениями"| FLASH["Flashcards<br/>(запоминание)"]
188
+
189
+ ANALYZE -->|"CLI-команды, SQL,<br/>API-вызовы"| CMD["CommandBuilder<br/>(конструирование)"]
190
+
191
+ ANALYZE -->|"Пошаговый процесс,<br/>последовательность действий"| DRAG["DragToOrder<br/>(упорядочивание)"]
192
+
193
+ ANALYZE -->|"Парные связи:<br/>команда-описание,<br/>термин-значение"| MATCH["Matching<br/>(соотнесение)"]
194
+
195
+ ANALYZE -->|"Ситуации, решения,<br/>best practices,<br/>troubleshooting"| SCEN["ScenarioGame<br/>(принятие решений)"]
196
+
197
+ ANALYZE -->|"Теоретические факты,<br/>правила, синтаксис"| QUIZ["Quiz<br/>(проверка знаний)"]
198
+
199
+ FLASH --> VALIDATE{"В секции уже есть<br/>этот тип?"}
200
+ CMD --> VALIDATE
201
+ DRAG --> VALIDATE
202
+ MATCH --> VALIDATE
203
+ SCEN --> VALIDATE
204
+ QUIZ --> VALIDATE
205
+
206
+ VALIDATE -->|"< max per type"| ACCEPT["Принять выбор"]
207
+ VALIDATE -->|">= max per type"| FALLBACK["Выбрать<br/>альтернативный тип"]
208
+ FALLBACK --> ACCEPT
209
+ ```
210
+
211
+ ---
212
+
213
+ ## Flow: Упражнение Quiz
214
+
215
+ ### Sequence Diagram
216
+
217
+ ```mermaid
218
+ sequenceDiagram
219
+ actor S as Студент
220
+ participant Q as Quiz Component
221
+ participant STORE as Zustand Store
222
+
223
+ S->>Q: Открыть упражнение
224
+ Q->>Q: Отрисовать вопрос + 4 варианта
225
+ Q->>Q: Все кнопки активны, ни одна не выбрана
226
+
227
+ S->>Q: Нажать на вариант ответа
228
+
229
+ alt Правильный ответ
230
+ Q->>Q: Подсветить выбранный зелёным
231
+ Q->>Q: Показать explanation
232
+ Q->>STORE: completeExercise(sectionId, exerciseId, 10)
233
+ STORE->>STORE: totalPoints += 10, streak += 1
234
+ else Неправильный ответ
235
+ Q->>Q: Подсветить выбранный красным
236
+ Q->>Q: Подсветить правильный зелёным
237
+ Q->>Q: Показать explanation
238
+ Q->>STORE: completeExercise(sectionId, exerciseId, 0)
239
+ STORE->>STORE: streak = 0
240
+ end
241
+
242
+ Q->>S: Показать кнопку "Далее"
243
+ S->>Q: Нажать "Далее"
244
+ Q->>Q: Перейти к следующему упражнению
245
+ ```
246
+
247
+ ---
248
+
249
+ ## Flow: Упражнение Flashcards
250
+
251
+ ### Sequence Diagram
252
+
253
+ ```mermaid
254
+ sequenceDiagram
255
+ actor S as Студент
256
+ participant F as Flashcards Component
257
+ participant STORE as Zustand Store
258
+
259
+ S->>F: Открыть упражнение
260
+ F->>F: Показать первую карточку (front)
261
+ F->>F: Отобразить "1 / N карточек"
262
+
263
+ loop Для каждой карточки
264
+ S->>F: Нажать на карточку / пробел
265
+ F->>F: Анимация flip
266
+ F->>F: Показать back (ответ)
267
+
268
+ alt Студент знает ответ
269
+ S->>F: Нажать "Знаю"
270
+ F->>STORE: completeExercise(sectionId, cardId, 10)
271
+ STORE->>STORE: totalPoints += 10
272
+ F->>F: Убрать карточку из стопки
273
+ else Студент не знает
274
+ S->>F: Нажать "Повторить"
275
+ F->>F: Вернуть карточку в конец стопки
276
+ end
277
+
278
+ F->>F: Показать следующую карточку
279
+ end
280
+
281
+ F->>F: Все карточки отмечены как "Знаю"
282
+ F->>S: Показать "Все карточки изучены!"
283
+ ```
284
+
285
+ ---
286
+
287
+ ## Flow: Упражнение Matching
288
+
289
+ ### Sequence Diagram
290
+
291
+ ```mermaid
292
+ sequenceDiagram
293
+ actor S as Студент
294
+ participant M as Matching Component
295
+ participant STORE as Zustand Store
296
+
297
+ S->>M: Открыть упражнение
298
+ M->>M: Отрисовать 2 колонки<br/>(левая перемешана, правая перемешана)
299
+
300
+ loop Для каждой пары
301
+ S->>M: Перетащить элемент из левой колонки
302
+ M->>M: Визуальная обратная связь (drag indicator)
303
+ S->>M: Бросить на элемент правой колонки
304
+ M->>M: Соединить пару (визуальная линия)
305
+ end
306
+
307
+ S->>M: Нажать "Проверить"
308
+ M->>M: Сравнить с correctPairs
309
+
310
+ alt Все пары верны
311
+ M->>M: Подсветить все зелёным
312
+ M->>STORE: completeExercise(sectionId, exerciseId, 10)
313
+ STORE->>STORE: totalPoints += 10, streak += 1
314
+ else 75%+ верны
315
+ M->>M: Верные зелёным, неверные красным
316
+ M->>STORE: completeExercise(sectionId, exerciseId, 5)
317
+ STORE->>STORE: totalPoints += 5
318
+ else Менее 75% верны
319
+ M->>M: Показать правильные соответствия
320
+ M->>STORE: completeExercise(sectionId, exerciseId, 0)
321
+ STORE->>STORE: streak = 0
322
+ end
323
+
324
+ M->>S: Показать результат + кнопку "Далее"
325
+ ```
326
+
327
+ ---
328
+
329
+ ## Flow: Упражнение Drag-to-Order
330
+
331
+ ### Sequence Diagram
332
+
333
+ ```mermaid
334
+ sequenceDiagram
335
+ actor S as Студент
336
+ participant D as DragToOrder Component
337
+ participant STORE as Zustand Store
338
+
339
+ S->>D: Открыть упражнение
340
+ D->>D: Отрисовать перемешанный список элементов
341
+
342
+ loop Перестановка элементов
343
+ S->>D: Захватить элемент (drag start)
344
+ D->>D: Визуальное выделение + placeholder
345
+ S->>D: Переместить на новую позицию (drag over)
346
+ D->>D: Показать индикатор позиции вставки
347
+ S->>D: Отпустить (drop)
348
+ D->>D: Переставить элемент в новую позицию
349
+ end
350
+
351
+ S->>D: Нажать "Проверить порядок"
352
+ D->>D: Сравнить currentOrder с correctOrder
353
+
354
+ alt Полностью верный порядок
355
+ D->>D: Анимация успеха
356
+ D->>STORE: completeExercise(sectionId, exerciseId, 10)
357
+ STORE->>STORE: totalPoints += 10, streak += 1
358
+ else 1 перестановка от верного
359
+ D->>D: Показать "Почти! Один элемент не на месте"
360
+ D->>D: Подсветить неверный элемент
361
+ D->>STORE: completeExercise(sectionId, exerciseId, 5)
362
+ else Более 1 ошибки
363
+ D->>D: Показать правильный порядок
364
+ D->>STORE: completeExercise(sectionId, exerciseId, 0)
365
+ STORE->>STORE: streak = 0
366
+ end
367
+
368
+ D->>S: Показать результат + кнопку "Далее"
369
+ ```
370
+
371
+ ---
372
+
373
+ ## Flow: Упражнение Command Builder
374
+
375
+ ### Sequence Diagram
376
+
377
+ ```mermaid
378
+ sequenceDiagram
379
+ actor S as Студент
380
+ participant CB as CommandBuilder Component
381
+ participant STORE as Zustand Store
382
+
383
+ S->>CB: Открыть упражнение
384
+ CB->>CB: Показать инструкцию: "Собери команду для..."
385
+ CB->>CB: Отрисовать доступные части (кнопки/чипы)
386
+ CB->>CB: Показать пустую строку сборки
387
+
388
+ loop Сборка команды
389
+ S->>CB: Нажать на часть команды
390
+ CB->>CB: Добавить часть в строку сборки
391
+ CB->>CB: Визуально отключить использованную часть
392
+
393
+ opt Удаление части
394
+ S->>CB: Нажать на часть в строке сборки
395
+ CB->>CB: Удалить часть из строки
396
+ CB->>CB: Вернуть часть в доступные
397
+ end
398
+ end
399
+
400
+ S->>CB: Нажать "Проверить команду"
401
+ CB->>CB: Сравнить с correctCommand
402
+
403
+ alt Точное совпадение с correctCommand
404
+ CB->>CB: Подсветить строку зелёным
405
+ CB->>CB: Показать "Верно!"
406
+ CB->>STORE: completeExercise(sectionId, exerciseId, 10)
407
+ STORE->>STORE: totalPoints += 10, streak += 1
408
+ else Совпадение с acceptableAlternatives
409
+ CB->>CB: Подсветить строку жёлтым
410
+ CB->>CB: Показать "Допустимо, но есть лучший вариант"
411
+ CB->>STORE: completeExercise(sectionId, exerciseId, 5)
412
+ else Не совпадает
413
+ CB->>CB: Подсветить строку красным
414
+ CB->>CB: Показать правильную команду
415
+ CB->>STORE: completeExercise(sectionId, exerciseId, 0)
416
+ STORE->>STORE: streak = 0
417
+ end
418
+
419
+ CB->>S: Показать результат + кнопку "Далее"
420
+ ```
421
+
422
+ ---
423
+
424
+ ## Flow: Упражнение Scenario Game
425
+
426
+ ### Sequence Diagram
427
+
428
+ ```mermaid
429
+ sequenceDiagram
430
+ actor S as Студент
431
+ participant SG as ScenarioGame Component
432
+ participant STORE as Zustand Store
433
+
434
+ S->>SG: Открыть упражнение
435
+ SG->>SG: Показать текст ситуации (situation)
436
+ SG->>SG: Отрисовать варианты действий (choices)
437
+
438
+ S->>SG: Выбрать вариант действия
439
+
440
+ SG->>SG: Показать outcome для выбранного варианта
441
+ SG->>SG: Выделить оптимальный вариант
442
+
443
+ alt Выбран оптимальный вариант (isOptimal: true)
444
+ SG->>SG: Подсветить зелёным
445
+ SG->>SG: Показать outcome: "Отличный выбор! ..."
446
+ SG->>STORE: completeExercise(sectionId, exerciseId, 10)
447
+ STORE->>STORE: totalPoints += 10, streak += 1
448
+ else Выбран допустимый вариант (points: 5)
449
+ SG->>SG: Подсветить жёлтым
450
+ SG->>SG: Показать outcome: "Сработает, но..."
451
+ SG->>SG: Показать оптимальный вариант для сравнения
452
+ SG->>STORE: completeExercise(sectionId, exerciseId, 5)
453
+ else Выбран плохой вариант (points: 0)
454
+ SG->>SG: Подсветить красным
455
+ SG->>SG: Показать outcome: "Это приведёт к..."
456
+ SG->>SG: Показать оптимальный вариант
457
+ SG->>STORE: completeExercise(sectionId, exerciseId, 0)
458
+ STORE->>STORE: streak = 0
459
+ end
460
+
461
+ SG->>S: Показать кнопку "Далее"
462
+ ```
463
+
464
+ ---
465
+
466
+ ## Flow: Разблокировка достижения
467
+
468
+ ### Flowchart
469
+
470
+ ```mermaid
471
+ flowchart TD
472
+ EVENT["Событие:<br/>упражнение выполнено /<br/>секция завершена /<br/>тест сдан"] --> CHECK_ALL
473
+
474
+ CHECK_ALL["Проверить ВСЕ<br/>незаблокированные достижения"] --> LOOP
475
+
476
+ LOOP{"Для каждого<br/>незаблокированного<br/>достижения"}
477
+
478
+ LOOP --> CHECK_TYPE{"Тип критерия?"}
479
+
480
+ CHECK_TYPE -->|"exercise_count"| C1["totalCompleted >= count?"]
481
+ CHECK_TYPE -->|"section_complete"| C2["sectionProgress[id] == 100?"]
482
+ CHECK_TYPE -->|"section_perfect"| C3["Все упражнения секции<br/>выполнены с max points?"]
483
+ CHECK_TYPE -->|"streak"| C4["currentStreak >= count?"]
484
+ CHECK_TYPE -->|"points_total"| C5["totalPoints >= count?"]
485
+ CHECK_TYPE -->|"all_sections"| C6["Все секции завершены?"]
486
+ CHECK_TYPE -->|"final_test_pass"| C7["finalTestScore >= minScore?"]
487
+ CHECK_TYPE -->|"final_test_perfect"| C8["finalTestScore == 100?"]
488
+
489
+ C1 --> MET{"Критерий<br/>выполнен?"}
490
+ C2 --> MET
491
+ C3 --> MET
492
+ C4 --> MET
493
+ C5 --> MET
494
+ C6 --> MET
495
+ C7 --> MET
496
+ C8 --> MET
497
+
498
+ MET -->|"Нет"| LOOP
499
+ MET -->|"Да"| UNLOCK["unlockAchievement(id)"]
500
+
501
+ UNLOCK --> ADD_POINTS["totalPoints += achievement.points"]
502
+ ADD_POINTS --> TOAST["showToast:<br/>'Achievement Unlocked:<br/>[title]!'"]
503
+ TOAST --> ANIMATE["Toast notification:<br/>иконка + название + очки<br/>автозакрытие через 4 сек"]
504
+ ANIMATE --> PERSIST["persist -> localStorage"]
505
+ PERSIST --> LOOP
506
+ ```
507
+
508
+ ### Пример потока
509
+
510
+ ```
511
+ Событие: студент выполнил 10-е упражнение подряд (streak = 10)
512
+
513
+ Проверка достижений:
514
+ - "first-exercise" (exercise_count: 1) -> уже разблокировано -> SKIP
515
+ - "fast-learner" (exercise_count: 5) -> уже разблокировано -> SKIP
516
+ - "streak-5" (streak: 5) -> уже разблокировано -> SKIP
517
+ - "streak-10" (streak: 10) -> streak=10 >= 10 -> UNLOCK!
518
+
519
+ Результат:
520
+ -> unlockAchievement("streak-10")
521
+ -> totalPoints += 100 (rarity: rare)
522
+ -> Toast: "Achievement Unlocked: On Fire! +100 pts"
523
+ -> persist to localStorage
524
+ ```
525
+
526
+ ---
527
+
528
+ ## Flow: Отслеживание прогресса
529
+
530
+ ### Sequence Diagram
531
+
532
+ ```mermaid
533
+ sequenceDiagram
534
+ actor S as Студент
535
+ participant EX as Exercise Component
536
+ participant STORE as Zustand Store
537
+ participant UI as UI Components
538
+ participant LS as localStorage
539
+
540
+ S->>EX: Завершить упражнение
541
+ EX->>STORE: completeExercise(sectionId, exerciseId, points)
542
+
543
+ STORE->>STORE: Добавить exerciseId в completedExercises[sectionId]
544
+ STORE->>STORE: Пересчитать sectionProgress[sectionId]
545
+
546
+ Note over STORE: sectionProgress = <br/>completedCount / totalExercisesInSection * 100
547
+
548
+ STORE->>LS: persist({ completedExercises, sectionProgress, ... })
549
+
550
+ alt Секция завершена (progress = 100%)
551
+ STORE->>STORE: Проверить достижение section_complete
552
+ STORE->>UI: showToast("Section Complete! +25 pts")
553
+ end
554
+
555
+ STORE->>UI: Re-render (через подписку)
556
+
557
+ UI->>UI: Обновить ProgressBar в Sidebar
558
+ UI->>UI: Обновить секционный прогресс на HomePage
559
+ UI->>UI: Обновить общий прогресс в Header
560
+ ```
561
+
562
+ ### Формула прогресса
563
+
564
+ ```
565
+ Прогресс секции:
566
+ sectionProgress[id] = (completedExercises[id].size / totalExercises[id]) * 100
567
+
568
+ Общий прогресс:
569
+ overallProgress = sum(completedExercises[*].size) / totalExercises * 100
570
+
571
+ Где totalExercises для секции = exercises.filter(e => e.sectionId === id).length
572
+ ```
573
+
574
+ ---
575
+
576
+ ## Flow: Финальный тест
577
+
578
+ ### Sequence Diagram
579
+
580
+ ```mermaid
581
+ sequenceDiagram
582
+ actor S as Студент
583
+ participant FT as FinalTestPage
584
+ participant STORE as Zustand Store
585
+
586
+ S->>FT: Перейти на "Финальный тест"
587
+ FT->>FT: Загрузить quizQuestions.js
588
+ FT->>FT: Перемешать порядок вопросов
589
+ FT->>FT: Показать "Вопрос 1 из N"
590
+
591
+ loop Для каждого вопроса
592
+ FT->>S: Показать вопрос + 4 варианта
593
+ S->>FT: Выбрать ответ
594
+ FT->>FT: Сохранить ответ в локальный state
595
+ FT->>FT: Перейти к следующему вопросу
596
+
597
+ opt Навигация назад
598
+ S->>FT: Нажать "Предыдущий"
599
+ FT->>FT: Вернуться к предыдущему вопросу
600
+ FT->>FT: Показать ранее выбранный ответ
601
+ end
602
+ end
603
+
604
+ S->>FT: Нажать "Завершить тест"
605
+
606
+ FT->>FT: Подсчитать результат:<br/>correctCount / totalQuestions * 100
607
+
608
+ FT->>STORE: submitFinalTest(answers)
609
+ STORE->>STORE: finalTestScore = score
610
+ STORE->>STORE: finalTestAnswers = { q1: 2, q2: 0, ... }
611
+
612
+ alt Score >= passingThreshold (70%)
613
+ STORE->>STORE: Проверить достижение final_test_pass
614
+ alt Score == 100%
615
+ STORE->>STORE: Проверить достижение final_test_perfect
616
+ end
617
+ end
618
+
619
+ FT->>S: Redirect -> ResultsPage
620
+
621
+ Note over S: ResultsPage показывает:
622
+ Note over S: - Общий балл (%)
623
+ Note over S: - Буквенная оценка (A/B/C/D/F)
624
+ Note over S: - Breakdown по секциям
625
+ Note over S: - Неверные ответы с пояснениями
626
+ Note over S: - Кнопка "Пройти заново"
627
+ ```
628
+
629
+ ### Flowchart результатов
630
+
631
+ ```mermaid
632
+ flowchart TD
633
+ SCORE["Финальный балл"] --> GRADE{"Оценка"}
634
+
635
+ GRADE -->|">= 90%"| A["Grade A: Excellent"]
636
+ GRADE -->|"80-89%"| B["Grade B: Good"]
637
+ GRADE -->|"70-79%"| C["Grade C: Satisfactory<br/>(passing)"]
638
+ GRADE -->|"60-69%"| D["Grade D: Needs Improvement"]
639
+ GRADE -->|"< 60%"| F["Grade F: Failing"]
640
+
641
+ A --> DISPLAY
642
+ B --> DISPLAY
643
+ C --> DISPLAY
644
+ D --> DISPLAY
645
+ F --> DISPLAY
646
+
647
+ DISPLAY["Страница результатов:<br/>- Балл: X%<br/>- Оценка: [A-F]<br/>- Секции: breakdown<br/>- Ошибки: пояснения"]
648
+
649
+ DISPLAY --> ACTIONS{"Действия"}
650
+ ACTIONS -->|"Пройти заново"| RETRY["Сбросить ответы,<br/>перемешать вопросы"]
651
+ ACTIONS -->|"Вернуться к разделам"| REVIEW["Перейти на HomePage,<br/>изучить слабые секции"]
652
+ ```
653
+
654
+ ---
655
+
656
+ ## Flow: Сборка и деплой
657
+
658
+ ### Flowchart
659
+
660
+ ```mermaid
661
+ flowchart TD
662
+ START(["Проект сгенерирован"]) --> INSTALL
663
+
664
+ subgraph LOCAL ["Локальная разработка"]
665
+ INSTALL["npm install<br/>(установка зависимостей)"]
666
+ DEV["npm run dev<br/>(Vite dev server)"]
667
+ EDIT["Редактирование файлов<br/>(опционально)"]
668
+ BUILD["npm run build<br/>(production сборка)"]
669
+ PREVIEW["npm run preview<br/>(проверка локально)"]
670
+
671
+ INSTALL --> DEV
672
+ DEV --> EDIT
673
+ EDIT --> DEV
674
+ DEV --> BUILD
675
+ BUILD --> PREVIEW
676
+ end
677
+
678
+ PREVIEW --> PUSH
679
+
680
+ subgraph DEPLOY ["GitHub Pages Deploy"]
681
+ PUSH["git push origin main"]
682
+ TRIGGER["GitHub Actions:<br/>workflow triggered"]
683
+ GH_INSTALL["npm install"]
684
+ GH_BUILD["npm run build"]
685
+ UPLOAD["Upload dist/ artifact"]
686
+ PAGES["Deploy to GitHub Pages"]
687
+ LIVE["Сайт доступен:<br/>https://user.github.io/repo/"]
688
+
689
+ PUSH --> TRIGGER
690
+ TRIGGER --> GH_INSTALL
691
+ GH_INSTALL --> GH_BUILD
692
+ GH_BUILD --> UPLOAD
693
+ UPLOAD --> PAGES
694
+ PAGES --> LIVE
695
+ end
696
+
697
+ subgraph ALT ["Альтернативный деплой"]
698
+ VERCEL["vercel --prod<br/>(Vercel)"]
699
+ NETLIFY["netlify deploy --prod<br/>(Netlify)"]
700
+ NGINX["Копировать dist/ на сервер<br/>(Nginx / Apache)"]
701
+ LOCAL_OPEN["Открыть dist/index.html<br/>(локально, offline)"]
702
+ end
703
+
704
+ BUILD --> VERCEL
705
+ BUILD --> NETLIFY
706
+ BUILD --> NGINX
707
+ BUILD --> LOCAL_OPEN
708
+ ```
709
+
710
+ ### GitHub Actions workflow шаг за шагом
711
+
712
+ ```
713
+ 1. Push в ветку main
714
+ -> GitHub Actions detect push event
715
+
716
+ 2. Job: build
717
+ -> Checkout репозитория
718
+ -> Setup Node.js 20
719
+ -> npm install (cached)
720
+ -> npm run build
721
+ -> Upload dist/ as artifact
722
+
723
+ 3. Job: deploy (depends on build)
724
+ -> Download artifact
725
+ -> Deploy to GitHub Pages
726
+ -> Output: page URL
727
+
728
+ 4. Результат:
729
+ -> https://user.github.io/repo/ доступен
730
+ -> SPA загружается с хешированным JS/CSS
731
+ -> HashRouter обрабатывает маршруты клиентски
732
+ ```
733
+
734
+ ---
735
+
736
+ ## Быстрый справочник
737
+
738
+ ### Потоки генерации (администратор)
739
+
740
+ | Шаг | Модуль | Вход | Выход |
741
+ |-----|--------|------|-------|
742
+ | 1 | Content Analysis | URL / файл / текст / тема | Structured analysis |
743
+ | 2 | Course Structure | Structured analysis | Секции + маппинг упражнений |
744
+ | 3 | Data Generation | Структура курса | 4 файла .js |
745
+ | 4 | Scaffold | Метаданные проекта | Каркас Vite + React |
746
+ | 5 | Components | Список компонентов | 22 JSX-файла |
747
+ | 6 | Gamification | Данные достижений | Zustand store + hooks |
748
+ | 7 | Deploy | Имя репозитория | GitHub Actions workflow |
749
+ | 8 | Verification | Весь проект | 5 проверок: PASS/FAIL |
750
+
751
+ ### Потоки обучения (студент)
752
+
753
+ | Действие | Компоненты | Результат |
754
+ |---------|-----------|----------|
755
+ | Выполнение упражнения | Exercise -> Store -> Toast | +10 pts, streak update |
756
+ | Завершение секции | SectionPage -> Store -> Toast | +25 pts, progress 100% |
757
+ | Разблокировка достижения | Store -> AchievementPopup -> Toast | +50-200 pts |
758
+ | Прохождение финального теста | FinalTestPage -> Store -> ResultsPage | Оценка A-F |
759
+ | Просмотр прогресса | Sidebar, Header, HomePage | % по секциям и общий |