@polymorphism-tech/morph-spec 7.9.3 → 8.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 +2 -2
- package/README.md +31 -2
- package/bin/morph-spec.js +50 -2
- package/bin/validate.js +379 -379
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +38 -1
- package/docs/QUICKSTART.md +60 -1
- package/framework/CLAUDE.md +13 -2
- package/framework/MORPH.md +38 -2
- package/framework/agents.json +22 -3
- package/framework/commands/commit.md +166 -166
- package/framework/commands/morph-hotfix.md +39 -0
- package/framework/commands/morph-infra.md +215 -215
- package/framework/commands/morph-preflight.md +205 -205
- package/framework/commands/morph-troubleshoot.md +124 -124
- package/framework/hooks/README.md +25 -10
- package/framework/hooks/claude-code/core/gate-guard.js +4 -2
- package/framework/hooks/claude-code/core/loop-detect.js +2 -1
- package/framework/hooks/claude-code/core/post-edit-typecheck.js +14 -5
- package/framework/hooks/claude-code/core/tasks-json-guard.js +4 -2
- package/framework/hooks/claude-code/core/validate-completion.js +1 -1
- package/framework/hooks/claude-code/core/worktree-context.js +160 -0
- package/framework/hooks/claude-code/statusline.py +679 -679
- package/framework/hooks/claude-code/statusline.sh +11 -11
- package/framework/hooks/git/commit-msg/conventional-commits.sh +33 -33
- package/framework/hooks/git/pre-commit/agents.sh +25 -25
- package/framework/hooks/git/pre-commit/orchestrator.sh +64 -64
- package/framework/hooks/git/pre-commit/specs.sh +50 -50
- package/framework/hooks/git/pre-push/run-tests.sh +44 -44
- package/framework/hooks/shared/activity-logger.js +160 -160
- package/framework/hooks/shared/build-check.js +2 -2
- package/framework/hooks/shared/hook-response.js +17 -5
- package/framework/hooks/shared/payload-utils.js +42 -0
- package/framework/hooks/shared/state-reader.js +22 -2
- package/framework/hooks/shared/stdin-reader.js +26 -26
- package/framework/rubrics/backend.json +41 -41
- package/framework/rules/ai-agents-standards.md +45 -45
- package/framework/rules/dotnet-templates.md +86 -86
- package/framework/rules/frontend-standards.md +13 -13
- package/framework/rules/infrastructure-standards.md +27 -27
- package/framework/rules/neon-standards.md +25 -25
- package/framework/rules/nextjs-standards.md +20 -20
- package/framework/rules/nextjs-templates.md +40 -40
- package/framework/schemas/feature.schema.json +95 -1
- package/framework/skills/core/create-umbraco-lp/SKILL.md +1 -1
- package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +1 -1
- package/framework/skills/core/morph-apply/SKILL.md +39 -8
- package/framework/skills/core/morph-brainstorming/SKILL.md +9 -1
- package/framework/skills/core/morph-eval/SKILL.md +6 -1
- package/framework/skills/core/morph-hotfix/SKILL.md +136 -0
- package/framework/skills/core/morph-implement/SKILL.md +8 -4
- package/framework/skills/core/morph-plan/SKILL.md +5 -1
- package/framework/skills/core/morph-proposal/SKILL.md +24 -1
- package/framework/skills/core/morph-review/SKILL.md +3 -2
- package/framework/skills/core/morph-stack-scan/SKILL.md +1 -1
- package/framework/skills/core/morph-standards/SKILL.md +1 -1
- package/framework/standards/STANDARDS.json +7 -2
- package/framework/standards/ai-agents/agent-session.md +160 -160
- package/framework/standards/ai-agents/batching.md +193 -193
- package/framework/standards/ai-agents/context-providers.md +188 -188
- package/framework/standards/ai-agents/mcp-server.md +250 -250
- package/framework/standards/ai-agents/mcp-tools.md +197 -197
- package/framework/standards/ai-agents/middleware-patterns.md +207 -207
- package/framework/standards/ai-agents/modalities-image-gen.md +173 -173
- package/framework/standards/ai-agents/modalities-speech-to-text.md +171 -171
- package/framework/standards/ai-agents/modalities-text-to-speech.md +181 -181
- package/framework/standards/ai-agents/modalities-vision.md +201 -201
- package/framework/standards/ai-agents/multi-agent-patterns.md +155 -155
- package/framework/standards/ai-agents/production.md +275 -275
- package/framework/standards/ai-agents/prompts-in-db.md +214 -214
- package/framework/standards/ai-agents/providers/model-registry.md +158 -158
- package/framework/standards/ai-agents/service-tier-flex.md +135 -135
- package/framework/standards/ai-agents/structured-output.md +249 -249
- package/framework/standards/ai-agents/sweet-spot.md +109 -109
- package/framework/standards/backend/integrations/neon-auth/neon-auth.md +45 -3
- package/framework/templates/.idea/morph-templates.xml +92 -0
- package/framework/templates/.vscode/morph-templates.code-snippets +186 -0
- package/framework/templates/IDE-SNIPPETS.md +262 -262
- package/framework/templates/REGISTRY.json +0 -62
- package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -7
- package/framework/templates/code/dotnet/ai-agents/AgentBootstrap.cs.template +39 -39
- package/framework/templates/code/dotnet/ai-agents/EmbeddingService.cs.template +68 -68
- package/framework/templates/code/dotnet/ai-agents/ModelRegistry.cs.template +117 -117
- package/framework/templates/code/dotnet/ai-agents/PromptRepository.cs.template +95 -95
- package/framework/templates/code/dotnet/ai-agents/ResilientToolMiddleware.cs.template +61 -61
- package/framework/templates/code/dotnet/ai-agents/VectorSearchTool.cs.template +107 -107
- package/framework/templates/code/dotnet/ai-agents/model-registry.json.template +58 -58
- package/framework/templates/code/dotnet/contracts/contracts-vsa.cs +281 -281
- package/framework/templates/code/dotnet/database/migration.cs +83 -83
- package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -21
- package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -4
- package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -4
- package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -15
- package/framework/templates/code/sql/ai-agents/agent-prompts-migration.sql.template +58 -58
- package/framework/templates/code/sql/ai-agents/pgvector-embeddings-migration.sql.template +91 -91
- package/framework/templates/code/typescript/contracts.ts +167 -167
- package/framework/templates/docs/clarifications.md +253 -253
- package/framework/templates/docs/schema-analysis.md +119 -119
- package/framework/templates/docs/ui-components.md +52 -52
- package/framework/templates/docs/ui-design-system.md +76 -76
- package/framework/templates/docs/ui-flows.md +167 -167
- package/framework/templates/docs/ui-mockups.md +98 -98
- package/framework/templates/feature/decisions.md +122 -122
- package/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +43 -43
- package/framework/templates/frontend/nextjs/client-component.tsx.hbs +26 -26
- package/framework/templates/frontend/nextjs/env.mjs.hbs +32 -32
- package/framework/templates/frontend/nextjs/feature-form.tsx.hbs +56 -56
- package/framework/templates/frontend/nextjs/page.tsx.hbs +22 -22
- package/framework/templates/frontend/nextjs/tsconfig.json.hbs +26 -26
- package/framework/templates/frontend/nextjs/use-feature.ts.hbs +54 -54
- package/framework/templates/infrastructure/docker/Dockerfile.template +58 -58
- package/framework/templates/infrastructure/docker/docker-compose.template.yml +50 -50
- package/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -38
- package/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -48
- package/framework/templates/infrastructure/github/README.md +56 -56
- package/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +45 -45
- package/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +27 -27
- package/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +59 -59
- package/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +39 -39
- package/framework/templates/integrations/asaas-client.cs +387 -387
- package/framework/templates/integrations/asaas-webhook.cs +351 -351
- package/framework/templates/meta-prompts/fusion/fusion-agent.md +76 -76
- package/framework/templates/meta-prompts/fusion/fusion-aggregator.md +100 -100
- package/framework/templates/meta-prompts/validators/pre-commit-validator.md +95 -95
- package/framework/templates/project/validate.js +120 -120
- package/framework/templates/state.template.json +17 -17
- package/framework/templates/ui/design-system.css +226 -226
- package/package.json +1 -1
- package/src/commands/dashboard/dashboard.js +53 -53
- package/src/commands/index.js +13 -13
- package/src/commands/mcp/mcp-setup.js +519 -519
- package/src/commands/project/checkpoint.js +209 -209
- package/src/commands/project/doctor.js +4 -2
- package/src/commands/project/init.js +46 -2
- package/src/commands/project/update.js +5 -3
- package/src/commands/project/worktree.js +1005 -46
- package/src/commands/state/advance.js +17 -2
- package/src/commands/state/approve.js +18 -1
- package/src/commands/state/create.js +158 -14
- package/src/commands/state/retype.js +126 -0
- package/src/commands/state/score.js +4 -0
- package/src/commands/tasks/dag.js +32 -0
- package/src/commands/validation/index.js +1 -0
- package/src/commands/validation/validate-feature.js +33 -5
- package/src/commands/validation/verify.js +190 -0
- package/src/core/state/phase-state-machine.js +197 -197
- package/src/core/state/state-manager.js +35 -10
- package/src/core/templates/template-renderer.js +477 -477
- package/src/core/work-types.js +79 -0
- package/src/dashboard/app/components/DetailPanel.jsx +11 -11
- package/src/dashboard/app/components/FlowGraph.jsx +17 -17
- package/src/dashboard/app/components/SearchFilter.jsx +22 -22
- package/src/dashboard/app/hooks/useDetailPanel.js +15 -15
- package/src/dashboard/app/main.jsx +13 -13
- package/src/dashboard/app/pages/AgentMap.jsx +370 -370
- package/src/dashboard/app/pages/HookInspector.jsx +418 -418
- package/src/dashboard/app/pages/LiveState.jsx +11 -1
- package/src/dashboard/app/pages/PhasePipeline.jsx +408 -408
- package/src/dashboard/app/pages/RulesMap.jsx +273 -273
- package/src/dashboard/app/pages/SkillsLibrary.jsx +366 -366
- package/src/dashboard/app/pages/Standards.jsx +332 -332
- package/src/dashboard/app/styles/index.css +47 -47
- package/src/dashboard/index.html +12 -12
- package/src/dashboard/package.json +24 -24
- package/src/dashboard/scanner/hooks-scanner.js +41 -41
- package/src/dashboard/scanner/phases-scanner.js +15 -15
- package/src/dashboard/scanner/rubrics-scanner.js +12 -12
- package/src/dashboard/scanner/rules-scanner.js +37 -37
- package/src/dashboard/scanner/skills-scanner.js +43 -43
- package/src/dashboard/scanner/squads-scanner.js +13 -13
- package/src/dashboard/scanner/standards-scanner.js +26 -26
- package/src/dashboard/scanner/state-scanner.js +42 -0
- package/src/dashboard/vite-plugin-morph-data.js +17 -17
- package/src/dashboard/vite.config.js +24 -24
- package/src/lib/agents/metrics-aggregator.js +56 -56
- package/src/lib/agents/metrics-calculator.js +125 -125
- package/src/lib/agents/output-collector.js +73 -73
- package/src/lib/detectors/claude-config-detector.js +152 -152
- package/src/lib/detectors/design-system-detector.js +231 -231
- package/src/lib/detectors/index.js +217 -217
- package/src/lib/generators/architecture-scanner.js +639 -639
- package/src/lib/generators/design-system-generator.js +508 -508
- package/src/lib/generators/index.js +13 -13
- package/src/lib/generators/settings-generator.js +209 -209
- package/src/lib/hooks/hook-executor.js +167 -167
- package/src/lib/installers/mcp-installer.js +719 -719
- package/src/lib/installers/memory-installer.js +1 -1
- package/src/lib/risk-detector.js +16 -0
- package/src/lib/tasks/dispatch-planner.js +122 -4
- package/src/lib/tasks/mermaid-renderer.js +132 -0
- package/src/lib/tasks/task-classifier.js +30 -30
- package/src/lib/tasks/task-parser.js +209 -209
- package/src/lib/tasks/test-runner.js +27 -6
- package/src/lib/validators/architecture/architecture-validator.js +259 -259
- package/src/lib/validators/checkpoint-persistence.js +39 -39
- package/src/lib/validators/contracts/contract-compliance-validator.js +274 -274
- package/src/lib/validators/css/css-validator.js +340 -340
- package/src/lib/validators/packages/package-validator.js +347 -347
- package/src/lib/validators/shared/emit-validator-dispatch.js +14 -14
- package/src/lib/validators/shared/issue-counter.js +14 -14
- package/src/lib/validators/validation-runner.js +349 -349
- package/src/lib/validators/verify-runner.js +322 -0
- package/src/lib/work-type-detector.js +143 -0
- package/src/scripts/setup-infra.js +32 -5
- package/src/utils/agent-id-mapper.js +11 -11
- package/src/utils/agents-installer.js +10 -6
- package/src/utils/claude-settings-manager.js +300 -300
- package/src/utils/file-copier.js +43 -0
- package/src/utils/hooks-installer.js +41 -11
- package/src/utils/skills-installer.js +174 -174
- package/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
- package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
- package/src/lib/tasks/wave-resolver.js +0 -353
package/CLAUDE.md
CHANGED
|
@@ -49,7 +49,7 @@ No build step — pure ESM JavaScript, runs directly via Node.js 18+.
|
|
|
49
49
|
- **`framework/`** — Metadata installed into target projects (READ-ONLY at runtime):
|
|
50
50
|
- `MORPH.md` — NLH charter (the single source of behavioral truth)
|
|
51
51
|
- `CLAUDE.md` — Runtime instructions injected into target's `.claude/CLAUDE.md`
|
|
52
|
-
- `agents.json` (v5.
|
|
52
|
+
- `agents.json` (v5.2.0) — 8 agents: 7 domain personas + 1 stage persona (`scout`, read-only), no tiers
|
|
53
53
|
- `phases.json` — 5 phases (proposal, uiux, plan, implement, review)
|
|
54
54
|
- `standards/STANDARDS.json` — index of available standards
|
|
55
55
|
- `hooks/claude-code/core/` — 7 fail-open guardrail hooks
|
|
@@ -70,7 +70,7 @@ No build step — pure ESM JavaScript, runs directly via Node.js 18+.
|
|
|
70
70
|
|
|
71
71
|
**Stack-aware filtering:** Assets declare `stacks: ['dotnet']` in YAML frontmatter or `stack: ['dotnet']` in `agents.json`. `setup-infra.js` reads `config.json → project.stack`, splits into tags, and installs only matching assets.
|
|
72
72
|
|
|
73
|
-
**Personas, not tiers:** `agents.json` has
|
|
73
|
+
**Personas, not tiers:** `agents.json` has 8 flat personas — 7 domain personas (dotnet-senior, ef-modeler, maf-expert, nextjs-expert, ui-designer, infra-engineer, evaluator) plus 1 stage persona (`scout`, read-only). `model` is sized per stage: `sonnet` for implementers, `opus` for `evaluator`, `haiku` for `scout`. No tier system — Claude assumes the 3 NLH roles (Orchestrator/Specialist/Evaluator) per MORPH.md.
|
|
74
74
|
|
|
75
75
|
### Phase Sequence
|
|
76
76
|
|
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> Spec-driven development framework for multi-stack projects. Turns feature requests into implementation-ready code through structured, AI-orchestrated phases.
|
|
4
4
|
|
|
5
5
|
**Package:** `@polymorphism-tech/morph-spec`
|
|
6
|
-
**Version:**
|
|
6
|
+
**Version:** 8.0.0
|
|
7
7
|
**Requires:** Node.js 22+, Claude Code
|
|
8
8
|
|
|
9
9
|
---
|
|
@@ -121,6 +121,14 @@ morph-spec approval-status {feature}
|
|
|
121
121
|
|
|
122
122
|
---
|
|
123
123
|
|
|
124
|
+
## Work-type routing & worktrees
|
|
125
|
+
|
|
126
|
+
Not every change deserves the full pipeline. Every feature is born with a **work type** — `feature`, `bug`, `chore`, or `hotfix` — set via `morph-spec create {feature} --type <type>` or classified from free text with `--request "<text>"`. The type dimensions the pipeline: `feature` runs the full proposal → [uiux] → plan → implement → review sequence; `bug` runs a lean proposal/plan; `chore` skips straight to implement (Gates 1/2 stamped by policy at birth); `hotfix` runs scout (read-only root-cause) → surgical fix → test loop, and its Gate 3 always pauses for a human even under `trust: auto`. Change the type mid-flight with `morph-spec retype {feature} {newType}` (undoes only policy-stamped gates, preserves human approvals, blocked after Gate 3).
|
|
127
|
+
|
|
128
|
+
Independent features can also be developed **in parallel, each isolated in its own git worktree** — one feature, one worktree, one Claude Code instance. `morph-spec create {feature} --worktree` (or `morph-spec worktree setup {feature}`) creates `.worktrees/{feature}/` on branch `morph/{feature}`. The authoritative `feature.json` travels committed on the branch; shared infra (`node_modules`, `.claude`, `.morph/framework`) is linked via junctions (`morph-spec worktree link --all` repairs it if missing). Close out with `morph-spec worktree finish {feature}` (merges `--no-ff` back into the clean primary root) followed by `morph-spec archive {feature}` at the root; `morph-spec worktree list` shows every active worktree with its phase and gate status.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
124
132
|
## Slash commands
|
|
125
133
|
|
|
126
134
|
These commands are available inside Claude Code after init.
|
|
@@ -130,6 +138,7 @@ These commands are available inside Claude Code after init.
|
|
|
130
138
|
| --------------------------- | --------------------------------------------------------- |
|
|
131
139
|
| `/morph-proposal {feature}` | Full spec pipeline (phases 0-4, pauses at approval gates) |
|
|
132
140
|
| `/morph-apply {feature}` | Implement approved feature (phase 5) |
|
|
141
|
+
| `/morph-hotfix {feature}` | Surgical hotfix ADW — scout → fix → human Gate 3 → ship |
|
|
133
142
|
| `/morph-status` | Feature status dashboard |
|
|
134
143
|
| `/morph-preflight` | Pre-implementation validation |
|
|
135
144
|
|
|
@@ -166,6 +175,26 @@ morph-spec status {feature} # Feature status dashboard
|
|
|
166
175
|
morph-spec validate # Run all validators
|
|
167
176
|
morph-spec validate {validator} # Run specific validator
|
|
168
177
|
morph-spec validate-feature {feature} # Content-aware feature validation
|
|
178
|
+
morph-spec verify {feature} [task] # Deterministic build+tests+validators chain, before the LLM judge
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Work-type routing
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
morph-spec create {feature} --type feature|bug|chore|hotfix # Explicit birth: type dimensions the pipeline
|
|
185
|
+
morph-spec create {feature} --request "<free text>" # Deterministic detector classifies the type
|
|
186
|
+
morph-spec retype {feature} {newType} # Change work type mid-flight (blocked after Gate 3)
|
|
187
|
+
morph-spec dag {feature} [--mermaid] # DAG dispatch decision; --mermaid emits a flowchart
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Worktrees (parallel development)
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
morph-spec create {feature} --worktree # Birth the feature already isolated in its own worktree
|
|
194
|
+
morph-spec worktree setup {feature} # Create .worktrees/{feature}/ on branch morph/{feature}
|
|
195
|
+
morph-spec worktree link [--all] # Relink shared infra (node_modules, .claude, .morph/framework)
|
|
196
|
+
morph-spec worktree finish {feature} # Merge --no-ff back to the primary root, clean up (requires Gate 3)
|
|
197
|
+
morph-spec worktree list [--json] # List active feature worktrees with phase/gate status
|
|
169
198
|
```
|
|
170
199
|
|
|
171
200
|
---
|
|
@@ -365,4 +394,4 @@ Code generated by morph-spec (contracts, templates, implementation output) belon
|
|
|
365
394
|
|
|
366
395
|
---
|
|
367
396
|
|
|
368
|
-
*morph-spec
|
|
397
|
+
*morph-spec v8.0.0 by [Polymorphism Tech](https://polymorphism.tech)*
|
package/bin/morph-spec.js
CHANGED
|
@@ -23,7 +23,7 @@ import { installPluginCommand } from '../src/commands/project/install-plugin-cmd
|
|
|
23
23
|
import { updateCommand } from '../src/commands/project/update.js';
|
|
24
24
|
import { doctorCommand } from '../src/commands/project/doctor.js';
|
|
25
25
|
import { statusCommand } from '../src/commands/project/status.js';
|
|
26
|
-
import { worktreeSetupCommand } from '../src/commands/project/worktree.js';
|
|
26
|
+
import { worktreeSetupCommand, worktreeLinkCommand, worktreeFinishCommand, worktreeListCommand } from '../src/commands/project/worktree.js';
|
|
27
27
|
|
|
28
28
|
// === Approval gates (human-only) ===
|
|
29
29
|
import { approveCommand, approvalStatusCommand, unapproveCommand } from '../src/commands/state/approve.js';
|
|
@@ -32,6 +32,7 @@ import { archiveCommand } from '../src/commands/state/archive.js';
|
|
|
32
32
|
import { scoreCommand } from '../src/commands/state/score.js';
|
|
33
33
|
import { gateDecisionCommand } from '../src/commands/state/gate-decision.js';
|
|
34
34
|
import { createCommand } from '../src/commands/state/create.js';
|
|
35
|
+
import { retypeCommand } from '../src/commands/state/retype.js';
|
|
35
36
|
|
|
36
37
|
// === Tasks ===
|
|
37
38
|
import { dagCommand } from '../src/commands/tasks/dag.js';
|
|
@@ -39,6 +40,7 @@ import { dagCommand } from '../src/commands/tasks/dag.js';
|
|
|
39
40
|
// === Validation ===
|
|
40
41
|
import { validateCommand } from './validate.js';
|
|
41
42
|
import { validateFeatureCommand } from '../src/commands/validation/validate-feature.js';
|
|
43
|
+
import { verifyCommand } from '../src/commands/validation/verify.js';
|
|
42
44
|
|
|
43
45
|
// === Scaffolding ===
|
|
44
46
|
import { scaffoldDotnetCommand, scaffoldNextjsCommand } from '../src/commands/scaffold/scaffold.js';
|
|
@@ -170,8 +172,12 @@ program
|
|
|
170
172
|
|
|
171
173
|
program
|
|
172
174
|
.command('create <feature>')
|
|
173
|
-
.description('
|
|
175
|
+
.description('Classify work type (--type/--request), scaffold + stamp policy gates, and create the canonical feature.json (explicit birth — see framework/schemas/feature.schema.json)')
|
|
174
176
|
.option('--status <status>', 'Initial feature status (default: in_progress)')
|
|
177
|
+
.option('--type <type>', 'Work type: feature|bug|chore|hotfix (default: feature) — see src/core/work-types.js')
|
|
178
|
+
.option('--request <text>', 'Free-text request classified by the deterministic detector; tie/none exits 2 with candidates for an LLM/user decision (feature NOT created)')
|
|
179
|
+
.option('--detect-source <source>', 'workTypeDetection.source recorded when --type is explicit: deterministic|llm|user (default: user)')
|
|
180
|
+
.option('--worktree', 'Create the feature already inside its own git worktree (branch morph/{feature}) — fails open outside a git repo')
|
|
175
181
|
.option('--json', 'Output as JSON')
|
|
176
182
|
.action((feature, options) => createCommand(feature, options));
|
|
177
183
|
|
|
@@ -182,11 +188,19 @@ program
|
|
|
182
188
|
.option('--json', 'Output as JSON')
|
|
183
189
|
.action((feature, task, score, options) => scoreCommand(feature, task, score, options));
|
|
184
190
|
|
|
191
|
+
program
|
|
192
|
+
.command('retype <feature> <newType>')
|
|
193
|
+
.description('Change a feature work type mid-flight (feature|bug|chore|hotfix) — resets only policy-stamped gates, preserves human approvals')
|
|
194
|
+
.option('--reason <text>', 'Why the type changed')
|
|
195
|
+
.option('--json', 'Output as JSON')
|
|
196
|
+
.action((feature, newType, options) => retypeCommand(feature, newType, options));
|
|
197
|
+
|
|
185
198
|
// ─── Tasks ────────────────────────────────────────────────────────────────
|
|
186
199
|
program
|
|
187
200
|
.command('dag <feature>')
|
|
188
201
|
.description('Analyze the tasks.json DAG and print the sequential vs parallel dispatch decision (effort-weighted)')
|
|
189
202
|
.option('--json', 'Output as JSON')
|
|
203
|
+
.option('--mermaid', 'Emit the tasks.json DAG as a Mermaid flowchart (flowchart TD)')
|
|
190
204
|
.action((feature, options) => dagCommand(feature, options));
|
|
191
205
|
|
|
192
206
|
// ─── Validation ───────────────────────────────────────────────────────────
|
|
@@ -215,6 +229,19 @@ program
|
|
|
215
229
|
.option('-v, --verbose', 'Show detailed output')
|
|
216
230
|
.action(validateFeatureCommand);
|
|
217
231
|
|
|
232
|
+
program
|
|
233
|
+
.command('verify <feature> [task]')
|
|
234
|
+
.description('Run the deterministic verification chain (build + tests + validators) — code before the LLM judge')
|
|
235
|
+
.option('--json', 'Output as JSON')
|
|
236
|
+
.option('--rubric <id>', 'Force a rubric (default: by task group → config → default)')
|
|
237
|
+
.option('--timeout <ms>', 'Build timeout in ms (default 120000)', (v) => parseInt(v, 10))
|
|
238
|
+
.option('--skip-tests', 'Skip the test node')
|
|
239
|
+
.option('--skip-build', 'Skip the build node')
|
|
240
|
+
.option('--no-persist', 'Do not persist the result to feature.json')
|
|
241
|
+
.action((feature, task, options) =>
|
|
242
|
+
verifyCommand(feature, task, { ...options, noPersist: options.persist === false })
|
|
243
|
+
);
|
|
244
|
+
|
|
218
245
|
// ─── Scaffolding ──────────────────────────────────────────────────────────
|
|
219
246
|
const scaffoldCmd = program
|
|
220
247
|
.command('scaffold')
|
|
@@ -273,6 +300,27 @@ worktreeCommand
|
|
|
273
300
|
.option('--fresh', 'Create a new dated branch even if one already exists')
|
|
274
301
|
.action((feature, options) => worktreeSetupCommand(feature, options));
|
|
275
302
|
|
|
303
|
+
worktreeCommand
|
|
304
|
+
.command('link')
|
|
305
|
+
.description('Link shared infra (node_modules[, .claude, .morph/framework]) into the current worktree')
|
|
306
|
+
.option('--target <path>', 'Worktree path to link into (default: cwd)')
|
|
307
|
+
.option('--all', 'Link all shared dirs, not just node_modules')
|
|
308
|
+
.action((options) => worktreeLinkCommand(options));
|
|
309
|
+
|
|
310
|
+
worktreeCommand
|
|
311
|
+
.command('finish <feature>')
|
|
312
|
+
.description('Merge the feature branch back into the primary root and clean up the worktree (requires Gate 3 approved)')
|
|
313
|
+
.option('--keep', 'Keep the worktree and branch after merging')
|
|
314
|
+
.option('--force', 'Skip the Gate-3-approved precondition')
|
|
315
|
+
.option('--discard-ignored', 'Allow removing the worktree even though it holds gitignored files that exist nowhere else (e.g. .env) — they are destroyed')
|
|
316
|
+
.action((feature, options) => worktreeFinishCommand(feature, options));
|
|
317
|
+
|
|
318
|
+
worktreeCommand
|
|
319
|
+
.command('list')
|
|
320
|
+
.description('List active feature worktrees with their phase and gate status')
|
|
321
|
+
.option('--json', 'Output as JSON')
|
|
322
|
+
.action((options) => worktreeListCommand(options));
|
|
323
|
+
|
|
276
324
|
// ─── Dashboard ────────────────────────────────────────────────────────────
|
|
277
325
|
program
|
|
278
326
|
.command('dashboard')
|