@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.
- package/.claude/agents/analyst.md +198 -0
- package/.claude/agents/backend-developer.md +126 -0
- package/.claude/agents/brain-keeper.md +229 -0
- package/.claude/agents/code-reviewer.md +181 -0
- package/.claude/agents/database-engineer.md +94 -0
- package/.claude/agents/devops-engineer.md +141 -0
- package/.claude/agents/frontend-developer.md +97 -0
- package/.claude/agents/gate-keeper.md +118 -0
- package/.claude/agents/migrator.md +291 -0
- package/.claude/agents/mobile-developer.md +80 -0
- package/.claude/agents/n8n-specialist.md +94 -0
- package/.claude/agents/product-owner.md +115 -0
- package/.claude/agents/qa-engineer.md +232 -0
- package/.claude/agents/release-engineer.md +204 -0
- package/.claude/agents/scaffold.md +87 -0
- package/.claude/agents/security-engineer.md +199 -0
- package/.claude/agents/sprint-runner.md +44 -0
- package/.claude/agents/stack-resolver.md +84 -0
- package/.claude/agents/tech-lead.md +182 -0
- package/.claude/agents/update-template.md +54 -0
- package/.claude/agents/ux-designer.md +118 -0
- package/.claude/settings.json +44 -0
- package/.claude/skills/README.md +332 -0
- package/.claude/skills/active-project/SKILL.md +129 -0
- package/.claude/skills/api-integration-test/SKILL.md +64 -0
- package/.claude/skills/auto-test-guard/SKILL.md +237 -0
- package/.claude/skills/auto-test-guard/resources/backend-tests.md +20 -0
- package/.claude/skills/auto-test-guard/resources/e2e-tests.md +24 -0
- package/.claude/skills/auto-test-guard/resources/execution-report.md +49 -0
- package/.claude/skills/auto-test-guard/resources/frontend-tests.md +18 -0
- package/.claude/skills/auto-test-guard/resources/initial-setup.md +108 -0
- package/.claude/skills/auto-test-guard/resources/run-suite.md +48 -0
- package/.claude/skills/auto-test-guard/resources/senior-gate.md +19 -0
- package/.claude/skills/brain-keeper/SKILL.md +60 -0
- package/.claude/skills/brain-keeper/obsidian/app.json +9 -0
- package/.claude/skills/brain-keeper/obsidian/appearance.json +4 -0
- package/.claude/skills/brain-keeper/obsidian/core-plugins.json +20 -0
- package/.claude/skills/brain-keeper/obsidian/daily-notes.json +5 -0
- package/.claude/skills/brain-keeper/obsidian/graph.json +32 -0
- package/.claude/skills/brain-keeper/obsidian/snippets/folder-colors.css +90 -0
- package/.claude/skills/brain-keeper/obsidian/templates.json +5 -0
- package/.claude/skills/brain-keeper/templates/README.md +51 -0
- package/.claude/skills/brain-keeper/templates/adr.md +40 -0
- package/.claude/skills/brain-keeper/templates/bug.md +35 -0
- package/.claude/skills/brain-keeper/templates/daily.md +38 -0
- package/.claude/skills/brain-keeper/templates/feature.md +62 -0
- package/.claude/skills/brain-keeper/templates/meeting.md +34 -0
- package/.claude/skills/brain-keeper/templates/tech-debt.md +21 -0
- package/.claude/skills/caveman/SKILL.md +187 -0
- package/.claude/skills/create-stack-pack/SKILL.md +281 -0
- package/.claude/skills/grill-me/SKILL.md +79 -0
- package/.claude/skills/honcho-memory/SKILL.md +207 -0
- package/.claude/skills/honcho-memory/docs/api-endpoints-verified.md +75 -0
- package/.claude/skills/honcho-memory/hooks/on-prompt-submit.js +221 -0
- package/.claude/skills/honcho-memory/hooks/on-stop.js +193 -0
- package/.claude/skills/honcho-memory/lib/honcho-client.js +363 -0
- package/.claude/skills/honcho-memory/lib/memory-injector.js +93 -0
- package/.claude/skills/honcho-memory/package.json +32 -0
- package/.claude/skills/honcho-memory/scripts/cli.js +370 -0
- package/.claude/skills/honcho-memory/scripts/setup.js +109 -0
- package/.claude/skills/honcho-memory/tests/t001-api-endpoints-verified.test.js +89 -0
- package/.claude/skills/honcho-memory/tests/t002-structure.test.js +97 -0
- package/.claude/skills/honcho-memory/tests/t003-honcho-client.test.js +162 -0
- package/.claude/skills/honcho-memory/tests/t004-soft-delete.test.js +259 -0
- package/.claude/skills/honcho-memory/tests/t005-memory-injector.test.js +175 -0
- package/.claude/skills/honcho-memory/tests/t006-on-prompt-submit.test.js +215 -0
- package/.claude/skills/honcho-memory/tests/t007-on-stop.test.js +165 -0
- package/.claude/skills/honcho-memory/tests/t008-cli.test.js +214 -0
- package/.claude/skills/honcho-memory/tests/t009-setup.test.js +232 -0
- package/.claude/skills/honcho-memory/tests/t010-skill-md.test.js +114 -0
- package/.claude/skills/honcho-memory/tests/t011-settings-hooks.test.js +105 -0
- package/.claude/skills/honcho-memory/tests/t012-docs-update.test.js +106 -0
- package/.claude/skills/honcho-memory/tests/t013-smoke-e2e.test.js +90 -0
- package/.claude/skills/pair-debug/SKILL.md +288 -0
- package/.claude/skills/prd-ready-check/SKILL.md +58 -0
- package/.claude/skills/project-manager/SKILL.md +167 -0
- package/.claude/skills/quality-standards/SKILL.md +201 -0
- package/.claude/skills/quick-feature/SKILL.md +264 -0
- package/.claude/skills/run-sprint/SKILL.md +342 -0
- package/.claude/skills/scaffold/SKILL.md +58 -0
- package/.claude/skills/stack-discovery/SKILL.md +159 -0
- package/.claude/skills/test-coverage-auditor/SKILL.md +59 -0
- package/.claude/skills/to-issues/SKILL.md +163 -0
- package/.claude/skills/to-prd/SKILL.md +130 -0
- package/.claude/skills/update-template/SKILL.md +254 -0
- package/.claude/stacks/CODEOWNERS +30 -0
- package/.claude/stacks/README.md +88 -0
- package/.claude/stacks/_template.md +116 -0
- package/.claude/stacks/java/spring-boot-3.md +376 -0
- package/.claude/stacks/java/spring-boot-4.md +438 -0
- package/.claude/stacks/typescript/angular-18.md +420 -0
- package/.claude/stacks/typescript/angular-19.md +397 -0
- package/.claude/stacks/typescript/angular-21.md +494 -0
- package/CLAUDE.md +453 -0
- package/README.md +391 -0
- package/bin/cli.js +773 -0
- package/bin/lib/backup.js +62 -0
- package/bin/lib/detect-stack.js +476 -0
- package/bin/lib/help.js +233 -0
- package/bin/lib/identity.js +108 -0
- package/bin/lib/local-dir.js +69 -0
- package/bin/lib/manifest.js +236 -0
- package/bin/lib/sync-all.js +394 -0
- package/bin/lib/version-check.js +398 -0
- package/dashboard/db.js +199 -0
- package/dashboard/package.json +22 -0
- package/dashboard/public/app.js +709 -0
- package/dashboard/public/content/docs/agents-reference.en.md +911 -0
- package/dashboard/public/content/docs/architecture-overview.en.md +260 -0
- package/dashboard/public/content/docs/autonomy-matrix.en.md +186 -0
- package/dashboard/public/content/docs/git-flow.en.md +525 -0
- package/dashboard/public/content/docs/honcho-memory.en.md +394 -0
- package/dashboard/public/content/docs/hooks-reference.en.md +420 -0
- package/dashboard/public/content/docs/pipeline.en.md +400 -0
- package/dashboard/public/content/docs/quality-gate.en.md +315 -0
- package/dashboard/public/content/docs/skills-reference.en.md +500 -0
- package/dashboard/public/content/docs/stack-rules.en.md +362 -0
- package/dashboard/public/content/docs/troubleshooting.en.md +637 -0
- package/dashboard/public/content/manifest.json +102 -0
- package/dashboard/public/content/manual/backend.en.md +1138 -0
- package/dashboard/public/content/manual/existing-project.en.md +831 -0
- package/dashboard/public/content/manual/frontend.en.md +1065 -0
- package/dashboard/public/content/manual/fullstack.en.md +1508 -0
- package/dashboard/public/content/manual/mobile.en.md +866 -0
- package/dashboard/public/index.html +108 -0
- package/dashboard/public/style.css +610 -0
- package/dashboard/public/vendor/marked.min.js +69 -0
- package/dashboard/rtk.js +143 -0
- package/dashboard/server-app.js +403 -0
- package/dashboard/server.js +104 -0
- package/dashboard/test/sprint1.test.js +406 -0
- package/dashboard/test/sprint2.test.js +571 -0
- package/dashboard/test/sprint3.test.js +560 -0
- package/package.json +33 -0
- package/scripts/hooks/subagent-telemetry.sh +14 -0
- package/scripts/hooks/telemetry-writer.js +250 -0
- 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.
|