@ketecode/loom 0.0.0-stage → 0.2.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/LICENSE +21 -0
- package/README.md +616 -2
- package/agents/accessibility-reviewer/AGENT.md +70 -0
- package/agents/accessibility-reviewer/evals/triggers.json +15 -0
- package/agents/agent-evaluator/AGENT.md +74 -0
- package/agents/agent-evaluator/evals/triggers.json +15 -0
- package/agents/architect/AGENT.md +82 -0
- package/agents/architect/evals/triggers.json +17 -0
- package/agents/billing-reviewer/AGENT.md +68 -0
- package/agents/billing-reviewer/evals/triggers.json +16 -0
- package/agents/code-reviewer/AGENT.md +51 -0
- package/agents/code-reviewer/evals/behavior.json +60 -0
- package/agents/code-reviewer/evals/triggers.json +14 -0
- package/agents/code-simplifier/AGENT.md +74 -0
- package/agents/code-simplifier/evals/triggers.json +15 -0
- package/agents/cpp-build-resolver/AGENT.md +73 -0
- package/agents/cpp-build-resolver/evals/triggers.json +16 -0
- package/agents/cpp-reviewer/AGENT.md +59 -0
- package/agents/cpp-reviewer/evals/triggers.json +16 -0
- package/agents/csharp-build-resolver/AGENT.md +84 -0
- package/agents/csharp-build-resolver/evals/triggers.json +17 -0
- package/agents/csharp-reviewer/AGENT.md +88 -0
- package/agents/csharp-reviewer/evals/triggers.json +17 -0
- package/agents/dart-build-resolver/AGENT.md +80 -0
- package/agents/dart-build-resolver/evals/triggers.json +17 -0
- package/agents/dart-reviewer/AGENT.md +66 -0
- package/agents/dart-reviewer/evals/triggers.json +17 -0
- package/agents/database-reviewer/AGENT.md +72 -0
- package/agents/database-reviewer/evals/triggers.json +16 -0
- package/agents/django-reviewer/AGENT.md +61 -0
- package/agents/django-reviewer/evals/triggers.json +15 -0
- package/agents/doc-updater/AGENT.md +92 -0
- package/agents/doc-updater/evals/triggers.json +14 -0
- package/agents/e2e-runner/AGENT.md +88 -0
- package/agents/e2e-runner/evals/triggers.json +16 -0
- package/agents/fastapi-reviewer/AGENT.md +63 -0
- package/agents/fastapi-reviewer/evals/triggers.json +15 -0
- package/agents/flutter-reviewer/AGENT.md +70 -0
- package/agents/flutter-reviewer/evals/triggers.json +15 -0
- package/agents/fsharp-build-resolver/AGENT.md +81 -0
- package/agents/fsharp-build-resolver/evals/triggers.json +15 -0
- package/agents/fsharp-reviewer/AGENT.md +77 -0
- package/agents/fsharp-reviewer/evals/triggers.json +15 -0
- package/agents/go-build-resolver/AGENT.md +85 -0
- package/agents/go-build-resolver/evals/triggers.json +16 -0
- package/agents/go-reviewer/AGENT.md +66 -0
- package/agents/go-reviewer/evals/triggers.json +16 -0
- package/agents/healthcare-reviewer/AGENT.md +65 -0
- package/agents/healthcare-reviewer/evals/triggers.json +16 -0
- package/agents/i18n-reviewer/AGENT.md +64 -0
- package/agents/i18n-reviewer/evals/triggers.json +16 -0
- package/agents/inbox-triager/AGENT.md +98 -0
- package/agents/inbox-triager/evals/triggers.json +16 -0
- package/agents/infra-reviewer/AGENT.md +93 -0
- package/agents/infra-reviewer/evals/triggers.json +15 -0
- package/agents/java-build-resolver/AGENT.md +82 -0
- package/agents/java-build-resolver/evals/triggers.json +16 -0
- package/agents/java-reviewer/AGENT.md +64 -0
- package/agents/java-reviewer/evals/triggers.json +16 -0
- package/agents/kotlin-build-resolver/AGENT.md +89 -0
- package/agents/kotlin-build-resolver/evals/triggers.json +16 -0
- package/agents/kotlin-reviewer/AGENT.md +75 -0
- package/agents/kotlin-reviewer/evals/triggers.json +16 -0
- package/agents/mle-reviewer/AGENT.md +68 -0
- package/agents/mle-reviewer/evals/triggers.json +16 -0
- package/agents/network-config-reviewer/AGENT.md +68 -0
- package/agents/network-config-reviewer/evals/triggers.json +17 -0
- package/agents/payments-reviewer/AGENT.md +64 -0
- package/agents/payments-reviewer/evals/triggers.json +16 -0
- package/agents/performance-optimizer/AGENT.md +86 -0
- package/agents/performance-optimizer/evals/triggers.json +16 -0
- package/agents/perl-build-resolver/AGENT.md +84 -0
- package/agents/perl-build-resolver/evals/triggers.json +15 -0
- package/agents/perl-reviewer/AGENT.md +77 -0
- package/agents/perl-reviewer/evals/triggers.json +15 -0
- package/agents/php-build-resolver/AGENT.md +88 -0
- package/agents/php-build-resolver/evals/triggers.json +16 -0
- package/agents/php-reviewer/AGENT.md +61 -0
- package/agents/php-reviewer/evals/triggers.json +15 -0
- package/agents/planner/AGENT.md +75 -0
- package/agents/planner/evals/triggers.json +17 -0
- package/agents/pr-test-analyzer/AGENT.md +82 -0
- package/agents/pr-test-analyzer/evals/triggers.json +16 -0
- package/agents/python-build-resolver/AGENT.md +87 -0
- package/agents/python-build-resolver/evals/triggers.json +16 -0
- package/agents/python-reviewer/AGENT.md +63 -0
- package/agents/python-reviewer/evals/triggers.json +15 -0
- package/agents/rag-reviewer/AGENT.md +71 -0
- package/agents/rag-reviewer/evals/triggers.json +16 -0
- package/agents/react-reviewer/AGENT.md +70 -0
- package/agents/react-reviewer/evals/triggers.json +16 -0
- package/agents/refactor-cleaner/AGENT.md +82 -0
- package/agents/refactor-cleaner/evals/triggers.json +16 -0
- package/agents/ruby-build-resolver/AGENT.md +93 -0
- package/agents/ruby-build-resolver/evals/triggers.json +16 -0
- package/agents/ruby-reviewer/AGENT.md +62 -0
- package/agents/ruby-reviewer/evals/triggers.json +16 -0
- package/agents/rust-build-resolver/AGENT.md +98 -0
- package/agents/rust-build-resolver/evals/triggers.json +16 -0
- package/agents/rust-reviewer/AGENT.md +78 -0
- package/agents/rust-reviewer/evals/triggers.json +15 -0
- package/agents/security-reviewer/AGENT.md +84 -0
- package/agents/security-reviewer/evals/triggers.json +16 -0
- package/agents/silent-failure-hunter/AGENT.md +66 -0
- package/agents/silent-failure-hunter/evals/triggers.json +16 -0
- package/agents/solidity-reviewer/AGENT.md +70 -0
- package/agents/solidity-reviewer/evals/triggers.json +16 -0
- package/agents/spec-reviewer/AGENT.md +95 -0
- package/agents/spec-reviewer/evals/behavior.json +57 -0
- package/agents/spec-reviewer/evals/triggers.json +16 -0
- package/agents/swift-build-resolver/AGENT.md +85 -0
- package/agents/swift-build-resolver/evals/triggers.json +15 -0
- package/agents/swift-reviewer/AGENT.md +75 -0
- package/agents/swift-reviewer/evals/triggers.json +15 -0
- package/agents/task-implementer/AGENT.md +89 -0
- package/agents/task-implementer/evals/behavior.json +47 -0
- package/agents/task-implementer/evals/triggers.json +16 -0
- package/agents/typescript-build-resolver/AGENT.md +76 -0
- package/agents/typescript-build-resolver/evals/triggers.json +15 -0
- package/agents/typescript-reviewer/AGENT.md +76 -0
- package/agents/typescript-reviewer/evals/triggers.json +15 -0
- package/agents/vue-reviewer/AGENT.md +75 -0
- package/agents/vue-reviewer/evals/triggers.json +15 -0
- package/bin/kete-loom.js +723 -0
- package/commands/aside.md +19 -0
- package/commands/brainstorm.md +25 -0
- package/commands/build-fix.md +26 -0
- package/commands/campaign.md +19 -0
- package/commands/changelog.md +36 -0
- package/commands/checkpoint.md +26 -0
- package/commands/codemap.md +25 -0
- package/commands/commit.md +26 -0
- package/commands/debug.md +27 -0
- package/commands/deps-audit.md +32 -0
- package/commands/dual-review.md +34 -0
- package/commands/epic-decompose.md +21 -0
- package/commands/explain.md +37 -0
- package/commands/feature-dev.md +23 -0
- package/commands/finish-branch.md +26 -0
- package/commands/fix-bug.md +38 -0
- package/commands/hookify.md +23 -0
- package/commands/i18n-check.md +39 -0
- package/commands/issue-sync.md +22 -0
- package/commands/jira.md +19 -0
- package/commands/learn.md +23 -0
- package/commands/loom.md +21 -0
- package/commands/loop.md +20 -0
- package/commands/model-route.md +27 -0
- package/commands/onboard.md +35 -0
- package/commands/orchestrate.md +21 -0
- package/commands/plan-feature.md +36 -0
- package/commands/postmortem.md +42 -0
- package/commands/pr-describe.md +39 -0
- package/commands/pr.md +22 -0
- package/commands/prd.md +41 -0
- package/commands/production-readiness.md +45 -0
- package/commands/project-init.md +21 -0
- package/commands/refactor-clean.md +24 -0
- package/commands/resume-session.md +22 -0
- package/commands/review.md +35 -0
- package/commands/save-session.md +37 -0
- package/commands/security-scan.md +32 -0
- package/commands/sessions.md +21 -0
- package/commands/skill-create.md +21 -0
- package/commands/tdd.md +36 -0
- package/commands/test-coverage.md +24 -0
- package/commands/threat-model.md +36 -0
- package/commands/update-docs.md +25 -0
- package/commands/usage-report.md +43 -0
- package/commands/verify.md +21 -0
- package/hooks/block-dangerous-commands/HOOK.md +30 -0
- package/hooks/block-dangerous-commands/cases.json +50 -0
- package/hooks/block-dangerous-commands/hook.js +75 -0
- package/hooks/block-foreground-servers/HOOK.md +34 -0
- package/hooks/block-foreground-servers/cases.json +31 -0
- package/hooks/block-foreground-servers/hook.js +41 -0
- package/hooks/block-no-verify/HOOK.md +25 -0
- package/hooks/block-no-verify/cases.json +30 -0
- package/hooks/block-no-verify/hook.js +43 -0
- package/hooks/capture-lessons/HOOK.md +24 -0
- package/hooks/capture-lessons/hook.js +48 -0
- package/hooks/format-on-edit/HOOK.md +24 -0
- package/hooks/format-on-edit/hook.js +89 -0
- package/hooks/guard-secrets/HOOK.md +19 -0
- package/hooks/guard-secrets/cases.json +110 -0
- package/hooks/guard-secrets/hook.js +44 -0
- package/hooks/load-session-context/HOOK.md +20 -0
- package/hooks/load-session-context/hook.js +56 -0
- package/hooks/notify-on-stop/HOOK.md +25 -0
- package/hooks/notify-on-stop/hook.js +27 -0
- package/hooks/protect-files/HOOK.md +24 -0
- package/hooks/protect-files/cases.json +27 -0
- package/hooks/protect-files/hook.js +39 -0
- package/hooks/protect-lint-config/HOOK.md +29 -0
- package/hooks/protect-lint-config/cases.json +18 -0
- package/hooks/protect-lint-config/fixtures/.eslintrc.json +1 -0
- package/hooks/protect-lint-config/fixtures/.golangci.yml +1 -0
- package/hooks/protect-lint-config/fixtures/.prettierrc +1 -0
- package/hooks/protect-lint-config/fixtures/.rubocop.yml +1 -0
- package/hooks/protect-lint-config/fixtures/biome.json +1 -0
- package/hooks/protect-lint-config/fixtures/eslint.config.mjs +1 -0
- package/hooks/protect-lint-config/fixtures/ruff.toml +1 -0
- package/hooks/protect-lint-config/hook.js +25 -0
- package/hooks/read-before-edit/HOOK.md +26 -0
- package/hooks/read-before-edit/cases.json +15 -0
- package/hooks/read-before-edit/hook.js +50 -0
- package/hooks/run.js +148 -0
- package/hooks/verify-before-stop/HOOK.md +32 -0
- package/hooks/verify-before-stop/hook.js +70 -0
- package/mcp/atlassian.json +11 -0
- package/mcp/chrome-devtools.json +18 -0
- package/mcp/clickhouse.json +11 -0
- package/mcp/cloudflare.json +11 -0
- package/mcp/context7.json +11 -0
- package/mcp/exa.json +11 -0
- package/mcp/fetch.json +17 -0
- package/mcp/figma.json +11 -0
- package/mcp/firecrawl.json +11 -0
- package/mcp/git.json +17 -0
- package/mcp/github.json +11 -0
- package/mcp/linear.json +11 -0
- package/mcp/memory.json +18 -0
- package/mcp/notion.json +11 -0
- package/mcp/playwright.json +18 -0
- package/mcp/sentry.json +11 -0
- package/mcp/stripe.json +11 -0
- package/mcp/supabase.json +11 -0
- package/mcp/time.json +17 -0
- package/mcp/vercel.json +11 -0
- package/package.json +61 -4
- package/profiles.json +214 -0
- package/rules/common.md +21 -0
- package/rules/cpp.md +29 -0
- package/rules/csharp.md +25 -0
- package/rules/dart.md +29 -0
- package/rules/fsharp.md +28 -0
- package/rules/git.md +26 -0
- package/rules/go.md +29 -0
- package/rules/java.md +29 -0
- package/rules/kotlin.md +27 -0
- package/rules/perl.md +26 -0
- package/rules/php.md +28 -0
- package/rules/python.md +30 -0
- package/rules/ruby.md +27 -0
- package/rules/rust.md +26 -0
- package/rules/security.md +29 -0
- package/rules/swift.md +28 -0
- package/rules/testing.md +25 -0
- package/rules/typescript.md +29 -0
- package/rules/use-skills.md +23 -0
- package/schemas/skill-frontmatter.schema.json +52 -0
- package/scripts/lib/audit.js +96 -0
- package/scripts/lib/behavior.js +52 -0
- package/scripts/lib/frontmatter.js +65 -0
- package/scripts/lib/hooks-install.js +294 -0
- package/scripts/lib/i18n.js +51 -0
- package/scripts/lib/inventory.js +85 -0
- package/scripts/lib/lint.js +180 -0
- package/scripts/lib/mcp-install.js +288 -0
- package/scripts/lib/profiles.js +128 -0
- package/scripts/lib/render.js +92 -0
- package/scripts/lib/rules-install.js +118 -0
- package/scripts/lib/skills.js +87 -0
- package/scripts/lib/targets.js +123 -0
- package/skills/accounting-api-integration/SKILL.md +81 -0
- package/skills/accounting-api-integration/evals/triggers.json +17 -0
- package/skills/accounting-api-integration/references/quickbooks.md +48 -0
- package/skills/accounting-api-integration/references/xero.md +45 -0
- package/skills/agent-failure-debugging/SKILL.md +92 -0
- package/skills/agent-failure-debugging/evals/triggers.json +16 -0
- package/skills/agent-harness-design/SKILL.md +125 -0
- package/skills/agent-harness-design/evals/triggers.json +21 -0
- package/skills/agent-outbound-messaging/SKILL.md +92 -0
- package/skills/agent-outbound-messaging/evals/triggers.json +16 -0
- package/skills/agent-security/SKILL.md +117 -0
- package/skills/agent-security/evals/triggers.json +16 -0
- package/skills/agent-security/references/host-configs.md +37 -0
- package/skills/ai-media-generation/SKILL.md +89 -0
- package/skills/ai-media-generation/evals/triggers.json +16 -0
- package/skills/ai-media-generation/references/job-pipeline.md +76 -0
- package/skills/angular-patterns/SKILL.md +122 -0
- package/skills/angular-patterns/evals/triggers.json +16 -0
- package/skills/api-client-integration/SKILL.md +86 -0
- package/skills/api-client-integration/evals/triggers.json +16 -0
- package/skills/api-client-integration/references/resilience.md +57 -0
- package/skills/api-design/SKILL.md +96 -0
- package/skills/api-design/evals/triggers.json +18 -0
- package/skills/api-design/references/conventions.md +133 -0
- package/skills/architecture-decision-records/SKILL.md +98 -0
- package/skills/architecture-decision-records/evals/triggers.json +17 -0
- package/skills/article-writing/SKILL.md +108 -0
- package/skills/article-writing/evals/triggers.json +16 -0
- package/skills/aspnet-core-patterns/SKILL.md +149 -0
- package/skills/aspnet-core-patterns/evals/triggers.json +16 -0
- package/skills/auth-patterns/SKILL.md +104 -0
- package/skills/auth-patterns/evals/triggers.json +17 -0
- package/skills/auth-patterns/references/oauth-oidc.md +64 -0
- package/skills/autonomous-loops/SKILL.md +99 -0
- package/skills/autonomous-loops/evals/triggers.json +14 -0
- package/skills/aws-patterns/SKILL.md +91 -0
- package/skills/aws-patterns/evals/triggers.json +16 -0
- package/skills/azure-patterns/SKILL.md +86 -0
- package/skills/azure-patterns/evals/triggers.json +16 -0
- package/skills/benchmark-methodology/SKILL.md +88 -0
- package/skills/benchmark-methodology/evals/triggers.json +16 -0
- package/skills/benchmark-methodology/references/language-harnesses.md +130 -0
- package/skills/bgp-diagnostics/SKILL.md +84 -0
- package/skills/bgp-diagnostics/evals/triggers.json +18 -0
- package/skills/bgp-diagnostics/references/bgp-reference.md +81 -0
- package/skills/bioinformatics-workflows/SKILL.md +108 -0
- package/skills/bioinformatics-workflows/evals/triggers.json +16 -0
- package/skills/bioinformatics-workflows/references/commands.md +71 -0
- package/skills/bioinformatics-workflows/references/formats.md +24 -0
- package/skills/bioinformatics-workflows/references/workflow-managers.md +107 -0
- package/skills/blender-automation/SKILL.md +100 -0
- package/skills/blender-automation/evals/triggers.json +16 -0
- package/skills/blender-automation/references/batch-and-render.md +77 -0
- package/skills/blender-automation/references/bpy-inspection.md +91 -0
- package/skills/blender-automation/references/rig-and-retarget-checks.md +23 -0
- package/skills/brand-strategy/SKILL.md +83 -0
- package/skills/brand-strategy/evals/triggers.json +16 -0
- package/skills/brand-voice/SKILL.md +112 -0
- package/skills/brand-voice/evals/triggers.json +16 -0
- package/skills/browser-qa/SKILL.md +99 -0
- package/skills/browser-qa/evals/triggers.json +16 -0
- package/skills/bun-runtime/SKILL.md +93 -0
- package/skills/bun-runtime/evals/triggers.json +16 -0
- package/skills/change-impact-analysis/SKILL.md +89 -0
- package/skills/change-impact-analysis/evals/triggers.json +16 -0
- package/skills/change-impact-analysis/references/graph-commands.md +28 -0
- package/skills/cisco-ios-config/SKILL.md +101 -0
- package/skills/cisco-ios-config/evals/triggers.json +18 -0
- package/skills/cisco-ios-config/references/verification.md +63 -0
- package/skills/clickhouse-patterns/SKILL.md +101 -0
- package/skills/clickhouse-patterns/evals/triggers.json +18 -0
- package/skills/clickhouse-patterns/references/engines-and-views.md +138 -0
- package/skills/clinical-decision-support/SKILL.md +90 -0
- package/skills/clinical-decision-support/evals/triggers.json +16 -0
- package/skills/clinical-decision-support/references/cds-hooks.md +76 -0
- package/skills/clinical-decision-support/references/regulatory-boundaries.md +37 -0
- package/skills/code-tour/SKILL.md +97 -0
- package/skills/code-tour/evals/triggers.json +14 -0
- package/skills/codebase-onboarding/SKILL.md +112 -0
- package/skills/codebase-onboarding/evals/triggers.json +14 -0
- package/skills/cold-outreach-sequences/SKILL.md +90 -0
- package/skills/cold-outreach-sequences/evals/triggers.json +16 -0
- package/skills/content-repurposing/SKILL.md +82 -0
- package/skills/content-repurposing/evals/triggers.json +16 -0
- package/skills/context-budget/SKILL.md +84 -0
- package/skills/context-budget/evals/triggers.json +14 -0
- package/skills/contract-drafting/SKILL.md +96 -0
- package/skills/contract-drafting/evals/triggers.json +16 -0
- package/skills/contract-drafting/references/term-sheets.md +68 -0
- package/skills/contract-first-development/SKILL.md +86 -0
- package/skills/contract-first-development/evals/triggers.json +16 -0
- package/skills/contract-first-development/references/tooling.md +46 -0
- package/skills/conventional-commits/SKILL.md +144 -0
- package/skills/conventional-commits/evals/triggers.json +16 -0
- package/skills/cpp-patterns/SKILL.md +129 -0
- package/skills/cpp-patterns/evals/triggers.json +16 -0
- package/skills/cpp-patterns/references/cmake-and-tooling.md +88 -0
- package/skills/cpp-patterns/references/undefined-behaviour.md +75 -0
- package/skills/cpp-testing/SKILL.md +131 -0
- package/skills/cpp-testing/evals/triggers.json +16 -0
- package/skills/csharp-patterns/SKILL.md +110 -0
- package/skills/csharp-patterns/evals/triggers.json +17 -0
- package/skills/csharp-patterns/references/analyzers.md +59 -0
- package/skills/csharp-testing/SKILL.md +85 -0
- package/skills/csharp-testing/evals/triggers.json +17 -0
- package/skills/csharp-testing/references/integration-tests.md +77 -0
- package/skills/css-architecture/SKILL.md +143 -0
- package/skills/css-architecture/evals/triggers.json +16 -0
- package/skills/customs-trade-compliance/SKILL.md +95 -0
- package/skills/customs-trade-compliance/evals/triggers.json +16 -0
- package/skills/customs-trade-compliance/references/incoterms-2020.md +42 -0
- package/skills/dart-patterns/SKILL.md +157 -0
- package/skills/dart-patterns/evals/triggers.json +18 -0
- package/skills/dart-testing/SKILL.md +164 -0
- package/skills/dart-testing/evals/triggers.json +18 -0
- package/skills/data-analysis-notebooks/SKILL.md +113 -0
- package/skills/data-analysis-notebooks/evals/triggers.json +16 -0
- package/skills/data-analysis-notebooks/references/dataframe-pitfalls.md +49 -0
- package/skills/data-analysis-notebooks/references/statistics-pitfalls.md +24 -0
- package/skills/data-pipelines/SKILL.md +90 -0
- package/skills/data-pipelines/evals/triggers.json +16 -0
- package/skills/data-pipelines/references/orchestrators.md +64 -0
- package/skills/database-migrations/SKILL.md +102 -0
- package/skills/database-migrations/evals/triggers.json +16 -0
- package/skills/database-migrations/references/recipes.md +98 -0
- package/skills/database-migrations/references/tools.md +21 -0
- package/skills/dbt-patterns/SKILL.md +96 -0
- package/skills/dbt-patterns/evals/triggers.json +16 -0
- package/skills/dbt-patterns/references/yaml-examples.md +114 -0
- package/skills/decision-council/SKILL.md +98 -0
- package/skills/decision-council/evals/triggers.json +16 -0
- package/skills/deep-research/SKILL.md +107 -0
- package/skills/deep-research/evals/triggers.json +14 -0
- package/skills/dependency-audit/SKILL.md +103 -0
- package/skills/dependency-audit/evals/triggers.json +16 -0
- package/skills/dependency-audit/references/tools.md +124 -0
- package/skills/deployment-strategies/SKILL.md +108 -0
- package/skills/deployment-strategies/evals/triggers.json +16 -0
- package/skills/design-brainstorming/SKILL.md +132 -0
- package/skills/design-brainstorming/evals/behavior.json +55 -0
- package/skills/design-brainstorming/evals/triggers.json +16 -0
- package/skills/design-brainstorming/references/visual-mockups.md +34 -0
- package/skills/desktop-app-testing/SKILL.md +104 -0
- package/skills/desktop-app-testing/evals/triggers.json +16 -0
- package/skills/desktop-app-testing/references/drivers.md +81 -0
- package/skills/django-patterns/SKILL.md +123 -0
- package/skills/django-patterns/evals/triggers.json +16 -0
- package/skills/docker-patterns/SKILL.md +132 -0
- package/skills/docker-patterns/evals/triggers.json +16 -0
- package/skills/docker-patterns/references/dockerfiles.md +105 -0
- package/skills/document-processing/SKILL.md +100 -0
- package/skills/document-processing/evals/triggers.json +17 -0
- package/skills/document-processing/references/extraction-and-ocr.md +71 -0
- package/skills/document-processing/references/forms-and-conversion.md +69 -0
- package/skills/document-processing/references/redaction.md +61 -0
- package/skills/e2e-testing-playwright/SKILL.md +94 -0
- package/skills/e2e-testing-playwright/evals/triggers.json +16 -0
- package/skills/e2e-testing-playwright/references/config-and-ci.md +129 -0
- package/skills/ef-core-patterns/SKILL.md +117 -0
- package/skills/ef-core-patterns/evals/triggers.json +16 -0
- package/skills/email-deliverability/SKILL.md +99 -0
- package/skills/email-deliverability/evals/triggers.json +17 -0
- package/skills/email-deliverability/references/dns-records.md +85 -0
- package/skills/energy-procurement/SKILL.md +106 -0
- package/skills/energy-procurement/evals/triggers.json +16 -0
- package/skills/error-handling-patterns/SKILL.md +112 -0
- package/skills/error-handling-patterns/evals/triggers.json +18 -0
- package/skills/error-handling-patterns/references/language-idioms.md +49 -0
- package/skills/estimation-and-scoping/SKILL.md +97 -0
- package/skills/estimation-and-scoping/evals/triggers.json +14 -0
- package/skills/evm-dapp-integration/SKILL.md +73 -0
- package/skills/evm-dapp-integration/evals/triggers.json +16 -0
- package/skills/fastapi-patterns/SKILL.md +127 -0
- package/skills/fastapi-patterns/evals/triggers.json +16 -0
- package/skills/ffmpeg-media-processing/SKILL.md +94 -0
- package/skills/ffmpeg-media-processing/evals/triggers.json +16 -0
- package/skills/ffmpeg-media-processing/references/recipes.md +112 -0
- package/skills/fhir-integration/SKILL.md +81 -0
- package/skills/fhir-integration/evals/triggers.json +16 -0
- package/skills/fhir-integration/references/search-and-bundles.md +73 -0
- package/skills/fhir-integration/references/smart-on-fhir.md +50 -0
- package/skills/finishing-a-branch/SKILL.md +127 -0
- package/skills/finishing-a-branch/evals/behavior.json +49 -0
- package/skills/finishing-a-branch/evals/triggers.json +16 -0
- package/skills/flask-patterns/SKILL.md +132 -0
- package/skills/flask-patterns/evals/triggers.json +16 -0
- package/skills/flutter-patterns/SKILL.md +99 -0
- package/skills/flutter-patterns/evals/triggers.json +16 -0
- package/skills/flutterwave-integration/SKILL.md +75 -0
- package/skills/flutterwave-integration/evals/triggers.json +16 -0
- package/skills/flutterwave-integration/references/api.md +73 -0
- package/skills/flutterwave-integration/references/webhooks.md +49 -0
- package/skills/freight-carrier-management/SKILL.md +107 -0
- package/skills/freight-carrier-management/evals/triggers.json +16 -0
- package/skills/fsharp-patterns/SKILL.md +133 -0
- package/skills/fsharp-patterns/evals/triggers.json +16 -0
- package/skills/fsharp-testing/SKILL.md +136 -0
- package/skills/fsharp-testing/evals/triggers.json +16 -0
- package/skills/gcp-patterns/SKILL.md +86 -0
- package/skills/gcp-patterns/evals/triggers.json +16 -0
- package/skills/git-workflow/SKILL.md +114 -0
- package/skills/git-workflow/evals/triggers.json +16 -0
- package/skills/git-worktrees/SKILL.md +130 -0
- package/skills/git-worktrees/evals/behavior.json +56 -0
- package/skills/git-worktrees/evals/triggers.json +16 -0
- package/skills/github-actions-ci/SKILL.md +117 -0
- package/skills/github-actions-ci/evals/triggers.json +16 -0
- package/skills/github-api-automation/SKILL.md +101 -0
- package/skills/github-api-automation/evals/triggers.json +17 -0
- package/skills/go-patterns/SKILL.md +118 -0
- package/skills/go-patterns/evals/triggers.json +17 -0
- package/skills/go-patterns/references/concurrency.md +162 -0
- package/skills/go-testing/SKILL.md +154 -0
- package/skills/go-testing/evals/triggers.json +17 -0
- package/skills/google-workspace-integration/SKILL.md +65 -0
- package/skills/google-workspace-integration/evals/triggers.json +17 -0
- package/skills/google-workspace-integration/references/api.md +121 -0
- package/skills/harmonyos-arkts/SKILL.md +117 -0
- package/skills/harmonyos-arkts/evals/triggers.json +16 -0
- package/skills/harmonyos-arkts/references/build-errors.md +42 -0
- package/skills/hexagonal-architecture/SKILL.md +89 -0
- package/skills/hexagonal-architecture/evals/triggers.json +17 -0
- package/skills/hipaa-compliance/SKILL.md +91 -0
- package/skills/hipaa-compliance/evals/triggers.json +18 -0
- package/skills/hipaa-compliance/references/safeguards.md +68 -0
- package/skills/hl7v2-integration/SKILL.md +69 -0
- package/skills/hl7v2-integration/evals/triggers.json +16 -0
- package/skills/hl7v2-integration/references/messages-and-ack.md +78 -0
- package/skills/homelab-network-setup/SKILL.md +125 -0
- package/skills/homelab-network-setup/evals/triggers.json +18 -0
- package/skills/homelab-network-setup/references/firewall-and-dns.md +45 -0
- package/skills/homelab-network-setup/references/wireguard.md +72 -0
- package/skills/hubtel-integration/SKILL.md +77 -0
- package/skills/hubtel-integration/evals/triggers.json +16 -0
- package/skills/hubtel-integration/references/api.md +92 -0
- package/skills/i18n-localization/SKILL.md +114 -0
- package/skills/i18n-localization/evals/triggers.json +16 -0
- package/skills/i18n-localization/references/libraries.md +52 -0
- package/skills/implementation-plans/SKILL.md +117 -0
- package/skills/implementation-plans/evals/behavior.json +54 -0
- package/skills/implementation-plans/evals/triggers.json +16 -0
- package/skills/incident-postmortem/SKILL.md +118 -0
- package/skills/incident-postmortem/evals/triggers.json +14 -0
- package/skills/inventory-demand-planning/SKILL.md +89 -0
- package/skills/inventory-demand-planning/evals/triggers.json +16 -0
- package/skills/inventory-demand-planning/references/formulas.md +62 -0
- package/skills/investor-materials/SKILL.md +127 -0
- package/skills/investor-materials/evals/triggers.json +16 -0
- package/skills/investor-materials/references/templates.md +74 -0
- package/skills/invoicing-and-tax/SKILL.md +84 -0
- package/skills/invoicing-and-tax/evals/triggers.json +17 -0
- package/skills/invoicing-and-tax/references/e-invoicing.md +24 -0
- package/skills/invoicing-and-tax/references/invoice-fields.md +38 -0
- package/skills/invoicing-and-tax/references/rounding.md +26 -0
- package/skills/ios-platform-features/SKILL.md +99 -0
- package/skills/ios-platform-features/evals/triggers.json +16 -0
- package/skills/ios-platform-features/references/foundation-models.md +90 -0
- package/skills/java-patterns/SKILL.md +141 -0
- package/skills/java-patterns/evals/triggers.json +17 -0
- package/skills/java-testing/SKILL.md +142 -0
- package/skills/java-testing/evals/triggers.json +16 -0
- package/skills/jetpack-compose-patterns/SKILL.md +88 -0
- package/skills/jetpack-compose-patterns/evals/triggers.json +16 -0
- package/skills/jira-integration/SKILL.md +92 -0
- package/skills/jira-integration/evals/triggers.json +17 -0
- package/skills/jpa-hibernate/SKILL.md +92 -0
- package/skills/jpa-hibernate/evals/triggers.json +18 -0
- package/skills/jpa-hibernate/references/mapping.md +99 -0
- package/skills/jvm-sql-mappers/SKILL.md +98 -0
- package/skills/jvm-sql-mappers/evals/triggers.json +16 -0
- package/skills/jvm-sql-mappers/references/examples.md +129 -0
- package/skills/kotlin-multiplatform/SKILL.md +97 -0
- package/skills/kotlin-multiplatform/evals/triggers.json +16 -0
- package/skills/kotlin-patterns/SKILL.md +128 -0
- package/skills/kotlin-patterns/evals/triggers.json +16 -0
- package/skills/kotlin-testing/SKILL.md +117 -0
- package/skills/kotlin-testing/evals/triggers.json +16 -0
- package/skills/ktor-patterns/SKILL.md +135 -0
- package/skills/ktor-patterns/evals/triggers.json +18 -0
- package/skills/kubernetes-patterns/SKILL.md +106 -0
- package/skills/kubernetes-patterns/evals/triggers.json +16 -0
- package/skills/kubernetes-patterns/references/manifests.md +115 -0
- package/skills/laravel-patterns/SKILL.md +136 -0
- package/skills/laravel-patterns/evals/triggers.json +16 -0
- package/skills/linear-integration/SKILL.md +98 -0
- package/skills/linear-integration/evals/triggers.json +17 -0
- package/skills/literature-review/SKILL.md +109 -0
- package/skills/literature-review/evals/triggers.json +16 -0
- package/skills/literature-review/references/appraisal.md +41 -0
- package/skills/literature-review/references/search-sources.md +39 -0
- package/skills/llm-app-patterns/SKILL.md +97 -0
- package/skills/llm-app-patterns/evals/triggers.json +17 -0
- package/skills/llm-evals/SKILL.md +98 -0
- package/skills/llm-evals/evals/triggers.json +16 -0
- package/skills/llm-evals/references/graders.md +66 -0
- package/skills/logistics-exception-management/SKILL.md +90 -0
- package/skills/logistics-exception-management/evals/triggers.json +16 -0
- package/skills/manim-animations/SKILL.md +106 -0
- package/skills/manim-animations/evals/triggers.json +16 -0
- package/skills/market-research/SKILL.md +117 -0
- package/skills/market-research/evals/triggers.json +16 -0
- package/skills/marketing-campaign/SKILL.md +111 -0
- package/skills/marketing-campaign/evals/triggers.json +16 -0
- package/skills/mcp-server-patterns/SKILL.md +127 -0
- package/skills/mcp-server-patterns/evals/triggers.json +18 -0
- package/skills/mcp-server-patterns/references/protocol-notes.md +68 -0
- package/skills/metrics-dashboards/SKILL.md +113 -0
- package/skills/metrics-dashboards/evals/triggers.json +16 -0
- package/skills/ml-experiment-workflow/SKILL.md +125 -0
- package/skills/ml-experiment-workflow/evals/triggers.json +16 -0
- package/skills/mobile-accessibility/SKILL.md +94 -0
- package/skills/mobile-accessibility/evals/triggers.json +16 -0
- package/skills/mongodb-patterns/SKILL.md +115 -0
- package/skills/mongodb-patterns/evals/triggers.json +18 -0
- package/skills/mongodb-patterns/references/indexes-and-aggregation.md +94 -0
- package/skills/mpesa-daraja-integration/SKILL.md +70 -0
- package/skills/mpesa-daraja-integration/evals/triggers.json +16 -0
- package/skills/mpesa-daraja-integration/references/api.md +103 -0
- package/skills/mpesa-daraja-integration/references/callbacks.md +74 -0
- package/skills/mtn-momo-integration/SKILL.md +66 -0
- package/skills/mtn-momo-integration/evals/triggers.json +16 -0
- package/skills/mtn-momo-integration/references/api.md +153 -0
- package/skills/mtn-momo-integration/references/callbacks.md +92 -0
- package/skills/mtn-momo-integration/references/sandbox-and-go-live.md +51 -0
- package/skills/mtn-momo-integration/scripts/sandbox-setup.js +79 -0
- package/skills/mysql-patterns/SKILL.md +96 -0
- package/skills/mysql-patterns/evals/triggers.json +16 -0
- package/skills/mysql-patterns/references/explain.md +34 -0
- package/skills/mysql-patterns/references/online-ddl.md +41 -0
- package/skills/nestjs-patterns/SKILL.md +114 -0
- package/skills/nestjs-patterns/evals/triggers.json +16 -0
- package/skills/nestjs-patterns/references/testing.md +68 -0
- package/skills/network-automation/SKILL.md +107 -0
- package/skills/network-automation/evals/triggers.json +18 -0
- package/skills/network-automation/references/tool-snippets.md +153 -0
- package/skills/network-design/SKILL.md +98 -0
- package/skills/network-design/evals/triggers.json +16 -0
- package/skills/network-troubleshooting/SKILL.md +152 -0
- package/skills/network-troubleshooting/evals/triggers.json +18 -0
- package/skills/network-troubleshooting/references/commands.md +33 -0
- package/skills/nextjs-patterns/SKILL.md +150 -0
- package/skills/nextjs-patterns/evals/triggers.json +18 -0
- package/skills/nextjs-patterns/references/caching.md +87 -0
- package/skills/node-backend-patterns/SKILL.md +103 -0
- package/skills/node-backend-patterns/evals/triggers.json +16 -0
- package/skills/node-backend-patterns/references/templates.md +122 -0
- package/skills/nuxt-patterns/SKILL.md +103 -0
- package/skills/nuxt-patterns/evals/triggers.json +16 -0
- package/skills/observability/SKILL.md +125 -0
- package/skills/observability/evals/triggers.json +17 -0
- package/skills/observability/references/otel-setup.md +87 -0
- package/skills/observability/references/slo-alerts.md +70 -0
- package/skills/open-source-release/SKILL.md +107 -0
- package/skills/open-source-release/evals/triggers.json +15 -0
- package/skills/open-source-release/references/history-scrub.md +65 -0
- package/skills/parallel-agent-orchestration/SKILL.md +106 -0
- package/skills/parallel-agent-orchestration/evals/triggers.json +14 -0
- package/skills/patent-research/SKILL.md +94 -0
- package/skills/patent-research/evals/triggers.json +16 -0
- package/skills/patent-research/references/databases-and-queries.md +52 -0
- package/skills/paystack-integration/SKILL.md +59 -0
- package/skills/paystack-integration/evals/triggers.json +14 -0
- package/skills/paystack-integration/references/api.md +73 -0
- package/skills/paystack-integration/references/mobile-money.md +50 -0
- package/skills/paystack-integration/references/webhooks.md +80 -0
- package/skills/pci-dss-scope/SKILL.md +103 -0
- package/skills/pci-dss-scope/evals/triggers.json +18 -0
- package/skills/pci-dss-scope/references/saq-and-data.md +36 -0
- package/skills/perl-patterns/SKILL.md +135 -0
- package/skills/perl-patterns/evals/triggers.json +18 -0
- package/skills/perl-testing/SKILL.md +126 -0
- package/skills/perl-testing/evals/triggers.json +17 -0
- package/skills/php-patterns/SKILL.md +116 -0
- package/skills/php-patterns/evals/triggers.json +16 -0
- package/skills/php-testing/SKILL.md +123 -0
- package/skills/php-testing/evals/triggers.json +16 -0
- package/skills/postgres-patterns/SKILL.md +103 -0
- package/skills/postgres-patterns/evals/triggers.json +17 -0
- package/skills/postgres-patterns/references/explain.md +59 -0
- package/skills/postgres-patterns/references/locks.md +53 -0
- package/skills/prd-writing/SKILL.md +124 -0
- package/skills/prd-writing/evals/triggers.json +15 -0
- package/skills/prisma-patterns/SKILL.md +83 -0
- package/skills/prisma-patterns/evals/triggers.json +18 -0
- package/skills/prisma-patterns/references/prisma-8.md +46 -0
- package/skills/prisma-patterns/references/workflow.md +50 -0
- package/skills/privacy-compliance/SKILL.md +121 -0
- package/skills/privacy-compliance/evals/triggers.json +18 -0
- package/skills/privacy-compliance/references/jurisdictions.md +51 -0
- package/skills/production-scheduling/SKILL.md +98 -0
- package/skills/production-scheduling/evals/triggers.json +16 -0
- package/skills/prompt-engineering/SKILL.md +92 -0
- package/skills/prompt-engineering/evals/triggers.json +16 -0
- package/skills/prospect-research/SKILL.md +87 -0
- package/skills/prospect-research/evals/triggers.json +16 -0
- package/skills/python-app-distribution/SKILL.md +107 -0
- package/skills/python-app-distribution/evals/triggers.json +16 -0
- package/skills/python-app-distribution/references/pypi-trusted-publishing.md +55 -0
- package/skills/python-app-distribution/references/windows-macos-signing.md +70 -0
- package/skills/python-patterns/SKILL.md +107 -0
- package/skills/python-patterns/evals/triggers.json +16 -0
- package/skills/python-patterns/references/tooling.md +101 -0
- package/skills/python-testing/SKILL.md +126 -0
- package/skills/python-testing/evals/triggers.json +16 -0
- package/skills/python-testing/references/mocking.md +71 -0
- package/skills/pytorch-patterns/SKILL.md +139 -0
- package/skills/pytorch-patterns/evals/triggers.json +16 -0
- package/skills/pytorch-patterns/references/debugging.md +39 -0
- package/skills/quality-nonconformance/SKILL.md +107 -0
- package/skills/quality-nonconformance/evals/triggers.json +16 -0
- package/skills/quality-nonconformance/references/8d-and-capa.md +46 -0
- package/skills/quarkus-patterns/SKILL.md +93 -0
- package/skills/quarkus-patterns/evals/triggers.json +18 -0
- package/skills/rag-pipeline-patterns/SKILL.md +117 -0
- package/skills/rag-pipeline-patterns/evals/triggers.json +18 -0
- package/skills/rag-pipeline-patterns/references/evaluation.md +37 -0
- package/skills/rag-pipeline-patterns/references/retrieval-recipes.md +78 -0
- package/skills/rails-patterns/SKILL.md +132 -0
- package/skills/rails-patterns/evals/triggers.json +16 -0
- package/skills/react-native-patterns/SKILL.md +101 -0
- package/skills/react-native-patterns/evals/triggers.json +16 -0
- package/skills/react-patterns/SKILL.md +140 -0
- package/skills/react-patterns/evals/triggers.json +18 -0
- package/skills/react-performance/SKILL.md +107 -0
- package/skills/react-performance/evals/triggers.json +18 -0
- package/skills/react-testing/SKILL.md +121 -0
- package/skills/react-testing/evals/triggers.json +18 -0
- package/skills/react-testing/references/msw.md +64 -0
- package/skills/react-testing/references/queries.md +41 -0
- package/skills/react-testing/references/setup.md +74 -0
- package/skills/recommender-systems/SKILL.md +119 -0
- package/skills/recommender-systems/evals/triggers.json +16 -0
- package/skills/recommender-systems/references/evaluation.md +39 -0
- package/skills/redis-patterns/SKILL.md +109 -0
- package/skills/redis-patterns/evals/triggers.json +18 -0
- package/skills/redis-patterns/references/operations.md +61 -0
- package/skills/refactoring-safely/SKILL.md +107 -0
- package/skills/refactoring-safely/evals/behavior.json +57 -0
- package/skills/refactoring-safely/evals/triggers.json +17 -0
- package/skills/release-management/SKILL.md +141 -0
- package/skills/release-management/evals/triggers.json +16 -0
- package/skills/remotion-video/SKILL.md +91 -0
- package/skills/remotion-video/evals/triggers.json +16 -0
- package/skills/remotion-video/references/lambda.md +66 -0
- package/skills/reproducible-dev-environments/SKILL.md +132 -0
- package/skills/reproducible-dev-environments/evals/triggers.json +16 -0
- package/skills/responding-to-code-review/SKILL.md +124 -0
- package/skills/responding-to-code-review/evals/behavior.json +54 -0
- package/skills/responding-to-code-review/evals/triggers.json +16 -0
- package/skills/returns-reverse-logistics/SKILL.md +97 -0
- package/skills/returns-reverse-logistics/evals/triggers.json +16 -0
- package/skills/ruby-patterns/SKILL.md +127 -0
- package/skills/ruby-patterns/evals/triggers.json +18 -0
- package/skills/ruby-testing/SKILL.md +113 -0
- package/skills/ruby-testing/evals/triggers.json +18 -0
- package/skills/runbook-writing/SKILL.md +101 -0
- package/skills/runbook-writing/evals/triggers.json +14 -0
- package/skills/rust-patterns/SKILL.md +118 -0
- package/skills/rust-patterns/evals/triggers.json +16 -0
- package/skills/rust-patterns/references/cargo-and-clippy.md +105 -0
- package/skills/rust-patterns/references/errors-and-traits.md +97 -0
- package/skills/rust-testing/SKILL.md +148 -0
- package/skills/rust-testing/evals/triggers.json +16 -0
- package/skills/rust-testing/references/fakes-proptest-async.md +113 -0
- package/skills/search-first/SKILL.md +73 -0
- package/skills/search-first/evals/triggers.json +14 -0
- package/skills/security-review/SKILL.md +58 -0
- package/skills/security-review/evals/behavior.json +56 -0
- package/skills/security-review/evals/triggers.json +14 -0
- package/skills/security-review/references/checklist.md +54 -0
- package/skills/security-review/scripts/scan-secrets.js +79 -0
- package/skills/seo-audit/SKILL.md +111 -0
- package/skills/seo-audit/evals/triggers.json +16 -0
- package/skills/seo-audit/references/checks.md +65 -0
- package/skills/session-handoff/SKILL.md +101 -0
- package/skills/session-handoff/evals/behavior.json +55 -0
- package/skills/session-handoff/evals/triggers.json +14 -0
- package/skills/skill-authoring/SKILL.md +98 -0
- package/skills/skill-authoring/evals/triggers.json +15 -0
- package/skills/skill-authoring/references/frontmatter.md +40 -0
- package/skills/skill-authoring/references/pressure-testing.md +87 -0
- package/skills/slack-app-integration/SKILL.md +108 -0
- package/skills/slack-app-integration/evals/triggers.json +17 -0
- package/skills/slide-decks/SKILL.md +107 -0
- package/skills/slide-decks/evals/triggers.json +18 -0
- package/skills/slide-decks/references/html-decks.md +86 -0
- package/skills/slide-decks/references/layouts.md +45 -0
- package/skills/slide-decks/references/pptx.md +87 -0
- package/skills/smart-contract-security/SKILL.md +110 -0
- package/skills/smart-contract-security/evals/triggers.json +16 -0
- package/skills/smart-contract-security/references/vulnerability-checklist.md +79 -0
- package/skills/social-media-publishing/SKILL.md +84 -0
- package/skills/social-media-publishing/evals/triggers.json +17 -0
- package/skills/social-media-publishing/references/platform-apis.md +116 -0
- package/skills/solidity-patterns/SKILL.md +95 -0
- package/skills/solidity-patterns/evals/triggers.json +16 -0
- package/skills/spring-boot-patterns/SKILL.md +128 -0
- package/skills/spring-boot-patterns/evals/triggers.json +18 -0
- package/skills/spring-boot-patterns/references/testing.md +72 -0
- package/skills/stripe-integration/SKILL.md +69 -0
- package/skills/stripe-integration/evals/triggers.json +16 -0
- package/skills/stripe-integration/references/api.md +71 -0
- package/skills/stripe-integration/references/billing.md +58 -0
- package/skills/stripe-integration/references/webhooks.md +76 -0
- package/skills/subagent-driven-development/SKILL.md +109 -0
- package/skills/subagent-driven-development/evals/behavior.json +53 -0
- package/skills/subagent-driven-development/evals/triggers.json +15 -0
- package/skills/subagent-driven-development/references/implementer-brief.md +60 -0
- package/skills/subagent-driven-development/references/reviewer-briefs.md +52 -0
- package/skills/subscription-billing-ops/SKILL.md +118 -0
- package/skills/subscription-billing-ops/evals/triggers.json +17 -0
- package/skills/subscription-billing-ops/references/proration.md +47 -0
- package/skills/subscription-billing-ops/references/revenue-metrics.md +38 -0
- package/skills/svelte-patterns/SKILL.md +122 -0
- package/skills/svelte-patterns/evals/triggers.json +16 -0
- package/skills/swift-patterns/SKILL.md +113 -0
- package/skills/swift-patterns/evals/triggers.json +16 -0
- package/skills/swift-patterns/references/concurrency-migration.md +40 -0
- package/skills/swift-testing/SKILL.md +121 -0
- package/skills/swift-testing/evals/triggers.json +16 -0
- package/skills/swift-testing/references/swift-testing-cheatsheet.md +81 -0
- package/skills/swiftui-patterns/SKILL.md +102 -0
- package/skills/swiftui-patterns/evals/triggers.json +16 -0
- package/skills/systematic-debugging/SKILL.md +92 -0
- package/skills/systematic-debugging/evals/behavior.json +59 -0
- package/skills/systematic-debugging/evals/triggers.json +16 -0
- package/skills/systematic-debugging/references/condition-waiting.md +52 -0
- package/skills/systematic-debugging/references/root-cause-tracing.md +49 -0
- package/skills/systematic-debugging/references/test-pollution.md +46 -0
- package/skills/tdd-workflow/SKILL.md +69 -0
- package/skills/tdd-workflow/evals/behavior.json +55 -0
- package/skills/tdd-workflow/evals/triggers.json +15 -0
- package/skills/tdd-workflow/references/testing-anti-patterns.md +87 -0
- package/skills/technical-writing/SKILL.md +95 -0
- package/skills/technical-writing/evals/triggers.json +14 -0
- package/skills/terraform-patterns/SKILL.md +122 -0
- package/skills/terraform-patterns/evals/triggers.json +16 -0
- package/skills/terraform-patterns/references/backends.md +67 -0
- package/skills/test-coverage-improvement/SKILL.md +107 -0
- package/skills/test-coverage-improvement/evals/triggers.json +16 -0
- package/skills/threat-modeling/SKILL.md +113 -0
- package/skills/threat-modeling/evals/triggers.json +16 -0
- package/skills/transactional-email/SKILL.md +68 -0
- package/skills/transactional-email/evals/triggers.json +17 -0
- package/skills/transactional-email/references/providers.md +63 -0
- package/skills/typescript-patterns/SKILL.md +122 -0
- package/skills/typescript-patterns/evals/triggers.json +16 -0
- package/skills/typescript-testing/SKILL.md +101 -0
- package/skills/typescript-testing/evals/triggers.json +16 -0
- package/skills/ui-demo-recording/SKILL.md +93 -0
- package/skills/ui-demo-recording/evals/triggers.json +16 -0
- package/skills/ui-demo-recording/references/cursor-and-captions.md +48 -0
- package/skills/ui-demo-recording/references/playwright-recording.md +63 -0
- package/skills/ui-demo-recording/references/post-processing.md +57 -0
- package/skills/ui-design-polish/SKILL.md +113 -0
- package/skills/ui-design-polish/evals/triggers.json +18 -0
- package/skills/ui-design-polish/references/detail-checklist.md +45 -0
- package/skills/ui-design-polish/references/tokens.md +68 -0
- package/skills/ui-flow-audit/SKILL.md +112 -0
- package/skills/ui-flow-audit/evals/triggers.json +17 -0
- package/skills/ui-motion/SKILL.md +103 -0
- package/skills/ui-motion/evals/triggers.json +18 -0
- package/skills/ui-motion/references/patterns.md +138 -0
- package/skills/ui-motion/references/tokens.md +52 -0
- package/skills/unicode-text-processing/SKILL.md +103 -0
- package/skills/unicode-text-processing/evals/triggers.json +17 -0
- package/skills/unicode-text-processing/references/apis.md +89 -0
- package/skills/unicode-text-processing/references/script-notes.md +50 -0
- package/skills/verification-loop/SKILL.md +70 -0
- package/skills/verification-loop/evals/behavior.json +52 -0
- package/skills/verification-loop/evals/triggers.json +14 -0
- package/skills/verification-loop/scripts/detect-checks.js +102 -0
- package/skills/video-editing/SKILL.md +111 -0
- package/skills/video-editing/evals/triggers.json +16 -0
- package/skills/video-editing/references/edl-and-logging.md +44 -0
- package/skills/video-editing/references/ffmpeg-edit-recipes.md +92 -0
- package/skills/video-editing/references/resolve-scripting.md +53 -0
- package/skills/vite-patterns/SKILL.md +117 -0
- package/skills/vite-patterns/evals/triggers.json +16 -0
- package/skills/vue-patterns/SKILL.md +104 -0
- package/skills/vue-patterns/evals/triggers.json +16 -0
- package/skills/web-accessibility/SKILL.md +119 -0
- package/skills/web-accessibility/evals/triggers.json +16 -0
- package/skills/web-performance/SKILL.md +107 -0
- package/skills/web-performance/evals/triggers.json +16 -0
- package/skills/web-scraping/SKILL.md +80 -0
- package/skills/web-scraping/evals/triggers.json +16 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: release-management
|
|
3
|
+
description: Ships a software release end to end - deciding the next semantic version from what changed, updating the changelog, tagging, writing release notes for users, cutting alpha/beta/rc pre-releases, patching an old version from a hotfix branch, and wiring up release tooling such as release-please, semantic-release or Changesets. Use when preparing or publishing a release, picking a version number, turning merged work into release notes, shipping a hotfix to an already-released line, or automating versioning and changelogs.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. Needs git. Publishing steps need the project's package manager and, for GitHub releases, the gh CLI.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: devops
|
|
9
|
+
kete-loom/risk: runs-commands
|
|
10
|
+
kete-loom/requires: "git"
|
|
11
|
+
kete-loom/owner: "Kete-org"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Release management
|
|
15
|
+
|
|
16
|
+
A release is a promise: this exact commit, with this version number, does what the notes say. Work through the steps in order and stop at each checkpoint marked **ask**.
|
|
17
|
+
|
|
18
|
+
## 0. Find the existing process
|
|
19
|
+
|
|
20
|
+
1. Look for release tooling and docs: `RELEASING.md`, `CONTRIBUTING.md`, `release-please-config.json`, `.release-please-manifest.json`, `.releaserc*`, `release.config.*` or a `release` key in `package.json` (semantic-release), `.changeset/` (Changesets), `cliff.toml` (git-cliff), `.goreleaser.yaml`, and release workflows in `.github/workflows/`.
|
|
21
|
+
2. If a tool owns versioning, **use the tool**. Don't hand-edit versions or changelogs it generates; that causes drift or a double bump.
|
|
22
|
+
3. Find every place the version lives: `package.json`, `pyproject.toml`, `Cargo.toml`, `*.csproj`, `build.gradle*`, `pubspec.yaml`, plugin manifests, a `VERSION` file, constants in code. Search the codebase for the current version string to catch the rest.
|
|
23
|
+
4. Find the last release: `git describe --tags --abbrev=0` and `git tag --sort=-v:refname | head`.
|
|
24
|
+
|
|
25
|
+
## 1. Check the release is ready
|
|
26
|
+
|
|
27
|
+
- `git fetch --tags --prune`, and confirm you are on the release branch (usually the default branch) with a clean tree and nothing unpushed.
|
|
28
|
+
- CI is green for the exact commit you will tag. Run the project's full check command locally as well.
|
|
29
|
+
- If anything fails, **stop**. Never tag a red build.
|
|
30
|
+
|
|
31
|
+
## 2. Decide the version (Semantic Versioning 2.0.0)
|
|
32
|
+
|
|
33
|
+
List what changed since the last tag: `git log --oneline <last-tag>..HEAD`. If commits follow Conventional Commits, the type and `!`/`BREAKING CHANGE` footers tell you directly.
|
|
34
|
+
|
|
35
|
+
| Since last release | Bump | Example |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| Any incompatible change to the public API, config, CLI, data format or supported runtimes | MAJOR | 2.4.1 → 3.0.0 |
|
|
38
|
+
| New backward-compatible functionality, or a deprecation | MINOR | 2.4.1 → 2.5.0 |
|
|
39
|
+
| Only backward-compatible bug fixes | PATCH | 2.4.1 → 2.4.2 |
|
|
40
|
+
| Nothing user-facing (docs, tests, CI) | No release needed | |
|
|
41
|
+
|
|
42
|
+
Rules:
|
|
43
|
+
|
|
44
|
+
- First decide what the **public API** is (exported functions, HTTP endpoints, CLI flags, config keys, file formats). Only changes to it count.
|
|
45
|
+
- Under `0.y.z`, the public API is not stable and anything may change. Most projects bump MINOR for breaking changes and PATCH for everything else; follow the project's history.
|
|
46
|
+
- `1.0.0` is a deliberate decision that the API is stable. **Ask** before making it.
|
|
47
|
+
- A MAJOR bump, or any case where you are unsure whether something is breaking: **ask** the user, with the specific change that makes you think so.
|
|
48
|
+
- Never reuse or move a published version or tag. A bad release gets a new version.
|
|
49
|
+
|
|
50
|
+
## 3. Update the changelog
|
|
51
|
+
|
|
52
|
+
If no tool generates it, keep `CHANGELOG.md` in the Keep a Changelog style:
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
## [2.5.0] - 2026-03-14
|
|
56
|
+
|
|
57
|
+
### Added
|
|
58
|
+
- CSV export from the reports page (#512)
|
|
59
|
+
|
|
60
|
+
### Fixed
|
|
61
|
+
- Totals no longer go negative when a refund exceeds the line amount (#498)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
- Sections: Added, Changed, Deprecated, Removed, Fixed, Security. Omit empty ones.
|
|
65
|
+
- Write each entry for the user of the software, not the developer: what they can now do or what stopped going wrong. Link the PR or issue.
|
|
66
|
+
- Move entries out of `## [Unreleased]` into the new version heading; date in ISO format.
|
|
67
|
+
- Breaking changes go first under **Changed** or **Removed**, each with the migration step.
|
|
68
|
+
|
|
69
|
+
## 4. Bump, commit and tag
|
|
70
|
+
|
|
71
|
+
1. Update every version location from step 0. Use the ecosystem's command where one exists (for example `npm version <x.y.z> --no-git-tag-version`) so lockfiles follow.
|
|
72
|
+
2. Commit: `git commit -am "chore(release): <x.y.z>"` (or the project's convention).
|
|
73
|
+
3. Tag with an **annotated** tag: `git tag -a v<x.y.z> -m "v<x.y.z>"`. Use `-s` instead of `-a` if the project signs tags. Match the existing tag prefix (`v1.2.3` or `1.2.3`, or `pkg@1.2.3` in monorepos).
|
|
74
|
+
4. **Ask** before pushing: pushing a tag usually triggers publishing. Then `git push origin <branch>` and `git push origin v<x.y.z>`. Don't use `git push --tags`, which can push stray local tags.
|
|
75
|
+
|
|
76
|
+
## 5. Release notes
|
|
77
|
+
|
|
78
|
+
Release notes are the changelog entry rewritten for a reader skimming the release page.
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
## Highlights
|
|
82
|
+
<1-3 sentences on why someone should upgrade>
|
|
83
|
+
|
|
84
|
+
## Breaking changes
|
|
85
|
+
- <what changed> → <what to do>
|
|
86
|
+
|
|
87
|
+
## What's new / Fixes
|
|
88
|
+
- <user-facing change> (#PR)
|
|
89
|
+
|
|
90
|
+
## Upgrade
|
|
91
|
+
<command or steps, including any migration>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Publish with `gh release create v<x.y.z> --title "v<x.y.z>" --notes-file notes.md --verify-tag` (add `--prerelease` for pre-releases). `--verify-tag` aborts if the tag is not on the remote, instead of letting gh create a tag from the default branch's head. `--generate-notes` builds a PR list, which is a starting draft, not finished notes.
|
|
95
|
+
|
|
96
|
+
## 6. Pre-releases
|
|
97
|
+
|
|
98
|
+
- Format: `<x.y.z>-<label>.<n>`, for example `3.0.0-beta.2`. SemVer orders `alpha < beta < rc` and `3.0.0-rc.1 < 3.0.0`. Always put a dot before the counter: `beta.10` sorts after `beta.9` (numeric identifiers compare as numbers), but `beta10` sorts before `beta9` (compared as text).
|
|
99
|
+
- Publish so default installs don't pick them up: `npm publish --tag next` (npm), a pre-release version string for PyPI (`3.0.0b2`, PEP 440), `--prerelease` on the GitHub release.
|
|
100
|
+
- Bump only the counter between pre-releases of the same version; the final release drops the suffix.
|
|
101
|
+
|
|
102
|
+
## 7. Hotfixes to a released line
|
|
103
|
+
|
|
104
|
+
When a fix must ship without unreleased work on the default branch:
|
|
105
|
+
|
|
106
|
+
1. Branch from the release tag: `git switch -c hotfix/<x.y.z+1> v<x.y.z>`.
|
|
107
|
+
2. Land the fix on the default branch first when possible, then `git cherry-pick -x <sha>` onto the hotfix branch (`-x` records the source commit). If it only applies to the old line, fix it there and port forward.
|
|
108
|
+
3. Run the full checks on the hotfix branch, then do steps 3-5 with a PATCH bump.
|
|
109
|
+
4. Make sure the changelog entry also reaches the default branch, so the next release doesn't lose it.
|
|
110
|
+
5. For long-lived support lines, keep a `release/<major>.<minor>` branch instead of recreating it each time.
|
|
111
|
+
|
|
112
|
+
## 8. Automating releases
|
|
113
|
+
|
|
114
|
+
Pick one tool, and only if the project has none yet. **Ask** before adding it, since it changes how everyone merges.
|
|
115
|
+
|
|
116
|
+
| Tool | Fits | How it works |
|
|
117
|
+
|---|---|---|
|
|
118
|
+
| release-please | GitHub repos, monorepos, wanting a human gate | Opens a release PR from Conventional Commits; merging it tags and releases |
|
|
119
|
+
| semantic-release | Fully automatic releases on every merge | Analyses commits in CI, then bumps, tags and publishes |
|
|
120
|
+
| Changesets | JS monorepos, versioning decided per PR | Contributors add `.changeset/*.md` files; a release PR applies them |
|
|
121
|
+
| git-cliff | Changelog generation only | Builds the changelog from commits via `cliff.toml` |
|
|
122
|
+
|
|
123
|
+
Before wiring one in: confirm commit messages already follow the convention it needs, give the CI token only the permissions the tool's docs list, and run it in dry-run mode first (`semantic-release --dry-run`, or check release-please's PR before merging).
|
|
124
|
+
|
|
125
|
+
## Never
|
|
126
|
+
|
|
127
|
+
- Never tag or publish from a dirty tree or an unpushed commit.
|
|
128
|
+
- Never delete or move a published tag, or republish the same version with different contents.
|
|
129
|
+
- Never hand-edit files that the release tool generates.
|
|
130
|
+
- Never publish (tag push, registry publish, GitHub release) without the user's go-ahead.
|
|
131
|
+
|
|
132
|
+
## Report back
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
Version: <old> → <new> (<major|minor|patch|pre-release|hotfix>), reason: <change that decided it>
|
|
136
|
+
Changed files: <version files, CHANGELOG.md>
|
|
137
|
+
Tag: <tag> (<pushed | local only>)
|
|
138
|
+
Published: <registry/release URL, or not yet>
|
|
139
|
+
Notes: <path or inline>
|
|
140
|
+
Follow-ups: <port hotfix forward, announce, etc.>
|
|
141
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"should_trigger": [
|
|
3
|
+
"We removed a deprecated endpoint and added CSV export, what should the next version be? Then cut the release",
|
|
4
|
+
"Prepare release 1.4.0: update CHANGELOG.md, bump the version and tag it",
|
|
5
|
+
"Customers on 2.3.x need a security fix but main has unreleased features, how do we ship 2.3.5?",
|
|
6
|
+
"Set up release-please so merging to main produces versioned releases and a changelog",
|
|
7
|
+
"Publish a 3.0.0 release candidate to npm without making it the default install"
|
|
8
|
+
],
|
|
9
|
+
"should_not_trigger": [
|
|
10
|
+
"Write a commit message for this fix that follows the feat/fix convention",
|
|
11
|
+
"Rebase my feature branch onto main and push it safely",
|
|
12
|
+
"Plan a blue-green deployment for the API so we can roll back quickly",
|
|
13
|
+
"Write a GitHub Actions workflow that builds and tests the project",
|
|
14
|
+
"Update the README to document the new configuration options"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: remotion-video
|
|
3
|
+
description: Remotion video projects written in React, covering Composition and Sequence timing, frame-driven animation with interpolate and spring, staticFile assets, font loading held by delayRender, deterministic rendering with the remotion CLI or renderMedia, and serverless rendering on AWS Lambda with concurrency and S3 privacy settings. Use when building or fixing a Remotion composition, timing scenes in frames, animating with useCurrentFrame, rendering an MP4 from React code, or setting up Remotion Lambda.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. Needs Node 18+ and a Remotion 4 project; Lambda rendering needs an AWS account and network access.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: coding
|
|
9
|
+
kete-loom/risk: runs-commands
|
|
10
|
+
kete-loom/requires: "node, npx"
|
|
11
|
+
kete-loom/owner: "Kete-org"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Remotion video
|
|
15
|
+
|
|
16
|
+
Remotion renders a React tree once per frame in a headless browser and encodes the frames. Everything visible must be a pure function of the current frame. That one rule explains most Remotion bugs.
|
|
17
|
+
|
|
18
|
+
## Ground rules
|
|
19
|
+
|
|
20
|
+
1. **Time is frames, not seconds.** Read `useCurrentFrame()` and `useVideoConfig()` (`fps`, `durationInFrames`, `width`, `height`). Convert seconds with `seconds * fps`. Never use `Date.now()`, `setTimeout`, `setInterval` or CSS transitions/animations for motion: they don't follow the frame and render as jumps or flicker.
|
|
21
|
+
2. **Deterministic.** No `Math.random()`; use `random(seed)` from `remotion`. Data fetched at render time must be the same on every frame and every machine.
|
|
22
|
+
3. **Anything async holds the frame.** Fetching data, loading fonts, waiting for a canvas or a third-party chart: wrap it with `useDelayRender()` (or `delayRender()` / `continueRender(handle)`), and call `cancelRender(err)` on failure. The default timeout is 30 seconds; raise it per call with `timeoutInMilliseconds`, not globally by habit.
|
|
23
|
+
4. **Use Remotion's media tags.** `<Img>`, `<Audio>`, and `<Video>` from `@remotion/media` (or `<OffthreadVideo>` for older code) wait for media to load before a frame is captured. A plain `<img>` or `<video>` can be captured half-loaded.
|
|
24
|
+
5. **Assets come from `public/` through `staticFile('name.png')`**, or from a full URL. Don't import big videos into the bundle.
|
|
25
|
+
|
|
26
|
+
## Project shape
|
|
27
|
+
|
|
28
|
+
- `src/index.ts` calls `registerRoot(RemotionRoot)`.
|
|
29
|
+
- `src/Root.tsx` lists `<Composition id="Intro" component={Intro} durationInFrames={300} fps={30} width={1920} height={1080} defaultProps={...} />`. The `id` is what you render.
|
|
30
|
+
- Typed props: give the composition a Zod `schema` so props can be edited in the Studio and validated before render. Use `calculateMetadata` when duration or size depends on props or data (for example, length of a voice-over).
|
|
31
|
+
- Preview with `npx remotion studio`. Start a new project with `npx create-video@latest`.
|
|
32
|
+
|
|
33
|
+
## Timing scenes
|
|
34
|
+
|
|
35
|
+
1. Put each scene in `<Sequence from={f} durationInFrames={d}>`. Inside, `useCurrentFrame()` restarts at 0, so a scene's animation code doesn't need to know where it sits.
|
|
36
|
+
2. Lay out back-to-back scenes with `<Series>` and `<Series.Sequence durationInFrames={d}>` instead of adding offsets by hand.
|
|
37
|
+
3. For crossfades and slides between scenes use `@remotion/transitions` (`TransitionSeries` with `fade()`, `slide()` and a timing such as `linearTiming` or `springTiming`). A transition overlaps two scenes, so the total gets shorter by the transition length.
|
|
38
|
+
4. Wrap layers in `<AbsoluteFill>` to stack them full-frame.
|
|
39
|
+
5. Keep timing numbers in one place (a `timings` object or computed from props) so a script change doesn't mean editing ten files.
|
|
40
|
+
|
|
41
|
+
## Animation
|
|
42
|
+
|
|
43
|
+
- `interpolate(frame, [0, 30], [0, 1], { extrapolateLeft: 'clamp', extrapolateRight: 'clamp' })`. Without `clamp` the value keeps going past the range: opacity above 1, elements flying off-screen. Input ranges must be strictly increasing.
|
|
44
|
+
- Easing: pass `easing: Easing.bezier(...)` or `Easing.out(Easing.cubic)` to `interpolate`.
|
|
45
|
+
- `spring({ frame, fps, config: { damping: 200 }, delay: 10, durationInFrames: 30 })` returns 0 to about 1 with physics; defaults are `mass: 1`, `damping: 10`, `stiffness: 100`. Higher `damping` means less bounce. Feed the result into `interpolate` to map it to pixels or degrees.
|
|
46
|
+
- Colours: `interpolateColors(frame, [0, 60], ['#000', '#fff'])`.
|
|
47
|
+
- Animate `transform` and `opacity`. Animating `width`, `top` or heavy `filter: blur()` per frame is slow to render.
|
|
48
|
+
|
|
49
|
+
## Text, fonts and audio
|
|
50
|
+
|
|
51
|
+
- Load fonts before frames are captured: `loadFont()` from `@remotion/google-fonts/<Family>`, or `@remotion/fonts` `loadFont({ family, url: staticFile('x.woff2') })`. Both hold the render until the font is ready. A system font that isn't installed on the render machine or Lambda will silently fall back.
|
|
52
|
+
- Measure text with `@remotion/layout-utils` (`measureText`, `fitText`) when it must fit a box.
|
|
53
|
+
- Audio: `<Audio src={staticFile('music.mp3')} volume={(f) => interpolate(f, [0, 30], [0, 1], {extrapolateRight: 'clamp'})} />`. Skip the start with `trimBefore` (in frames; code before 4.0.319 uses `startFrom`) and cap the length by wrapping it in a `<Sequence durationInFrames>`.
|
|
54
|
+
- Captions: `@remotion/captions` for the caption data type and TikTok-style pages.
|
|
55
|
+
|
|
56
|
+
## Rendering locally
|
|
57
|
+
|
|
58
|
+
1. `npx remotion render <entry> <composition-id> out/video.mp4` (the entry defaults to the configured entry point). Common flags: `--props=./props.json`, `--codec=h264|h265|vp8|vp9|prores`, `--crf`, `--concurrency`, `--frames=0-59` for a quick check, and `npx remotion still <id> out/frame.png --frame=120` for one frame.
|
|
59
|
+
2. From Node: `bundle()` from `@remotion/bundler`, then `selectComposition()` and `renderMedia()` from `@remotion/renderer`. Bundle once and reuse it for many renders.
|
|
60
|
+
3. Check the output with a quick look in a player and `ffprobe out/video.mp4` (duration, fps, resolution, audio stream present).
|
|
61
|
+
|
|
62
|
+
## Rendering on Lambda
|
|
63
|
+
|
|
64
|
+
Follow `references/lambda.md`. In short: create the IAM role and user from `npx remotion lambda policies role|user`, `npx remotion lambda functions deploy`, `npx remotion lambda sites create src/index.ts --site-name=<name>`, then `npx remotion lambda render <serve-url> <composition-id>` or `renderMediaOnLambda()` with `getRenderProgress()`.
|
|
65
|
+
|
|
66
|
+
## Performance checklist
|
|
67
|
+
|
|
68
|
+
When renders are slow or time out, check in order:
|
|
69
|
+
|
|
70
|
+
1. Run `npx remotion benchmark` or render with `--log=verbose` to see slow frames.
|
|
71
|
+
2. Heavy work per frame (parsing JSON, building big arrays): move it into `useMemo` or `calculateMetadata`.
|
|
72
|
+
3. Big images: resize to the output size; prefer JPEG/WebP over huge PNGs.
|
|
73
|
+
4. Too many simultaneous videos, or `<Video>` sources with sparse keyframes: re-encode sources with FFmpeg (see the ffmpeg-media-processing skill).
|
|
74
|
+
5. GPU-only CSS (`backdrop-filter`, large blurs, WebGL) on a machine without a GPU: check what's available with `npx remotion gpu`, try `--gl=angle` or `--gl=swangle` (the Lambda default), or simplify the effect.
|
|
75
|
+
6. Tune `--concurrency`; more is not always faster on a small machine.
|
|
76
|
+
|
|
77
|
+
## Never
|
|
78
|
+
|
|
79
|
+
- Never drive motion with timers, CSS animations, or state updated in `useEffect` per frame.
|
|
80
|
+
- Never leave a `delayRender()` without a matching `continueRender()` or `cancelRender()` on every code path.
|
|
81
|
+
- Never commit AWS keys; `REMOTION_AWS_ACCESS_KEY_ID` and `REMOTION_AWS_SECRET_ACCESS_KEY` live in `.env` that is gitignored.
|
|
82
|
+
|
|
83
|
+
## Stop and ask the user
|
|
84
|
+
|
|
85
|
+
- Before the first Lambda deploy or a large Lambda render: it creates AWS resources and costs money.
|
|
86
|
+
- Whether rendered files should be public or private in S3 (`--privacy`); the default is public.
|
|
87
|
+
- Licensing: Remotion is free for individuals and companies of up to 3 people; bigger for-profit companies need a company license. Point it out once when the project is for a company; don't decide for them.
|
|
88
|
+
|
|
89
|
+
## Report back
|
|
90
|
+
|
|
91
|
+
Composition IDs touched, the render command you ran, output path with duration/fps/resolution from `ffprobe`, and any frame you checked by eye.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"should_trigger": [
|
|
3
|
+
"Build a 15-second Remotion intro where the logo springs in and the title fades up",
|
|
4
|
+
"My Remotion render flickers because the text animates with a CSS transition, how do I fix it?",
|
|
5
|
+
"Deploy our Remotion composition to Lambda and render personalised videos from an API",
|
|
6
|
+
"Google font isn't showing in the Remotion MP4 even though it works in the Studio",
|
|
7
|
+
"Use Series and TransitionSeries to stitch five slides into one Remotion video with fades"
|
|
8
|
+
],
|
|
9
|
+
"should_not_trigger": [
|
|
10
|
+
"Trim the first ten seconds off this MP4 and convert it to WebM",
|
|
11
|
+
"Animate a proof of the Pythagorean theorem with Manim",
|
|
12
|
+
"Add a Framer Motion hover animation to the pricing cards",
|
|
13
|
+
"Generate a short product clip from a text prompt with a video generation API",
|
|
14
|
+
"Speed up our React dashboard that re-renders on every keystroke"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Remotion Lambda setup and rendering
|
|
2
|
+
|
|
3
|
+
Check www.remotion.dev/docs/lambda for the current version before changing anything; the function and the site must be on the same Remotion version as the project.
|
|
4
|
+
|
|
5
|
+
## One-time setup
|
|
6
|
+
|
|
7
|
+
1. `npx remotion add @remotion/lambda` (keeps every `remotion` and `@remotion/*` package on the same version).
|
|
8
|
+
2. In AWS IAM create a role named `remotion-lambda-role` with the policy printed by `npx remotion lambda policies role`.
|
|
9
|
+
3. Create a user with the policy from `npx remotion lambda policies user` and an access key. Put the key in a gitignored `.env`:
|
|
10
|
+
|
|
11
|
+
```txt
|
|
12
|
+
REMOTION_AWS_ACCESS_KEY_ID=...
|
|
13
|
+
REMOTION_AWS_SECRET_ACCESS_KEY=...
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
4. Check it: `npx remotion lambda policies validate`.
|
|
17
|
+
5. See your concurrency limit: `npx remotion lambda quotas`. New AWS accounts often have a low limit; request an increase before big renders.
|
|
18
|
+
|
|
19
|
+
## Deploy
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npx remotion lambda functions deploy # once per Remotion version / memory / timeout / region
|
|
23
|
+
npx remotion lambda sites create src/index.ts --site-name=my-video # every time the video code changes
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
`sites create` prints a serve URL. Redeploying with the same `--site-name` overwrites it, so a stable name keeps the URL.
|
|
27
|
+
|
|
28
|
+
## Render from the CLI
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npx remotion lambda render <serve-url-or-site-name> <composition-id> [out.mp4] \
|
|
32
|
+
--privacy=private --props=./props.json
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
- `--concurrency=<n>` or `--frames-per-lambda=<n>` controls how the video is split (one or the other, at most 200 functions).
|
|
36
|
+
- `--privacy`: `public` (default), `private` (use `presignUrl()` to hand out a link) or `no-acl`.
|
|
37
|
+
- Without an output path the file stays in the S3 bucket.
|
|
38
|
+
|
|
39
|
+
## Render from Node
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
import { renderMediaOnLambda, getRenderProgress } from '@remotion/lambda/client';
|
|
43
|
+
|
|
44
|
+
const { renderId, bucketName } = await renderMediaOnLambda({
|
|
45
|
+
region: 'us-east-1',
|
|
46
|
+
functionName, // from getFunctions({ region, compatibleOnly: true })
|
|
47
|
+
serveUrl,
|
|
48
|
+
composition: 'Intro',
|
|
49
|
+
inputProps: { title },
|
|
50
|
+
codec: 'h264',
|
|
51
|
+
privacy: 'private',
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// Poll from a job, not from an HTTP request handler
|
|
55
|
+
const progress = await getRenderProgress({ renderId, bucketName, functionName, region: 'us-east-1' });
|
|
56
|
+
// progress.done, progress.overallProgress, progress.outputFile, progress.fatalErrorEncountered, progress.errors
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Store `renderId` and `bucketName` with your job row so a restart can resume polling. A `webhook` option on `renderMediaOnLambda` can notify you instead of polling; verify every delivery against the secret you set, using `validateWebhookSignature({ secret, body, signatureHeader })` from `@remotion/lambda/client` with the `X-Remotion-Signature` request header, before you trust it.
|
|
60
|
+
|
|
61
|
+
## Common failures
|
|
62
|
+
|
|
63
|
+
- Version mismatch between project, function and site: redeploy both after upgrading.
|
|
64
|
+
- Fonts missing on Lambda: load them with `@remotion/google-fonts` or `@remotion/fonts`; Lambda has few system fonts.
|
|
65
|
+
- `delayRender` timeouts on Lambda but not locally: remote assets are slower to fetch; raise `timeoutInMilliseconds` for that call or host assets in the same region.
|
|
66
|
+
- Rate limit / concurrency errors: lower `--concurrency` or raise the AWS quota.
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reproducible-dev-environments
|
|
3
|
+
description: Pins a project's whole toolchain so a fresh laptop and the CI runner get identical versions from one setup command, choosing between Nix flakes or Flox, Dev Containers, and mise or asdf version files, pinning the JavaScript package manager through the packageManager field and corepack, committing every lockfile, and making CI install from the same pins. Use when onboarding takes a day of manual installs, "works on my machine" bugs come from tool version drift, CI uses different Node, Python or Go versions than developers, or a team is adding a devcontainer.json, flake.nix, mise.toml or .tool-versions.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. Uses whichever of nix, flox, mise, asdf, docker or the Dev Containers CLI the project picks; macOS, Linux and WSL2.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: devops
|
|
9
|
+
kete-loom/risk: runs-commands
|
|
10
|
+
kete-loom/owner: "Kete-org"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Reproducible dev environments
|
|
14
|
+
|
|
15
|
+
Goal: clone, run one command, get the same compilers, runtimes, CLIs and package-manager versions as everyone else and as CI. Every version lives in a committed file; nothing depends on what happens to be installed globally.
|
|
16
|
+
|
|
17
|
+
Writing the production image belongs to `docker-patterns`; CI pipeline design belongs to `github-actions-ci`. This skill owns the developer toolchain and makes CI read the same pins.
|
|
18
|
+
|
|
19
|
+
## 0. Inventory
|
|
20
|
+
|
|
21
|
+
1. List what a developer needs: language runtimes, package managers, CLIs (terraform, kubectl, protoc), databases or services, and system libraries (openssl, libpq, imagemagick).
|
|
22
|
+
2. Find existing pins: `.nvmrc`, `.node-version`, `.python-version`, `.tool-versions`, `mise.toml`, `rust-toolchain.toml`, `go.mod` `toolchain` line, `flake.nix`, `.flox/`, `.devcontainer/`, `packageManager` in `package.json`, and the versions CI installs.
|
|
23
|
+
3. Note mismatches between them. Report them before changing anything.
|
|
24
|
+
|
|
25
|
+
## 1. Pick one mechanism
|
|
26
|
+
|
|
27
|
+
| Situation | Choose |
|
|
28
|
+
|---|---|
|
|
29
|
+
| Only language runtimes and CLIs need pinning, mixed OSes, low ceremony | **mise** (`mise.toml`) or **asdf** (`.tool-versions`; mise reads it too) |
|
|
30
|
+
| System libraries matter too, or the same locked toolchain versions on macOS and Linux | **Nix flake** (`flake.nix` + `flake.lock`) or **Flox** (Nix underneath, simpler CLI) |
|
|
31
|
+
| Editor-integrated containers, Codespaces, Windows developers, or services alongside (database, queue) | **Dev Container** (`.devcontainer/devcontainer.json`) |
|
|
32
|
+
| Team already uses one | Keep it and fix its gaps; do not add a second |
|
|
33
|
+
|
|
34
|
+
A devcontainer can still use mise or Nix inside. Do not make two files authoritative for the same tool. If the choice is unclear (team habits, Windows support, Nix learning curve), **stop and ask the user**.
|
|
35
|
+
|
|
36
|
+
## 2. Write the pins
|
|
37
|
+
|
|
38
|
+
### mise
|
|
39
|
+
|
|
40
|
+
```toml
|
|
41
|
+
# mise.toml
|
|
42
|
+
[tools]
|
|
43
|
+
node = "22.11.0"
|
|
44
|
+
python = "3.12.7"
|
|
45
|
+
terraform = "1.9.8"
|
|
46
|
+
|
|
47
|
+
[env]
|
|
48
|
+
_.python.venv = { path = ".venv", create = true }
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
`mise install` installs everything; `mise use node@22.11.0` updates the file. Pin exact versions, not `lts` or `latest`.
|
|
52
|
+
|
|
53
|
+
### asdf
|
|
54
|
+
|
|
55
|
+
`.tool-versions`, one tool per line (`nodejs 22.11.0`). Each tool needs `asdf plugin add <name>` first; list the plugins in the README or setup script.
|
|
56
|
+
|
|
57
|
+
### Nix flake
|
|
58
|
+
|
|
59
|
+
1. A `devShells.default` in `flake.nix` listing packages from a pinned `nixpkgs` input.
|
|
60
|
+
2. Commit `flake.lock`. Update deliberately with `nix flake update` in its own commit.
|
|
61
|
+
3. Enter with `nix develop`; add `direnv` with `use flake` in `.envrc` for automatic activation.
|
|
62
|
+
|
|
63
|
+
### Flox
|
|
64
|
+
|
|
65
|
+
`flox init`, `flox install nodejs python3 ...`, commit the `.flox/` directory (it holds `env/manifest.toml` and the lock). Developers run `flox activate`.
|
|
66
|
+
|
|
67
|
+
### Dev Container
|
|
68
|
+
|
|
69
|
+
```jsonc
|
|
70
|
+
// .devcontainer/devcontainer.json
|
|
71
|
+
{
|
|
72
|
+
"name": "app",
|
|
73
|
+
"image": "mcr.microsoft.com/devcontainers/base:ubuntu-24.04",
|
|
74
|
+
"features": {
|
|
75
|
+
"ghcr.io/devcontainers/features/node:1": { "version": "22.11.0" },
|
|
76
|
+
"ghcr.io/devcontainers/features/python:1": { "version": "3.12" }
|
|
77
|
+
},
|
|
78
|
+
"postCreateCommand": "make setup",
|
|
79
|
+
"forwardPorts": [3000]
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Pin the base image by tag at least, by digest for strict reproducibility. Use `dockerComposeFile` when services (Postgres, Redis) are needed. Test it headless with the Dev Containers CLI: `devcontainer up --workspace-folder .` then `devcontainer exec --workspace-folder . <test command>`.
|
|
84
|
+
|
|
85
|
+
## 3. Package managers and lockfiles
|
|
86
|
+
|
|
87
|
+
1. JavaScript: set `"packageManager": "pnpm@9.12.3"` (or yarn, npm) in `package.json`. Corepack reads it and runs that exact version. Corepack ships with Node up to 24 (opt in with `corepack enable`) but is no longer bundled from Node 25; there install it with `npm install -g corepack`, or let mise pin the package manager instead.
|
|
88
|
+
2. Commit the lockfile (`package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`, `uv.lock`, `poetry.lock`, `Cargo.lock` for applications, `go.sum`). In CI install in frozen mode: `npm ci`, `pnpm install --frozen-lockfile`, `yarn install --immutable`, `uv sync --locked`, `poetry install` with the lock checked by `poetry check --lock`.
|
|
89
|
+
3. Python: pin the interpreter (`.python-version` or the chosen tool) and use a project-local virtual environment, never the system Python.
|
|
90
|
+
|
|
91
|
+
## 4. One setup command
|
|
92
|
+
|
|
93
|
+
Provide exactly one entry point, documented first in the README: `mise install && <deps>`, `nix develop`, `flox activate`, or "Reopen in Container". If more steps are needed, put them in one `make setup` or `just setup` target (or a setup script it calls) that:
|
|
94
|
+
|
|
95
|
+
- is idempotent (safe to run twice),
|
|
96
|
+
- checks prerequisites and prints what is missing instead of failing obscurely,
|
|
97
|
+
- copies `.env.example` to `.env` only if `.env` does not exist, and never writes real secrets,
|
|
98
|
+
- ends by running a quick smoke check (build or a fast test).
|
|
99
|
+
|
|
100
|
+
## 5. CI uses the same pins
|
|
101
|
+
|
|
102
|
+
- mise: `jdx/mise-action` in GitHub Actions, or `mise install` in any CI.
|
|
103
|
+
- Nix: install Nix, then `nix develop --command <test command>`.
|
|
104
|
+
- Dev Container: `devcontainers/ci` action, or the Dev Containers CLI.
|
|
105
|
+
- Setup actions that read version files: `actions/setup-node` with `node-version-file: .nvmrc` or `package.json`, `actions/setup-python` with `python-version-file`.
|
|
106
|
+
|
|
107
|
+
Remove hard-coded versions from CI YAML once CI reads the pin file. A version bump is then one file change that dev and CI both pick up.
|
|
108
|
+
|
|
109
|
+
## 6. Verify
|
|
110
|
+
|
|
111
|
+
1. In a clean environment (fresh container, new clone, or CI), run the setup command, then the test command.
|
|
112
|
+
2. Print the resolved versions (`node -v`, `python -V`, `pnpm -v`, ...) locally and in CI; they must match the pins.
|
|
113
|
+
3. Run the setup command a second time; it must succeed and change nothing.
|
|
114
|
+
|
|
115
|
+
## Never
|
|
116
|
+
|
|
117
|
+
- Never pin with ranges or `latest` for toolchains.
|
|
118
|
+
- Never rely on globally installed tools that are not in the pin file.
|
|
119
|
+
- Never commit secrets in setup scripts, `.envrc` or `devcontainer.json`.
|
|
120
|
+
- Never update the lockfile or `flake.lock` as a side effect of setup.
|
|
121
|
+
|
|
122
|
+
## Report back
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
## Dev environment: <project>
|
|
126
|
+
Mechanism: <mise | asdf | Nix | Flox | Dev Container> and why
|
|
127
|
+
Pinned: <tool@version list>
|
|
128
|
+
Setup command: <one line>
|
|
129
|
+
CI: <how it reads the same pins>
|
|
130
|
+
Mismatches fixed: <before -> after>
|
|
131
|
+
Verified: clean setup yes/no, versions match CI yes/no, rerun idempotent yes/no
|
|
132
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"should_trigger": [
|
|
3
|
+
"New hires spend a whole day installing tools. Give us one command that sets up Node, Python and terraform at the right versions.",
|
|
4
|
+
"Add a devcontainer.json so the repo opens in Codespaces with Postgres running alongside",
|
|
5
|
+
"CI runs Node 20 but half the team is on Node 22; pin it once and make CI read the same file",
|
|
6
|
+
"Write a flake.nix dev shell with a locked nixpkgs so macOS and Linux devs get the same protoc and openssl",
|
|
7
|
+
"Pin pnpm with the packageManager field and make sure everyone uses that exact version"
|
|
8
|
+
],
|
|
9
|
+
"should_not_trigger": [
|
|
10
|
+
"Write a multi-stage Dockerfile for our production API image",
|
|
11
|
+
"Set up a GitHub Actions workflow with a matrix over three operating systems and caching",
|
|
12
|
+
"Upgrade our npm dependencies and check them for known vulnerabilities",
|
|
13
|
+
"Package our Python CLI as a standalone Windows executable for customers",
|
|
14
|
+
"Explain idiomatic Python dataclasses versus pydantic models"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: responding-to-code-review
|
|
3
|
+
description: Works through review comments left on your own pull request or change with technical rigour - reads every comment before touching code, restates each one, asks about unclear items first, checks each suggestion against the codebase before agreeing, pushes back with evidence when a suggestion is wrong, applies YAGNI to scope creep, fixes one item at a time with a test, and replies in the review thread itself. Use when a reviewer, teammate or bot has left feedback on your change and you must decide what to fix, what to question and how to answer.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Any Agent Skills host. Needs git and the project's test runner; replying on GitHub needs the gh CLI, signed in.
|
|
6
|
+
metadata:
|
|
7
|
+
kete-loom/version: "0.1.0"
|
|
8
|
+
kete-loom/category: coding
|
|
9
|
+
kete-loom/risk: runs-commands
|
|
10
|
+
kete-loom/requires: "git, gh"
|
|
11
|
+
kete-loom/owner: "Kete-org"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Responding to code review
|
|
15
|
+
|
|
16
|
+
Review feedback is input to evaluate, not orders to obey or praise to return. Every reply either states a fix, asks a precise question, or disagrees with evidence.
|
|
17
|
+
|
|
18
|
+
This skill is for the author receiving feedback. To review someone else's change, use the `code-reviewer` agent or the `/review` command instead.
|
|
19
|
+
|
|
20
|
+
## 1. Collect all the feedback first
|
|
21
|
+
|
|
22
|
+
1. Gather every comment before changing anything: the summary review, inline comments, and any bot findings. On GitHub:
|
|
23
|
+
- Reviews: `gh pr view <pr> --json reviews,comments`
|
|
24
|
+
- Inline comments with their ids, paths and lines: `gh api repos/{owner}/{repo}/pulls/<pr>/comments --paginate`
|
|
25
|
+
2. Number the items. One comment can hold several items; split them.
|
|
26
|
+
3. Note who wrote each item. The user or the project owner sets direction; an outside reviewer or a bot may lack context.
|
|
27
|
+
|
|
28
|
+
Do not start fixing item 1 while item 5 is unread. Items often depend on each other.
|
|
29
|
+
|
|
30
|
+
## 2. Restate each item
|
|
31
|
+
|
|
32
|
+
For each item write one line: what the reviewer wants changed, and why, in your own words. If you cannot restate it, it is unclear.
|
|
33
|
+
|
|
34
|
+
**Stop and ask** before implementing anything when any item is unclear. List the items you understand and the exact question for each unclear one. Do not implement the clear ones first; a later answer can change them.
|
|
35
|
+
|
|
36
|
+
## 3. Check each suggestion against reality
|
|
37
|
+
|
|
38
|
+
Before agreeing, verify. For each item:
|
|
39
|
+
|
|
40
|
+
| Check | How |
|
|
41
|
+
|---|---|
|
|
42
|
+
| Is the claim true here? | Read the code it points at, and run it or its test if the claim is about behaviour |
|
|
43
|
+
| Would the change break something? | Search the codebase for callers and run their tests |
|
|
44
|
+
| Is there a reason for the current code? | `git log -L <start>,<end>:<file>` or `git blame` on the lines; read the linked issue or commit message |
|
|
45
|
+
| Does it hold on every supported platform and version? | Check the project's declared runtime, targets and compatibility matrix |
|
|
46
|
+
| Does it conflict with a decision the user already made? | Re-read the task, plan or earlier conversation |
|
|
47
|
+
|
|
48
|
+
Classify the item: **correct** (fix it), **wrong** (push back), **partly right** (fix the valid part, explain the rest), or **cannot verify** (say what you would need).
|
|
49
|
+
|
|
50
|
+
If an item conflicts with the user's earlier decision or changes architecture, **stop and ask the user** rather than settling it with the reviewer.
|
|
51
|
+
|
|
52
|
+
## 4. Apply YAGNI to scope requests
|
|
53
|
+
|
|
54
|
+
Requests like "handle this properly", "add pagination and caching here" or "make this configurable" can grow a small change into a large one.
|
|
55
|
+
|
|
56
|
+
1. Search the codebase for real use of the thing being expanded.
|
|
57
|
+
2. If nothing uses it, propose removing or keeping it minimal and ask whether usage exists that you missed.
|
|
58
|
+
3. If it is used and the request is a real gap, treat it as a normal fix, or propose a follow-up issue when it is out of the change's scope.
|
|
59
|
+
|
|
60
|
+
## 5. Push back with evidence
|
|
61
|
+
|
|
62
|
+
Disagree when the suggestion is incorrect for this stack, breaks existing behaviour, ignores a compatibility constraint, adds unused features, or contradicts the user's decisions.
|
|
63
|
+
|
|
64
|
+
A good pushback names the evidence and offers a way forward:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
Keeping the fallback: package.json declares "engines": {"node": ">=16"} and CI
|
|
68
|
+
still runs Node 16 in .github/workflows/legacy.yml, but structuredClone is only
|
|
69
|
+
global from Node 17. Raise the engines floor and drop that job, or keep this?
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
- Point at a file, line, test, log or doc. Opinion alone is not evidence.
|
|
73
|
+
- Ask a specific question when you want a decision.
|
|
74
|
+
- If you later find you were wrong, say so in one line and fix it: "Checked again: the cache is shared across tenants, so this is a real leak. Fixed in `cache.ts:42`." No long apology, no defence of the earlier reply.
|
|
75
|
+
|
|
76
|
+
## 6. Implement one item at a time
|
|
77
|
+
|
|
78
|
+
Order: blocking items (bugs, security, data loss) first, then simple fixes, then larger refactors.
|
|
79
|
+
|
|
80
|
+
For each item:
|
|
81
|
+
|
|
82
|
+
1. Write or update a test that fails without the fix, where the item is about behaviour. Follow `tdd-workflow` if it is installed.
|
|
83
|
+
2. Make the smallest change that resolves the item.
|
|
84
|
+
3. Run the related tests, then the full suite before moving on.
|
|
85
|
+
4. Commit or stage it as its own logical change if the project works that way, so the reviewer can see each fix.
|
|
86
|
+
|
|
87
|
+
Never batch ten fixes into one untested edit. Never weaken or delete a test to satisfy a comment without the user agreeing.
|
|
88
|
+
|
|
89
|
+
## 7. Reply where the comment is
|
|
90
|
+
|
|
91
|
+
- Answer an inline comment in its own thread, not as a new top-level PR comment:
|
|
92
|
+
`gh api repos/{owner}/{repo}/pulls/<pr>/comments/<comment_id>/replies -f body='Fixed: ...'`
|
|
93
|
+
- Answer a summary review or a general comment with `gh pr comment <pr> --body '...'`.
|
|
94
|
+
- Elsewhere (GitLab, Gerrit, a chat thread), reply in the same thread the comment came from.
|
|
95
|
+
- Post replies only after the fixes are pushed or the user approves pushing; a reply that says "fixed" must point at code that exists on the branch.
|
|
96
|
+
|
|
97
|
+
## Tone rules
|
|
98
|
+
|
|
99
|
+
- State the fix or the question. That is the acknowledgement.
|
|
100
|
+
- Never write performative agreement or filler: "You're absolutely right!", "Great catch!", "Thanks for the feedback!", "Excellent point". Delete them if you notice them in a draft.
|
|
101
|
+
- Never promise a change before you have verified it ("I'll fix that now").
|
|
102
|
+
- Never argue for the sake of it. Concede in one line when the evidence says the reviewer is right.
|
|
103
|
+
|
|
104
|
+
Reply shapes:
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
Fixed: <what changed>, <file:line>. Test: <test name>.
|
|
108
|
+
Not changing: <reason with evidence>. <question or alternative>?
|
|
109
|
+
Question: <exact thing you need to know> before I change <thing>.
|
|
110
|
+
Can't verify without <access, data, environment>. Investigate, ask <who>, or leave?
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Report back
|
|
114
|
+
|
|
115
|
+
End with a table the user can scan:
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
## Review response: <PR or change>
|
|
119
|
+
| # | Item (restated) | Verdict | Action | Reply posted |
|
|
120
|
+
|---|---|---|---|---|
|
|
121
|
+
| 1 | ... | correct / wrong / partly / unclear / can't verify | fixed in <file:line> / pushed back / asked | yes / draft |
|
|
122
|
+
Tests: <command> -> <pass/fail counts>
|
|
123
|
+
Open questions for the user: <list, or none>
|
|
124
|
+
```
|