@michaelbel/cuckcoder-mcp 1.6.11
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.
- package/assets/rules/architecture.md +15 -0
- package/assets/rules/bottom-sheet.md +20 -0
- package/assets/rules/compose-color.md +22 -0
- package/assets/rules/compose-constraintlayout.md +18 -0
- package/assets/rules/compose-screen.md +33 -0
- package/assets/rules/compose-spacing.md +39 -0
- package/assets/rules/compose.md +54 -0
- package/assets/rules/dialog.md +33 -0
- package/assets/rules/domain.md +36 -0
- package/assets/rules/filesystem.md +3 -0
- package/assets/rules/git.md +11 -0
- package/assets/rules/github-readme.md +97 -0
- package/assets/rules/github-repo.md +65 -0
- package/assets/rules/kmp.md +14 -0
- package/assets/rules/kotlin.md +48 -0
- package/assets/rules/lazylist.md +36 -0
- package/assets/rules/mvi-error-handling.md +19 -0
- package/assets/rules/mvi-state.md +31 -0
- package/assets/rules/mvi.md +39 -0
- package/assets/rules/navigation.md +20 -0
- package/assets/rules/network.md +36 -0
- package/assets/rules/preview.md +31 -0
- package/assets/rules/realtime.md +39 -0
- package/assets/rules/resource.md +18 -0
- package/assets/rules/room.md +33 -0
- package/assets/rules/scaffold.md +25 -0
- package/assets/rules/shimmer.md +34 -0
- package/assets/rules/textfield.md +31 -0
- package/assets/rules/typography.md +32 -0
- package/assets/rules/usecase.md +60 -0
- package/assets/rules/workflow.md +17 -0
- package/assets/rules/workmanager.md +44 -0
- package/assets/skills/create-data-layer/SKILL.md +60 -0
- package/assets/skills/create-datastore-preference/SKILL.md +80 -0
- package/assets/skills/create-domain-mapper/SKILL.md +30 -0
- package/assets/skills/create-feature-alert-dialog/SKILL.md +549 -0
- package/assets/skills/create-feature-bottom-sheet/SKILL.md +300 -0
- package/assets/skills/create-feature-scaffold-screen/SKILL.md +74 -0
- package/assets/skills/create-feature-scaffold-screen/references/form-screen.md +20 -0
- package/assets/skills/create-feature-scaffold-screen/references/network-only-screen.md +20 -0
- package/assets/skills/create-feature-scaffold-screen/references/paginated-screen.md +29 -0
- package/assets/skills/create-feature-scaffold-screen/references/room-backed-screen.md +23 -0
- package/assets/skills/create-feature-scaffold-screen/references/static-screen.md +13 -0
- package/assets/skills/create-guide/SKILL.md +169 -0
- package/assets/skills/create-guide/references/android-project.md +120 -0
- package/assets/skills/create-guide/references/androidx.md +49 -0
- package/assets/skills/create-guide/references/existing-guides.yaml +60 -0
- package/assets/skills/create-guide/references/github.md +71 -0
- package/assets/skills/create-guide/references/guide-defaults.yaml +51 -0
- package/assets/skills/create-guide/references/notion.md +121 -0
- package/assets/skills/create-guide/references/output-contract.md +79 -0
- package/assets/skills/create-guide/references/research.md +64 -0
- package/assets/skills/create-guide/references/validation.md +59 -0
- package/assets/skills/create-guide/scripts/validate_guide.py +167 -0
- package/assets/skills/create-guide/templates/guide-manifest.yaml +67 -0
- package/assets/skills/create-guide/templates/implementation-plan.md +30 -0
- package/assets/skills/create-guide/templates/notion-page.md +46 -0
- package/assets/skills/create-guide/templates/repository/AGENTS.md +7 -0
- package/assets/skills/create-guide/templates/repository/README.md +32 -0
- package/assets/skills/create-guide/templates/repository/SOURCES.md +32 -0
- package/assets/skills/create-guide/templates/validation-report.md +30 -0
- package/assets/skills/create-guide/tests/test_validate_guide.py +97 -0
- package/assets/skills/create-ktor-endpoint/SKILL.md +33 -0
- package/assets/skills/create-notification-flow/SKILL.md +103 -0
- package/assets/skills/create-offline-outbox/SKILL.md +110 -0
- package/assets/skills/create-paging-flow/SKILL.md +96 -0
- package/assets/skills/create-project-from-template/SKILL.md +91 -0
- package/assets/skills/create-project-from-template/assets/icons/android.svg +12 -0
- package/assets/skills/create-project-from-template/assets/icons/compose.svg +34 -0
- package/assets/skills/create-project-from-template/assets/icons/jetpack.svg +10 -0
- package/assets/skills/create-project-from-template/references/myapplication-checklist.md +92 -0
- package/assets/skills/create-room-storage/SKILL.md +39 -0
- package/assets/skills/create-shared-component/SKILL.md +160 -0
- package/assets/skills/create-signalr-channel/SKILL.md +39 -0
- package/assets/skills/create-usecase/SKILL.md +142 -0
- package/assets/skills/create-workmanager-task/SKILL.md +41 -0
- package/assets/skills/github-repo-settings/SKILL.md +152 -0
- package/assets/skills/interview-me/SKILL.md +150 -0
- package/dist/errors.js +49 -0
- package/dist/frontmatter.js +44 -0
- package/dist/github.js +23 -0
- package/dist/index.js +6 -0
- package/dist/server.js +131 -0
- package/dist/source/bundled.js +78 -0
- package/dist/source/cache.js +61 -0
- package/dist/source/github-source.js +68 -0
- package/dist/source/github.js +185 -0
- package/dist/source/index.js +36 -0
- package/dist/source/types.js +1 -0
- package/dist/validation.js +33 -0
- package/dist/version.js +26 -0
- package/package.json +38 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Android Project Rules
|
|
2
|
+
|
|
3
|
+
## Основа
|
|
4
|
+
|
|
5
|
+
Создавай проект из актуальной основной ветки:
|
|
6
|
+
|
|
7
|
+
<https://github.com/michaelbel/MyApplication>
|
|
8
|
+
|
|
9
|
+
Не копируй Android-шаблон внутрь этого skill. Перед каждым новым гайдом проверяй текущую структуру и версии `MyApplication`.
|
|
10
|
+
|
|
11
|
+
По умолчанию наследуй:
|
|
12
|
+
|
|
13
|
+
- Gradle Kotlin DSL;
|
|
14
|
+
- version catalog;
|
|
15
|
+
- JDK 21;
|
|
16
|
+
- Compose;
|
|
17
|
+
- edge-to-edge;
|
|
18
|
+
- тему и launcher resources;
|
|
19
|
+
- CI;
|
|
20
|
+
- подпись debug-сборки;
|
|
21
|
+
- `org.michaelbel` как package prefix.
|
|
22
|
+
|
|
23
|
+
Меняй унаследованное значение только тогда, когда тема требует этого. Причину фиксируй в манифесте.
|
|
24
|
+
|
|
25
|
+
## Тип проекта
|
|
26
|
+
|
|
27
|
+
### `catalog`
|
|
28
|
+
|
|
29
|
+
Используй для компонентов или API с несколькими независимыми вариантами.
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
app/src/main/kotlin/org/michaelbel/<topic>/
|
|
33
|
+
├── MainActivity.kt
|
|
34
|
+
├── MainActivityContent.kt
|
|
35
|
+
├── Theme.kt
|
|
36
|
+
├── sample01_<Name>/Sample01App.kt
|
|
37
|
+
├── sample02_<Name>/Sample02App.kt
|
|
38
|
+
└── ...
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Правила:
|
|
42
|
+
|
|
43
|
+
- номер всегда двузначный;
|
|
44
|
+
- один sample демонстрирует одну идею;
|
|
45
|
+
- главный экран (Home) содержит каталог samples и живёт в `MainActivityContent.kt`;
|
|
46
|
+
- порядок каталога и README совпадает; Notion описывает API без отдельного списка samples;
|
|
47
|
+
- не объединяй разные параметры в один гигантский sample без причины.
|
|
48
|
+
|
|
49
|
+
#### Навигация и главный экран (эталон: `ListItem`, `Insets`, `NavigationSuiteScaffold`, `EyeDropper`)
|
|
50
|
+
|
|
51
|
+
`MainActivity.kt` остаётся тонким:
|
|
52
|
+
|
|
53
|
+
```kotlin
|
|
54
|
+
class MainActivity: ComponentActivity() {
|
|
55
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
|
56
|
+
installSplashScreen()
|
|
57
|
+
super.onCreate(savedInstanceState)
|
|
58
|
+
enableEdgeToEdge()
|
|
59
|
+
setContent { AppTheme { MainActivityContent() } }
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`MainActivityContent.kt` строит навигацию через Navigation 3 (`androidx.navigation3:navigation3-runtime`, `androidx.navigation3:navigation3-ui`):
|
|
65
|
+
|
|
66
|
+
- backstack — `remember { mutableStateListOf<Any>(Home) }`, где `Home` и `SampleNN` — приватные `data object` для каждого маршрута;
|
|
67
|
+
- `NavDisplay(backStack, onBack = { backStack.removeLastOrNull() }, ...)` с `entryProvider`;
|
|
68
|
+
- `popTransitionSpec` и `predictivePopTransitionSpec` — `fadeIn() togetherWith fadeOut() using SizeTransform(clip = false)`;
|
|
69
|
+
- `entry<Home> { ... }` рендерит каталог samples, `entry<SampleNN> { SampleNNApp() }` — сам sample.
|
|
70
|
+
|
|
71
|
+
Экран Home — `Scaffold` с `TopAppBar` (заголовок — название темы или `stringResource(R.string.app_name)`), `pinnedScrollBehavior()` + `Modifier.nestedScroll(...)`, и `LazyColumn` со списком samples:
|
|
72
|
+
|
|
73
|
+
- `contentPadding`: 16.dp по горизонтали и сверху, снизу — `WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding()`;
|
|
74
|
+
- `verticalArrangement = Arrangement.spacedBy(ListItemDefaults.SegmentedGap)`;
|
|
75
|
+
- каждый sample — `SegmentedListItem` с `overlineContent = { Text("Sample NN") }`, `shapes = ListItemDefaults.segmentedShapes(index, count)`, `colors = ListItemDefaults.segmentedColors(containerColor = MaterialTheme.colorScheme.surfaceContainerHighest)`, `content = { Text("<Sample title>") }`; при необходимости добавляй `supportingContent` с коротким пояснением;
|
|
76
|
+
- связанные samples группируй в один сегмент (общий `count`), между несвязанными группами вставляй `Spacer(Modifier.height(12.dp))`;
|
|
77
|
+
- единственный несвязанный пункт без группы — обычный `ListItem`, а не `SegmentedListItem`.
|
|
78
|
+
|
|
79
|
+
Это требует Navigation 3 и версии `androidx.compose.material3` с `SegmentedListItem`/`ListItemDefaults.segmentedShapes` (см. текущие версии в `ListItem`/`Insets`/`EyeDropper`/`NavigationSuiteScaffold`) — фиксируй точную версию в манифесте, если она новее унаследованной из `MyApplication`. Добавление `androidx.navigation3` и обновление `material3` ради этой структуры не считается нарушением правила «не добавляй зависимости без необходимости»: это часть обязательной структуры каталога, а не тема гайда.
|
|
80
|
+
|
|
81
|
+
### `scenario`
|
|
82
|
+
|
|
83
|
+
Используй для API, смысл которого раскрывается в связанном потоке: Navigation, Paging, Room, WorkManager, архитектура.
|
|
84
|
+
|
|
85
|
+
Структура минимальная и зависит от сценария. Разрешены `feature`, `navigation`, `data` и другие слои только при реальной необходимости.
|
|
86
|
+
|
|
87
|
+
### `single`
|
|
88
|
+
|
|
89
|
+
Используй для одного небольшого API. Не создавай каталог с единственным пунктом.
|
|
90
|
+
|
|
91
|
+
## Минимальная архитектура
|
|
92
|
+
|
|
93
|
+
Учебный проект демонстрирует тему, а не количество слоёв.
|
|
94
|
+
|
|
95
|
+
Не добавляй без необходимости:
|
|
96
|
+
|
|
97
|
+
- DI-фреймворк;
|
|
98
|
+
- use case без бизнес-логики;
|
|
99
|
+
- интерфейс с одной реализацией;
|
|
100
|
+
- data/domain разделение для статических данных;
|
|
101
|
+
- многомодульность;
|
|
102
|
+
- сеть, Room или WorkManager;
|
|
103
|
+
- wrapper только ради переименования API.
|
|
104
|
+
|
|
105
|
+
Допускай локальное дублирование между samples, если оно делает каждый пример самостоятельным и читаемым.
|
|
106
|
+
|
|
107
|
+
## Код
|
|
108
|
+
|
|
109
|
+
- Следуй актуальным правилам `michaelbel/cuckcoder`.
|
|
110
|
+
- Не используй wildcard imports.
|
|
111
|
+
- Все примеры должны компилироваться.
|
|
112
|
+
- Experimental opt-in размещай на уровне файла.
|
|
113
|
+
- Для UI-направлений используй `start`/`end`, если API предоставляет эти понятия.
|
|
114
|
+
- Не оставляй комментарии, пересказывающие строку кода.
|
|
115
|
+
- Preview добавляй по правилам `cuckcoder`; для полноэкранного sample допускается preview корневого контента.
|
|
116
|
+
- Навигация каталога samples не должна затмевать изучаемый API.
|
|
117
|
+
|
|
118
|
+
## Версии
|
|
119
|
+
|
|
120
|
+
По умолчанию наследуй версии из `MyApplication`, затем добавляй только зависимости темы. Для alpha или experimental API фиксируй точную версию и opt-in в манифесте, README и Notion.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# AndroidX Source Rules
|
|
2
|
+
|
|
3
|
+
## Когда использовать AndroidX
|
|
4
|
+
|
|
5
|
+
Используй <https://github.com/androidx/androidx> для:
|
|
6
|
+
|
|
7
|
+
- проверки фактического поведения API;
|
|
8
|
+
- чтения KDoc и публичных сигнатур;
|
|
9
|
+
- поиска официальных samples и тестов;
|
|
10
|
+
- понимания default values и внутренних связей;
|
|
11
|
+
- восстановления примера, которого нет в документации.
|
|
12
|
+
|
|
13
|
+
## Фиксация источника
|
|
14
|
+
|
|
15
|
+
Для каждого изученного AndroidX-файла добавь в `.guidekit/SOURCES.md`:
|
|
16
|
+
|
|
17
|
+
- repository URL;
|
|
18
|
+
- commit SHA, tag или release branch;
|
|
19
|
+
- полный путь к файлу;
|
|
20
|
+
- ссылка на файл;
|
|
21
|
+
- что именно было использовано;
|
|
22
|
+
- использование: `reference`, `adapted` или `copied`.
|
|
23
|
+
|
|
24
|
+
Не используй плавающую ссылку на `androidx-main` как единственную фиксацию версии. Сохрани конкретный commit SHA.
|
|
25
|
+
|
|
26
|
+
## Адаптация кода
|
|
27
|
+
|
|
28
|
+
Предпочитай написать минимальный пример заново на основе понимания API.
|
|
29
|
+
|
|
30
|
+
Если фрагмент адаптирован:
|
|
31
|
+
|
|
32
|
+
- укажи исходный файл;
|
|
33
|
+
- опиши изменения;
|
|
34
|
+
- сохрани применимые copyright notices;
|
|
35
|
+
- не выдавай код AndroidX за полностью авторский.
|
|
36
|
+
|
|
37
|
+
Если фрагмент скопирован:
|
|
38
|
+
|
|
39
|
+
- сохрани исходный copyright header в файле;
|
|
40
|
+
- добавь Apache License 2.0 в `LICENSES/Apache-2.0.txt`;
|
|
41
|
+
- добавь запись в `THIRD_PARTY_NOTICES.md`;
|
|
42
|
+
- проверь, есть ли в исходном subtree файл `NOTICE` и перенеси применимые notices;
|
|
43
|
+
- не удаляй лицензионные комментарии.
|
|
44
|
+
|
|
45
|
+
Это правило относится к коду, тестам, изображениям и другим материалам.
|
|
46
|
+
|
|
47
|
+
## Ограничение копирования
|
|
48
|
+
|
|
49
|
+
Не переноси в учебный проект большие внутренние реализации AndroidX, если гайд можно показать через публичный API. Копирование должно быть минимальным, объяснимым и совместимым с лицензией источника.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
default_notion_data_source_name: POSTS
|
|
3
|
+
count: 14
|
|
4
|
+
|
|
5
|
+
guides:
|
|
6
|
+
- id: detekt
|
|
7
|
+
notion_title: Гайд по Detekt. Создать свои правила для статического анализа Kotlin-кода
|
|
8
|
+
repository: https://github.com/michaelbel/detekt-rules
|
|
9
|
+
|
|
10
|
+
- id: insets
|
|
11
|
+
notion_title: Гайд по Insets. Как обрабатывать отступы и вырезы
|
|
12
|
+
repository: https://github.com/michaelbel/Insets
|
|
13
|
+
|
|
14
|
+
- id: navigation-suite-scaffold
|
|
15
|
+
notion_title: Гайд по NavigationSuiteScaffold. Адаптивная верхнеуровневая навигация
|
|
16
|
+
repository: https://github.com/michaelbel/NavigationSuiteScaffold
|
|
17
|
+
|
|
18
|
+
- id: list-item
|
|
19
|
+
notion_title: Гайд по ListItem. Как проектировать экспрессивные списки
|
|
20
|
+
repository: https://github.com/michaelbel/ListItem
|
|
21
|
+
|
|
22
|
+
- id: agent-symlinks
|
|
23
|
+
notion_title: Гайд по Симлинкам для AGENTS.md, CLAUDE.md, GEMINI.md
|
|
24
|
+
repository: https://github.com/michaelbel/cuckcoder
|
|
25
|
+
|
|
26
|
+
- id: gemma4
|
|
27
|
+
notion_title: Гайд по Gemma4 в Android Studio. Запустить локального AI-ассистента
|
|
28
|
+
repository: null
|
|
29
|
+
|
|
30
|
+
- id: enum-bitmask
|
|
31
|
+
notion_title: Гайд по Kotlin Enum Bitmask. Как хранить набор флагов в Int
|
|
32
|
+
repository: https://github.com/michaelbel/EnumBitmask
|
|
33
|
+
|
|
34
|
+
- id: aliases
|
|
35
|
+
notion_title: Гайд по Aliases. Как менять иконку приложения в Android
|
|
36
|
+
repository: https://github.com/michaelbel/Aliases
|
|
37
|
+
|
|
38
|
+
- id: build-flavors
|
|
39
|
+
notion_title: Гайд по BuildFlavors. Как разделять Android-сборки под разные платформы
|
|
40
|
+
repository: https://github.com/michaelbel/BuildFlavors
|
|
41
|
+
|
|
42
|
+
- id: font-scale
|
|
43
|
+
notion_title: Гайд по FontScale. Как адаптировать UI к крупному тексту
|
|
44
|
+
repository: https://github.com/michaelbel/FontScale
|
|
45
|
+
|
|
46
|
+
- id: mvi
|
|
47
|
+
notion_title: Гайд по MVI. Архитектура управления состоянием
|
|
48
|
+
repository: https://github.com/michaelbel/MVI
|
|
49
|
+
|
|
50
|
+
- id: palette-colors
|
|
51
|
+
notion_title: Гайд по PaletteColors. Как извлекать цвета из изображений
|
|
52
|
+
repository: https://github.com/michaelbel/PaletteColors
|
|
53
|
+
|
|
54
|
+
- id: plurals
|
|
55
|
+
notion_title: Гайд по Plurals. Как склонять строки с числами в Android
|
|
56
|
+
repository: https://github.com/michaelbel/Plurals
|
|
57
|
+
|
|
58
|
+
- id: eye-dropper
|
|
59
|
+
notion_title: Гайд по EyeDropper. Как использовать системную пипетку в Android 17
|
|
60
|
+
repository: https://github.com/michaelbel/EyeDropper
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# GitHub Guide Repository Rules
|
|
2
|
+
|
|
3
|
+
## Создание
|
|
4
|
+
|
|
5
|
+
По умолчанию:
|
|
6
|
+
|
|
7
|
+
- owner: `michaelbel`;
|
|
8
|
+
- visibility: `public`;
|
|
9
|
+
- имя: официальное имя темы в PascalCase;
|
|
10
|
+
- package: `org.michaelbel.<topic-lowercase>`;
|
|
11
|
+
- ветка: наследуется от актуального `MyApplication`;
|
|
12
|
+
- Android-проект создаётся без истории шаблона.
|
|
13
|
+
|
|
14
|
+
Примеры имён:
|
|
15
|
+
|
|
16
|
+
- `Insets`;
|
|
17
|
+
- `ListItem`;
|
|
18
|
+
- `NavigationSuiteScaffold`;
|
|
19
|
+
- `EyeDropper`.
|
|
20
|
+
|
|
21
|
+
Сокращённый package вроде `org.michaelbel.nss` допускается только при явной фиксации в манифесте.
|
|
22
|
+
|
|
23
|
+
## Общие правила
|
|
24
|
+
|
|
25
|
+
Следуй актуальным файлам:
|
|
26
|
+
|
|
27
|
+
- `rules/github/GITHUB_REPO_RULES.md`;
|
|
28
|
+
- `rules/github/GITHUB_README_RULES.md`;
|
|
29
|
+
- `rules/git/GIT_RULES.md`
|
|
30
|
+
|
|
31
|
+
из <https://github.com/michaelbel/cuckcoder>.
|
|
32
|
+
|
|
33
|
+
GuideKit дополнительно требует:
|
|
34
|
+
|
|
35
|
+
- `.guidekit/` с воспроизводимыми метаданными;
|
|
36
|
+
- README со списком samples или описанием scenario;
|
|
37
|
+
- ссылки README должны указывать на существующие пути;
|
|
38
|
+
- CI должен собирать debug APK;
|
|
39
|
+
- публичный репозиторий не содержит секретов и внутренних Notion IDs.
|
|
40
|
+
|
|
41
|
+
## AI-инструкции
|
|
42
|
+
|
|
43
|
+
В создаваемом репозитории:
|
|
44
|
+
|
|
45
|
+
- `AGENTS.md` — реальный файл;
|
|
46
|
+
- `CLAUDE.md` — symlink на `AGENTS.md`;
|
|
47
|
+
- `GEMINI.md` — symlink на `AGENTS.md`.
|
|
48
|
+
|
|
49
|
+
`AGENTS.md` должен требовать:
|
|
50
|
+
|
|
51
|
+
1. правила `cuckcoder`;
|
|
52
|
+
2. чтение `.guidekit/manifest.yaml`;
|
|
53
|
+
3. сохранение соответствия с Notion-страницей;
|
|
54
|
+
4. обновление `.guidekit/SOURCES.md` и validation report при изменениях.
|
|
55
|
+
|
|
56
|
+
## README
|
|
57
|
+
|
|
58
|
+
README пишется на английском, если пользователь не указал иначе.
|
|
59
|
+
|
|
60
|
+
После обязательных секций `cuckcoder` добавь:
|
|
61
|
+
|
|
62
|
+
- `## Samples` для `catalog`;
|
|
63
|
+
- `## Scenario` для `scenario`;
|
|
64
|
+
- `## Build`;
|
|
65
|
+
- `## Sources`, если использовался AndroidX-код.
|
|
66
|
+
|
|
67
|
+
Каждая строка списка samples ссылается на точный файл или каталог.
|
|
68
|
+
|
|
69
|
+
## Метаданные
|
|
70
|
+
|
|
71
|
+
Описание репозитория — одно английское предложение. Добавь релевантные topics, но не используй общие теги вроде `project` или `sample` без предметного тега.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
schema_version: 1
|
|
2
|
+
|
|
3
|
+
owner:
|
|
4
|
+
github: michaelbel
|
|
5
|
+
package_prefix: org.michaelbel
|
|
6
|
+
|
|
7
|
+
language:
|
|
8
|
+
framework: ru
|
|
9
|
+
notion: ru
|
|
10
|
+
repository_readme: en
|
|
11
|
+
code: en
|
|
12
|
+
|
|
13
|
+
integrations:
|
|
14
|
+
github_profile: https://github.com/michaelbel
|
|
15
|
+
android_template: https://github.com/michaelbel/MyApplication
|
|
16
|
+
shared_rules: https://github.com/michaelbel/cuckcoder
|
|
17
|
+
androidx_source: https://github.com/androidx/androidx
|
|
18
|
+
notion_data_source_name: POSTS
|
|
19
|
+
notion_existing_page_policy: update_in_place
|
|
20
|
+
|
|
21
|
+
repository:
|
|
22
|
+
visibility: public
|
|
23
|
+
project_mode: auto
|
|
24
|
+
default_branch: inherit_template
|
|
25
|
+
naming: PascalCase
|
|
26
|
+
include_ci: true
|
|
27
|
+
include_codeowners: true
|
|
28
|
+
include_funding: true
|
|
29
|
+
include_ai_symlinks: true
|
|
30
|
+
|
|
31
|
+
android:
|
|
32
|
+
ui: compose
|
|
33
|
+
build_scripts: kotlin_dsl
|
|
34
|
+
versions: inherit_template
|
|
35
|
+
jdk: 21
|
|
36
|
+
architecture: minimal_for_topic
|
|
37
|
+
dependency_injection: only_when_required
|
|
38
|
+
modules: single_by_default
|
|
39
|
+
|
|
40
|
+
research:
|
|
41
|
+
require_primary_sources: true
|
|
42
|
+
require_exact_versions: true
|
|
43
|
+
require_androidx_ref: when_androidx_is_used
|
|
44
|
+
third_party_sources: supplementary_only
|
|
45
|
+
|
|
46
|
+
validation:
|
|
47
|
+
required_gradle_tasks:
|
|
48
|
+
- :app:assembleDebug
|
|
49
|
+
- :app:lintDebug
|
|
50
|
+
unit_tests: when_present
|
|
51
|
+
require_cross_check: true
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Notion Guide Rules
|
|
2
|
+
|
|
3
|
+
## Место публикации
|
|
4
|
+
|
|
5
|
+
Сначала ищи существующую страницу по точному или близкому названию. Если она найдена, обновляй только её: не создавай дубликат и не переноси страницу между базами.
|
|
6
|
+
|
|
7
|
+
Если страницы ещё нет, по умолчанию создавай её в data source с точным именем `POSTS`, если пользователь явно не указал другое место. Разрешай страницу и data source через Notion API по имени или предоставленному пользователем URL. Не сохраняй внутренний Notion ID в публичном репозитории.
|
|
8
|
+
|
|
9
|
+
## Язык и заголовок
|
|
10
|
+
|
|
11
|
+
Страница пишется на русском.
|
|
12
|
+
|
|
13
|
+
Шаблон названия:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
Гайд по <Topic>. <Практический результат>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Примеры:
|
|
20
|
+
|
|
21
|
+
- `Гайд по Insets. Как обрабатывать отступы и вырезы`;
|
|
22
|
+
- `Гайд по ListItem. Как проектировать экспрессивные списки`;
|
|
23
|
+
- `Гайд по EyeDropper. Как использовать системную пипетку в Android 17`.
|
|
24
|
+
|
|
25
|
+
Не повторяй title первым заголовком в content: Notion показывает свойство title автоматически.
|
|
26
|
+
|
|
27
|
+
Если широкая тема поддерживает несколько API или способов представления, а проект разбирает только один из них, укажи выбранный API в title. Не создавай впечатление, что гайд покрывает всю тему.
|
|
28
|
+
|
|
29
|
+
## Вступление
|
|
30
|
+
|
|
31
|
+
До первого `##` напиши один-два плотных абзаца:
|
|
32
|
+
|
|
33
|
+
- что это за API;
|
|
34
|
+
- какую проблему он решает;
|
|
35
|
+
- когда разработчик сталкивается с этой проблемой;
|
|
36
|
+
- главное ограничение или условие, если оно критично.
|
|
37
|
+
|
|
38
|
+
В первом абзаце повторно зафиксируй точный объем гайда. Разделяй системную capability или treatment и конкретный presentation API: не называй их одним механизмом и не подменяй одно другим.
|
|
39
|
+
|
|
40
|
+
При первом употреблении специального термина объясни его простыми словами через наблюдаемое поведение. Не заменяй объяснение другим абстрактным термином: вместо общих формулировок вроде `заметные поверхности` перечисли конкретные места интерфейса, если их немного.
|
|
41
|
+
|
|
42
|
+
Не перечисляй варианты API, которые не рассматриваются в гайде, только ради полноты. Упоминай их лишь тогда, когда без этого нельзя корректно объяснить границы или поведение выбранного API.
|
|
43
|
+
|
|
44
|
+
Не начинай с истории библиотеки, общих слов или определения Android.
|
|
45
|
+
|
|
46
|
+
## Структура
|
|
47
|
+
|
|
48
|
+
Не используй один жесткий набор разделов для всех тем. Строй страницу вокруг ментальной модели и публичного API.
|
|
49
|
+
|
|
50
|
+
Рекомендуемый порядок:
|
|
51
|
+
|
|
52
|
+
1. главная идея;
|
|
53
|
+
2. настройка manifest, если API требует permissions, services, activities или providers;
|
|
54
|
+
3. основные компоненты и методы API;
|
|
55
|
+
4. параметры, состояния и варианты с кодом из проекта;
|
|
56
|
+
5. документация.
|
|
57
|
+
|
|
58
|
+
Не добавляй отдельные служебные разделы `Требования и версии проекта`, `Сценарии проекта` и `Состояние, жизненный цикл и завершение`. Не добавляй таблицу версий проекта. Упоминай минимальную версию Android, статус API или версию тематической библиотеки рядом с тем API, для которого эта информация необходима.
|
|
59
|
+
|
|
60
|
+
Если нужны разрешения, выноси их в отдельный раздел `Настройка манифеста` с фрагментом manifest и объяснением каждого permission.
|
|
61
|
+
|
|
62
|
+
Основные секции API оставляй открытыми. Не превращай описания компонентов и методов в toggle. Toggle допустим только для длинной повторяющейся справочной информации, которая не является основным содержанием гайда.
|
|
63
|
+
|
|
64
|
+
Самостоятельную пользовательскую операцию, например открытие системных настроек, выноси в отдельный H2, если для нее нужны отдельная настройка manifest и код вызова. Сначала показывай требуемый фрагмент manifest, затем код операции и объяснение проверки доступности.
|
|
65
|
+
|
|
66
|
+
## Описание компонента
|
|
67
|
+
|
|
68
|
+
Для каждого важного компонента ответь:
|
|
69
|
+
|
|
70
|
+
- что делает;
|
|
71
|
+
- где находится в общем потоке;
|
|
72
|
+
- какие параметры важны;
|
|
73
|
+
- какой минимальный пример это показывает;
|
|
74
|
+
- какие есть состояния, ограничения и ошибки.
|
|
75
|
+
|
|
76
|
+
Не пересказывай сигнатуру параметр за параметром, если параметр очевиден.
|
|
77
|
+
|
|
78
|
+
Если H2 уже содержит имя метода, класса или типа, не начинай первый абзац с повторения того же имени. Сразу объясняй назначение, поведение или результат.
|
|
79
|
+
|
|
80
|
+
Если API предоставляет набор semantic styles, режимов или констант, описывай каждое значение отдельным пунктом маркированного списка.
|
|
81
|
+
|
|
82
|
+
## Стиль
|
|
83
|
+
|
|
84
|
+
- Пиши коротко и конкретно.
|
|
85
|
+
- Обращайся к читателю на «ты».
|
|
86
|
+
- Не используй букву `ё` или `Ё`. Всегда пиши `е` или `Е`.
|
|
87
|
+
- Выделяй имена API, параметры, значения и другие технические термины оранжевым: `<span color="orange">` в Notion Markdown.
|
|
88
|
+
- Каждый технический термин в inline code оформляй как `<span color="orange">` + inline code. Не оставляй технические термины в обычном inline code, который Notion показывает красным.
|
|
89
|
+
- Не используй красный цвет для терминов. Все цветные выделения API, параметров и значений делай оранжевыми.
|
|
90
|
+
- Не выделяй оранжевым целые предложения.
|
|
91
|
+
- Используй inline code для классов, функций, параметров и значений.
|
|
92
|
+
- Код — в блоках `kotlin`, `xml`, `toml` или `shell`.
|
|
93
|
+
- Не используй длинное тире `—`. Используй среднее тире `–`.
|
|
94
|
+
- Не используй выражение `строка состояния` и его падежные формы. Используй `статус бар`.
|
|
95
|
+
- Перед каждым заголовком H2 добавляй отдельный пустой Notion-блок `<empty-block/>`.
|
|
96
|
+
- Не добавляй буквальный текст `#<empty-block/>`, `#\<empty-block/\>` или другие экранированные варианты. `<empty-block/>` должен быть отдельным блоком и визуально отображаться как пустая строка.
|
|
97
|
+
- Не добавляй callout-блоки без явного запроса пользователя. Важные условия и предупреждения пиши обычными абзацами рядом с соответствующим API.
|
|
98
|
+
- Каждый пункт маркированного и нумерованного списка начинай с заглавной буквы.
|
|
99
|
+
- Не создавай отдельный раздел `Ограничения demo-проекта`. Существенные ограничения API размещай в разделах соответствующих компонентов или сценариев.
|
|
100
|
+
- Скриншоты и GIF добавляй только там, где поведение важно увидеть.
|
|
101
|
+
- Не добавляй раздел «Итоги» ради формальности.
|
|
102
|
+
|
|
103
|
+
## Код и ссылки
|
|
104
|
+
|
|
105
|
+
- Пиши страницу после реализации проекта.
|
|
106
|
+
- Большой фрагмент кода должен существовать в репозитории.
|
|
107
|
+
- Если пример использует `resolveActivity()` или другой запрос к `PackageManager`, проверь требования package visibility. Когда нужен `<queries>`, покажи его рядом с кодом `Intent` и используй ту же action, что реализована в проекте.
|
|
108
|
+
- Не упоминай в тексте названия, номера и файлы samples, например `Sample07` или `Sample07App.kt`.
|
|
109
|
+
- Не добавляй ссылки на отдельные sample-файлы. Встраивай кодовые примеры в описание соответствующего API, а в разделе `Документация` оставляй ссылку на репозиторий.
|
|
110
|
+
- Не превращай упоминания файлов в GitHub-ссылки внутри основного текста. Имена файлов пиши обычным текстом, если пользователь явно не попросил точную ссылку.
|
|
111
|
+
- Версия зависимости должна совпадать с `libs.versions.toml`.
|
|
112
|
+
- Не используй ссылки на временные ветки.
|
|
113
|
+
- В конце добавляй H2 `Документация`.
|
|
114
|
+
- Перед `## Документация`, как и перед любым H2, добавляй отдельный `<empty-block/>`.
|
|
115
|
+
- Ссылки на `developer.android.com` размещай отдельными строками без списка в формате Notion link mention: `[Заголовок страницы | Android Developers](<url>)`.
|
|
116
|
+
- После ссылок на документацию добавляй отдельную строку `Репозиторий – [<repository-url>](<repository-url>)`.
|
|
117
|
+
- Не добавляй в конец страницы служебный отчёт о commit SHA, Gradle, lint, GuideKit validator или статусе публикации. Эти данные хранятся в `.guidekit/validation-report.md` и финальном ответе агента.
|
|
118
|
+
|
|
119
|
+
## Разделение ответственности
|
|
120
|
+
|
|
121
|
+
README кратко показывает проект и список samples. Notion подробно объясняет API без упоминания названий, номеров и файлов samples. Не копируй целые разделы между ними.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Output Contract
|
|
2
|
+
|
|
3
|
+
## Основные артефакты
|
|
4
|
+
|
|
5
|
+
Гайд считается опубликованным только тогда, когда существуют и связаны:
|
|
6
|
+
|
|
7
|
+
1. публичный GitHub-репозиторий с рабочим Android-проектом;
|
|
8
|
+
2. связанная страница в Notion: существующая страница, обновлённая на месте, или новая страница в `POSTS` по умолчанию.
|
|
9
|
+
|
|
10
|
+
Если пользователь явно просит только черновик, допускается остановиться до публикации. Во всех остальных случаях локальные файлы без URL не считаются завершённым результатом.
|
|
11
|
+
|
|
12
|
+
## Рабочие артефакты
|
|
13
|
+
|
|
14
|
+
Создаваемый репозиторий содержит:
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
.guidekit/
|
|
18
|
+
├── manifest.yaml
|
|
19
|
+
├── research.md
|
|
20
|
+
├── implementation-plan.md
|
|
21
|
+
├── SOURCES.md
|
|
22
|
+
└── validation-report.md
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
- `manifest.yaml` фиксирует выбранный scope;
|
|
26
|
+
- `research.md` содержит технические выводы до реализации;
|
|
27
|
+
- `implementation-plan.md` связывает требования с файлами и samples;
|
|
28
|
+
- `SOURCES.md` хранит первичные источники и происхождение кода;
|
|
29
|
+
- `validation-report.md` хранит реальные результаты проверок.
|
|
30
|
+
|
|
31
|
+
## Готовность результата
|
|
32
|
+
|
|
33
|
+
Гайд готов, если:
|
|
34
|
+
|
|
35
|
+
- все сценарии из манифеста реализованы;
|
|
36
|
+
- обязательные Gradle-задачи прошли;
|
|
37
|
+
- страница написана по фактической реализации;
|
|
38
|
+
- код и ссылки в Notion проверены;
|
|
39
|
+
- версии совпадают;
|
|
40
|
+
- существенные ограничения API указаны рядом с соответствующими компонентами или сценариями;
|
|
41
|
+
- AndroidX-заимствования атрибутированы.
|
|
42
|
+
|
|
43
|
+
## Финальный ответ агента
|
|
44
|
+
|
|
45
|
+
Используй структуру:
|
|
46
|
+
|
|
47
|
+
```markdown
|
|
48
|
+
# Гайд создан
|
|
49
|
+
|
|
50
|
+
GitHub: <url>
|
|
51
|
+
Notion: <url>
|
|
52
|
+
Тип проекта: <catalog | scenario | single>
|
|
53
|
+
|
|
54
|
+
## Реализовано
|
|
55
|
+
|
|
56
|
+
- ...
|
|
57
|
+
|
|
58
|
+
## Проверки
|
|
59
|
+
|
|
60
|
+
- `:app:assembleDebug` — успешно;
|
|
61
|
+
- `:app:lintDebug` — успешно;
|
|
62
|
+
- ...
|
|
63
|
+
|
|
64
|
+
## Версии
|
|
65
|
+
|
|
66
|
+
- Kotlin: ...
|
|
67
|
+
- Compose: ...
|
|
68
|
+
- Topic API: ...
|
|
69
|
+
|
|
70
|
+
## Источники
|
|
71
|
+
|
|
72
|
+
- ...
|
|
73
|
+
|
|
74
|
+
## Ограничения
|
|
75
|
+
|
|
76
|
+
- ...
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Не пиши «успешно», если проверка не запускалась. Используй «не запускалась» и объясни причину.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Research Rules
|
|
2
|
+
|
|
3
|
+
## Цель
|
|
4
|
+
|
|
5
|
+
Исследование должно ответить:
|
|
6
|
+
|
|
7
|
+
- какую проблему решает API;
|
|
8
|
+
- какая у него ментальная модель;
|
|
9
|
+
- какие компоненты входят в публичный API;
|
|
10
|
+
- как компоненты взаимодействуют;
|
|
11
|
+
- какие версии и opt-in нужны;
|
|
12
|
+
- какие сценарии необходимо показать;
|
|
13
|
+
- какие ограничения, ошибки и edge cases важны.
|
|
14
|
+
|
|
15
|
+
## Приоритет источников
|
|
16
|
+
|
|
17
|
+
1. Официальная документация.
|
|
18
|
+
2. Исходный код AndroidX или AOSP.
|
|
19
|
+
3. Официальные samples и тесты.
|
|
20
|
+
4. Release notes и changelog.
|
|
21
|
+
5. Официальный issue tracker.
|
|
22
|
+
6. Сторонние материалы как дополнительный контекст.
|
|
23
|
+
|
|
24
|
+
Существующие Notion-гайды и репозитории Михаила — эталон формы, но не источник актуального поведения API.
|
|
25
|
+
|
|
26
|
+
## Проверка актуальности
|
|
27
|
+
|
|
28
|
+
Перед реализацией:
|
|
29
|
+
|
|
30
|
+
- найди актуальную версию библиотеки в официальных release notes или репозитории;
|
|
31
|
+
- проверь статус API;
|
|
32
|
+
- проверь минимальный API level;
|
|
33
|
+
- проверь package и artifact coordinates;
|
|
34
|
+
- проверь, не был ли API переименован или deprecated;
|
|
35
|
+
- зафиксируй дату исследования.
|
|
36
|
+
|
|
37
|
+
Не используй версию только потому, что помнишь её или увидел в сторонней статье.
|
|
38
|
+
|
|
39
|
+
## Research report
|
|
40
|
+
|
|
41
|
+
`.guidekit/research.md` должен содержать:
|
|
42
|
+
|
|
43
|
+
```markdown
|
|
44
|
+
# Research
|
|
45
|
+
|
|
46
|
+
Дата: YYYY-MM-DD
|
|
47
|
+
Тема: ...
|
|
48
|
+
Статус API: ...
|
|
49
|
+
Версия: ...
|
|
50
|
+
|
|
51
|
+
## Главная идея
|
|
52
|
+
|
|
53
|
+
## Публичные компоненты
|
|
54
|
+
|
|
55
|
+
## Сценарии
|
|
56
|
+
|
|
57
|
+
## Ограничения
|
|
58
|
+
|
|
59
|
+
## Открытые вопросы
|
|
60
|
+
|
|
61
|
+
## Первичные источники
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Каждое спорное техническое утверждение связывай с источником. Авторскую рекомендацию явно называй рекомендацией, а не поведением платформы.
|