@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,34 @@
|
|
|
1
|
+
# configmaps-secrets: Configuration and Secret Management
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use ConfigMaps for non-sensitive configuration and Secrets for sensitive data. Encrypt secrets at rest with SOPS or External Secrets Operator.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Separating configuration from images enables environment-specific settings without rebuilding. Encrypting secrets prevents credential exposure in Git.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
apiVersion: v1
|
|
11
|
+
kind: ConfigMap
|
|
12
|
+
metadata:
|
|
13
|
+
name: api-config
|
|
14
|
+
data:
|
|
15
|
+
LOG_LEVEL: "info"
|
|
16
|
+
RATE_LIMIT: "100"
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
apiVersion: v1
|
|
20
|
+
kind: Secret
|
|
21
|
+
metadata:
|
|
22
|
+
name: api-secrets
|
|
23
|
+
type: Opaque
|
|
24
|
+
stringData:
|
|
25
|
+
DATABASE_URL: "postgresql://user:pass@db:5432/prod"
|
|
26
|
+
API_KEY: "secret-key"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Techniques:**
|
|
30
|
+
- ConfigMaps: Store non-sensitive configuration data for reusability
|
|
31
|
+
- Secrets: Store sensitive data like passwords and API keys
|
|
32
|
+
- stringData: Use for automatic base64 encoding in YAML
|
|
33
|
+
- Encryption: Encrypt secrets with SOPS before committing to Git
|
|
34
|
+
- Environment refs: Reference via `envFrom` in pod specs for clean injection
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# deployments: Secure Deployments
|
|
2
|
+
|
|
3
|
+
**Guideline:** Configure secure, production-ready deployments with security contexts, resource management, and health probes.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Deployments need security hardening, resource limits, and health checks to prevent privilege escalation, resource exhaustion, and availability issues.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
apiVersion: apps/v1
|
|
11
|
+
kind: Deployment
|
|
12
|
+
metadata:
|
|
13
|
+
name: api
|
|
14
|
+
spec:
|
|
15
|
+
replicas: 3
|
|
16
|
+
template:
|
|
17
|
+
spec:
|
|
18
|
+
securityContext:
|
|
19
|
+
runAsNonRoot: true
|
|
20
|
+
runAsUser: 1000
|
|
21
|
+
fsGroup: 1000
|
|
22
|
+
seccompProfile: {type: RuntimeDefault}
|
|
23
|
+
containers:
|
|
24
|
+
- name: api
|
|
25
|
+
image: ghcr.io/org/api:1.2.3
|
|
26
|
+
securityContext:
|
|
27
|
+
readOnlyRootFilesystem: true
|
|
28
|
+
allowPrivilegeEscalation: false
|
|
29
|
+
capabilities: {drop: [ALL]}
|
|
30
|
+
resources:
|
|
31
|
+
requests: {cpu: 100m, memory: 128Mi}
|
|
32
|
+
limits: {cpu: 500m, memory: 256Mi}
|
|
33
|
+
livenessProbe:
|
|
34
|
+
httpGet: {path: /healthz, port: 3000}
|
|
35
|
+
initialDelaySeconds: 10
|
|
36
|
+
periodSeconds: 10
|
|
37
|
+
readinessProbe:
|
|
38
|
+
httpGet: {path: /readyz, port: 3000}
|
|
39
|
+
initialDelaySeconds: 5
|
|
40
|
+
periodSeconds: 5
|
|
41
|
+
volumeMounts:
|
|
42
|
+
- name: tmp
|
|
43
|
+
mountPath: /tmp
|
|
44
|
+
volumes:
|
|
45
|
+
- name: tmp
|
|
46
|
+
emptyDir: {}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Techniques:**
|
|
50
|
+
- Security context: Set runAsNonRoot and fsGroup for pod-level security
|
|
51
|
+
- Container hardening: Use readOnlyRootFilesystem and drop all capabilities
|
|
52
|
+
- Resource limits: Define requests and limits to prevent resource exhaustion
|
|
53
|
+
- Health probes: Add liveness, readiness, startup probes for reliability
|
|
54
|
+
- Image tagging: Use specific tags, never `latest`, for reproducibility
|
|
55
|
+
- Writable paths: Use emptyDir volumes for writable paths with read-only fs
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# kustomize: Multi-Environment Management
|
|
2
|
+
|
|
3
|
+
**Guideline:** Organize manifests with base resources and environment-specific overlays using strategic merge patches.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Kustomize enables DRY configuration management across environments. Base resources define common configuration while overlays customize for each environment.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
# base/kustomization.yaml
|
|
11
|
+
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
12
|
+
kind: Kustomization
|
|
13
|
+
namespace: default
|
|
14
|
+
commonLabels:
|
|
15
|
+
app.kubernetes.io/name: api
|
|
16
|
+
resources:
|
|
17
|
+
- deployment.yaml
|
|
18
|
+
- service.yaml
|
|
19
|
+
images:
|
|
20
|
+
- name: ghcr.io/org/api
|
|
21
|
+
newTag: 1.2.3
|
|
22
|
+
|
|
23
|
+
# overlays/production/kustomization.yaml
|
|
24
|
+
bases:
|
|
25
|
+
- ../../base
|
|
26
|
+
namespace: production
|
|
27
|
+
patchesStrategicMerge:
|
|
28
|
+
- replica-count.yaml
|
|
29
|
+
- resources-patch.yaml
|
|
30
|
+
configMapGenerator:
|
|
31
|
+
- name: api-config
|
|
32
|
+
literals: [LOG_LEVEL=info, RATE_LIMIT=1000]
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Techniques:**
|
|
36
|
+
- Base resources: Create base/kustomization.yaml with common manifests
|
|
37
|
+
- Environment overlays: Create overlays/<env>/ for environment-specific customization
|
|
38
|
+
- Bases reference: Use bases field to inherit and extend base resources
|
|
39
|
+
- Strategic patches: Apply patchesStrategicMerge for targeted environment differences
|
|
40
|
+
- Config generation: Use configMapGenerator for environment-specific configuration
|
|
41
|
+
- Image management: Manage image tags in kustomization.yaml for consistency
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# network-policies: Network Segmentation with NetworkPolicy
|
|
2
|
+
|
|
3
|
+
**Guideline:** Implement NetworkPolicies to control ingress and egress traffic between pods and namespaces.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Provides network segmentation and least-privilege access control, preventing unauthorized communication between workloads.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
apiVersion: networking.k8s.io/v1
|
|
11
|
+
kind: NetworkPolicy
|
|
12
|
+
metadata:
|
|
13
|
+
name: api-network-policy
|
|
14
|
+
namespace: production
|
|
15
|
+
spec:
|
|
16
|
+
podSelector:
|
|
17
|
+
matchLabels:
|
|
18
|
+
app: api
|
|
19
|
+
policyTypes:
|
|
20
|
+
- Ingress
|
|
21
|
+
- Egress
|
|
22
|
+
ingress:
|
|
23
|
+
- from:
|
|
24
|
+
- namespaceSelector:
|
|
25
|
+
matchLabels:
|
|
26
|
+
name: ingress-nginx
|
|
27
|
+
ports:
|
|
28
|
+
- protocol: TCP
|
|
29
|
+
port: 3000
|
|
30
|
+
egress:
|
|
31
|
+
- to:
|
|
32
|
+
- namespaceSelector:
|
|
33
|
+
matchLabels:
|
|
34
|
+
name: database
|
|
35
|
+
ports:
|
|
36
|
+
- protocol: TCP
|
|
37
|
+
port: 5432
|
|
38
|
+
- to: # Allow DNS
|
|
39
|
+
- namespaceSelector:
|
|
40
|
+
matchLabels:
|
|
41
|
+
name: kube-system
|
|
42
|
+
ports:
|
|
43
|
+
- protocol: UDP
|
|
44
|
+
port: 53
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Techniques:**
|
|
48
|
+
- Pod selection: Use podSelector with matchLabels to target specific pods
|
|
49
|
+
- Policy types: Specify policyTypes for ingress, egress, or both rules
|
|
50
|
+
- Namespace selection: Use namespaceSelector to allow traffic from namespaces
|
|
51
|
+
- DNS allowance: Always allow DNS egress to kube-system for pod resolution
|
|
52
|
+
- Explicit rules: Define exact allowed ports and protocols for security
|
|
53
|
+
- Default deny: NetworkPolicy acts as implicit default-deny by default
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# services: Kubernetes Service Configuration
|
|
2
|
+
|
|
3
|
+
**Guideline:** Create Services with consistent labels and named ports for service discovery.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Services provide stable endpoints for pod communication. Named ports improve readability and allow port changes without updating all references.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
apiVersion: v1
|
|
11
|
+
kind: Service
|
|
12
|
+
metadata:
|
|
13
|
+
name: api
|
|
14
|
+
namespace: production
|
|
15
|
+
labels:
|
|
16
|
+
app: api
|
|
17
|
+
component: backend
|
|
18
|
+
spec:
|
|
19
|
+
type: ClusterIP
|
|
20
|
+
selector:
|
|
21
|
+
app: api
|
|
22
|
+
ports:
|
|
23
|
+
- name: http
|
|
24
|
+
port: 80
|
|
25
|
+
targetPort: http
|
|
26
|
+
protocol: TCP
|
|
27
|
+
sessionAffinity: None
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Techniques:**
|
|
31
|
+
- ClusterIP type: Use ClusterIP for internal service discovery within cluster
|
|
32
|
+
- Selector matching: Match service selector labels exactly with deployment labels
|
|
33
|
+
- Named ports: Use named ports matching container port names for clarity
|
|
34
|
+
- Label consistency: Apply consistent labeling for service organization
|
|
35
|
+
- Port naming: Named ports allow changing container ports without updating all references
|
|
36
|
+
- Discovery: Services provide stable DNS names for pod communication
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# validation: Manifest Validation Commands
|
|
2
|
+
|
|
3
|
+
**Guideline:** Always validate Kubernetes manifests before applying to clusters using dry-run and diff commands.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Validation catches configuration errors, API version mismatches, and unintended changes before they impact running workloads.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Dry-run validation
|
|
11
|
+
kubectl apply --dry-run=server -f deployment.yaml
|
|
12
|
+
|
|
13
|
+
# Kustomize build
|
|
14
|
+
kustomize build k8s/overlays/production
|
|
15
|
+
|
|
16
|
+
# Apply with Kustomize
|
|
17
|
+
kubectl apply -k k8s/overlays/production
|
|
18
|
+
|
|
19
|
+
# Validate with server-side dry-run
|
|
20
|
+
kubectl apply -k k8s/overlays/production --dry-run=server
|
|
21
|
+
|
|
22
|
+
# Diff before applying
|
|
23
|
+
kubectl diff -k k8s/overlays/production
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Techniques:**
|
|
27
|
+
- Server dry-run: Use `--dry-run=server` to validate against cluster API
|
|
28
|
+
- Kustomize build: Run `kustomize build` to verify overlay composition
|
|
29
|
+
- Kubectl diff: Use `kubectl diff` to preview exact changes before applying
|
|
30
|
+
- Manifest validation: Validate both raw manifests and kustomized output
|
|
31
|
+
- Pre-flight checks: Catch configuration errors before they impact workloads
|
|
32
|
+
- Dry-run safety: Server-side dry-run validates against current cluster state
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: lua-guidelines
|
|
3
|
+
description: >-
|
|
4
|
+
Trigger on `.lua` files. Use when writing Lua 5.4+ code. Apply for modules, scripting, table patterns. Keywords: Lua, module pattern, local variables, metatables, coroutines, error handling.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Lua Coding Guidelines
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
|
|
11
|
+
- Lua ≥ 5.4.
|
|
12
|
+
|
|
13
|
+
## Essentials
|
|
14
|
+
|
|
15
|
+
- **Module pattern** - Always `local`, one module per file returning table, see [reference/module-pattern.md](reference/module-pattern.md), [reference/local-variables.md](reference/local-variables.md)
|
|
16
|
+
- **Code organization** - Prefer table-based modules and simple functions, see [reference/module-pattern.md](reference/module-pattern.md), [reference/metatables.md](reference/metatables.md)
|
|
17
|
+
- **Cooperative tasks** - Use coroutines for async patterns, see [reference/coroutines.md](reference/coroutines.md)
|
|
18
|
+
- **Validation** - Validate inputs and handle errors, see [reference/input-validation.md](reference/input-validation.md), [reference/error-handling.md](reference/error-handling.md)
|
|
19
|
+
|
|
20
|
+
## Progressive disclosure
|
|
21
|
+
|
|
22
|
+
- Read [reference/module-pattern.md](reference/module-pattern.md) - When creating reusable modules or organizing code structure
|
|
23
|
+
- Read [reference/local-variables.md](reference/local-variables.md) - When encountering global variable issues or scoping problems
|
|
24
|
+
- Read [reference/metatables.md](reference/metatables.md) - When implementing object-oriented patterns or operator overloading
|
|
25
|
+
- Read [reference/coroutines.md](reference/coroutines.md) - When implementing cooperative multitasking or async patterns
|
|
26
|
+
- Read [reference/input-validation.md](reference/input-validation.md) - When adding type checks or parameter validation
|
|
27
|
+
- Read [reference/error-handling.md](reference/error-handling.md) - When handling errors or implementing fallback logic
|
|
28
|
+
- Read [reference/string-concatenation.md](reference/string-concatenation.md) - When building strings in loops or formatting output
|
|
29
|
+
- Read [reference/idiomatic-patterns.md](reference/idiomatic-patterns.md) - When learning common Lua idioms or patterns
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# coroutines: Coroutines for Cooperative Tasks
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use coroutines for cooperative multitasking, timed actions, and state machines.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Coroutines enable writing sequential code for asynchronous operations without callbacks. Ideal for game timers, animations, and task scheduling.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- Coroutine for timed actions
|
|
11
|
+
function create_timer(duration)
|
|
12
|
+
return coroutine.create(function()
|
|
13
|
+
local elapsed = 0
|
|
14
|
+
while elapsed < duration do
|
|
15
|
+
local dt = coroutine.yield()
|
|
16
|
+
elapsed = elapsed + dt
|
|
17
|
+
end
|
|
18
|
+
return true -- Completed
|
|
19
|
+
end)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
-- Task manager
|
|
23
|
+
local TimerManager = {}
|
|
24
|
+
|
|
25
|
+
function TimerManager:new()
|
|
26
|
+
return setmetatable({timers = {}}, {__index = self})
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
function TimerManager:add_timer(duration, callback)
|
|
30
|
+
local timer = {
|
|
31
|
+
coro = create_timer(duration),
|
|
32
|
+
callback = callback
|
|
33
|
+
}
|
|
34
|
+
table.insert(self.timers, timer)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
function TimerManager:update(dt)
|
|
38
|
+
local i = 1
|
|
39
|
+
while i <= #self.timers do
|
|
40
|
+
local timer = self.timers[i]
|
|
41
|
+
local ok, done = coroutine.resume(timer.coro, dt)
|
|
42
|
+
|
|
43
|
+
if done then
|
|
44
|
+
timer.callback()
|
|
45
|
+
table.remove(self.timers, i)
|
|
46
|
+
else
|
|
47
|
+
i = i + 1
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
-- Usage
|
|
53
|
+
local manager = TimerManager:new()
|
|
54
|
+
manager:add_timer(2.0, function()
|
|
55
|
+
print("Timer fired after 2 seconds")
|
|
56
|
+
end)
|
|
57
|
+
|
|
58
|
+
-- In game loop
|
|
59
|
+
manager:update(dt)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Techniques:**
|
|
63
|
+
- Create coroutine with `coroutine.create`
|
|
64
|
+
- Use `coroutine.yield()` to pause execution
|
|
65
|
+
- Resume with `coroutine.resume(coro, args)`
|
|
66
|
+
- Check status with return values or `coroutine.status`
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# error-handling: Error Handling
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use explicit error return values (value, error) pattern instead of exceptions for expected failures.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Follows Lua conventions. Makes error handling explicit and visible. More appropriate for recoverable errors than `assert()`.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- ✅ Protected call with error handling
|
|
11
|
+
local function load_config(path)
|
|
12
|
+
local f, err = io.open(path, "r")
|
|
13
|
+
if not f then
|
|
14
|
+
return nil, "Failed to open file: " .. err
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
local content = f:read("*all")
|
|
18
|
+
f:close()
|
|
19
|
+
|
|
20
|
+
local config, err = parse_config(content)
|
|
21
|
+
if not config then
|
|
22
|
+
return nil, "Failed to parse config: " .. err
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
return config
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
-- Usage
|
|
29
|
+
local config, err = load_config("config.lua")
|
|
30
|
+
if not config then
|
|
31
|
+
print("Error loading config:", err)
|
|
32
|
+
-- Use defaults
|
|
33
|
+
config = get_default_config()
|
|
34
|
+
end
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**Techniques:**
|
|
38
|
+
- Return `nil, error_message` on failure
|
|
39
|
+
- Return value on success
|
|
40
|
+
- Check first return value before using
|
|
41
|
+
- Use `pcall` for protecting risky operations
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# idiomatic-patterns: Idiomatic Patterns
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use Lua's idiomatic patterns for common operations like ternary expressions, default values, and safe navigation.
|
|
4
|
+
|
|
5
|
+
**Rationale:** These patterns are widely recognized in Lua community, concise, and leverage Lua's truthiness semantics effectively.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- ✅ Ternary operator pattern
|
|
11
|
+
local value = condition and true_value or false_value
|
|
12
|
+
|
|
13
|
+
-- ✅ Default value pattern
|
|
14
|
+
local x = config.x or 0
|
|
15
|
+
local name = user.name or "Anonymous"
|
|
16
|
+
|
|
17
|
+
-- ✅ Safe navigation
|
|
18
|
+
local value = obj and obj.field and obj.field.nested
|
|
19
|
+
|
|
20
|
+
-- ✅ Multiple return values
|
|
21
|
+
local ok, result = pcall(risky_function)
|
|
22
|
+
if ok then
|
|
23
|
+
use_result(result)
|
|
24
|
+
else
|
|
25
|
+
handle_error(result)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
-- ✅ Swap variables
|
|
29
|
+
a, b = b, a
|
|
30
|
+
|
|
31
|
+
-- ✅ Unpack table
|
|
32
|
+
local x, y, z = unpack(position)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Techniques:**
|
|
36
|
+
- Use `and`/`or` for conditional expressions
|
|
37
|
+
- Use `or` for default values
|
|
38
|
+
- Use `and` chain for safe navigation
|
|
39
|
+
- Leverage multiple return values
|
|
40
|
+
- Use tuple assignment for swapping
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# input-validation: Input Validation
|
|
2
|
+
|
|
3
|
+
**Guideline:** Validate function arguments for type, range, and correctness using assertions.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Lua is dynamically typed. Explicit validation catches errors early, provides clear error messages, and documents expectations.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- ✅ Good - validate inputs
|
|
11
|
+
function M.clamp(value, min, max)
|
|
12
|
+
assert(type(value) == "number", "value must be a number")
|
|
13
|
+
assert(type(min) == "number", "min must be a number")
|
|
14
|
+
assert(type(max) == "number", "max must be a number")
|
|
15
|
+
assert(min <= max, "min must be <= max")
|
|
16
|
+
|
|
17
|
+
if value < min then return min end
|
|
18
|
+
if value > max then return max end
|
|
19
|
+
return value
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
-- ✅ Good - type checking
|
|
23
|
+
function M.divide(a, b)
|
|
24
|
+
assert(type(a) == "number", "a must be a number")
|
|
25
|
+
assert(type(b) == "number", "b must be a number")
|
|
26
|
+
assert(b ~= 0, "division by zero")
|
|
27
|
+
return a / b
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
-- ✅ Good - range checking
|
|
31
|
+
function M.set_volume(volume)
|
|
32
|
+
assert(type(volume) == "number", "volume must be a number")
|
|
33
|
+
assert(volume >= 0 and volume <= 1, "volume must be between 0 and 1")
|
|
34
|
+
-- Implementation
|
|
35
|
+
end
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Techniques:**
|
|
39
|
+
- Use `assert()` with descriptive messages
|
|
40
|
+
- Check types with `type()` function
|
|
41
|
+
- Validate numeric ranges and constraints
|
|
42
|
+
- Place validations at function start
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# local-variables: Always Use Local Variables
|
|
2
|
+
|
|
3
|
+
**Guideline:** Declare all variables as `local` to avoid implicit globals.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Global variables pollute the namespace and create hard-to-find bugs. Locals have clearer scope and are easier to reason about.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- ✅ Good - all local
|
|
11
|
+
local function calculate(a, b)
|
|
12
|
+
local result = a + b
|
|
13
|
+
local squared = result * result
|
|
14
|
+
return squared
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
local value = calculate(3, 4)
|
|
18
|
+
|
|
19
|
+
-- ❌ Bad - implicit globals
|
|
20
|
+
function calculate(a, b)
|
|
21
|
+
result = a + b -- Global!
|
|
22
|
+
squared = result * result -- Global!
|
|
23
|
+
return squared
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
value = calculate(3, 4) -- Global!
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Techniques:**
|
|
30
|
+
- Prefix all variable declarations with `local`
|
|
31
|
+
- Prefix all function declarations with `local`
|
|
32
|
+
- Only export through module return table
|
|
33
|
+
- Use linters to catch missing `local` keywords
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# metatables: Metatable Pattern for Simple OO
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use metatables with `__index` for simple object-oriented programming when needed.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Provides class-like behavior with inheritance and methods. Simpler than complex OO frameworks while staying idiomatic to Lua.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- vector.lua
|
|
11
|
+
local Vector = {}
|
|
12
|
+
Vector.__index = Vector
|
|
13
|
+
|
|
14
|
+
-- Constructor
|
|
15
|
+
function Vector:new(x, y)
|
|
16
|
+
local instance = {
|
|
17
|
+
x = x or 0,
|
|
18
|
+
y = y or 0
|
|
19
|
+
}
|
|
20
|
+
return setmetatable(instance, self)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
-- Methods
|
|
24
|
+
function Vector:length()
|
|
25
|
+
return (self.x * self.x + self.y * self.y) ^ 0.5
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
function Vector:normalize()
|
|
29
|
+
local len = self:length()
|
|
30
|
+
if len == 0 then return self end
|
|
31
|
+
self.x = self.x / len
|
|
32
|
+
self.y = self.y / len
|
|
33
|
+
return self
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
function Vector:add(other)
|
|
37
|
+
return Vector:new(self.x + other.x, self.y + other.y)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
-- Usage
|
|
41
|
+
local v1 = Vector:new(3, 4)
|
|
42
|
+
local len = v1:length() -- 5
|
|
43
|
+
local v2 = v1:add(Vector:new(1, 1))
|
|
44
|
+
|
|
45
|
+
return Vector
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Techniques:**
|
|
49
|
+
- Create table with `__index` pointing to itself
|
|
50
|
+
- Use constructor pattern with `setmetatable`
|
|
51
|
+
- Define methods using colon syntax
|
|
52
|
+
- Pre-allocate all fields in constructor
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# module-pattern: Module Pattern
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use table-based module pattern with local module table and single return statement.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Provides clean encapsulation, avoids global namespace pollution, and creates predictable module structure that's easy to reason about.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- math2d.lua
|
|
11
|
+
local M = {}
|
|
12
|
+
|
|
13
|
+
-- Simple function in module
|
|
14
|
+
function M.length(x, y)
|
|
15
|
+
return (x * x + y * y) ^ 0.5
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
function M.distance(x1, y1, x2, y2)
|
|
19
|
+
local dx = x2 - x1
|
|
20
|
+
local dy = y2 - y1
|
|
21
|
+
return M.length(dx, dy)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
function M.normalize(x, y)
|
|
25
|
+
local len = M.length(x, y)
|
|
26
|
+
if len == 0 then return 0, 0 end
|
|
27
|
+
return x / len, y / len
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
return M
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Techniques:**
|
|
34
|
+
- Create local module table `local M = {}`
|
|
35
|
+
- Define functions as `M.function_name`
|
|
36
|
+
- Return module table at end
|
|
37
|
+
- One module per file
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# string-concatenation: String Concatenation
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use `table.concat()` for building strings in loops instead of repeated concatenation.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Repeated `..` in loops creates many intermediate strings. Using `table.concat` is cleaner and more efficient for building strings from many parts.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- ❌ Bad - repeated concatenation creates many strings
|
|
11
|
+
local str = ""
|
|
12
|
+
for i = 1, 1000 do
|
|
13
|
+
str = str .. tostring(i) .. ","
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
-- ✅ Good - table concatenation
|
|
17
|
+
local parts = {}
|
|
18
|
+
for i = 1, 1000 do
|
|
19
|
+
parts[i] = tostring(i)
|
|
20
|
+
end
|
|
21
|
+
local str = table.concat(parts, ",")
|
|
22
|
+
|
|
23
|
+
-- ✅ Good - string.format for simple cases
|
|
24
|
+
local message = string.format("Player %s scored %d points", name, score)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Techniques:**
|
|
28
|
+
- Build array of string parts
|
|
29
|
+
- Use `table.concat(parts, separator)`
|
|
30
|
+
- Use `string.format()` for simple interpolation
|
|
31
|
+
- Avoid `..` in loops
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: lua-opinionated-guidelines
|
|
3
|
+
description: >-
|
|
4
|
+
Trigger on `.lua` files for LuaJIT performance-critical code. Opinionated patterns: JIT-friendly tables, table pre-allocation, cache lookups. Keywords: LuaJIT, JIT optimization, table pre-allocation, cache lookups, stable table shapes.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Lua Opinionated Guidelines (LuaJIT Performance)
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
|
|
11
|
+
- Lua ≥ 5.4 or LuaJIT 2.1.
|
|
12
|
+
|
|
13
|
+
## Essentials
|
|
14
|
+
|
|
15
|
+
- **Module pattern** - Always `local`, one module per file returning table, see [reference/module-pattern.md](reference/module-pattern.md), [reference/local-variables.md](reference/local-variables.md)
|
|
16
|
+
- **Code organization** - Prefer table-based modules and simple functions over deep OO, see [reference/module-pattern.md](reference/module-pattern.md), [reference/metatables.md](reference/metatables.md)
|
|
17
|
+
- **Performance** - Keep tables stable (JIT-friendly), pre-alloc when size known, see [reference/jit-friendly-tables.md](reference/jit-friendly-tables.md), [reference/cache-lookups.md](reference/cache-lookups.md)
|
|
18
|
+
- **Cooperative tasks** - Use coroutines for async patterns, see [reference/coroutines.md](reference/coroutines.md)
|
|
19
|
+
- **Validation** - Validate inputs and handle errors, see [reference/input-validation.md](reference/input-validation.md), [reference/error-handling.md](reference/error-handling.md)
|
|
20
|
+
|
|
21
|
+
## Progressive disclosure
|
|
22
|
+
|
|
23
|
+
- Read [reference/module-pattern.md](reference/module-pattern.md) - When creating reusable modules or organizing code structure
|
|
24
|
+
- Read [reference/local-variables.md](reference/local-variables.md) - When encountering global variable issues or scoping problems
|
|
25
|
+
- Read [reference/metatables.md](reference/metatables.md) - When implementing object-oriented patterns or operator overloading
|
|
26
|
+
- Read [reference/jit-friendly-tables.md](reference/jit-friendly-tables.md) - When optimizing hot paths or improving JIT performance
|
|
27
|
+
- Read [reference/cache-lookups.md](reference/cache-lookups.md) - When reducing table access overhead in performance-critical code
|
|
28
|
+
- Read [reference/coroutines.md](reference/coroutines.md) - When implementing cooperative multitasking or async patterns
|
|
29
|
+
- Read [reference/input-validation.md](reference/input-validation.md) - When adding type checks or parameter validation
|
|
30
|
+
- Read [reference/error-handling.md](reference/error-handling.md) - When handling errors or implementing fallback logic
|
|
31
|
+
- Read [reference/string-concatenation.md](reference/string-concatenation.md) - When building strings in loops or formatting output
|
|
32
|
+
- Read [reference/idiomatic-patterns.md](reference/idiomatic-patterns.md) - When learning common Lua idioms or patterns
|