@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,637 @@
1
+ # Troubleshooting
2
+
3
+ Consolidated FAQ and problem-solving guide for `development-utility-kit`. Covers skills, agents, hooks, Honcho, stacks (backend, frontend, mobile, fullstack), adopting existing projects, the senior+ gate, and Git Flow.
4
+
5
+ > **Principle**: try the specialist agent for the area first. Only escalate to a human in the 4 Product Owner situations or 3 Tech Lead situations described at the end of this document.
6
+
7
+ Each item follows the pattern:
8
+
9
+ - **Symptom** — what you see.
10
+ - **Cause** — why it happens.
11
+ - **Solution** — command or step-by-step.
12
+
13
+ ## Skills
14
+
15
+ ### Skill does not trigger on a trigger phrase
16
+
17
+ - **Symptom**: you write "audit coverage" but `test-coverage-auditor` does not run.
18
+ - **Cause**: the skill's frontmatter `description` does not exactly match the phrase you used. Matching is keyword-based on the frontmatter.
19
+ - **Solution**: open `.claude/skills/<skill>/SKILL.md`, read the `description`, adjust your phrase, or edit the description to include the synonym:
20
+ ```bash
21
+ cat .claude/skills/test-coverage-auditor/SKILL.md | head -20
22
+ ```
23
+ Restart the session after editing the frontmatter.
24
+
25
+ ### Specific skill overridden by `project-manager`
26
+
27
+ - **Symptom**: when asking "review code", `project-manager` (catch-all) answers instead of the more specific skill.
28
+ - **Cause**: no specific skill matched the exact phrase; the catch-all takes over.
29
+ - **Solution**: prefer the canonical phrase from the skill (see the "Skills" table in `CLAUDE.md`). E.g., for PR review use "review the PR" or "audit this change". A more specific skill always wins on match.
30
+
31
+ ### `caveman` cutting too much substance
32
+
33
+ - **Symptom**: responses become so telegraphic they omit necessary context.
34
+ - **Cause**: caveman is in ULTRA mode (default for code).
35
+ - **Solution**: downgrade explicitly:
36
+ ```
37
+ caveman lite
38
+ ```
39
+ or turn it off entirely:
40
+ ```
41
+ stop caveman
42
+ ```
43
+ Re-enable when you want: `caveman full`.
44
+
45
+ ### `honcho-memory` skill does not inject `[HONCHO MEMORY]` block
46
+
47
+ - **Symptom**: you saved memories but the block does not appear at the start of responses.
48
+ - **Cause**: the `UserPromptSubmit` hook that injects the block is not configured in `.claude/settings.json`.
49
+ - **Solution**: run `/honcho setup` or manually edit `settings.json` (see Honcho section below).
50
+
51
+ ## Agents
52
+
53
+ ### Agent `analyst` returns "Discovery artifact missing"
54
+
55
+ - **Symptom**: when asking "break into PLAN", `analyst` refuses with a message about a discovery artifact.
56
+ - **Cause**: ADR-013/ADR-017 require `docs/discovery/DISCOVERY_*.md` produced by `grill-me` before `analyst` can be invoked by a human.
57
+ - **Solution**:
58
+ ```
59
+ grill-me
60
+ ```
61
+ Answer the interview; `grill-me` generates `DISCOVERY_*.md` and hands off to `analyst` automatically. Autonomous callers (`sprint-runner`, `release-engineer`) are exempt.
62
+
63
+ ### `sprint-runner` stopped mid-checkpoint
64
+
65
+ - **Symptom**: the agent stopped after Sprint X and did not resume Sprint X+1.
66
+ - **Cause**: intermittent error or session token limit.
67
+ - **Solution**: continue manually:
68
+ ```
69
+ run sprint X+1
70
+ ```
71
+ If it persists, read the latest `PLAN_*.md` to understand where it stopped and open a ticket.
72
+
73
+ ### `tech-lead` does not approve merge
74
+
75
+ - **Symptom**: PR stays in "changes requested" without approval.
76
+ - **Cause**: senior+ gate failed OR a convention is violated (separate Angular files, commit with AI reference, etc.).
77
+ - **Solution**: read the `tech-lead`'s diagnosis in the PR comment. Send back to the indicated developer (`backend-developer`, `frontend-developer`) with the requested fix. Do not manually approve.
78
+
79
+ ### Agent chosen by `project-manager` seems wrong
80
+
81
+ - **Symptom**: you asked "design DB" and it triggered `backend-developer` instead of `database-engineer`.
82
+ - **Cause**: ambiguous keyword.
83
+ - **Solution**: be explicit: "use database-engineer to design schema for X". `project-manager` accepts override.
84
+
85
+ ### Agent escalates directly to human unnecessarily
86
+
87
+ - **Symptom**: specialist asks "what's your preference?" instead of deciding.
88
+ - **Cause**: violation of the Autonomy Matrix.
89
+ - **Solution**: reply "you decide" and cite the rule. If it persists, open a ticket — it may be drift in the agent prompt.
90
+
91
+ ## Hooks (Claude Code)
92
+
93
+ > These are Claude Code hooks (`PostToolUse`, `UserPromptSubmit`, etc.), different from git hooks (see [Git Flow](git-flow)).
94
+
95
+ ### Hook blocks every write
96
+
97
+ - **Symptom**: every `Write` call returns a hook error.
98
+ - **Cause**: `pre-push-guard.sh` or another script exited with exit != 0; or the script path in `settings.json` is invalid.
99
+ - **Solution**: read hook stderr in the log. Check the script's exit code. Edit `.claude/settings.json` and temporarily disable:
100
+ ```json
101
+ "hooks": {
102
+ "PostToolUse": []
103
+ }
104
+ ```
105
+
106
+ ### Hook script not found
107
+
108
+ - **Symptom**: `python3: can't open file '.../scripts/check-sql-files.py'` or similar.
109
+ - **Cause**: `settings.json` references up to 5 scripts in `scripts/hooks/` that were not created yet in the project.
110
+ - **Solution**: create the script with a stub that returns 0:
111
+ ```python
112
+ #!/usr/bin/env python3
113
+ # stub hook — replace with real validation later
114
+ import sys
115
+ sys.exit(0)
116
+ ```
117
+ Or remove the entry from `settings.json` if the hook is not needed in this project.
118
+
119
+ ### `${CLAUDE_PLUGIN_ROOT}` not resolved
120
+
121
+ - **Symptom**: the path appears literal in logs (with `${CLAUDE_PLUGIN_ROOT}` instead of expanded value).
122
+ - **Cause**: the plugin's environment variable is not available on the machine/session.
123
+ - **Solution**: two options:
124
+ 1. Export the variable before starting Claude:
125
+ ```bash
126
+ export CLAUDE_PLUGIN_ROOT=/path/to/development-utility-kit
127
+ ```
128
+ 2. Remove the hook from `settings.json` if it is not required locally.
129
+
130
+ ### Prettier fails in `PostToolUse`
131
+
132
+ - **Symptom**: format hook fails with `prettier: command not found`.
133
+ - **Cause**: `node_modules/.bin/prettier` does not exist.
134
+ - **Solution**:
135
+ ```bash
136
+ npm install --save-dev prettier
137
+ npx prettier --version # confirm installation
138
+ ```
139
+
140
+ ### Hook runs in an infinite loop
141
+
142
+ - **Symptom**: PostToolUse hook re-triggers when it edits the same file it observes.
143
+ - **Cause**: the hook writes to the same path it watches.
144
+ - **Solution**: add a `matcher` filter in `settings.json` to exclude the tool type, or use timestamp/flag guarding.
145
+
146
+ ## Honcho memory
147
+
148
+ ### `/honcho status` returns FAIL
149
+
150
+ - **Symptom**: Honcho status shows connection error.
151
+ - **Cause**: `~/.honcho/config.json` missing, malformed, or Honcho server offline at the configured endpoint.
152
+ - **Solution**: check the config:
153
+ ```bash
154
+ cat ~/.honcho/config.json
155
+ ```
156
+ Test the endpoint manually:
157
+ ```bash
158
+ curl https://honcho.<your-host>/v3/health
159
+ ```
160
+ Reconfigure with `/honcho setup` if needed.
161
+
162
+ ### `[HONCHO MEMORY]` block does not appear in prompt
163
+
164
+ - **Symptom**: saved memories exist but are not injected.
165
+ - **Cause**: `UserPromptSubmit` hook that injects them is missing from `.claude/settings.json`.
166
+ - **Solution**: run `/honcho setup` to reconfigure, or add manually:
167
+ ```json
168
+ "hooks": {
169
+ "UserPromptSubmit": [
170
+ {"command": "node .claude/skills/honcho-memory/inject.js"}
171
+ ]
172
+ }
173
+ ```
174
+
175
+ ### Old memories reappear even after `/honcho forget`
176
+
177
+ - **Symptom**: deleted memory keeps being surfaced.
178
+ - **Cause**: Honcho inference re-creates the memory from recent prompts (`inferenceEnabled: true`).
179
+ - **Solution**: disable inference in `~/.honcho/config.json`:
180
+ ```json
181
+ { "inferenceEnabled": false }
182
+ ```
183
+ Or accept that inferred memories may come back and use `/honcho forget` repeatedly for rare patterns.
184
+
185
+ ### Forgot dry-run mode
186
+
187
+ - **Symptom**: local tests saved real memories to the server.
188
+ - **Cause**: `HONCHO_DRY_RUN=1` was not set.
189
+ - **Solution**: for future tests, export:
190
+ ```bash
191
+ export HONCHO_DRY_RUN=1
192
+ ```
193
+ To clean server garbage: `/honcho list` -> identify test entries -> `/honcho forget`.
194
+
195
+ ### `/honcho save` does not persist across sessions
196
+
197
+ - **Symptom**: you saved in session A, opened session B, and the memory is gone.
198
+ - **Cause**: different `peerId` between sessions (different machine, different profile).
199
+ - **Solution**: confirm `peerId` in `~/.honcho/config.json`. Keep the same one across all machines used by the same dev.
200
+
201
+ ## Backend (Java 25 + Spring Boot 4)
202
+
203
+ ### Port 8080 in use
204
+
205
+ - **Symptom**: `Web server failed to start. Port 8080 was already in use.`
206
+ - **Cause**: another process (another app, container) occupies the port.
207
+ - **Solution**:
208
+ ```bash
209
+ # Linux/Mac
210
+ lsof -i :8080 | grep LISTEN
211
+ # Windows (PowerShell)
212
+ netstat -ano | findstr :8080
213
+ taskkill /PID <pid> /F
214
+ ```
215
+ Or change `server.port` in `application.yml`.
216
+
217
+ ### Wrong JDK (different version than required)
218
+
219
+ - **Symptom**: compile errors like `record` not recognized, or `release version X not supported`.
220
+ - **Cause**: active JDK is < 25.
221
+ - **Solution** (sdkman):
222
+ ```bash
223
+ sdk list java | grep 25
224
+ sdk install java 25.0.1-tem
225
+ sdk use java 25.0.1-tem
226
+ java -version # must show 25
227
+ ```
228
+
229
+ ### Flyway lock stuck
230
+
231
+ - **Symptom**: migrations do not run and the log shows `unable to acquire lock`.
232
+ - **Cause**: a previous process died without releasing the lock in `flyway_schema_history`.
233
+ - **Solution**:
234
+ ```bash
235
+ ./mvnw flyway:repair
236
+ ```
237
+ Or via SQL:
238
+ ```sql
239
+ DELETE FROM flyway_schema_history WHERE success = false;
240
+ ```
241
+
242
+ ### CORS blocking in production
243
+
244
+ - **Symptom**: frontend receives missing `Access-Control-Allow-Origin`.
245
+ - **Cause**: `SecurityFilterChain` with `*` in dev but restricted in prod, or missing CORS config.
246
+ - **Solution**: never use `*` in prod. Configure explicit domains:
247
+ ```java
248
+ config.setAllowedOrigins(List.of("https://app.company.com"));
249
+ ```
250
+
251
+ ### Secret in code
252
+
253
+ - **Symptom**: `security-engineer` or `gate-keeper` blocks PR with credential detected message.
254
+ - **Cause**: password, token, or key hardcoded in `.java`, `.yml`, `.properties`.
255
+ - **Solution**: move to env var or Vault. Rewrite history if the secret was already committed:
256
+ ```bash
257
+ git filter-repo --invert-paths --path <file>
258
+ ```
259
+ And revoke the secret at the provider immediately.
260
+
261
+ ### Testcontainers do not start in CI
262
+
263
+ - **Symptom**: `Could not find a valid Docker environment` in GitHub Actions.
264
+ - **Cause**: runner without Docker in daemon mode.
265
+ - **Solution**: use `ubuntu-latest` (has Docker), or run `docker info` in a step before `mvn verify`.
266
+
267
+ ## Frontend (Angular 21)
268
+
269
+ ### HMR not refreshing
270
+
271
+ - **Symptom**: saving file does not reload the browser.
272
+ - **Cause**: filesystem watch does not trigger (WSL, Docker volume, polling required).
273
+ - **Solution**:
274
+ ```bash
275
+ npm start -- --poll=500
276
+ ```
277
+
278
+ ### Signal does not dispatch — `OnPush` stale
279
+
280
+ - **Symptom**: state changed but component does not re-render.
281
+ - **Cause**: you mutated the array instead of creating a new reference (`signal().push(item)`).
282
+ - **Solution**:
283
+ ```ts
284
+ // Wrong
285
+ this.items().push(newItem);
286
+ // Right
287
+ this.items.update(arr => [...arr, newItem]);
288
+ // Or
289
+ this.items.set([...this.items(), newItem]);
290
+ ```
291
+
292
+ ### `ChangeDetectorRef.markForCheck()` abuse
293
+
294
+ - **Symptom**: you need to call `cdr.markForCheck()` everywhere.
295
+ - **Cause**: Signals are not being used — you are still in old zone.js pattern.
296
+ - **Solution**: refactor state management to use Signals consistently. They propagate changes automatically in `OnPush`.
297
+
298
+ ### Bundle > 500KB
299
+
300
+ - **Symptom**: build warning about exceeded bundle budget.
301
+ - **Cause**: heavy imports, large dependencies, no lazy loading.
302
+ - **Solution**:
303
+ ```bash
304
+ npm run build -- --stats-json
305
+ npx webpack-bundle-analyzer dist/browser/stats.json
306
+ ```
307
+ Identify heavy imports, fragment into lazy routes, remove unused dependencies.
308
+
309
+ ### E2E timeout (Playwright)
310
+
311
+ - **Symptom**: `Test timeout of 30000ms exceeded`.
312
+ - **Cause**: browser not installed, app slow to start, wrong selector.
313
+ - **Solution**:
314
+ ```bash
315
+ npx playwright install --with-deps
316
+ ```
317
+ Increase the timeout in `playwright.config.ts` only if the app is legitimately slow:
318
+ ```ts
319
+ timeout: 60_000
320
+ ```
321
+
322
+ ### `templateUrl` pointing to missing file
323
+
324
+ - **Symptom**: build breaks with `ENOENT: no such file 'name.html'`.
325
+ - **Cause**: someone tried inline template and broke it. Reminder: three separate files are **mandatory**.
326
+ - **Solution**: create `name.html` and `name.scss` next to `name.ts`, and use:
327
+ ```ts
328
+ @Component({
329
+ templateUrl: './name.html',
330
+ styleUrl: './name.scss'
331
+ })
332
+ ```
333
+
334
+ ## Mobile (React Native + Expo)
335
+
336
+ ### `pod install` fails (iOS)
337
+
338
+ - **Symptom**: pod version or checksum errors.
339
+ - **Solution**:
340
+ ```bash
341
+ cd ios && pod install --repo-update
342
+ # If it persists:
343
+ rm -rf ios/Pods ios/Podfile.lock
344
+ cd ios && pod install
345
+ ```
346
+
347
+ ### Gradle daemon stuck (Android)
348
+
349
+ - **Symptom**: build hangs at `Daemon will be stopped`.
350
+ - **Solution**:
351
+ ```bash
352
+ cd android && ./gradlew --stop
353
+ ./gradlew clean
354
+ npx expo run:android
355
+ ```
356
+
357
+ ### Metro cache corrupted
358
+
359
+ - **Symptom**: app starts with `Cannot find module` error.
360
+ - **Solution**:
361
+ ```bash
362
+ npx expo start --clear
363
+ # Or force full cleanup:
364
+ watchman watch-del-all
365
+ rm -rf $TMPDIR/metro-*
366
+ npx expo start --clear
367
+ ```
368
+
369
+ ### `AsyncStorage` deprecated
370
+
371
+ - **Symptom**: warning about core AsyncStorage.
372
+ - **Cause**: native package removed in RN 0.73+.
373
+ - **Solution**:
374
+ ```bash
375
+ npm install @react-native-async-storage/async-storage
376
+ ```
377
+ And adjust imports.
378
+
379
+ ### Library incompatible with New Architecture
380
+
381
+ - **Symptom**: app crashes at runtime with TurboModule error.
382
+ - **Cause**: lib still uses legacy bridge.
383
+ - **Solution**: check compatibility on `reactnative.directory` (filter "New Architecture"). Use `npx react-native-community-upgrade-helper` for breaking changes in your version.
384
+
385
+ ## Fullstack
386
+
387
+ ### CORS blocking Angular -> Spring
388
+
389
+ - **Symptom**: missing `Access-Control-Allow-Origin` in front-end calls.
390
+ - **Cause**: `CorsConfig` in the backend does not include `http://localhost:4200`.
391
+ - **Solution**: add to `WebMvcConfigurer` or `SecurityFilterChain`:
392
+ ```java
393
+ config.setAllowedOrigins(List.of("http://localhost:4200"));
394
+ config.setAllowedMethods(List.of("GET","POST","PUT","DELETE","PATCH"));
395
+ config.setAllowCredentials(true);
396
+ ```
397
+
398
+ ### TS types out of sync with backend
399
+
400
+ - **Symptom**: frontend interface differs from real payload.
401
+ - **Cause**: backend contract changed but types were not regenerated.
402
+ - **Solution**:
403
+ ```bash
404
+ npx openapi-typescript http://localhost:8080/v3/api-docs -o src/types/api.d.ts
405
+ ```
406
+ Add this step to CI so it fails when the contract changes without type updates.
407
+
408
+ ### Docker compose network — frontend cannot reach backend
409
+
410
+ - **Symptom**: frontend returns `ECONNREFUSED` or `getaddrinfo ENOTFOUND backend`.
411
+ - **Cause**: frontend uses `localhost` instead of the Docker service name.
412
+ - **Solution**: inside the Docker network, use the service name:
413
+ ```yaml
414
+ environment:
415
+ API_URL: http://backend:8080
416
+ ```
417
+ In the dev's browser, use `http://localhost:8080` (exposed port).
418
+
419
+ ### Backend starts after frontend
420
+
421
+ - **Symptom**: frontend loads before backend is ready and breaks.
422
+ - **Cause**: `depends_on` without a healthcheck condition.
423
+ - **Solution**: add `HEALTHCHECK` in the backend Dockerfile and use `condition: service_healthy`:
424
+ ```yaml
425
+ depends_on:
426
+ backend:
427
+ condition: service_healthy
428
+ ```
429
+
430
+ ### Port 4200 already in use
431
+
432
+ - **Solution**:
433
+ ```bash
434
+ npm start -- --port 4201
435
+ ```
436
+
437
+ ## Adopting an existing project
438
+
439
+ ### `update-template` destroyed custom rules
440
+
441
+ - **Symptom**: your `CLAUDE.md` was reset to default, losing the `Project Identity` section.
442
+ - **Cause**: merge failed to preserve the custom section.
443
+ - **Solution**: restore from backup:
444
+ ```bash
445
+ ls CLAUDE.md.bak.*
446
+ cp CLAUDE.md.bak.2026-05-26 CLAUDE.md
447
+ ```
448
+ Reapply customization manually by comparing with the new template.
449
+
450
+ ### Vault without `.obsidian/`
451
+
452
+ - **Symptom**: `brain-keeper` does not write into `docs/brain/`.
453
+ - **Cause**: Obsidian vault structure was not created.
454
+ - **Solution**:
455
+ ```bash
456
+ mkdir -p docs/brain/.obsidian
457
+ ```
458
+ Run `brain-keeper` again.
459
+
460
+ ### Agents with wrong path
461
+
462
+ - **Symptom**: agent references missing file in `.claude/agents/`.
463
+ - **Cause**: `active-project` failed partially.
464
+ - **Solution**:
465
+ ```bash
466
+ duk active-project <path> --force
467
+ ```
468
+
469
+ ### `settings.json` merge conflicts
470
+
471
+ - **Symptom**: duplicated or missing hooks after `update-template`.
472
+ - **Cause**: file is not automatically merged — it overwrites.
473
+ - **Solution**: manually compare with `.claude/settings.json.bak.*` and preserve local rules.
474
+
475
+ ### Missing Honcho config
476
+
477
+ - **Symptom**: `/honcho` returns "skill not found".
478
+ - **Solution**:
479
+ ```bash
480
+ ls .claude/skills/honcho-memory/
481
+ # Must contain: config.json, SKILL.md, honcho.js
482
+ ```
483
+ If missing, run `duk update-template` to restore.
484
+
485
+ ## Senior+ gate / quality
486
+
487
+ ### Coverage < 85%
488
+
489
+ - **Symptom**: `gate-keeper` failed with "Backend coverage (lines) 78% < 85%".
490
+ - **Cause**: new files without tests, or uncovered paths.
491
+ - **Solution**: call `qa-engineer` or let `gate-keeper` generate missing tests automatically. Per-file coverage:
492
+ ```bash
493
+ ./mvnw jacoco:report
494
+ open target/site/jacoco/index.html
495
+ ```
496
+
497
+ ### Mutation score < 70%
498
+
499
+ - **Symptom**: PIT failed with mutation < 70% in `domain/` or `application/`.
500
+ - **Cause**: tests exist but do not kill mutations — usually weak asserts.
501
+ - **Solution**:
502
+ ```bash
503
+ ./mvnw verify -Ppitest
504
+ open target/pit-reports/index.html
505
+ ```
506
+ Strengthen asserts (use `assertThat(...).isEqualTo(...)` instead of `assertNotNull`).
507
+
508
+ ### Lighthouse < 0.80
509
+
510
+ - **Symptom**: gate fails on performance.
511
+ - **Cause**: LCP, CLS, or TBT above threshold.
512
+ - **Solution**: analyze each metric:
513
+ - LCP > 2500ms: heavy hero image, custom font without `font-display: swap`.
514
+ - CLS > 0.1: images without `width/height` causing layout shift.
515
+ - TBT > 300ms: large JS bundle, insufficient lazy loading.
516
+
517
+ ### A11y violations serious/critical
518
+
519
+ - **Symptom**: jest-axe or playwright-axe failed.
520
+ - **Cause**: insufficient contrast, missing label, broken tab order.
521
+ - **Solution**: read the axe report. Each violation has a link to WCAG. Fix in the component — `ux-designer` can help.
522
+
523
+ ### SpotBugs CRITICAL
524
+
525
+ - **Symptom**: build fails with critical SpotBugs bug.
526
+ - **Solution**:
527
+ ```bash
528
+ ./mvnw spotbugs:gui
529
+ ```
530
+ Investigate every CRITICAL/HIGH. Do not ignore — fix or justify in `@SuppressFBWarnings` with a clear reason.
531
+
532
+ ### `npm audit` HIGH/CRITICAL
533
+
534
+ - **Symptom**: gate fails on dependency vulnerability.
535
+ - **Solution**:
536
+ ```bash
537
+ npm audit fix
538
+ # For vulns requiring breaking change:
539
+ npm audit fix --force # caution, may bump major
540
+ ```
541
+
542
+ ## Git Flow / commits
543
+
544
+ ### Commit with "Claude" / "Anthropic" / "AI" in the body
545
+
546
+ - **Symptom**: `tech-lead` blocked the PR for commit restriction.
547
+ - **Cause**: violation of the non-negotiable rule documented in [Git Flow](git-flow).
548
+ - **Solution**: rewrite history:
549
+ ```bash
550
+ # Latest commit:
551
+ git commit --amend
552
+ # Several commits:
553
+ git rebase -i HEAD~N
554
+ # Mark each as `reword`, save, edit the message.
555
+ ```
556
+ If already pushed on your own branch:
557
+ ```bash
558
+ git push --force-with-lease origin feature/<your-branch>
559
+ ```
560
+
561
+ ### PR rejected by `tech-lead`
562
+
563
+ - **Symptom**: review with "changes requested".
564
+ - **Cause**: senior+ gate failed, convention violated, or the separate-Angular-files rule broken.
565
+ - **Solution**: read the `tech-lead`'s inline diagnosis on the PR. Send back to the indicated developer with the fix. Do not force the merge.
566
+
567
+ ### Wrong target branch for PR
568
+
569
+ - **Symptom**: you opened a PR from `feature/x` directly to `main`.
570
+ - **Cause**: confusion about the correct target.
571
+ - **Solution**: close the PR, recreate it:
572
+ ```bash
573
+ gh pr create --base develop --head feature/x
574
+ ```
575
+ Remember: `feature/*` -> `develop`, `hotfix/*` -> `main` + `develop`.
576
+
577
+ ### Forgot hotfix back-merge into `develop`
578
+
579
+ - **Symptom**: same bug regresses in the next release.
580
+ - **Cause**: hotfix landed in `main` but not in `develop`.
581
+ - **Solution**:
582
+ ```bash
583
+ git checkout develop
584
+ git cherry-pick <fix-SHA-from-main>
585
+ git push origin develop
586
+ ```
587
+
588
+ ### Accidental force push on shared branch
589
+
590
+ - **Symptom**: other devs complain that pull fails.
591
+ - **Cause**: you did `git push --force` on `main`/`develop`/`release/*`.
592
+ - **Solution**: WHILE STILL FRESH — ask another dev with the full local history to do:
593
+ ```bash
594
+ git push --force-with-lease origin <branch>
595
+ ```
596
+ to restore. Rewriting shared history is an incident — notify `tech-lead`.
597
+
598
+ ### Commit outside Conventional Commits
599
+
600
+ - **Symptom**: `commit-msg` hook rejected it or `tech-lead` complained in review.
601
+ - **Solution**: `git commit --amend` and use the `<type>(<scope>): <description>` format. See types in [Git Flow](git-flow).
602
+
603
+ ## When to open a ticket / ask for human help
604
+
605
+ Specialists **DO NOT** escalate to a human directly. Only PO or TL escalate, and only in the following situations:
606
+
607
+ ### Product Owner escalates ONLY in 4 situations
608
+
609
+ 1. Irreversible action on real customer data (delete/overwrite without backup).
610
+ 2. Relevant financial cost (paid SaaS, tier change).
611
+ 3. Breaking change on PUBLIC contract already published (external client).
612
+ 4. Identity/brand change approved by another area.
613
+
614
+ ### Tech Lead escalates ONLY in 3 situations
615
+
616
+ 1. Technical requirement conflict that cannot be resolved by grounding.
617
+ 2. Breaking change on public production contract (window with external client).
618
+ 3. Infra cost > R$ 200/month additional.
619
+
620
+ ### Escalation format
621
+
622
+ Never an open question. Always **proposal + recommendation + impact of the opposite decision**:
623
+
624
+ > "Provision managed Redis Cluster (+R$ 380/month) to support 10x traffic in 6 months. I recommend approving now; if we keep single-node, cache queue in 2 months."
625
+
626
+ See [Autonomy matrix](autonomy-matrix) for full details.
627
+
628
+ ## Cross-references
629
+
630
+ - [Agents reference](agents-reference) — when to call each agent.
631
+ - [Skills reference](skills-reference) — triggers and responsibilities of each skill.
632
+ - [Hooks reference](hooks-reference) — Claude Code hooks (do not confuse with git hooks).
633
+ - [Honcho memory](honcho-memory) — persistent cross-session memory.
634
+ - [Git Flow](git-flow) — branch, commit, and PR flow.
635
+ - [Quality gate](quality-gate) — thresholds and tools.
636
+ - [Autonomy matrix](autonomy-matrix) — who decides what.
637
+ - [Pipeline](pipeline) — standard task pipeline.