@xonovex/skills 0.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/.claude-plugin/plugin.json +21 -0
- package/commands/code-align.md +108 -0
- package/commands/code-harden.md +74 -0
- package/commands/code-simplify.md +145 -0
- package/commands/git-commit.md +146 -0
- package/commands/insights-extract.md +109 -0
- package/commands/insights-integrate.md +100 -0
- package/commands/plan-continue.md +167 -0
- package/commands/plan-create.md +107 -0
- package/commands/plan-research.md +113 -0
- package/commands/plan-subplans-create.md +111 -0
- package/commands/plan-tdd-create.md +128 -0
- package/commands/plan-update.md +99 -0
- package/commands/plan-validate.md +100 -0
- package/commands/plan-worktree-abandon.md +104 -0
- package/commands/plan-worktree-create.md +92 -0
- package/commands/plan-worktree-merge.md +132 -0
- package/package.json +44 -0
- package/skills/astro-guidelines/SKILL.md +23 -0
- package/skills/astro-guidelines/reference/accessibility.md +31 -0
- package/skills/astro-guidelines/reference/components.md +42 -0
- package/skills/astro-guidelines/reference/content-collections.md +32 -0
- package/skills/astro-guidelines/reference/islands-architecture.md +26 -0
- package/skills/astro-guidelines/reference/project-structure.md +32 -0
- package/skills/c99-game-opinionated-guidelines/SKILL.md +43 -0
- package/skills/c99-game-opinionated-guidelines/reference/builder-pattern.md +29 -0
- package/skills/c99-game-opinionated-guidelines/reference/coordinate-system.md +27 -0
- package/skills/c99-game-opinionated-guidelines/reference/geometry-pipeline.md +29 -0
- package/skills/c99-game-opinionated-guidelines/reference/math-types.md +31 -0
- package/skills/c99-game-opinionated-guidelines/reference/mesh-types.md +32 -0
- package/skills/c99-game-opinionated-guidelines/reference/physics-patterns.md +28 -0
- package/skills/c99-game-opinionated-guidelines/reference/spatial-structures.md +26 -0
- package/skills/c99-game-opinionated-guidelines/reference/tagged-unions.md +40 -0
- package/skills/c99-game-opinionated-guidelines/reference/vertex-packing.md +38 -0
- package/skills/c99-guidelines/SKILL.md +29 -0
- package/skills/c99-guidelines/reference/compound-literals.md +33 -0
- package/skills/c99-guidelines/reference/const-correctness.md +32 -0
- package/skills/c99-guidelines/reference/designated-initializers.md +32 -0
- package/skills/c99-guidelines/reference/error-handling.md +49 -0
- package/skills/c99-guidelines/reference/inline-functions.md +37 -0
- package/skills/c99-guidelines/reference/memory-management.md +35 -0
- package/skills/c99-opinionated-guidelines/SKILL.md +44 -0
- package/skills/c99-opinionated-guidelines/reference/alignment.md +50 -0
- package/skills/c99-opinionated-guidelines/reference/caller-owns-memory.md +38 -0
- package/skills/c99-opinionated-guidelines/reference/compound-literals.md +33 -0
- package/skills/c99-opinionated-guidelines/reference/const-correctness.md +32 -0
- package/skills/c99-opinionated-guidelines/reference/data-oriented-design.md +42 -0
- package/skills/c99-opinionated-guidelines/reference/designated-initializers.md +32 -0
- package/skills/c99-opinionated-guidelines/reference/error-handling.md +49 -0
- package/skills/c99-opinionated-guidelines/reference/file-naming.md +33 -0
- package/skills/c99-opinionated-guidelines/reference/implementation-variants.md +35 -0
- package/skills/c99-opinionated-guidelines/reference/inline-functions.md +37 -0
- package/skills/c99-opinionated-guidelines/reference/memory-management.md +35 -0
- package/skills/c99-opinionated-guidelines/reference/safety-validations.md +32 -0
- package/skills/c99-opinionated-guidelines/reference/testing-patterns.md +39 -0
- package/skills/cmake-guidelines/SKILL.md +31 -0
- package/skills/cmake-guidelines/reference/compile-options.md +34 -0
- package/skills/cmake-guidelines/reference/fetchcontent.md +32 -0
- package/skills/cmake-guidelines/reference/find-package.md +29 -0
- package/skills/cmake-guidelines/reference/generator-expressions.md +34 -0
- package/skills/cmake-guidelines/reference/installation.md +38 -0
- package/skills/cmake-guidelines/reference/project-structure.md +40 -0
- package/skills/cmake-guidelines/reference/target-types.md +37 -0
- package/skills/cmake-guidelines/reference/testing.md +30 -0
- package/skills/cmake-guidelines/reference/visibility-specifiers.md +32 -0
- package/skills/content-guidelines/SKILL.md +36 -0
- package/skills/content-guidelines/reference/humanize.md +30 -0
- package/skills/content-guidelines/reference/news.md +28 -0
- package/skills/content-guidelines/reference/travelguide.md +31 -0
- package/skills/docker-guidelines/SKILL.md +23 -0
- package/skills/docker-guidelines/reference/docker-compose.md +40 -0
- package/skills/docker-guidelines/reference/layer-caching.md +25 -0
- package/skills/docker-guidelines/reference/multi-stage-builds.md +37 -0
- package/skills/docker-guidelines/reference/production-config.md +32 -0
- package/skills/docker-guidelines/reference/security.md +27 -0
- package/skills/express.js-guidelines/SKILL.md +32 -0
- package/skills/express.js-guidelines/reference/app-setup.md +39 -0
- package/skills/express.js-guidelines/reference/authentication.md +39 -0
- package/skills/express.js-guidelines/reference/controllers.md +49 -0
- package/skills/express.js-guidelines/reference/error-handling.md +54 -0
- package/skills/express.js-guidelines/reference/project-structure.md +29 -0
- package/skills/express.js-guidelines/reference/responses.md +30 -0
- package/skills/express.js-guidelines/reference/routes.md +29 -0
- package/skills/express.js-guidelines/reference/testing.md +39 -0
- package/skills/express.js-guidelines/reference/validation.md +41 -0
- package/skills/general-fp-guidelines/SKILL.md +28 -0
- package/skills/general-oop-guidelines/SKILL.md +28 -0
- package/skills/git-guidelines/SKILL.md +46 -0
- package/skills/git-guidelines/reference/commit.md +32 -0
- package/skills/git-guidelines/reference/merge-resolve.md +38 -0
- package/skills/git-guidelines/reference/worktree-abandon.md +48 -0
- package/skills/git-guidelines/reference/worktree-cleanup.md +40 -0
- package/skills/git-guidelines/reference/worktree-commit.md +46 -0
- package/skills/git-guidelines/reference/worktree-create.md +42 -0
- package/skills/git-guidelines/reference/worktree-merge.md +45 -0
- package/skills/git-guidelines/reference/worktree-validate.md +44 -0
- package/skills/hono-guidelines/SKILL.md +49 -0
- package/skills/hono-guidelines/reference/application-structure.md +53 -0
- package/skills/hono-guidelines/reference/context-storage.md +46 -0
- package/skills/hono-guidelines/reference/cookie-handling.md +63 -0
- package/skills/hono-guidelines/reference/error-handling.md +69 -0
- package/skills/hono-guidelines/reference/middleware-combine.md +47 -0
- package/skills/hono-guidelines/reference/middleware-patterns.md +58 -0
- package/skills/hono-guidelines/reference/platform-runtime.md +41 -0
- package/skills/hono-guidelines/reference/security-middleware.md +60 -0
- package/skills/hono-guidelines/reference/validation-type-safety.md +43 -0
- package/skills/hono-guidelines/reference/websocket-support.md +59 -0
- package/skills/hono-opinionated-guidelines/SKILL.md +49 -0
- package/skills/hono-opinionated-guidelines/reference/application-structure.md +53 -0
- package/skills/hono-opinionated-guidelines/reference/body-limit.md +57 -0
- package/skills/hono-opinionated-guidelines/reference/context-storage.md +46 -0
- package/skills/hono-opinionated-guidelines/reference/controllers.md +38 -0
- package/skills/hono-opinionated-guidelines/reference/cookie-handling.md +63 -0
- package/skills/hono-opinionated-guidelines/reference/error-handling.md +69 -0
- package/skills/hono-opinionated-guidelines/reference/middleware-combine.md +47 -0
- package/skills/hono-opinionated-guidelines/reference/middleware-patterns.md +58 -0
- package/skills/hono-opinionated-guidelines/reference/openapi-explicit-status-codes.md +61 -0
- package/skills/hono-opinionated-guidelines/reference/openapi-inline-handlers.md +56 -0
- package/skills/hono-opinionated-guidelines/reference/openapi-router-hierarchy.md +64 -0
- package/skills/hono-opinionated-guidelines/reference/openapi-spec-generation.md +57 -0
- package/skills/hono-opinionated-guidelines/reference/platform-runtime.md +41 -0
- package/skills/hono-opinionated-guidelines/reference/router-selection.md +34 -0
- package/skills/hono-opinionated-guidelines/reference/security-middleware.md +60 -0
- package/skills/hono-opinionated-guidelines/reference/validation-type-safety.md +43 -0
- package/skills/hono-opinionated-guidelines/reference/websocket-support.md +59 -0
- package/skills/insights-guidelines/SKILL.md +28 -0
- package/skills/insights-guidelines/reference/insights-extract.md +31 -0
- package/skills/insights-guidelines/reference/insights-integrate.md +35 -0
- package/skills/instruction-guidelines/SKILL.md +26 -0
- package/skills/instruction-guidelines/reference/assimilate.md +38 -0
- package/skills/instruction-guidelines/reference/simplify.md +46 -0
- package/skills/instruction-guidelines/reference/sync.md +41 -0
- package/skills/kubernetes-guidelines/SKILL.md +28 -0
- package/skills/kubernetes-guidelines/reference/configmaps-secrets.md +34 -0
- package/skills/kubernetes-guidelines/reference/deployments.md +55 -0
- package/skills/kubernetes-guidelines/reference/kustomize.md +41 -0
- package/skills/kubernetes-guidelines/reference/network-policies.md +53 -0
- package/skills/kubernetes-guidelines/reference/services.md +36 -0
- package/skills/kubernetes-guidelines/reference/validation.md +32 -0
- package/skills/lua-guidelines/SKILL.md +29 -0
- package/skills/lua-guidelines/reference/coroutines.md +66 -0
- package/skills/lua-guidelines/reference/error-handling.md +41 -0
- package/skills/lua-guidelines/reference/idiomatic-patterns.md +40 -0
- package/skills/lua-guidelines/reference/input-validation.md +42 -0
- package/skills/lua-guidelines/reference/local-variables.md +33 -0
- package/skills/lua-guidelines/reference/metatables.md +52 -0
- package/skills/lua-guidelines/reference/module-pattern.md +37 -0
- package/skills/lua-guidelines/reference/string-concatenation.md +31 -0
- package/skills/lua-opinionated-guidelines/SKILL.md +32 -0
- package/skills/lua-opinionated-guidelines/reference/cache-lookups.md +43 -0
- package/skills/lua-opinionated-guidelines/reference/coroutines.md +66 -0
- package/skills/lua-opinionated-guidelines/reference/error-handling.md +41 -0
- package/skills/lua-opinionated-guidelines/reference/idiomatic-patterns.md +40 -0
- package/skills/lua-opinionated-guidelines/reference/input-validation.md +42 -0
- package/skills/lua-opinionated-guidelines/reference/jit-friendly-tables.md +57 -0
- package/skills/lua-opinionated-guidelines/reference/local-variables.md +33 -0
- package/skills/lua-opinionated-guidelines/reference/metatables.md +52 -0
- package/skills/lua-opinionated-guidelines/reference/module-pattern.md +37 -0
- package/skills/lua-opinionated-guidelines/reference/string-concatenation.md +31 -0
- package/skills/moon-guidelines/SKILL.md +30 -0
- package/skills/moon-guidelines/reference/docker-multistage.md +42 -0
- package/skills/moon-guidelines/reference/project-constraints.md +25 -0
- package/skills/moon-guidelines/reference/query-language.md +27 -0
- package/skills/moon-guidelines/reference/tag-based-filtering.md +28 -0
- package/skills/moon-guidelines/reference/task-configuration.md +38 -0
- package/skills/moon-guidelines/reference/task-inheritance.md +30 -0
- package/skills/motion-react-guidelines/SKILL.md +66 -0
- package/skills/motion-react-guidelines/reference/3d-effects.md +35 -0
- package/skills/motion-react-guidelines/reference/entrance.md +36 -0
- package/skills/motion-react-guidelines/reference/exit.md +35 -0
- package/skills/motion-react-guidelines/reference/gestures.md +23 -0
- package/skills/motion-react-guidelines/reference/layout.md +39 -0
- package/skills/motion-react-guidelines/reference/motion-values.md +33 -0
- package/skills/motion-react-guidelines/reference/performance.md +32 -0
- package/skills/motion-react-guidelines/reference/scroll.md +38 -0
- package/skills/motion-react-guidelines/reference/spring-physics.md +40 -0
- package/skills/motion-react-guidelines/reference/stagger.md +34 -0
- package/skills/motion-react-guidelines/reference/svg-path.md +33 -0
- package/skills/motion-react-guidelines/reference/text-effects.md +39 -0
- package/skills/plan-guidelines/SKILL.md +56 -0
- package/skills/plan-guidelines/reference/code-align.md +23 -0
- package/skills/plan-guidelines/reference/code-barrels-remove.md +24 -0
- package/skills/plan-guidelines/reference/code-comments-remove.md +28 -0
- package/skills/plan-guidelines/reference/code-harden.md +30 -0
- package/skills/plan-guidelines/reference/code-shared-extract.md +25 -0
- package/skills/plan-guidelines/reference/code-simplify.md +33 -0
- package/skills/plan-guidelines/reference/code-template-extract.md +34 -0
- package/skills/plan-guidelines/reference/code-template-scaffold.md +36 -0
- package/skills/plan-guidelines/reference/general-research.md +35 -0
- package/skills/plan-guidelines/reference/plan-create.md +37 -0
- package/skills/plan-guidelines/reference/plan-tdd-create.md +44 -0
- package/skills/plan-guidelines/reference/todos.md +39 -0
- package/skills/presentation-guidelines/SKILL.md +25 -0
- package/skills/presentation-guidelines/reference/presentation-create.md +41 -0
- package/skills/presentation-guidelines/reference/presentation-motion-scaffold.md +38 -0
- package/skills/python-guidelines/SKILL.md +32 -0
- package/skills/python-guidelines/reference/async-await-patterns.md +62 -0
- package/skills/python-guidelines/reference/caching-functions.md +47 -0
- package/skills/python-guidelines/reference/dataclasses-type-hints.md +63 -0
- package/skills/python-guidelines/reference/exception-handling.md +72 -0
- package/skills/python-guidelines/reference/generators-comprehensions.md +54 -0
- package/skills/python-guidelines/reference/pathlib-file-ops.md +60 -0
- package/skills/python-guidelines/reference/resource-management.md +58 -0
- package/skills/python-guidelines/reference/string-formatting.md +41 -0
- package/skills/python-guidelines/reference/type-checking.md +47 -0
- package/skills/react-guidelines/SKILL.md +105 -0
- package/skills/react-guidelines/reference/accessibility.md +31 -0
- package/skills/react-guidelines/reference/activity-effect-event.md +42 -0
- package/skills/react-guidelines/reference/component-design.md +57 -0
- package/skills/react-guidelines/reference/hooks.md +39 -0
- package/skills/react-guidelines/reference/migration-anti-patterns.md +33 -0
- package/skills/react-guidelines/reference/migration-deprecations.md +109 -0
- package/skills/react-guidelines/reference/migration-paradigm-shifts.md +33 -0
- package/skills/react-guidelines/reference/migration-typescript.md +95 -0
- package/skills/react-guidelines/reference/new-hooks.md +94 -0
- package/skills/react-guidelines/reference/performance-optimization.md +41 -0
- package/skills/react-guidelines/reference/react-compiler.md +34 -0
- package/skills/react-guidelines/reference/server-components.md +99 -0
- package/skills/react-guidelines/reference/state-management.md +72 -0
- package/skills/react-guidelines/reference/suspense-streaming.md +36 -0
- package/skills/remotion-guidelines/SKILL.md +67 -0
- package/skills/remotion-guidelines/reference/animations.md +121 -0
- package/skills/remotion-guidelines/reference/assets.md +21 -0
- package/skills/remotion-guidelines/reference/captions.md +33 -0
- package/skills/remotion-guidelines/reference/charts.md +35 -0
- package/skills/remotion-guidelines/reference/compositions.md +40 -0
- package/skills/remotion-guidelines/reference/dom-measurement.md +82 -0
- package/skills/remotion-guidelines/reference/gifs.md +33 -0
- package/skills/remotion-guidelines/reference/lottie.md +41 -0
- package/skills/remotion-guidelines/reference/maps.md +26 -0
- package/skills/remotion-guidelines/reference/media.md +39 -0
- package/skills/remotion-guidelines/reference/mediabunny.md +28 -0
- package/skills/remotion-guidelines/reference/sequencing.md +44 -0
- package/skills/remotion-guidelines/reference/text.md +24 -0
- package/skills/remotion-guidelines/reference/three-d.md +33 -0
- package/skills/remotion-guidelines/reference/timing.md +22 -0
- package/skills/remotion-guidelines/reference/transitions.md +52 -0
- package/skills/shell-scripting-guidelines/SKILL.md +31 -0
- package/skills/shell-scripting-guidelines/reference/argument-parsing.md +67 -0
- package/skills/shell-scripting-guidelines/reference/common-patterns.md +46 -0
- package/skills/shell-scripting-guidelines/reference/error-handling.md +62 -0
- package/skills/shell-scripting-guidelines/reference/functions.md +66 -0
- package/skills/shell-scripting-guidelines/reference/idempotency.md +57 -0
- package/skills/shell-scripting-guidelines/reference/parameter-expansion.md +38 -0
- package/skills/shell-scripting-guidelines/reference/posix-compatibility.md +53 -0
- package/skills/shell-scripting-guidelines/reference/quoting.md +42 -0
- package/skills/shell-scripting-guidelines/reference/script-template.md +70 -0
- package/skills/shell-scripting-guidelines/reference/strict-mode.md +41 -0
- package/skills/shell-scripting-guidelines/reference/validation.md +30 -0
- package/skills/skill-guidelines/SKILL.md +33 -0
- package/skills/skill-guidelines/reference/assimilate.md +51 -0
- package/skills/skill-guidelines/reference/create.md +48 -0
- package/skills/skill-guidelines/reference/extract.md +48 -0
- package/skills/skill-guidelines/reference/simplify.md +56 -0
- package/skills/sql-postgresql-guidelines/SKILL.md +31 -0
- package/skills/sql-postgresql-guidelines/reference/constraints.md +47 -0
- package/skills/sql-postgresql-guidelines/reference/cte-patterns.md +42 -0
- package/skills/sql-postgresql-guidelines/reference/data-types.md +46 -0
- package/skills/sql-postgresql-guidelines/reference/indexing.md +45 -0
- package/skills/sql-postgresql-guidelines/reference/jsonb.md +54 -0
- package/skills/sql-postgresql-guidelines/reference/performance.md +46 -0
- package/skills/sql-postgresql-guidelines/reference/role-based-access.md +47 -0
- package/skills/sql-postgresql-guidelines/reference/row-level-security.md +66 -0
- package/skills/strudel-guidelines/SKILL.md +52 -0
- package/skills/strudel-guidelines/reference/arrangement.md +24 -0
- package/skills/strudel-guidelines/reference/conditionals.md +22 -0
- package/skills/strudel-guidelines/reference/effects.md +22 -0
- package/skills/strudel-guidelines/reference/genre-ambient.md +26 -0
- package/skills/strudel-guidelines/reference/genre-harsh.md +21 -0
- package/skills/strudel-guidelines/reference/genre-trance.md +23 -0
- package/skills/strudel-guidelines/reference/layering.md +22 -0
- package/skills/strudel-guidelines/reference/mini-notation.md +74 -0
- package/skills/strudel-guidelines/reference/modulation.md +22 -0
- package/skills/strudel-guidelines/reference/scales-harmony.md +20 -0
- package/skills/strudel-guidelines/reference/sounds.md +89 -0
- package/skills/strudel-guidelines/reference/tempo-timing.md +23 -0
- package/skills/terraform-guidelines/SKILL.md +28 -0
- package/skills/terraform-guidelines/reference/advanced-patterns.md +88 -0
- package/skills/terraform-guidelines/reference/locals.md +53 -0
- package/skills/terraform-guidelines/reference/module-definition.md +81 -0
- package/skills/terraform-guidelines/reference/module-structure.md +51 -0
- package/skills/terraform-guidelines/reference/remote-state.md +38 -0
- package/skills/terraform-guidelines/reference/root-module.md +71 -0
- package/skills/terraform-guidelines/reference/typed-variables.md +90 -0
- package/skills/threejs-guidelines/SKILL.md +38 -0
- package/skills/threejs-guidelines/reference/animation.md +26 -0
- package/skills/threejs-guidelines/reference/cameras-controls.md +26 -0
- package/skills/threejs-guidelines/reference/geometry.md +22 -0
- package/skills/threejs-guidelines/reference/interaction.md +25 -0
- package/skills/threejs-guidelines/reference/lighting-shadows.md +31 -0
- package/skills/threejs-guidelines/reference/loaders.md +29 -0
- package/skills/threejs-guidelines/reference/materials.md +25 -0
- package/skills/threejs-guidelines/reference/math.md +27 -0
- package/skills/threejs-guidelines/reference/node-materials.md +32 -0
- package/skills/threejs-guidelines/reference/patterns.md +29 -0
- package/skills/threejs-guidelines/reference/performance.md +24 -0
- package/skills/threejs-guidelines/reference/physics-vr.md +36 -0
- package/skills/threejs-guidelines/reference/postprocessing.md +26 -0
- package/skills/threejs-guidelines/reference/scene-fundamentals.md +26 -0
- package/skills/threejs-guidelines/reference/shaders.md +28 -0
- package/skills/threejs-guidelines/reference/textures.md +21 -0
- package/skills/threejs-guidelines/reference/webgpu.md +34 -0
- package/skills/typescript-guidelines/SKILL.md +37 -0
- package/skills/typescript-guidelines/reference/async-without-await.md +32 -0
- package/skills/typescript-guidelines/reference/avoid-barrel-exports.md +25 -0
- package/skills/typescript-guidelines/reference/avoid-eslint-disable.md +28 -0
- package/skills/typescript-guidelines/reference/avoid-reexports.md +26 -0
- package/skills/typescript-guidelines/reference/env-access-bracket-notation.md +29 -0
- package/skills/typescript-guidelines/reference/numeric-separator-enforcement.md +30 -0
- package/skills/typescript-guidelines/reference/template-literals-require-string-conversion.md +26 -0
- package/skills/typescript-guidelines/reference/unbound-method-references.md +32 -0
- package/skills/typescript-guidelines/reference/unnecessary-async-keywords.md +37 -0
- package/skills/typescript-to-lua-guidelines/SKILL.md +33 -0
- package/skills/typescript-to-lua-guidelines/reference/avoiding-heavy-features.md +41 -0
- package/skills/typescript-to-lua-guidelines/reference/coroutine-patterns.md +49 -0
- package/skills/typescript-to-lua-guidelines/reference/function-patterns.md +59 -0
- package/skills/typescript-to-lua-guidelines/reference/lua-interop.md +49 -0
- package/skills/typescript-to-lua-guidelines/reference/module-organization.md +42 -0
- package/skills/typescript-to-lua-guidelines/reference/multi-return-functions.md +47 -0
- package/skills/typescript-to-lua-guidelines/reference/namespaces-vs-classes.md +52 -0
- package/skills/typescript-to-lua-guidelines/reference/performance-tips.md +68 -0
- package/skills/typescript-to-lua-guidelines/reference/stable-tables.md +60 -0
- package/skills/typescript-to-lua-guidelines/reference/tsconfig.md +46 -0
- package/skills/typescript-to-lua-guidelines/reference/tstl-decorators.md +61 -0
- package/skills/typescript-to-lua-guidelines/reference/type-safety.md +79 -0
- package/skills/vitest-guidelines/SKILL.md +32 -0
- package/skills/vitest-guidelines/reference/cors-preflight-status-code.md +34 -0
- package/skills/vitest-guidelines/reference/http-testing.md +57 -0
- package/skills/vitest-guidelines/reference/json-response-type-safety.md +40 -0
- package/skills/vitest-guidelines/reference/mock-patterns.md +53 -0
- package/skills/vitest-guidelines/reference/project-references-path-resolution.md +36 -0
- package/skills/vitest-guidelines/reference/test-organization.md +25 -0
- package/skills/vitest-guidelines/reference/timestamp-testing.md +55 -0
- package/skills/vitest-guidelines/reference/type-safety.md +55 -0
- package/skills/vitest-guidelines/reference/typescript-config.md +43 -0
- package/skills/zod-guidelines/SKILL.md +33 -0
- package/skills/zod-guidelines/reference/default-values-output-type.md +63 -0
- package/skills/zod-guidelines/reference/migration-string-validators.md +38 -0
- package/skills/zod-guidelines/reference/migration-v4.md +46 -0
- package/skills/zod-guidelines/reference/schema-organization.md +73 -0
- package/skills/zod-guidelines/reference/validation-patterns.md +37 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-guidelines
|
|
3
|
+
description: >-
|
|
4
|
+
Trigger on `.claude/skills/` directory work, skill documentation creation. Use when creating or managing guideline skills. Apply for extracting patterns, assimilating skills, simplifying verbose skills. Keywords: skill creation, progressive disclosure, SKILL.md, details, pattern extraction, skill assimilation, bullet format.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill Guidelines Management
|
|
8
|
+
|
|
9
|
+
## Core Principles
|
|
10
|
+
|
|
11
|
+
- **Progressive Disclosure** - SKILL.md contains essentials, reference/* contains examples
|
|
12
|
+
- **Project Independence** - Remove project-specific paths, names, domains
|
|
13
|
+
- **Bullet Format** - `- **Rule** - Brief 5-10 word how-to, see [reference/file.md](reference/file.md)`
|
|
14
|
+
- **Style Consistency** - Match existing skill patterns in structure and voice
|
|
15
|
+
|
|
16
|
+
## Skill Structure
|
|
17
|
+
|
|
18
|
+
- **SKILL.md** - Frontmatter, essentials (3-7 bullets), one example, progressive disclosure links
|
|
19
|
+
- **reference/*.md** - Guideline, rationale, how to apply, examples, counter-examples
|
|
20
|
+
|
|
21
|
+
## Operations
|
|
22
|
+
|
|
23
|
+
- **Create from document** - Extract guidelines from URLs or files, see [reference/create.md](reference/create.md)
|
|
24
|
+
- **Extract from codebase** - Analyze code patterns and project instructions, see [reference/extract.md](reference/extract.md)
|
|
25
|
+
- **Assimilate skills** - Merge elements from one skill into another, see [reference/assimilate.md](reference/assimilate.md)
|
|
26
|
+
- **Simplify skills** - Condense verbose SKILL.md to bullet list, see [reference/simplify.md](reference/simplify.md)
|
|
27
|
+
|
|
28
|
+
## Progressive Disclosure
|
|
29
|
+
|
|
30
|
+
- Read [reference/create.md](reference/create.md) - When creating skill from documentation or URL
|
|
31
|
+
- Read [reference/extract.md](reference/extract.md) - When extracting patterns from codebase
|
|
32
|
+
- Read [reference/assimilate.md](reference/assimilate.md) - When augmenting skill with another skill's elements
|
|
33
|
+
- Read [reference/simplify.md](reference/simplify.md) - When condensing verbose skill to bullet format
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# assimilate: Augment Skill with Another Skill's Elements
|
|
2
|
+
|
|
3
|
+
**Guideline:** Extract elements from source skill and integrate into target skill while preserving target's structure, style, and voice.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Skills evolve by importing relevant patterns from other skills while maintaining their established organization and voice.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```markdown
|
|
10
|
+
# Target skill: typescript-guidelines (existing)
|
|
11
|
+
- Type inference with `as const`
|
|
12
|
+
- Strict mode requirements
|
|
13
|
+
- ESM imports
|
|
14
|
+
|
|
15
|
+
# Source skill: zod-guidelines (has relevant patterns)
|
|
16
|
+
- Runtime validation
|
|
17
|
+
- Type inference from schemas
|
|
18
|
+
- Error handling patterns
|
|
19
|
+
|
|
20
|
+
# Extract from source: Type inference pattern
|
|
21
|
+
Source: "Use z.infer to extract types from schemas"
|
|
22
|
+
Target's context: TypeScript inference
|
|
23
|
+
Adapted: "Derive types from Zod schemas with z.infer for runtime-validated types"
|
|
24
|
+
|
|
25
|
+
# Insert into target's "Type Inference" section
|
|
26
|
+
- Type inference with `as const` for literal types
|
|
27
|
+
- Derive types from Zod schemas with z.infer for runtime-validated types
|
|
28
|
+
- Use `satisfies` operator to narrow complex unions
|
|
29
|
+
|
|
30
|
+
# Result: Target skill enhanced with validation pattern while keeping its voice
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Techniques:**
|
|
34
|
+
- Load target and source skills completely, including all detail files
|
|
35
|
+
- Analyze target structure: section order, bullet format, voice, tone
|
|
36
|
+
- Extract relevant patterns from source: guidelines, code examples, rationales
|
|
37
|
+
- Filter elements by aspect (validation, error-handling, testing, etc.)
|
|
38
|
+
- Filter by intensity percentage: 10-30% critical, 30-50% important, 50-70% comprehensive
|
|
39
|
+
- Rewrite source content in target's voice and style
|
|
40
|
+
- Insert into existing sections only, preserving structure
|
|
41
|
+
- Match formatting exactly: spacing, punctuation, capitalization, bullet style
|
|
42
|
+
- Adapt code examples to target's language and patterns
|
|
43
|
+
- Check for duplicates before adding to avoid redundancy
|
|
44
|
+
- Validate all changes preserve target's established organization and tone
|
|
45
|
+
|
|
46
|
+
## When to Apply
|
|
47
|
+
|
|
48
|
+
- Enhancing skill with patterns from related skill
|
|
49
|
+
- Merging complementary guidelines
|
|
50
|
+
- Adding missing aspects from another skill
|
|
51
|
+
- Updating skill with evolved patterns
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# create: Create Guideline Skill from Document
|
|
2
|
+
|
|
3
|
+
**Guideline:** Generate guideline skill with progressive disclosure structure from document file or URL.
|
|
4
|
+
|
|
5
|
+
**Rationale:** External sources (documentation, guides, articles) contain valuable patterns. Converting to skill format makes guidelines accessible during development.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Source: https://example.com/flask-patterns-guide
|
|
11
|
+
# Extract sections: Error Handling, Type Hints, Testing
|
|
12
|
+
# Code examples: JSON validation, decorators, pytest patterns
|
|
13
|
+
|
|
14
|
+
# SKILL.md created with essentials (3-5 bullets + 1 example)
|
|
15
|
+
- **Validation** - Use Marshmallow for JSON schema validation
|
|
16
|
+
- **Error handling** - Define custom exceptions for API errors
|
|
17
|
+
- **Testing** - Use pytest fixtures for database mocking
|
|
18
|
+
- **Type hints** - Add type hints to all functions
|
|
19
|
+
|
|
20
|
+
# Code example showing validation + error handling pattern
|
|
21
|
+
|
|
22
|
+
# Details extracted:
|
|
23
|
+
# details/validation.md - Marshmallow schemas, custom fields
|
|
24
|
+
# details/error-handling.md - Custom exceptions, error responses
|
|
25
|
+
# details/testing.md - Pytest fixtures, mocking patterns
|
|
26
|
+
|
|
27
|
+
# Result: Skill accessible in .claude/skills/flask-patterns/
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Techniques:**
|
|
31
|
+
- Fetch source: WebFetch for URLs, Read for local files
|
|
32
|
+
- Extract guidelines, requirements, rules, patterns, and code examples
|
|
33
|
+
- Parse headings as topic groups, code blocks for language context
|
|
34
|
+
- Identify patterns: do/don't, good/bad, prefer/avoid statements
|
|
35
|
+
- Categorize by topic: performance, architecture, testing, security, etc.
|
|
36
|
+
- Create SKILL.md with 3-7 essential bullets and one representative example
|
|
37
|
+
- Extract detailed explanations and code to details/{topic}.md files
|
|
38
|
+
- Use bullet format: `- **Rule** - Brief how-to, see [details/file.md](details/file.md)`
|
|
39
|
+
- Validate all references point to existing detail files
|
|
40
|
+
- Remove source-specific paths, project names, and domain references
|
|
41
|
+
- Save to .claude/skills/{name}/ with kebab-case naming
|
|
42
|
+
|
|
43
|
+
## When to Apply
|
|
44
|
+
|
|
45
|
+
- Creating skill from documentation URL
|
|
46
|
+
- Converting style guide to skill format
|
|
47
|
+
- Extracting patterns from blog posts or articles
|
|
48
|
+
- Making external guidelines accessible
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# extract: Extract Skill from Codebase Patterns
|
|
2
|
+
|
|
3
|
+
**Guideline:** Create or update skill by analyzing codebase patterns, project instructions, and source files for reuse.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Codebases contain established patterns that ensure consistency across development and preserve institutional knowledge.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Analyze services/api project
|
|
11
|
+
# Find AGENTS.md: "Express 5+ API servers, route organization, error handling"
|
|
12
|
+
# Glob *.ts files in api/ → Find express imports, error handlers, middleware
|
|
13
|
+
|
|
14
|
+
# Sample patterns from codebase:
|
|
15
|
+
# 1. Routes: All use /api/v1/<resource> pattern
|
|
16
|
+
# 2. Errors: Custom AppError class with status codes
|
|
17
|
+
# 3. Validation: All routes use Zod schemas
|
|
18
|
+
# 4. Testing: Jest with supertest for HTTP assertions
|
|
19
|
+
|
|
20
|
+
# Create SKILL.md with 4 essentials + Express example
|
|
21
|
+
# Details:
|
|
22
|
+
# - details/routing.md (routes, versioning, organization)
|
|
23
|
+
# - details/error-handling.md (AppError, error middleware)
|
|
24
|
+
# - details/validation.md (Zod schemas, SafeParseResult patterns)
|
|
25
|
+
# - details/testing.md (Jest, supertest, mocking)
|
|
26
|
+
|
|
27
|
+
# Result: express-api-patterns skill extracted from codebase
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Techniques:**
|
|
31
|
+
- Find AGENTS.md and CLAUDE.md in source path for project guidelines
|
|
32
|
+
- Glob source files by extension to identify language and file patterns
|
|
33
|
+
- Extract patterns from project docs: section headers, tables, code blocks, architecture
|
|
34
|
+
- Sample source files for common patterns: naming, types, function signatures
|
|
35
|
+
- Detect language: .ts/.tsx → TypeScript, .py → Python, .c/.h → C99, .lua → Lua
|
|
36
|
+
- Categorize patterns: architecture, types, testing, safety, naming conventions
|
|
37
|
+
- Create SKILL.md with 3-5 key essentials, one code example, detail references
|
|
38
|
+
- Create details/{pattern}.md for each category with guideline, rationale, examples
|
|
39
|
+
- Skip patterns already in base skill to avoid duplication
|
|
40
|
+
- Use kebab-case for skill and detail file names
|
|
41
|
+
- Remove project-specific paths and names for reusability
|
|
42
|
+
|
|
43
|
+
## When to Apply
|
|
44
|
+
|
|
45
|
+
- Extracting patterns from project codebase
|
|
46
|
+
- Creating skill from established practices
|
|
47
|
+
- Documenting institutional knowledge
|
|
48
|
+
- Formalizing coding conventions
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# simplify: Condense Verbose Skill to Bullet Format
|
|
2
|
+
|
|
3
|
+
**Guideline:** Reduce SKILL.md by 60-80% to bullet format; move code to details; remove project-specific references.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Verbose skills become hard to scan. Progressive disclosure loads only what's needed during development.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```markdown
|
|
10
|
+
# BEFORE (SKILL.md, verbose 45 lines)
|
|
11
|
+
|
|
12
|
+
## Error Handling
|
|
13
|
+
|
|
14
|
+
When working with Express applications, error handling is crucial for providing meaningful responses to clients. You should create custom error classes that extend the built-in Error class to encapsulate domain-specific errors...
|
|
15
|
+
|
|
16
|
+
[large code example here]
|
|
17
|
+
|
|
18
|
+
## Validation
|
|
19
|
+
|
|
20
|
+
Use Zod for runtime validation of request payloads. Zod provides type-safe schema validation...
|
|
21
|
+
|
|
22
|
+
[large code example here]
|
|
23
|
+
|
|
24
|
+
# AFTER (SKILL.md simplified to 8 lines)
|
|
25
|
+
|
|
26
|
+
- **Error handling** - Define custom AppError class, see [details/error-handling.md]
|
|
27
|
+
- **Validation** - Use Zod schemas for request payload validation, see [details/validation.md]
|
|
28
|
+
- **Testing** - Use Jest + supertest for HTTP assertions, see [details/testing.md]
|
|
29
|
+
|
|
30
|
+
# Code examples moved to details/ files
|
|
31
|
+
# details/error-handling.md - Full AppError implementation
|
|
32
|
+
# details/validation.md - Zod schema patterns
|
|
33
|
+
# details/testing.md - Jest + supertest examples
|
|
34
|
+
|
|
35
|
+
# Reduction: 80% of original size, all content preserved in details
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Techniques:**
|
|
39
|
+
- Read SKILL.md and existing detail files completely
|
|
40
|
+
- Extract code examples to detail files, grouped by topic
|
|
41
|
+
- Remove project-specific paths, names, domains, and URLs
|
|
42
|
+
- Condense prose explanations to bullet format: `- **Rule** - How-to, see [details/file.md]`
|
|
43
|
+
- Remove long paragraphs, code blocks, example sections from main file
|
|
44
|
+
- Keep frontmatter, description, section headings, and short inline snippets
|
|
45
|
+
- Create or update detail files for code examples and detailed explanations
|
|
46
|
+
- Validate all detail file references are correct
|
|
47
|
+
- Target 60-70% reduction for standard simplification
|
|
48
|
+
- Preserve all content by moving to details, don't delete
|
|
49
|
+
- Check for detail file overwrites before writing
|
|
50
|
+
|
|
51
|
+
## When to Apply
|
|
52
|
+
|
|
53
|
+
- SKILL.md over 30 lines with verbose explanations
|
|
54
|
+
- Many code examples clutter the main file
|
|
55
|
+
- Project-specific details need removal for reusability
|
|
56
|
+
- Preparing skill for general distribution
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sql-postgresql-guidelines
|
|
3
|
+
description: >-
|
|
4
|
+
Trigger on `.sql` files, PostgreSQL migrations, schema files. Use when writing PostgreSQL 15+ queries and schemas. Apply for CTEs, indexing, constraints, JSONB, RLS, performance optimization. Keywords: PostgreSQL, SQL, CTEs, GIN index, JSONB, RLS, role-based access, migrations, EXPLAIN ANALYZE, constraints.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# PostgreSQL Coding Guidelines
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
|
|
11
|
+
- PostgreSQL ≥ 15.
|
|
12
|
+
|
|
13
|
+
## Essentials
|
|
14
|
+
|
|
15
|
+
- **Query composition** - Use CTEs to decompose complex queries, name descriptively, see [reference/cte-patterns.md](reference/cte-patterns.md)
|
|
16
|
+
- **Schema design** - Choose precise types, index for access paths, avoid over-indexing, see [reference/data-types.md](reference/data-types.md), [reference/indexing.md](reference/indexing.md)
|
|
17
|
+
- **Data integrity** - Enforce with PK/FK/UNIQUE/CHECK/NOT NULL constraints, see [reference/constraints.md](reference/constraints.md)
|
|
18
|
+
- **Semi-structured data** - Use JSONB with GIN indexes, see [reference/jsonb.md](reference/jsonb.md)
|
|
19
|
+
- **Multi-tenancy** - Apply RLS and role-based access for data isolation, see [reference/row-level-security.md](reference/row-level-security.md), [reference/role-based-access.md](reference/role-based-access.md)
|
|
20
|
+
- **Performance** - Analyze query plans and tune, see [reference/performance.md](reference/performance.md)
|
|
21
|
+
|
|
22
|
+
## Progressive disclosure
|
|
23
|
+
|
|
24
|
+
- Read [reference/cte-patterns.md](reference/cte-patterns.md) - When breaking down complex queries or improving readability
|
|
25
|
+
- Read [reference/data-types.md](reference/data-types.md) - When choosing column types or avoiding type mismatches
|
|
26
|
+
- Read [reference/indexing.md](reference/indexing.md) - When optimizing slow queries or query planning
|
|
27
|
+
- Read [reference/constraints.md](reference/constraints.md) - When enforcing data integrity rules
|
|
28
|
+
- Read [reference/jsonb.md](reference/jsonb.md) - When storing semi-structured or dynamic data
|
|
29
|
+
- Read [reference/row-level-security.md](reference/row-level-security.md) - When implementing multi-tenant data isolation
|
|
30
|
+
- Read [reference/role-based-access.md](reference/role-based-access.md) - When configuring database user permissions
|
|
31
|
+
- Read [reference/performance.md](reference/performance.md) - When analyzing query plans or tuning performance
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# constraints: Database Constraint Patterns
|
|
2
|
+
|
|
3
|
+
**Guideline:** Enforce data integrity at the database level using constraints (PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK, NOT NULL, EXCLUSION). Define referential actions (ON DELETE/UPDATE) for foreign keys.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Database constraints ensure data validity regardless of which application or process modifies the data.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```sql
|
|
10
|
+
-- Primary key
|
|
11
|
+
CREATE TABLE users (
|
|
12
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
13
|
+
email TEXT NOT NULL UNIQUE,
|
|
14
|
+
age INTEGER CHECK (age >= 18)
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
-- Foreign key with cascading delete
|
|
18
|
+
CREATE TABLE orders (
|
|
19
|
+
id UUID PRIMARY KEY,
|
|
20
|
+
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
21
|
+
total NUMERIC(10, 2) NOT NULL CHECK (total >= 0),
|
|
22
|
+
UNIQUE (user_id, id)
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
-- Composite unique constraint
|
|
26
|
+
ALTER TABLE users ADD UNIQUE (email, tenant_id);
|
|
27
|
+
|
|
28
|
+
-- Exclusion constraint for overlapping ranges
|
|
29
|
+
CREATE TABLE bookings (
|
|
30
|
+
id UUID PRIMARY KEY,
|
|
31
|
+
room_id UUID NOT NULL,
|
|
32
|
+
start_time TIMESTAMPTZ NOT NULL,
|
|
33
|
+
end_time TIMESTAMPTZ NOT NULL,
|
|
34
|
+
EXCLUDE USING GIST (
|
|
35
|
+
room_id WITH =,
|
|
36
|
+
tstzrange(start_time, end_time) WITH &&
|
|
37
|
+
)
|
|
38
|
+
);
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Techniques:**
|
|
42
|
+
- Use PRIMARY KEY for unique row identifiers
|
|
43
|
+
- Use FOREIGN KEY with appropriate ON DELETE/UPDATE actions
|
|
44
|
+
- Use UNIQUE for columns requiring uniqueness
|
|
45
|
+
- Use CHECK for value validation and business rules
|
|
46
|
+
- Use NOT NULL for required fields
|
|
47
|
+
- Use EXCLUSION constraints to prevent overlapping ranges or conflicting data
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# cte-patterns: Common Table Expression Patterns
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use CTEs (WITH clauses) to decompose complex queries into readable, named components. Prefer CTEs over subqueries for better organization.
|
|
4
|
+
|
|
5
|
+
**Rationale:** CTEs improve readability by naming intermediate result sets, making complex queries easier to understand and maintain.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```sql
|
|
10
|
+
-- Simple CTE
|
|
11
|
+
WITH active_users AS (
|
|
12
|
+
SELECT id, email, name FROM users
|
|
13
|
+
WHERE status = 'active' AND deleted_at IS NULL
|
|
14
|
+
)
|
|
15
|
+
SELECT * FROM active_users WHERE email LIKE '%@example.com' ORDER BY name;
|
|
16
|
+
|
|
17
|
+
-- Multiple CTEs chained
|
|
18
|
+
WITH active_users AS (SELECT id FROM users WHERE status = 'active'),
|
|
19
|
+
orders_last_30d AS (
|
|
20
|
+
SELECT user_id, count(*) AS order_count, sum(total) AS total_amount
|
|
21
|
+
FROM orders WHERE created_at >= now() - interval '30 days'
|
|
22
|
+
GROUP BY user_id
|
|
23
|
+
)
|
|
24
|
+
SELECT u.id, u.email, coalesce(o.order_count, 0) AS orders
|
|
25
|
+
FROM active_users u LEFT JOIN orders_last_30d o ON o.user_id = u.id
|
|
26
|
+
ORDER BY orders DESC;
|
|
27
|
+
|
|
28
|
+
-- Recursive CTE for hierarchies
|
|
29
|
+
WITH RECURSIVE org_tree AS (
|
|
30
|
+
SELECT id, name, manager_id, 1 AS level FROM employees WHERE manager_id IS NULL
|
|
31
|
+
UNION ALL
|
|
32
|
+
SELECT e.id, e.name, e.manager_id, ot.level + 1
|
|
33
|
+
FROM employees e INNER JOIN org_tree ot ON e.manager_id = ot.id
|
|
34
|
+
)
|
|
35
|
+
SELECT * FROM org_tree ORDER BY level, name;
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Techniques:**
|
|
39
|
+
- Name CTEs descriptively (active_users, not cte1)
|
|
40
|
+
- Use CTEs to decompose multi-step logic
|
|
41
|
+
- Reference CTEs multiple times to avoid repetition
|
|
42
|
+
- Use UNION ALL for recursive base + recursive case
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# data-types: PostgreSQL Data Type Best Practices
|
|
2
|
+
|
|
3
|
+
**Guideline:** Choose precise, semantically appropriate data types for each column. Use UUID for distributed identifiers, TIMESTAMPTZ for timestamps, NUMERIC for exact decimals, JSONB for semi-structured data, and custom types (ENUMs, DOMAINs) for business logic.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Proper data types ensure data integrity, optimize storage, enable better indexing, and prevent common errors. TIMESTAMPTZ handles timezones correctly, NUMERIC avoids floating-point precision issues, and custom types enforce domain constraints at the database level.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```sql
|
|
10
|
+
-- Precise data types
|
|
11
|
+
CREATE TABLE products (
|
|
12
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
13
|
+
name TEXT NOT NULL,
|
|
14
|
+
price NUMERIC(10, 2) NOT NULL, -- Precise decimal, not FLOAT
|
|
15
|
+
quantity INTEGER NOT NULL CHECK (quantity >= 0),
|
|
16
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(), -- Timezone aware
|
|
17
|
+
metadata JSONB, -- Semi-structured data
|
|
18
|
+
tags TEXT[] DEFAULT '{}', -- Array of strings
|
|
19
|
+
status product_status NOT NULL -- Enum type
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
-- Enum type
|
|
23
|
+
CREATE TYPE product_status AS ENUM ('draft', 'active', 'archived');
|
|
24
|
+
|
|
25
|
+
-- Domain types for validation
|
|
26
|
+
CREATE DOMAIN email AS TEXT
|
|
27
|
+
CHECK (VALUE ~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$');
|
|
28
|
+
|
|
29
|
+
CREATE DOMAIN positive_numeric AS NUMERIC(10, 2)
|
|
30
|
+
CHECK (VALUE >= 0);
|
|
31
|
+
|
|
32
|
+
CREATE TABLE users (
|
|
33
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
34
|
+
email email NOT NULL UNIQUE,
|
|
35
|
+
balance positive_numeric NOT NULL DEFAULT 0
|
|
36
|
+
);
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Techniques:**
|
|
40
|
+
- Use UUID for globally unique identifiers in distributed systems
|
|
41
|
+
- Use TIMESTAMPTZ (not TIMESTAMP) for all timestamps to preserve timezone information
|
|
42
|
+
- Use NUMERIC for monetary values and exact decimals
|
|
43
|
+
- Use ENUMs for small, stable sets of values
|
|
44
|
+
- Use DOMAINs to create reusable constrained types
|
|
45
|
+
- Use JSONB for flexible, semi-structured data
|
|
46
|
+
- Use array types (TEXT[], INTEGER[]) for ordered collections
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# indexing: Index Strategy and Optimization
|
|
2
|
+
|
|
3
|
+
**Guideline:** Create indexes based on actual query patterns and access paths. Use appropriate index types (B-tree, GIN, GiST, BRIN) for different data types and query patterns. Avoid over-indexing as each index has write overhead.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Proper indexing dramatically improves query performance by reducing full table scans. Different index types are optimized for different use cases: B-tree for equality and range queries, GIN for JSONB and arrays, GiST for full-text search, BRIN for large time-series data.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```sql
|
|
10
|
+
-- B-tree index for common queries
|
|
11
|
+
CREATE INDEX idx_users_email ON users(email);
|
|
12
|
+
CREATE INDEX idx_orders_user_id ON orders(user_id);
|
|
13
|
+
|
|
14
|
+
-- Composite index for multi-column queries
|
|
15
|
+
CREATE INDEX idx_orders_user_created ON orders(user_id, created_at DESC);
|
|
16
|
+
|
|
17
|
+
-- Partial index for filtered queries
|
|
18
|
+
CREATE INDEX idx_active_users_email ON users(email)
|
|
19
|
+
WHERE status = 'active' AND deleted_at IS NULL;
|
|
20
|
+
|
|
21
|
+
-- Expression index for computed values
|
|
22
|
+
CREATE INDEX idx_users_lower_email ON users(LOWER(email));
|
|
23
|
+
|
|
24
|
+
-- GIN index for JSONB
|
|
25
|
+
CREATE INDEX idx_products_metadata ON products USING GIN (metadata);
|
|
26
|
+
CREATE INDEX idx_products_tags ON products USING GIN (tags);
|
|
27
|
+
|
|
28
|
+
-- GiST index for full-text search
|
|
29
|
+
CREATE INDEX idx_products_search ON products USING GiST (
|
|
30
|
+
to_tsvector('english', name || ' ' || coalesce(description, ''))
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
-- BRIN index for large time-series data
|
|
34
|
+
CREATE INDEX idx_logs_created_at ON logs USING BRIN (created_at);
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**Techniques:**
|
|
38
|
+
- Create B-tree indexes (default) for frequently queried columns
|
|
39
|
+
- Use partial indexes to index only relevant subsets
|
|
40
|
+
- Use composite indexes for multi-column queries
|
|
41
|
+
- Use expression indexes for computed values
|
|
42
|
+
- Use GIN indexes for JSONB, arrays, and full-text search
|
|
43
|
+
- Use GiST indexes for full-text search with ranking
|
|
44
|
+
- Use BRIN indexes for large, naturally ordered data (timestamps, IDs)
|
|
45
|
+
- Review query plans with EXPLAIN ANALYZE before adding indexes
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# jsonb: JSONB Storage and Querying
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use JSONB (not JSON) for semi-structured data that needs to be queried or indexed. Leverage JSONB operators and functions for efficient querying. Index JSONB columns with GIN indexes.
|
|
4
|
+
|
|
5
|
+
**Rationale:** JSONB provides flexible schema storage while maintaining queryability. It stores data in binary format for faster processing, supports indexing, and provides rich operators for querying nested structures. Prefer JSONB over JSON for all use cases except when preserving exact text formatting is critical.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```sql
|
|
10
|
+
-- Define JSONB table
|
|
11
|
+
CREATE TABLE events (
|
|
12
|
+
id UUID PRIMARY KEY,
|
|
13
|
+
type TEXT NOT NULL,
|
|
14
|
+
data JSONB NOT NULL,
|
|
15
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
-- Query with JSONB operators
|
|
19
|
+
SELECT data->'user'->>'name', data->>'email' FROM events;
|
|
20
|
+
SELECT * FROM events WHERE data @> '{"status": "completed"}';
|
|
21
|
+
SELECT * FROM events WHERE data ? 'user_id';
|
|
22
|
+
SELECT * FROM events WHERE data ?| array['email', 'phone'];
|
|
23
|
+
|
|
24
|
+
-- Build JSONB objects
|
|
25
|
+
SELECT jsonb_build_object(
|
|
26
|
+
'id', id,
|
|
27
|
+
'type', type,
|
|
28
|
+
'timestamp', created_at
|
|
29
|
+
) FROM events;
|
|
30
|
+
|
|
31
|
+
-- Update JSONB fields
|
|
32
|
+
UPDATE events
|
|
33
|
+
SET data = jsonb_set(data, '{status}', '"completed"')
|
|
34
|
+
WHERE id = $1;
|
|
35
|
+
|
|
36
|
+
UPDATE events
|
|
37
|
+
SET data = data - 'temp_field'
|
|
38
|
+
WHERE type = 'cleanup';
|
|
39
|
+
|
|
40
|
+
-- Aggregate to JSONB array
|
|
41
|
+
SELECT jsonb_agg(data) FROM events WHERE type = 'user_action';
|
|
42
|
+
|
|
43
|
+
-- GIN index for fast JSONB queries
|
|
44
|
+
CREATE INDEX idx_events_data ON events USING GIN (data);
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Techniques:**
|
|
48
|
+
- Use JSONB column type for semi-structured data
|
|
49
|
+
- Use `->` operator to extract JSONB values (returns JSONB)
|
|
50
|
+
- Use `->>` operator to extract text values (returns TEXT)
|
|
51
|
+
- Use `@>` operator to check containment
|
|
52
|
+
- Use `?` operator to check key existence
|
|
53
|
+
- Create GIN indexes on JSONB columns for fast querying
|
|
54
|
+
- Use JSONB functions (jsonb_build_object, jsonb_agg, jsonb_set) for manipulation
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# performance: Query Performance Optimization
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use EXPLAIN ANALYZE to understand query execution plans. Avoid N+1 queries by using JOINs. Choose appropriate join types. Limit result sets and use efficient pagination strategies.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Query performance directly impacts application responsiveness and database load. Understanding query plans helps identify bottlenecks. Proper JOIN usage eliminates multiple round-trips. Keyset pagination outperforms OFFSET for large datasets. Limiting result sets reduces memory usage and network transfer.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```sql
|
|
10
|
+
-- EXPLAIN ANALYZE to understand query performance
|
|
11
|
+
EXPLAIN ANALYZE
|
|
12
|
+
SELECT u.email, count(o.id) AS order_count
|
|
13
|
+
FROM users u
|
|
14
|
+
LEFT JOIN orders o ON o.user_id = u.id
|
|
15
|
+
GROUP BY u.id, u.email
|
|
16
|
+
HAVING count(o.id) > 10;
|
|
17
|
+
|
|
18
|
+
-- Use JOINs instead of N+1 queries
|
|
19
|
+
SELECT
|
|
20
|
+
u.*,
|
|
21
|
+
json_agg(o.*) AS orders
|
|
22
|
+
FROM users u
|
|
23
|
+
LEFT JOIN orders o ON o.user_id = u.id
|
|
24
|
+
GROUP BY u.id;
|
|
25
|
+
|
|
26
|
+
-- Limit result sets with WHERE and LIMIT
|
|
27
|
+
SELECT * FROM large_table
|
|
28
|
+
WHERE created_at >= now() - interval '7 days'
|
|
29
|
+
ORDER BY created_at DESC
|
|
30
|
+
LIMIT 100;
|
|
31
|
+
|
|
32
|
+
-- Keyset pagination (cursor-based) for large datasets
|
|
33
|
+
SELECT * FROM products
|
|
34
|
+
WHERE created_at < $last_seen_timestamp
|
|
35
|
+
ORDER BY created_at DESC
|
|
36
|
+
LIMIT 20;
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Techniques:**
|
|
40
|
+
- Use `EXPLAIN ANALYZE` to inspect query execution plans
|
|
41
|
+
- Look for sequential scans where indexes should be used
|
|
42
|
+
- Replace N+1 query patterns with JOINs or aggregation
|
|
43
|
+
- Use appropriate JOIN types (INNER, LEFT, RIGHT, FULL OUTER)
|
|
44
|
+
- Always limit result sets with WHERE clauses and LIMIT
|
|
45
|
+
- Use keyset (cursor-based) pagination instead of OFFSET for large datasets
|
|
46
|
+
- Aggregate related data with JSON functions to reduce round-trips
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# role-based-access: Role-Based Access Control (RBAC)
|
|
2
|
+
|
|
3
|
+
**Guideline:** Create database roles with appropriate permissions and grant them to users. Use roles to enforce least-privilege access at the database level. Define read-only, read-write, and admin roles.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Database-level RBAC provides defense-in-depth security by limiting what each database user can do. It prevents accidental or malicious modifications, supports compliance requirements, and allows different applications or users to have different access levels.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```sql
|
|
10
|
+
-- Create roles
|
|
11
|
+
CREATE ROLE app_readonly;
|
|
12
|
+
CREATE ROLE app_readwrite;
|
|
13
|
+
CREATE ROLE app_admin;
|
|
14
|
+
|
|
15
|
+
-- Grant permissions for read-only role
|
|
16
|
+
GRANT CONNECT ON DATABASE myapp TO app_readonly;
|
|
17
|
+
GRANT USAGE ON SCHEMA public TO app_readonly;
|
|
18
|
+
GRANT SELECT ON ALL TABLES IN SCHEMA public TO app_readonly;
|
|
19
|
+
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
20
|
+
GRANT SELECT ON TABLES TO app_readonly;
|
|
21
|
+
|
|
22
|
+
-- Grant permissions for read-write role
|
|
23
|
+
GRANT CONNECT ON DATABASE myapp TO app_readwrite;
|
|
24
|
+
GRANT USAGE ON SCHEMA public TO app_readwrite;
|
|
25
|
+
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_readwrite;
|
|
26
|
+
GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO app_readwrite;
|
|
27
|
+
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
28
|
+
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_readwrite;
|
|
29
|
+
|
|
30
|
+
-- Grant permissions for admin role
|
|
31
|
+
GRANT ALL PRIVILEGES ON DATABASE myapp TO app_admin;
|
|
32
|
+
|
|
33
|
+
-- Create users and assign roles
|
|
34
|
+
CREATE USER api_user WITH PASSWORD 'secure_password';
|
|
35
|
+
GRANT app_readwrite TO api_user;
|
|
36
|
+
|
|
37
|
+
CREATE USER analyst WITH PASSWORD 'secure_password';
|
|
38
|
+
GRANT app_readonly TO analyst;
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Techniques:**
|
|
42
|
+
- Create roles for different access levels (readonly, readwrite, admin)
|
|
43
|
+
- Grant minimal necessary permissions to each role
|
|
44
|
+
- Use `ALTER DEFAULT PRIVILEGES` to apply permissions to future objects
|
|
45
|
+
- Create database users and assign them to appropriate roles
|
|
46
|
+
- Use `GRANT` to assign roles to users
|
|
47
|
+
- Avoid granting permissions directly to users; use roles instead
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# row-level-security: Row-Level Security (RLS) Implementation
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use Row-Level Security (RLS) policies to enforce tenant isolation and access control at the database level. Set session variables to identify the current tenant/user, and create policies that filter data based on these variables.
|
|
4
|
+
|
|
5
|
+
**Rationale:** RLS provides transparent, centralized access control that applies regardless of how data is accessed. It prevents accidental data leaks between tenants and reduces application-level security logic. Policies are enforced by PostgreSQL itself, making them immune to application bugs.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```sql
|
|
10
|
+
-- Define multi-tenant table
|
|
11
|
+
CREATE TABLE documents (
|
|
12
|
+
id UUID PRIMARY KEY,
|
|
13
|
+
tenant_id UUID NOT NULL,
|
|
14
|
+
title TEXT NOT NULL,
|
|
15
|
+
content TEXT,
|
|
16
|
+
owner_id UUID NOT NULL,
|
|
17
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
-- Enable RLS
|
|
21
|
+
ALTER TABLE documents ENABLE ROW LEVEL SECURITY;
|
|
22
|
+
|
|
23
|
+
-- Create policies for each operation
|
|
24
|
+
CREATE POLICY documents_select_policy ON documents
|
|
25
|
+
FOR SELECT
|
|
26
|
+
USING (tenant_id = current_setting('app.tenant_id')::UUID);
|
|
27
|
+
|
|
28
|
+
CREATE POLICY documents_insert_policy ON documents
|
|
29
|
+
FOR INSERT
|
|
30
|
+
WITH CHECK (
|
|
31
|
+
tenant_id = current_setting('app.tenant_id')::UUID
|
|
32
|
+
AND owner_id = current_setting('app.user_id')::UUID
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
CREATE POLICY documents_update_policy ON documents
|
|
36
|
+
FOR UPDATE
|
|
37
|
+
USING (
|
|
38
|
+
tenant_id = current_setting('app.tenant_id')::UUID
|
|
39
|
+
AND owner_id = current_setting('app.user_id')::UUID
|
|
40
|
+
)
|
|
41
|
+
WITH CHECK (
|
|
42
|
+
tenant_id = current_setting('app.tenant_id')::UUID
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
CREATE POLICY documents_delete_policy ON documents
|
|
46
|
+
FOR DELETE
|
|
47
|
+
USING (
|
|
48
|
+
tenant_id = current_setting('app.tenant_id')::UUID
|
|
49
|
+
AND owner_id = current_setting('app.user_id')::UUID
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
-- Set session variables before queries
|
|
53
|
+
SET app.tenant_id = '550e8400-e29b-41d4-a716-446655440000';
|
|
54
|
+
SET app.user_id = '660e8400-e29b-41d4-a716-446655440000';
|
|
55
|
+
|
|
56
|
+
-- Query automatically filtered by RLS
|
|
57
|
+
SELECT * FROM documents; -- Only sees tenant's documents
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Techniques:**
|
|
61
|
+
- Enable RLS on multi-tenant tables with `ALTER TABLE ... ENABLE ROW LEVEL SECURITY`
|
|
62
|
+
- Create policies for each operation type (SELECT, INSERT, UPDATE, DELETE)
|
|
63
|
+
- Use `USING` clause to filter which rows are visible/modifiable
|
|
64
|
+
- Use `WITH CHECK` clause to validate new/modified rows
|
|
65
|
+
- Set session variables (e.g., `app.tenant_id`, `app.user_id`) before queries
|
|
66
|
+
- Use `current_setting()` in policies to access session variables
|