@polymorphism-tech/morph-spec 4.8.18 → 4.9.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.
Files changed (138) hide show
  1. package/CLAUDE.md +98 -0
  2. package/README.md +2 -2
  3. package/bin/morph-spec.js +15 -56
  4. package/bin/task-manager.js +115 -14
  5. package/bin/validate.js +67 -33
  6. package/claude-plugin.json +1 -1
  7. package/docs/CHEATSHEET.md +201 -203
  8. package/docs/QUICKSTART.md +2 -2
  9. package/framework/CLAUDE.md +21 -0
  10. package/framework/agents.json +758 -164
  11. package/framework/hooks/claude-code/post-tool-use/context-refresh.js +1 -1
  12. package/framework/hooks/claude-code/post-tool-use/dispatch.js +2 -2
  13. package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +155 -0
  14. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +1 -1
  15. package/framework/hooks/claude-code/session-start/inject-morph-context.js +71 -2
  16. package/framework/hooks/claude-code/statusline.py +76 -30
  17. package/framework/hooks/claude-code/user-prompt/set-terminal-title.js +14 -6
  18. package/framework/hooks/shared/activity-logger.js +0 -24
  19. package/framework/hooks/shared/phase-utils.js +3 -0
  20. package/framework/hooks/shared/skill-reminder-helpers.js +79 -0
  21. package/framework/hooks/shared/stale-task-reset.js +57 -0
  22. package/framework/hooks/shared/state-reader.js +2 -2
  23. package/framework/hooks/shared/worktree-helpers.js +53 -0
  24. package/framework/phases.json +40 -8
  25. package/framework/skills/level-0-meta/brainstorming/SKILL.md +1 -1
  26. package/framework/skills/level-0-meta/code-review/SKILL.md +1 -1
  27. package/framework/skills/level-0-meta/code-review-nextjs/SKILL.md +163 -163
  28. package/framework/skills/level-0-meta/frontend-review/SKILL.md +5 -5
  29. package/framework/skills/level-0-meta/morph-checklist/SKILL.md +2 -2
  30. package/framework/skills/level-0-meta/morph-init/SKILL.md +5 -5
  31. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +4 -4
  32. package/framework/skills/level-0-meta/morph-replicate/references/blazor-html-mapping.md +1 -1
  33. package/framework/skills/level-0-meta/post-implementation/SKILL.md +59 -12
  34. package/framework/skills/level-0-meta/simulation-checklist/SKILL.md +1 -1
  35. package/framework/skills/level-0-meta/terminal-title/SKILL.md +1 -1
  36. package/framework/skills/level-0-meta/tool-usage-guide/SKILL.md +1 -1
  37. package/framework/skills/level-0-meta/tool-usage-guide/references/tools-per-phase.md +6 -5
  38. package/framework/skills/level-0-meta/verification-before-completion/SKILL.md +1 -1
  39. package/framework/skills/level-1-workflows/phase-clarify/SKILL.md +215 -189
  40. package/framework/skills/level-1-workflows/phase-codebase-analysis/SKILL.md +251 -251
  41. package/framework/skills/level-1-workflows/phase-design/SKILL.md +382 -365
  42. package/framework/skills/level-1-workflows/phase-implement/SKILL.md +492 -450
  43. package/framework/skills/level-1-workflows/phase-setup/SKILL.md +194 -190
  44. package/framework/skills/level-1-workflows/phase-tasks/SKILL.md +270 -270
  45. package/framework/skills/level-1-workflows/phase-uiux/SKILL.md +285 -285
  46. package/framework/standards/STANDARDS.json +640 -88
  47. package/framework/standards/infrastructure/vercel/vercel-database.md +106 -0
  48. package/framework/templates/REGISTRY.json +1825 -1909
  49. package/framework/templates/context/CONTEXT-FEATURE.md +276 -276
  50. package/framework/templates/docs/onboarding.md +1 -5
  51. package/framework/workflows/configs/nodejs-cli.json +40 -0
  52. package/package.json +2 -6
  53. package/src/commands/agents/dispatch-agents.js +55 -4
  54. package/src/commands/project/doctor.js +16 -47
  55. package/src/commands/project/init.js +1 -1
  56. package/src/commands/project/status.js +2 -2
  57. package/src/commands/project/update.js +381 -365
  58. package/src/commands/project/worktree.js +154 -0
  59. package/src/commands/state/advance-phase.js +120 -30
  60. package/src/commands/state/approve.js +2 -2
  61. package/src/commands/state/index.js +7 -8
  62. package/src/commands/state/phase-runner.js +1 -1
  63. package/src/commands/state/state.js +61 -6
  64. package/src/commands/tasks/task.js +78 -99
  65. package/src/commands/templates/template-render.js +93 -173
  66. package/src/commands/trust/trust.js +26 -21
  67. package/src/core/paths/output-schema.js +15 -0
  68. package/src/core/state/state-manager.js +28 -54
  69. package/src/core/workflows/workflow-detector.js +9 -87
  70. package/src/lib/phase-chain/phase-validator.js +330 -0
  71. package/src/lib/stack/stack-profile.js +88 -0
  72. package/src/lib/tasks/task-classifier.js +16 -0
  73. package/src/lib/tasks/test-runner.js +77 -0
  74. package/src/lib/trust/trust-manager.js +32 -144
  75. package/src/lib/validators/spec-validator.js +58 -4
  76. package/src/lib/validators/validation-runner.js +23 -11
  77. package/src/scripts/setup-infra.js +240 -224
  78. package/src/utils/agents-installer.js +2 -2
  79. package/src/utils/banner.js +1 -1
  80. package/src/utils/claude-settings-manager.js +1 -1
  81. package/src/utils/file-copier.js +1 -0
  82. package/src/utils/hooks-installer.js +258 -8
  83. package/framework/hooks/dev/check-sync-health.js +0 -117
  84. package/framework/hooks/dev/guard-version-numbers.js +0 -57
  85. package/framework/hooks/dev/sync-standards-registry.js +0 -60
  86. package/framework/hooks/dev/sync-template-registry.js +0 -60
  87. package/framework/hooks/dev/validate-skill-format.js +0 -70
  88. package/framework/hooks/dev/validate-standard-format.js +0 -73
  89. package/framework/templates/meta-prompts/hops/hop-retry.md +0 -78
  90. package/framework/templates/meta-prompts/hops/hop-validation.md +0 -97
  91. package/framework/templates/meta-prompts/hops/hop-wrapper.md +0 -36
  92. package/framework/workflows/configs/design-impl.json +0 -49
  93. package/framework/workflows/configs/express.json +0 -45
  94. package/framework/workflows/configs/fast-track.json +0 -42
  95. package/framework/workflows/configs/full-morph.json +0 -79
  96. package/framework/workflows/configs/fusion.json +0 -39
  97. package/framework/workflows/configs/long-running.json +0 -33
  98. package/framework/workflows/configs/spec-only.json +0 -43
  99. package/framework/workflows/configs/ui-refresh.json +0 -49
  100. package/framework/workflows/configs/zero-touch.json +0 -82
  101. package/src/commands/project/monitor.js +0 -295
  102. package/src/commands/project/tutorial.js +0 -115
  103. package/src/commands/state/validate-phase.js +0 -238
  104. package/src/commands/templates/generate-contracts.js +0 -445
  105. package/src/core/orchestrator.js +0 -171
  106. package/src/core/registry/command-registry.js +0 -28
  107. package/src/core/registry/index.js +0 -8
  108. package/src/core/registry/validator-registry.js +0 -204
  109. package/src/core/templates/template-validator.js +0 -296
  110. package/src/generator/config-generator.js +0 -206
  111. package/src/generator/templates/config.json.template +0 -40
  112. package/src/generator/templates/project.md.template +0 -67
  113. package/src/lib/agents/micro-agent-factory.js +0 -161
  114. package/src/lib/analysis/complexity-analyzer.js +0 -441
  115. package/src/lib/analysis/index.js +0 -7
  116. package/src/lib/analytics/analytics-engine.js +0 -345
  117. package/src/lib/checkpoints/checkpoint-hooks.js +0 -298
  118. package/src/lib/checkpoints/index.js +0 -7
  119. package/src/lib/context/context-bundler.js +0 -241
  120. package/src/lib/context/context-optimizer.js +0 -212
  121. package/src/lib/context/context-tracker.js +0 -273
  122. package/src/lib/context/core-four-tracker.js +0 -201
  123. package/src/lib/context/mcp-optimizer.js +0 -200
  124. package/src/lib/execution/fusion-executor.js +0 -304
  125. package/src/lib/execution/parallel-executor.js +0 -270
  126. package/src/lib/hooks/stop-hook-executor.js +0 -286
  127. package/src/lib/hops/hop-composer.js +0 -221
  128. package/src/lib/phase-chain/eligibility-checker.js +0 -243
  129. package/src/lib/threads/thread-coordinator.js +0 -238
  130. package/src/lib/threads/thread-manager.js +0 -317
  131. package/src/lib/tracking/artifact-trail.js +0 -202
  132. package/src/scanner/project-scanner.js +0 -242
  133. package/src/ui/diff-display.js +0 -91
  134. package/src/ui/interactive-wizard.js +0 -96
  135. package/src/ui/user-review.js +0 -211
  136. package/src/ui/wizard-questions.js +0 -188
  137. package/src/utils/color-utils.js +0 -70
  138. package/src/utils/process-handler.js +0 -97
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "$schema": "./agent-schema.json",
3
- "version": "3.2.0-hierarchical",
4
- "total_agents": 39,
3
+ "version": "3.3.0-hierarchical",
4
+ "total_agents": 43,
5
5
  "tiers": {
6
6
  "tier_1_orchestrators": 3,
7
7
  "tier_2_leaders": 4,
8
- "tier_3_specialists": 27,
9
- "tier_4_validators": 5
8
+ "tier_3_specialists": 29,
9
+ "tier_4_validators": 7
10
10
  },
11
11
  "agents": {
12
12
  "_comment_tier_1": "=== TIER 1: ORCHESTRATORS (3) ===",
@@ -20,10 +20,7 @@
20
20
  ],
21
21
  "keywords": [],
22
22
  "always_active": true,
23
- "validators": [
24
- "architecture",
25
- "packages"
26
- ],
23
+ "validators": [],
27
24
  "relationships": {
28
25
  "reports_to": "user",
29
26
  "coordinates": [
@@ -42,9 +39,21 @@
42
39
  "team_role": "lead"
43
40
  },
44
41
  "standards": [
45
- { "id": "core-coding", "scope": "all", "priority": "required" },
46
- { "id": "core-architecture", "scope": "all", "priority": "required" },
47
- { "id": "backend-dotnet-program-cs-checklist", "scope": "implement", "priority": "required" }
42
+ {
43
+ "id": "core-coding",
44
+ "scope": "all",
45
+ "priority": "required"
46
+ },
47
+ {
48
+ "id": "core-architecture",
49
+ "scope": "all",
50
+ "priority": "required"
51
+ },
52
+ {
53
+ "id": "backend-dotnet-program-cs-checklist",
54
+ "scope": "implement",
55
+ "priority": "required"
56
+ }
48
57
  ],
49
58
  "teammate": {
50
59
  "role": "Team Lead (Delegate Mode)",
@@ -68,9 +77,7 @@
68
77
  "agent workflow"
69
78
  ],
70
79
  "always_active": false,
71
- "validators": [
72
- "architecture"
73
- ],
80
+ "validators": [],
74
81
  "relationships": {
75
82
  "reports_to": "standards-architect",
76
83
  "coordinates": [
@@ -87,12 +94,36 @@
87
94
  ]
88
95
  },
89
96
  "standards": [
90
- { "id": "core-coding", "scope": "all", "priority": "required" },
91
- { "id": "core-architecture", "scope": "all", "priority": "required" },
92
- { "id": "ai-agents-setup", "scope": "all", "priority": "required" },
93
- { "id": "ai-agents-workflows", "scope": "design", "priority": "required" },
94
- { "id": "ai-agents-production", "scope": "implement", "priority": "required" },
95
- { "id": "ai-agents-blazor-ui", "scope": "implement", "priority": "reference" }
97
+ {
98
+ "id": "core-coding",
99
+ "scope": "all",
100
+ "priority": "required"
101
+ },
102
+ {
103
+ "id": "core-architecture",
104
+ "scope": "all",
105
+ "priority": "required"
106
+ },
107
+ {
108
+ "id": "ai-agents-setup",
109
+ "scope": "all",
110
+ "priority": "required"
111
+ },
112
+ {
113
+ "id": "ai-agents-workflows",
114
+ "scope": "design",
115
+ "priority": "required"
116
+ },
117
+ {
118
+ "id": "ai-agents-production",
119
+ "scope": "implement",
120
+ "priority": "required"
121
+ },
122
+ {
123
+ "id": "ai-agents-blazor-ui",
124
+ "scope": "implement",
125
+ "priority": "reference"
126
+ }
96
127
  ],
97
128
  "teammate": {
98
129
  "role": "AI Architect",
@@ -129,8 +160,16 @@
129
160
  ]
130
161
  },
131
162
  "standards": [
132
- { "id": "core-coding", "scope": "all", "priority": "required" },
133
- { "id": "core-architecture", "scope": "all", "priority": "required" }
163
+ {
164
+ "id": "core-coding",
165
+ "scope": "all",
166
+ "priority": "required"
167
+ },
168
+ {
169
+ "id": "core-architecture",
170
+ "scope": "all",
171
+ "priority": "required"
172
+ }
134
173
  ],
135
174
  "teammate": null
136
175
  },
@@ -179,10 +218,26 @@
179
218
  "team_role": "domain_leader"
180
219
  },
181
220
  "standards": [
182
- { "id": "core-coding", "scope": "all", "priority": "required" },
183
- { "id": "core-architecture", "scope": "all", "priority": "required" },
184
- { "id": "backend-dotnet-core", "scope": "implement", "priority": "required" },
185
- { "id": "backend-dotnet-program-cs-checklist", "scope": "implement", "priority": "required" }
221
+ {
222
+ "id": "core-coding",
223
+ "scope": "all",
224
+ "priority": "required"
225
+ },
226
+ {
227
+ "id": "core-architecture",
228
+ "scope": "all",
229
+ "priority": "required"
230
+ },
231
+ {
232
+ "id": "backend-dotnet-core",
233
+ "scope": "implement",
234
+ "priority": "required"
235
+ },
236
+ {
237
+ "id": "backend-dotnet-program-cs-checklist",
238
+ "scope": "implement",
239
+ "priority": "required"
240
+ }
186
241
  ],
187
242
  "teammate": {
188
243
  "role": "Backend Squad Leader",
@@ -206,12 +261,15 @@
206
261
  "ci/cd",
207
262
  "container",
208
263
  "iac",
209
- "pipeline"
264
+ "pipeline",
265
+ "vercel",
266
+ "neon",
267
+ "planetscale",
268
+ "serverless database",
269
+ "serverless postgres"
210
270
  ],
211
271
  "always_active": true,
212
- "validators": [
213
- "architecture"
214
- ],
272
+ "validators": [],
215
273
  "relationships": {
216
274
  "reports_to": "standards-architect",
217
275
  "coordinates": [
@@ -228,13 +286,26 @@
228
286
  "team_role": "domain_leader"
229
287
  },
230
288
  "standards": [
231
- { "id": "core-coding", "scope": "all", "priority": "required" },
232
- { "id": "core-architecture", "scope": "all", "priority": "required" }
289
+ {
290
+ "id": "core-coding",
291
+ "scope": "all",
292
+ "priority": "required"
293
+ },
294
+ {
295
+ "id": "core-architecture",
296
+ "scope": "all",
297
+ "priority": "required"
298
+ },
299
+ {
300
+ "id": "infrastructure-vercel-database",
301
+ "scope": "design",
302
+ "priority": "required"
303
+ }
233
304
  ],
234
305
  "teammate": {
235
306
  "role": "Infrastructure Squad Leader",
236
307
  "icon": "🏗️",
237
- "spawn_prompt": "You are the Infrastructure Squad Leader. Coordinate infra specialists regardless of cloud provider (azure-architect, devops-engineer, container-specialist, observability-expert). Focus on IaC, CI/CD, containerization, cost optimization. Delegate to azure-architect for Azure-specific work. Escalate to standards-architect on conflicts."
308
+ "spawn_prompt": "You are the Infrastructure Squad Leader. Coordinate infra specialists regardless of cloud provider (azure-architect, devops-engineer, container-specialist, observability-expert). Focus on IaC, CI/CD, containerization, cost optimization. Delegate to azure-architect for Azure-specific work. IMPORTANT: When deployment target is Vercel, ALWAYS enforce serverless database (Neon, Supabase/PgBouncer, PlanetScale) — never TCP connection pools. Escalate to standards-architect on conflicts."
238
309
  }
239
310
  },
240
311
  "azure-architect": {
@@ -280,9 +351,21 @@
280
351
  ]
281
352
  },
282
353
  "standards": [
283
- { "id": "core-coding", "scope": "all", "priority": "required" },
284
- { "id": "core-architecture", "scope": "all", "priority": "required" },
285
- { "id": "infrastructure-azure-azure", "scope": "all", "priority": "required" }
354
+ {
355
+ "id": "core-coding",
356
+ "scope": "all",
357
+ "priority": "required"
358
+ },
359
+ {
360
+ "id": "core-architecture",
361
+ "scope": "all",
362
+ "priority": "required"
363
+ },
364
+ {
365
+ "id": "infrastructure-azure-azure",
366
+ "scope": "all",
367
+ "priority": "required"
368
+ }
286
369
  ],
287
370
  "teammate": {
288
371
  "role": "Infrastructure Squad Leader",
@@ -338,9 +421,21 @@
338
421
  ]
339
422
  },
340
423
  "standards": [
341
- { "id": "frontend-blazor-fluent-ui", "scope": "uiux", "priority": "required" },
342
- { "id": "frontend-design-system-naming", "scope": "all", "priority": "required" },
343
- { "id": "frontend-design-system-animations", "scope": "all", "priority": "required" }
424
+ {
425
+ "id": "frontend-blazor-fluent-ui",
426
+ "scope": "uiux",
427
+ "priority": "required"
428
+ },
429
+ {
430
+ "id": "frontend-design-system-naming",
431
+ "scope": "all",
432
+ "priority": "required"
433
+ },
434
+ {
435
+ "id": "frontend-design-system-animations",
436
+ "scope": "all",
437
+ "priority": "required"
438
+ }
344
439
  ],
345
440
  "teammate": {
346
441
  "role": "UI/UX Squad Leader (FASE 1.5)",
@@ -387,9 +482,21 @@
387
482
  ]
388
483
  },
389
484
  "standards": [
390
- { "id": "core-coding", "scope": "all", "priority": "required" },
391
- { "id": "backend-database-ef-core", "scope": "all", "priority": "required" },
392
- { "id": "backend-dotnet-core", "scope": "implement", "priority": "required" }
485
+ {
486
+ "id": "core-coding",
487
+ "scope": "all",
488
+ "priority": "required"
489
+ },
490
+ {
491
+ "id": "backend-database-ef-core",
492
+ "scope": "all",
493
+ "priority": "required"
494
+ },
495
+ {
496
+ "id": "backend-dotnet-core",
497
+ "scope": "implement",
498
+ "priority": "required"
499
+ }
393
500
  ],
394
501
  "teammate": {
395
502
  "role": "Data Persistence Specialist",
@@ -440,8 +547,16 @@
440
547
  ]
441
548
  },
442
549
  "standards": [
443
- { "id": "core-coding", "scope": "all", "priority": "required" },
444
- { "id": "core-architecture", "scope": "all", "priority": "required" }
550
+ {
551
+ "id": "core-coding",
552
+ "scope": "all",
553
+ "priority": "required"
554
+ },
555
+ {
556
+ "id": "core-architecture",
557
+ "scope": "all",
558
+ "priority": "required"
559
+ }
445
560
  ],
446
561
  "teammate": {
447
562
  "role": "Event-Driven Architecture Specialist",
@@ -469,9 +584,7 @@
469
584
  "endpoint"
470
585
  ],
471
586
  "always_active": false,
472
- "validators": [
473
- "architecture"
474
- ],
587
+ "validators": [],
475
588
  "relationships": {
476
589
  "reports_to": "dotnet-senior",
477
590
  "coordinates": [],
@@ -489,8 +602,16 @@
489
602
  ]
490
603
  },
491
604
  "standards": [
492
- { "id": "core-coding", "scope": "all", "priority": "required" },
493
- { "id": "core-architecture", "scope": "all", "priority": "required" }
605
+ {
606
+ "id": "core-coding",
607
+ "scope": "all",
608
+ "priority": "required"
609
+ },
610
+ {
611
+ "id": "core-architecture",
612
+ "scope": "all",
613
+ "priority": "required"
614
+ }
494
615
  ],
495
616
  "teammate": {
496
617
  "role": "API Design Specialist",
@@ -517,9 +638,7 @@
517
638
  "azure storage"
518
639
  ],
519
640
  "always_active": false,
520
- "validators": [
521
- "architecture"
522
- ],
641
+ "validators": [],
523
642
  "relationships": {
524
643
  "reports_to": "dotnet-senior",
525
644
  "coordinates": [],
@@ -535,8 +654,16 @@
535
654
  ]
536
655
  },
537
656
  "standards": [
538
- { "id": "core-coding", "scope": "all", "priority": "required" },
539
- { "id": "core-architecture", "scope": "all", "priority": "required" }
657
+ {
658
+ "id": "core-coding",
659
+ "scope": "all",
660
+ "priority": "required"
661
+ },
662
+ {
663
+ "id": "core-architecture",
664
+ "scope": "all",
665
+ "priority": "required"
666
+ }
540
667
  ],
541
668
  "teammate": {
542
669
  "role": "NoSQL & Cache Specialist",
@@ -584,14 +711,46 @@
584
711
  "team_role": "domain_leader"
585
712
  },
586
713
  "standards": [
587
- { "id": "core-coding", "scope": "all", "priority": "required" },
588
- { "id": "core-architecture", "scope": "all", "priority": "required" },
589
- { "id": "architecture-ddd-complexity-levels", "scope": "design", "priority": "required" },
590
- { "id": "architecture-ddd-aggregates", "scope": "design", "priority": "required" },
591
- { "id": "architecture-ddd-entities", "scope": "design", "priority": "required" },
592
- { "id": "architecture-ddd-value-objects", "scope": "design", "priority": "required" },
593
- { "id": "architecture-ddd-bounded-contexts", "scope": "design", "priority": "required" },
594
- { "id": "architecture-ddd-ubiquitous-language", "scope": "design", "priority": "required" }
714
+ {
715
+ "id": "core-coding",
716
+ "scope": "all",
717
+ "priority": "required"
718
+ },
719
+ {
720
+ "id": "core-architecture",
721
+ "scope": "all",
722
+ "priority": "required"
723
+ },
724
+ {
725
+ "id": "architecture-ddd-complexity-levels",
726
+ "scope": "design",
727
+ "priority": "required"
728
+ },
729
+ {
730
+ "id": "architecture-ddd-aggregates",
731
+ "scope": "design",
732
+ "priority": "required"
733
+ },
734
+ {
735
+ "id": "architecture-ddd-entities",
736
+ "scope": "design",
737
+ "priority": "required"
738
+ },
739
+ {
740
+ "id": "architecture-ddd-value-objects",
741
+ "scope": "design",
742
+ "priority": "required"
743
+ },
744
+ {
745
+ "id": "architecture-ddd-bounded-contexts",
746
+ "scope": "design",
747
+ "priority": "required"
748
+ },
749
+ {
750
+ "id": "architecture-ddd-ubiquitous-language",
751
+ "scope": "design",
752
+ "priority": "required"
753
+ }
595
754
  ],
596
755
  "active_phases": [
597
756
  "design",
@@ -639,8 +798,16 @@
639
798
  ]
640
799
  },
641
800
  "standards": [
642
- { "id": "core-coding", "scope": "all", "priority": "required" },
643
- { "id": "core-architecture", "scope": "all", "priority": "required" }
801
+ {
802
+ "id": "core-coding",
803
+ "scope": "all",
804
+ "priority": "required"
805
+ },
806
+ {
807
+ "id": "core-architecture",
808
+ "scope": "all",
809
+ "priority": "required"
810
+ }
644
811
  ],
645
812
  "teammate": {
646
813
  "role": "Background Jobs Specialist",
@@ -687,11 +854,31 @@
687
854
  ]
688
855
  },
689
856
  "standards": [
690
- { "id": "core-coding", "scope": "all", "priority": "required" },
691
- { "id": "ai-agents-setup", "scope": "all", "priority": "required" },
692
- { "id": "ai-agents-workflows", "scope": "design", "priority": "required" },
693
- { "id": "ai-agents-production", "scope": "implement", "priority": "required" },
694
- { "id": "ai-agents-blazor-ui", "scope": "implement", "priority": "reference" }
857
+ {
858
+ "id": "core-coding",
859
+ "scope": "all",
860
+ "priority": "required"
861
+ },
862
+ {
863
+ "id": "ai-agents-setup",
864
+ "scope": "all",
865
+ "priority": "required"
866
+ },
867
+ {
868
+ "id": "ai-agents-workflows",
869
+ "scope": "design",
870
+ "priority": "required"
871
+ },
872
+ {
873
+ "id": "ai-agents-production",
874
+ "scope": "implement",
875
+ "priority": "required"
876
+ },
877
+ {
878
+ "id": "ai-agents-blazor-ui",
879
+ "scope": "implement",
880
+ "priority": "reference"
881
+ }
695
882
  ],
696
883
  "teammate": {
697
884
  "role": "Microsoft Agent Framework Expert",
@@ -716,10 +903,7 @@
716
903
  "edge functions"
717
904
  ],
718
905
  "always_active": false,
719
- "validators": [
720
- "architecture",
721
- "packages"
722
- ],
906
+ "validators": [],
723
907
  "relationships": {
724
908
  "reports_to": "dotnet-senior",
725
909
  "coordinates": [],
@@ -736,8 +920,16 @@
736
920
  ]
737
921
  },
738
922
  "standards": [
739
- { "id": "core-coding", "scope": "all", "priority": "required" },
740
- { "id": "core-architecture", "scope": "all", "priority": "required" }
923
+ {
924
+ "id": "core-coding",
925
+ "scope": "all",
926
+ "priority": "required"
927
+ },
928
+ {
929
+ "id": "core-architecture",
930
+ "scope": "all",
931
+ "priority": "required"
932
+ }
741
933
  ],
742
934
  "teammate": {
743
935
  "role": "Supabase & PostgreSQL Specialist",
@@ -762,9 +954,7 @@
762
954
  "retrieval augmented"
763
955
  ],
764
956
  "always_active": false,
765
- "validators": [
766
- "architecture"
767
- ],
957
+ "validators": [],
768
958
  "relationships": {
769
959
  "reports_to": "ai-system-architect",
770
960
  "coordinates": [],
@@ -781,9 +971,21 @@
781
971
  ]
782
972
  },
783
973
  "standards": [
784
- { "id": "core-coding", "scope": "all", "priority": "required" },
785
- { "id": "ai-agents-setup", "scope": "all", "priority": "required" },
786
- { "id": "ai-agents-workflows", "scope": "design", "priority": "required" }
974
+ {
975
+ "id": "core-coding",
976
+ "scope": "all",
977
+ "priority": "required"
978
+ },
979
+ {
980
+ "id": "ai-agents-setup",
981
+ "scope": "all",
982
+ "priority": "required"
983
+ },
984
+ {
985
+ "id": "ai-agents-workflows",
986
+ "scope": "design",
987
+ "priority": "required"
988
+ }
787
989
  ],
788
990
  "teammate": {
789
991
  "role": "Vector Search & RAG Specialist",
@@ -822,8 +1024,16 @@
822
1024
  ]
823
1025
  },
824
1026
  "standards": [
825
- { "id": "core-coding", "scope": "all", "priority": "required" },
826
- { "id": "ai-agents-workflows", "scope": "all", "priority": "required" }
1027
+ {
1028
+ "id": "core-coding",
1029
+ "scope": "all",
1030
+ "priority": "required"
1031
+ },
1032
+ {
1033
+ "id": "ai-agents-workflows",
1034
+ "scope": "all",
1035
+ "priority": "required"
1036
+ }
827
1037
  ],
828
1038
  "teammate": {
829
1039
  "role": "Context & Token Optimization Specialist",
@@ -867,8 +1077,16 @@
867
1077
  ]
868
1078
  },
869
1079
  "standards": [
870
- { "id": "core-coding", "scope": "all", "priority": "required" },
871
- { "id": "core-architecture", "scope": "all", "priority": "required" }
1080
+ {
1081
+ "id": "core-coding",
1082
+ "scope": "all",
1083
+ "priority": "required"
1084
+ },
1085
+ {
1086
+ "id": "core-architecture",
1087
+ "scope": "all",
1088
+ "priority": "required"
1089
+ }
872
1090
  ],
873
1091
  "teammate": {
874
1092
  "role": "Payment Integration Specialist",
@@ -899,9 +1117,7 @@
899
1117
  "already have auth"
900
1118
  ],
901
1119
  "always_active": false,
902
- "validators": [
903
- "architecture"
904
- ],
1120
+ "validators": [],
905
1121
  "relationships": {
906
1122
  "reports_to": "dotnet-senior",
907
1123
  "coordinates": [],
@@ -918,8 +1134,16 @@
918
1134
  ]
919
1135
  },
920
1136
  "standards": [
921
- { "id": "core-coding", "scope": "all", "priority": "required" },
922
- { "id": "core-architecture", "scope": "all", "priority": "required" }
1137
+ {
1138
+ "id": "core-coding",
1139
+ "scope": "all",
1140
+ "priority": "required"
1141
+ },
1142
+ {
1143
+ "id": "core-architecture",
1144
+ "scope": "all",
1145
+ "priority": "required"
1146
+ }
923
1147
  ],
924
1148
  "teammate": {
925
1149
  "role": "Auth SaaS Integration Specialist",
@@ -967,8 +1191,16 @@
967
1191
  ]
968
1192
  },
969
1193
  "standards": [
970
- { "id": "core-coding", "scope": "all", "priority": "required" },
971
- { "id": "core-architecture", "scope": "all", "priority": "required" }
1194
+ {
1195
+ "id": "core-coding",
1196
+ "scope": "all",
1197
+ "priority": "required"
1198
+ },
1199
+ {
1200
+ "id": "core-architecture",
1201
+ "scope": "all",
1202
+ "priority": "required"
1203
+ }
972
1204
  ],
973
1205
  "teammate": {
974
1206
  "role": "Email Integration Specialist",
@@ -1022,12 +1254,36 @@
1022
1254
  ]
1023
1255
  },
1024
1256
  "standards": [
1025
- { "id": "core-coding", "scope": "all", "priority": "required" },
1026
- { "id": "frontend-blazor-lifecycle", "scope": "all", "priority": "required" },
1027
- { "id": "frontend-blazor-state", "scope": "all", "priority": "required" },
1028
- { "id": "frontend-blazor-pitfalls", "scope": "all", "priority": "required" },
1029
- { "id": "backend-database-ef-core", "scope": "implement", "priority": "reference" },
1030
- { "id": "frontend-blazor-fluent-ui", "scope": "all", "priority": "required" }
1257
+ {
1258
+ "id": "core-coding",
1259
+ "scope": "all",
1260
+ "priority": "required"
1261
+ },
1262
+ {
1263
+ "id": "frontend-blazor-lifecycle",
1264
+ "scope": "all",
1265
+ "priority": "required"
1266
+ },
1267
+ {
1268
+ "id": "frontend-blazor-state",
1269
+ "scope": "all",
1270
+ "priority": "required"
1271
+ },
1272
+ {
1273
+ "id": "frontend-blazor-pitfalls",
1274
+ "scope": "all",
1275
+ "priority": "required"
1276
+ },
1277
+ {
1278
+ "id": "backend-database-ef-core",
1279
+ "scope": "implement",
1280
+ "priority": "reference"
1281
+ },
1282
+ {
1283
+ "id": "frontend-blazor-fluent-ui",
1284
+ "scope": "all",
1285
+ "priority": "required"
1286
+ }
1031
1287
  ],
1032
1288
  "teammate": {
1033
1289
  "role": "Blazor Development Specialist",
@@ -1055,11 +1311,13 @@
1055
1311
  "react-hook-form",
1056
1312
  "app router",
1057
1313
  "server component",
1058
- "client component"
1314
+ "client component",
1315
+ "vercel",
1316
+ "neon",
1317
+ "planetscale"
1059
1318
  ],
1060
1319
  "always_active": false,
1061
1320
  "validators": [
1062
- "packages",
1063
1321
  "nextjs-component"
1064
1322
  ],
1065
1323
  "relationships": {
@@ -1078,22 +1336,71 @@
1078
1336
  ]
1079
1337
  },
1080
1338
  "standards": [
1081
- { "id": "core-coding", "scope": "all", "priority": "required" },
1082
- { "id": "core-architecture", "scope": "all", "priority": "required" },
1083
- { "id": "frontend-nextjs-naming-conventions", "scope": "all", "priority": "required" },
1084
- { "id": "frontend-nextjs-project-structure", "scope": "all", "priority": "required" },
1085
- { "id": "frontend-nextjs-app-router", "scope": "all", "priority": "required" },
1086
- { "id": "frontend-nextjs-components", "scope": "all", "priority": "required" },
1087
- { "id": "frontend-nextjs-data-fetching", "scope": "implement", "priority": "required" },
1088
- { "id": "frontend-nextjs-forms", "scope": "implement", "priority": "required" },
1089
- { "id": "frontend-nextjs-state-management", "scope": "implement", "priority": "required" },
1090
- { "id": "frontend-nextjs-testing", "scope": "implement", "priority": "reference" },
1091
- { "id": "frontend-nextjs-nextjs-patterns", "scope": "all", "priority": "required" }
1339
+ {
1340
+ "id": "core-coding",
1341
+ "scope": "all",
1342
+ "priority": "required"
1343
+ },
1344
+ {
1345
+ "id": "core-architecture",
1346
+ "scope": "all",
1347
+ "priority": "required"
1348
+ },
1349
+ {
1350
+ "id": "frontend-nextjs-naming-conventions",
1351
+ "scope": "all",
1352
+ "priority": "required"
1353
+ },
1354
+ {
1355
+ "id": "frontend-nextjs-project-structure",
1356
+ "scope": "all",
1357
+ "priority": "required"
1358
+ },
1359
+ {
1360
+ "id": "frontend-nextjs-app-router",
1361
+ "scope": "all",
1362
+ "priority": "required"
1363
+ },
1364
+ {
1365
+ "id": "frontend-nextjs-components",
1366
+ "scope": "all",
1367
+ "priority": "required"
1368
+ },
1369
+ {
1370
+ "id": "frontend-nextjs-data-fetching",
1371
+ "scope": "implement",
1372
+ "priority": "required"
1373
+ },
1374
+ {
1375
+ "id": "frontend-nextjs-forms",
1376
+ "scope": "implement",
1377
+ "priority": "required"
1378
+ },
1379
+ {
1380
+ "id": "frontend-nextjs-state-management",
1381
+ "scope": "implement",
1382
+ "priority": "required"
1383
+ },
1384
+ {
1385
+ "id": "frontend-nextjs-testing",
1386
+ "scope": "implement",
1387
+ "priority": "reference"
1388
+ },
1389
+ {
1390
+ "id": "frontend-nextjs-nextjs-patterns",
1391
+ "scope": "all",
1392
+ "priority": "required"
1393
+ },
1394
+ {
1395
+ "id": "infrastructure-vercel-database",
1396
+ "scope": "design",
1397
+ "priority": "required"
1398
+ }
1092
1399
  ],
1093
1400
  "teammate": {
1094
1401
  "role": "Next.js Development Specialist",
1095
1402
  "icon": "⚛️",
1096
- "spawn_prompt": "You are the Next.js Development Specialist. Build Next.js 14+ applications with shadcn/ui components, TanStack Query for data fetching, Server Actions for mutations. Implement Route Handlers for API routes. Message api-designer for backend endpoints, css-specialist for design system."
1403
+ "spawn_prompt": "You are the Next.js Development Specialist. Build Next.js 14+ applications with shadcn/ui components, TanStack Query for data fetching, Server Actions for mutations. Implement Route Handlers for API routes. Message api-designer for backend endpoints, css-specialist for design system. IMPORTANT: When deployment target is Vercel, database must be serverless (Neon, Supabase/PgBouncer port 6543, PlanetScale) — never a plain TCP connection pool."
1097
1404
  }
1098
1405
  },
1099
1406
  "css-specialist": {
@@ -1131,8 +1438,16 @@
1131
1438
  ]
1132
1439
  },
1133
1440
  "standards": [
1134
- { "id": "frontend-design-system-naming", "scope": "all", "priority": "required" },
1135
- { "id": "frontend-design-system-animations", "scope": "all", "priority": "required" }
1441
+ {
1442
+ "id": "frontend-design-system-naming",
1443
+ "scope": "all",
1444
+ "priority": "required"
1445
+ },
1446
+ {
1447
+ "id": "frontend-design-system-animations",
1448
+ "scope": "all",
1449
+ "priority": "required"
1450
+ }
1136
1451
  ],
1137
1452
  "teammate": {
1138
1453
  "role": "CSS & Design System Specialist",
@@ -1175,9 +1490,21 @@
1175
1490
  ]
1176
1491
  },
1177
1492
  "standards": [
1178
- { "id": "core-coding", "scope": "all", "priority": "required" },
1179
- { "id": "core-architecture", "scope": "all", "priority": "required" },
1180
- { "id": "infrastructure-azure-azure", "scope": "all", "priority": "required" }
1493
+ {
1494
+ "id": "core-coding",
1495
+ "scope": "all",
1496
+ "priority": "required"
1497
+ },
1498
+ {
1499
+ "id": "core-architecture",
1500
+ "scope": "all",
1501
+ "priority": "required"
1502
+ },
1503
+ {
1504
+ "id": "infrastructure-azure-azure",
1505
+ "scope": "all",
1506
+ "priority": "required"
1507
+ }
1181
1508
  ],
1182
1509
  "teammate": {
1183
1510
  "role": "Infrastructure as Code Specialist",
@@ -1202,9 +1529,7 @@
1202
1529
  "deployment"
1203
1530
  ],
1204
1531
  "always_active": false,
1205
- "validators": [
1206
- "architecture"
1207
- ],
1532
+ "validators": [],
1208
1533
  "relationships": {
1209
1534
  "reports_to": "infra-architect",
1210
1535
  "coordinates": [],
@@ -1219,8 +1544,16 @@
1219
1544
  ]
1220
1545
  },
1221
1546
  "standards": [
1222
- { "id": "core-coding", "scope": "all", "priority": "required" },
1223
- { "id": "core-architecture", "scope": "all", "priority": "required" }
1547
+ {
1548
+ "id": "core-coding",
1549
+ "scope": "all",
1550
+ "priority": "required"
1551
+ },
1552
+ {
1553
+ "id": "core-architecture",
1554
+ "scope": "all",
1555
+ "priority": "required"
1556
+ }
1224
1557
  ],
1225
1558
  "teammate": {
1226
1559
  "role": "CI/CD Specialist",
@@ -1244,9 +1577,7 @@
1244
1577
  "container apps"
1245
1578
  ],
1246
1579
  "always_active": false,
1247
- "validators": [
1248
- "architecture"
1249
- ],
1580
+ "validators": [],
1250
1581
  "relationships": {
1251
1582
  "reports_to": "infra-architect",
1252
1583
  "coordinates": [],
@@ -1261,8 +1592,16 @@
1261
1592
  ]
1262
1593
  },
1263
1594
  "standards": [
1264
- { "id": "core-coding", "scope": "all", "priority": "required" },
1265
- { "id": "core-architecture", "scope": "all", "priority": "required" }
1595
+ {
1596
+ "id": "core-coding",
1597
+ "scope": "all",
1598
+ "priority": "required"
1599
+ },
1600
+ {
1601
+ "id": "core-architecture",
1602
+ "scope": "all",
1603
+ "priority": "required"
1604
+ }
1266
1605
  ],
1267
1606
  "teammate": {
1268
1607
  "role": "Containerization Specialist",
@@ -1306,8 +1645,16 @@
1306
1645
  ]
1307
1646
  },
1308
1647
  "standards": [
1309
- { "id": "core-coding", "scope": "all", "priority": "required" },
1310
- { "id": "core-architecture", "scope": "all", "priority": "required" }
1648
+ {
1649
+ "id": "core-coding",
1650
+ "scope": "all",
1651
+ "priority": "required"
1652
+ },
1653
+ {
1654
+ "id": "core-architecture",
1655
+ "scope": "all",
1656
+ "priority": "required"
1657
+ }
1311
1658
  ],
1312
1659
  "teammate": {
1313
1660
  "role": "Observability Specialist",
@@ -1333,9 +1680,7 @@
1333
1680
  "managed identity"
1334
1681
  ],
1335
1682
  "always_active": false,
1336
- "validators": [
1337
- "architecture"
1338
- ],
1683
+ "validators": [],
1339
1684
  "relationships": {
1340
1685
  "reports_to": "infra-architect",
1341
1686
  "coordinates": [],
@@ -1352,8 +1697,16 @@
1352
1697
  ]
1353
1698
  },
1354
1699
  "standards": [
1355
- { "id": "core-coding", "scope": "all", "priority": "required" },
1356
- { "id": "core-architecture", "scope": "all", "priority": "required" }
1700
+ {
1701
+ "id": "core-coding",
1702
+ "scope": "all",
1703
+ "priority": "required"
1704
+ },
1705
+ {
1706
+ "id": "core-architecture",
1707
+ "scope": "all",
1708
+ "priority": "required"
1709
+ }
1357
1710
  ],
1358
1711
  "teammate": {
1359
1712
  "role": "Microsoft Identity Specialist",
@@ -1381,9 +1734,7 @@
1381
1734
  "bunit"
1382
1735
  ],
1383
1736
  "always_active": false,
1384
- "validators": [
1385
- "architecture"
1386
- ],
1737
+ "validators": [],
1387
1738
  "relationships": {
1388
1739
  "reports_to": "standards-architect",
1389
1740
  "coordinates": [],
@@ -1399,8 +1750,16 @@
1399
1750
  ]
1400
1751
  },
1401
1752
  "standards": [
1402
- { "id": "core-coding", "scope": "all", "priority": "required" },
1403
- { "id": "core-architecture", "scope": "all", "priority": "required" }
1753
+ {
1754
+ "id": "core-coding",
1755
+ "scope": "all",
1756
+ "priority": "required"
1757
+ },
1758
+ {
1759
+ "id": "core-architecture",
1760
+ "scope": "all",
1761
+ "priority": "required"
1762
+ }
1404
1763
  ],
1405
1764
  "teammate": {
1406
1765
  "role": "Testing Specialist",
@@ -1426,10 +1785,7 @@
1426
1785
  "architecture review"
1427
1786
  ],
1428
1787
  "always_active": false,
1429
- "validators": [
1430
- "architecture",
1431
- "packages"
1432
- ],
1788
+ "validators": [],
1433
1789
  "relationships": {
1434
1790
  "reports_to": "standards-architect",
1435
1791
  "coordinates": [],
@@ -1444,8 +1800,16 @@
1444
1800
  ]
1445
1801
  },
1446
1802
  "standards": [
1447
- { "id": "core-coding", "scope": "all", "priority": "required" },
1448
- { "id": "core-architecture", "scope": "all", "priority": "required" }
1803
+ {
1804
+ "id": "core-coding",
1805
+ "scope": "all",
1806
+ "priority": "required"
1807
+ },
1808
+ {
1809
+ "id": "core-architecture",
1810
+ "scope": "all",
1811
+ "priority": "required"
1812
+ }
1449
1813
  ],
1450
1814
  "teammate": {
1451
1815
  "role": "Code Quality Analyst",
@@ -1485,8 +1849,16 @@
1485
1849
  ]
1486
1850
  },
1487
1851
  "standards": [
1488
- { "id": "core-coding", "scope": "all", "priority": "required" },
1489
- { "id": "core-architecture", "scope": "all", "priority": "required" }
1852
+ {
1853
+ "id": "core-coding",
1854
+ "scope": "all",
1855
+ "priority": "required"
1856
+ },
1857
+ {
1858
+ "id": "core-architecture",
1859
+ "scope": "all",
1860
+ "priority": "required"
1861
+ }
1490
1862
  ],
1491
1863
  "teammate": {
1492
1864
  "role": "Troubleshooting Expert (Escalation)",
@@ -1530,8 +1902,16 @@
1530
1902
  ]
1531
1903
  },
1532
1904
  "standards": [
1533
- { "id": "core-coding", "scope": "all", "priority": "required" },
1534
- { "id": "core-architecture", "scope": "all", "priority": "required" }
1905
+ {
1906
+ "id": "core-coding",
1907
+ "scope": "all",
1908
+ "priority": "required"
1909
+ },
1910
+ {
1911
+ "id": "core-architecture",
1912
+ "scope": "all",
1913
+ "priority": "required"
1914
+ }
1535
1915
  ],
1536
1916
  "teammate": {
1537
1917
  "role": "Load Testing Specialist",
@@ -1571,8 +1951,16 @@
1571
1951
  ]
1572
1952
  },
1573
1953
  "standards": [
1574
- { "id": "core-coding", "scope": "all", "priority": "required" },
1575
- { "id": "core-architecture", "scope": "all", "priority": "required" }
1954
+ {
1955
+ "id": "core-coding",
1956
+ "scope": "all",
1957
+ "priority": "required"
1958
+ },
1959
+ {
1960
+ "id": "core-architecture",
1961
+ "scope": "all",
1962
+ "priority": "required"
1963
+ }
1576
1964
  ],
1577
1965
  "teammate": {
1578
1966
  "role": "Documentation Specialist (Post-FASE 5)",
@@ -1606,8 +1994,16 @@
1606
1994
  "implement"
1607
1995
  ],
1608
1996
  "standards": [
1609
- { "id": "core-coding", "scope": "all", "priority": "required" },
1610
- { "id": "architecture-vertical-slice-vertical-slice", "scope": "all", "priority": "required" }
1997
+ {
1998
+ "id": "core-coding",
1999
+ "scope": "all",
2000
+ "priority": "required"
2001
+ },
2002
+ {
2003
+ "id": "architecture-vertical-slice-vertical-slice",
2004
+ "scope": "all",
2005
+ "priority": "required"
2006
+ }
1611
2007
  ],
1612
2008
  "teammate": {
1613
2009
  "role": "VSA Architecture Specialist",
@@ -1615,7 +2011,97 @@
1615
2011
  "spawn_prompt": "Você é o VSA Specialist. Analise a proposta e produza um VSA Blueprint:\n1. ENTITY FIELDS: todos os campos com tipos C# corretos (sem AggregateRoot, sem Value Objects)\n2. OPERATIONS: slices necessários (Create, GetAll, GetById, Update, Delete + operações customizadas)\n3. ROUTES: HTTP method + rota por operação (ex: POST /api/products, GET /api/products/{id:guid})\n4. ERROR TYPES: Error factory methods para {Entity}Errors (apenas NotFound e casos específicos)\n5. VALIDATION RULES: regras FluentValidation por campo por operação\n\nNão use AggregateRoot, DomainEvent, CQRS formal, MediatR, Application Service layer.\nCada operação é um slice autônomo: Request + Response + Handler + Validator + Endpoint.\nRef: framework/standards/architecture/vertical-slice/vertical-slice.md"
1616
2012
  }
1617
2013
  },
1618
- "_comment_tier_4": "=== TIER 4: VALIDATORS (5) ===",
2014
+ "_comment_tier_3_nodejs": "=== TIER 3: NODEJS/CLI SPECIALISTS (2) ===",
2015
+ "morph-spec-architect": {
2016
+ "tier": 3,
2017
+ "role": "specialist",
2018
+ "title": "Morph-Spec Architect",
2019
+ "domains": [
2020
+ "cli",
2021
+ "framework-design",
2022
+ "nodejs",
2023
+ "architecture"
2024
+ ],
2025
+ "keywords": [
2026
+ "morph-spec",
2027
+ "framework feature",
2028
+ "new command",
2029
+ "cli architecture",
2030
+ "plugin",
2031
+ "hook design"
2032
+ ],
2033
+ "negativeKeywords": [
2034
+ "blazor",
2035
+ "dotnet",
2036
+ "react",
2037
+ "frontend"
2038
+ ],
2039
+ "always_active": false,
2040
+ "validators": [],
2041
+ "relationships": {
2042
+ "reports_to": "feature-lead",
2043
+ "coordinates": [
2044
+ "nodejs-cli-expert",
2045
+ "morph-spec-validator"
2046
+ ],
2047
+ "active_phases": [
2048
+ "design",
2049
+ "tasks"
2050
+ ]
2051
+ },
2052
+ "standards": [],
2053
+ "teammate": {
2054
+ "role": "specialist",
2055
+ "icon": "🔧",
2056
+ "spawn_prompt": "You are the Morph-Spec Architect. You deeply understand the morph-spec-framework codebase: its 4-tier agent hierarchy, state machine (with filesystem-based phase derivation), Commander.js CLI surface (~25 commands registered in bin/morph-spec.js), hooks system, skills system, and the .morph/ directory layout. Your job is to design new features that fit naturally into the existing architecture. Before proposing implementation, always: (1) identify which existing modules can be reused, (2) determine where the new command should live in src/commands/, (3) define the state impact (does it need new state fields?), (4) list which tests need to be written. Follow ESM module patterns throughout."
2057
+ }
2058
+ },
2059
+ "nodejs-cli-expert": {
2060
+ "tier": 3,
2061
+ "role": "specialist",
2062
+ "title": "Node.js CLI Expert",
2063
+ "domains": [
2064
+ "nodejs",
2065
+ "cli",
2066
+ "javascript",
2067
+ "esm",
2068
+ "testing"
2069
+ ],
2070
+ "keywords": [
2071
+ "nodejs",
2072
+ "javascript",
2073
+ "esm",
2074
+ "commander",
2075
+ "node --test",
2076
+ "cli command",
2077
+ "morph-spec implementation"
2078
+ ],
2079
+ "negativeKeywords": [
2080
+ "blazor",
2081
+ "dotnet",
2082
+ "react",
2083
+ "typescript"
2084
+ ],
2085
+ "always_active": false,
2086
+ "validators": [],
2087
+ "relationships": {
2088
+ "reports_to": "feature-lead",
2089
+ "coordinates": [
2090
+ "morph-spec-architect"
2091
+ ],
2092
+ "escalates_to": "morph-spec-validator",
2093
+ "active_phases": [
2094
+ "implement"
2095
+ ]
2096
+ },
2097
+ "standards": [],
2098
+ "teammate": {
2099
+ "role": "specialist",
2100
+ "icon": "🟢",
2101
+ "spawn_prompt": "You are the Node.js CLI Expert for the morph-spec-framework. You implement features in Node.js ESM following the project's conventions: (1) All imports use ESM syntax with .js extensions on relative paths; (2) Commands are registered in bin/morph-spec.js after being defined in src/commands/<domain>/<command>.js; (3) Tests use native node:test runner with mock.fn() for mocking — no external test libraries; (4) Error handling: hooks are fail-open (catch+exit 0), CLI commands exit(1) on fatal errors; (5) Never use require() or module.exports. When implementing a feature, always write the tests alongside the implementation. The test command is: node --test --test-concurrency=1"
2102
+ }
2103
+ },
2104
+ "_comment_tier_4": "=== TIER 4: VALIDATORS (6) ===",
1619
2105
  "security-expert": {
1620
2106
  "tier": 4,
1621
2107
  "role": "validator",
@@ -1647,8 +2133,16 @@
1647
2133
  "team_role": "validator"
1648
2134
  },
1649
2135
  "standards": [
1650
- { "id": "core-coding", "scope": "all", "priority": "required" },
1651
- { "id": "core-architecture", "scope": "all", "priority": "required" }
2136
+ {
2137
+ "id": "core-coding",
2138
+ "scope": "all",
2139
+ "priority": "required"
2140
+ },
2141
+ {
2142
+ "id": "core-architecture",
2143
+ "scope": "all",
2144
+ "priority": "required"
2145
+ }
1652
2146
  ],
1653
2147
  "teammate": null,
1654
2148
  "hook_behavior": {
@@ -1691,8 +2185,16 @@
1691
2185
  "team_role": "validator"
1692
2186
  },
1693
2187
  "standards": [
1694
- { "id": "core-coding", "scope": "all", "priority": "required" },
1695
- { "id": "core-architecture", "scope": "all", "priority": "required" }
2188
+ {
2189
+ "id": "core-coding",
2190
+ "scope": "all",
2191
+ "priority": "required"
2192
+ },
2193
+ {
2194
+ "id": "core-architecture",
2195
+ "scope": "all",
2196
+ "priority": "required"
2197
+ }
1696
2198
  ],
1697
2199
  "teammate": null,
1698
2200
  "hook_behavior": {
@@ -1733,7 +2235,11 @@
1733
2235
  "team_role": "validator"
1734
2236
  },
1735
2237
  "standards": [
1736
- { "id": "core-coding", "scope": "all", "priority": "required" }
2238
+ {
2239
+ "id": "core-coding",
2240
+ "scope": "all",
2241
+ "priority": "required"
2242
+ }
1737
2243
  ],
1738
2244
  "teammate": null,
1739
2245
  "hook_behavior": {
@@ -1773,8 +2279,16 @@
1773
2279
  "team_role": "validator"
1774
2280
  },
1775
2281
  "standards": [
1776
- { "id": "frontend-design-system-naming", "scope": "all", "priority": "required" },
1777
- { "id": "frontend-design-system-animations", "scope": "all", "priority": "required" }
2282
+ {
2283
+ "id": "frontend-design-system-naming",
2284
+ "scope": "all",
2285
+ "priority": "required"
2286
+ },
2287
+ {
2288
+ "id": "frontend-design-system-animations",
2289
+ "scope": "all",
2290
+ "priority": "required"
2291
+ }
1778
2292
  ],
1779
2293
  "teammate": null,
1780
2294
  "hook_behavior": {
@@ -1816,9 +2330,21 @@
1816
2330
  "team_role": "validator"
1817
2331
  },
1818
2332
  "standards": [
1819
- { "id": "frontend-blazor-lifecycle", "scope": "all", "priority": "required" },
1820
- { "id": "frontend-blazor-pitfalls", "scope": "all", "priority": "required" },
1821
- { "id": "frontend-blazor-state", "scope": "all", "priority": "required" }
2333
+ {
2334
+ "id": "frontend-blazor-lifecycle",
2335
+ "scope": "all",
2336
+ "priority": "required"
2337
+ },
2338
+ {
2339
+ "id": "frontend-blazor-pitfalls",
2340
+ "scope": "all",
2341
+ "priority": "required"
2342
+ },
2343
+ {
2344
+ "id": "frontend-blazor-state",
2345
+ "scope": "all",
2346
+ "priority": "required"
2347
+ }
1822
2348
  ],
1823
2349
  "teammate": null,
1824
2350
  "hook_behavior": {
@@ -1831,6 +2357,74 @@
1831
2357
  "severity": "error",
1832
2358
  "blocks_on_fail": true
1833
2359
  }
2360
+ },
2361
+ "morph-spec-validator": {
2362
+ "tier": 4,
2363
+ "role": "validator",
2364
+ "title": "Morph-Spec Validator",
2365
+ "domains": [
2366
+ "nodejs",
2367
+ "cli",
2368
+ "testing",
2369
+ "validation"
2370
+ ],
2371
+ "keywords": [
2372
+ "validate morph-spec",
2373
+ "node.js validation",
2374
+ "cli test"
2375
+ ],
2376
+ "always_active": false,
2377
+ "validators": [
2378
+ "morph-spec-standards"
2379
+ ],
2380
+ "relationships": {
2381
+ "reports_to": "qa-lead",
2382
+ "runs_in": "post-implement",
2383
+ "active_phases": [
2384
+ "implement",
2385
+ "validate"
2386
+ ]
2387
+ },
2388
+ "standards": [],
2389
+ "teammate": null,
2390
+ "hook_behavior": {
2391
+ "validates": [
2392
+ "ESM imports use .js extensions on relative paths",
2393
+ "New commands are registered in bin/morph-spec.js",
2394
+ "Tests exist for new modules (one test file per module)",
2395
+ "npm test passes with no failures",
2396
+ "No require() or module.exports used",
2397
+ "Error handling follows fail-open pattern for hooks"
2398
+ ],
2399
+ "severity": "error",
2400
+ "blocks_on_fail": true
2401
+ }
2402
+ },
2403
+ "nextjs-component-validator": {
2404
+ "tier": 4,
2405
+ "title": "Next.js Component Validator",
2406
+ "description": "Tier-4 validator for Next.js Server/Client component patterns",
2407
+ "keywords": [
2408
+ "nextjs",
2409
+ "tsx",
2410
+ "use client",
2411
+ "server component",
2412
+ "app router"
2413
+ ],
2414
+ "validators": [
2415
+ "nextjs-component"
2416
+ ],
2417
+ "always_active": false,
2418
+ "hook_behavior": {
2419
+ "severity": "warning",
2420
+ "blocks_on_fail": false,
2421
+ "validates": [
2422
+ "use-client directive",
2423
+ "hook usage",
2424
+ "file naming"
2425
+ ]
2426
+ },
2427
+ "spawn_prompt": "You are the Next.js Component Validator (Tier 4). Scan all .tsx/.ts files under src/ and validate: (1) \"use client\" is present when React hooks are used, (2) \"use client\" is absent for pure Server Components (no hooks, no event handlers), (3) component files use kebab-case naming. Output { \"passed\": boolean, \"issues\": [{\"file\": string, \"message\": string, \"suggestion\": string}] }."
1834
2428
  }
1835
2429
  },
1836
2430
  "squads": {