@bonesofspring/ai-rules 0.2.1 → 0.2.3
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/CHANGELOG.md +41 -0
- package/README.md +17 -5
- package/bin/cli.js +4 -4
- package/package.json +3 -11
- package/presets/claude/ios-swift/CLAUDE.md +35 -0
- package/presets/claude/ios-swift/README.md +30 -0
- package/presets/claude/ios-swift/agents/README.md +55 -0
- package/presets/claude/ios-swift/agents/accessibility-reviewer.md +67 -0
- package/presets/claude/ios-swift/agents/api-contract-reviewer.md +72 -0
- package/presets/claude/ios-swift/agents/build-verifier.md +64 -0
- package/presets/claude/ios-swift/agents/ci-investigator.md +73 -0
- package/presets/claude/ios-swift/agents/code-reviewer.md +75 -0
- package/presets/claude/ios-swift/agents/debugger.md +72 -0
- package/presets/claude/ios-swift/agents/feature-developer.md +35 -0
- package/presets/claude/ios-swift/agents/migration-specialist.md +73 -0
- package/presets/claude/ios-swift/agents/performance-auditor.md +72 -0
- package/presets/claude/ios-swift/agents/qa-tester.md +65 -0
- package/presets/claude/ios-swift/agents/security-reviewer.md +69 -0
- package/presets/claude/ios-swift/agents/solution-architect.md +17 -0
- package/presets/claude/ios-swift/agents/task-analyst.md +25 -0
- package/presets/claude/ios-swift/agents/task-router.md +62 -0
- package/presets/claude/ios-swift/agents/tech-writer.md +63 -0
- package/presets/claude/ios-swift/agents/unit-test-generator.md +54 -0
- package/presets/claude/ios-swift/agents/unit-test-healer.md +53 -0
- package/presets/claude/ios-swift/agents/unit-test-planner.md +64 -0
- package/presets/claude/ios-swift/agents/xcuitest-test-generator.md +47 -0
- package/presets/claude/ios-swift/agents/xcuitest-test-healer.md +47 -0
- package/presets/claude/ios-swift/agents/xcuitest-test-planner.md +67 -0
- package/presets/claude/ios-swift/commands/README.md +13 -0
- package/presets/claude/ios-swift/commands/feature-continue.md +51 -0
- package/presets/claude/ios-swift/commands/feature-start.md +30 -0
- package/presets/claude/ios-swift/commands/task-continue.md +49 -0
- package/presets/claude/ios-swift/commands/task.md +50 -0
- package/presets/claude/ios-swift/commands/technical-retro.md +58 -0
- package/presets/claude/ios-swift/hooks/README.md +10 -0
- package/presets/claude/ios-swift/hooks/chain-team-phases.sh +382 -0
- package/presets/claude/ios-swift/hooks/guard-shell-command.sh +79 -0
- package/presets/claude/ios-swift/rules/README.md +55 -0
- package/presets/claude/ios-swift/rules/api-and-data/README.md +10 -0
- package/presets/claude/ios-swift/rules/api-and-data/networking.md +49 -0
- package/presets/claude/ios-swift/rules/api-and-data/persistence.md +30 -0
- package/presets/claude/ios-swift/rules/architecture/README.md +12 -0
- package/presets/claude/ios-swift/rules/architecture/boundaries.md +33 -0
- package/presets/claude/ios-swift/rules/architecture/feature-delivery.md +68 -0
- package/presets/claude/ios-swift/rules/architecture/module-public-api.md +25 -0
- package/presets/claude/ios-swift/rules/architecture/reference-features.md +50 -0
- package/presets/claude/ios-swift/rules/stack/README.md +10 -0
- package/presets/claude/ios-swift/rules/stack/ios-app-core.md +43 -0
- package/presets/claude/ios-swift/rules/stack/swift-conventions.md +51 -0
- package/presets/claude/ios-swift/rules/testing/README.md +10 -0
- package/presets/claude/ios-swift/rules/testing/ui.md +43 -0
- package/presets/claude/ios-swift/rules/testing/unit.md +41 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/README.md +16 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/agent-team-intake.md +18 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/agent-team-orchestrator.md +47 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/code-quality.md +38 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/code-review.md +46 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/post-change-build.md +36 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/security-ios.md +36 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/technical-retro.md +14 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/xcode-tooling.md +24 -0
- package/presets/claude/ios-swift/rules/ui-and-accessibility/README.md +11 -0
- package/presets/claude/ios-swift/rules/ui-and-accessibility/navigation.md +28 -0
- package/presets/claude/ios-swift/rules/ui-and-accessibility/swiftui.md +61 -0
- package/presets/claude/ios-swift/rules/ui-and-accessibility/viewmodels.md +43 -0
- package/presets/claude/ios-swift/skills/README.md +13 -0
- package/presets/claude/ios-swift/skills/ci-investigation/SKILL.md +39 -0
- package/presets/claude/ios-swift/skills/code-review/SKILL.md +27 -0
- package/presets/claude/ios-swift/skills/debug-investigation/SKILL.md +30 -0
- package/presets/claude/ios-swift/skills/feature-delivery/SKILL.md +27 -0
- package/presets/claude/ios-swift/skills/technical-retro/SKILL.md +10 -0
- package/presets/claude/ios-swift/skills/unit-testing/SKILL.md +32 -0
- package/presets/claude/ios-swift/skills/xcuitest-e2e/SKILL.md +33 -0
- package/presets/claude/ios-swift/team/README.md +27 -0
- package/presets/claude/ios-swift/team/fixtures/bugfix-standard.json +33 -0
- package/presets/claude/ios-swift/team/fixtures/feature-full.json +48 -0
- package/presets/claude/ios-swift/team/fixtures/feature-light.json +36 -0
- package/presets/claude/next/CLAUDE.md +4 -8
- package/presets/claude/next/agents/README.md +62 -34
- package/presets/claude/next/agents/code-reviewer.md +6 -5
- package/presets/claude/next/agents/playwright-test-generator.md +65 -16
- package/presets/claude/next/agents/playwright-test-healer.md +51 -16
- package/presets/claude/next/agents/playwright-test-planner.md +55 -15
- package/presets/claude/next/agents/task-analyst.md +3 -1
- package/presets/claude/next/agents/task-router.md +4 -4
- package/presets/claude/next/agents/tech-writer.md +1 -0
- package/presets/claude/next/hooks/chain-team-phases.sh +73 -35
- package/presets/claude/next/rules/README.md +16 -3
- package/presets/claude/next/rules/architecture/README.md +2 -1
- package/presets/claude/next/rules/stack/README.md +1 -1
- package/presets/claude/next/rules/stack/navigation-router.md +2 -0
- package/presets/claude/next/rules/stack/next-app-core.md +1 -1
- package/presets/claude/next/rules/tooling-and-review/README.md +12 -14
- package/presets/claude/next/rules/tooling-and-review/agent-team-orchestrator.md +1 -0
- package/presets/claude/next/rules/tooling-and-review/code-review-mr.md +3 -3
- package/presets/claude/next/rules/tooling-and-review/post-change-lint.md +11 -0
- package/presets/claude/next/rules/ui-and-accessibility/README.md +6 -3
- package/presets/claude/next/skills/feature-delivery/SKILL.md +1 -1
- package/presets/claude/next/team/README.md +65 -7
- package/presets/cursor/ios-swift/AGENTS.md +47 -0
- package/presets/cursor/ios-swift/BUGBOT.md +15 -0
- package/presets/cursor/ios-swift/README.md +36 -0
- package/presets/cursor/ios-swift/agents/README.md +55 -0
- package/presets/cursor/ios-swift/agents/accessibility-reviewer.md +67 -0
- package/presets/cursor/ios-swift/agents/api-contract-reviewer.md +72 -0
- package/presets/cursor/ios-swift/agents/build-verifier.md +64 -0
- package/presets/cursor/ios-swift/agents/ci-investigator.md +73 -0
- package/presets/cursor/ios-swift/agents/code-reviewer.md +75 -0
- package/presets/cursor/ios-swift/agents/debugger.md +72 -0
- package/presets/cursor/ios-swift/agents/feature-developer.md +35 -0
- package/presets/cursor/ios-swift/agents/migration-specialist.md +73 -0
- package/presets/cursor/ios-swift/agents/performance-auditor.md +72 -0
- package/presets/cursor/ios-swift/agents/qa-tester.md +65 -0
- package/presets/cursor/ios-swift/agents/security-reviewer.md +69 -0
- package/presets/cursor/ios-swift/agents/solution-architect.md +17 -0
- package/presets/cursor/ios-swift/agents/task-analyst.md +25 -0
- package/presets/cursor/ios-swift/agents/task-router.md +62 -0
- package/presets/cursor/ios-swift/agents/tech-writer.md +63 -0
- package/presets/cursor/ios-swift/agents/unit-test-generator.md +54 -0
- package/presets/cursor/ios-swift/agents/unit-test-healer.md +53 -0
- package/presets/cursor/ios-swift/agents/unit-test-planner.md +64 -0
- package/presets/cursor/ios-swift/agents/xcuitest-test-generator.md +47 -0
- package/presets/cursor/ios-swift/agents/xcuitest-test-healer.md +47 -0
- package/presets/cursor/ios-swift/agents/xcuitest-test-planner.md +67 -0
- package/presets/cursor/ios-swift/commands/README.md +51 -0
- package/presets/cursor/ios-swift/commands/feature-continue.md +19 -0
- package/presets/cursor/ios-swift/commands/feature-start.md +33 -0
- package/presets/cursor/ios-swift/commands/task-continue.md +49 -0
- package/presets/cursor/ios-swift/commands/task.md +50 -0
- package/presets/cursor/ios-swift/commands/technical-retro.md +81 -0
- package/presets/cursor/ios-swift/hooks/README.md +8 -0
- package/presets/cursor/ios-swift/hooks/chain-team-phases.sh +382 -0
- package/presets/cursor/ios-swift/hooks/guard-shell-command.sh +79 -0
- package/presets/{claude/next → cursor/ios-swift}/hooks.json +2 -2
- package/presets/cursor/ios-swift/rules/README.md +65 -0
- package/presets/cursor/ios-swift/rules/agent-team-intake.mdc +16 -0
- package/presets/cursor/ios-swift/rules/agent-team-orchestrator.mdc +80 -0
- package/presets/cursor/ios-swift/rules/architecture-boundaries.mdc +34 -0
- package/presets/cursor/ios-swift/rules/code-quality-and-refactoring.mdc +39 -0
- package/presets/cursor/ios-swift/rules/code-review-mr.mdc +43 -0
- package/presets/cursor/ios-swift/rules/feature-delivery-workflow.mdc +61 -0
- package/presets/cursor/ios-swift/rules/ios-app-core.mdc +44 -0
- package/presets/cursor/ios-swift/rules/module-public-api.mdc +26 -0
- package/presets/cursor/ios-swift/rules/navigation-coordinators.mdc +29 -0
- package/presets/cursor/ios-swift/rules/networking-services.mdc +49 -0
- package/presets/cursor/ios-swift/rules/persistence-data.mdc +31 -0
- package/presets/cursor/ios-swift/rules/post-change-build.mdc +32 -0
- package/presets/cursor/ios-swift/rules/reference-features.mdc +53 -0
- package/presets/cursor/ios-swift/rules/security-ios.mdc +35 -0
- package/presets/cursor/ios-swift/rules/state-and-viewmodels.mdc +43 -0
- package/presets/cursor/ios-swift/rules/swift-conventions.mdc +51 -0
- package/presets/cursor/ios-swift/rules/swiftui-ui.mdc +61 -0
- package/presets/cursor/ios-swift/rules/technical-retro.mdc +12 -0
- package/presets/cursor/ios-swift/rules/tests-ui.mdc +42 -0
- package/presets/cursor/ios-swift/rules/tests-unit.mdc +41 -0
- package/presets/cursor/ios-swift/rules/xcode-tooling.mdc +20 -0
- package/presets/cursor/ios-swift/skills/README.md +13 -0
- package/presets/cursor/ios-swift/skills/ci-investigation/SKILL.md +39 -0
- package/presets/cursor/ios-swift/skills/code-review/SKILL.md +27 -0
- package/presets/cursor/ios-swift/skills/debug-investigation/SKILL.md +30 -0
- package/presets/cursor/ios-swift/skills/feature-delivery/SKILL.md +27 -0
- package/presets/cursor/ios-swift/skills/technical-retro/SKILL.md +10 -0
- package/presets/cursor/ios-swift/skills/unit-testing/SKILL.md +32 -0
- package/presets/cursor/ios-swift/skills/xcuitest-e2e/SKILL.md +33 -0
- package/presets/cursor/ios-swift/team/README.md +27 -0
- package/presets/cursor/ios-swift/team/fixtures/bugfix-standard.json +33 -0
- package/presets/cursor/ios-swift/team/fixtures/feature-full.json +48 -0
- package/presets/cursor/ios-swift/team/fixtures/feature-light.json +36 -0
- package/presets/cursor/next/AGENTS.md +1 -1
- package/presets/cursor/next/BUGBOT.md +0 -2
- package/presets/cursor/next/agents/README.md +6 -0
- package/presets/cursor/next/agents/accessibility-reviewer.md +1 -1
- package/presets/cursor/next/agents/api-contract-reviewer.md +1 -1
- package/presets/cursor/next/agents/build-verifier.md +2 -2
- package/presets/cursor/next/agents/code-reviewer.md +1 -1
- package/presets/cursor/next/agents/feature-developer.md +1 -0
- package/presets/cursor/next/agents/migration-specialist.md +2 -2
- package/presets/cursor/next/agents/performance-auditor.md +1 -1
- package/presets/cursor/next/agents/playwright-test-generator.md +1 -0
- package/presets/cursor/next/agents/playwright-test-healer.md +1 -0
- package/presets/cursor/next/agents/qa-tester.md +1 -0
- package/presets/cursor/next/agents/security-reviewer.md +1 -1
- package/presets/cursor/next/agents/solution-architect.md +1 -1
- package/presets/cursor/next/agents/task-analyst.md +1 -1
- package/presets/cursor/next/agents/task-router.md +2 -2
- package/presets/cursor/next/agents/tech-writer.md +1 -1
- package/presets/cursor/next/agents/unit-test-planner.md +2 -2
- package/presets/cursor/next/rules/README.md +6 -6
- package/presets/cursor/next/rules/agent-team-orchestrator.mdc +25 -23
- package/presets/cursor/next/rules/next-app-core.mdc +1 -1
- package/presets/cursor/next/rules/post-change-lint.mdc +4 -2
- package/presets/cursor/next/skills/feature-delivery/SKILL.md +1 -1
- package/CONTRIBUTING.md +0 -102
- package/fragments/BUGBOT.md +0 -23
- package/presets/claude/next/BUGBOT.md +0 -16
- package/presets/claude/next/rules/architecture/api-public-imports.md +0 -8
- package/presets/claude/next/rules/architecture/types-public-imports.md +0 -8
- package/presets/cursor/next/rules/api-public-imports.mdc +0 -8
- package/presets/cursor/next/rules/no-cross-component-styles-import.mdc +0 -8
- package/presets/cursor/next/rules/types-public-imports.mdc +0 -8
- package/scripts/README.md +0 -84
- package/scripts/golden-prompts.json +0 -276
- package/scripts/preset-manifest.json +0 -72
- package/scripts/regression-results/.gitkeep +0 -0
- package/scripts/validate-preset.sh +0 -484
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Сквозной чеклист доставки iOS-фичи и матрица «зона → правило». Use when implementing features, adding screens/API, or extending existing iOS flows.
|
|
3
|
+
paths:
|
|
4
|
+
- .claude/commands/**/*
|
|
5
|
+
- .claude/team/**/*
|
|
6
|
+
- .claude/agents/**/*
|
|
7
|
+
- Features/**/*
|
|
8
|
+
- **/Presentation/**/*
|
|
9
|
+
- **/Domain/**/*
|
|
10
|
+
- **/Data/**/*
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Доставка фичи (iOS)
|
|
14
|
+
|
|
15
|
+
Типичная фича с данными и UI. Детали слоёв — `architecture/boundaries.md`, `stack/ios-app-core.md`.
|
|
16
|
+
|
|
17
|
+
## Чеклист (порядок работ)
|
|
18
|
+
|
|
19
|
+
1. **Domain** — entities, value types, протоколы репозиториев / use cases (`Features/**/Domain/**`).
|
|
20
|
+
2. **Data** — DTO (`Codable`), mappers Domain ↔ DTO, реализации репозиториев, API-клиент (`api-and-data/networking.md`).
|
|
21
|
+
3. **ViewModel** — состояние, вызовы use case / протоколов; DI из App; без DTO и URL (`ui-and-accessibility/viewmodels.md`).
|
|
22
|
+
4. **View / navigation** — тонкие SwiftUI Views, Design System; навигация как в репо (`ui-and-accessibility/swiftui.md`).
|
|
23
|
+
5. **Тесты** — unit на mappers / use cases / VM (`testing/unit.md`); UI-потоки — XCUITest (`testing/ui.md`).
|
|
24
|
+
6. **Завершение** — **вызвать** `tooling-and-review/post-change-build.md` (+ `tooling-and-review/xcode-tooling.md`): сборка затронутых таргетов + lint/format по конфигу репо.
|
|
25
|
+
|
|
26
|
+
## Поток данных (ориентир)
|
|
27
|
+
|
|
28
|
+
```mermaid
|
|
29
|
+
flowchart LR
|
|
30
|
+
DTO[DTO] --> Mappers[Mappers]
|
|
31
|
+
Mappers --> Domain[Domain]
|
|
32
|
+
Domain --> Repo[Repository protocol]
|
|
33
|
+
Repo --> VM[ViewModel]
|
|
34
|
+
VM --> View[SwiftUI View]
|
|
35
|
+
DataImpl[Data impl] -.-> Repo
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Частичные сценарии
|
|
39
|
+
|
|
40
|
+
| Задача | Минимум |
|
|
41
|
+
|--------|---------|
|
|
42
|
+
| Только API / модель | Domain + DTO + mapper + repo impl; unit на mapper. |
|
|
43
|
+
| Только VM / логика | Протоколы Domain; mock в тестах; без HTTP во View. |
|
|
44
|
+
| Только UI | View + существующий VM/state; без DTO. |
|
|
45
|
+
| Только тесты | Specs по конвенции репо; не менять production без нужды. |
|
|
46
|
+
|
|
47
|
+
## Антипаттерны
|
|
48
|
+
|
|
49
|
+
- DTO / `Codable` transport-типы во View или ViewModel.
|
|
50
|
+
- `URLSession` / конкретный API-клиент в ViewModel или View.
|
|
51
|
+
- Domain импортирует SwiftUI / UIKit.
|
|
52
|
+
- Deep-import внутренних файлов другой фичи.
|
|
53
|
+
- Сборка DI внутри View.
|
|
54
|
+
|
|
55
|
+
## Матрица: зона → правила
|
|
56
|
+
|
|
57
|
+
| Зона | Правила |
|
|
58
|
+
|------|---------|
|
|
59
|
+
| `Features/**/Domain/**`, `Core/Domain/**` | `architecture/boundaries.md`, `stack/ios-app-core.md` |
|
|
60
|
+
| `Features/**/Data/**`, `**/Network*/**` | `api-and-data/networking.md`, `architecture/boundaries.md` |
|
|
61
|
+
| `*ViewModel*.swift`, Presentation state | `ui-and-accessibility/viewmodels.md` |
|
|
62
|
+
| `Presentation/**`, `DesignSystem/**` | `ui-and-accessibility/swiftui.md`, `architecture/boundaries.md` |
|
|
63
|
+
| `**/*.swift` (стиль) | `stack/swift-conventions.md` |
|
|
64
|
+
| `*Tests/**` | `testing/unit.md` |
|
|
65
|
+
| `*UITests/**` | `testing/ui.md` |
|
|
66
|
+
| После правок Swift | `tooling-and-review/post-change-build.md` (+ `tooling-and-review/xcode-tooling.md`) |
|
|
67
|
+
|
|
68
|
+
При добавлении или расширении фичи **пройти чеклист** и правила из таблицы для затронутых зон.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: SPM / модули — public API, access control, запрет deep-import internals
|
|
3
|
+
paths:
|
|
4
|
+
- "**/Package.swift"
|
|
5
|
+
- "**/*Public*.swift"
|
|
6
|
+
- "**/Sources/**/*.swift"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Module public API (SPM)
|
|
10
|
+
|
|
11
|
+
## Рамка
|
|
12
|
+
|
|
13
|
+
- Потребители модуля импортируют **только public/open** API; `internal`/`fileprivate` — для реализации.
|
|
14
|
+
- Deep-import чужих internal файлов — повод вынести символ в public API или рефакторить границы.
|
|
15
|
+
|
|
16
|
+
## Правила
|
|
17
|
+
|
|
18
|
+
- Новый публичный тип/функция — явный `public` + документация/пример использования при необходимости.
|
|
19
|
+
- Barrel-стиль: один входной модуль / umbrella, если так заведено в репо.
|
|
20
|
+
- Не экспортировать DTO сети из Presentation-facing модулей.
|
|
21
|
+
- Версионирование breaking API — осознанно (SemVer пакета / release notes).
|
|
22
|
+
|
|
23
|
+
## Требование к агенту
|
|
24
|
+
|
|
25
|
+
Перед `public` на тип — проверить, нужен ли он снаружи. Следовать access control соседних модулей.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Эталонные Feature-модули репозитория — копировать структуру при реализации. Заполните пути после init в целевом iOS-репо.
|
|
3
|
+
paths:
|
|
4
|
+
- Features/**/*
|
|
5
|
+
- "**/Presentation/**/*"
|
|
6
|
+
- "**/Domain/**/*"
|
|
7
|
+
- "**/Data/**/*"
|
|
8
|
+
- "**/DesignSystem/**/*"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Эталонные фичи (reference features)
|
|
12
|
+
|
|
13
|
+
Перед реализацией найди Feature того же типа и **повтори её структуру**, не изобретая новую организацию файлов.
|
|
14
|
+
|
|
15
|
+
## Таблица эталонов
|
|
16
|
+
|
|
17
|
+
После `ai-rules init` замени примеры на **реальные** пути consumer-репо. Ниже — conventional placeholders для greenfield / dogfood.
|
|
18
|
+
|
|
19
|
+
| Слой | Эталон (пример → заменить) | Conventional glob / path |
|
|
20
|
+
|------|----------------------------|--------------------------|
|
|
21
|
+
| Feature module | `Features/Orders/` | `Features/**` |
|
|
22
|
+
| Presentation / UI | `Features/Orders/Presentation/` | `**/Presentation/**`, `**/DesignSystem/**` |
|
|
23
|
+
| Domain | `Features/Orders/Domain/` | `**/Domain/**` |
|
|
24
|
+
| Data / Network | `Features/Orders/Data/` | `**/Data/**`, `**/Network*/**` |
|
|
25
|
+
| Persistence | `Features/Orders/Data/Persistence/` | `**/Persistence/**`, `**/Keychain/**` |
|
|
26
|
+
| Unit tests | `Features/OrdersTests/` или `*Tests` рядом | `**/*Tests/**/*.swift` |
|
|
27
|
+
| UI tests | `OrdersUITests/` | `**/*UITests/**/*.swift` |
|
|
28
|
+
|
|
29
|
+
Если в репо другая раскладка (`Modules/`, `Sources/`) — перепиши таблицу один раз и держи её SoT для агентов.
|
|
30
|
+
|
|
31
|
+
## Как использовать
|
|
32
|
+
|
|
33
|
+
1. Определи затронутые слои из `decomposition.md` или задачи.
|
|
34
|
+
2. Открой эталон из таблицы (после заполнения путей).
|
|
35
|
+
3. Зеркаль именование, порядок файлов, DI, паттерны тестов.
|
|
36
|
+
4. Если эталона нет — выбери **самую близкую** существующую фичу того же слоя и зафиксируй выбор в handoff.
|
|
37
|
+
|
|
38
|
+
## Dogfood checklist (5 сценариев)
|
|
39
|
+
|
|
40
|
+
1. `/task` новая фича в `Features/<Name>` — analyst → developer → build-verifier (xcodebuild).
|
|
41
|
+
2. Баг в ViewModel — debugger → fix → unit test.
|
|
42
|
+
3. Mapper DTO↔domain — unit-test-planner/generator.
|
|
43
|
+
4. UI flow — `xcuitest-test-planner` → generator (accessibilityIdentifier).
|
|
44
|
+
5. Auth/Keychain touch — security-reviewer + `security-ios`.
|
|
45
|
+
|
|
46
|
+
## Связанные правила
|
|
47
|
+
|
|
48
|
+
- `tooling-and-review/code-quality.md` — повторять паттерны.
|
|
49
|
+
- `architecture/feature-delivery.md` — порядок слоёв.
|
|
50
|
+
- skill `feature-delivery` — end-to-end сценарий.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Stack
|
|
2
|
+
|
|
3
|
+
Язык, платформа и базовый каркас приложения. Index only — тела в topic `.md`.
|
|
4
|
+
|
|
5
|
+
| File | Cursor SoT |
|
|
6
|
+
|------|------------|
|
|
7
|
+
| [`ios-app-core.md`](./ios-app-core.md) | `ios-app-core.mdc` |
|
|
8
|
+
| [`swift-conventions.md`](./swift-conventions.md) | `swift-conventions.mdc` |
|
|
9
|
+
|
|
10
|
+
Sync: change Cursor → update Claude twin same PR. Full map: [`../README.md`](../README.md).
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Базовые принципы, стек и структура iOS приложения на Swift (preset)
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Стек и окружение
|
|
6
|
+
|
|
7
|
+
Версии Swift, iOS SDK, зависимостей и инструментов — **из Xcode-проекта, Package.swift и конфигов целевого репозитория**. Рамка preset:
|
|
8
|
+
|
|
9
|
+
- **Язык / платформа:** Swift, iOS (min — из таргета).
|
|
10
|
+
- **UI:** SwiftUI — приоритет для нового кода; UIKit — где уже принято в репо.
|
|
11
|
+
- **Сборка:** Xcode; SPM и/или CocoaPods — как в репозитории.
|
|
12
|
+
- **Concurrency:** `async`/`await`, `Task`, `Actor`; UI — `@MainActor`.
|
|
13
|
+
- **Тесты:** XCTest или Swift Testing; UI — XCUITest.
|
|
14
|
+
- **Сеть:** `URLSession` или клиент репо; DTO через `Codable`.
|
|
15
|
+
- **Дизайн-система:** токены/примитивы из `DesignSystem/` (или аналога); без «магических» значений.
|
|
16
|
+
- **Наблюдаемость:** только если уже в проекте — централизованно.
|
|
17
|
+
|
|
18
|
+
# Структура проекта
|
|
19
|
+
|
|
20
|
+
Ориентир — **feature-first + слои внутри фичи** или **слои на верхнем уровне** (как в репо):
|
|
21
|
+
|
|
22
|
+
- `App/` — `@main`, composition root, DI, навигация верхнего уровня.
|
|
23
|
+
- `Features/<FeatureName>/` — `Presentation/` (Views, ViewModels), `Domain/` (entities, use cases, протоколы), `Data/` (repos, API, DTO, mappers).
|
|
24
|
+
- `Core/` — общие утилиты, extensions, базовые ошибки.
|
|
25
|
+
- `DesignSystem/` — UI-примитивы без бизнес-логики.
|
|
26
|
+
- `Tests/` / `*Tests/` — unit и UI по конвенции Xcode.
|
|
27
|
+
|
|
28
|
+
Новые файлы — в том же слое/модуле, что и аналогичная функциональность.
|
|
29
|
+
|
|
30
|
+
Границы зависимостей и DI — **`architecture/boundaries.md`**.
|
|
31
|
+
|
|
32
|
+
# Swift и качество
|
|
33
|
+
|
|
34
|
+
- Swift API Design Guidelines + SwiftLint/SwiftFormat репо (если есть).
|
|
35
|
+
- Избегать `!` / `try!` в production; `guard` / `if let` / typed errors.
|
|
36
|
+
- Копировать существующие паттерны фичи/слоя.
|
|
37
|
+
|
|
38
|
+
# Работа агента
|
|
39
|
+
|
|
40
|
+
- Определить слой (Presentation / Domain / Data / DesignSystem / Tests); повторить паттерн соседних файлов.
|
|
41
|
+
- Не тянуть `URLSession` во View и DTO во ViewModel — детали в `architecture/boundaries.md`.
|
|
42
|
+
- Доставка фичи — `architecture/feature-delivery.md`; после правок Swift — **вызвать** `tooling-and-review/post-change-build.md` (requestable).
|
|
43
|
+
- Toolchain перед сборкой — `tooling-and-review/xcode-tooling.md` (requestable).
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Swift language conventions and safety (preset)
|
|
3
|
+
paths:
|
|
4
|
+
- "**/*.swift"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Naming and API design
|
|
8
|
+
|
|
9
|
+
- Types: `UpperCamelCase`; methods, properties, enum cases: `lowerCamelCase`.
|
|
10
|
+
- Protocols, описывающие capability: `-able`, `-ing`, или `Protocol` суффикс — как в репо.
|
|
11
|
+
- Избегать аббревиатур в именах, кроме общепринятых (URL, ID, HTTP).
|
|
12
|
+
|
|
13
|
+
# Optionals and errors
|
|
14
|
+
|
|
15
|
+
```swift
|
|
16
|
+
// ❌ Плохо
|
|
17
|
+
let name = user!.name
|
|
18
|
+
|
|
19
|
+
// ✅ Хорошо
|
|
20
|
+
guard let name = user?.name else { return }
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- `throws` + typed errors вместо `Result` там, где так принято в слое; быть консistent внутри модуля.
|
|
24
|
+
- `guard` для early exit; не вкладывать глубокие `if let` pyramids.
|
|
25
|
+
|
|
26
|
+
# Concurrency
|
|
27
|
+
|
|
28
|
+
- UI types — `@MainActor`.
|
|
29
|
+
- Shared mutable state — `actor` или isolation через queue; document thread expectations.
|
|
30
|
+
- `Task { }` в ViewModel: учитывать cancellation; `[weak self]` в escaping closures при retain cycles.
|
|
31
|
+
- Prefer `async/await` over completion handlers для нового кода.
|
|
32
|
+
|
|
33
|
+
# Access control
|
|
34
|
+
|
|
35
|
+
- Минимально необходимый уровень: `private` / `fileprivate` по умолчанию для implementation details.
|
|
36
|
+
- Public API фичи — явные types и protocols; не экспортировать DTO наружу модуля.
|
|
37
|
+
|
|
38
|
+
# Value semantics
|
|
39
|
+
|
|
40
|
+
- Предпочитать `struct` для models и state где нет identity semantics.
|
|
41
|
+
- `class` — когда нужен identity, inheritance, или Objective-C interop.
|
|
42
|
+
|
|
43
|
+
# Extensions
|
|
44
|
+
|
|
45
|
+
- Группировать extensions по типу; не складывать unrelated helpers в один `Extensions.swift` без структуры.
|
|
46
|
+
- Protocol extensions для shared default behavior.
|
|
47
|
+
|
|
48
|
+
# Требование к агенту
|
|
49
|
+
|
|
50
|
+
- Не добавлять `// swiftlint:disable` без явной причины.
|
|
51
|
+
- Новый код — Swift Concurrency-ready (`Sendable` где требует компилятор/линтер проекта).
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Testing
|
|
2
|
+
|
|
3
|
+
Unit (XCTest / Swift Testing) и UI (XCUITest). Index only — тела в topic `.md`.
|
|
4
|
+
|
|
5
|
+
| File | Cursor SoT |
|
|
6
|
+
|------|------------|
|
|
7
|
+
| [`unit.md`](./unit.md) | `tests-unit.mdc` |
|
|
8
|
+
| [`ui.md`](./ui.md) | `tests-ui.mdc` |
|
|
9
|
+
|
|
10
|
+
Sync: change Cursor → update Claude twin same PR. Full map: [`../README.md`](../README.md).
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: UI-тесты XCUITest и accessibility identifiers
|
|
3
|
+
paths:
|
|
4
|
+
- "**/*UITests/**/*.swift"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Структура UI-тестов
|
|
8
|
+
|
|
9
|
+
- UI Test target: `*UITests/` — сценарии пользовательских потоков.
|
|
10
|
+
- Page Object (или Screen Object) — класс на экран: селекторы + действия (`LoginScreen`, `OrderHistoryScreen`).
|
|
11
|
+
- Общие хелперы — `UITestSupport/`, base classes, launch arguments.
|
|
12
|
+
|
|
13
|
+
# Селекторы и стабильность
|
|
14
|
+
|
|
15
|
+
- **Приоритет:** `accessibilityIdentifier` для ключевых элементов; затем label/trait где устойчиво.
|
|
16
|
+
- Идентификаторы согласовать с Presentation-слоем (`ui-and-accessibility/swiftui.md`): `{screen}__{element}`.
|
|
17
|
+
- Пример: `order-history__submit-button`, `login__email-field`.
|
|
18
|
+
- Избегать привязки к абсолютным координатам и хрупким XPath-подобным цепочкам.
|
|
19
|
+
|
|
20
|
+
# Сценарии и именование
|
|
21
|
+
|
|
22
|
+
- Названия тестов — **на русском**, с префиксом сущности:
|
|
23
|
+
- `OH-001 Отображается список заказов` (префикс — первые буквы сущности, номер — три цифры).
|
|
24
|
+
- Один тест — один пользовательский сценарий; не объединять несвязанные проверки.
|
|
25
|
+
|
|
26
|
+
# Launch и окружение
|
|
27
|
+
|
|
28
|
+
- `-UITesting`, mock server URL, сброс state — через `launchArguments` / `launchEnvironment`, как в репо.
|
|
29
|
+
- Не зависеть от прод-backend в CI; использовать staging/mock.
|
|
30
|
+
|
|
31
|
+
# Синхронизация с UI
|
|
32
|
+
|
|
33
|
+
- При изменении UI обновлять identifiers в View и селекторы в page objects.
|
|
34
|
+
- Не ослаблять assertions против бизнес-ожиданий ради «зелёного» CI.
|
|
35
|
+
|
|
36
|
+
# Требование к агенту
|
|
37
|
+
|
|
38
|
+
При добавлении UI-тестов:
|
|
39
|
+
- Переиспользовать page objects, не дублировать query в каждом тесте.
|
|
40
|
+
- Добавлять `accessibilityIdentifier` в SwiftUI через `.accessibilityIdentifier(...)` для новых интерактивных элементов.
|
|
41
|
+
- Следовать существующим UITest files как эталону.
|
|
42
|
+
|
|
43
|
+
- Планирование / генерация / heal — agents `xcuitest-test-{planner,generator,healer}` и skill `xcuitest-e2e` (не Playwright).
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Unit и integration тесты (XCTest / Swift Testing)
|
|
3
|
+
paths:
|
|
4
|
+
- "**/*Tests/**/*.swift"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Общие правила тестирования
|
|
8
|
+
|
|
9
|
+
- **Framework** — XCTest или Swift Testing, как в проекте.
|
|
10
|
+
- Цель: проверять **поведение и бизнес-правила**, не детали реализации и private API.
|
|
11
|
+
- Именование:
|
|
12
|
+
- `test` / `@Test` descriptions и `XCTContext` — **на русском**, как понятные бизнес-фразы.
|
|
13
|
+
- Описания **с заглавной буквы**.
|
|
14
|
+
|
|
15
|
+
# ViewModel и use case
|
|
16
|
+
|
|
17
|
+
- Mock протоколов repositories / use cases; не поднимать реальную сеть.
|
|
18
|
+
- Проверять переходы state: loading → success/failure, validation errors, edge cases.
|
|
19
|
+
- `@MainActor` ViewModel тестировать с `@MainActor` test methods или `await MainActor.run`.
|
|
20
|
+
|
|
21
|
+
# Mappers и domain
|
|
22
|
+
|
|
23
|
+
- Mapper functions — unit-тесты с таблицами кейсов: nil fields, empty arrays, граничные значения.
|
|
24
|
+
- Regression на бизнес-правила (скидки, статусы, форматирование дат).
|
|
25
|
+
|
|
26
|
+
# Изоляция
|
|
27
|
+
|
|
28
|
+
- Не мокать то, что является предметом теста (например, сам mapper при тесте mapper).
|
|
29
|
+
- Fixtures — в `TestSupport/`, `Mocks/` или рядом по конвенции репо; не дублировать большие JSON inline без нужды.
|
|
30
|
+
|
|
31
|
+
# Структура файлов
|
|
32
|
+
|
|
33
|
+
- `FeatureViewModelTests.swift`, `OrderMapperTests.swift` — суффикс `Tests` в имени типа/файла по стилю Xcode.
|
|
34
|
+
- Не создавать глубокую вложенность `Tests/Tests/`; следовать target structure проекта.
|
|
35
|
+
|
|
36
|
+
# Требование к агенту
|
|
37
|
+
|
|
38
|
+
При добавлении тестов:
|
|
39
|
+
- Копировать паттерны из существующих test files в репо.
|
|
40
|
+
- Добавлять тесты для новых веток логики и регрессий.
|
|
41
|
+
- Использовать DTO fixtures из Data layer и domain types из Domain, не дублировать типы в тестах.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Tooling and review
|
|
2
|
+
|
|
3
|
+
Качество, review, build, security, agent-team, retro. Index only — тела в topic `.md`.
|
|
4
|
+
|
|
5
|
+
| File | Cursor SoT |
|
|
6
|
+
|------|------------|
|
|
7
|
+
| [`code-quality.md`](./code-quality.md) | `code-quality-and-refactoring.mdc` |
|
|
8
|
+
| [`code-review.md`](./code-review.md) | `code-review-mr.mdc` |
|
|
9
|
+
| [`post-change-build.md`](./post-change-build.md) | `post-change-build.mdc` |
|
|
10
|
+
| [`xcode-tooling.md`](./xcode-tooling.md) | `xcode-tooling.mdc` |
|
|
11
|
+
| [`security-ios.md`](./security-ios.md) | `security-ios.mdc` |
|
|
12
|
+
| [`agent-team-intake.md`](./agent-team-intake.md) | `agent-team-intake.mdc` |
|
|
13
|
+
| [`agent-team-orchestrator.md`](./agent-team-orchestrator.md) | `agent-team-orchestrator.mdc` |
|
|
14
|
+
| [`technical-retro.md`](./technical-retro.md) | `technical-retro.mdc` |
|
|
15
|
+
|
|
16
|
+
Sync: change Cursor → update Claude twin same PR. Full map: [`../README.md`](../README.md).
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Use when user posts a work request without /task — suggest or use /task to run the agent team router. Lightweight intake hint only.
|
|
3
|
+
paths:
|
|
4
|
+
- .claude/commands/**/*
|
|
5
|
+
- .claude/team/**/*
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Agent team intake
|
|
9
|
+
|
|
10
|
+
When the user message looks like a **work request** (implement, add, fix, refactor, review MR, write tests, spike) — not a question about how code works:
|
|
11
|
+
|
|
12
|
+
1. Prefer **`/task <their request>`** or invoke **task-router** first.
|
|
13
|
+
2. Do not jump straight to coding without router + pipeline when scope is non-trivial.
|
|
14
|
+
3. Pure questions («как работает X», «объясни») — answer normally, no `/task`.
|
|
15
|
+
|
|
16
|
+
Exceptions: user explicitly says «без pipeline», «просто сделай», or continues an active slug.
|
|
17
|
+
|
|
18
|
+
Scope: iOS/Swift Feature modules (`Features/`, Presentation/Domain/Data) — not `app/src` / Playwright.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Orchestrates the agent team via task-router and pipeline.json. Use for /task, /task-continue, /feature-start, task decomposition, or when the user describes a feature, bug, or review request.
|
|
3
|
+
paths:
|
|
4
|
+
- .claude/commands/**/*
|
|
5
|
+
- .claude/team/**/*
|
|
6
|
+
- .claude/agents/**/*
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Agent team orchestrator
|
|
10
|
+
|
|
11
|
+
Parent agent = **manager**. Router plans; specialists execute. Artifacts: `.claude/team/tasks/<slug>/`.
|
|
12
|
+
|
|
13
|
+
Work request без `/task` — см. **`tooling-and-review/agent-team-intake.md`**.
|
|
14
|
+
|
|
15
|
+
## Entry points
|
|
16
|
+
|
|
17
|
+
| Command | When |
|
|
18
|
+
|---------|------|
|
|
19
|
+
| **`/task <desc>`** | **Preferred** — router → dynamic pipeline → first agent |
|
|
20
|
+
| `/task-continue <slug>` | After human gate or pause |
|
|
21
|
+
| `/feature-start <desc>` | Legacy: analyst-only start (no router) |
|
|
22
|
+
| `/feature-continue <slug>` | Alias of task-continue |
|
|
23
|
+
| `/technical-retro [slug]` | Retro with agent team block |
|
|
24
|
+
|
|
25
|
+
## Roles (iOS)
|
|
26
|
+
|
|
27
|
+
Same stems as Cursor ios-swift agents. **Never Playwright** — use `xcuitest-test-{planner,generator,healer}`. `build-verifier` runs xcodebuild + SwiftLint/Format + unit smoke.
|
|
28
|
+
|
|
29
|
+
Full prompts: `.claude/agents/*.md`. Artifacts: `.claude/team/README.md`.
|
|
30
|
+
|
|
31
|
+
## Dynamic pipeline
|
|
32
|
+
|
|
33
|
+
**Source of truth:** `pipeline.json` → `steps[]`.
|
|
34
|
+
|
|
35
|
+
## Rules (strict)
|
|
36
|
+
|
|
37
|
+
1. **`/task` always starts with task-router**.
|
|
38
|
+
2. Read `pipeline.json` before every subagent invocation.
|
|
39
|
+
3. One role per invocation — except parallel steps.
|
|
40
|
+
4. **Never** skip `humanGates` without continue/approval.
|
|
41
|
+
5. Persist handoffs under `.claude/team/tasks/<slug>/`.
|
|
42
|
+
6. On `validation_failed`: developer → build-verifier.
|
|
43
|
+
7. When complete, suggest `/technical-retro <slug>`.
|
|
44
|
+
|
|
45
|
+
## Skip pipeline when
|
|
46
|
+
|
|
47
|
+
Pure questions; trivial one-file; user «без pipeline»; docs-only one-liner.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Поддержка и улучшение качества кода и архитектуры iOS
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Поддержка существующего стиля
|
|
6
|
+
|
|
7
|
+
- Новые изменения должны:
|
|
8
|
+
- следовать существующим паттернам (имена, структура, DI, error handling);
|
|
9
|
+
- минимизировать «стилистический шум» (лишний reformat, rename без нужды).
|
|
10
|
+
- Перед новым решением:
|
|
11
|
+
- искать аналог в коде и **повторять подход**;
|
|
12
|
+
- проверять DesignSystem и существующие компоненты перед новым UI-контролом;
|
|
13
|
+
- обращаться к другим фичам только через public API (протоколы, facades).
|
|
14
|
+
|
|
15
|
+
# Рефакторинг при изменениях
|
|
16
|
+
|
|
17
|
+
- Допустим лёгкий refactor, если он:
|
|
18
|
+
- уменьшает дублирование;
|
|
19
|
+
- повышает читаемость;
|
|
20
|
+
- не ломает публичные контракты.
|
|
21
|
+
- Примеры:
|
|
22
|
+
- вынести дублирующийся mapper или validation;
|
|
23
|
+
- заменить force unwrap на безопасные конструкции;
|
|
24
|
+
- разбить перегруженный ViewModel на use cases;
|
|
25
|
+
- заменить magic numbers/colors на design tokens;
|
|
26
|
+
- убрать прямую зависимость View от Data в пользу протокола.
|
|
27
|
+
|
|
28
|
+
# Ограничения
|
|
29
|
+
|
|
30
|
+
- Не делать «большой» рефакторинг при точечной задаче:
|
|
31
|
+
- не менять структуру модулей/таргетов;
|
|
32
|
+
- не переименовывать public API без запроса.
|
|
33
|
+
- Крупные изменения — минимальными шагами, код остаётся компилируемым.
|
|
34
|
+
|
|
35
|
+
# Требование к агенту
|
|
36
|
+
|
|
37
|
+
- **Boy scout rule:** оставлять модуль чуть лучше (безопасность optional, typed errors, tests).
|
|
38
|
+
- Не жертвовать слоями ради краткости.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Требования к code review для iOS merge requests. Use when reviewing MR/diff/PR, evaluating a branch, or when the user asks for code review.
|
|
3
|
+
paths:
|
|
4
|
+
- .claude/commands/**/*
|
|
5
|
+
- .claude/team/**/*
|
|
6
|
+
- .claude/agents/**/*
|
|
7
|
+
- .claude/skills/code-review/**/*
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Code review merge requests
|
|
11
|
+
|
|
12
|
+
On-demand правило для review-потоков (не always-on).
|
|
13
|
+
|
|
14
|
+
- **Когда применять**
|
|
15
|
+
- Запросы: «проведи ревью», «оцени MR/ветку/дифф», «посмотри изменения».
|
|
16
|
+
- Опираться на локальный репозиторий: ветка, `git diff`, открытые файлы.
|
|
17
|
+
|
|
18
|
+
- **Что обязан проверить агент**
|
|
19
|
+
- **Архитектура и слои** (`architecture/boundaries.md`, `stack/ios-app-core.md`):
|
|
20
|
+
- View не вызывает API и не знает DTO.
|
|
21
|
+
- ViewModel не зависит от Data-реализаций напрямую.
|
|
22
|
+
- Domain не импортирует SwiftUI/UIKit.
|
|
23
|
+
- Data не тянет Presentation.
|
|
24
|
+
- **Зависимости и модули**:
|
|
25
|
+
- DI через протоколы; composition root в App.
|
|
26
|
+
- Нет deep-import между фичами.
|
|
27
|
+
- Файлы в правильных слоях (`Presentation`, `Domain`, `Data`, `DesignSystem`).
|
|
28
|
+
- **Swift и concurrency** (`stack/swift-conventions.md`):
|
|
29
|
+
- `@MainActor` на UI; нет необоснованных force unwrap.
|
|
30
|
+
- Typed errors; корректная отмена Task где нужно.
|
|
31
|
+
- **UI** (`ui-and-accessibility/swiftui.md`):
|
|
32
|
+
- Тонкие Views; Design System tokens; accessibility identifiers для тестируемых элементов.
|
|
33
|
+
- **Сеть и data** (`api-and-data/networking.md`):
|
|
34
|
+
- DTO отделены от domain; mappers покрывают edge cases.
|
|
35
|
+
- **Тесты**:
|
|
36
|
+
- Нетривиальная логика — unit (`testing/unit.md`); пользовательские потоки — UI (`testing/ui.md`).
|
|
37
|
+
- Указать, какие тесты добавить или обновить.
|
|
38
|
+
|
|
39
|
+
- **Глубина и формат**
|
|
40
|
+
- Фокус на **диффе MR**, не на всём проекте.
|
|
41
|
+
- Сначала обзор (цель MR, риски), затем конкретные комментарии с файлом и предложением fix по паттернам репо.
|
|
42
|
+
- Без «больших рефакторингов» без запроса (`tooling-and-review/code-quality.md`).
|
|
43
|
+
|
|
44
|
+
- **Ограничения**
|
|
45
|
+
- Не выдумывать метаданные CI/MR с хостинга без локальных данных.
|
|
46
|
+
- Boy scout rule в рамках MR.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Сборка и lint после изменений Swift/iOS кода. Use after editing iOS/Swift sources, Xcode targets, or Package.swift.
|
|
3
|
+
paths:
|
|
4
|
+
- .claude/commands/**/*
|
|
5
|
+
- .claude/agents/**/*
|
|
6
|
+
- **/*.{swift,xcodeproj,xcworkspace,pbxproj}
|
|
7
|
+
- **/Package.swift
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Сборка и lint после изменений
|
|
11
|
+
|
|
12
|
+
## Когда применять
|
|
13
|
+
|
|
14
|
+
После изменений исходников Swift / проектных файлов Xcode / `Package.swift`, влияющих на компиляцию или стиль.
|
|
15
|
+
|
|
16
|
+
Исключения: только документация, README, `.cursor/rules/**` без правок app-кода.
|
|
17
|
+
|
|
18
|
+
**Pipeline:** если следующий шаг — отдельный verifier/CI-агент, достаточно затронутых таргетов; в single-agent режиме — полный разумный прогон как в репо.
|
|
19
|
+
|
|
20
|
+
## Как определить команды
|
|
21
|
+
|
|
22
|
+
1. Схемы / таргеты — из `.xcodeproj` / `.xcworkspace` / `Package.swift` (как в CI или соседних скриптах).
|
|
23
|
+
2. Lint — `SwiftLint` / `.swiftlint.yml`, если есть.
|
|
24
|
+
3. Format — `SwiftFormat` / конфиг, если принято в репо.
|
|
25
|
+
4. Тесты — XCTest или Swift Testing — только если задача их затрагивает.
|
|
26
|
+
|
|
27
|
+
Не угадывать чужой toolchain: копировать флаги/`xcodebuild` из Makefile, scripts, CI.
|
|
28
|
+
|
|
29
|
+
## Алгоритм
|
|
30
|
+
|
|
31
|
+
1. Завершить правки.
|
|
32
|
+
2. Собрать **затронутые** таргеты (`xcodebuild` / `swift build` — как в репо).
|
|
33
|
+
3. Прогнать lint/format при наличии конфигов; исправить ошибки в файлах задачи.
|
|
34
|
+
4. Повторить до чистой сборки или зафиксировать блокер пользователю.
|
|
35
|
+
|
|
36
|
+
**Errors** — обязательно; warnings в файлах задачи — по возможности до нуля.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: ATS, Keychain, PII, секреты, безопасное логирование iOS
|
|
3
|
+
paths:
|
|
4
|
+
- "**/*Keychain*.swift"
|
|
5
|
+
- "**/*Auth*.swift"
|
|
6
|
+
- "**/*Token*.swift"
|
|
7
|
+
- "**/*Credential*.swift"
|
|
8
|
+
- "**/Info.plist"
|
|
9
|
+
- .claude/commands/**/*
|
|
10
|
+
- .claude/agents/**/*
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Security (iOS)
|
|
14
|
+
|
|
15
|
+
## Секреты и конфиг
|
|
16
|
+
|
|
17
|
+
- Нет API keys / tokens в исходниках и git; использовать Keychain, xcconfig (не в VCS), CI secrets.
|
|
18
|
+
- Debug-only bypass ATS / SSL — только `#if DEBUG` и никогда в Release.
|
|
19
|
+
|
|
20
|
+
## ATS и сеть
|
|
21
|
+
|
|
22
|
+
- ATS exceptions в Info.plist — минимальные, с обоснованием; предпочитать HTTPS.
|
|
23
|
+
- Certificate pinning — только если уже принято в репо.
|
|
24
|
+
|
|
25
|
+
## PII и логи
|
|
26
|
+
|
|
27
|
+
- Не логировать токены, пароли, полные номера карт/документов.
|
|
28
|
+
- Crash/APM: scrub PII по политике репо.
|
|
29
|
+
|
|
30
|
+
## Keychain / биометрия
|
|
31
|
+
|
|
32
|
+
- Accessible уровни и `kSecAttrAccessible` — осознанно; Face ID/Touch ID — через LocalAuthentication как в репо.
|
|
33
|
+
|
|
34
|
+
## Требование к агенту
|
|
35
|
+
|
|
36
|
+
При auth/формах/платежах — сверить с этим правилом и `code-review`. Security-reviewer подключать для чувствительных фич.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Роль агента для проведения технического ретроспективы (retro). On-demand — предпочтительнее slash-команда /technical-retro.
|
|
3
|
+
paths:
|
|
4
|
+
- .claude/commands/**/*
|
|
5
|
+
- .claude/team/**/*
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Техническое ретро — rule alias
|
|
9
|
+
|
|
10
|
+
Полный сценарий — в slash-команде:
|
|
11
|
+
|
|
12
|
+
**`.claude/commands/technical-retro.md`** → `/technical-retro`
|
|
13
|
+
|
|
14
|
+
Используй rule только если command недоступен. Не дублируй содержимое — следуй command-файлу и skill `technical-retro`.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Перед xcodebuild / SwiftLint / SwiftFormat определять toolchain и схемы репозитория и использовать только их
|
|
3
|
+
paths:
|
|
4
|
+
- .claude/commands/**/*
|
|
5
|
+
- .claude/agents/**/*
|
|
6
|
+
- "**/*.{swift,xcodeproj,xcworkspace,pbxproj}"
|
|
7
|
+
- "**/Package.swift"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Xcode tooling (терминал)
|
|
11
|
+
|
|
12
|
+
Перед **`xcodebuild` / `swift build` / `swift test` / SwiftLint / SwiftFormat / `simctl`** определи toolchain репозитория и **используй только его**.
|
|
13
|
+
|
|
14
|
+
## Как определить
|
|
15
|
+
|
|
16
|
+
1. **Workspace / project:** `.xcworkspace` (CocoaPods) → workspace; иначе `.xcodeproj`; SPM-only — `Package.swift`.
|
|
17
|
+
2. **Scheme / destination:** как в CI, `Makefile`, `fastlane`, `scripts/` — не угадывать.
|
|
18
|
+
3. **Lint:** `.swiftlint.yml` / `SwiftLint` в PATH или Mint/mise — если конфига нет, не запускать «чужой» lint.
|
|
19
|
+
4. **Format:** `.swiftformat` / SwiftFormat — только если принято в репо.
|
|
20
|
+
5. **Simulator:** `xcrun simctl list` + destination из CI; не хардкодить UDID.
|
|
21
|
+
|
|
22
|
+
Примеры: `xcodebuild -scheme App -destination 'platform=iOS Simulator,name=iPhone 16' build`, `swiftlint lint --quiet`, `swiftformat . --lint`.
|
|
23
|
+
|
|
24
|
+
Долгие сборки и DerivedData — нормальны; не блокировать `xcodebuild`/`simctl`/`xcrun`.
|