@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,150 +1,125 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: morph-review
|
|
3
|
-
description: Conduz
|
|
3
|
+
description: Conduz o Gate 3 — despacha verificador ∥ revisor (∥ segurança, quando exigida) em contexto fresco sobre um SHA fixo e decide pelo gate-check
|
|
4
4
|
version: core
|
|
5
|
-
|
|
6
|
-
user-
|
|
7
|
-
cliVersion: "
|
|
5
|
+
when_to_use: Use quando a fase review começar, com todas as fatias com relatório final e o verify da feature verde
|
|
6
|
+
user-invocable: true
|
|
7
|
+
cliVersion: "9.0.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-review
|
|
11
11
|
|
|
12
12
|
## Objetivo
|
|
13
|
-
Responder, com evidência
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
Responder, com evidência: **cada cenário do plano está provado, sem quebrar o que já funcionava?**
|
|
14
|
+
Três agentes independentes, cada um com o seu relatório em `4-review/`: `verifier.md` (prova cada
|
|
15
|
+
`Cn`), `reviewer.md` (escopo, arquitetura, regressão) e `security.md` (só com caminho sensível). O
|
|
16
|
+
Gate 3 decide por `**Verdict:** SHIP|FIX`, bloqueadores tipados e a cobertura dos `Cn` — não por
|
|
17
|
+
nota. Você não escreve relatório de review: os três arquivos são o retorno.
|
|
18
18
|
|
|
19
19
|
## Ritmo
|
|
20
|
-
- Comando em **primeiro plano**, com timeout.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
por `--signals '{"standardsViolations":[...]}'`. Forçar a passagem apesar de uma pausa:
|
|
123
|
-
`morph-spec gate-decision {feature} review --pause false --reason "..."` (explícito e registrado).
|
|
124
|
-
Nunca edite `feature.json` à mão.
|
|
125
|
-
|
|
126
|
-
**`pause === true`** → `AskUserQuestion`:
|
|
127
|
-
```
|
|
128
|
-
question: "Gate 3 — Review de {feature} aprovado?{ reason ? ' Sinal: ' + reason : '' }"
|
|
129
|
-
header: "Gate 3"
|
|
130
|
-
options:
|
|
131
|
-
- { label: "aprovado, fechar feature", description: "Próximo passo: morph-spec finish --pr|--merge (morph-apply §6)" }
|
|
132
|
-
- { label: "preciso ajustar", description: "Apontar correções antes de fechar" }
|
|
133
|
-
- { label: "rollback", description: "Voltar para implement" }
|
|
134
|
-
```
|
|
135
|
-
**`pause === false`** → resumo de 3 linhas (veredito, runtime, bloqueadores: 0) e
|
|
136
|
-
`morph-spec approve {feature} review --mode auto`. A pergunta nomeia a feature: é por ela que o
|
|
137
|
-
hook `state-sync` grava a aprovação.
|
|
138
|
-
|
|
139
|
-
Fechar não é desta skill: `finish {feature} --pr|--merge` (`morph-apply` §6). `--pr` deixa a
|
|
140
|
-
feature `aguardando-merge` até o merge.
|
|
141
|
-
|
|
142
|
-
## Output esperado
|
|
143
|
-
- `4-review/evaluator-report.md` — veredito e bloqueadores do avaliador independente (retorno autoritativo)
|
|
144
|
-
- `4-review/review-report.md` — síntese com `Reviewed-SHA`
|
|
145
|
-
- Gate 3 registrado em `feature.json` via `approve` ou pelo hook `state-sync`
|
|
20
|
+
- Comando em **primeiro plano**, com timeout. Só o `verify {feature}` de projeto grande passa do teto
|
|
21
|
+
de 10 min do Bash: aí `run_in_background` e espere a notificação. Nunca `sleep`/`until`.
|
|
22
|
+
- **Bloqueio de ambiente não é laço.** Slot pesado ocupado (exit 3 / `busy`), Docker fora: tente
|
|
23
|
+
**uma** vez mais; persistiu, siga — o `gate-check` pausa com a razão. Nunca agende retentativas.
|
|
24
|
+
|
|
25
|
+
## 1. Relatórios já íntegros?
|
|
26
|
+
`morph-spec report-check {feature} --json` (sem fatia) — também em sessão retomada: retomar não
|
|
27
|
+
reseta este passo. Leia `reviews.verifier|reviewer|security`: `complete` → **não re-despache** esse
|
|
28
|
+
papel; `partial: true` → passo 4 (PARCIAL); ausente → despache no passo 3.
|
|
29
|
+
|
|
30
|
+
## 2. Prova da suíte — uma rodada
|
|
31
|
+
Commite o trabalho da feature (`git add <paths>` + `git commit`) e rode
|
|
32
|
+
`morph-spec verify {feature} --ci --json` com `run_in_background`. Ele empurra a branch, espera o run
|
|
33
|
+
e grava o stamp do artefato que o run publicou; sem CI, roda local e diz por quê.
|
|
34
|
+
**Sem `--filter`, sempre**: o Gate 3 roda a suíte inteira. Esta é a única execução de testes do Gate 3 — nenhum agente
|
|
35
|
+
roda a suíte de novo. `repeatOf` no JSON = nada mudou, use aquela rodada; `reason: "stamp-reused"` = sem CI e
|
|
36
|
+
nada fora de `.morph/` andou desde o último verify verde: ele vale, não rode de novo.
|
|
37
|
+
- **Quando a saída mostrar `CI rodando`, despache (passo 3) sem esperar o fim**: o push e o
|
|
38
|
+
workflow já estão commitados e a foto da árvore não os acusa. Saiu `verify local`: espere o fim
|
|
39
|
+
antes do passo 3 — suíte local e `mutate` disputam a máquina. Exit 2 = trabalho fora de commit.
|
|
40
|
+
- Nó `e2e`: `pass` local → `morph-spec e2e status {feature} --json` → `baseUrl` vai ao verificador.
|
|
41
|
+
`fail` → correção (CI: `gh run view <id> --log-failed`). `skip` → quem classifica é o `gate-check`
|
|
42
|
+
(`classifyE2eSkip`): dispensa de projeto passa; ambiente, `--skip-e2e` ou razão desconhecida pausam.
|
|
43
|
+
- `traceability.warnings` do verify vão ao revisor como sinal.
|
|
44
|
+
|
|
45
|
+
## 3. Dispatch — verificador ∥ revisor (∥ segurança)
|
|
46
|
+
`morph-spec report-check {feature} --before-eval --json` tira a foto da árvore e diz quem despachar:
|
|
47
|
+
`reviewModels.verifier.model` (opus com prompt/modelo ou mídia), `reviewModels.security.required`.
|
|
48
|
+
Anote `base` (merge-base com a default) e `sha` (`git rev-parse HEAD`). Blast radius: para cada
|
|
49
|
+
símbolo público do diff, `morph-spec graph affected <símbolo> --prod --json`; sem grafo
|
|
50
|
+
(`no-graph`/`not-found`/`ambiguous`), siga sem o blast radius — o revisor cai para `git grep` — e
|
|
51
|
+
registre a ausência no recado a ele. Cada agente nasce com contexto fresco e **nunca recebe relatório anterior** (ancoragem).
|
|
52
|
+
Despache todos na mesma resposta:
|
|
53
|
+
```
|
|
54
|
+
dispatch Agent (subagent_type: "morph-verifier", model: {reviewModels.verifier.model}) with prompt:
|
|
55
|
+
feature, base, sha, JSON do verify (nós, e2e, URL) se já terminou, 1-design/mockups.md e
|
|
56
|
+
3-implement/evidencias/*.md se existirem. Grave .morph/features/{feature}/4-review/verifier.md.
|
|
57
|
+
Não rode `morph-spec mutate` até eu avisar que revisor e segurança terminaram.
|
|
58
|
+
NUNCA `git checkout --`: descarta trabalho não commitado.
|
|
59
|
+
dispatch Agent (subagent_type: "morph-reviewer") with prompt:
|
|
60
|
+
feature, base, sha, blast radius (ou a ausência dele), traceability.warnings.
|
|
61
|
+
Grave .morph/features/{feature}/4-review/reviewer.md.
|
|
62
|
+
dispatch Agent (subagent_type: "morph-security") with prompt: ← só com security.required
|
|
63
|
+
feature, base, sha, reviewModels.security.reasons. Grave .morph/features/{feature}/4-review/security.md.
|
|
64
|
+
```
|
|
65
|
+
O prompt leva só os campos acima. O que você notou no loop chega ao revisor como
|
|
66
|
+
`traceability.warnings` ou como item da `## Errata` do plano, nunca como lista solta de "fatos do
|
|
67
|
+
loop": é histórico da conversa (MORPH §6) e ancora quem nasceu para olhar sem ele.
|
|
68
|
+
O contrato fixo (o que provar, `**Reviewed-SHA:**` obrigatório, formato, PARCIAL, read-only) mora no
|
|
69
|
+
corpo de cada persona e em `.morph/framework/evals/review-checklist.md`. Tipo não registrado:
|
|
70
|
+
`general-purpose` com o campo `persona` de `.morph/framework/agents.json` no topo do prompt.
|
|
71
|
+
|
|
72
|
+
Revisor e segurança voltaram: diga ao verificador, por `SendMessage`, que a mutação está liberada —
|
|
73
|
+
opcional, no máximo 3 mutantes com `expect`, só para guarda sem teste que a morda (review-checklist).
|
|
74
|
+
Achou o teste por leitura: não rode.
|
|
75
|
+
|
|
76
|
+
## 4. Ao retomar — higiene antes de ler o veredito
|
|
77
|
+
Não rode build nem teste enquanto um agente está `running`. Com todos de volta,
|
|
78
|
+
`morph-spec report-check {feature} --json`:
|
|
79
|
+
- `tree.sinceBeforeEval.changed` vazio e `tree.markers` vazio = árvore como antes do dispatch.
|
|
80
|
+
Arquivo listado = mutação que ficou no disco: `morph-spec mutate --restore` devolve os bytes do
|
|
81
|
+
snapshot; fora de uma rodada de mutação, desfaça linha a linha pelo diff.
|
|
82
|
+
**NUNCA `git checkout -- src/` aqui**: o checkout apaga junto tudo o que não foi commitado depois
|
|
83
|
+
da prova (correção de bloqueador, trabalho de outra sessão).
|
|
84
|
+
- `tree.sinceBeforeEval` `null` = sem foto; `tree` `null` = git não respondeu.
|
|
85
|
+
|
|
86
|
+
Depois leia os relatórios e rode `morph-spec worktree reap --json`.
|
|
87
|
+
|
|
88
|
+
**PARCIAL** (`reviews.<papel>.partial: true`): não leia veredito dele e não re-despache frio —
|
|
89
|
+
retome o MESMO agente por `SendMessage`, colando `tree.dirty` e `tree.commits`. Só se o id não
|
|
90
|
+
retomar, despache um novo.
|
|
91
|
+
|
|
92
|
+
## 5. Bloqueadores
|
|
93
|
+
O avaliador também erra: **antes de editar, reverifique cada bloqueador no código** — evidência que
|
|
94
|
+
não se reproduz vira pergunta ao mesmo agente, não correção. Confirmado: corrija (loop da
|
|
95
|
+
`morph-apply`), commite, rode o `verify {feature} --ci` de novo e uma foto `--before-eval` nova.
|
|
96
|
+
Retome por `SendMessage` TODO agente exigido, com o `sha` novo e `tree.dirty`/`tree.commits`: quem
|
|
97
|
+
abriu bloqueadores **confirme só os bloqueadores** (retomando o MESMO agente que os abriu); os outros
|
|
98
|
+
julgam só o delta `{sha anterior}..{sha novo}` — o que a correção abriu. `reviewModels.security.required`
|
|
99
|
+
virou `true` agora: despache a segurança. Ninguém reavalia a feature inteira, e **nota nunca motiva
|
|
100
|
+
nova rodada**. Agente encerrado: despache um novo dizendo que é uma confirmação — o relatório é
|
|
101
|
+
append-only e vale o último `**Verdict:**`. Cada relatório carrega o `**Reviewed-SHA:**` —
|
|
102
|
+
obrigatório: o `approve` recusa quando o código andou depois de QUALQUER um deles.
|
|
103
|
+
|
|
104
|
+
## 6. Gate 3
|
|
105
|
+
`morph-spec gate-check {feature} review [--json]` lê os relatórios exigidos, a cobertura dos `Cn` e
|
|
106
|
+
os demais sinais do disco. Violação das verificações mecânicas entra por
|
|
107
|
+
`--signals '{"standardsViolations":[...]}'`. Forçar a passagem apesar de uma pausa:
|
|
108
|
+
`morph-spec gate-decision {feature} review --pause false --reason "..."`. Nunca edite `feature.json`.
|
|
109
|
+
|
|
110
|
+
**`pause === true`** → `AskUserQuestion`:
|
|
111
|
+
```
|
|
112
|
+
question: "Gate 3 — Review de {feature} aprovado?{ reason ? ' Sinal: ' + reason : '' }"
|
|
113
|
+
header: "Gate 3"
|
|
114
|
+
options:
|
|
115
|
+
- { label: "aprovado, fechar feature", description: "Próximo passo: morph-spec finish --pr|--merge (morph-apply §8)" }
|
|
116
|
+
- { label: "preciso ajustar", description: "Apontar correções antes de fechar" }
|
|
117
|
+
- { label: "rollback", description: "Voltar para implement" }
|
|
118
|
+
```
|
|
119
|
+
**`pause === false`** → resumo de 3 linhas (vereditos, cenários provados, bloqueadores: 0) e
|
|
120
|
+
`morph-spec approve {feature} review --mode auto`. A pergunta nomeia a feature: é por ela que o hook
|
|
121
|
+
`state-sync` grava a aprovação. Fechar é da `morph-apply` §8.
|
|
146
122
|
|
|
147
123
|
## Referências
|
|
148
|
-
- `.morph/framework/evals/review-checklist.md` — o que
|
|
124
|
+
- `.morph/framework/evals/review-checklist.md` — o que cada papel procura e o formato dos relatórios
|
|
149
125
|
- `morph-spec verify|mutate|report-check|gate-check` — `.morph/framework/CLI.md`
|
|
150
|
-
- `.morph/framework/MORPH.md` §5 — sinais do Gate 3
|
|
@@ -1,64 +1,52 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: morph-standards
|
|
3
|
-
description: Localiza um standard específico via busca server-side (morph-spec standards --find) e carrega só
|
|
3
|
+
description: Localiza um standard específico via busca server-side (morph-spec standards --find) e carrega só a seção necessária (--show id#âncora)
|
|
4
4
|
version: core
|
|
5
|
-
|
|
6
|
-
user-
|
|
7
|
-
cliVersion: "
|
|
5
|
+
when_to_use: Use quando precisar consultar um standard específico durante a implementação
|
|
6
|
+
user-invocable: true
|
|
7
|
+
cliVersion: "9.0.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-standards
|
|
11
11
|
|
|
12
12
|
## Objetivo
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
para aplicar o standard na maioria dos casos.
|
|
13
|
+
Achar o standard certo para a fatia e pôr no contexto só o trecho que ela precisa. Nunca abra o
|
|
14
|
+
`STANDARDS.json` inteiro.
|
|
16
15
|
|
|
17
16
|
## Quando invocar
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
Durante a implementação, quando surgir dúvida de padrão (arquitetura, contrato, qualidade, teste)
|
|
18
|
+
que o `plan.md` e os standards da fatia não resolvem.
|
|
20
19
|
|
|
21
20
|
## O que fazer
|
|
22
21
|
|
|
23
|
-
1.
|
|
22
|
+
1. **Digest.** Busque no servidor:
|
|
24
23
|
```
|
|
25
|
-
morph-spec standards --find "<domínio/tecnologia da
|
|
24
|
+
morph-spec standards --find "<domínio/tecnologia da fatia>" [--category <cat>] [--tags <a,b>] [--json]
|
|
26
25
|
```
|
|
27
|
-
Devolve o
|
|
28
|
-
|
|
26
|
+
Devolve o top 3 com `id`, `path`, `digest` e as chaves de âncora. O digest é um resumo, não o
|
|
27
|
+
texto do standard: serve para decidir se o standard se aplica e muitas vezes basta para aplicá-lo.
|
|
29
28
|
|
|
30
|
-
2.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
4. Aplique o standard na tarefa atual.
|
|
37
|
-
|
|
38
|
-
5. Registre no `recap.md`: qual standard foi consultado (via `--find`, ou navegação — item abaixo)
|
|
39
|
-
e como foi aplicado.
|
|
29
|
+
2. **Seção.** O digest não bastou → leia só a seção que importa:
|
|
30
|
+
```
|
|
31
|
+
morph-spec standards --show <id>#<âncora>
|
|
32
|
+
```
|
|
33
|
+
A âncora é uma das chaves que o `--find` listou, ou o slug de qualquer heading do `.md`.
|
|
34
|
+
`morph-spec standards --show <id>` mostra o digest e a tabela de âncoras.
|
|
40
35
|
|
|
41
|
-
|
|
36
|
+
3. **Arquivo inteiro** (campo `path`, sob `.morph/framework/standards/`) só quando a fatia toca o
|
|
37
|
+
standard todo ou precisa de um exemplo que nenhuma seção isolada traz.
|
|
42
38
|
|
|
43
|
-
|
|
44
|
-
pra categoria X?", sem um termo de busca claro), nesta ordem:
|
|
39
|
+
4. Dois standards em conflito → adote o mais específico ao stack do projeto.
|
|
45
40
|
|
|
46
|
-
|
|
47
|
-
pra decidir qual `--category` usar num `--find` em seguida.
|
|
48
|
-
2. Só se isso não bastar, abra `.morph/framework/standards/STANDARDS.json` inteiro — último recurso,
|
|
49
|
-
nunca o primeiro passo.
|
|
41
|
+
5. Registre no `**Standards:**` do relatório da fatia (`3-implement/reports/F{n}.md`) qual standard (e qual âncora) aplicou e, havendo, o conflito.
|
|
50
42
|
|
|
51
|
-
##
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
Não invente um standard — padrões não documentados são dívida técnica.
|
|
43
|
+
## Sem query clara
|
|
44
|
+
`morph-spec standards` sem flag lista categorias e contagens; use para escolher o `--category` de
|
|
45
|
+
um `--find` em seguida.
|
|
55
46
|
|
|
56
|
-
##
|
|
57
|
-
|
|
58
|
-
- Critério de implementação claro para a tarefa atual
|
|
59
|
-
- Entrada no recap.md registrando o standard consultado
|
|
47
|
+
## Quando nenhum standard cobre o caso
|
|
48
|
+
Registre no relatório da fatia o critério adotado. Não invente standard: padrão não documentado é dívida.
|
|
60
49
|
|
|
61
50
|
## Referências
|
|
62
|
-
-
|
|
63
|
-
- `.morph/framework/
|
|
64
|
-
- `.morph/framework/MORPH.md` — seção 4 (Como consultar Standards)
|
|
51
|
+
- `.morph/framework/CLI.md` — seção `standards` (flags, `--json`, falhas)
|
|
52
|
+
- `.morph/framework/MORPH.md` — §4 (Como consultar Standards)
|