@eltonssouza/development-utility-kit 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/.claude/agents/analyst.md +198 -0
  2. package/.claude/agents/backend-developer.md +126 -0
  3. package/.claude/agents/brain-keeper.md +229 -0
  4. package/.claude/agents/code-reviewer.md +181 -0
  5. package/.claude/agents/database-engineer.md +94 -0
  6. package/.claude/agents/devops-engineer.md +141 -0
  7. package/.claude/agents/frontend-developer.md +97 -0
  8. package/.claude/agents/gate-keeper.md +118 -0
  9. package/.claude/agents/migrator.md +291 -0
  10. package/.claude/agents/mobile-developer.md +80 -0
  11. package/.claude/agents/n8n-specialist.md +94 -0
  12. package/.claude/agents/product-owner.md +115 -0
  13. package/.claude/agents/qa-engineer.md +232 -0
  14. package/.claude/agents/release-engineer.md +204 -0
  15. package/.claude/agents/scaffold.md +87 -0
  16. package/.claude/agents/security-engineer.md +199 -0
  17. package/.claude/agents/sprint-runner.md +44 -0
  18. package/.claude/agents/stack-resolver.md +84 -0
  19. package/.claude/agents/tech-lead.md +182 -0
  20. package/.claude/agents/update-template.md +54 -0
  21. package/.claude/agents/ux-designer.md +118 -0
  22. package/.claude/settings.json +44 -0
  23. package/.claude/skills/README.md +332 -0
  24. package/.claude/skills/active-project/SKILL.md +129 -0
  25. package/.claude/skills/api-integration-test/SKILL.md +64 -0
  26. package/.claude/skills/auto-test-guard/SKILL.md +237 -0
  27. package/.claude/skills/auto-test-guard/resources/backend-tests.md +20 -0
  28. package/.claude/skills/auto-test-guard/resources/e2e-tests.md +24 -0
  29. package/.claude/skills/auto-test-guard/resources/execution-report.md +49 -0
  30. package/.claude/skills/auto-test-guard/resources/frontend-tests.md +18 -0
  31. package/.claude/skills/auto-test-guard/resources/initial-setup.md +108 -0
  32. package/.claude/skills/auto-test-guard/resources/run-suite.md +48 -0
  33. package/.claude/skills/auto-test-guard/resources/senior-gate.md +19 -0
  34. package/.claude/skills/brain-keeper/SKILL.md +60 -0
  35. package/.claude/skills/brain-keeper/obsidian/app.json +9 -0
  36. package/.claude/skills/brain-keeper/obsidian/appearance.json +4 -0
  37. package/.claude/skills/brain-keeper/obsidian/core-plugins.json +20 -0
  38. package/.claude/skills/brain-keeper/obsidian/daily-notes.json +5 -0
  39. package/.claude/skills/brain-keeper/obsidian/graph.json +32 -0
  40. package/.claude/skills/brain-keeper/obsidian/snippets/folder-colors.css +90 -0
  41. package/.claude/skills/brain-keeper/obsidian/templates.json +5 -0
  42. package/.claude/skills/brain-keeper/templates/README.md +51 -0
  43. package/.claude/skills/brain-keeper/templates/adr.md +40 -0
  44. package/.claude/skills/brain-keeper/templates/bug.md +35 -0
  45. package/.claude/skills/brain-keeper/templates/daily.md +38 -0
  46. package/.claude/skills/brain-keeper/templates/feature.md +62 -0
  47. package/.claude/skills/brain-keeper/templates/meeting.md +34 -0
  48. package/.claude/skills/brain-keeper/templates/tech-debt.md +21 -0
  49. package/.claude/skills/caveman/SKILL.md +187 -0
  50. package/.claude/skills/create-stack-pack/SKILL.md +281 -0
  51. package/.claude/skills/grill-me/SKILL.md +79 -0
  52. package/.claude/skills/honcho-memory/SKILL.md +207 -0
  53. package/.claude/skills/honcho-memory/docs/api-endpoints-verified.md +75 -0
  54. package/.claude/skills/honcho-memory/hooks/on-prompt-submit.js +221 -0
  55. package/.claude/skills/honcho-memory/hooks/on-stop.js +193 -0
  56. package/.claude/skills/honcho-memory/lib/honcho-client.js +363 -0
  57. package/.claude/skills/honcho-memory/lib/memory-injector.js +93 -0
  58. package/.claude/skills/honcho-memory/package.json +32 -0
  59. package/.claude/skills/honcho-memory/scripts/cli.js +370 -0
  60. package/.claude/skills/honcho-memory/scripts/setup.js +109 -0
  61. package/.claude/skills/honcho-memory/tests/t001-api-endpoints-verified.test.js +89 -0
  62. package/.claude/skills/honcho-memory/tests/t002-structure.test.js +97 -0
  63. package/.claude/skills/honcho-memory/tests/t003-honcho-client.test.js +162 -0
  64. package/.claude/skills/honcho-memory/tests/t004-soft-delete.test.js +259 -0
  65. package/.claude/skills/honcho-memory/tests/t005-memory-injector.test.js +175 -0
  66. package/.claude/skills/honcho-memory/tests/t006-on-prompt-submit.test.js +215 -0
  67. package/.claude/skills/honcho-memory/tests/t007-on-stop.test.js +165 -0
  68. package/.claude/skills/honcho-memory/tests/t008-cli.test.js +214 -0
  69. package/.claude/skills/honcho-memory/tests/t009-setup.test.js +232 -0
  70. package/.claude/skills/honcho-memory/tests/t010-skill-md.test.js +114 -0
  71. package/.claude/skills/honcho-memory/tests/t011-settings-hooks.test.js +105 -0
  72. package/.claude/skills/honcho-memory/tests/t012-docs-update.test.js +106 -0
  73. package/.claude/skills/honcho-memory/tests/t013-smoke-e2e.test.js +90 -0
  74. package/.claude/skills/pair-debug/SKILL.md +288 -0
  75. package/.claude/skills/prd-ready-check/SKILL.md +58 -0
  76. package/.claude/skills/project-manager/SKILL.md +167 -0
  77. package/.claude/skills/quality-standards/SKILL.md +201 -0
  78. package/.claude/skills/quick-feature/SKILL.md +264 -0
  79. package/.claude/skills/run-sprint/SKILL.md +342 -0
  80. package/.claude/skills/scaffold/SKILL.md +58 -0
  81. package/.claude/skills/stack-discovery/SKILL.md +159 -0
  82. package/.claude/skills/test-coverage-auditor/SKILL.md +59 -0
  83. package/.claude/skills/to-issues/SKILL.md +163 -0
  84. package/.claude/skills/to-prd/SKILL.md +130 -0
  85. package/.claude/skills/update-template/SKILL.md +254 -0
  86. package/.claude/stacks/CODEOWNERS +30 -0
  87. package/.claude/stacks/README.md +88 -0
  88. package/.claude/stacks/_template.md +116 -0
  89. package/.claude/stacks/java/spring-boot-3.md +376 -0
  90. package/.claude/stacks/java/spring-boot-4.md +438 -0
  91. package/.claude/stacks/typescript/angular-18.md +420 -0
  92. package/.claude/stacks/typescript/angular-19.md +397 -0
  93. package/.claude/stacks/typescript/angular-21.md +494 -0
  94. package/CLAUDE.md +453 -0
  95. package/README.md +391 -0
  96. package/bin/cli.js +773 -0
  97. package/bin/lib/backup.js +62 -0
  98. package/bin/lib/detect-stack.js +476 -0
  99. package/bin/lib/help.js +233 -0
  100. package/bin/lib/identity.js +108 -0
  101. package/bin/lib/local-dir.js +69 -0
  102. package/bin/lib/manifest.js +236 -0
  103. package/bin/lib/sync-all.js +394 -0
  104. package/bin/lib/version-check.js +398 -0
  105. package/dashboard/db.js +199 -0
  106. package/dashboard/package.json +22 -0
  107. package/dashboard/public/app.js +709 -0
  108. package/dashboard/public/content/docs/agents-reference.en.md +911 -0
  109. package/dashboard/public/content/docs/architecture-overview.en.md +260 -0
  110. package/dashboard/public/content/docs/autonomy-matrix.en.md +186 -0
  111. package/dashboard/public/content/docs/git-flow.en.md +525 -0
  112. package/dashboard/public/content/docs/honcho-memory.en.md +394 -0
  113. package/dashboard/public/content/docs/hooks-reference.en.md +420 -0
  114. package/dashboard/public/content/docs/pipeline.en.md +400 -0
  115. package/dashboard/public/content/docs/quality-gate.en.md +315 -0
  116. package/dashboard/public/content/docs/skills-reference.en.md +500 -0
  117. package/dashboard/public/content/docs/stack-rules.en.md +362 -0
  118. package/dashboard/public/content/docs/troubleshooting.en.md +637 -0
  119. package/dashboard/public/content/manifest.json +102 -0
  120. package/dashboard/public/content/manual/backend.en.md +1138 -0
  121. package/dashboard/public/content/manual/existing-project.en.md +831 -0
  122. package/dashboard/public/content/manual/frontend.en.md +1065 -0
  123. package/dashboard/public/content/manual/fullstack.en.md +1508 -0
  124. package/dashboard/public/content/manual/mobile.en.md +866 -0
  125. package/dashboard/public/index.html +108 -0
  126. package/dashboard/public/style.css +610 -0
  127. package/dashboard/public/vendor/marked.min.js +69 -0
  128. package/dashboard/rtk.js +143 -0
  129. package/dashboard/server-app.js +403 -0
  130. package/dashboard/server.js +104 -0
  131. package/dashboard/test/sprint1.test.js +406 -0
  132. package/dashboard/test/sprint2.test.js +571 -0
  133. package/dashboard/test/sprint3.test.js +560 -0
  134. package/package.json +33 -0
  135. package/scripts/hooks/subagent-telemetry.sh +14 -0
  136. package/scripts/hooks/telemetry-writer.js +250 -0
  137. package/scripts/latest-versions.json +56 -0
@@ -0,0 +1,866 @@
1
+ # Mobile — React Native 0.84+ + Expo SDK 54+
2
+
3
+ Onboarding guide for mobile development with React Native, Expo, and development-utility-kit.
4
+
5
+ ## Who this manual is for
6
+
7
+ Mobile developer working on a React Native app (Expo managed or bare) that will use the development-utility-kit harness as an orchestration layer for skills + agents. The guide covers everything from an empty folder to EAS Build in production, including discovery, sprints, tests, and debugging.
8
+
9
+ Prerequisites:
10
+
11
+ - Node.js 22+ and npm 10+ on PATH
12
+ - Expo CLI (`npm install --global expo-cli` optional; prefer `npx`)
13
+ - Android Studio (with SDK 35+) for local Android builds
14
+ - Xcode 16+ + CocoaPods for local iOS builds (macOS only)
15
+ - EAS account (`npx eas-cli login`)
16
+ - Git, Git Bash, or WSL on Windows
17
+
18
+ Cowork or Claude Code open in the project folder. The harness lives at `C:\development\tools\development-utility-kit` (Windows) or `~/development/tools/development-utility-kit` (macOS/Linux).
19
+
20
+ ## Real CLI (duk)
21
+
22
+ The `duk` binary covers 3 verbs:
23
+
24
+ ```bash
25
+ duk install # install/update harness in current folder
26
+ duk install --sub mobile # install in ./mobile subfolder
27
+ duk install --dry-run # show what it would do, no writes
28
+ duk dashboard # open local dashboard
29
+ duk update # alias for `duk install`
30
+ ```
31
+
32
+ **Important**: there is NO `duk <skill>`. Skills trigger by keyword match in chat with Claude. Do not type `duk bootstrap-mobile`, `duk run-sprint`, `duk grill-me`. Everything is conversation.
33
+
34
+ ## 5-min onboarding
35
+
36
+ Mobile has no `bootstrap-mobile` skill. Scaffolding is the responsibility of the `mobile-developer` agent via `project-manager` (catch-all skill). Step by step:
37
+
38
+ ```bash
39
+ # 1. Create Expo project (manual, outside the harness)
40
+ npx create-expo-app@latest MyApp --template blank-typescript
41
+ cd MyApp
42
+
43
+ # 2. Install harness in the app folder
44
+ duk install
45
+ # Expected output:
46
+ # ✓ .claude/ provisioned (skills + agents + hooks)
47
+ # ✓ CLAUDE.md created (fill in Project Identity)
48
+ # ✓ docs/brain/ provisioned (Obsidian vault)
49
+ # ✓ scripts/hooks/ installed
50
+ ```
51
+
52
+ Edit `CLAUDE.md` under the `Project Identity` section:
53
+
54
+ ```markdown
55
+ ## Project Identity
56
+
57
+ - **Project name**: `my-mobile-app`
58
+ - **Project type**: `mobile`
59
+ - **Primary stack**: `React Native 0.84+ / Expo SDK 54+`
60
+ - **Database**: `MMKV (local) + remote REST API`
61
+ - **Domain**: `e-commerce`
62
+ - **Team size**: `2 mobile`
63
+ - **Additional rules**:
64
+ ```
65
+
66
+ Optional dashboard to inspect harness state:
67
+
68
+ ```bash
69
+ duk dashboard
70
+ # Opens http://localhost:4300
71
+ ```
72
+
73
+ Open the folder in Cowork or Claude Code. First chat configures the app:
74
+
75
+ ```
76
+ you:
77
+ configure mobile project with Expo Router, TypeScript strict, New Architecture
78
+
79
+ Claude (project-manager -> mobile-developer):
80
+ > Applied:
81
+ > - app.json: newArchEnabled: true, scheme "myapp"
82
+ > - tsconfig.json: strict: true, noUncheckedIndexedAccess: true
83
+ > - expo-router installed, app/_layout.tsx + app/(tabs)/_layout.tsx
84
+ > - app/(tabs)/index.tsx Home
85
+ > - app/(tabs)/profile.tsx Profile
86
+ > - .eslintrc with @typescript-eslint strict
87
+ > - jest.config.ts + jest-expo preset
88
+ > Run `npx expo start` to validate.
89
+ ```
90
+
91
+ ## Mandatory stack
92
+
93
+ | Technology | Version | Notes |
94
+ |---|---|---|
95
+ | React Native | 0.84+ | New Architecture mandatory (Fabric + TurboModules) |
96
+ | React | 19+ | Server Components awareness, but RN stays client-only |
97
+ | TypeScript | strict | `tsconfig.json` with `strict: true`, `noUncheckedIndexedAccess: true` |
98
+ | Expo | SDK 54+ | Prefer managed; bare workflow only with justification |
99
+ | Navigation | React Navigation 7+ or Expo Router | Expo Router default in new apps |
100
+ | State | Zustand / TanStack Query / Jotai | Zustand for local state; TanStack for server state |
101
+ | Styling | NativeWind 4+ or StyleSheet | NativeWind if the team comes from Tailwind |
102
+ | Animation | Reanimated 4 + Gesture Handler | Always animate on the UI thread |
103
+ | Lists | FlashList 2+ | FlatList only for lists < 20 items |
104
+ | Storage | MMKV (sync) or AsyncStorage | MMKV default; AsyncStorage only on legacy |
105
+ | Secure storage | expo-secure-store | Token, refresh token, biometric secret |
106
+ | Forms | react-hook-form + zod | Validation with zod, single schema client+API |
107
+ | Unit testing | Jest + React Native Testing Library | jest-expo preset |
108
+ | E2E testing | Detox or Maestro | Detox for native iOS+Android; Maestro for simple flows |
109
+ | Build | EAS Build | Cloud build default |
110
+ | Submit | EAS Submit | Automated store submission |
111
+ | OTA | expo-updates + EAS Update | Hotfix without store review |
112
+
113
+ ## CLAUDE.md Project Identity (mobile)
114
+
115
+ ```markdown
116
+ ## Project Identity
117
+
118
+ - **Project name**: `my-mobile-app`
119
+ - **Project type**: `mobile`
120
+ - **Primary stack**: `React Native 0.84+ / Expo SDK 54+`
121
+ - **State**: `Zustand + TanStack Query`
122
+ - **Navigation**: `Expo Router`
123
+ - **Storage**: `MMKV + expo-secure-store`
124
+ - **Domain**: `e-commerce`
125
+ - **Team size**: `2 mobile`
126
+ ```
127
+
128
+ ## Skills applicable to mobile
129
+
130
+ Mobile uses the harness's general skill catalog. There is no mobile-specific skill. `project-manager` does the catch-all routing to `mobile-developer`.
131
+
132
+ | Skill | EN trigger | Output |
133
+ |---|---|---|
134
+ | `project-manager` | "create mobile app", "react native", "convert Angular to mobile" | Delegates to `mobile-developer` via Task |
135
+ | `grill-me` | "grill me about X", "interview me about X" | `DISCOVERY_*.md` |
136
+ | `to-prd` | "generate PRD" | `PRD_*.md` |
137
+ | `to-issues` | "split into issues" | `ISSUES_*.md` |
138
+ | `run-sprint` | "run sprint N", "execute the sprint" | Sprint implemented with green tests |
139
+ | `auto-test-guard` | "run tests", "generate tests" | Suite + senior+ gate |
140
+ | `pair-debug` | "let's debug X", "investigate this bug" | Hypothesis -> probe -> confirm loop |
141
+ | `prd-ready-check` | "PRD ready?", "DoD" | GO / NO-GO |
142
+ | `brain-keeper` | "record in brain", end of PLAN | Notes in `docs/brain/` |
143
+ | `active-project` | "/active-project <path>" | Fast-lane adoption |
144
+ | `update-template` | "update template" | Sync `.claude/` + `CLAUDE.md` |
145
+ | `honcho-memory` | "remember that X", "/honcho list" | Cross-session memory |
146
+ | `caveman` | always-on, "stop caveman" | Telegraphic output |
147
+
148
+ ### `project-manager` (catch-all — replaces bootstrap-mobile)
149
+
150
+ Since there is NO `bootstrap-mobile`, all scaffolding or structural changes go through `project-manager`:
151
+
152
+ ```
153
+ you:
154
+ create mobile app with Expo SDK 54 and tab navigation
155
+
156
+ Claude (project-manager):
157
+ > Intent identified: mobile scaffold.
158
+ > Delegating to mobile-developer.
159
+
160
+ Claude (mobile-developer):
161
+ > npx create-expo-app@latest --template blank-typescript .
162
+ > Configured Expo Router with (tabs).
163
+ > Installed: zustand, @tanstack/react-query, react-native-mmkv,
164
+ > expo-secure-store, react-hook-form, zod, @shopify/flash-list
165
+ > jest-expo + RNTL + Detox in devDependencies.
166
+ > CLAUDE.md updated for type=mobile.
167
+ > Done. `npx expo start` to validate.
168
+ ```
169
+
170
+ ### `grill-me` (typical mobile discovery)
171
+
172
+ Mobile discovery covers platform-specific topics:
173
+
174
+ - iOS-first vs Android-first vs parallel
175
+ - Online-first vs offline-first
176
+ - Biometric auth (Face ID, Touch ID, Android Biometric)
177
+ - Push notification (Expo Notifications vs native FCM/APNs)
178
+ - Universal deep linking vs custom scheme
179
+ - OTA strategy (which channel, which SLA)
180
+ - Accessibility (Screen reader, dynamic type, touch targets)
181
+
182
+ ```
183
+ you:
184
+ grill me about checkout screen with Apple Pay and Google Pay
185
+
186
+ Claude (grill-me):
187
+ > 1. What price range is supported?
188
+ > 2. Multi-currency?
189
+ > 3. Idempotency: does the backend have an idempotency-key already?
190
+ > 4. Fallback if Apple/Google Pay unavailable? Stripe? PIX in Brazil?
191
+ > 5. Lock orientation during payment — yes or no?
192
+ > 6. Offline behavior: can payment start without internet?
193
+ > 7. iOS-first launch or Android-first?
194
+ ```
195
+
196
+ ### `auto-test-guard` (mobile thresholds)
197
+
198
+ Senior+ gate adapts for mobile (Detox flakiness tolerated):
199
+
200
+ | Metric | Mobile threshold |
201
+ |---|---|
202
+ | Jest statements | >= 85% |
203
+ | Jest branches | >= 80% |
204
+ | RN Testing Library a11y | 0 critical |
205
+ | Detox/Maestro E2E | critical flows green, retry up to 3x |
206
+ | ESLint | 0 errors, 0 new warnings |
207
+ | TS strict | no `any` in new code |
208
+ | Bundle size delta | < 200KB per feature (warn), block > 500KB |
209
+
210
+ ### `pair-debug` (typically mobile)
211
+
212
+ Mobile has its own class of bugs that warrant the hypothesis-driven loop:
213
+
214
+ - Metro cache corrupted after `git pull`
215
+ - `pod install` failing on CocoaPods version
216
+ - Gradle daemon stuck
217
+ - New Architecture incompatible with legacy lib
218
+ - Hermes crash with no stack trace
219
+ - EAS Build failing on signing
220
+
221
+ ## Workflow 1 — Feature from scratch (15 turns)
222
+
223
+ Scenario: product list screen with pull-to-refresh, infinite scroll, and API integration.
224
+
225
+ ```
226
+ Turn 1 — you:
227
+ grill me about product list screen with pull-to-refresh and infinite scroll
228
+
229
+ Turn 1 — Claude (grill-me):
230
+ > Let's scope this.
231
+ > 1. How many products per page? I recommend 20 with cursor pagination
232
+ > (not offset — avoids drift when the list changes during scroll).
233
+ > 2. Cache: TanStack Query with 5min staleTime? Persisted to MMKV?
234
+ > 3. Offline: show last cache + "offline" banner when no network?
235
+ > 4. Skeleton during initial load or native ProgressView?
236
+ > 5. Does pull-to-refresh invalidate cache or just refetch the first page?
237
+ > 6. Error: auto-retry or manual button?
238
+ > 7. Accessibility: VoiceOver / TalkBack — announce "loading more"?
239
+ ```
240
+
241
+ ```
242
+ Turn 2 — you:
243
+ 20 per page with cursor. TanStack staleTime 5min. Offline shows cache + banner.
244
+ Initial skeleton. Pull-to-refresh invalidates everything. Auto-retry 2x then manual.
245
+ A11y mandatory.
246
+
247
+ Turn 2 — Claude (grill-me):
248
+ > Discovery complete. Saved to docs/discovery/DISCOVERY_product-list.md.
249
+ > Next: "generate PRD" to produce PRD_product-list.md.
250
+ ```
251
+
252
+ ```
253
+ Turn 3 — you:
254
+ generate PRD
255
+
256
+ Turn 3 — Claude (to-prd):
257
+ > docs/prd/PRD_product-list.md created.
258
+ > Overview, Goals, User Stories (US-1..US-4), Functional Requirements,
259
+ > Non-functional (a11y AA, p95 < 800ms first page, offline fallback),
260
+ > Out of scope (filters, sorting — backlog).
261
+ ```
262
+
263
+ ```
264
+ Turn 4 — you:
265
+ split into issues
266
+
267
+ Turn 4 — Claude (to-issues):
268
+ > docs/issues/ISSUES_product-list.md created with 6 [ISSUE-N] blocks.
269
+ > To open all on GitHub:
270
+ > gh issue create --title "..." --body-file ...
271
+ > (commands ready in the file)
272
+ ```
273
+
274
+ ```
275
+ Turn 5 — you:
276
+ analyst generate plan
277
+
278
+ Turn 5 — Claude (analyst):
279
+ > docs/plans/PLAN_product-list.md created.
280
+ > Sprint 1: hook + service + cache (3 tasks)
281
+ > Sprint 2: UI + FlashList + skeleton (4 tasks)
282
+ > Sprint 3: pull-to-refresh + error + offline banner (3 tasks)
283
+ > Sprint 4: E2E tests + a11y audit (2 tasks)
284
+ > Each task with goal-ready DoD.
285
+ ```
286
+
287
+ ```
288
+ Turn 6 — you:
289
+ prd ready?
290
+
291
+ Turn 6 — Claude (prd-ready-check):
292
+ > Evaluating PRD_product-list.md + PLAN_product-list.md.
293
+ > ✓ User Stories with measurable criteria
294
+ > ✓ Non-functional with numeric thresholds
295
+ > ✓ Out of scope explicit
296
+ > ✓ Goal-ready DoD on all tasks
297
+ > GO. Can start sprint 1.
298
+ ```
299
+
300
+ ```
301
+ Turn 7 — you:
302
+ run sprint 1 of PLAN_product-list.md
303
+
304
+ Turn 7 — Claude (run-sprint):
305
+ > Sprint 1 — initial backlog:
306
+ > [Task 1.1] qa-engineer writes failing test (Red)
307
+ > [Task 1.2] mobile-developer implements hook + service (Green)
308
+ > [Task 1.3] gate-keeper validates senior+
309
+ >
310
+ > [Task 1.1] qa-engineer:
311
+ > features/products/useProductList.test.ts created, 4 scenarios failing.
312
+ >
313
+ > [Task 1.2] mobile-developer:
314
+ > - features/products/useProductList.ts (TanStack Query infinite)
315
+ > - features/products/product.service.ts (cursor fetch)
316
+ > - features/products/product.types.ts (zod schema)
317
+ > - 4 scenarios passing ✓
318
+ >
319
+ > [Task 1.3] gate-keeper:
320
+ > Jest statements 91% ✓
321
+ > ESLint 0 warnings ✓
322
+ > TS strict 0 any ✓
323
+ > GREEN. Sprint 1 done.
324
+ ```
325
+
326
+ ```
327
+ Turn 8 — you:
328
+ run sprint 2
329
+
330
+ Turn 8 — Claude (run-sprint):
331
+ > Sprint 2 — UI with FlashList:
332
+ > [Task 2.1] qa-engineer writes RNTL test (snapshot + a11y)
333
+ > [Task 2.2] mobile-developer implements screen
334
+ > [Task 2.3] gate-keeper validates
335
+ >
336
+ > [Task 2.2] mobile-developer:
337
+ > - features/products/ProductListScreen.tsx (FlashList 2 estimatedItemSize 96)
338
+ > - features/products/ProductCard.tsx (memo, OnPress callback)
339
+ > - features/products/ProductSkeleton.tsx (Reanimated 4 pulse)
340
+ > - app/(tabs)/products/index.tsx (Expo Router route)
341
+ >
342
+ > [Task 2.3] gate-keeper:
343
+ > Jest 88% ✓
344
+ > RNTL a11y 0 critical ✓
345
+ > FlashList warnings: 0 ✓
346
+ > GREEN.
347
+ ```
348
+
349
+ ```
350
+ Turn 9 — you:
351
+ run sprint 3
352
+
353
+ Turn 9 — Claude (run-sprint):
354
+ > Sprint 3 — pull-to-refresh, error, offline:
355
+ > - RefreshControl with invalidateQueries
356
+ > - Local ErrorBoundary + retry button
357
+ > - NetInfo subscription -> "offline" banner
358
+ > - MMKV persister for TanStack cache
359
+ >
360
+ > gate-keeper GREEN.
361
+ ```
362
+
363
+ ```
364
+ Turn 10 — you:
365
+ run sprint 4
366
+
367
+ Turn 10 — Claude (run-sprint):
368
+ > Sprint 4 — E2E + a11y:
369
+ > [Task 4.1] qa-engineer writes Detox test
370
+ > [Task 4.2] qa-engineer runs axe-core/react-native scan
371
+ >
372
+ > [Task 4.1]:
373
+ > e2e/product-list.e2e.ts — scroll, pull-to-refresh, offline mode
374
+ > Dev client build + Detox run: 3 scenarios green, retry used in 1
375
+ >
376
+ > [Task 4.2]:
377
+ > 0 critical, 0 serious. 2 minor (low contrast on badge).
378
+ > Auto-fix applied.
379
+ >
380
+ > gate-keeper GREEN.
381
+ ```
382
+
383
+ ```
384
+ Turn 11 — you:
385
+ record in brain
386
+
387
+ Turn 11 — Claude (brain-keeper):
388
+ > docs/brain/features/product-list.md created.
389
+ > docs/brain/daily/2026-05-27.md updated.
390
+ > Obsidian links to PRD, PLAN, ADR (none created this sprint).
391
+ > MOC.md updated.
392
+ ```
393
+
394
+ ```
395
+ Turn 12 — you:
396
+ ready for production?
397
+
398
+ Turn 12 — Claude (gate-keeper):
399
+ > Final senior+ gate:
400
+ > ✓ Jest 87% statements
401
+ > ✓ RNTL 0 critical a11y
402
+ > ✓ Detox critical flows green
403
+ > ✓ Bundle delta +180KB (warn — ok)
404
+ > ✓ TS strict
405
+ > ✓ ESLint clean
406
+ > Cleared for production build.
407
+ ```
408
+
409
+ ## Workflow 2 — Biometric authentication
410
+
411
+ ```
412
+ you:
413
+ create auth flow with biometric using expo-local-authentication
414
+
415
+ Claude (project-manager -> mobile-developer):
416
+ > Installs expo-local-authentication, expo-secure-store.
417
+ > Creates:
418
+ > - features/auth/BiometricAuthScreen.tsx ("Sign in with Face ID" button)
419
+ > - features/auth/PasswordFallbackScreen.tsx
420
+ > - services/biometric.service.ts:
421
+ > authenticateAsync({ promptMessage, fallbackLabel: 'Use password' })
422
+ > - services/credentials.store.ts (SecureStore, namespace "auth.v1")
423
+ > - store/auth.store.ts (Zustand: { user, token, refreshAt })
424
+ > - app/(auth)/_layout.tsx (gate for authenticated routes)
425
+ >
426
+ > Unit test: services/biometric.service.test.ts (mock LocalAuth)
427
+ > E2E test: e2e/biometric.e2e.ts (skipped on CI without biometric device)
428
+ >
429
+ > Applied. Want to run "run tests"?
430
+ ```
431
+
432
+ ## Workflow 3 — EAS Build + Submit setup
433
+
434
+ ```
435
+ you:
436
+ configure EAS Build for Android and iOS
437
+
438
+ Claude (devops-engineer):
439
+ > Commands for you to run locally (needs your login):
440
+ > npm install --global eas-cli
441
+ > eas login
442
+ > eas build:configure
443
+ >
444
+ > I'll create eas.json with 3 profiles:
445
+
446
+ > {
447
+ > "build": {
448
+ > "development": {
449
+ > "developmentClient": true,
450
+ > "distribution": "internal",
451
+ > "channel": "development"
452
+ > },
453
+ > "preview": {
454
+ > "distribution": "internal",
455
+ > "channel": "preview",
456
+ > "ios": { "simulator": false },
457
+ > "android": { "buildType": "apk" }
458
+ > },
459
+ > "production": {
460
+ > "channel": "production",
461
+ > "autoIncrement": true
462
+ > }
463
+ > },
464
+ > "submit": {
465
+ > "production": {
466
+ > "android": { "track": "production" },
467
+ > "ios": { "ascAppId": "1234567890" }
468
+ > }
469
+ > }
470
+ > }
471
+ >
472
+ > Build commands:
473
+ > eas build --platform all --profile production
474
+ > eas submit -p android --latest
475
+ > eas submit -p ios --latest
476
+ ```
477
+
478
+ ```
479
+ you:
480
+ generate OTA update production with hotfix
481
+
482
+ Claude (devops-engineer):
483
+ > Pre-checks:
484
+ > ✓ expo-updates installed and configured (app.json runtimeVersion)
485
+ > ✓ "production" channel exists in eas.json
486
+ > ✓ No native code changes (verified git diff android/ ios/)
487
+ >
488
+ > Command:
489
+ > eas update --branch production --message "Hotfix: fix crash on list"
490
+ >
491
+ > After publish:
492
+ > - Prod devices get update on next cold start (or checkAutomatically: ON_LOAD)
493
+ > - Monitor: https://expo.dev/accounts/<org>/projects/<app>/updates
494
+ >
495
+ > Warning: if you changed native code, OTA will not work. You must rebuild.
496
+ ```
497
+
498
+ ## Workflow 4 — Angular -> React Native conversion
499
+
500
+ ```
501
+ you:
502
+ convert my existing Angular app to React Native preserving business logic
503
+
504
+ Claude (mobile-developer):
505
+ > Phase 1 — Catalog (read-only, no Angular changes):
506
+ > ✓ 12 features detected in src/app/features/
507
+ > ✓ 8 HttpClient services in src/app/core/services/
508
+ > ✓ 5 guards (auth, role-admin, role-user, has-tenant, feature-flag)
509
+ > ✓ 23 standalone components
510
+ > ✓ 4 pipes (currency, date-relative, mask-cpf, truncate)
511
+ >
512
+ > Phase 2 — Mapping:
513
+ > Angular service -> custom hook + Zustand
514
+ > UserService.getMe() -> useMe() (TanStack Query)
515
+ > CartService.add() -> useCart() (Zustand action)
516
+ > Angular component -> functional component + hooks
517
+ > ProductCardComponent -> ProductCard.tsx (memo)
518
+ > Guard -> Expo Router middleware
519
+ > authGuard -> app/(auth)/_layout.tsx redirect
520
+ > Pipe -> pure function
521
+ > currencyPipe -> formatCurrency(value, locale)
522
+ >
523
+ > Phase 3 — Incremental migration, feature by feature:
524
+ > Sprint A: auth + me + bootstrap
525
+ > Sprint B: signup feature
526
+ > Sprint C: listing feature
527
+ > ...
528
+ >
529
+ > Phase 4 — RN Testing Library + Detox tests per feature.
530
+ >
531
+ > Want to start with Sprint A? Type "run sprint A".
532
+ ```
533
+
534
+ ## Workflow 5 — pair-debug (Metro stuck)
535
+
536
+ ```
537
+ you:
538
+ let's debug — Metro is stuck and build won't run after git pull
539
+
540
+ Claude (pair-debug):
541
+ > Symptom: after recent git pull, npx expo start hangs at "Starting Metro Bundler".
542
+ > Hypothesis 1 (85% confidence): Metro cache invalid due to changes in
543
+ > node_modules or metro.config.js.
544
+ > Probe: run `watchman watch-del-all && rm -rf $TMPDIR/metro-* /tmp/metro-*`.
545
+ > Confirm probe? (yes/no)
546
+
547
+ you: yes
548
+
549
+ Claude:
550
+ > Executed. Caches cleared.
551
+ > Next step: `npx expo start --clear`.
552
+ > If still stuck, hypothesis 2 (60%): outdated node_modules.
553
+ > Probe: rm -rf node_modules && npm ci.
554
+
555
+ you:
556
+ didn't work. still stuck
557
+
558
+ Claude:
559
+ > Hypothesis 2 active.
560
+ > Probe: rm -rf node_modules package-lock.json .expo && npm install.
561
+ > Confirm? (yes/no)
562
+
563
+ you: yes
564
+
565
+ Claude:
566
+ > Executed. npm install complete in 47s.
567
+ > Run again: npx expo start --clear.
568
+ > If it persists, hypothesis 3 (40%): watchman conflict with WSL/Windows
569
+ > filesystem. Check `watchman --version` and `watchman watch-list`.
570
+ ```
571
+
572
+ ## Workflow 6 — Push notifications
573
+
574
+ ```
575
+ you:
576
+ create push notification with expo-notifications
577
+
578
+ Claude (project-manager -> mobile-developer):
579
+ > Installs expo-notifications + expo-device.
580
+ > Configures:
581
+ > - app.json: plugins ["expo-notifications", { icon, color }]
582
+ > - iOS: requests notifyOnUserAction permission
583
+ > - Android: creates "default" channel on boot
584
+ > Creates:
585
+ > - services/notifications.service.ts:
586
+ > registerForPushNotificationsAsync()
587
+ > getExpoPushTokenAsync({ projectId })
588
+ > - hooks/useNotificationListener.ts:
589
+ > Notifications.addNotificationReceivedListener
590
+ > Notifications.addNotificationResponseReceivedListener
591
+ > - store/notifications.store.ts (list, badge count, mark-read)
592
+ > Backend (suggested):
593
+ > POST /api/v1/devices { expoPushToken, platform, locale }
594
+ > POST /api/v1/notifications/dispatch (server -> Expo Push API)
595
+ > Test: mock Notifications.scheduleNotificationAsync in jest setup.
596
+ > Next: configure permission in the onboarding flow.
597
+ ```
598
+
599
+ ## Workflow 7 — Deep linking
600
+
601
+ ```
602
+ you:
603
+ configure universal deep linking for /products/:id
604
+
605
+ Claude (mobile-developer):
606
+ > app.json:
607
+ > "scheme": "myapp",
608
+ > "ios": { "associatedDomains": ["applinks:myapp.com"] },
609
+ > "android": { "intentFilters": [{ "action": "VIEW",
610
+ > "data": [{ "scheme": "https", "host": "myapp.com",
611
+ > "pathPrefix": "/products" }], "category": ["BROWSABLE","DEFAULT"] }] }
612
+ > Expo Router automatically maps /products/[id] to app/products/[id].tsx.
613
+ > Creates:
614
+ > - app/products/[id].tsx (loads product via useProduct(id))
615
+ > - Linking.createURL helper in utils/links.ts
616
+ > Test:
617
+ > adb shell am start -W -a android.intent.action.VIEW \
618
+ > -d "myapp://products/42" com.example.myapp
619
+ > xcrun simctl openurl booted "myapp://products/42"
620
+ > Universal link requires apple-app-site-association + assetlinks.json
621
+ > hosted at https://myapp.com/.well-known/.
622
+ ```
623
+
624
+ ## Cheat sheet — mobile triggers
625
+
626
+ | I want to... | Type in chat |
627
+ |---|---|
628
+ | Create mobile app from scratch | `create mobile app with Expo SDK 54` |
629
+ | Add a screen with discovery | `grill me about <screen>` -> `generate PRD` -> `run sprint` |
630
+ | Biometric auth | `create auth flow with biometric` |
631
+ | Push notification | `create push notification with expo-notifications` |
632
+ | Deep link | `configure deep linking for /products/:id` |
633
+ | EAS Build | `configure EAS Build` |
634
+ | EAS Submit | `submit to Google Play and App Store` |
635
+ | Production OTA update | `generate OTA update production` |
636
+ | Migrate Angular -> RN | `convert Angular app to React Native` |
637
+ | Debug stuck Metro | `let's debug — Metro stuck` |
638
+ | Debug pod install | `let's debug — pod install fail` |
639
+ | Run tests | `run tests` |
640
+ | Final pre-store gate | `ready for production?` |
641
+ | Record history | `record in brain` |
642
+ | Remember preference | `remember that <X>` |
643
+
644
+ ## Decision tree
645
+
646
+ ```
647
+ Empty app? -> create mobile app with Expo SDK 54
648
+ (project-manager -> mobile-developer)
649
+
650
+ New screen or feature? -> grill me about <X>
651
+ -> generate PRD
652
+ -> analyst generate plan
653
+ -> run sprint N
654
+
655
+ Native auth (Face/Touch ID)? -> create auth flow with biometric
656
+
657
+ Notification? -> create push notification
658
+
659
+ Deep link / universal link? -> configure deep linking
660
+
661
+ Build for store? -> configure EAS Build
662
+ -> eas build --profile production
663
+
664
+ Update without review? -> generate OTA update production
665
+ (only if no native changes)
666
+
667
+ Angular conversion? -> convert Angular app to React Native
668
+
669
+ Mysterious crash? -> let's debug
670
+ (pair-debug hypothesis-driven)
671
+
672
+ Tests missing? -> run tests
673
+ (auto-test-guard + gate-keeper)
674
+ ```
675
+
676
+ ## Sub-agents relevant to mobile
677
+
678
+ | Agent | Model | Acts on |
679
+ |---|---|---|
680
+ | `mobile-developer` | Sonnet 4.6 | React Native 0.84+, Expo SDK 54+, New Architecture, TS strict, Reanimated 4, FlashList 2 |
681
+ | `ux-designer` | Sonnet 4.6 | Mobile-specific: touch targets (>= 44pt), safe area, dynamic type, dark mode |
682
+ | `architect` | Sonnet 4.6 | State mgmt (Zustand vs TanStack vs Jotai), navigation pattern, OTA strategy |
683
+ | `qa-engineer` | Sonnet 4.6 | Jest + RN Testing Library + Detox/Maestro |
684
+ | `gate-keeper` | Sonnet 4.6 | Senior+ gate adapted for mobile (Detox flakiness tolerated) |
685
+ | `devops-engineer` | Sonnet 4.6 | EAS Build, EAS Submit, EAS Update, fastlane (if bare workflow) |
686
+ | `tech-lead` | Opus 4.7 | Mobile stack decision, OTA strategy, native breaking changes |
687
+ | `product-owner` | Opus 4.7 | Scope, MVP iOS-first vs Android-first, mobile persona |
688
+ | `security-engineer` | Opus 4.7 | SecureStore, jailbreak/root detection, certificate pinning, OWASP MASVS |
689
+ | `database-engineer` | Sonnet 4.6 | MMKV schema, AsyncStorage migration, encrypted local DB (SQLite + sqlcipher) |
690
+
691
+ ## Senior+ gate adapted for mobile
692
+
693
+ | Metric | Threshold | Tool |
694
+ |---|---|---|
695
+ | Jest statements | >= 85% | `jest --coverage` |
696
+ | Jest branches | >= 80% | `jest --coverage` |
697
+ | RNTL a11y violations | 0 critical, 0 serious | adapted `jest-axe` |
698
+ | Detox/Maestro critical flows | 100% (retry up to 3x) | Detox runner |
699
+ | ESLint | 0 errors, 0 new warnings | `eslint --max-warnings 0` |
700
+ | TypeScript strict | no `any` in new code | `tsc --noEmit` |
701
+ | Bundle size delta | warn > 200KB, block > 500KB | `expo export` + size script |
702
+ | Cold start (Android median) | < 2500ms | EAS Build profile + Detox metrics |
703
+ | Crash-free sessions | >= 99.5% | Sentry/Bugsnag |
704
+
705
+ ## Active hooks in the harness
706
+
707
+ | Event | Script | Function |
708
+ |---|---|---|
709
+ | `UserPromptSubmit` | `prompt-gate-reminder.sh`, `on-prompt-submit.js` | Injects `[HONCHO MEMORY]` + senior+ gate reminder |
710
+ | `PreToolUse` (Bash) | `pre-push-guard.sh`, `block-test-deletion.sh` | Blocks direct push to main/develop; blocks deletion of `*.test.ts` / `*.e2e.ts` |
711
+ | `PostToolUse` (Edit/Write) | inline prettier, `post-edit-test-reminder.sh` | Formats + reminds to run suite |
712
+ | `Stop` | `stop-brain-reminder.sh`, `on-stop.js` | brain-keeper records session; Honcho stores context |
713
+
714
+ See [Hooks reference](../docs/hooks-reference).
715
+
716
+ ## Honcho memory in practice (mobile)
717
+
718
+ Save typical mobile preferences:
719
+
720
+ ```
721
+ remember that I always use React Native's New Architecture
722
+ remember that I prefer Zustand for local state and TanStack Query for server state
723
+ remember that MMKV for sync storage; AsyncStorage only on legacy projects
724
+ remember that never class components — only functional + hooks
725
+ remember that always TypeScript strict, zero any
726
+ remember that always FlashList on lists with more than 20 items
727
+ remember that iOS-first on consumer apps; Android-first on logistics apps
728
+ remember that OTA only for JS changes — native code requires rebuild
729
+ ```
730
+
731
+ Audit:
732
+
733
+ ```
734
+ /honcho list
735
+ /honcho search "OTA"
736
+ /honcho forget <id>
737
+ /honcho status
738
+ ```
739
+
740
+ See [Honcho memory](../docs/honcho-memory).
741
+
742
+ ## Antipatterns (DON'T do this)
743
+
744
+ - Class components — always functional + hooks
745
+ - `any` in TypeScript — gate-keeper blocks
746
+ - `duk <skill>` — doesn't exist, skills trigger by keyword in chat
747
+ - Inline styles without `StyleSheet.create` — slow on the shadow tree
748
+ - Skipping Detox/Maestro E2E on critical flows (auth, checkout, payment)
749
+ - AsyncStorage for token, password, PII — use `expo-secure-store`
750
+ - Libraries without New Architecture support (check before installing)
751
+ - FlatList on long lists — always FlashList 2+
752
+ - Reanimated 1/2 in new code — always 4+
753
+ - Outdated Cocoapods — sync version with Expo SDK
754
+ - Commit with `Co-Authored-By: Claude` — gate-keeper blocks
755
+ - Mentioning Claude/Anthropic/AI/LLM/assistant in commit messages
756
+ - OTA when native code changed — devices will crash
757
+ - Permission prompt for notification or camera without prior UI context
758
+
759
+ ## Mobile troubleshooting
760
+
761
+ **Metro cache corrupted after git pull:**
762
+
763
+ ```bash
764
+ watchman watch-del-all
765
+ rm -rf $TMPDIR/metro-* /tmp/metro-* node_modules/.cache
766
+ npx expo start --clear
767
+ ```
768
+
769
+ **pod install failing on Cocoapods version:**
770
+
771
+ ```bash
772
+ cd ios && pod deintegrate && pod install --repo-update
773
+ # If it persists:
774
+ sudo gem install cocoapods -v 1.15.2
775
+ ```
776
+
777
+ **Gradle daemon stuck (Android):**
778
+
779
+ ```bash
780
+ cd android && ./gradlew --stop
781
+ rm -rf ~/.gradle/caches/transforms-*
782
+ ./gradlew clean
783
+ ```
784
+
785
+ **AsyncStorage migration (legacy -> MMKV):**
786
+
787
+ Use `react-native-mmkv` with a one-shot migration helper at boot. Reads AsyncStorage, copies to MMKV, marks a migration flag.
788
+
789
+ **New Architecture incompatible with a lib:**
790
+
791
+ Check at https://github.com/reactwg/react-native-new-architecture/discussions/175. Lib without support: contact the maintainer or swap to an alternative.
792
+
793
+ **EAS Build failing on signing:**
794
+
795
+ Check:
796
+ - `eas.json` -> production profile -> credentials configured
797
+ - `eas credentials` -> verify Android keystore and iOS provisioning profile
798
+ - Active Apple developer membership
799
+ - Google Play service account with release permission
800
+
801
+ **OTA update not reaching devices:**
802
+
803
+ Checklist:
804
+ - `expo-updates` installed and configured
805
+ - `runtimeVersion` in `app.json` matches the production build
806
+ - Correct channel in `eas update --branch production`
807
+ - Devices opened the app at least once (background update)
808
+
809
+ **Push notification not firing on iOS:**
810
+
811
+ Check:
812
+ - aps-environment entitlement in provisioning profile
813
+ - "Push Notifications" capability in app.json
814
+ - APNs key configured in EAS (`eas credentials`)
815
+ - `notifyOnUserAction` permission requested and accepted
816
+
817
+ **Detox flaky:**
818
+
819
+ - Bump `waitFor(...).withTimeout(10000)`
820
+ - Use `device.disableSynchronization()` only at critical points
821
+ - Clean state between tests (`device.reloadReactNative()`)
822
+ - Retry up to 3x in CI (`--retries 3`)
823
+
824
+ ## Quick glossary
825
+
826
+ - **Skill** — entry point triggered by keyword match in the prompt. Defined in `.claude/skills/<slug>/SKILL.md`.
827
+ - **Agent** — specialist executor invoked via Task tool. Defined in `.claude/agents/<name>.md`.
828
+ - **Task tool** — harness mechanism to invoke subagents in parallel or sequence.
829
+ - **PLAN_*.md** — goal-ready technical plan in `docs/plans/`, generated by `analyst`.
830
+ - **PRD_*.md** — Product Requirements Document in `docs/prd/`.
831
+ - **DISCOVERY_*.md** — output of the `grill-me` interview in `docs/discovery/`.
832
+ - **ISSUES_*.md** — decomposed issues in `docs/issues/`.
833
+ - **ADR-NNN** — Architecture Decision Record in `docs/decisions/`.
834
+ - **EAS** — Expo Application Services. Build (cloud), Submit (auto-publish), Update (OTA).
835
+ - **OTA** — Over-The-Air update. JS update bypassing store review. JS/assets only.
836
+ - **New Architecture** — Fabric (renderer) + TurboModules + JSI. Replaces the old bridge.
837
+ - **FlashList** — Shopify's virtualized list. Replaces FlatList for performance.
838
+ - **MMKV** — native sync key-value storage (Facebook). Replaces AsyncStorage.
839
+ - **Detox** — gray-box E2E. Runs on real device or emulator.
840
+ - **Maestro** — black-box E2E via declarative YAML.
841
+ - **Expo Router** — file-based routing inspired by Next.js. Default in SDK 50+.
842
+ - **Zustand** — simple global store, no Redux boilerplate.
843
+ - **TanStack Query** — server state cache + sync (replaces SWR).
844
+ - **Reanimated** — UI-thread animations (JS worklet).
845
+ - **Senior+ gate** — non-negotiable quality gate.
846
+ - **Obsidian vault** — `docs/brain/` with daily/features/decisions.
847
+ - **Autonomy Matrix** — who-decides-what table.
848
+ - **Honcho** — persistent cross-session memory.
849
+
850
+ ## Cross references
851
+
852
+ - [Architecture overview](../docs/architecture-overview) — 2-layer model (skill + agent)
853
+ - [Agents reference](../docs/agents-reference) — all 25 agents
854
+ - [Skills reference](../docs/skills-reference) — all 18 skills
855
+ - [Pipeline](../docs/pipeline) — end-to-end flow
856
+ - [Quality gate](../docs/quality-gate) — senior+ thresholds
857
+ - [Stack rules](../docs/stack-rules) — mandatory conventions
858
+ - [Autonomy matrix](../docs/autonomy-matrix) — who decides what
859
+ - [Hooks reference](../docs/hooks-reference) — active hooks
860
+ - [Honcho memory](../docs/honcho-memory) — persistent memory
861
+ - [Git Flow](../docs/git-flow) — branches and commits
862
+ - [Troubleshooting](../docs/troubleshooting) — common issues
863
+ - [Backend manual](./backend) — Java 25 + Spring Boot 4
864
+ - [Frontend manual](./frontend) — Angular 21
865
+ - [Fullstack manual](./fullstack) — backend + frontend monorepo
866
+ - [Existing project manual](./existing-project) — adoption via active-project