cfsa-antigravity 2.0.0 → 2.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/README.md +14 -0
- package/package.json +1 -1
- package/template/.agent/instructions/commands.md +8 -32
- package/template/.agent/instructions/example.md +21 -0
- package/template/.agent/instructions/patterns.md +3 -3
- package/template/.agent/instructions/tech-stack.md +71 -23
- package/template/.agent/instructions/workflow.md +12 -1
- package/template/.agent/rules/completion-checklist.md +6 -0
- package/template/.agent/rules/security-first.md +3 -3
- package/template/.agent/rules/vertical-slices.md +1 -1
- package/template/.agent/skill-library/MANIFEST.md +6 -0
- package/template/.agent/skill-library/stack/devops/git-advanced/SKILL.md +972 -0
- package/template/.agent/skill-library/stack/devops/git-workflow/SKILL.md +420 -0
- package/template/.agent/skills/api-versioning/SKILL.md +44 -298
- package/template/.agent/skills/api-versioning/references/typescript.md +157 -0
- package/template/.agent/skills/architecture-mapping/SKILL.md +13 -13
- package/template/.agent/skills/bootstrap-agents/SKILL.md +151 -152
- package/template/.agent/skills/clean-code/SKILL.md +64 -118
- package/template/.agent/skills/clean-code/references/typescript.md +126 -0
- package/template/.agent/skills/database-schema-design/SKILL.md +93 -317
- package/template/.agent/skills/database-schema-design/references/relational.md +228 -0
- package/template/.agent/skills/error-handling-patterns/SKILL.md +62 -557
- package/template/.agent/skills/error-handling-patterns/references/go.md +162 -0
- package/template/.agent/skills/error-handling-patterns/references/python.md +262 -0
- package/template/.agent/skills/error-handling-patterns/references/rust.md +112 -0
- package/template/.agent/skills/error-handling-patterns/references/typescript.md +178 -0
- package/template/.agent/skills/idea-extraction/SKILL.md +322 -224
- package/template/.agent/skills/logging-best-practices/SKILL.md +108 -767
- package/template/.agent/skills/logging-best-practices/references/go.md +49 -0
- package/template/.agent/skills/logging-best-practices/references/python.md +52 -0
- package/template/.agent/skills/logging-best-practices/references/typescript.md +215 -0
- package/template/.agent/skills/migration-management/SKILL.md +127 -311
- package/template/.agent/skills/migration-management/references/relational.md +214 -0
- package/template/.agent/skills/parallel-feature-development/SKILL.md +34 -43
- package/template/.agent/skills/pipeline-rubrics/references/be-rubric.md +1 -1
- package/template/.agent/skills/pipeline-rubrics/references/ia-rubric.md +2 -2
- package/template/.agent/skills/pipeline-rubrics/references/scoring.md +1 -1
- package/template/.agent/skills/pipeline-rubrics/references/vision-rubric.md +2 -1
- package/template/.agent/skills/prd-templates/SKILL.md +23 -6
- package/template/.agent/skills/prd-templates/references/be-spec-template.md +2 -2
- package/template/.agent/skills/prd-templates/references/decomposition-templates.md +2 -2
- package/template/.agent/skills/prd-templates/references/engineering-standards-template.md +2 -0
- package/template/.agent/skills/prd-templates/references/fe-spec-template.md +1 -1
- package/template/.agent/skills/prd-templates/references/fractal-cx-template.md +58 -0
- package/template/.agent/skills/prd-templates/references/fractal-feature-template.md +93 -0
- package/template/.agent/skills/prd-templates/references/fractal-node-index-template.md +55 -0
- package/template/.agent/skills/prd-templates/references/ideation-crosscut-template.md +26 -47
- package/template/.agent/skills/prd-templates/references/ideation-index-template.md +47 -31
- package/template/.agent/skills/prd-templates/references/operational-templates.md +1 -1
- package/template/.agent/skills/prd-templates/references/placeholder-workflow-mapping.md +50 -21
- package/template/.agent/skills/prd-templates/references/skill-loading-protocol.md +32 -0
- package/template/.agent/skills/prd-templates/references/slice-completion-gates.md +29 -0
- package/template/.agent/skills/prd-templates/references/spec-coverage-sweep.md +3 -3
- package/template/.agent/skills/prd-templates/references/tdd-testing-policy.md +39 -0
- package/template/.agent/skills/prd-templates/references/vision-template.md +8 -8
- package/template/.agent/skills/regex-patterns/SKILL.md +122 -540
- package/template/.agent/skills/regex-patterns/references/go.md +44 -0
- package/template/.agent/skills/regex-patterns/references/javascript.md +63 -0
- package/template/.agent/skills/regex-patterns/references/python.md +77 -0
- package/template/.agent/skills/regex-patterns/references/rust.md +43 -0
- package/template/.agent/skills/resolve-ambiguity/SKILL.md +1 -1
- package/template/.agent/skills/session-continuity/SKILL.md +11 -9
- package/template/.agent/skills/session-continuity/protocols/02-progress-generation.md +2 -2
- package/template/.agent/skills/session-continuity/protocols/04-pattern-extraction.md +1 -1
- package/template/.agent/skills/session-continuity/protocols/05-session-close.md +1 -1
- package/template/.agent/skills/session-continuity/protocols/09-parallel-claim.md +1 -1
- package/template/.agent/skills/session-continuity/protocols/10-placeholder-verification-gate.md +57 -78
- package/template/.agent/skills/session-continuity/protocols/11-parallel-synthesis.md +1 -1
- package/template/.agent/skills/spec-writing/SKILL.md +1 -1
- package/template/.agent/skills/tdd-workflow/SKILL.md +94 -317
- package/template/.agent/skills/tdd-workflow/references/typescript.md +231 -0
- package/template/.agent/skills/testing-strategist/SKILL.md +74 -687
- package/template/.agent/skills/testing-strategist/references/typescript.md +328 -0
- package/template/.agent/skills/workflow-automation/SKILL.md +62 -154
- package/template/.agent/skills/workflow-automation/references/inngest.md +88 -0
- package/template/.agent/skills/workflow-automation/references/temporal.md +64 -0
- package/template/.agent/workflows/bootstrap-agents-fill.md +85 -143
- package/template/.agent/workflows/bootstrap-agents-provision.md +90 -107
- package/template/.agent/workflows/create-prd-architecture.md +23 -16
- package/template/.agent/workflows/create-prd-compile.md +11 -12
- package/template/.agent/workflows/create-prd-design-system.md +1 -1
- package/template/.agent/workflows/create-prd-security.md +9 -11
- package/template/.agent/workflows/create-prd-stack.md +10 -4
- package/template/.agent/workflows/create-prd.md +9 -9
- package/template/.agent/workflows/decompose-architecture-structure.md +4 -6
- package/template/.agent/workflows/decompose-architecture-validate.md +18 -1
- package/template/.agent/workflows/decompose-architecture.md +18 -3
- package/template/.agent/workflows/evolve-contract.md +11 -11
- package/template/.agent/workflows/evolve-feature-classify.md +14 -6
- package/template/.agent/workflows/ideate-discover.md +72 -107
- package/template/.agent/workflows/ideate-extract.md +84 -63
- package/template/.agent/workflows/ideate-validate.md +26 -22
- package/template/.agent/workflows/ideate.md +9 -9
- package/template/.agent/workflows/implement-slice-setup.md +25 -23
- package/template/.agent/workflows/implement-slice-tdd.md +73 -89
- package/template/.agent/workflows/implement-slice.md +4 -4
- package/template/.agent/workflows/plan-phase-preflight.md +6 -2
- package/template/.agent/workflows/plan-phase-write.md +6 -8
- package/template/.agent/workflows/remediate-pipeline-assess.md +2 -1
- package/template/.agent/workflows/resolve-ambiguity.md +2 -2
- package/template/.agent/workflows/update-architecture-map.md +22 -5
- package/template/.agent/workflows/validate-phase-quality.md +155 -0
- package/template/.agent/workflows/validate-phase-readiness.md +167 -0
- package/template/.agent/workflows/validate-phase.md +19 -157
- package/template/.agent/workflows/verify-infrastructure.md +10 -10
- package/template/.agent/workflows/write-architecture-spec-design.md +23 -14
- package/template/.agent/workflows/write-be-spec-classify.md +25 -21
- package/template/.agent/workflows/write-be-spec.md +1 -1
- package/template/.agent/workflows/write-fe-spec-classify.md +6 -12
- package/template/.agent/workflows/write-fe-spec-write.md +1 -1
- package/template/AGENTS.md +6 -2
- package/template/GEMINI.md +5 -3
- package/template/docs/README.md +10 -10
- package/template/docs/kit-architecture.md +126 -33
- package/template/docs/plans/ideation/README.md +8 -3
- package/template/.agent/skills/prd-templates/references/ideation-domain-template.md +0 -55
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# TypeScript TDD Patterns
|
|
2
|
+
|
|
3
|
+
Language-specific patterns for the `tdd-workflow` skill. Read `SKILL.md` first for universal methodology.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Test Frameworks
|
|
8
|
+
|
|
9
|
+
| Tool | Purpose |
|
|
10
|
+
|------|---------|
|
|
11
|
+
| **Jest** or **Vitest** | Unit + integration test runner |
|
|
12
|
+
| **React Testing Library** | Component testing (user-centric) |
|
|
13
|
+
| **Playwright** | E2E browser automation |
|
|
14
|
+
|
|
15
|
+
## Commands
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# Run tests
|
|
19
|
+
npm test
|
|
20
|
+
|
|
21
|
+
# Watch mode
|
|
22
|
+
npm test -- --watch
|
|
23
|
+
|
|
24
|
+
# Coverage report
|
|
25
|
+
npm run test:coverage
|
|
26
|
+
|
|
27
|
+
# E2E tests
|
|
28
|
+
npx playwright test
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Unit Test Pattern (Jest/Vitest)
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
import { render, screen, fireEvent } from '@testing-library/react'
|
|
35
|
+
import { Button } from './Button'
|
|
36
|
+
|
|
37
|
+
describe('Button Component', () => {
|
|
38
|
+
it('renders with correct text', () => {
|
|
39
|
+
render(<Button>Click me</Button>)
|
|
40
|
+
expect(screen.getByText('Click me')).toBeInTheDocument()
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
it('calls onClick when clicked', () => {
|
|
44
|
+
const handleClick = jest.fn()
|
|
45
|
+
render(<Button onClick={handleClick}>Click</Button>)
|
|
46
|
+
|
|
47
|
+
fireEvent.click(screen.getByRole('button'))
|
|
48
|
+
|
|
49
|
+
expect(handleClick).toHaveBeenCalledTimes(1)
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
it('is disabled when disabled prop is true', () => {
|
|
53
|
+
render(<Button disabled>Click</Button>)
|
|
54
|
+
expect(screen.getByRole('button')).toBeDisabled()
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## API Integration Test Pattern
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
import { NextRequest } from 'next/server'
|
|
63
|
+
import { GET } from './route'
|
|
64
|
+
|
|
65
|
+
describe('GET /api/markets', () => {
|
|
66
|
+
it('returns markets successfully', async () => {
|
|
67
|
+
const request = new NextRequest('http://localhost/api/markets')
|
|
68
|
+
const response = await GET(request)
|
|
69
|
+
const data = await response.json()
|
|
70
|
+
|
|
71
|
+
expect(response.status).toBe(200)
|
|
72
|
+
expect(data.success).toBe(true)
|
|
73
|
+
expect(Array.isArray(data.data)).toBe(true)
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
it('validates query parameters', async () => {
|
|
77
|
+
const request = new NextRequest('http://localhost/api/markets?limit=invalid')
|
|
78
|
+
const response = await GET(request)
|
|
79
|
+
|
|
80
|
+
expect(response.status).toBe(400)
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
it('handles database errors gracefully', async () => {
|
|
84
|
+
// Mock database failure
|
|
85
|
+
const request = new NextRequest('http://localhost/api/markets')
|
|
86
|
+
// Test error handling
|
|
87
|
+
})
|
|
88
|
+
})
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## E2E Test Pattern (Playwright)
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
import { test, expect } from '@playwright/test'
|
|
95
|
+
|
|
96
|
+
test('user can search and filter markets', async ({ page }) => {
|
|
97
|
+
await page.goto('/')
|
|
98
|
+
await page.click('a[href="/markets"]')
|
|
99
|
+
|
|
100
|
+
await expect(page.locator('h1')).toContainText('Markets')
|
|
101
|
+
|
|
102
|
+
await page.fill('input[placeholder="Search markets"]', 'election')
|
|
103
|
+
await page.waitForTimeout(600)
|
|
104
|
+
|
|
105
|
+
const results = page.locator('[data-testid="market-card"]')
|
|
106
|
+
await expect(results).toHaveCount(5, { timeout: 5000 })
|
|
107
|
+
|
|
108
|
+
const firstResult = results.first()
|
|
109
|
+
await expect(firstResult).toContainText('election', { ignoreCase: true })
|
|
110
|
+
|
|
111
|
+
await page.click('button:has-text("Active")')
|
|
112
|
+
await expect(results).toHaveCount(3)
|
|
113
|
+
})
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## File Organization
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
src/
|
|
120
|
+
├── components/
|
|
121
|
+
│ ├── Button/
|
|
122
|
+
│ │ ├── Button.tsx
|
|
123
|
+
│ │ ├── Button.test.tsx # Unit tests
|
|
124
|
+
│ │ └── Button.stories.tsx # Storybook
|
|
125
|
+
│ └── MarketCard/
|
|
126
|
+
│ ├── MarketCard.tsx
|
|
127
|
+
│ └── MarketCard.test.tsx
|
|
128
|
+
├── app/
|
|
129
|
+
│ └── api/
|
|
130
|
+
│ └── markets/
|
|
131
|
+
│ ├── route.ts
|
|
132
|
+
│ └── route.test.ts # Integration tests
|
|
133
|
+
└── e2e/
|
|
134
|
+
├── markets.spec.ts # E2E tests
|
|
135
|
+
├── trading.spec.ts
|
|
136
|
+
└── auth.spec.ts
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Mocking External Services
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
// Supabase mock
|
|
143
|
+
jest.mock('@/lib/supabase', () => ({
|
|
144
|
+
supabase: {
|
|
145
|
+
from: jest.fn(() => ({
|
|
146
|
+
select: jest.fn(() => ({
|
|
147
|
+
eq: jest.fn(() => Promise.resolve({
|
|
148
|
+
data: [{ id: 1, name: 'Test Market' }],
|
|
149
|
+
error: null
|
|
150
|
+
}))
|
|
151
|
+
}))
|
|
152
|
+
}))
|
|
153
|
+
}
|
|
154
|
+
}))
|
|
155
|
+
|
|
156
|
+
// Redis mock
|
|
157
|
+
jest.mock('@/lib/redis', () => ({
|
|
158
|
+
searchMarketsByVector: jest.fn(() => Promise.resolve([
|
|
159
|
+
{ slug: 'test-market', similarity_score: 0.95 }
|
|
160
|
+
])),
|
|
161
|
+
checkRedisHealth: jest.fn(() => Promise.resolve({ connected: true }))
|
|
162
|
+
}))
|
|
163
|
+
|
|
164
|
+
// OpenAI mock
|
|
165
|
+
jest.mock('@/lib/openai', () => ({
|
|
166
|
+
generateEmbedding: jest.fn(() => Promise.resolve(
|
|
167
|
+
new Array(1536).fill(0.1) // Mock 1536-dim embedding
|
|
168
|
+
))
|
|
169
|
+
}))
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Coverage Thresholds
|
|
173
|
+
|
|
174
|
+
```json
|
|
175
|
+
{
|
|
176
|
+
"jest": {
|
|
177
|
+
"coverageThresholds": {
|
|
178
|
+
"global": {
|
|
179
|
+
"branches": 80,
|
|
180
|
+
"functions": 80,
|
|
181
|
+
"lines": 80,
|
|
182
|
+
"statements": 80
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## CI/CD Integration
|
|
190
|
+
|
|
191
|
+
```yaml
|
|
192
|
+
# GitHub Actions
|
|
193
|
+
- name: Run Tests
|
|
194
|
+
run: npm test -- --coverage
|
|
195
|
+
- name: Upload Coverage
|
|
196
|
+
uses: codecov/codecov-action@v3
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Assertion Examples
|
|
200
|
+
|
|
201
|
+
### ❌ Shallow (BANNED)
|
|
202
|
+
```typescript
|
|
203
|
+
expect(result).toBeDefined()
|
|
204
|
+
expect(result).toBeTruthy()
|
|
205
|
+
expect(response.status).toBe(200) // alone — doesn't verify body
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### ✅ Deep (REQUIRED)
|
|
209
|
+
```typescript
|
|
210
|
+
expect(result).toEqual({
|
|
211
|
+
id: expect.any(String),
|
|
212
|
+
name: 'Test Market',
|
|
213
|
+
status: 'active',
|
|
214
|
+
trades: expect.arrayContaining([
|
|
215
|
+
expect.objectContaining({ amount: 100 })
|
|
216
|
+
])
|
|
217
|
+
})
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## Selector Guidance
|
|
221
|
+
|
|
222
|
+
### ❌ Brittle
|
|
223
|
+
```typescript
|
|
224
|
+
await page.click('.css-class-xyz')
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### ✅ Semantic
|
|
228
|
+
```typescript
|
|
229
|
+
await page.click('button:has-text("Submit")')
|
|
230
|
+
await page.click('[data-testid="submit-button"]')
|
|
231
|
+
```
|