@polymorphism-tech/morph-spec 4.22.0 → 6.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 +57 -71
- package/README.md +2 -2
- package/bin/morph-spec.js +224 -491
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +1 -1
- package/docs/QUICKSTART.md +1 -1
- package/framework/CLAUDE.md +55 -38
- package/framework/MORPH.md +244 -0
- package/framework/agents.json +127 -1198
- package/framework/commands/morph-apply.md +56 -240
- package/framework/commands/morph-archive.md +48 -85
- package/framework/commands/morph-preflight.md +7 -7
- package/framework/commands/morph-proposal.md +35 -191
- package/framework/commands/morph-status.md +19 -50
- package/framework/commands/morph-troubleshoot.md +2 -2
- package/framework/evals/rubrics/README.md +44 -0
- package/framework/evals/rubrics/architecture.md +46 -0
- package/framework/evals/rubrics/code-quality.md +50 -0
- package/framework/evals/rubrics/contracts.md +47 -0
- package/framework/evals/rubrics/test-coverage.md +50 -0
- package/framework/evals/scenarios/dotnet-crud.yaml +42 -0
- package/framework/evals/scenarios/nextjs-auth.yaml +38 -0
- package/framework/evals/suites/standard.yaml +5 -0
- package/framework/evals/trace-schema.md +67 -0
- package/framework/hooks/claude-code/core/README.md +3 -0
- package/framework/hooks/claude-code/core/denylist.json +14 -0
- package/framework/hooks/claude-code/{pre-tool-use → core}/enforce-phase-writes.js +5 -5
- package/framework/hooks/claude-code/core/post-edit-typecheck.js +69 -0
- package/framework/hooks/claude-code/core/pre-bash-denylist.js +29 -0
- package/framework/hooks/claude-code/{pre-tool-use → core}/protect-spec-files.js +4 -6
- package/framework/hooks/claude-code/{stop → core}/validate-completion.js +13 -82
- package/framework/hooks/shared/phase-utils.js +20 -31
- package/framework/hooks/shared/state-reader.js +4 -5
- package/framework/{skills/level-0-meta/mcp-registry.json → mcp/registry.json} +254 -243
- package/framework/phases.json +41 -115
- package/framework/rubrics/eval-rubric.json +66 -0
- package/framework/skills/README.md +39 -64
- package/framework/skills/core/README.md +3 -0
- package/framework/skills/core/morph-brainstorming/SKILL.md +102 -0
- package/framework/skills/core/morph-eval/SKILL.md +57 -0
- package/framework/skills/core/morph-implement/SKILL.md +83 -0
- package/framework/skills/core/morph-plan/SKILL.md +64 -0
- package/framework/skills/core/morph-review/SKILL.md +62 -0
- package/framework/skills/core/morph-stack-scan/SKILL.md +109 -0
- package/framework/skills/core/morph-standards/SKILL.md +49 -0
- package/framework/templates/CLAUDE.md.core.guide.md +29 -0
- package/framework/templates/CLAUDE.md.core.template +22 -0
- package/framework/templates/REGISTRY.json +4 -4
- package/framework/workflows/configs/fast-track.json +5 -10
- package/framework/workflows/configs/full.json +4 -8
- package/framework/workflows/configs/quick.json +32 -0
- package/framework/workflows/configs/standard.json +57 -64
- package/package.json +7 -6
- package/src/commands/mcp/mcp-setup.js +58 -31
- package/src/commands/project/doctor.js +69 -70
- package/src/commands/project/init.js +26 -5
- package/src/commands/project/status.js +18 -19
- package/src/commands/state/approve.js +1 -1
- package/src/commands/validation/validate-feature.js +18 -112
- package/src/core/paths/output-schema.js +133 -152
- package/src/core/state/phase-state-machine.js +10 -24
- package/src/core/state/state-manager.js +17 -17
- package/src/core/workflows/workflow-detector.js +214 -31
- package/src/core/workflows/workflow-router.js +204 -0
- package/src/dashboard/app/pages/AgentMap.jsx +32 -33
- package/src/dashboard/app/pages/LiveState.jsx +1 -1
- package/src/dashboard/app/pages/PhasePipeline.jsx +2 -4
- package/src/dashboard/app/pages/SkillsLibrary.jsx +2 -3
- package/src/dashboard/app/pages/Workflows.jsx +2 -2
- package/src/dashboard/scanner/agents-scanner.js +30 -35
- package/src/lib/agents/metrics-aggregator.js +1 -1
- package/src/lib/agents/output-collector.js +7 -9
- package/src/lib/context/context-builder.js +289 -0
- package/src/lib/detectors/claude-config-detector.js +19 -3
- package/src/lib/generators/context-generator.js +20 -42
- package/src/lib/generators/index.js +1 -0
- package/src/lib/generators/mandate-generator.js +512 -0
- package/src/lib/generators/metadata-extractor.js +1 -1
- package/src/lib/generators/recap-generator.js +3 -4
- package/src/lib/installers/mcp-installer.js +300 -92
- package/src/lib/phase-chain/phase-validator.js +36 -40
- package/src/lib/stack/stack-profile.js +74 -91
- package/src/lib/tasks/task-parser.js +1 -1
- package/src/lib/tasks/wave-resolver.js +353 -0
- package/src/lib/validators/checkpoint-persistence.js +2 -2
- package/src/lib/validators/content/cross-phase-validator.js +281 -0
- package/src/lib/validators/content/index.js +1 -0
- package/src/lib/validators/shared/emit-validator-dispatch.js +6 -56
- package/src/scripts/global-install.js +2 -27
- package/src/utils/agents-installer.js +224 -447
- package/src/utils/claude-settings-manager.js +57 -15
- package/src/utils/file-copier.js +1 -0
- package/src/utils/hooks-installer.js +15 -117
- package/src/utils/skills-installer.js +12 -18
- package/bin/detect-agents.js +0 -226
- package/bin/task-manager.js +0 -1036
- package/framework/agents/README.md +0 -13
- package/framework/agents/ai-agents/ai-system-architect.md +0 -194
- package/framework/agents/ai-agents/vector-search-expert.md +0 -247
- package/framework/agents/architecture/architecture-expert.md +0 -98
- package/framework/agents/architecture/morph-spec-architect.md +0 -66
- package/framework/agents/architecture/packages-validator.md +0 -89
- package/framework/agents/architecture/security-expert.md +0 -79
- package/framework/agents/architecture/seo-growth-hacker.md +0 -168
- package/framework/agents/architecture/standards-architect.md +0 -153
- package/framework/agents/backend/dotnet-senior.md +0 -163
- package/framework/agents/backend/ef-modeler.md +0 -119
- package/framework/agents/backend/hangfire-orchestrator.md +0 -133
- package/framework/agents/backend/ms-agent-expert.md +0 -55
- package/framework/agents/backend/neon-expert.md +0 -379
- package/framework/agents/frontend/css-specialist.md +0 -89
- package/framework/agents/frontend/design-system-validator.md +0 -100
- package/framework/agents/frontend/gsap-animator.md +0 -131
- package/framework/agents/frontend/nextjs-component-validator.md +0 -97
- package/framework/agents/frontend/nextjs-expert.md +0 -201
- package/framework/agents/frontend/ui-designer.md +0 -259
- package/framework/agents/infrastructure/infra-architect.md +0 -215
- package/framework/agents/integrations/asaas-financial.md +0 -138
- package/framework/agents/integrations/neon-auth.md +0 -151
- package/framework/agents/integrations/resend-email.md +0 -127
- package/framework/hooks/claude-code/post-tool-use/agent-complete.js +0 -122
- package/framework/hooks/claude-code/post-tool-use/dispatch.js +0 -363
- package/framework/hooks/claude-code/post-tool-use/handle-tool-failure.js +0 -78
- package/framework/hooks/claude-code/post-tool-use/validator-feedback.js +0 -194
- package/framework/hooks/claude-code/pre-compact/save-morph-context.js +0 -199
- package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +0 -55
- package/framework/hooks/claude-code/session-start/inject-morph-context.js +0 -323
- package/framework/hooks/claude-code/session-start/post-compact-restore.js +0 -41
- package/framework/hooks/claude-code/session-start/resume-context.js +0 -77
- package/framework/hooks/claude-code/teammate-idle/teammate-idle.js +0 -90
- package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +0 -114
- package/framework/hooks/shared/compact-restore.js +0 -123
- package/framework/hooks/shared/dispatch-helpers.js +0 -147
- package/framework/hooks/shared/skill-reminder-helpers.js +0 -79
- package/framework/hooks/shared/stale-task-reset.js +0 -57
- package/framework/hooks/shared/worktree-helpers.js +0 -75
- package/framework/skills/level-0-meta/README.md +0 -7
- package/framework/skills/level-0-meta/morph-agent-teams/SKILL.md +0 -472
- package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +0 -174
- package/framework/skills/level-0-meta/morph-brainstorming/references/proposal-example.md +0 -138
- package/framework/skills/level-0-meta/morph-checklist/SKILL.md +0 -145
- package/framework/skills/level-0-meta/morph-code-review/SKILL.md +0 -250
- package/framework/skills/level-0-meta/morph-code-review/references/review-example.md +0 -164
- package/framework/skills/level-0-meta/morph-code-review/references/review-guidelines.md +0 -100
- package/framework/skills/level-0-meta/morph-code-review/scripts/scan-csharp.mjs +0 -151
- package/framework/skills/level-0-meta/morph-code-review-nextjs/SKILL.md +0 -165
- package/framework/skills/level-0-meta/morph-code-review-nextjs/references/review-example-nextjs.md +0 -254
- package/framework/skills/level-0-meta/morph-code-review-nextjs/scripts/scan-nextjs.mjs +0 -189
- package/framework/skills/level-0-meta/morph-frontend-review/SKILL.md +0 -344
- package/framework/skills/level-0-meta/morph-frontend-review/scripts/scan-accessibility.mjs +0 -376
- package/framework/skills/level-0-meta/morph-gemini-image/SKILL.md +0 -290
- package/framework/skills/level-0-meta/morph-init/SKILL.md +0 -537
- package/framework/skills/level-0-meta/morph-parallel-dispatch/SKILL.md +0 -225
- package/framework/skills/level-0-meta/morph-post-implementation/SKILL.md +0 -401
- package/framework/skills/level-0-meta/morph-post-implementation/scripts/detect-dev-server.mjs +0 -153
- package/framework/skills/level-0-meta/morph-post-implementation/scripts/detect-stack.mjs +0 -234
- package/framework/skills/level-0-meta/morph-simulation-checklist/SKILL.md +0 -106
- package/framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md +0 -243
- package/framework/skills/level-0-meta/morph-tool-usage-guide/references/tools-per-phase.md +0 -169
- package/framework/skills/level-0-meta/morph-verification-before-completion/SKILL.md +0 -148
- package/framework/skills/level-0-meta/morph-verification-before-completion/scripts/check-phase-outputs.mjs +0 -110
- package/framework/skills/level-1-workflows/README.md +0 -7
- package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +0 -269
- package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +0 -453
- package/framework/skills/level-1-workflows/morph-phase-design/references/architecture-analysis-guide.md +0 -44
- package/framework/skills/level-1-workflows/morph-phase-design/references/spec-authoring-guide.md +0 -55
- package/framework/skills/level-1-workflows/morph-phase-design/references/spec-example.md +0 -253
- package/framework/skills/level-1-workflows/morph-phase-implement/.morph/logs/activity.json +0 -38
- package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +0 -634
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/code-quality-reviewer-prompt.md +0 -50
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +0 -54
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/spec-reviewer-prompt.md +0 -47
- package/framework/skills/level-1-workflows/morph-phase-implement/references/recap-example.md +0 -132
- package/framework/skills/level-1-workflows/morph-phase-implement/references/vsa-implementation-guide.md +0 -92
- package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +0 -257
- package/framework/skills/level-1-workflows/morph-phase-tasks/.morph/logs/activity.json +0 -14
- package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +0 -291
- package/framework/skills/level-1-workflows/morph-phase-tasks/references/task-planning-patterns.md +0 -143
- package/framework/skills/level-1-workflows/morph-phase-tasks/references/tasks-example.md +0 -404
- package/framework/skills/level-1-workflows/morph-phase-tasks/scripts/validate-tasks.mjs +0 -112
- package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +0 -995
- package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +0 -147
- package/framework/squad-templates/backend-only.json +0 -47
- package/framework/squad-templates/frontend-only.json +0 -56
- package/framework/squad-templates/full-stack.json +0 -74
- package/src/commands/agents/agent-metrics.js +0 -174
- package/src/commands/agents/audit-dispatch.js +0 -82
- package/src/commands/agents/detect-agents.js +0 -275
- package/src/commands/agents/dispatch-agents.js +0 -461
- package/src/commands/agents/index.js +0 -13
- package/src/commands/agents/manage-agents.js +0 -352
- package/src/commands/agents/project-metrics.js +0 -74
- package/src/commands/phase/phase-reset.js +0 -74
- package/src/commands/scope/escalate.js +0 -217
- package/src/commands/state/advance-phase.js +0 -600
- package/src/commands/state/phase-runner.js +0 -215
- package/src/commands/state/state.js +0 -444
- package/src/commands/task/expand.js +0 -100
- package/src/commands/tasks/index.js +0 -4
- package/src/commands/tasks/task.js +0 -105
- package/src/commands/templates/index.js +0 -5
- package/src/commands/templates/template-render.js +0 -93
- package/src/commands/trust/trust.js +0 -118
- package/src/lib/agents/agents-manager.js +0 -349
- package/src/lib/build/build-runner.js +0 -99
- package/src/lib/checkpoints/checkpoint-hooks.js +0 -111
- package/src/lib/contracts/sprint-contract-generator.js +0 -137
- package/src/lib/scope/impact-analyzer.js +0 -106
- package/src/lib/trust/trust-manager.js +0 -157
- package/src/utils/tier-helpers.js +0 -24
- /package/framework/hooks/claude-code/{post-tool-use → core}/loop-detect.js +0 -0
|
@@ -1,210 +1,54 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: Inicia uma nova feature MORPH-SPEC. Roda morph-brainstorming para entender negócio + escanear stack, depois morph-plan para produzir spec/mandate/tasks. Pausa nos Gates 1 e 2.
|
|
3
3
|
argument-hint: <feature-name>
|
|
4
|
-
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
|
|
4
|
+
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, Agent, AskUserQuestion, Skill
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
#
|
|
7
|
+
# /morph-proposal — NLH Pipeline
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Conduz a feature do request inicial até o Gate 2 (plano aprovado), sem intervenção do usuário entre os gates.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
## 1. Resume Logic
|
|
14
|
-
|
|
15
|
-
Check if the feature already has state:
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
morph-spec state get {feature-name}
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
- **Exists:** Read the current phase and resume from where it stopped (skip completed phases). Create pipeline master tasks (Step 6) and mark already-completed phases as `completed`.
|
|
22
|
-
- **Does not exist:** Start from scratch (PHASE 0)
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## 2. PHASE 0: PROPOSAL
|
|
27
|
-
|
|
28
|
-
### Step 1: Load project context
|
|
29
|
-
|
|
30
|
-
Read these files to understand the project before writing anything:
|
|
31
|
-
- `.morph/context/README.md` — project overview, tech stack, architecture
|
|
32
|
-
- `.morph/config/config.json` — project configuration (language, workflow, architecture style)
|
|
33
|
-
|
|
34
|
-
### Step 2: Detect agents
|
|
35
|
-
|
|
36
|
-
Read `framework/agents.json` (or `.morph/framework/agents.json` in client projects). For each agent:
|
|
37
|
-
1. Check if `always_active: true` — include automatically
|
|
38
|
-
2. Compare agent `keywords[]` and `domains[]` against the feature description — include on match
|
|
39
|
-
3. **Document false-positive exclusions**: for agents that match on keywords but are irrelevant to this feature, note why they were excluded (this helps audit agent selection later)
|
|
40
|
-
|
|
41
|
-
Register each selected agent:
|
|
42
|
-
```bash
|
|
43
|
-
morph-spec state add-agent {feature-name} {agent-id}
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
### Step 3: Determine if UI/UX phase is needed
|
|
47
|
-
|
|
48
|
-
If `ui-designer` is among the selected agents, the feature will trigger the UI/UX phase later. Note this decision — it affects the pipeline path.
|
|
49
|
-
|
|
50
|
-
### Step 4: Create proposal
|
|
11
|
+
## Argumentos
|
|
51
12
|
|
|
52
|
-
|
|
13
|
+
`{feature-name}` — nome em kebab-case da feature.
|
|
53
14
|
|
|
54
|
-
|
|
55
|
-
.morph/features/{feature-name}/
|
|
56
|
-
0-proposal/proposal.md
|
|
57
|
-
```
|
|
15
|
+
## Fluxo
|
|
58
16
|
|
|
59
|
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
- **Proposed Solution**: technical approach, key features, user journey
|
|
63
|
-
- **Success Metrics**: quantified current vs target values
|
|
64
|
-
- **Scope**: explicit In Scope, Out of Scope, and Future Considerations
|
|
65
|
-
- **Risks**: table with likelihood, impact, mitigation
|
|
66
|
-
- **Dependencies**: checklist of prerequisites
|
|
67
|
-
- **Estimated Effort**: broken down by phase (in hours)
|
|
68
|
-
- **Questions & Open Points**: seed 3-6 questions to be resolved during the design phase
|
|
17
|
+
1. **Detecta contexto:** verifica se `.morph/features/{feature-name}/` já existe.
|
|
18
|
+
- Se existe e tem `0-proposal/proposal.md`: pular para passo 3.
|
|
19
|
+
- Se não existe: criar a estrutura e seguir o passo 2.
|
|
69
20
|
|
|
70
|
-
|
|
21
|
+
2. **Invocar `morph-brainstorming`** (skill em `framework/skills/core/morph-brainstorming/`):
|
|
22
|
+
- Faz até 4 perguntas de negócio via AskUserQuestion.
|
|
23
|
+
- Roda Explore subagent para detectar stack e estado do codebase.
|
|
24
|
+
- Produz `proposal.md` em `.morph/features/{feature-name}/0-proposal/`.
|
|
25
|
+
- Apresenta o **Gate 1**.
|
|
71
26
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
morph-spec state mark-output {feature-name} proposal
|
|
76
|
-
```
|
|
27
|
+
3. **Aguardar aprovação do Gate 1.**
|
|
28
|
+
- Resposta válida: "aprovado", "pode avançar", "lgtm".
|
|
29
|
+
- Se ajustes solicitados: aplicar e reapresentar o gate.
|
|
77
30
|
|
|
78
|
-
|
|
31
|
+
4. **Após Gate 1, invocar `morph-plan`** (skill em `framework/skills/core/morph-plan/`):
|
|
32
|
+
- Lê `proposal.md`.
|
|
33
|
+
- Produz `spec.md`, `mandate.md`, `tasks.md` em `.morph/features/{feature-name}/2-plan/`.
|
|
34
|
+
- Apresenta o **Gate 2** com template fixo (ver SKILL.md passo 5).
|
|
79
35
|
|
|
80
|
-
|
|
81
|
-
|
|
36
|
+
5. **Aguardar aprovação do Gate 2.**
|
|
37
|
+
- Resposta válida: "pode implementar", "aprovado".
|
|
38
|
+
- Se ajustes solicitados: aplicar e reapresentar o gate.
|
|
82
39
|
|
|
83
|
-
|
|
84
|
-
TaskCreate: "Proposal" → description: "Define feature scope and approach"
|
|
85
|
-
TaskCreate: "Design" → description: "Schema analysis, spec, contracts, decisions"
|
|
86
|
-
TaskCreate: "Plan" → description: "Implementation plan with TDD and file paths"
|
|
87
|
-
TaskCreate: "Tasks" → description: "Break spec into T001-T00N with dependencies"
|
|
88
|
-
```
|
|
40
|
+
6. **Após Gate 2:** sinalizar ao usuário que `/morph-apply {feature-name}` está pronto para iniciar a implementação.
|
|
89
41
|
|
|
90
|
-
|
|
91
|
-
```
|
|
92
|
-
TaskCreate: "UI/UX" → description: "Design system, mockups, components, flows"
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
Wire dependencies matching the phase sequence:
|
|
96
|
-
- UI/UX (if created) ← Proposal
|
|
97
|
-
- Design ← UI/UX (or Proposal if no UI/UX)
|
|
98
|
-
- Plan ← Design
|
|
99
|
-
- Tasks ← Plan
|
|
100
|
-
|
|
101
|
-
Mark "Proposal" as `in_progress` immediately.
|
|
102
|
-
|
|
103
|
-
### MANDATORY PAUSE
|
|
104
|
-
|
|
105
|
-
Use `AskUserQuestion` to present the approval gate with these elements:
|
|
106
|
-
|
|
107
|
-
1. **Proposal summary** — 3-4 sentence overview of what was proposed
|
|
108
|
-
2. **Agents activated** — table showing agent ID, tier, role, and why selected
|
|
109
|
-
3. **Effort estimate** — total hours from the proposal
|
|
110
|
-
4. **Key decisions pending** — 2-3 design decisions that will be resolved in the design phase
|
|
111
|
-
|
|
112
|
-
Options: Approve proposal / Request changes / Reject
|
|
113
|
-
|
|
114
|
-
After approval:
|
|
115
|
-
```bash
|
|
116
|
-
morph-spec approve {feature-name} proposal
|
|
117
|
-
morph-spec phase advance {feature-name}
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## 3. PHASE 1: UI/UX (conditional)
|
|
123
|
-
|
|
124
|
-
Check if `ui-designer` is in `activeAgents`:
|
|
125
|
-
- **Yes:** Invoke the `morph-phase-uiux` skill. **MANDATORY PAUSE** after generating UI deliverables.
|
|
126
|
-
- **No:** Skip to PHASE 2.
|
|
127
|
-
|
|
128
|
-
> **Task lifecycle:** `TaskUpdate` the "Proposal" task → `completed`. `TaskUpdate` the "UI/UX" task → `in_progress` (if UI/UX), or the "Design" task → `in_progress` (if skipping UI/UX).
|
|
129
|
-
|
|
130
|
-
After approval:
|
|
131
|
-
```bash
|
|
132
|
-
morph-spec approve {feature-name} uiux
|
|
133
|
-
morph-spec phase advance {feature-name}
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
---
|
|
42
|
+
## Anti-padrões
|
|
137
43
|
|
|
138
|
-
|
|
44
|
+
- Não pular o Gate 1 mesmo que o usuário pareça apressado — proposal.md é o contrato de escopo.
|
|
45
|
+
- Não escrever código nesta fase. Apenas artefatos de planejamento.
|
|
46
|
+
- Não perguntar sobre stack — o stack padrão é VSA + .NET 10 + MAF + Next.js + Neon.
|
|
139
47
|
|
|
140
|
-
|
|
48
|
+
## Referências
|
|
141
49
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
### MANDATORY PAUSE
|
|
147
|
-
|
|
148
|
-
Present: spec, contracts, decisions, effort estimate. Use `AskUserQuestion` with options: Approve design / Adjust scope / Modify contracts.
|
|
149
|
-
|
|
150
|
-
After approval:
|
|
151
|
-
```bash
|
|
152
|
-
morph-spec approve {feature-name} design
|
|
153
|
-
morph-spec phase advance {feature-name}
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
---
|
|
157
|
-
|
|
158
|
-
## 5. PHASE 3: PLAN
|
|
159
|
-
|
|
160
|
-
> **Task lifecycle:** `TaskUpdate` the "Design" task → `completed`. `TaskUpdate` the "Plan" task → `in_progress`.
|
|
161
|
-
|
|
162
|
-
Invoke the `morph-phase-plan` skill.
|
|
163
|
-
|
|
164
|
-
Summary: generate a detailed implementation plan with exact file paths, TDD structure, and context-aware execution strategy.
|
|
165
|
-
|
|
166
|
-
### MANDATORY PAUSE
|
|
167
|
-
|
|
168
|
-
Present: implementation plan with recommended strategy. Use `AskUserQuestion` with options: Approve plan / Adjust strategy / Modify plan.
|
|
169
|
-
|
|
170
|
-
After approval:
|
|
171
|
-
```bash
|
|
172
|
-
morph-spec approve {feature-name} plan
|
|
173
|
-
morph-spec phase advance {feature-name}
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
---
|
|
177
|
-
|
|
178
|
-
## 6. PHASE 4: TASKS
|
|
179
|
-
|
|
180
|
-
> **Task lifecycle:** `TaskUpdate` the "Plan" task → `completed`. `TaskUpdate` the "Tasks" task → `in_progress`.
|
|
181
|
-
|
|
182
|
-
Invoke the `morph-phase-tasks` skill.
|
|
183
|
-
|
|
184
|
-
Summary: break spec into tasks T001-TXXX with dependencies, checkpoints, estimates.
|
|
185
|
-
|
|
186
|
-
### MANDATORY PAUSE
|
|
187
|
-
|
|
188
|
-
Present: task breakdown, execution order, total estimate. Use `AskUserQuestion` with options: Approve tasks / Reprioritize / Add or remove tasks.
|
|
189
|
-
|
|
190
|
-
After approval:
|
|
191
|
-
```bash
|
|
192
|
-
morph-spec approve {feature-name} tasks
|
|
193
|
-
morph-spec phase advance {feature-name}
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
---
|
|
197
|
-
|
|
198
|
-
## 7. Planning Complete
|
|
199
|
-
|
|
200
|
-
> **Task lifecycle:** `TaskUpdate` the "Tasks" task → `completed`.
|
|
201
|
-
|
|
202
|
-
After task approval:
|
|
203
|
-
|
|
204
|
-
```
|
|
205
|
-
Planning complete! Run /morph-apply {feature-name} to start implementation.
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
---
|
|
50
|
+
- `framework/MORPH.md` — charter completo
|
|
51
|
+
- `framework/skills/core/morph-brainstorming/SKILL.md`
|
|
52
|
+
- `framework/skills/core/morph-plan/SKILL.md`
|
|
209
53
|
|
|
210
|
-
**Feature
|
|
54
|
+
**Feature:** $ARGUMENTS
|
|
@@ -1,71 +1,40 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Show current MORPH
|
|
2
|
+
description: Show current MORPH-SPEC feature status (phase, gates, task counts)
|
|
3
3
|
argument-hint: [feature-name]
|
|
4
4
|
allowed-tools: Read, Bash
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# MORPH
|
|
7
|
+
# MORPH Status
|
|
8
8
|
|
|
9
|
-
Show the
|
|
9
|
+
Show the status of a MORPH-SPEC feature: current phase, approval gates, and output completion.
|
|
10
10
|
|
|
11
11
|
## Usage
|
|
12
12
|
|
|
13
|
-
**ALWAYS** use the state-manager CLI to get status:
|
|
14
|
-
|
|
15
13
|
```bash
|
|
16
|
-
morph-spec
|
|
14
|
+
morph-spec status <feature-name>
|
|
17
15
|
```
|
|
18
16
|
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
- Task progress (X/Y)
|
|
23
|
-
- Active agents
|
|
24
|
-
|
|
25
|
-
## Additional Checks
|
|
26
|
-
|
|
27
|
-
### 1. MORPH Configuration
|
|
28
|
-
- [ ] `.morph/config/config.json` configured
|
|
29
|
-
- [ ] `.morph/framework/standards/` present
|
|
30
|
-
|
|
31
|
-
### 2. Specific Feature Details
|
|
32
|
-
|
|
33
|
-
To get detailed JSON for a feature:
|
|
17
|
+
Optional flags:
|
|
18
|
+
- `--json` — emit JSON for tooling
|
|
19
|
+
- `-v, --verbose` — show output files and gate details
|
|
34
20
|
|
|
35
|
-
|
|
36
|
-
morph-spec state get {feature-name}
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
## Output
|
|
21
|
+
## Resolving the active feature
|
|
40
22
|
|
|
41
|
-
|
|
23
|
+
If the user did not pass a feature name in `$ARGUMENTS`:
|
|
42
24
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
╠════════════════════════════════════════════════════════════════╣
|
|
47
|
-
║ Project: {PROJECT_NAME} ║
|
|
48
|
-
║ Type: dotnet-nextjs ║
|
|
49
|
-
╠════════════════════════════════════════════════════════════════╣
|
|
50
|
-
║ FEATURES ║
|
|
51
|
-
╠════════════════════════════════════════════════════════════════╣
|
|
52
|
-
║ {feature-1} ║
|
|
53
|
-
║ Phase: implement | Tasks: 5/12 ║
|
|
54
|
-
║ Agents: ef-modeler hangfire-orchestrator ║
|
|
55
|
-
╠════════════════════════════════════════════════════════════════╣
|
|
56
|
-
║ {feature-2} ║
|
|
57
|
-
║ Phase: design | Tasks: 0/0 ║
|
|
58
|
-
║ Agents: None ║
|
|
59
|
-
╚════════════════════════════════════════════════════════════════╝
|
|
60
|
-
```
|
|
25
|
+
1. Read `.morph/state.json`.
|
|
26
|
+
2. Pick the most recently updated feature whose `status !== 'completed'`.
|
|
27
|
+
3. If none exists, ask the user which feature to inspect via `AskUserQuestion`.
|
|
61
28
|
|
|
62
|
-
|
|
29
|
+
## What you display
|
|
63
30
|
|
|
64
|
-
|
|
31
|
+
The CLI prints a banner, the phase chain (`proposal → uiux → plan → implement → review`),
|
|
32
|
+
output completion (X/13 outputs), task progress, and next-step suggestions.
|
|
65
33
|
|
|
66
|
-
|
|
67
|
-
-
|
|
68
|
-
-
|
|
34
|
+
After running the CLI, summarize:
|
|
35
|
+
- Current phase and which gate (if any) is open
|
|
36
|
+
- Outstanding outputs for the current phase
|
|
37
|
+
- Recommended next slash command (`/morph-proposal`, `/morph-apply`, or a gate approval)
|
|
69
38
|
|
|
70
39
|
---
|
|
71
40
|
|
|
@@ -69,7 +69,7 @@ site:learn.microsoft.com {error}
|
|
|
69
69
|
**WebSearch usage example:**
|
|
70
70
|
|
|
71
71
|
If the user asks about a SignalR error:
|
|
72
|
-
1. First:
|
|
72
|
+
1. First: search standards/codebase via Grep
|
|
73
73
|
2. If not found: WebSearch with `site:github.com/dotnet/aspnetcore SignalR connection closed`
|
|
74
74
|
3. Return formatted relevant links
|
|
75
75
|
|
|
@@ -103,7 +103,7 @@ When finding a solution, present in the following format:
|
|
|
103
103
|
✅ Solution:
|
|
104
104
|
{code or steps to resolve}
|
|
105
105
|
|
|
106
|
-
📚 See full:
|
|
106
|
+
📚 See full: open {file}
|
|
107
107
|
|
|
108
108
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
109
109
|
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Sistema de Avaliação Graduada — morph-spec NLH
|
|
2
|
+
|
|
3
|
+
## Como funciona
|
|
4
|
+
|
|
5
|
+
A skill `morph-eval` avalia o output de uma tarefa ou fase usando 4 dimensões.
|
|
6
|
+
Cada dimensão tem uma rubrica própria. O score final é ponderado.
|
|
7
|
+
|
|
8
|
+
| Dimensão | Peso | Arquivo |
|
|
9
|
+
|---------------------|------|----------------------|
|
|
10
|
+
| Arquitetura | 30% | architecture.md |
|
|
11
|
+
| Contratos | 25% | contracts.md |
|
|
12
|
+
| Qualidade de código | 25% | code-quality.md |
|
|
13
|
+
| Cobertura de testes | 20% | test-coverage.md |
|
|
14
|
+
|
|
15
|
+
## Escala de scores
|
|
16
|
+
|
|
17
|
+
| Score | Ação |
|
|
18
|
+
|-------|----------------------------------------------------------------------|
|
|
19
|
+
| 8-10 | Aprovado — sem output no contexto, siga para próxima tarefa |
|
|
20
|
+
| 6-7.9 | Feedback priorizado — liste o que melhorar, modelo continua |
|
|
21
|
+
| < 6 | Escale para revisão humana — relatório detalhado obrigatório |
|
|
22
|
+
|
|
23
|
+
## Como calcular o score composto
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
score = (arquitetura × 0.30) + (contratos × 0.25) + (qualidade × 0.25) + (testes × 0.20)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Arredonde para uma casa decimal.
|
|
30
|
+
|
|
31
|
+
## Formato de output quando score < 8
|
|
32
|
+
|
|
33
|
+
Produza exatamente este bloco (não mais, não menos):
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
Score: [X.X/10]
|
|
37
|
+
Arquitetura: X | Contratos: X | Qualidade: X | Testes: X
|
|
38
|
+
Issues (ordenados por impacto):
|
|
39
|
+
- [descrição do problema mais impactante]
|
|
40
|
+
- [próximo problema]
|
|
41
|
+
Ação: [feedback priorizado — continua | escalar para revisão humana]
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Quando score ≥ 8: nenhum output. O silêncio é o sinal de aprovação.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Rubrica: Arquitetura (Peso 30%)
|
|
2
|
+
|
|
3
|
+
Avalia se a implementação segue o padrão arquitetural definido no spec.md e mandate.md.
|
|
4
|
+
|
|
5
|
+
## Score 9-10 — Exemplar
|
|
6
|
+
|
|
7
|
+
- Segue o padrão de feature folder rigorosamente: cada feature tem seus próprios handlers, commands/queries, validators e endpoints.
|
|
8
|
+
- Zero dependências diretas entre features — comunicação cross-feature via interface, evento ou shared kernel explícito.
|
|
9
|
+
- Domain logic completamente isolado de infraestrutura: nenhum import de ORM, HTTP client ou I/O direto em objetos de domínio.
|
|
10
|
+
- Inversão de dependência aplicada onde a arquitetura exige.
|
|
11
|
+
|
|
12
|
+
## Score 7-8 — Bom
|
|
13
|
+
|
|
14
|
+
- Segue o padrão com desvios menores e justificados.
|
|
15
|
+
- Dependências cross-feature existem mas são poucas, documentadas e via abstração.
|
|
16
|
+
- Pequenas impurezas de infraestrutura em domain que não afetam testabilidade.
|
|
17
|
+
- Estrutura de pastas correta, responsabilidades bem definidas.
|
|
18
|
+
|
|
19
|
+
## Score 5-6 — Aceitável com ressalvas
|
|
20
|
+
|
|
21
|
+
- Estrutura de pastas correta mas responsabilidades começam a se misturar.
|
|
22
|
+
- Dependências cross-feature sem justificativa clara.
|
|
23
|
+
- Domain logic com acoplamento a infraestrutura que dificulta testes unitários.
|
|
24
|
+
- Padrão seguido na maior parte, mas com violações perceptíveis.
|
|
25
|
+
|
|
26
|
+
## Score 3-4 — Problemático
|
|
27
|
+
|
|
28
|
+
- Desvios significativos do padrão definido no spec.md.
|
|
29
|
+
- Múltiplas violações de separação de responsabilidades.
|
|
30
|
+
- Feature não isolada — mudanças nela provavelmente afetam outras.
|
|
31
|
+
- Difícil de testar sem mocks de infraestrutura.
|
|
32
|
+
|
|
33
|
+
## Score 1-2 — Reprovado
|
|
34
|
+
|
|
35
|
+
- Ignora completamente a arquitetura definida.
|
|
36
|
+
- Implementação plana sem estrutura de feature.
|
|
37
|
+
- Dependências circulares ou acoplamento total entre camadas.
|
|
38
|
+
- Requer refatoração antes de qualquer entrega.
|
|
39
|
+
|
|
40
|
+
## Perguntas de avaliação
|
|
41
|
+
|
|
42
|
+
1. Os arquivos estão nas pastas corretas da feature conforme o padrão do projeto?
|
|
43
|
+
2. Há imports diretos entre features sem passar por abstração?
|
|
44
|
+
3. Objetos de domínio importam de infraestrutura (ORM, HTTP, I/O)?
|
|
45
|
+
4. Se remover esta feature, alguma outra quebra?
|
|
46
|
+
5. O padrão arquitetural descrito no spec.md foi seguido?
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Rubrica: Qualidade de Código (Peso 25%)
|
|
2
|
+
|
|
3
|
+
Avalia naming, ausência de code smells e aderência aos padrões do stack do projeto.
|
|
4
|
+
|
|
5
|
+
## Score 9-10 — Exemplar
|
|
6
|
+
|
|
7
|
+
- Nomes de variáveis, funções e classes comunicam intenção sem precisar de comentários.
|
|
8
|
+
- Funções com responsabilidade única: cada função faz uma coisa e tem no máximo 20-25 linhas.
|
|
9
|
+
- Classes com responsabilidade única: coesas, sem mistura de concerns.
|
|
10
|
+
- Zero duplicação óbvia — lógica repetida foi extraída.
|
|
11
|
+
- Segue os padrões do stack conforme os standards do projeto (ex: Result pattern para .NET, hooks pattern para React).
|
|
12
|
+
- Sem "dead code" — sem variáveis não usadas, sem blocos comentados, sem imports desnecessários.
|
|
13
|
+
|
|
14
|
+
## Score 7-8 — Bom
|
|
15
|
+
|
|
16
|
+
- Nomes claros na maioria dos casos, com raras abreviações não óbvias.
|
|
17
|
+
- Funções e classes bem dimensionadas com poucos casos acima do ideal.
|
|
18
|
+
- Duplicação mínima e pontual.
|
|
19
|
+
- Segue padrões do stack com desvios isolados e justificáveis.
|
|
20
|
+
- Sem dead code significativo.
|
|
21
|
+
|
|
22
|
+
## Score 5-6 — Aceitável com ressalvas
|
|
23
|
+
|
|
24
|
+
- Alguns nomes genéricos ou pouco descritivos (`data`, `result`, `temp`).
|
|
25
|
+
- Funções longas (>30 linhas) ou com múltiplas responsabilidades.
|
|
26
|
+
- Duplicação perceptível que aumenta custo de manutenção.
|
|
27
|
+
- Desvios dos padrões do stack sem justificativa.
|
|
28
|
+
- Dead code pontual.
|
|
29
|
+
|
|
30
|
+
## Score 3-4 — Problemático
|
|
31
|
+
|
|
32
|
+
- Nomes que exigem contexto externo para entender o que representam.
|
|
33
|
+
- Funções com >50 linhas ou classes com >200 linhas sem coesão.
|
|
34
|
+
- Duplicação significativa: mesma lógica em múltiplos lugares.
|
|
35
|
+
- Não segue os padrões do stack — código parece escrito para outro contexto.
|
|
36
|
+
|
|
37
|
+
## Score 1-2 — Reprovado
|
|
38
|
+
|
|
39
|
+
- Nomes arbitrários ou gerados automaticamente sem semântica.
|
|
40
|
+
- Funções/classes sem separação de responsabilidades — "god objects".
|
|
41
|
+
- Duplicação massiva ou copy-paste evidente.
|
|
42
|
+
- Completamente fora dos padrões do stack — exige reescrita.
|
|
43
|
+
|
|
44
|
+
## Perguntas de avaliação
|
|
45
|
+
|
|
46
|
+
1. É possível entender o que uma função faz apenas pelo seu nome e assinatura?
|
|
47
|
+
2. Alguma função tem mais de 30 linhas ou mais de uma responsabilidade clara?
|
|
48
|
+
3. Há lógica duplicada que poderia ser extraída?
|
|
49
|
+
4. O código segue os padrões definidos nos standards do projeto?
|
|
50
|
+
5. Há variáveis não usadas, imports desnecessários ou blocos comentados?
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Rubrica: Contratos (Peso 25%)
|
|
2
|
+
|
|
3
|
+
Avalia a qualidade dos tipos, validações, tratamento de erros e naming dos contratos públicos.
|
|
4
|
+
|
|
5
|
+
## Score 9-10 — Exemplar
|
|
6
|
+
|
|
7
|
+
- Todos os tipos explícitos — zero `any`, zero `object` genérico onde um tipo específico cabe.
|
|
8
|
+
- Campos opcionais (`?`) usados apenas onde o dado é genuinamente opcional; campos obrigatórios sem nullable desnecessário.
|
|
9
|
+
- Validação de input declarada em todos os endpoints/handlers (FluentValidation, Zod, ou equivalente do stack).
|
|
10
|
+
- Error handling explícito via Result pattern, discriminated union ou equivalente — sem exceptions para fluxo de negócio.
|
|
11
|
+
- Nomes seguem a convenção do projeto: PascalCase para tipos, camelCase para propriedades, verbos para comandos.
|
|
12
|
+
|
|
13
|
+
## Score 7-8 — Bom
|
|
14
|
+
|
|
15
|
+
- Tipos bem definidos com pouquíssimos `any` ou genéricos desnecessários — e onde existem, são justificados.
|
|
16
|
+
- Validação presente na maioria dos endpoints, com poucos casos sem cobertura.
|
|
17
|
+
- Error handling consistente com o padrão do projeto, com desvios pontuais.
|
|
18
|
+
- Nomes claros e consistentes, com raras exceções.
|
|
19
|
+
|
|
20
|
+
## Score 5-6 — Aceitável com ressalvas
|
|
21
|
+
|
|
22
|
+
- Uso de `any` ou tipos genéricos em pontos visíveis da API.
|
|
23
|
+
- Validação parcial — alguns endpoints sem validação de input.
|
|
24
|
+
- Mix de estratégias de error handling (exceptions e Result no mesmo módulo).
|
|
25
|
+
- Nomes inconsistentes em algumas partes.
|
|
26
|
+
|
|
27
|
+
## Score 3-4 — Problemático
|
|
28
|
+
|
|
29
|
+
- Tipos amplamente genéricos ou ausentes onde deveriam ser específicos.
|
|
30
|
+
- Validação de input ausente em múltiplos pontos de entrada.
|
|
31
|
+
- Error handling imprevisível — sem padrão claro, exceptions misturadas com retornos especiais.
|
|
32
|
+
- Nomes que não comunicam intenção.
|
|
33
|
+
|
|
34
|
+
## Score 1-2 — Reprovado
|
|
35
|
+
|
|
36
|
+
- Contratos sem tipos definidos ou com `any` generalizado.
|
|
37
|
+
- Nenhuma validação de input.
|
|
38
|
+
- Sem tratamento de erro — falhas em runtime sem diagnóstico útil.
|
|
39
|
+
- Naming arbitrário ou genérico (`data`, `obj`, `result` sem qualificador).
|
|
40
|
+
|
|
41
|
+
## Perguntas de avaliação
|
|
42
|
+
|
|
43
|
+
1. Há `any` ou tipos genéricos onde um tipo específico seria possível?
|
|
44
|
+
2. Todos os endpoints/handlers têm validação de input declarada?
|
|
45
|
+
3. O tratamento de erros segue o padrão do projeto (Result, exceções, etc.)?
|
|
46
|
+
4. Os nomes dos tipos e propriedades comunicam claramente o que representam?
|
|
47
|
+
5. Campos opcionais fazem sentido semântico, ou são opcionais por comodidade?
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Rubrica: Cobertura de Testes (Peso 20%)
|
|
2
|
+
|
|
3
|
+
Avalia se os testes cobrem os comportamentos esperados, são isolados e têm nomes úteis.
|
|
4
|
+
|
|
5
|
+
## Score 9-10 — Exemplar
|
|
6
|
+
|
|
7
|
+
- Happy path coberto para todos os casos de uso relevantes.
|
|
8
|
+
- Edge cases críticos cobertos: null/undefined, string vazia, boundary values, coleção vazia.
|
|
9
|
+
- Casos de erro cobertos: o que acontece quando a operação falha, quando a dependência retorna erro.
|
|
10
|
+
- Testes completamente isolados — cada teste pode rodar sozinho em qualquer ordem.
|
|
11
|
+
- Nomes de teste descrevem o comportamento esperado: `"deve retornar erro quando email já existe"` (não `"testEmail"`).
|
|
12
|
+
- Testes testam comportamento, não implementação — refatorar sem mudar comportamento não quebra testes.
|
|
13
|
+
|
|
14
|
+
## Score 7-8 — Bom
|
|
15
|
+
|
|
16
|
+
- Happy path coberto em todos os casos relevantes.
|
|
17
|
+
- Maioria dos edge cases cobertos, com poucos gaps identificáveis.
|
|
18
|
+
- Casos de erro cobertos para os fluxos principais.
|
|
19
|
+
- Isolamento correto na maioria dos testes.
|
|
20
|
+
- Nomes descritivos com raras exceções genéricas.
|
|
21
|
+
|
|
22
|
+
## Score 5-6 — Aceitável com ressalvas
|
|
23
|
+
|
|
24
|
+
- Happy path coberto, mas edge cases com cobertura parcial.
|
|
25
|
+
- Casos de erro não cobertos sistematicamente — só os mais óbvios.
|
|
26
|
+
- Alguns testes com dependências entre si (ordem importa).
|
|
27
|
+
- Nomes misturados: alguns descritivos, outros genéricos.
|
|
28
|
+
- Testes que testam implementação (dependentes de detalhes internos).
|
|
29
|
+
|
|
30
|
+
## Score 3-4 — Problemático
|
|
31
|
+
|
|
32
|
+
- Apenas happy path coberto, sem edge cases.
|
|
33
|
+
- Testes interdependentes ou com estado compartilhado.
|
|
34
|
+
- Nomes que não descrevem o comportamento testado.
|
|
35
|
+
- Cobertura presente mas superficial — testes passam mas não protegem contra regressão.
|
|
36
|
+
|
|
37
|
+
## Score 1-2 — Reprovado
|
|
38
|
+
|
|
39
|
+
- Ausência de testes ou testes que não verificam nada significativo.
|
|
40
|
+
- Testes que sempre passam independente do comportamento (sem asserts reais).
|
|
41
|
+
- Sem cobertura de qualquer edge case ou caminho de erro.
|
|
42
|
+
- Nomes completamente genéricos ou numerados.
|
|
43
|
+
|
|
44
|
+
## Perguntas de avaliação
|
|
45
|
+
|
|
46
|
+
1. O happy path está coberto para todos os casos de uso da tarefa?
|
|
47
|
+
2. Os edge cases críticos (null, vazio, boundary) estão cobertos?
|
|
48
|
+
3. O que acontece quando uma dependência falha — isso está testado?
|
|
49
|
+
4. Os testes podem rodar em qualquer ordem sem interferir entre si?
|
|
50
|
+
5. Os nomes dos testes descrevem o comportamento esperado sem precisar ler o corpo?
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: dotnet-crud
|
|
2
|
+
description: CRUD operations for product catalog in .NET 10 VSA application with Neon PostgreSQL
|
|
3
|
+
stack: dotnet-neon
|
|
4
|
+
|
|
5
|
+
request: |
|
|
6
|
+
Add CRUD operations for a product catalog to the .NET 10 application.
|
|
7
|
+
Products have: name, description, price (decimal), category, imageUrl, isActive.
|
|
8
|
+
Implement using Vertical Slice Architecture with IHandler<TRequest, TResponse>,
|
|
9
|
+
Result<T> railway-oriented error handling (no exceptions in handlers),
|
|
10
|
+
sealed records for DTOs, and FluentValidation via Scrutor decorators.
|
|
11
|
+
Use IApiEndpoint auto-discovery for Minimal API route registration.
|
|
12
|
+
Include pagination for the list endpoint with TanStack Query-compatible
|
|
13
|
+
response format, search by name/category, and soft-delete (isActive flag).
|
|
14
|
+
Database is Neon PostgreSQL via EF Core + Npgsql.
|
|
15
|
+
API docs via Scalar UI.
|
|
16
|
+
|
|
17
|
+
phases_to_eval:
|
|
18
|
+
- proposal
|
|
19
|
+
- spec
|
|
20
|
+
- tasks
|
|
21
|
+
|
|
22
|
+
skip_implementation: true
|
|
23
|
+
|
|
24
|
+
dimensions:
|
|
25
|
+
proposal:
|
|
26
|
+
completeness: "Covers all CRUD operations plus pagination, search, soft-delete, Scalar UI docs"
|
|
27
|
+
scope: "Product catalog only — no cart, orders, or user management"
|
|
28
|
+
spec:
|
|
29
|
+
specificity: "API contracts with sealed record DTOs, Result<T> return types, FluentValidation rules, specific HTTP status codes"
|
|
30
|
+
data_model: "Product entity with all fields, EF Core configuration, Neon PostgreSQL constraints"
|
|
31
|
+
architecture: "VSA feature folders, IHandler pattern, Scrutor pipeline, IApiEndpoint discovery, Repository/UnitOfWork"
|
|
32
|
+
completeness: "All CRUD endpoints, pagination params (page/pageSize), search filters, error responses via Result<T>"
|
|
33
|
+
tasks:
|
|
34
|
+
granularity: "Each task 15-60 minutes, no mega-tasks"
|
|
35
|
+
coverage: "All spec FRs mapped to at least one task"
|
|
36
|
+
ordering: "Entity/migration first, then handlers, then validation decorators, then API endpoints, then tests"
|
|
37
|
+
cross_phase:
|
|
38
|
+
fr_coverage_threshold: 0.95
|
|
39
|
+
mandate_completeness: 0.9
|
|
40
|
+
|
|
41
|
+
threshold: 8.0
|
|
42
|
+
max_iterations: 3
|