@polymorphism-tech/morph-spec 2.3.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +446 -1730
- package/README.md +515 -516
- package/bin/morph-spec.js +366 -294
- package/bin/task-manager.js +429 -368
- package/bin/validate.js +369 -268
- package/content/.claude/commands/morph-apply.md +221 -158
- package/content/.claude/commands/morph-deploy.md +529 -0
- package/content/.claude/commands/morph-preflight.md +227 -0
- package/content/.claude/commands/morph-proposal.md +122 -101
- package/content/.claude/commands/morph-status.md +86 -86
- package/content/.claude/commands/morph-troubleshoot.md +122 -0
- package/content/.claude/skills/infra/azure-deploy-specialist.md +699 -0
- package/content/.claude/skills/level-0-meta/README.md +7 -0
- package/content/.claude/skills/level-0-meta/code-review.md +226 -0
- package/content/.claude/skills/level-0-meta/morph-checklist.md +117 -0
- package/content/.claude/skills/level-0-meta/simulation-checklist.md +77 -0
- package/content/.claude/skills/level-1-workflows/README.md +7 -0
- package/content/.claude/skills/level-1-workflows/morph-replicate.md +213 -0
- package/content/.claude/{commands/morph-clarify.md → skills/level-1-workflows/phase-clarify.md} +131 -184
- package/content/.claude/{commands/morph-design.md → skills/level-1-workflows/phase-design.md} +213 -275
- package/content/.claude/skills/level-1-workflows/phase-setup.md +106 -0
- package/content/.claude/skills/level-1-workflows/phase-tasks.md +164 -0
- package/content/.claude/{commands/morph-uiux.md → skills/level-1-workflows/phase-uiux.md} +169 -211
- package/content/.claude/skills/level-2-domains/README.md +14 -0
- package/content/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +192 -0
- package/content/.claude/skills/{specialists → level-2-domains/architecture}/po-pm-advisor.md +197 -197
- package/content/.claude/skills/level-2-domains/architecture/standards-architect.md +156 -0
- package/content/.claude/skills/level-2-domains/backend/dotnet-senior.md +287 -0
- package/content/.claude/skills/level-2-domains/backend/ef-modeler.md +113 -0
- package/content/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +126 -0
- package/content/.claude/skills/level-2-domains/backend/ms-agent-expert.md +109 -0
- package/content/.claude/skills/level-2-domains/frontend/blazor-builder.md +210 -0
- package/content/.claude/skills/level-2-domains/frontend/nextjs-expert.md +154 -0
- package/content/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +191 -0
- package/content/.claude/skills/{specialists → level-2-domains/infrastructure}/azure-architect.md +142 -142
- package/content/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +126 -0
- package/content/.claude/skills/level-2-domains/infrastructure/container-specialist.md +131 -0
- package/content/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +119 -0
- package/content/.claude/skills/level-2-domains/integrations/asaas-financial.md +130 -0
- package/content/.claude/skills/level-2-domains/integrations/azure-identity.md +142 -0
- package/content/.claude/skills/level-2-domains/integrations/clerk-auth.md +108 -0
- package/content/.claude/skills/level-2-domains/integrations/resend-email.md +119 -0
- package/content/.claude/skills/level-2-domains/quality/code-analyzer.md +235 -0
- package/content/.claude/skills/level-2-domains/quality/testing-specialist.md +126 -0
- package/content/.claude/skills/level-3-technologies/README.md +7 -0
- package/content/.claude/skills/level-4-patterns/README.md +7 -0
- package/content/.claude/skills/specialists/prompt-engineer.md +189 -0
- package/content/.claude/skills/specialists/seo-growth-hacker.md +320 -0
- package/content/.morph/config/agents.json +762 -242
- package/content/.morph/config/config.template.json +122 -108
- package/content/.morph/docs/workflows/design-impl.md +37 -0
- package/content/.morph/docs/workflows/enforcement-pipeline.md +668 -0
- package/content/.morph/docs/workflows/fast-track.md +29 -0
- package/content/.morph/docs/workflows/full-morph.md +76 -0
- package/content/.morph/docs/workflows/standard.md +44 -0
- package/content/.morph/docs/workflows/ui-refresh.md +39 -0
- package/content/.morph/examples/scheduled-reports/decisions.md +158 -0
- package/content/.morph/examples/scheduled-reports/proposal.md +95 -0
- package/content/.morph/examples/scheduled-reports/spec.md +267 -0
- package/content/.morph/hooks/README.md +348 -239
- package/content/.morph/hooks/pre-commit-agents.sh +24 -24
- package/content/.morph/hooks/task-completed.js +73 -0
- package/content/.morph/hooks/teammate-idle.js +68 -0
- package/content/.morph/schemas/tasks.schema.json +220 -0
- package/content/.morph/standards/agent-framework-blazor-ui.md +359 -0
- package/content/.morph/standards/agent-framework-production.md +410 -0
- package/content/.morph/standards/agent-framework-setup.md +413 -453
- package/content/.morph/standards/agent-framework-workflows.md +349 -0
- package/content/.morph/standards/agent-teams-workflow.md +474 -0
- package/content/.morph/standards/architecture.md +325 -325
- package/content/.morph/standards/azure.md +605 -379
- package/content/.morph/standards/dotnet10-migration.md +520 -494
- package/content/.morph/templates/CONTEXT-FEATURE.md +276 -0
- package/content/.morph/templates/CONTEXT.md +170 -0
- package/content/.morph/templates/agent.cs +163 -172
- package/content/.morph/templates/clarify-questions.md +159 -0
- package/content/.morph/templates/contracts/Commands.cs +74 -0
- package/content/.morph/templates/contracts/Entities.cs +25 -0
- package/content/.morph/templates/contracts/Queries.cs +74 -0
- package/content/.morph/templates/contracts/README.md +74 -0
- package/content/.morph/templates/decisions.md +123 -106
- package/content/.morph/templates/infra/azure-pipelines-deploy.yml +480 -0
- package/content/.morph/templates/infra/deploy-checklist.md +426 -0
- package/content/.morph/templates/proposal.md +141 -155
- package/content/.morph/templates/recap.md +94 -105
- package/content/.morph/templates/simulation.md +353 -0
- package/content/.morph/templates/spec.md +149 -148
- package/content/.morph/templates/state.template.json +222 -222
- package/content/.morph/templates/tasks.md +257 -235
- package/content/.morph/templates/ui-components.md +362 -276
- package/content/CLAUDE.md +150 -442
- package/detectors/structure-detector.js +245 -250
- package/docs/README.md +144 -149
- package/docs/getting-started.md +301 -302
- package/docs/installation.md +361 -361
- package/docs/validation-checklist.md +265 -266
- package/package.json +80 -80
- package/src/commands/advance-phase.js +266 -0
- package/src/commands/analyze-blazor-concurrency.js +193 -0
- package/src/commands/deploy.js +780 -0
- package/src/commands/detect-agents.js +167 -0
- package/src/commands/doctor.js +356 -280
- package/src/commands/generate-context.js +40 -0
- package/src/commands/init.js +258 -245
- package/src/commands/lint-fluent.js +352 -0
- package/src/commands/rollback-phase.js +185 -0
- package/src/commands/session-summary.js +291 -0
- package/src/commands/task.js +78 -75
- package/src/commands/troubleshoot.js +222 -0
- package/src/commands/update.js +192 -159
- package/src/commands/validate-blazor-state.js +210 -0
- package/src/commands/validate-blazor.js +156 -0
- package/src/commands/validate-css.js +84 -0
- package/src/commands/validate-phase.js +221 -0
- package/src/lib/blazor-concurrency-analyzer.js +288 -0
- package/src/lib/blazor-state-validator.js +291 -0
- package/src/lib/blazor-validator.js +374 -0
- package/src/lib/complexity-analyzer.js +441 -292
- package/src/lib/context-generator.js +513 -0
- package/src/lib/continuous-validator.js +421 -440
- package/src/lib/css-validator.js +352 -0
- package/src/lib/decision-constraint-loader.js +109 -0
- package/src/lib/design-system-detector.js +187 -0
- package/src/lib/design-system-scaffolder.js +299 -0
- package/src/lib/hook-executor.js +256 -0
- package/src/lib/recap-generator.js +205 -0
- package/src/lib/spec-validator.js +258 -0
- package/src/lib/standards-context-injector.js +287 -0
- package/src/lib/state-manager.js +397 -340
- package/src/lib/team-orchestrator.js +322 -0
- package/src/lib/troubleshoot-grep.js +194 -0
- package/src/lib/troubleshoot-index.js +144 -0
- package/src/lib/validation-runner.js +283 -0
- package/src/lib/validators/contract-compliance-validator.js +273 -0
- package/src/lib/validators/design-system-validator.js +231 -0
- package/src/utils/file-copier.js +187 -139
- package/content/.claude/commands/morph-costs.md +0 -206
- package/content/.claude/commands/morph-setup.md +0 -100
- package/content/.claude/commands/morph-tasks.md +0 -319
- package/content/.claude/skills/infra/bicep-architect.md +0 -419
- package/content/.claude/skills/infra/container-specialist.md +0 -437
- package/content/.claude/skills/infra/devops-engineer.md +0 -405
- package/content/.claude/skills/integrations/asaas-financial.md +0 -333
- package/content/.claude/skills/integrations/azure-identity.md +0 -309
- package/content/.claude/skills/integrations/clerk-auth.md +0 -290
- package/content/.claude/skills/specialists/ai-system-architect.md +0 -604
- package/content/.claude/skills/specialists/cost-guardian.md +0 -110
- package/content/.claude/skills/specialists/ef-modeler.md +0 -211
- package/content/.claude/skills/specialists/hangfire-orchestrator.md +0 -255
- package/content/.claude/skills/specialists/ms-agent-expert.md +0 -263
- package/content/.claude/skills/specialists/standards-architect.md +0 -78
- package/content/.claude/skills/specialists/ui-ux-designer.md +0 -1100
- package/content/.claude/skills/stacks/dotnet-blazor.md +0 -606
- package/content/.claude/skills/stacks/dotnet-nextjs.md +0 -402
- package/content/.claude/skills/stacks/shopify.md +0 -445
- package/content/.morph/config/azure-pricing.json +0 -70
- package/content/.morph/config/azure-pricing.schema.json +0 -50
- package/content/.morph/hooks/pre-commit-costs.sh +0 -91
- package/docs/api/cost-calculator.js.html +0 -513
- package/docs/api/design-system-generator.js.html +0 -382
- package/docs/api/global.html +0 -5263
- package/docs/api/index.html +0 -96
- package/docs/api/state-manager.js.html +0 -423
- package/src/commands/cost.js +0 -181
- package/src/commands/update-pricing.js +0 -206
- package/src/lib/cost-calculator.js +0 -429
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* TaskCompleted Hook - Claude Code Agent Teams
|
|
5
|
+
*
|
|
6
|
+
* Triggered when a task is marked as completed.
|
|
7
|
+
* Validates the task deliverables before allowing the task to be marked done.
|
|
8
|
+
*
|
|
9
|
+
* Usage (from Claude Code hooks):
|
|
10
|
+
* task-completed.js <feature-name> <task-id> [--dry-run] [--verbose]
|
|
11
|
+
*
|
|
12
|
+
* Exit codes:
|
|
13
|
+
* 0 - All validators passed
|
|
14
|
+
* 1 - Validation failed and blocked
|
|
15
|
+
* 2 - Configuration error
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { executeHook, formatHookResults } from '../../../src/lib/hook-executor.js';
|
|
19
|
+
import { fileURLToPath } from 'url';
|
|
20
|
+
import { dirname, join } from 'path';
|
|
21
|
+
|
|
22
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
23
|
+
const __dirname = dirname(__filename);
|
|
24
|
+
|
|
25
|
+
// Get project root (3 levels up from hooks dir)
|
|
26
|
+
const projectPath = join(__dirname, '../../..');
|
|
27
|
+
|
|
28
|
+
async function main() {
|
|
29
|
+
const args = process.argv.slice(2);
|
|
30
|
+
|
|
31
|
+
if (args.length < 2) {
|
|
32
|
+
console.error('Usage: task-completed.js <feature-name> <task-id> [--dry-run] [--verbose]');
|
|
33
|
+
process.exit(2);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const featureName = args[0];
|
|
37
|
+
const taskId = args[1];
|
|
38
|
+
const dryRun = args.includes('--dry-run');
|
|
39
|
+
const verbose = args.includes('--verbose');
|
|
40
|
+
|
|
41
|
+
console.log('🔔 TaskCompleted Hook Triggered');
|
|
42
|
+
console.log(` Feature: ${featureName}`);
|
|
43
|
+
console.log(` Task: ${taskId}`);
|
|
44
|
+
console.log(` Event: Task marked complete, validating deliverables...\n`);
|
|
45
|
+
|
|
46
|
+
try {
|
|
47
|
+
const results = await executeHook(projectPath, featureName, 'TaskCompleted', {
|
|
48
|
+
dryRun,
|
|
49
|
+
verbose
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
const output = formatHookResults(results, 'TaskCompleted');
|
|
53
|
+
console.log(output);
|
|
54
|
+
|
|
55
|
+
if (results.blocked) {
|
|
56
|
+
console.log('\n💡 TIP: Fix the errors above before the task can be marked complete.');
|
|
57
|
+
console.log(` Run: morph-spec task done ${featureName} ${taskId} --skip-validation`);
|
|
58
|
+
console.log(' (Not recommended - only use if you know what you\'re doing)');
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
console.log('\n✅ Task deliverables validated successfully.');
|
|
63
|
+
process.exit(0);
|
|
64
|
+
} catch (err) {
|
|
65
|
+
console.error(`\n❌ Hook execution error: ${err.message}`);
|
|
66
|
+
if (verbose) {
|
|
67
|
+
console.error(err.stack);
|
|
68
|
+
}
|
|
69
|
+
process.exit(2);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
main();
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* TeammateIdle Hook - Claude Code Agent Teams
|
|
5
|
+
*
|
|
6
|
+
* Triggered when a teammate is idle and waiting for next instructions.
|
|
7
|
+
* Validates the teammate's recent work before allowing them to proceed.
|
|
8
|
+
*
|
|
9
|
+
* Usage (from Claude Code hooks):
|
|
10
|
+
* teammate-idle.js <feature-name> [--dry-run] [--verbose]
|
|
11
|
+
*
|
|
12
|
+
* Exit codes:
|
|
13
|
+
* 0 - All validators passed
|
|
14
|
+
* 1 - Validation failed and blocked
|
|
15
|
+
* 2 - Configuration error
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { executeHook, formatHookResults } from '../../../src/lib/hook-executor.js';
|
|
19
|
+
import { fileURLToPath } from 'url';
|
|
20
|
+
import { dirname, join } from 'path';
|
|
21
|
+
|
|
22
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
23
|
+
const __dirname = dirname(__filename);
|
|
24
|
+
|
|
25
|
+
// Get project root (3 levels up from hooks dir)
|
|
26
|
+
const projectPath = join(__dirname, '../../..');
|
|
27
|
+
|
|
28
|
+
async function main() {
|
|
29
|
+
const args = process.argv.slice(2);
|
|
30
|
+
|
|
31
|
+
if (args.length === 0) {
|
|
32
|
+
console.error('Usage: teammate-idle.js <feature-name> [--dry-run] [--verbose]');
|
|
33
|
+
process.exit(2);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const featureName = args[0];
|
|
37
|
+
const dryRun = args.includes('--dry-run');
|
|
38
|
+
const verbose = args.includes('--verbose');
|
|
39
|
+
|
|
40
|
+
console.log('🔔 TeammateIdle Hook Triggered');
|
|
41
|
+
console.log(` Feature: ${featureName}`);
|
|
42
|
+
console.log(` Event: Teammate is idle, validating recent work...\n`);
|
|
43
|
+
|
|
44
|
+
try {
|
|
45
|
+
const results = await executeHook(projectPath, featureName, 'TeammateIdle', {
|
|
46
|
+
dryRun,
|
|
47
|
+
verbose
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
const output = formatHookResults(results, 'TeammateIdle');
|
|
51
|
+
console.log(output);
|
|
52
|
+
|
|
53
|
+
if (results.blocked) {
|
|
54
|
+
console.log('\n💡 TIP: Fix the errors above before the teammate can proceed.');
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
process.exit(0);
|
|
59
|
+
} catch (err) {
|
|
60
|
+
console.error(`\n❌ Hook execution error: ${err.message}`);
|
|
61
|
+
if (verbose) {
|
|
62
|
+
console.error(err.stack);
|
|
63
|
+
}
|
|
64
|
+
process.exit(2);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
main();
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://morph-spec.dev/schemas/tasks.schema.json",
|
|
4
|
+
"title": "MORPH-SPEC Tasks Schema",
|
|
5
|
+
"description": "Schema for tasks.json files in MORPH-SPEC features",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["version", "feature", "tasks"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"version": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"description": "Schema version",
|
|
12
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+$",
|
|
13
|
+
"examples": ["3.0.0"]
|
|
14
|
+
},
|
|
15
|
+
"feature": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "Feature name (kebab-case)",
|
|
18
|
+
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
|
|
19
|
+
"examples": ["scheduled-reports", "user-auth"]
|
|
20
|
+
},
|
|
21
|
+
"createdAt": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"format": "date-time",
|
|
24
|
+
"description": "Creation timestamp"
|
|
25
|
+
},
|
|
26
|
+
"updatedAt": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"format": "date-time",
|
|
29
|
+
"description": "Last update timestamp"
|
|
30
|
+
},
|
|
31
|
+
"summary": {
|
|
32
|
+
"type": "object",
|
|
33
|
+
"description": "Task summary statistics",
|
|
34
|
+
"properties": {
|
|
35
|
+
"total": { "type": "integer", "minimum": 0 },
|
|
36
|
+
"completed": { "type": "integer", "minimum": 0 },
|
|
37
|
+
"inProgress": { "type": "integer", "minimum": 0 },
|
|
38
|
+
"pending": { "type": "integer", "minimum": 0 },
|
|
39
|
+
"blocked": { "type": "integer", "minimum": 0 }
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"tasks": {
|
|
43
|
+
"type": "array",
|
|
44
|
+
"description": "List of tasks",
|
|
45
|
+
"items": {
|
|
46
|
+
"$ref": "#/definitions/task"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"checkpoints": {
|
|
50
|
+
"type": "array",
|
|
51
|
+
"description": "Checkpoint definitions",
|
|
52
|
+
"items": {
|
|
53
|
+
"$ref": "#/definitions/checkpoint"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"definitions": {
|
|
58
|
+
"task": {
|
|
59
|
+
"type": "object",
|
|
60
|
+
"required": ["id", "title", "status"],
|
|
61
|
+
"properties": {
|
|
62
|
+
"id": {
|
|
63
|
+
"type": "string",
|
|
64
|
+
"description": "Task ID (format: T001, T002, etc.)",
|
|
65
|
+
"pattern": "^T\\d{3}$",
|
|
66
|
+
"examples": ["T001", "T002", "T010"]
|
|
67
|
+
},
|
|
68
|
+
"title": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"description": "Task title (short description)",
|
|
71
|
+
"maxLength": 100,
|
|
72
|
+
"examples": ["Create ScheduledReport entity"]
|
|
73
|
+
},
|
|
74
|
+
"description": {
|
|
75
|
+
"type": "string",
|
|
76
|
+
"description": "Detailed task description"
|
|
77
|
+
},
|
|
78
|
+
"status": {
|
|
79
|
+
"type": "string",
|
|
80
|
+
"enum": ["pending", "in_progress", "completed", "blocked", "skipped"],
|
|
81
|
+
"description": "Current task status"
|
|
82
|
+
},
|
|
83
|
+
"type": {
|
|
84
|
+
"type": "string",
|
|
85
|
+
"enum": ["entity", "command", "query", "handler", "service", "component", "page", "test", "migration", "config", "infra", "docs"],
|
|
86
|
+
"description": "Type of task"
|
|
87
|
+
},
|
|
88
|
+
"priority": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"enum": ["low", "medium", "high", "critical"],
|
|
91
|
+
"description": "Task priority"
|
|
92
|
+
},
|
|
93
|
+
"dependencies": {
|
|
94
|
+
"type": "array",
|
|
95
|
+
"description": "IDs of tasks that must be completed first",
|
|
96
|
+
"items": {
|
|
97
|
+
"type": "string",
|
|
98
|
+
"pattern": "^T\\d{3}$"
|
|
99
|
+
},
|
|
100
|
+
"examples": [["T001", "T002"]]
|
|
101
|
+
},
|
|
102
|
+
"files": {
|
|
103
|
+
"type": "array",
|
|
104
|
+
"description": "Files to be created or modified",
|
|
105
|
+
"items": {
|
|
106
|
+
"type": "string"
|
|
107
|
+
},
|
|
108
|
+
"examples": [["Domain/Entities/ScheduledReport.cs", "Infrastructure/Persistence/Config/ScheduledReportConfig.cs"]]
|
|
109
|
+
},
|
|
110
|
+
"checkpoint": {
|
|
111
|
+
"type": "string",
|
|
112
|
+
"description": "Checkpoint ID this task belongs to",
|
|
113
|
+
"pattern": "^CP\\d{3}$"
|
|
114
|
+
},
|
|
115
|
+
"estimatedLines": {
|
|
116
|
+
"type": "integer",
|
|
117
|
+
"description": "Estimated lines of code",
|
|
118
|
+
"minimum": 0
|
|
119
|
+
},
|
|
120
|
+
"actualLines": {
|
|
121
|
+
"type": "integer",
|
|
122
|
+
"description": "Actual lines of code (after completion)",
|
|
123
|
+
"minimum": 0
|
|
124
|
+
},
|
|
125
|
+
"completedAt": {
|
|
126
|
+
"type": "string",
|
|
127
|
+
"format": "date-time",
|
|
128
|
+
"description": "Completion timestamp"
|
|
129
|
+
},
|
|
130
|
+
"notes": {
|
|
131
|
+
"type": "string",
|
|
132
|
+
"description": "Additional notes or comments"
|
|
133
|
+
},
|
|
134
|
+
"blockedReason": {
|
|
135
|
+
"type": "string",
|
|
136
|
+
"description": "Reason for blocked status"
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
"checkpoint": {
|
|
141
|
+
"type": "object",
|
|
142
|
+
"required": ["id", "name"],
|
|
143
|
+
"properties": {
|
|
144
|
+
"id": {
|
|
145
|
+
"type": "string",
|
|
146
|
+
"description": "Checkpoint ID",
|
|
147
|
+
"pattern": "^CP\\d{3}$",
|
|
148
|
+
"examples": ["CP001", "CP002"]
|
|
149
|
+
},
|
|
150
|
+
"name": {
|
|
151
|
+
"type": "string",
|
|
152
|
+
"description": "Checkpoint name",
|
|
153
|
+
"examples": ["Entity Layer Complete", "Backend Complete"]
|
|
154
|
+
},
|
|
155
|
+
"afterTasks": {
|
|
156
|
+
"type": "array",
|
|
157
|
+
"description": "Task IDs after which this checkpoint triggers",
|
|
158
|
+
"items": {
|
|
159
|
+
"type": "string",
|
|
160
|
+
"pattern": "^T\\d{3}$"
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
"validation": {
|
|
164
|
+
"type": "array",
|
|
165
|
+
"description": "Validation steps for this checkpoint",
|
|
166
|
+
"items": {
|
|
167
|
+
"type": "string"
|
|
168
|
+
},
|
|
169
|
+
"examples": [["Run tests", "Build project", "Review code"]]
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
"examples": [
|
|
175
|
+
{
|
|
176
|
+
"version": "3.0.0",
|
|
177
|
+
"feature": "scheduled-reports",
|
|
178
|
+
"createdAt": "2024-01-15T10:00:00Z",
|
|
179
|
+
"summary": {
|
|
180
|
+
"total": 9,
|
|
181
|
+
"completed": 0,
|
|
182
|
+
"inProgress": 0,
|
|
183
|
+
"pending": 9,
|
|
184
|
+
"blocked": 0
|
|
185
|
+
},
|
|
186
|
+
"tasks": [
|
|
187
|
+
{
|
|
188
|
+
"id": "T001",
|
|
189
|
+
"title": "Create ScheduledReport entity",
|
|
190
|
+
"status": "pending",
|
|
191
|
+
"type": "entity",
|
|
192
|
+
"priority": "high",
|
|
193
|
+
"files": [
|
|
194
|
+
"Domain/Entities/ScheduledReport.cs",
|
|
195
|
+
"Infrastructure/Persistence/Config/ScheduledReportConfig.cs"
|
|
196
|
+
],
|
|
197
|
+
"estimatedLines": 100
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"id": "T002",
|
|
201
|
+
"title": "Create CreateReportCommand + Handler",
|
|
202
|
+
"status": "pending",
|
|
203
|
+
"type": "command",
|
|
204
|
+
"dependencies": ["T001"],
|
|
205
|
+
"files": [
|
|
206
|
+
"Application/Features/Reports/Commands/CreateReportCommand.cs"
|
|
207
|
+
]
|
|
208
|
+
}
|
|
209
|
+
],
|
|
210
|
+
"checkpoints": [
|
|
211
|
+
{
|
|
212
|
+
"id": "CP001",
|
|
213
|
+
"name": "Entity Layer Complete",
|
|
214
|
+
"afterTasks": ["T001", "T002", "T003"],
|
|
215
|
+
"validation": ["Build project", "Run unit tests"]
|
|
216
|
+
}
|
|
217
|
+
]
|
|
218
|
+
}
|
|
219
|
+
]
|
|
220
|
+
}
|