dd0c: full product research pipeline - 6 products, 8 phases each
Products: route, drift, alert, portal, cost, run
Phases: brainstorm, design-thinking, innovation-strategy, party-mode,
product-brief, architecture, epics (incl. Epic 10 TF compliance),
test-architecture (TDD strategy)
Brand strategy and market research included.
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
# dd0c/alert — Test Architecture & TDD Strategy
|
||||
**Product:** dd0c/alert (Alert Intelligence Platform)
|
||||
**Version:** 2.0 | **Date:** 2026-02-28 | **Phase:** 7 — Test Architecture
|
||||
**Stack:** TypeScript / Node.js 20 | Vitest | Testcontainers | LocalStack
|
||||
|
||||
---
|
||||
|
||||
## 1. Testing Philosophy & TDD Workflow
|
||||
|
||||
### 1.1 Core Principle
|
||||
|
||||
dd0c/alert is an intelligence platform — it makes decisions about what engineers see during incidents. A wrong suppression decision can hide a P1. A wrong correlation can create noise. **Tests are not optional; they are the specification.**
|
||||
|
||||
Every behavioral rule in the Correlation Engine, Noise Scorer, and Notification Router must be expressed as a failing test before a single line of implementation is written.
|
||||
|
||||
### 1.2 Red-Green-Refactor Cycle
|
||||
|
||||
```
|
||||
RED → Write a failing test that describes the desired behavior.
|
||||
The test must fail for the right reason (not a compile error).
|
||||
|
||||
GREEN → Write the minimum code to make the test pass.
|
||||
No gold-plating. No "while I'm here" changes.
|
||||
|
||||
REFACTOR → Clean up the implementation without breaking tests.
|
||||
Extract functions, rename for clarity, remove duplication.
|
||||
Tests stay green throughout.
|
||||
```
|
||||
|
||||
**Strict rule:** No implementation code is written without a failing test first. PRs that add implementation without a corresponding test are blocked by CI.
|
||||
|
||||
### 1.3 Test Naming Convention
|
||||
|
||||
Tests follow the `given_when_then` pattern using Vitest's `describe`/`it` structure:
|
||||
|
||||
```typescript
|
||||
describe('NoiseScorer', () => {
|
||||
describe('given a deploy-correlated alert window', () => {
|
||||
it('should boost noise score by 25 points when deploy is attached', () => { ... });
|
||||
it('should add 5 additional points when PR title contains "feature-flag"', () => { ... });
|
||||
it('should not boost score above 50 when service matches never-suppress safelist', () => { ... });
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
Test file naming: `{module}.test.ts` for unit tests, `{module}.integration.test.ts` for integration tests, `{journey}.e2e.test.ts` for E2E.
|
||||
|
||||
### 1.4 When Tests Lead (TDD Mandatory)
|
||||
|
||||
TDD is **mandatory** for:
|
||||
- All noise scoring logic (`src/scoring/`)
|
||||
- All correlation rules (`src/correlation/`)
|
||||
- All suppression decisions (`src/suppression/`)
|
||||
- HMAC validation per provider
|
||||
- Canonical schema mapping (every provider parser)
|
||||
- Feature flag circuit breaker logic
|
||||
- Governance policy enforcement (`policy.json` evaluation)
|
||||
- Any function with cyclomatic complexity > 3
|
||||
|
||||
TDD is **recommended but not enforced** for:
|
||||
- Infrastructure glue code (SQS consumers, DynamoDB adapters)
|
||||
- Slack Block Kit message formatting
|
||||
- Dashboard API route handlers (covered by integration tests)
|
||||
|
||||
### 1.5 Test Ownership
|
||||
|
||||
Each epic owns its tests. The Correlation Engine team owns `src/correlation/**/*.test.ts`. No cross-team test ownership. If a test breaks due to a dependency change, the team that changed the dependency fixes the test.
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user