@polymorphism-tech/morph-spec 9.0.0 → 9.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +8 -9
- package/README.md +38 -36
- package/bin/morph-spec.js +11 -63
- package/bin/validate.js +1 -39
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +1 -1
- package/docs/QUICKSTART.md +1 -1
- package/framework/CLAUDE.md +2 -1
- package/framework/MORPH.md +3 -3
- package/framework/agents.json +19 -11
- package/framework/commands/morph-apply.md +1 -1
- package/framework/commands/morph-status.md +1 -1
- package/framework/docs/CLI.md +22 -31
- package/framework/evals/review-checklist.md +12 -2
- package/framework/hooks/README.md +8 -44
- package/framework/hooks/claude-code/core/block-destructive-worktree-removal.js +6 -49
- package/framework/hooks/claude-code/core/block-raw-worktree-add.js +2 -35
- package/framework/hooks/claude-code/core/chain.js +4 -65
- package/framework/hooks/claude-code/core/comment-guard.js +2 -16
- package/framework/hooks/claude-code/core/enforce-phase-writes.js +6 -50
- package/framework/hooks/claude-code/core/gate-guard.js +7 -67
- package/framework/hooks/claude-code/core/graph-refresh-kick.js +3 -24
- package/framework/hooks/claude-code/core/heavy-gate.js +3 -21
- package/framework/hooks/claude-code/core/heavy-release.js +2 -13
- package/framework/hooks/claude-code/core/loop-detect.js +2 -31
- package/framework/hooks/claude-code/core/pre-bash-denylist.js +0 -4
- package/framework/hooks/claude-code/core/protect-spec-files.js +7 -67
- package/framework/hooks/claude-code/core/state-sync.js +12 -68
- package/framework/hooks/claude-code/core/telemetry-log.js +12 -93
- package/framework/hooks/claude-code/core/validate-completion.js +11 -57
- package/framework/hooks/claude-code/core/warn-bash-source-write.js +1 -9
- package/framework/hooks/claude-code/core/worktree-context.js +10 -110
- package/framework/hooks/claude-code/core/worktree-create.js +6 -70
- package/framework/hooks/claude-code/core/worktree-env-inject.js +5 -56
- package/framework/hooks/claude-code/core/worktree-remove.js +5 -31
- package/framework/hooks/claude-code/statusline.sh +11 -11
- package/framework/hooks/shared/activity-logger.js +9 -89
- package/framework/hooks/shared/agent-reap.js +2 -17
- package/framework/hooks/shared/build-check.js +6 -75
- package/framework/hooks/shared/claim-registry.js +9 -119
- package/framework/hooks/shared/command-tokens.js +6 -51
- package/framework/hooks/shared/comment-rules.js +5 -20
- package/framework/hooks/shared/comment-scanner.js +6 -25
- package/framework/hooks/shared/comment-stripper.js +11 -85
- package/framework/hooks/shared/e2e-check.js +0 -0
- package/framework/hooks/shared/errata.js +2 -15
- package/framework/hooks/shared/feature-locator.js +11 -95
- package/framework/hooks/shared/frontend-locations.js +1 -3
- package/framework/hooks/shared/gate-question.js +1 -7
- package/framework/hooks/shared/git-exclude.js +3 -20
- package/framework/hooks/shared/git-paths.js +8 -104
- package/framework/hooks/shared/graph-freshness.js +22 -166
- package/framework/hooks/shared/graph-refresh.js +21 -149
- package/framework/hooks/shared/heavy-command.js +4 -12
- package/framework/hooks/shared/hook-response.js +8 -83
- package/framework/hooks/shared/morph-cli.js +8 -52
- package/framework/hooks/shared/payload-utils.js +10 -132
- package/framework/hooks/shared/phase-utils.js +1 -42
- package/framework/hooks/shared/redact-secrets.js +4 -15
- package/framework/hooks/shared/reparse-scan.js +6 -66
- package/framework/hooks/shared/slice-progress.js +4 -23
- package/framework/hooks/shared/source-files.js +4 -17
- package/framework/hooks/shared/state-reader.js +13 -183
- package/framework/hooks/shared/state-writer.js +8 -52
- package/framework/hooks/shared/stdin-reader.js +1 -11
- package/framework/hooks/shared/telemetry-logger.js +7 -67
- package/framework/hooks/shared/transcript-usage.js +7 -29
- package/framework/hooks/shared/worktree-root.js +7 -29
- package/framework/rules/csharp-standards.md +1 -1
- package/framework/rules/frontend-standards.md +1 -0
- package/framework/rules/hangfire-standards.md +1 -1
- package/framework/rules/neon-standards.md +1 -1
- package/framework/rules/nextjs-standards.md +1 -1
- package/framework/skills/core/create-umbraco-lp/SKILL.md +1 -1
- package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +1 -1
- package/framework/skills/core/morph-apply/SKILL.md +4 -4
- package/framework/skills/core/morph-hotfix/SKILL.md +3 -3
- package/framework/skills/core/morph-machine/SKILL.md +1 -1
- package/framework/skills/core/morph-media/SKILL.md +1 -1
- package/framework/skills/core/morph-plan/SKILL.md +9 -7
- package/framework/skills/core/morph-review/SKILL.md +9 -6
- package/framework/skills/core/morph-standards/SKILL.md +1 -1
- package/framework/skills/core/morph-uiux/SKILL.md +29 -12
- package/framework/standards/STANDARDS.json +36 -14
- package/framework/standards/STANDARDS.meta.json +16 -2
- package/framework/standards/ai-agents/agent-archetypes.md +2 -2
- package/framework/standards/ai-agents/agent-session.md +1 -1
- package/framework/standards/ai-agents/conversational-agent-with-phases.md +4 -4
- package/framework/standards/ai-agents/durable-workflows-hitl.md +3 -3
- package/framework/standards/ai-agents/guardrails.md +1 -1
- package/framework/standards/ai-agents/multi-agent-patterns.md +2 -2
- package/framework/standards/ai-agents/observability-patterns.md +1 -1
- package/framework/standards/ai-agents/production.md +1 -1
- package/framework/standards/ai-agents/prompt-sources.md +2 -2
- package/framework/standards/ai-agents/providers/model-registry.md +1 -1
- package/framework/standards/ai-agents/rag-custom-pgvector.md +2 -2
- package/framework/standards/ai-agents/setup.md +2 -2
- package/framework/standards/ai-agents/sweet-spot.md +2 -2
- package/framework/standards/ai-agents/tool-adapters.md +0 -2
- package/framework/standards/ai-agents/vector-data-extensions.md +4 -4
- package/framework/standards/ai-agents/workflows.md +1 -1
- package/framework/standards/architecture/code-comments.md +1 -1
- package/framework/standards/architecture/vertical-slice/vertical-slice.md +1 -1
- package/framework/standards/backend/api/validation.md +1 -1
- package/framework/standards/backend/dotnet/testing.md +10 -4
- package/framework/standards/backend/dotnet/vsa-handler-patterns.md +5 -5
- package/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +1 -1
- package/framework/standards/backend/integrations/neon-auth/neon-auth.md +2 -2
- package/framework/standards/data/nosql/cache/redis.md +1 -1
- package/framework/standards/data/nosql/cosmos-db.md +3 -3
- package/framework/standards/frontend/admin-app/forms.md +1 -1
- package/framework/standards/frontend/design-system/art-direction.md +88 -0
- package/framework/standards/frontend/design-system/premium-finish.md +77 -2
- package/framework/standards/frontend/nextjs/testing.md +10 -6
- package/framework/standards/infrastructure/neon/neon-pgvector.md +5 -5
- package/framework/templates/.idea/morph-templates.xml +92 -0
- package/framework/templates/.vscode/morph-templates.code-snippets +186 -0
- package/framework/templates/CLAUDE.md.core.template +3 -3
- package/framework/templates/IDE-SNIPPETS.md +262 -262
- package/framework/templates/REGISTRY.json +9 -9
- package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -7
- package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -4
- package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -4
- package/framework/templates/code/sql/ai-agents/pgvector-embeddings-migration.sql.template +91 -91
- package/framework/templates/docs/plan.md +3 -1
- package/framework/templates/docs/ui-mockups.md +4 -0
- package/framework/templates/frontend/nextjs/client-component.tsx.hbs +26 -26
- package/framework/templates/frontend/nextjs/feature-form.tsx.hbs +56 -56
- package/framework/templates/frontend/nextjs/tsconfig.json.hbs +26 -26
- package/framework/templates/infrastructure/docker/Dockerfile.template +58 -58
- package/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -38
- package/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -48
- package/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +45 -45
- package/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +27 -27
- package/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +59 -59
- package/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +39 -39
- package/framework/templates/meta-prompts/fusion/fusion-agent.md +76 -76
- package/framework/templates/meta-prompts/fusion/fusion-aggregator.md +100 -100
- package/framework/templates/state.template.json +17 -17
- package/framework/templates/ui/design-system.css +226 -226
- package/package.json +1 -1
- package/src/commands/context/context-refresh.js +0 -16
- package/src/commands/dashboard/dashboard.js +2 -8
- package/src/commands/e2e/e2e.js +17 -104
- package/src/commands/graph/affected.js +0 -14
- package/src/commands/graph/build.js +11 -50
- package/src/commands/graph/explain.js +0 -16
- package/src/commands/graph/status.js +1 -12
- package/src/commands/mcp/mcp-setup.js +4 -62
- package/src/commands/observability/cost.js +5 -57
- package/src/commands/observability/telemetry.js +1 -14
- package/src/commands/project/branch.js +4 -45
- package/src/commands/project/claim.js +4 -48
- package/src/commands/project/doctor.js +48 -302
- package/src/commands/project/env.js +1 -27
- package/src/commands/project/fleet.js +3 -32
- package/src/commands/project/init.js +4 -68
- package/src/commands/project/install-plugin-cmd.js +0 -1
- package/src/commands/project/standards.js +1 -62
- package/src/commands/project/status.js +0 -53
- package/src/commands/project/update.js +31 -239
- package/src/commands/project/worktree.js +108 -882
- package/src/commands/scaffold/scaffold.js +0 -25
- package/src/commands/state/advance.js +14 -85
- package/src/commands/state/approve.js +15 -97
- package/src/commands/state/archive.js +12 -64
- package/src/commands/state/auto-approval.js +2 -5
- package/src/commands/state/create.js +22 -109
- package/src/commands/state/delete.js +11 -63
- package/src/commands/state/finish.js +98 -475
- package/src/commands/state/gate-check.js +22 -132
- package/src/commands/state/gate-decision.js +3 -39
- package/src/commands/state/handoff.js +3 -30
- package/src/commands/state/list.js +14 -84
- package/src/commands/state/report-check.js +8 -58
- package/src/commands/state/retype.js +4 -26
- package/src/commands/validation/index.js +0 -3
- package/src/commands/validation/mutate.js +11 -11
- package/src/commands/validation/plan-check.js +4 -2
- package/src/commands/validation/tests-audit.js +7 -0
- package/src/commands/validation/validate-feature.js +10 -97
- package/src/commands/validation/verify.js +30 -113
- package/src/core/paths/output-schema.js +2 -101
- package/src/core/state/feature-identity.js +1 -25
- package/src/core/state/gate-order.js +0 -27
- package/src/core/state/lifecycle-audit.js +8 -100
- package/src/core/state/state-manager.js +22 -304
- package/src/core/templates/template-registry.js +2 -97
- package/src/core/templates/template-renderer.js +13 -93
- package/src/core/templates/template-seed.js +0 -1
- package/src/core/work-types.js +1 -36
- package/src/dashboard/app/App.jsx +1 -8
- package/src/dashboard/app/components/ActivityFeed.jsx +0 -5
- package/src/dashboard/app/components/CommandPalette.jsx +0 -7
- package/src/dashboard/app/components/DetailPanel.jsx +1 -5
- package/src/dashboard/app/components/EntityLink.jsx +0 -12
- package/src/dashboard/app/components/ErrorBoundary.jsx +1 -8
- package/src/dashboard/app/components/KnowledgeMarkdown.jsx +0 -11
- package/src/dashboard/app/components/Markdown.jsx +0 -9
- package/src/dashboard/app/components/PhaseRail.jsx +0 -11
- package/src/dashboard/app/components/SearchFilter.jsx +0 -4
- package/src/dashboard/app/components/Sidebar.jsx +0 -5
- package/src/dashboard/app/hooks/useMorphQuery.js +1 -11
- package/src/dashboard/app/hooks/usePref.js +1 -5
- package/src/dashboard/app/lib/format.js +0 -2
- package/src/dashboard/app/lib/phases.js +1 -5
- package/src/dashboard/app/lib/project.js +0 -12
- package/src/dashboard/app/main.jsx +13 -13
- package/src/dashboard/app/pages/AgentMap.jsx +1 -8
- package/src/dashboard/app/pages/FeatureDetail.jsx +1 -5
- package/src/dashboard/app/pages/Features.jsx +1 -8
- package/src/dashboard/app/pages/Guide.jsx +0 -1
- package/src/dashboard/app/pages/HookInspector.jsx +2 -23
- package/src/dashboard/app/pages/PhasePipeline.jsx +0 -3
- package/src/dashboard/app/pages/Portfolio.jsx +0 -1
- package/src/dashboard/app/pages/RulesMap.jsx +1 -16
- package/src/dashboard/app/pages/SkillsLibrary.jsx +1 -16
- package/src/dashboard/app/pages/Standards.jsx +2 -17
- package/src/dashboard/scanner/activity-scanner.js +10 -69
- package/src/dashboard/scanner/agents-scanner.js +1 -23
- package/src/dashboard/scanner/docs-scanner.js +0 -6
- package/src/dashboard/scanner/feature-status.js +2 -5
- package/src/dashboard/scanner/features-scanner.js +10 -66
- package/src/dashboard/scanner/hooks-scanner.js +5 -28
- package/src/dashboard/scanner/index.js +0 -4
- package/src/dashboard/scanner/portfolio.js +5 -29
- package/src/dashboard/scanner/project-api.js +8 -54
- package/src/dashboard/scanner/rules-scanner.js +1 -2
- package/src/dashboard/scanner/skills-scanner.js +2 -12
- package/src/dashboard/scanner/standards-scanner.js +2 -6
- package/src/dashboard/vite-plugin-morph-data.js +5 -19
- package/src/dashboard/vite.config.js +24 -24
- package/src/lib/ai/ai-checks.js +7 -52
- package/src/lib/ai/ai-project-scan.js +14 -108
- package/src/lib/ai/code-audit.js +7 -63
- package/src/lib/ai/pin-drift.js +8 -51
- package/src/lib/ai/registry-audit.js +11 -90
- package/src/lib/ci/ci-verify.js +4 -19
- package/src/lib/ci/github-ci.js +9 -37
- package/src/lib/ci/workflow-scaffold.js +14 -10
- package/src/lib/detectors/claude-config-detector.js +13 -74
- package/src/lib/detectors/index.js +4 -50
- package/src/lib/e2e/applicability.js +37 -0
- package/src/lib/e2e/compose-env.js +5 -66
- package/src/lib/e2e/stack-teardown.js +6 -40
- package/src/lib/generators/architecture-scanner.js +18 -156
- package/src/lib/generators/handoff-generator.js +9 -53
- package/src/lib/generators/scaffold-generator.js +5 -101
- package/src/lib/generators/settings-generator.js +4 -37
- package/src/lib/git/branch-classifier.js +11 -84
- package/src/lib/git/default-branch.js +14 -169
- package/src/lib/git/evidence-staleness.js +1 -0
- package/src/lib/git/gh.js +2 -17
- package/src/lib/git/pending-prs.js +6 -37
- package/src/lib/git/pr-files.js +3 -28
- package/src/lib/git/pr-index.js +3 -34
- package/src/lib/git/tree-fingerprint.js +3 -15
- package/src/lib/git/tree-state.js +6 -33
- package/src/lib/graph/god-nodes.js +2 -22
- package/src/lib/graph/graph-health.js +3 -24
- package/src/lib/graph/graph-loader.js +5 -56
- package/src/lib/graph/graphify-runtime.js +7 -37
- package/src/lib/graph/graphifyignore.js +8 -74
- package/src/lib/graph/sanitize.js +16 -136
- package/src/lib/heavy/cleanup.js +1 -1
- package/src/lib/installers/effects.js +8 -93
- package/src/lib/installers/mcp-installer.js +9 -169
- package/src/lib/installers/memory-installer.js +4 -27
- package/src/lib/installers/templates-reconcile.js +5 -60
- package/src/lib/mutation/adapters.js +6 -17
- package/src/lib/mutation/dotnet-introspection.js +20 -106
- package/src/lib/mutation/runner.js +23 -75
- package/src/lib/mutation/subset.js +1 -4
- package/src/lib/mutation/trx.js +0 -1
- package/src/lib/plan/artifact-vocabulary.js +5 -25
- package/src/lib/plan/checks.js +34 -33
- package/src/lib/plan/plan-parser.js +7 -8
- package/src/lib/projects/registry.js +7 -44
- package/src/lib/review-reports.js +11 -26
- package/src/lib/risk-detector.js +41 -173
- package/src/lib/specs/adr-index.js +6 -34
- package/src/lib/specs/frontmatter.js +2 -15
- package/src/lib/specs/gfm-table.js +1 -7
- package/src/lib/specs/revocations.js +1 -14
- package/src/lib/specs/screen-checklist.js +47 -124
- package/src/lib/stack/dotnet-build-ignores.js +2 -6
- package/src/lib/stack/stack-profile.js +1 -28
- package/src/lib/stack/stack-scan.js +1 -8
- package/src/lib/stack-filter.js +4 -27
- package/src/lib/standards/registry.js +1 -7
- package/src/lib/standards/sections.js +2 -13
- package/src/lib/standards/verified-against.js +19 -191
- package/src/lib/tasks/eval-node.js +21 -169
- package/src/lib/tasks/linux-runner.js +18 -142
- package/src/lib/tasks/test-nodes.js +43 -240
- package/src/lib/tasks/test-runner.js +43 -341
- package/src/lib/telemetry/metrics.js +7 -36
- package/src/lib/telemetry/telemetry-reader.js +13 -125
- package/src/lib/telemetry/verify-event.js +2 -30
- package/src/lib/tests-audit/audit.js +96 -0
- package/src/lib/validators/code-budget/code-budget-validator.js +4 -44
- package/src/lib/validators/code-budget/index.js +0 -7
- package/src/lib/validators/contracts/contract-compliance-validator.js +2 -24
- package/src/lib/validators/contracts/index.js +0 -6
- package/src/lib/validators/nextjs/index.js +0 -5
- package/src/lib/validators/nextjs/next-component-validator.js +4 -81
- package/src/lib/validators/packages/index.js +0 -6
- package/src/lib/validators/packages/package-validator.js +6 -56
- package/src/lib/validators/reuse/index.js +0 -8
- package/src/lib/validators/reuse/reuse-validator.js +11 -101
- package/src/lib/validators/reuse/symbol-scanner.js +6 -62
- package/src/lib/validators/traceability-check.js +5 -63
- package/src/lib/validators/validation-runner.js +21 -158
- package/src/lib/validators/verify-runner.js +85 -376
- package/src/lib/work-type-detector.js +5 -67
- package/src/lib/worktree/docker-audit.js +17 -136
- package/src/lib/worktree/env-allocator.js +10 -98
- package/src/lib/worktree/feature-truth.js +12 -115
- package/src/lib/worktree/finish-backup.js +32 -242
- package/src/lib/worktree/fleet-scanner.js +13 -95
- package/src/lib/worktree/ignored-triage.js +15 -91
- package/src/lib/worktree/vscode-settings.js +2 -3
- package/src/lib/worktree/worktree-audit.js +21 -213
- package/src/lib/worktree/worktree-include.js +3 -5
- package/src/scripts/global-install.js +3 -9
- package/src/scripts/install-plugin.js +1 -13
- package/src/scripts/setup-infra.js +17 -147
- package/src/utils/agents-installer.js +29 -276
- package/src/utils/banner.js +4 -25
- package/src/utils/claude-md-injector.js +1 -37
- package/src/utils/claude-settings-manager.js +1 -52
- package/src/utils/file-copier.js +11 -95
- package/src/utils/hooks-installer.js +21 -298
- package/src/utils/skills-installer.js +4 -101
- package/src/utils/version-checker.js +4 -83
- package/framework/commands/morph-proposal.md +0 -9
- package/framework/hooks/git/commit-msg/conventional-commits.sh +0 -33
- package/framework/hooks/git/pre-commit/agents.sh +0 -25
- package/framework/hooks/git/pre-commit/orchestrator.sh +0 -64
- package/framework/hooks/git/pre-push/run-tests.sh +0 -44
- package/src/commands/utils/index.js +0 -3
- package/src/lib/detectors/design-system-detector.js +0 -188
- package/src/lib/generators/design-system-generator.js +0 -508
- package/src/lib/specs/old-format.js +0 -68
- package/src/utils/agent-id-mapper.js +0 -11
|
@@ -1,262 +1,262 @@
|
|
|
1
|
-
# IDE Snippets for MORPH Templates
|
|
2
|
-
|
|
3
|
-
> Boost your productivity with IDE snippets for Handlebars template syntax
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 📦 Installation
|
|
8
|
-
|
|
9
|
-
### VS Code
|
|
10
|
-
|
|
11
|
-
**Option 1: Project Snippets (Recommended)**
|
|
12
|
-
|
|
13
|
-
Snippets are already configured in `framework/templates/.vscode/morph-templates.code-snippets`.
|
|
14
|
-
|
|
15
|
-
To use them:
|
|
16
|
-
1. Open your project in VS Code
|
|
17
|
-
2. Snippets auto-activate when editing template files
|
|
18
|
-
3. Type a prefix (e.g., `morph-pascal`) and press `Tab`
|
|
19
|
-
|
|
20
|
-
**Option 2: Global Snippets**
|
|
21
|
-
|
|
22
|
-
To use snippets across all projects:
|
|
23
|
-
1. Open VS Code
|
|
24
|
-
2. Go to `File > Preferences > Configure User Snippets`
|
|
25
|
-
3. Select `New Global Snippets file...`
|
|
26
|
-
4. Name it `morph-templates.code-snippets`
|
|
27
|
-
5. Copy content from `framework/templates/.vscode/morph-templates.code-snippets`
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
### JetBrains IDEs (Rider, WebStorm, IntelliJ IDEA)
|
|
32
|
-
|
|
33
|
-
**Installation:**
|
|
34
|
-
|
|
35
|
-
1. Open your IDE
|
|
36
|
-
2. Go to `File > Settings > Editor > Live Templates`
|
|
37
|
-
3. Click the `⚙️` gear icon → `Import Settings...`
|
|
38
|
-
4. Select `framework/templates/.idea/morph-templates.xml`
|
|
39
|
-
5. Click `OK` to import
|
|
40
|
-
|
|
41
|
-
**Activation:**
|
|
42
|
-
|
|
43
|
-
Snippets will be available in the "MORPH Templates" group. Type the prefix and press `Tab`.
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## 🎯 Available Snippets
|
|
48
|
-
|
|
49
|
-
### Handlebars Helpers (Case Transformations)
|
|
50
|
-
|
|
51
|
-
| Prefix | Output | Example Result |
|
|
52
|
-
|--------|--------|----------------|
|
|
53
|
-
| `morph-pascal` | `{{pascalCase FEATURE_NAME}}` | `UserAuthentication` |
|
|
54
|
-
| `morph-camel` | `{{camelCase FEATURE_NAME}}` | `userAuthentication` |
|
|
55
|
-
| `morph-snake` | `{{snakeCase FEATURE_NAME}}` | `user_authentication` |
|
|
56
|
-
| `morph-title` | `{{titleCase FEATURE_NAME}}` | `User Authentication` |
|
|
57
|
-
| `morph-kebab` | `{{kebabCase FEATURE_NAME}}` | `user-authentication` |
|
|
58
|
-
| `morph-upper-snake` | `{{upperSnakeCase FEATURE_NAME}}` | `USER_AUTHENTICATION` |
|
|
59
|
-
|
|
60
|
-
### Handlebars Control Flow
|
|
61
|
-
|
|
62
|
-
| Prefix | Description | Example |
|
|
63
|
-
|--------|-------------|---------|
|
|
64
|
-
| `morph-if` | If block | `{{#if condition}}...{{/if}}` |
|
|
65
|
-
| `morph-if-else` | If-else block | `{{#if condition}}...{{else}}...{{/if}}` |
|
|
66
|
-
| `morph-each` | Loop over array | `{{#each items}}{{this.name}}{{/each}}` |
|
|
67
|
-
| `morph-unless` | Unless block | `{{#unless condition}}...{{/unless}}` |
|
|
68
|
-
|
|
69
|
-
### .NET Templates
|
|
70
|
-
|
|
71
|
-
| Prefix | Template | File Extension |
|
|
72
|
-
|--------|----------|----------------|
|
|
73
|
-
| `morph-service` | Service class (business logic) | `.cs` |
|
|
74
|
-
| `morph-repository` | Repository class (data access) | `.cs` |
|
|
75
|
-
| `morph-migration` | EF Core migration | `.cs` |
|
|
76
|
-
| `morph-job` | Hangfire background job | `.cs` |
|
|
77
|
-
|
|
78
|
-
### TypeScript Templates
|
|
79
|
-
|
|
80
|
-
| Prefix | Template | File Extension |
|
|
81
|
-
|--------|----------|----------------|
|
|
82
|
-
| `morph-ts-contract` | TypeScript interfaces (DTOs) | `.ts` |
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## 🚀 Usage Examples
|
|
87
|
-
|
|
88
|
-
### Example 1: Creating a Service Template
|
|
89
|
-
|
|
90
|
-
**Steps:**
|
|
91
|
-
1. Create new file: `UserService.cs`
|
|
92
|
-
2. Type `morph-service` → Press `Tab`
|
|
93
|
-
3. Result:
|
|
94
|
-
```csharp
|
|
95
|
-
namespace {{NAMESPACE}}.Application.Features.{{pascalCase FEATURE_NAME}}.Services;
|
|
96
|
-
|
|
97
|
-
public class {{pascalCase FEATURE_NAME}}Service(
|
|
98
|
-
I{{pascalCase FEATURE_NAME}}Repository repository,
|
|
99
|
-
ILogger<{{pascalCase FEATURE_NAME}}Service> logger) : I{{pascalCase FEATURE_NAME}}Service
|
|
100
|
-
{
|
|
101
|
-
public async Task<{{pascalCase FEATURE_NAME}}Dto?> GetByIdAsync(int id, CancellationToken cancellationToken = default)
|
|
102
|
-
{
|
|
103
|
-
// Cursor here
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### Example 2: Using Case Helpers
|
|
109
|
-
|
|
110
|
-
**Scenario:** Convert `user-authentication` to different cases
|
|
111
|
-
|
|
112
|
-
```handlebars
|
|
113
|
-
// Type: morph-pascal → Tab
|
|
114
|
-
{{pascalCase FEATURE_NAME}} // Output: UserAuthentication
|
|
115
|
-
|
|
116
|
-
// Type: morph-camel → Tab
|
|
117
|
-
{{camelCase FEATURE_NAME}} // Output: userAuthentication
|
|
118
|
-
|
|
119
|
-
// Type: morph-snake → Tab
|
|
120
|
-
{{snakeCase FEATURE_NAME}} // Output: user_authentication
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
### Example 3: Conditional Rendering
|
|
124
|
-
|
|
125
|
-
**Scenario:** Show different content based on stack
|
|
126
|
-
|
|
127
|
-
```handlebars
|
|
128
|
-
// Type: morph-if-else → Tab
|
|
129
|
-
{{#if (eq STACK "Nextjs")}}
|
|
130
|
-
// Next.js-specific code
|
|
131
|
-
{{else}}
|
|
132
|
-
// Generic code
|
|
133
|
-
{{/if}}
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### Example 4: Looping Over Items
|
|
137
|
-
|
|
138
|
-
**Scenario:** Generate multiple DTOs
|
|
139
|
-
|
|
140
|
-
```handlebars
|
|
141
|
-
// Type: morph-each → Tab
|
|
142
|
-
{{#each entities}}
|
|
143
|
-
public class {{pascalCase this.name}}Dto
|
|
144
|
-
{
|
|
145
|
-
// Properties
|
|
146
|
-
}
|
|
147
|
-
{{/each}}
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
---
|
|
151
|
-
|
|
152
|
-
## 📝 Customizing Snippets
|
|
153
|
-
|
|
154
|
-
### VS Code
|
|
155
|
-
|
|
156
|
-
Edit `framework/templates/.vscode/morph-templates.code-snippets`:
|
|
157
|
-
|
|
158
|
-
```json
|
|
159
|
-
{
|
|
160
|
-
"MORPH Template - Custom": {
|
|
161
|
-
"prefix": "morph-custom",
|
|
162
|
-
"body": [
|
|
163
|
-
"// Your custom template",
|
|
164
|
-
"$1"
|
|
165
|
-
],
|
|
166
|
-
"description": "Your description"
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### JetBrains IDEs
|
|
172
|
-
|
|
173
|
-
1. Go to `File > Settings > Editor > Live Templates`
|
|
174
|
-
2. Select "MORPH Templates" group
|
|
175
|
-
3. Click `+` → `Live Template`
|
|
176
|
-
4. Set abbreviation (prefix), description, and template text
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
## 🎨 Snippet Scopes
|
|
181
|
-
|
|
182
|
-
| Snippet | VS Code Scope | JetBrains Scope |
|
|
183
|
-
|---------|---------------|-----------------|
|
|
184
|
-
| Handlebars helpers | All files | All files |
|
|
185
|
-
| .NET templates | `.cs`, `.razor` | C#, HTML |
|
|
186
|
-
| TypeScript templates | `.ts`, `.tsx` | TypeScript |
|
|
187
|
-
|
|
188
|
-
---
|
|
189
|
-
|
|
190
|
-
## 💡 Best Practices
|
|
191
|
-
|
|
192
|
-
**1. Use Helpers Over Pre-computed Variables**
|
|
193
|
-
|
|
194
|
-
```handlebars
|
|
195
|
-
✅ GOOD: {{pascalCase FEATURE_NAME}}Service
|
|
196
|
-
❌ BAD: {{FEATURE_NAME_PASCAL}}Service // Deprecated
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
**2. Chain Helpers for Complex Transformations**
|
|
200
|
-
|
|
201
|
-
```handlebars
|
|
202
|
-
// Pluralize a PascalCase name
|
|
203
|
-
{{pascalCase (pluralize FEATURE_NAME)}} // Users, Orders, etc.
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
**3. Use Conditional Blocks for Stack-Specific Code**
|
|
207
|
-
|
|
208
|
-
```handlebars
|
|
209
|
-
{{#if (eq STACK "Nextjs")}}
|
|
210
|
-
import { useRouter } from 'next/navigation';
|
|
211
|
-
{{/if}}
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
**4. Extract Common Patterns to Snippets**
|
|
215
|
-
|
|
216
|
-
If you find yourself typing the same template code repeatedly, create a custom snippet!
|
|
217
|
-
|
|
218
|
-
---
|
|
219
|
-
|
|
220
|
-
## 🔧 Troubleshooting
|
|
221
|
-
|
|
222
|
-
### Snippets Not Showing Up (VS Code)
|
|
223
|
-
|
|
224
|
-
**Solution:**
|
|
225
|
-
1. Check file extension matches snippet scope (e.g., `.cs` for C# snippets)
|
|
226
|
-
2. Reload VS Code: `Ctrl+Shift+P` → `Developer: Reload Window`
|
|
227
|
-
3. Verify snippet file location: `framework/templates/.vscode/morph-templates.code-snippets`
|
|
228
|
-
|
|
229
|
-
### Snippets Not Showing Up (JetBrains)
|
|
230
|
-
|
|
231
|
-
**Solution:**
|
|
232
|
-
1. Verify import: `File > Settings > Editor > Live Templates` → Check "MORPH Templates" group exists
|
|
233
|
-
2. Check snippet scope: Click snippet → Verify "Applicable in" contexts
|
|
234
|
-
3. Restart IDE
|
|
235
|
-
|
|
236
|
-
### Tab Not Expanding Snippet
|
|
237
|
-
|
|
238
|
-
**Solution:**
|
|
239
|
-
- **VS Code:** Ensure `editor.tabCompletion` is enabled in settings
|
|
240
|
-
- **JetBrains:** Ensure `Tab` is set as expansion key in `Settings > Editor > Live Templates`
|
|
241
|
-
|
|
242
|
-
---
|
|
243
|
-
|
|
244
|
-
## 📚 Related Documentation
|
|
245
|
-
|
|
246
|
-
- [Template System README](framework/templates/README.md) - Complete template system documentation
|
|
247
|
-
- [Handlebars Helpers](framework/templates/README.md#handlebars-helpers) - Full list of available helpers
|
|
248
|
-
- [CLI Template Commands](CLAUDE.md#templates) - Command-line template management
|
|
249
|
-
|
|
250
|
-
---
|
|
251
|
-
|
|
252
|
-
## 🎁 Contributing Custom Snippets
|
|
253
|
-
|
|
254
|
-
Have a useful snippet? Share it!
|
|
255
|
-
|
|
256
|
-
1. Add snippet to appropriate file (`.vscode/` or `.idea/`)
|
|
257
|
-
2. Document it in this README (add row to tables)
|
|
258
|
-
3. Submit PR with description of use case
|
|
259
|
-
|
|
260
|
-
---
|
|
261
|
-
|
|
262
|
-
*MORPH-SPEC Template Snippets by Polymorphism Tech*
|
|
1
|
+
# IDE Snippets for MORPH Templates
|
|
2
|
+
|
|
3
|
+
> Boost your productivity with IDE snippets for Handlebars template syntax
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 📦 Installation
|
|
8
|
+
|
|
9
|
+
### VS Code
|
|
10
|
+
|
|
11
|
+
**Option 1: Project Snippets (Recommended)**
|
|
12
|
+
|
|
13
|
+
Snippets are already configured in `framework/templates/.vscode/morph-templates.code-snippets`.
|
|
14
|
+
|
|
15
|
+
To use them:
|
|
16
|
+
1. Open your project in VS Code
|
|
17
|
+
2. Snippets auto-activate when editing template files
|
|
18
|
+
3. Type a prefix (e.g., `morph-pascal`) and press `Tab`
|
|
19
|
+
|
|
20
|
+
**Option 2: Global Snippets**
|
|
21
|
+
|
|
22
|
+
To use snippets across all projects:
|
|
23
|
+
1. Open VS Code
|
|
24
|
+
2. Go to `File > Preferences > Configure User Snippets`
|
|
25
|
+
3. Select `New Global Snippets file...`
|
|
26
|
+
4. Name it `morph-templates.code-snippets`
|
|
27
|
+
5. Copy content from `framework/templates/.vscode/morph-templates.code-snippets`
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
### JetBrains IDEs (Rider, WebStorm, IntelliJ IDEA)
|
|
32
|
+
|
|
33
|
+
**Installation:**
|
|
34
|
+
|
|
35
|
+
1. Open your IDE
|
|
36
|
+
2. Go to `File > Settings > Editor > Live Templates`
|
|
37
|
+
3. Click the `⚙️` gear icon → `Import Settings...`
|
|
38
|
+
4. Select `framework/templates/.idea/morph-templates.xml`
|
|
39
|
+
5. Click `OK` to import
|
|
40
|
+
|
|
41
|
+
**Activation:**
|
|
42
|
+
|
|
43
|
+
Snippets will be available in the "MORPH Templates" group. Type the prefix and press `Tab`.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 🎯 Available Snippets
|
|
48
|
+
|
|
49
|
+
### Handlebars Helpers (Case Transformations)
|
|
50
|
+
|
|
51
|
+
| Prefix | Output | Example Result |
|
|
52
|
+
|--------|--------|----------------|
|
|
53
|
+
| `morph-pascal` | `{{pascalCase FEATURE_NAME}}` | `UserAuthentication` |
|
|
54
|
+
| `morph-camel` | `{{camelCase FEATURE_NAME}}` | `userAuthentication` |
|
|
55
|
+
| `morph-snake` | `{{snakeCase FEATURE_NAME}}` | `user_authentication` |
|
|
56
|
+
| `morph-title` | `{{titleCase FEATURE_NAME}}` | `User Authentication` |
|
|
57
|
+
| `morph-kebab` | `{{kebabCase FEATURE_NAME}}` | `user-authentication` |
|
|
58
|
+
| `morph-upper-snake` | `{{upperSnakeCase FEATURE_NAME}}` | `USER_AUTHENTICATION` |
|
|
59
|
+
|
|
60
|
+
### Handlebars Control Flow
|
|
61
|
+
|
|
62
|
+
| Prefix | Description | Example |
|
|
63
|
+
|--------|-------------|---------|
|
|
64
|
+
| `morph-if` | If block | `{{#if condition}}...{{/if}}` |
|
|
65
|
+
| `morph-if-else` | If-else block | `{{#if condition}}...{{else}}...{{/if}}` |
|
|
66
|
+
| `morph-each` | Loop over array | `{{#each items}}{{this.name}}{{/each}}` |
|
|
67
|
+
| `morph-unless` | Unless block | `{{#unless condition}}...{{/unless}}` |
|
|
68
|
+
|
|
69
|
+
### .NET Templates
|
|
70
|
+
|
|
71
|
+
| Prefix | Template | File Extension |
|
|
72
|
+
|--------|----------|----------------|
|
|
73
|
+
| `morph-service` | Service class (business logic) | `.cs` |
|
|
74
|
+
| `morph-repository` | Repository class (data access) | `.cs` |
|
|
75
|
+
| `morph-migration` | EF Core migration | `.cs` |
|
|
76
|
+
| `morph-job` | Hangfire background job | `.cs` |
|
|
77
|
+
|
|
78
|
+
### TypeScript Templates
|
|
79
|
+
|
|
80
|
+
| Prefix | Template | File Extension |
|
|
81
|
+
|--------|----------|----------------|
|
|
82
|
+
| `morph-ts-contract` | TypeScript interfaces (DTOs) | `.ts` |
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 🚀 Usage Examples
|
|
87
|
+
|
|
88
|
+
### Example 1: Creating a Service Template
|
|
89
|
+
|
|
90
|
+
**Steps:**
|
|
91
|
+
1. Create new file: `UserService.cs`
|
|
92
|
+
2. Type `morph-service` → Press `Tab`
|
|
93
|
+
3. Result:
|
|
94
|
+
```csharp
|
|
95
|
+
namespace {{NAMESPACE}}.Application.Features.{{pascalCase FEATURE_NAME}}.Services;
|
|
96
|
+
|
|
97
|
+
public class {{pascalCase FEATURE_NAME}}Service(
|
|
98
|
+
I{{pascalCase FEATURE_NAME}}Repository repository,
|
|
99
|
+
ILogger<{{pascalCase FEATURE_NAME}}Service> logger) : I{{pascalCase FEATURE_NAME}}Service
|
|
100
|
+
{
|
|
101
|
+
public async Task<{{pascalCase FEATURE_NAME}}Dto?> GetByIdAsync(int id, CancellationToken cancellationToken = default)
|
|
102
|
+
{
|
|
103
|
+
// Cursor here
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Example 2: Using Case Helpers
|
|
109
|
+
|
|
110
|
+
**Scenario:** Convert `user-authentication` to different cases
|
|
111
|
+
|
|
112
|
+
```handlebars
|
|
113
|
+
// Type: morph-pascal → Tab
|
|
114
|
+
{{pascalCase FEATURE_NAME}} // Output: UserAuthentication
|
|
115
|
+
|
|
116
|
+
// Type: morph-camel → Tab
|
|
117
|
+
{{camelCase FEATURE_NAME}} // Output: userAuthentication
|
|
118
|
+
|
|
119
|
+
// Type: morph-snake → Tab
|
|
120
|
+
{{snakeCase FEATURE_NAME}} // Output: user_authentication
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Example 3: Conditional Rendering
|
|
124
|
+
|
|
125
|
+
**Scenario:** Show different content based on stack
|
|
126
|
+
|
|
127
|
+
```handlebars
|
|
128
|
+
// Type: morph-if-else → Tab
|
|
129
|
+
{{#if (eq STACK "Nextjs")}}
|
|
130
|
+
// Next.js-specific code
|
|
131
|
+
{{else}}
|
|
132
|
+
// Generic code
|
|
133
|
+
{{/if}}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Example 4: Looping Over Items
|
|
137
|
+
|
|
138
|
+
**Scenario:** Generate multiple DTOs
|
|
139
|
+
|
|
140
|
+
```handlebars
|
|
141
|
+
// Type: morph-each → Tab
|
|
142
|
+
{{#each entities}}
|
|
143
|
+
public class {{pascalCase this.name}}Dto
|
|
144
|
+
{
|
|
145
|
+
// Properties
|
|
146
|
+
}
|
|
147
|
+
{{/each}}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## 📝 Customizing Snippets
|
|
153
|
+
|
|
154
|
+
### VS Code
|
|
155
|
+
|
|
156
|
+
Edit `framework/templates/.vscode/morph-templates.code-snippets`:
|
|
157
|
+
|
|
158
|
+
```json
|
|
159
|
+
{
|
|
160
|
+
"MORPH Template - Custom": {
|
|
161
|
+
"prefix": "morph-custom",
|
|
162
|
+
"body": [
|
|
163
|
+
"// Your custom template",
|
|
164
|
+
"$1"
|
|
165
|
+
],
|
|
166
|
+
"description": "Your description"
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### JetBrains IDEs
|
|
172
|
+
|
|
173
|
+
1. Go to `File > Settings > Editor > Live Templates`
|
|
174
|
+
2. Select "MORPH Templates" group
|
|
175
|
+
3. Click `+` → `Live Template`
|
|
176
|
+
4. Set abbreviation (prefix), description, and template text
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## 🎨 Snippet Scopes
|
|
181
|
+
|
|
182
|
+
| Snippet | VS Code Scope | JetBrains Scope |
|
|
183
|
+
|---------|---------------|-----------------|
|
|
184
|
+
| Handlebars helpers | All files | All files |
|
|
185
|
+
| .NET templates | `.cs`, `.razor` | C#, HTML |
|
|
186
|
+
| TypeScript templates | `.ts`, `.tsx` | TypeScript |
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## 💡 Best Practices
|
|
191
|
+
|
|
192
|
+
**1. Use Helpers Over Pre-computed Variables**
|
|
193
|
+
|
|
194
|
+
```handlebars
|
|
195
|
+
✅ GOOD: {{pascalCase FEATURE_NAME}}Service
|
|
196
|
+
❌ BAD: {{FEATURE_NAME_PASCAL}}Service // Deprecated
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**2. Chain Helpers for Complex Transformations**
|
|
200
|
+
|
|
201
|
+
```handlebars
|
|
202
|
+
// Pluralize a PascalCase name
|
|
203
|
+
{{pascalCase (pluralize FEATURE_NAME)}} // Users, Orders, etc.
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**3. Use Conditional Blocks for Stack-Specific Code**
|
|
207
|
+
|
|
208
|
+
```handlebars
|
|
209
|
+
{{#if (eq STACK "Nextjs")}}
|
|
210
|
+
import { useRouter } from 'next/navigation';
|
|
211
|
+
{{/if}}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
**4. Extract Common Patterns to Snippets**
|
|
215
|
+
|
|
216
|
+
If you find yourself typing the same template code repeatedly, create a custom snippet!
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## 🔧 Troubleshooting
|
|
221
|
+
|
|
222
|
+
### Snippets Not Showing Up (VS Code)
|
|
223
|
+
|
|
224
|
+
**Solution:**
|
|
225
|
+
1. Check file extension matches snippet scope (e.g., `.cs` for C# snippets)
|
|
226
|
+
2. Reload VS Code: `Ctrl+Shift+P` → `Developer: Reload Window`
|
|
227
|
+
3. Verify snippet file location: `framework/templates/.vscode/morph-templates.code-snippets`
|
|
228
|
+
|
|
229
|
+
### Snippets Not Showing Up (JetBrains)
|
|
230
|
+
|
|
231
|
+
**Solution:**
|
|
232
|
+
1. Verify import: `File > Settings > Editor > Live Templates` → Check "MORPH Templates" group exists
|
|
233
|
+
2. Check snippet scope: Click snippet → Verify "Applicable in" contexts
|
|
234
|
+
3. Restart IDE
|
|
235
|
+
|
|
236
|
+
### Tab Not Expanding Snippet
|
|
237
|
+
|
|
238
|
+
**Solution:**
|
|
239
|
+
- **VS Code:** Ensure `editor.tabCompletion` is enabled in settings
|
|
240
|
+
- **JetBrains:** Ensure `Tab` is set as expansion key in `Settings > Editor > Live Templates`
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## 📚 Related Documentation
|
|
245
|
+
|
|
246
|
+
- [Template System README](framework/templates/README.md) - Complete template system documentation
|
|
247
|
+
- [Handlebars Helpers](framework/templates/README.md#handlebars-helpers) - Full list of available helpers
|
|
248
|
+
- [CLI Template Commands](CLAUDE.md#templates) - Command-line template management
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## 🎁 Contributing Custom Snippets
|
|
253
|
+
|
|
254
|
+
Have a useful snippet? Share it!
|
|
255
|
+
|
|
256
|
+
1. Add snippet to appropriate file (`.vscode/` or `.idea/`)
|
|
257
|
+
2. Document it in this README (add row to tables)
|
|
258
|
+
3. Submit PR with description of use case
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
*MORPH-SPEC Template Snippets by Polymorphism Tech*
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"path": "context/ARCHITECTURE.md",
|
|
56
56
|
"location": "framework",
|
|
57
57
|
"category": "context",
|
|
58
|
-
"phase": "
|
|
58
|
+
"phase": "plan",
|
|
59
59
|
"required": false,
|
|
60
60
|
"description": "Auto-scanned architecture context with entities, endpoints, pages, components, integrations, database tables, and package versions",
|
|
61
61
|
"outputName": "ARCHITECTURE.md",
|
|
@@ -179,7 +179,7 @@
|
|
|
179
179
|
"path": "code/dotnet/contracts/README.md",
|
|
180
180
|
"location": "framework",
|
|
181
181
|
"category": "documentation",
|
|
182
|
-
"phase": "
|
|
182
|
+
"phase": "implement",
|
|
183
183
|
"required": false,
|
|
184
184
|
"description": "Documentation for contract patterns and usage",
|
|
185
185
|
"outputName": "README.md",
|
|
@@ -200,7 +200,7 @@
|
|
|
200
200
|
"path": "code/dotnet/contracts/contracts-vsa.cs",
|
|
201
201
|
"location": "framework",
|
|
202
202
|
"category": "code",
|
|
203
|
-
"phase": "
|
|
203
|
+
"phase": "implement",
|
|
204
204
|
"required": false,
|
|
205
205
|
"description": "Feature slice completo: Abstractions, Entity, Errors, e um slice de operação (Request, Response, Validator, Handler, Endpoint). Padrão KanaiyaKatarmal (.NET 10, Minimal APIs, EF Core 10, FluentValidation 12, Scrutor 7).",
|
|
206
206
|
"outputName": "contracts.cs",
|
|
@@ -222,7 +222,7 @@
|
|
|
222
222
|
"path": "code/typescript/contracts.ts",
|
|
223
223
|
"location": "framework",
|
|
224
224
|
"category": "code",
|
|
225
|
-
"phase": "
|
|
225
|
+
"phase": "implement",
|
|
226
226
|
"required": false,
|
|
227
227
|
"description": "TypeScript type definitions and interfaces",
|
|
228
228
|
"outputName": "contracts.ts",
|
|
@@ -538,7 +538,7 @@
|
|
|
538
538
|
"location": "framework",
|
|
539
539
|
"category": "infrastructure",
|
|
540
540
|
"technology": "github-actions",
|
|
541
|
-
"phase": "
|
|
541
|
+
"phase": "implement",
|
|
542
542
|
"required": false,
|
|
543
543
|
"description": "Reusable workflow for building .NET applications with restore, build, test, coverage",
|
|
544
544
|
"outputName": "dotnet-build.yml",
|
|
@@ -562,7 +562,7 @@
|
|
|
562
562
|
"location": "framework",
|
|
563
563
|
"category": "infrastructure",
|
|
564
564
|
"technology": "github-actions",
|
|
565
|
-
"phase": "
|
|
565
|
+
"phase": "implement",
|
|
566
566
|
"required": false,
|
|
567
567
|
"description": "Reusable workflow for building and pushing Docker images to registry",
|
|
568
568
|
"outputName": "docker-build-push.yml",
|
|
@@ -584,7 +584,7 @@
|
|
|
584
584
|
"location": "framework",
|
|
585
585
|
"category": "infrastructure",
|
|
586
586
|
"technology": "github-actions",
|
|
587
|
-
"phase": "
|
|
587
|
+
"phase": "implement",
|
|
588
588
|
"required": false,
|
|
589
589
|
"description": "Reusable workflow for deploying to Coolify via SSH (API is not publicly exposed)",
|
|
590
590
|
"outputName": "deploy-coolify.yml",
|
|
@@ -606,7 +606,7 @@
|
|
|
606
606
|
"location": "framework",
|
|
607
607
|
"category": "infrastructure",
|
|
608
608
|
"technology": "github-actions",
|
|
609
|
-
"phase": "
|
|
609
|
+
"phase": "implement",
|
|
610
610
|
"required": false,
|
|
611
611
|
"description": "Composite action for building and pushing Docker images",
|
|
612
612
|
"outputName": "action.yml",
|
|
@@ -628,7 +628,7 @@
|
|
|
628
628
|
"location": "framework",
|
|
629
629
|
"category": "infrastructure",
|
|
630
630
|
"technology": "github-actions",
|
|
631
|
-
"phase": "
|
|
631
|
+
"phase": "implement",
|
|
632
632
|
"required": false,
|
|
633
633
|
"description": "Composite action for polling health endpoint until ready",
|
|
634
634
|
"outputName": "action.yml",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
namespace {{pascalCase PROJECT_NAME}}.Abstractions
|
|
2
|
-
{
|
|
3
|
-
public interface IApiEndpoint
|
|
4
|
-
{
|
|
5
|
-
void MapEndpoint(IEndpointRouteBuilder app);
|
|
6
|
-
}
|
|
7
|
-
}
|
|
1
|
+
namespace {{pascalCase PROJECT_NAME}}.Abstractions
|
|
2
|
+
{
|
|
3
|
+
public interface IApiEndpoint
|
|
4
|
+
{
|
|
5
|
+
void MapEndpoint(IEndpointRouteBuilder app);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
namespace {{pascalCase PROJECT_NAME}}.Features.{{pascalCase FEATURE_NAME}}Feature.{{pascalCase SLICE_NAME}};
|
|
2
|
-
|
|
3
|
-
// TODO: Add properties matching the {{pascalCase SLICE_NAME}} command
|
|
4
|
-
public sealed record {{pascalCase SLICE_NAME}}Request();
|
|
1
|
+
namespace {{pascalCase PROJECT_NAME}}.Features.{{pascalCase FEATURE_NAME}}Feature.{{pascalCase SLICE_NAME}};
|
|
2
|
+
|
|
3
|
+
// TODO: Add properties matching the {{pascalCase SLICE_NAME}} command
|
|
4
|
+
public sealed record {{pascalCase SLICE_NAME}}Request();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
namespace {{pascalCase PROJECT_NAME}}.Features.{{pascalCase FEATURE_NAME}}Feature.{{pascalCase SLICE_NAME}};
|
|
2
|
-
|
|
3
|
-
// TODO: Add properties matching the {{pascalCase SLICE_NAME}} response
|
|
4
|
-
public sealed record {{pascalCase SLICE_NAME}}Response(Guid Id);
|
|
1
|
+
namespace {{pascalCase PROJECT_NAME}}.Features.{{pascalCase FEATURE_NAME}}Feature.{{pascalCase SLICE_NAME}};
|
|
2
|
+
|
|
3
|
+
// TODO: Add properties matching the {{pascalCase SLICE_NAME}} response
|
|
4
|
+
public sealed record {{pascalCase SLICE_NAME}}Response(Guid Id);
|