← ubon
---
description: Guidelines for developing Ubon itself
globs: ["src/**/*.ts", "src/**/*.tsx"]
---
# Ubon Development Guidelines
## Architecture
- **Rules**: `src/rules/<category>/<RULEID>.ts` - Each rule is a separate file
- **Scanners**: `src/scanners/*.ts` - Extend `BaseScanner` for new scanners
- **CLI**: `src/cli.ts` + `src/cli/shared.ts` - Command definitions and shared logic
- **Types**: `src/types/index.ts` - Core interfaces
## Adding a New Rule
1. Create `src/rules/<category>/<RULEID>.ts`:
```typescript
import { Rule } from '../types';
const rule: Rule = {
meta: {
id: 'RULEID',
category: 'security', // or 'development', 'accessibility'
severity: 'high', // 'high' | 'medium' | 'low'
message: 'Human-readable description',
fix: 'How to fix this',
impact: 'Why this matters'
},
impl: {
patterns: [{
ruleId: 'RULEID',
confidence: 0.9,
pattern: /your-regex/gi,
message: 'Same as meta.message',
severity: 'high',
fix: 'Same as meta.fix'
}],
fileTypes: ['js', 'jsx', 'ts', 'tsx']
}
};
export default rule;
```
2. Add to `src/rules/<category>/index.ts`
3. Add tests to `src/__tests__/`
## Code Style
- No fluff in documentation or comments
- Factual, direct messages
- Include `confidenceReason` when confidence varies
- Use `BaseScanner` utilities for file iteration and caching
## Testing
```bash
npm test # Run all tests
npm test -- --watch # Watch mode
npm test -- security-rules # Run specific test file
```
## Before Committing
```bash
ubon check --focus-critical # Self-scan for issues
npm test # Ensure tests pass
```