@bugzy-ai/bugzy 1.2.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/LICENSE +21 -0
- package/README.md +248 -0
- package/dist/cli/index.cjs +7547 -0
- package/dist/cli/index.cjs.map +1 -0
- package/dist/cli/index.d.cts +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +7539 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.cjs +6439 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +54 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.js +6383 -0
- package/dist/index.js.map +1 -0
- package/dist/subagents/index.cjs +2703 -0
- package/dist/subagents/index.cjs.map +1 -0
- package/dist/subagents/index.d.cts +34 -0
- package/dist/subagents/index.d.ts +34 -0
- package/dist/subagents/index.js +2662 -0
- package/dist/subagents/index.js.map +1 -0
- package/dist/subagents/metadata.cjs +207 -0
- package/dist/subagents/metadata.cjs.map +1 -0
- package/dist/subagents/metadata.d.cts +31 -0
- package/dist/subagents/metadata.d.ts +31 -0
- package/dist/subagents/metadata.js +174 -0
- package/dist/subagents/metadata.js.map +1 -0
- package/dist/tasks/index.cjs +3464 -0
- package/dist/tasks/index.cjs.map +1 -0
- package/dist/tasks/index.d.cts +44 -0
- package/dist/tasks/index.d.ts +44 -0
- package/dist/tasks/index.js +3431 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/templates/init/.bugzy/runtime/project-context.md +35 -0
- package/dist/templates/init/.bugzy/runtime/templates/test-plan-template.md +25 -0
- package/dist/templates/init/.bugzy/runtime/testing-best-practices.md +278 -0
- package/dist/templates/init/.gitignore-template +4 -0
- package/package.json +95 -0
- package/templates/init/.bugzy/runtime/knowledge-base.md +61 -0
- package/templates/init/.bugzy/runtime/knowledge-maintenance-guide.md +97 -0
- package/templates/init/.bugzy/runtime/project-context.md +35 -0
- package/templates/init/.bugzy/runtime/subagent-memory-guide.md +87 -0
- package/templates/init/.bugzy/runtime/templates/test-plan-template.md +25 -0
- package/templates/init/.bugzy/runtime/templates/test-result-schema.md +498 -0
- package/templates/init/.bugzy/runtime/test-execution-strategy.md +535 -0
- package/templates/init/.bugzy/runtime/testing-best-practices.md +632 -0
- package/templates/init/.gitignore-template +25 -0
- package/templates/init/CLAUDE.md +157 -0
- package/templates/init/test-runs/README.md +45 -0
- package/templates/playwright/BasePage.template.ts +190 -0
- package/templates/playwright/auth.setup.template.ts +89 -0
- package/templates/playwright/dataGenerators.helper.template.ts +148 -0
- package/templates/playwright/dateUtils.helper.template.ts +96 -0
- package/templates/playwright/pages.fixture.template.ts +50 -0
- package/templates/playwright/playwright.config.template.ts +97 -0
- package/templates/playwright/reporters/bugzy-reporter.ts +454 -0
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
# Testing Best Practices Reference
|
|
2
|
+
|
|
3
|
+
## Page Object Model (POM) Architecture
|
|
4
|
+
|
|
5
|
+
**Core Principle**: Separate locators, actions, and assertions into distinct layers to isolate UI changes from test logic.
|
|
6
|
+
|
|
7
|
+
### Page Object Structure
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
import { type Page, type Locator } from '@playwright/test';
|
|
11
|
+
|
|
12
|
+
export class LoginPage {
|
|
13
|
+
readonly page: Page;
|
|
14
|
+
|
|
15
|
+
// Centralized selectors as readonly properties
|
|
16
|
+
readonly emailInput: Locator;
|
|
17
|
+
readonly passwordInput: Locator;
|
|
18
|
+
readonly loginButton: Locator;
|
|
19
|
+
|
|
20
|
+
constructor(page: Page) {
|
|
21
|
+
this.page = page;
|
|
22
|
+
this.emailInput = page.getByLabel('Email');
|
|
23
|
+
this.passwordInput = page.getByLabel('Password');
|
|
24
|
+
this.loginButton = page.getByRole('button', { name: 'Sign In' });
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async navigate(): Promise<void> {
|
|
28
|
+
await this.page.goto('/login');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async login(email: string, password: string): Promise<void> {
|
|
32
|
+
await this.emailInput.fill(email);
|
|
33
|
+
await this.passwordInput.fill(password);
|
|
34
|
+
await this.loginButton.click();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Key Rules for Page Objects
|
|
40
|
+
|
|
41
|
+
- ✅ Define all locators as `readonly` properties
|
|
42
|
+
- ✅ Initialize locators in constructor
|
|
43
|
+
- ✅ Use method names that describe actions (login, fillEmail, clickSubmit)
|
|
44
|
+
- ✅ Return data, never assert in page objects
|
|
45
|
+
- ❌ Never put `expect()` assertions in page objects
|
|
46
|
+
- ❌ Never use hardcoded waits (`waitForTimeout`)
|
|
47
|
+
|
|
48
|
+
## Selector Priority (Most to Least Resilient)
|
|
49
|
+
|
|
50
|
+
1. **Role-based**: `page.getByRole('button', { name: 'Submit' })` - Best for semantic HTML
|
|
51
|
+
2. **Label**: `page.getByLabel('Email')` - Perfect for form inputs
|
|
52
|
+
3. **Text**: `page.getByText('Welcome back')` - Good for headings/static content
|
|
53
|
+
4. **Placeholder**: `page.getByPlaceholder('Enter email')` - Inputs without labels
|
|
54
|
+
5. **Test ID**: `page.getByTestId('submit-btn')` - Stable but requires data-testid attributes
|
|
55
|
+
6. **CSS selectors**: `page.locator('.btn-primary')` - Avoid; breaks with styling changes
|
|
56
|
+
|
|
57
|
+
### When to Use Test IDs
|
|
58
|
+
|
|
59
|
+
Add `data-testid` attributes for:
|
|
60
|
+
- Critical user flows (checkout, login, signup)
|
|
61
|
+
- Complex components (data tables, multi-step forms)
|
|
62
|
+
- Elements where role-based selectors are ambiguous
|
|
63
|
+
|
|
64
|
+
```html
|
|
65
|
+
<button data-testid="checkout-submit">Complete Purchase</button>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
await page.getByTestId('checkout-submit').click();
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Test Organization
|
|
73
|
+
|
|
74
|
+
### File Structure by Feature
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
tests/
|
|
78
|
+
├── specs/ # Tests organized by feature
|
|
79
|
+
│ ├── auth/
|
|
80
|
+
│ │ └── login.spec.ts
|
|
81
|
+
│ └── checkout/
|
|
82
|
+
│ └── purchase-flow.spec.ts
|
|
83
|
+
├── pages/ # Page Object Models
|
|
84
|
+
│ ├── LoginPage.ts
|
|
85
|
+
│ └── CheckoutPage.ts
|
|
86
|
+
├── components/ # Reusable UI components
|
|
87
|
+
├── fixtures/ # Custom test fixtures
|
|
88
|
+
├── helpers/ # Utility functions
|
|
89
|
+
└── setup/ # Global setup/teardown
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Test Structure
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
test.describe('Purchase flow', () => {
|
|
96
|
+
test.beforeEach(async ({ page }) => {
|
|
97
|
+
// Common setup
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
test('should complete purchase with credit card', async ({ page }) => {
|
|
101
|
+
// Arrange: Set up page objects
|
|
102
|
+
const checkoutPage = new CheckoutPage(page);
|
|
103
|
+
|
|
104
|
+
// Act: Perform actions
|
|
105
|
+
await checkoutPage.fillPaymentInfo({/*...*/});
|
|
106
|
+
await checkoutPage.submitOrder();
|
|
107
|
+
|
|
108
|
+
// Assert: Verify outcomes
|
|
109
|
+
await expect(page).toHaveURL('/confirmation');
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Authentication & Session Management
|
|
115
|
+
|
|
116
|
+
**Always authenticate once and reuse session state** across tests.
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
// tests/setup/auth.setup.ts
|
|
120
|
+
import { test as setup } from '@playwright/test';
|
|
121
|
+
|
|
122
|
+
const authFile = 'playwright/.auth/user.json';
|
|
123
|
+
|
|
124
|
+
setup('authenticate', async ({ page }) => {
|
|
125
|
+
await page.goto('/login');
|
|
126
|
+
await page.getByLabel('Email').fill(process.env.USER_EMAIL!);
|
|
127
|
+
await page.getByLabel('Password').fill(process.env.USER_PASSWORD!);
|
|
128
|
+
await page.getByRole('button', { name: 'Sign in' }).click();
|
|
129
|
+
|
|
130
|
+
await page.waitForURL('/dashboard');
|
|
131
|
+
await page.context().storageState({ path: authFile });
|
|
132
|
+
});
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Configure in `playwright.config.ts`:
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
projects: [
|
|
139
|
+
{ name: 'setup', testMatch: /.*\.setup\.ts/ },
|
|
140
|
+
{
|
|
141
|
+
name: 'chromium',
|
|
142
|
+
use: { storageState: 'playwright/.auth/user.json' },
|
|
143
|
+
dependencies: ['setup'],
|
|
144
|
+
},
|
|
145
|
+
]
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Async Operations & Waiting
|
|
149
|
+
|
|
150
|
+
### Use Built-in Auto-waiting
|
|
151
|
+
|
|
152
|
+
Playwright automatically waits for elements to be:
|
|
153
|
+
- Visible
|
|
154
|
+
- Enabled
|
|
155
|
+
- Stable (not animating)
|
|
156
|
+
- Ready to receive events
|
|
157
|
+
|
|
158
|
+
```typescript
|
|
159
|
+
// ✅ GOOD: Auto-waiting
|
|
160
|
+
await page.click('#submit');
|
|
161
|
+
await expect(page.locator('.result')).toBeVisible();
|
|
162
|
+
|
|
163
|
+
// ❌ BAD: Manual arbitrary wait
|
|
164
|
+
await page.click('#submit');
|
|
165
|
+
await page.waitForTimeout(3000);
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Explicit Waiting (when needed)
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
// Wait for element state
|
|
172
|
+
await page.locator('.loading').waitFor({ state: 'hidden' });
|
|
173
|
+
|
|
174
|
+
// Wait for URL change
|
|
175
|
+
await page.waitForURL('**/dashboard');
|
|
176
|
+
|
|
177
|
+
// Wait for network request
|
|
178
|
+
const response = await page.waitForResponse(
|
|
179
|
+
resp => resp.url().includes('/api/data') && resp.status() === 200
|
|
180
|
+
);
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Common Anti-Patterns to Avoid
|
|
184
|
+
|
|
185
|
+
| ❌ Anti-Pattern | ✅ Correct Approach |
|
|
186
|
+
|----------------|-------------------|
|
|
187
|
+
| `await page.waitForTimeout(3000)` | `await expect(element).toBeVisible()` |
|
|
188
|
+
| `const el = await page.$('.btn')` | `await page.locator('.btn').click()` |
|
|
189
|
+
| Tests depend on execution order | Each test is fully independent |
|
|
190
|
+
| Assertions in Page Objects | Assertions only in test files |
|
|
191
|
+
| `#app > div:nth-child(2) > button` | `page.getByRole('button', { name: 'Submit' })` |
|
|
192
|
+
| `retries: 5` to mask flakiness | `retries: 2` + fix root cause |
|
|
193
|
+
|
|
194
|
+
## Debugging Workflow
|
|
195
|
+
|
|
196
|
+
When a test fails:
|
|
197
|
+
|
|
198
|
+
1. **Reproduce locally**: `npx playwright test failing-test.spec.ts --headed`
|
|
199
|
+
2. **Enable trace**: `npx playwright test --trace on`
|
|
200
|
+
3. **View trace**: `npx playwright show-trace test-results/.../trace.zip`
|
|
201
|
+
4. **Identify failure**: Scrub timeline, check DOM snapshots
|
|
202
|
+
5. **Review network**: Look for failed API calls
|
|
203
|
+
6. **Check console**: JavaScript errors/warnings
|
|
204
|
+
7. **Fix selector**: Use inspector's locator picker
|
|
205
|
+
8. **Verify fix**: Run test 10 times to ensure stability
|
|
206
|
+
|
|
207
|
+
## API Testing for Speed
|
|
208
|
+
|
|
209
|
+
**Use API calls for test setup** (10-20x faster than UI):
|
|
210
|
+
|
|
211
|
+
```typescript
|
|
212
|
+
test('should display user dashboard', async ({ request, page }) => {
|
|
213
|
+
// FAST: Create test data via API
|
|
214
|
+
await request.post('/api/users', {
|
|
215
|
+
data: { name: 'Test User', email: 'test@example.com' }
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
// UI: Test the actual user experience
|
|
219
|
+
await page.goto('/dashboard');
|
|
220
|
+
await expect(page.getByText('Test User')).toBeVisible();
|
|
221
|
+
});
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## Configuration Essentials
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
// playwright.config.ts
|
|
228
|
+
export default defineConfig({
|
|
229
|
+
testDir: './tests/specs',
|
|
230
|
+
fullyParallel: true,
|
|
231
|
+
retries: process.env.CI ? 2 : 0,
|
|
232
|
+
workers: process.env.CI ? 1 : undefined,
|
|
233
|
+
|
|
234
|
+
timeout: 30000,
|
|
235
|
+
expect: { timeout: 5000 },
|
|
236
|
+
|
|
237
|
+
use: {
|
|
238
|
+
baseURL: process.env.BASE_URL,
|
|
239
|
+
trace: 'on-first-retry',
|
|
240
|
+
screenshot: 'only-on-failure',
|
|
241
|
+
video: 'retain-on-failure',
|
|
242
|
+
actionTimeout: 10000,
|
|
243
|
+
},
|
|
244
|
+
});
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## Production-Ready Checklist
|
|
248
|
+
|
|
249
|
+
**Configuration:**
|
|
250
|
+
- [ ] Parallel execution enabled (`fullyParallel: true`)
|
|
251
|
+
- [ ] Retry strategy configured (2 in CI, 0 locally)
|
|
252
|
+
- [ ] Base URL from environment variables
|
|
253
|
+
- [ ] Artifact capture optimized (`on-first-retry`)
|
|
254
|
+
|
|
255
|
+
**Architecture:**
|
|
256
|
+
- [ ] Page Object Model for all major pages
|
|
257
|
+
- [ ] Component Objects for reusable UI elements
|
|
258
|
+
- [ ] Custom fixtures for common setup
|
|
259
|
+
- [ ] Tests organized by feature/user journey
|
|
260
|
+
|
|
261
|
+
**Best Practices:**
|
|
262
|
+
- [ ] No `waitForTimeout()` usage
|
|
263
|
+
- [ ] Tests are independent (run in any order)
|
|
264
|
+
- [ ] Assertions in test files, not Page Objects
|
|
265
|
+
- [ ] Role-based selectors prioritized
|
|
266
|
+
- [ ] No hardcoded credentials
|
|
267
|
+
|
|
268
|
+
**CI/CD:**
|
|
269
|
+
- [ ] Tests run on every pull request
|
|
270
|
+
- [ ] Artifacts uploaded (reports, traces)
|
|
271
|
+
- [ ] Failure notifications configured
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
**Remember**: The three critical pillars are:
|
|
276
|
+
1. **Page Object Model** - Isolate UI changes from test logic
|
|
277
|
+
2. **Role-based selectors** - Resist breakage
|
|
278
|
+
3. **Authentication state reuse** - Maximize speed
|
package/package.json
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bugzy-ai/bugzy",
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "Open-source AI agent configuration for QA automation with Claude Code",
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"keywords": [
|
|
9
|
+
"ai",
|
|
10
|
+
"testing",
|
|
11
|
+
"qa",
|
|
12
|
+
"automation",
|
|
13
|
+
"claude",
|
|
14
|
+
"mcp",
|
|
15
|
+
"agent",
|
|
16
|
+
"test-automation",
|
|
17
|
+
"claude-code"
|
|
18
|
+
],
|
|
19
|
+
"homepage": "https://github.com/bugzy-ai/bugzy#readme",
|
|
20
|
+
"bugs": {
|
|
21
|
+
"url": "https://github.com/bugzy-ai/bugzy/issues"
|
|
22
|
+
},
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "git+https://github.com/bugzy-ai/bugzy.git"
|
|
26
|
+
},
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"author": "Bugzy Team",
|
|
29
|
+
"type": "module",
|
|
30
|
+
"exports": {
|
|
31
|
+
".": {
|
|
32
|
+
"types": "./dist/index.d.ts",
|
|
33
|
+
"import": "./dist/index.js",
|
|
34
|
+
"require": "./dist/index.cjs"
|
|
35
|
+
},
|
|
36
|
+
"./tasks": {
|
|
37
|
+
"types": "./dist/tasks/index.d.ts",
|
|
38
|
+
"import": "./dist/tasks/index.js"
|
|
39
|
+
},
|
|
40
|
+
"./subagents": {
|
|
41
|
+
"types": "./dist/subagents/index.d.ts",
|
|
42
|
+
"import": "./dist/subagents/index.js"
|
|
43
|
+
},
|
|
44
|
+
"./subagents/metadata": {
|
|
45
|
+
"types": "./dist/subagents/metadata.d.ts",
|
|
46
|
+
"import": "./dist/subagents/metadata.js"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"main": "./dist/index.cjs",
|
|
50
|
+
"module": "./dist/index.js",
|
|
51
|
+
"types": "./dist/index.d.ts",
|
|
52
|
+
"bin": {
|
|
53
|
+
"bugzy": "./dist/cli/index.js"
|
|
54
|
+
},
|
|
55
|
+
"files": [
|
|
56
|
+
"dist",
|
|
57
|
+
"templates",
|
|
58
|
+
"README.md",
|
|
59
|
+
"LICENSE"
|
|
60
|
+
],
|
|
61
|
+
"scripts": {
|
|
62
|
+
"build": "tsup",
|
|
63
|
+
"dev": "tsup --watch",
|
|
64
|
+
"test": "vitest run",
|
|
65
|
+
"test:ci": "vitest run",
|
|
66
|
+
"type-check": "tsc --noEmit",
|
|
67
|
+
"lint": "eslint src",
|
|
68
|
+
"prepublishOnly": "pnpm run build && pnpm run test:ci"
|
|
69
|
+
},
|
|
70
|
+
"dependencies": {
|
|
71
|
+
"chalk": "^5.3.0",
|
|
72
|
+
"commander": "^11.1.0",
|
|
73
|
+
"dotenv": "^16.3.1",
|
|
74
|
+
"figlet": "^1.9.3",
|
|
75
|
+
"gradient-string": "^3.0.0",
|
|
76
|
+
"inquirer": "^9.2.12",
|
|
77
|
+
"ora": "^7.0.1"
|
|
78
|
+
},
|
|
79
|
+
"devDependencies": {
|
|
80
|
+
"@types/figlet": "^1.7.0",
|
|
81
|
+
"@types/gradient-string": "^1.1.6",
|
|
82
|
+
"@types/inquirer": "^9.0.7",
|
|
83
|
+
"@types/node": "^20.10.5",
|
|
84
|
+
"@typescript-eslint/eslint-plugin": "^6.15.0",
|
|
85
|
+
"@typescript-eslint/parser": "^6.15.0",
|
|
86
|
+
"eslint": "^8.56.0",
|
|
87
|
+
"gray-matter": "^4.0.3",
|
|
88
|
+
"tsup": "^8.0.1",
|
|
89
|
+
"typescript": "^5.3.3",
|
|
90
|
+
"vitest": "^1.1.0"
|
|
91
|
+
},
|
|
92
|
+
"engines": {
|
|
93
|
+
"node": ">=18.0.0"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Knowledge Base
|
|
2
|
+
|
|
3
|
+
> A curated collection of factual knowledge about this project - what we currently know and believe to be true. This is NOT a historical log, but a living reference that evolves as understanding improves.
|
|
4
|
+
|
|
5
|
+
**Maintenance Guide**: See `knowledge-maintenance-guide.md` for instructions on how to maintain this knowledge base.
|
|
6
|
+
|
|
7
|
+
**Core Principle**: This document represents current understanding, not a history. When knowledge evolves, update existing entries rather than appending new ones.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Project Knowledge
|
|
12
|
+
|
|
13
|
+
_This knowledge base will be populated as you work. Add new discoveries, update existing understanding, and remove outdated information following the maintenance guide principles._
|
|
14
|
+
|
|
15
|
+
### When to Update This File
|
|
16
|
+
|
|
17
|
+
- **ADD**: New factual information discovered, new patterns emerge, new areas become relevant
|
|
18
|
+
- **UPDATE**: Facts change, understanding deepens, multiple facts can be consolidated, language can be clarified
|
|
19
|
+
- **REMOVE**: Information becomes irrelevant, facts proven incorrect, entries superseded by better content
|
|
20
|
+
|
|
21
|
+
### Format Guidelines
|
|
22
|
+
|
|
23
|
+
- Use clear, declarative statements in present tense
|
|
24
|
+
- State facts confidently when known; flag uncertainty when it exists
|
|
25
|
+
- Write for someone reading this 6 months from now
|
|
26
|
+
- Keep entries relevant and actionable
|
|
27
|
+
- Favor consolidation over accumulation
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Example Structure
|
|
32
|
+
|
|
33
|
+
Below is an example structure. Feel free to organize knowledge in the way that makes most sense for this project:
|
|
34
|
+
|
|
35
|
+
### Architecture & Infrastructure
|
|
36
|
+
|
|
37
|
+
_System architecture, deployment patterns, infrastructure details_
|
|
38
|
+
|
|
39
|
+
### Testing Patterns
|
|
40
|
+
|
|
41
|
+
_Test strategies, common test scenarios, testing conventions_
|
|
42
|
+
|
|
43
|
+
### UI/UX Patterns
|
|
44
|
+
|
|
45
|
+
_User interface conventions, interaction patterns, design system details_
|
|
46
|
+
|
|
47
|
+
### Data & APIs
|
|
48
|
+
|
|
49
|
+
_Data models, API behaviors, integration patterns_
|
|
50
|
+
|
|
51
|
+
### Known Issues & Workarounds
|
|
52
|
+
|
|
53
|
+
_Current limitations, known bugs, and their workarounds_
|
|
54
|
+
|
|
55
|
+
### Domain Knowledge
|
|
56
|
+
|
|
57
|
+
_Business domain facts, terminology, rules, and context_
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
**Remember**: Every entry should answer "Will this help someone working on this project in 6 months?"
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Knowledge Maintenance Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This document provides instructions for maintaining a **Context** or **Knowledge Base** - a living collection of factual knowledge that is actively curated and updated rather than simply accumulated over time.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Core Principle: This is a Curated Snapshot, Not a Log
|
|
10
|
+
|
|
11
|
+
This document represents **what we currently know and believe to be true**, not a history of what we've learned. Think of it as a living reference that evolves as understanding improves.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## When to ADD
|
|
16
|
+
|
|
17
|
+
Add new entries when:
|
|
18
|
+
|
|
19
|
+
- New factual information is discovered
|
|
20
|
+
- New patterns or relationships emerge
|
|
21
|
+
- New areas of knowledge become relevant
|
|
22
|
+
|
|
23
|
+
**Check first**: Does this duplicate or overlap with existing entries?
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## When to UPDATE
|
|
28
|
+
|
|
29
|
+
Update existing entries when:
|
|
30
|
+
|
|
31
|
+
- Facts change or we discover more accurate information
|
|
32
|
+
- Understanding deepens (replace shallow with deeper insight)
|
|
33
|
+
- Multiple related facts can be consolidated into one coherent statement
|
|
34
|
+
- Language can be clarified or made more precise
|
|
35
|
+
|
|
36
|
+
**Goal**: Replace outdated understanding with current understanding
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## When to REMOVE
|
|
41
|
+
|
|
42
|
+
Remove entries when:
|
|
43
|
+
|
|
44
|
+
- Information becomes irrelevant to current needs
|
|
45
|
+
- Facts are proven incorrect (unless there's value in noting the correction)
|
|
46
|
+
- Information is superseded by better, more comprehensive entries
|
|
47
|
+
- Entry is redundant with other content
|
|
48
|
+
|
|
49
|
+
**Key question**: "If someone reads this in 6 months, will it help them?"
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Maintenance Principles
|
|
54
|
+
|
|
55
|
+
### 1. Favor Consolidation Over Addition
|
|
56
|
+
|
|
57
|
+
- Before adding, ask: "Can this merge with existing knowledge?"
|
|
58
|
+
- Example: Instead of 10 facts about a person, maintain 2-3 well-organized paragraphs
|
|
59
|
+
|
|
60
|
+
### 2. Update Rather Than Append
|
|
61
|
+
|
|
62
|
+
- When information evolves, replace the old statement
|
|
63
|
+
- Keep history only if the evolution itself is important
|
|
64
|
+
- Example: ~~"User is learning Python"~~ → "User is proficient in Python and focusing on FastAPI"
|
|
65
|
+
|
|
66
|
+
### 3. Regular Pruning
|
|
67
|
+
|
|
68
|
+
- Periodically review for outdated or low-value entries
|
|
69
|
+
- Ask: "Is this still accurate? Still relevant? Could it be stated better?"
|
|
70
|
+
- Aim for signal-to-noise ratio improvement
|
|
71
|
+
|
|
72
|
+
### 4. Quality Over Completeness
|
|
73
|
+
|
|
74
|
+
- Better to have 50 highly relevant, accurate facts than 500 marginally useful ones
|
|
75
|
+
- Prioritize insights over raw data
|
|
76
|
+
- Focus on what's actionable or decision-relevant
|
|
77
|
+
|
|
78
|
+
### 5. Resolve Contradictions Immediately
|
|
79
|
+
|
|
80
|
+
- If new information contradicts old, investigate and keep only the truth
|
|
81
|
+
- Don't accumulate conflicting statements
|
|
82
|
+
|
|
83
|
+
### 6. Use Clear, Declarative Statements
|
|
84
|
+
|
|
85
|
+
- Write in present tense: "User works at X" not "User mentioned they work at X"
|
|
86
|
+
- State facts confidently when known; flag uncertainty when it exists
|
|
87
|
+
- Avoid hedging unless genuinely uncertain
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Anti-Patterns to Avoid
|
|
92
|
+
|
|
93
|
+
| ❌ Don't Do This | ✅ Do This Instead |
|
|
94
|
+
|-----------------|-------------------|
|
|
95
|
+
| "On Tuesday user said X, then on Friday user said Y" | "User's position on X is Y" (keep most current) |
|
|
96
|
+
| Keeping every detail ever mentioned | Keeping relevant, current details |
|
|
97
|
+
| "User might like coffee, user mentioned tea once, user drinks water" | "User prefers tea; also drinks coffee occasionally" |
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Project Context
|
|
2
|
+
|
|
3
|
+
## Customer Information
|
|
4
|
+
**Customer Name:** {{CUSTOMER_NAME}}
|
|
5
|
+
**Primary Contact:** [To be filled]
|
|
6
|
+
|
|
7
|
+
## Project Information
|
|
8
|
+
**Project Name:** {{PROJECT_NAME}}
|
|
9
|
+
**Description:** [To be filled]
|
|
10
|
+
**Repository:** [To be filled]
|
|
11
|
+
|
|
12
|
+
## Development Process
|
|
13
|
+
**Methodology:** [Agile/Waterfall/Hybrid - To be filled]
|
|
14
|
+
**Sprint Length:** [e.g., 2 weeks - To be filled]
|
|
15
|
+
**Current Sprint:** [To be filled]
|
|
16
|
+
|
|
17
|
+
## QA Integration
|
|
18
|
+
**QA Entry Point:** [e.g., After development complete, During development - To be filled]
|
|
19
|
+
**Definition of Done:** [QA criteria for story completion - To be filled]
|
|
20
|
+
**Sign-off Process:** [Who approves test results - To be filled]
|
|
21
|
+
|
|
22
|
+
## Tools & Systems
|
|
23
|
+
**Bug Tracking:** {{BUG_TRACKING_SYSTEM}}
|
|
24
|
+
**Documentation:** {{DOCUMENTATION_SYSTEM}}
|
|
25
|
+
**CI/CD Platform:** [e.g., GitHub Actions, Jenkins - To be filled]
|
|
26
|
+
**Communication:** [e.g., Slack channel - To be filled]
|
|
27
|
+
|
|
28
|
+
## Team Contacts
|
|
29
|
+
**Product Owner:** [Name and contact - To be filled]
|
|
30
|
+
**Tech Lead:** [Name and contact - To be filled]
|
|
31
|
+
**QA Lead:** [Name and contact - To be filled]
|
|
32
|
+
**DevOps Contact:** [Name and contact - To be filled]
|
|
33
|
+
|
|
34
|
+
## Notes
|
|
35
|
+
[Any additional context about the project, special requirements, or considerations]
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Sub-Agent Memory: Maintenance Instructions
|
|
2
|
+
|
|
3
|
+
## What This Memory Is
|
|
4
|
+
|
|
5
|
+
A focused collection of knowledge relevant to your specific role. This is your working knowledge, not a log of interactions.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## When to ADD
|
|
10
|
+
|
|
11
|
+
Add when information:
|
|
12
|
+
- Directly impacts your decisions or outputs
|
|
13
|
+
- Represents a pattern or learning within your domain
|
|
14
|
+
- Prevents repeated mistakes in your area
|
|
15
|
+
|
|
16
|
+
**Check first**: Does this overlap with main agent knowledge or another sub-agent's domain?
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## When to UPDATE
|
|
21
|
+
|
|
22
|
+
Update when:
|
|
23
|
+
- Preferences or requirements change within your domain
|
|
24
|
+
- Understanding deepens through repeated interactions
|
|
25
|
+
- Patterns evolve or are refined
|
|
26
|
+
- Multiple related facts can be consolidated
|
|
27
|
+
|
|
28
|
+
**Replace** outdated information with current understanding.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## When to REMOVE
|
|
33
|
+
|
|
34
|
+
Remove when:
|
|
35
|
+
- No longer relevant to current work
|
|
36
|
+
- Better handled by main agent's knowledge
|
|
37
|
+
- Proven incorrect or outdated
|
|
38
|
+
- Never actually used in decision-making
|
|
39
|
+
|
|
40
|
+
**Test**: "Has this influenced a decision recently? Will it influence one soon?"
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Core Rules
|
|
45
|
+
|
|
46
|
+
1. **Stay in your domain** - Don't duplicate main agent knowledge
|
|
47
|
+
2. **Operational over historical** - Keep patterns, not logs
|
|
48
|
+
3. **Patterns over instances** - Generalize from specific events
|
|
49
|
+
4. **Actionable over observational** - Every entry must answer "How does this change what I do?"
|
|
50
|
+
5. **Consolidate aggressively** - Aim for 10-30 high-signal entries
|
|
51
|
+
6. **Update as understanding crystallizes** - Refine vague into specific
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Quick Decision Tree
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
New information
|
|
59
|
+
│
|
|
60
|
+
├─ Relevant to my function? No → Ignore or suggest for main agent
|
|
61
|
+
│ Yes ↓
|
|
62
|
+
│
|
|
63
|
+
├─ Actionable (changes what I do)? No → Don't store
|
|
64
|
+
│ Yes ↓
|
|
65
|
+
│
|
|
66
|
+
├─ Duplicates existing? Yes → UPDATE existing entry
|
|
67
|
+
│ No ↓
|
|
68
|
+
│
|
|
69
|
+
└─ Belongs in main agent? Yes → Move to main agent
|
|
70
|
+
No → ADD to my memory
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Division with Main Agent
|
|
76
|
+
|
|
77
|
+
**Main Agent** stores:
|
|
78
|
+
- User's overall preferences and background
|
|
79
|
+
- Project-wide decisions
|
|
80
|
+
- Cross-cutting concerns
|
|
81
|
+
|
|
82
|
+
**You (Sub-Agent)** store:
|
|
83
|
+
- Domain-specific preferences and patterns
|
|
84
|
+
- Tactical learnings within your scope
|
|
85
|
+
- Working knowledge for your specific tasks
|
|
86
|
+
|
|
87
|
+
**When in doubt**: If multiple sub-agents could use it → Main agent
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Test Plan Template
|
|
2
|
+
|
|
3
|
+
## Test Scenarios
|
|
4
|
+
|
|
5
|
+
### Scenario 1: [Name]
|
|
6
|
+
**Objective**: [What are we testing?]
|
|
7
|
+
|
|
8
|
+
**Test Cases**:
|
|
9
|
+
1. [Test case description]
|
|
10
|
+
2. [Test case description]
|
|
11
|
+
|
|
12
|
+
**Expected Results**:
|
|
13
|
+
- [Expected outcome]
|
|
14
|
+
|
|
15
|
+
### Scenario 2: [Name]
|
|
16
|
+
**Objective**: [What are we testing?]
|
|
17
|
+
|
|
18
|
+
**Test Cases**:
|
|
19
|
+
1. [Test case description]
|
|
20
|
+
|
|
21
|
+
**Expected Results**:
|
|
22
|
+
- [Expected outcome]
|
|
23
|
+
|
|
24
|
+
## Notes
|
|
25
|
+
[Add any additional context or requirements]
|