Architecture decisions¶
Each record captures a decision that is hard to reverse, would surprise a newcomer, and came out of a real trade-off. Easily reversible or obvious choices are deliberately not recorded.
| # | Decision |
|---|---|
| 0001 | The MCP gateway calls the Core Banking API over HTTP |
| 0002 | Lambda container images, not ECS Fargate |
| 0003 | PostgreSQL with pgvector is the single system of record |
| 0004 | Access tokens are validated in the application, not by API Gateway |
| 0005 | A NAT instance, not a NAT Gateway, provides egress |
| 0006 | Circuit breakers are per instance, with a shared force-open override |
| 0007 | Idempotency records are written in the same transaction as the business change |
| 0008 | Domain events leave through a transactional outbox onto SQS; no Kafka |
| 0009 | OpenAI embeddings, with full-text search as the degraded mode |
| 0010 | Deploy with GitHub Actions and CodeDeploy canaries, not CodePipeline |
| 0011 | Rows that reference a Transaction carry its initiated_at in a composite foreign key |