diffray 0.1.3 → 0.3.1

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 (32) hide show
  1. package/README.md +659 -259
  2. package/dist/defaults/agents/api-design.md +31 -0
  3. package/dist/defaults/agents/bug-hunter.md +0 -1
  4. package/dist/defaults/agents/consistency-check.md +27 -0
  5. package/dist/defaults/agents/data-privacy.md +30 -0
  6. package/dist/defaults/agents/database.md +30 -0
  7. package/dist/defaults/agents/general.md +0 -1
  8. package/dist/defaults/agents/i18n.md +29 -0
  9. package/dist/defaults/agents/observability.md +30 -0
  10. package/dist/defaults/agents/performance-check.md +0 -1
  11. package/dist/defaults/agents/security-scan.md +0 -1
  12. package/dist/defaults/agents/validation.md +0 -1
  13. package/dist/defaults/prompts/INDEX.md +178 -0
  14. package/dist/defaults/prompts/README.md +173 -0
  15. package/dist/defaults/prompts/SUMMARY.md +276 -0
  16. package/dist/defaults/prompts/USAGE.md +277 -0
  17. package/dist/defaults/prompts/api-design.md +119 -0
  18. package/dist/defaults/prompts/data-privacy.md +144 -0
  19. package/dist/defaults/prompts/database.md +105 -0
  20. package/dist/defaults/prompts/i18n.md +89 -0
  21. package/dist/defaults/prompts/observability.md +142 -0
  22. package/dist/defaults/rules/code-consistency.md +74 -0
  23. package/dist/diffray.cjs +354 -0
  24. package/package.json +29 -13
  25. package/src/defaults/agents/bug-hunter.md +0 -1
  26. package/src/defaults/agents/consistency-check.md +27 -0
  27. package/src/defaults/agents/general.md +0 -1
  28. package/src/defaults/agents/performance-check.md +0 -1
  29. package/src/defaults/agents/security-scan.md +0 -1
  30. package/src/defaults/agents/validation.md +0 -1
  31. package/src/defaults/rules/code-consistency.md +74 -0
  32. package/dist/diffray.js +0 -338
@@ -0,0 +1,276 @@
1
+ # Prompts Summary
2
+
3
+ Полная сводка всех промптов в системе diffray.
4
+
5
+ ## 📊 Статистика
6
+
7
+ - **Всего промптов**: 7
8
+ - **Автоматических**: 1 (`output-format.md`)
9
+ - **Специализированных**: 6
10
+ - **Документация**: 2 файла (README.md, INDEX.md)
11
+ - **Общий размер**: ~35KB
12
+ - **Строк кода**: ~1012
13
+
14
+ ## 🔄 Автоматические промпты
15
+
16
+ ### `output-format.md` ⚙️
17
+ **Статус**: Автоматически добавляется ко всем агентам
18
+ **Размер**: 2.3KB
19
+ **Использование**: Через `loadOutputFormat()` в `executors/utils.ts`
20
+
21
+ ```typescript
22
+ // Автоматически добавляется к каждому агенту
23
+ const format = await loadOutputFormat();
24
+ const fullPrompt = buildPrompt(systemPrompt, input, format);
25
+ ```
26
+
27
+ **Содержит**:
28
+ - JSON структуру вывода
29
+ - Описание полей (file, lineStart, lineEnd, severity, category)
30
+ - Критические требования к формату
31
+ - Примеры правильного вывода
32
+
33
+ ---
34
+
35
+ ## ✅ Специализированные промпты
36
+
37
+ ### 1. `validation.md`
38
+ **Статус**: Используется агентом валидации
39
+ **Размер**: 6.7KB
40
+ **Агент**: `validation.md` в `src/defaults/agents/`
41
+
42
+ **Назначение**: Фильтрация ложных срабатываний и валидация найденных проблем
43
+
44
+ **Ключевые разделы**:
45
+ - Процесс верификации (обязательное использование Read tool)
46
+ - Критерии сохранения (реальные, проверенные проблемы)
47
+ - Критерии фильтрации (ложные срабатывания, шум, спекуляции)
48
+ - Распознавание намеренных trade-offs
49
+ - Примеры паттернов фильтрации
50
+
51
+ ---
52
+
53
+ ### 2. `i18n.md` 🌍
54
+ **Статус**: Используется агентом i18n
55
+ **Размер**: 2.8KB
56
+ **Агент**: `i18n.md` в `src/defaults/agents/`
57
+
58
+ **Назначение**: Проверка интернационализации кода
59
+
60
+ **Фокус**:
61
+ - Hardcoded строки
62
+ - Отсутствующие ключи переводов
63
+ - Проблемы с форматами локалей (даты, числа, валюта)
64
+ - Поддержка RTL (справа налево)
65
+ - Проблемы конкатенации строк
66
+ - Проблемы файлов переводов
67
+
68
+ **Примеры проблем**:
69
+ ```typescript
70
+ // ❌ Плохо
71
+ <button>Submit</button>
72
+
73
+ // ✅ Хорошо
74
+ <button>{t('submit')}</button>
75
+ ```
76
+
77
+ ---
78
+
79
+ ### 3. `database.md` 🗄️
80
+ **Статус**: Используется агентом database
81
+ **Размер**: 3.3KB
82
+ **Агент**: `database.md` в `src/defaults/agents/`
83
+
84
+ **Назначение**: Проверка работы с базами данных и ORM
85
+
86
+ **Фокус**:
87
+ - N+1 проблемы запросов
88
+ - Отсутствующие индексы
89
+ - Проблемы миграций
90
+ - Производительность запросов
91
+ - Риски deadlock
92
+ - Целостность данных
93
+ - ORM-специфичные проблемы
94
+
95
+ **Примеры проблем**:
96
+ ```typescript
97
+ // ❌ Плохо - N+1 запросы
98
+ users.forEach(user => {
99
+ const posts = db.query('SELECT * FROM posts WHERE user_id = ?', [user.id])
100
+ })
101
+
102
+ // ✅ Хорошо - Один запрос с JOIN
103
+ const usersWithPosts = db.query('SELECT * FROM users JOIN posts ON users.id = posts.user_id')
104
+ ```
105
+
106
+ ---
107
+
108
+ ### 4. `api-design.md` 🔌
109
+ **Статус**: Используется агентом api-design
110
+ **Размер**: 3.6KB
111
+ **Агент**: `api-design.md` в `src/defaults/agents/`
112
+
113
+ **Назначение**: Проверка дизайна REST/GraphQL API
114
+
115
+ **Фокус**:
116
+ - Неправильное использование HTTP методов
117
+ - Соглашения по именованию
118
+ - Форматы ответов об ошибках
119
+ - Пагинация
120
+ - Версионирование
121
+ - Дизайн запросов/ответов
122
+ - Rate limiting и безопасность
123
+ - GraphQL-специфичные проблемы
124
+
125
+ **Примеры проблем**:
126
+ ```typescript
127
+ // ❌ Плохо - POST для чтения
128
+ POST /api/getUsers
129
+
130
+ // ✅ Хорошо - GET для чтения
131
+ GET /api/users
132
+ ```
133
+
134
+ ---
135
+
136
+ ### 5. `observability.md` 📊
137
+ **Статус**: Используется агентом observability
138
+ **Размер**: 3.8KB
139
+ **Агент**: `observability.md` в `src/defaults/agents/`
140
+
141
+ **Назначение**: Проверка логирования, мониторинга и отслеживания ошибок
142
+
143
+ **Фокус**:
144
+ - Отсутствующее логирование
145
+ - Неструктурированное логирование
146
+ - Отсутствующий контекст (request_id, trace_id)
147
+ - Отслеживание ошибок
148
+ - Метрики и мониторинг
149
+ - Безопасность и приватность в логах
150
+ - Распределенный трейсинг
151
+
152
+ **Примеры проблем**:
153
+ ```typescript
154
+ // ❌ Плохо - Тихая обработка ошибок
155
+ try {
156
+ await processPayment()
157
+ } catch (error) {
158
+ // Ничего не логируется!
159
+ }
160
+
161
+ // ✅ Хорошо - Логирование с контекстом
162
+ try {
163
+ await processPayment()
164
+ } catch (error) {
165
+ logger.error('Payment processing failed', {
166
+ error,
167
+ request_id: ctx.requestId,
168
+ user_id: ctx.userId
169
+ })
170
+ }
171
+ ```
172
+
173
+ ---
174
+
175
+ ### 6. `data-privacy.md` 🔒
176
+ **Статус**: Используется агентом data-privacy
177
+ **Размер**: 4.4KB
178
+ **Агент**: `data-privacy.md` в `src/defaults/agents/`
179
+
180
+ **Назначение**: Проверка обработки персональных данных и соответствия GDPR
181
+
182
+ **Фокус**:
183
+ - Раскрытие PII
184
+ - Отсутствующие проверки согласия
185
+ - Хранение данных
186
+ - Шифрование и хранение
187
+ - Доступ к данным и портируемость
188
+ - Обмен данными с третьими лицами
189
+ - Минимизация данных
190
+
191
+ **Примеры проблем**:
192
+ ```typescript
193
+ // ❌ Плохо - PII в логах без маскировки
194
+ logger.info('User signed up', { email: user.email })
195
+
196
+ // ✅ Хорошо - Email замаскирован
197
+ logger.info('User signed up', {
198
+ email: maskEmail(user.email),
199
+ user_id: user.id
200
+ })
201
+ ```
202
+
203
+ ---
204
+
205
+ ## 📚 Документация
206
+
207
+ ### `README.md` (4.2KB)
208
+ Полная документация по использованию промптов:
209
+ - Описание всех промптов
210
+ - Инструкции по использованию
211
+ - Примеры создания новых промптов
212
+ - Best practices
213
+
214
+ ### `INDEX.md` (3.8KB)
215
+ Быстрая справка по всем промптам:
216
+ - Краткое описание каждого промпта
217
+ - Статистика по строкам
218
+ - Паттерны использования
219
+ - Связанная документация
220
+
221
+ ---
222
+
223
+ ## 🔗 Связи промптов и агентов
224
+
225
+ | Промпт | Агент | Статус |
226
+ |--------|-------|--------|
227
+ | `output-format.md` | Все агенты | Автоматически |
228
+ | `validation.md` | `validation` | Используется |
229
+ | `i18n.md` | `i18n` | Используется |
230
+ | `database.md` | `database` | Используется |
231
+ | `api-design.md` | `api-design` | Используется |
232
+ | `observability.md` | `observability` | Используется |
233
+ | `data-privacy.md` | `data-privacy` | Используется |
234
+
235
+ ---
236
+
237
+ ## 🚀 Использование
238
+
239
+ ### Автоматическое включение
240
+ `output-format.md` автоматически добавляется ко всем агентам через `loadOutputFormat()`.
241
+
242
+ ### Ручное включение
243
+ Агенты могут ссылаться на специализированные промпты в своих markdown файлах:
244
+
245
+ ```markdown
246
+ ---
247
+ name: my-agent
248
+ ---
249
+
250
+ You are a database reviewer.
251
+
252
+ See ../prompts/database.md for detailed guidelines.
253
+ ```
254
+
255
+ ---
256
+
257
+ ## 📝 Создание новых промптов
258
+
259
+ 1. Создайте файл в `src/defaults/prompts/`
260
+ 2. Добавьте структуру:
261
+ - Mission statement
262
+ - Focus areas
263
+ - Quality standards
264
+ - Instructions
265
+ - Examples
266
+ 3. Создайте соответствующий агент в `src/defaults/agents/`
267
+ 4. Обновите документацию (README.md, INDEX.md)
268
+
269
+ ---
270
+
271
+ ## 📖 Связанные файлы
272
+
273
+ - **Агенты**: `src/defaults/agents/`
274
+ - **Загрузка промптов**: `src/executors/utils.ts`
275
+ - **Документация агентов**: `docs/AGENTS.md`
276
+ - **Архитектура**: `docs/ARCHITECTURE.md`
@@ -0,0 +1,277 @@
1
+ # Использование промптов - Практические примеры
2
+
3
+ Практическое руководство по использованию промптов в diffray.
4
+
5
+ ## 🔄 Как промпты загружаются и используются
6
+
7
+ ### Автоматическое включение (output-format.md)
8
+
9
+ Промпт `output-format.md` автоматически добавляется ко всем агентам:
10
+
11
+ ```typescript
12
+ // В executors/utils.ts
13
+ export async function loadOutputFormat(): Promise<string> {
14
+ return getCached(CACHE_KEYS.OUTPUT_FORMAT, async () => {
15
+ try {
16
+ const formatPath = getDefaultPath('prompts', 'output-format.md');
17
+ return await readFile(formatPath, 'utf-8');
18
+ } catch {
19
+ return DEFAULT_OUTPUT_FORMAT; // Fallback
20
+ }
21
+ });
22
+ }
23
+
24
+ // Использование в executors/cli.ts
25
+ const format = await loadOutputFormat();
26
+ const fullPrompt = buildPrompt(systemPrompt, ctx.input, format);
27
+ // Результат: systemPrompt + "\n\n# Input:\n" + input + "\n\n" + format
28
+ ```
29
+
30
+ **Что происходит**:
31
+ 1. `loadOutputFormat()` загружает `output-format.md`
32
+ 2. `buildPrompt()` объединяет systemPrompt агента + input (диффы) + format
33
+ 3. Итоговый промпт отправляется в LLM
34
+
35
+ ---
36
+
37
+ ## 📝 Использование специализированных промптов
38
+
39
+ ### Вариант 1: Прямое включение в агента
40
+
41
+ Агент может включать содержимое промпта напрямую:
42
+
43
+ ```markdown
44
+ ---
45
+ name: i18n
46
+ description: Checks for internationalization issues
47
+ enabled: true
48
+ ---
49
+
50
+ You are an internationalization specialist reviewing code for i18n issues.
51
+
52
+ **Focus Areas**:
53
+ - Hardcoded strings
54
+ - Missing translation keys
55
+ - Locale format issues
56
+ - RTL support
57
+
58
+ [Содержимое из prompts/i18n.md можно включить здесь]
59
+ ```
60
+
61
+ ### Вариант 2: Ссылка на промпт
62
+
63
+ Агент может ссылаться на промпт:
64
+
65
+ ```markdown
66
+ ---
67
+ name: database
68
+ description: Detects database issues
69
+ enabled: true
70
+ ---
71
+
72
+ You are a database specialist.
73
+
74
+ See ../prompts/database.md for detailed review guidelines.
75
+
76
+ Focus on:
77
+ - N+1 queries
78
+ - Missing indexes
79
+ - Migration safety
80
+ ```
81
+
82
+ ### Вариант 3: Комбинирование промптов
83
+
84
+ Агент может комбинировать несколько промптов:
85
+
86
+ ```markdown
87
+ ---
88
+ name: full-stack-reviewer
89
+ description: Comprehensive code review
90
+ enabled: true
91
+ ---
92
+
93
+ You are a full-stack code reviewer.
94
+
95
+ **Database Review**: See ../prompts/database.md
96
+ **API Design**: See ../prompts/api-design.md
97
+ **Observability**: See ../prompts/observability.md
98
+
99
+ Review code for issues in all these areas.
100
+ ```
101
+
102
+ ---
103
+
104
+ ## 🎯 Примеры использования
105
+
106
+ ### Пример 1: Агент с автоматическим форматом
107
+
108
+ ```typescript
109
+ // Агент: bug-hunter.md
110
+ // System prompt: "You are a bug detection specialist..."
111
+ // Input: Git diffs
112
+ // Format: Автоматически добавляется из output-format.md
113
+
114
+ // Итоговый промпт:
115
+ const finalPrompt = `
116
+ You are a bug detection specialist focused on identifying logic errors.
117
+
118
+ # Input:
119
+ File: src/utils.ts
120
+ + function processData(data) {
121
+ + return data.map(item => item.value);
122
+ + }
123
+
124
+ # Output Format
125
+ Return your findings as a JSON array wrapped in <json>...</json> XML tags:
126
+ ...
127
+ `;
128
+ ```
129
+
130
+ ### Пример 2: Агент валидации
131
+
132
+ ```typescript
133
+ // Агент: validation.md
134
+ // Использует промпт validation.md напрямую
135
+ // Stage: validation (отдельный этап)
136
+
137
+ const validationPrompt = `
138
+ You are a strict code review validation agent.
139
+ Your task is to validate issues found by other agents...
140
+
141
+ [Содержимое из prompts/validation.md]
142
+ `;
143
+ ```
144
+
145
+ ### Пример 3: Специализированный агент
146
+
147
+ ```typescript
148
+ // Агент: database.md
149
+ // System prompt включает фокус на базы данных
150
+ // Format: Автоматически добавляется
151
+
152
+ const databasePrompt = `
153
+ You are a database specialist reviewing code for SQL/ORM issues.
154
+
155
+ **Focus Areas**:
156
+ - N+1 query problems
157
+ - Missing indexes
158
+ - Migration issues
159
+ ...
160
+
161
+ # Input:
162
+ [Git diffs с изменениями в database коде]
163
+
164
+ # Output Format
165
+ [Автоматически из output-format.md]
166
+ `;
167
+ ```
168
+
169
+ ---
170
+
171
+ ## 🔧 Создание нового промпта и агента
172
+
173
+ ### Шаг 1: Создать промпт
174
+
175
+ ```bash
176
+ # Создать файл промпта
177
+ touch src/defaults/prompts/my-domain.md
178
+ ```
179
+
180
+ ```markdown
181
+ # My Domain Review Prompt
182
+
183
+ You are a specialist reviewing code for [domain] issues.
184
+
185
+ ## Your Mission
186
+ Identify [specific problems] that will cause [impact].
187
+
188
+ ## Focus Areas
189
+ - Area 1: Description
190
+ - Area 2: Description
191
+
192
+ ## Quality Standards
193
+ - Only flag issues with actual impact
194
+ - Verify before reporting
195
+ - Be concise and actionable
196
+
197
+ ## Instructions
198
+ - Provide specific examples
199
+ - Suggest concrete fixes
200
+ - Only report real problems
201
+ ```
202
+
203
+ ### Шаг 2: Создать агента
204
+
205
+ ```bash
206
+ # Создать файл агента
207
+ touch src/defaults/agents/my-domain.md
208
+ ```
209
+
210
+ ```markdown
211
+ ---
212
+ name: my-domain
213
+ description: Reviews code for [domain] issues
214
+ enabled: true
215
+ ---
216
+
217
+ You are a [domain] specialist reviewing code.
218
+
219
+ **Focus Areas**:
220
+ - [Area 1]
221
+ - [Area 2]
222
+
223
+ [Можно включить содержимое из prompts/my-domain.md или ссылаться на него]
224
+ ```
225
+
226
+ ### Шаг 3: Обновить документацию
227
+
228
+ Обновите `README.md`, `INDEX.md`, и `SUMMARY.md` с информацией о новом промпте.
229
+
230
+ ---
231
+
232
+ ## 📊 Структура промпта
233
+
234
+ Рекомендуемая структура промпта:
235
+
236
+ ```markdown
237
+ # [Domain] Review Prompt
238
+
239
+ ## Your Mission
240
+ [Четкое описание цели]
241
+
242
+ ## Focus Areas
243
+ ### 1. [Area 1]
244
+ - [Подпункты]
245
+
246
+ ### 2. [Area 2]
247
+ - [Подпункты]
248
+
249
+ ## Quality Standards
250
+ - [Критерии качества]
251
+
252
+ ## Instructions
253
+ - [Инструкции по использованию]
254
+
255
+ ## Examples of Issues to Report
256
+ ✅ **Report**: [Пример проблемы]
257
+ ❌ **Don't Report**: [Пример того, что не нужно флажить]
258
+ ```
259
+
260
+ ---
261
+
262
+ ## 🚀 Best Practices
263
+
264
+ 1. **Будьте конкретны**: Четкие инструкции дают лучшие результаты
265
+ 2. **Приводите примеры**: Показывайте, что флажить, а что нет
266
+ 3. **Фокус на impact**: Только реальные проблемы, не микро-оптимизации
267
+ 4. **Обновляйте регулярно**: Улучшайте промпты на основе реального использования
268
+ 5. **Документируйте**: Обновляйте README при создании новых промптов
269
+
270
+ ---
271
+
272
+ ## 🔗 Связанные файлы
273
+
274
+ - **Загрузка промптов**: `src/executors/utils.ts` → `loadOutputFormat()`
275
+ - **Использование**: `src/executors/cli.ts` → `buildPrompt()`
276
+ - **Агенты**: `src/defaults/agents/` - Агенты, использующие промпты
277
+ - **Документация**: `README.md`, `INDEX.md`, `SUMMARY.md`
@@ -0,0 +1,119 @@
1
+ # API Design Review Prompt
2
+
3
+ You are an API design specialist reviewing REST/GraphQL API endpoints for design issues, naming inconsistencies, and best practices violations.
4
+
5
+ ## Your Mission
6
+
7
+ Identify API design flaws, inconsistent naming conventions, missing error formats, pagination issues, and versioning problems that will cause integration difficulties or scalability issues.
8
+
9
+ ## Focus Areas
10
+
11
+ ### 1. **HTTP Method Misuse**
12
+ - Using POST for read operations (should be GET)
13
+ - Using GET for state-changing operations (should be POST/PUT/DELETE)
14
+ - Missing proper HTTP status codes
15
+ - Using wrong status codes (200 for errors, etc.)
16
+
17
+ ### 2. **Naming Conventions**
18
+ - Inconsistent endpoint naming (camelCase vs snake_case vs kebab-case)
19
+ - Non-RESTful resource names (e.g., `/getUsers` instead of `/users`)
20
+ - Verbs in URLs (should use HTTP methods)
21
+ - Plural vs singular inconsistencies
22
+
23
+ ### 3. **Error Response Format**
24
+ - Missing consistent error response structure
25
+ - Error responses without error codes
26
+ - Missing error details or context
27
+ - Inconsistent error format across endpoints
28
+
29
+ ### 4. **Pagination**
30
+ - Endpoints returning unbounded lists (missing pagination)
31
+ - Inconsistent pagination parameters across endpoints
32
+ - Missing total count or has_more indicators
33
+ - Inefficient pagination (offset-based for large datasets)
34
+
35
+ ### 5. **Versioning**
36
+ - Missing API versioning strategy
37
+ - Breaking changes without version bump
38
+ - Inconsistent versioning format (v1 vs v1.0 vs 1.0)
39
+
40
+ ### 6. **Request/Response Design**
41
+ - Missing request validation
42
+ - Returning too much data (over-fetching)
43
+ - Missing fields that clients need (under-fetching)
44
+ - Inconsistent field naming across endpoints
45
+
46
+ ### 7. **Rate Limiting & Security**
47
+ - Missing rate limiting headers
48
+ - No authentication/authorization checks
49
+ - Sensitive data in URLs (should be in body/headers)
50
+ - Missing CORS configuration
51
+
52
+ ### 8. **GraphQL-Specific Issues**
53
+ - N+1 query problems in resolvers
54
+ - Missing query complexity limits
55
+ - Over-fetching due to missing field selection
56
+ - Missing error handling in resolvers
57
+
58
+ ## Quality Standards
59
+
60
+ - Only flag issues with actual API design impact
61
+ - Distinguish between acceptable patterns and violations
62
+ - Check if framework conventions are being followed
63
+ - Verify the issue will cause real integration problems
64
+
65
+ ## Instructions
66
+
67
+ - Be concise and actionable
68
+ - Provide specific examples of the problematic pattern
69
+ - Suggest concrete fixes (rename endpoint, add pagination, etc.)
70
+ - Only report issues that will cause real API design problems
71
+
72
+ ## Examples of Issues to Report
73
+
74
+ ✅ **Report**: Wrong HTTP method
75
+ ```typescript
76
+ // ❌ Bad - POST for read operation
77
+ POST /api/getUsers
78
+
79
+ // ✅ Good - GET for read operation
80
+ GET /api/users
81
+ ```
82
+
83
+ ✅ **Report**: Missing pagination
84
+ ```typescript
85
+ // ❌ Bad - Unbounded list
86
+ GET /api/users
87
+ // Returns all users (could be millions)
88
+
89
+ // ✅ Good - Paginated
90
+ GET /api/users?page=1&limit=20
91
+ ```
92
+
93
+ ✅ **Report**: Inconsistent error format
94
+ ```typescript
95
+ // ❌ Bad - Inconsistent formats
96
+ { error: "Not found" } // Endpoint 1
97
+ { message: "User not found" } // Endpoint 2
98
+ { code: 404, details: "..." } // Endpoint 3
99
+
100
+ // ✅ Good - Consistent format
101
+ { error: { code: "NOT_FOUND", message: "User not found" } }
102
+ ```
103
+
104
+ ✅ **Report**: Non-RESTful naming
105
+ ```typescript
106
+ // ❌ Bad - Verbs in URL
107
+ POST /api/createUser
108
+ POST /api/deleteUser
109
+
110
+ // ✅ Good - RESTful resources
111
+ POST /api/users
112
+ DELETE /api/users/:id
113
+ ```
114
+
115
+ ❌ **Don't Report**: Framework-specific conventions that are acceptable
116
+ ```typescript
117
+ // OK - Framework convention (e.g., Next.js API routes)
118
+ POST /api/users/create // If framework expects this pattern
119
+ ```