16 KiB
P5-002: Development Workflow Documentation
Priority: P5 (Process/Documentation) Source Reference: From analysis of DEVELOPMENT_TODOS.md and codebase development patterns Date Identified: 2025-11-12
Problem Description
RedFlag lacks comprehensive development workflow documentation. Current development processes are undocumented, leading to inconsistent practices, onboarding difficulties, and potential quality issues. New developers lack guidance for contributing effectively.
Impact
- Onboarding Difficulty: New contributors lack development guidance
- Inconsistent Processes: Different developers use different approaches
- Quality Variations: No standardized code review or testing procedures
- Knowledge Loss: Development practices exist only in team members' heads
- Collaboration Issues: No shared understanding of development workflows
Current State Analysis
Existing Documentation Gaps
- No step-by-step development setup guide
- No code contribution guidelines
- No pull request process documentation
- No testing requirements documentation
- No release process guidelines
- No debugging and troubleshooting guides
Informal Practices Observed
- Docker-based development environment
- Multi-component architecture (server, agent, web)
- Go backend with React frontend
- PostgreSQL database with migrations
- Cross-platform agent builds
Proposed Solution
Create comprehensive development workflow documentation:
1. Development Setup Guide
# RedFlag Development Setup
## Prerequisites
- Docker and Docker Compose
- Go 1.21+ (for local development)
- Node.js 18+ (for frontend development)
- PostgreSQL client tools (optional)
## Quick Start (Docker Environment)
```bash
# Clone repository
git clone https://github.com/redflag/redflag.git
cd redflag
# Start development environment
docker-compose up -d
# Initialize database
docker-compose exec server ./redflag-server migrate
# Access services
# Web UI: http://localhost:3000
# API: http://localhost:8080
# Database: localhost:5432
Local Development Setup
# Install dependencies
make install-deps
# Setup database
make setup-db
# Build components
make build
# Run tests
make test
# Start development servers
make dev
Development Workflow
- Create feature branch:
git checkout -b feature/your-feature - Make changes: Edit code, add tests
- Run tests:
make test-all - Lint code:
make lint - Commit changes: Follow commit message format
- Push and create PR: Submit for code review
### 2. Code Contribution Guidelines
```markdown
# Code Contribution Guidelines
## Coding Standards
### Go Code Style
- Follow standard Go formatting (`gofmt`)
- Use meaningful variable and function names
- Add comments for public functions and complex logic
- Handle errors explicitly
- Use `golint` and `go vet` for static analysis
### TypeScript/React Code Style
- Use Prettier for formatting
- Follow TypeScript best practices
- Use functional components with hooks
- Add JSDoc comments for complex logic
- Use ESLint for static analysis
### File Organization
RedFlag/ ├── aggregator-server/ # Go server │ ├── cmd/ # Main applications │ ├── internal/ # Internal packages │ │ ├── api/ # API handlers │ │ ├── database/ # Database operations │ │ ├── models/ # Data models │ │ └── services/ # Business logic │ └── migrations/ # Database migrations ├── aggregator-agent/ # Go agent │ ├── cmd/ # Agent commands │ ├── internal/ # Internal packages │ │ ├── scanner/ # Update scanners │ │ ├── installer/ # Package installers │ │ └── orchestrator/ # Command orchestration │ └── pkg/ # Public packages ├── aggregator-web/ # React frontend │ ├── src/ │ │ ├── components/ # Reusable components │ │ ├── pages/ # Page components │ │ ├── lib/ # Utilities │ │ └── types/ # TypeScript types │ └── public/ # Static assets └── docs/ # Documentation
## Testing Requirements
### Unit Tests
- All new code must have unit tests
- Test coverage should not decrease
- Use table-driven tests for multiple scenarios
- Mock external dependencies
### Integration Tests
- API endpoints must have integration tests
- Database operations must be tested
- Agent-server communication should be tested
- Use test database for integration tests
### Test Organization
```go
// Example test structure
func TestFunctionName(t *testing.T) {
tests := []struct {
name string
input InputType
expected OutputType
wantErr bool
}{
{
name: "Valid input",
input: validInput,
expected: expectedOutput,
wantErr: false,
},
{
name: "Invalid input",
input: invalidInput,
expected: OutputType{},
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result, err := FunctionName(tt.input)
if tt.wantErr {
assert.Error(t, err)
return
}
assert.NoError(t, err)
assert.Equal(t, tt.expected, result)
})
}
}
Code Review Process
Before Submitting PR
- Self-review: Review your own code changes
- Testing: Ensure all tests pass
- Documentation: Update relevant documentation
- Style: Run linting and formatting tools
PR Requirements
- Clear description of changes
- Link to related issues
- Tests for new functionality
- Documentation updates
- Screenshots for UI changes
Review Guidelines
- Review code logic and design
- Check for potential security issues
- Verify test coverage
- Ensure documentation is accurate
- Check for performance implications
### 3. Pull Request Process
```markdown
# Pull Request Process
## PR Template
```markdown
## Description
Brief description of changes made
## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] Breaking change
- [ ] Documentation update
## Testing
- [ ] Unit tests pass
- [ ] Integration tests pass
- [ ] Manual testing completed
- [ ] Cross-platform testing (if applicable)
## Checklist
- [ ] Code follows style guidelines
- [ ] Self-review completed
- [ ] Documentation updated
- [ ] Tests added/updated
- [ ] Database migrations included (if needed)
- [ ] Security considerations addressed
## Related Issues
Fixes #123
Related to #456
Review Process
-
Automated Checks
- CI/CD pipeline runs tests
- Code quality checks
- Security scans
-
Peer Review
- At least one developer approval required
- Reviewer checks code quality and logic
- Security review for sensitive changes
-
Merge Process
- Address all reviewer comments
- Ensure CI/CD checks pass
- Merge with squash or rebase
Release Process
-
Prepare Release
- Update version numbers
- Update CHANGELOG.md
- Tag release commit
-
Build and Test
- Build all components
- Run full test suite
- Perform manual testing
-
Deploy
- Deploy to staging environment
- Perform smoke tests
- Deploy to production
### 4. Debugging and Troubleshooting Guide
```markdown
# Debugging and Troubleshooting Guide
## Common Development Issues
### Database Connection Issues
```bash
# Check database connectivity
docker-compose exec server ping postgres
# Reset database
docker-compose down -v
docker-compose up -d
docker-compose exec server ./redflag-server migrate
Agent Connection Problems
# Check agent logs
sudo journalctl -u redflag-agent -f
# Test agent connectivity
./redflag-agent --server http://localhost:8080 --check
# Verify agent registration
curl -H "Authorization: Bearer $TOKEN" \
http://localhost:8080/api/v1/agents
Build Issues
# Clean build
make clean
make build
# Check Go version
go version
# Check dependencies
go mod tidy
go mod verify
Debugging Tools
Server Debugging
# Enable debug logging
export LOG_LEVEL=debug
# Run server with debugger
dlv debug ./cmd/server
# Profile server performance
go tool pprof http://localhost:8080/debug/pprof/profile
Agent Debugging
# Run agent in debug mode
./redflag-agent --debug --server http://localhost:8080
# Test specific scanner
./redflag-agent --scan-only dnf --debug
# Check agent configuration
./redflag-agent --config-check
Frontend Debugging
# Start development server
cd aggregator-web
npm run dev
# Run tests with coverage
npm run test:coverage
# Check for linting issues
npm run lint
Performance Debugging
Database Performance
-- Check slow queries
SELECT query, mean_time, calls
FROM pg_stat_statements
ORDER BY mean_time DESC
LIMIT 10;
-- Check database size
SELECT pg_size_pretty(pg_database_size('aggregator'));
-- Check table sizes
SELECT schemaname, tablename,
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size
FROM pg_tables
WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
Agent Performance
# Monitor agent resource usage
top -p $(pgrep redflag-agent)
# Check agent memory usage
ps aux | grep redflag-agent
# Profile agent performance
go tool pprof http://localhost:8081/debug/pprof/profile
Log Analysis
Server Logs
# View server logs
docker-compose logs -f server
# Filter logs by level
docker-compose logs server | grep ERROR
# Analyze log patterns
docker-compose logs server | grep "rate limit"
Agent Logs
# View agent logs
sudo journalctl -u redflag-agent -f
# Filter by log level
sudo journalctl -u redflag-agent | grep ERROR
# Check specific time period
sudo journalctl -u redflag-agent --since "2025-01-01" --until "2025-01-02"
Environment-Specific Issues
Development Environment
# Reset development environment
make dev-reset
# Check service status
docker-compose ps
# Access development database
docker-compose exec postgres psql -U aggregator -d aggregator
Production Environment
# Check service health
curl -f http://localhost:8080/health || echo "Health check failed"
# Monitor system resources
htop
iostat -x 1
# Check disk space
df -h
### 5. Release and Deployment Guide
```markdown
# Release and Deployment Guide
## Version Management
### Semantic Versioning
- Major version: Breaking changes
- Minor version: New features (backward compatible)
- Patch version: Bug fixes (backward compatible)
### Version Number Format
vX.Y.Z X = Major version Y = Minor version Z = Patch version
### Version Bump Checklist
1. **Update version numbers**
- `aggregator-server/internal/version/version.go`
- `aggregator-agent/cmd/agent/version.go`
- `aggregator-web/package.json`
2. **Update CHANGELOG.md**
- Add new version section
- Document all changes
- Credit contributors
3. **Tag release**
```bash
git tag -a v0.2.0 -m "Release v0.2.0"
git push origin v0.2.0
Build Process
Automated Builds
# Build all components
make build-all
# Build specific component
make build-server
make build-agent
make build-web
# Build for all platforms
make build-cross-platform
Release Builds
# Create release artifacts
make release
# Verify builds
make verify-release
Deployment Process
Staging Deployment
-
Prepare staging environment
# Deploy to staging make deploy-staging -
Run smoke tests
make test-staging -
Manual verification
- Check web UI functionality
- Verify API endpoints
- Test agent registration
Production Deployment
-
Pre-deployment checklist
- All tests passing
- Documentation updated
- Security review completed
- Performance tests passed
- Backup created
-
Deploy to production
# Deploy to production make deploy-production -
Post-deployment verification
# Health checks make verify-production
Rollback Procedures
Quick Rollback
# Rollback to previous version
make rollback-to v0.1.23
Full Rollback
- Stop current deployment
- Restore from backup
- Deploy previous version
- Verify functionality
- Communicate rollback
Monitoring After Deployment
Health Checks
# Check service health
curl -f http://localhost:8080/health
# Check database connectivity
docker-compose exec server ./redflag-server health-check
# Monitor agent check-ins
curl -H "Authorization: Bearer $TOKEN" \
http://localhost:8080/api/v1/agents | jq '. | length'
Performance Monitoring
# Monitor response times
curl -w "@curl-format.txt" http://localhost:8080/api/v1/agents
# Check error rates
docker-compose logs server | grep ERROR | wc -l
Communication
Release Announcement Template
## Release v0.2.0
### New Features
- Feature 1 description
- Feature 2 description
### Bug Fixes
- Bug fix 1 description
- Bug fix 2 description
### Breaking Changes
- Breaking change 1 description
### Upgrade Instructions
1. Backup your installation
2. Follow upgrade guide
3. Verify functionality
### Known Issues
- Any known issues or limitations
## Definition of Done
- [ ] Development setup guide created and tested
- [ ] Code contribution guidelines documented
- [ ] Pull request process defined
- [ ] Debugging guide created
- [ ] Release and deployment guide documented
- [ ] Developer onboarding checklist created
- [ ] Code review checklist developed
- [ ] Makefile targets for all documented processes
## Implementation Details
### Documentation Structure
docs/ ├── development/ │ ├── setup.md │ ├── contributing.md │ ├── pull-request-process.md │ ├── debugging.md │ ├── release-process.md │ └── onboarding.md ├── templates/ │ ├── pull-request-template.md │ ├── release-announcement.md │ └── bug-report.md └── scripts/ ├── setup-dev.sh ├── test-all.sh └── release.sh
### Makefile Targets
```makefile
.PHONY: install-deps setup-db build test lint dev clean release
install-deps:
# Install development dependencies
setup-db:
# Setup development database
build:
# Build all components
test:
# Run all tests
lint:
# Run code quality checks
dev:
# Start development environment
clean:
# Clean build artifacts
release:
# Create release artifacts
Prerequisites
- Development environment standards established
- CI/CD pipeline in place
- Code review process defined
- Documentation templates created
- Team agreement on processes
Effort Estimate
Complexity: Medium Effort: 1-2 weeks
- Week 1: Create core development documentation
- Week 2: Review, test, and refine processes
Success Metrics
- New developer onboarding time reduced
- Consistent code quality across contributions
- Faster PR review and merge process
- Fewer deployment issues
- Better team collaboration
- Improved development productivity
Monitoring
Track these metrics after implementation:
- Developer onboarding time
- Code review turnaround time
- PR merge time
- Deployment success rate
- Developer satisfaction surveys
- Documentation usage analytics