@polymorphism-tech/morph-spec 4.10.9 → 4.10.10

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 (114) hide show
  1. package/CLAUDE.md +3 -3
  2. package/LICENSE +71 -71
  3. package/README.md +2 -2
  4. package/bin/morph-spec.js +22 -0
  5. package/claude-plugin.json +1 -1
  6. package/docs/CHEATSHEET.md +1 -1
  7. package/docs/QUICKSTART.md +1 -1
  8. package/framework/agents/README.md +14 -14
  9. package/framework/agents/architecture/standards-architect.md +159 -159
  10. package/framework/agents/infrastructure/azure-architect.md +149 -149
  11. package/framework/agents/infrastructure/infra-architect.md +48 -48
  12. package/framework/hooks/README.md +204 -204
  13. package/framework/hooks/shared/phase-utils.js +139 -139
  14. package/framework/rules/csharp-standards.md +13 -13
  15. package/framework/rules/frontend-standards.md +13 -13
  16. package/framework/rules/infrastructure-standards.md +16 -16
  17. package/framework/rules/testing-standards.md +14 -14
  18. package/framework/skills/level-0-meta/morph-code-review-nextjs/references/review-example-nextjs.md +254 -254
  19. package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +1 -1
  20. package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +1 -1
  21. package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +1 -1
  22. package/framework/skills/level-1-workflows/morph-phase-implement/.morph/logs/activity.json +38 -0
  23. package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +1 -1
  24. package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +1 -1
  25. package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +1 -1
  26. package/framework/skills/level-1-workflows/morph-phase-tasks/.morph/logs/activity.json +14 -0
  27. package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +1 -1
  28. package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +1 -1
  29. package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +1 -1
  30. package/framework/standards/STANDARDS.json +2338 -2041
  31. package/framework/standards/frontend/nextjs/nextjs-patterns.md +17 -17
  32. package/framework/standards/infrastructure/supabase/supabase-custom-jwt.md +206 -0
  33. package/framework/templates/.idea/morph-templates.xml +92 -0
  34. package/framework/templates/.vscode/morph-templates.code-snippets +186 -0
  35. package/framework/templates/README.md +814 -814
  36. package/framework/templates/code/dotnet/contracts/Commands.cs +74 -74
  37. package/framework/templates/code/dotnet/contracts/Entities.cs +25 -25
  38. package/framework/templates/code/dotnet/contracts/Queries.cs +74 -74
  39. package/framework/templates/code/dotnet/contracts/README.md +74 -74
  40. package/framework/templates/code/dotnet/contracts/api-contracts.cs +173 -173
  41. package/framework/templates/code/dotnet/frontend/component.razor +239 -239
  42. package/framework/templates/code/dotnet/jobs/agent.cs +163 -163
  43. package/framework/templates/code/dotnet/jobs/job.cs +171 -171
  44. package/framework/templates/code/dotnet/test.cs +239 -239
  45. package/framework/templates/code/sql/rls-policy.sql +57 -57
  46. package/framework/templates/code/sql/supabase-migration.sql +100 -100
  47. package/framework/templates/code/sql/supabase-migration.template.sql +113 -113
  48. package/framework/templates/code/typescript/contracts.ts +168 -168
  49. package/framework/templates/context/CONTEXT.md +181 -181
  50. package/framework/templates/docs/proposal.md +182 -182
  51. package/framework/templates/docs/user-stories.md +34 -34
  52. package/framework/templates/examples/design-system-examples.md +357 -357
  53. package/framework/templates/examples/spec-examples.md +90 -90
  54. package/framework/templates/feature/decisions.md +187 -187
  55. package/framework/templates/feature/recap.md +146 -146
  56. package/framework/templates/feature/tasks.md +199 -199
  57. package/framework/templates/infrastructure/azure/README.md +286 -286
  58. package/framework/templates/infrastructure/azure/deploy-checklist.md +426 -426
  59. package/framework/templates/infrastructure/azure/parameters.dev.json +29 -29
  60. package/framework/templates/infrastructure/azure/parameters.prod.json +29 -29
  61. package/framework/templates/infrastructure/azure/parameters.staging.json +29 -29
  62. package/framework/templates/infrastructure/docker/docker-compose.template.yml +67 -67
  63. package/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -38
  64. package/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -48
  65. package/framework/templates/infrastructure/docker/easypanel.template.json +54 -54
  66. package/package.json +1 -1
  67. package/src/commands/agents/dispatch-agents.js +17 -0
  68. package/src/commands/agents/index.js +13 -13
  69. package/src/commands/agents/project-metrics.js +74 -0
  70. package/src/commands/project/install-plugin-cmd.js +28 -28
  71. package/src/commands/project/setup-infra-cmd.js +12 -12
  72. package/src/commands/standards/context-budget.js +89 -0
  73. package/src/commands/tasks/index.js +4 -4
  74. package/src/commands/templates/index.js +5 -5
  75. package/src/commands/utils/index.js +3 -3
  76. package/src/commands/validation/index.js +4 -4
  77. package/src/core/state/phase-state-machine.js +217 -217
  78. package/src/lib/agents/metrics-aggregator.js +56 -0
  79. package/src/lib/generators/design-system-generator.js +298 -298
  80. package/src/lib/generators/index.js +10 -10
  81. package/src/lib/generators/metadata-extractor.js +387 -387
  82. package/src/lib/stack-filter.js +65 -65
  83. package/src/lib/standards/digest-builder.js +57 -3
  84. package/src/lib/standards/index.js +7 -7
  85. package/src/lib/standards/standards-context-injector.js +302 -302
  86. package/src/lib/validators/architecture/architecture-validator.js +387 -387
  87. package/src/lib/validators/architecture/index.js +7 -7
  88. package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +316 -316
  89. package/src/lib/validators/blazor/blazor-state-validator.js +279 -279
  90. package/src/lib/validators/blazor/blazor-validator.js +369 -369
  91. package/src/lib/validators/blazor/index.js +9 -9
  92. package/src/lib/validators/content/content-validator.js +287 -287
  93. package/src/lib/validators/content/index.js +7 -7
  94. package/src/lib/validators/contracts/index.js +7 -7
  95. package/src/lib/validators/css/css-validator.js +352 -352
  96. package/src/lib/validators/css/index.js +7 -7
  97. package/src/lib/validators/design-system/design-system-validator.js +231 -231
  98. package/src/lib/validators/design-system/index.js +7 -7
  99. package/src/lib/validators/nextjs/index.js +6 -6
  100. package/src/lib/validators/nextjs/next-component-validator.js +183 -183
  101. package/src/lib/validators/packages/index.js +7 -7
  102. package/src/lib/validators/packages/package-validator.js +360 -360
  103. package/src/lib/validators/shared/index.js +12 -12
  104. package/src/lib/validators/shared/issue-counter.js +18 -18
  105. package/src/lib/validators/shared/result-formatter.js +124 -124
  106. package/src/lib/validators/ui/index.js +7 -7
  107. package/src/lib/validators/ui/ui-contrast-validator.js +422 -422
  108. package/src/scripts/global-install.js +58 -58
  109. package/src/scripts/install-plugin.js +126 -126
  110. package/src/utils/claude-md-injector.js +90 -90
  111. package/src/utils/file-copier.js +200 -200
  112. package/src/utils/logger.js +32 -32
  113. package/src/utils/skills-installer.js +178 -178
  114. package/src/utils/version-checker.js +175 -175
@@ -1,139 +1,139 @@
1
- // GENERATED by scripts/generate-refs.js — DO NOT EDIT manually
2
- // Source of truth: src/core/paths/output-schema.js
3
- // Regenerate with: node scripts/generate-refs.js
4
- /**
5
- * Shared phase utilities for Claude Code hooks.
6
- *
7
- * Maps phases to directories and output types.
8
- */
9
-
10
- /** Phase order */
11
- export const PHASE_ORDER = ["proposal","setup","uiux","design","clarify","plan","tasks","implement","sync"];
12
-
13
- /** Map phase → allowed output subdirectory */
14
- export const PHASE_DIRS = {
15
- proposal: '0-proposal',
16
- setup: '0-proposal',
17
- uiux: '2-ui',
18
- design: '1-design',
19
- clarify: '1-design',
20
- plan: '3-plan',
21
- tasks: '4-tasks',
22
- implement: '5-implement',
23
- sync: '5-implement',
24
- };
25
-
26
- /** Map output type (camelCase) → phase that produces it */
27
- export const OUTPUT_PHASE_MAP = {
28
- proposal: 'proposal',
29
- schemaAnalysis: 'design',
30
- spec: 'design',
31
- clarifications: 'clarify',
32
- contracts: 'design',
33
- contractsTs: 'design',
34
- contractsVsa: 'design',
35
- plan: 'plan',
36
- tasks: 'tasks',
37
- uiDesignSystem: 'uiux',
38
- uiMockups: 'uiux',
39
- uiComponents: 'uiux',
40
- uiFlows: 'uiux',
41
- decisions: 'design',
42
- recap: 'implement',
43
- };
44
-
45
- /** Map filename → output type (camelCase) */
46
- export const FILENAME_TO_OUTPUT = {
47
- 'proposal.md': 'proposal',
48
- 'schema-analysis.md': 'schemaAnalysis',
49
- 'spec.md': 'spec',
50
- 'clarifications.md': 'clarifications',
51
- 'contracts.cs': 'contracts',
52
- 'contracts.ts': 'contractsTs',
53
- 'contracts-vsa.cs': 'contractsVsa',
54
- 'plan.md': 'plan',
55
- 'tasks.md': 'tasks',
56
- 'design-system.md': 'uiDesignSystem',
57
- 'mockups.md': 'uiMockups',
58
- 'components.md': 'uiComponents',
59
- 'flows.md': 'uiFlows',
60
- 'decisions.md': 'decisions',
61
- 'recap.md': 'recap',
62
- };
63
-
64
- /** Protected spec files and the approval gate that locks them */
65
- export const PROTECTED_SPEC_FILES = {
66
- 'schema-analysis.md': 'design',
67
- 'spec.md': 'design',
68
- 'contracts.cs': 'design',
69
- 'contracts.ts': 'design',
70
- 'contracts-vsa.cs': 'design',
71
- 'plan.md': 'plan',
72
- 'tasks.md': 'tasks',
73
- 'design-system.md': 'uiux',
74
- 'mockups.md': 'uiux',
75
- 'components.md': 'uiux',
76
- 'flows.md': 'uiux',
77
- };
78
-
79
- /**
80
- * Extract feature name from a .morph/features/{feature}/... path
81
- * @param {string} filePath - File path to analyze
82
- * @returns {string|null} Feature name or null
83
- */
84
- export function extractFeatureName(filePath) {
85
- const normalized = filePath.replace(/\\/g, '/');
86
- const match = normalized.match(/\.morph\/features\/([^/]+)\//);
87
- return match ? match[1] : null;
88
- }
89
-
90
- /**
91
- * Extract phase subdirectory from a .morph/features/{feature}/{phaseDir}/... path
92
- * @param {string} filePath - File path to analyze
93
- * @returns {string|null} Phase directory (e.g., '0-proposal', '1-design') or null
94
- */
95
- export function extractPhaseDir(filePath) {
96
- const normalized = filePath.replace(/\\/g, '/');
97
- const match = normalized.match(/\.morph\/features\/[^/]+\/(\d+-[^/]+)\//);
98
- return match ? match[1] : null;
99
- }
100
-
101
- /**
102
- * Check if a file path is inside .morph/features/
103
- * @param {string} filePath
104
- * @returns {boolean}
105
- */
106
- export function isFeaturePath(filePath) {
107
- const normalized = filePath.replace(/\\/g, '/');
108
- return normalized.includes('.morph/features/');
109
- }
110
-
111
- /**
112
- * Check if a file path is inside .morph/framework/ (readonly)
113
- * @param {string} filePath
114
- * @returns {boolean}
115
- */
116
- export function isFrameworkPath(filePath) {
117
- const normalized = filePath.replace(/\\/g, '/');
118
- return normalized.includes('.morph/framework/');
119
- }
120
-
121
- /**
122
- * Check if a file path is state.json
123
- * @param {string} filePath
124
- * @returns {boolean}
125
- */
126
- export function isStatePath(filePath) {
127
- const normalized = filePath.replace(/\\/g, '/');
128
- return normalized.endsWith('.morph/state.json');
129
- }
130
-
131
- /**
132
- * Get the basename of a file path
133
- * @param {string} filePath
134
- * @returns {string}
135
- */
136
- export function getBasename(filePath) {
137
- const normalized = filePath.replace(/\\/g, '/');
138
- return normalized.split('/').pop();
139
- }
1
+ // GENERATED by scripts/generate-refs.js — DO NOT EDIT manually
2
+ // Source of truth: src/core/paths/output-schema.js
3
+ // Regenerate with: node scripts/generate-refs.js
4
+ /**
5
+ * Shared phase utilities for Claude Code hooks.
6
+ *
7
+ * Maps phases to directories and output types.
8
+ */
9
+
10
+ /** Phase order */
11
+ export const PHASE_ORDER = ["proposal","setup","uiux","design","clarify","plan","tasks","implement","sync"];
12
+
13
+ /** Map phase → allowed output subdirectory */
14
+ export const PHASE_DIRS = {
15
+ proposal: '0-proposal',
16
+ setup: '0-proposal',
17
+ uiux: '2-ui',
18
+ design: '1-design',
19
+ clarify: '1-design',
20
+ plan: '3-plan',
21
+ tasks: '4-tasks',
22
+ implement: '5-implement',
23
+ sync: '5-implement',
24
+ };
25
+
26
+ /** Map output type (camelCase) → phase that produces it */
27
+ export const OUTPUT_PHASE_MAP = {
28
+ proposal: 'proposal',
29
+ schemaAnalysis: 'design',
30
+ spec: 'design',
31
+ clarifications: 'clarify',
32
+ contracts: 'design',
33
+ contractsTs: 'design',
34
+ contractsVsa: 'design',
35
+ plan: 'plan',
36
+ tasks: 'tasks',
37
+ uiDesignSystem: 'uiux',
38
+ uiMockups: 'uiux',
39
+ uiComponents: 'uiux',
40
+ uiFlows: 'uiux',
41
+ decisions: 'design',
42
+ recap: 'implement',
43
+ };
44
+
45
+ /** Map filename → output type (camelCase) */
46
+ export const FILENAME_TO_OUTPUT = {
47
+ 'proposal.md': 'proposal',
48
+ 'schema-analysis.md': 'schemaAnalysis',
49
+ 'spec.md': 'spec',
50
+ 'clarifications.md': 'clarifications',
51
+ 'contracts.cs': 'contracts',
52
+ 'contracts.ts': 'contractsTs',
53
+ 'contracts-vsa.cs': 'contractsVsa',
54
+ 'plan.md': 'plan',
55
+ 'tasks.md': 'tasks',
56
+ 'design-system.md': 'uiDesignSystem',
57
+ 'mockups.md': 'uiMockups',
58
+ 'components.md': 'uiComponents',
59
+ 'flows.md': 'uiFlows',
60
+ 'decisions.md': 'decisions',
61
+ 'recap.md': 'recap',
62
+ };
63
+
64
+ /** Protected spec files and the approval gate that locks them */
65
+ export const PROTECTED_SPEC_FILES = {
66
+ 'schema-analysis.md': 'design',
67
+ 'spec.md': 'design',
68
+ 'contracts.cs': 'design',
69
+ 'contracts.ts': 'design',
70
+ 'contracts-vsa.cs': 'design',
71
+ 'plan.md': 'plan',
72
+ 'tasks.md': 'tasks',
73
+ 'design-system.md': 'uiux',
74
+ 'mockups.md': 'uiux',
75
+ 'components.md': 'uiux',
76
+ 'flows.md': 'uiux',
77
+ };
78
+
79
+ /**
80
+ * Extract feature name from a .morph/features/{feature}/... path
81
+ * @param {string} filePath - File path to analyze
82
+ * @returns {string|null} Feature name or null
83
+ */
84
+ export function extractFeatureName(filePath) {
85
+ const normalized = filePath.replace(/\\/g, '/');
86
+ const match = normalized.match(/\.morph\/features\/([^/]+)\//);
87
+ return match ? match[1] : null;
88
+ }
89
+
90
+ /**
91
+ * Extract phase subdirectory from a .morph/features/{feature}/{phaseDir}/... path
92
+ * @param {string} filePath - File path to analyze
93
+ * @returns {string|null} Phase directory (e.g., '0-proposal', '1-design') or null
94
+ */
95
+ export function extractPhaseDir(filePath) {
96
+ const normalized = filePath.replace(/\\/g, '/');
97
+ const match = normalized.match(/\.morph\/features\/[^/]+\/(\d+-[^/]+)\//);
98
+ return match ? match[1] : null;
99
+ }
100
+
101
+ /**
102
+ * Check if a file path is inside .morph/features/
103
+ * @param {string} filePath
104
+ * @returns {boolean}
105
+ */
106
+ export function isFeaturePath(filePath) {
107
+ const normalized = filePath.replace(/\\/g, '/');
108
+ return normalized.includes('.morph/features/');
109
+ }
110
+
111
+ /**
112
+ * Check if a file path is inside .morph/framework/ (readonly)
113
+ * @param {string} filePath
114
+ * @returns {boolean}
115
+ */
116
+ export function isFrameworkPath(filePath) {
117
+ const normalized = filePath.replace(/\\/g, '/');
118
+ return normalized.includes('.morph/framework/');
119
+ }
120
+
121
+ /**
122
+ * Check if a file path is state.json
123
+ * @param {string} filePath
124
+ * @returns {boolean}
125
+ */
126
+ export function isStatePath(filePath) {
127
+ const normalized = filePath.replace(/\\/g, '/');
128
+ return normalized.endsWith('.morph/state.json');
129
+ }
130
+
131
+ /**
132
+ * Get the basename of a file path
133
+ * @param {string} filePath
134
+ * @returns {string}
135
+ */
136
+ export function getBasename(filePath) {
137
+ const normalized = filePath.replace(/\\/g, '/');
138
+ return normalized.split('/').pop();
139
+ }
@@ -1,13 +1,13 @@
1
- ---
2
- paths:
3
- - "**/*.cs"
4
- - "**/*.csproj"
5
- stacks:
6
- - dotnet
7
- - blazor
8
- ---
9
-
10
- # C# and .NET Standards
11
-
12
- @.morph/framework/standards/core/coding.md
13
- @.morph/framework/standards/backend/dotnet/core.md
1
+ ---
2
+ paths:
3
+ - "**/*.cs"
4
+ - "**/*.csproj"
5
+ stacks:
6
+ - dotnet
7
+ - blazor
8
+ ---
9
+
10
+ # C# and .NET Standards
11
+
12
+ @.morph/framework/standards/core/coding.md
13
+ @.morph/framework/standards/backend/dotnet/core.md
@@ -1,13 +1,13 @@
1
- ---
2
- paths:
3
- - "**/*.razor"
4
- - "**/*.css"
5
- - "**/*.scss"
6
- stacks:
7
- - blazor
8
- ---
9
-
10
- # Frontend Standards
11
-
12
- @.morph/framework/standards/frontend/blazor/design-checklist.md
13
- @.morph/framework/standards/frontend/design-system/naming.md
1
+ ---
2
+ paths:
3
+ - "**/*.razor"
4
+ - "**/*.css"
5
+ - "**/*.scss"
6
+ stacks:
7
+ - blazor
8
+ ---
9
+
10
+ # Frontend Standards
11
+
12
+ @.morph/framework/standards/frontend/blazor/design-checklist.md
13
+ @.morph/framework/standards/frontend/design-system/naming.md
@@ -1,16 +1,16 @@
1
- ---
2
- paths:
3
- - "**/*.bicep"
4
- - "**/Dockerfile"
5
- - "**/docker-compose*.yml"
6
- - "**/pipelines/**"
7
- - "**/.github/workflows/**"
8
- stacks:
9
- - azure
10
- - docker
11
- ---
12
-
13
- # Infrastructure Standards
14
-
15
- @.morph/framework/standards/infrastructure/azure/azure.md
16
- @.morph/framework/standards/infrastructure/docker/easypanel-deploy.md
1
+ ---
2
+ paths:
3
+ - "**/*.bicep"
4
+ - "**/Dockerfile"
5
+ - "**/docker-compose*.yml"
6
+ - "**/pipelines/**"
7
+ - "**/.github/workflows/**"
8
+ stacks:
9
+ - azure
10
+ - docker
11
+ ---
12
+
13
+ # Infrastructure Standards
14
+
15
+ @.morph/framework/standards/infrastructure/azure/azure.md
16
+ @.morph/framework/standards/infrastructure/docker/easypanel-deploy.md
@@ -1,14 +1,14 @@
1
- ---
2
- paths:
3
- - "tests/**"
4
- - "**/*.test.*"
5
- - "**/*.spec.*"
6
- - "**/*Tests.cs"
7
- stacks:
8
- - dotnet
9
- - blazor
10
- ---
11
-
12
- # Testing Standards
13
-
14
- @.morph/framework/standards/core/testing.md
1
+ ---
2
+ paths:
3
+ - "tests/**"
4
+ - "**/*.test.*"
5
+ - "**/*.spec.*"
6
+ - "**/*Tests.cs"
7
+ stacks:
8
+ - dotnet
9
+ - blazor
10
+ ---
11
+
12
+ # Testing Standards
13
+
14
+ @.morph/framework/standards/core/testing.md