@hivehub/rulebook 4.1.0 → 4.2.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/continue.md +33 -33
- package/.claude/commands/ralph-config.md +112 -112
- package/.claude/commands/ralph-history.md +110 -110
- package/.claude/commands/ralph-init.md +72 -72
- package/.claude/commands/ralph-pause-resume.md +105 -105
- package/.claude/commands/ralph-run.md +101 -101
- package/.claude/commands/ralph-status.md +76 -76
- 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 +70 -70
- 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 +137 -1
- package/dist/cli/commands.d.ts +18 -6
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +727 -406
- package/dist/cli/commands.js.map +1 -1
- package/dist/core/claude-mcp.d.ts +4 -2
- package/dist/core/claude-mcp.d.ts.map +1 -1
- package/dist/core/claude-mcp.js +14 -9
- package/dist/core/claude-mcp.js.map +1 -1
- package/dist/core/generator.d.ts.map +1 -1
- package/dist/core/generator.js +13 -0
- package/dist/core/generator.js.map +1 -1
- package/dist/core/indexer/background-indexer.d.ts.map +1 -1
- package/dist/core/indexer/background-indexer.js +26 -5
- package/dist/core/indexer/background-indexer.js.map +1 -1
- package/dist/core/indexer/file-parser.d.ts.map +1 -1
- package/dist/core/indexer/file-parser.js +1 -1
- package/dist/core/indexer/file-parser.js.map +1 -1
- package/dist/core/indexer/indexer-types.d.ts.map +1 -1
- package/dist/core/workspace/legacy-migrator.d.ts +29 -0
- package/dist/core/workspace/legacy-migrator.d.ts.map +1 -0
- package/dist/core/workspace/legacy-migrator.js +142 -0
- package/dist/core/workspace/legacy-migrator.js.map +1 -0
- package/dist/core/workspace/project-worker.d.ts +49 -0
- package/dist/core/workspace/project-worker.d.ts.map +1 -0
- package/dist/core/workspace/project-worker.js +108 -0
- package/dist/core/workspace/project-worker.js.map +1 -0
- package/dist/core/workspace/workspace-manager.d.ts +90 -0
- package/dist/core/workspace/workspace-manager.d.ts.map +1 -0
- package/dist/core/workspace/workspace-manager.js +347 -0
- package/dist/core/workspace/workspace-manager.js.map +1 -0
- package/dist/core/workspace/workspace-types.d.ts +37 -0
- package/dist/core/workspace/workspace-types.d.ts.map +1 -0
- package/dist/core/workspace/workspace-types.js +8 -0
- package/dist/core/workspace/workspace-types.js.map +1 -0
- package/dist/index.js +43 -7
- package/dist/index.js.map +1 -1
- package/dist/mcp/rulebook-server.d.ts.map +1 -1
- package/dist/mcp/rulebook-server.js +367 -100
- package/dist/mcp/rulebook-server.js.map +1 -1
- package/dist/memory/memory-manager.js +2 -2
- package/dist/memory/memory-manager.js.map +1 -1
- package/dist/memory/memory-search.js.map +1 -1
- package/dist/memory/memory-store.d.ts.map +1 -1
- package/dist/memory/memory-store.js +1 -1
- package/dist/memory/memory-store.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +22 -21
- package/templates/agents/implementer.md +35 -35
- package/templates/agents/researcher.md +34 -34
- package/templates/agents/team-lead.md +34 -34
- package/templates/agents/tester.md +42 -42
- package/templates/ci/rulebook-review.yml +26 -26
- 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/OPENCODE.md +18 -18
- package/templates/cli/_GENERIC_TEMPLATE.md +29 -29
- 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/core/AGENTS_LEAN.md +25 -25
- package/templates/core/AGENTS_OVERRIDE.md +16 -16
- package/templates/core/AGENT_AUTOMATION.md +288 -288
- package/templates/core/DAG.md +304 -304
- package/templates/core/DOCUMENTATION_RULES.md +36 -36
- 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/RALPH.md +471 -471
- package/templates/core/RULEBOOK.md +1935 -1935
- package/templates/core/WORKSPACE.md +69 -0
- package/templates/frameworks/ANGULAR.md +36 -36
- package/templates/frameworks/DJANGO.md +83 -83
- package/templates/frameworks/ELECTRON.md +147 -147
- package/templates/frameworks/FLASK.md +38 -38
- package/templates/frameworks/FLUTTER.md +55 -55
- package/templates/frameworks/JQUERY.md +32 -32
- package/templates/frameworks/LARAVEL.md +38 -38
- package/templates/frameworks/NESTJS.md +43 -43
- package/templates/frameworks/NEXTJS.md +127 -127
- package/templates/frameworks/NUXT.md +40 -40
- package/templates/frameworks/RAILS.md +66 -66
- package/templates/frameworks/REACT.md +38 -38
- package/templates/frameworks/REACT_NATIVE.md +47 -47
- package/templates/frameworks/SPRING.md +39 -39
- package/templates/frameworks/SYMFONY.md +36 -36
- package/templates/frameworks/VUE.md +36 -36
- package/templates/frameworks/ZEND.md +35 -35
- 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 +1157 -1157
- 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/ides/CONTINUE_RULES.md +16 -16
- package/templates/ides/COPILOT.md +37 -37
- package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -23
- package/templates/ides/CURSOR.md +43 -43
- package/templates/ides/GEMINI_RULES.md +17 -17
- package/templates/ides/JETBRAINS_AI.md +35 -35
- package/templates/ides/REPLIT.md +36 -36
- package/templates/ides/TABNINE.md +29 -29
- package/templates/ides/VSCODE.md +40 -40
- package/templates/ides/WINDSURF.md +36 -36
- package/templates/ides/WINDSURF_RULES.md +14 -14
- package/templates/ides/ZED.md +32 -32
- package/templates/ides/cursor-mdc/go.mdc +24 -24
- package/templates/ides/cursor-mdc/python.mdc +24 -24
- package/templates/ides/cursor-mdc/quality.mdc +25 -25
- package/templates/ides/cursor-mdc/ralph.mdc +39 -39
- package/templates/ides/cursor-mdc/rulebook.mdc +38 -38
- package/templates/ides/cursor-mdc/rust.mdc +24 -24
- package/templates/ides/cursor-mdc/typescript.mdc +25 -25
- 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/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 +156 -156
- 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/ralph/ralph-history.bat +4 -4
- package/templates/ralph/ralph-history.sh +5 -5
- package/templates/ralph/ralph-init.bat +5 -5
- package/templates/ralph/ralph-init.sh +5 -5
- package/templates/ralph/ralph-pause.bat +5 -5
- package/templates/ralph/ralph-pause.sh +5 -5
- package/templates/ralph/ralph-run.bat +5 -5
- package/templates/ralph/ralph-run.sh +5 -5
- package/templates/ralph/ralph-status.bat +4 -4
- package/templates/ralph/ralph-status.sh +5 -5
- package/templates/services/AZURE_BLOB.md +184 -184
- package/templates/services/CASSANDRA.md +239 -239
- package/templates/services/DATADOG.md +26 -26
- package/templates/services/DOCKER.md +124 -124
- package/templates/services/DOCKER_COMPOSE.md +168 -168
- package/templates/services/DYNAMODB.md +308 -308
- package/templates/services/ELASTICSEARCH.md +347 -347
- package/templates/services/GCS.md +178 -178
- package/templates/services/HELM.md +194 -194
- package/templates/services/INFLUXDB.md +265 -265
- package/templates/services/KAFKA.md +341 -341
- package/templates/services/KUBERNETES.md +208 -208
- package/templates/services/MARIADB.md +183 -183
- package/templates/services/MEMCACHED.md +242 -242
- package/templates/services/MINIO.md +201 -201
- package/templates/services/MONGODB.md +268 -268
- package/templates/services/MYSQL.md +358 -358
- package/templates/services/NEO4J.md +247 -247
- package/templates/services/OPENTELEMETRY.md +25 -25
- package/templates/services/ORACLE.md +290 -290
- package/templates/services/PINO.md +24 -24
- package/templates/services/POSTGRESQL.md +326 -326
- package/templates/services/PROMETHEUS.md +33 -33
- package/templates/services/RABBITMQ.md +286 -286
- package/templates/services/REDIS.md +292 -292
- package/templates/services/S3.md +298 -298
- package/templates/services/SENTRY.md +23 -23
- package/templates/services/SQLITE.md +294 -294
- package/templates/services/SQLSERVER.md +294 -294
- package/templates/services/WINSTON.md +30 -30
- 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/cli/opencode/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/frameworks/angular/SKILL.md +46 -46
- package/templates/skills/frameworks/django/SKILL.md +93 -93
- package/templates/skills/frameworks/electron/SKILL.md +157 -157
- package/templates/skills/frameworks/flask/SKILL.md +48 -48
- package/templates/skills/frameworks/flutter/SKILL.md +65 -65
- package/templates/skills/frameworks/jquery/SKILL.md +42 -42
- package/templates/skills/frameworks/laravel/SKILL.md +48 -48
- package/templates/skills/frameworks/nestjs/SKILL.md +53 -53
- package/templates/skills/frameworks/nextjs/SKILL.md +137 -137
- package/templates/skills/frameworks/nuxt/SKILL.md +50 -50
- package/templates/skills/frameworks/rails/SKILL.md +76 -76
- package/templates/skills/frameworks/react/SKILL.md +48 -48
- package/templates/skills/frameworks/react-native/SKILL.md +57 -57
- package/templates/skills/frameworks/spring/SKILL.md +49 -49
- package/templates/skills/frameworks/symfony/SKILL.md +46 -46
- package/templates/skills/frameworks/vue/SKILL.md +46 -46
- package/templates/skills/frameworks/zend/SKILL.md +45 -45
- 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/skills/services/azure-blob/SKILL.md +194 -194
- package/templates/skills/services/cassandra/SKILL.md +249 -249
- package/templates/skills/services/dynamodb/SKILL.md +318 -318
- package/templates/skills/services/elasticsearch/SKILL.md +357 -357
- package/templates/skills/services/gcs/SKILL.md +188 -188
- package/templates/skills/services/influxdb/SKILL.md +275 -275
- package/templates/skills/services/kafka/SKILL.md +351 -351
- package/templates/skills/services/mariadb/SKILL.md +193 -193
- package/templates/skills/services/memcached/SKILL.md +252 -252
- package/templates/skills/services/minio/SKILL.md +211 -211
- package/templates/skills/services/mongodb/SKILL.md +278 -278
- package/templates/skills/services/mysql/SKILL.md +368 -368
- package/templates/skills/services/neo4j/SKILL.md +257 -257
- package/templates/skills/services/oracle/SKILL.md +300 -300
- package/templates/skills/services/postgresql/SKILL.md +336 -336
- package/templates/skills/services/rabbitmq/SKILL.md +296 -296
- package/templates/skills/services/redis/SKILL.md +302 -302
- package/templates/skills/services/s3/SKILL.md +308 -308
- package/templates/skills/services/sqlite/SKILL.md +304 -304
- package/templates/skills/services/sqlserver/SKILL.md +304 -304
- package/templates/skills/workflows/ralph/SKILL.md +309 -309
- package/templates/skills/workflows/ralph/install.sh +87 -87
- package/templates/skills/workflows/ralph/manifest.json +158 -158
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<!-- RULEBOOK:START -->
|
|
2
|
+
# Workspace Mode
|
|
3
|
+
|
|
4
|
+
**This project is part of a multi-project workspace managed by Rulebook.**
|
|
5
|
+
|
|
6
|
+
## CRITICAL: Project Routing
|
|
7
|
+
|
|
8
|
+
When calling ANY Rulebook MCP tool, you MUST pass the `projectId` parameter to target the correct project.
|
|
9
|
+
|
|
10
|
+
### How to determine the current project
|
|
11
|
+
|
|
12
|
+
1. **Check which files you are editing** — the file path tells you which project you are in
|
|
13
|
+
2. **Use `rulebook_workspace_list`** to see all available projects and their paths
|
|
14
|
+
3. **Match the file path to a project path** to determine the `projectId`
|
|
15
|
+
|
|
16
|
+
### Examples
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
# You are editing files in /path/to/frontend/src/App.tsx
|
|
20
|
+
# → projectId = "frontend"
|
|
21
|
+
|
|
22
|
+
rulebook_task_create({ taskId: "add-auth", projectId: "frontend" })
|
|
23
|
+
rulebook_task_list({ projectId: "frontend" })
|
|
24
|
+
rulebook_memory_save({ ..., projectId: "frontend" })
|
|
25
|
+
rulebook_memory_search({ query: "auth", projectId: "frontend" })
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Cross-project operations
|
|
29
|
+
|
|
30
|
+
Use these dedicated workspace tools for operations across ALL projects:
|
|
31
|
+
|
|
32
|
+
- `rulebook_workspace_list` — List all projects in the workspace
|
|
33
|
+
- `rulebook_workspace_status` — Status of each project (active workers, task count)
|
|
34
|
+
- `rulebook_workspace_search` — Search memory across ALL projects at once
|
|
35
|
+
- `rulebook_workspace_tasks` — List tasks from ALL projects at once
|
|
36
|
+
|
|
37
|
+
### Default project
|
|
38
|
+
|
|
39
|
+
If you omit `projectId`, the **default project** is used: `{{DEFAULT_PROJECT}}`.
|
|
40
|
+
Only omit `projectId` when you are certain the operation targets the default project.
|
|
41
|
+
|
|
42
|
+
## Workspace Projects
|
|
43
|
+
|
|
44
|
+
{{WORKSPACE_PROJECTS}}
|
|
45
|
+
|
|
46
|
+
## Rules
|
|
47
|
+
|
|
48
|
+
1. **NEVER save memory to the wrong project** — always verify `projectId` before calling `rulebook_memory_save`
|
|
49
|
+
2. **NEVER create tasks in the wrong project** — check which project the feature belongs to
|
|
50
|
+
3. **When working across projects** (e.g., shared types), save memory to BOTH relevant projects
|
|
51
|
+
4. **Use `rulebook_workspace_search`** to find related context across all projects before starting work
|
|
52
|
+
5. **Each project has its own `.rulebook/`** directory — configs, tasks, and memory are fully isolated
|
|
53
|
+
|
|
54
|
+
## CLI Commands
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# List tasks from a specific project
|
|
58
|
+
rulebook task list --project frontend
|
|
59
|
+
|
|
60
|
+
# List tasks from ALL projects
|
|
61
|
+
rulebook task list --all-projects
|
|
62
|
+
|
|
63
|
+
# Create task in specific project
|
|
64
|
+
rulebook task create my-task --project backend
|
|
65
|
+
|
|
66
|
+
# Update all projects at once
|
|
67
|
+
rulebook update
|
|
68
|
+
```
|
|
69
|
+
<!-- RULEBOOK:END -->
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
<!-- ANGULAR:START -->
|
|
2
|
-
# Angular Framework Rules
|
|
3
|
-
|
|
4
|
-
**CRITICAL**: Angular projects must meet these standards before delivery.
|
|
5
|
-
|
|
6
|
-
## Quality Commands
|
|
7
|
-
- Lint: `npm run lint`
|
|
8
|
-
- Unit tests: `npm run test -- --watch=false --code-coverage`
|
|
9
|
-
- e2e tests: `npm run e2e`
|
|
10
|
-
- Build: `npm run build -- --configuration production`
|
|
11
|
-
|
|
12
|
-
## Project Structure
|
|
13
|
-
- Colocate features inside `src/app/<feature>/`
|
|
14
|
-
- Keep shared modules in `src/app/shared`
|
|
15
|
-
- Avoid `providedIn: 'root'` unless service truly global
|
|
16
|
-
- Leverage `OnPush` change detection for performance-critical components
|
|
17
|
-
|
|
18
|
-
## Implementation Guidelines
|
|
19
|
-
- Define interfaces for component inputs/outputs
|
|
20
|
-
- Use `HttpClient` interceptors for auth/logging
|
|
21
|
-
- Isolate environment variables in `src/environments/`
|
|
22
|
-
- Prefer Reactive Forms and RxJS operators over manual subscriptions
|
|
23
|
-
|
|
24
|
-
## Pre-Commit Sequence
|
|
25
|
-
```bash
|
|
26
|
-
npm run lint
|
|
27
|
-
npm run test -- --watch=false
|
|
28
|
-
npm run build -- --configuration production
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Documentation
|
|
32
|
-
- Update `/docs/angular-architecture.md` with new modules and routes
|
|
33
|
-
- Record shared component APIs in Storybook or `/docs/ui-components.md`
|
|
34
|
-
- Version major route changes in `/docs/roadmap.md`
|
|
35
|
-
|
|
36
|
-
<!-- ANGULAR:END -->
|
|
1
|
+
<!-- ANGULAR:START -->
|
|
2
|
+
# Angular Framework Rules
|
|
3
|
+
|
|
4
|
+
**CRITICAL**: Angular projects must meet these standards before delivery.
|
|
5
|
+
|
|
6
|
+
## Quality Commands
|
|
7
|
+
- Lint: `npm run lint`
|
|
8
|
+
- Unit tests: `npm run test -- --watch=false --code-coverage`
|
|
9
|
+
- e2e tests: `npm run e2e`
|
|
10
|
+
- Build: `npm run build -- --configuration production`
|
|
11
|
+
|
|
12
|
+
## Project Structure
|
|
13
|
+
- Colocate features inside `src/app/<feature>/`
|
|
14
|
+
- Keep shared modules in `src/app/shared`
|
|
15
|
+
- Avoid `providedIn: 'root'` unless service truly global
|
|
16
|
+
- Leverage `OnPush` change detection for performance-critical components
|
|
17
|
+
|
|
18
|
+
## Implementation Guidelines
|
|
19
|
+
- Define interfaces for component inputs/outputs
|
|
20
|
+
- Use `HttpClient` interceptors for auth/logging
|
|
21
|
+
- Isolate environment variables in `src/environments/`
|
|
22
|
+
- Prefer Reactive Forms and RxJS operators over manual subscriptions
|
|
23
|
+
|
|
24
|
+
## Pre-Commit Sequence
|
|
25
|
+
```bash
|
|
26
|
+
npm run lint
|
|
27
|
+
npm run test -- --watch=false
|
|
28
|
+
npm run build -- --configuration production
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Documentation
|
|
32
|
+
- Update `/docs/angular-architecture.md` with new modules and routes
|
|
33
|
+
- Record shared component APIs in Storybook or `/docs/ui-components.md`
|
|
34
|
+
- Version major route changes in `/docs/roadmap.md`
|
|
35
|
+
|
|
36
|
+
<!-- ANGULAR:END -->
|
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
<!-- DJANGO:START -->
|
|
2
|
-
# Django Framework Rules
|
|
3
|
-
|
|
4
|
-
**Language**: Python
|
|
5
|
-
**Version**: Django 4.2+ (LTS) or 5.0+
|
|
6
|
-
|
|
7
|
-
## Setup & Configuration
|
|
8
|
-
|
|
9
|
-
```python
|
|
10
|
-
# settings.py
|
|
11
|
-
SECRET_KEY = env('SECRET_KEY') # Never hardcode
|
|
12
|
-
DEBUG = env.bool('DEBUG', default=False)
|
|
13
|
-
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')
|
|
14
|
-
|
|
15
|
-
INSTALLED_APPS = [
|
|
16
|
-
# Django apps
|
|
17
|
-
'django.contrib.admin',
|
|
18
|
-
'django.contrib.auth',
|
|
19
|
-
# Third-party
|
|
20
|
-
'rest_framework',
|
|
21
|
-
'corsheaders',
|
|
22
|
-
# Local apps
|
|
23
|
-
'apps.users',
|
|
24
|
-
]
|
|
25
|
-
|
|
26
|
-
DATABASES = {
|
|
27
|
-
'default': env.db('DATABASE_URL') # Use django-environ
|
|
28
|
-
}
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Quality Gates
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
# Code quality
|
|
35
|
-
black . # Format
|
|
36
|
-
ruff check . # Lint
|
|
37
|
-
mypy . # Type check
|
|
38
|
-
|
|
39
|
-
# Tests
|
|
40
|
-
python manage.py test # Run tests
|
|
41
|
-
pytest --cov=apps --cov-report=html # With coverage
|
|
42
|
-
|
|
43
|
-
# Security
|
|
44
|
-
python manage.py check --deploy # Production checks
|
|
45
|
-
bandit -r apps/ # Security scan
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## Best Practices
|
|
49
|
-
|
|
50
|
-
✅ **DO:**
|
|
51
|
-
- Use Class-Based Views (CBVs) or Django REST Framework ViewSets
|
|
52
|
-
- Implement custom User model from start
|
|
53
|
-
- Use Django ORM properly (select_related, prefetch_related)
|
|
54
|
-
- Enable CSRF protection
|
|
55
|
-
- Use environment variables for secrets
|
|
56
|
-
- Write tests for views, models, and forms
|
|
57
|
-
|
|
58
|
-
❌ **DON'T:**
|
|
59
|
-
- Use `DEBUG=True` in production
|
|
60
|
-
- Store secrets in settings.py
|
|
61
|
-
- Use raw SQL without parameterization
|
|
62
|
-
- Skip migrations
|
|
63
|
-
- Ignore security middleware
|
|
64
|
-
|
|
65
|
-
## Project Structure
|
|
66
|
-
|
|
67
|
-
```
|
|
68
|
-
project/
|
|
69
|
-
├── manage.py
|
|
70
|
-
├── requirements.txt
|
|
71
|
-
├── apps/
|
|
72
|
-
│ ├── users/
|
|
73
|
-
│ ├── api/
|
|
74
|
-
│ └── core/
|
|
75
|
-
├── config/
|
|
76
|
-
│ ├── settings.py
|
|
77
|
-
│ ├── urls.py
|
|
78
|
-
│ └── wsgi.py
|
|
79
|
-
└── tests/
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
<!-- DJANGO:END -->
|
|
83
|
-
|
|
1
|
+
<!-- DJANGO:START -->
|
|
2
|
+
# Django Framework Rules
|
|
3
|
+
|
|
4
|
+
**Language**: Python
|
|
5
|
+
**Version**: Django 4.2+ (LTS) or 5.0+
|
|
6
|
+
|
|
7
|
+
## Setup & Configuration
|
|
8
|
+
|
|
9
|
+
```python
|
|
10
|
+
# settings.py
|
|
11
|
+
SECRET_KEY = env('SECRET_KEY') # Never hardcode
|
|
12
|
+
DEBUG = env.bool('DEBUG', default=False)
|
|
13
|
+
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')
|
|
14
|
+
|
|
15
|
+
INSTALLED_APPS = [
|
|
16
|
+
# Django apps
|
|
17
|
+
'django.contrib.admin',
|
|
18
|
+
'django.contrib.auth',
|
|
19
|
+
# Third-party
|
|
20
|
+
'rest_framework',
|
|
21
|
+
'corsheaders',
|
|
22
|
+
# Local apps
|
|
23
|
+
'apps.users',
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
DATABASES = {
|
|
27
|
+
'default': env.db('DATABASE_URL') # Use django-environ
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Quality Gates
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Code quality
|
|
35
|
+
black . # Format
|
|
36
|
+
ruff check . # Lint
|
|
37
|
+
mypy . # Type check
|
|
38
|
+
|
|
39
|
+
# Tests
|
|
40
|
+
python manage.py test # Run tests
|
|
41
|
+
pytest --cov=apps --cov-report=html # With coverage
|
|
42
|
+
|
|
43
|
+
# Security
|
|
44
|
+
python manage.py check --deploy # Production checks
|
|
45
|
+
bandit -r apps/ # Security scan
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Best Practices
|
|
49
|
+
|
|
50
|
+
✅ **DO:**
|
|
51
|
+
- Use Class-Based Views (CBVs) or Django REST Framework ViewSets
|
|
52
|
+
- Implement custom User model from start
|
|
53
|
+
- Use Django ORM properly (select_related, prefetch_related)
|
|
54
|
+
- Enable CSRF protection
|
|
55
|
+
- Use environment variables for secrets
|
|
56
|
+
- Write tests for views, models, and forms
|
|
57
|
+
|
|
58
|
+
❌ **DON'T:**
|
|
59
|
+
- Use `DEBUG=True` in production
|
|
60
|
+
- Store secrets in settings.py
|
|
61
|
+
- Use raw SQL without parameterization
|
|
62
|
+
- Skip migrations
|
|
63
|
+
- Ignore security middleware
|
|
64
|
+
|
|
65
|
+
## Project Structure
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
project/
|
|
69
|
+
├── manage.py
|
|
70
|
+
├── requirements.txt
|
|
71
|
+
├── apps/
|
|
72
|
+
│ ├── users/
|
|
73
|
+
│ ├── api/
|
|
74
|
+
│ └── core/
|
|
75
|
+
├── config/
|
|
76
|
+
│ ├── settings.py
|
|
77
|
+
│ ├── urls.py
|
|
78
|
+
│ └── wsgi.py
|
|
79
|
+
└── tests/
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
<!-- DJANGO:END -->
|
|
83
|
+
|
|
@@ -1,147 +1,147 @@
|
|
|
1
|
-
<!-- ELECTRON:START -->
|
|
2
|
-
# Electron Framework Rules
|
|
3
|
-
|
|
4
|
-
**Language**: TypeScript, JavaScript
|
|
5
|
-
**Version**: Electron 28+
|
|
6
|
-
|
|
7
|
-
## Setup & Configuration
|
|
8
|
-
|
|
9
|
-
```typescript
|
|
10
|
-
// main.ts (Main Process)
|
|
11
|
-
import { app, BrowserWindow } from 'electron'
|
|
12
|
-
import path from 'path'
|
|
13
|
-
|
|
14
|
-
function createWindow() {
|
|
15
|
-
const win = new BrowserWindow({
|
|
16
|
-
width: 1200,
|
|
17
|
-
height: 800,
|
|
18
|
-
webPreferences: {
|
|
19
|
-
preload: path.join(__dirname, 'preload.js'),
|
|
20
|
-
contextIsolation: true,
|
|
21
|
-
nodeIntegration: false,
|
|
22
|
-
},
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
win.loadFile('index.html')
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
app.whenReady().then(createWindow)
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Quality Gates
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
# Type check
|
|
35
|
-
npm run type-check
|
|
36
|
-
|
|
37
|
-
# Lint
|
|
38
|
-
npm run lint
|
|
39
|
-
|
|
40
|
-
# Tests
|
|
41
|
-
npm test
|
|
42
|
-
|
|
43
|
-
# Build
|
|
44
|
-
npm run build # Compile TypeScript
|
|
45
|
-
npm run package # Package app
|
|
46
|
-
npm run make # Create distributables
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
## Best Practices
|
|
50
|
-
|
|
51
|
-
✅ **DO:**
|
|
52
|
-
- Use contextIsolation: true
|
|
53
|
-
- Disable nodeIntegration
|
|
54
|
-
- Use preload scripts for IPC
|
|
55
|
-
- Implement auto-updates (electron-updater)
|
|
56
|
-
- Sign and notarize apps (production)
|
|
57
|
-
- Use Content Security Policy
|
|
58
|
-
- Implement proper error handling
|
|
59
|
-
- Separate main and renderer processes
|
|
60
|
-
|
|
61
|
-
❌ **DON'T:**
|
|
62
|
-
- Enable nodeIntegration in renderer
|
|
63
|
-
- Skip contextIsolation
|
|
64
|
-
- Use remote module (deprecated)
|
|
65
|
-
- Ignore security warnings
|
|
66
|
-
- Skip code signing
|
|
67
|
-
- Load remote content without CSP
|
|
68
|
-
- Use synchronous IPC
|
|
69
|
-
- Hardcode credentials
|
|
70
|
-
|
|
71
|
-
## Project Structure
|
|
72
|
-
|
|
73
|
-
```
|
|
74
|
-
src/
|
|
75
|
-
├── main/
|
|
76
|
-
│ ├── main.ts # Main process
|
|
77
|
-
│ ├── preload.ts # Preload script
|
|
78
|
-
│ └── ipc/ # IPC handlers
|
|
79
|
-
├── renderer/
|
|
80
|
-
│ ├── index.html
|
|
81
|
-
│ ├── renderer.ts
|
|
82
|
-
│ └── components/
|
|
83
|
-
└── shared/
|
|
84
|
-
└── types.ts
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
## IPC Communication
|
|
88
|
-
|
|
89
|
-
```typescript
|
|
90
|
-
// preload.ts
|
|
91
|
-
import { contextBridge, ipcRenderer } from 'electron'
|
|
92
|
-
|
|
93
|
-
contextBridge.exposeInMainWorld('electronAPI', {
|
|
94
|
-
sendMessage: (message: string) => ipcRenderer.send('message', message),
|
|
95
|
-
onReply: (callback: (reply: string) => void) =>
|
|
96
|
-
ipcRenderer.on('reply', (_event, reply) => callback(reply)),
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
// main.ts
|
|
100
|
-
import { ipcMain } from 'electron'
|
|
101
|
-
|
|
102
|
-
ipcMain.on('message', (event, message) => {
|
|
103
|
-
console.log(message)
|
|
104
|
-
event.reply('reply', 'Message received')
|
|
105
|
-
})
|
|
106
|
-
|
|
107
|
-
// renderer.ts
|
|
108
|
-
declare global {
|
|
109
|
-
interface Window {
|
|
110
|
-
electronAPI: {
|
|
111
|
-
sendMessage: (message: string) => void
|
|
112
|
-
onReply: (callback: (reply: string) => void) => void
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
window.electronAPI.sendMessage('Hello from renderer')
|
|
118
|
-
window.electronAPI.onReply((reply) => console.log(reply))
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
## Security Checklist
|
|
122
|
-
|
|
123
|
-
```typescript
|
|
124
|
-
// ✅ Good security configuration
|
|
125
|
-
const win = new BrowserWindow({
|
|
126
|
-
webPreferences: {
|
|
127
|
-
contextIsolation: true, // ✅ MUST enable
|
|
128
|
-
nodeIntegration: false, // ✅ MUST disable
|
|
129
|
-
sandbox: true, // ✅ Enable sandbox
|
|
130
|
-
webSecurity: true, // ✅ Enable web security
|
|
131
|
-
allowRunningInsecureContent: false, // ✅ Block insecure content
|
|
132
|
-
},
|
|
133
|
-
})
|
|
134
|
-
|
|
135
|
-
// Content Security Policy
|
|
136
|
-
session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
|
|
137
|
-
callback({
|
|
138
|
-
responseHeaders: {
|
|
139
|
-
...details.responseHeaders,
|
|
140
|
-
'Content-Security-Policy': ["default-src 'self'"]
|
|
141
|
-
}
|
|
142
|
-
})
|
|
143
|
-
})
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
<!-- ELECTRON:END -->
|
|
147
|
-
|
|
1
|
+
<!-- ELECTRON:START -->
|
|
2
|
+
# Electron Framework Rules
|
|
3
|
+
|
|
4
|
+
**Language**: TypeScript, JavaScript
|
|
5
|
+
**Version**: Electron 28+
|
|
6
|
+
|
|
7
|
+
## Setup & Configuration
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
// main.ts (Main Process)
|
|
11
|
+
import { app, BrowserWindow } from 'electron'
|
|
12
|
+
import path from 'path'
|
|
13
|
+
|
|
14
|
+
function createWindow() {
|
|
15
|
+
const win = new BrowserWindow({
|
|
16
|
+
width: 1200,
|
|
17
|
+
height: 800,
|
|
18
|
+
webPreferences: {
|
|
19
|
+
preload: path.join(__dirname, 'preload.js'),
|
|
20
|
+
contextIsolation: true,
|
|
21
|
+
nodeIntegration: false,
|
|
22
|
+
},
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
win.loadFile('index.html')
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
app.whenReady().then(createWindow)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Quality Gates
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Type check
|
|
35
|
+
npm run type-check
|
|
36
|
+
|
|
37
|
+
# Lint
|
|
38
|
+
npm run lint
|
|
39
|
+
|
|
40
|
+
# Tests
|
|
41
|
+
npm test
|
|
42
|
+
|
|
43
|
+
# Build
|
|
44
|
+
npm run build # Compile TypeScript
|
|
45
|
+
npm run package # Package app
|
|
46
|
+
npm run make # Create distributables
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Best Practices
|
|
50
|
+
|
|
51
|
+
✅ **DO:**
|
|
52
|
+
- Use contextIsolation: true
|
|
53
|
+
- Disable nodeIntegration
|
|
54
|
+
- Use preload scripts for IPC
|
|
55
|
+
- Implement auto-updates (electron-updater)
|
|
56
|
+
- Sign and notarize apps (production)
|
|
57
|
+
- Use Content Security Policy
|
|
58
|
+
- Implement proper error handling
|
|
59
|
+
- Separate main and renderer processes
|
|
60
|
+
|
|
61
|
+
❌ **DON'T:**
|
|
62
|
+
- Enable nodeIntegration in renderer
|
|
63
|
+
- Skip contextIsolation
|
|
64
|
+
- Use remote module (deprecated)
|
|
65
|
+
- Ignore security warnings
|
|
66
|
+
- Skip code signing
|
|
67
|
+
- Load remote content without CSP
|
|
68
|
+
- Use synchronous IPC
|
|
69
|
+
- Hardcode credentials
|
|
70
|
+
|
|
71
|
+
## Project Structure
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
src/
|
|
75
|
+
├── main/
|
|
76
|
+
│ ├── main.ts # Main process
|
|
77
|
+
│ ├── preload.ts # Preload script
|
|
78
|
+
│ └── ipc/ # IPC handlers
|
|
79
|
+
├── renderer/
|
|
80
|
+
│ ├── index.html
|
|
81
|
+
│ ├── renderer.ts
|
|
82
|
+
│ └── components/
|
|
83
|
+
└── shared/
|
|
84
|
+
└── types.ts
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## IPC Communication
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
// preload.ts
|
|
91
|
+
import { contextBridge, ipcRenderer } from 'electron'
|
|
92
|
+
|
|
93
|
+
contextBridge.exposeInMainWorld('electronAPI', {
|
|
94
|
+
sendMessage: (message: string) => ipcRenderer.send('message', message),
|
|
95
|
+
onReply: (callback: (reply: string) => void) =>
|
|
96
|
+
ipcRenderer.on('reply', (_event, reply) => callback(reply)),
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
// main.ts
|
|
100
|
+
import { ipcMain } from 'electron'
|
|
101
|
+
|
|
102
|
+
ipcMain.on('message', (event, message) => {
|
|
103
|
+
console.log(message)
|
|
104
|
+
event.reply('reply', 'Message received')
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
// renderer.ts
|
|
108
|
+
declare global {
|
|
109
|
+
interface Window {
|
|
110
|
+
electronAPI: {
|
|
111
|
+
sendMessage: (message: string) => void
|
|
112
|
+
onReply: (callback: (reply: string) => void) => void
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
window.electronAPI.sendMessage('Hello from renderer')
|
|
118
|
+
window.electronAPI.onReply((reply) => console.log(reply))
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Security Checklist
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
// ✅ Good security configuration
|
|
125
|
+
const win = new BrowserWindow({
|
|
126
|
+
webPreferences: {
|
|
127
|
+
contextIsolation: true, // ✅ MUST enable
|
|
128
|
+
nodeIntegration: false, // ✅ MUST disable
|
|
129
|
+
sandbox: true, // ✅ Enable sandbox
|
|
130
|
+
webSecurity: true, // ✅ Enable web security
|
|
131
|
+
allowRunningInsecureContent: false, // ✅ Block insecure content
|
|
132
|
+
},
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
// Content Security Policy
|
|
136
|
+
session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
|
|
137
|
+
callback({
|
|
138
|
+
responseHeaders: {
|
|
139
|
+
...details.responseHeaders,
|
|
140
|
+
'Content-Security-Policy': ["default-src 'self'"]
|
|
141
|
+
}
|
|
142
|
+
})
|
|
143
|
+
})
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
<!-- ELECTRON:END -->
|
|
147
|
+
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
<!-- FLASK:START -->
|
|
2
|
-
# Flask Framework Rules
|
|
3
|
-
|
|
4
|
-
**Language**: Python
|
|
5
|
-
**Version**: Flask 3.0+
|
|
6
|
-
|
|
7
|
-
## Setup
|
|
8
|
-
|
|
9
|
-
```python
|
|
10
|
-
from flask import Flask
|
|
11
|
-
app = Flask(__name__)
|
|
12
|
-
app.config.from_object('config.ProductionConfig')
|
|
13
|
-
|
|
14
|
-
# Use Flask-SQLAlchemy for ORM
|
|
15
|
-
# Use Flask-Migrate for migrations
|
|
16
|
-
# Use Flask-Login for auth
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Quality Gates
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
black .
|
|
23
|
-
ruff check .
|
|
24
|
-
pytest --cov=app
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Best Practices
|
|
28
|
-
|
|
29
|
-
✅ Use application factory pattern
|
|
30
|
-
✅ Enable CORS properly
|
|
31
|
-
✅ Use blueprints for organization
|
|
32
|
-
✅ Implement error handlers
|
|
33
|
-
|
|
34
|
-
❌ Don't use `debug=True` in production
|
|
35
|
-
❌ Don't store secrets in code
|
|
36
|
-
|
|
37
|
-
<!-- FLASK:END -->
|
|
38
|
-
|
|
1
|
+
<!-- FLASK:START -->
|
|
2
|
+
# Flask Framework Rules
|
|
3
|
+
|
|
4
|
+
**Language**: Python
|
|
5
|
+
**Version**: Flask 3.0+
|
|
6
|
+
|
|
7
|
+
## Setup
|
|
8
|
+
|
|
9
|
+
```python
|
|
10
|
+
from flask import Flask
|
|
11
|
+
app = Flask(__name__)
|
|
12
|
+
app.config.from_object('config.ProductionConfig')
|
|
13
|
+
|
|
14
|
+
# Use Flask-SQLAlchemy for ORM
|
|
15
|
+
# Use Flask-Migrate for migrations
|
|
16
|
+
# Use Flask-Login for auth
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Quality Gates
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
black .
|
|
23
|
+
ruff check .
|
|
24
|
+
pytest --cov=app
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Best Practices
|
|
28
|
+
|
|
29
|
+
✅ Use application factory pattern
|
|
30
|
+
✅ Enable CORS properly
|
|
31
|
+
✅ Use blueprints for organization
|
|
32
|
+
✅ Implement error handlers
|
|
33
|
+
|
|
34
|
+
❌ Don't use `debug=True` in production
|
|
35
|
+
❌ Don't store secrets in code
|
|
36
|
+
|
|
37
|
+
<!-- FLASK:END -->
|
|
38
|
+
|