@polymorphism-tech/morph-spec 4.10.6 → 4.10.8

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 (149) hide show
  1. package/CLAUDE.md +3 -0
  2. package/LICENSE +71 -71
  3. package/README.md +379 -379
  4. package/bin/morph-spec.js +89 -0
  5. package/bin/task-manager.js +59 -6
  6. package/claude-plugin.json +14 -14
  7. package/docs/CHEATSHEET.md +1 -1
  8. package/docs/QUICKSTART.md +206 -206
  9. package/framework/agents/README.md +14 -14
  10. package/framework/agents/architecture/standards-architect.md +159 -159
  11. package/framework/agents/frontend/blazor-builder.md +13 -0
  12. package/framework/agents/frontend/css-specialist.md +87 -0
  13. package/framework/agents/frontend/nextjs-expert.md +13 -0
  14. package/framework/agents/frontend/nextjs-ui-specialist.md +218 -0
  15. package/framework/agents/frontend/ui-ux-designer.md +80 -10
  16. package/framework/agents/infrastructure/azure-architect.md +149 -149
  17. package/framework/agents/infrastructure/infra-architect.md +48 -48
  18. package/framework/agents.json +2268 -2567
  19. package/framework/hooks/README.md +204 -204
  20. package/framework/hooks/claude-code/post-tool-use/dispatch.js +10 -5
  21. package/framework/hooks/claude-code/session-start/inject-morph-context.js +10 -24
  22. package/framework/hooks/shared/phase-utils.js +139 -139
  23. package/framework/hooks/shared/worktree-helpers.js +30 -8
  24. package/framework/rules/csharp-standards.md +13 -13
  25. package/framework/rules/frontend-standards.md +13 -13
  26. package/framework/rules/infrastructure-standards.md +16 -16
  27. package/framework/rules/testing-standards.md +14 -14
  28. package/framework/skills/README.md +0 -1
  29. package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +12 -0
  30. package/framework/skills/level-0-meta/morph-code-review-nextjs/references/review-example-nextjs.md +254 -254
  31. package/framework/skills/level-0-meta/morph-init/SKILL.md +88 -3
  32. package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +247 -247
  33. package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +270 -270
  34. package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +515 -499
  35. package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +508 -471
  36. package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +12 -1
  37. package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +272 -258
  38. package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +317 -311
  39. package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +424 -323
  40. package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +1 -1
  41. package/framework/standards/STANDARDS.json +2040 -2040
  42. package/framework/standards/frontend/nextjs/motion-patterns.md +321 -0
  43. package/framework/standards/frontend/nextjs/nextjs-patterns.md +17 -17
  44. package/framework/templates/README.md +814 -814
  45. package/framework/templates/code/dotnet/contracts/Commands.cs +74 -74
  46. package/framework/templates/code/dotnet/contracts/Entities.cs +25 -25
  47. package/framework/templates/code/dotnet/contracts/Queries.cs +74 -74
  48. package/framework/templates/code/dotnet/contracts/README.md +74 -74
  49. package/framework/templates/code/dotnet/contracts/api-contracts.cs +173 -173
  50. package/framework/templates/code/dotnet/frontend/component.razor +239 -239
  51. package/framework/templates/code/dotnet/jobs/agent.cs +163 -163
  52. package/framework/templates/code/dotnet/jobs/job.cs +171 -171
  53. package/framework/templates/code/dotnet/test.cs +239 -239
  54. package/framework/templates/code/sql/rls-policy.sql +57 -57
  55. package/framework/templates/code/sql/supabase-migration.sql +100 -100
  56. package/framework/templates/code/sql/supabase-migration.template.sql +113 -113
  57. package/framework/templates/code/typescript/contracts.ts +168 -168
  58. package/framework/templates/context/CONTEXT.md +181 -181
  59. package/framework/templates/context/design-system.md +211 -0
  60. package/framework/templates/docs/proposal.md +182 -182
  61. package/framework/templates/docs/user-stories.md +34 -34
  62. package/framework/templates/examples/design-system-examples.md +357 -357
  63. package/framework/templates/examples/spec-examples.md +90 -90
  64. package/framework/templates/feature/decisions.md +187 -187
  65. package/framework/templates/feature/recap.md +146 -146
  66. package/framework/templates/feature/tasks.md +199 -199
  67. package/framework/templates/infrastructure/azure/README.md +286 -286
  68. package/framework/templates/infrastructure/azure/deploy-checklist.md +426 -426
  69. package/framework/templates/infrastructure/azure/parameters.dev.json +29 -29
  70. package/framework/templates/infrastructure/azure/parameters.prod.json +29 -29
  71. package/framework/templates/infrastructure/azure/parameters.staging.json +29 -29
  72. package/framework/templates/infrastructure/docker/docker-compose.template.yml +67 -67
  73. package/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -38
  74. package/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -48
  75. package/framework/templates/infrastructure/docker/easypanel.template.json +54 -54
  76. package/package.json +82 -82
  77. package/src/commands/agents/agent-metrics.js +174 -0
  78. package/src/commands/agents/audit-dispatch.js +82 -0
  79. package/src/commands/agents/detect-agents.js +275 -0
  80. package/src/commands/agents/dispatch-agents.js +41 -135
  81. package/src/commands/agents/index.js +13 -4
  82. package/src/commands/agents/manage-agents.js +352 -0
  83. package/src/commands/project/doctor.js +59 -0
  84. package/src/commands/project/install-plugin-cmd.js +28 -28
  85. package/src/commands/project/setup-infra-cmd.js +12 -12
  86. package/src/commands/project/update.js +1 -17
  87. package/src/commands/project/worktree.js +58 -2
  88. package/src/commands/state/advance-phase.js +11 -3
  89. package/src/commands/tasks/index.js +4 -4
  90. package/src/commands/templates/index.js +5 -5
  91. package/src/commands/utils/index.js +3 -3
  92. package/src/commands/validation/index.js +4 -4
  93. package/src/core/state/phase-state-machine.js +217 -217
  94. package/src/core/state/state-manager.js +81 -0
  95. package/src/lib/agents/agents-manager.js +349 -0
  96. package/src/lib/agents/metrics-calculator.js +125 -0
  97. package/src/lib/agents/output-collector.js +75 -0
  98. package/src/lib/generators/context-generator.js +8 -7
  99. package/src/lib/generators/design-system-generator.js +298 -298
  100. package/src/lib/generators/index.js +10 -10
  101. package/src/lib/generators/metadata-extractor.js +387 -387
  102. package/src/lib/stack-filter.js +65 -65
  103. package/src/lib/standards/index.js +7 -7
  104. package/src/lib/standards/standards-context-injector.js +302 -302
  105. package/src/lib/tasks/task-parser.js +94 -3
  106. package/src/lib/validators/architecture/architecture-validator.js +387 -387
  107. package/src/lib/validators/architecture/index.js +7 -7
  108. package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +316 -316
  109. package/src/lib/validators/blazor/blazor-state-validator.js +279 -279
  110. package/src/lib/validators/blazor/blazor-validator.js +369 -369
  111. package/src/lib/validators/blazor/index.js +9 -9
  112. package/src/lib/validators/checkpoint-persistence.js +39 -0
  113. package/src/lib/validators/content/content-validator.js +287 -279
  114. package/src/lib/validators/content/index.js +7 -7
  115. package/src/lib/validators/contracts/index.js +7 -7
  116. package/src/lib/validators/css/css-validator.js +352 -352
  117. package/src/lib/validators/css/index.js +7 -7
  118. package/src/lib/validators/design-system/design-system-validator.js +231 -231
  119. package/src/lib/validators/design-system/index.js +7 -7
  120. package/src/lib/validators/nextjs/index.js +6 -6
  121. package/src/lib/validators/nextjs/next-component-validator.js +183 -183
  122. package/src/lib/validators/packages/index.js +7 -7
  123. package/src/lib/validators/packages/package-validator.js +360 -360
  124. package/src/lib/validators/shared/index.js +12 -12
  125. package/src/lib/validators/shared/issue-counter.js +18 -18
  126. package/src/lib/validators/shared/result-formatter.js +124 -124
  127. package/src/lib/validators/spec-validator.js +2 -2
  128. package/src/lib/validators/ui/index.js +7 -7
  129. package/src/lib/validators/ui/ui-contrast-validator.js +422 -422
  130. package/src/lib/validators/validation-runner.js +20 -0
  131. package/src/scripts/global-install.js +58 -58
  132. package/src/scripts/install-plugin.js +126 -126
  133. package/src/scripts/setup-infra.js +1 -17
  134. package/src/utils/agent-id-mapper.js +11 -0
  135. package/src/utils/agents-installer.js +40 -8
  136. package/src/utils/claude-md-injector.js +90 -90
  137. package/src/utils/claude-settings-manager.js +1 -1
  138. package/src/utils/file-copier.js +200 -196
  139. package/src/utils/hooks-installer.js +556 -739
  140. package/src/utils/logger.js +32 -32
  141. package/src/utils/skills-installer.js +178 -178
  142. package/src/utils/tier-helpers.js +24 -0
  143. package/src/utils/version-checker.js +175 -175
  144. package/framework/agents/architecture/po-pm-advisor.md +0 -203
  145. package/framework/hooks/claude-code/user-prompt/set-terminal-title.js +0 -68
  146. package/framework/skills/level-1-workflows/morph-phase-implement/.morph/logs/activity.json +0 -38
  147. package/framework/skills/level-1-workflows/morph-phase-tasks/.morph/logs/activity.json +0 -14
  148. package/framework/templates/.idea/morph-templates.xml +0 -92
  149. package/framework/templates/.vscode/morph-templates.code-snippets +0 -186
@@ -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
+ }
@@ -29,6 +29,7 @@ export function parseWorktreeResult(stdout) {
29
29
 
30
30
  /**
31
31
  * Build context line(s) to inject based on worktree setup result.
32
+ * Outputs MANDATORY instructions for Claude to work inside the worktree.
32
33
  * @param {Object|null} result - Parsed result from parseWorktreeResult
33
34
  * @returns {string} Context lines to inject, or '' to skip injection
34
35
  */
@@ -36,18 +37,39 @@ export function buildWorktreeContextLine(result) {
36
37
  if (!result) return '';
37
38
  if (result.error) return '';
38
39
 
39
- if (result.created) {
40
- return `🪴 Worktree created: Working in .worktrees/${result.feature || ''} on branch ${result.branch}`;
41
- }
40
+ const path = result.path;
41
+ const feature = result.feature || '';
42
42
 
43
- if (result.alreadyExists) {
43
+ if (result.created || result.alreadyExists) {
44
44
  return [
45
- `⚠️ Existing worktree found for feature '${result.feature}': ${result.path} (branch: ${result.branch})`,
46
- ` Use AskUserQuestion to ask: "resume existing worktree or start fresh (--fresh)?"`,
47
- ` • Resume: continue in existing worktree (no change)`,
48
- ` • Fresh: run \`morph-spec worktree setup ${result.feature} --fresh\``
45
+ `🪴 WORKTREE ACTIVE — branch: ${result.branch}`,
46
+ ` WORKTREE_PATH: ${path}`,
47
+ ` MANDATORY: ALL work for feature '${feature}' MUST happen inside the worktree:`,
48
+ ` • Bash: run \`cd ${path}\` first (CWD persists for subsequent commands)`,
49
+ ` • Read/Write/Edit: use ${path} as base for ALL file paths`,
50
+ ` • Glob/Grep: set path parameter to ${path}`,
51
+ ` DO NOT write files to the main project directory.`,
49
52
  ].join('\n');
50
53
  }
51
54
 
52
55
  return '';
53
56
  }
57
+
58
+ /**
59
+ * Build worktree context from state metadata (for resume sessions).
60
+ * @param {Object} worktreeMeta - { path, branch } from state.features[name].worktree
61
+ * @param {string} featureName - Feature name
62
+ * @returns {string} Context lines or ''
63
+ */
64
+ export function buildWorktreeResumeContext(worktreeMeta, featureName) {
65
+ if (!worktreeMeta?.path) return '';
66
+ return [
67
+ `🪴 WORKTREE ACTIVE — branch: ${worktreeMeta.branch}`,
68
+ ` WORKTREE_PATH: ${worktreeMeta.path}`,
69
+ ` MANDATORY: ALL work for feature '${featureName}' MUST happen inside the worktree:`,
70
+ ` • Bash: run \`cd ${worktreeMeta.path}\` first (CWD persists for subsequent commands)`,
71
+ ` • Read/Write/Edit: use ${worktreeMeta.path} as base for ALL file paths`,
72
+ ` • Glob/Grep: set path parameter to ${worktreeMeta.path}`,
73
+ ` DO NOT write files to the main project directory.`,
74
+ ].join('\n');
75
+ }
@@ -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
@@ -17,7 +17,6 @@ Each skill is a directory: `{name}/SKILL.md` + optional `scripts/`, `references/
17
17
  | `verification-before-completion` | Gate check before marking any work done |
18
18
  | `code-review` | .NET/C# review checklist (naming, arch, async, DI, DTOs) |
19
19
  | `morph-replicate` | Convert HTML prototypes to Blazor components |
20
- | `terminal-title` | Manually override the terminal window title for the current task |
21
20
 
22
21
  ### level-0-meta extras
23
22
 
@@ -33,6 +33,18 @@ allowed-tools: Read, Bash, Glob, Grep, AskUserQuestion
33
33
 
34
34
  ## Workflow
35
35
 
36
+ ### Step 0: Create session tasks
37
+
38
+ ```
39
+ TaskCreate: "Explore project context" → activeForm: "Exploring context"
40
+ TaskCreate: "Ask clarifying questions" → activeForm: "Asking questions"
41
+ TaskCreate: "Propose 2-3 approaches" → activeForm: "Analyzing approaches"
42
+ TaskCreate: "Present design" → activeForm: "Presenting design"
43
+ TaskCreate: "Document recommendation" → activeForm: "Documenting"
44
+ ```
45
+
46
+ Update each to `in_progress` before its step and `completed` after.
47
+
36
48
  ### Step 1: Explore Context
37
49
 
38
50
  Gather information before generating ideas. This step is what makes morph-aware brainstorming different from generic brainstorming — it grounds your thinking in the actual project state and constraints.