@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,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: strudel-guidelines
|
|
3
|
+
description: >-
|
|
4
|
+
Trigger on Strudel music generation, `.strudel` files, live coding music tasks. Use when generating algorithmic music with Strudel.cc. Apply for pattern composition, effects processing, genre-specific production, browser-based live coding. Keywords: Strudel, TidalCycles, live coding, algorithmic music, mini-notation, patterns, electronic music, trance, ambient, techno.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Strudel Music Coding Guidelines
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
|
|
11
|
+
- Browser with https://strudel.cc/ (no installation needed)
|
|
12
|
+
- Copy-paste code, Ctrl+Enter to play, Ctrl+. to stop
|
|
13
|
+
|
|
14
|
+
## Essentials
|
|
15
|
+
|
|
16
|
+
- **Tempo** - Set BPM first with `setcpm(BPM/4)`, see [reference/tempo-timing.md](reference/tempo-timing.md)
|
|
17
|
+
- **Mini-notation** - Space-separated sequences, `*` multiply, `/` divide, `<>` alternate, `[]` subdivide, `~` rest, see [reference/mini-notation.md](reference/mini-notation.md)
|
|
18
|
+
- **Layering** - Use `stack()` to combine patterns, each layer independent, see [reference/layering.md](reference/layering.md)
|
|
19
|
+
- **Sounds** - Drums: `bd`, `sd`, `hh`, `oh`, `cp`; Synths: `sine`, `sawtooth`, `square`, `triangle`, see [reference/sounds.md](reference/sounds.md)
|
|
20
|
+
- **Effects** - `.gain()`, `.lpf()`, `.room()`, `.delay()`, `.shape()`, `.crush()`, see [reference/effects.md](reference/effects.md)
|
|
21
|
+
- **Modulation** - `sine.range(a,b).slow(n)` for sweeps, `perlin` for organic variation, see [reference/modulation.md](reference/modulation.md)
|
|
22
|
+
- **Conditional** - `.every(n, fn)`, `.sometimes(fn)`, `.degradeBy(p)` for variation, see [reference/conditionals.md](reference/conditionals.md)
|
|
23
|
+
- **Structure** - Use `.mask()` for sections, `arrange()` for song form, see [reference/arrangement.md](reference/arrangement.md)
|
|
24
|
+
|
|
25
|
+
## Example
|
|
26
|
+
|
|
27
|
+
```javascript
|
|
28
|
+
setcpm(138/4)
|
|
29
|
+
|
|
30
|
+
stack(
|
|
31
|
+
s("bd*4").gain(0.8),
|
|
32
|
+
s("~ cp ~ cp").gain(0.5).room(0.3),
|
|
33
|
+
s("hh*16").gain(0.3).lpf(sine.range(800, 4000).slow(4)),
|
|
34
|
+
note("a2*8").sound("sawtooth").lpf(700).gain(0.5),
|
|
35
|
+
note("<a3 f3 c4 g3>").sound("sawtooth").lpf(2000).room(0.8).gain(0.3)
|
|
36
|
+
)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Progressive Disclosure
|
|
40
|
+
|
|
41
|
+
- Read [reference/mini-notation.md](reference/mini-notation.md) - When learning pattern syntax or fixing notation errors
|
|
42
|
+
- Read [reference/sounds.md](reference/sounds.md) - When selecting instruments or troubleshooting missing sounds
|
|
43
|
+
- Read [reference/effects.md](reference/effects.md) - When applying audio processing or creating textures
|
|
44
|
+
- Read [reference/modulation.md](reference/modulation.md) - When adding movement and dynamic variation
|
|
45
|
+
- Read [reference/conditionals.md](reference/conditionals.md) - When creating algorithmic variation
|
|
46
|
+
- Read [reference/layering.md](reference/layering.md) - When combining multiple patterns
|
|
47
|
+
- Read [reference/tempo-timing.md](reference/tempo-timing.md) - When setting tempo or working with time
|
|
48
|
+
- Read [reference/arrangement.md](reference/arrangement.md) - When structuring full compositions
|
|
49
|
+
- Read [reference/genre-trance.md](reference/genre-trance.md) - When producing uplifting/hard trance
|
|
50
|
+
- Read [reference/genre-ambient.md](reference/genre-ambient.md) - When creating atmospheric soundscapes
|
|
51
|
+
- Read [reference/genre-harsh.md](reference/genre-harsh.md) - When making experimental/industrial music
|
|
52
|
+
- Read [reference/scales-harmony.md](reference/scales-harmony.md) - When working with melodies and chords
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# arrangement: Song Structure and Arrangement
|
|
2
|
+
|
|
3
|
+
**Guideline:** Organize compositions into distinct sections using `.mask()` and `arrange()` to build tension, peaks, and release.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Structured arrangements create emotional arcs; static loops lack engagement and dynamics.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
arrange(
|
|
10
|
+
[4, intro], // 4 cycles
|
|
11
|
+
[4, buildup], // Building tension
|
|
12
|
+
[8, drop], // Climax
|
|
13
|
+
[4, breakdown], // Release
|
|
14
|
+
[8, drop] // Return
|
|
15
|
+
)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**Techniques:**
|
|
19
|
+
- `.mask("1 1 0 0 0 0 0 0")`: Play first half of 8-subdivision cycle
|
|
20
|
+
- `arrange([cycles, pattern], ...)`: Sequence sections with precise lengths
|
|
21
|
+
- `.every(n, x => x.fast(2))`: Accelerate rhythms to build intensity
|
|
22
|
+
- Layer stacking: Add/remove instruments progressively for tension
|
|
23
|
+
- Filter sweeps: Use `saw.range(200, 3000).slow(16)` for gradual builds
|
|
24
|
+
- Classic EDM: intro→buildup→drop→breakdown→buildup→drop→outro
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# conditionals: Conditional and Probabilistic Transformations
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use `.every(n, fn)`, probability functions, and `.degradeBy()` to add algorithmic variation without manual editing.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Procedural variation creates organic, evolving patterns; manual static edits sound lifeless and repetitive.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
// Evolving drum pattern
|
|
10
|
+
s("bd*4")
|
|
11
|
+
.every(4, x => x.fast(2)) // Double speed every 4 cycles
|
|
12
|
+
.every(8, x => x.gain(0.5)) // Quieter every 8 cycles
|
|
13
|
+
.sometimes(x => x.speed(0.5)) // Occasional pitch drop
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Techniques:**
|
|
17
|
+
- `.every(n, fn)`: Apply transformation periodically (repeats every n cycles)
|
|
18
|
+
- `.sometimes()`, `.often()`, `.rarely()`, `.almostAlways()`: Probabilistic 50%, 75%, 10%, 90%
|
|
19
|
+
- `.degradeBy(0.7)`: Keep only 70% of events (sparse/glitchy feel)
|
|
20
|
+
- `.jux(fn)`: Apply to right channel only (stereo width effect)
|
|
21
|
+
- `.stut(4, 0.5, 1/16)`: Echo/stutter with decay
|
|
22
|
+
- `.scramble()`, `.shuffle()`: Randomize event order or rotate subdivisions
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# effects: Audio Effects and Processing
|
|
2
|
+
|
|
3
|
+
**Guideline:** Chain effects with dot notation; balance gain staging, use filters for EQ, and add space with reverb/delay.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Tasteful effects shape tone and add movement; poor gain staging causes clipping or loss of clarity.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
// Acid bass
|
|
10
|
+
note("c2*8").sound("sawtooth")
|
|
11
|
+
.lpf(sine.range(300, 1500).slow(4)) // Sweep filter
|
|
12
|
+
.lpq(12) // High resonance
|
|
13
|
+
.gain(0.5)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Techniques:**
|
|
17
|
+
- Gain staging: kick 0.7-0.85, bass 0.5-0.6, leads 0.4-0.6, hats 0.2-0.35
|
|
18
|
+
- `.lpf(cutoff)`, `.hpf(cutoff)`: Shape frequency space (sub-bass 40-100Hz, muddy 300-600Hz)
|
|
19
|
+
- `.lpq(resonance)`: Add peak at filter cutoff for acid sweeps
|
|
20
|
+
- `.room(0.5)`, `.delay(0.3)`: Create space without muddying mix
|
|
21
|
+
- `.shape(0.3)`, `.crush(8)`: Distortion and bit-reduction for texture
|
|
22
|
+
- `.attack(0.1).sustain(0.5).release(0.3)`: Control envelope shape
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# genre-ambient: Ambient and Atmospheric Music
|
|
2
|
+
|
|
3
|
+
**Guideline:** Create atmospheric soundscapes with slow tempos, sparse elements, heavy reverb, and gradual evolution.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Ambient music relies on slow pacing, delayed effects, and minimal change to create meditative, immersive atmospheres.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```javascript
|
|
10
|
+
setcpm(70/4) // 70 BPM
|
|
11
|
+
|
|
12
|
+
stack(
|
|
13
|
+
note("c2").sound("sine").attack(3).sustain(8).release(4).room(0.9).gain(0.25).slow(8),
|
|
14
|
+
note("<c4 eb4 g4 bb4>").sound("triangle").attack(1).sustain(2).release(2)
|
|
15
|
+
.room(0.85).lpf(perlin.range(500, 2000).slow(8)).gain(0.2).slow(2),
|
|
16
|
+
note("g5 ~ ~ ~ ~ eb5 ~ ~").sound("sine").room(0.9).delay(0.6).delayfeedback(0.7).gain(0.2).degradeBy(0.4),
|
|
17
|
+
s("white").lpf(perlin.range(300, 800).slow(16)).gain(0.08)
|
|
18
|
+
)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Techniques:**
|
|
22
|
+
- Slow tempo (60-90 BPM): Use `setcpm(70/4)` for 70 BPM
|
|
23
|
+
- Heavy reverb: `.room(0.85-0.95)` for spatial depth
|
|
24
|
+
- Sparse elements: `.degradeBy(0.3-0.5)` to drop notes randomly
|
|
25
|
+
- Long envelopes: `.attack(2-4)` and `.release(3-4)` for gradual transitions
|
|
26
|
+
- Layered drones: Stack multiple sine/triangle notes at different octaves with `.slow()` modulation
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# filename: genre-harsh
|
|
2
|
+
|
|
3
|
+
**Guideline:** Create harsh, experimental textures using extreme distortion, bit crushing, noise, and chaotic polyrhythms for intentional sonic destruction.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Harsh music demands intentional degradation and dissonance; extreme effect values and dark scales create cohesive experimental aesthetics.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
stack(
|
|
10
|
+
s("bd(7,8)").gain(0.9).crush(5).shape(0.4),
|
|
11
|
+
note("[-12 -11 -10]*32").scale("A2:locrian").sound("sawtooth")
|
|
12
|
+
.lpf(perlin.range(400, 2000)).crush(5).shape(0.6).gain(0.5)
|
|
13
|
+
)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Techniques:**
|
|
17
|
+
- Extreme effects: `.crush(2-4)`, `.coarse(32-64)`, `.shape(0.8-2)` for maximum harshness
|
|
18
|
+
- Noise layers: `s("white")` with `.hpf()`, `.bpf()`, `.degradeBy()` for texture
|
|
19
|
+
- Dissonant scales: Locrian, Phrygian, chromatic clusters for dark tonality
|
|
20
|
+
- Glitch methods: `.degradeBy(0.7)`, `.scramble()`, `.stut(8, 0.5)` for chaos
|
|
21
|
+
- Polyrhythms: Competing time signatures `.bd(7,8)`, `.sd(5,8)`, `.hh(11,16)` for instability
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# filename: genre-trance
|
|
2
|
+
|
|
3
|
+
**Guideline:** Build uplifting trance with four-on-the-floor kicks, rolling basslines, euphoric melodies, and filter sweeps at 138-145 BPM.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Trance requires precise tempo, layered elements, and evolving filters; proper gain hierarchy and chord progressions maintain energy and emotional impact.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
setcpm(138/4)
|
|
10
|
+
stack(
|
|
11
|
+
s("bd*4").gain(0.85).lpf(150),
|
|
12
|
+
note("<a2 a2 f2 g2>*4").sound("sawtooth")
|
|
13
|
+
.lpf(sine.range(400, 1200).slow(4)).gain(0.52),
|
|
14
|
+
s("hh*16").gain(0.28).hpf(6000)
|
|
15
|
+
)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**Techniques:**
|
|
19
|
+
- Tempo: `setcpm(138-145/4)` for classic to hard trance pacing
|
|
20
|
+
- Four-on-the-floor: `s("bd*4")` with punchy filtering `.lpf(150)`
|
|
21
|
+
- Rolling bass: `note("*8" or "*16")` with filter automation `.lpf(sine.range())`
|
|
22
|
+
- Filter sweeps: `.lpf(saw.range(200, 2000).slow(16))` for build tension
|
|
23
|
+
- Gain hierarchy: Kick 0.85, Bass 0.52, Lead 0.42, Pads 0.28, Hats 0.28
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# filename: layering
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use `stack()` to combine independent patterns organized by role (rhythm, bass, harmony, melody) with balanced gain levels.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Clear layer hierarchy prevents overlap and mud; role-based organization enables independent editing and coherent mixes.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
stack(
|
|
10
|
+
s("bd*4").gain(0.8).lpf(150),
|
|
11
|
+
note("c2*8").sound("sawtooth").lpf(600).gain(0.5),
|
|
12
|
+
note("c5 e5 g5 e5").sound("sawtooth").lpf(3000).gain(0.4),
|
|
13
|
+
s("hh*16").gain(0.25).hpf(6000)
|
|
14
|
+
)
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Techniques:**
|
|
18
|
+
- Layer hierarchy: Kick 0.8-0.9, Bass 0.5-0.6, Lead 0.4-0.5, Pads 0.2-0.4, Hats 0.2-0.4
|
|
19
|
+
- Multi-layer drums: `.late(0.01)` and `.late(0.02)` offsets for depth
|
|
20
|
+
- Role organization: Rhythm → Bass → Harmony → Melody → Texture in stack order
|
|
21
|
+
- Variable patterns: Define as `const layer = pattern` for clarity and reusability
|
|
22
|
+
- Combination functions: `stack()` simultaneous, `cat()` sequential per cycle, `arrange()` explicit counts
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# mini-notation: Pattern Mini-Notation Syntax
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use Strudel mini-notation operators to express rhythmic and melodic patterns concisely.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Mini-notation provides compact syntax for complex structures without verbose function calls.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```javascript
|
|
10
|
+
// Simple drum pattern
|
|
11
|
+
s("bd sd ~ sd") // Kick, snare, rest, snare
|
|
12
|
+
|
|
13
|
+
// Repeat with multiply
|
|
14
|
+
s("bd*4 hh*8") // 4 kicks, 8 hi-hats in one cycle
|
|
15
|
+
|
|
16
|
+
// Subdivisions
|
|
17
|
+
s("[bd sd] [hh hh]") // Two groups fitted in one step each
|
|
18
|
+
|
|
19
|
+
// Euclidean rhythm (3 hits over 8 steps)
|
|
20
|
+
s("bd(3,8)")
|
|
21
|
+
|
|
22
|
+
// Parallel layers
|
|
23
|
+
s("bd*4, hh*16") // Kick layer + hi-hat layer simultaneously
|
|
24
|
+
|
|
25
|
+
// Chord progression
|
|
26
|
+
note("<c3 e3 g3 b3>") // One note per cycle (ascending pattern)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Core Operators
|
|
30
|
+
|
|
31
|
+
| Operator | Syntax | Description |
|
|
32
|
+
|----------|--------|-------------|
|
|
33
|
+
| Space | `a b c` | Sequential |
|
|
34
|
+
| Rest | `~` | Silence |
|
|
35
|
+
| Multiply | `a*4` | Repeat 4x |
|
|
36
|
+
| Divide | `a/2` | Stretch over 2 cycles |
|
|
37
|
+
| Subdivide | `[a b]` | Fit both in one step |
|
|
38
|
+
| Alternate | `<a b c>` | One per cycle |
|
|
39
|
+
| Elongate | `a@2` | Double duration |
|
|
40
|
+
| Replicate | `a!3` | Repeat 3x |
|
|
41
|
+
| Parallel | `a,b` | Simultaneous |
|
|
42
|
+
| Euclidean | `a(3,8)` | 3 hits over 8 |
|
|
43
|
+
|
|
44
|
+
## Common Patterns
|
|
45
|
+
|
|
46
|
+
```javascript
|
|
47
|
+
s("bd*4") // 4 kicks per cycle (trance)
|
|
48
|
+
s("~ hh ~ hh") // Offbeat hi-hats
|
|
49
|
+
s("~ sd ~ sd") // Backbeat snare
|
|
50
|
+
s("[bd sd]*2") // Kick-snare groups
|
|
51
|
+
s("bd*4, hh*8") // Parallel layers
|
|
52
|
+
s("bd(3,8)") // Euclidean rhythm
|
|
53
|
+
note("<c3 e3 g3 b3>") // Chord progression per cycle
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Nesting and Complexity
|
|
57
|
+
|
|
58
|
+
```javascript
|
|
59
|
+
s("[bd [sd sd]] [hh hh hh hh]") // Complex nesting
|
|
60
|
+
note("[c3 e3] [g3 b3]") // Melodic subdivisions
|
|
61
|
+
s("[bd sd]*2, hh*16") // Layered rhythm
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Techniques:**
|
|
65
|
+
- Space separator: Sequential patterns (a b c)
|
|
66
|
+
- Tilde (~): Rest/silence in pattern
|
|
67
|
+
- Multiply (*): Repeat pattern n times (a*4)
|
|
68
|
+
- Divide (/): Stretch pattern over n cycles
|
|
69
|
+
- Brackets []: Subdivide into tighter steps
|
|
70
|
+
- Angle brackets <>: Alternate one per cycle
|
|
71
|
+
- @ symbol: Elongate duration (a@2 doubles)
|
|
72
|
+
- ! symbol: Replicate pattern n times (a!3)
|
|
73
|
+
- Comma (,): Parallel/simultaneous patterns
|
|
74
|
+
- Euclidean notation: a(hits, steps) for rhythmic counting
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# modulation: Dynamic Parameter Modulation
|
|
2
|
+
|
|
3
|
+
**Guideline:** Replace static values with signal generators (sine, perlin, rand) to create organic evolution and movement.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Dynamic modulation adds life and interest; static values sound robotic and unmotivated.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
// Classic filter sweep
|
|
10
|
+
note("c2*8").sound("sawtooth")
|
|
11
|
+
.lpf(sine.range(200, 2000).slow(4))
|
|
12
|
+
.lpq(8)
|
|
13
|
+
.gain(0.5)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Techniques:**
|
|
17
|
+
- `sine.range(min, max).slow(n)`: Smooth, predictable LFO oscillation
|
|
18
|
+
- `saw.range(min, max).slow(n)`: Linear ramps for gradual builds
|
|
19
|
+
- `perlin.range(min, max)`: Smooth organic randomness (non-repetitive feel)
|
|
20
|
+
- `rand.range(min, max)`: True random per event (glitch effects)
|
|
21
|
+
- Common targets: `.lpf()`, `.gain()`, `.pan()`, `.room()`, `.lpq()` (resonance)
|
|
22
|
+
- Cycle-based: `.crush("<3 4 5 6>")` or `.gain("<0.8 0.9 1 0.85>")` for stepped changes
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# filename: scales-harmony
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use `.scale()` to constrain notes to a key and chord notation for harmonically coherent compositions with intentional emotional expression.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Keys unify bass, chords, and melody; scales prevent dissonance and enable cohesive harmonic progression across all layers.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
note("<a1 f1 c2 g1>*2").scale("A3:minor").sound("sawtooth")
|
|
10
|
+
.lpf(400).gain(0.5),
|
|
11
|
+
note("<a3'min f3'maj c3'maj g3'maj>").sound("triangle")
|
|
12
|
+
.room(0.7).gain(0.3)
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
**Techniques:**
|
|
16
|
+
- Scale constraint: `note("0 2 4 6").scale("C3:major")` to stay in key
|
|
17
|
+
- Chord notation: `note("c3'maj")`, `note("c3'min7")`, `note("c3'aug")` for harmony
|
|
18
|
+
- Progressions: i-VI-III-VII (trance), I-IV-V-I (house), vi-IV-I-V (pop)
|
|
19
|
+
- Scale moods: Major (happy), Minor (sad), Phrygian (dark), Locrian (metal)
|
|
20
|
+
- Transposition: `.add(12)` octave up, `.add(7)` fifth up for melodic variation
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# sounds: Available Sounds and Instruments
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use verified drum samples and synthesis waveforms; fall back to synthesis for unreliable samples.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Not all sample names work in the web version. Verified sounds prevent silent patterns.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```javascript
|
|
10
|
+
// Use verified drum sounds
|
|
11
|
+
s("bd sd hh ~ hh") // Always works in web version
|
|
12
|
+
|
|
13
|
+
// Switch drum banks
|
|
14
|
+
s("bd sd hh").bank("RolandTR808") // TR-808 drums
|
|
15
|
+
|
|
16
|
+
// Synthesis waveforms (always available)
|
|
17
|
+
note("c3").sound("sine") // Pure tone
|
|
18
|
+
note("c3").sound("sawtooth") // Bright sound
|
|
19
|
+
|
|
20
|
+
// Combination: Drums + melody
|
|
21
|
+
s("bd*4, hh*8").gain(0.7)
|
|
22
|
+
note("c3 e3 g3 c4").sound("sine").sustain(0.5)
|
|
23
|
+
|
|
24
|
+
// If melodic sample fails, use synthesis
|
|
25
|
+
note("c2").sound("sawtooth").lpf(400) // Fallback bass
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Verified Drum Samples
|
|
29
|
+
|
|
30
|
+
```javascript
|
|
31
|
+
s("bd") // Kick drum
|
|
32
|
+
s("sd") // Snare
|
|
33
|
+
s("hh") // Hi-hat (closed)
|
|
34
|
+
s("oh") // Hi-hat (open)
|
|
35
|
+
s("cp") // Clap
|
|
36
|
+
s("rim") // Rimshot
|
|
37
|
+
s("lt") // Low tom
|
|
38
|
+
s("mt") // Mid tom
|
|
39
|
+
s("ht") // High tom
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Drum Banks
|
|
43
|
+
|
|
44
|
+
```javascript
|
|
45
|
+
s("bd sd hh").bank("RolandTR909") // TR-909
|
|
46
|
+
s("bd sd hh").bank("RolandTR808") // TR-808
|
|
47
|
+
// Also: RolandTR707, AkaiLinn, ViscoSpaceDrum
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Synthesis Waveforms (Always Available)
|
|
51
|
+
|
|
52
|
+
```javascript
|
|
53
|
+
note("c3").sound("sine") // Pure, smooth
|
|
54
|
+
note("c3").sound("sawtooth") // Bright, rich
|
|
55
|
+
note("c3").sound("square") // Hollow, vintage
|
|
56
|
+
note("c3").sound("triangle") // Warm, soft
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Verified Melodic Samples
|
|
60
|
+
|
|
61
|
+
```javascript
|
|
62
|
+
note("c3").sound("piano")
|
|
63
|
+
note("c3").sound("epiano")
|
|
64
|
+
note("c3").sound("casio")
|
|
65
|
+
note("c2").sound("gm_acoustic_bass")
|
|
66
|
+
note("c2").sound("gm_synth_bass_1")
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Synthesis Alternative (for unreliable samples)
|
|
70
|
+
|
|
71
|
+
```javascript
|
|
72
|
+
// Instead of pad sample:
|
|
73
|
+
note("c3").sound("sine")
|
|
74
|
+
.attack(0.5).sustain(2).release(1)
|
|
75
|
+
.room(0.8).gain(0.4)
|
|
76
|
+
|
|
77
|
+
// Instead of bass sample:
|
|
78
|
+
note("c2").sound("sawtooth").lpf(400).gain(0.6)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Techniques:**
|
|
82
|
+
- Verified drums: bd, sd, hh, oh, cp, rim, lt, mt, ht always work
|
|
83
|
+
- Drum banks: RolandTR909, RolandTR808, RolandTR707, AkaiLinn, ViscoSpaceDrum
|
|
84
|
+
- Synthesis waveforms: sine, sawtooth, square, triangle always available
|
|
85
|
+
- Melodic samples: piano, epiano, casio, gm_acoustic_bass, gm_synth_bass_1
|
|
86
|
+
- Fallback strategy: Use synthesis (sine/sawtooth) if samples fail
|
|
87
|
+
- Envelope control: attack(), sustain(), release() for shaping
|
|
88
|
+
- Effects: room(), lpf() (low-pass filter), gain() for tone shaping
|
|
89
|
+
- Test in browser: Verify sounds work in web version before performance
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# tempo-timing: Tempo and Timing Control
|
|
2
|
+
|
|
3
|
+
**Guideline:** Set tempo with `setcpm(BPM/4)` first, then use `.slow()`, `.fast()`, `.early()`, `.late()` for timing control.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Tempo anchors rhythmic relationships; timing modifiers create polyrhythms, syncopation, and groove feels.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
setcpm(138/4) // 138 BPM (uplifting trance)
|
|
10
|
+
stack(
|
|
11
|
+
s("bd*4"), // Main beat
|
|
12
|
+
s("sd*3").slow(4/3), // 3-per-cycle polyrhythm
|
|
13
|
+
note("c4").slow(4).room(0.8) // 4-cycle pad
|
|
14
|
+
)
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Techniques:**
|
|
18
|
+
- `setcpm(BPM/4)`: Set tempo (128=house, 138=trance, 170=drum&bass)
|
|
19
|
+
- `.slow(n)`: Pattern takes n cycles (half speed)
|
|
20
|
+
- `.fast(n)`: Pattern plays n times per cycle (double speed)
|
|
21
|
+
- `.early(0.125)`, `.late(0.125)`: Shift timing by fractions of cycle
|
|
22
|
+
- Polyrhythms: `.slow(4/3)` creates 3-per-cycle over 4-beat backdrop
|
|
23
|
+
- `.swing(0.2)`: Add medium swing feel
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: terraform-guidelines
|
|
3
|
+
description: >-
|
|
4
|
+
Trigger on `.tf` files, Terraform modules, `*.tfvars`. Use when writing Terraform 1.12+ for infrastructure as code. Apply for module design, environment isolation, state management. Keywords: Terraform, modules, variables, outputs, remote state, for_each, dynamic blocks, locals, environment isolation.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Terraform Coding Guidelines
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
|
|
11
|
+
- Terraform ≥ 1.12; remote state; pinned providers; fmt/validate.
|
|
12
|
+
|
|
13
|
+
## Essentials
|
|
14
|
+
|
|
15
|
+
- **Module design** - One responsibility per module, clear inputs/outputs, typed variables, see [reference/module-structure.md](reference/module-structure.md), [reference/module-definition.md](reference/module-definition.md), [reference/typed-variables.md](reference/typed-variables.md)
|
|
16
|
+
- **Composition** - Thin root modules, compose child modules, use locals for computed values, see [reference/root-module.md](reference/root-module.md), [reference/locals.md](reference/locals.md)
|
|
17
|
+
- **Environment isolation** - Separate envs (dirs + tfvars), isolate state per env, see [reference/root-module.md](reference/root-module.md), [reference/remote-state.md](reference/remote-state.md)
|
|
18
|
+
- **Advanced patterns** - Dynamic blocks, for_each, count, see [reference/advanced-patterns.md](reference/advanced-patterns.md)
|
|
19
|
+
|
|
20
|
+
## Progressive disclosure
|
|
21
|
+
|
|
22
|
+
- Read [reference/module-structure.md](reference/module-structure.md) - When designing reusable Terraform modules
|
|
23
|
+
- Read [reference/module-definition.md](reference/module-definition.md) - When defining module inputs, outputs, or resources
|
|
24
|
+
- Read [reference/typed-variables.md](reference/typed-variables.md) - When adding variable validation or complex types
|
|
25
|
+
- Read [reference/locals.md](reference/locals.md) - When computing intermediate values or reducing duplication
|
|
26
|
+
- Read [reference/root-module.md](reference/root-module.md) - When organizing environment-specific configurations
|
|
27
|
+
- Read [reference/remote-state.md](reference/remote-state.md) - When configuring state backend or state isolation
|
|
28
|
+
- Read [reference/advanced-patterns.md](reference/advanced-patterns.md) - When using dynamic blocks, for_each, or count
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# advanced-patterns: Advanced Terraform Patterns
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use data sources, dynamic blocks, and for_each/count appropriately
|
|
4
|
+
|
|
5
|
+
**Rationale:** Advanced patterns enable flexible, maintainable infrastructure code
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
**Data Sources:**
|
|
10
|
+
|
|
11
|
+
```hcl
|
|
12
|
+
data "aws_ami" "amazon_linux_2" {
|
|
13
|
+
most_recent = true
|
|
14
|
+
owners = ["amazon"]
|
|
15
|
+
|
|
16
|
+
filter {
|
|
17
|
+
name = "name"
|
|
18
|
+
values = ["amzn2-ami-hvm-*-x86_64-gp2"]
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
data "aws_availability_zones" "available" {
|
|
23
|
+
state = "available"
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
resource "aws_instance" "app" {
|
|
27
|
+
ami = data.aws_ami.amazon_linux_2.id
|
|
28
|
+
instance_type = "t3.micro"
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Dynamic Blocks:**
|
|
33
|
+
|
|
34
|
+
```hcl
|
|
35
|
+
resource "aws_security_group" "this" {
|
|
36
|
+
name = "${var.environment}-sg"
|
|
37
|
+
vpc_id = var.vpc_id
|
|
38
|
+
|
|
39
|
+
dynamic "ingress" {
|
|
40
|
+
for_each = var.ingress_rules
|
|
41
|
+
|
|
42
|
+
content {
|
|
43
|
+
from_port = ingress.value.from_port
|
|
44
|
+
to_port = ingress.value.to_port
|
|
45
|
+
protocol = ingress.value.protocol
|
|
46
|
+
cidr_blocks = ingress.value.cidr_blocks
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**For_Each vs Count:**
|
|
53
|
+
|
|
54
|
+
```hcl
|
|
55
|
+
# ✅ Use for_each for map-based resources
|
|
56
|
+
resource "aws_subnet" "private" {
|
|
57
|
+
for_each = local.subnet_cidrs
|
|
58
|
+
|
|
59
|
+
vpc_id = aws_vpc.this.id
|
|
60
|
+
cidr_block = each.value
|
|
61
|
+
availability_zone = each.key
|
|
62
|
+
|
|
63
|
+
tags = {
|
|
64
|
+
Name = "${var.environment}-private-${each.key}"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
# ✅ Use count for simple repetition
|
|
69
|
+
resource "aws_instance" "worker" {
|
|
70
|
+
count = var.worker_count
|
|
71
|
+
|
|
72
|
+
ami = data.aws_ami.amazon_linux_2.id
|
|
73
|
+
instance_type = "t3.micro"
|
|
74
|
+
|
|
75
|
+
tags = {
|
|
76
|
+
Name = "${var.environment}-worker-${count.index + 1}"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
# ❌ Avoid count with lists (order matters, causes unnecessary recreation)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Techniques:**
|
|
84
|
+
- **Data sources:** Query existing AWS resources without importing or creating them
|
|
85
|
+
- **Dynamic blocks:** Generate repeated nested blocks from variables or locals
|
|
86
|
+
- **For_each with maps:** Maintain consistent resource names when order changes
|
|
87
|
+
- **Count for simple repetition:** Use only for stateless resource duplication
|
|
88
|
+
- **Avoid count with lists:** Order changes cause unnecessary recreation and state corruption
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# locals: Computed Values with Locals
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use locals block for computed values, transformations, and conditional logic
|
|
4
|
+
|
|
5
|
+
**Rationale:** Locals reduce duplication, improve readability, and centralize computation logic
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```hcl
|
|
10
|
+
locals {
|
|
11
|
+
# Merge tags
|
|
12
|
+
common_tags = merge(
|
|
13
|
+
var.tags,
|
|
14
|
+
{
|
|
15
|
+
Environment = var.environment
|
|
16
|
+
ManagedBy = "terraform"
|
|
17
|
+
Timestamp = timestamp()
|
|
18
|
+
}
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
# Calculate values
|
|
22
|
+
subnet_count = length(var.availability_zones)
|
|
23
|
+
|
|
24
|
+
# Conditional values
|
|
25
|
+
instance_type = var.environment == "prod" ? "t3.large" : "t3.micro"
|
|
26
|
+
|
|
27
|
+
# Complex transformations
|
|
28
|
+
subnet_cidrs = {
|
|
29
|
+
for i, az in var.availability_zones :
|
|
30
|
+
az => cidrsubnet(var.vpc_cidr, 8, i)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# Flatten nested structures
|
|
34
|
+
security_rules = flatten([
|
|
35
|
+
for sg in var.security_groups : [
|
|
36
|
+
for rule in sg.rules : {
|
|
37
|
+
sg_name = sg.name
|
|
38
|
+
from_port = rule.from_port
|
|
39
|
+
to_port = rule.to_port
|
|
40
|
+
protocol = rule.protocol
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
])
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Techniques:**
|
|
48
|
+
- **Tag merging:** Combine common tags with resource-specific tags using merge()
|
|
49
|
+
- **Calculated values:** Compute derived values like counts and indices once
|
|
50
|
+
- **Conditional logic:** Use ternary operators for environment-specific resource sizing
|
|
51
|
+
- **CIDR subnetting:** Transform VPC CIDR into subnet ranges using cidrsubnet()
|
|
52
|
+
- **Flattening:** Collapse nested structures for iteration with flatten()
|
|
53
|
+
|