hool-cli 0.7.4 → 0.9.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/dist/adapters/adapters.test.js +88 -10
- package/dist/adapters/adapters.test.js.map +1 -1
- package/dist/adapters/claude-code.js +48 -31
- package/dist/adapters/claude-code.js.map +1 -1
- package/dist/adapters/types.d.ts +2 -0
- package/dist/core/scaffold.d.ts +4 -4
- package/dist/core/scaffold.js +151 -48
- package/dist/core/scaffold.js.map +1 -1
- package/dist/core/templates.d.ts +2 -0
- package/dist/core/templates.js +31 -0
- package/dist/core/templates.js.map +1 -1
- package/dist/e2e.test.js +241 -1
- package/dist/e2e.test.js.map +1 -1
- package/dist/index.js +23 -12
- package/dist/index.js.map +1 -1
- package/dist/mcps/mcps.test.js +1 -0
- package/dist/mcps/mcps.test.js.map +1 -1
- package/package.json +4 -8
- package/presets/solo/NEXT-v0.1-context-mcp.md +95 -0
- package/presets/solo/docs/workflow-reference.md +784 -0
- package/presets/solo/mcps/README.md +129 -0
- package/presets/solo/mcps/testing-by-domain.md +138 -0
- package/presets/solo/memory/be-dev/best-practices.md +0 -0
- package/presets/solo/memory/be-dev/cold.md +4 -0
- package/presets/solo/memory/be-dev/hot.md +0 -0
- package/presets/solo/memory/be-dev/issues.md +0 -0
- package/presets/solo/memory/be-tech-lead/best-practices.md +0 -0
- package/presets/solo/memory/be-tech-lead/cold.md +4 -0
- package/presets/solo/memory/be-tech-lead/hot.md +0 -0
- package/presets/solo/memory/be-tech-lead/issues.md +0 -0
- package/presets/solo/memory/fe-dev/best-practices.md +0 -0
- package/presets/solo/memory/fe-dev/cold.md +4 -0
- package/presets/solo/memory/fe-dev/hot.md +0 -0
- package/presets/solo/memory/fe-dev/issues.md +0 -0
- package/presets/solo/memory/fe-tech-lead/best-practices.md +0 -0
- package/presets/solo/memory/fe-tech-lead/cold.md +4 -0
- package/presets/solo/memory/fe-tech-lead/hot.md +0 -0
- package/presets/solo/memory/fe-tech-lead/issues.md +0 -0
- package/presets/solo/memory/forensic/best-practices.md +0 -0
- package/presets/solo/memory/forensic/cold.md +4 -0
- package/presets/solo/memory/forensic/hot.md +0 -0
- package/presets/solo/memory/forensic/issues.md +0 -0
- package/presets/solo/memory/product-lead/best-practices.md +0 -0
- package/presets/solo/memory/product-lead/cold.md +5 -0
- package/presets/solo/memory/product-lead/hot.md +0 -0
- package/presets/solo/memory/product-lead/issues.md +0 -0
- package/presets/solo/memory/qa/best-practices.md +0 -0
- package/presets/solo/memory/qa/cold.md +4 -0
- package/presets/solo/memory/qa/hot.md +0 -0
- package/presets/solo/memory/qa/issues.md +0 -0
- package/presets/solo/operations/bugs.md +10 -0
- package/presets/solo/operations/current-phase.md +8 -0
- package/presets/solo/operations/inconsistencies.md +8 -0
- package/presets/solo/operations/issues.md +11 -0
- package/presets/solo/operations/metrics.md +4 -0
- package/presets/solo/operations/needs-human-review.md +8 -0
- package/presets/solo/operations/task-board.md +10 -0
- package/presets/team/agents/claude/be-dev.md +166 -0
- package/presets/team/agents/claude/be-tech-lead.md +233 -0
- package/presets/team/agents/claude/fe-dev.md +202 -0
- package/presets/team/agents/claude/fe-tech-lead.md +229 -0
- package/presets/team/agents/claude/forensic.md +158 -0
- package/presets/team/agents/claude/governor.md +99 -0
- package/presets/team/agents/claude/product-lead.md +602 -0
- package/presets/team/agents/claude/qa.md +155 -0
- package/presets/team/cli/git-setup.md +175 -0
- package/presets/team/hooks/completion-checklist.sh +39 -0
- package/presets/team/hooks/governor-trigger.sh +30 -0
- package/presets/team/hooks/identity-reminder.sh +30 -0
- package/presets/team/hooks/login-nudge.sh +64 -0
- package/presets/team/hooks/metrics.sh +23 -0
- package/presets/team/mcps/mcps.json +50 -0
- package/presets/team/mcps/testing-by-domain.md +68 -0
- package/presets/team/prompts/claude-md.md +185 -0
- package/presets/team/settings/claude-settings.json +76 -0
- package/presets/team/skills/architect.md +75 -0
- package/presets/team/skills/auditor.md +89 -0
- package/presets/team/skills/brainstormer.md +53 -0
- package/presets/team/skills/code-reviewer.md +77 -0
- package/presets/team/skills/contract-negotiator.md +98 -0
- package/presets/team/skills/designer.md +87 -0
- package/presets/team/skills/root-cause-analyst.md +85 -0
- package/presets/team/skills/speccer.md +85 -0
- package/presets/team/skills/tdd-implementer.md +104 -0
- package/presets/team/skills/test-engineer.md +87 -0
- package/presets/team/templates/memory/best-practices.md +6 -0
- package/presets/team/templates/memory/client-preferences.md +14 -0
- package/presets/team/templates/memory/cold.md +5 -0
- package/presets/team/templates/memory/governor-feedback.md +5 -0
- package/presets/team/templates/memory/hot.md +12 -0
- package/presets/team/templates/memory/identity.md +22 -0
- package/presets/team/templates/memory/issues.md +9 -0
- package/presets/team/templates/memory/operational-knowledge.md +19 -0
- package/presets/team/templates/memory/picked-tasks.md +6 -0
- package/presets/team/templates/memory/skill.md +10 -0
- package/presets/team/templates/memory/task-log.md +17 -0
- package/presets/team/templates/operations/bugs.md +17 -0
- package/presets/team/templates/operations/client-preferences.md +21 -0
- package/presets/team/templates/operations/current-phase.md +4 -0
- package/presets/team/templates/operations/governor-feedback.md +11 -0
- package/presets/team/templates/operations/governor-log.md +14 -0
- package/presets/team/templates/operations/governor-rules.md +22 -0
- package/presets/team/templates/operations/human-feedback.md +7 -0
- package/presets/team/templates/operations/inconsistencies.md +12 -0
- package/presets/team/templates/operations/issues.md +13 -0
- package/presets/team/templates/operations/metrics.md +4 -0
- package/presets/team/templates/operations/needs-human-review.md +11 -0
- package/presets/team/templates/operations/task-board.md +11 -0
- package/presets/team/templates/phases/00-init/project-profile.md +45 -0
- package/presets/team/templates/phases/01-brainstorm/brainstorm.md +33 -0
- package/presets/team/templates/phases/02-spec/spec.md +28 -0
- package/presets/team/templates/phases/03-design/design.md +26 -0
- package/presets/team/templates/phases/04-architecture/architecture.md +26 -0
- package/presets/team/templates/phases/05-contracts/_index.md +20 -0
- package/presets/team/templates/phases/09-qa/test-plan.md +29 -0
- package/presets/team/templates/phases/12-retrospective/retrospective.md +24 -0
- /package/{agents → presets/solo/agents}/claude/be-dev.md +0 -0
- /package/{agents → presets/solo/agents}/claude/be-tech-lead.md +0 -0
- /package/{agents → presets/solo/agents}/claude/fe-dev.md +0 -0
- /package/{agents → presets/solo/agents}/claude/fe-tech-lead.md +0 -0
- /package/{agents → presets/solo/agents}/claude/forensic.md +0 -0
- /package/{agents → presets/solo/agents}/claude/governor.md +0 -0
- /package/{agents → presets/solo/agents}/claude/qa.md +0 -0
- /package/{agents → presets/solo/agents}/cursor/be-dev.md +0 -0
- /package/{agents → presets/solo/agents}/cursor/be-tech-lead.md +0 -0
- /package/{agents → presets/solo/agents}/cursor/fe-dev.md +0 -0
- /package/{agents → presets/solo/agents}/cursor/fe-tech-lead.md +0 -0
- /package/{agents → presets/solo/agents}/cursor/forensic.md +0 -0
- /package/{agents → presets/solo/agents}/cursor/governor.md +0 -0
- /package/{agents → presets/solo/agents}/cursor/qa.md +0 -0
- /package/{hooks → presets/solo/hooks}/agent-checklist.sh +0 -0
- /package/{hooks → presets/solo/hooks}/block-pl-src-write.sh +0 -0
- /package/{hooks → presets/solo/hooks}/inject-pl-context.sh +0 -0
- /package/{hooks → presets/solo/hooks}/pre-compact.sh +0 -0
- /package/{hooks → presets/solo/hooks}/run-if-profile.sh +0 -0
- /package/{hooks → presets/solo/hooks}/session-start.sh +0 -0
- /package/{hooks → presets/solo/hooks}/suggest-compact.sh +0 -0
- /package/{hooks → presets/solo/hooks}/track-prompt-count.sh +0 -0
- /package/{prompts → presets/solo/prompts}/agents/05-fe-tech-lead.md +0 -0
- /package/{prompts → presets/solo/prompts}/agents/06-be-tech-lead.md +0 -0
- /package/{prompts → presets/solo/prompts}/agents/08-be-dev.md +0 -0
- /package/{prompts → presets/solo/prompts}/agents/08-fe-dev.md +0 -0
- /package/{prompts → presets/solo/prompts}/agents/10-qa.md +0 -0
- /package/{prompts → presets/solo/prompts}/agents/11-forensic.md +0 -0
- /package/{prompts → presets/solo/prompts}/agents/governor.md +0 -0
- /package/{prompts → presets/solo/prompts}/checklists/code-review.md +0 -0
- /package/{prompts → presets/solo/prompts}/orchestrator.md +0 -0
- /package/{prompts → presets/solo/prompts}/skills/01-brainstorm.md +0 -0
- /package/{prompts → presets/solo/prompts}/skills/02-spec.md +0 -0
- /package/{prompts → presets/solo/prompts}/skills/03-design.md +0 -0
- /package/{prompts → presets/solo/prompts}/skills/04-architecture.md +0 -0
- /package/{rules → presets/solo/rules}/cursor/be-dev.mdc +0 -0
- /package/{rules → presets/solo/rules}/cursor/be-tech-lead.mdc +0 -0
- /package/{rules → presets/solo/rules}/cursor/fe-dev.mdc +0 -0
- /package/{rules → presets/solo/rules}/cursor/fe-tech-lead.mdc +0 -0
- /package/{rules → presets/solo/rules}/cursor/forensic.mdc +0 -0
- /package/{rules → presets/solo/rules}/cursor/governor.mdc +0 -0
- /package/{rules → presets/solo/rules}/cursor/qa.mdc +0 -0
- /package/{settings → presets/solo/settings}/be-dev.json +0 -0
- /package/{settings → presets/solo/settings}/be-tech-lead.json +0 -0
- /package/{settings → presets/solo/settings}/claude-settings.json +0 -0
- /package/{settings → presets/solo/settings}/fe-dev.json +0 -0
- /package/{settings → presets/solo/settings}/fe-tech-lead.json +0 -0
- /package/{settings → presets/solo/settings}/forensic.json +0 -0
- /package/{settings → presets/solo/settings}/governor.json +0 -0
- /package/{settings → presets/solo/settings}/qa.json +0 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# MCP Manifest -- HOOL Mini
|
|
2
|
+
|
|
3
|
+
Every MCP this framework depends on, who uses it, and how to set it up.
|
|
4
|
+
|
|
5
|
+
## Installation Model
|
|
6
|
+
|
|
7
|
+
MCPs install GLOBALLY -- once per machine, shared across all projects.
|
|
8
|
+
`hool init` checks `~/.claude/mcp_servers.json` and installs any missing MCPs.
|
|
9
|
+
Per-project `.hool/mcps.json` declares which MCPs the project needs (read-only reference).
|
|
10
|
+
|
|
11
|
+
## Required MCPs
|
|
12
|
+
|
|
13
|
+
### 1. Playwright MCP
|
|
14
|
+
- **What**: Browser automation, E2E testing, screenshots, visual comparison
|
|
15
|
+
- **Used by**: QA, Forensic, Design (for reference screenshots)
|
|
16
|
+
- **Domains**: Web apps, browser games, animations
|
|
17
|
+
- **Does NOT work for**: Mobile apps, native Android games
|
|
18
|
+
- **Install**: `npm install @playwright/mcp` (or community equivalent)
|
|
19
|
+
- **Config**:
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"mcpServers": {
|
|
23
|
+
"playwright": {
|
|
24
|
+
"command": "npx",
|
|
25
|
+
"args": ["@playwright/mcp"]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
- **Key tools**:
|
|
31
|
+
- `navigate(url)` -- go to page
|
|
32
|
+
- `click(selector)` -- click element
|
|
33
|
+
- `fill(selector, value)` -- type into input
|
|
34
|
+
- `screenshot(path?)` -- capture current page
|
|
35
|
+
- `evaluate(script)` -- run JS in page context (critical for game state)
|
|
36
|
+
- `waitForSelector(selector)` -- wait for element
|
|
37
|
+
|
|
38
|
+
### 2. Context7 MCP
|
|
39
|
+
- **What**: Up-to-date library/framework documentation lookup
|
|
40
|
+
- **Used by**: ALL agents (Product Lead, Tech Leads, FE/BE Dev, QA)
|
|
41
|
+
- **Domains**: All
|
|
42
|
+
- **Install**: already available as MCP
|
|
43
|
+
- **Config**:
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"mcpServers": {
|
|
47
|
+
"context7": {
|
|
48
|
+
"command": "npx",
|
|
49
|
+
"args": ["-y", "@context7/mcp"]
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
- **Key tools**:
|
|
55
|
+
- `resolve-library-id(name)` -- find a library's context7 ID
|
|
56
|
+
- `query-docs(library, query)` -- get relevant docs/examples
|
|
57
|
+
|
|
58
|
+
### 3. DeepWiki MCP (or Web Search)
|
|
59
|
+
- **What**: Research, prior art, best practices, competitive analysis
|
|
60
|
+
- **Used by**: Product Lead (brainstorm, spec, architecture)
|
|
61
|
+
- **Domains**: All
|
|
62
|
+
- **Note**: Can substitute with web search MCP if deepwiki unavailable
|
|
63
|
+
|
|
64
|
+
## Recommended MCPs
|
|
65
|
+
|
|
66
|
+
### 4. Web Search MCP
|
|
67
|
+
- **What**: General web search for inspiration, solutions, comparisons
|
|
68
|
+
- **Used by**: Product Lead (brainstorm, design, architecture)
|
|
69
|
+
- **Domains**: All
|
|
70
|
+
|
|
71
|
+
### 5. Filesystem MCP
|
|
72
|
+
- **What**: File watching, directory listing (if not using built-in tools)
|
|
73
|
+
- **Used by**: Product Lead (monitoring file changes)
|
|
74
|
+
- **Note**: Claude Code has built-in file tools, so this is optional
|
|
75
|
+
|
|
76
|
+
## Domain-Specific MCPs
|
|
77
|
+
|
|
78
|
+
### 6. ADB MCP (Android)
|
|
79
|
+
- **What**: Android Debug Bridge -- device/emulator interaction
|
|
80
|
+
- **Used by**: QA, Forensic (mobile only)
|
|
81
|
+
- **Domains**: Mobile Android, Android games
|
|
82
|
+
- **Provides**:
|
|
83
|
+
- `adb_screenshot` -- capture emulator screen
|
|
84
|
+
- `adb_tap(x, y)` -- tap coordinates
|
|
85
|
+
- `adb_swipe(x1, y1, x2, y2)` -- swipe gesture
|
|
86
|
+
- `adb_logcat(filter?)` -- read device logs
|
|
87
|
+
- `adb_install(apk)` -- install app on emulator
|
|
88
|
+
- `adb_shell(command)` -- run shell command on device
|
|
89
|
+
- **Status**: Community MCPs exist, may need custom wrapper
|
|
90
|
+
- **Fallback**: Use Bash tool with `adb` CLI directly
|
|
91
|
+
|
|
92
|
+
### 7. Maestro MCP (Mobile Testing -- Alternative to Detox)
|
|
93
|
+
- **What**: Declarative mobile UI testing
|
|
94
|
+
- **Used by**: QA (mobile only)
|
|
95
|
+
- **Domains**: Mobile Android, Mobile iOS
|
|
96
|
+
- **Why over Detox**: YAML-based tests, simpler setup, more agent-friendly
|
|
97
|
+
- **Status**: No MCP exists yet -- candidate for custom build
|
|
98
|
+
- **Fallback**: Use Bash tool with `maestro` CLI
|
|
99
|
+
|
|
100
|
+
## Future MCPs
|
|
101
|
+
|
|
102
|
+
### 8. hool-context-mcp (v0.1 -- we build this)
|
|
103
|
+
- **What**: Agentic vector DB for semantic codebase retrieval
|
|
104
|
+
- **Used by**: ALL agents
|
|
105
|
+
- **Domains**: All
|
|
106
|
+
- **Status**: To be built -- see NEXT-v0.1-context-mcp.md
|
|
107
|
+
|
|
108
|
+
### 9. Notification MCP
|
|
109
|
+
- **What**: Notify human when review needed or phase complete
|
|
110
|
+
- **Used by**: Product Lead
|
|
111
|
+
- **Provides**: Slack/email/desktop notification when `operations/needs-human-review.md` is updated
|
|
112
|
+
|
|
113
|
+
## MCP Usage Matrix
|
|
114
|
+
|
|
115
|
+
| Agent | playwright | context7 | deepwiki | web-search | adb | maestro | hool-context |
|
|
116
|
+
|-------|-----------|----------|----------|------------|-----|---------|-------------|
|
|
117
|
+
| Product Lead (brainstorm) | -- | YES | YES | YES | -- | -- | v0.2 |
|
|
118
|
+
| Product Lead (spec) | -- | YES | YES | -- | -- | -- | v0.2 |
|
|
119
|
+
| Product Lead (design) | ref screenshots | -- | -- | YES | -- | -- | v0.2 |
|
|
120
|
+
| Product Lead (architecture) | -- | YES | YES | YES | -- | -- | v0.2 |
|
|
121
|
+
| FE Tech Lead | -- | YES | -- | -- | -- | -- | v0.2 |
|
|
122
|
+
| BE Tech Lead | -- | YES | -- | -- | -- | -- | v0.2 |
|
|
123
|
+
| QA (plan) | -- | YES | -- | -- | -- | -- | v0.2 |
|
|
124
|
+
| FE Dev | -- | YES | -- | -- | -- | -- | v0.2 |
|
|
125
|
+
| BE Dev | -- | YES | -- | -- | -- | -- | v0.2 |
|
|
126
|
+
| QA (web) | YES | YES | -- | -- | -- | -- | v0.2 |
|
|
127
|
+
| QA (mobile) | -- | YES | -- | -- | YES | YES | v0.2 |
|
|
128
|
+
| Forensic (web) | YES | -- | -- | -- | -- | -- | v0.2 |
|
|
129
|
+
| Forensic (mobile) | -- | -- | -- | -- | YES | -- | v0.2 |
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Testing Strategy by Domain
|
|
2
|
+
|
|
3
|
+
How each project type gets tested, what tools are used, and what gaps exist.
|
|
4
|
+
|
|
5
|
+
## Web App (FE + BE)
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
Layer | Tool | MCP | Autonomous?
|
|
9
|
+
-------------|-------------------|--------------|------------
|
|
10
|
+
Static | ESLint/TSC | none (CLI) | 100%
|
|
11
|
+
Unit (FE) | Vitest/Jest | none (CLI) | 100%
|
|
12
|
+
Unit (BE) | Vitest/Jest/Pytest| none (CLI) | 100%
|
|
13
|
+
Integration | Supertest/httpx | none (CLI) | 100%
|
|
14
|
+
E2E | Playwright | playwright | 100%
|
|
15
|
+
Visual | Playwright + multimodal | playwright | ~95%
|
|
16
|
+
```
|
|
17
|
+
**Gaps**: Subjective aesthetic judgment (~5% escalated).
|
|
18
|
+
**Verdict**: Fully covered.
|
|
19
|
+
|
|
20
|
+
## Mobile App (React Native + Expo)
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
Layer | Tool | MCP | Autonomous?
|
|
24
|
+
-------------|-------------------|--------------|------------
|
|
25
|
+
Static | ESLint/TSC | none (CLI) | 100%
|
|
26
|
+
Unit | Jest | none (CLI) | 100%
|
|
27
|
+
Integration | Supertest (API) | none (CLI) | 100%
|
|
28
|
+
E2E | Maestro or Detox | adb/maestro | ~80%
|
|
29
|
+
Visual | ADB screenshot + multimodal | adb | ~70%
|
|
30
|
+
Device compat| Emulator only | adb | ~60%
|
|
31
|
+
```
|
|
32
|
+
**Gaps**:
|
|
33
|
+
- E2E setup is fragile (emulator boot, build times)
|
|
34
|
+
- Visual comparison against design cards needs emulator screenshots (lower fidelity than browser)
|
|
35
|
+
- No real device testing — emulator only covers ~70% of real-world behavior
|
|
36
|
+
- Gestures (swipe, pinch, long-press) are harder to automate reliably
|
|
37
|
+
|
|
38
|
+
**What helps**: Maestro over Detox. Maestro tests look like:
|
|
39
|
+
```yaml
|
|
40
|
+
- launchApp
|
|
41
|
+
- tapOn: "Login"
|
|
42
|
+
- inputText: "user@test.com"
|
|
43
|
+
- tapOn: "Submit"
|
|
44
|
+
- assertVisible: "Welcome"
|
|
45
|
+
```
|
|
46
|
+
An agent can write and reason about this easily. Detox requires complex JS setup.
|
|
47
|
+
|
|
48
|
+
## Browser Game
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
Layer | Tool | MCP | Autonomous?
|
|
52
|
+
-------------|-------------------|--------------|------------
|
|
53
|
+
Static | ESLint/TSC | none (CLI) | 100%
|
|
54
|
+
Unit (logic) | Vitest/Jest | none (CLI) | 100%
|
|
55
|
+
State tests | Custom harness | none (CLI) | 100%
|
|
56
|
+
Visual | Playwright screenshot | playwright | ~60%
|
|
57
|
+
Game E2E | Playwright + game state bridge | playwright | ~50%
|
|
58
|
+
Game feel | Human playtest | none | 0%
|
|
59
|
+
Performance | FPS monitoring | playwright | 90%
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**The game state bridge pattern**:
|
|
63
|
+
The FE Tech Lead adds a debug hook to the game:
|
|
64
|
+
```typescript
|
|
65
|
+
// Only in dev mode
|
|
66
|
+
if (import.meta.env.DEV) {
|
|
67
|
+
(window as any).__GAME__ = {
|
|
68
|
+
getState: () => game.state,
|
|
69
|
+
dispatch: (action: string, payload: any) => game.dispatch(action, payload),
|
|
70
|
+
getEntity: (id: string) => game.world.getEntity(id),
|
|
71
|
+
getFPS: () => game.loop.fps,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Then Playwright tests can:
|
|
77
|
+
```typescript
|
|
78
|
+
// Click at game coordinates
|
|
79
|
+
await page.mouse.click(400, 300);
|
|
80
|
+
// Read game state
|
|
81
|
+
const score = await page.evaluate(() => window.__GAME__.getState().score);
|
|
82
|
+
expect(score).toBe(10);
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Gaps**:
|
|
86
|
+
- Can't test "is this fun" — always human
|
|
87
|
+
- Canvas interactions are coordinate-based, not semantic (fragile if layout changes)
|
|
88
|
+
- Physics-dependent tests are non-deterministic unless you seed the RNG
|
|
89
|
+
- Audio testing is basically impossible
|
|
90
|
+
|
|
91
|
+
**What helps**: Replay testing. Record a sequence of inputs with timestamps, replay deterministically, assert final game state. Agent writes the replay, not the clicks.
|
|
92
|
+
|
|
93
|
+
## Android Game
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
Layer | Tool | MCP | Autonomous?
|
|
97
|
+
-------------|-------------------|--------------|------------
|
|
98
|
+
Static | Lint/TSC/Kotlin | none (CLI) | 100%
|
|
99
|
+
Unit (logic) | Jest/JUnit | none (CLI) | 100%
|
|
100
|
+
E2E | ADB + game state | adb | ~30%
|
|
101
|
+
Visual | ADB screenshot | adb | ~40%
|
|
102
|
+
Game feel | Human playtest | none | 0%
|
|
103
|
+
Performance | ADB profiling | adb | ~60%
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Gaps**: Almost everything beyond unit tests. ADB can tap and screenshot but:
|
|
107
|
+
- No game state bridge unless the game exposes one via a debug API
|
|
108
|
+
- Performance profiling through ADB is limited vs native Android Profiler
|
|
109
|
+
- Touch gesture sequences (multi-touch, tilt) are extremely hard to automate
|
|
110
|
+
|
|
111
|
+
**Honest verdict**: Test game logic with unit tests (autonomous). Test everything else manually. This is the weakest domain.
|
|
112
|
+
|
|
113
|
+
## API / Backend Only
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
Layer | Tool | MCP | Autonomous?
|
|
117
|
+
-------------|-------------------|--------------|------------
|
|
118
|
+
Static | ESLint/TSC/Pylint | none (CLI) | 100%
|
|
119
|
+
Unit | Vitest/Jest/Pytest| none (CLI) | 100%
|
|
120
|
+
Integration | Supertest/httpx | none (CLI) | 100%
|
|
121
|
+
Contract | Schema validation | none (CLI) | 100%
|
|
122
|
+
Load | k6/autocannon | none (CLI) | 90%
|
|
123
|
+
Security | Basic checks | none (CLI) | 70%
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Gaps**: Almost none. APIs are the most testable thing that exists.
|
|
127
|
+
**Verdict**: Best domain for full autonomy.
|
|
128
|
+
|
|
129
|
+
## Summary Matrix
|
|
130
|
+
|
|
131
|
+
| Domain | Autonomous Testing Coverage | Biggest Gap |
|
|
132
|
+
|--------|---------------------------|-------------|
|
|
133
|
+
| Web App | ~95% | Aesthetic judgment |
|
|
134
|
+
| API Only | ~98% | Security edge cases |
|
|
135
|
+
| Mobile (RN) | ~70% | E2E reliability, device matrix |
|
|
136
|
+
| Browser Game | ~55% | Game feel, canvas interaction |
|
|
137
|
+
| Android Game | ~30% | Everything beyond unit tests |
|
|
138
|
+
| Animation | ~50% | "Does it feel smooth" |
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Bugs
|
|
2
|
+
|
|
3
|
+
<!-- Automation tester and users report bugs here. Debugger investigates and updates entries. -->
|
|
4
|
+
<!-- Format below. Tags: [USER] for user-reported, [AUTO] for tester-found -->
|
|
5
|
+
|
|
6
|
+
## Open Bugs
|
|
7
|
+
|
|
8
|
+
## Diagnosed Bugs (fix pending)
|
|
9
|
+
|
|
10
|
+
## Resolved Bugs
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Issues & Known Patterns
|
|
2
|
+
|
|
3
|
+
<!-- Debugger and implementer log issues, patterns, and tech debt here. -->
|
|
4
|
+
<!-- These are not bugs — they're structural problems, recurring patterns, or known limitations. -->
|
|
5
|
+
|
|
6
|
+
## Open Issues
|
|
7
|
+
|
|
8
|
+
## Resolved Issues
|
|
9
|
+
|
|
10
|
+
## Patterns & Best Practices
|
|
11
|
+
<!-- Debugger adds patterns observed across multiple bugs -->
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Task Board
|
|
2
|
+
|
|
3
|
+
## Active Tasks
|
|
4
|
+
<!-- Format: - [ ] TASK-XXX: [description] | assigned: [agent] | files: [list] | depends: [task-ids] -->
|
|
5
|
+
|
|
6
|
+
## Completed Tasks
|
|
7
|
+
<!-- Format: - [x] TASK-XXX: [description] | assigned: [agent] | completed: [date] -->
|
|
8
|
+
|
|
9
|
+
## Blocked Tasks
|
|
10
|
+
<!-- Format: - [!] TASK-XXX: [description] | blocked-by: [reason/task-id] -->
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Agent: BE Dev
|
|
2
|
+
|
|
3
|
+
You are the BE Dev, running as an **Agent Teams teammate**. You write backend code — services, controllers, middleware, validations, tests. You follow the BE LLD blueprint exactly. You never make architectural decisions. Your code is modular, tested, logged, and boring (in the best way).
|
|
4
|
+
|
|
5
|
+
## HOOL Context
|
|
6
|
+
- All state lives in files: `.hool/phases/`, `.hool/operations/`, `.hool/memory/`
|
|
7
|
+
- Never modify your own prompts — escalate to `.hool/operations/needs-human-review.md`
|
|
8
|
+
- You commit to `src/backend/` git repo (you own this repo jointly with BE Lead)
|
|
9
|
+
- MCP: context7 (`mcp__context7__resolve-library-id`, `mcp__context7__query-docs`), deepwiki (`mcp__deepwiki__get-deepwiki-page`)
|
|
10
|
+
|
|
11
|
+
## Teammates
|
|
12
|
+
- **BE Tech Lead** — your lead, reviews your code, answers architecture questions
|
|
13
|
+
- **FE Dev** — coordinate on contract shapes if unclear
|
|
14
|
+
- **Product Lead** — assigns tasks, you report completion
|
|
15
|
+
|
|
16
|
+
## Roles
|
|
17
|
+
- **TDD Implementer** (Phase 7) — load `skills/tdd-implementer.md`
|
|
18
|
+
- **Self-Reviewer** (Phase 7) — review own code before lead review
|
|
19
|
+
|
|
20
|
+
When entering implementation, read the TDD implementer skill file from `.hool/skills/`.
|
|
21
|
+
|
|
22
|
+
## Boot Sequence
|
|
23
|
+
1. Read `.hool/memory/be-dev/hot.md`
|
|
24
|
+
2. Read `.hool/memory/be-dev/best-practices.md`
|
|
25
|
+
3. Read `.hool/memory/be-dev/issues.md`
|
|
26
|
+
4. Read `.hool/memory/be-dev/governor-feedback.md`
|
|
27
|
+
5. Read `.hool/memory/be-dev/client-preferences.md`
|
|
28
|
+
6. Read `.hool/memory/be-dev/operational-knowledge.md`
|
|
29
|
+
7. Read `.hool/memory/be-dev/picked-tasks.md`
|
|
30
|
+
8. Read `.hool/operations/governor-rules.md`
|
|
31
|
+
9. Read `.hool/phases/04-architecture/be/lld.md` — your blueprint
|
|
32
|
+
10. Read `.hool/phases/05-contracts/_index.md` — then the relevant domain file
|
|
33
|
+
|
|
34
|
+
Cross-reference with `.hool/memory/be-tech-lead/best-practices.md` when relevant.
|
|
35
|
+
Before submitting work, verify you haven't violated `governor-feedback.md` entries.
|
|
36
|
+
|
|
37
|
+
## Phase 7: Implementation (TDD)
|
|
38
|
+
|
|
39
|
+
### Reads
|
|
40
|
+
- `.hool/memory/be-dev/picked-tasks.md` — your current tasks
|
|
41
|
+
- `.hool/phases/05-contracts/<domain>.md` — API shapes to implement
|
|
42
|
+
- `.hool/phases/04-architecture/schema.md` — data model
|
|
43
|
+
- `.hool/phases/04-architecture/be/lld.md` — patterns and conventions
|
|
44
|
+
- `.hool/phases/04-architecture/be/business-logic.md` — domain rules
|
|
45
|
+
- `.hool/phases/02-spec/spec.md` — relevant user story
|
|
46
|
+
- `.hool/phases/09-qa/test-plan.md` — relevant test cases
|
|
47
|
+
- `.hool/operations/issues.md` — known issues in files you're touching
|
|
48
|
+
|
|
49
|
+
### Process (per task)
|
|
50
|
+
1. Read task from `picked-tasks.md`
|
|
51
|
+
2. Read relevant contract for the endpoint(s) you're implementing
|
|
52
|
+
3. Read relevant test cases from test plan
|
|
53
|
+
4. Read existing code — is there something you can reuse?
|
|
54
|
+
5. **TDD Cycle**:
|
|
55
|
+
a. Write/update tests first (based on contract + spec + test plan)
|
|
56
|
+
b. Implement service/controller/middleware until tests pass
|
|
57
|
+
c. Self-review: check against contract shapes, spec criteria
|
|
58
|
+
d. Add logging: every API call, every error, significant business logic decisions
|
|
59
|
+
e. Run linter + type checker
|
|
60
|
+
f. Run full test suite (not just yours)
|
|
61
|
+
6. Commit to `src/backend/` git repo
|
|
62
|
+
7. Update memory files (task-log, cold, hot)
|
|
63
|
+
8. Message PL: "TASK-XXX complete"
|
|
64
|
+
|
|
65
|
+
### Principles
|
|
66
|
+
1. **TDD**: Read test case first. Write test. Make it pass. Then refactor.
|
|
67
|
+
2. **Modular**: One service does ONE thing. If it has "and" in its name, split it.
|
|
68
|
+
3. **KISS**: Simplest implementation that satisfies the contract. No premature abstraction.
|
|
69
|
+
4. **Reuse**: Check for existing services/utils before writing new ones.
|
|
70
|
+
5. **Logs**: Every API call, error, and significant business decision gets logged.
|
|
71
|
+
6. **Contracts**: Your API responses MUST match `.hool/phases/05-contracts/` shapes exactly.
|
|
72
|
+
7. **No architecture decisions**: Follow LLD exactly. If you think something should change, message BE Lead.
|
|
73
|
+
8. **Consistency gate**: Before implementing, cross-check task against contracts and spec. If inconsistency found, log to `.hool/operations/inconsistencies.md` and message BE Lead.
|
|
74
|
+
9. **Teammate communication**: Contract question? Message BE Lead or FE Dev directly.
|
|
75
|
+
|
|
76
|
+
### Logging Guidelines (MANDATORY — Full Visibility)
|
|
77
|
+
|
|
78
|
+
Every piece of code you write MUST include structured logging. Logs are the primary debugging tool for Forensic and QA agents. Insufficient logging = blind debugging = wasted cycles.
|
|
79
|
+
|
|
80
|
+
#### Log Format
|
|
81
|
+
All logs go to `.hool/logs/be.log` as structured JSON (JSONL). Use the project's logger — never raw `console.log`.
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
// REQUIRED: Every API endpoint logs request + response
|
|
85
|
+
logger.info('api.request', { method: 'POST', endpoint: '/auth/login', correlationId, body: sanitized })
|
|
86
|
+
logger.info('api.response', { endpoint: '/auth/login', correlationId, status: 200, duration: '45ms' })
|
|
87
|
+
|
|
88
|
+
// REQUIRED: Every error logs full context
|
|
89
|
+
logger.error('api.error', { endpoint: '/auth/login', correlationId, status: 401, error: err.message, stack: err.stack })
|
|
90
|
+
|
|
91
|
+
// REQUIRED: Every database query logs operation + timing
|
|
92
|
+
logger.debug('db.query', { operation: 'findUser', table: 'users', correlationId, duration: '12ms' })
|
|
93
|
+
logger.error('db.error', { operation: 'findUser', correlationId, error: err.message })
|
|
94
|
+
|
|
95
|
+
// REQUIRED: Business logic decisions
|
|
96
|
+
logger.info('business.decision', { action: 'rate-limit-applied', userId, reason: 'exceeded-threshold', correlationId })
|
|
97
|
+
|
|
98
|
+
// REQUIRED: Auth events
|
|
99
|
+
logger.info('auth.login', { userId, method: 'password', correlationId })
|
|
100
|
+
logger.warn('auth.failed', { reason: 'invalid-password', attemptCount: 3, correlationId })
|
|
101
|
+
|
|
102
|
+
// DON'T: Log noise
|
|
103
|
+
logger.info('entering function') // useless — no context
|
|
104
|
+
logger.info('query executed') // too vague — which query? how long?
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
#### Correlation IDs
|
|
108
|
+
Every incoming request gets a `correlationId` (UUID). Pass it through every function call, every DB query, every external API call. This lets Forensic trace a single user action through the entire system.
|
|
109
|
+
|
|
110
|
+
#### Log Levels
|
|
111
|
+
- `debug` — verbose, dev-only (DB queries, internal state changes, middleware steps)
|
|
112
|
+
- `info` — significant events (API calls, business decisions, auth events)
|
|
113
|
+
- `warn` — recoverable issues (rate limits, retries, deprecation usage)
|
|
114
|
+
- `error` — failures (unhandled errors, DB connection loss, external API failures)
|
|
115
|
+
|
|
116
|
+
#### What Gets Logged (Checklist)
|
|
117
|
+
For every endpoint/service you implement, verify:
|
|
118
|
+
- [ ] Request received (method, path, sanitized body, correlationId)
|
|
119
|
+
- [ ] Response sent (status, duration, correlationId)
|
|
120
|
+
- [ ] Errors with full context (message, stack, correlationId)
|
|
121
|
+
- [ ] Database operations (query type, table, duration)
|
|
122
|
+
- [ ] Business logic decisions (what was decided and why)
|
|
123
|
+
- [ ] External API calls (to what, response status, duration)
|
|
124
|
+
- [ ] Auth events (login, logout, permission denied)
|
|
125
|
+
|
|
126
|
+
### Debugging Protocol
|
|
127
|
+
When debugging or investigating failing tests:
|
|
128
|
+
1. **Logs FIRST** — read `.hool/logs/be.log` (last 50-100 lines). Search for error-level entries.
|
|
129
|
+
2. **Correlate** — find the correlationId from the failing request, trace through all log entries with that ID.
|
|
130
|
+
3. **Then code** — only after understanding WHAT happened from logs, go to source code to understand WHY.
|
|
131
|
+
4. **If logs are insufficient** — that's a logging gap. Add the missing log statement, reproduce, read logs again.
|
|
132
|
+
|
|
133
|
+
## When You're Stuck
|
|
134
|
+
- **ALWAYS check `.hool/logs/be.log` FIRST** — logs tell you WHAT happened before you dig into WHY
|
|
135
|
+
- Can't understand spec → read `.hool/phases/02-spec/spec.md`
|
|
136
|
+
- Contract unclear → read `.hool/phases/05-contracts/`, message BE Lead if still unclear
|
|
137
|
+
- Found a bug in existing code → DON'T fix inline. Log to `.hool/operations/issues.md`
|
|
138
|
+
- Need an FE change → DON'T touch frontend. Log to `.hool/operations/inconsistencies.md`
|
|
139
|
+
- **Missing logs for the area you're debugging?** Add logging first, reproduce the issue, then diagnose
|
|
140
|
+
|
|
141
|
+
## Memory Update (before going idle)
|
|
142
|
+
- Append to `.hool/memory/be-dev/cold.md`
|
|
143
|
+
- Rebuild `.hool/memory/be-dev/hot.md`
|
|
144
|
+
- Update `.hool/memory/be-dev/task-log.md` (detailed)
|
|
145
|
+
- Append [PATTERN]/[GOTCHA] to `best-practices.md`
|
|
146
|
+
|
|
147
|
+
## Writable Paths
|
|
148
|
+
- `src/backend/` (git owner, jointly with BE Lead)
|
|
149
|
+
- `.hool/operations/issues.md`
|
|
150
|
+
- `.hool/operations/inconsistencies.md`
|
|
151
|
+
- `.hool/memory/be-dev/`
|
|
152
|
+
|
|
153
|
+
## Forbidden Actions
|
|
154
|
+
- NEVER make architectural decisions — follow LLD exactly
|
|
155
|
+
- NEVER modify frontend code (`src/frontend/`)
|
|
156
|
+
- NEVER modify design cards or spec docs
|
|
157
|
+
- NEVER modify agent prompts
|
|
158
|
+
- NEVER modify `governor-rules.md`
|
|
159
|
+
|
|
160
|
+
## Work Log Tags
|
|
161
|
+
- `[BE-IMPL]` — service/controller/middleware implemented
|
|
162
|
+
- `[BE-REUSE]` — reused existing service/util
|
|
163
|
+
- `[BE-TEST]` — tests written
|
|
164
|
+
- `[BE-ISSUE]` — issue found → issues.md
|
|
165
|
+
- `[GOTCHA]` — trap/pitfall → best-practices.md
|
|
166
|
+
- `[PATTERN]` — reusable pattern → best-practices.md
|