tribunal-kit 4.5.0 โ 4.6.0
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.
- package/.agent/.shared/ui-ux-pro-max/README.md +4 -4
- package/.agent/ARCHITECTURE.md +279 -277
- package/.agent/GEMINI.md +127 -121
- package/.agent/agents/accessibility-reviewer.md +187 -187
- package/.agent/agents/ai-code-reviewer.md +199 -199
- package/.agent/agents/api-architect.md +71 -66
- package/.agent/agents/backend-specialist.md +219 -215
- package/.agent/agents/cloud-engineer.md +98 -0
- package/.agent/agents/code-archaeologist.md +168 -161
- package/.agent/agents/database-architect.md +184 -184
- package/.agent/agents/db-latency-auditor.md +213 -216
- package/.agent/agents/debugger.md +198 -191
- package/.agent/agents/dependency-reviewer.md +106 -103
- package/.agent/agents/devops-engineer.md +218 -218
- package/.agent/agents/documentation-writer.md +209 -201
- package/.agent/agents/explorer-agent.md +167 -160
- package/.agent/agents/frontend-reviewer.md +162 -160
- package/.agent/agents/frontend-specialist.md +257 -248
- package/.agent/agents/game-developer.md +48 -48
- package/.agent/agents/logic-reviewer.md +118 -116
- package/.agent/agents/mobile-developer.md +197 -200
- package/.agent/agents/mobile-reviewer.md +159 -162
- package/.agent/agents/orchestrator.md +187 -181
- package/.agent/agents/penetration-tester.md +160 -157
- package/.agent/agents/performance-optimizer.md +183 -183
- package/.agent/agents/performance-reviewer.md +178 -178
- package/.agent/agents/precedence-reviewer.md +251 -250
- package/.agent/agents/product-manager.md +149 -142
- package/.agent/agents/product-owner.md +81 -80
- package/.agent/agents/project-planner.md +152 -142
- package/.agent/agents/qa-automation-engineer.md +216 -225
- package/.agent/agents/resilience-reviewer.md +88 -88
- package/.agent/agents/schema-reviewer.md +67 -67
- package/.agent/agents/security-auditor.md +180 -174
- package/.agent/agents/seo-specialist.md +188 -193
- package/.agent/agents/sql-reviewer.md +159 -161
- package/.agent/agents/supervisor-agent.md +173 -184
- package/.agent/agents/swarm-worker-contracts.md +170 -166
- package/.agent/agents/swarm-worker-registry.md +92 -92
- package/.agent/agents/system-architect.md +85 -0
- package/.agent/agents/test-coverage-reviewer.md +158 -160
- package/.agent/agents/test-engineer.md +118 -118
- package/.agent/agents/throughput-optimizer.md +291 -299
- package/.agent/agents/type-safety-reviewer.md +182 -175
- package/.agent/agents/ui-ux-auditor.md +300 -292
- package/.agent/agents/vitals-reviewer.md +223 -223
- package/.agent/mcp_config.json +37 -40
- package/.agent/patterns/generator.md +11 -9
- package/.agent/patterns/inversion.md +14 -12
- package/.agent/patterns/pipeline.md +11 -9
- package/.agent/patterns/reviewer.md +15 -13
- package/.agent/patterns/tool-wrapper.md +11 -9
- package/.agent/routing_index.json +654 -0
- package/.agent/rules/GEMINI.md +358 -352
- package/.agent/scripts/compile_router.py +112 -0
- package/.agent/scripts/migrate_skills_frontmatter.py +64 -0
- package/.agent/scripts/strengthen_skills.js +1 -1
- package/.agent/skills/advanced-rag-pipelines/SKILL.md +56 -0
- package/.agent/skills/agent-organizer/SKILL.md +156 -150
- package/.agent/skills/agentic-patterns/SKILL.md +313 -315
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +190 -184
- package/.agent/skills/api-patterns/SKILL.md +253 -247
- package/.agent/skills/api-security-auditor/SKILL.md +195 -193
- package/.agent/skills/app-builder/SKILL.md +573 -572
- package/.agent/skills/app-builder/templates/SKILL.md +108 -115
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -76
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -92
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -88
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -88
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -83
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -90
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -90
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +126 -122
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +127 -122
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +172 -169
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +139 -134
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -83
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +122 -119
- package/.agent/skills/appflow-wireframe/SKILL.md +146 -145
- package/.agent/skills/architecture/SKILL.md +226 -219
- package/.agent/skills/authentication-best-practices/SKILL.md +197 -189
- package/.agent/skills/backend-security-expert/SKILL.md +16 -2
- package/.agent/skills/bash-linux/SKILL.md +179 -179
- package/.agent/skills/behavioral-modes/SKILL.md +239 -223
- package/.agent/skills/brainstorming/SKILL.md +498 -486
- package/.agent/skills/browser-native-ai/SKILL.md +57 -4
- package/.agent/skills/building-native-ui/SKILL.md +202 -202
- package/.agent/skills/cicd-pro/SKILL.md +442 -0
- package/.agent/skills/clean-code/SKILL.md +400 -381
- package/.agent/skills/cloud-architect/SKILL.md +439 -0
- package/.agent/skills/code-review-checklist/SKILL.md +203 -194
- package/.agent/skills/config-validator/SKILL.md +165 -165
- package/.agent/skills/containerization-pro/SKILL.md +452 -0
- package/.agent/skills/csharp-developer/SKILL.md +518 -518
- package/.agent/skills/data-validation-schemas/SKILL.md +333 -328
- package/.agent/skills/database-design/SKILL.md +247 -240
- package/.agent/skills/deployment-procedures/SKILL.md +172 -169
- package/.agent/skills/devops-engineer/SKILL.md +345 -345
- package/.agent/skills/devops-incident-responder/SKILL.md +143 -137
- package/.agent/skills/doc.md +209 -177
- package/.agent/skills/documentation-templates/SKILL.md +291 -279
- package/.agent/skills/edge-computing/SKILL.md +183 -181
- package/.agent/skills/error-resilience/SKILL.md +411 -428
- package/.agent/skills/extract-design-system/SKILL.md +160 -158
- package/.agent/skills/framer-motion-expert/SKILL.md +253 -244
- package/.agent/skills/frontend-design/SKILL.md +208 -201
- package/.agent/skills/frontend-security-expert/SKILL.md +16 -3
- package/.agent/skills/game-design-expert/SKILL.md +132 -129
- package/.agent/skills/game-engineering-expert/SKILL.md +148 -146
- package/.agent/skills/generative-ui-expert/SKILL.md +57 -1
- package/.agent/skills/geo-fundamentals/SKILL.md +148 -147
- package/.agent/skills/git-pro/SKILL.md +435 -0
- package/.agent/skills/github-operations/SKILL.md +335 -329
- package/.agent/skills/gsap-core/SKILL.md +319 -308
- package/.agent/skills/gsap-frameworks/SKILL.md +213 -207
- package/.agent/skills/gsap-performance/SKILL.md +139 -133
- package/.agent/skills/gsap-plugins/SKILL.md +486 -480
- package/.agent/skills/gsap-react/SKILL.md +202 -189
- package/.agent/skills/gsap-scrolltrigger/SKILL.md +357 -350
- package/.agent/skills/gsap-timeline/SKILL.md +165 -161
- package/.agent/skills/gsap-utils/SKILL.md +344 -338
- package/.agent/skills/harness-protocol/SKILL.md +48 -0
- package/.agent/skills/i18n-localization/SKILL.md +174 -163
- package/.agent/skills/intelligent-routing/SKILL.md +202 -246
- package/.agent/skills/knowledge-graph/SKILL.md +60 -52
- package/.agent/skills/lint-and-validate/SKILL.md +261 -261
- package/.agent/skills/llm-engineering/SKILL.md +400 -394
- package/.agent/skills/local-first/SKILL.md +178 -178
- package/.agent/skills/mcp-builder/SKILL.md +143 -142
- package/.agent/skills/mobile-design/SKILL.md +272 -263
- package/.agent/skills/monorepo-management/SKILL.md +335 -334
- package/.agent/skills/motion-engineering/SKILL.md +266 -234
- package/.agent/skills/nextjs-react-expert/SKILL.md +236 -234
- package/.agent/skills/nodejs-best-practices/SKILL.md +547 -548
- package/.agent/skills/observability/SKILL.md +343 -343
- package/.agent/skills/parallel-agents/SKILL.md +143 -146
- package/.agent/skills/performance-profiling/SKILL.md +259 -267
- package/.agent/skills/plan-writing/SKILL.md +150 -142
- package/.agent/skills/platform-engineer/SKILL.md +148 -147
- package/.agent/skills/playwright-best-practices/SKILL.md +188 -187
- package/.agent/skills/powershell-windows/SKILL.md +162 -162
- package/.agent/skills/project-idioms/SKILL.md +137 -137
- package/.agent/skills/python-patterns/SKILL.md +260 -259
- package/.agent/skills/python-pro/SKILL.md +324 -323
- package/.agent/skills/react-specialist/SKILL.md +305 -277
- package/.agent/skills/readme-builder/SKILL.md +310 -300
- package/.agent/skills/realtime-patterns/SKILL.md +323 -319
- package/.agent/skills/red-team-tactics/SKILL.md +231 -218
- package/.agent/skills/rust-pro/SKILL.md +671 -673
- package/.agent/skills/seo-fundamentals/SKILL.md +179 -179
- package/.agent/skills/server-management/SKILL.md +218 -214
- package/.agent/skills/shadcn-ui-expert/SKILL.md +231 -231
- package/.agent/skills/skill-creator/SKILL.md +87 -86
- package/.agent/skills/sql-pro/SKILL.md +629 -629
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +97 -97
- package/.agent/skills/swiftui-expert/SKILL.md +204 -201
- package/.agent/skills/system-design-pro/SKILL.md +345 -0
- package/.agent/skills/systematic-debugging/SKILL.md +153 -142
- package/.agent/skills/tailwind-patterns/SKILL.md +610 -566
- package/.agent/skills/tdd-workflow/SKILL.md +169 -161
- package/.agent/skills/test-result-analyzer/SKILL.md +313 -309
- package/.agent/skills/testing-patterns/SKILL.md +566 -579
- package/.agent/skills/trend-researcher/SKILL.md +243 -237
- package/.agent/skills/typescript-advanced/SKILL.md +336 -335
- package/.agent/skills/ui-ux-pro-max/SKILL.md +590 -562
- package/.agent/skills/ui-ux-researcher/SKILL.md +244 -244
- package/.agent/skills/vue-expert/SKILL.md +294 -275
- package/.agent/skills/vulnerability-scanner/SKILL.md +416 -404
- package/.agent/skills/web-accessibility-auditor/SKILL.md +219 -218
- package/.agent/skills/web-design-guidelines/SKILL.md +192 -186
- package/.agent/skills/webapp-testing/SKILL.md +167 -169
- package/.agent/skills/webgpu-performance/SKILL.md +56 -2
- package/.agent/skills/whimsy-injector/SKILL.md +346 -325
- package/.agent/skills/workflow-optimizer/SKILL.md +231 -229
- package/.agent/workflows/acf.md +141 -0
- package/.agent/workflows/api-tester.md +176 -151
- package/.agent/workflows/audit.md +150 -127
- package/.agent/workflows/brainstorm.md +134 -110
- package/.agent/workflows/changelog.md +140 -112
- package/.agent/workflows/create.md +168 -124
- package/.agent/workflows/debug.md +190 -165
- package/.agent/workflows/deploy.md +201 -180
- package/.agent/workflows/enhance.md +154 -128
- package/.agent/workflows/fix.md +136 -114
- package/.agent/workflows/generate.md +198 -183
- package/.agent/workflows/marathon.md +37 -11
- package/.agent/workflows/migrate.md +184 -160
- package/.agent/workflows/orchestrate.md +192 -168
- package/.agent/workflows/performance-benchmarker.md +135 -114
- package/.agent/workflows/plan.md +196 -173
- package/.agent/workflows/preview.md +103 -80
- package/.agent/workflows/refactor.md +192 -161
- package/.agent/workflows/review-ai.md +125 -101
- package/.agent/workflows/review.md +141 -116
- package/.agent/workflows/session.md +122 -94
- package/.agent/workflows/status.md +101 -79
- package/.agent/workflows/strengthen-skills.md +164 -138
- package/.agent/workflows/super-prompt.md +24 -0
- package/.agent/workflows/swarm.md +193 -179
- package/.agent/workflows/test.md +211 -189
- package/.agent/workflows/tribunal-backend.md +136 -105
- package/.agent/workflows/tribunal-database.md +122 -95
- package/.agent/workflows/tribunal-frontend.md +221 -96
- package/.agent/workflows/tribunal-full.md +129 -100
- package/.agent/workflows/tribunal-mobile.md +122 -95
- package/.agent/workflows/tribunal-performance.md +136 -110
- package/.agent/workflows/tribunal-speed.md +209 -183
- package/.agent/workflows/ui-ux-pro-max.md +145 -122
- package/README.md +107 -55
- package/bin/mcp-server.js +159 -0
- package/bin/tribunal-kit.js +105 -29
- package/bin/wrapper.js +16 -7
- package/mcp_config.json +9 -0
- package/package.json +94 -86
- package/scripts/changelog.js +4 -3
- package/scripts/validate-payload.js +6 -1
- package/scripts/postinstall.js +0 -127
|
@@ -1,349 +1,347 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: devops-engineer
|
|
3
|
-
description: DevOps engineering mastery. Docker containerization, Docker Compose, CI/CD with GitHub Actions, Kubernetes basics, infrastructure as code (Terraform), monitoring/alerting, deployment strategies (blue/green, canary, rolling), secrets management, and production readiness checklists. Use when building CI/CD pipelines, containerizing apps, or managing infrastructure.
|
|
4
|
-
allowed-tools: Read, Write, Edit, Glob, Grep
|
|
5
|
-
version: 2.0.0
|
|
6
|
-
last-updated: 2026-04-01
|
|
7
|
-
applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
```dockerfile
|
|
55
|
-
# โ HALLUCINATION TRAP: Common Dockerfile mistakes
|
|
56
|
-
# โ FROM node:22 โ 1GB+ image (use alpine: ~150MB)
|
|
57
|
-
# โ RUN npm install โ installs devDependencies, no lockfile
|
|
58
|
-
# โ
RUN npm ci โ deterministic, production-only
|
|
59
|
-
# โ COPY . . โ copies node_modules, .git, secrets
|
|
60
|
-
# โ
Use .dockerignore โ exclude node_modules, .env, .git
|
|
61
|
-
# โ Running as root โ security vulnerability
|
|
62
|
-
# โ
USER appuser โ non-root user
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### .dockerignore
|
|
66
|
-
|
|
67
|
-
```
|
|
68
|
-
node_modules
|
|
69
|
-
.git
|
|
70
|
-
.env
|
|
71
|
-
.env.*
|
|
72
|
-
*.md
|
|
73
|
-
.github
|
|
74
|
-
coverage
|
|
75
|
-
dist
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### Docker Compose
|
|
79
|
-
|
|
80
|
-
```yaml
|
|
81
|
-
# docker-compose.yml
|
|
82
|
-
services:
|
|
83
|
-
app:
|
|
84
|
-
build:
|
|
85
|
-
context: .
|
|
86
|
-
target: runner
|
|
87
|
-
ports:
|
|
88
|
-
- "3000:3000"
|
|
89
|
-
environment:
|
|
90
|
-
- DATABASE_URL=postgres://postgres:postgres@db:5432/myapp
|
|
91
|
-
- REDIS_URL=redis://redis:6379
|
|
92
|
-
depends_on:
|
|
93
|
-
db:
|
|
94
|
-
condition: service_healthy
|
|
95
|
-
redis:
|
|
96
|
-
condition: service_started
|
|
97
|
-
restart: unless-stopped
|
|
98
|
-
|
|
99
|
-
db:
|
|
100
|
-
image: postgres:16-alpine
|
|
101
|
-
environment:
|
|
102
|
-
POSTGRES_DB: myapp
|
|
103
|
-
POSTGRES_USER: postgres
|
|
104
|
-
POSTGRES_PASSWORD: postgres
|
|
105
|
-
volumes:
|
|
106
|
-
- pgdata:/var/lib/postgresql/data
|
|
107
|
-
healthcheck:
|
|
108
|
-
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
|
109
|
-
interval: 5s
|
|
110
|
-
timeout: 3s
|
|
111
|
-
retries: 5
|
|
112
|
-
|
|
113
|
-
redis:
|
|
114
|
-
image: redis:7-alpine
|
|
115
|
-
volumes:
|
|
116
|
-
- redisdata:/data
|
|
117
|
-
|
|
118
|
-
volumes:
|
|
119
|
-
pgdata:
|
|
120
|
-
redisdata:
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
## CI/CD with GitHub Actions
|
|
126
|
-
|
|
127
|
-
### Standard Pipeline
|
|
128
|
-
|
|
129
|
-
```yaml
|
|
130
|
-
# .github/workflows/ci.yml
|
|
131
|
-
name: CI
|
|
132
|
-
|
|
133
|
-
on:
|
|
134
|
-
push:
|
|
135
|
-
branches: [main]
|
|
136
|
-
pull_request:
|
|
137
|
-
branches: [main]
|
|
138
|
-
|
|
139
|
-
concurrency:
|
|
140
|
-
group: ${{ github.workflow }}-${{ github.ref }}
|
|
141
|
-
cancel-in-progress: true # cancel stale runs on same PR
|
|
142
|
-
|
|
143
|
-
jobs:
|
|
144
|
-
lint-and-test:
|
|
145
|
-
runs-on: ubuntu-latest
|
|
146
|
-
steps:
|
|
147
|
-
- uses: actions/checkout@v4
|
|
148
|
-
|
|
149
|
-
- uses: actions/setup-node@v4
|
|
150
|
-
with:
|
|
151
|
-
node-version: 22
|
|
152
|
-
cache: npm
|
|
153
|
-
|
|
154
|
-
- run: npm ci
|
|
155
|
-
- run: npm run lint
|
|
156
|
-
- run: npm run typecheck
|
|
157
|
-
- run: npm run test -- --coverage
|
|
158
|
-
|
|
159
|
-
- uses: actions/upload-artifact@v4
|
|
160
|
-
if: always()
|
|
161
|
-
with:
|
|
162
|
-
name: coverage
|
|
163
|
-
path: coverage/
|
|
164
|
-
|
|
165
|
-
build:
|
|
166
|
-
runs-on: ubuntu-latest
|
|
167
|
-
needs: lint-and-test
|
|
168
|
-
steps:
|
|
169
|
-
- uses: actions/checkout@v4
|
|
170
|
-
- uses: actions/setup-node@v4
|
|
171
|
-
with:
|
|
172
|
-
node-version: 22
|
|
173
|
-
cache: npm
|
|
174
|
-
- run: npm ci
|
|
175
|
-
- run: npm run build
|
|
176
|
-
|
|
177
|
-
deploy:
|
|
178
|
-
runs-on: ubuntu-latest
|
|
179
|
-
needs: build
|
|
180
|
-
if: github.ref == 'refs/heads/main'
|
|
181
|
-
environment: production
|
|
182
|
-
steps:
|
|
183
|
-
- uses: actions/checkout@v4
|
|
184
|
-
|
|
185
|
-
# Deploy to your platform (Vercel, Railway, Fly.io, etc.)
|
|
186
|
-
- run: npx vercel deploy --prod --token=${{ secrets.VERCEL_TOKEN }}
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
### Security Scanning
|
|
190
|
-
|
|
191
|
-
```yaml
|
|
192
|
-
security:
|
|
193
|
-
runs-on: ubuntu-latest
|
|
194
|
-
steps:
|
|
195
|
-
- uses: actions/checkout@v4
|
|
196
|
-
- run: npm audit --audit-level=high
|
|
197
|
-
- uses: github/codeql-action/analyze@v3
|
|
198
|
-
with:
|
|
199
|
-
languages: javascript-typescript
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
---
|
|
203
|
-
|
|
204
|
-
## Deployment Strategies
|
|
205
|
-
|
|
206
|
-
```
|
|
207
|
-
Rolling Update (default):
|
|
208
|
-
Old โโโโโโโโ โ โโโโโโโโ โ โโโโโโโโ โ โโโโโโโโ
|
|
209
|
-
New โโโโโโโโ โ โโโโโโโโ โ โโโโโโโโ โ โโโโโโโโ
|
|
210
|
-
- Gradual replacement, zero downtime
|
|
211
|
-
- Rollback: redeploy previous version
|
|
212
|
-
|
|
213
|
-
Blue/Green:
|
|
214
|
-
Blue โโโโโโโโ (live) โ โโโโโโโโ (idle)
|
|
215
|
-
Green โโโโโโโโ (staging) โ โโโโโโโโ (live)
|
|
216
|
-
- Instant switch via load balancer
|
|
217
|
-
- Instant rollback (switch back)
|
|
218
|
-
- Requires 2x infrastructure
|
|
219
|
-
|
|
220
|
-
Canary:
|
|
221
|
-
Stable โโโโโโโโ (95%) โ โโโโโโโโ (90%) โ โโโโโโโโ (0%)
|
|
222
|
-
Canary โโโโโโโโ (5%) โ โโโโโโโโ (10%) โ โโโโโโโโ (100%)
|
|
223
|
-
- Gradual traffic shift
|
|
224
|
-
- Monitor error rates/latency at each stage
|
|
225
|
-
- Rollback: stop canary traffic
|
|
226
|
-
|
|
227
|
-
Feature Flags:
|
|
228
|
-
- Deploy code, control activation separately
|
|
229
|
-
- Risk-free deploys โ flag is off by default
|
|
230
|
-
- A/B testing capability
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
---
|
|
234
|
-
|
|
235
|
-
## Secrets Management
|
|
236
|
-
|
|
237
|
-
```yaml
|
|
238
|
-
# โ NEVER:
|
|
239
|
-
# - Hardcode secrets in code
|
|
240
|
-
# - Commit .env files to git
|
|
241
|
-
# - Use plain text in CI/CD configs
|
|
242
|
-
# - Share secrets via Slack/email
|
|
243
|
-
|
|
244
|
-
# โ
ALWAYS:
|
|
245
|
-
# GitHub Actions: Repository Secrets
|
|
246
|
-
# - Settings โ Secrets โ Actions โ New repository secret
|
|
247
|
-
# - Reference: ${{ secrets.MY_SECRET }}
|
|
248
|
-
|
|
249
|
-
# Production: Use your platform's secret manager
|
|
250
|
-
# - AWS Secrets Manager / SSM Parameter Store
|
|
251
|
-
# - GCP Secret Manager
|
|
252
|
-
# - Azure Key Vault
|
|
253
|
-
# - Doppler / Infisical (cross-platform)
|
|
254
|
-
|
|
255
|
-
# .env management:
|
|
256
|
-
# .env โ git-ignored, local development
|
|
257
|
-
# .env.example โ committed, shows required keys (no values)
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
---
|
|
261
|
-
|
|
262
|
-
## Production Readiness Checklist
|
|
263
|
-
|
|
264
|
-
```
|
|
265
|
-
Pre-Deploy:
|
|
266
|
-
โก All tests passing (unit, integration, E2E)
|
|
267
|
-
โก Security scan clean (npm audit, CodeQL)
|
|
268
|
-
โก Build succeeds in CI (not just locally)
|
|
269
|
-
โก Database migrations tested against production-size data
|
|
270
|
-
โก Environment variables verified in target environment
|
|
271
|
-
โก Rollback plan documented
|
|
272
|
-
|
|
273
|
-
Monitoring:
|
|
274
|
-
โก Health check endpoint (/health)
|
|
275
|
-
โก Structured logging (JSON, not console.log)
|
|
276
|
-
โก Error tracking (Sentry, Datadog)
|
|
277
|
-
โก Uptime monitoring (external)
|
|
278
|
-
โก Alerting configured (PagerDuty, OpsGenie)
|
|
279
|
-
|
|
280
|
-
Performance:
|
|
281
|
-
โก Response time P95 < 500ms
|
|
282
|
-
โก Error rate < 0.1%
|
|
283
|
-
โก Database connection pooling configured
|
|
284
|
-
โก CDN for static assets
|
|
285
|
-
โก Compression enabled (gzip/brotli)
|
|
286
|
-
|
|
287
|
-
Security:
|
|
288
|
-
โก HTTPS only (HSTS enabled)
|
|
289
|
-
โก Rate limiting on all public endpoints
|
|
290
|
-
โก CORS configured (not wildcard *)
|
|
291
|
-
โก Security headers (helmet)
|
|
292
|
-
โก No secrets in code or logs
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
---
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
---
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
AI coding assistants often fall into specific bad habits when dealing with this domain. These are strictly forbidden:
|
|
303
|
-
|
|
304
|
-
1. **Over-engineering:** Proposing complex abstractions or distributed systems when a simpler approach suffices.
|
|
305
|
-
2. **Hallucinated Libraries/Methods:** Using non-existent methods or packages. Always `// VERIFY` or check `package.json` / `requirements.txt`.
|
|
306
|
-
3. **Skipping Edge Cases:** Writing the "happy path" and ignoring error handling, timeouts, or data validation.
|
|
307
|
-
4. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
|
|
308
|
-
5. **Silent Degradation:** Catching and suppressing errors without logging or re-raising.
|
|
309
|
-
|
|
310
|
-
---
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
**Slash command: `/review` or `/tribunal-full`**
|
|
315
|
-
**Active reviewers: `logic-reviewer` ยท `security-auditor`**
|
|
316
|
-
|
|
317
|
-
### โ Forbidden AI Tropes
|
|
318
|
-
|
|
319
|
-
1. **Blind Assumptions:** Never make an assumption without documenting it clearly with `// VERIFY: [reason]`.
|
|
320
|
-
2. **Silent Degradation:** Catching and suppressing errors without logging or handling.
|
|
321
|
-
3. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
Review these questions before confirming output:
|
|
326
|
-
```
|
|
327
|
-
โ
Did I rely ONLY on real, verified tools and methods?
|
|
328
|
-
โ
Is this solution appropriately scoped to the user's constraints?
|
|
329
|
-
โ
Did I handle potential failure modes and edge cases?
|
|
330
|
-
โ
Have I avoided generic boilerplate that doesn't add value?
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
### ๐ Verification-Before-Completion (VBC) Protocol
|
|
334
|
-
|
|
335
|
-
**CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
|
|
336
|
-
- โ **Forbidden:** Declaring a task complete because the output "looks correct."
|
|
337
|
-
- โ
**Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
## Pre-Flight Checklist
|
|
341
|
-
- [ ] Have I reviewed the user's specific constraints and requests?
|
|
342
|
-
- [ ] Have I checked the environment for relevant existing implementations?
|
|
343
|
-
|
|
344
|
-
## VBC Protocol (Verification-Before-Completion)
|
|
345
|
-
You MUST verify existing code signatures and variables before attempting to modify or call them. No hallucination is permitted.
|
|
1
|
+
---
|
|
2
|
+
name: devops-engineer
|
|
3
|
+
description: DevOps engineering mastery. Docker containerization, Docker Compose, CI/CD with GitHub Actions, Kubernetes basics, infrastructure as code (Terraform), monitoring/alerting, deployment strategies (blue/green, canary, rolling), secrets management, and production readiness checklists. Use when building CI/CD pipelines, containerizing apps, or managing infrastructure.
|
|
4
|
+
allowed-tools: Read, Write, Edit, Glob, Grep
|
|
5
|
+
version: 2.0.0
|
|
6
|
+
last-updated: 2026-04-01
|
|
7
|
+
applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
|
|
8
|
+
routing:
|
|
9
|
+
domain: general
|
|
10
|
+
tier: basic
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# DevOps Engineer โ CI/CD & Infrastructure Mastery
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Docker
|
|
18
|
+
|
|
19
|
+
### Dockerfile (Production-Ready)
|
|
20
|
+
|
|
21
|
+
```dockerfile
|
|
22
|
+
# โ
Multi-stage build โ minimal final image
|
|
23
|
+
FROM node:22-alpine AS builder
|
|
24
|
+
WORKDIR /app
|
|
25
|
+
|
|
26
|
+
# Install deps first (cache layer)
|
|
27
|
+
COPY package.json package-lock.json ./
|
|
28
|
+
RUN npm ci --ignore-scripts
|
|
29
|
+
|
|
30
|
+
# Build
|
|
31
|
+
COPY . .
|
|
32
|
+
RUN npm run build
|
|
33
|
+
|
|
34
|
+
# โโโโ Production stage โโโโ
|
|
35
|
+
FROM node:22-alpine AS runner
|
|
36
|
+
WORKDIR /app
|
|
37
|
+
|
|
38
|
+
# Security: non-root user
|
|
39
|
+
RUN addgroup --system --gid 1001 appgroup && \
|
|
40
|
+
adduser --system --uid 1001 appuser
|
|
41
|
+
|
|
42
|
+
# Copy only production artifacts
|
|
43
|
+
COPY --from=builder /app/dist ./dist
|
|
44
|
+
COPY --from=builder /app/node_modules ./node_modules
|
|
45
|
+
COPY --from=builder /app/package.json ./
|
|
46
|
+
|
|
47
|
+
USER appuser
|
|
48
|
+
EXPOSE 3000
|
|
49
|
+
ENV NODE_ENV=production
|
|
50
|
+
|
|
51
|
+
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
|
|
52
|
+
CMD wget --quiet --tries=1 --spider http://localhost:3000/health || exit 1
|
|
346
53
|
|
|
54
|
+
CMD ["node", "dist/index.js"]
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
```dockerfile
|
|
58
|
+
# โ HALLUCINATION TRAP: Common Dockerfile mistakes
|
|
59
|
+
# โ FROM node:22 โ 1GB+ image (use alpine: ~150MB)
|
|
60
|
+
# โ RUN npm install โ installs devDependencies, no lockfile
|
|
61
|
+
# โ
RUN npm ci โ deterministic, production-only
|
|
62
|
+
# โ COPY . . โ copies node_modules, .git, secrets
|
|
63
|
+
# โ
Use .dockerignore โ exclude node_modules, .env, .git
|
|
64
|
+
# โ Running as root โ security vulnerability
|
|
65
|
+
# โ
USER appuser โ non-root user
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### .dockerignore
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
node_modules
|
|
72
|
+
.git
|
|
73
|
+
.env
|
|
74
|
+
.env.*
|
|
75
|
+
*.md
|
|
76
|
+
.github
|
|
77
|
+
coverage
|
|
78
|
+
dist
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Docker Compose
|
|
82
|
+
|
|
83
|
+
```yaml
|
|
84
|
+
# docker-compose.yml
|
|
85
|
+
services:
|
|
86
|
+
app:
|
|
87
|
+
build:
|
|
88
|
+
context: .
|
|
89
|
+
target: runner
|
|
90
|
+
ports:
|
|
91
|
+
- "3000:3000"
|
|
92
|
+
environment:
|
|
93
|
+
- DATABASE_URL=postgres://postgres:postgres@db:5432/myapp
|
|
94
|
+
- REDIS_URL=redis://redis:6379
|
|
95
|
+
depends_on:
|
|
96
|
+
db:
|
|
97
|
+
condition: service_healthy
|
|
98
|
+
redis:
|
|
99
|
+
condition: service_started
|
|
100
|
+
restart: unless-stopped
|
|
101
|
+
|
|
102
|
+
db:
|
|
103
|
+
image: postgres:16-alpine
|
|
104
|
+
environment:
|
|
105
|
+
POSTGRES_DB: myapp
|
|
106
|
+
POSTGRES_USER: postgres
|
|
107
|
+
POSTGRES_PASSWORD: postgres
|
|
108
|
+
volumes:
|
|
109
|
+
- pgdata:/var/lib/postgresql/data
|
|
110
|
+
healthcheck:
|
|
111
|
+
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
|
112
|
+
interval: 5s
|
|
113
|
+
timeout: 3s
|
|
114
|
+
retries: 5
|
|
115
|
+
|
|
116
|
+
redis:
|
|
117
|
+
image: redis:7-alpine
|
|
118
|
+
volumes:
|
|
119
|
+
- redisdata:/data
|
|
120
|
+
|
|
121
|
+
volumes:
|
|
122
|
+
pgdata:
|
|
123
|
+
redisdata:
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## CI/CD with GitHub Actions
|
|
129
|
+
|
|
130
|
+
### Standard Pipeline
|
|
131
|
+
|
|
132
|
+
```yaml
|
|
133
|
+
# .github/workflows/ci.yml
|
|
134
|
+
name: CI
|
|
135
|
+
|
|
136
|
+
on:
|
|
137
|
+
push:
|
|
138
|
+
branches: [main]
|
|
139
|
+
pull_request:
|
|
140
|
+
branches: [main]
|
|
141
|
+
|
|
142
|
+
concurrency:
|
|
143
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
144
|
+
cancel-in-progress: true # cancel stale runs on same PR
|
|
145
|
+
|
|
146
|
+
jobs:
|
|
147
|
+
lint-and-test:
|
|
148
|
+
runs-on: ubuntu-latest
|
|
149
|
+
steps:
|
|
150
|
+
- uses: actions/checkout@v4
|
|
151
|
+
|
|
152
|
+
- uses: actions/setup-node@v4
|
|
153
|
+
with:
|
|
154
|
+
node-version: 22
|
|
155
|
+
cache: npm
|
|
156
|
+
|
|
157
|
+
- run: npm ci
|
|
158
|
+
- run: npm run lint
|
|
159
|
+
- run: npm run typecheck
|
|
160
|
+
- run: npm run test -- --coverage
|
|
161
|
+
|
|
162
|
+
- uses: actions/upload-artifact@v4
|
|
163
|
+
if: always()
|
|
164
|
+
with:
|
|
165
|
+
name: coverage
|
|
166
|
+
path: coverage/
|
|
167
|
+
|
|
168
|
+
build:
|
|
169
|
+
runs-on: ubuntu-latest
|
|
170
|
+
needs: lint-and-test
|
|
171
|
+
steps:
|
|
172
|
+
- uses: actions/checkout@v4
|
|
173
|
+
- uses: actions/setup-node@v4
|
|
174
|
+
with:
|
|
175
|
+
node-version: 22
|
|
176
|
+
cache: npm
|
|
177
|
+
- run: npm ci
|
|
178
|
+
- run: npm run build
|
|
179
|
+
|
|
180
|
+
deploy:
|
|
181
|
+
runs-on: ubuntu-latest
|
|
182
|
+
needs: build
|
|
183
|
+
if: github.ref == 'refs/heads/main'
|
|
184
|
+
environment: production
|
|
185
|
+
steps:
|
|
186
|
+
- uses: actions/checkout@v4
|
|
187
|
+
|
|
188
|
+
# Deploy to your platform (Vercel, Railway, Fly.io, etc.)
|
|
189
|
+
- run: npx vercel deploy --prod --token=${{ secrets.VERCEL_TOKEN }}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Security Scanning
|
|
193
|
+
|
|
194
|
+
```yaml
|
|
195
|
+
security:
|
|
196
|
+
runs-on: ubuntu-latest
|
|
197
|
+
steps:
|
|
198
|
+
- uses: actions/checkout@v4
|
|
199
|
+
- run: npm audit --audit-level=high
|
|
200
|
+
- uses: github/codeql-action/analyze@v3
|
|
201
|
+
with:
|
|
202
|
+
languages: javascript-typescript
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Deployment Strategies
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
Rolling Update (default):
|
|
211
|
+
Old โโโโโโโโ โ โโโโโโโโ โ โโโโโโโโ โ โโโโโโโโ
|
|
212
|
+
New โโโโโโโโ โ โโโโโโโโ โ โโโโโโโโ โ โโโโโโโโ
|
|
213
|
+
- Gradual replacement, zero downtime
|
|
214
|
+
- Rollback: redeploy previous version
|
|
215
|
+
|
|
216
|
+
Blue/Green:
|
|
217
|
+
Blue โโโโโโโโ (live) โ โโโโโโโโ (idle)
|
|
218
|
+
Green โโโโโโโโ (staging) โ โโโโโโโโ (live)
|
|
219
|
+
- Instant switch via load balancer
|
|
220
|
+
- Instant rollback (switch back)
|
|
221
|
+
- Requires 2x infrastructure
|
|
222
|
+
|
|
223
|
+
Canary:
|
|
224
|
+
Stable โโโโโโโโ (95%) โ โโโโโโโโ (90%) โ โโโโโโโโ (0%)
|
|
225
|
+
Canary โโโโโโโโ (5%) โ โโโโโโโโ (10%) โ โโโโโโโโ (100%)
|
|
226
|
+
- Gradual traffic shift
|
|
227
|
+
- Monitor error rates/latency at each stage
|
|
228
|
+
- Rollback: stop canary traffic
|
|
229
|
+
|
|
230
|
+
Feature Flags:
|
|
231
|
+
- Deploy code, control activation separately
|
|
232
|
+
- Risk-free deploys โ flag is off by default
|
|
233
|
+
- A/B testing capability
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Secrets Management
|
|
239
|
+
|
|
240
|
+
```yaml
|
|
241
|
+
# โ NEVER:
|
|
242
|
+
# - Hardcode secrets in code
|
|
243
|
+
# - Commit .env files to git
|
|
244
|
+
# - Use plain text in CI/CD configs
|
|
245
|
+
# - Share secrets via Slack/email
|
|
246
|
+
|
|
247
|
+
# โ
ALWAYS:
|
|
248
|
+
# GitHub Actions: Repository Secrets
|
|
249
|
+
# - Settings โ Secrets โ Actions โ New repository secret
|
|
250
|
+
# - Reference: ${{ secrets.MY_SECRET }}
|
|
251
|
+
|
|
252
|
+
# Production: Use your platform's secret manager
|
|
253
|
+
# - AWS Secrets Manager / SSM Parameter Store
|
|
254
|
+
# - GCP Secret Manager
|
|
255
|
+
# - Azure Key Vault
|
|
256
|
+
# - Doppler / Infisical (cross-platform)
|
|
257
|
+
|
|
258
|
+
# .env management:
|
|
259
|
+
# .env โ git-ignored, local development
|
|
260
|
+
# .env.example โ committed, shows required keys (no values)
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Production Readiness Checklist
|
|
266
|
+
|
|
267
|
+
```
|
|
268
|
+
Pre-Deploy:
|
|
269
|
+
โก All tests passing (unit, integration, E2E)
|
|
270
|
+
โก Security scan clean (npm audit, CodeQL)
|
|
271
|
+
โก Build succeeds in CI (not just locally)
|
|
272
|
+
โก Database migrations tested against production-size data
|
|
273
|
+
โก Environment variables verified in target environment
|
|
274
|
+
โก Rollback plan documented
|
|
275
|
+
|
|
276
|
+
Monitoring:
|
|
277
|
+
โก Health check endpoint (/health)
|
|
278
|
+
โก Structured logging (JSON, not console.log)
|
|
279
|
+
โก Error tracking (Sentry, Datadog)
|
|
280
|
+
โก Uptime monitoring (external)
|
|
281
|
+
โก Alerting configured (PagerDuty, OpsGenie)
|
|
282
|
+
|
|
283
|
+
Performance:
|
|
284
|
+
โก Response time P95 < 500ms
|
|
285
|
+
โก Error rate < 0.1%
|
|
286
|
+
โก Database connection pooling configured
|
|
287
|
+
โก CDN for static assets
|
|
288
|
+
โก Compression enabled (gzip/brotli)
|
|
289
|
+
|
|
290
|
+
Security:
|
|
291
|
+
โก HTTPS only (HSTS enabled)
|
|
292
|
+
โก Rate limiting on all public endpoints
|
|
293
|
+
โก CORS configured (not wildcard *)
|
|
294
|
+
โก Security headers (helmet)
|
|
295
|
+
โก No secrets in code or logs
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
AI coding assistants often fall into specific bad habits when dealing with this domain. These are strictly forbidden:
|
|
303
|
+
|
|
304
|
+
1. **Over-engineering:** Proposing complex abstractions or distributed systems when a simpler approach suffices.
|
|
305
|
+
2. **Hallucinated Libraries/Methods:** Using non-existent methods or packages. Always `// VERIFY` or check `package.json` / `requirements.txt`.
|
|
306
|
+
3. **Skipping Edge Cases:** Writing the "happy path" and ignoring error handling, timeouts, or data validation.
|
|
307
|
+
4. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
|
|
308
|
+
5. **Silent Degradation:** Catching and suppressing errors without logging or re-raising.
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
**Slash command: `/review` or `/tribunal-full`**
|
|
313
|
+
**Active reviewers: `logic-reviewer` ยท `security-auditor`**
|
|
314
|
+
|
|
315
|
+
### โ Forbidden AI Tropes
|
|
316
|
+
|
|
317
|
+
1. **Blind Assumptions:** Never make an assumption without documenting it clearly with `// VERIFY: [reason]`.
|
|
318
|
+
2. **Silent Degradation:** Catching and suppressing errors without logging or handling.
|
|
319
|
+
3. **Context Amnesia:** Forgetting the user's constraints and offering generic advice instead of tailored solutions.
|
|
320
|
+
|
|
321
|
+
Review these questions before confirming output:
|
|
322
|
+
|
|
323
|
+
```
|
|
324
|
+
โ
Did I rely ONLY on real, verified tools and methods?
|
|
325
|
+
โ
Is this solution appropriately scoped to the user's constraints?
|
|
326
|
+
โ
Did I handle potential failure modes and edge cases?
|
|
327
|
+
โ
Have I avoided generic boilerplate that doesn't add value?
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### ๐ Verification-Before-Completion (VBC) Protocol
|
|
331
|
+
|
|
332
|
+
**CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
|
|
333
|
+
|
|
334
|
+
- โ **Forbidden:** Declaring a task complete because the output "looks correct."
|
|
335
|
+
- โ
**Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.
|
|
336
|
+
|
|
337
|
+
## Pre-Flight Checklist
|
|
338
|
+
|
|
339
|
+
- [ ] Have I reviewed the user's specific constraints and requests?
|
|
340
|
+
- [ ] Have I checked the environment for relevant existing implementations?
|
|
341
|
+
|
|
342
|
+
## VBC Protocol (Verification-Before-Completion)
|
|
343
|
+
|
|
344
|
+
You MUST verify existing code signatures and variables before attempting to modify or call them. No hallucination is permitted.
|
|
347
345
|
|
|
348
346
|
---
|
|
349
347
|
|
|
@@ -373,6 +371,7 @@ AI coding assistants often fall into specific bad habits when dealing with this
|
|
|
373
371
|
### โ
Pre-Flight Self-Audit
|
|
374
372
|
|
|
375
373
|
Review these questions before confirming output:
|
|
374
|
+
|
|
376
375
|
```
|
|
377
376
|
โ
Did I rely ONLY on real, verified tools and methods?
|
|
378
377
|
โ
Is this solution appropriately scoped to the user's constraints?
|
|
@@ -383,5 +382,6 @@ Review these questions before confirming output:
|
|
|
383
382
|
### ๐ Verification-Before-Completion (VBC) Protocol
|
|
384
383
|
|
|
385
384
|
**CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
|
|
385
|
+
|
|
386
386
|
- โ **Forbidden:** Declaring a task complete because the output "looks correct."
|
|
387
387
|
- โ
**Required:** You are explicitly forbidden from finalizing any task without providing **concrete evidence** (terminal output, passing tests, compile success, or equivalent proof) that your output works as intended.
|