cfsa-antigravity 3.0.2 → 3.1.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/README.md +27 -10
- package/bin/cli.mjs +7 -6
- package/package.json +1 -1
- package/template/.agent/PRDS/codex-runtime-support.md +2 -2
- package/template/.agent/TASKS/codex-runtime-support.md +2 -2
- package/template/.agent/instructions/workflow.md +3 -3
- package/template/.agent/kit-sync.md +3 -3
- package/template/.agent/rules/completion-checklist.md +3 -3
- package/template/.agent/skills/parallel-agents/SKILL.md +1 -1
- package/template/.agent/skills/session-continuity/SKILL.md +6 -6
- package/template/.agent/skills/session-continuity/protocols/01-session-resumption.md +1 -1
- package/template/.agent/skills/session-continuity/protocols/02-progress-generation.md +3 -3
- package/template/.agent/skills/session-continuity/protocols/03-progress-update.md +4 -4
- package/template/.agent/skills/session-continuity/protocols/07-spec-pipeline-generation.md +1 -1
- package/template/.agent/skills/session-continuity/protocols/08-spec-pipeline-update.md +2 -2
- package/template/.agent/skills/session-continuity/protocols/11-parallel-synthesis.md +1 -1
- package/template/.agent/workflows/create-prd-architecture.md +2 -2
- package/template/.agent/workflows/create-prd-design-system.md +2 -2
- package/template/.agent/workflows/create-prd-security.md +2 -2
- package/template/.agent/workflows/create-prd-stack.md +2 -2
- package/template/.agent/workflows/create-prd.md +2 -2
- package/template/.agent/workflows/decompose-architecture-validate.md +1 -1
- package/template/.agent/workflows/decompose-architecture.md +2 -2
- package/template/.agent/workflows/ideate.md +2 -2
- package/template/.agent/workflows/implement-slice-setup.md +1 -1
- package/template/.agent/workflows/implement-slice-tdd.md +3 -3
- package/template/.agent/workflows/implement-slice.md +2 -2
- package/template/.agent/workflows/plan-phase-preflight.md +2 -2
- package/template/.agent/workflows/plan-phase-write.md +2 -2
- package/template/.agent/workflows/plan-phase.md +2 -2
- package/template/.agent/workflows/setup-workspace.md +2 -2
- package/template/.agent/workflows/update-architecture-map.md +1 -1
- package/template/.agent/workflows/validate-phase-quality.md +1 -1
- package/template/.agent/workflows/validate-phase-readiness.md +2 -2
- package/template/.agent/workflows/validate-phase.md +2 -2
- package/template/.agent/workflows/verify-infrastructure.md +1 -1
- package/template/.agent/workflows/write-architecture-spec-deepen.md +3 -3
- package/template/.agent/workflows/write-architecture-spec-design.md +1 -1
- package/template/.agent/workflows/write-architecture-spec.md +3 -3
- package/template/.agent/workflows/write-be-spec-classify.md +1 -1
- package/template/.agent/workflows/write-be-spec-write.md +3 -3
- package/template/.agent/workflows/write-be-spec.md +3 -3
- package/template/.agent/workflows/write-fe-spec-classify.md +1 -1
- package/template/.agent/workflows/write-fe-spec-write.md +2 -2
- package/template/.agent/workflows/write-fe-spec.md +3 -3
- package/template/.claude/README.md +3 -1
- package/template/.claude/instructions/workflow.md +3 -3
- package/template/.claude/kit-sync.md +3 -3
- package/template/.claude/rules/completion-checklist.md +3 -3
- package/template/.claude/skills/parallel-agents/SKILL.md +1 -1
- package/template/.claude/skills/plan-phase/SKILL.md +2 -2
- package/template/.claude/skills/plan-phase-preflight/SKILL.md +2 -2
- package/template/.claude/skills/session-continuity/SKILL.md +6 -6
- package/template/.claude/skills/session-continuity/protocols/01-session-resumption.md +1 -1
- package/template/.claude/skills/session-continuity/protocols/02-progress-generation.md +3 -3
- package/template/.claude/skills/session-continuity/protocols/03-progress-update.md +4 -4
- package/template/.claude/skills/session-continuity/protocols/07-spec-pipeline-generation.md +1 -1
- package/template/.claude/skills/session-continuity/protocols/08-spec-pipeline-update.md +2 -2
- package/template/.claude/skills/session-continuity/protocols/11-parallel-synthesis.md +1 -1
- package/template/.claude/skills/setup/setup-cfsa.md +1 -1
- package/template/.claude/skills/write-architecture-spec/SKILL.md +2 -2
- package/template/.claude/skills/write-architecture-spec-deepen/SKILL.md +1 -1
- package/template/.claude/skills/write-architecture-spec-design/SKILL.md +1 -1
- package/template/.claude/skills/write-be-spec/SKILL.md +3 -3
- package/template/.claude/skills/write-be-spec-classify/SKILL.md +1 -1
- package/template/.claude/skills/write-be-spec-write/SKILL.md +1 -1
- package/template/.claude/skills/write-fe-spec/SKILL.md +3 -3
- package/template/.claude/skills/write-fe-spec-write/SKILL.md +1 -1
- package/template/.codex/README.md +99 -0
- package/template/.codex/instructions/commands.md +24 -0
- package/template/.codex/instructions/example.md +21 -0
- package/template/.codex/instructions/patterns.md +61 -0
- package/template/.codex/instructions/structure.md +29 -0
- package/template/.codex/instructions/tech-stack.md +93 -0
- package/template/.codex/instructions/workflow.md +64 -0
- package/template/.codex/kit-sync.md +6 -0
- package/template/.codex/rules/boundary-not-placeholder.md +146 -0
- package/template/.codex/rules/completion-checklist.md +60 -0
- package/template/.codex/rules/debug-by-test.md +49 -0
- package/template/.codex/rules/decision-classification.md +113 -0
- package/template/.codex/rules/extensibility.md +52 -0
- package/template/.codex/rules/memory-capture.md +84 -0
- package/template/.codex/rules/question-vs-command.md +91 -0
- package/template/.codex/rules/security-first.md +54 -0
- package/template/.codex/rules/single-question.md +59 -0
- package/template/.codex/rules/skill-mcp-first.md +45 -0
- package/template/.codex/rules/source-before-ask.md +93 -0
- package/template/.codex/rules/specificity-standards.md +64 -0
- package/template/.codex/rules/tdd-contract-first.md +67 -0
- package/template/.codex/rules/vertical-slices.md +83 -0
- package/template/.codex/skill-library/MANIFEST.md +498 -0
- package/template/.codex/skill-library/README.md +38 -0
- package/template/.codex/skill-library/meta/claude-code/README.md +9 -0
- package/template/.codex/skill-library/meta/claude-code/agent-development/SKILL.md +415 -0
- package/template/.codex/skill-library/meta/claude-code/hook-development/SKILL.md +712 -0
- package/template/.codex/skill-library/meta/claude-code/plugin-structure/SKILL.md +476 -0
- package/template/.codex/skill-library/meta/mcp-builder/SKILL.md +236 -0
- package/template/.codex/skill-library/meta/product-marketing-context/SKILL.md +241 -0
- package/template/.codex/skill-library/meta/tmux-processes/SKILL.md +210 -0
- package/template/.codex/skill-library/meta/using-tmux-for-interactive-commands/SKILL.md +178 -0
- package/template/.codex/skill-library/stack/3d/threejs-pro/SKILL.md +300 -0
- package/template/.codex/skill-library/stack/ai/ai-sdk/SKILL.md +77 -0
- package/template/.codex/skill-library/stack/ai/langchain/SKILL.md +530 -0
- package/template/.codex/skill-library/stack/ai/ollama/SKILL.md +321 -0
- package/template/.codex/skill-library/stack/ai/openai-sdk/SKILL.md +549 -0
- package/template/.codex/skill-library/stack/analytics/google-analytics/SKILL.md +153 -0
- package/template/.codex/skill-library/stack/api/graphql/SKILL.md +1061 -0
- package/template/.codex/skill-library/stack/api/trpc/SKILL.md +576 -0
- package/template/.codex/skill-library/stack/auth/authjs/SKILL.md +569 -0
- package/template/.codex/skill-library/stack/auth/clerk/SKILL.md +590 -0
- package/template/.codex/skill-library/stack/auth/firebase-auth/SKILL.md +734 -0
- package/template/.codex/skill-library/stack/auth/lucia/SKILL.md +230 -0
- package/template/.codex/skill-library/stack/auth/supabase-auth/SKILL.md +293 -0
- package/template/.codex/skill-library/stack/cms/payload-cms/SKILL.md +573 -0
- package/template/.codex/skill-library/stack/cms/shopify/SKILL.md +1193 -0
- package/template/.codex/skill-library/stack/cms/wordpress/SKILL.md +1104 -0
- package/template/.codex/skill-library/stack/css/sass-scss/SKILL.md +1121 -0
- package/template/.codex/skill-library/stack/css/tailwind-css-patterns/SKILL.md +863 -0
- package/template/.codex/skill-library/stack/css/tailwind-design-system/SKILL.md +490 -0
- package/template/.codex/skill-library/stack/css/vanilla-css/SKILL.md +1078 -0
- package/template/.codex/skill-library/stack/databases/clickhouse/SKILL.md +311 -0
- package/template/.codex/skill-library/stack/databases/influxdb/SKILL.md +280 -0
- package/template/.codex/skill-library/stack/databases/lancedb/SKILL.md +415 -0
- package/template/.codex/skill-library/stack/databases/mongodb/SKILL.md +1169 -0
- package/template/.codex/skill-library/stack/databases/neo4j/SKILL.md +839 -0
- package/template/.codex/skill-library/stack/databases/pgvector/SKILL.md +241 -0
- package/template/.codex/skill-library/stack/databases/pinecone/SKILL.md +212 -0
- package/template/.codex/skill-library/stack/databases/postgresql/SKILL.md +658 -0
- package/template/.codex/skill-library/stack/databases/qdrant/SKILL.md +312 -0
- package/template/.codex/skill-library/stack/databases/redis/SKILL.md +1079 -0
- package/template/.codex/skill-library/stack/databases/spacetimedb/SKILL.md +532 -0
- package/template/.codex/skill-library/stack/databases/sqlite/SKILL.md +1132 -0
- package/template/.codex/skill-library/stack/databases/supabase/SKILL.md +640 -0
- package/template/.codex/skill-library/stack/databases/surrealdb-expert/SKILL.md +945 -0
- package/template/.codex/skill-library/stack/databases/timescaledb/SKILL.md +745 -0
- package/template/.codex/skill-library/stack/databases/weaviate/SKILL.md +218 -0
- package/template/.codex/skill-library/stack/devops/git-advanced/SKILL.md +972 -0
- package/template/.codex/skill-library/stack/devops/git-workflow/SKILL.md +420 -0
- package/template/.codex/skill-library/stack/devops/github-actions/SKILL.md +554 -0
- package/template/.codex/skill-library/stack/devops/kubernetes/SKILL.md +950 -0
- package/template/.codex/skill-library/stack/devops/nginx/SKILL.md +841 -0
- package/template/.codex/skill-library/stack/devops/terraform/SKILL.md +860 -0
- package/template/.codex/skill-library/stack/email/resend/SKILL.md +391 -0
- package/template/.codex/skill-library/stack/extensions/chrome-extension/SKILL.md +375 -0
- package/template/.codex/skill-library/stack/extensions/plasmo/SKILL.md +195 -0
- package/template/.codex/skill-library/stack/extensions/vscode-extension/SKILL.md +453 -0
- package/template/.codex/skill-library/stack/extensions/wxt/SKILL.md +216 -0
- package/template/.codex/skill-library/stack/feature-flags/flagsmith/SKILL.md +187 -0
- package/template/.codex/skill-library/stack/feature-flags/launchdarkly/SKILL.md +183 -0
- package/template/.codex/skill-library/stack/feature-flags/posthog-flags/SKILL.md +189 -0
- package/template/.codex/skill-library/stack/frameworks/astro-framework/SKILL.md +162 -0
- package/template/.codex/skill-library/stack/frameworks/electron/SKILL.md +1286 -0
- package/template/.codex/skill-library/stack/frameworks/fastapi/SKILL.md +650 -0
- package/template/.codex/skill-library/stack/frameworks/hono/SKILL.md +90 -0
- package/template/.codex/skill-library/stack/frameworks/nestjs/SKILL.md +878 -0
- package/template/.codex/skill-library/stack/frameworks/nextjs/SKILL.md +635 -0
- package/template/.codex/skill-library/stack/frameworks/nuxt/SKILL.md +564 -0
- package/template/.codex/skill-library/stack/frameworks/svelte5/SKILL.md +81 -0
- package/template/.codex/skill-library/stack/frameworks/svelte5/references/events.md +353 -0
- package/template/.codex/skill-library/stack/frameworks/svelte5/references/migration.md +339 -0
- package/template/.codex/skill-library/stack/frameworks/svelte5/references/performance.md +443 -0
- package/template/.codex/skill-library/stack/frameworks/svelte5/references/runes.md +394 -0
- package/template/.codex/skill-library/stack/frameworks/svelte5/references/snippets.md +291 -0
- package/template/.codex/skill-library/stack/frameworks/svelte5/references/sveltekit.md +401 -0
- package/template/.codex/skill-library/stack/frameworks/svelte5/references/typescript.md +305 -0
- package/template/.codex/skill-library/stack/frameworks/sveltekit/SKILL.md +614 -0
- package/template/.codex/skill-library/stack/frameworks/tauri/SKILL.md +920 -0
- package/template/.codex/skill-library/stack/gamedev/godot/SKILL.md +1032 -0
- package/template/.codex/skill-library/stack/gamedev/unity/SKILL.md +1175 -0
- package/template/.codex/skill-library/stack/hosting/aws/SKILL.md +467 -0
- package/template/.codex/skill-library/stack/hosting/cloudflare/SKILL.md +201 -0
- package/template/.codex/skill-library/stack/hosting/docker-expert/SKILL.md +409 -0
- package/template/.codex/skill-library/stack/hosting/vercel/SKILL.md +484 -0
- package/template/.codex/skill-library/stack/languages/bash-scripting/SKILL.md +773 -0
- package/template/.codex/skill-library/stack/languages/c-cpp/SKILL.md +712 -0
- package/template/.codex/skill-library/stack/languages/gdscript/SKILL.md +789 -0
- package/template/.codex/skill-library/stack/languages/go/SKILL.md +664 -0
- package/template/.codex/skill-library/stack/languages/java/SKILL.md +778 -0
- package/template/.codex/skill-library/stack/languages/kotlin/SKILL.md +665 -0
- package/template/.codex/skill-library/stack/languages/python/SKILL.md +678 -0
- package/template/.codex/skill-library/stack/languages/rust/SKILL.md +673 -0
- package/template/.codex/skill-library/stack/languages/typescript-advanced-patterns/SKILL.md +141 -0
- package/template/.codex/skill-library/stack/languages/typescript-advanced-patterns/references/advanced-generics.md +90 -0
- package/template/.codex/skill-library/stack/languages/typescript-advanced-patterns/references/branded-types.md +57 -0
- package/template/.codex/skill-library/stack/languages/typescript-advanced-patterns/references/builder-pattern.md +71 -0
- package/template/.codex/skill-library/stack/languages/typescript-advanced-patterns/references/common-pitfalls.md +135 -0
- package/template/.codex/skill-library/stack/languages/typescript-advanced-patterns/references/conditional-types.md +27 -0
- package/template/.codex/skill-library/stack/languages/typescript-advanced-patterns/references/decorators.md +98 -0
- package/template/.codex/skill-library/stack/languages/typescript-advanced-patterns/references/discriminated-unions.md +62 -0
- package/template/.codex/skill-library/stack/languages/typescript-advanced-patterns/references/mapped-types.md +53 -0
- package/template/.codex/skill-library/stack/languages/typescript-advanced-patterns/references/performance-best-practices.md +104 -0
- package/template/.codex/skill-library/stack/languages/typescript-advanced-patterns/references/template-literal-types.md +49 -0
- package/template/.codex/skill-library/stack/languages/typescript-advanced-patterns/references/testing-types.md +112 -0
- package/template/.codex/skill-library/stack/languages/typescript-advanced-patterns/references/type-guards.md +70 -0
- package/template/.codex/skill-library/stack/languages/typescript-advanced-patterns/references/type-inference.md +101 -0
- package/template/.codex/skill-library/stack/languages/typescript-advanced-patterns/references/utility-types.md +98 -0
- package/template/.codex/skill-library/stack/languages/vanilla-javascript/SKILL.md +803 -0
- package/template/.codex/skill-library/stack/messaging/kafka/SKILL.md +235 -0
- package/template/.codex/skill-library/stack/messaging/nats/SKILL.md +147 -0
- package/template/.codex/skill-library/stack/messaging/rabbitmq/SKILL.md +178 -0
- package/template/.codex/skill-library/stack/messaging/sqs/SKILL.md +187 -0
- package/template/.codex/skill-library/stack/mobile/expo-react-native/SKILL.md +665 -0
- package/template/.codex/skill-library/stack/mobile/flutter/SKILL.md +316 -0
- package/template/.codex/skill-library/stack/mobile/kotlin-compose/SKILL.md +215 -0
- package/template/.codex/skill-library/stack/mobile/react-native/SKILL.md +337 -0
- package/template/.codex/skill-library/stack/mobile/swiftui/SKILL.md +261 -0
- package/template/.codex/skill-library/stack/monitoring/posthog/SKILL.md +396 -0
- package/template/.codex/skill-library/stack/monitoring/sentry/SKILL.md +509 -0
- package/template/.codex/skill-library/stack/notifications/fcm/SKILL.md +229 -0
- package/template/.codex/skill-library/stack/notifications/sendgrid/SKILL.md +220 -0
- package/template/.codex/skill-library/stack/notifications/twilio/SKILL.md +204 -0
- package/template/.codex/skill-library/stack/observability/datadog/SKILL.md +179 -0
- package/template/.codex/skill-library/stack/observability/distributed-tracing/SKILL.md +140 -0
- package/template/.codex/skill-library/stack/observability/opentelemetry/SKILL.md +164 -0
- package/template/.codex/skill-library/stack/observability/prometheus-grafana/SKILL.md +246 -0
- package/template/.codex/skill-library/stack/observability/python-observability/SKILL.md +158 -0
- package/template/.codex/skill-library/stack/orm/drizzle-orm/SKILL.md +613 -0
- package/template/.codex/skill-library/stack/orm/prisma/SKILL.md +744 -0
- package/template/.codex/skill-library/stack/payments/lemonsqueezy/SKILL.md +393 -0
- package/template/.codex/skill-library/stack/payments/stripe-integration/SKILL.md +457 -0
- package/template/.codex/skill-library/stack/queue/bullmq/SKILL.md +385 -0
- package/template/.codex/skill-library/stack/queue/inngest/SKILL.md +438 -0
- package/template/.codex/skill-library/stack/realtime/socketio/SKILL.md +595 -0
- package/template/.codex/skill-library/stack/search/algolia/SKILL.md +206 -0
- package/template/.codex/skill-library/stack/search/elasticsearch/SKILL.md +248 -0
- package/template/.codex/skill-library/stack/search/meilisearch/SKILL.md +385 -0
- package/template/.codex/skill-library/stack/search/typesense/SKILL.md +189 -0
- package/template/.codex/skill-library/stack/security/crypto-patterns/SKILL.md +437 -0
- package/template/.codex/skill-library/stack/security/csp-cors-headers/SKILL.md +588 -0
- package/template/.codex/skill-library/stack/security/dependency-auditing/SKILL.md +560 -0
- package/template/.codex/skill-library/stack/security/input-sanitization/SKILL.md +430 -0
- package/template/.codex/skill-library/stack/security/owasp-web-security/SKILL.md +421 -0
- package/template/.codex/skill-library/stack/state/tanstack-query/SKILL.md +637 -0
- package/template/.codex/skill-library/stack/state/zustand/SKILL.md +483 -0
- package/template/.codex/skill-library/stack/storage/aws-s3/SKILL.md +415 -0
- package/template/.codex/skill-library/stack/storage/cloudflare-r2/SKILL.md +252 -0
- package/template/.codex/skill-library/stack/storage/gcs/SKILL.md +229 -0
- package/template/.codex/skill-library/stack/testing/playwright/SKILL.md +641 -0
- package/template/.codex/skill-library/stack/testing/storybook/SKILL.md +923 -0
- package/template/.codex/skill-library/stack/testing/testing-library/SKILL.md +872 -0
- package/template/.codex/skill-library/stack/testing/vitest/SKILL.md +714 -0
- package/template/.codex/skill-library/stack/ui/react-best-practices/SKILL.md +877 -0
- package/template/.codex/skill-library/stack/ui/react-composition-patterns/SKILL.md +1107 -0
- package/template/.codex/skill-library/stack/ui/react-flow/SKILL.md +425 -0
- package/template/.codex/skill-library/stack/ui/shadcn-ui/SKILL.md +703 -0
- package/template/.codex/skill-library/stack/ui/svelte-flow/SKILL.md +390 -0
- package/template/.codex/skill-library/surface/api/api-caching/SKILL.md +458 -0
- package/template/.codex/skill-library/surface/api/api-documentation-openapi/SKILL.md +697 -0
- package/template/.codex/skill-library/surface/api/api-error-handling/SKILL.md +478 -0
- package/template/.codex/skill-library/surface/api/api-security-checklist/SKILL.md +147 -0
- package/template/.codex/skill-library/surface/api/email-best-practices/SKILL.md +59 -0
- package/template/.codex/skill-library/surface/api/rate-limiting-abuse-protection/SKILL.md +147 -0
- package/template/.codex/skill-library/surface/api/webhook-design/SKILL.md +752 -0
- package/template/.codex/skill-library/surface/cli/cli-configuration-management/SKILL.md +445 -0
- package/template/.codex/skill-library/surface/cli/cli-error-diagnostics/SKILL.md +515 -0
- package/template/.codex/skill-library/surface/cli/cli-shell-integration/SKILL.md +479 -0
- package/template/.codex/skill-library/surface/cli/cli-ux-design/SKILL.md +477 -0
- package/template/.codex/skill-library/surface/desktop/desktop-app-distribution/SKILL.md +416 -0
- package/template/.codex/skill-library/surface/desktop/desktop-security-sandboxing/SKILL.md +407 -0
- package/template/.codex/skill-library/surface/desktop/desktop-ux-conventions/SKILL.md +361 -0
- package/template/.codex/skill-library/surface/desktop/native-os-integration/SKILL.md +563 -0
- package/template/.codex/skill-library/surface/extension/browser-extension-patterns/SKILL.md +482 -0
- package/template/.codex/skill-library/surface/extension/plugin-architecture-design/SKILL.md +632 -0
- package/template/.codex/skill-library/surface/extension/vscode-extension-development/SKILL.md +728 -0
- package/template/.codex/skill-library/surface/mobile/app-store-submission/SKILL.md +304 -0
- package/template/.codex/skill-library/surface/mobile/mobile-offline-sync/SKILL.md +443 -0
- package/template/.codex/skill-library/surface/mobile/mobile-responsive-patterns/SKILL.md +432 -0
- package/template/.codex/skill-library/surface/mobile/push-notifications/SKILL.md +495 -0
- package/template/.codex/skill-library/surface/web/accessibility-compliance/SKILL.md +827 -0
- package/template/.codex/skill-library/surface/web/ai-seo/SKILL.md +398 -0
- package/template/.codex/skill-library/surface/web/ai-seo/references/content-patterns.md +285 -0
- package/template/.codex/skill-library/surface/web/ai-seo/references/platform-ranking-factors.md +152 -0
- package/template/.codex/skill-library/surface/web/analytics-tracking/SKILL.md +309 -0
- package/template/.codex/skill-library/surface/web/analytics-tracking/references/event-library.md +260 -0
- package/template/.codex/skill-library/surface/web/analytics-tracking/references/ga4-implementation.md +300 -0
- package/template/.codex/skill-library/surface/web/analytics-tracking/references/gtm-implementation.md +390 -0
- package/template/.codex/skill-library/surface/web/authentication-ui-flows/SKILL.md +530 -0
- package/template/.codex/skill-library/surface/web/dark-mode-theming/SKILL.md +516 -0
- package/template/.codex/skill-library/surface/web/design-reference-data/SKILL.md +105 -0
- package/template/.codex/skill-library/surface/web/design-reference-data/data/charts.csv +26 -0
- package/template/.codex/skill-library/surface/web/design-reference-data/data/colors.csv +97 -0
- package/template/.codex/skill-library/surface/web/design-reference-data/data/landing.csv +31 -0
- package/template/.codex/skill-library/surface/web/design-reference-data/data/styles.csv +59 -0
- package/template/.codex/skill-library/surface/web/design-reference-data/data/typography.csv +58 -0
- package/template/.codex/skill-library/surface/web/design-reference-data/data/ux-guidelines.csv +100 -0
- package/template/.codex/skill-library/surface/web/design-reference-data/scripts/core.py +258 -0
- package/template/.codex/skill-library/surface/web/design-reference-data/scripts/design_system.py +1067 -0
- package/template/.codex/skill-library/surface/web/design-reference-data/scripts/search.py +106 -0
- package/template/.codex/skill-library/surface/web/form-handling-validation/SKILL.md +675 -0
- package/template/.codex/skill-library/surface/web/frontend-design/SKILL.md +1393 -0
- package/template/.codex/skill-library/surface/web/frontend-design/templates/cppn-hero.tsx +299 -0
- package/template/.codex/skill-library/surface/web/frontend-design/templates/wave-hero.tsx +875 -0
- package/template/.codex/skill-library/surface/web/frontend-verification/SKILL.md +111 -0
- package/template/.codex/skill-library/surface/web/frontend-verification/scripts/ux_audit.py +739 -0
- package/template/.codex/skill-library/surface/web/i18n-localization/SKILL.md +332 -0
- package/template/.codex/skill-library/surface/web/i18n-localization/references/icu-message-format.md +223 -0
- package/template/.codex/skill-library/surface/web/i18n-localization/references/intl-api-patterns.md +326 -0
- package/template/.codex/skill-library/surface/web/i18n-localization/references/rtl-support.md +298 -0
- package/template/.codex/skill-library/surface/web/offline-first-pwa/SKILL.md +657 -0
- package/template/.codex/skill-library/surface/web/page-cro/SKILL.md +182 -0
- package/template/.codex/skill-library/surface/web/page-cro/references/experiments.md +248 -0
- package/template/.codex/skill-library/surface/web/programmatic-seo/SKILL.md +238 -0
- package/template/.codex/skill-library/surface/web/programmatic-seo/references/playbooks.md +308 -0
- package/template/.codex/skill-library/surface/web/schema-markup/SKILL.md +179 -0
- package/template/.codex/skill-library/surface/web/schema-markup/references/schema-examples.md +398 -0
- package/template/.codex/skill-library/surface/web/seo-audit/SKILL.md +394 -0
- package/template/.codex/skill-library/surface/web/seo-audit/references/ai-writing-detection.md +200 -0
- package/template/.codex/skill-library/surface/web/web-performance-optimization/SKILL.md +646 -0
- package/template/.codex/skill-library/surface/web/web-scraping/SKILL.md +58 -0
- package/template/.codex/skills/README.md +78 -0
- package/template/.codex/skills/accessibility/SKILL.md +522 -0
- package/template/.codex/skills/accessibility/references/WCAG.md +162 -0
- package/template/.codex/skills/accessibility/references/ia-spec-checklist.md +35 -0
- package/template/.codex/skills/adversarial-review/SKILL.md +90 -0
- package/template/.codex/skills/antigravity-workflows/SKILL.md +81 -0
- package/template/.codex/skills/antigravity-workflows/resources/implementation-playbook.md +36 -0
- package/template/.codex/skills/api-design-principles/SKILL.md +169 -0
- package/template/.codex/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/template/.codex/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/template/.codex/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/template/.codex/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/template/.codex/skills/api-design-principles/resources/implementation-playbook.md +513 -0
- package/template/.codex/skills/api-versioning/SKILL.md +166 -0
- package/template/.codex/skills/api-versioning/references/typescript.md +157 -0
- package/template/.codex/skills/architecture-mapping/SKILL.md +219 -0
- package/template/.codex/skills/audit-ambiguity/SKILL.md +54 -0
- package/template/.codex/skills/audit-ambiguity-execute/SKILL.md +86 -0
- package/template/.codex/skills/audit-ambiguity-rubrics/SKILL.md +58 -0
- package/template/.codex/skills/bootstrap-agents/SKILL.md +258 -0
- package/template/.codex/skills/bootstrap-agents-fill/SKILL.md +25 -0
- package/template/.codex/skills/bootstrap-agents-provision/SKILL.md +22 -0
- package/template/.codex/skills/brainstorming/SKILL.md +177 -0
- package/template/.codex/skills/brand-guidelines/SKILL.md +44 -0
- package/template/.codex/skills/clean-code/SKILL.md +196 -0
- package/template/.codex/skills/clean-code/references/typescript.md +126 -0
- package/template/.codex/skills/code-review-pro/SKILL.md +152 -0
- package/template/.codex/skills/concise-planning/SKILL.md +107 -0
- package/template/.codex/skills/create-prd/SKILL.md +94 -0
- package/template/.codex/skills/create-prd-architecture/SKILL.md +72 -0
- package/template/.codex/skills/create-prd-compile/SKILL.md +85 -0
- package/template/.codex/skills/create-prd-design-system/SKILL.md +69 -0
- package/template/.codex/skills/create-prd-security/SKILL.md +66 -0
- package/template/.codex/skills/create-prd-stack/SKILL.md +84 -0
- package/template/.codex/skills/cross-layer-consistency/SKILL.md +117 -0
- package/template/.codex/skills/database-schema-design/SKILL.md +205 -0
- package/template/.codex/skills/database-schema-design/references/relational.md +228 -0
- package/template/.codex/skills/decompose-architecture/SKILL.md +72 -0
- package/template/.codex/skills/decompose-architecture-structure/SKILL.md +62 -0
- package/template/.codex/skills/decompose-architecture-validate/SKILL.md +72 -0
- package/template/.codex/skills/deployment-procedures/SKILL.md +241 -0
- package/template/.codex/skills/design-anti-cliche/SKILL.md +159 -0
- package/template/.codex/skills/design-direction/SKILL.md +45 -0
- package/template/.codex/skills/error-handling-patterns/SKILL.md +226 -0
- package/template/.codex/skills/error-handling-patterns/references/go.md +162 -0
- package/template/.codex/skills/error-handling-patterns/references/python.md +262 -0
- package/template/.codex/skills/error-handling-patterns/references/rust.md +112 -0
- package/template/.codex/skills/error-handling-patterns/references/typescript.md +178 -0
- package/template/.codex/skills/evolve-contract/SKILL.md +24 -0
- package/template/.codex/skills/evolve-feature/SKILL.md +18 -0
- package/template/.codex/skills/evolve-feature-cascade/SKILL.md +24 -0
- package/template/.codex/skills/evolve-feature-classify/SKILL.md +21 -0
- package/template/.codex/skills/find-skills/SKILL.md +145 -0
- package/template/.codex/skills/git-advanced/SKILL.md +972 -0
- package/template/.codex/skills/git-workflow/SKILL.md +420 -0
- package/template/.codex/skills/idea-extraction/SKILL.md +644 -0
- package/template/.codex/skills/ideate/SKILL.md +77 -0
- package/template/.codex/skills/ideate-discover/SKILL.md +89 -0
- package/template/.codex/skills/ideate-extract/SKILL.md +77 -0
- package/template/.codex/skills/ideate-validate/SKILL.md +75 -0
- package/template/.codex/skills/implement-slice/SKILL.md +64 -0
- package/template/.codex/skills/implement-slice-setup/SKILL.md +70 -0
- package/template/.codex/skills/implement-slice-tdd/SKILL.md +78 -0
- package/template/.codex/skills/logging-best-practices/SKILL.md +192 -0
- package/template/.codex/skills/logging-best-practices/references/go.md +49 -0
- package/template/.codex/skills/logging-best-practices/references/python.md +52 -0
- package/template/.codex/skills/logging-best-practices/references/typescript.md +215 -0
- package/template/.codex/skills/migration-management/SKILL.md +200 -0
- package/template/.codex/skills/migration-management/references/relational.md +214 -0
- package/template/.codex/skills/minimalist-surgical-development/SKILL.md +135 -0
- package/template/.codex/skills/parallel-agents/SKILL.md +165 -0
- package/template/.codex/skills/parallel-debugging/SKILL.md +135 -0
- package/template/.codex/skills/parallel-feature-development/SKILL.md +157 -0
- package/template/.codex/skills/performance-budgeting/SKILL.md +144 -0
- package/template/.codex/skills/pipeline-rubrics/SKILL.md +51 -0
- package/template/.codex/skills/pipeline-rubrics/references/architecture-rubric.md +19 -0
- package/template/.codex/skills/pipeline-rubrics/references/be-rubric.md +21 -0
- package/template/.codex/skills/pipeline-rubrics/references/fe-rubric.md +20 -0
- package/template/.codex/skills/pipeline-rubrics/references/ia-rubric.md +19 -0
- package/template/.codex/skills/pipeline-rubrics/references/scoring.md +32 -0
- package/template/.codex/skills/pipeline-rubrics/references/vision-rubric.md +12 -0
- package/template/.codex/skills/plan-phase/SKILL.md +62 -0
- package/template/.codex/skills/plan-phase-preflight/SKILL.md +75 -0
- package/template/.codex/skills/plan-phase-write/SKILL.md +85 -0
- package/template/.codex/skills/prd-templates/SKILL.md +107 -0
- package/template/.codex/skills/prd-templates/references/architecture-completeness-checklist.md +28 -0
- package/template/.codex/skills/prd-templates/references/architecture-design-template.md +88 -0
- package/template/.codex/skills/prd-templates/references/be-spec-classification.md +41 -0
- package/template/.codex/skills/prd-templates/references/be-spec-template.md +107 -0
- package/template/.codex/skills/prd-templates/references/bootstrap-verification-protocol.md +50 -0
- package/template/.codex/skills/prd-templates/references/constraint-exploration.md +41 -0
- package/template/.codex/skills/prd-templates/references/data-placement-template.md +74 -0
- package/template/.codex/skills/prd-templates/references/decision-confirmation-protocol.md +68 -0
- package/template/.codex/skills/prd-templates/references/decision-propagation.md +121 -0
- package/template/.codex/skills/prd-templates/references/decomposition-templates.md +226 -0
- package/template/.codex/skills/prd-templates/references/deep-ideation-loading-protocol.md +114 -0
- package/template/.codex/skills/prd-templates/references/design-system-decisions.md +198 -0
- package/template/.codex/skills/prd-templates/references/design-system-prerequisite-check.md +18 -0
- package/template/.codex/skills/prd-templates/references/domain-exhaustion-criteria.md +37 -0
- package/template/.codex/skills/prd-templates/references/engagement-tier-protocol.md +58 -0
- package/template/.codex/skills/prd-templates/references/engineering-standards-template.md +126 -0
- package/template/.codex/skills/prd-templates/references/evolution-layer-guidance.md +91 -0
- package/template/.codex/skills/prd-templates/references/expansion-modes.md +27 -0
- package/template/.codex/skills/prd-templates/references/fe-classification-procedures.md +47 -0
- package/template/.codex/skills/prd-templates/references/fe-spec-template.md +90 -0
- package/template/.codex/skills/prd-templates/references/feature-ledger-protocol.md +149 -0
- package/template/.codex/skills/prd-templates/references/folder-seeding-protocol.md +77 -0
- package/template/.codex/skills/prd-templates/references/fractal-cx-template.md +58 -0
- package/template/.codex/skills/prd-templates/references/fractal-feature-template.md +93 -0
- package/template/.codex/skills/prd-templates/references/fractal-node-index-template.md +55 -0
- package/template/.codex/skills/prd-templates/references/gate-applicability.md +92 -0
- package/template/.codex/skills/prd-templates/references/ideation-crosscut-template.md +36 -0
- package/template/.codex/skills/prd-templates/references/ideation-index-template.md +111 -0
- package/template/.codex/skills/prd-templates/references/ideation-meta-template.md +126 -0
- package/template/.codex/skills/prd-templates/references/infrastructure-report-template.md +71 -0
- package/template/.codex/skills/prd-templates/references/input-classification.md +23 -0
- package/template/.codex/skills/prd-templates/references/map-guard-protocol.md +65 -0
- package/template/.codex/skills/prd-templates/references/operational-templates.md +116 -0
- package/template/.codex/skills/prd-templates/references/persona-completeness-gate.md +20 -0
- package/template/.codex/skills/prd-templates/references/placeholder-guard-template.md +21 -0
- package/template/.codex/skills/prd-templates/references/placeholder-workflow-mapping.md +50 -0
- package/template/.codex/skills/prd-templates/references/shard-boundary-analysis.md +103 -0
- package/template/.codex/skills/prd-templates/references/shard-split-remediation.md +157 -0
- package/template/.codex/skills/prd-templates/references/skill-loading-protocol.md +36 -0
- package/template/.codex/skills/prd-templates/references/slice-completion-gates.md +29 -0
- package/template/.codex/skills/prd-templates/references/spec-coverage-sweep.md +44 -0
- package/template/.codex/skills/prd-templates/references/surface-model.md +61 -0
- package/template/.codex/skills/prd-templates/references/tdd-testing-policy.md +39 -0
- package/template/.codex/skills/prd-templates/references/vision-template.md +57 -0
- package/template/.codex/skills/prd-templates/references/workflow-checkpoint-protocol.md +112 -0
- package/template/.codex/skills/prd-templates/references/write-verification-protocol.md +57 -0
- package/template/.codex/skills/prompt-engineer/SKILL.md +203 -0
- package/template/.codex/skills/propagate-decision/SKILL.md +18 -0
- package/template/.codex/skills/propagate-decision-apply/SKILL.md +22 -0
- package/template/.codex/skills/propagate-decision-scan/SKILL.md +20 -0
- package/template/.codex/skills/regex-patterns/SKILL.md +333 -0
- package/template/.codex/skills/regex-patterns/references/go.md +44 -0
- package/template/.codex/skills/regex-patterns/references/javascript.md +63 -0
- package/template/.codex/skills/regex-patterns/references/python.md +77 -0
- package/template/.codex/skills/regex-patterns/references/rust.md +43 -0
- package/template/.codex/skills/remediate-pipeline/SKILL.md +18 -0
- package/template/.codex/skills/remediate-pipeline-assess/SKILL.md +21 -0
- package/template/.codex/skills/remediate-pipeline-execute/SKILL.md +23 -0
- package/template/.codex/skills/remediate-shard-split/SKILL.md +21 -0
- package/template/.codex/skills/resolve-ambiguity/SKILL.md +278 -0
- package/template/.codex/skills/security-scanning-security-hardening/SKILL.md +231 -0
- package/template/.codex/skills/session-continuity/SKILL.md +732 -0
- package/template/.codex/skills/session-continuity/protocols/01-session-resumption.md +38 -0
- package/template/.codex/skills/session-continuity/protocols/02-progress-generation.md +85 -0
- package/template/.codex/skills/session-continuity/protocols/03-progress-update.md +70 -0
- package/template/.codex/skills/session-continuity/protocols/04-pattern-extraction.md +60 -0
- package/template/.codex/skills/session-continuity/protocols/05-session-close.md +37 -0
- package/template/.codex/skills/session-continuity/protocols/06-decision-analysis.md +84 -0
- package/template/.codex/skills/session-continuity/protocols/07-spec-pipeline-generation.md +48 -0
- package/template/.codex/skills/session-continuity/protocols/08-spec-pipeline-update.md +65 -0
- package/template/.codex/skills/session-continuity/protocols/09-parallel-claim.md +122 -0
- package/template/.codex/skills/session-continuity/protocols/10-placeholder-verification-gate.md +83 -0
- package/template/.codex/skills/session-continuity/protocols/11-parallel-synthesis.md +21 -0
- package/template/.codex/skills/session-continuity/protocols/ambiguity-gates.md +48 -0
- package/template/.codex/skills/setup/README.md +24 -0
- package/template/.codex/skills/setup/setup-cfsa.md +200 -0
- package/template/.codex/skills/setup/setup-fill-placeholders.md +192 -0
- package/template/.codex/skills/setup/setup-provision-skills.md +82 -0
- package/template/.codex/skills/setup/setup-verify.md +89 -0
- package/template/.codex/skills/setup-workspace/SKILL.md +83 -0
- package/template/.codex/skills/setup-workspace-cicd/SKILL.md +56 -0
- package/template/.codex/skills/setup-workspace-data/SKILL.md +69 -0
- package/template/.codex/skills/setup-workspace-hosting/SKILL.md +59 -0
- package/template/.codex/skills/setup-workspace-scaffold/SKILL.md +72 -0
- package/template/.codex/skills/skill-creator/SKILL.md +203 -0
- package/template/.codex/skills/spec-writing/SKILL.md +110 -0
- package/template/.codex/skills/sync-kit/SKILL.md +23 -0
- package/template/.codex/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/template/.codex/skills/systematic-debugging/SKILL.md +297 -0
- package/template/.codex/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/template/.codex/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/template/.codex/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/template/.codex/skills/systematic-debugging/find-polluter.sh +63 -0
- package/template/.codex/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/template/.codex/skills/systematic-debugging/test-academic.md +14 -0
- package/template/.codex/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/template/.codex/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/template/.codex/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/template/.codex/skills/tdd-workflow/SKILL.md +186 -0
- package/template/.codex/skills/tdd-workflow/references/typescript.md +231 -0
- package/template/.codex/skills/tech-stack-catalog/SKILL.md +49 -0
- package/template/.codex/skills/tech-stack-catalog/references/constraint-questions.md +237 -0
- package/template/.codex/skills/tech-stack-catalog/references/dev-tooling-decisions.md +37 -0
- package/template/.codex/skills/tech-stack-catalog/references/surface-decision-tables.md +69 -0
- package/template/.codex/skills/technical-writer/SKILL.md +242 -0
- package/template/.codex/skills/testing-strategist/SKILL.md +319 -0
- package/template/.codex/skills/testing-strategist/references/typescript.md +328 -0
- package/template/.codex/skills/update-architecture-map/SKILL.md +21 -0
- package/template/.codex/skills/utilities/resolve-skill.md +195 -0
- package/template/.codex/skills/validate-phase/SKILL.md +62 -0
- package/template/.codex/skills/validate-phase-quality/SKILL.md +67 -0
- package/template/.codex/skills/validate-phase-readiness/SKILL.md +74 -0
- package/template/.codex/skills/verification-before-completion/SKILL.md +97 -0
- package/template/.codex/skills/verify-infrastructure/SKILL.md +25 -0
- package/template/.codex/skills/workflow-automation/SKILL.md +166 -0
- package/template/.codex/skills/workflow-automation/references/inngest.md +88 -0
- package/template/.codex/skills/workflow-automation/references/temporal.md +64 -0
- package/template/.codex/skills/write-architecture-spec/SKILL.md +78 -0
- package/template/.codex/skills/write-architecture-spec-deepen/SKILL.md +82 -0
- package/template/.codex/skills/write-architecture-spec-design/SKILL.md +80 -0
- package/template/.codex/skills/write-be-spec/SKILL.md +75 -0
- package/template/.codex/skills/write-be-spec-classify/SKILL.md +80 -0
- package/template/.codex/skills/write-be-spec-write/SKILL.md +99 -0
- package/template/.codex/skills/write-fe-spec/SKILL.md +79 -0
- package/template/.codex/skills/write-fe-spec-classify/SKILL.md +77 -0
- package/template/.codex/skills/write-fe-spec-write/SKILL.md +88 -0
- package/template/.factory/README.md +2 -3
- package/template/.factory/instructions/workflow.md +3 -3
- package/template/.factory/kit-sync.md +3 -3
- package/template/.factory/skills/completion-checklist/SKILL.md +3 -3
- package/template/.factory/skills/parallel-agents/SKILL.md +1 -1
- package/template/.factory/skills/plan-phase/SKILL.md +2 -2
- package/template/.factory/skills/plan-phase-preflight/SKILL.md +2 -2
- package/template/.factory/skills/session-continuity/SKILL.md +6 -6
- package/template/.factory/skills/session-continuity/protocols/01-session-resumption.md +1 -1
- package/template/.factory/skills/session-continuity/protocols/02-progress-generation.md +3 -3
- package/template/.factory/skills/session-continuity/protocols/03-progress-update.md +4 -4
- package/template/.factory/skills/session-continuity/protocols/07-spec-pipeline-generation.md +1 -1
- package/template/.factory/skills/session-continuity/protocols/08-spec-pipeline-update.md +2 -2
- package/template/.factory/skills/session-continuity/protocols/11-parallel-synthesis.md +1 -1
- package/template/.factory/skills/setup-cfsa/SKILL.md +1 -1
- package/template/.factory/skills/write-architecture-spec/SKILL.md +2 -2
- package/template/.factory/skills/write-architecture-spec-deepen/SKILL.md +1 -1
- package/template/.factory/skills/write-architecture-spec-design/SKILL.md +1 -1
- package/template/.factory/skills/write-be-spec/SKILL.md +3 -3
- package/template/.factory/skills/write-be-spec-classify/SKILL.md +1 -1
- package/template/.factory/skills/write-be-spec-write/SKILL.md +1 -1
- package/template/.factory/skills/write-fe-spec/SKILL.md +3 -3
- package/template/.factory/skills/write-fe-spec-write/SKILL.md +1 -1
- package/template/.memory/README.md +1 -0
- package/template/.memory/mcp-server/README.md +10 -2
- package/template/.memory/mcp-server/client.mjs +61 -18
- package/template/.memory/mcp-server/daemon.mjs +8 -3
- package/template/.memory/mcp-server/runtime.mjs +51 -14
- package/template/.memory/mcp-server/start.mjs +4 -2
- package/template/.memory/migrate/migrate-legacy.mjs +1 -0
- package/template/.memory/pipeline/README.md +1 -0
- package/template/CLAUDE.md +4 -4
- package/template/CODEX.md +6 -53
- package/template/GEMINI.md +2 -2
- package/template/docs/README.md +5 -2
- package/template/docs/kit-architecture.md +36 -19
- package/template/docs/progress-state-catalog.md +48 -0
- package/template/.factory/progress/memory/.gitkeep +0 -0
- /package/template/{.agent/progress → .codex/skills/skill-creator/references}/.gitkeep +0 -0
- /package/template/{.agent/progress/memory → .codex/skills/skill-creator/scripts}/.gitkeep +0 -0
- /package/template/{.agent/progress/sessions → .memory/pipeline/progress}/.gitkeep +0 -0
- /package/template/{.claude/progress → .memory/pipeline/progress/memory}/.gitkeep +0 -0
- /package/template/{.claude/progress/memory → .memory/pipeline/progress/phases}/.gitkeep +0 -0
- /package/template/{.claude → .memory/pipeline}/progress/sessions/.gitkeep +0 -0
- /package/template/{.factory/progress → .memory/pipeline/progress/slices}/.gitkeep +0 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: kafka
|
|
3
|
+
description: "Expert Apache Kafka guide covering topic design (partitioning, retention, compaction), producer patterns (idempotency, batching, acks), consumer groups (rebalancing, offset management, exactly-once), Kafka Streams, Connect, Schema Registry (Avro/Protobuf), and operational best practices. Use when building event-driven architectures, streaming pipelines, or pub/sub systems with Kafka."
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Apache Kafka Expert Guide
|
|
8
|
+
|
|
9
|
+
> Use this skill when designing event-driven architectures, streaming data pipelines, or pub/sub messaging with Apache Kafka.
|
|
10
|
+
|
|
11
|
+
## When to Use This Skill
|
|
12
|
+
|
|
13
|
+
- Building event-driven microservices
|
|
14
|
+
- Designing streaming ETL / data pipelines
|
|
15
|
+
- Implementing pub/sub messaging between services
|
|
16
|
+
- Processing high-throughput real-time events (logs, metrics, clickstreams)
|
|
17
|
+
- CQRS / event sourcing architectures
|
|
18
|
+
|
|
19
|
+
## When NOT to Use This Skill
|
|
20
|
+
|
|
21
|
+
- Simple task queues → use BullMQ or SQS
|
|
22
|
+
- Low-throughput request/reply → use REST or gRPC
|
|
23
|
+
- Real-time browser push → use WebSockets / Socket.io
|
|
24
|
+
- Small projects with < 1K events/sec → consider simpler alternatives (Redis Streams, NATS)
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 1. Topic Design (CRITICAL)
|
|
29
|
+
|
|
30
|
+
### Naming Convention
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
<domain>.<entity>.<event-type>
|
|
34
|
+
|
|
35
|
+
# Examples
|
|
36
|
+
orders.order.created
|
|
37
|
+
users.user.profile-updated
|
|
38
|
+
payments.payment.completed
|
|
39
|
+
inventory.stock.adjusted
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Partitioning Strategy
|
|
43
|
+
|
|
44
|
+
| Strategy | When | Key |
|
|
45
|
+
|----------|------|-----|
|
|
46
|
+
| By entity ID | Ordered per-entity processing | `user_id`, `order_id` |
|
|
47
|
+
| By tenant | Multi-tenant isolation | `tenant_id` |
|
|
48
|
+
| Round-robin | Max parallelism, no ordering needed | `null` key |
|
|
49
|
+
| By region | Data locality | `region_code` |
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
# Partition count guidelines
|
|
53
|
+
- Start with 2× expected consumer count
|
|
54
|
+
- Max ~50 partitions per topic for most use cases
|
|
55
|
+
- More partitions = more parallelism but higher overhead
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Retention & Compaction
|
|
59
|
+
|
|
60
|
+
| Policy | Use Case | Config |
|
|
61
|
+
|--------|----------|--------|
|
|
62
|
+
| Time-based | Event logs, metrics | `retention.ms=604800000` (7 days) |
|
|
63
|
+
| Size-based | Bounded storage | `retention.bytes=1073741824` (1GB) |
|
|
64
|
+
| Compacted | Latest-state snapshots | `cleanup.policy=compact` |
|
|
65
|
+
| Compact + delete | State with TTL | `cleanup.policy=compact,delete` |
|
|
66
|
+
|
|
67
|
+
```properties
|
|
68
|
+
# Compacted topic — keeps latest value per key
|
|
69
|
+
cleanup.policy=compact
|
|
70
|
+
min.compaction.lag.ms=3600000
|
|
71
|
+
delete.retention.ms=86400000
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 2. Producers (CRITICAL)
|
|
77
|
+
|
|
78
|
+
### Idempotent Producer
|
|
79
|
+
|
|
80
|
+
```properties
|
|
81
|
+
# ✅ Always enable idempotency
|
|
82
|
+
enable.idempotence=true
|
|
83
|
+
acks=all
|
|
84
|
+
retries=2147483647
|
|
85
|
+
max.in.flight.requests.per.connection=5
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Batching
|
|
89
|
+
|
|
90
|
+
```properties
|
|
91
|
+
# ✅ Batch for throughput
|
|
92
|
+
batch.size=65536 # 64KB per partition batch
|
|
93
|
+
linger.ms=10 # Wait up to 10ms to fill batch
|
|
94
|
+
compression.type=lz4 # Compress batches
|
|
95
|
+
buffer.memory=67108864 # 64MB producer buffer
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Error Handling
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
Producer sends → acks=all → all ISR replicas confirm
|
|
102
|
+
→ retries on transient errors (automatic with idempotency)
|
|
103
|
+
→ DLQ (Dead Letter Queue) for permanent failures
|
|
104
|
+
|
|
105
|
+
# Key rule: never silently drop messages
|
|
106
|
+
# Log failures, send to DLQ, alert on threshold
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## 3. Consumers (CRITICAL)
|
|
112
|
+
|
|
113
|
+
### Consumer Group Patterns
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
# ✅ One consumer group per logical application
|
|
117
|
+
group.id=order-service
|
|
118
|
+
|
|
119
|
+
# ✅ Consumers in group = partition count for max parallelism
|
|
120
|
+
# 6 partitions → 6 consumers in group (max useful)
|
|
121
|
+
# Extra consumers sit idle
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Offset Management
|
|
125
|
+
|
|
126
|
+
| Strategy | When | Risk |
|
|
127
|
+
|----------|------|------|
|
|
128
|
+
| Auto-commit | Simple consumers, at-least-once OK | Duplicates on crash |
|
|
129
|
+
| Manual commit after processing | At-least-once guaranteed | Duplicates on crash before commit |
|
|
130
|
+
| Transactional (exactly-once) | Financial / critical processing | Higher latency |
|
|
131
|
+
|
|
132
|
+
```properties
|
|
133
|
+
# ✅ Manual commit for reliability
|
|
134
|
+
enable.auto.commit=false
|
|
135
|
+
auto.offset.reset=earliest
|
|
136
|
+
|
|
137
|
+
# Process → commit pattern:
|
|
138
|
+
# 1. poll()
|
|
139
|
+
# 2. process batch
|
|
140
|
+
# 3. commitSync()
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Rebalancing
|
|
144
|
+
|
|
145
|
+
```properties
|
|
146
|
+
# ✅ Cooperative rebalancing (no stop-the-world)
|
|
147
|
+
partition.assignment.strategy=org.apache.kafka.clients.consumer.CooperativeStickyAssignor
|
|
148
|
+
|
|
149
|
+
# ✅ Heartbeat tuning
|
|
150
|
+
session.timeout.ms=30000
|
|
151
|
+
heartbeat.interval.ms=10000
|
|
152
|
+
max.poll.interval.ms=300000
|
|
153
|
+
max.poll.records=500
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 4. Schema Registry
|
|
159
|
+
|
|
160
|
+
### Avro Schema Evolution
|
|
161
|
+
|
|
162
|
+
```json
|
|
163
|
+
{
|
|
164
|
+
"type": "record",
|
|
165
|
+
"name": "OrderCreated",
|
|
166
|
+
"namespace": "com.example.orders",
|
|
167
|
+
"fields": [
|
|
168
|
+
{"name": "order_id", "type": "string"},
|
|
169
|
+
{"name": "user_id", "type": "string"},
|
|
170
|
+
{"name": "total_cents", "type": "long"},
|
|
171
|
+
{"name": "currency", "type": "string", "default": "USD"},
|
|
172
|
+
{"name": "created_at", "type": "long", "logicalType": "timestamp-millis"}
|
|
173
|
+
]
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
| Evolution Rule | Allowed |
|
|
178
|
+
|---------------|---------|
|
|
179
|
+
| Add field with default | ✅ Backward compatible |
|
|
180
|
+
| Remove field with default | ✅ Forward compatible |
|
|
181
|
+
| Rename field | ❌ Breaking |
|
|
182
|
+
| Change field type | ❌ Breaking |
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## 5. Kafka Streams (Stateful Processing)
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
# Topology pattern
|
|
190
|
+
Source Topic → Filter → Map → GroupByKey → Aggregate → Sink Topic
|
|
191
|
+
|
|
192
|
+
# Use cases:
|
|
193
|
+
# - Real-time aggregations (counts, sums, averages)
|
|
194
|
+
# - Windowed operations (tumbling, hopping, session windows)
|
|
195
|
+
# - Stream-table joins (enrich events with reference data)
|
|
196
|
+
# - Exactly-once processing (with Kafka transactions)
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## 6. Kafka Connect
|
|
202
|
+
|
|
203
|
+
```
|
|
204
|
+
# Source connectors: DB → Kafka
|
|
205
|
+
- Debezium (CDC from PostgreSQL, MySQL, MongoDB)
|
|
206
|
+
- JDBC Source
|
|
207
|
+
|
|
208
|
+
# Sink connectors: Kafka → external
|
|
209
|
+
- Elasticsearch Sink
|
|
210
|
+
- S3 Sink (Parquet/JSON)
|
|
211
|
+
- JDBC Sink
|
|
212
|
+
- BigQuery Sink
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## 7. Common Anti-Patterns
|
|
218
|
+
|
|
219
|
+
1. **One giant topic for everything** — separate by domain and entity
|
|
220
|
+
2. **Too many partitions** — start small (2× consumers), scale up when needed
|
|
221
|
+
3. **No schema registry** — schema drift causes silent data corruption
|
|
222
|
+
4. **Auto-commit with long processing** — commits before processing completes → data loss
|
|
223
|
+
5. **Consuming without consumer groups** — lose offset tracking and rebalancing
|
|
224
|
+
6. **Not setting `acks=all`** — risking data loss on broker failure
|
|
225
|
+
7. **Synchronous produce in request path** — batch/async, or accept latency
|
|
226
|
+
8. **No DLQ** — poison messages block the entire partition
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## References
|
|
231
|
+
|
|
232
|
+
- [Apache Kafka Documentation](https://kafka.apache.org/documentation/)
|
|
233
|
+
- [Confluent Developer](https://developer.confluent.io/)
|
|
234
|
+
- [Schema Registry](https://docs.confluent.io/platform/current/schema-registry/)
|
|
235
|
+
- [Kafka Streams](https://kafka.apache.org/documentation/streams/)
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: nats
|
|
3
|
+
description: "NATS messaging patterns covering pub/sub, request/reply, JetStream persistence, key-value store, and subject-based routing. Use when implementing cloud-native messaging with NATS."
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
source: self
|
|
6
|
+
date_added: "2026-03-14"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# NATS
|
|
10
|
+
|
|
11
|
+
Cloud-native messaging system. Lightweight, high-performance pub/sub with optional persistence via JetStream. Subject-based routing with wildcard subscriptions.
|
|
12
|
+
|
|
13
|
+
## When to Use
|
|
14
|
+
|
|
15
|
+
- Need lightweight, high-throughput pub/sub between services
|
|
16
|
+
- Building cloud-native microservices (Kubernetes-native)
|
|
17
|
+
- Need request/reply patterns without HTTP overhead
|
|
18
|
+
- Want built-in key-value and object store (JetStream)
|
|
19
|
+
|
|
20
|
+
## When NOT to Use
|
|
21
|
+
|
|
22
|
+
- Need complex exchange/routing logic (use RabbitMQ)
|
|
23
|
+
- Need long-term event replay/streaming (use Kafka)
|
|
24
|
+
- Need managed cloud queue without server (use SQS)
|
|
25
|
+
|
|
26
|
+
## Setup
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm install nats
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
import { connect, StringCodec } from 'nats';
|
|
34
|
+
|
|
35
|
+
const nc = await connect({ servers: process.env.NATS_URL ?? 'nats://localhost:4222' });
|
|
36
|
+
const sc = StringCodec(); // Encode/decode messages
|
|
37
|
+
|
|
38
|
+
// JSON codec helper
|
|
39
|
+
const jc = {
|
|
40
|
+
encode: (obj: unknown) => sc.encode(JSON.stringify(obj)),
|
|
41
|
+
decode: (data: Uint8Array) => JSON.parse(sc.decode(data)),
|
|
42
|
+
};
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Pub/Sub
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
// Publish
|
|
49
|
+
nc.publish('orders.created', jc.encode({ orderId: '1234', total: 99.99 }));
|
|
50
|
+
|
|
51
|
+
// Subscribe
|
|
52
|
+
const sub = nc.subscribe('orders.created');
|
|
53
|
+
for await (const msg of sub) {
|
|
54
|
+
const order = jc.decode(msg.data);
|
|
55
|
+
console.log(`Order created: ${order.orderId}`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Wildcard subscriptions
|
|
59
|
+
nc.subscribe('orders.*'); // orders.created, orders.updated — one level
|
|
60
|
+
nc.subscribe('orders.>'); // orders.created, orders.us.pending — any depth
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Request/Reply
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
// Service (responder)
|
|
67
|
+
const sub = nc.subscribe('api.users.get');
|
|
68
|
+
for await (const msg of sub) {
|
|
69
|
+
const { userId } = jc.decode(msg.data);
|
|
70
|
+
const user = await db.users.findById(userId);
|
|
71
|
+
msg.respond(jc.encode(user));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Client (requester)
|
|
75
|
+
const response = await nc.request('api.users.get', jc.encode({ userId: '123' }), {
|
|
76
|
+
timeout: 5000,
|
|
77
|
+
});
|
|
78
|
+
const user = jc.decode(response.data);
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## JetStream (Persistent Messaging)
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
const js = nc.jetstream();
|
|
85
|
+
const jsm = await nc.jetstreamManager();
|
|
86
|
+
|
|
87
|
+
// Create stream
|
|
88
|
+
await jsm.streams.add({
|
|
89
|
+
name: 'ORDERS',
|
|
90
|
+
subjects: ['orders.>'],
|
|
91
|
+
retention: 'limits', // 'limits', 'interest', or 'workqueue'
|
|
92
|
+
max_msgs: 100000,
|
|
93
|
+
max_age: 7 * 24 * 60 * 60 * 1_000_000_000, // 7 days (nanoseconds)
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// Publish to stream
|
|
97
|
+
await js.publish('orders.created', jc.encode({ orderId: '1234' }));
|
|
98
|
+
|
|
99
|
+
// Durable consumer
|
|
100
|
+
const consumer = await js.consumers.get('ORDERS', 'order-processor');
|
|
101
|
+
const messages = await consumer.consume();
|
|
102
|
+
for await (const msg of messages) {
|
|
103
|
+
const order = jc.decode(msg.data);
|
|
104
|
+
await processOrder(order);
|
|
105
|
+
msg.ack();
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Key-Value Store
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
const kv = await js.views.kv('config');
|
|
113
|
+
|
|
114
|
+
// Put
|
|
115
|
+
await kv.put('feature.new-checkout', sc.encode('true'));
|
|
116
|
+
|
|
117
|
+
// Get
|
|
118
|
+
const entry = await kv.get('feature.new-checkout');
|
|
119
|
+
const value = entry ? sc.decode(entry.value) : null;
|
|
120
|
+
|
|
121
|
+
// Watch for changes
|
|
122
|
+
const watch = await kv.watch();
|
|
123
|
+
for await (const entry of watch) {
|
|
124
|
+
console.log(`${entry.key} = ${sc.decode(entry.value)}`);
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Graceful Shutdown
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
process.on('SIGTERM', async () => {
|
|
132
|
+
await nc.drain(); // Finish processing, then close
|
|
133
|
+
});
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Anti-Patterns
|
|
137
|
+
|
|
138
|
+
| Don't | Do |
|
|
139
|
+
|-------|-----|
|
|
140
|
+
| Use core NATS for messages that must not be lost | Use JetStream for persistent, acknowledged messaging |
|
|
141
|
+
| Create a new connection per request | Reuse a single connection, create subscriptions as needed |
|
|
142
|
+
| Use `close()` for graceful shutdown | Use `drain()` to finish in-flight messages before closing |
|
|
143
|
+
| Forget to `ack()` JetStream messages | Always ack or nak — unacked messages redeliver after timeout |
|
|
144
|
+
| Use overly specific subjects | Design hierarchical subjects (e.g., `orders.us.created`) for flexibility |
|
|
145
|
+
| Block the async iterator with slow processing | Process messages concurrently or offload heavy work |
|
|
146
|
+
| Skip error handling on `request()` | Set timeout and handle `NatsError` for request/reply |
|
|
147
|
+
| Store large binary blobs in KV | Use JetStream Object Store for files, KV for config/state |
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rabbitmq
|
|
3
|
+
description: "RabbitMQ messaging patterns covering exchanges, queues, routing, pub/sub, RPC, dead-letter queues, and connection management. Use when implementing message queuing with RabbitMQ."
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
source: self
|
|
6
|
+
date_added: "2026-03-14"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# RabbitMQ
|
|
10
|
+
|
|
11
|
+
Open-source message broker implementing AMQP 0-9-1. Reliable message delivery with exchanges, queues, routing, acknowledgments, and dead-letter handling.
|
|
12
|
+
|
|
13
|
+
## When to Use
|
|
14
|
+
|
|
15
|
+
- Need reliable async message passing between services
|
|
16
|
+
- Building event-driven microservices
|
|
17
|
+
- Need complex routing (topic, headers, fan-out)
|
|
18
|
+
- Want durable message persistence with delivery guarantees
|
|
19
|
+
|
|
20
|
+
## When NOT to Use
|
|
21
|
+
|
|
22
|
+
- Need a simple job queue (use BullMQ with Redis)
|
|
23
|
+
- Need event streaming with replay (use Kafka)
|
|
24
|
+
- All services are serverless/stateless (use SQS or cloud pub/sub)
|
|
25
|
+
|
|
26
|
+
## Setup
|
|
27
|
+
|
|
28
|
+
### Installation
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm install amqplib
|
|
32
|
+
npm install @types/amqplib # TypeScript types
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Connection
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
import amqp, { Connection, Channel } from 'amqplib';
|
|
39
|
+
|
|
40
|
+
let connection: Connection;
|
|
41
|
+
let channel: Channel;
|
|
42
|
+
|
|
43
|
+
async function connect() {
|
|
44
|
+
connection = await amqp.connect(process.env.RABBITMQ_URL ?? 'amqp://localhost');
|
|
45
|
+
channel = await connection.createChannel();
|
|
46
|
+
|
|
47
|
+
// Prefetch: process one message at a time
|
|
48
|
+
await channel.prefetch(1);
|
|
49
|
+
|
|
50
|
+
// Handle connection errors
|
|
51
|
+
connection.on('error', (err) => console.error('RabbitMQ connection error:', err));
|
|
52
|
+
connection.on('close', () => setTimeout(connect, 5000)); // Reconnect
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Patterns
|
|
57
|
+
|
|
58
|
+
### Work Queue (Task Distribution)
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
// Producer
|
|
62
|
+
async function enqueueTask(queue: string, task: object) {
|
|
63
|
+
await channel.assertQueue(queue, { durable: true });
|
|
64
|
+
channel.sendToQueue(queue, Buffer.from(JSON.stringify(task)), {
|
|
65
|
+
persistent: true, // Survive broker restart
|
|
66
|
+
contentType: 'application/json',
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Consumer
|
|
71
|
+
async function consumeTasks(queue: string, handler: (task: any) => Promise<void>) {
|
|
72
|
+
await channel.assertQueue(queue, { durable: true });
|
|
73
|
+
channel.consume(queue, async (msg) => {
|
|
74
|
+
if (!msg) return;
|
|
75
|
+
try {
|
|
76
|
+
const task = JSON.parse(msg.content.toString());
|
|
77
|
+
await handler(task);
|
|
78
|
+
channel.ack(msg); // Acknowledge successful processing
|
|
79
|
+
} catch (err) {
|
|
80
|
+
channel.nack(msg, false, false); // Reject, don't requeue (goes to DLQ if configured)
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Publish/Subscribe (Fan-Out)
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
// Publisher
|
|
90
|
+
async function publish(exchange: string, event: object) {
|
|
91
|
+
await channel.assertExchange(exchange, 'fanout', { durable: true });
|
|
92
|
+
channel.publish(exchange, '', Buffer.from(JSON.stringify(event)), {
|
|
93
|
+
persistent: true,
|
|
94
|
+
contentType: 'application/json',
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Subscriber
|
|
99
|
+
async function subscribe(exchange: string, handler: (event: any) => Promise<void>) {
|
|
100
|
+
await channel.assertExchange(exchange, 'fanout', { durable: true });
|
|
101
|
+
const { queue } = await channel.assertQueue('', { exclusive: true }); // Auto-delete queue
|
|
102
|
+
await channel.bindQueue(queue, exchange, '');
|
|
103
|
+
channel.consume(queue, async (msg) => {
|
|
104
|
+
if (!msg) return;
|
|
105
|
+
const event = JSON.parse(msg.content.toString());
|
|
106
|
+
await handler(event);
|
|
107
|
+
channel.ack(msg);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Topic Routing
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
// Publisher
|
|
116
|
+
await channel.assertExchange('events', 'topic', { durable: true });
|
|
117
|
+
channel.publish('events', 'order.created', Buffer.from(JSON.stringify(order)));
|
|
118
|
+
channel.publish('events', 'order.cancelled', Buffer.from(JSON.stringify(order)));
|
|
119
|
+
|
|
120
|
+
// Subscriber — listen to specific patterns
|
|
121
|
+
await channel.bindQueue(queue, 'events', 'order.*'); // All order events
|
|
122
|
+
await channel.bindQueue(queue, 'events', 'order.created'); // Only order.created
|
|
123
|
+
await channel.bindQueue(queue, 'events', '#'); // All events
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Dead-Letter Queue (DLQ)
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
// Set up DLQ
|
|
130
|
+
await channel.assertQueue('tasks.dlq', { durable: true });
|
|
131
|
+
await channel.assertExchange('dlx', 'direct', { durable: true });
|
|
132
|
+
await channel.bindQueue('tasks.dlq', 'dlx', 'tasks');
|
|
133
|
+
|
|
134
|
+
// Main queue with DLQ config
|
|
135
|
+
await channel.assertQueue('tasks', {
|
|
136
|
+
durable: true,
|
|
137
|
+
deadLetterExchange: 'dlx',
|
|
138
|
+
deadLetterRoutingKey: 'tasks',
|
|
139
|
+
messageTtl: 30000, // Optional: messages expire after 30s
|
|
140
|
+
});
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Graceful Shutdown
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
async function shutdown() {
|
|
147
|
+
await channel.close();
|
|
148
|
+
await connection.close();
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
process.on('SIGINT', shutdown);
|
|
152
|
+
process.on('SIGTERM', shutdown);
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Key Concepts
|
|
156
|
+
|
|
157
|
+
| Concept | Description |
|
|
158
|
+
|---------|-------------|
|
|
159
|
+
| Exchange | Routes messages to queues (fanout, direct, topic, headers) |
|
|
160
|
+
| Queue | Stores messages until consumed |
|
|
161
|
+
| Binding | Rule connecting an exchange to a queue |
|
|
162
|
+
| Ack | Consumer confirms message processed successfully |
|
|
163
|
+
| Nack | Consumer rejects message (requeue or send to DLQ) |
|
|
164
|
+
| Prefetch | Max unacknowledged messages per consumer |
|
|
165
|
+
| Persistent | Message survives broker restart (written to disk) |
|
|
166
|
+
|
|
167
|
+
## Anti-Patterns
|
|
168
|
+
|
|
169
|
+
| Don't | Do |
|
|
170
|
+
|-------|-----|
|
|
171
|
+
| Create a new connection per message | Reuse connections, create channels per operation context |
|
|
172
|
+
| Forget to `ack` or `nack` messages | Always acknowledge — unacked messages block the queue |
|
|
173
|
+
| Use `autoAck: true` for important work | Manual ack after successful processing for reliability |
|
|
174
|
+
| Skip `durable: true` on production queues | Always use durable queues and persistent messages |
|
|
175
|
+
| Ignore connection `error`/`close` events | Implement reconnection logic with backoff |
|
|
176
|
+
| Use `prefetch(0)` (unlimited) | Set prefetch to a sensible value (1-10) to prevent overload |
|
|
177
|
+
| Put large payloads in messages | Store large data externally, pass references in messages |
|
|
178
|
+
| Create unbounded exclusive queues | Monitor queue depth, set TTL or max-length policies |
|