@punks/cli 0.1.16 → 1.0.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/AGENTS.md +10 -0
- package/README.md +64 -0
- package/dist/data/AGENTS.md +123 -0
- package/dist/data/catalog/lint.ts +349 -0
- package/dist/data/catalog/packs.ts +44 -0
- package/dist/data/catalog/skills.ts +47 -0
- package/dist/data/catalog/tools.ts +22 -0
- package/dist/data/hooks/format-edited-file.mjs +554 -0
- package/dist/data/hooks/format-edited-file.py +157 -0
- package/dist/data/hooks/format-edited-file.sh +37 -0
- package/dist/data/hooks/require-tests-for-pr.mjs +144 -0
- package/dist/data/scripts/sync-subagents.mjs +420 -0
- package/dist/data/subagents/manifest.mjs +253 -0
- package/dist/index.js +46415 -0
- package/dist/skills/agnostic/backend/backend-domain-structure/SKILL.md +50 -0
- package/dist/skills/agnostic/backend/backend-domain-structure/agents/openai.yaml +4 -0
- package/dist/skills/agnostic/backend/backend-domain-structure/references/layout.md +167 -0
- package/dist/skills/agnostic/backend/backend-recoverable-actions/SKILL.md +49 -0
- package/dist/skills/agnostic/backend/backend-recoverable-actions/agents/openai.yaml +4 -0
- package/dist/skills/agnostic/backend/backend-recoverable-actions/references/strategy-matrix.md +34 -0
- package/dist/skills/agnostic/backend/backend-recoverable-actions/references/test-matrix.md +34 -0
- package/dist/skills/agnostic/docs/docs-maintenance/SKILL.md +193 -0
- package/dist/skills/agnostic/docs/docs-maintenance/agents/openai.yaml +4 -0
- package/dist/skills/agnostic/docs/docs-maintenance/references/concept-pages.md +48 -0
- package/dist/skills/agnostic/docs/docs-maintenance/references/flow-pages.md +41 -0
- package/dist/skills/agnostic/frontend/agent-browser/.clawdhub/origin.json +7 -0
- package/dist/skills/agnostic/frontend/agent-browser/SKILL.md +229 -0
- package/dist/skills/agnostic/frontend/agent-browser/references/authentication.md +202 -0
- package/dist/skills/agnostic/frontend/agent-browser/references/commands.md +259 -0
- package/dist/skills/agnostic/frontend/agent-browser/references/proxy-support.md +188 -0
- package/dist/skills/agnostic/frontend/agent-browser/references/session-management.md +193 -0
- package/dist/skills/agnostic/frontend/agent-browser/references/snapshot-refs.md +194 -0
- package/dist/skills/agnostic/frontend/agent-browser/references/video-recording.md +173 -0
- package/dist/skills/agnostic/frontend/agent-browser/templates/authenticated-session.sh +97 -0
- package/dist/skills/agnostic/frontend/agent-browser/templates/capture-workflow.sh +69 -0
- package/dist/skills/agnostic/frontend/agent-browser/templates/form-automation.sh +62 -0
- package/dist/skills/agnostic/frontend/design-taste-frontend/SKILL.md +226 -0
- package/dist/skills/agnostic/frontend/frontend-domain-structure/SKILL.md +55 -0
- package/dist/skills/agnostic/frontend/frontend-domain-structure/agents/openai.yaml +4 -0
- package/dist/skills/agnostic/frontend/frontend-domain-structure/references/react/structure.md +102 -0
- package/dist/skills/agnostic/frontend/frontend-domain-structure/references/structure.md +257 -0
- package/dist/skills/agnostic/frontend/gpt-taste/SKILL.md +74 -0
- package/dist/skills/agnostic/frontend/image-taste-frontend/SKILL.md +1102 -0
- package/dist/skills/agnostic/frontend/redesign-existing-projects/SKILL.md +178 -0
- package/dist/skills/agnostic/planning/create-plan/REFERENCE.md +37 -0
- package/dist/skills/agnostic/planning/create-plan/SKILL.md +69 -0
- package/dist/skills/agnostic/planning/create-plan/references/backlog-sync.md +44 -0
- package/dist/skills/agnostic/planning/create-plan/references/grill-phase.md +86 -0
- package/dist/skills/agnostic/planning/create-plan/references/plan-schema.md +66 -0
- package/dist/skills/agnostic/planning/create-plan/references/planner-phase.md +39 -0
- package/dist/skills/agnostic/planning/create-plan/references/stop-conditions.md +18 -0
- package/dist/skills/agnostic/planning/create-plan/references/tdd-phase.md +26 -0
- package/dist/skills/agnostic/planning/create-spec/SKILL.md +57 -0
- package/dist/skills/agnostic/planning/create-spec/assets/SPEC-TEMPLATE.md +91 -0
- package/dist/skills/agnostic/planning/create-spec/references/discovery.md +44 -0
- package/dist/skills/agnostic/planning/create-spec/references/folder-naming.md +27 -0
- package/dist/skills/agnostic/planning/create-spec/references/handoff.md +47 -0
- package/dist/skills/agnostic/planning/create-spec/references/questioning.md +41 -0
- package/dist/skills/agnostic/planning/create-spec/references/spec-quality-bar.md +58 -0
- package/dist/skills/agnostic/planning/create-spec/references/wiki-bookkeeping.md +26 -0
- package/dist/skills/agnostic/planning/grill-me/SKILL.md +28 -0
- package/dist/skills/agnostic/planning/implement-spec/SKILL.md +72 -0
- package/dist/skills/agnostic/planning/implement-spec/assets/IMPLEMENTATION-NOTES-TEMPLATE.md +47 -0
- package/dist/skills/agnostic/planning/implement-spec/references/lifecycle.md +149 -0
- package/dist/skills/agnostic/planning/implement-spec/references/parallel-orchestration.md +102 -0
- package/dist/skills/agnostic/planning/implement-spec/references/parallel-worker-brief.md +65 -0
- package/dist/skills/agnostic/planning/implement-spec/references/parallel.md +56 -0
- package/dist/skills/agnostic/planning/implement-spec/references/sequential.md +28 -0
- package/dist/skills/agnostic/planning/swarm-planner/SKILL.md +179 -0
- package/dist/skills/agnostic/quality/simplify/SKILL.md +14 -0
- package/dist/skills/agnostic/quality/tdd/SKILL.md +107 -0
- package/dist/skills/agnostic/quality/tdd/deep-modules.md +33 -0
- package/dist/skills/agnostic/quality/tdd/interface-design.md +31 -0
- package/dist/skills/agnostic/quality/tdd/mocking.md +59 -0
- package/dist/skills/agnostic/quality/tdd/refactoring.md +10 -0
- package/dist/skills/agnostic/quality/tdd/tests.md +61 -0
- package/dist/skills/agnostic/requirements/requirements-grill/SKILL.md +42 -0
- package/dist/skills/agnostic/requirements/requirements-grill/references/artifact-output.md +73 -0
- package/dist/skills/agnostic/requirements/requirements-grill/references/grilling-flow.md +57 -0
- package/dist/skills/agnostic/requirements/requirements-grill/references/wiki-output.md +94 -0
- package/dist/skills/agnostic/requirements/write-backlog/EXAMPLES.md +67 -0
- package/dist/skills/agnostic/requirements/write-backlog/REFERENCE.md +253 -0
- package/dist/skills/agnostic/requirements/write-backlog/SKILL.md +68 -0
- package/dist/skills/agnostic/requirements/write-backlog/assets/concepts/backlog-model.md +69 -0
- package/dist/skills/agnostic/requirements/write-backlog/assets/concepts/story-shape.md +66 -0
- package/dist/skills/agnostic/requirements/write-backlog/assets/providers/azure-devops-create-payload.md +63 -0
- package/dist/skills/agnostic/requirements/write-backlog/assets/providers/github-issues-create-payload.md +48 -0
- package/dist/skills/agnostic/requirements/write-backlog/assets/providers/linear-create-payload.md +76 -0
- package/dist/skills/agnostic/research/improve-codebase-architecture/REFERENCE.md +78 -0
- package/dist/skills/agnostic/research/improve-codebase-architecture/SKILL.md +76 -0
- package/dist/skills/agnostic/research/parallel-research/SKILL.md +68 -0
- package/dist/skills/agnostic/research/parallel-research/agents/openai.yaml +4 -0
- package/dist/skills/agnostic/subagents/swarm-planner/SKILL.md +179 -0
- package/dist/skills/agnostic/write-a-skill/SKILL.md +117 -0
- package/dist/skills/frameworks/better-auth/better-auth-best-practices/SKILL.md +166 -0
- package/dist/skills/frameworks/better-auth/better-auth-security-best-practices/SKILL.MD +432 -0
- package/dist/skills/frameworks/effect/effect-authoring/SKILL.md +116 -0
- package/dist/skills/frameworks/effect/effect-authoring/references/branded-types.md +98 -0
- package/dist/skills/frameworks/effect/effect-authoring/references/effect-atom-patterns.md +257 -0
- package/dist/skills/frameworks/effect/effect-authoring/references/effect-primitives.md +144 -0
- package/dist/skills/frameworks/effect/effect-authoring/references/error-patterns.md +156 -0
- package/dist/skills/frameworks/effect/effect-authoring/references/otel-patterns.md +113 -0
- package/dist/skills/frameworks/effect/effect-authoring/references/test-patterns.md +146 -0
- package/dist/skills/frameworks/effect/effect-backend-structure/SKILL.md +96 -0
- package/dist/skills/frameworks/effect/effect-backend-structure/agents/openai.yaml +4 -0
- package/dist/skills/frameworks/effect/effect-backend-structure/references/layout.md +68 -0
- package/dist/skills/frameworks/effect/effect-best-practices/SKILL.md +517 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/anti-patterns.md +392 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/effect-atom-patterns.md +653 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/error-patterns.md +464 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/language-server.md +287 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/layer-patterns.md +495 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/observability-patterns.md +342 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/rpc-cluster-patterns.md +418 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/schema-patterns.md +353 -0
- package/dist/skills/frameworks/effect/effect-best-practices/references/service-patterns.md +299 -0
- package/dist/skills/frameworks/effect/effect-recoverable-actions/SKILL.md +65 -0
- package/dist/skills/frameworks/effect/effect-recoverable-actions/agents/openai.yaml +4 -0
- package/dist/skills/frameworks/effect/effect-recoverable-actions/references/flow-examples.md +154 -0
- package/dist/skills/frameworks/effect/effect-recoverable-actions/references/source-backed-primitives.md +104 -0
- package/dist/skills/frameworks/effect/effect-recoverable-actions/references/strategy-matrix.md +34 -0
- package/dist/skills/frameworks/effect/effect-recoverable-actions/references/test-matrix.md +36 -0
- package/dist/skills/frameworks/elysia/elysiajs/SKILL.md +475 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/basic.ts +9 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/body-parser.ts +33 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/complex.ts +112 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/cookie.ts +45 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/error.ts +38 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/file.ts +10 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/guard.ts +34 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/map-response.ts +15 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/redirect.ts +6 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/rename.ts +32 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/schema.ts +61 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/state.ts +6 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/upload-file.ts +20 -0
- package/dist/skills/frameworks/elysia/elysiajs/examples/websocket.ts +25 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/ai-sdk.md +92 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/astro.md +59 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/better-auth.md +117 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/cloudflare-worker.md +95 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/deno.md +34 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/drizzle.md +258 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/expo.md +95 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/nextjs.md +103 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/nodejs.md +64 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/nuxt.md +67 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/prisma.md +93 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/react-email.md +134 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/sveltekit.md +53 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/tanstack-start.md +87 -0
- package/dist/skills/frameworks/elysia/elysiajs/integrations/vercel.md +55 -0
- package/dist/skills/frameworks/elysia/elysiajs/patterns/mvc.md +380 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/bearer.md +30 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/cors.md +141 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/cron.md +265 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/graphql-apollo.md +90 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/graphql-yoga.md +87 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/html.md +188 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/jwt.md +197 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/openapi.md +246 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/opentelemetry.md +167 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/server-timing.md +71 -0
- package/dist/skills/frameworks/elysia/elysiajs/plugins/static.md +84 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/bun-fullstack-dev-server.md +129 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/cookie.md +187 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/deployment.md +413 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/eden.md +158 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/lifecycle.md +198 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/macro.md +83 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/plugin.md +207 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/route.md +331 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/testing.md +385 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/validation.md +491 -0
- package/dist/skills/frameworks/elysia/elysiajs/references/websocket.md +250 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/.github/workflows/branch-protection.yml +24 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/.github/workflows/deploy.yml +61 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/AGENTS.md +5958 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/SKILL.md +130 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/api-use-dto-serialization.md +182 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/api-use-interceptors.md +202 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/api-use-pipes.md +205 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/api-versioning.md +191 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-avoid-circular-deps.md +80 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-feature-modules.md +82 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-module-sharing.md +141 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-single-responsibility.md +106 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-use-events.md +108 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/arch-use-repository-pattern.md +97 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/db-avoid-n-plus-one.md +139 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/db-use-migrations.md +129 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/db-use-transactions.md +140 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/devops-graceful-shutdown.md +222 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/devops-use-config-module.md +167 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/devops-use-logging.md +232 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-avoid-service-locator.md +104 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-interface-segregation.md +165 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-liskov-substitution.md +221 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-prefer-constructor-injection.md +86 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-scope-awareness.md +94 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/di-use-interfaces-tokens.md +101 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/error-handle-async-errors.md +125 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/error-throw-http-exceptions.md +114 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/error-use-exception-filters.md +140 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/micro-use-health-checks.md +226 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/micro-use-patterns.md +167 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/micro-use-queues.md +252 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/perf-async-hooks.md +109 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/perf-lazy-loading.md +121 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/perf-optimize-database.md +131 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/perf-use-caching.md +128 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-auth-jwt.md +146 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-rate-limiting.md +125 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-sanitize-output.md +139 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-use-guards.md +135 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/security-validate-all-input.md +150 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/test-e2e-supertest.md +178 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/test-mock-external-services.md +179 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/rules/test-use-testing-module.md +153 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/scripts/build-agents.ts +299 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/scripts/build.sh +16 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/scripts/package-lock.json +237 -0
- package/dist/skills/frameworks/nestjs/nestjs-best-practices/scripts/package.json +15 -0
- package/dist/skills/frameworks/nestjs/nestjs-expert/SKILL.md +208 -0
- package/dist/skills/frameworks/nestjs/nestjs-expert/references/authentication.md +166 -0
- package/dist/skills/frameworks/nestjs/nestjs-expert/references/controllers-routing.md +111 -0
- package/dist/skills/frameworks/nestjs/nestjs-expert/references/dtos-validation.md +153 -0
- package/dist/skills/frameworks/nestjs/nestjs-expert/references/migration-from-express.md +1237 -0
- package/dist/skills/frameworks/nestjs/nestjs-expert/references/services-di.md +140 -0
- package/dist/skills/frameworks/nestjs/nestjs-expert/references/testing-patterns.md +186 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/SKILL.md +153 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/async-patterns.md +87 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/bundling.md +180 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/data-patterns.md +297 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/debug-tricks.md +105 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/directives.md +73 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/error-handling.md +227 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/file-conventions.md +140 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/font.md +245 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/functions.md +108 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/hydration-error.md +91 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/image.md +173 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/metadata.md +301 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/parallel-routes.md +287 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/route-handlers.md +146 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/rsc-boundaries.md +159 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/runtime-selection.md +39 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/scripts.md +141 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/self-hosting.md +371 -0
- package/dist/skills/frameworks/nextjs/next-best-practices/suspense-boundaries.md +67 -0
- package/dist/skills/frameworks/nextjs/next-cache-components/SKILL.md +360 -0
- package/dist/skills/frameworks/react/async-react-patterns/SKILL.md +78 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/AGENTS.md +946 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/SKILL.md +89 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/rules/state-context-interface.md +191 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
- package/dist/skills/frameworks/react/vercel-composition-patterns/rules/state-lift-state.md +125 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/AGENTS.md +3750 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/SKILL.md +148 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-defer-await.md +82 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/dist/skills/frameworks/react/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/.claude-plugin/plugin.json +12 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/SKILL.md +1058 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/assets/example-template.txt +14 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/references/best-practices.md +304 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/references/common-patterns.md +271 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/references/example-reference.md +26 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/references/testing.md +282 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/references/top-errors.md +332 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/references/typescript-patterns.md +291 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/references/v4-to-v5-migration.md +231 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/rules/tanstack-query.md +126 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/scripts/example-script.sh +15 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/custom-hooks-pattern.tsx +281 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/devtools-setup.tsx +248 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/error-boundary.tsx +243 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/package.json +31 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/provider-setup.tsx +50 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/query-client-config.ts +72 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/use-infinite-query.tsx +214 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/use-mutation-basic.tsx +201 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/use-mutation-optimistic.tsx +234 -0
- package/dist/skills/frameworks/tanstack-query/tanstack-query/templates/use-query-basic.tsx +119 -0
- package/dist/skills/frameworks/trpc/tanstack-query/.claude-plugin/plugin.json +12 -0
- package/dist/skills/frameworks/trpc/tanstack-query/SKILL.md +1058 -0
- package/dist/skills/frameworks/trpc/tanstack-query/assets/example-template.txt +14 -0
- package/dist/skills/frameworks/trpc/tanstack-query/references/best-practices.md +304 -0
- package/dist/skills/frameworks/trpc/tanstack-query/references/common-patterns.md +271 -0
- package/dist/skills/frameworks/trpc/tanstack-query/references/example-reference.md +26 -0
- package/dist/skills/frameworks/trpc/tanstack-query/references/testing.md +282 -0
- package/dist/skills/frameworks/trpc/tanstack-query/references/top-errors.md +332 -0
- package/dist/skills/frameworks/trpc/tanstack-query/references/typescript-patterns.md +291 -0
- package/dist/skills/frameworks/trpc/tanstack-query/references/v4-to-v5-migration.md +231 -0
- package/dist/skills/frameworks/trpc/tanstack-query/rules/tanstack-query.md +126 -0
- package/dist/skills/frameworks/trpc/tanstack-query/scripts/example-script.sh +15 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/custom-hooks-pattern.tsx +281 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/devtools-setup.tsx +248 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/error-boundary.tsx +243 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/package.json +31 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/provider-setup.tsx +50 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/query-client-config.ts +72 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/use-infinite-query.tsx +214 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/use-mutation-basic.tsx +201 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/use-mutation-optimistic.tsx +234 -0
- package/dist/skills/frameworks/trpc/tanstack-query/templates/use-query-basic.tsx +119 -0
- package/dist/skills/frameworks/turborepo/turborepo/SKILL.md +914 -0
- package/dist/skills/frameworks/turborepo/turborepo/command/turborepo.md +70 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/best-practices/RULE.md +241 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/best-practices/dependencies.md +246 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/best-practices/packages.md +335 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/best-practices/structure.md +270 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/boundaries/RULE.md +126 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/caching/RULE.md +107 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/caching/gotchas.md +169 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/caching/remote-cache.md +127 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/ci/RULE.md +79 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/ci/github-actions.md +162 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/ci/patterns.md +145 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/ci/vercel.md +103 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/cli/RULE.md +100 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/cli/commands.md +297 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/configuration/RULE.md +211 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/configuration/global-options.md +187 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/configuration/gotchas.md +348 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/configuration/tasks.md +285 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/environment/RULE.md +96 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/environment/gotchas.md +141 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/environment/modes.md +101 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/filtering/RULE.md +148 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/filtering/patterns.md +152 -0
- package/dist/skills/frameworks/turborepo/turborepo/references/watch/RULE.md +99 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/docs/README.md +20 -0
- package/docs/reference/dp-requirements.md +210 -0
- package/docs/runbooks/dp-cli-scaffolding.md +187 -0
- package/package.json +24 -50
- package/.eslintignore +0 -4
- package/.eslintrc +0 -127
- package/.prettierignore +0 -4
- package/.prettierrc +0 -7
- package/bin/abstractions/builder.d.ts +0 -4
- package/bin/abstractions/builder.js +0 -7
- package/bin/builders/dotnet/base.d.ts +0 -18
- package/bin/builders/dotnet/base.js +0 -47
- package/bin/builders/dotnet/entity-configuration/index.d.ts +0 -8
- package/bin/builders/dotnet/entity-configuration/index.js +0 -29
- package/bin/builders/dotnet/entity-converter/index.d.ts +0 -8
- package/bin/builders/dotnet/entity-converter/index.js +0 -29
- package/bin/builders/dotnet/entity-model-create/index.d.ts +0 -8
- package/bin/builders/dotnet/entity-model-create/index.js +0 -29
- package/bin/builders/dotnet/entity-model-dto/index.d.ts +0 -8
- package/bin/builders/dotnet/entity-model-dto/index.js +0 -29
- package/bin/builders/dotnet/entity-model-list-item-dto/index.d.ts +0 -8
- package/bin/builders/dotnet/entity-model-list-item-dto/index.js +0 -29
- package/bin/builders/dotnet/entity-model-update/index.d.ts +0 -8
- package/bin/builders/dotnet/entity-model-update/index.js +0 -29
- package/bin/builders/dotnet/entity-search-parameters/index.d.ts +0 -8
- package/bin/builders/dotnet/entity-search-parameters/index.js +0 -29
- package/bin/builders/dotnet/entity-search-query-builder/index.d.ts +0 -8
- package/bin/builders/dotnet/entity-search-query-builder/index.js +0 -29
- package/bin/builders/dotnet/firestore-connector/index.d.ts +0 -8
- package/bin/builders/dotnet/firestore-connector/index.js +0 -29
- package/bin/builders/dotnet/firestore-mapper/index.d.ts +0 -8
- package/bin/builders/dotnet/firestore-mapper/index.js +0 -29
- package/bin/builders/dotnet/types.d.ts +0 -10
- package/bin/builders/dotnet/types.js +0 -3
- package/bin/commands/entity-add/__test__/dotnet/common.d.ts +0 -2
- package/bin/commands/entity-add/__test__/dotnet/common.js +0 -11
- package/bin/commands/entity-add/__test__/dotnet/render.configuration.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.configuration.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.converter.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.converter.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.firestore-connector.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.firestore-connector.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.firestore-mapper.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.firestore-mapper.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.model-create.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.model-create.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.model-dto.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.model-dto.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.model-list-item-dto.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.model-list-item-dto.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.model-update.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.model-update.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.search-parameters.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.search-parameters.spec.js +0 -22
- package/bin/commands/entity-add/__test__/dotnet/render.search-query.spec.d.ts +0 -1
- package/bin/commands/entity-add/__test__/dotnet/render.search-query.spec.js +0 -22
- package/bin/commands/entity-add/index.d.ts +0 -26
- package/bin/commands/entity-add/index.js +0 -44
- package/bin/logging/index.d.ts +0 -8
- package/bin/logging/index.js +0 -28
- package/bin/providers/rendering/base.d.ts +0 -3
- package/bin/providers/rendering/base.js +0 -7
- package/bin/providers/rendering/factory.d.ts +0 -5
- package/bin/providers/rendering/factory.js +0 -16
- package/bin/providers/rendering/handlebars.d.ts +0 -4
- package/bin/providers/rendering/handlebars.js +0 -16
- package/bin/renderer/index.d.ts +0 -6
- package/bin/renderer/index.js +0 -27
- package/bin/run.d.ts +0 -2
- package/bin/run.js +0 -70
- package/bin/services/folders.d.ts +0 -1
- package/bin/services/folders.js +0 -31
- package/bin/types/commands.d.ts +0 -5
- package/bin/types/commands.js +0 -3
- package/bin/utils/collections.d.ts +0 -1
- package/bin/utils/collections.js +0 -6
- package/bin/utils/files.d.ts +0 -3
- package/bin/utils/files.js +0 -19
- package/bin/utils/strings.d.ts +0 -4
- package/bin/utils/strings.js +0 -22
- package/bin/utils/text.d.ts +0 -1
- package/bin/utils/text.js +0 -8
- package/em-cli +0 -0
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.configuration.spec.ts.snap +0 -49
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.converter.spec.ts.snap +0 -53
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.firestore-connector.spec.ts.snap +0 -20
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.firestore-mapper.spec.ts.snap +0 -29
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.model-create.spec.ts.snap +0 -10
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.model-dto.spec.ts.snap +0 -9
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.model-list-item-dto.spec.ts.snap +0 -11
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.model-update.spec.ts.snap +0 -11
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.search-parameters.spec.ts.snap +0 -29
- package/src/commands/entity-add/__test__/dotnet/__snapshots__/render.search-query.spec.ts.snap +0 -42
- package/templates/dotnet/NewEntity/Configuration/<PluralizedEntity>Configuration.cs.template +0 -48
- package/templates/dotnet/NewEntity/Connectors/<PluralizedEntity>FirestoreConnector.cs.template +0 -15
- package/templates/dotnet/NewEntity/Converters/<PluralizedEntity>Converter.cs.template +0 -48
- package/templates/dotnet/NewEntity/Mappers/<PluralizedEntity>FirestoreMapper.cs.template +0 -25
- package/templates/dotnet/NewEntity/Models/<Entity>CreateInput.cs.template +0 -6
- package/templates/dotnet/NewEntity/Models/<Entity>Dto.cs.template +0 -5
- package/templates/dotnet/NewEntity/Models/<Entity>ListItemDto.cs.template +0 -6
- package/templates/dotnet/NewEntity/Models/<Entity>UpdateInput.cs.template +0 -6
- package/templates/dotnet/NewEntity/Search/<PluralizedEntity>QueryBuilder.cs.template +0 -38
- package/templates/dotnet/NewEntity/Search/<PluralizedEntity>SearchParameters.cs.template +0 -24
- package/tsconfig.json +0 -25
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: effect-recoverable-actions
|
|
3
|
+
description: |
|
|
4
|
+
Apply Effect-specific recoverability guidance on top of backend-recoverable-actions.
|
|
5
|
+
Use when an Effect backend flow chains dependent operations, especially DB writes
|
|
6
|
+
plus external calls, and needs transaction, retry, rollback, compensation, or
|
|
7
|
+
failure-path testing strategy. Do not use for simple single-step reads or writes.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Effect Recoverable Actions
|
|
11
|
+
|
|
12
|
+
Use this skill with `$backend-recoverable-actions`, `$effect-backend-structure`, and `$effect-best-practices`.
|
|
13
|
+
|
|
14
|
+
The agnostic skill owns the recovery model:
|
|
15
|
+
|
|
16
|
+
- step classification
|
|
17
|
+
- transaction boundaries
|
|
18
|
+
- retry scope
|
|
19
|
+
- compensation and durable repair
|
|
20
|
+
- failure-path testing
|
|
21
|
+
|
|
22
|
+
This skill adds the Effect-specific primitives and testing expectations.
|
|
23
|
+
|
|
24
|
+
## Workflow
|
|
25
|
+
|
|
26
|
+
1. Identify the backend root from the current repo; do not assume a monorepo path.
|
|
27
|
+
2. Read the nearest relevant `AGENTS.md` files.
|
|
28
|
+
3. Read `$backend-recoverable-actions` plus its strategy and test matrices.
|
|
29
|
+
4. Run `effect-solutions show error-handling` and `effect-solutions show testing`.
|
|
30
|
+
5. Check local `opensrc` source when transaction, retry, accumulation, or control-flow behavior matters.
|
|
31
|
+
6. Enumerate the action steps in order.
|
|
32
|
+
7. Choose the failure strategy before writing code.
|
|
33
|
+
8. Add failure-path `@effect/vitest` tests before considering the action complete.
|
|
34
|
+
|
|
35
|
+
## Effect Hard Rules
|
|
36
|
+
|
|
37
|
+
- DB-only multi-write groups should use `SqlClient.withTransaction(...)`.
|
|
38
|
+
- Standardize on action-level transaction wrapping. Do not invent custom transaction plumbing in feature code.
|
|
39
|
+
- Treat nested transaction/savepoint behavior as background knowledge, not the default authoring model.
|
|
40
|
+
- Cross-system flows cannot pretend DB rollback will undo auth providers, email, queues, or other external writes.
|
|
41
|
+
- Retries must be explicit and step-local through `retry` or `retryOrElse`.
|
|
42
|
+
- Prefer `catchTag` / `catchTags` for selective recovery.
|
|
43
|
+
- Prefer `when`, `unless`, `match`, and `matchEffect` when the control-flow choice carries recovery meaning.
|
|
44
|
+
- Use `partition`, `validateAll`, or `Effect.all(..., { mode: ... })` only for preflight, batch validation, or deliberately parallel collection phases.
|
|
45
|
+
- Use typed yieldable errors with `Schema.TaggedError` for recoverable failures.
|
|
46
|
+
- `acquireUseRelease` and `ensuring` are cleanup/finalization primitives, not substitutes for business rollback.
|
|
47
|
+
- Do not teach `Effect.withExecutionPlan` as default recoverability guidance while it is experimental.
|
|
48
|
+
|
|
49
|
+
## References
|
|
50
|
+
|
|
51
|
+
- `references/source-backed-primitives.md` for exact Effect surfaces
|
|
52
|
+
- `references/strategy-matrix.md` for Effect-specific strategy examples
|
|
53
|
+
- `references/test-matrix.md` for Effect-specific test expectations
|
|
54
|
+
- `references/flow-examples.md` for generic Effect flow examples
|
|
55
|
+
|
|
56
|
+
## Output Checklist
|
|
57
|
+
|
|
58
|
+
- `$backend-recoverable-actions` was applied
|
|
59
|
+
- each step boundary has an explicit strategy
|
|
60
|
+
- DB-only multi-write groups use one transaction boundary
|
|
61
|
+
- cross-system steps have a compensation or durable repair story
|
|
62
|
+
- retries are narrow, explicit, and only for transient idempotent steps
|
|
63
|
+
- expected recoverable failures stay typed
|
|
64
|
+
- failure-path tests cover the chosen recovery model
|
|
65
|
+
- no silent partial-write risk remains undocumented
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Effect Recoverable Actions"
|
|
3
|
+
short_description: "Recoverable multi-step Effect action flows"
|
|
4
|
+
default_prompt: "Use $backend-recoverable-actions alongside $effect-recoverable-actions for Effect backend flows that chain multiple dependent operations and need explicit transaction, retry, rollback, compensation, or failure-path testing strategy."
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Effect Flow Examples
|
|
2
|
+
|
|
3
|
+
Use these generic flow shapes as grounding examples.
|
|
4
|
+
|
|
5
|
+
## Role Change
|
|
6
|
+
|
|
7
|
+
Shape:
|
|
8
|
+
|
|
9
|
+
- preflight membership lookup and role checks
|
|
10
|
+
- external auth-provider role mutation
|
|
11
|
+
- local audit insert
|
|
12
|
+
- optional local notification insert
|
|
13
|
+
|
|
14
|
+
Risk:
|
|
15
|
+
|
|
16
|
+
- if the local DB write fails after the auth-provider mutation, the external state already changed
|
|
17
|
+
|
|
18
|
+
Guidance:
|
|
19
|
+
|
|
20
|
+
- do not pretend DB rollback covers the auth provider
|
|
21
|
+
- force an explicit compensation or durable repair story
|
|
22
|
+
- keep expected recoverable failures typed
|
|
23
|
+
|
|
24
|
+
## Member Lifecycle Update
|
|
25
|
+
|
|
26
|
+
Shape:
|
|
27
|
+
|
|
28
|
+
- preflight member lookup and guard checks
|
|
29
|
+
- member active-state update
|
|
30
|
+
- session revocation
|
|
31
|
+
|
|
32
|
+
Risk:
|
|
33
|
+
|
|
34
|
+
- if later durable work fails, the lifecycle transition can partially apply
|
|
35
|
+
|
|
36
|
+
Guidance:
|
|
37
|
+
|
|
38
|
+
- make the transaction and step-boundary story explicit
|
|
39
|
+
- default to one transaction boundary for DB-only multi-write groups
|
|
40
|
+
|
|
41
|
+
## Bootstrap and Resolve
|
|
42
|
+
|
|
43
|
+
Shape:
|
|
44
|
+
|
|
45
|
+
- resolve session
|
|
46
|
+
- resolve active member
|
|
47
|
+
- maybe activate an organization
|
|
48
|
+
- maybe bootstrap an organization
|
|
49
|
+
- follow-up identity resolution
|
|
50
|
+
|
|
51
|
+
Risk:
|
|
52
|
+
|
|
53
|
+
- bootstrap-related work can succeed and later resolution can still fail or return incomplete state
|
|
54
|
+
|
|
55
|
+
Guidance:
|
|
56
|
+
|
|
57
|
+
- make recoverable bootstrap sequencing explicit
|
|
58
|
+
- separate preflight, external mutation, and follow-up resolution steps
|
|
59
|
+
- preserve clear failure semantics rather than silently collapsing distinct states
|
|
60
|
+
|
|
61
|
+
## Canonical DB-Only Shape
|
|
62
|
+
|
|
63
|
+
Use this as the default shape for a recoverable DB-only multi-step Effect action:
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
import { SqlClient } from "@effect/sql"
|
|
67
|
+
import * as Effect from "effect/Effect"
|
|
68
|
+
|
|
69
|
+
export const performAction = Effect.fn("Feature.performAction")(function* (input: Input) {
|
|
70
|
+
const sql = yield* SqlClient.SqlClient
|
|
71
|
+
const repoA = yield* RepoA
|
|
72
|
+
const repoB = yield* RepoB
|
|
73
|
+
|
|
74
|
+
// 1. Preflight before the durable mutation group starts.
|
|
75
|
+
const state = yield* repoA.loadPreflight(input.id)
|
|
76
|
+
if (!state) {
|
|
77
|
+
return yield* new EntityNotFoundError({ id: input.id, message: "Entity not found." })
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// 2. Keep the commit path sequential and inside one transaction boundary.
|
|
81
|
+
return yield* sql.withTransaction(
|
|
82
|
+
Effect.gen(function* () {
|
|
83
|
+
yield* repoA.writeStepOne(...)
|
|
84
|
+
yield* repoB.writeStepTwo(...)
|
|
85
|
+
return yield* repoA.loadResult(...)
|
|
86
|
+
}),
|
|
87
|
+
)
|
|
88
|
+
})
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Default test shape:
|
|
92
|
+
|
|
93
|
+
- unit test with fake repos/services to inject failure at each step
|
|
94
|
+
- integration test proving the DB transaction actually rolls back on later failure
|
|
95
|
+
- explicit assertion for the compensation or repair path when external work is involved
|
|
96
|
+
|
|
97
|
+
## Canonical Cross-System Shape
|
|
98
|
+
|
|
99
|
+
Use this as the default shape for an Effect action that touches DB, an auth provider, and email:
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
import { SqlClient } from "@effect/sql"
|
|
103
|
+
import * as Effect from "effect/Effect"
|
|
104
|
+
|
|
105
|
+
export const performCrossSystemAction = Effect.fn("Feature.performCrossSystemAction")(
|
|
106
|
+
function* (input: Input) {
|
|
107
|
+
const sql = yield* SqlClient.SqlClient
|
|
108
|
+
const repo = yield* Repo
|
|
109
|
+
const authClient = yield* AuthClient
|
|
110
|
+
const emailClient = yield* EmailClient
|
|
111
|
+
|
|
112
|
+
// 1. Preflight before any durable mutation starts.
|
|
113
|
+
const state = yield* repo.loadPreflight(input.id)
|
|
114
|
+
if (!state) {
|
|
115
|
+
return yield* new EntityNotFoundError({ id: input.id, message: "Entity not found." })
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// 2. Keep local durable writes atomic.
|
|
119
|
+
const committed = yield* sql.withTransaction(
|
|
120
|
+
Effect.gen(function* () {
|
|
121
|
+
yield* repo.insertAuditRow(...)
|
|
122
|
+
yield* repo.insertRepairMarker(...)
|
|
123
|
+
return yield* repo.loadCommittedState(...)
|
|
124
|
+
}),
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
// 3. External writes are outside DB rollback. Handle them explicitly.
|
|
128
|
+
yield* authClient.updateMemberRole(...).pipe(
|
|
129
|
+
Effect.catchTag("AuthProviderOperationError", (error) =>
|
|
130
|
+
Effect.fail(
|
|
131
|
+
new CrossSystemRepairRequiredError({
|
|
132
|
+
message: "Local state committed but auth-provider sync failed.",
|
|
133
|
+
cause: error.message,
|
|
134
|
+
}),
|
|
135
|
+
),
|
|
136
|
+
),
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
// 4. Email delivery needs its own explicit policy.
|
|
140
|
+
yield* emailClient.send(...).pipe(
|
|
141
|
+
Effect.catchTag("EmailSendError", () => repo.markEmailRepairRequired(committed.id)),
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
return committed
|
|
145
|
+
},
|
|
146
|
+
)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
What this example is teaching:
|
|
150
|
+
|
|
151
|
+
- one DB transaction for local atomic writes
|
|
152
|
+
- no claim that DB rollback undoes auth-provider or email work
|
|
153
|
+
- explicit typed failure or repair state for auth-provider sync failure
|
|
154
|
+
- explicit delivery policy for email instead of pretending it is transactional
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Source-Backed Primitives
|
|
2
|
+
|
|
3
|
+
Use local `opensrc` source to verify these Effect recoverability primitives.
|
|
4
|
+
|
|
5
|
+
## Transactions
|
|
6
|
+
|
|
7
|
+
- `@effect/sql` exposes `SqlClient.withTransaction(...)`.
|
|
8
|
+
- `SqlClient.withTransaction(...)` widens the error channel with `SqlError`.
|
|
9
|
+
- The internal SQL client implementation uses begin / commit / rollback and nested savepoints through `TransactionConnection`.
|
|
10
|
+
- The `sql-drizzle` tests show Drizzle queries participate in the transaction and roll back on failure.
|
|
11
|
+
- Those guarantees apply to work that stays inside the transaction-aware Effect/SQL context. Work escaped into plain promises or remote callbacks needs separate care.
|
|
12
|
+
|
|
13
|
+
Implication for Effect backends:
|
|
14
|
+
|
|
15
|
+
- teach action-level transaction wrapping
|
|
16
|
+
- do not teach manual savepoint orchestration as the primary authoring model
|
|
17
|
+
- remember that transaction wrappers can change the action error type
|
|
18
|
+
|
|
19
|
+
## Yieldable typed errors
|
|
20
|
+
|
|
21
|
+
- `Cause.YieldableError` is explicitly yieldable in `Effect.gen`.
|
|
22
|
+
- `Schema.TaggedError` extends a yieldable error base.
|
|
23
|
+
|
|
24
|
+
Implication for Effect backends:
|
|
25
|
+
|
|
26
|
+
- recoverable action-flow failures should stay typed
|
|
27
|
+
- typed yieldable errors are valid directly inside generator flows
|
|
28
|
+
|
|
29
|
+
## Recovery operators
|
|
30
|
+
|
|
31
|
+
These are present in `Effect` source and are fair game for this skill:
|
|
32
|
+
|
|
33
|
+
- `catchTag`
|
|
34
|
+
- `catchTags`
|
|
35
|
+
- `retry`
|
|
36
|
+
- `retryOrElse`
|
|
37
|
+
|
|
38
|
+
Implication for Effect backends:
|
|
39
|
+
|
|
40
|
+
- prefer selective typed recovery over generic `catchAll`
|
|
41
|
+
- keep retries narrow and explicit
|
|
42
|
+
|
|
43
|
+
## Control flow
|
|
44
|
+
|
|
45
|
+
These are present in `Effect` source:
|
|
46
|
+
|
|
47
|
+
- `when`
|
|
48
|
+
- `unless`
|
|
49
|
+
- `match`
|
|
50
|
+
- `matchEffect`
|
|
51
|
+
|
|
52
|
+
Implication for Effect backends:
|
|
53
|
+
|
|
54
|
+
- use them when the control-flow choice carries recovery meaning
|
|
55
|
+
- keep commit-path sequencing obvious
|
|
56
|
+
|
|
57
|
+
## Error accumulation and parallel behavior
|
|
58
|
+
|
|
59
|
+
These are present in `Effect` source:
|
|
60
|
+
|
|
61
|
+
- `partition`
|
|
62
|
+
- `validateAll`
|
|
63
|
+
- `Effect.all` with default / `either` / `validate` modes
|
|
64
|
+
- `parallelErrors`
|
|
65
|
+
|
|
66
|
+
Important source-backed semantics:
|
|
67
|
+
|
|
68
|
+
- `Effect.all` short-circuits by default
|
|
69
|
+
- `Effect.all(..., { mode: "either" })` runs all effects and returns `Either` results
|
|
70
|
+
- `Effect.all(..., { mode: "validate" })` runs all effects and returns accumulated `Option` failures
|
|
71
|
+
- `validateAll` accumulates failures but loses successes if any failures exist
|
|
72
|
+
- `partition` keeps both failures and successes
|
|
73
|
+
|
|
74
|
+
Practical choice in Effect backends:
|
|
75
|
+
|
|
76
|
+
- use `validateAll` when you want "all successes or the full set of failures" in a preflight phase
|
|
77
|
+
- use `partition` when you need successes and failures kept separately
|
|
78
|
+
- use `Effect.all(..., { mode: "either" | "validate" })` when the work is naturally concurrent and the per-branch result shape matters
|
|
79
|
+
|
|
80
|
+
Implication for Effect backends:
|
|
81
|
+
|
|
82
|
+
- use these in preflight, batch validation, or deliberate parallel collection phases
|
|
83
|
+
- do not hide commit-path mutation semantics behind them
|
|
84
|
+
|
|
85
|
+
## Cleanup vs rollback
|
|
86
|
+
|
|
87
|
+
These are present in `Effect` source:
|
|
88
|
+
|
|
89
|
+
- `acquireUseRelease`
|
|
90
|
+
- `ensuring`
|
|
91
|
+
|
|
92
|
+
Implication for Effect backends:
|
|
93
|
+
|
|
94
|
+
- they are cleanup/finalization primitives
|
|
95
|
+
- they are not automatic business rollback or compensation
|
|
96
|
+
|
|
97
|
+
## Adjacent but out of scope
|
|
98
|
+
|
|
99
|
+
- `Effect.withExecutionPlan` exists, but source marks it experimental
|
|
100
|
+
|
|
101
|
+
Implication for Effect backends:
|
|
102
|
+
|
|
103
|
+
- mention only as adjacent background
|
|
104
|
+
- do not teach it as the default project recoverability model in v1
|
package/dist/skills/frameworks/effect/effect-recoverable-actions/references/strategy-matrix.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Strategy Matrix
|
|
2
|
+
|
|
3
|
+
Use this table to choose the recovery model before writing code.
|
|
4
|
+
|
|
5
|
+
| Flow shape | Default strategy | Notes |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| DB read + DB write + DB write | One `SqlClient.withTransaction(...)` around the action-local DB mutation group | Keep commit-path sequencing explicit. |
|
|
8
|
+
| DB write + DB write inside nested helpers | One outer `SqlClient.withTransaction(...)` | Effect SQL internals support nested savepoints; author code at the action boundary, not with manual savepoints. |
|
|
9
|
+
| DB + Better Auth mutation | Compensation or durable repair path | DB rollback does not undo Better Auth state. |
|
|
10
|
+
| DB + Better Auth + email | DB transaction only for local writes, then explicit compensation / repair for Better Auth, plus an explicit delivery policy for email | Do not imply a single rollback boundary across all three systems. |
|
|
11
|
+
| DB + email / queue / third-party side effect | Explicit commit boundary plus post-commit recovery story | Decide whether the side effect is best-effort, compensatable, or must create repairable operator state. |
|
|
12
|
+
| Preflight validation over many items | `validateAll`, `partition`, or `Effect.all(..., { mode: "validate" | "either" })` | Use before the commit path, not during it. |
|
|
13
|
+
| Parallel validation or read-only fan-out | `Effect.all` with explicit concurrency, optionally `parallelErrors` | Be explicit about whether you want short-circuiting, `either`, `validate`, or collected parallel errors. |
|
|
14
|
+
| Commit path orchestration | Sequential by default | Introduce concurrency only when the failure semantics stay safe and obvious. |
|
|
15
|
+
|
|
16
|
+
## Classification guide
|
|
17
|
+
|
|
18
|
+
- `preflight`
|
|
19
|
+
Validation, lookups, and checks that can fail before any durable mutation starts.
|
|
20
|
+
- `transactional-db`
|
|
21
|
+
DB writes that must commit or roll back together.
|
|
22
|
+
- `retryable transient integration`
|
|
23
|
+
External call with explicit transient failure handling and safe retry semantics.
|
|
24
|
+
- `compensation-required external`
|
|
25
|
+
External write that cannot be covered by DB rollback.
|
|
26
|
+
- `post-commit follow-up`
|
|
27
|
+
Side effect that happens after the main durable state transition and therefore needs an explicit repair story if it fails.
|
|
28
|
+
|
|
29
|
+
## Approval heuristics
|
|
30
|
+
|
|
31
|
+
- If all durable mutations are in the same DB boundary, use one transaction.
|
|
32
|
+
- If any step mutates external state, write down the compensation or repair story before implementation.
|
|
33
|
+
- If a retry changes business semantics or risks duplicates, do not retry the whole pipeline.
|
|
34
|
+
- If a collection helper hides which steps are concurrent or fail-fast, prefer explicit sequential composition in the commit path.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Test Matrix
|
|
2
|
+
|
|
3
|
+
Every multi-step mutating action needs failure-path coverage, not only happy-path coverage.
|
|
4
|
+
|
|
5
|
+
## Required scenarios
|
|
6
|
+
|
|
7
|
+
- later DB step fails and earlier DB writes are rolled back
|
|
8
|
+
- nested DB helper usage still preserves the outer transaction boundary
|
|
9
|
+
- external step succeeds and a later local step fails, triggering compensation or leaving a deliberate repairable state
|
|
10
|
+
- transient retryable integration step retries only that step
|
|
11
|
+
- non-retryable integration failure surfaces once as a typed error
|
|
12
|
+
- preflight accumulation returns the intended set of validation failures
|
|
13
|
+
- intentionally parallel validation or read fan-out uses the right collection primitive and expected error semantics
|
|
14
|
+
- simple one-step actions are not over-engineered with unnecessary orchestration machinery
|
|
15
|
+
|
|
16
|
+
## Unit-level expectations
|
|
17
|
+
|
|
18
|
+
- fake leaf services and repos should make each failure point injectable
|
|
19
|
+
- tests should assert which step ran and which step did not
|
|
20
|
+
- tests should prove the chosen retry / compensation / transaction story, not just the final error message
|
|
21
|
+
|
|
22
|
+
## Integration-level expectations
|
|
23
|
+
|
|
24
|
+
- verify DB rollback behavior with live layers when the flow relies on transactions
|
|
25
|
+
- verify that public router/action behavior exposes typed expected failures correctly
|
|
26
|
+
- verify that recoverable degraded states are observable when compensation is impossible
|
|
27
|
+
|
|
28
|
+
## Review checklist
|
|
29
|
+
|
|
30
|
+
When reviewing a new multi-step action, ask:
|
|
31
|
+
|
|
32
|
+
- where is the transaction boundary
|
|
33
|
+
- what external writes escape the DB boundary
|
|
34
|
+
- what is the retry scope
|
|
35
|
+
- what is the compensation or repair path
|
|
36
|
+
- which tests prove the story
|