vibes-plug 2.14.1 → 3.9.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.
Files changed (151) hide show
  1. package/.claude/rules/vibes-plug-core.md +5 -0
  2. package/.cursor/rules/vibes-plug-core.mdc +7 -2
  3. package/.cursorrules +8 -2
  4. package/AGENTS.md +23 -2
  5. package/CHANGELOG.md +114 -0
  6. package/CLAUDE.md +10 -3
  7. package/README.md +216 -611
  8. package/bin/vibes.mjs +1104 -0
  9. package/package.json +11 -3
  10. package/plugin.json +4 -3
  11. package/scripts/check-anti-slop.mjs +53 -0
  12. package/scripts/install.js +3 -1
  13. package/scripts/update_skills.js +1 -1
  14. package/scripts/update_skills.mjs +86 -0
  15. package/scripts/validate-skills.mjs +111 -0
  16. package/skills/accessibility-testing-expert/SKILL.md +117 -116
  17. package/skills/affective-computing-emotion-ai/SKILL.md +83 -0
  18. package/skills/agentic-coding-workflow-expert/SKILL.md +297 -0
  19. package/skills/agentic-memory-architect/SKILL.md +52 -0
  20. package/skills/agentic-micro-economy-architect/SKILL.md +92 -0
  21. package/skills/ai-llm-integration-expert/SKILL.md +330 -194
  22. package/skills/ai-media-generation-expert/SKILL.md +173 -172
  23. package/skills/ai-prompt-engineering-expert/SKILL.md +204 -134
  24. package/skills/ai-safety-governance-expert/SKILL.md +223 -0
  25. package/skills/angular-expert/SKILL.md +149 -148
  26. package/skills/anti-slop/SKILL.md +134 -133
  27. package/skills/api-design-expert/SKILL.md +4 -3
  28. package/skills/api-gateway-proxy-expert/SKILL.md +3 -2
  29. package/skills/app-analyzer-optimizer/SKILL.md +4 -3
  30. package/skills/apple-ecosystem-expert/SKILL.md +6 -5
  31. package/skills/astro-framework-expert/SKILL.md +201 -200
  32. package/skills/async-queue-temporal-expert/SKILL.md +218 -217
  33. package/skills/authentication-identity-expert/SKILL.md +174 -173
  34. package/skills/autonomous-red-teamer/SKILL.md +338 -203
  35. package/skills/autonomous-tdd-debugger/SKILL.md +6 -5
  36. package/skills/biome-linter-formatter-expert/SKILL.md +90 -89
  37. package/skills/blockchain-web3-expert/SKILL.md +116 -115
  38. package/skills/brainstorming/SKILL.md +392 -377
  39. package/skills/browser-automation-expert/SKILL.md +260 -222
  40. package/skills/bun-runtime-expert/SKILL.md +5 -4
  41. package/skills/chatbot-messaging-expert/SKILL.md +115 -114
  42. package/skills/ci-cd-devops-architect/SKILL.md +3 -2
  43. package/skills/cloud-hosting-expert/SKILL.md +5 -4
  44. package/skills/coderabbit/SKILL.md +5 -4
  45. package/skills/compliance-gdpr-privacy-expert/SKILL.md +3 -2
  46. package/skills/composable-mach-architect/SKILL.md +338 -0
  47. package/skills/cron-scheduler-expert/SKILL.md +5 -4
  48. package/skills/data-pipeline-etl-expert/SKILL.md +3 -2
  49. package/skills/data-telemetry-expert/SKILL.md +5 -4
  50. package/skills/data-visualization-expert/SKILL.md +155 -154
  51. package/skills/database-orm-expert/SKILL.md +166 -165
  52. package/skills/deep-research-analyst/SKILL.md +182 -136
  53. package/skills/dependency-upgrade-migrator/SKILL.md +11 -10
  54. package/skills/design-system-architect/SKILL.md +4 -3
  55. package/skills/desktop-electron-expert/SKILL.md +129 -128
  56. package/skills/documentation-site-expert/SKILL.md +60 -59
  57. package/skills/doku-mcp-server/SKILL.md +5 -4
  58. package/skills/doku-payment-gateway/SKILL.md +250 -232
  59. package/skills/domain-driven-design-expert/SKILL.md +3 -2
  60. package/skills/e2e-testing-expert/SKILL.md +5 -4
  61. package/skills/ecommerce-expert/SKILL.md +88 -87
  62. package/skills/email-notification-expert/SKILL.md +5 -4
  63. package/skills/ephemeral-generative-ui-architect/SKILL.md +88 -0
  64. package/skills/error-resilience-expert/SKILL.md +14 -13
  65. package/skills/event-driven-architect/SKILL.md +5 -4
  66. package/skills/feature-flag-analytics-expert/SKILL.md +3 -2
  67. package/skills/file-upload-media-expert/SKILL.md +5 -4
  68. package/skills/firebase-security-expert/SKILL.md +5 -4
  69. package/skills/form-validation-expert/SKILL.md +7 -6
  70. package/skills/frontier-ai-models-expert/SKILL.md +116 -0
  71. package/skills/fullstack-expert/SKILL.md +185 -184
  72. package/skills/gemini-agent-booster/SKILL.md +248 -172
  73. package/skills/geospatial-maps-expert/SKILL.md +81 -80
  74. package/skills/global-a11y-i18n-expert/SKILL.md +5 -4
  75. package/skills/glsl-shader-expert/SKILL.md +191 -190
  76. package/skills/go-programming-expert/SKILL.md +5 -4
  77. package/skills/graph-rag-knowledge-expert/SKILL.md +201 -200
  78. package/skills/graphql-apollo-expert/SKILL.md +5 -4
  79. package/skills/headless-cms-expert/SKILL.md +182 -181
  80. package/skills/hig/SKILL.md +5 -4
  81. package/skills/js-backend-expert/SKILL.md +219 -218
  82. package/skills/legacy-code-translator/SKILL.md +6 -5
  83. package/skills/llm-finops-router/SKILL.md +52 -0
  84. package/skills/local-slm-edge-ai-expert/SKILL.md +168 -167
  85. package/skills/logging-error-tracking-expert/SKILL.md +5 -4
  86. package/skills/mcp-server-architect/SKILL.md +315 -307
  87. package/skills/micro-frontend-architect/SKILL.md +5 -4
  88. package/skills/mobile-expo-expert/SKILL.md +5 -4
  89. package/skills/modern-css-native-expert/SKILL.md +190 -189
  90. package/skills/monorepo-architect/SKILL.md +5 -4
  91. package/skills/mpa-orchestrator/SKILL.md +41 -4
  92. package/skills/multi-agent-orchestration/SKILL.md +388 -254
  93. package/skills/mvc-expert/SKILL.md +5 -4
  94. package/skills/n8n-automation-expert/SKILL.md +90 -89
  95. package/skills/nextjs-app-router-expert/SKILL.md +3 -2
  96. package/skills/openapi-swagger-codegen-expert/SKILL.md +4 -3
  97. package/skills/payment-gateway-expert/SKILL.md +131 -128
  98. package/skills/pdf-document-generation-expert/SKILL.md +92 -91
  99. package/skills/performance-web-vitals/SKILL.md +5 -4
  100. package/skills/post-quantum-crypto-migrator/SKILL.md +3 -2
  101. package/skills/prd-architect/SKILL.md +183 -182
  102. package/skills/proactive-background-watcher/SKILL.md +5 -4
  103. package/skills/production-ready-hardener/SKILL.md +10 -9
  104. package/skills/pwa-offline-first-expert/SKILL.md +227 -226
  105. package/skills/pydantic-ai-expert/SKILL.md +162 -161
  106. package/skills/python-programming-expert/SKILL.md +5 -4
  107. package/skills/rate-limit-abuse-prevention/SKILL.md +5 -4
  108. package/skills/realtime-collaboration-expert/SKILL.md +3 -2
  109. package/skills/rich-text-editor-expert/SKILL.md +178 -177
  110. package/skills/rust-programming-expert/SKILL.md +5 -4
  111. package/skills/saas-architect/SKILL.md +155 -154
  112. package/skills/saas-billing/SKILL.md +394 -382
  113. package/skills/saas-multi-tenant/SKILL.md +7 -6
  114. package/skills/scalability-clean-code/SKILL.md +5 -4
  115. package/skills/search-engine-expert/SKILL.md +90 -89
  116. package/skills/self-healing-cloud-orchestrator/SKILL.md +3 -2
  117. package/skills/senior-frontend/SKILL.md +14 -9
  118. package/skills/seo/SKILL.md +4 -4
  119. package/skills/session-memory-manager/SKILL.md +129 -128
  120. package/skills/solidjs-expert/SKILL.md +81 -80
  121. package/skills/spa-orchestrator/SKILL.md +5 -4
  122. package/skills/sse-websocket-streaming-expert/SKILL.md +3 -2
  123. package/skills/state-management-expert/SKILL.md +5 -4
  124. package/skills/supabase-security-expert/SKILL.md +5 -4
  125. package/skills/svelte-sveltekit-expert/SKILL.md +92 -91
  126. package/skills/svg-animation-motion-expert/SKILL.md +3 -2
  127. package/skills/synthetic-data-finetuning-expert/SKILL.md +156 -155
  128. package/skills/tailwind-expert/SKILL.md +62 -5
  129. package/skills/tanstack-query-expert/SKILL.md +5 -4
  130. package/skills/tauri-expert/SKILL.md +5 -4
  131. package/skills/typescript-expert/SKILL.md +5 -4
  132. package/skills/ui-ux-pro-max/SKILL.md +7 -6
  133. package/skills/vector-db-rag-expert/SKILL.md +209 -208
  134. package/skills/vercel-ai-sdk-expert/SKILL.md +226 -181
  135. package/skills/voice-ai-realtime-agent/SKILL.md +243 -242
  136. package/skills/vue-frontend-expert/SKILL.md +5 -4
  137. package/skills/wasm-edge-computing-expert/SKILL.md +3 -2
  138. package/skills/web-3d-graphics-expert/SKILL.md +314 -313
  139. package/skills/web-game-engine-expert/SKILL.md +330 -329
  140. package/skills/web-scraper/SKILL.md +158 -157
  141. package/skills/website-design-cloner/SKILL.md +5 -4
  142. package/skills/webxr-ar-vr-expert/SKILL.md +163 -162
  143. package/skills/wordpress-headless-expert/SKILL.md +145 -144
  144. package/skills/zero-tech-debt-auditor/SKILL.md +115 -0
  145. package/skills/zero-to-prod-orchestrator/SKILL.md +281 -229
  146. package/skills/zero-trust-secret-vault/SKILL.md +3 -2
  147. package/BLUEPRINT.md +0 -319
  148. package/skills/bootstrap-to-modern/SKILL.md +0 -94
  149. package/skills/multiple-entry-points/SKILL.md +0 -91
  150. package/skills/secure-fuzz-testing/SKILL.md +0 -207
  151. package/skills/visual-qa-vision-agent/SKILL.md +0 -71
@@ -1,217 +1,218 @@
1
- ---
2
- name: async-queue-temporal-expert
3
- description: "Unified expert guide for async job queues & durable workflows: BullMQ v5 (Redis queues), Trigger.dev v3 (serverless tasks), Inngest, and Temporal.io (distributed sagas) / Panduan ahli terpadu untuk antrean job asinkron & workflow tahan-gagal: BullMQ v5, Trigger.dev v3, Inngest, dan Temporal.io."
4
- author: "Roedy Rustam"
5
- ---
6
-
7
- # Async Queue & Durable Workflow Expert (2026 Unified Edition)
8
-
9
- [English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
10
-
11
- ---
12
-
13
- <a name="english"></a>
14
- ## English
15
-
16
- ### Purpose & Overview
17
- Unified production-grade guide for background execution pipelines, async job queues, and distributed state machines. Covers the full spectrum from simple Redis-backed task queues to complex multi-service sagas with compensating rollbacks.
18
-
19
- ### 3-Tier Execution Model
20
- | Tier | Engine | Best For |
21
- |------|--------|----------|
22
- | **Tier 1: Redis Task Queues** | BullMQ v5 | High-throughput worker jobs, priority queues, rate limiting, DLQ |
23
- | **Tier 2: Serverless Durable Tasks** | Trigger.dev v3 / Inngest | Step-checkpointed tasks, automatic resume across crashes, zero infra |
24
- | **Tier 3: Distributed Sagas** | Temporal.io | Multi-service orchestration, compensating rollbacks, long-running workflows |
25
-
26
- ### Core Capabilities
27
- 1. **Idempotency & Deduplication**: Deterministic `jobId` keys prevent double billing or duplicate emails.
28
- 2. **Dead Letter Queues (DLQ)**: Auto-relocate permanently failing jobs for audit and alerting.
29
- 3. **Exponential Backoff with Jitter**: Prevents thundering herds on upstream services.
30
- 4. **Tenant Priority Queues**: VIP/enterprise tiers get lower BullMQ priority numbers (higher throughput).
31
- 5. **Durable State Machines**: Workflows survive restarts, deployments, and network partitions.
32
- 6. **Saga Compensations**: Multi-step transactions with automated reverse-order rollbacks.
33
-
34
- ---
35
-
36
- ### Tier 1: BullMQ v5 — Redis Task Queues (TypeScript)
37
-
38
- ```typescript
39
- import { Queue, Worker, Job } from 'bullmq';
40
- import Redis from 'ioredis';
41
-
42
- const redisConnection = new Redis(process.env.REDIS_URL!, {
43
- maxRetriesPerRequest: null, // Required by BullMQ
44
- });
45
-
46
- export interface NotificationPayload {
47
- tenantId: string;
48
- userId: string;
49
- type: 'email' | 'webhook';
50
- payload: Record<string, unknown>;
51
- idempotencyKey: string;
52
- }
53
-
54
- // Main Queue
55
- export const notificationQueue = new Queue<NotificationPayload>('notifications', {
56
- connection: redisConnection,
57
- defaultJobOptions: {
58
- attempts: 5,
59
- backoff: { type: 'exponential', delay: 1500 },
60
- removeOnComplete: { age: 86400, count: 5000 },
61
- removeOnFail: false, // Preserved for DLQ audit
62
- },
63
- });
64
-
65
- // Dead Letter Queue
66
- export const notificationDLQ = new Queue('notifications-dlq', {
67
- connection: redisConnection,
68
- });
69
-
70
- // Enqueue with deduplication & priority
71
- export async function enqueueNotification(data: NotificationPayload, isVip = false) {
72
- return await notificationQueue.add('send_notification', data, {
73
- jobId: `notif_${data.idempotencyKey}`, // Deterministic dedup key
74
- priority: isVip ? 1 : 10,
75
- });
76
- }
77
-
78
- // Worker with concurrency & rate limiting
79
- export const notificationWorker = new Worker<NotificationPayload>(
80
- 'notifications',
81
- async (job: Job<NotificationPayload>) => {
82
- if (job.data.type === 'email') await deliverEmail(job.data);
83
- },
84
- {
85
- connection: redisConnection,
86
- concurrency: 20,
87
- limiter: { max: 100, duration: 1000 },
88
- }
89
- );
90
-
91
- // DLQ forwarding on retry exhaustion
92
- notificationWorker.on('failed', async (job, error) => {
93
- if (job && job.attemptsMade >= (job.opts.attempts || 5)) {
94
- await notificationDLQ.add('failed_notification', {
95
- originalJobId: job.id, failedReason: error.message,
96
- data: job.data, exhaustedAt: new Date().toISOString(),
97
- });
98
- }
99
- });
100
- ```
101
-
102
- ---
103
-
104
- ### Tier 2: Trigger.dev v3 — Serverless Durable Tasks
105
-
106
- ```typescript
107
- import { task } from '@trigger.dev/sdk/v3';
108
-
109
- export const generateReport = task({
110
- id: 'generate-enterprise-report',
111
- retry: { maxAttempts: 4, minTimeoutInMs: 2000, factor: 2, randomize: true },
112
- run: async (payload: { tenantId: string; month: string }, { ctx }) => {
113
- // Each step is a durable checkpoint — survives crashes
114
- const data = await ctx.run('fetch-telemetry', async () => {
115
- return await fetchTelemetryFromWarehouse(payload.tenantId, payload.month);
116
- });
117
- const pdfUrl = await ctx.run('render-pdf', async () => {
118
- return await generateReportPdf(data);
119
- });
120
- await ctx.run('dispatch-webhook', async () => {
121
- return await sendWebhookNotification(payload.tenantId, pdfUrl);
122
- });
123
- return { success: true, pdfUrl };
124
- },
125
- });
126
- ```
127
-
128
- ---
129
-
130
- ### Tier 3: Temporal.io — Distributed Saga with Compensations
131
-
132
- ```typescript
133
- import { proxyActivities, ApplicationFailure } from '@temporalio/workflow';
134
- import type * as activities from './activities';
135
-
136
- const { chargeCustomer, provisionLicense, sendWelcomeEmail, refundCustomer, revokeLicense } =
137
- proxyActivities<typeof activities>({
138
- startToCloseTimeout: '1 minute',
139
- retry: {
140
- initialInterval: '1s', backoffCoefficient: 2, maximumAttempts: 5,
141
- nonRetryableErrorTypes: ['InvalidCardError', 'AccountSuspendedError'],
142
- },
143
- });
144
-
145
- export async function subscriptionSagaWorkflow(input: {
146
- customerId: string; planId: string; amountCents: number;
147
- }) {
148
- const compensations: Array<() => Promise<void>> = [];
149
- try {
150
- const charge = await chargeCustomer(input.customerId, input.amountCents);
151
- compensations.unshift(() => refundCustomer(charge.chargeId));
152
-
153
- const license = await provisionLicense(input.customerId, input.planId);
154
- compensations.unshift(() => revokeLicense(license.licenseId));
155
-
156
- await sendWelcomeEmail(input.customerId, license.licenseKey);
157
- return { status: 'COMPLETED' };
158
- } catch (error) {
159
- for (const compensate of compensations) {
160
- try { await compensate(); } catch (e) { console.error('Compensation failed:', e); }
161
- }
162
- throw ApplicationFailure.create({
163
- message: `Saga rolled back: ${(error as Error).message}`, nonRetryable: true,
164
- });
165
- }
166
- }
167
- ```
168
-
169
- > **Temporal Determinism Rule**: Never use `Math.random()`, `Date.now()`, or direct DB calls inside workflow files. Run them inside activities.
170
-
171
- ---
172
-
173
- ### Implementation Checklist
174
- - [ ] Configure `maxRetriesPerRequest: null` on ioredis for BullMQ v5.
175
- - [ ] Use deterministic `jobId` from business logic (`order_${orderId}`) for deduplication.
176
- - [ ] Forward permanently dead jobs to DLQ via `worker.on('failed')` listener.
177
- - [ ] Implement rate limiting via worker `limiter` to protect third-party APIs.
178
- - [ ] Enforce deterministic code inside Temporal workflows (activities for side-effects).
179
- - [ ] Store large payloads in S3/R2; pass only IDs through queues.
180
- - [ ] Implement Saga rollback handlers for multi-step distributed payments.
181
-
182
- ## Orchestration & Integration
183
- - Integrates with: `js-backend-expert`, `cron-scheduler-expert`, `error-resilience-expert`, `saas-billing`, `doku-payment-gateway`, `data-telemetry-expert`.
184
-
185
- ---
186
-
187
- <a name="bahasa-indonesia"></a>
188
- ## Bahasa Indonesia
189
-
190
- ### Tujuan & Gambaran Umum
191
- Panduan terpadu tingkat produksi untuk pipeline eksekusi latar belakang, antrean job asinkron, dan state machine terdistribusi. Mencakup spektrum penuh dari antrean Redis sederhana hingga saga multi-layanan dengan rollback kompensasi.
192
-
193
- ### Model Eksekusi 3-Tier
194
- | Tier | Engine | Cocok Untuk |
195
- |------|--------|-------------|
196
- | **Tier 1: Antrean Redis** | BullMQ v5 | Job worker throughput tinggi, prioritas, rate limiting, DLQ |
197
- | **Tier 2: Task Serverless** | Trigger.dev v3 / Inngest | Task dengan checkpoint, resume otomatis, tanpa infra |
198
- | **Tier 3: Saga Terdistribusi** | Temporal.io | Orkestrasi multi-layanan, rollback kompensasi, workflow jangka panjang |
199
-
200
- ### Kemampuan Utama
201
- 1. **Idempotensi & Deduplikasi**: Kunci `jobId` deterministik mencegah duplikasi penagihan atau email.
202
- 2. **Dead Letter Queue (DLQ)**: Pemindahan otomatis job gagal total untuk audit.
203
- 3. **Backoff Eksponensial + Jitter**: Mencegah thundering herd pada server hilir.
204
- 4. **Prioritas Tenant**: Tier VIP/enterprise mendapat prioritas lebih tinggi (angka lebih kecil di BullMQ).
205
- 5. **State Machine Tahan-Gagal**: Workflow bertahan saat restart, deployment, dan partisi jaringan.
206
- 6. **Kompensasi Saga**: Transaksi multi-langkah dengan rollback otomatis urutan mundur.
207
-
208
- ### Checklist Implementasi
209
- - [ ] Atur `maxRetriesPerRequest: null` pada ioredis untuk BullMQ v5.
210
- - [ ] Gunakan `jobId` deterministik dari ID bisnis (`invoice_${invoiceId}`) untuk deduplikasi.
211
- - [ ] Pasang listener `worker.on('failed')` untuk forward job gagal ke DLQ.
212
- - [ ] Terapkan rate limiter pada worker untuk stabilitas API eksternal.
213
- - [ ] Pastikan kode Temporal selalu deterministik (side-effect hanya di activities).
214
- - [ ] Simpan file besar di S3/R2; kirim hanya referensi ID melalui queue.
215
-
216
- ## Integrasi Orkestrasi
217
- - Terintegrasi dengan: `js-backend-expert`, `cron-scheduler-expert`, `error-resilience-expert`, `saas-billing`, `doku-payment-gateway`, `data-telemetry-expert`.
1
+ ---
2
+ name: async-queue-temporal-expert
3
+ description: "Unified expert guide for async job queues & durable workflows: BullMQ v5 (Redis queues), Trigger.dev v3 (serverless tasks), Inngest, and Temporal.io (distributed sagas) / Panduan ahli terpadu untuk antrean job asinkron & workflow tahan-gagal: BullMQ v5, Trigger.dev v3, Inngest, dan Temporal.io."
4
+ author: "Roedy Rustam"
5
+ version: "3.0.0"
6
+ ---
7
+
8
+ # Async Queue & Durable Workflow Expert (2026 Unified Edition)
9
+
10
+ [English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
11
+
12
+ ---
13
+
14
+ <a name="english"></a>
15
+ ## English
16
+
17
+ ### Purpose & Overview
18
+ Unified production-grade guide for background execution pipelines, async job queues, and distributed state machines. Covers the full spectrum from simple Redis-backed task queues to complex multi-service sagas with compensating rollbacks.
19
+
20
+ ### 3-Tier Execution Model
21
+ | Tier | Engine | Best For |
22
+ |------|--------|----------|
23
+ | **Tier 1: Redis Task Queues** | BullMQ v5 | High-throughput worker jobs, priority queues, rate limiting, DLQ |
24
+ | **Tier 2: Serverless Durable Tasks** | Trigger.dev v3 / Inngest | Step-checkpointed tasks, automatic resume across crashes, zero infra |
25
+ | **Tier 3: Distributed Sagas** | Temporal.io | Multi-service orchestration, compensating rollbacks, long-running workflows |
26
+
27
+ ### Core Capabilities
28
+ 1. **Idempotency & Deduplication**: Deterministic `jobId` keys prevent double billing or duplicate emails.
29
+ 2. **Dead Letter Queues (DLQ)**: Auto-relocate permanently failing jobs for audit and alerting.
30
+ 3. **Exponential Backoff with Jitter**: Prevents thundering herds on upstream services.
31
+ 4. **Tenant Priority Queues**: VIP/enterprise tiers get lower BullMQ priority numbers (higher throughput).
32
+ 5. **Durable State Machines**: Workflows survive restarts, deployments, and network partitions.
33
+ 6. **Saga Compensations**: Multi-step transactions with automated reverse-order rollbacks.
34
+
35
+ ---
36
+
37
+ ### Tier 1: BullMQ v5 — Redis Task Queues (TypeScript)
38
+
39
+ ```typescript
40
+ import { Queue, Worker, Job } from 'bullmq';
41
+ import Redis from 'ioredis';
42
+
43
+ const redisConnection = new Redis(process.env.REDIS_URL!, {
44
+ maxRetriesPerRequest: null, // Required by BullMQ
45
+ });
46
+
47
+ export interface NotificationPayload {
48
+ tenantId: string;
49
+ userId: string;
50
+ type: 'email' | 'webhook';
51
+ payload: Record<string, unknown>;
52
+ idempotencyKey: string;
53
+ }
54
+
55
+ // Main Queue
56
+ export const notificationQueue = new Queue<NotificationPayload>('notifications', {
57
+ connection: redisConnection,
58
+ defaultJobOptions: {
59
+ attempts: 5,
60
+ backoff: { type: 'exponential', delay: 1500 },
61
+ removeOnComplete: { age: 86400, count: 5000 },
62
+ removeOnFail: false, // Preserved for DLQ audit
63
+ },
64
+ });
65
+
66
+ // Dead Letter Queue
67
+ export const notificationDLQ = new Queue('notifications-dlq', {
68
+ connection: redisConnection,
69
+ });
70
+
71
+ // Enqueue with deduplication & priority
72
+ export async function enqueueNotification(data: NotificationPayload, isVip = false) {
73
+ return await notificationQueue.add('send_notification', data, {
74
+ jobId: `notif_${data.idempotencyKey}`, // Deterministic dedup key
75
+ priority: isVip ? 1 : 10,
76
+ });
77
+ }
78
+
79
+ // Worker with concurrency & rate limiting
80
+ export const notificationWorker = new Worker<NotificationPayload>(
81
+ 'notifications',
82
+ async (job: Job<NotificationPayload>) => {
83
+ if (job.data.type === 'email') await deliverEmail(job.data);
84
+ },
85
+ {
86
+ connection: redisConnection,
87
+ concurrency: 20,
88
+ limiter: { max: 100, duration: 1000 },
89
+ }
90
+ );
91
+
92
+ // DLQ forwarding on retry exhaustion
93
+ notificationWorker.on('failed', async (job, error) => {
94
+ if (job && job.attemptsMade >= (job.opts.attempts || 5)) {
95
+ await notificationDLQ.add('failed_notification', {
96
+ originalJobId: job.id, failedReason: error.message,
97
+ data: job.data, exhaustedAt: new Date().toISOString(),
98
+ });
99
+ }
100
+ });
101
+ ```
102
+
103
+ ---
104
+
105
+ ### Tier 2: Trigger.dev v3 — Serverless Durable Tasks
106
+
107
+ ```typescript
108
+ import { task } from '@trigger.dev/sdk/v3';
109
+
110
+ export const generateReport = task({
111
+ id: 'generate-enterprise-report',
112
+ retry: { maxAttempts: 4, minTimeoutInMs: 2000, factor: 2, randomize: true },
113
+ run: async (payload: { tenantId: string; month: string }, { ctx }) => {
114
+ // Each step is a durable checkpoint — survives crashes
115
+ const data = await ctx.run('fetch-telemetry', async () => {
116
+ return await fetchTelemetryFromWarehouse(payload.tenantId, payload.month);
117
+ });
118
+ const pdfUrl = await ctx.run('render-pdf', async () => {
119
+ return await generateReportPdf(data);
120
+ });
121
+ await ctx.run('dispatch-webhook', async () => {
122
+ return await sendWebhookNotification(payload.tenantId, pdfUrl);
123
+ });
124
+ return { success: true, pdfUrl };
125
+ },
126
+ });
127
+ ```
128
+
129
+ ---
130
+
131
+ ### Tier 3: Temporal.io — Distributed Saga with Compensations
132
+
133
+ ```typescript
134
+ import { proxyActivities, ApplicationFailure } from '@temporalio/workflow';
135
+ import type * as activities from './activities';
136
+
137
+ const { chargeCustomer, provisionLicense, sendWelcomeEmail, refundCustomer, revokeLicense } =
138
+ proxyActivities<typeof activities>({
139
+ startToCloseTimeout: '1 minute',
140
+ retry: {
141
+ initialInterval: '1s', backoffCoefficient: 2, maximumAttempts: 5,
142
+ nonRetryableErrorTypes: ['InvalidCardError', 'AccountSuspendedError'],
143
+ },
144
+ });
145
+
146
+ export async function subscriptionSagaWorkflow(input: {
147
+ customerId: string; planId: string; amountCents: number;
148
+ }) {
149
+ const compensations: Array<() => Promise<void>> = [];
150
+ try {
151
+ const charge = await chargeCustomer(input.customerId, input.amountCents);
152
+ compensations.unshift(() => refundCustomer(charge.chargeId));
153
+
154
+ const license = await provisionLicense(input.customerId, input.planId);
155
+ compensations.unshift(() => revokeLicense(license.licenseId));
156
+
157
+ await sendWelcomeEmail(input.customerId, license.licenseKey);
158
+ return { status: 'COMPLETED' };
159
+ } catch (error) {
160
+ for (const compensate of compensations) {
161
+ try { await compensate(); } catch (e) { console.error('Compensation failed:', e); }
162
+ }
163
+ throw ApplicationFailure.create({
164
+ message: `Saga rolled back: ${(error as Error).message}`, nonRetryable: true,
165
+ });
166
+ }
167
+ }
168
+ ```
169
+
170
+ > **Temporal Determinism Rule**: Never use `Math.random()`, `Date.now()`, or direct DB calls inside workflow files. Run them inside activities.
171
+
172
+ ---
173
+
174
+ ### Implementation Checklist
175
+ - [ ] Configure `maxRetriesPerRequest: null` on ioredis for BullMQ v5.
176
+ - [ ] Use deterministic `jobId` from business logic (`order_${orderId}`) for deduplication.
177
+ - [ ] Forward permanently dead jobs to DLQ via `worker.on('failed')` listener.
178
+ - [ ] Implement rate limiting via worker `limiter` to protect third-party APIs.
179
+ - [ ] Enforce deterministic code inside Temporal workflows (activities for side-effects).
180
+ - [ ] Store large payloads in S3/R2; pass only IDs through queues.
181
+ - [ ] Implement Saga rollback handlers for multi-step distributed payments.
182
+
183
+ ## Orchestration & Integration
184
+ - Integrates with: `js-backend-expert`, `cron-scheduler-expert`, `error-resilience-expert`, `saas-billing`, `doku-payment-gateway`, `data-telemetry-expert`.
185
+
186
+ ---
187
+
188
+ <a name="bahasa-indonesia"></a>
189
+ ## Bahasa Indonesia
190
+
191
+ ### Tujuan & Gambaran Umum
192
+ Panduan terpadu tingkat produksi untuk pipeline eksekusi latar belakang, antrean job asinkron, dan state machine terdistribusi. Mencakup spektrum penuh dari antrean Redis sederhana hingga saga multi-layanan dengan rollback kompensasi.
193
+
194
+ ### Model Eksekusi 3-Tier
195
+ | Tier | Engine | Cocok Untuk |
196
+ |------|--------|-------------|
197
+ | **Tier 1: Antrean Redis** | BullMQ v5 | Job worker throughput tinggi, prioritas, rate limiting, DLQ |
198
+ | **Tier 2: Task Serverless** | Trigger.dev v3 / Inngest | Task dengan checkpoint, resume otomatis, tanpa infra |
199
+ | **Tier 3: Saga Terdistribusi** | Temporal.io | Orkestrasi multi-layanan, rollback kompensasi, workflow jangka panjang |
200
+
201
+ ### Kemampuan Utama
202
+ 1. **Idempotensi & Deduplikasi**: Kunci `jobId` deterministik mencegah duplikasi penagihan atau email.
203
+ 2. **Dead Letter Queue (DLQ)**: Pemindahan otomatis job gagal total untuk audit.
204
+ 3. **Backoff Eksponensial + Jitter**: Mencegah thundering herd pada server hilir.
205
+ 4. **Prioritas Tenant**: Tier VIP/enterprise mendapat prioritas lebih tinggi (angka lebih kecil di BullMQ).
206
+ 5. **State Machine Tahan-Gagal**: Workflow bertahan saat restart, deployment, dan partisi jaringan.
207
+ 6. **Kompensasi Saga**: Transaksi multi-langkah dengan rollback otomatis urutan mundur.
208
+
209
+ ### Checklist Implementasi
210
+ - [ ] Atur `maxRetriesPerRequest: null` pada ioredis untuk BullMQ v5.
211
+ - [ ] Gunakan `jobId` deterministik dari ID bisnis (`invoice_${invoiceId}`) untuk deduplikasi.
212
+ - [ ] Pasang listener `worker.on('failed')` untuk forward job gagal ke DLQ.
213
+ - [ ] Terapkan rate limiter pada worker untuk stabilitas API eksternal.
214
+ - [ ] Pastikan kode Temporal selalu deterministik (side-effect hanya di activities).
215
+ - [ ] Simpan file besar di S3/R2; kirim hanya referensi ID melalui queue.
216
+
217
+ ## Integrasi Orkestrasi
218
+ - Terintegrasi dengan: `js-backend-expert`, `cron-scheduler-expert`, `error-resilience-expert`, `saas-billing`, `doku-payment-gateway`, `data-telemetry-expert`.