@hivehub/rulebook 5.7.0 → 5.8.1
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/commands/analysis.md +35 -35
- package/.claude/commands/continue.md +33 -33
- package/.claude/commands/rulebook-decision-create.md +55 -55
- package/.claude/commands/rulebook-decision-list.md +15 -15
- package/.claude/commands/rulebook-knowledge-add.md +41 -41
- package/.claude/commands/rulebook-knowledge-list.md +15 -15
- package/.claude/commands/rulebook-memory-save.md +48 -48
- package/.claude/commands/rulebook-memory-search.md +47 -47
- package/.claude/commands/rulebook-task-apply.md +67 -67
- package/.claude/commands/rulebook-task-archive.md +94 -94
- package/.claude/commands/rulebook-task-create.md +93 -93
- package/.claude/commands/rulebook-task-list.md +42 -42
- package/.claude/commands/rulebook-task-show.md +52 -52
- package/.claude/commands/rulebook-task-validate.md +53 -53
- package/.claude-plugin/marketplace.json +28 -28
- package/.claude-plugin/plugin.json +8 -8
- package/README.md +86 -0
- package/dist/cli/commands/claude.d.ts +17 -0
- package/dist/cli/commands/claude.d.ts.map +1 -0
- package/dist/cli/commands/claude.js +56 -0
- package/dist/cli/commands/claude.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +18 -2
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +6 -1
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/prompts.d.ts +13 -0
- package/dist/cli/prompts.d.ts.map +1 -1
- package/dist/cli/prompts.js +106 -0
- package/dist/cli/prompts.js.map +1 -1
- package/dist/core/claude/claude-mcp.d.ts +10 -1
- package/dist/core/claude/claude-mcp.d.ts.map +1 -1
- package/dist/core/claude/claude-mcp.js +48 -2
- package/dist/core/claude/claude-mcp.js.map +1 -1
- package/dist/core/claude/claude-settings-manager.d.ts +12 -0
- package/dist/core/claude/claude-settings-manager.d.ts.map +1 -1
- package/dist/core/claude/claude-settings-manager.js +59 -3
- package/dist/core/claude/claude-settings-manager.js.map +1 -1
- package/dist/core/detect/detector.d.ts +8 -1
- package/dist/core/detect/detector.d.ts.map +1 -1
- package/dist/core/detect/detector.js +225 -0
- package/dist/core/detect/detector.js.map +1 -1
- package/dist/core/detect/library-registry.d.ts +40 -0
- package/dist/core/detect/library-registry.d.ts.map +1 -0
- package/dist/core/detect/library-registry.js +239 -0
- package/dist/core/detect/library-registry.js.map +1 -0
- package/dist/core/generators/generator.d.ts +2 -1
- package/dist/core/generators/generator.d.ts.map +1 -1
- package/dist/core/generators/generator.js +38 -1
- package/dist/core/generators/generator.js.map +1 -1
- package/dist/core/generators/rules-generator.d.ts +1 -5
- package/dist/core/generators/rules-generator.d.ts.map +1 -1
- package/dist/core/generators/rules-generator.js +40 -1
- package/dist/core/generators/rules-generator.js.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/rulebook-server.js +0 -0
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +23 -22
- package/templates/agents/accessibility-reviewer.md +43 -43
- package/templates/agents/api-designer.md +42 -42
- package/templates/agents/architect.md +51 -51
- package/templates/agents/build-engineer.md +36 -36
- package/templates/agents/code-reviewer.md +47 -47
- package/templates/agents/compiler/codegen-debugger.md +34 -34
- package/templates/agents/compiler/stdlib-engineer.md +28 -28
- package/templates/agents/compiler/test-coverage-guardian.md +31 -31
- package/templates/agents/database-architect.md +41 -41
- package/templates/agents/devops-engineer.md +42 -42
- package/templates/agents/docs-writer.md +38 -38
- package/templates/agents/game-engine/cpp-core-expert.md +35 -35
- package/templates/agents/game-engine/render-engineer.md +22 -22
- package/templates/agents/game-engine/shader-engineer.md +38 -38
- package/templates/agents/game-engine/systems-integration.md +43 -43
- package/templates/agents/generic/code-reviewer.md +41 -41
- package/templates/agents/generic/docs-writer.md +25 -25
- package/templates/agents/generic/project-manager.md +36 -36
- package/templates/agents/generic/researcher.md +34 -34
- package/templates/agents/generic/test-engineer.md +41 -41
- package/templates/agents/i18n-engineer.md +42 -42
- package/templates/agents/implementer.md +42 -42
- package/templates/agents/migration-engineer.md +42 -42
- package/templates/agents/mobile/platform-specialist.md +22 -22
- package/templates/agents/mobile/ui-engineer.md +22 -22
- package/templates/agents/performance-engineer.md +49 -49
- package/templates/agents/project-manager.md +217 -0
- package/templates/agents/quality-gatekeeper.md +208 -0
- package/templates/agents/refactoring-agent.md +41 -41
- package/templates/agents/researcher.md +38 -38
- package/templates/agents/security-reviewer.md +40 -40
- package/templates/agents/team-lead.md +37 -37
- package/templates/agents/tester.md +48 -48
- package/templates/agents/ux-reviewer.md +43 -43
- package/templates/agents/web-app/api-designer.md +22 -22
- package/templates/agents/web-app/backend-engineer.md +30 -30
- package/templates/agents/web-app/database-engineer.md +22 -22
- package/templates/agents/web-app/frontend-engineer.md +29 -29
- package/templates/agents/web-app/security-reviewer.md +32 -32
- package/templates/ci/rulebook-review.yml +26 -26
- package/templates/claude-workflows/bugfix.js +94 -0
- package/templates/claude-workflows/feature-pipeline.js +88 -0
- package/templates/claude-workflows/release-gate.js +64 -0
- package/templates/claude-workflows/review-fanout.js +125 -0
- package/templates/claude-workflows/rulebook-driver.js +382 -0
- package/templates/claude-workflows/spec-author.js +133 -0
- package/templates/cli/AIDER.md +49 -49
- package/templates/cli/AMAZON_Q.md +25 -25
- package/templates/cli/AUGGIE.md +32 -32
- package/templates/cli/CLAUDE.md +117 -117
- package/templates/cli/CLINE.md +99 -99
- package/templates/cli/CODEBUDDY.md +20 -20
- package/templates/cli/CODEIUM.md +20 -20
- package/templates/cli/CODEX.md +21 -21
- package/templates/cli/CONTINUE.md +34 -34
- package/templates/cli/CURSOR_CLI.md +62 -62
- package/templates/cli/FACTORY.md +18 -18
- package/templates/cli/GEMINI.md +35 -35
- package/templates/cli/KILOCODE.md +18 -18
- package/templates/cli/_GENERIC_TEMPLATE.md +29 -29
- package/templates/commands/rulebook-decision-create.md +55 -55
- package/templates/commands/rulebook-decision-list.md +15 -15
- package/templates/commands/rulebook-knowledge-add.md +41 -41
- package/templates/commands/rulebook-knowledge-list.md +15 -15
- package/templates/commands/rulebook-memory-save.md +48 -48
- package/templates/commands/rulebook-memory-search.md +47 -47
- package/templates/commands/rulebook-task-apply.md +67 -67
- package/templates/commands/rulebook-task-archive.md +94 -94
- package/templates/commands/rulebook-task-create.md +93 -93
- package/templates/commands/rulebook-task-list.md +42 -42
- package/templates/commands/rulebook-task-show.md +52 -52
- package/templates/commands/rulebook-task-validate.md +53 -53
- package/templates/compact-context/_default.md +23 -23
- package/templates/compact-context/cpp.md +26 -26
- package/templates/compact-context/go.md +26 -26
- package/templates/compact-context/python.md +26 -26
- package/templates/compact-context/rust.md +28 -28
- package/templates/compact-context/typescript.md +29 -29
- package/templates/core/AGENTS_OVERRIDE.md +16 -16
- package/templates/core/AGENT_AUTOMATION.md +296 -296
- package/templates/core/CLAUDE_MD_v2.md +90 -90
- package/templates/core/DAG.md +304 -304
- package/templates/core/DECISIONS.md +38 -38
- package/templates/core/DOCUMENTATION_RULES.md +36 -36
- package/templates/core/KNOWLEDGE.md +49 -49
- package/templates/core/MULTI_AGENT.md +74 -74
- package/templates/core/PLANS.md +28 -28
- package/templates/core/QUALITY_ENFORCEMENT.md +68 -68
- package/templates/core/RULEBOOK.md +1947 -1947
- package/templates/core/TIER1_PROHIBITIONS.md +154 -154
- package/templates/core/TOKEN_OPTIMIZATION.md +49 -49
- package/templates/git/CI_CD_PATTERNS.md +661 -661
- package/templates/git/GITHUB_ACTIONS.md +728 -728
- package/templates/git/GITLAB_CI.md +730 -730
- package/templates/git/GIT_WORKFLOW.md +1192 -1192
- package/templates/git/SECRETS_MANAGEMENT.md +585 -585
- package/templates/hooks/COMMIT_MSG.md +530 -530
- package/templates/hooks/POST_CHECKOUT.md +546 -546
- package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -619
- package/templates/hooks/PRE_COMMIT.md +414 -414
- package/templates/hooks/PRE_PUSH.md +601 -601
- package/templates/hooks/check-context-and-handoff.sh +16 -6
- package/templates/hooks/update-check.ps1 +84 -0
- package/templates/hooks/update-check.sh +103 -0
- package/templates/ides/CONTINUE_RULES.md +16 -16
- package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -23
- package/templates/ides/GEMINI_RULES.md +17 -17
- package/templates/ides/WINDSURF_RULES.md +14 -14
- package/templates/languages/C.md +333 -333
- package/templates/languages/CPP.md +743 -743
- package/templates/languages/CSHARP.md +417 -417
- package/templates/languages/ELIXIR.md +454 -454
- package/templates/languages/ERLANG.md +361 -361
- package/templates/languages/GO.md +645 -645
- package/templates/languages/HASKELL.md +177 -177
- package/templates/languages/JAVA.md +607 -607
- package/templates/languages/JAVASCRIPT.md +631 -631
- package/templates/languages/JULIA.md +97 -97
- package/templates/languages/KOTLIN.md +511 -511
- package/templates/languages/LISP.md +100 -100
- package/templates/languages/LUA.md +74 -74
- package/templates/languages/OBJECTIVEC.md +90 -90
- package/templates/languages/PHP.md +416 -416
- package/templates/languages/PYTHON.md +682 -682
- package/templates/languages/RUBY.md +421 -421
- package/templates/languages/RUST.md +477 -477
- package/templates/languages/SAS.md +73 -73
- package/templates/languages/SCALA.md +348 -348
- package/templates/languages/SOLIDITY.md +580 -580
- package/templates/languages/SQL.md +137 -137
- package/templates/languages/SWIFT.md +466 -466
- package/templates/languages/TYPESCRIPT.md +591 -591
- package/templates/languages/ZIG.md +265 -265
- package/templates/libraries/go/ECHO.md +18 -0
- package/templates/libraries/go/GIN.md +18 -0
- package/templates/libraries/go/GORM.md +18 -0
- package/templates/libraries/python/DJANGO.md +18 -0
- package/templates/libraries/python/FASTAPI.md +18 -0
- package/templates/libraries/python/FLASK.md +17 -0
- package/templates/libraries/python/PYDANTIC.md +17 -0
- package/templates/libraries/python/PYTEST.md +17 -0
- package/templates/libraries/python/SQLALCHEMY.md +17 -0
- package/templates/libraries/rust/ACTIX.md +17 -0
- package/templates/libraries/rust/AXUM.md +18 -0
- package/templates/libraries/rust/SERDE.md +16 -0
- package/templates/libraries/rust/SQLX.md +17 -0
- package/templates/libraries/rust/TOKIO.md +16 -0
- package/templates/libraries/typescript/ANGULAR.md +17 -0
- package/templates/libraries/typescript/DRIZZLE.md +16 -0
- package/templates/libraries/typescript/EXPRESS.md +17 -0
- package/templates/libraries/typescript/HEROUI.md +16 -0
- package/templates/libraries/typescript/JEST.md +17 -0
- package/templates/libraries/typescript/NESTJS.md +17 -0
- package/templates/libraries/typescript/NEXT.md +18 -0
- package/templates/libraries/typescript/PRISMA.md +16 -0
- package/templates/libraries/typescript/RADIX.md +16 -0
- package/templates/libraries/typescript/REACT.md +18 -0
- package/templates/libraries/typescript/SHADCN.md +16 -0
- package/templates/libraries/typescript/SVELTE.md +16 -0
- package/templates/libraries/typescript/TAILWIND.md +16 -0
- package/templates/libraries/typescript/TRPC.md +16 -0
- package/templates/libraries/typescript/VITEST.md +17 -0
- package/templates/libraries/typescript/VUE.md +17 -0
- package/templates/libraries/typescript/ZOD.md +17 -0
- package/templates/modules/ATLASSIAN.md +255 -255
- package/templates/modules/CONTEXT7.md +54 -54
- package/templates/modules/FIGMA.md +267 -267
- package/templates/modules/GITHUB_MCP.md +64 -64
- package/templates/modules/GRAFANA.md +328 -328
- package/templates/modules/MEMORY.md +126 -126
- package/templates/modules/NOTION.md +247 -247
- package/templates/modules/PLAYWRIGHT.md +90 -90
- package/templates/modules/RULEBOOK_MCP.md +208 -208
- package/templates/modules/SERENA.md +337 -337
- package/templates/modules/SUPABASE.md +223 -223
- package/templates/modules/SYNAP.md +69 -69
- package/templates/modules/VECTORIZER.md +63 -63
- package/templates/modules/sequential-thinking.md +42 -42
- package/templates/rules/consult-analysis-before-implementing.md +23 -23
- package/templates/rules/cpp.md +46 -46
- package/templates/rules/csharp.md +44 -44
- package/templates/rules/diagnostic-first.md +39 -39
- package/templates/rules/fail-twice-escalate.md +46 -46
- package/templates/rules/follow-task-sequence.md +36 -36
- package/templates/rules/git-safety.md +29 -29
- package/templates/rules/go.md +40 -40
- package/templates/rules/incremental-implementation.md +56 -56
- package/templates/rules/incremental-tests.md +29 -29
- package/templates/rules/java.md +43 -43
- package/templates/rules/javascript.md +39 -39
- package/templates/rules/knowledge-base-usage.md +41 -41
- package/templates/rules/multi-agent-teams.md +75 -75
- package/templates/rules/no-deferred.md +31 -31
- package/templates/rules/no-shortcuts.md +30 -30
- package/templates/rules/python.md +43 -43
- package/templates/rules/research-first.md +30 -30
- package/templates/rules/respect-handoff-trigger.md +41 -41
- package/templates/rules/rust.md +40 -40
- package/templates/rules/sequential-editing.md +21 -21
- package/templates/rules/session-workflow.md +24 -24
- package/templates/rules/task-decomposition.md +32 -32
- package/templates/rules/typescript.md +40 -40
- package/templates/skills/cli/aider/SKILL.md +59 -59
- package/templates/skills/cli/amazon-q/SKILL.md +35 -35
- package/templates/skills/cli/auggie/SKILL.md +42 -42
- package/templates/skills/cli/claude/SKILL.md +42 -42
- package/templates/skills/cli/cline/SKILL.md +42 -42
- package/templates/skills/cli/codebuddy/SKILL.md +30 -30
- package/templates/skills/cli/codeium/SKILL.md +30 -30
- package/templates/skills/cli/codex/SKILL.md +31 -31
- package/templates/skills/cli/continue/SKILL.md +44 -44
- package/templates/skills/cli/cursor-cli/SKILL.md +38 -38
- package/templates/skills/cli/factory/SKILL.md +28 -28
- package/templates/skills/cli/gemini/SKILL.md +45 -45
- package/templates/skills/cli/kilocode/SKILL.md +28 -28
- package/templates/skills/core/agent-automation/SKILL.md +194 -194
- package/templates/skills/core/dag/SKILL.md +314 -314
- package/templates/skills/core/documentation-rules/SKILL.md +46 -46
- package/templates/skills/core/quality-enforcement/SKILL.md +78 -78
- package/templates/skills/core/rulebook/SKILL.md +176 -176
- package/templates/skills/core/rulebook-terse/SKILL.md +116 -116
- package/templates/skills/core/rulebook-terse-commit/SKILL.md +96 -96
- package/templates/skills/core/rulebook-terse-review/SKILL.md +112 -112
- package/templates/skills/dev/accessibility/SKILL.md +17 -17
- package/templates/skills/dev/analysis/SKILL.md +19 -19
- package/templates/skills/dev/api-design/SKILL.md +15 -15
- package/templates/skills/dev/architect/SKILL.md +17 -17
- package/templates/skills/dev/build-fix/SKILL.md +17 -17
- package/templates/skills/dev/db-design/SKILL.md +15 -15
- package/templates/skills/dev/debug/SKILL.md +16 -16
- package/templates/skills/dev/deploy/SKILL.md +17 -17
- package/templates/skills/dev/docs/SKILL.md +17 -17
- package/templates/skills/dev/handoff/SKILL.md +27 -27
- package/templates/skills/dev/migrate/SKILL.md +15 -15
- package/templates/skills/dev/perf/SKILL.md +17 -17
- package/templates/skills/dev/refactor/SKILL.md +17 -17
- package/templates/skills/dev/research/SKILL.md +14 -14
- package/templates/skills/dev/review/SKILL.md +18 -18
- package/templates/skills/dev/security-audit/SKILL.md +17 -17
- package/templates/skills/dev/spec/SKILL.md +65 -0
- package/templates/skills/ides/copilot/SKILL.md +47 -47
- package/templates/skills/ides/cursor/SKILL.md +53 -53
- package/templates/skills/ides/jetbrains-ai/SKILL.md +45 -45
- package/templates/skills/ides/replit/SKILL.md +46 -46
- package/templates/skills/ides/tabnine/SKILL.md +39 -39
- package/templates/skills/ides/vscode/SKILL.md +50 -50
- package/templates/skills/ides/windsurf/SKILL.md +46 -46
- package/templates/skills/ides/zed/SKILL.md +42 -42
- package/templates/skills/languages/c/SKILL.md +343 -343
- package/templates/skills/languages/cpp/SKILL.md +753 -753
- package/templates/skills/languages/csharp/SKILL.md +427 -427
- package/templates/skills/languages/elixir/SKILL.md +464 -464
- package/templates/skills/languages/erlang/SKILL.md +371 -371
- package/templates/skills/languages/go/SKILL.md +655 -655
- package/templates/skills/languages/haskell/SKILL.md +187 -187
- package/templates/skills/languages/java/SKILL.md +617 -617
- package/templates/skills/languages/javascript/SKILL.md +641 -641
- package/templates/skills/languages/julia/SKILL.md +107 -107
- package/templates/skills/languages/kotlin/SKILL.md +521 -521
- package/templates/skills/languages/lisp/SKILL.md +110 -110
- package/templates/skills/languages/lua/SKILL.md +84 -84
- package/templates/skills/languages/objectivec/SKILL.md +100 -100
- package/templates/skills/languages/php/SKILL.md +426 -426
- package/templates/skills/languages/python/SKILL.md +692 -692
- package/templates/skills/languages/ruby/SKILL.md +431 -431
- package/templates/skills/languages/rust/SKILL.md +487 -487
- package/templates/skills/languages/sas/SKILL.md +83 -83
- package/templates/skills/languages/scala/SKILL.md +358 -358
- package/templates/skills/languages/solidity/SKILL.md +590 -590
- package/templates/skills/languages/sql/SKILL.md +147 -147
- package/templates/skills/languages/swift/SKILL.md +476 -476
- package/templates/skills/languages/typescript/SKILL.md +302 -302
- package/templates/skills/languages/zig/SKILL.md +275 -275
- package/templates/skills/modules/atlassian/SKILL.md +265 -265
- package/templates/skills/modules/context7/SKILL.md +64 -64
- package/templates/skills/modules/figma/SKILL.md +277 -277
- package/templates/skills/modules/github-mcp/SKILL.md +74 -74
- package/templates/skills/modules/grafana/SKILL.md +338 -338
- package/templates/skills/modules/memory/SKILL.md +73 -73
- package/templates/skills/modules/notion/SKILL.md +257 -257
- package/templates/skills/modules/playwright/SKILL.md +100 -100
- package/templates/skills/modules/rulebook-mcp/SKILL.md +166 -166
- package/templates/skills/modules/serena/SKILL.md +347 -347
- package/templates/skills/modules/supabase/SKILL.md +233 -233
- package/templates/skills/modules/synap/SKILL.md +79 -79
- package/templates/skills/modules/vectorizer/SKILL.md +73 -73
- package/templates/workflows/typescript-test.yml +9 -3
- package/dist/agents/ralph-parser.d.ts +0 -91
- package/dist/agents/ralph-parser.d.ts.map +0 -1
- package/dist/agents/ralph-parser.js +0 -415
- package/dist/agents/ralph-parser.js.map +0 -1
- package/dist/cli/commands/analysis.d.ts +0 -8
- package/dist/cli/commands/analysis.d.ts.map +0 -1
- package/dist/cli/commands/analysis.js +0 -78
- package/dist/cli/commands/analysis.js.map +0 -1
- package/dist/cli/commands/compress.d.ts +0 -18
- package/dist/cli/commands/compress.d.ts.map +0 -1
- package/dist/cli/commands/compress.js +0 -100
- package/dist/cli/commands/compress.js.map +0 -1
- package/dist/cli/commands/ralph.d.ts +0 -45
- package/dist/cli/commands/ralph.d.ts.map +0 -1
- package/dist/cli/commands/ralph.js +0 -694
- package/dist/cli/commands/ralph.js.map +0 -1
- package/dist/cli/docs-prompts.d.ts +0 -3
- package/dist/cli/docs-prompts.d.ts.map +0 -1
- package/dist/cli/docs-prompts.js +0 -45
- package/dist/cli/docs-prompts.js.map +0 -1
- package/dist/core/agent-manager.d.ts +0 -69
- package/dist/core/agent-manager.d.ts.map +0 -1
- package/dist/core/agent-manager.js +0 -476
- package/dist/core/agent-manager.js.map +0 -1
- package/dist/core/agent-template-engine.d.ts +0 -51
- package/dist/core/agent-template-engine.d.ts.map +0 -1
- package/dist/core/agent-template-engine.js +0 -291
- package/dist/core/agent-template-engine.js.map +0 -1
- package/dist/core/analysis-manager.d.ts +0 -56
- package/dist/core/analysis-manager.d.ts.map +0 -1
- package/dist/core/analysis-manager.js +0 -218
- package/dist/core/analysis-manager.js.map +0 -1
- package/dist/core/auto-fixer.d.ts +0 -14
- package/dist/core/auto-fixer.d.ts.map +0 -1
- package/dist/core/auto-fixer.js +0 -207
- package/dist/core/auto-fixer.js.map +0 -1
- package/dist/core/changelog-generator.d.ts +0 -44
- package/dist/core/changelog-generator.d.ts.map +0 -1
- package/dist/core/changelog-generator.js +0 -222
- package/dist/core/changelog-generator.js.map +0 -1
- package/dist/core/claude-mcp.d.ts +0 -59
- package/dist/core/claude-mcp.d.ts.map +0 -1
- package/dist/core/claude-mcp.js +0 -220
- package/dist/core/claude-mcp.js.map +0 -1
- package/dist/core/claude-md-generator.d.ts +0 -52
- package/dist/core/claude-md-generator.d.ts.map +0 -1
- package/dist/core/claude-md-generator.js +0 -104
- package/dist/core/claude-md-generator.js.map +0 -1
- package/dist/core/claude-settings-manager.d.ts +0 -44
- package/dist/core/claude-settings-manager.d.ts.map +0 -1
- package/dist/core/claude-settings-manager.js +0 -191
- package/dist/core/claude-settings-manager.js.map +0 -1
- package/dist/core/cli-bridge.d.ts +0 -113
- package/dist/core/cli-bridge.d.ts.map +0 -1
- package/dist/core/cli-bridge.js +0 -1094
- package/dist/core/cli-bridge.js.map +0 -1
- package/dist/core/compact-context-manager.d.ts +0 -34
- package/dist/core/compact-context-manager.d.ts.map +0 -1
- package/dist/core/compact-context-manager.js +0 -60
- package/dist/core/compact-context-manager.js.map +0 -1
- package/dist/core/complexity-detector.d.ts +0 -36
- package/dist/core/complexity-detector.d.ts.map +0 -1
- package/dist/core/complexity-detector.js +0 -334
- package/dist/core/complexity-detector.js.map +0 -1
- package/dist/core/compress/compressor.d.ts +0 -60
- package/dist/core/compress/compressor.d.ts.map +0 -1
- package/dist/core/compress/compressor.js +0 -232
- package/dist/core/compress/compressor.js.map +0 -1
- package/dist/core/compress/discover.d.ts +0 -19
- package/dist/core/compress/discover.d.ts.map +0 -1
- package/dist/core/compress/discover.js +0 -100
- package/dist/core/compress/discover.js.map +0 -1
- package/dist/core/compress/validator.d.ts +0 -47
- package/dist/core/compress/validator.d.ts.map +0 -1
- package/dist/core/compress/validator.js +0 -131
- package/dist/core/compress/validator.js.map +0 -1
- package/dist/core/config-manager.d.ts +0 -86
- package/dist/core/config-manager.d.ts.map +0 -1
- package/dist/core/config-manager.js +0 -621
- package/dist/core/config-manager.js.map +0 -1
- package/dist/core/coverage-checker.d.ts +0 -14
- package/dist/core/coverage-checker.d.ts.map +0 -1
- package/dist/core/coverage-checker.js +0 -176
- package/dist/core/coverage-checker.js.map +0 -1
- package/dist/core/cursor-mdc-generator.d.ts +0 -30
- package/dist/core/cursor-mdc-generator.d.ts.map +0 -1
- package/dist/core/cursor-mdc-generator.js +0 -98
- package/dist/core/cursor-mdc-generator.js.map +0 -1
- package/dist/core/decision-manager.d.ts +0 -25
- package/dist/core/decision-manager.d.ts.map +0 -1
- package/dist/core/decision-manager.js +0 -183
- package/dist/core/decision-manager.js.map +0 -1
- package/dist/core/dependency-checker.d.ts +0 -21
- package/dist/core/dependency-checker.d.ts.map +0 -1
- package/dist/core/dependency-checker.js +0 -247
- package/dist/core/dependency-checker.js.map +0 -1
- package/dist/core/detector.d.ts +0 -27
- package/dist/core/detector.d.ts.map +0 -1
- package/dist/core/detector.js +0 -1763
- package/dist/core/detector.js.map +0 -1
- package/dist/core/docs-generator.d.ts +0 -9
- package/dist/core/docs-generator.d.ts.map +0 -1
- package/dist/core/docs-generator.js +0 -531
- package/dist/core/docs-generator.js.map +0 -1
- package/dist/core/doctor.d.ts +0 -19
- package/dist/core/doctor.d.ts.map +0 -1
- package/dist/core/doctor.js +0 -229
- package/dist/core/doctor.js.map +0 -1
- package/dist/core/generator.d.ts +0 -56
- package/dist/core/generator.d.ts.map +0 -1
- package/dist/core/generator.js +0 -1193
- package/dist/core/generator.js.map +0 -1
- package/dist/core/github-issues-importer.d.ts +0 -82
- package/dist/core/github-issues-importer.d.ts.map +0 -1
- package/dist/core/github-issues-importer.js +0 -161
- package/dist/core/github-issues-importer.js.map +0 -1
- package/dist/core/gitignore-generator.d.ts +0 -13
- package/dist/core/gitignore-generator.d.ts.map +0 -1
- package/dist/core/gitignore-generator.js +0 -307
- package/dist/core/gitignore-generator.js.map +0 -1
- package/dist/core/health-scorer.d.ts +0 -61
- package/dist/core/health-scorer.d.ts.map +0 -1
- package/dist/core/health-scorer.js +0 -638
- package/dist/core/health-scorer.js.map +0 -1
- package/dist/core/iteration-tracker.d.ts +0 -85
- package/dist/core/iteration-tracker.d.ts.map +0 -1
- package/dist/core/iteration-tracker.js +0 -295
- package/dist/core/iteration-tracker.js.map +0 -1
- package/dist/core/knowledge-manager.d.ts +0 -24
- package/dist/core/knowledge-manager.d.ts.map +0 -1
- package/dist/core/knowledge-manager.js +0 -173
- package/dist/core/knowledge-manager.js.map +0 -1
- package/dist/core/learn-manager.d.ts +0 -29
- package/dist/core/learn-manager.d.ts.map +0 -1
- package/dist/core/learn-manager.js +0 -159
- package/dist/core/learn-manager.js.map +0 -1
- package/dist/core/mcp-reference-generator.d.ts +0 -13
- package/dist/core/mcp-reference-generator.d.ts.map +0 -1
- package/dist/core/mcp-reference-generator.js +0 -66
- package/dist/core/mcp-reference-generator.js.map +0 -1
- package/dist/core/minimal-scaffolder.d.ts +0 -8
- package/dist/core/minimal-scaffolder.d.ts.map +0 -1
- package/dist/core/minimal-scaffolder.js +0 -51
- package/dist/core/minimal-scaffolder.js.map +0 -1
- package/dist/core/modern-console.d.ts +0 -98
- package/dist/core/modern-console.d.ts.map +0 -1
- package/dist/core/modern-console.js +0 -556
- package/dist/core/modern-console.js.map +0 -1
- package/dist/core/multi-tool-generator.d.ts +0 -59
- package/dist/core/multi-tool-generator.d.ts.map +0 -1
- package/dist/core/multi-tool-generator.js +0 -157
- package/dist/core/multi-tool-generator.js.map +0 -1
- package/dist/core/override-manager.d.ts +0 -23
- package/dist/core/override-manager.d.ts.map +0 -1
- package/dist/core/override-manager.js +0 -82
- package/dist/core/override-manager.js.map +0 -1
- package/dist/core/plans-manager.d.ts +0 -46
- package/dist/core/plans-manager.d.ts.map +0 -1
- package/dist/core/plans-manager.js +0 -158
- package/dist/core/plans-manager.js.map +0 -1
- package/dist/core/prd-generator.d.ts +0 -48
- package/dist/core/prd-generator.d.ts.map +0 -1
- package/dist/core/prd-generator.js +0 -233
- package/dist/core/prd-generator.js.map +0 -1
- package/dist/core/ralph-manager.d.ts +0 -163
- package/dist/core/ralph-manager.d.ts.map +0 -1
- package/dist/core/ralph-manager.js +0 -555
- package/dist/core/ralph-manager.js.map +0 -1
- package/dist/core/ralph-parallel.d.ts +0 -55
- package/dist/core/ralph-parallel.d.ts.map +0 -1
- package/dist/core/ralph-parallel.js +0 -201
- package/dist/core/ralph-parallel.js.map +0 -1
- package/dist/core/ralph-plan-checkpoint.d.ts +0 -58
- package/dist/core/ralph-plan-checkpoint.d.ts.map +0 -1
- package/dist/core/ralph-plan-checkpoint.js +0 -154
- package/dist/core/ralph-plan-checkpoint.js.map +0 -1
- package/dist/core/ralph-scripts.d.ts +0 -12
- package/dist/core/ralph-scripts.d.ts.map +0 -1
- package/dist/core/ralph-scripts.js +0 -50
- package/dist/core/ralph-scripts.js.map +0 -1
- package/dist/core/review-manager.d.ts +0 -74
- package/dist/core/review-manager.d.ts.map +0 -1
- package/dist/core/review-manager.js +0 -371
- package/dist/core/review-manager.js.map +0 -1
- package/dist/core/rules-generator.d.ts +0 -73
- package/dist/core/rules-generator.d.ts.map +0 -1
- package/dist/core/rules-generator.js +0 -202
- package/dist/core/rules-generator.js.map +0 -1
- package/dist/core/skills-manager.d.ts +0 -126
- package/dist/core/skills-manager.d.ts.map +0 -1
- package/dist/core/skills-manager.js +0 -654
- package/dist/core/skills-manager.js.map +0 -1
- package/dist/core/state-writer.d.ts +0 -35
- package/dist/core/state-writer.d.ts.map +0 -1
- package/dist/core/state-writer.js +0 -81
- package/dist/core/state-writer.js.map +0 -1
- package/dist/core/task-manager.d.ts +0 -127
- package/dist/core/task-manager.d.ts.map +0 -1
- package/dist/core/task-manager.js +0 -607
- package/dist/core/task-manager.js.map +0 -1
- package/dist/core/telemetry.d.ts +0 -29
- package/dist/core/telemetry.d.ts.map +0 -1
- package/dist/core/telemetry.js +0 -57
- package/dist/core/telemetry.js.map +0 -1
- package/dist/core/validator.d.ts +0 -21
- package/dist/core/validator.d.ts.map +0 -1
- package/dist/core/validator.js +0 -177
- package/dist/core/validator.js.map +0 -1
- package/dist/core/version-bumper.d.ts +0 -19
- package/dist/core/version-bumper.d.ts.map +0 -1
- package/dist/core/version-bumper.js +0 -180
- package/dist/core/version-bumper.js.map +0 -1
- package/dist/core/watcher.d.ts +0 -9
- package/dist/core/watcher.d.ts.map +0 -1
- package/dist/core/watcher.js +0 -22
- package/dist/core/watcher.js.map +0 -1
- package/dist/core/workflow-generator.d.ts +0 -15
- package/dist/core/workflow-generator.d.ts.map +0 -1
- package/dist/core/workflow-generator.js +0 -391
- package/dist/core/workflow-generator.js.map +0 -1
- package/dist/hooks/terse-activate.d.ts +0 -59
- package/dist/hooks/terse-activate.d.ts.map +0 -1
- package/dist/hooks/terse-activate.js +0 -149
- package/dist/hooks/terse-activate.js.map +0 -1
- package/dist/hooks/terse-config.d.ts +0 -51
- package/dist/hooks/terse-config.d.ts.map +0 -1
- package/dist/hooks/terse-config.js +0 -130
- package/dist/hooks/terse-config.js.map +0 -1
- package/dist/hooks/terse-mode-tracker.d.ts +0 -78
- package/dist/hooks/terse-mode-tracker.d.ts.map +0 -1
- package/dist/hooks/terse-mode-tracker.js +0 -213
- package/dist/hooks/terse-mode-tracker.js.map +0 -1
- package/dist/memory/hnsw-index.d.ts +0 -68
- package/dist/memory/hnsw-index.d.ts.map +0 -1
- package/dist/memory/hnsw-index.js +0 -544
- package/dist/memory/hnsw-index.js.map +0 -1
- package/dist/memory/memory-cache.d.ts +0 -33
- package/dist/memory/memory-cache.d.ts.map +0 -1
- package/dist/memory/memory-cache.js +0 -85
- package/dist/memory/memory-cache.js.map +0 -1
- package/dist/memory/memory-search.d.ts +0 -42
- package/dist/memory/memory-search.d.ts.map +0 -1
- package/dist/memory/memory-search.js +0 -180
- package/dist/memory/memory-search.js.map +0 -1
- package/dist/memory/memory-store.d.ts +0 -84
- package/dist/memory/memory-store.d.ts.map +0 -1
- package/dist/memory/memory-store.js +0 -566
- package/dist/memory/memory-store.js.map +0 -1
- package/dist/memory/memory-vectorizer.d.ts +0 -29
- package/dist/memory/memory-vectorizer.d.ts.map +0 -1
- package/dist/memory/memory-vectorizer.js +0 -199
- package/dist/memory/memory-vectorizer.js.map +0 -1
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- PYTEST:START -->
|
|
2
|
+
# pytest Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Use `pytest.fixture` with explicit `scope` (`"function"` default, `"session"` for expensive setup like DB engines).
|
|
6
|
+
- Prefer `conftest.py` for shared fixtures; scope conftest files to the directory that needs them.
|
|
7
|
+
- Use `pytest.mark.parametrize` for data-driven tests; name parameters descriptively with `ids=` when values are not self-documenting.
|
|
8
|
+
- Assert with plain `assert` statements — pytest rewrites them for detailed diffs; avoid `unittest.TestCase` assertion methods.
|
|
9
|
+
- Use `pytest-asyncio` with `asyncio_mode = "auto"` in `pyproject.toml` for async test functions; mark individual tests with `@pytest.mark.asyncio` only when not using auto mode.
|
|
10
|
+
- Isolate side effects with `monkeypatch` or `unittest.mock.patch` as a context manager; prefer `monkeypatch` for environment variables and file system changes.
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Using `setup_method`/`teardown_method` — replace with fixtures using appropriate scope.
|
|
14
|
+
- Importing test utilities from test files directly; put shared helpers in `conftest.py` or a `tests/helpers/` module.
|
|
15
|
+
- Writing tests that depend on execution order — each test must be independently runnable.
|
|
16
|
+
- Silencing warnings with `filterwarnings = "ignore"` globally; address root causes or scope suppressions narrowly.
|
|
17
|
+
<!-- PYTEST:END -->
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- SQLALCHEMY:START -->
|
|
2
|
+
# SQLAlchemy Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Use SQLAlchemy 2.x-style mapped classes with `DeclarativeBase` and `Mapped[T]` / `mapped_column()` type annotations.
|
|
6
|
+
- Create one `sessionmaker` / `async_sessionmaker` bound to the engine at startup; inject sessions via dependency injection, not global state.
|
|
7
|
+
- Expire sessions explicitly after commit when needed (`session.expire_on_commit=False` for async patterns to avoid lazy-load errors).
|
|
8
|
+
- Use `select()`, `update()`, `delete()` Core statements with ORM entities rather than legacy `session.query()` API.
|
|
9
|
+
- Enable `echo=True` only in development; use `logging.getLogger("sqlalchemy.engine")` for production query logging.
|
|
10
|
+
- Define relationships with `relationship()` and explicit `back_populates`; set `lazy="selectin"` or `lazy="joined"` deliberately.
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Mixing sync and async sessions in the same code path — choose one execution style per module.
|
|
14
|
+
- Using `session.execute(text(...))` with f-strings — always bind parameters with `:name` placeholders.
|
|
15
|
+
- Relying on implicit lazy loading in async contexts; it raises `MissingGreenlet` — load eagerly or use `selectinload`.
|
|
16
|
+
- Calling `session.commit()` inside a repository method when the session lifecycle is owned by the caller.
|
|
17
|
+
<!-- SQLALCHEMY:END -->
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- ACTIX:START -->
|
|
2
|
+
# Actix Web Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Bootstrap with `HttpServer::new(|| App::new().service(...)).bind(addr)?.run().await`
|
|
6
|
+
- Register shared data with `App::app_data(web::Data::new(state))`; extract it in handlers via `web::Data<T>`
|
|
7
|
+
- Group related routes under `web::scope("/prefix")` and register with `App::service(scope)`
|
|
8
|
+
- Use `web::Json<T>` extractor for request bodies; configure size limits via `web::JsonConfig::default().limit(bytes)`
|
|
9
|
+
- Return `impl Responder` or `actix_web::Result<impl Responder>`; use `HttpResponse::Ok().json(body)` for JSON responses
|
|
10
|
+
- Define custom error types implementing `actix_web::ResponseError` to produce structured error responses with correct status codes
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Do not call blocking code directly in handler async functions — use `web::block(|| ...)` to offload to the blocking thread pool
|
|
14
|
+
- Do not hold `Mutex`-locked state across `.await` points inside handlers; deadlocks are silent
|
|
15
|
+
- Do not clone `web::Data<T>` to pass ownership — `Data<T>` is already an `Arc` wrapper, pass it directly
|
|
16
|
+
- Do not ignore the `JsonConfig` error handler; without it, malformed JSON returns a generic 400 with no actionable message
|
|
17
|
+
<!-- ACTIX:END -->
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<!-- AXUM:START -->
|
|
2
|
+
# Axum Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Define routes with `Router::new().route("/path", get(handler))` and compose sub-routers via `Router::merge` or `Router::nest`
|
|
6
|
+
- Extract shared state via `State<Arc<AppState>>` derived from `axum::extract::State`; register it with `Router::with_state`
|
|
7
|
+
- Use typed extractors (`Json<T>`, `Path<T>`, `Query<T>`) as handler function arguments; let Axum reject invalid requests automatically
|
|
8
|
+
- Return `impl IntoResponse` from handlers; use `(StatusCode, Json<T>)` tuples or a custom error type that implements `IntoResponse`
|
|
9
|
+
- Apply middleware with `tower::ServiceBuilder` and `.layer()`; keep middleware order explicit (outermost = first to run)
|
|
10
|
+
- Handle errors uniformly: define an `AppError(anyhow::Error)` newtype that implements `IntoResponse` returning structured JSON
|
|
11
|
+
- Use `axum::serve(listener, app)` (axum 0.7+) instead of the deprecated `axum::Server::bind`
|
|
12
|
+
|
|
13
|
+
## Avoid
|
|
14
|
+
- Do not store non-`Clone` or non-`Send` types directly in `State`; wrap in `Arc<Mutex<T>>` when mutation is needed
|
|
15
|
+
- Do not ignore extractor rejection by returning `200 OK` — let the extractor's `rejection` propagate or map it explicitly
|
|
16
|
+
- Do not mix `axum` 0.6 and 0.7 APIs in the same project; the handler and middleware traits changed incompatibly
|
|
17
|
+
- Do not spawn blocking work inside async handlers — use `tokio::task::spawn_blocking` instead
|
|
18
|
+
<!-- AXUM:END -->
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- SERDE:START -->
|
|
2
|
+
# Serde Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Derive `Serialize, Deserialize` on data types; add `#[serde(deny_unknown_fields)]` on strict API contracts to reject unexpected keys
|
|
6
|
+
- Use `#[serde(rename_all = "camelCase")]` at the struct level instead of per-field `rename` for consistent naming conventions
|
|
7
|
+
- Mark optional fields with `#[serde(skip_serializing_if = "Option::is_none")]` to keep serialized output clean
|
|
8
|
+
- Use `#[serde(default)]` on fields that should fall back to `Default::default()` when the key is absent during deserialization
|
|
9
|
+
- For enums, use `#[serde(tag = "type")]` (internally tagged) or `#[serde(untagged)]` to control the wire representation explicitly
|
|
10
|
+
- Use `#[serde(with = "module")]` or `#[serde(serialize_with / deserialize_with)]` to apply custom logic to individual fields without newtype wrappers
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Do not use `serde_json::Value` as a field type when the shape is known — use a concrete type for compile-time guarantees
|
|
14
|
+
- Do not derive `Deserialize` on types with `#[non_exhaustive]` without `#[serde(deny_unknown_fields)]`; silent data loss is likely
|
|
15
|
+
- Do not mix `#[serde(flatten)]` with `#[serde(deny_unknown_fields)]` on the same struct — the combination is unsupported and panics at runtime
|
|
16
|
+
<!-- SERDE:END -->
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- SQLX:START -->
|
|
2
|
+
# SQLx Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Use `sqlx::query_as!` and `sqlx::query!` macros for compile-time verified SQL; set `DATABASE_URL` at build time for macro expansion
|
|
6
|
+
- Create a connection pool with `PgPoolOptions::new().max_connections(N).connect(url).await?` and share it via `Arc` or framework state
|
|
7
|
+
- Run migrations at startup with `sqlx::migrate!("./migrations").run(&pool).await?`; keep migration files append-only
|
|
8
|
+
- Use `query.fetch_one`, `fetch_optional`, and `fetch_all` purposefully — `fetch_one` returns an error on zero rows; `fetch_optional` does not
|
|
9
|
+
- Wrap multi-statement operations in `pool.begin().await?` and call `tx.commit().await?` explicitly; `tx.rollback()` is called on drop
|
|
10
|
+
- Bind user input exclusively through `query.bind(value)` — never interpolate values into raw SQL strings
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Do not use `query!` macros pointing to a non-existent or out-of-date schema — the compile error is cryptic; run pending migrations first
|
|
14
|
+
- Do not acquire a connection manually from the pool (`pool.acquire()`) when `pool` itself implements `Executor` and can be passed directly
|
|
15
|
+
- Do not ignore `RowNotFound` from `fetch_one` — map it to a domain-level `NotFound` error before it reaches the API layer
|
|
16
|
+
- Do not store `PoolConnection<Db>` in long-lived structs; connections should be borrowed for a single logical operation, then released
|
|
17
|
+
<!-- SQLX:END -->
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- TOKIO:START -->
|
|
2
|
+
# Tokio Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Annotate the main entry point with `#[tokio::main]`; use `#[tokio::main(flavor = "current_thread")]` for single-threaded scenarios
|
|
6
|
+
- Spawn independent tasks with `tokio::spawn`; always `.await` or store the returned `JoinHandle` to surface panics
|
|
7
|
+
- Use `tokio::sync::Mutex` (not `std::sync::Mutex`) when the lock must be held across `.await` points
|
|
8
|
+
- Prefer `tokio::sync::mpsc` for task communication and `tokio::sync::broadcast` for fan-out messaging
|
|
9
|
+
- Use `tokio::time::timeout(duration, future)` to add cancellation deadlines; handle `Elapsed` explicitly
|
|
10
|
+
- Offload CPU-bound or blocking I/O with `tokio::task::spawn_blocking`; never call `std::thread::sleep` inside async code
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Do not hold a `std::sync::MutexGuard` across an `.await` — the future is not `Send` and the runtime can deadlock
|
|
14
|
+
- Do not `unwrap()` on `JoinHandle` results without checking for panics; use `handle.await?` or inspect the `JoinError`
|
|
15
|
+
- Do not create a second `#[tokio::main]` runtime inside an existing async context — use `tokio::runtime::Handle::current()` instead
|
|
16
|
+
<!-- TOKIO:END -->
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- ANGULAR:START -->
|
|
2
|
+
# Angular Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Use standalone components (`standalone: true`) for all new code; NgModules are legacy in Angular 17+
|
|
6
|
+
- Inject dependencies with the `inject()` function inside the constructor or field initializer instead of constructor parameter injection for standalone
|
|
7
|
+
- Use signals (`signal()`, `computed()`, `effect()`) for reactive local state in Angular 17+; prefer over `BehaviorSubject` for component state
|
|
8
|
+
- Use the `@if`, `@for`, `@switch` built-in control flow blocks (Angular 17+) instead of `*ngIf`/`*ngFor` structural directives
|
|
9
|
+
- Always unsubscribe from Observables — prefer `takeUntilDestroyed()` from `@angular/core/rxjs-interop`
|
|
10
|
+
- Type HTTP responses with generics: `HttpClient.get<MyType>(url)` — never cast with `as`
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Using `any` type for component inputs or service return values
|
|
14
|
+
- Manually calling `ChangeDetectorRef.detectChanges()` when signals or `async` pipe would handle it
|
|
15
|
+
- Subscribing inside templates — use the `async` pipe or signal reads
|
|
16
|
+
- Importing `CommonModule` in standalone components — import specific directives instead
|
|
17
|
+
<!-- ANGULAR:END -->
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- DRIZZLE:START -->
|
|
2
|
+
# Drizzle ORM Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Define schema in dedicated `schema.ts` files co-located by domain; export tables and inferred types together
|
|
6
|
+
- Use `drizzle-zod` or `drizzle-valibot` to derive insert/select validation schemas from table definitions — single source of truth
|
|
7
|
+
- Use `db.transaction(async (tx) => { ... })` for atomic multi-step operations; pass `tx` to all writes inside
|
|
8
|
+
- Prefer `.returning()` after inserts/updates instead of a separate select round-trip
|
|
9
|
+
- Type query results with `typeof table.$inferSelect` and `typeof table.$inferInsert` — never manually duplicate column types
|
|
10
|
+
- Use `sql` tagged template from `drizzle-orm` for raw SQL fragments; never interpolate user input directly
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Importing the db instance inside schema files — schema must be a pure declaration with no runtime dependencies
|
|
14
|
+
- Running `drizzle-kit push` in production — use `drizzle-kit generate` + migration files for reproducible deploys
|
|
15
|
+
- Chaining `.where()` conditions with string concatenation — use `and()`, `or()`, `eq()` operators from `drizzle-orm`
|
|
16
|
+
<!-- DRIZZLE:END -->
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- EXPRESS:START -->
|
|
2
|
+
# Express Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Type request and response with generics: `Request<Params, ResBody, ReqBody, Query>` — avoids `any` in handlers
|
|
6
|
+
- Use a centralized error-handling middleware `(err, req, res, next): void` registered last with four parameters
|
|
7
|
+
- Validate request bodies, params, and query strings at the route level before business logic — use Zod or a validation middleware
|
|
8
|
+
- Group routes by domain in separate `express.Router()` instances and mount them in `app.ts`
|
|
9
|
+
- Use `express.json()` and `express.urlencoded()` middleware explicitly — do not rely on body parsing being enabled by default
|
|
10
|
+
- Return consistent JSON error shapes: `{ error: string; code?: string }` — never leak stack traces in production
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Calling `next()` after sending a response — it triggers double-response errors
|
|
14
|
+
- Using `req.query` values as raw strings in database queries — always validate and sanitize
|
|
15
|
+
- Defining async route handlers without wrapping in a try/catch or using an async error wrapper — unhandled promise rejections bypass the error middleware
|
|
16
|
+
- Mutating `req.body` directly — treat it as read-only input
|
|
17
|
+
<!-- EXPRESS:END -->
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- HEROUI:START -->
|
|
2
|
+
# HeroUI Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Wrap the app in `<HeroUIProvider>` at the root; pass `navigate` from your router for link support
|
|
6
|
+
- Use the `color`, `variant`, and `size` props from the component API instead of overriding with raw Tailwind classes
|
|
7
|
+
- Extend or override tokens via `heroui()` plugin in `tailwind.config.ts` — never patch component internals
|
|
8
|
+
- Use `classNames` prop (object with slot keys) for targeted per-slot styling instead of wrapping with extra divs
|
|
9
|
+
- Prefer controlled components (`value` + `onChange`) for form inputs to keep state in one place
|
|
10
|
+
- Use `isDisabled`, `isLoading`, and `isInvalid` boolean props rather than custom conditional classes
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Importing components from deep internal paths — always import from `@heroui/react`
|
|
14
|
+
- Overriding component styles with `!important` — use slot-based `classNames` instead
|
|
15
|
+
- Rendering HeroUI components outside `<HeroUIProvider>` — theme context will be missing
|
|
16
|
+
<!-- HEROUI:END -->
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- JEST:START -->
|
|
2
|
+
# Jest Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Use `jest.config.ts` (TypeScript) with `ts-jest` or `@swc/jest` transform for type-safe configuration
|
|
6
|
+
- Mock modules with `jest.mock('../path/to/module')` at the top of the file — Jest hoists these automatically
|
|
7
|
+
- Use `jest.spyOn(object, 'method').mockReturnValue(value)` for partial mocks; restore with `jest.restoreAllMocks()` in `afterEach`
|
|
8
|
+
- Use `expect.assertions(n)` in async tests that rely on callbacks to catch silent failures
|
|
9
|
+
- Use `jest.useFakeTimers()` for time-dependent tests; advance with `jest.advanceTimersByTimeAsync(ms)` (Jest 29+)
|
|
10
|
+
- Isolate module state between tests with `jest.isolateModules()` when a module has side-effectful initialization
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Using `test.only` or `fdescribe` — remove before committing
|
|
14
|
+
- Mocking entire large modules when only one method needs to change — use `spyOn` for surgical mocking
|
|
15
|
+
- Relying on test execution order — each test must set up and tear down its own state independently
|
|
16
|
+
- Using `done` callback pattern for async tests — use `async/await` or return a Promise instead
|
|
17
|
+
<!-- JEST:END -->
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- NESTJS:START -->
|
|
2
|
+
# NestJS Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Use constructor injection for all dependencies — never instantiate services manually inside other services
|
|
6
|
+
- Validate all incoming DTOs with `class-validator` decorators and enable `ValidationPipe` globally with `whitelist: true, forbidNonWhitelisted: true`
|
|
7
|
+
- Use `@nestjs/config` with a typed `ConfigService` — never read `process.env` directly outside of config factories
|
|
8
|
+
- Scope providers explicitly: default (singleton) for stateless services; `REQUEST` scope only when truly per-request state is needed
|
|
9
|
+
- Use `@nestjs/swagger` decorators (`@ApiProperty`, `@ApiResponse`) on DTOs and controllers to keep OpenAPI spec in sync with code
|
|
10
|
+
- Handle async lifecycle with `OnModuleInit` and `OnApplicationShutdown` hooks — not ad-hoc timeouts
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Using `@Inject(TOKEN)` with string tokens for services that can be injected by class reference — string tokens lose type safety
|
|
14
|
+
- Throwing raw `Error` objects — use NestJS built-in exceptions (`NotFoundException`, `BadRequestException`, etc.)
|
|
15
|
+
- Circular module imports — restructure with a shared module or `forwardRef()` only as a last resort
|
|
16
|
+
- Putting business logic in controllers — controllers are thin; all logic belongs in services
|
|
17
|
+
<!-- NESTJS:END -->
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<!-- NEXT:START -->
|
|
2
|
+
# Next.js Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Use the App Router (`app/`) for all new projects; Pages Router is legacy
|
|
6
|
+
- Mark components `"use client"` only when they require browser APIs or interactivity; keep the default server-component boundary
|
|
7
|
+
- Fetch data in Server Components using `async/await` directly — avoid `useEffect` data fetching
|
|
8
|
+
- Use `next/image` for all images with explicit `width`/`height` or `fill` to avoid layout shift
|
|
9
|
+
- Colocate route-specific logic in `app/<segment>/page.tsx`; share layouts via `layout.tsx`
|
|
10
|
+
- Use `next/font` to load fonts — never load external font URLs in `<head>` manually
|
|
11
|
+
- Type `searchParams` and `params` as `Promise<...>` in Next.js 15+ page/layout props
|
|
12
|
+
|
|
13
|
+
## Avoid
|
|
14
|
+
- Importing server-only modules into Client Components (triggers runtime errors)
|
|
15
|
+
- Using `getServerSideProps` or `getStaticProps` in the App Router — they don't exist there
|
|
16
|
+
- Wrapping the entire app in `"use client"` — it defeats server rendering
|
|
17
|
+
- Hardcoding `localhost` URLs; use environment variables for all API base URLs
|
|
18
|
+
<!-- NEXT:END -->
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- PRISMA:START -->
|
|
2
|
+
# Prisma Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Instantiate `PrismaClient` once as a singleton and export it — never instantiate per-request (especially in Next.js dev with hot-reload)
|
|
6
|
+
- Use `prisma.$transaction([...])` for multi-step writes that must be atomic; use the interactive transaction callback form for reads-then-writes
|
|
7
|
+
- Always select only the fields you need with `select` or omit sensitive fields with `omit` — never return full records containing passwords/tokens
|
|
8
|
+
- Use `include` for eager-loading relations; use nested `select` inside `include` to avoid over-fetching
|
|
9
|
+
- Run `prisma migrate dev` in development and `prisma migrate deploy` in CI/production — never use `db push` in production
|
|
10
|
+
- Type query results with `Prisma.UserGetPayload<{ select: { ... } }>` for precise return types
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Calling `prisma.$disconnect()` in serverless/edge functions per-invocation — let the connection pool manage lifecycle
|
|
14
|
+
- Using raw `prisma.$queryRaw` without `Prisma.sql` tagged template — SQL injection risk
|
|
15
|
+
- Checking `prisma.model.findFirst` for existence checks in a loop — use `findMany` with `where` or `count`
|
|
16
|
+
<!-- PRISMA:END -->
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- RADIX:START -->
|
|
2
|
+
# Radix UI Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Install individual `@radix-ui/react-<primitive>` packages — never install the entire `@radix-ui/react` meta-package
|
|
6
|
+
- Compose primitives using the compound-component pattern (`Dialog.Root`, `Dialog.Trigger`, `Dialog.Content`, etc.) — never use internal sub-components directly
|
|
7
|
+
- Always provide accessible labels: use `VisuallyHidden` with `DialogTitle` / `AlertDialogTitle` to satisfy screen-reader requirements even when visually hidden
|
|
8
|
+
- Forward refs through custom wrappers using `React.forwardRef` so Radix can attach behavior correctly
|
|
9
|
+
- Control open state externally (`open` + `onOpenChange`) for dialogs and popovers that need lifecycle hooks (e.g., analytics, focus management)
|
|
10
|
+
- Use `asChild` to delegate rendering to your own element without adding extra DOM nodes
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Styling Radix components by targeting generated class names — use `data-*` attribute selectors (`data-state="open"`)
|
|
14
|
+
- Mixing multiple open-state sources (both `defaultOpen` and `open`) on the same component
|
|
15
|
+
- Removing `Dialog.Overlay` to skip the backdrop — it handles focus-trap and pointer-event blocking
|
|
16
|
+
<!-- RADIX:END -->
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<!-- REACT:START -->
|
|
2
|
+
# React Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Use function components with hooks exclusively; never write class components in new code
|
|
6
|
+
- Co-locate state as close to the consumer as possible; lift only when two or more siblings need it
|
|
7
|
+
- Derive computed values inline or with `useMemo` — avoid storing derived state in `useState`
|
|
8
|
+
- Stabilize callbacks passed to children with `useCallback` to prevent unnecessary re-renders
|
|
9
|
+
- Use the `key` prop on list items with stable, unique IDs — never array indices for dynamic lists
|
|
10
|
+
- Prefer `useReducer` over multiple `useState` calls when state transitions have logic dependencies
|
|
11
|
+
- Type component props with explicit interfaces; avoid `React.FC` — declare return type as `React.ReactElement` when needed
|
|
12
|
+
|
|
13
|
+
## Avoid
|
|
14
|
+
- Mutating state directly — always return a new reference from `setState` / reducer
|
|
15
|
+
- Triggering side effects during render (network calls, subscriptions outside `useEffect`)
|
|
16
|
+
- Overusing `useEffect` for data that can be derived synchronously
|
|
17
|
+
- Reading stale closure values — include all referenced variables in the `useEffect` dependency array
|
|
18
|
+
<!-- REACT:END -->
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- SHADCN:START -->
|
|
2
|
+
# shadcn/ui Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Add components with `npx shadcn@latest add <component>` — components are copied into `components/ui/` and owned by your repo
|
|
6
|
+
- Customize component source directly in `components/ui/` — shadcn/ui components are not a dependency, they are source code
|
|
7
|
+
- Use the `cn()` utility (auto-generated in `lib/utils.ts`) for all className merging within component files
|
|
8
|
+
- Keep shadcn/ui components as thin wrappers — add domain logic in separate consumer components, not inside `components/ui/`
|
|
9
|
+
- Re-run `npx shadcn@latest add <component>` to pull upstream changes; review the diff before accepting
|
|
10
|
+
- Use the `variant` and `size` props from `cva` variants instead of ad-hoc conditional classes
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Editing generated component files and then expecting `shadcn add` updates to merge cleanly — commit your customizations clearly
|
|
14
|
+
- Importing directly from `@radix-ui/*` inside application code when a shadcn wrapper already exists
|
|
15
|
+
- Adding business logic or data-fetching inside `components/ui/` files
|
|
16
|
+
<!-- SHADCN:END -->
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- SVELTE:START -->
|
|
2
|
+
# Svelte Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Use Svelte 5 runes (`$state`, `$derived`, `$effect`, `$props`) for all new code; legacy reactive declarations (`$:`) are deprecated
|
|
6
|
+
- Declare component props with `let { propName } = $props()` and type them with TypeScript interfaces
|
|
7
|
+
- Use `$derived` for computed values instead of `$effect` with an intermediate variable
|
|
8
|
+
- Scope side effects that depend on reactive state inside `$effect`; clean up by returning a teardown function
|
|
9
|
+
- Use `{#each items as item (item.id)}` with a key expression to enable efficient DOM reconciliation
|
|
10
|
+
- Prefer Svelte stores (`writable`, `readable`, `derived`) for cross-component shared state
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Using `$effect` to synchronize two pieces of state — use `$derived` instead
|
|
14
|
+
- Directly mutating arrays/objects in `$state` without reassignment when deep reactivity is needed — use `$state` with structural replacement or `SvelteMap`/`SvelteSet`
|
|
15
|
+
- Importing browser globals at module level — guard with `if (browser)` from `$app/environment`
|
|
16
|
+
<!-- SVELTE:END -->
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- TAILWIND:START -->
|
|
2
|
+
# Tailwind CSS Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Compose utilities directly in markup; extract to components or `@apply` only for highly repeated multi-class patterns
|
|
6
|
+
- Use the `cn()` helper (clsx + tailwind-merge) to merge conditional classes — avoids specificity conflicts
|
|
7
|
+
- Configure custom design tokens in `tailwind.config.ts` under `theme.extend` — never override the default scale unless intentional
|
|
8
|
+
- Use `dark:` variant classes for dark mode; configure `darkMode: "class"` for manual toggle control
|
|
9
|
+
- Prefer responsive prefixes (`sm:`, `md:`, `lg:`) on the variant side rather than writing separate media queries
|
|
10
|
+
- Use `group` and `peer` utilities for parent-driven and sibling-driven state styling
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Mixing arbitrary values (`w-[347px]`) for dimensions that belong in the design token scale
|
|
14
|
+
- Writing long `className` strings inline without `cn()` — order-dependent merges produce hard-to-debug styles
|
|
15
|
+
- Using `!important` modifiers (`!text-red-500`) to override conflicts — fix the specificity root cause instead
|
|
16
|
+
<!-- TAILWIND:END -->
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!-- TRPC:START -->
|
|
2
|
+
# tRPC Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Define all procedures in a router tree and export the `AppRouter` type — this is the contract shared with the client
|
|
6
|
+
- Validate all inputs with Zod schemas passed to `input()` — never trust raw input inside procedure handlers
|
|
7
|
+
- Use `protectedProcedure` (a middleware-wrapped base procedure) to enforce authentication — never check session ad-hoc inside handlers
|
|
8
|
+
- Use `useUtils()` (tRPC v11) for cache invalidation after mutations — call `utils.<router>.<procedure>.invalidate()`
|
|
9
|
+
- Co-locate server-side router files under `server/routers/`; keep the client-side `trpc` init in a single `lib/trpc.ts`
|
|
10
|
+
- Use `createCallerFactory` for server-side tRPC calls within Server Components or server actions — avoids HTTP round-trips
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Exposing the server router object to the client bundle — only the `AppRouter` type should cross the boundary
|
|
14
|
+
- Returning raw database models from procedures — map to response DTOs to avoid leaking sensitive fields
|
|
15
|
+
- Fetching data with `useQuery` inside event handlers — use `utils.<procedure>.fetch()` for imperative calls
|
|
16
|
+
<!-- TRPC:END -->
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- VITEST:START -->
|
|
2
|
+
# Vitest Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Configure Vitest in `vitest.config.ts` (not inside `vite.config.ts`) for clarity — use `defineConfig` from `vitest/config`
|
|
6
|
+
- Use `vi.mock()` at the top of the file (hoisted automatically); use `vi.importMock()` for dynamic mocks
|
|
7
|
+
- Reset mocks between tests with `vi.clearAllMocks()` in `afterEach` or set `clearMocks: true` globally in config
|
|
8
|
+
- Use `expect.assertions(n)` in async tests that must reach a callback to prevent silent false-positives
|
|
9
|
+
- Use `vi.useFakeTimers()` + `vi.runAllTimersAsync()` for testing debounce, throttle, and setTimeout logic
|
|
10
|
+
- Type spy return values: `vi.spyOn(service, "method").mockResolvedValue(typed value)` — avoids `any` leaking into assertions
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Using `test.only` or `describe.only` — remove before committing; they silently skip all other tests
|
|
14
|
+
- Importing from `vitest` and `jest` in the same file — pick one globals source
|
|
15
|
+
- Asserting on implementation details (internal function call counts) when behavior tests suffice
|
|
16
|
+
- Using `setTimeout` with real delays in tests — always fake timers for time-dependent logic
|
|
17
|
+
<!-- VITEST:END -->
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- VUE:START -->
|
|
2
|
+
# Vue Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Use the Composition API with `<script setup>` for all new components; Options API is legacy
|
|
6
|
+
- Declare reactive state with `ref()` for primitives and `reactive()` for objects; unwrap refs in templates automatically
|
|
7
|
+
- Use `computed()` for derived state — never compute values inside templates beyond simple expressions
|
|
8
|
+
- Define component props with `defineProps<{ ... }>()` using TypeScript generics for full type safety
|
|
9
|
+
- Use `defineEmits<{ ... }>()` to type emitted events explicitly
|
|
10
|
+
- Prefer `watch` with `{ immediate: true }` over duplicating logic in `onMounted` + `watch`
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Mutating props directly — emit an event and let the parent update state
|
|
14
|
+
- Using `$refs` to imperatively manipulate child component internals
|
|
15
|
+
- Mixing Composition API and Options API in the same component
|
|
16
|
+
- Relying on `v-html` with unsanitized user input — XSS risk
|
|
17
|
+
<!-- VUE:END -->
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!-- ZOD:START -->
|
|
2
|
+
# Zod Rules
|
|
3
|
+
|
|
4
|
+
## Conventions
|
|
5
|
+
- Define schemas once and derive TypeScript types with `z.infer<typeof schema>` — never duplicate types manually
|
|
6
|
+
- Use `.parse()` at trust boundaries (API routes, form submissions, env vars); use `.safeParse()` when you need to handle errors without throwing
|
|
7
|
+
- Coerce external string inputs (query params, form fields) with `z.coerce.number()` / `z.coerce.boolean()` instead of manual casting
|
|
8
|
+
- Validate environment variables at startup with a Zod schema and export the typed result — fail fast on misconfiguration
|
|
9
|
+
- Use `.transform()` to normalize data (e.g., trim strings, lowercase emails) in the same schema that validates it
|
|
10
|
+
- Use `z.discriminatedUnion("type", [...])` for tagged union types — faster and produces better error messages than `z.union`
|
|
11
|
+
|
|
12
|
+
## Avoid
|
|
13
|
+
- Using `.optional()` on fields that should always be present — it widens the type unnecessarily
|
|
14
|
+
- Calling `.parse()` on already-validated internal data — validate once at the boundary, pass typed values inward
|
|
15
|
+
- Building complex conditional logic with `.superRefine()` when `.refine()` covers the case
|
|
16
|
+
- Catching Zod errors generically — use `err instanceof ZodError` and inspect `err.errors` for structured messages
|
|
17
|
+
<!-- ZOD:END -->
|