@atlashub/smartstack-cli 3.39.0 → 3.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.documentation/apex.html +644 -644
- package/.documentation/css/styles.css +2320 -2320
- package/.documentation/init.html +1377 -1377
- package/.documentation/js/app.js +780 -780
- package/.documentation/prd-json-v2.0.0.md +396 -396
- package/.documentation/testing-ba-e2e.md +462 -462
- package/config/default-config.json +95 -95
- package/config/mcp-defaults.json +62 -62
- package/config/settings.json +53 -53
- package/config/settings.local.example.json +16 -16
- package/dist/index.js.map +1 -1
- package/dist/mcp-entry.mjs +6 -4
- package/dist/mcp-entry.mjs.map +1 -1
- package/package.json +115 -115
- package/scripts/extract-api-endpoints.ts +325 -325
- package/scripts/extract-business-rules.ts +440 -440
- package/scripts/generate-doc-with-mock-ui.ts +804 -804
- package/scripts/health-check.sh +168 -168
- package/scripts/postinstall.js +18 -18
- package/templates/agents/action.md +37 -37
- package/templates/agents/ba-reader.md +378 -378
- package/templates/agents/ba-writer.md +861 -861
- package/templates/agents/code-reviewer.md +163 -163
- package/templates/agents/db-reader.md +149 -149
- package/templates/agents/docs-context-reader.md +143 -143
- package/templates/agents/docs-sync-checker.md +122 -122
- package/templates/agents/efcore/conflicts.md +84 -84
- package/templates/agents/efcore/db-deploy.md +74 -74
- package/templates/agents/efcore/db-reset.md +85 -85
- package/templates/agents/efcore/db-seed.md +61 -61
- package/templates/agents/efcore/db-status.md +86 -86
- package/templates/agents/efcore/migration.md +186 -186
- package/templates/agents/efcore/rebase-snapshot.md +108 -108
- package/templates/agents/efcore/scan.md +92 -92
- package/templates/agents/efcore/squash.md +161 -161
- package/templates/agents/explore-codebase.md +66 -66
- package/templates/agents/explore-docs.md +98 -98
- package/templates/agents/fix-grammar.md +50 -50
- package/templates/agents/gitflow/abort.md +45 -45
- package/templates/agents/gitflow/cleanup.md +96 -96
- package/templates/agents/gitflow/commit.md +236 -236
- package/templates/agents/gitflow/exec.md +48 -48
- package/templates/agents/gitflow/finish.md +146 -146
- package/templates/agents/gitflow/init-clone.md +199 -199
- package/templates/agents/gitflow/init-detect.md +137 -137
- package/templates/agents/gitflow/init-validate.md +225 -225
- package/templates/agents/gitflow/init.md +340 -340
- package/templates/agents/gitflow/merge.md +145 -145
- package/templates/agents/gitflow/plan.md +42 -42
- package/templates/agents/gitflow/pr.md +191 -191
- package/templates/agents/gitflow/review.md +49 -49
- package/templates/agents/gitflow/start.md +147 -147
- package/templates/agents/gitflow/status.md +95 -95
- package/templates/agents/mcp-healthcheck.md +163 -163
- package/templates/agents/snipper.md +37 -37
- package/templates/agents/websearch.md +46 -46
- package/templates/hooks/appsettings-guard.sh +76 -76
- package/templates/hooks/docs-drift-check.md +96 -96
- package/templates/hooks/ef-migration-check.md +139 -139
- package/templates/hooks/hooks.json +58 -58
- package/templates/hooks/mcp-check.md +64 -64
- package/templates/hooks/ralph-mcp-logger.sh +46 -46
- package/templates/hooks/ralph-session-end.sh +69 -69
- package/templates/hooks/stop-hook.sh +177 -177
- package/templates/hooks/wsl-dotnet-cleanup.sh +24 -24
- package/templates/mcp-scaffolding/component.tsx.hbs +318 -318
- package/templates/mcp-scaffolding/controller.cs.hbs +192 -192
- package/templates/mcp-scaffolding/entity-extension.cs.hbs +239 -239
- package/templates/mcp-scaffolding/frontend/api-client.ts.hbs +116 -116
- package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +133 -133
- package/templates/mcp-scaffolding/frontend/routes.tsx.hbs +126 -126
- package/templates/mcp-scaffolding/migrations/seed-roles.cs.hbs +261 -261
- package/templates/mcp-scaffolding/service-extension.cs.hbs +53 -53
- package/templates/mcp-scaffolding/tests/controller.test.cs.hbs +436 -436
- package/templates/mcp-scaffolding/tests/entity.test.cs.hbs +239 -239
- package/templates/mcp-scaffolding/tests/repository.test.cs.hbs +441 -441
- package/templates/mcp-scaffolding/tests/security.test.cs.hbs +442 -442
- package/templates/mcp-scaffolding/tests/service.test.cs.hbs +402 -402
- package/templates/mcp-scaffolding/tests/validator.test.cs.hbs +428 -428
- package/templates/project/DependencyInjection.Application.cs.template +25 -25
- package/templates/project/DependencyInjection.Infrastructure.cs.template +61 -61
- package/templates/project/DesignTimeExtensionsDbContextFactory.cs.template +70 -70
- package/templates/project/ExampleEntity.cs.template +116 -116
- package/templates/project/ExampleEntityConfiguration.cs.template +64 -64
- package/templates/project/ExampleService.cs.template +146 -146
- package/templates/project/ExtensionsDbContext.cs.template +41 -41
- package/templates/project/IExtensionsDbContext.cs.template +22 -22
- package/templates/project/Program.cs.template +47 -47
- package/templates/project/README.md +79 -79
- package/templates/project/api.ts.template +12 -12
- package/templates/project/appsettings.json.template +170 -170
- package/templates/project/claude-settings.json.template +5 -5
- package/templates/project/test-frontend/msw/handlers.ts +58 -58
- package/templates/project/test-frontend/msw/server.ts +25 -25
- package/templates/project/test-frontend/setup.ts +16 -16
- package/templates/project/test-frontend/test-utils.tsx +59 -59
- package/templates/project/test-frontend/vitest.config.ts +31 -31
- package/templates/ralph/README.md +93 -93
- package/templates/ralph/ralph.config.yaml +113 -113
- package/templates/scripts/setup-ralph-loop.sh +173 -173
- package/templates/skills/_resources/config-safety.md +61 -61
- package/templates/skills/_resources/context-digest-template.md +53 -53
- package/templates/skills/_resources/doc-context-cache.md +60 -60
- package/templates/skills/_resources/docs-manifest-schema.md +155 -155
- package/templates/skills/_resources/formatting-guide.md +124 -124
- package/templates/skills/_resources/mcp-validate-documentation-spec.md +181 -181
- package/templates/skills/_shared.md +228 -228
- package/templates/skills/admin/SKILL.md +48 -48
- package/templates/skills/ai-prompt/SKILL.md +107 -107
- package/templates/skills/ai-prompt/steps/step-00-init.md +47 -47
- package/templates/skills/ai-prompt/steps/step-01-implementation.md +122 -122
- package/templates/skills/apex/SKILL.md +168 -168
- package/templates/skills/apex/_shared.md +141 -141
- package/templates/skills/apex/references/agent-teams-protocol.md +164 -164
- package/templates/skills/apex/references/analysis-methods.md +141 -141
- package/templates/skills/apex/references/challenge-questions.md +145 -145
- package/templates/skills/apex/references/code-generation.md +412 -412
- package/templates/skills/apex/references/core-seed-data.md +1437 -1437
- package/templates/skills/apex/references/error-classification.md +144 -144
- package/templates/skills/apex/references/examine-build-validation.md +82 -82
- package/templates/skills/apex/references/execution-frontend-gates.md +177 -177
- package/templates/skills/apex/references/execution-frontend-patterns.md +105 -105
- package/templates/skills/apex/references/execution-layer1-rules.md +96 -96
- package/templates/skills/apex/references/initialization-challenge-flow.md +110 -110
- package/templates/skills/apex/references/planning-layer-mapping.md +151 -151
- package/templates/skills/apex/references/post-checks.md +1584 -1584
- package/templates/skills/apex/references/smartstack-api.md +1053 -1053
- package/templates/skills/apex/references/smartstack-frontend.md +1571 -1571
- package/templates/skills/apex/references/smartstack-layers.md +402 -402
- package/templates/skills/apex/steps/step-00-init.md +307 -307
- package/templates/skills/apex/steps/step-01-analyze.md +165 -165
- package/templates/skills/apex/steps/step-02-plan.md +144 -144
- package/templates/skills/apex/steps/step-03-execute.md +328 -328
- package/templates/skills/apex/steps/step-04-examine.md +263 -263
- package/templates/skills/apex/steps/step-05-deep-review.md +129 -129
- package/templates/skills/apex/steps/step-06-resolve.md +101 -101
- package/templates/skills/apex/steps/step-07-tests.md +238 -238
- package/templates/skills/apex/steps/step-08-run-tests.md +125 -125
- package/templates/skills/application/SKILL.md +4 -4
- package/templates/skills/application/references/application-roles-template.md +227 -227
- package/templates/skills/application/references/backend-controller-hierarchy.md +58 -58
- package/templates/skills/application/references/backend-entity-seeding.md +72 -72
- package/templates/skills/application/references/backend-seeding-and-dto-output.md +83 -83
- package/templates/skills/application/references/backend-table-prefix-mapping.md +79 -79
- package/templates/skills/application/references/backend-verification.md +88 -88
- package/templates/skills/application/references/frontend-i18n-and-output.md +67 -67
- package/templates/skills/application/references/frontend-route-naming.md +117 -117
- package/templates/skills/application/references/frontend-route-wiring-app-tsx.md +107 -107
- package/templates/skills/application/references/frontend-verification.md +156 -156
- package/templates/skills/application/references/migration-checklist-troubleshooting.md +1 -1
- package/templates/skills/application/references/provider-template.md +177 -177
- package/templates/skills/application/references/roles-client-project-handling.md +55 -55
- package/templates/skills/application/references/roles-fallback-procedure.md +149 -149
- package/templates/skills/application/references/test-coverage-requirements.md +213 -213
- package/templates/skills/application/references/test-frontend.md +73 -73
- package/templates/skills/application/references/test-prerequisites.md +72 -72
- package/templates/skills/application/steps/step-05-frontend.md +176 -176
- package/templates/skills/application/steps/step-06-migration.md +193 -193
- package/templates/skills/application/steps/step-07-tests.md +356 -356
- package/templates/skills/application/steps/step-08-documentation.md +137 -137
- package/templates/skills/application/templates-backend.md +463 -463
- package/templates/skills/application/templates-frontend.md +685 -685
- package/templates/skills/application/templates-i18n.md +520 -520
- package/templates/skills/application/templates-seed.md +1096 -1096
- package/templates/skills/business-analyse/SKILL.md +327 -327
- package/templates/skills/business-analyse/_architecture.md +123 -123
- package/templates/skills/business-analyse/_elicitation.md +206 -206
- package/templates/skills/business-analyse/_module-loop.md +115 -115
- package/templates/skills/business-analyse/_shared.md +383 -383
- package/templates/skills/business-analyse/_suggestions.md +34 -34
- package/templates/skills/business-analyse/html/ba-interactive.html +4477 -4477
- package/templates/skills/business-analyse/html/build-html.js +77 -77
- package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +150 -150
- package/templates/skills/business-analyse/html/src/scripts/02-navigation.js +227 -227
- package/templates/skills/business-analyse/html/src/scripts/03-render-cadrage.js +199 -199
- package/templates/skills/business-analyse/html/src/scripts/04-render-modules.js +205 -205
- package/templates/skills/business-analyse/html/src/scripts/05-render-specs.js +647 -647
- package/templates/skills/business-analyse/html/src/scripts/06-render-consolidation.js +195 -195
- package/templates/skills/business-analyse/html/src/scripts/07-render-handoff.js +92 -92
- package/templates/skills/business-analyse/html/src/scripts/08-editing.js +135 -135
- package/templates/skills/business-analyse/html/src/scripts/09-export.js +168 -168
- package/templates/skills/business-analyse/html/src/scripts/10-comments.js +171 -171
- package/templates/skills/business-analyse/html/src/scripts/11-review-panel.js +166 -166
- package/templates/skills/business-analyse/html/src/styles/01-variables.css +38 -38
- package/templates/skills/business-analyse/html/src/styles/02-layout.css +101 -101
- package/templates/skills/business-analyse/html/src/styles/03-navigation.css +120 -120
- package/templates/skills/business-analyse/html/src/styles/04-cards.css +196 -196
- package/templates/skills/business-analyse/html/src/styles/05-modules.css +454 -454
- package/templates/skills/business-analyse/html/src/styles/06-wireframes.css +272 -272
- package/templates/skills/business-analyse/html/src/styles/07-comments.css +184 -184
- package/templates/skills/business-analyse/html/src/styles/08-review-panel.css +241 -241
- package/templates/skills/business-analyse/html/src/template.html +516 -516
- package/templates/skills/business-analyse/patterns/suggestion-catalog.md +546 -546
- package/templates/skills/business-analyse/questionnaire/00-application.md +160 -160
- package/templates/skills/business-analyse/questionnaire/00b-project.md +85 -85
- package/templates/skills/business-analyse/questionnaire/01-context.md +185 -185
- package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +189 -189
- package/templates/skills/business-analyse/questionnaire/03-scope.md +164 -164
- package/templates/skills/business-analyse/questionnaire/04-data.md +88 -88
- package/templates/skills/business-analyse/questionnaire/05-integrations.md +58 -58
- package/templates/skills/business-analyse/questionnaire/06-security.md +68 -68
- package/templates/skills/business-analyse/questionnaire/07-ui.md +76 -76
- package/templates/skills/business-analyse/questionnaire/08-performance.md +42 -42
- package/templates/skills/business-analyse/questionnaire/09-constraints.md +45 -45
- package/templates/skills/business-analyse/questionnaire/10-documentation.md +43 -43
- package/templates/skills/business-analyse/questionnaire/11-data-lifecycle.md +59 -59
- package/templates/skills/business-analyse/questionnaire/12-migration.md +58 -58
- package/templates/skills/business-analyse/questionnaire/13-cross-module.md +69 -69
- package/templates/skills/business-analyse/questionnaire/14-risk-assumptions.md +135 -135
- package/templates/skills/business-analyse/questionnaire/15-success-metrics.md +136 -136
- package/templates/skills/business-analyse/questionnaire.md +337 -337
- package/templates/skills/business-analyse/react/application-viewer.md +242 -242
- package/templates/skills/business-analyse/react/components.md +551 -551
- package/templates/skills/business-analyse/react/i18n-template.md +306 -306
- package/templates/skills/business-analyse/references/acceptance-criteria.md +169 -169
- package/templates/skills/business-analyse/references/agent-module-prompt.md +362 -362
- package/templates/skills/business-analyse/references/agent-pooling-best-practices.md +557 -557
- package/templates/skills/business-analyse/references/analysis-semantic-checks.md +190 -190
- package/templates/skills/business-analyse/references/cache-warming-strategy.md +566 -566
- package/templates/skills/business-analyse/references/cadrage-challenge-patterns.md +41 -41
- package/templates/skills/business-analyse/references/cadrage-coverage-matrix.md +74 -74
- package/templates/skills/business-analyse/references/cadrage-pre-analysis.md +115 -115
- package/templates/skills/business-analyse/references/cadrage-shared-modules.md +68 -69
- package/templates/skills/business-analyse/references/cadrage-structure-cards.md +85 -85
- package/templates/skills/business-analyse/references/compilation-structure-cards.md +297 -297
- package/templates/skills/business-analyse/references/consolidation-structural-checks.md +107 -107
- package/templates/skills/business-analyse/references/deploy-data-build.md +180 -180
- package/templates/skills/business-analyse/references/deploy-modes.md +118 -118
- package/templates/skills/business-analyse/references/detection-strategies.md +424 -424
- package/templates/skills/business-analyse/references/entity-architecture-decision.md +218 -218
- package/templates/skills/business-analyse/references/handoff-file-templates.md +120 -120
- package/templates/skills/business-analyse/references/handoff-mappings.md +81 -81
- package/templates/skills/business-analyse/references/handoff-seeddata-generation.md +312 -312
- package/templates/skills/business-analyse/references/html-data-mapping.md +299 -299
- package/templates/skills/business-analyse/references/init-schema-deployment.md +65 -65
- package/templates/skills/business-analyse/references/naming-conventions.md +243 -243
- package/templates/skills/business-analyse/references/prd-generation.md +258 -258
- package/templates/skills/business-analyse/references/review-data-mapping.md +363 -363
- package/templates/skills/business-analyse/references/robustness-checks.md +542 -542
- package/templates/skills/business-analyse/references/spec-auto-inference.md +111 -111
- package/templates/skills/business-analyse/references/team-orchestration.md +1022 -1022
- package/templates/skills/business-analyse/references/ui-dashboard-spec.md +85 -85
- package/templates/skills/business-analyse/references/ui-resource-cards.md +259 -259
- package/templates/skills/business-analyse/references/validate-incremental-html.md +121 -121
- package/templates/skills/business-analyse/references/validation-checklist.md +347 -347
- package/templates/skills/business-analyse/references/wireframe-svg-style-guide.md +335 -335
- package/templates/skills/business-analyse/schemas/application-schema.json +453 -453
- package/templates/skills/business-analyse/schemas/feature-schema.json +53 -53
- package/templates/skills/business-analyse/schemas/project-schema.json +485 -485
- package/templates/skills/business-analyse/schemas/sections/analysis-schema.json +201 -201
- package/templates/skills/business-analyse/schemas/sections/discovery-schema.json +82 -82
- package/templates/skills/business-analyse/schemas/sections/handoff-schema.json +80 -80
- package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +70 -70
- package/templates/skills/business-analyse/schemas/sections/specification-schema.json +547 -547
- package/templates/skills/business-analyse/schemas/sections/validation-schema.json +93 -93
- package/templates/skills/business-analyse/schemas/shared/common-defs.json +226 -226
- package/templates/skills/business-analyse/steps/step-00-init.md +575 -576
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +767 -767
- package/templates/skills/business-analyse/steps/step-01b-applications.md +419 -419
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +387 -387
- package/templates/skills/business-analyse/steps/step-03a-data.md +16 -16
- package/templates/skills/business-analyse/steps/step-03a1-setup.md +506 -506
- package/templates/skills/business-analyse/steps/step-03a2-analysis.md +252 -252
- package/templates/skills/business-analyse/steps/step-03b-ui.md +425 -425
- package/templates/skills/business-analyse/steps/step-03c-compile.md +611 -611
- package/templates/skills/business-analyse/steps/step-03d-validate.md +783 -783
- package/templates/skills/business-analyse/steps/step-04-consolidation.md +17 -17
- package/templates/skills/business-analyse/steps/step-04a-collect.md +415 -415
- package/templates/skills/business-analyse/steps/step-04b-analyze.md +163 -163
- package/templates/skills/business-analyse/steps/step-04c-decide.md +186 -186
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +840 -840
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +522 -522
- package/templates/skills/business-analyse/steps/step-05c-ralph-readiness.md +703 -703
- package/templates/skills/business-analyse/steps/step-06-review.md +278 -278
- package/templates/skills/business-analyse/templates/tpl-frd.md +168 -168
- package/templates/skills/business-analyse/templates/tpl-handoff.md +186 -186
- package/templates/skills/business-analyse/templates/tpl-launch-displays.md +59 -59
- package/templates/skills/business-analyse/templates/tpl-progress.md +172 -172
- package/templates/skills/business-analyse/templates-frd.md +476 -476
- package/templates/skills/business-analyse/templates-react.md +574 -574
- package/templates/skills/cc-agent/SKILL.md +129 -129
- package/templates/skills/cc-agent/references/agent-behavior-patterns.md +95 -95
- package/templates/skills/cc-agent/references/agent-frontmatter.md +213 -213
- package/templates/skills/cc-agent/references/permission-modes.md +102 -102
- package/templates/skills/cc-agent/references/tools-reference.md +144 -144
- package/templates/skills/cc-agent/steps/step-00-init.md +134 -134
- package/templates/skills/cc-agent/steps/step-01-design.md +186 -186
- package/templates/skills/cc-agent/steps/step-02-generate.md +131 -131
- package/templates/skills/cc-agent/steps/step-03-validate.md +130 -130
- package/templates/skills/cc-agent/templates/agent-categorized.md +67 -67
- package/templates/skills/cc-agent/templates/agent-standalone.md +56 -56
- package/templates/skills/cc-agent/templates/agent-with-skills.md +94 -94
- package/templates/skills/cc-audit/SKILL.md +108 -108
- package/templates/skills/cc-audit/references/agent-checklist.md +91 -91
- package/templates/skills/cc-audit/references/hook-checklist.md +110 -110
- package/templates/skills/cc-audit/references/skill-checklist.md +70 -70
- package/templates/skills/cc-audit/steps/step-00-init.md +98 -98
- package/templates/skills/cc-audit/steps/step-01-scan.md +142 -142
- package/templates/skills/cc-audit/steps/step-02-analyze.md +158 -158
- package/templates/skills/cc-audit/steps/step-03-report.md +142 -142
- package/templates/skills/cc-skill/SKILL.md +134 -134
- package/templates/skills/cc-skill/references/best-practices.md +167 -167
- package/templates/skills/cc-skill/references/frontmatter-reference.md +182 -182
- package/templates/skills/cc-skill/references/skill-patterns.md +199 -199
- package/templates/skills/cc-skill/steps/step-00-init.md +119 -119
- package/templates/skills/cc-skill/steps/step-01-design.md +199 -199
- package/templates/skills/cc-skill/steps/step-02-generate.md +145 -145
- package/templates/skills/cc-skill/steps/step-03-steps.md +151 -151
- package/templates/skills/cc-skill/steps/step-04-validate.md +124 -124
- package/templates/skills/cc-skill/templates/skill-forked.md +85 -85
- package/templates/skills/cc-skill/templates/skill-progressive.md +102 -102
- package/templates/skills/cc-skill/templates/skill-simple.md +75 -75
- package/templates/skills/cc-skill/templates/step-template.md +82 -82
- package/templates/skills/check-version/SKILL.md +196 -196
- package/templates/skills/controller/SKILL.md +162 -162
- package/templates/skills/controller/postman-templates.md +614 -614
- package/templates/skills/controller/references/controller-code-templates.md +159 -159
- package/templates/skills/controller/references/mcp-scaffold-workflow.md +209 -209
- package/templates/skills/controller/references/permission-sync-templates.md +149 -149
- package/templates/skills/controller/steps/step-00-init.md +193 -191
- package/templates/skills/controller/steps/step-01-analyze.md +146 -146
- package/templates/skills/controller/steps/step-02-plan.md +176 -176
- package/templates/skills/controller/steps/step-03-generate.md +189 -189
- package/templates/skills/controller/steps/step-04-perms.md +80 -80
- package/templates/skills/controller/steps/step-05-validate.md +107 -107
- package/templates/skills/controller/templates.md +1555 -1555
- package/templates/skills/debug/SKILL.md +70 -70
- package/templates/skills/debug/references/team-protocol.md +232 -232
- package/templates/skills/debug/steps/step-00-init.md +57 -57
- package/templates/skills/debug/steps/step-01-analyze.md +219 -219
- package/templates/skills/debug/steps/step-02-resolve.md +85 -85
- package/templates/skills/documentation/SKILL.md +132 -132
- package/templates/skills/documentation/data-schema.md +227 -227
- package/templates/skills/documentation/steps/step-00-init.md +70 -70
- package/templates/skills/documentation/steps/step-01-scan.md +113 -113
- package/templates/skills/documentation/steps/step-02-generate.md +231 -231
- package/templates/skills/documentation/steps/step-03-validate.md +251 -238
- package/templates/skills/documentation/templates.md +662 -663
- package/templates/skills/efcore/SKILL.md +167 -167
- package/templates/skills/efcore/references/both-contexts.md +32 -32
- package/templates/skills/efcore/references/database-operations.md +67 -67
- package/templates/skills/efcore/references/destructive-operations.md +38 -38
- package/templates/skills/efcore/references/reset-operations.md +81 -81
- package/templates/skills/efcore/references/seed-methods.md +86 -86
- package/templates/skills/efcore/references/shared-init-functions.md +250 -250
- package/templates/skills/efcore/references/sql-objects-injection.md +61 -61
- package/templates/skills/efcore/references/troubleshooting.md +81 -81
- package/templates/skills/efcore/references/zero-downtime-patterns.md +227 -227
- package/templates/skills/efcore/steps/db/step-deploy.md +217 -217
- package/templates/skills/efcore/steps/db/step-reset.md +186 -186
- package/templates/skills/efcore/steps/db/step-seed.md +166 -166
- package/templates/skills/efcore/steps/db/step-status.md +173 -173
- package/templates/skills/efcore/steps/migration/step-00-init.md +102 -102
- package/templates/skills/efcore/steps/migration/step-01-check.md +164 -164
- package/templates/skills/efcore/steps/migration/step-02-create.md +160 -160
- package/templates/skills/efcore/steps/migration/step-03-validate.md +168 -168
- package/templates/skills/efcore/steps/rebase-snapshot/step-00-init.md +173 -173
- package/templates/skills/efcore/steps/rebase-snapshot/step-01-backup.md +100 -100
- package/templates/skills/efcore/steps/rebase-snapshot/step-02-fetch.md +115 -115
- package/templates/skills/efcore/steps/rebase-snapshot/step-03-create.md +112 -112
- package/templates/skills/efcore/steps/rebase-snapshot/step-04-validate.md +157 -157
- package/templates/skills/efcore/steps/shared/step-00-init.md +131 -131
- package/templates/skills/efcore/steps/squash/step-00-init.md +141 -141
- package/templates/skills/efcore/steps/squash/step-01-backup.md +120 -120
- package/templates/skills/efcore/steps/squash/step-02-fetch.md +168 -168
- package/templates/skills/efcore/steps/squash/step-03-create.md +184 -184
- package/templates/skills/efcore/steps/squash/step-04-validate.md +174 -174
- package/templates/skills/explore/SKILL.md +98 -98
- package/templates/skills/feature-full/SKILL.md +111 -111
- package/templates/skills/feature-full/steps/step-00-init.md +57 -57
- package/templates/skills/feature-full/steps/step-01-implementation.md +120 -120
- package/templates/skills/gitflow/SKILL.md +377 -377
- package/templates/skills/gitflow/_shared.md +620 -620
- package/templates/skills/gitflow/phases/abort.md +189 -189
- package/templates/skills/gitflow/phases/cleanup.md +234 -234
- package/templates/skills/gitflow/phases/status.md +192 -192
- package/templates/skills/gitflow/references/commit-message-generation.md +58 -58
- package/templates/skills/gitflow/references/commit-migration-validation.md +49 -49
- package/templates/skills/gitflow/references/finish-cleanup.md +55 -55
- package/templates/skills/gitflow/references/finish-version-bumping.md +45 -45
- package/templates/skills/gitflow/references/init-config-template.md +135 -135
- package/templates/skills/gitflow/references/init-environment-detection.md +41 -41
- package/templates/skills/gitflow/references/init-name-normalization.md +103 -103
- package/templates/skills/gitflow/references/init-questions.md +185 -185
- package/templates/skills/gitflow/references/init-structure-creation.md +75 -75
- package/templates/skills/gitflow/references/init-version-detection.md +21 -21
- package/templates/skills/gitflow/references/init-workspace-detection.md +43 -43
- package/templates/skills/gitflow/references/merge-ci-status.md +36 -36
- package/templates/skills/gitflow/references/merge-execution.md +62 -62
- package/templates/skills/gitflow/references/merge-pr-context.md +76 -76
- package/templates/skills/gitflow/references/plan-template.md +69 -69
- package/templates/skills/gitflow/references/pr-build-checks.md +60 -60
- package/templates/skills/gitflow/references/pr-generation.md +58 -58
- package/templates/skills/gitflow/references/start-branch-normalization.md +28 -28
- package/templates/skills/gitflow/references/start-efcore-preflight.md +70 -70
- package/templates/skills/gitflow/references/start-local-config.md +113 -113
- package/templates/skills/gitflow/references/start-worktree-creation.md +50 -50
- package/templates/skills/gitflow/references/sync-push-verify.md +44 -44
- package/templates/skills/gitflow/references/sync-rebase-conflicts.md +38 -38
- package/templates/skills/gitflow/steps/step-commit.md +199 -199
- package/templates/skills/gitflow/steps/step-finish.md +147 -147
- package/templates/skills/gitflow/steps/step-init.md +190 -190
- package/templates/skills/gitflow/steps/step-merge.md +85 -85
- package/templates/skills/gitflow/steps/step-plan.md +151 -151
- package/templates/skills/gitflow/steps/step-pr.md +199 -199
- package/templates/skills/gitflow/steps/step-start.md +195 -195
- package/templates/skills/gitflow/steps/step-sync.md +161 -161
- package/templates/skills/gitflow/templates/config.json +72 -72
- package/templates/skills/mcp/SKILL.md +62 -62
- package/templates/skills/mcp/steps/step-01-healthcheck.md +108 -108
- package/templates/skills/mcp/steps/step-02-tools.md +73 -73
- package/templates/skills/notification/SKILL.md +173 -173
- package/templates/skills/quick-search/SKILL.md +99 -99
- package/templates/skills/ralph-loop/SKILL.md +234 -234
- package/templates/skills/ralph-loop/references/category-completeness.md +185 -185
- package/templates/skills/ralph-loop/references/category-rules.md +96 -96
- package/templates/skills/ralph-loop/references/compact-loop.md +300 -300
- package/templates/skills/ralph-loop/references/init-resume-recovery.md +127 -127
- package/templates/skills/ralph-loop/references/module-transition.md +151 -151
- package/templates/skills/ralph-loop/references/multi-module-queue.md +171 -171
- package/templates/skills/ralph-loop/references/parallel-execution.md +246 -246
- package/templates/skills/ralph-loop/references/section-splitting.md +439 -439
- package/templates/skills/ralph-loop/references/task-transform-legacy.md +256 -256
- package/templates/skills/ralph-loop/references/team-orchestration.md +547 -547
- package/templates/skills/ralph-loop/steps/step-00-init.md +150 -150
- package/templates/skills/ralph-loop/steps/step-01-task.md +174 -174
- package/templates/skills/ralph-loop/steps/step-02-execute.md +177 -177
- package/templates/skills/ralph-loop/steps/step-03-commit.md +92 -92
- package/templates/skills/ralph-loop/steps/step-04-check.md +207 -207
- package/templates/skills/ralph-loop/steps/step-05-report.md +175 -175
- package/templates/skills/refactor/SKILL.md +56 -56
- package/templates/skills/refactor/steps/step-01-discover.md +60 -60
- package/templates/skills/refactor/steps/step-02-execute.md +67 -67
- package/templates/skills/review-code/SKILL.md +94 -94
- package/templates/skills/review-code/references/clean-code-principles.md +292 -292
- package/templates/skills/review-code/references/code-quality-metrics.md +174 -174
- package/templates/skills/review-code/references/feedback-patterns.md +149 -149
- package/templates/skills/review-code/references/owasp-api-top10.md +243 -243
- package/templates/skills/review-code/references/security-checklist.md +212 -212
- package/templates/skills/review-code/steps/step-01-smartstack.md +96 -96
- package/templates/skills/review-code/steps/step-02-detailed-review.md +80 -80
- package/templates/skills/review-code/steps/step-03-react.md +44 -44
- package/templates/skills/ui-components/SKILL.md +137 -137
- package/templates/skills/ui-components/accessibility.md +170 -170
- package/templates/skills/ui-components/patterns/dashboard-chart.md +327 -327
- package/templates/skills/ui-components/patterns/data-table.md +39 -39
- package/templates/skills/ui-components/patterns/entity-card.md +77 -77
- package/templates/skills/ui-components/patterns/grid-layout.md +91 -91
- package/templates/skills/ui-components/patterns/kanban.md +43 -43
- package/templates/skills/ui-components/responsive-guidelines.md +278 -278
- package/templates/skills/ui-components/style-guide.md +113 -113
- package/templates/skills/utils/SKILL.md +44 -44
- package/templates/skills/utils/subcommands/test-web-config.md +152 -152
- package/templates/skills/utils/subcommands/test-web.md +123 -123
- package/templates/skills/validate/SKILL.md +181 -181
- package/templates/skills/validate-feature/SKILL.md +101 -101
- package/templates/skills/validate-feature/references/api-smoke-tests.md +140 -140
- package/templates/skills/validate-feature/references/db-validation-checks.md +180 -180
- package/templates/skills/validate-feature/steps/step-00-dependencies.md +121 -121
- package/templates/skills/validate-feature/steps/step-01-compile.md +39 -39
- package/templates/skills/validate-feature/steps/step-02-unit-tests.md +45 -45
- package/templates/skills/validate-feature/steps/step-03-integration-tests.md +53 -53
- package/templates/skills/validate-feature/steps/step-04-api-smoke.md +94 -94
- package/templates/skills/validate-feature/steps/step-05-db-validation.md +149 -149
- package/templates/skills/workflow/SKILL.md +127 -127
- package/templates/skills/workflow/steps/step-00-init.md +57 -57
- package/templates/skills/workflow/steps/step-01-implementation.md +84 -84
- package/templates/test-web/api-health.json +38 -38
- package/templates/test-web/minimal.json +19 -19
- package/templates/test-web/npm-package.json +46 -46
- package/templates/test-web/seo-check.json +54 -54
|
@@ -1,292 +1,292 @@
|
|
|
1
|
-
<overview>
|
|
2
|
-
Clean code principles based on Robert Martin's Clean Code and industry research. SOLID principles, naming conventions, and code smell detection.
|
|
3
|
-
</overview>
|
|
4
|
-
|
|
5
|
-
<solid_principles>
|
|
6
|
-
| Principle | Rule | Violation Sign |
|
|
7
|
-
|-----------|------|----------------|
|
|
8
|
-
| **S**ingle Responsibility | One reason to change | Class/function does multiple things |
|
|
9
|
-
| **O**pen/Closed | Open for extension, closed for modification | Adding features requires changing existing code |
|
|
10
|
-
| **L**iskov Substitution | Subtypes must be substitutable | Subclass breaks when used as parent |
|
|
11
|
-
| **I**nterface Segregation | No forced dependencies | Implementing unused interface methods |
|
|
12
|
-
| **D**ependency Inversion | Depend on abstractions | Direct instantiation of dependencies |
|
|
13
|
-
</solid_principles>
|
|
14
|
-
|
|
15
|
-
<function_guidelines>
|
|
16
|
-
<size_and_scope>
|
|
17
|
-
Function size targets:
|
|
18
|
-
|
|
19
|
-
- Maximum 50 lines (ideally <20)
|
|
20
|
-
- Do ONE thing well
|
|
21
|
-
- Single level of abstraction
|
|
22
|
-
- Fit on one screen without scrolling
|
|
23
|
-
</size_and_scope>
|
|
24
|
-
|
|
25
|
-
<parameters>
|
|
26
|
-
Parameter limits:
|
|
27
|
-
|
|
28
|
-
- Maximum 3 parameters
|
|
29
|
-
- Avoid flag arguments (split into separate methods)
|
|
30
|
-
- Use objects for related parameters
|
|
31
|
-
|
|
32
|
-
**Parameter Object Pattern (for 4+ parameters):**
|
|
33
|
-
|
|
34
|
-
```csharp
|
|
35
|
-
// ❌ BAD - Too many parameters (S107)
|
|
36
|
-
public void CreateUser(
|
|
37
|
-
string name,
|
|
38
|
-
string email,
|
|
39
|
-
string phone,
|
|
40
|
-
string address,
|
|
41
|
-
bool isActive,
|
|
42
|
-
Guid tenantId)
|
|
43
|
-
{
|
|
44
|
-
// ...
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// ✅ GOOD - Use parameter object
|
|
48
|
-
public record CreateUserRequest(
|
|
49
|
-
string Name,
|
|
50
|
-
string Email,
|
|
51
|
-
string Phone,
|
|
52
|
-
string Address,
|
|
53
|
-
bool IsActive,
|
|
54
|
-
Guid TenantId);
|
|
55
|
-
|
|
56
|
-
public void CreateUser(CreateUserRequest request)
|
|
57
|
-
{
|
|
58
|
-
// Access via request.Name, request.Email, etc.
|
|
59
|
-
}
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
**Benefits:**
|
|
63
|
-
- Easier to extend (add new parameters without changing signature)
|
|
64
|
-
- Self-documenting (grouped related data)
|
|
65
|
-
- Enables validation logic on the object itself
|
|
66
|
-
- Reduces method signature complexity
|
|
67
|
-
</parameters>
|
|
68
|
-
|
|
69
|
-
<naming>
|
|
70
|
-
Function naming patterns:
|
|
71
|
-
|
|
72
|
-
- Verbs for functions: `getUserById()`, `calculateTotal()`
|
|
73
|
-
- Reveals intent without reading body
|
|
74
|
-
- No abbreviations: `getTransaction()` not `getTx()`
|
|
75
|
-
</naming>
|
|
76
|
-
|
|
77
|
-
<string_comparison>
|
|
78
|
-
**C# String Comparison Best Practices:**
|
|
79
|
-
|
|
80
|
-
ALWAYS use `StringComparison` overloads to avoid culture-specific issues (CA1873).
|
|
81
|
-
|
|
82
|
-
```csharp
|
|
83
|
-
// ❌ BAD - Culture-dependent, performance issue
|
|
84
|
-
if (str1.ToLower() == str2.ToLower()) { ... }
|
|
85
|
-
if (str1.ToUpper() == str2.ToUpper()) { ... }
|
|
86
|
-
|
|
87
|
-
// ✅ GOOD - Explicit comparison
|
|
88
|
-
if (string.Equals(str1, str2, StringComparison.OrdinalIgnoreCase)) { ... }
|
|
89
|
-
if (str1.Equals(str2, StringComparison.OrdinalIgnoreCase)) { ... }
|
|
90
|
-
|
|
91
|
-
// ❌ BAD - Culture-dependent Contains
|
|
92
|
-
if (str.ToLower().Contains("keyword")) { ... }
|
|
93
|
-
|
|
94
|
-
// ✅ GOOD - Explicit comparison (C# 5.0+)
|
|
95
|
-
if (str.Contains("keyword", StringComparison.OrdinalIgnoreCase)) { ... }
|
|
96
|
-
|
|
97
|
-
// ❌ BAD - Culture-dependent StartsWith/EndsWith
|
|
98
|
-
if (str.ToLower().StartsWith("prefix")) { ... }
|
|
99
|
-
|
|
100
|
-
// ✅ GOOD - Explicit comparison
|
|
101
|
-
if (str.StartsWith("prefix", StringComparison.OrdinalIgnoreCase)) { ... }
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
**StringComparison options:**
|
|
105
|
-
- `Ordinal` - Binary comparison (fastest, case-sensitive)
|
|
106
|
-
- `OrdinalIgnoreCase` - Binary comparison (case-insensitive)
|
|
107
|
-
- `CurrentCulture` - Culture-aware (rarely needed)
|
|
108
|
-
- `InvariantCulture` - Culture-invariant (for data storage)
|
|
109
|
-
|
|
110
|
-
**Rule of thumb:**
|
|
111
|
-
- Use `Ordinal` for identifiers, file paths, keys
|
|
112
|
-
- Use `OrdinalIgnoreCase` for user input comparison
|
|
113
|
-
- Avoid `ToLower()`/`ToUpper()` for comparison
|
|
114
|
-
</string_comparison>
|
|
115
|
-
</function_guidelines>
|
|
116
|
-
|
|
117
|
-
<naming_conventions>
|
|
118
|
-
General naming rules:
|
|
119
|
-
|
|
120
|
-
✓ Descriptive, unambiguous names
|
|
121
|
-
✓ Pronounceable and searchable
|
|
122
|
-
✓ Class names: nouns (User, PaymentProcessor)
|
|
123
|
-
✓ Method names: verbs (validate, calculate, fetch)
|
|
124
|
-
✗ Single letter variables (except loop counters)
|
|
125
|
-
✗ Hungarian notation (strName, intCount)
|
|
126
|
-
✗ Abbreviations (usr, txn, cfg)
|
|
127
|
-
</naming_conventions>
|
|
128
|
-
|
|
129
|
-
<code_smells>
|
|
130
|
-
<critical_smells>
|
|
131
|
-
Flag these in review:
|
|
132
|
-
|
|
133
|
-
| Smell | Detection | Fix |
|
|
134
|
-
|-------|-----------|-----|
|
|
135
|
-
| **Duplicated Code** | Same logic in 2+ places | Extract to shared function |
|
|
136
|
-
| **Large Class/Method** | >50 lines, multiple responsibilities | Split by responsibility |
|
|
137
|
-
| **Long Parameter List** | >3 parameters | Use parameter object |
|
|
138
|
-
| **Feature Envy** | Method uses another class's data more | Move method to that class |
|
|
139
|
-
| **God Object** | One class controls everything | Split into focused classes |
|
|
140
|
-
</critical_smells>
|
|
141
|
-
|
|
142
|
-
<medium_smells>
|
|
143
|
-
Suggest these fixes:
|
|
144
|
-
|
|
145
|
-
| Smell | Detection | Fix |
|
|
146
|
-
|-------|-----------|-----|
|
|
147
|
-
| **Deep Nesting** | >3 levels of indentation | Guard clauses, early returns |
|
|
148
|
-
| **Magic Numbers** | Unexplained literals | Named constants |
|
|
149
|
-
| **Dead Code** | Commented-out or unreachable code | Delete it |
|
|
150
|
-
| **Shotgun Surgery** | Small change touches many files | Consolidate related code |
|
|
151
|
-
| **Nested Ternary** | `? ( ? : ) :` patterns | Extract to function/if-else |
|
|
152
|
-
| **TODO/FIXME** | Untracked technical debt | Create ticket or fix immediately |
|
|
153
|
-
</medium_smells>
|
|
154
|
-
|
|
155
|
-
<nested_ternary_detection>
|
|
156
|
-
**Nested Ternary Operators (S3358):**
|
|
157
|
-
|
|
158
|
-
Nested ternaries are hard to read and maintain.
|
|
159
|
-
|
|
160
|
-
```typescript
|
|
161
|
-
// ❌ BAD - Nested ternary
|
|
162
|
-
const status = isActive
|
|
163
|
-
? (isPremium ? 'premium-active' : 'standard-active')
|
|
164
|
-
: 'inactive';
|
|
165
|
-
|
|
166
|
-
const color = type === 'error'
|
|
167
|
-
? 'red'
|
|
168
|
-
: type === 'warning' ? 'yellow' : 'blue';
|
|
169
|
-
|
|
170
|
-
// ✅ GOOD - Early returns in function
|
|
171
|
-
function getStatus(isActive: boolean, isPremium: boolean): string {
|
|
172
|
-
if (!isActive) return 'inactive';
|
|
173
|
-
if (isPremium) return 'premium-active';
|
|
174
|
-
return 'standard-active';
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
// ✅ GOOD - If-else chain
|
|
178
|
-
let color: string;
|
|
179
|
-
if (type === 'error') {
|
|
180
|
-
color = 'red';
|
|
181
|
-
} else if (type === 'warning') {
|
|
182
|
-
color = 'yellow';
|
|
183
|
-
} else {
|
|
184
|
-
color = 'blue';
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// ✅ GOOD - Map/lookup for simple cases
|
|
188
|
-
const colorMap: Record<string, string> = {
|
|
189
|
-
error: 'red',
|
|
190
|
-
warning: 'yellow',
|
|
191
|
-
info: 'blue'
|
|
192
|
-
};
|
|
193
|
-
const color = colorMap[type] ?? 'blue';
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
**Detection pattern:** Look for `? ... ? ... : ... :` in code.
|
|
197
|
-
</nested_ternary_detection>
|
|
198
|
-
|
|
199
|
-
<todo_fixme_tracking>
|
|
200
|
-
**TODO/FIXME Comments (S1135):**
|
|
201
|
-
|
|
202
|
-
Untracked TODOs become technical debt. Either fix immediately or create a tracked ticket.
|
|
203
|
-
|
|
204
|
-
```typescript
|
|
205
|
-
// ❌ BAD - Untracked TODO
|
|
206
|
-
// TODO: handle edge case
|
|
207
|
-
|
|
208
|
-
// ❌ BAD - Vague FIXME
|
|
209
|
-
// FIXME: this is broken
|
|
210
|
-
|
|
211
|
-
// ✅ ACCEPTABLE - Linked to ticket
|
|
212
|
-
// TODO(#1234): Implement retry logic for transient failures
|
|
213
|
-
|
|
214
|
-
// ✅ ACCEPTABLE - With deadline
|
|
215
|
-
// FIXME(2026-02-15): Remove legacy API call after migration
|
|
216
|
-
|
|
217
|
-
// ✅ BEST - No comment, just fix it
|
|
218
|
-
// (Actually implement the fix instead of leaving a comment)
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
**Code review action:**
|
|
222
|
-
1. Search for `TODO`, `FIXME`, `HACK`, `XXX`, `REFACTOR` comments
|
|
223
|
-
2. For each:
|
|
224
|
-
- Is it linked to a ticket? If not, create one or fix now
|
|
225
|
-
- Is it still relevant? If not, delete
|
|
226
|
-
- Does it have context? If not, add details
|
|
227
|
-
3. Report untracked TODOs as `[SUGGESTION]` in review
|
|
228
|
-
</todo_fixme_tracking>
|
|
229
|
-
</code_smells>
|
|
230
|
-
|
|
231
|
-
<complexity_reduction>
|
|
232
|
-
<example_before>
|
|
233
|
-
Complex nested conditions:
|
|
234
|
-
|
|
235
|
-
```javascript
|
|
236
|
-
function process(user) {
|
|
237
|
-
if (user) {
|
|
238
|
-
if (user.isActive) {
|
|
239
|
-
if (user.hasPermission) {
|
|
240
|
-
// actual logic here
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
```
|
|
246
|
-
</example_before>
|
|
247
|
-
|
|
248
|
-
<example_after>
|
|
249
|
-
Simplified with guard clauses:
|
|
250
|
-
|
|
251
|
-
```javascript
|
|
252
|
-
function process(user) {
|
|
253
|
-
if (!user) return;
|
|
254
|
-
if (!user.isActive) return;
|
|
255
|
-
if (!user.hasPermission) return;
|
|
256
|
-
|
|
257
|
-
// actual logic here
|
|
258
|
-
}
|
|
259
|
-
```
|
|
260
|
-
</example_after>
|
|
261
|
-
</complexity_reduction>
|
|
262
|
-
|
|
263
|
-
<comments_best_practices>
|
|
264
|
-
<good_comments>
|
|
265
|
-
Valuable comments explain:
|
|
266
|
-
|
|
267
|
-
- Explain WHY (intent), not WHAT (code does that)
|
|
268
|
-
- Warn of consequences
|
|
269
|
-
- TODO with ticket number
|
|
270
|
-
</good_comments>
|
|
271
|
-
|
|
272
|
-
<bad_comments>
|
|
273
|
-
Avoid these comment types:
|
|
274
|
-
|
|
275
|
-
- Redundant (restates the code)
|
|
276
|
-
- Commented-out code (delete it)
|
|
277
|
-
- Closing brace comments (`} // end if`)
|
|
278
|
-
- Journal comments (use git history)
|
|
279
|
-
</bad_comments>
|
|
280
|
-
</comments_best_practices>
|
|
281
|
-
|
|
282
|
-
<boy_scout_rule>
|
|
283
|
-
> Leave code cleaner than you found it.
|
|
284
|
-
|
|
285
|
-
**Important**: In PRs, only clean code already being changed. Don't expand scope.
|
|
286
|
-
</boy_scout_rule>
|
|
287
|
-
|
|
288
|
-
<sources>
|
|
289
|
-
- Clean Code by Robert C. Martin
|
|
290
|
-
- [Google Engineering Practices](https://google.github.io/eng-practices/)
|
|
291
|
-
- [Microsoft Code Review Guide](https://microsoft.github.io/code-with-engineering-playbook/)
|
|
292
|
-
</sources>
|
|
1
|
+
<overview>
|
|
2
|
+
Clean code principles based on Robert Martin's Clean Code and industry research. SOLID principles, naming conventions, and code smell detection.
|
|
3
|
+
</overview>
|
|
4
|
+
|
|
5
|
+
<solid_principles>
|
|
6
|
+
| Principle | Rule | Violation Sign |
|
|
7
|
+
|-----------|------|----------------|
|
|
8
|
+
| **S**ingle Responsibility | One reason to change | Class/function does multiple things |
|
|
9
|
+
| **O**pen/Closed | Open for extension, closed for modification | Adding features requires changing existing code |
|
|
10
|
+
| **L**iskov Substitution | Subtypes must be substitutable | Subclass breaks when used as parent |
|
|
11
|
+
| **I**nterface Segregation | No forced dependencies | Implementing unused interface methods |
|
|
12
|
+
| **D**ependency Inversion | Depend on abstractions | Direct instantiation of dependencies |
|
|
13
|
+
</solid_principles>
|
|
14
|
+
|
|
15
|
+
<function_guidelines>
|
|
16
|
+
<size_and_scope>
|
|
17
|
+
Function size targets:
|
|
18
|
+
|
|
19
|
+
- Maximum 50 lines (ideally <20)
|
|
20
|
+
- Do ONE thing well
|
|
21
|
+
- Single level of abstraction
|
|
22
|
+
- Fit on one screen without scrolling
|
|
23
|
+
</size_and_scope>
|
|
24
|
+
|
|
25
|
+
<parameters>
|
|
26
|
+
Parameter limits:
|
|
27
|
+
|
|
28
|
+
- Maximum 3 parameters
|
|
29
|
+
- Avoid flag arguments (split into separate methods)
|
|
30
|
+
- Use objects for related parameters
|
|
31
|
+
|
|
32
|
+
**Parameter Object Pattern (for 4+ parameters):**
|
|
33
|
+
|
|
34
|
+
```csharp
|
|
35
|
+
// ❌ BAD - Too many parameters (S107)
|
|
36
|
+
public void CreateUser(
|
|
37
|
+
string name,
|
|
38
|
+
string email,
|
|
39
|
+
string phone,
|
|
40
|
+
string address,
|
|
41
|
+
bool isActive,
|
|
42
|
+
Guid tenantId)
|
|
43
|
+
{
|
|
44
|
+
// ...
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// ✅ GOOD - Use parameter object
|
|
48
|
+
public record CreateUserRequest(
|
|
49
|
+
string Name,
|
|
50
|
+
string Email,
|
|
51
|
+
string Phone,
|
|
52
|
+
string Address,
|
|
53
|
+
bool IsActive,
|
|
54
|
+
Guid TenantId);
|
|
55
|
+
|
|
56
|
+
public void CreateUser(CreateUserRequest request)
|
|
57
|
+
{
|
|
58
|
+
// Access via request.Name, request.Email, etc.
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Benefits:**
|
|
63
|
+
- Easier to extend (add new parameters without changing signature)
|
|
64
|
+
- Self-documenting (grouped related data)
|
|
65
|
+
- Enables validation logic on the object itself
|
|
66
|
+
- Reduces method signature complexity
|
|
67
|
+
</parameters>
|
|
68
|
+
|
|
69
|
+
<naming>
|
|
70
|
+
Function naming patterns:
|
|
71
|
+
|
|
72
|
+
- Verbs for functions: `getUserById()`, `calculateTotal()`
|
|
73
|
+
- Reveals intent without reading body
|
|
74
|
+
- No abbreviations: `getTransaction()` not `getTx()`
|
|
75
|
+
</naming>
|
|
76
|
+
|
|
77
|
+
<string_comparison>
|
|
78
|
+
**C# String Comparison Best Practices:**
|
|
79
|
+
|
|
80
|
+
ALWAYS use `StringComparison` overloads to avoid culture-specific issues (CA1873).
|
|
81
|
+
|
|
82
|
+
```csharp
|
|
83
|
+
// ❌ BAD - Culture-dependent, performance issue
|
|
84
|
+
if (str1.ToLower() == str2.ToLower()) { ... }
|
|
85
|
+
if (str1.ToUpper() == str2.ToUpper()) { ... }
|
|
86
|
+
|
|
87
|
+
// ✅ GOOD - Explicit comparison
|
|
88
|
+
if (string.Equals(str1, str2, StringComparison.OrdinalIgnoreCase)) { ... }
|
|
89
|
+
if (str1.Equals(str2, StringComparison.OrdinalIgnoreCase)) { ... }
|
|
90
|
+
|
|
91
|
+
// ❌ BAD - Culture-dependent Contains
|
|
92
|
+
if (str.ToLower().Contains("keyword")) { ... }
|
|
93
|
+
|
|
94
|
+
// ✅ GOOD - Explicit comparison (C# 5.0+)
|
|
95
|
+
if (str.Contains("keyword", StringComparison.OrdinalIgnoreCase)) { ... }
|
|
96
|
+
|
|
97
|
+
// ❌ BAD - Culture-dependent StartsWith/EndsWith
|
|
98
|
+
if (str.ToLower().StartsWith("prefix")) { ... }
|
|
99
|
+
|
|
100
|
+
// ✅ GOOD - Explicit comparison
|
|
101
|
+
if (str.StartsWith("prefix", StringComparison.OrdinalIgnoreCase)) { ... }
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**StringComparison options:**
|
|
105
|
+
- `Ordinal` - Binary comparison (fastest, case-sensitive)
|
|
106
|
+
- `OrdinalIgnoreCase` - Binary comparison (case-insensitive)
|
|
107
|
+
- `CurrentCulture` - Culture-aware (rarely needed)
|
|
108
|
+
- `InvariantCulture` - Culture-invariant (for data storage)
|
|
109
|
+
|
|
110
|
+
**Rule of thumb:**
|
|
111
|
+
- Use `Ordinal` for identifiers, file paths, keys
|
|
112
|
+
- Use `OrdinalIgnoreCase` for user input comparison
|
|
113
|
+
- Avoid `ToLower()`/`ToUpper()` for comparison
|
|
114
|
+
</string_comparison>
|
|
115
|
+
</function_guidelines>
|
|
116
|
+
|
|
117
|
+
<naming_conventions>
|
|
118
|
+
General naming rules:
|
|
119
|
+
|
|
120
|
+
✓ Descriptive, unambiguous names
|
|
121
|
+
✓ Pronounceable and searchable
|
|
122
|
+
✓ Class names: nouns (User, PaymentProcessor)
|
|
123
|
+
✓ Method names: verbs (validate, calculate, fetch)
|
|
124
|
+
✗ Single letter variables (except loop counters)
|
|
125
|
+
✗ Hungarian notation (strName, intCount)
|
|
126
|
+
✗ Abbreviations (usr, txn, cfg)
|
|
127
|
+
</naming_conventions>
|
|
128
|
+
|
|
129
|
+
<code_smells>
|
|
130
|
+
<critical_smells>
|
|
131
|
+
Flag these in review:
|
|
132
|
+
|
|
133
|
+
| Smell | Detection | Fix |
|
|
134
|
+
|-------|-----------|-----|
|
|
135
|
+
| **Duplicated Code** | Same logic in 2+ places | Extract to shared function |
|
|
136
|
+
| **Large Class/Method** | >50 lines, multiple responsibilities | Split by responsibility |
|
|
137
|
+
| **Long Parameter List** | >3 parameters | Use parameter object |
|
|
138
|
+
| **Feature Envy** | Method uses another class's data more | Move method to that class |
|
|
139
|
+
| **God Object** | One class controls everything | Split into focused classes |
|
|
140
|
+
</critical_smells>
|
|
141
|
+
|
|
142
|
+
<medium_smells>
|
|
143
|
+
Suggest these fixes:
|
|
144
|
+
|
|
145
|
+
| Smell | Detection | Fix |
|
|
146
|
+
|-------|-----------|-----|
|
|
147
|
+
| **Deep Nesting** | >3 levels of indentation | Guard clauses, early returns |
|
|
148
|
+
| **Magic Numbers** | Unexplained literals | Named constants |
|
|
149
|
+
| **Dead Code** | Commented-out or unreachable code | Delete it |
|
|
150
|
+
| **Shotgun Surgery** | Small change touches many files | Consolidate related code |
|
|
151
|
+
| **Nested Ternary** | `? ( ? : ) :` patterns | Extract to function/if-else |
|
|
152
|
+
| **TODO/FIXME** | Untracked technical debt | Create ticket or fix immediately |
|
|
153
|
+
</medium_smells>
|
|
154
|
+
|
|
155
|
+
<nested_ternary_detection>
|
|
156
|
+
**Nested Ternary Operators (S3358):**
|
|
157
|
+
|
|
158
|
+
Nested ternaries are hard to read and maintain.
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
// ❌ BAD - Nested ternary
|
|
162
|
+
const status = isActive
|
|
163
|
+
? (isPremium ? 'premium-active' : 'standard-active')
|
|
164
|
+
: 'inactive';
|
|
165
|
+
|
|
166
|
+
const color = type === 'error'
|
|
167
|
+
? 'red'
|
|
168
|
+
: type === 'warning' ? 'yellow' : 'blue';
|
|
169
|
+
|
|
170
|
+
// ✅ GOOD - Early returns in function
|
|
171
|
+
function getStatus(isActive: boolean, isPremium: boolean): string {
|
|
172
|
+
if (!isActive) return 'inactive';
|
|
173
|
+
if (isPremium) return 'premium-active';
|
|
174
|
+
return 'standard-active';
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// ✅ GOOD - If-else chain
|
|
178
|
+
let color: string;
|
|
179
|
+
if (type === 'error') {
|
|
180
|
+
color = 'red';
|
|
181
|
+
} else if (type === 'warning') {
|
|
182
|
+
color = 'yellow';
|
|
183
|
+
} else {
|
|
184
|
+
color = 'blue';
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// ✅ GOOD - Map/lookup for simple cases
|
|
188
|
+
const colorMap: Record<string, string> = {
|
|
189
|
+
error: 'red',
|
|
190
|
+
warning: 'yellow',
|
|
191
|
+
info: 'blue'
|
|
192
|
+
};
|
|
193
|
+
const color = colorMap[type] ?? 'blue';
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**Detection pattern:** Look for `? ... ? ... : ... :` in code.
|
|
197
|
+
</nested_ternary_detection>
|
|
198
|
+
|
|
199
|
+
<todo_fixme_tracking>
|
|
200
|
+
**TODO/FIXME Comments (S1135):**
|
|
201
|
+
|
|
202
|
+
Untracked TODOs become technical debt. Either fix immediately or create a tracked ticket.
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
// ❌ BAD - Untracked TODO
|
|
206
|
+
// TODO: handle edge case
|
|
207
|
+
|
|
208
|
+
// ❌ BAD - Vague FIXME
|
|
209
|
+
// FIXME: this is broken
|
|
210
|
+
|
|
211
|
+
// ✅ ACCEPTABLE - Linked to ticket
|
|
212
|
+
// TODO(#1234): Implement retry logic for transient failures
|
|
213
|
+
|
|
214
|
+
// ✅ ACCEPTABLE - With deadline
|
|
215
|
+
// FIXME(2026-02-15): Remove legacy API call after migration
|
|
216
|
+
|
|
217
|
+
// ✅ BEST - No comment, just fix it
|
|
218
|
+
// (Actually implement the fix instead of leaving a comment)
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**Code review action:**
|
|
222
|
+
1. Search for `TODO`, `FIXME`, `HACK`, `XXX`, `REFACTOR` comments
|
|
223
|
+
2. For each:
|
|
224
|
+
- Is it linked to a ticket? If not, create one or fix now
|
|
225
|
+
- Is it still relevant? If not, delete
|
|
226
|
+
- Does it have context? If not, add details
|
|
227
|
+
3. Report untracked TODOs as `[SUGGESTION]` in review
|
|
228
|
+
</todo_fixme_tracking>
|
|
229
|
+
</code_smells>
|
|
230
|
+
|
|
231
|
+
<complexity_reduction>
|
|
232
|
+
<example_before>
|
|
233
|
+
Complex nested conditions:
|
|
234
|
+
|
|
235
|
+
```javascript
|
|
236
|
+
function process(user) {
|
|
237
|
+
if (user) {
|
|
238
|
+
if (user.isActive) {
|
|
239
|
+
if (user.hasPermission) {
|
|
240
|
+
// actual logic here
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
</example_before>
|
|
247
|
+
|
|
248
|
+
<example_after>
|
|
249
|
+
Simplified with guard clauses:
|
|
250
|
+
|
|
251
|
+
```javascript
|
|
252
|
+
function process(user) {
|
|
253
|
+
if (!user) return;
|
|
254
|
+
if (!user.isActive) return;
|
|
255
|
+
if (!user.hasPermission) return;
|
|
256
|
+
|
|
257
|
+
// actual logic here
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
</example_after>
|
|
261
|
+
</complexity_reduction>
|
|
262
|
+
|
|
263
|
+
<comments_best_practices>
|
|
264
|
+
<good_comments>
|
|
265
|
+
Valuable comments explain:
|
|
266
|
+
|
|
267
|
+
- Explain WHY (intent), not WHAT (code does that)
|
|
268
|
+
- Warn of consequences
|
|
269
|
+
- TODO with ticket number
|
|
270
|
+
</good_comments>
|
|
271
|
+
|
|
272
|
+
<bad_comments>
|
|
273
|
+
Avoid these comment types:
|
|
274
|
+
|
|
275
|
+
- Redundant (restates the code)
|
|
276
|
+
- Commented-out code (delete it)
|
|
277
|
+
- Closing brace comments (`} // end if`)
|
|
278
|
+
- Journal comments (use git history)
|
|
279
|
+
</bad_comments>
|
|
280
|
+
</comments_best_practices>
|
|
281
|
+
|
|
282
|
+
<boy_scout_rule>
|
|
283
|
+
> Leave code cleaner than you found it.
|
|
284
|
+
|
|
285
|
+
**Important**: In PRs, only clean code already being changed. Don't expand scope.
|
|
286
|
+
</boy_scout_rule>
|
|
287
|
+
|
|
288
|
+
<sources>
|
|
289
|
+
- Clean Code by Robert C. Martin
|
|
290
|
+
- [Google Engineering Practices](https://google.github.io/eng-practices/)
|
|
291
|
+
- [Microsoft Code Review Guide](https://microsoft.github.io/code-with-engineering-playbook/)
|
|
292
|
+
</sources>
|