UNPKG

aiwg

Version:

Deployment tool and support utility for AI context. Copies agents, skills, commands, rules, and behaviors into the paths each AI platform reads (Claude Code, Codex, Copilot, Cursor, Warp, OpenClaw, and 6 more) so one source of truth works across 10 platfo

392 lines (244 loc) 10.8 kB
# Architecture Decisions ## Key Design Choices <!-- Captured from ADRs in .aiwg/architecture/ and code review discussions --> <!-- Add [confidence: established|emerging|speculative] to each entry. See auto-memory overview for convention. --> ### [Decision Category] **Decision**: <!-- What was decided --> [confidence: established — see ADR-XXX] **Context**: <!-- Why the decision was needed --> **Rationale**: <!-- Why this choice was made --> **Alternatives Considered**: <!-- What else was evaluated --> **Trade-offs**: <!-- Pros and cons of this choice --> **Status**: <!-- Active, Superseded, Deprecated --> <!-- Example of a well-annotated entry: ### Authentication Strategy **Decision**: Use JWT RS256 for all service tokens. [confidence: established — see ADR-012] **Context**: Needed stateless auth that works across microservices. **Rationale**: RS256 lets services verify tokens without sharing a secret. **Alternatives Considered**: HS256 (shared secret — rejected: key distribution problem), opaque tokens (rejected: requires DB lookup on every request). **Trade-offs**: Token revocation requires a denylist or short expiry; accepted this for the stateless benefit. **Status**: Active ### Session Caching **Decision**: Consider Redis for session storage in web-facing services. [confidence: emerging — evaluated sprint 4, not yet in prod] **Status**: Under evaluation --> --- ## Architectural Patterns ### Overall Architecture <!-- Learned from codebase structure and architecture documentation --> **Style**: <!-- e.g., "Microservices", "Monolith", "Serverless", "Event-driven" --> **Justification**: <!-- Why this architectural style --> ### Layer Organization ``` [Project Structure] ├── [Layer 1] # Purpose ├── [Layer 2] # Purpose └── [Layer 3] # Purpose ``` **Separation of Concerns**: - <!-- e.g., "Domain logic isolated from infrastructure" --> - <!-- e.g., "API layer separate from business logic" --> ### Communication Patterns <!-- Learned from inter-component communication --> **Internal Communication**: - <!-- e.g., "Direct function calls within modules" --> - <!-- e.g., "Event bus for cross-module communication" --> **External Communication**: - <!-- e.g., "REST APIs for client communication" --> - <!-- e.g., "Message queue for async processing" --> ## Design Patterns Used ### Creational Patterns <!-- Learned from object creation patterns in codebase --> **Factory Pattern**: <!-- Where and why used --> **Singleton Pattern**: <!-- Where and why used --> **Builder Pattern**: <!-- Where and why used --> ### Structural Patterns <!-- Learned from code organization --> **Adapter Pattern**: <!-- Where and why used --> **Decorator Pattern**: <!-- Where and why used --> **Facade Pattern**: <!-- Where and why used --> ### Behavioral Patterns <!-- Learned from runtime behavior --> **Observer Pattern**: <!-- Where and why used --> **Strategy Pattern**: <!-- Where and why used --> **Command Pattern**: <!-- Where and why used --> ## Technology Stack ### Core Technologies <!-- Learned from package.json, requirements.txt, go.mod, etc. --> **Language**: <!-- e.g., "TypeScript 5.x" --> **Runtime**: <!-- e.g., "Node.js 20.x" --> **Framework**: <!-- e.g., "Express.js 4.x" --> **Rationale**: <!-- Why these technologies were chosen --> ### Database **Type**: <!-- e.g., "PostgreSQL 15" --> **ORM/Query Builder**: <!-- e.g., "Prisma" or "raw SQL" --> **Migration Strategy**: <!-- e.g., "Prisma Migrate" --> **Rationale**: <!-- Why this database choice --> ### External Services <!-- Learned from integrations --> **Service**: <!-- e.g., "Stripe for payments" --> **Purpose**: <!-- What it's used for --> **Integration Pattern**: <!-- How it's integrated --> ## Code Organization Principles ### Module Structure <!-- Learned from codebase organization --> **Pattern**: <!-- e.g., "Feature-based modules" or "Layer-based" --> ``` src/ ├── [module1]/ │ ├── [module1].controller.ts │ ├── [module1].service.ts │ ├── [module1].repository.ts │ └── [module1].types.ts ``` **Rationale**: <!-- Why this organization --> ### Dependency Management <!-- Learned from dependency injection patterns --> **Pattern**: <!-- e.g., "Constructor injection" --> **DI Container**: <!-- e.g., "InversifyJS" or "manual" --> **Rationale**: <!-- Why this approach --> ### Interface Design <!-- Learned from API and interface patterns --> **Principle**: <!-- e.g., "Program to interfaces, not implementations" --> **Convention**: <!-- e.g., "Interfaces in .types.ts files" --> ## Data Architecture ### Data Flow <!-- Learned from data movement through system --> ``` [Source] → [Transform] → [Destination] ``` **Pattern**: <!-- e.g., "Request → Validation → Business Logic → Repository → Database" --> ### State Management <!-- Learned from state handling patterns --> **Client State**: <!-- How client state is managed --> **Server State**: <!-- How server state is managed --> **Cache Strategy**: <!-- How caching is implemented --> ### Data Validation <!-- Learned from validation patterns --> **Where**: <!-- e.g., "At API boundaries and database writes" --> **How**: <!-- e.g., "Zod schemas for runtime validation" --> **Strategy**: <!-- e.g., "Fail fast, validate early" --> ## Security Architecture ### Authentication <!-- Learned from auth implementation --> **Method**: <!-- e.g., "JWT tokens" --> **Storage**: <!-- e.g., "HttpOnly cookies" --> **Rotation**: <!-- e.g., "Refresh tokens with 7-day expiry" --> ### Authorization <!-- Learned from access control patterns --> **Model**: <!-- e.g., "Role-based access control (RBAC)" --> **Implementation**: <!-- e.g., "Middleware checks roles on protected routes" --> ### Data Protection <!-- Learned from security measures --> **Encryption at Rest**: <!-- What's encrypted --> **Encryption in Transit**: <!-- TLS configuration --> **Secrets Management**: <!-- How secrets are stored --> ## Performance Architecture ### Caching Strategy <!-- Learned from caching implementation --> **What's Cached**: <!-- e.g., "API responses, database query results" --> **Cache Store**: <!-- e.g., "Redis" --> **Invalidation**: <!-- How cache is invalidated --> ### Optimization Patterns <!-- Learned from performance improvements --> **Database Optimization**: - <!-- e.g., "Indexes on frequently queried columns" --> - <!-- e.g., "Connection pooling with max 20 connections" --> **API Optimization**: - <!-- e.g., "Pagination for large result sets" --> - <!-- e.g., "Response compression with gzip" --> ## Scalability Considerations ### Horizontal Scaling <!-- Learned from scaling strategy --> **Approach**: <!-- e.g., "Stateless application servers behind load balancer" --> **Session Management**: <!-- e.g., "Redis for shared session storage" --> ### Vertical Scaling <!-- Learned from resource allocation --> **Limits**: <!-- e.g., "Single instance can handle 1000 req/s" --> **Bottlenecks**: <!-- Known resource constraints --> ## Error Handling Architecture ### Error Propagation <!-- Learned from error handling patterns --> **Strategy**: <!-- e.g., "Errors bubble up, caught at controller layer" --> **Custom Errors**: <!-- e.g., "Domain-specific error classes extend base Error" --> ### Logging Strategy <!-- Learned from logging implementation --> **Levels**: <!-- e.g., "error, warn, info, debug" --> **Structure**: <!-- e.g., "Structured JSON logs" --> **Aggregation**: <!-- e.g., "Logs sent to CloudWatch" --> ## Testing Architecture ### Test Pyramid <!-- Learned from test organization --> ``` /\ E2E Tests (few) / \ /----\ Integration Tests (moderate) /------\ /--------\ Unit Tests (many) ``` **Distribution**: <!-- e.g., "70% unit, 20% integration, 10% E2E" --> ### Test Isolation <!-- Learned from test patterns --> **Unit Tests**: <!-- e.g., "Isolated with mocks for dependencies" --> **Integration Tests**: <!-- e.g., "Use test database, reset between tests" --> **E2E Tests**: <!-- e.g., "Full stack with test database and seeded data" --> ## Deployment Architecture ### Environment Strategy <!-- Learned from deployment configuration --> **Environments**: <!-- e.g., "Development, Staging, Production" --> **Promotion Path**: <!-- How code moves between environments --> ### Infrastructure <!-- Learned from infrastructure setup --> **Hosting**: <!-- e.g., "AWS ECS" --> **Database**: <!-- e.g., "AWS RDS PostgreSQL" --> **CDN**: <!-- e.g., "CloudFront" --> ### CI/CD Pipeline <!-- Learned from CI/CD configuration --> **Stages**: <!-- e.g., "Lint → Test → Build → Deploy" --> **Tooling**: <!-- e.g., "GitHub Actions" --> ## Evolution and Technical Debt ### Known Technical Debt <!-- Learned from code review and refactoring discussions --> **Item**: <!-- What needs improvement --> **Impact**: <!-- Why it matters --> **Plan**: <!-- When/how to address --> ### Architectural Improvements <!-- Planned or recent architectural changes --> **Recent Changes**: - <!-- e.g., "Migrated from REST to GraphQL for better client flexibility" --> **Planned Changes**: - <!-- e.g., "Planning to extract auth module into separate service" --> ## Decision Records ### ADR Index <!-- Cross-reference to .aiwg/architecture/adrs/ --> **ADR-001**: <!-- Title and link --> **ADR-002**: <!-- Title and link --> **Recent Decisions**: <!-- Highlight most relevant recent ADRs --> ## Cross-Cutting Concerns ### Observability <!-- Learned from monitoring and observability setup --> **Metrics**: <!-- What's measured --> **Tracing**: <!-- How requests are traced --> **Alerting**: <!-- What triggers alerts --> ### Configuration Management <!-- Learned from config patterns --> **Strategy**: <!-- e.g., "Environment variables for config" --> **Validation**: <!-- e.g., "Config schema validated on startup" --> ### Feature Flags <!-- Learned from feature flag usage --> **System**: <!-- e.g., "LaunchDarkly" or "custom" --> **Usage**: <!-- When feature flags are used --> ## Lessons Learned ### What Worked Well <!-- Learned from successful architectural decisions --> **Decision**: <!-- What was decided --> **Outcome**: <!-- Positive results --> ### What Would Change <!-- Learned from challenges or mistakes --> **Decision**: <!-- What was decided --> **Lesson**: <!-- What was learned --> **Better Approach**: <!-- What would be done differently --> ## Continuous Learning <!-- Track evolving architectural understanding --> **Recent Insights**: <!-- e.g., "Discovered event sourcing pattern fits our audit requirements" --> **Experiments**: <!-- e.g., "Trying CQRS for read/write separation" --> **Pain Points**: <!-- e.g., "Current monolith makes feature isolation difficult" -->