@polymorphism-tech/morph-spec 4.5.0 → 4.7.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 +77 -56
- package/README.md +394 -700
- package/docs/ARCHITECTURE.md +331 -0
- package/docs/CHEATSHEET.md +221 -0
- package/docs/COMMAND-FLOWS.md +368 -0
- package/docs/QUICKSTART.md +212 -0
- package/docs/examples/order-management/contracts.cs +84 -0
- package/docs/examples/order-management/proposal.md +24 -0
- package/docs/examples/order-management/spec.md +162 -0
- package/docs/plans/2026-02-23-ddd-architecture-refactor.md +1153 -0
- package/docs/plans/2026-02-23-ddd-nextsteps.md +682 -0
- package/docs/plans/2026-02-23-infra-architect-refactor.md +437 -0
- package/docs/plans/2026-02-23-nextjs-code-review-design.md +156 -0
- package/docs/plans/2026-02-23-nextjs-code-review-impl.md +1254 -0
- package/docs/plans/2026-02-23-nextjs-standards-design.md +149 -0
- package/docs/plans/2026-02-23-nextjs-standards-impl.md +1846 -0
- package/framework/{skills/level-2-domains → agents}/README.md +14 -14
- package/framework/{skills/level-2-domains → agents}/ai-agents/ai-system-architect.md +1 -4
- package/framework/{skills/level-2-domains → agents}/architecture/po-pm-advisor.md +1 -2
- package/framework/{skills/level-2-domains → agents}/architecture/prompt-engineer.md +1 -2
- package/framework/{skills/level-2-domains → agents}/architecture/seo-growth-hacker.md +1 -2
- package/framework/{skills/level-2-domains → agents}/architecture/standards-architect.md +159 -162
- package/framework/agents/backend/api-designer.md +103 -0
- package/framework/{skills/level-2-domains → agents}/backend/dotnet-senior.md +1 -2
- package/framework/agents/backend/ef-modeler.md +119 -0
- package/framework/{skills/level-2-domains → agents}/backend/hangfire-orchestrator.md +1 -4
- package/framework/{skills/level-2-domains → agents}/backend/ms-agent-expert.md +1 -4
- package/framework/{skills/level-2-domains → agents}/frontend/blazor-builder.md +1 -4
- package/framework/agents/frontend/nextjs-expert.md +118 -0
- package/framework/{skills/level-2-domains → agents}/frontend/ui-ux-designer.md +1 -2
- package/framework/{skills/level-2-domains → agents}/infrastructure/azure-architect.md +147 -148
- package/framework/{skills/level-2-domains → agents}/infrastructure/azure-deploy-specialist.md +1 -2
- package/framework/{skills/level-2-domains → agents}/infrastructure/bicep-architect.md +1 -4
- package/framework/{skills/level-2-domains → agents}/infrastructure/container-specialist.md +1 -4
- package/framework/{skills/level-2-domains → agents}/infrastructure/devops-engineer.md +1 -4
- package/framework/agents/infrastructure/infra-architect.md +45 -0
- package/framework/{skills/level-2-domains → agents}/integrations/asaas-financial.md +1 -4
- package/framework/{skills/level-2-domains → agents}/integrations/azure-identity.md +1 -4
- package/framework/{skills/level-2-domains → agents}/integrations/clerk-auth.md +1 -4
- package/framework/{skills/level-2-domains → agents}/integrations/hangfire-integration.md +1 -2
- package/framework/{skills/level-2-domains → agents}/integrations/resend-email.md +1 -4
- package/framework/{skills/level-2-domains → agents}/quality/code-analyzer.md +1 -4
- package/framework/{skills/level-2-domains → agents}/quality/testing-specialist.md +1 -4
- package/framework/agents.json +1145 -278
- package/framework/hooks/claude-code/statusline.py +384 -85
- package/framework/hooks/shared/phase-utils.js +129 -129
- package/framework/rules/frontend-standards.md +0 -3
- package/framework/rules/nextjs-standards.md +17 -0
- package/framework/skills/README.md +66 -0
- package/framework/skills/level-0-meta/{brainstorming.md → brainstorming/SKILL.md} +3 -1
- package/framework/skills/level-0-meta/brainstorming/references/proposal-example.md +138 -0
- package/framework/skills/level-0-meta/{code-review.md → code-review/SKILL.md} +3 -2
- package/framework/skills/level-0-meta/code-review/references/review-example.md +164 -0
- package/framework/skills/level-0-meta/code-review/scripts/scan-csharp.mjs +121 -0
- package/framework/skills/level-0-meta/code-review-nextjs/SKILL.md +147 -0
- package/framework/skills/level-0-meta/code-review-nextjs/references/review-example-nextjs.md +254 -0
- package/framework/skills/level-0-meta/{morph-checklist.md → morph-checklist/SKILL.md} +2 -5
- package/framework/skills/{level-1-workflows/morph-replicate.md → level-0-meta/morph-replicate/SKILL.md} +6 -7
- package/framework/skills/level-0-meta/{simulation-checklist.md → simulation-checklist/SKILL.md} +3 -6
- package/framework/skills/level-0-meta/{tool-usage-guide.md → tool-usage-guide/SKILL.md} +4 -5
- package/framework/skills/level-0-meta/{verification-before-completion.md → verification-before-completion/SKILL.md} +3 -1
- package/framework/skills/level-0-meta/verification-before-completion/scripts/check-phase-outputs.mjs +110 -0
- package/framework/skills/level-1-workflows/{phase-clarify.md → phase-clarify/SKILL.md} +3 -3
- package/framework/skills/level-1-workflows/phase-clarify/references/clarifications-example.md +117 -0
- package/framework/skills/level-1-workflows/{phase-codebase-analysis.md → phase-codebase-analysis/SKILL.md} +2 -3
- package/framework/skills/level-1-workflows/{phase-design.md → phase-design/SKILL.md} +46 -182
- package/framework/skills/level-1-workflows/phase-design/references/spec-example.md +253 -0
- package/framework/skills/level-1-workflows/{phase-implement.md → phase-implement/SKILL.md} +3 -3
- package/framework/skills/level-1-workflows/phase-implement/references/recap-example.md +132 -0
- package/framework/skills/level-1-workflows/{phase-setup.md → phase-setup/SKILL.md} +2 -3
- package/framework/skills/level-1-workflows/{phase-tasks.md → phase-tasks/SKILL.md} +42 -3
- package/framework/skills/level-1-workflows/phase-tasks/references/tasks-example.md +231 -0
- package/framework/skills/level-1-workflows/phase-tasks/scripts/validate-tasks.mjs +112 -0
- package/framework/skills/level-1-workflows/{phase-uiux.md → phase-uiux/SKILL.md} +2 -3
- package/framework/standards/STANDARDS.json +121 -0
- package/framework/standards/architecture/ddd/bounded-contexts.md +105 -0
- package/framework/standards/architecture/ddd/complexity-levels.md +108 -0
- package/framework/standards/architecture/ddd/ubiquitous-language.md +58 -0
- package/framework/standards/frontend/nextjs/app-router.md +123 -0
- package/framework/standards/frontend/nextjs/components.md +132 -0
- package/framework/standards/frontend/nextjs/data-fetching.md +126 -0
- package/framework/standards/frontend/nextjs/forms.md +128 -0
- package/framework/standards/frontend/nextjs/naming-conventions.md +67 -0
- package/framework/standards/frontend/nextjs/project-structure.md +102 -0
- package/framework/standards/frontend/nextjs/state-management.md +72 -0
- package/framework/standards/frontend/nextjs/testing.md +111 -0
- package/framework/templates/REGISTRY.json +538 -142
- package/framework/templates/code/dotnet/contracts/contracts-level1.cs +69 -0
- package/framework/templates/code/dotnet/contracts/contracts-level2.cs +86 -0
- package/framework/templates/code/dotnet/contracts/contracts-level3.cs +41 -0
- package/framework/templates/docs/spec.md +49 -0
- package/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +43 -0
- package/framework/templates/frontend/nextjs/client-component.tsx.hbs +26 -0
- package/framework/templates/frontend/nextjs/env.mjs.hbs +32 -0
- package/framework/templates/frontend/nextjs/feature-form.tsx.hbs +56 -0
- package/framework/templates/frontend/nextjs/page.tsx.hbs +22 -0
- package/framework/templates/frontend/nextjs/tsconfig.json.hbs +26 -0
- package/framework/templates/frontend/nextjs/use-feature.ts.hbs +54 -0
- package/framework/templates/project-structure/dotnet-ddd.md +70 -0
- package/framework/workflows/docs/enforcement-pipeline.md +2 -1
- package/package.json +1 -1
- package/scripts/scan-nextjs.mjs +169 -0
- package/src/commands/project/doctor.js +52 -1
- package/src/commands/project/init.js +19 -65
- package/src/commands/project/update.js +7 -63
- package/src/lib/detectors/claude-config-detector.js +1 -3
- package/src/lib/standards/standards-context-injector.js +5 -0
- package/src/lib/validators/nextjs/index.js +6 -0
- package/src/lib/validators/nextjs/next-component-validator.js +181 -0
- package/src/lib/validators/validation-runner.js +5 -0
- package/src/utils/agents-installer.js +16 -4
- package/src/utils/skills-installer.js +59 -15
- package/.morph/.morphversion +0 -5
- package/.morph/analytics/threads-log.jsonl +0 -44
- package/.morph/config/config.json +0 -8
- package/.morph/context/README.md +0 -17
- package/.morph/framework/agents.json +0 -948
- package/.morph/framework/standards/STANDARDS.json +0 -812
- package/.morph/framework/standards/ai-agents/blazor-ui.md +0 -364
- package/.morph/framework/standards/ai-agents/production.md +0 -415
- package/.morph/framework/standards/ai-agents/setup.md +0 -418
- package/.morph/framework/standards/ai-agents/team-orchestration.md +0 -479
- package/.morph/framework/standards/ai-agents/workflows.md +0 -354
- package/.morph/framework/standards/architecture/ddd/aggregates.md +0 -120
- package/.morph/framework/standards/architecture/ddd/entities.md +0 -99
- package/.morph/framework/standards/architecture/ddd/value-objects.md +0 -124
- package/.morph/framework/standards/backend/api/minimal-api.md +0 -494
- package/.morph/framework/standards/backend/api/rest.md +0 -492
- package/.morph/framework/standards/backend/api/validation.md +0 -88
- package/.morph/framework/standards/backend/authentication/passkeys.md +0 -428
- package/.morph/framework/standards/backend/database/ef-core.md +0 -199
- package/.morph/framework/standards/backend/database/migrations.md +0 -393
- package/.morph/framework/standards/backend/database/postgresql/database.md +0 -352
- package/.morph/framework/standards/backend/database/repository-patterns.md +0 -528
- package/.morph/framework/standards/backend/database/vector-search-rag.md +0 -541
- package/.morph/framework/standards/backend/dotnet/async.md +0 -366
- package/.morph/framework/standards/backend/dotnet/core.md +0 -117
- package/.morph/framework/standards/backend/dotnet/di.md +0 -439
- package/.morph/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
- package/.morph/framework/standards/backend/integrations/asaas/asaas-api.md +0 -216
- package/.morph/framework/standards/backend/integrations/clerk/clerk-auth.md +0 -290
- package/.morph/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +0 -350
- package/.morph/framework/standards/backend/integrations/resend/resend-email.md +0 -385
- package/.morph/framework/standards/context/analytics.md +0 -96
- package/.morph/framework/standards/context/bundles.md +0 -110
- package/.morph/framework/standards/context/priming.md +0 -78
- package/.morph/framework/standards/core/architecture.md +0 -185
- package/.morph/framework/standards/core/coding.md +0 -214
- package/.morph/framework/standards/core/git-branching-strategy.md +0 -403
- package/.morph/framework/standards/core/git.md +0 -185
- package/.morph/framework/standards/core/testing.md +0 -295
- package/.morph/framework/standards/data/nosql/blob-storage.md +0 -102
- package/.morph/framework/standards/data/nosql/cache/redis.md +0 -97
- package/.morph/framework/standards/data/nosql/cosmos-db.md +0 -118
- package/.morph/framework/standards/data/vector-search/azure-ai-search.md +0 -121
- package/.morph/framework/standards/data/vector-search/rag-chunking.md +0 -104
- package/.morph/framework/standards/frontend/blazor/design-checklist.md +0 -222
- package/.morph/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
- package/.morph/framework/standards/frontend/blazor/fluent-ui.md +0 -137
- package/.morph/framework/standards/frontend/blazor/html-conversion.md +0 -184
- package/.morph/framework/standards/frontend/blazor/lifecycle.md +0 -195
- package/.morph/framework/standards/frontend/blazor/pitfalls.md +0 -198
- package/.morph/framework/standards/frontend/blazor/state.md +0 -191
- package/.morph/framework/standards/frontend/design-system/animations.md +0 -151
- package/.morph/framework/standards/frontend/design-system/naming.md +0 -64
- package/.morph/framework/standards/frontend/nextjs/nextjs-patterns.md +0 -198
- package/.morph/framework/standards/infrastructure/azure/azure.md +0 -624
- package/.morph/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
- package/.morph/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
- package/.morph/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
- package/.morph/framework/standards/infrastructure/azure/services/functions.md +0 -486
- package/.morph/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
- package/.morph/framework/standards/infrastructure/azure/services/storage.md +0 -407
- package/.morph/framework/standards/infrastructure/docker/easypanel-deploy.md +0 -196
- package/.morph/framework/standards/infrastructure/supabase/mcp-setup.md +0 -252
- package/.morph/framework/standards/infrastructure/supabase/supabase-auth.md +0 -176
- package/.morph/framework/standards/infrastructure/supabase/supabase-pgvector.md +0 -169
- package/.morph/framework/standards/infrastructure/supabase/supabase-rls.md +0 -184
- package/.morph/framework/standards/infrastructure/supabase/supabase-storage.md +0 -153
- package/.morph/framework/standards/integration/api/graphql.md +0 -91
- package/.morph/framework/standards/integration/api/grpc.md +0 -114
- package/.morph/framework/standards/integration/api/rest-design.md +0 -95
- package/.morph/framework/standards/integration/event-driven/cqrs.md +0 -101
- package/.morph/framework/standards/integration/event-driven/event-sourcing.md +0 -124
- package/.morph/framework/standards/integration/event-driven/service-bus.md +0 -95
- package/.morph/framework/standards/integration/mcp/mcp-tools.md +0 -384
- package/.morph/framework/standards/observability/logging.md +0 -131
- package/.morph/framework/standards/observability/metrics.md +0 -121
- package/.morph/framework/standards/observability/monitoring.md +0 -114
- package/.morph/framework/standards/observability/tracing.md +0 -132
- package/.morph/framework/standards/workflows/parallel-execution.md +0 -112
- package/.morph/framework/standards/workflows/thread-management.md +0 -113
- package/.morph/framework/templates/.idea/morph-templates.xml +0 -92
- package/.morph/framework/templates/.vscode/morph-templates.code-snippets +0 -186
- package/.morph/framework/templates/IDE-SNIPPETS.md +0 -266
- package/.morph/framework/templates/README.md +0 -814
- package/.morph/framework/templates/REGISTRY.json +0 -1492
- package/.morph/framework/templates/code/dotnet/backend/repository.cs +0 -141
- package/.morph/framework/templates/code/dotnet/backend/service.cs +0 -139
- package/.morph/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
- package/.morph/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
- package/.morph/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
- package/.morph/framework/templates/code/dotnet/contracts/README.md +0 -74
- package/.morph/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
- package/.morph/framework/templates/code/dotnet/contracts/contracts.cs +0 -217
- package/.morph/framework/templates/code/dotnet/contracts/contracts.cs.hbs +0 -172
- package/.morph/framework/templates/code/dotnet/database/migration.cs +0 -83
- package/.morph/framework/templates/code/dotnet/frontend/component.razor +0 -239
- package/.morph/framework/templates/code/dotnet/jobs/agent.cs +0 -163
- package/.morph/framework/templates/code/dotnet/jobs/job.cs +0 -171
- package/.morph/framework/templates/code/dotnet/test.cs +0 -239
- package/.morph/framework/templates/code/sql/rls-policy.sql +0 -57
- package/.morph/framework/templates/code/sql/supabase-migration.sql +0 -100
- package/.morph/framework/templates/code/sql/supabase-migration.template.sql +0 -113
- package/.morph/framework/templates/code/typescript/contracts.ts +0 -168
- package/.morph/framework/templates/context/CONTEXT-FEATURE.md +0 -276
- package/.morph/framework/templates/context/CONTEXT.md +0 -181
- package/.morph/framework/templates/docs/clarifications.md +0 -253
- package/.morph/framework/templates/docs/onboarding.md +0 -123
- package/.morph/framework/templates/docs/proposal.md +0 -182
- package/.morph/framework/templates/docs/schema-analysis.md +0 -119
- package/.morph/framework/templates/docs/spec.md +0 -149
- package/.morph/framework/templates/docs/ui-components.md +0 -124
- package/.morph/framework/templates/docs/ui-design-system.md +0 -76
- package/.morph/framework/templates/docs/ui-flows.md +0 -167
- package/.morph/framework/templates/docs/ui-mockups.md +0 -98
- package/.morph/framework/templates/examples/design-system-examples.md +0 -357
- package/.morph/framework/templates/examples/spec-examples.md +0 -90
- package/.morph/framework/templates/feature/decisions.md +0 -187
- package/.morph/framework/templates/feature/recap.md +0 -146
- package/.morph/framework/templates/feature/tasks.md +0 -199
- package/.morph/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
- package/.morph/framework/templates/infrastructure/azure/README.md +0 -286
- package/.morph/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
- package/.morph/framework/templates/infrastructure/azure/app-service.bicep +0 -164
- package/.morph/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
- package/.morph/framework/templates/infrastructure/azure/container-app.bicep +0 -156
- package/.morph/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
- package/.morph/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
- package/.morph/framework/templates/infrastructure/azure/deploy.sh +0 -208
- package/.morph/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
- package/.morph/framework/templates/infrastructure/azure/main.bicep +0 -189
- package/.morph/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
- package/.morph/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
- package/.morph/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
- package/.morph/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
- package/.morph/framework/templates/infrastructure/azure/storage.bicep +0 -106
- package/.morph/framework/templates/infrastructure/docker/Dockerfile.template +0 -58
- package/.morph/framework/templates/infrastructure/docker/docker-compose.template.yml +0 -67
- package/.morph/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +0 -38
- package/.morph/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +0 -48
- package/.morph/framework/templates/infrastructure/docker/easypanel.template.json +0 -54
- package/.morph/framework/templates/infrastructure/github/README.md +0 -593
- package/.morph/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
- package/.morph/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -45
- package/.morph/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +0 -27
- package/.morph/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
- package/.morph/framework/templates/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -31
- package/.morph/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -59
- package/.morph/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -39
- package/.morph/framework/templates/integrations/asaas-client.cs +0 -387
- package/.morph/framework/templates/integrations/asaas-webhook.cs +0 -351
- package/.morph/framework/templates/integrations/azure-identity-config.cs +0 -288
- package/.morph/framework/templates/integrations/clerk-config.cs +0 -258
- package/.morph/framework/templates/meta-prompts/fusion/fusion-agent.md +0 -76
- package/.morph/framework/templates/meta-prompts/fusion/fusion-aggregator.md +0 -100
- package/.morph/framework/templates/meta-prompts/hops/hop-retry.md +0 -78
- package/.morph/framework/templates/meta-prompts/hops/hop-validation.md +0 -97
- package/.morph/framework/templates/meta-prompts/hops/hop-wrapper.md +0 -36
- package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
- package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
- package/.morph/framework/templates/meta-prompts/squad-leaders/backend-squad.md +0 -90
- package/.morph/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +0 -126
- package/.morph/framework/templates/meta-prompts/squad-leaders/squad-leader.md +0 -43
- package/.morph/framework/templates/meta-prompts/validators/checkpoint-validator.md +0 -107
- package/.morph/framework/templates/meta-prompts/validators/pre-commit-validator.md +0 -95
- package/.morph/framework/templates/saas/subscription.cs +0 -347
- package/.morph/framework/templates/saas/tenant.cs +0 -338
- package/.morph/framework/templates/state.template.json +0 -17
- package/.morph/framework/templates/ui/FluentDesignTheme.cs +0 -149
- package/.morph/framework/templates/ui/MudTheme.cs +0 -281
- package/.morph/framework/templates/ui/design-system.css +0 -226
- package/.morph/logs/tool-failures.log +0 -51
- package/.morph/memory/pre-compact-2026-02-22T17-01-01-658Z.json +0 -16
- package/.morph/state.json +0 -48
- package/framework/skills/level-2-domains/backend/api-designer.md +0 -66
- package/framework/skills/level-2-domains/backend/ef-modeler.md +0 -65
- package/framework/skills/level-2-domains/frontend/nextjs-expert.md +0 -161
- package/framework/skills/level-3-technologies/README.md +0 -7
- package/framework/skills/level-4-patterns/README.md +0 -7
- package/framework/templates/code/dotnet/contracts/contracts.cs +0 -217
- package/framework/templates/code/dotnet/contracts/contracts.cs.hbs +0 -172
|
@@ -1,129 +1,129 @@
|
|
|
1
|
-
// GENERATED by scripts/generate-refs.js — DO NOT EDIT manually
|
|
2
|
-
// Source of truth: src/core/paths/output-schema.js
|
|
3
|
-
// Regenerate with: node scripts/generate-refs.js
|
|
4
|
-
/**
|
|
5
|
-
* Shared phase utilities for Claude Code hooks.
|
|
6
|
-
*
|
|
7
|
-
* Maps phases to directories and output types.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
/** Phase order */
|
|
11
|
-
export const PHASE_ORDER = ["proposal","setup","uiux","design","clarify","tasks","implement","sync"];
|
|
12
|
-
|
|
13
|
-
/** Map phase → allowed output subdirectory */
|
|
14
|
-
export const PHASE_DIRS = {
|
|
15
|
-
proposal: '0-proposal',
|
|
16
|
-
setup: '0-proposal',
|
|
17
|
-
uiux: '2-ui',
|
|
18
|
-
design: '1-design',
|
|
19
|
-
clarify: '1-design',
|
|
20
|
-
tasks: '3-tasks',
|
|
21
|
-
implement: '4-implement',
|
|
22
|
-
sync: '4-implement',
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
/** Map output type (camelCase) → phase that produces it */
|
|
26
|
-
export const OUTPUT_PHASE_MAP = {
|
|
27
|
-
proposal: 'proposal',
|
|
28
|
-
schemaAnalysis: 'design',
|
|
29
|
-
spec: 'design',
|
|
30
|
-
clarifications: 'clarify',
|
|
31
|
-
contracts: 'design',
|
|
32
|
-
tasks: 'tasks',
|
|
33
|
-
uiDesignSystem: 'uiux',
|
|
34
|
-
uiMockups: 'uiux',
|
|
35
|
-
uiComponents: 'uiux',
|
|
36
|
-
uiFlows: 'uiux',
|
|
37
|
-
decisions: 'design',
|
|
38
|
-
recap: 'implement',
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
/** Map filename → output type (camelCase) */
|
|
42
|
-
export const FILENAME_TO_OUTPUT = {
|
|
43
|
-
'proposal.md': 'proposal',
|
|
44
|
-
'schema-analysis.md': 'schemaAnalysis',
|
|
45
|
-
'spec.md': 'spec',
|
|
46
|
-
'clarifications.md': 'clarifications',
|
|
47
|
-
'contracts.cs': 'contracts',
|
|
48
|
-
'tasks.md': 'tasks',
|
|
49
|
-
'design-system.md': 'uiDesignSystem',
|
|
50
|
-
'mockups.md': 'uiMockups',
|
|
51
|
-
'components.md': 'uiComponents',
|
|
52
|
-
'flows.md': 'uiFlows',
|
|
53
|
-
'decisions.md': 'decisions',
|
|
54
|
-
'recap.md': 'recap',
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
/** Protected spec files and the approval gate that locks them */
|
|
58
|
-
export const PROTECTED_SPEC_FILES = {
|
|
59
|
-
'schema-analysis.md': 'design',
|
|
60
|
-
'spec.md': 'design',
|
|
61
|
-
'contracts.cs': 'design',
|
|
62
|
-
'tasks.md': 'tasks',
|
|
63
|
-
'design-system.md': 'uiux',
|
|
64
|
-
'mockups.md': 'uiux',
|
|
65
|
-
'components.md': 'uiux',
|
|
66
|
-
'flows.md': 'uiux',
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Extract feature name from a .morph/features/{feature}/... path
|
|
71
|
-
* @param {string} filePath - File path to analyze
|
|
72
|
-
* @returns {string|null} Feature name or null
|
|
73
|
-
*/
|
|
74
|
-
export function extractFeatureName(filePath) {
|
|
75
|
-
const normalized = filePath.replace(/\\/g, '/');
|
|
76
|
-
const match = normalized.match(/\.morph\/features\/([^/]+)\//);
|
|
77
|
-
return match ? match[1] : null;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Extract phase subdirectory from a .morph/features/{feature}/{phaseDir}/... path
|
|
82
|
-
* @param {string} filePath - File path to analyze
|
|
83
|
-
* @returns {string|null} Phase directory (e.g., '0-proposal', '1-design') or null
|
|
84
|
-
*/
|
|
85
|
-
export function extractPhaseDir(filePath) {
|
|
86
|
-
const normalized = filePath.replace(/\\/g, '/');
|
|
87
|
-
const match = normalized.match(/\.morph\/features\/[^/]+\/(\d+-[^/]+)\//);
|
|
88
|
-
return match ? match[1] : null;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Check if a file path is inside .morph/features/
|
|
93
|
-
* @param {string} filePath
|
|
94
|
-
* @returns {boolean}
|
|
95
|
-
*/
|
|
96
|
-
export function isFeaturePath(filePath) {
|
|
97
|
-
const normalized = filePath.replace(/\\/g, '/');
|
|
98
|
-
return normalized.includes('.morph/features/');
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Check if a file path is inside .morph/framework/ (readonly)
|
|
103
|
-
* @param {string} filePath
|
|
104
|
-
* @returns {boolean}
|
|
105
|
-
*/
|
|
106
|
-
export function isFrameworkPath(filePath) {
|
|
107
|
-
const normalized = filePath.replace(/\\/g, '/');
|
|
108
|
-
return normalized.includes('.morph/framework/');
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Check if a file path is state.json
|
|
113
|
-
* @param {string} filePath
|
|
114
|
-
* @returns {boolean}
|
|
115
|
-
*/
|
|
116
|
-
export function isStatePath(filePath) {
|
|
117
|
-
const normalized = filePath.replace(/\\/g, '/');
|
|
118
|
-
return normalized.endsWith('.morph/state.json');
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Get the basename of a file path
|
|
123
|
-
* @param {string} filePath
|
|
124
|
-
* @returns {string}
|
|
125
|
-
*/
|
|
126
|
-
export function getBasename(filePath) {
|
|
127
|
-
const normalized = filePath.replace(/\\/g, '/');
|
|
128
|
-
return normalized.split('/').pop();
|
|
129
|
-
}
|
|
1
|
+
// GENERATED by scripts/generate-refs.js — DO NOT EDIT manually
|
|
2
|
+
// Source of truth: src/core/paths/output-schema.js
|
|
3
|
+
// Regenerate with: node scripts/generate-refs.js
|
|
4
|
+
/**
|
|
5
|
+
* Shared phase utilities for Claude Code hooks.
|
|
6
|
+
*
|
|
7
|
+
* Maps phases to directories and output types.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/** Phase order */
|
|
11
|
+
export const PHASE_ORDER = ["proposal","setup","uiux","design","clarify","tasks","implement","sync"];
|
|
12
|
+
|
|
13
|
+
/** Map phase → allowed output subdirectory */
|
|
14
|
+
export const PHASE_DIRS = {
|
|
15
|
+
proposal: '0-proposal',
|
|
16
|
+
setup: '0-proposal',
|
|
17
|
+
uiux: '2-ui',
|
|
18
|
+
design: '1-design',
|
|
19
|
+
clarify: '1-design',
|
|
20
|
+
tasks: '3-tasks',
|
|
21
|
+
implement: '4-implement',
|
|
22
|
+
sync: '4-implement',
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/** Map output type (camelCase) → phase that produces it */
|
|
26
|
+
export const OUTPUT_PHASE_MAP = {
|
|
27
|
+
proposal: 'proposal',
|
|
28
|
+
schemaAnalysis: 'design',
|
|
29
|
+
spec: 'design',
|
|
30
|
+
clarifications: 'clarify',
|
|
31
|
+
contracts: 'design',
|
|
32
|
+
tasks: 'tasks',
|
|
33
|
+
uiDesignSystem: 'uiux',
|
|
34
|
+
uiMockups: 'uiux',
|
|
35
|
+
uiComponents: 'uiux',
|
|
36
|
+
uiFlows: 'uiux',
|
|
37
|
+
decisions: 'design',
|
|
38
|
+
recap: 'implement',
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/** Map filename → output type (camelCase) */
|
|
42
|
+
export const FILENAME_TO_OUTPUT = {
|
|
43
|
+
'proposal.md': 'proposal',
|
|
44
|
+
'schema-analysis.md': 'schemaAnalysis',
|
|
45
|
+
'spec.md': 'spec',
|
|
46
|
+
'clarifications.md': 'clarifications',
|
|
47
|
+
'contracts.cs': 'contracts',
|
|
48
|
+
'tasks.md': 'tasks',
|
|
49
|
+
'design-system.md': 'uiDesignSystem',
|
|
50
|
+
'mockups.md': 'uiMockups',
|
|
51
|
+
'components.md': 'uiComponents',
|
|
52
|
+
'flows.md': 'uiFlows',
|
|
53
|
+
'decisions.md': 'decisions',
|
|
54
|
+
'recap.md': 'recap',
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/** Protected spec files and the approval gate that locks them */
|
|
58
|
+
export const PROTECTED_SPEC_FILES = {
|
|
59
|
+
'schema-analysis.md': 'design',
|
|
60
|
+
'spec.md': 'design',
|
|
61
|
+
'contracts.cs': 'design',
|
|
62
|
+
'tasks.md': 'tasks',
|
|
63
|
+
'design-system.md': 'uiux',
|
|
64
|
+
'mockups.md': 'uiux',
|
|
65
|
+
'components.md': 'uiux',
|
|
66
|
+
'flows.md': 'uiux',
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Extract feature name from a .morph/features/{feature}/... path
|
|
71
|
+
* @param {string} filePath - File path to analyze
|
|
72
|
+
* @returns {string|null} Feature name or null
|
|
73
|
+
*/
|
|
74
|
+
export function extractFeatureName(filePath) {
|
|
75
|
+
const normalized = filePath.replace(/\\/g, '/');
|
|
76
|
+
const match = normalized.match(/\.morph\/features\/([^/]+)\//);
|
|
77
|
+
return match ? match[1] : null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Extract phase subdirectory from a .morph/features/{feature}/{phaseDir}/... path
|
|
82
|
+
* @param {string} filePath - File path to analyze
|
|
83
|
+
* @returns {string|null} Phase directory (e.g., '0-proposal', '1-design') or null
|
|
84
|
+
*/
|
|
85
|
+
export function extractPhaseDir(filePath) {
|
|
86
|
+
const normalized = filePath.replace(/\\/g, '/');
|
|
87
|
+
const match = normalized.match(/\.morph\/features\/[^/]+\/(\d+-[^/]+)\//);
|
|
88
|
+
return match ? match[1] : null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Check if a file path is inside .morph/features/
|
|
93
|
+
* @param {string} filePath
|
|
94
|
+
* @returns {boolean}
|
|
95
|
+
*/
|
|
96
|
+
export function isFeaturePath(filePath) {
|
|
97
|
+
const normalized = filePath.replace(/\\/g, '/');
|
|
98
|
+
return normalized.includes('.morph/features/');
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Check if a file path is inside .morph/framework/ (readonly)
|
|
103
|
+
* @param {string} filePath
|
|
104
|
+
* @returns {boolean}
|
|
105
|
+
*/
|
|
106
|
+
export function isFrameworkPath(filePath) {
|
|
107
|
+
const normalized = filePath.replace(/\\/g, '/');
|
|
108
|
+
return normalized.includes('.morph/framework/');
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Check if a file path is state.json
|
|
113
|
+
* @param {string} filePath
|
|
114
|
+
* @returns {boolean}
|
|
115
|
+
*/
|
|
116
|
+
export function isStatePath(filePath) {
|
|
117
|
+
const normalized = filePath.replace(/\\/g, '/');
|
|
118
|
+
return normalized.endsWith('.morph/state.json');
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Get the basename of a file path
|
|
123
|
+
* @param {string} filePath
|
|
124
|
+
* @returns {string}
|
|
125
|
+
*/
|
|
126
|
+
export function getBasename(filePath) {
|
|
127
|
+
const normalized = filePath.replace(/\\/g, '/');
|
|
128
|
+
return normalized.split('/').pop();
|
|
129
|
+
}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
paths:
|
|
3
3
|
- "**/*.razor"
|
|
4
|
-
- "**/*.tsx"
|
|
5
|
-
- "**/*.ts"
|
|
6
4
|
- "**/*.css"
|
|
7
5
|
- "**/*.scss"
|
|
8
6
|
---
|
|
@@ -10,5 +8,4 @@ paths:
|
|
|
10
8
|
# Frontend Standards
|
|
11
9
|
|
|
12
10
|
@.morph/framework/standards/frontend/blazor/design-checklist.md
|
|
13
|
-
@.morph/framework/standards/frontend/nextjs/nextjs-patterns.md
|
|
14
11
|
@.morph/framework/standards/frontend/design-system/naming.md
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.tsx"
|
|
4
|
+
- "**/*.ts"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Next.js Standards
|
|
8
|
+
|
|
9
|
+
@.morph/framework/standards/frontend/nextjs/naming-conventions.md
|
|
10
|
+
@.morph/framework/standards/frontend/nextjs/project-structure.md
|
|
11
|
+
@.morph/framework/standards/frontend/nextjs/app-router.md
|
|
12
|
+
@.morph/framework/standards/frontend/nextjs/components.md
|
|
13
|
+
@.morph/framework/standards/frontend/nextjs/data-fetching.md
|
|
14
|
+
@.morph/framework/standards/frontend/nextjs/forms.md
|
|
15
|
+
@.morph/framework/standards/frontend/nextjs/state-management.md
|
|
16
|
+
@.morph/framework/standards/frontend/nextjs/testing.md
|
|
17
|
+
@.morph/framework/standards/frontend/nextjs/nextjs-patterns.md
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# MORPH-SPEC Skills
|
|
2
|
+
|
|
3
|
+
Skills installed to `.claude/skills/` during `morph-spec init` (or `morph-spec update`).
|
|
4
|
+
|
|
5
|
+
Each skill is a directory: `{name}/SKILL.md` + optional `scripts/`, `references/`, `assets/`.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## level-0-meta — Utilities & Meta-Skills
|
|
10
|
+
|
|
11
|
+
| Skill | Description |
|
|
12
|
+
|-------|-------------|
|
|
13
|
+
| `tool-usage-guide` | Tool selection flowchart — which tool for which action |
|
|
14
|
+
| `morph-checklist` | Pre-session checklist for MORPH-SPEC projects |
|
|
15
|
+
| `simulation-checklist` | Checklist for AI simulation / prompt testing |
|
|
16
|
+
| `brainstorming` | Collaborative ideation → spec via dialogue |
|
|
17
|
+
| `verification-before-completion` | Gate check before marking any work done |
|
|
18
|
+
| `code-review` | .NET/C# review checklist (naming, arch, async, DI, DTOs) |
|
|
19
|
+
| `morph-replicate` | Convert HTML prototypes to Blazor components |
|
|
20
|
+
|
|
21
|
+
### level-0-meta extras
|
|
22
|
+
|
|
23
|
+
| Skill | File | Purpose |
|
|
24
|
+
|-------|------|---------|
|
|
25
|
+
| `brainstorming` | `references/proposal-example.md` | Filled-in proposal.md example |
|
|
26
|
+
| `verification-before-completion` | `scripts/check-phase-outputs.mjs` | Validate required phase outputs exist |
|
|
27
|
+
| `code-review` | `references/review-example.md` | Filled-in review with finding format |
|
|
28
|
+
| `code-review` | `scripts/scan-csharp.mjs` | Scan .cs files for CRITICAL/HIGH violations |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## level-1-workflows — Phase Workflow Skills
|
|
33
|
+
|
|
34
|
+
Invoked internally by `/morph-proposal` and `/morph-apply`. Not user-invocable.
|
|
35
|
+
|
|
36
|
+
| Skill | Phase | Description |
|
|
37
|
+
|-------|-------|-------------|
|
|
38
|
+
| `phase-codebase-analysis` | 0 | Analyse existing codebase before design |
|
|
39
|
+
| `phase-setup` | 1 | Project scaffolding and initial setup |
|
|
40
|
+
| `phase-design` | 2 | Technical spec + contracts + decisions |
|
|
41
|
+
| `phase-uiux` | 3 | UI/UX design system + mockups + components |
|
|
42
|
+
| `phase-clarify` | 4 | Clarification questions → edge cases → spec update |
|
|
43
|
+
| `phase-tasks` | 5 | Break spec into ordered task list (tasks.md) |
|
|
44
|
+
| `phase-implement` | 6 | Implement tasks with TDD + checkpoints + recap |
|
|
45
|
+
|
|
46
|
+
### level-1-workflows extras
|
|
47
|
+
|
|
48
|
+
| Skill | File | Purpose |
|
|
49
|
+
|-------|------|---------|
|
|
50
|
+
| `phase-design` | `references/spec-example.md` | Filled-in spec.md example |
|
|
51
|
+
| `phase-clarify` | `references/clarifications-example.md` | Filled-in clarifications Q&A |
|
|
52
|
+
| `phase-tasks` | `references/tasks-example.md` | Filled-in tasks.md with T### format |
|
|
53
|
+
| `phase-tasks` | `scripts/validate-tasks.mjs` | Validate tasks.md structure and IDs |
|
|
54
|
+
| `phase-implement` | `references/recap-example.md` | Filled-in recap.md example |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Domain Agents
|
|
59
|
+
|
|
60
|
+
Domain specialist agents (`framework/agents/`) are installed separately as `.claude/agents/morph-domain-{name}.md` — they are subagents, not skills.
|
|
61
|
+
|
|
62
|
+
See `framework/agents/README.md` for the full list.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
*MORPH-SPEC by Polymorphism Tech*
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: brainstorming
|
|
3
|
-
description: Morph-spec-aware brainstorming
|
|
3
|
+
description: Morph-spec-aware brainstorming that loads project context, explores multiple design approaches, asks clarifying questions, and produces proposal.md or decisions.md. Use before designing a feature, when facing architectural decisions with multiple valid approaches, or when a feature needs requirements exploration before committing to a direction.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Brainstorming — MORPH-SPEC Integrated
|
|
7
7
|
|
|
8
8
|
> Explore context, ask questions, generate multiple approaches, and produce a design document before committing to implementation.
|
|
9
|
+
>
|
|
10
|
+
> **Example:** `references/proposal-example.md` — filled-in proposal.md showing expected quality.
|
|
9
11
|
|
|
10
12
|
## When to Use
|
|
11
13
|
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Feature Proposal: Photo Processing Pipeline
|
|
2
|
+
|
|
3
|
+
> Example of a well-structured proposal.md. This is a filled-in reference — not a template.
|
|
4
|
+
|
|
5
|
+
## Metadata
|
|
6
|
+
|
|
7
|
+
| Field | Value |
|
|
8
|
+
|-------|-------|
|
|
9
|
+
| **Proposed** | 2025-01-15 |
|
|
10
|
+
| **Author** | Product Team |
|
|
11
|
+
| **Status** | Approved |
|
|
12
|
+
| **Priority** | High |
|
|
13
|
+
| **Stack** | blazor-azure |
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Overview
|
|
18
|
+
|
|
19
|
+
Users currently cannot upload photos for AI-based transformations because no upload infrastructure exists. This feature adds an end-to-end photo upload, processing, and delivery pipeline using Azure Blob Storage and Hangfire background jobs.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Problem Statement
|
|
24
|
+
|
|
25
|
+
### What is the problem?
|
|
26
|
+
|
|
27
|
+
Users cannot submit photos for AI transformation, blocking the core product value proposition. The system has no file upload capability, no background processing queue, and no way to notify users when processing completes.
|
|
28
|
+
|
|
29
|
+
### Who is affected?
|
|
30
|
+
|
|
31
|
+
All end users who want to use the photo transformation feature — the primary user journey is completely unavailable.
|
|
32
|
+
|
|
33
|
+
### What is the impact?
|
|
34
|
+
|
|
35
|
+
- User productivity loss: 100% of core use case unavailable
|
|
36
|
+
- Revenue impact: Feature is the primary paid tier differentiator
|
|
37
|
+
- User satisfaction: Can't demo product to prospects
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Proposed Solution
|
|
42
|
+
|
|
43
|
+
### Overview
|
|
44
|
+
|
|
45
|
+
A multi-step pipeline: user uploads a photo via a Blazor form → the file is stored in Azure Blob Storage → a Hangfire background job is queued for AI processing → the user polls for completion → the processed photo is returned via a download link.
|
|
46
|
+
|
|
47
|
+
### Key Features
|
|
48
|
+
|
|
49
|
+
1. **Upload endpoint** — Validates file type/size, stores in Azure Blob
|
|
50
|
+
2. **Background processing** — Hangfire job calls AI API, stores result in Blob
|
|
51
|
+
3. **Status polling** — User sees real-time progress (Pending → Processing → Completed)
|
|
52
|
+
|
|
53
|
+
### User Journey
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
1. User selects a photo file on the upload page
|
|
57
|
+
2. System validates (max 10MB, .jpg/.png only) and shows preview
|
|
58
|
+
3. User clicks "Upload" → system enqueues job, redirects to /processing/{jobId}
|
|
59
|
+
4. User sees progress bar polling every 5 seconds
|
|
60
|
+
5. On completion: "Download" button appears, user gets processed photo
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Success Metrics
|
|
66
|
+
|
|
67
|
+
| Metric | Current | Target |
|
|
68
|
+
|--------|---------|--------|
|
|
69
|
+
| Upload success rate | N/A | >99% |
|
|
70
|
+
| Processing time (p95) | N/A | <120s |
|
|
71
|
+
| Error recovery rate | N/A | >95% (auto-retry) |
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Scope
|
|
76
|
+
|
|
77
|
+
### In Scope
|
|
78
|
+
|
|
79
|
+
- Photo upload (Blazor form, Azure Blob Storage)
|
|
80
|
+
- Background processing via Hangfire
|
|
81
|
+
- Status polling page with progress indicator
|
|
82
|
+
- Download link for processed photo
|
|
83
|
+
- Basic error handling and retry logic
|
|
84
|
+
|
|
85
|
+
### Out of Scope
|
|
86
|
+
|
|
87
|
+
- Batch uploads (multiple photos at once)
|
|
88
|
+
- Email notifications when processing completes
|
|
89
|
+
- Photo editing before upload (crop, resize)
|
|
90
|
+
|
|
91
|
+
### Future Considerations
|
|
92
|
+
|
|
93
|
+
- Webhooks for external integrations
|
|
94
|
+
- Processing history and gallery view
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Risks & Concerns
|
|
99
|
+
|
|
100
|
+
| Risk | Likelihood | Impact | Mitigation |
|
|
101
|
+
|------|------------|--------|------------|
|
|
102
|
+
| AI API unavailable | Medium | High | Retry with exponential backoff, fallback error state |
|
|
103
|
+
| Large file upload timeout | Low | Medium | Chunked upload or presigned URL direct to Blob |
|
|
104
|
+
| Blob storage costs unexpectedly high | Low | Low | Set blob lifecycle policy (auto-delete after 30 days) |
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Estimated Effort
|
|
109
|
+
|
|
110
|
+
| Phase | Estimate |
|
|
111
|
+
|-------|----------|
|
|
112
|
+
| Design & Spec | 2h |
|
|
113
|
+
| Implementation | 6h |
|
|
114
|
+
| Testing | 2h |
|
|
115
|
+
| **Total** | **10h** |
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Questions & Clarifications
|
|
120
|
+
|
|
121
|
+
1. Maximum file size: 10MB or higher for pro users?
|
|
122
|
+
2. Should processed photos be kept indefinitely or expire after 30 days?
|
|
123
|
+
3. Does the AI API support async webhooks or only polling?
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Next Steps
|
|
128
|
+
|
|
129
|
+
Once approved:
|
|
130
|
+
1. Create detailed `spec.md` with technical design
|
|
131
|
+
2. Define contracts in `contracts.cs`
|
|
132
|
+
3. Record decisions in `decisions.md`
|
|
133
|
+
4. Break down into `tasks.md`
|
|
134
|
+
5. Begin implementation
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
*MORPH-SPEC by Polymorphism Tech*
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: code-review
|
|
3
|
-
description:
|
|
4
|
-
Structured code review checklist for MORPH-SPEC projects covering architecture, standards compliance, contracts, and quality gates. Use after implementation to validate work.
|
|
3
|
+
description: .NET/C# code review checklist covering naming conventions, architecture layer integrity, async patterns, logging, error handling, DI lifetimes, and DTO contracts. Use after implementing .NET code, before creating PRs, or when reviewing C# code for compliance with MORPH-SPEC standards.
|
|
5
4
|
user-invocable: true
|
|
6
5
|
allowed-tools: Read, Write, Edit, Bash, Glob, Grep
|
|
7
6
|
---
|
|
@@ -12,6 +11,8 @@ allowed-tools: Read, Write, Edit, Bash, Glob, Grep
|
|
|
12
11
|
> **Ref:** `framework/standards/core/coding.md` for naming conventions and style.
|
|
13
12
|
> **Ref:** `framework/standards/core/architecture.md` for layer rules and SOLID.
|
|
14
13
|
> **Ref:** `framework/standards/backend/database/ef-core.md` for DbContext patterns and background ops.
|
|
14
|
+
> **Example:** `references/review-example.md` — filled-in review showing expected finding format and severity levels.
|
|
15
|
+
> **Script:** `scripts/scan-csharp.mjs` — automated scan for CRITICAL/HIGH violations before manual review.
|
|
15
16
|
|
|
16
17
|
---
|
|
17
18
|
|