@polymorphism-tech/morph-spec 8.46.0 → 9.0.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 +53 -44
- package/README.md +3 -4
- package/bin/morph-spec.js +38 -55
- package/bin/validate.js +5 -134
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +2 -2
- package/docs/QUICKSTART.md +1 -1
- package/framework/CLAUDE.md +41 -101
- package/framework/MORPH.md +95 -252
- package/framework/agents.json +75 -18
- package/framework/commands/create-umbraco-lp.md +2 -0
- package/framework/commands/migrate-lp-to-umbraco.md +2 -0
- package/framework/commands/morph-apply.md +5 -28
- package/framework/commands/morph-archive.md +2 -2
- package/framework/commands/morph-hotfix.md +8 -8
- package/framework/commands/morph-infra.md +17 -203
- package/framework/commands/morph-media.md +3 -0
- package/framework/commands/morph-preflight.md +7 -31
- package/framework/commands/morph-proposal.md +2 -50
- package/framework/commands/morph-status.md +3 -3
- package/framework/commands/morph-troubleshoot.md +2 -14
- package/framework/docs/CLI.md +585 -286
- package/framework/evals/review-checklist.md +82 -41
- package/framework/hooks/README.md +10 -11
- package/framework/hooks/claude-code/core/comment-guard.js +1 -1
- package/framework/hooks/claude-code/core/denylist.json +33 -3
- package/framework/hooks/claude-code/core/enforce-phase-writes.js +16 -20
- package/framework/hooks/claude-code/core/gate-guard.js +2 -11
- package/framework/hooks/claude-code/core/pre-bash-denylist.js +38 -0
- package/framework/hooks/claude-code/core/protect-spec-files.js +30 -242
- package/framework/hooks/claude-code/core/state-sync.js +17 -19
- package/framework/hooks/claude-code/core/telemetry-log.js +3 -3
- package/framework/hooks/claude-code/core/validate-completion.js +33 -97
- package/framework/hooks/claude-code/core/warn-bash-source-write.js +31 -0
- package/framework/hooks/claude-code/core/worktree-context.js +5 -4
- package/framework/hooks/claude-code/statusline.py +55 -41
- package/framework/hooks/package.json +3 -0
- package/framework/hooks/shared/activity-logger.js +1 -1
- package/framework/hooks/shared/build-check.js +10 -6
- package/framework/hooks/shared/command-tokens.js +169 -0
- package/framework/hooks/shared/comment-rules.js +1 -1
- package/framework/hooks/shared/comment-scanner.js +10 -23
- package/framework/hooks/shared/comment-stripper.js +1 -1
- package/framework/hooks/shared/e2e-check.js +67 -31
- package/framework/hooks/shared/errata.js +72 -0
- package/framework/hooks/shared/feature-locator.js +1 -1
- package/framework/hooks/shared/frontend-locations.js +6 -0
- package/framework/hooks/shared/gate-question.js +18 -0
- package/framework/hooks/shared/phase-utils.js +15 -32
- package/framework/hooks/shared/slice-progress.js +118 -0
- package/framework/hooks/shared/spawn-command.js +23 -0
- package/framework/hooks/shared/state-reader.js +61 -87
- package/framework/hooks/shared/state-writer.js +3 -3
- package/framework/mcp/registry.json +3 -4
- package/framework/phases.json +23 -39
- package/framework/rules/ai-agents-standards.md +18 -16
- package/framework/rules/asaas-standards.md +3 -1
- package/framework/rules/csharp-standards.md +10 -8
- package/framework/rules/data-standards.md +5 -5
- package/framework/rules/dotnet-templates.md +1 -1
- package/framework/rules/frontend-standards.md +4 -2
- package/framework/rules/gsap-standards.md +10 -5
- package/framework/rules/hangfire-standards.md +3 -1
- package/framework/rules/infrastructure-standards.md +4 -2
- package/framework/rules/neon-auth-standards.md +3 -1
- package/framework/rules/neon-standards.md +6 -4
- package/framework/rules/nextjs-standards.md +13 -11
- package/framework/rules/nextjs-templates.md +1 -1
- package/framework/rules/resend-standards.md +3 -1
- package/framework/schemas/config.schema.json +14 -9
- package/framework/schemas/feature.schema.json +15 -52
- package/framework/skills/README.md +4 -5
- package/framework/skills/core/create-umbraco-lp/SKILL.md +3 -3
- package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +3 -3
- package/framework/skills/core/morph-apply/SKILL.md +150 -223
- package/framework/skills/core/morph-hotfix/SKILL.md +34 -43
- package/framework/skills/core/morph-machine/SKILL.md +4 -4
- package/framework/skills/core/morph-media/SKILL.md +3 -3
- package/framework/skills/core/morph-plan/SKILL.md +138 -300
- package/framework/skills/core/morph-review/SKILL.md +112 -137
- package/framework/skills/core/morph-standards/SKILL.md +29 -41
- package/framework/skills/core/morph-uiux/SKILL.md +78 -153
- package/framework/standards/STANDARDS.json +90 -1219
- package/framework/standards/STANDARDS.meta.json +1305 -0
- package/framework/standards/ai-agents/evals-with-cache.md +2 -3
- package/framework/standards/ai-agents/llm-runtime-defaults.md +1 -1
- package/framework/standards/ai-agents/modalities-speech-to-text.md +36 -26
- package/framework/standards/ai-agents/prompt-sources.md +6 -4
- package/framework/standards/ai-agents/providers/model-registry.md +1 -1
- package/framework/standards/ai-agents/rag-custom-pgvector.md +67 -39
- package/framework/standards/ai-agents/setup.md +2 -2
- package/framework/standards/ai-agents/structured-output.md +1 -1
- package/framework/standards/ai-agents/sweet-spot.md +1 -1
- package/framework/standards/architecture/code-comments.md +8 -8
- package/framework/standards/architecture/vertical-slice/vertical-slice.md +18 -9
- package/framework/standards/backend/api/validation.md +135 -47
- package/framework/standards/backend/database/postgresql/database.md +11 -7
- package/framework/standards/backend/database/vector-search-rag.md +207 -324
- package/framework/standards/backend/dotnet/fluent-validation-vsa.md +14 -8
- package/framework/standards/backend/dotnet/result-pattern.md +40 -6
- package/framework/standards/backend/dotnet/scalar-ui.md +13 -7
- package/framework/standards/backend/dotnet/scrutor.md +1 -1
- package/framework/standards/backend/dotnet/testing.md +1 -1
- package/framework/standards/backend/dotnet/vsa-handler-patterns.md +7 -7
- package/framework/standards/backend/integrations/asaas/asaas-api.md +309 -165
- package/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +134 -154
- package/framework/standards/data/nosql/cache/redis.md +120 -44
- package/framework/standards/data/nosql/cosmos-db.md +114 -71
- package/framework/standards/frontend/design-system/animations.md +1 -1
- package/framework/standards/frontend/design-system/naming.md +1 -1
- package/framework/standards/frontend/nextjs/motion-patterns.md +45 -29
- package/framework/standards/frontend/nextjs/naming-conventions.md +1 -1
- package/framework/standards/infrastructure/docker/coolify-deploy.md +8 -6
- package/framework/standards/infrastructure/neon/neon-pgvector.md +120 -75
- package/framework/standards/infrastructure/neon/neon-setup.md +53 -31
- package/framework/standards/integration/mcp/mcp-tools.md +7 -7
- package/framework/templates/README.md +2 -3
- package/framework/templates/REGISTRY.json +6 -170
- package/framework/templates/code/dotnet/contracts/contracts-vsa.cs +2 -2
- package/framework/templates/code/dotnet/extensions/database-extensions.cs +1 -1
- package/framework/templates/code/dotnet/extensions/result-extensions.cs +27 -0
- package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +2 -2
- package/framework/templates/docs/plan.md +72 -0
- package/framework/templates/dotnet/ai-kit/README.md +1 -9
- package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/MediaDisclosureTests.cs +1 -1
- package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Morph.AiKit.Tests.csproj +0 -10
- package/framework/templates/infrastructure/docker/coolify.template.json +3 -3
- package/framework/templates/infrastructure/github/README.md +2 -1
- package/framework/templates/infrastructure/github/workflows/deploy-coolify.yml.hbs +2 -1
- package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +1 -1
- package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +1 -1
- package/framework/templates/meta-prompts/squad-leaders/squad-leader.md +1 -1
- package/framework/templates/meta-prompts/validators/pre-commit-validator.md +3 -4
- package/package.json +1 -1
- package/src/commands/e2e/e2e.js +2 -2
- package/src/commands/observability/cost.js +18 -60
- package/src/commands/observability/telemetry.js +3 -5
- package/src/commands/project/doctor-procs.js +1 -1
- package/src/commands/project/doctor.js +9 -9
- package/src/commands/project/fleet.js +4 -4
- package/src/commands/project/heavy.js +3 -3
- package/src/commands/project/init.js +6 -1
- package/src/commands/project/setup-infra-cmd.js +2 -1
- package/src/commands/project/stack-scan.js +58 -0
- package/src/commands/project/standards.js +79 -25
- package/src/commands/project/status.js +29 -69
- package/src/commands/project/update.js +33 -19
- package/src/commands/project/worktree.js +1 -1
- package/src/commands/state/advance.js +62 -46
- package/src/commands/state/approve.js +95 -138
- package/src/commands/state/archive.js +20 -84
- package/src/commands/state/auto-approval.js +68 -0
- package/src/commands/state/create.js +28 -1
- package/src/commands/state/delete.js +1 -1
- package/src/commands/state/finish.js +11 -23
- package/src/commands/state/gate-check.js +86 -95
- package/src/commands/state/gate-decision.js +6 -4
- package/src/commands/state/handoff.js +1 -1
- package/src/commands/state/list.js +9 -9
- package/src/commands/state/report-check.js +157 -311
- package/src/commands/state/retype.js +9 -3
- package/src/commands/validation/mutate.js +77 -14
- package/src/commands/validation/plan-check.js +81 -0
- package/src/commands/validation/validate-feature.js +60 -135
- package/src/commands/validation/verify.js +41 -82
- package/src/core/paths/output-schema.js +20 -67
- package/src/core/state/gate-order.js +5 -6
- package/src/core/state/lifecycle-audit.js +2 -2
- package/src/core/state/state-manager.js +17 -98
- package/src/core/templates/template-registry.js +2 -2
- package/src/core/templates/template-seed.js +22 -0
- package/src/core/work-types.js +10 -10
- package/src/dashboard/app/App.jsx +0 -2
- package/src/dashboard/app/components/ActivityFeed.jsx +2 -3
- package/src/dashboard/app/components/CommandPalette.jsx +7 -8
- package/src/dashboard/app/components/EntityLink.jsx +1 -2
- package/src/dashboard/app/components/Markdown.jsx +1 -1
- package/src/dashboard/app/components/Sidebar.jsx +1 -2
- package/src/dashboard/app/hooks/useMorphQuery.js +1 -1
- package/src/dashboard/app/lib/phases.js +2 -4
- package/src/dashboard/app/pages/Activity.jsx +1 -1
- package/src/dashboard/app/pages/FeatureDetail.jsx +139 -129
- package/src/dashboard/app/pages/Features.jsx +9 -9
- package/src/dashboard/app/pages/Guide.jsx +2 -2
- package/src/dashboard/app/pages/PhasePipeline.jsx +3 -4
- package/src/dashboard/app/pages/RulesMap.jsx +3 -3
- package/src/dashboard/app/pages/SkillsLibrary.jsx +3 -3
- package/src/dashboard/app/pages/Standards.jsx +1 -1
- package/src/dashboard/scanner/activity-scanner.js +6 -16
- package/src/dashboard/scanner/agents-scanner.js +1 -1
- package/src/dashboard/scanner/docs-scanner.js +5 -23
- package/src/dashboard/scanner/features-scanner.js +95 -60
- package/src/dashboard/scanner/index.js +0 -2
- package/src/dashboard/scanner/project-api.js +1 -1
- package/src/dashboard/scanner/rules-scanner.js +15 -10
- package/src/dashboard/scanner/skills-scanner.js +2 -3
- package/src/dashboard/scanner/standards-scanner.js +2 -1
- package/src/lib/ci/ci-verify.js +17 -1
- package/src/lib/ci/github-ci.js +1 -1
- package/src/lib/detectors/index.js +3 -8
- package/src/lib/generators/handoff-generator.js +34 -65
- package/src/lib/generators/settings-generator.js +11 -89
- package/src/lib/git/evidence-staleness.js +1 -1
- package/src/lib/git/tree-fingerprint.js +19 -7
- package/src/lib/git/tree-state.js +2 -2
- package/src/lib/heavy/cleanup.js +1 -5
- package/src/lib/installers/memory-installer.js +6 -8
- package/src/lib/mutation/commands.js +3 -2
- package/src/lib/{tasks/dotnet-test-introspection.js → mutation/dotnet-introspection.js} +17 -282
- package/src/lib/mutation/plan.js +14 -6
- package/src/lib/mutation/runner.js +1 -1
- package/src/lib/mutation/subset.js +46 -9
- package/src/lib/plan/artifact-vocabulary.js +60 -0
- package/src/lib/plan/checks.js +234 -0
- package/src/lib/plan/plan-parser.js +209 -0
- package/src/lib/plan/plan-template.js +18 -0
- package/src/lib/review-reports.js +222 -0
- package/src/lib/risk-detector.js +134 -135
- package/src/lib/specs/adr-index.js +50 -69
- package/src/lib/specs/design-seed.js +18 -0
- package/src/lib/specs/frontmatter.js +44 -0
- package/src/lib/specs/gfm-table.js +17 -0
- package/src/lib/specs/old-format.js +68 -0
- package/src/lib/specs/revocations.js +37 -95
- package/src/lib/specs/screen-checklist.js +18 -17
- package/src/lib/stack/dotnet-build-ignores.js +47 -0
- package/src/lib/stack/stack-profile.js +1 -1
- package/src/lib/stack/stack-scan.js +267 -0
- package/src/lib/standards/registry.js +43 -0
- package/src/lib/standards/sections.js +58 -0
- package/src/lib/tasks/eval-node.js +4 -12
- package/src/lib/tasks/test-nodes.js +1 -74
- package/src/lib/tasks/test-runner.js +75 -117
- package/src/lib/telemetry/metrics.js +8 -69
- package/src/lib/telemetry/telemetry-reader.js +5 -118
- package/src/lib/telemetry/verify-event.js +5 -7
- package/src/lib/validators/code-budget/code-budget-validator.js +1 -1
- package/src/lib/validators/contracts/contract-compliance-validator.js +2 -2
- package/src/lib/validators/reuse/reuse-validator.js +24 -48
- package/src/lib/validators/reuse/symbol-scanner.js +2 -4
- package/src/lib/validators/traceability-check.js +85 -129
- package/src/lib/validators/validation-runner.js +8 -88
- package/src/lib/validators/verify-runner.js +134 -301
- package/src/lib/worktree/docker-audit.js +1 -2
- package/src/lib/worktree/fleet-scanner.js +25 -38
- package/src/scripts/setup-infra.js +42 -22
- package/src/utils/agents-installer.js +92 -13
- package/src/utils/claude-settings-manager.js +0 -35
- package/src/utils/file-copier.js +34 -6
- package/src/utils/hooks-installer.js +16 -9
- package/src/utils/skills-installer.js +1 -2
- package/framework/commands/commit.md +0 -166
- package/framework/evals/trace-schema.md +0 -67
- package/framework/hooks/claude-code/core/tasks-json-guard.js +0 -83
- package/framework/hooks/claude-code/core/trace-autogen.js +0 -277
- package/framework/hooks/git/pre-commit/specs.sh +0 -50
- package/framework/hooks/shared/tasks-validator.js +0 -111
- package/framework/rubrics/backend.json +0 -41
- package/framework/rubrics/default.json +0 -36
- package/framework/rubrics/frontend.json +0 -36
- package/framework/rules/morph-task-tracking.md +0 -54
- package/framework/rules/morph-workflow.md +0 -244
- package/framework/schemas/tasks.schema.json +0 -79
- package/framework/skills/core/morph-brainstorming/SKILL.md +0 -161
- package/framework/skills/core/morph-implement/SKILL.md +0 -194
- package/framework/skills/core/morph-proposal/SKILL.md +0 -152
- package/framework/skills/core/morph-stack-scan/SKILL.md +0 -145
- package/framework/templates/docs/proposal.md +0 -192
- package/framework/templates/docs/spec.md +0 -57
- package/framework/templates/docs/ui-components.md +0 -52
- package/framework/templates/docs/ui-design-system.md +0 -76
- package/framework/templates/docs/ui-flows.md +0 -167
- package/framework/templates/examples/spec-examples.md +0 -91
- package/framework/templates/feature/decisions.md +0 -124
- package/framework/templates/feature/recap.md +0 -145
- package/framework/templates/project/validate.js +0 -97
- package/framework/templates/tasks.template.json +0 -17
- package/src/commands/state/usecase.js +0 -143
- package/src/commands/tasks/dag.js +0 -181
- package/src/dashboard/app/pages/Rubrics.jsx +0 -97
- package/src/dashboard/scanner/rubrics-scanner.js +0 -12
- package/src/lib/agents/output-collector.js +0 -76
- package/src/lib/evaluator-report.js +0 -91
- package/src/lib/specs/acervo-format.js +0 -70
- package/src/lib/specs/acervo-lifecycle.js +0 -264
- package/src/lib/specs/done-criteria-check.js +0 -200
- package/src/lib/specs/usecase-check.js +0 -301
- package/src/lib/specs/usecase-promoter.js +0 -301
- package/src/lib/specs/usecase-registry.js +0 -237
- package/src/lib/tasks/dispatch-planner.js +0 -319
- package/src/lib/tasks/mermaid-renderer.js +0 -132
- package/src/lib/tasks/task-classifier.js +0 -30
- package/src/lib/tasks/task-parser.js +0 -209
- package/src/lib/tasks/tasks-json-parser.js +0 -296
- package/src/lib/tasks/test-scope.js +0 -597
- package/src/lib/validators/architecture/architecture-validator.js +0 -270
- package/src/lib/validators/architecture/index.js +0 -7
- package/src/lib/validators/css/css-validator.js +0 -340
- package/src/lib/validators/css/index.js +0 -7
- package/src/lib/validators/design-system/design-system-validator.js +0 -237
- package/src/lib/validators/design-system/index.js +0 -7
- package/src/lib/validators/score-aggregator.js +0 -244
- package/src/lib/validators/ui/index.js +0 -7
- package/src/lib/validators/ui/ui-contrast-validator.js +0 -422
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: morph-stack-scan
|
|
3
|
-
description: Varre o codebase existente, detecta stack atual, compara com o stack padrão e registra desvios em stack-scan.md
|
|
4
|
-
version: core
|
|
5
|
-
when-to-invoke: ao iniciar uma feature em projeto brownfield (codebase já existente)
|
|
6
|
-
user-invokable: true
|
|
7
|
-
cliVersion: "8.46.0"
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# morph-stack-scan
|
|
11
|
-
|
|
12
|
-
## Objetivo
|
|
13
|
-
Identificar o estado real do codebase antes de planejar qualquer feature — garantindo que a implementação não adicione inconsistência a um projeto já existente.
|
|
14
|
-
|
|
15
|
-
## Quando invocar
|
|
16
|
-
Quando o projeto já tem código existente e você precisa entender o estado atual antes de propor uma feature. Normalmente invocado pelo morph-brainstorming, mas pode ser invocado diretamente.
|
|
17
|
-
|
|
18
|
-
## Stack padrão de referência
|
|
19
|
-
|
|
20
|
-
O "Esperado" da comparação do passo 2 é o stack baked-in (runtime .NET 10 + VSA, EF Core/Neon, `Guid.CreateVersion7()`, `sealed`, result pattern, MAF, Next.js/Tailwind/Shadcn, Hangfire) e a lista de padrões proibidos (`Guid.NewGuid()`, classes não-sealed, Service/Manager layer, repository genérico, SQL cru sem justificativa) — regra canônica em `MORPH.md` § "Stack baked-in". Os templates de `stack-scan.md` abaixo (greenfield e brownfield) escrevem essa lista por extenso no artefato da feature, para que quem ler o `stack-scan.md` depois não precise reabrir o `MORPH.md`.
|
|
21
|
-
|
|
22
|
-
## Greenfield short-circuit
|
|
23
|
-
|
|
24
|
-
Antes de despachar Explore, verifique se o projeto é greenfield:
|
|
25
|
-
|
|
26
|
-
1. Use `Glob` para detectar presença de qualquer um destes:
|
|
27
|
-
- `**/*.csproj`
|
|
28
|
-
- `**/*.sln`
|
|
29
|
-
- `package.json` (na raiz)
|
|
30
|
-
- `src/**/*.cs` ou `src/**/*.ts` ou `src/**/*.tsx`
|
|
31
|
-
- `migrations/**/*`
|
|
32
|
-
|
|
33
|
-
2. Se **nenhum** for encontrado, o projeto é greenfield. Produza este `stack-scan.md` em `.morph/features/{feature}/0-proposal/` e retorne sem chamar Explore:
|
|
34
|
-
|
|
35
|
-
```markdown
|
|
36
|
-
# Stack Scan — {feature}
|
|
37
|
-
|
|
38
|
-
**Status:** GREENFIELD (sem código source detectado)
|
|
39
|
-
|
|
40
|
-
## Stack
|
|
41
|
-
Project empty. Aplicar stack padrão de MORPH.md:
|
|
42
|
-
- Backend: .NET 10 + VSA + EF Core + Neon
|
|
43
|
-
- Frontend: Next.js App Router + Tailwind + Shadcn + Framer Motion
|
|
44
|
-
- IA: MAF (quando aplicável à feature)
|
|
45
|
-
- Jobs: Hangfire (apenas se necessário)
|
|
46
|
-
|
|
47
|
-
## Padrões obrigatórios
|
|
48
|
-
- IDs: `Guid.CreateVersion7()`
|
|
49
|
-
- Classes: `sealed` por padrão
|
|
50
|
-
- Erros: Result pattern (`result.Match()`)
|
|
51
|
-
|
|
52
|
-
## Padrões proibidos
|
|
53
|
-
`Guid.NewGuid()`, classes não-sealed sem justificativa, exceptions como fluxo de controle, camada de Service/Manager entre handler e dados, repository genérico (`IRepository<T>`/`IUnitOfWork`), SQL cru sem justificativa. Acesso a dados em VSA: `ApplicationDbContext` direto no slice (`DbSet<T>` já é repository, `DbContext` já é unit of work); para concorrência ou SQL específico, store dedicado hand-written com justificativa em `decisions.md`.
|
|
54
|
-
|
|
55
|
-
## Recomendação
|
|
56
|
-
Compliance trivial (greenfield). Prosseguir para morph-brainstorming.
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
3. Se algum dos arquivos foi encontrado, o projeto é brownfield — siga para o passo seguinte.
|
|
60
|
-
|
|
61
|
-
## O que fazer (brownfield)
|
|
62
|
-
|
|
63
|
-
0. **Se houver grafo, ele responde a pergunta do repository genérico melhor que o grep.**
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
morph-spec graph status --json # available:false? pule este passo
|
|
67
|
-
morph-spec graph affected IRepository --uses-only --json
|
|
68
|
-
morph-spec graph explain IRepository --json # o registro no DI aparece aqui
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
A pergunta do passo 1 é *"quantos CONSUMIDORES REAIS"*, e é exatamente aí que o grep erra: no ProspectPRO ele aponta **23 arquivos**, mas 20 são interfaces filhas **herdando** o contrato e só **2** são uso real. Quem lê 23 conclui "está em uso, não é código morto" — e a conclusão certa é a oposta. `--uses-only` exclui `inherits`/`implements`/`extends` e devolve os 2. O `explain` do mesmo símbolo entrega de brinde a outra metade da pergunta: onde ele está registrado no DI.
|
|
72
|
-
|
|
73
|
-
**Fallback:** grafo ausente (`no-graph`), símbolo não encontrado ou ambíguo — siga com o `Explore` e o grep do passo 1, e **registre no `stack-scan.md` que a contagem veio do grep**, que superestima consumidores por não separar herança de uso.
|
|
74
|
-
|
|
75
|
-
1. Despache um `Explore` subagent para varrer o codebase:
|
|
76
|
-
|
|
77
|
-
```
|
|
78
|
-
Varredura de stack compliance — morph-stack-scan.
|
|
79
|
-
|
|
80
|
-
Leia os seguintes arquivos/pastas e reporte o que encontrar:
|
|
81
|
-
|
|
82
|
-
BACKEND:
|
|
83
|
-
- Todos os .csproj: qual TargetFramework? Quais PackageReferences relevantes?
|
|
84
|
-
- Procure por: Guid.NewGuid() vs Guid.CreateVersion7(), sealed classes, result pattern vs exceptions
|
|
85
|
-
- Estrutura de src/: segue feature-folder (VSA)? Tem Controllers? Tem repository genérico (IRepository<T>/IUnitOfWork)? Se tiver, reporte como código morto: liste onde está registrado no DI e quantos consumidores reais existem em src/ e tests/
|
|
86
|
-
- Migrations/: qual ORM? Neon/Postgres ou outro banco?
|
|
87
|
-
- Microsoft.Agents.* ou Microsoft.Extensions.AI nos PackageReferences?
|
|
88
|
-
|
|
89
|
-
FRONTEND:
|
|
90
|
-
- package.json: Next.js? Tailwind? Framer Motion? Shadcn/ui?
|
|
91
|
-
- Estrutura de app/ ou pages/: App Router ou Pages Router?
|
|
92
|
-
|
|
93
|
-
JOBS:
|
|
94
|
-
- Hangfire nos PackageReferences?
|
|
95
|
-
|
|
96
|
-
Para cada item acima, responda: presente/ausente, e se presente qual versão ou padrão.
|
|
97
|
-
Não faça sugestões — apenas reporte o que existe.
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
2. Com os resultados da varredura, compare com o stack padrão item por item e classifique cada desvio:
|
|
101
|
-
|
|
102
|
-
| Severidade | Critério |
|
|
103
|
-
|------------|---------|
|
|
104
|
-
| **Bloqueante** | Runtime diferente (.NET 8 ou anterior), ORM diferente (Dapper puro sem EF Core), banco diferente (MySQL, SQL Server) |
|
|
105
|
-
| **Alto** | `Guid.NewGuid()` generalizado, camada de Service/Manager entre handler e dados, repository genérico (`IRepository<T>`/`IUnitOfWork`) presente — código morto: migração é deletar a pasta `Repository/` + as 2 linhas de DI, SQL cru generalizado, exceptions como fluxo de controle |
|
|
106
|
-
| **Médio** | Classes não-sealed, Pages Router em vez de App Router, biblioteca de UI diferente |
|
|
107
|
-
| **Baixo** | Versões de pacotes desatualizadas mas compatíveis |
|
|
108
|
-
|
|
109
|
-
3. Produza `stack-scan.md` em `.morph/features/{feature}/0-proposal/`:
|
|
110
|
-
|
|
111
|
-
```markdown
|
|
112
|
-
# Stack Scan — {feature}
|
|
113
|
-
|
|
114
|
-
## Resultado
|
|
115
|
-
{Em compliance / Desvios detectados}
|
|
116
|
-
|
|
117
|
-
## Stack detectado
|
|
118
|
-
| Camada | Detectado | Esperado | Status |
|
|
119
|
-
|--------|-----------|----------|--------|
|
|
120
|
-
| Runtime | .NET X | .NET 10 | ✓ / ✗ |
|
|
121
|
-
...
|
|
122
|
-
|
|
123
|
-
## Desvios (ordenados por severidade)
|
|
124
|
-
### Bloqueantes
|
|
125
|
-
- {desvio}: {onde foi encontrado} — impacto: {o que quebra se não migrar} — esforço: {estimativa}
|
|
126
|
-
|
|
127
|
-
### Não bloqueantes
|
|
128
|
-
- {desvio}: {onde foi encontrado} — migração: {como resolver} — esforço: {estimativa}
|
|
129
|
-
|
|
130
|
-
## Recomendação
|
|
131
|
-
{Em compliance — prosseguir para morph-brainstorming}
|
|
132
|
-
{ou: Migração necessária antes de prosseguir — ver Desvios acima}
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
4. Se houver desvios bloqueantes ou altos, pergunte via `AskUserQuestion`: "Esta migração deve ser incluída na feature atual ou tratada numa feature separada?" A resposta é decisão humana — registre-a na seção "Compliance de stack" do `proposal.md` (produzido pela `morph-brainstorming`), não num artefato novo: a lista de desvios com impacto/esforço já vive no `stack-scan.md` acima.
|
|
136
|
-
|
|
137
|
-
5. Se não houver desvios (ou apenas baixos): informe "codebase em compliance com o stack padrão" e prossiga para morph-brainstorming ou morph-plan conforme o contexto.
|
|
138
|
-
|
|
139
|
-
## Output esperado
|
|
140
|
-
- `.morph/features/{feature}/0-proposal/stack-scan.md` — resultado da varredura, com desvios ordenados por severidade e esforço estimado
|
|
141
|
-
- Decisão documentada: incluir migração nesta feature ou separar (registrada no proposal.md pela morph-brainstorming)
|
|
142
|
-
|
|
143
|
-
## Referências
|
|
144
|
-
- `.morph/framework/MORPH.md` — seção 4 (Standards), seção 2 (Fases)
|
|
145
|
-
- `.claude/skills/morph-brainstorming/SKILL.md` — fluxo greenfield/brownfield
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
# Feature Proposal: {{titleCase FEATURE_NAME}}
|
|
2
|
-
|
|
3
|
-
> Proposal for a new feature. This document describes WHAT and WHY.
|
|
4
|
-
> For technical details, see `spec.md`.
|
|
5
|
-
|
|
6
|
-
## Metadata
|
|
7
|
-
|
|
8
|
-
| Field | Value |
|
|
9
|
-
|-------|-------|
|
|
10
|
-
| **Proposed** | {{DATE}} |
|
|
11
|
-
| **Author** | {{AUTHOR}} |
|
|
12
|
-
| **Status** | Draft / Under Review / Approved / Rejected |
|
|
13
|
-
| **Priority** | High / Medium / Low |
|
|
14
|
-
{{#if STACK}}| **Stack** | {{STACK}} |{{/if}}
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## Overview
|
|
19
|
-
|
|
20
|
-
{Brief 2-3 sentence summary of the feature}
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## Acceptance Criteria
|
|
25
|
-
|
|
26
|
-
Verifiable conditions that mean this feature is done:
|
|
27
|
-
|
|
28
|
-
- [ ] {Criterion 1 — observable / testable}
|
|
29
|
-
- [ ] {Criterion 2}
|
|
30
|
-
- [ ] {Criterion 3}
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## Problem Statement
|
|
35
|
-
|
|
36
|
-
### What is the problem?
|
|
37
|
-
|
|
38
|
-
{Describe the problem this feature solves. Be specific.}
|
|
39
|
-
|
|
40
|
-
### Who is affected?
|
|
41
|
-
|
|
42
|
-
{Who suffers from this problem? End users? Developers? Operations?}
|
|
43
|
-
|
|
44
|
-
### What is the impact?
|
|
45
|
-
|
|
46
|
-
{What is the impact of NOT solving this problem?}
|
|
47
|
-
- User productivity loss: {X}
|
|
48
|
-
- Revenue/Cost impact: {X}
|
|
49
|
-
- User satisfaction: {X}
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
## Proposed Solution
|
|
54
|
-
|
|
55
|
-
### Overview
|
|
56
|
-
|
|
57
|
-
{Describe the proposed solution in 2-3 paragraphs}
|
|
58
|
-
|
|
59
|
-
### Key Features
|
|
60
|
-
|
|
61
|
-
1. **{Feature 1}** - {brief description}
|
|
62
|
-
2. **{Feature 2}** - {brief description}
|
|
63
|
-
3. **{Feature 3}** - {brief description}
|
|
64
|
-
|
|
65
|
-
{{#if (eq STACK "nextjs-neon")}}
|
|
66
|
-
### Technical Approach
|
|
67
|
-
|
|
68
|
-
| Layer | Technology | Role |
|
|
69
|
-
|-------|-----------|------|
|
|
70
|
-
| **Database** | Neon (PostgreSQL + RLS) | {tables, policies, storage} |
|
|
71
|
-
| **Backend API** | .NET 10 Minimal API | {endpoints, business logic} |
|
|
72
|
-
| **Frontend** | Next.js 15 (App Router) | {pages, components, auth} |
|
|
73
|
-
| **Infra** | Coolify + Docker | {deployment, SSL} |
|
|
74
|
-
{{/if}}
|
|
75
|
-
|
|
76
|
-
### User Journey
|
|
77
|
-
|
|
78
|
-
```
|
|
79
|
-
1. User {initial action}
|
|
80
|
-
2. System {response}
|
|
81
|
-
3. User {next action}
|
|
82
|
-
4. System {final result}
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
{{#if (eq STACK "nextjs-neon")}}
|
|
88
|
-
## Cost Estimate
|
|
89
|
-
|
|
90
|
-
| Resource | Provider | Monthly Cost | Notes |
|
|
91
|
-
|----------|----------|-------------|-------|
|
|
92
|
-
| Neon | Free / Launch | $0 - $19 | {DB, Connection Pooling, Branching} |
|
|
93
|
-
| VPS (Coolify) | {provider} | ${X} | {API + Web containers} |
|
|
94
|
-
| External APIs | {provider} | ${X} | {if applicable} |
|
|
95
|
-
| **Total** | | **${X}/month** | |
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
{{/if}}
|
|
100
|
-
## Success Metrics
|
|
101
|
-
|
|
102
|
-
How will we know this feature is successful?
|
|
103
|
-
|
|
104
|
-
| Metric | Current | Target |
|
|
105
|
-
|--------|---------|--------|
|
|
106
|
-
| {Metric 1} | {X} | {Y} |
|
|
107
|
-
| {Metric 2} | {X} | {Y} |
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
## Scope
|
|
112
|
-
|
|
113
|
-
### In Scope
|
|
114
|
-
|
|
115
|
-
- {Item 1 that is included}
|
|
116
|
-
- {Item 2 that is included}
|
|
117
|
-
- {Item 3 that is included}
|
|
118
|
-
|
|
119
|
-
### Out of Scope
|
|
120
|
-
|
|
121
|
-
- {Item 1 that is NOT included}
|
|
122
|
-
- {Item 2 that is NOT included}
|
|
123
|
-
|
|
124
|
-
### Future Considerations
|
|
125
|
-
|
|
126
|
-
- {Item that could be added later}
|
|
127
|
-
|
|
128
|
-
---
|
|
129
|
-
|
|
130
|
-
## Risks & Concerns
|
|
131
|
-
|
|
132
|
-
| Risk | Likelihood | Impact | Mitigation |
|
|
133
|
-
|------|------------|--------|------------|
|
|
134
|
-
| {Risk 1} | High/Med/Low | High/Med/Low | {mitigation strategy} |
|
|
135
|
-
| {Risk 2} | High/Med/Low | High/Med/Low | {mitigation strategy} |
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## Conflitos com o acervo
|
|
140
|
-
|
|
141
|
-
UCs (`.morph/specs/usecases/`), ADRs ativos (`.morph/specs/adrs/`) and `.morph/context/*.md` that
|
|
142
|
-
this request contradicts. `Nenhum conflito encontrado.` when there is none — the section is always present.
|
|
143
|
-
|
|
144
|
-
| Fonte | O que diz hoje | O que o pedido muda | Decisão |
|
|
145
|
-
|-------|----------------|---------------------|---------|
|
|
146
|
-
| {UC-133} | {Public Sans + Lora em toda a interface} | {admin passa a Geist} | {vale o novo no admin; a vitrine mantém o antigo — decisions.md ADR-001} |
|
|
147
|
-
|
|
148
|
-
---
|
|
149
|
-
|
|
150
|
-
## Dependencies
|
|
151
|
-
|
|
152
|
-
- [ ] {Dependency 1} - {status}
|
|
153
|
-
- [ ] {Dependency 2} - {status}
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## Estimated Effort
|
|
158
|
-
|
|
159
|
-
| Phase | Estimate |
|
|
160
|
-
|-------|----------|
|
|
161
|
-
| Design & Spec | {X}h |
|
|
162
|
-
{{#if (eq STACK "nextjs-neon")}}| Database & Migrations | {X}h |
|
|
163
|
-
| Backend API | {X}h |
|
|
164
|
-
| Frontend | {X}h |
|
|
165
|
-
{{else}}| Implementation | {X}h |
|
|
166
|
-
{{/if}}| Testing | {X}h |
|
|
167
|
-
| **Total** | **{X}h** |
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
|
-
## Questions & Clarifications
|
|
172
|
-
|
|
173
|
-
1. {Question 1 that needs answering}
|
|
174
|
-
2. {Question 2 that needs answering}
|
|
175
|
-
|
|
176
|
-
---
|
|
177
|
-
|
|
178
|
-
## Next Steps
|
|
179
|
-
|
|
180
|
-
Once approved:
|
|
181
|
-
1. Create detailed `spec.md` with technical design
|
|
182
|
-
{{#if (eq STACK "nextjs-neon")}}2. Define contracts (`contracts.cs` + `contracts.ts`)
|
|
183
|
-
3. Record decisions in `decisions.md`
|
|
184
|
-
4. Break down into `tasks.json`
|
|
185
|
-
5. Begin implementation
|
|
186
|
-
{{else}}2. Break down into `tasks.json`
|
|
187
|
-
3. Begin implementation
|
|
188
|
-
{{/if}}
|
|
189
|
-
|
|
190
|
-
---
|
|
191
|
-
|
|
192
|
-
*Created with MORPH Framework*
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# Feature Specification: {{titleCase FEATURE_NAME}}
|
|
2
|
-
|
|
3
|
-
| Field | Value |
|
|
4
|
-
|-------|-------|
|
|
5
|
-
| **ID** | {{FEATURE_NAME}} |
|
|
6
|
-
| **Created** | {{DATE}} |
|
|
7
|
-
| **Stack** | {{STACK}} |
|
|
8
|
-
|
|
9
|
-
> Behavior lives in the use cases (`2-plan/usecases/UC-*.md`). This file says HOW they are realized —
|
|
10
|
-
> do not repeat postconditions here.
|
|
11
|
-
|
|
12
|
-
## Architecture
|
|
13
|
-
|
|
14
|
-
{Components, how they connect, main data flows. Enough to implement without basic questions.}
|
|
15
|
-
|
|
16
|
-
### Data Model
|
|
17
|
-
|
|
18
|
-
| Entity | Field | Type | Notes |
|
|
19
|
-
|--------|-------|------|-------|
|
|
20
|
-
| {Entity} | {field} | {type} | {constraint, index, relation} |
|
|
21
|
-
|
|
22
|
-
### Contracts
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
{METHOD} /api/{route}
|
|
26
|
-
Request: { ... }
|
|
27
|
-
Response: { ... } | ProblemDetails 400/404/409
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## Technical edge cases
|
|
31
|
-
|
|
32
|
-
- {Edge case} → {how it is handled}
|
|
33
|
-
|
|
34
|
-
## UCs e ADRs que esta feature altera ou revoga
|
|
35
|
-
|
|
36
|
-
> Read by `morph-spec finish`: in the archive commit, each row marks the project acervo — a UC turns
|
|
37
|
-
> `status: superseded` + `superseded_by` (+ `scope` when partial); an ADR leaves `.morph/specs/adrs/`
|
|
38
|
-
> (total) or keeps its file with the scope where it still holds (partial). Columns are positional.
|
|
39
|
-
> `morph-spec usecase check {feature}` reports a bad row while this file can still change (it freezes at Gate 2).
|
|
40
|
-
> Nothing revoked → replace the table with `Nenhum.`
|
|
41
|
-
|
|
42
|
-
| Id | Mudança | Substituto | Escopo em que o antigo ainda vale |
|
|
43
|
-
|----|---------|------------|-----------------------------------|
|
|
44
|
-
| UC-{nn} | parcial | UC-{nn} | {where the old one still holds} |
|
|
45
|
-
| {feature}/ADR-{nnn} | total | — | — |
|
|
46
|
-
|
|
47
|
-
## Contrato de implementação
|
|
48
|
-
|
|
49
|
-
- **Standards:** {ids from `morph-spec standards --find`, plus `architecture-code-comments` and the stack's test standard}
|
|
50
|
-
- **Proibições desta feature:** {beyond MORPH.md "Stack baked-in", or "nenhuma"}
|
|
51
|
-
- **Verificação de runtime:** {how the stack comes up (`morph-spec e2e up {feature}`), which flows the evaluator navigates, which become Playwright specs, auth setup — or why it does not apply}
|
|
52
|
-
- **Baseline:** {the COMMAND that measures it — `dotnet test`, `npm test` — never a number}
|
|
53
|
-
- **Pré-requisito:** {a PREDICATE — `git merge-base --is-ancestor origin/main HEAD` exits 0 — never a SHA}
|
|
54
|
-
|
|
55
|
-
## Out of Scope
|
|
56
|
-
|
|
57
|
-
- {Item}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
# UI Components: {{titleCase FEATURE_NAME}}
|
|
2
|
-
|
|
3
|
-
| Field | Value |
|
|
4
|
-
|-------|-------|
|
|
5
|
-
| **Feature** | {{FEATURE_NAME}} |
|
|
6
|
-
| **Created** | {{DATE}} |
|
|
7
|
-
| **Stack** | {{STACK}} |
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
{{#if (eq STACK "nextjs-neon")}}
|
|
12
|
-
## Component Library: shadcn/ui
|
|
13
|
-
|
|
14
|
-
### C001: Button
|
|
15
|
-
|
|
16
|
-
```tsx
|
|
17
|
-
import { Button } from '@/components/ui/button';
|
|
18
|
-
|
|
19
|
-
<Button onClick={handleSave} disabled={!isValid}>
|
|
20
|
-
Save
|
|
21
|
-
</Button>
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
### C002: Data Table
|
|
25
|
-
|
|
26
|
-
```tsx
|
|
27
|
-
import { DataTable } from '@/components/ui/data-table';
|
|
28
|
-
|
|
29
|
-
<DataTable columns={columns} data={items} />
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
{{/if}}
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
## Form Validation
|
|
37
|
-
|
|
38
|
-
| Field | Rule | Error Message |
|
|
39
|
-
|-------|------|---------------|
|
|
40
|
-
| **Name** | Required, max 100 | "Name is required" |
|
|
41
|
-
| **Email** | Valid email | "Invalid email" |
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## Accessibility
|
|
46
|
-
- [ ] All inputs have labels
|
|
47
|
-
- [ ] Error messages announced
|
|
48
|
-
- [ ] Keyboard navigation works
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
*Generated with MORPH Framework*
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
# UI Design System: {{titleCase FEATURE_NAME}}
|
|
2
|
-
|
|
3
|
-
| Field | Value |
|
|
4
|
-
|-------|-------|
|
|
5
|
-
| **Feature** | {{FEATURE_NAME}} |
|
|
6
|
-
| **Created** | {{DATE}} |
|
|
7
|
-
| **Project** | {{PROJECT_NAME}} |
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Color Palette
|
|
12
|
-
|
|
13
|
-
### Primary Colors
|
|
14
|
-
| Token | Value | Usage |
|
|
15
|
-
|-------|-------|-------|
|
|
16
|
-
| `--color-primary` | #0078D4 | Primary actions, links |
|
|
17
|
-
| `--color-primary-hover` | #106EBE | Hover states |
|
|
18
|
-
|
|
19
|
-
### Semantic Colors
|
|
20
|
-
| Token | Value | Usage |
|
|
21
|
-
|-------|-------|-------|
|
|
22
|
-
| `--color-success` | #107C10 | Success states |
|
|
23
|
-
| `--color-warning` | #F7630C | Warnings |
|
|
24
|
-
| `--color-error` | #D13438 | Errors |
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## Typography
|
|
29
|
-
|
|
30
|
-
| Token | Size | Weight | Usage |
|
|
31
|
-
|-------|------|--------|-------|
|
|
32
|
-
| `--text-h1` | 24px | 600 | Section headers |
|
|
33
|
-
| `--text-body` | 14px | 400 | Body text |
|
|
34
|
-
| `--text-caption` | 12px | 400 | Labels |
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## Spacing
|
|
39
|
-
|
|
40
|
-
| Token | Value | Usage |
|
|
41
|
-
|-------|-------|-------|
|
|
42
|
-
| `--space-sm` | 8px | Compact spacing |
|
|
43
|
-
| `--space-md` | 16px | Standard spacing |
|
|
44
|
-
| `--space-lg` | 24px | Wide spacing |
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
## Components
|
|
49
|
-
|
|
50
|
-
### Buttons
|
|
51
|
-
- **Primary**: `--color-primary` background, white text
|
|
52
|
-
- **Secondary**: Transparent, `--color-primary` border
|
|
53
|
-
- **Sizes**: Small (24px), Medium (32px), Large (40px)
|
|
54
|
-
|
|
55
|
-
### Forms
|
|
56
|
-
- **Input height**: 32px
|
|
57
|
-
- **Focus**: 2px solid `--color-primary`
|
|
58
|
-
- **Error**: 1px solid `--color-error`
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
## Accessibility
|
|
63
|
-
- [ ] 4.5:1 contrast ratio (WCAG AA)
|
|
64
|
-
- [ ] Touch targets minimum 44x44px
|
|
65
|
-
- [ ] Keyboard navigation supported
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## Responsive Breakpoints
|
|
70
|
-
- **Mobile**: < 768px
|
|
71
|
-
- **Tablet**: 768px - 1199px
|
|
72
|
-
- **Desktop**: ≥ 1200px
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
*Generated with MORPH Framework*
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
# UI Flows: {{titleCase FEATURE_NAME}}
|
|
2
|
-
|
|
3
|
-
| Field | Value |
|
|
4
|
-
|-------|-------|
|
|
5
|
-
| **Feature** | {{FEATURE_NAME}} |
|
|
6
|
-
| **Created** | {{DATE}} |
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## User Stories
|
|
11
|
-
|
|
12
|
-
### US001: {Primary User Story}
|
|
13
|
-
|
|
14
|
-
**As** a {user type}
|
|
15
|
-
**I want** to {capability}
|
|
16
|
-
**So that** {benefit}
|
|
17
|
-
|
|
18
|
-
**Acceptance Criteria:**
|
|
19
|
-
1. {Criterion 1}
|
|
20
|
-
2. {Criterion 2}
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## Flow Inventory
|
|
25
|
-
|
|
26
|
-
| Flow ID | Name | Priority |
|
|
27
|
-
|---------|------|----------|
|
|
28
|
-
| **F001** | Create New Item | High |
|
|
29
|
-
| **F002** | Edit Existing Item | High |
|
|
30
|
-
| **F003** | Delete Item | Medium |
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## F001: Create New Item
|
|
35
|
-
|
|
36
|
-
### Happy Path
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
START
|
|
40
|
-
↓
|
|
41
|
-
[User clicks "Add New"]
|
|
42
|
-
↓
|
|
43
|
-
[Modal opens with form]
|
|
44
|
-
↓
|
|
45
|
-
[User fills required fields]
|
|
46
|
-
↓
|
|
47
|
-
[User clicks "Submit"]
|
|
48
|
-
↓
|
|
49
|
-
[Validation passes] ✓
|
|
50
|
-
↓
|
|
51
|
-
[API call: POST /api/items]
|
|
52
|
-
↓
|
|
53
|
-
[Success response]
|
|
54
|
-
↓
|
|
55
|
-
[Modal closes]
|
|
56
|
-
↓
|
|
57
|
-
[Success toast: "Item created"]
|
|
58
|
-
↓
|
|
59
|
-
[Table refreshes]
|
|
60
|
-
↓
|
|
61
|
-
END
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
**Duration:** 15-30 seconds
|
|
65
|
-
**Success Rate Target:** 95%
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
### Alternative Path: Validation Error
|
|
70
|
-
|
|
71
|
-
```
|
|
72
|
-
[User clicks "Submit"]
|
|
73
|
-
↓
|
|
74
|
-
[Validation fails] ✕
|
|
75
|
-
↓
|
|
76
|
-
[Error messages shown inline]
|
|
77
|
-
↓
|
|
78
|
-
[User corrects errors]
|
|
79
|
-
↓
|
|
80
|
-
[Real-time validation clears errors]
|
|
81
|
-
↓
|
|
82
|
-
→ Returns to Happy Path
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
### Edge Cases
|
|
88
|
-
|
|
89
|
-
| Scenario | Behavior |
|
|
90
|
-
|----------|----------|
|
|
91
|
-
| **Duplicate Name** | Show warning, allow submit |
|
|
92
|
-
| **Network Error** | Show error toast, preserve data |
|
|
93
|
-
| **Session Expired** | Redirect to login |
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## F002: Edit Existing Item
|
|
98
|
-
|
|
99
|
-
```
|
|
100
|
-
[User clicks "Edit"]
|
|
101
|
-
↓
|
|
102
|
-
[Modal opens with pre-filled form]
|
|
103
|
-
↓
|
|
104
|
-
[User modifies fields]
|
|
105
|
-
↓
|
|
106
|
-
[User clicks "Save"]
|
|
107
|
-
↓
|
|
108
|
-
[API call: PUT /api/items/{id}]
|
|
109
|
-
↓
|
|
110
|
-
[Success toast]
|
|
111
|
-
↓
|
|
112
|
-
[Table refreshes]
|
|
113
|
-
END
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
---
|
|
117
|
-
|
|
118
|
-
## F003: Delete Item
|
|
119
|
-
|
|
120
|
-
```
|
|
121
|
-
[User clicks "Delete"]
|
|
122
|
-
↓
|
|
123
|
-
[Confirmation dialog: "Delete item?"]
|
|
124
|
-
↓
|
|
125
|
-
[User confirms]
|
|
126
|
-
↓
|
|
127
|
-
[API call: DELETE /api/items/{id}]
|
|
128
|
-
↓
|
|
129
|
-
[Success toast]
|
|
130
|
-
↓
|
|
131
|
-
[Table refreshes]
|
|
132
|
-
END
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
---
|
|
136
|
-
|
|
137
|
-
## Toast Notifications
|
|
138
|
-
|
|
139
|
-
| Event | Type | Message | Duration |
|
|
140
|
-
|-------|------|---------|----------|
|
|
141
|
-
| **Item Created** | Success | "Item created successfully" | 3s |
|
|
142
|
-
| **Item Updated** | Success | "Item updated successfully" | 3s |
|
|
143
|
-
| **Item Deleted** | Success | "Item deleted successfully" | 3s |
|
|
144
|
-
| **Error** | Error | "Something went wrong" | 5s |
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
## Keyboard Shortcuts
|
|
149
|
-
|
|
150
|
-
| Shortcut | Action |
|
|
151
|
-
|----------|--------|
|
|
152
|
-
| **Ctrl+N** | New Item |
|
|
153
|
-
| **Escape** | Close modal |
|
|
154
|
-
| **Enter** | Submit form |
|
|
155
|
-
|
|
156
|
-
---
|
|
157
|
-
|
|
158
|
-
## Performance Targets
|
|
159
|
-
|
|
160
|
-
| Flow | Target |
|
|
161
|
-
|------|--------|
|
|
162
|
-
| **Create Item** | < 2s (API response) |
|
|
163
|
-
| **Search** | < 500ms |
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
*Generated with MORPH Framework*
|