tribunal-kit 4.5.1 → 4.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/.agent/.shared/ui-ux-pro-max/README.md +4 -4
  2. package/.agent/ARCHITECTURE.md +282 -277
  3. package/.agent/agents/accessibility-reviewer.md +187 -187
  4. package/.agent/agents/ai-code-reviewer.md +199 -199
  5. package/.agent/agents/api-architect.md +71 -66
  6. package/.agent/agents/backend-specialist.md +219 -215
  7. package/.agent/agents/cloud-engineer.md +98 -0
  8. package/.agent/agents/code-archaeologist.md +168 -161
  9. package/.agent/agents/database-architect.md +184 -184
  10. package/.agent/agents/db-latency-auditor.md +213 -216
  11. package/.agent/agents/debugger.md +198 -191
  12. package/.agent/agents/dependency-reviewer.md +106 -103
  13. package/.agent/agents/devops-engineer.md +218 -218
  14. package/.agent/agents/documentation-writer.md +209 -201
  15. package/.agent/agents/explorer-agent.md +167 -160
  16. package/.agent/agents/frontend-reviewer.md +162 -160
  17. package/.agent/agents/frontend-specialist.md +257 -248
  18. package/.agent/agents/game-developer.md +48 -48
  19. package/.agent/agents/logic-reviewer.md +118 -116
  20. package/.agent/agents/mobile-developer.md +197 -200
  21. package/.agent/agents/mobile-reviewer.md +159 -162
  22. package/.agent/agents/orchestrator.md +187 -181
  23. package/.agent/agents/penetration-tester.md +160 -157
  24. package/.agent/agents/performance-optimizer.md +183 -183
  25. package/.agent/agents/performance-reviewer.md +178 -178
  26. package/.agent/agents/precedence-reviewer.md +251 -250
  27. package/.agent/agents/product-manager.md +149 -142
  28. package/.agent/agents/product-owner.md +81 -80
  29. package/.agent/agents/project-planner.md +152 -142
  30. package/.agent/agents/qa-automation-engineer.md +216 -225
  31. package/.agent/agents/resilience-reviewer.md +88 -88
  32. package/.agent/agents/schema-reviewer.md +67 -67
  33. package/.agent/agents/security-auditor.md +180 -174
  34. package/.agent/agents/seo-specialist.md +188 -193
  35. package/.agent/agents/sql-reviewer.md +159 -161
  36. package/.agent/agents/supervisor-agent.md +173 -184
  37. package/.agent/agents/swarm-worker-contracts.md +170 -166
  38. package/.agent/agents/swarm-worker-registry.md +92 -92
  39. package/.agent/agents/system-architect.md +85 -0
  40. package/.agent/agents/test-coverage-reviewer.md +158 -160
  41. package/.agent/agents/test-engineer.md +118 -118
  42. package/.agent/agents/throughput-optimizer.md +291 -299
  43. package/.agent/agents/type-safety-reviewer.md +182 -175
  44. package/.agent/agents/ui-ux-auditor.md +300 -292
  45. package/.agent/agents/vitals-reviewer.md +223 -223
  46. package/.agent/mcp_config.json +37 -40
  47. package/.agent/patterns/generator.md +11 -9
  48. package/.agent/patterns/inversion.md +14 -12
  49. package/.agent/patterns/pipeline.md +11 -9
  50. package/.agent/patterns/reviewer.md +15 -13
  51. package/.agent/patterns/tool-wrapper.md +11 -9
  52. package/.agent/routing_index.json +714 -0
  53. package/.agent/rules/GEMINI.md +359 -352
  54. package/.agent/scripts/compile_router.py +112 -0
  55. package/.agent/scripts/migrate_skills_frontmatter.py +64 -0
  56. package/.agent/scripts/strengthen_skills.js +1 -1
  57. package/.agent/skills/advanced-rag-pipelines/SKILL.md +56 -0
  58. package/.agent/skills/agent-organizer/SKILL.md +156 -150
  59. package/.agent/skills/agentic-patterns/SKILL.md +313 -315
  60. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +190 -184
  61. package/.agent/skills/api-patterns/SKILL.md +253 -247
  62. package/.agent/skills/api-security-auditor/SKILL.md +195 -193
  63. package/.agent/skills/app-builder/SKILL.md +573 -572
  64. package/.agent/skills/app-builder/templates/SKILL.md +108 -115
  65. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -76
  66. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -92
  67. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -88
  68. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -88
  69. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -83
  70. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -90
  71. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -90
  72. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +126 -122
  73. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +127 -122
  74. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +172 -169
  75. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +139 -134
  76. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -83
  77. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +122 -119
  78. package/.agent/skills/appflow-wireframe/SKILL.md +146 -145
  79. package/.agent/skills/architecture/SKILL.md +226 -219
  80. package/.agent/skills/authentication-best-practices/SKILL.md +197 -189
  81. package/.agent/skills/backend-security-expert/SKILL.md +16 -2
  82. package/.agent/skills/bash-linux/SKILL.md +179 -179
  83. package/.agent/skills/behavioral-modes/SKILL.md +239 -223
  84. package/.agent/skills/brainstorming/SKILL.md +498 -486
  85. package/.agent/skills/browser-native-ai/SKILL.md +57 -4
  86. package/.agent/skills/building-native-ui/SKILL.md +202 -202
  87. package/.agent/skills/cicd-pro/SKILL.md +442 -0
  88. package/.agent/skills/clean-code/SKILL.md +400 -381
  89. package/.agent/skills/cloud-architect/SKILL.md +439 -0
  90. package/.agent/skills/code-review-checklist/SKILL.md +203 -194
  91. package/.agent/skills/config-validator/SKILL.md +165 -165
  92. package/.agent/skills/containerization-pro/SKILL.md +452 -0
  93. package/.agent/skills/csharp-developer/SKILL.md +518 -518
  94. package/.agent/skills/data-validation-schemas/SKILL.md +333 -328
  95. package/.agent/skills/database-design/SKILL.md +247 -240
  96. package/.agent/skills/deployment-procedures/SKILL.md +172 -169
  97. package/.agent/skills/devops-engineer/SKILL.md +345 -345
  98. package/.agent/skills/devops-incident-responder/SKILL.md +143 -137
  99. package/.agent/skills/documentation-templates/SKILL.md +291 -279
  100. package/.agent/skills/edge-computing/SKILL.md +183 -181
  101. package/.agent/skills/emil-design-eng/SKILL.md +147 -0
  102. package/.agent/skills/error-resilience/SKILL.md +411 -428
  103. package/.agent/skills/extract-design-system/SKILL.md +160 -158
  104. package/.agent/skills/framer-motion-expert/SKILL.md +253 -244
  105. package/.agent/skills/frontend-design/SKILL.md +208 -201
  106. package/.agent/skills/frontend-security-expert/SKILL.md +16 -3
  107. package/.agent/skills/game-design-expert/SKILL.md +132 -129
  108. package/.agent/skills/game-engineering-expert/SKILL.md +148 -146
  109. package/.agent/skills/generative-ui-expert/SKILL.md +57 -1
  110. package/.agent/skills/geo-fundamentals/SKILL.md +148 -147
  111. package/.agent/skills/git-pro/SKILL.md +435 -0
  112. package/.agent/skills/github-operations/SKILL.md +335 -329
  113. package/.agent/skills/gsap-core/SKILL.md +319 -308
  114. package/.agent/skills/gsap-frameworks/SKILL.md +213 -207
  115. package/.agent/skills/gsap-performance/SKILL.md +139 -133
  116. package/.agent/skills/gsap-plugins/SKILL.md +486 -480
  117. package/.agent/skills/gsap-react/SKILL.md +202 -189
  118. package/.agent/skills/gsap-scrolltrigger/SKILL.md +357 -350
  119. package/.agent/skills/gsap-timeline/SKILL.md +165 -161
  120. package/.agent/skills/gsap-utils/SKILL.md +344 -338
  121. package/.agent/skills/harness-protocol/SKILL.md +48 -0
  122. package/.agent/skills/i18n-localization/SKILL.md +174 -163
  123. package/.agent/skills/intelligent-routing/SKILL.md +202 -246
  124. package/.agent/skills/knowledge-graph/SKILL.md +60 -52
  125. package/.agent/skills/lint-and-validate/SKILL.md +261 -261
  126. package/.agent/skills/llm-engineering/SKILL.md +400 -394
  127. package/.agent/skills/local-first/SKILL.md +178 -178
  128. package/.agent/skills/mcp-builder/SKILL.md +143 -142
  129. package/.agent/skills/mobile-design/SKILL.md +272 -263
  130. package/.agent/skills/monorepo-management/SKILL.md +335 -334
  131. package/.agent/skills/motion-engineering/SKILL.md +266 -234
  132. package/.agent/skills/nextjs-react-expert/SKILL.md +236 -234
  133. package/.agent/skills/nodejs-best-practices/SKILL.md +547 -548
  134. package/.agent/skills/observability/SKILL.md +343 -343
  135. package/.agent/skills/parallel-agents/SKILL.md +143 -146
  136. package/.agent/skills/performance-profiling/SKILL.md +259 -267
  137. package/.agent/skills/plan-writing/SKILL.md +150 -142
  138. package/.agent/skills/platform-engineer/SKILL.md +148 -147
  139. package/.agent/skills/playwright-best-practices/SKILL.md +188 -187
  140. package/.agent/skills/powershell-windows/SKILL.md +162 -162
  141. package/.agent/skills/project-idioms/SKILL.md +137 -137
  142. package/.agent/skills/python-patterns/SKILL.md +260 -259
  143. package/.agent/skills/python-pro/SKILL.md +324 -323
  144. package/.agent/skills/react-specialist/SKILL.md +305 -277
  145. package/.agent/skills/readme-builder/SKILL.md +310 -300
  146. package/.agent/skills/realtime-patterns/SKILL.md +323 -319
  147. package/.agent/skills/red-team-tactics/SKILL.md +231 -218
  148. package/.agent/skills/review-animations/SKILL.md +72 -0
  149. package/.agent/skills/review-animations/STANDARDS.md +73 -0
  150. package/.agent/skills/rust-pro/SKILL.md +671 -673
  151. package/.agent/skills/seo-fundamentals/SKILL.md +179 -179
  152. package/.agent/skills/server-management/SKILL.md +218 -214
  153. package/.agent/skills/shadcn-ui-expert/SKILL.md +231 -231
  154. package/.agent/skills/skill-creator/SKILL.md +87 -86
  155. package/.agent/skills/sql-pro/SKILL.md +629 -629
  156. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +97 -97
  157. package/.agent/skills/swiftui-expert/SKILL.md +204 -201
  158. package/.agent/skills/system-design-pro/SKILL.md +345 -0
  159. package/.agent/skills/systematic-debugging/SKILL.md +153 -142
  160. package/.agent/skills/tailwind-patterns/SKILL.md +610 -566
  161. package/.agent/skills/tdd-workflow/SKILL.md +169 -161
  162. package/.agent/skills/test-result-analyzer/SKILL.md +313 -309
  163. package/.agent/skills/testing-patterns/SKILL.md +566 -579
  164. package/.agent/skills/trend-researcher/SKILL.md +243 -237
  165. package/.agent/skills/typescript-advanced/SKILL.md +336 -335
  166. package/.agent/skills/ui-ux-pro-max/SKILL.md +590 -562
  167. package/.agent/skills/ui-ux-researcher/SKILL.md +244 -244
  168. package/.agent/skills/vue-expert/SKILL.md +294 -275
  169. package/.agent/skills/vulnerability-scanner/SKILL.md +416 -404
  170. package/.agent/skills/web-accessibility-auditor/SKILL.md +219 -218
  171. package/.agent/skills/web-design-guidelines/SKILL.md +192 -186
  172. package/.agent/skills/webapp-testing/SKILL.md +167 -169
  173. package/.agent/skills/webgpu-performance/SKILL.md +56 -2
  174. package/.agent/skills/whimsy-injector/SKILL.md +346 -325
  175. package/.agent/skills/workflow-optimizer/SKILL.md +231 -229
  176. package/.agent/workflows/acf.md +141 -0
  177. package/.agent/workflows/api-tester.md +176 -151
  178. package/.agent/workflows/audit.md +150 -127
  179. package/.agent/workflows/brainstorm.md +134 -110
  180. package/.agent/workflows/changelog.md +140 -112
  181. package/.agent/workflows/create.md +168 -124
  182. package/.agent/workflows/debug.md +190 -165
  183. package/.agent/workflows/deploy.md +201 -180
  184. package/.agent/workflows/enhance.md +154 -128
  185. package/.agent/workflows/fix.md +136 -114
  186. package/.agent/workflows/generate.md +198 -183
  187. package/.agent/workflows/marathon.md +37 -11
  188. package/.agent/workflows/migrate.md +184 -160
  189. package/.agent/workflows/orchestrate.md +192 -168
  190. package/.agent/workflows/performance-benchmarker.md +135 -114
  191. package/.agent/workflows/plan.md +196 -173
  192. package/.agent/workflows/preview.md +103 -80
  193. package/.agent/workflows/refactor.md +192 -161
  194. package/.agent/workflows/review-ai.md +125 -101
  195. package/.agent/workflows/review.md +141 -116
  196. package/.agent/workflows/session.md +122 -94
  197. package/.agent/workflows/status.md +101 -79
  198. package/.agent/workflows/strengthen-skills.md +164 -138
  199. package/.agent/workflows/super-prompt.md +24 -0
  200. package/.agent/workflows/swarm.md +193 -179
  201. package/.agent/workflows/test.md +211 -189
  202. package/.agent/workflows/tribunal-backend.md +136 -105
  203. package/.agent/workflows/tribunal-database.md +129 -95
  204. package/.agent/workflows/tribunal-frontend.md +140 -96
  205. package/.agent/workflows/tribunal-full.md +131 -100
  206. package/.agent/workflows/tribunal-mobile.md +129 -95
  207. package/.agent/workflows/tribunal-performance.md +136 -110
  208. package/.agent/workflows/tribunal-speed.md +209 -183
  209. package/.agent/workflows/ui-ux-pro-max.md +155 -122
  210. package/README.md +107 -55
  211. package/mcp_config.json +1 -3
  212. package/package.json +94 -94
  213. package/.agent/GEMINI.md +0 -121
  214. package/.agent/skills/doc.md +0 -177
@@ -0,0 +1,439 @@
1
+ ---
2
+ name: cloud-architect
3
+ description: Production AWS cloud architecture mastery. Service selection (ECS Fargate vs Lambda vs EC2, RDS vs Aurora vs DynamoDB), Terraform IaC patterns with HCL examples, VPC networking design, IAM least privilege, Secrets Manager, CloudWatch observability, cost optimization, and multi-environment AWS Organizations strategy. Golden Path - AWS. Use when architecting cloud infrastructure, writing Terraform, or making AWS service selection decisions.
4
+ allowed-tools: Read, Write, Edit, Glob, Grep
5
+ version: 1.0.0
6
+ last-updated: 2026-06-21
7
+ applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
8
+ routing:
9
+ domain: devops
10
+ tier: pro
11
+ co-requires: [cicd-pro]
12
+ trigger-signals:
13
+ strong: [AWS, Terraform, ECS Fargate, VPC design, IAM]
14
+ ---
15
+
16
+ ## Hallucination Traps (Read First)
17
+
18
+ - ❌ Confusing availability zones with regions → ✅ `us-east-1` is a region. `us-east-1a` is an AZ within that region. Multi-AZ ≠ multi-region.
19
+ - ❌ `s3:*` or `*:*` IAM policies → ✅ IAM policies must follow least privilege. Enumerate exact actions required.
20
+ - ❌ Hardcoding ARNs, account IDs, or region strings → ✅ Always use `data.aws_caller_identity.current.account_id`, `var.region`, Terraform variables.
21
+ - ❌ Storing secrets in environment variables on EC2/ECS → ✅ Use AWS Secrets Manager. Reference ARN in task definition, not plaintext values.
22
+ - ❌ Lambda for all compute → ✅ Lambda cold starts hurt latency-sensitive APIs. ECS Fargate for always-warm containers.
23
+ - ❌ Public subnets for application servers → ✅ Application tier lives in private subnets. Only ALB and NAT Gateway in public subnets.
24
+
25
+ ---
26
+
27
+ # Cloud Architect — Production AWS Mastery
28
+
29
+ ## 1. Service Selection Matrix
30
+
31
+ ### Compute
32
+
33
+ ```
34
+ ECS Fargate:
35
+ ✅ Long-running HTTP services (APIs, web apps)
36
+ ✅ Container-based workloads (0 server management)
37
+ ✅ Predictable traffic (no cold start concerns)
38
+ ✅ >100ms response time acceptable
39
+ Cost: ~$0.04048/vCPU/hr + $0.004445/GB/hr
40
+
41
+ Lambda:
42
+ ✅ Event-driven (S3 trigger, SQS consumer, API Gateway)
43
+ ✅ Infrequent, short-duration tasks (<15 min)
44
+ ✅ True scale-to-zero requirements (cost optimization)
45
+ ❌ Cold starts (100ms–1s for first request)
46
+ ❌ Stateful connections (DB connection pooling — use RDS Proxy)
47
+ Cost: $0.20/1M requests + $0.0000166667/GB-second
48
+
49
+ EC2:
50
+ ✅ Specialized hardware (GPU, high I/O)
51
+ ✅ Legacy apps that can't containerize
52
+ ✅ Reserved capacity for cost optimization at scale
53
+ ❌ Requires patch management and OS maintenance
54
+ Cost: Varies, reserved instances 40-60% cheaper than on-demand
55
+ ```
56
+
57
+ ### Database
58
+
59
+ ```
60
+ RDS PostgreSQL:
61
+ ✅ ACID transactions required
62
+ ✅ Complex JOIN queries
63
+ ✅ Team knows SQL
64
+ ✅ <10TB data
65
+ Multi-AZ: automatic failover in ~60s
66
+ Read replicas: up to 5 (async replication)
67
+
68
+ Aurora PostgreSQL:
69
+ ✅ RDS PostgreSQL but need: higher availability, faster failover (<30s)
70
+ ✅ >5 read replicas needed (up to 15 Aurora replicas)
71
+ ✅ Global database (multi-region reads)
72
+ ✅ Aurora Serverless v2 for variable/unpredictable load
73
+ Cost: ~2x RDS, worth it for high-availability requirements
74
+
75
+ DynamoDB:
76
+ ✅ Single-digit ms latency at any scale
77
+ ✅ Key-value or simple document access patterns
78
+ ✅ Global tables (multi-region active-active)
79
+ ✅ Event-driven (DynamoDB Streams → Lambda)
80
+ ❌ Complex queries (no joins, limited filtering)
81
+ ❌ Requires careful partition key design
82
+ On-Demand pricing: $1.25/1M writes, $0.25/1M reads
83
+ ```
84
+
85
+ ---
86
+
87
+ ## 2. VPC Architecture (Golden Pattern)
88
+
89
+ ```
90
+ ┌─────────────────── VPC (10.0.0.0/16) ────────────────────┐
91
+ │ ┌─── Public Subnet A ──┐ ┌─── Public Subnet B ──┐ │
92
+ │ │ 10.0.1.0/24 │ │ 10.0.2.0/24 │ │
93
+ │ │ - ALB │ │ - ALB (multi-AZ) │ │
94
+ │ │ - NAT Gateway │ │ - NAT Gateway │ │
95
+ │ └──────────────────────┘ └──────────────────────┘ │
96
+ │ ┌─── Private Subnet A ─┐ ┌─── Private Subnet B ─┐ │
97
+ │ │ 10.0.11.0/24 │ │ 10.0.12.0/24 │ │
98
+ │ │ - ECS Tasks │ │ - ECS Tasks │ │
99
+ │ │ - Lambda (VPC) │ │ - Lambda (VPC) │ │
100
+ │ └──────────────────────┘ └──────────────────────┘ │
101
+ │ ┌─── Data Subnet A ────┐ ┌─── Data Subnet B ────┐ │
102
+ │ │ 10.0.21.0/24 │ │ 10.0.22.0/24 │ │
103
+ │ │ - RDS Primary │ │ - RDS Replica │ │
104
+ │ │ - ElastiCache │ │ - ElastiCache │ │
105
+ │ └──────────────────────┘ └──────────────────────┘ │
106
+ └───────────────────────────────────────────────────────────┘
107
+ ```
108
+
109
+ ### Terraform: VPC Module
110
+
111
+ ```hcl
112
+ # modules/networking/main.tf
113
+ module "vpc" {
114
+ source = "terraform-aws-modules/vpc/aws"
115
+ version = "~> 5.0"
116
+
117
+ name = "${var.project}-${var.environment}"
118
+ cidr = var.vpc_cidr # e.g., "10.0.0.0/16"
119
+
120
+ azs = data.aws_availability_zones.available.names
121
+ public_subnets = var.public_subnet_cidrs # ["10.0.1.0/24", "10.0.2.0/24"]
122
+ private_subnets = var.private_subnet_cidrs # ["10.0.11.0/24", "10.0.12.0/24"]
123
+ database_subnets = var.database_subnet_cidrs # ["10.0.21.0/24", "10.0.22.0/24"]
124
+
125
+ enable_nat_gateway = true
126
+ single_nat_gateway = var.environment == "staging" # save cost in staging
127
+ enable_dns_hostnames = true
128
+ enable_dns_support = true
129
+
130
+ # Required for ECS/EKS
131
+ public_subnet_tags = {
132
+ "kubernetes.io/role/elb" = 1
133
+ }
134
+ private_subnet_tags = {
135
+ "kubernetes.io/role/internal-elb" = 1
136
+ }
137
+
138
+ tags = local.common_tags
139
+ }
140
+ ```
141
+
142
+ ---
143
+
144
+ ## 3. ECS Fargate Service (Complete Terraform)
145
+
146
+ ```hcl
147
+ # modules/ecs/main.tf
148
+
149
+ # Cluster
150
+ resource "aws_ecs_cluster" "main" {
151
+ name = "${var.project}-${var.environment}"
152
+
153
+ setting {
154
+ name = "containerInsights"
155
+ value = "enabled" # CloudWatch Container Insights
156
+ }
157
+
158
+ tags = local.common_tags
159
+ }
160
+
161
+ # Task Definition
162
+ resource "aws_ecs_task_definition" "api" {
163
+ family = "${var.project}-api"
164
+ requires_compatibilities = ["FARGATE"]
165
+ network_mode = "awsvpc"
166
+ cpu = var.task_cpu # e.g., 512 (0.5 vCPU)
167
+ memory = var.task_memory # e.g., 1024 (1 GB)
168
+ execution_role_arn = aws_iam_role.ecs_execution.arn
169
+ task_role_arn = aws_iam_role.ecs_task.arn
170
+
171
+ container_definitions = jsonencode([{
172
+ name = "api"
173
+ image = "${var.ecr_repository_url}:${var.image_tag}"
174
+
175
+ portMappings = [{
176
+ containerPort = var.container_port
177
+ protocol = "tcp"
178
+ }]
179
+
180
+ # ✅ Secrets from Secrets Manager (not plaintext env vars)
181
+ secrets = [
182
+ { name = "DATABASE_URL", valueFrom = aws_secretsmanager_secret.db_url.arn },
183
+ { name = "JWT_SECRET", valueFrom = aws_secretsmanager_secret.jwt.arn }
184
+ ]
185
+
186
+ environment = [
187
+ { name = "NODE_ENV", value = var.environment },
188
+ { name = "PORT", value = tostring(var.container_port) }
189
+ ]
190
+
191
+ logConfiguration = {
192
+ logDriver = "awslogs"
193
+ options = {
194
+ "awslogs-group" = aws_cloudwatch_log_group.api.name
195
+ "awslogs-region" = var.aws_region
196
+ "awslogs-stream-prefix" = "api"
197
+ }
198
+ }
199
+
200
+ healthCheck = {
201
+ command = ["CMD-SHELL", "wget --quiet --tries=1 --spider http://localhost:${var.container_port}/health || exit 1"]
202
+ interval = 30
203
+ timeout = 5
204
+ retries = 3
205
+ startPeriod = 10
206
+ }
207
+ }])
208
+
209
+ tags = local.common_tags
210
+ }
211
+
212
+ # ECS Service
213
+ resource "aws_ecs_service" "api" {
214
+ name = "${var.project}-api"
215
+ cluster = aws_ecs_cluster.main.id
216
+ task_definition = aws_ecs_task_definition.api.arn
217
+ desired_count = var.desired_count
218
+ launch_type = "FARGATE"
219
+
220
+ network_configuration {
221
+ subnets = module.vpc.private_subnets
222
+ security_groups = [aws_security_group.api.id]
223
+ assign_public_ip = false # ✅ private subnets never get public IPs
224
+ }
225
+
226
+ load_balancer {
227
+ target_group_arn = aws_lb_target_group.api.arn
228
+ container_name = "api"
229
+ container_port = var.container_port
230
+ }
231
+
232
+ deployment_configuration {
233
+ maximum_percent = 200
234
+ minimum_healthy_percent = 50
235
+
236
+ deployment_circuit_breaker {
237
+ enable = true
238
+ rollback = true # auto-rollback on failure
239
+ }
240
+ }
241
+
242
+ depends_on = [aws_lb_listener.https]
243
+
244
+ tags = local.common_tags
245
+ }
246
+ ```
247
+
248
+ ---
249
+
250
+ ## 4. IAM Least Privilege
251
+
252
+ ```hcl
253
+ # ✅ Execution Role — what ECS needs to START your container
254
+ resource "aws_iam_role" "ecs_execution" {
255
+ name = "${var.project}-ecs-execution"
256
+
257
+ assume_role_policy = jsonencode({
258
+ Version = "2012-10-17"
259
+ Statement = [{
260
+ Effect = "Allow"
261
+ Principal = { Service = "ecs-tasks.amazonaws.com" }
262
+ Action = "sts:AssumeRole"
263
+ }]
264
+ })
265
+ }
266
+
267
+ resource "aws_iam_role_policy_attachment" "ecs_execution_managed" {
268
+ role = aws_iam_role.ecs_execution.name
269
+ policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
270
+ }
271
+
272
+ # Allow pulling secrets from Secrets Manager
273
+ resource "aws_iam_role_policy" "ecs_execution_secrets" {
274
+ name = "secrets-access"
275
+ role = aws_iam_role.ecs_execution.id
276
+
277
+ policy = jsonencode({
278
+ Version = "2012-10-17"
279
+ Statement = [{
280
+ Effect = "Allow"
281
+ Action = ["secretsmanager:GetSecretValue"]
282
+ Resource = [
283
+ aws_secretsmanager_secret.db_url.arn,
284
+ aws_secretsmanager_secret.jwt.arn
285
+ ]
286
+ # ✅ Scoped to exact secret ARNs, not secretsmanager:*
287
+ }]
288
+ })
289
+ }
290
+
291
+ # ✅ Task Role — what your APPLICATION code can do at runtime
292
+ resource "aws_iam_role_policy" "ecs_task_app" {
293
+ name = "app-permissions"
294
+ role = aws_iam_role.ecs_task.id
295
+
296
+ policy = jsonencode({
297
+ Version = "2012-10-17"
298
+ Statement = [
299
+ {
300
+ Effect = "Allow"
301
+ Action = ["s3:GetObject", "s3:PutObject"]
302
+ Resource = "${aws_s3_bucket.uploads.arn}/*"
303
+ # ✅ Specific bucket, specific actions — not s3:*
304
+ },
305
+ {
306
+ Effect = "Allow"
307
+ Action = ["ses:SendEmail"]
308
+ Resource = "arn:aws:ses:${var.aws_region}:${data.aws_caller_identity.current.account_id}:identity/*"
309
+ }
310
+ ]
311
+ })
312
+ }
313
+ ```
314
+
315
+ ---
316
+
317
+ ## 5. CloudWatch Observability
318
+
319
+ ```hcl
320
+ # Structured JSON logging — filter patterns work
321
+ resource "aws_cloudwatch_log_group" "api" {
322
+ name = "/ecs/${var.project}-${var.environment}/api"
323
+ retention_in_days = 30
324
+
325
+ tags = local.common_tags
326
+ }
327
+
328
+ # Metric filter — count 5xx errors from structured logs
329
+ resource "aws_cloudwatch_log_metric_filter" "errors_5xx" {
330
+ name = "${var.project}-5xx-errors"
331
+ pattern = "{ $.status >= 500 }"
332
+ log_group_name = aws_cloudwatch_log_group.api.name
333
+
334
+ metric_transformation {
335
+ name = "5xxErrorCount"
336
+ namespace = "${var.project}/API"
337
+ value = "1"
338
+ unit = "Count"
339
+ }
340
+ }
341
+
342
+ # Alarm → SNS → PagerDuty
343
+ resource "aws_cloudwatch_metric_alarm" "high_error_rate" {
344
+ alarm_name = "${var.project}-high-5xx-${var.environment}"
345
+ comparison_operator = "GreaterThanThreshold"
346
+ evaluation_periods = "2"
347
+ metric_name = "5xxErrorCount"
348
+ namespace = "${var.project}/API"
349
+ period = "60"
350
+ statistic = "Sum"
351
+ threshold = "10" # more than 10 errors in 2 minutes
352
+
353
+ alarm_actions = [aws_sns_topic.alerts.arn]
354
+ ok_actions = [aws_sns_topic.alerts.arn]
355
+
356
+ treat_missing_data = "notBreaching"
357
+
358
+ tags = local.common_tags
359
+ }
360
+ ```
361
+
362
+ ---
363
+
364
+ ## 6. Multi-Environment Strategy
365
+
366
+ ```hcl
367
+ # environments/staging/main.tf
368
+ module "app" {
369
+ source = "../../modules/app"
370
+
371
+ environment = "staging"
372
+ desired_count = 1 # single task in staging
373
+ task_cpu = 256 # 0.25 vCPU
374
+ task_memory = 512
375
+ single_nat_gateway = true # save $32/month vs multi-NAT
376
+ }
377
+
378
+ # environments/production/main.tf
379
+ module "app" {
380
+ source = "../../modules/app"
381
+
382
+ environment = "production"
383
+ desired_count = 3 # 3 tasks across 2 AZs
384
+ task_cpu = 1024 # 1 vCPU
385
+ task_memory = 2048
386
+ single_nat_gateway = false # high availability
387
+ }
388
+ ```
389
+
390
+ ### Terraform State Backend
391
+
392
+ ```hcl
393
+ # backend.tf
394
+ terraform {
395
+ backend "s3" {
396
+ bucket = "mycompany-terraform-state"
397
+ key = "production/app.tfstate"
398
+ region = "us-east-1"
399
+ encrypt = true # AES-256 at rest
400
+ dynamodb_table = "terraform-locks" # prevents concurrent state writes
401
+ }
402
+ }
403
+ ```
404
+
405
+ ---
406
+
407
+ ## 🤖 LLM-Specific Traps
408
+
409
+ 1. **Omitting `data.aws_caller_identity.current.account_id`**: Never hardcode AWS account IDs in Terraform. Use the data source.
410
+ 2. **Lambda for database-heavy operations**: Lambda's ephemeral compute model means each invocation opens a new DB connection. Use RDS Proxy for Lambda → RDS patterns.
411
+ 3. **Ignoring NAT Gateway costs**: NAT Gateways cost ~$32/month + $0.045/GB. For staging, a single NAT Gateway is fine. For production, one per AZ for HA.
412
+ 4. **Security groups as firewalls**: Security groups are stateful. NACLs are stateless. Never use NACLs as your primary defense layer — security groups are the right tool.
413
+ 5. **Missing `lifecycle { ignore_changes }` on ECS services**: Without this, Terraform fights with your CI/CD pipeline over the running task definition revision.
414
+
415
+ ---
416
+
417
+ ## 🏛️ Tribunal Integration (Anti-Hallucination)
418
+
419
+ **Slash command: `/review` or `/tribunal-full`**
420
+ **Active reviewers: `logic-reviewer` · `security-auditor` · `cloud-engineer`**
421
+
422
+ ### ✅ Pre-Flight Self-Audit
423
+
424
+ ```
425
+ ✅ Are all secrets stored in Secrets Manager (not plaintext env vars)?
426
+ ✅ Are application servers in private subnets?
427
+ ✅ Are IAM policies scoped to specific resources (no wildcard Resource: "*")?
428
+ ✅ Is Terraform state stored in S3 with DynamoDB locking?
429
+ ✅ Are CloudWatch alarms defined for error rates AND latency?
430
+ ✅ Is auto-rollback configured on the ECS service circuit breaker?
431
+ ✅ Are hardcoded account IDs / region strings replaced with data sources?
432
+ ```
433
+
434
+ ### 🛑 Verification-Before-Completion (VBC) Protocol
435
+
436
+ **CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
437
+
438
+ - ❌ **Forbidden**: Declaring Terraform configuration correct because it "looks right."
439
+ - ✅ **Required**: Run `terraform plan` with zero unexpected changes AND `terraform apply` successfully completes before marking infrastructure work as done.