@agentic15.com/agentic15-claude-zen 2.0.6 → 2.0.9

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 (64) hide show
  1. package/CHANGELOG.md +115 -0
  2. package/bin/create-agentic15-claude-zen.js +1 -1
  3. package/package.json +3 -6
  4. package/src/cli/CommitCommand.js +19 -3
  5. package/src/cli/PlanCommand.js +150 -21
  6. package/src/cli/TaskCommand.js +3 -1
  7. package/src/core/ProjectInitializer.js +19 -23
  8. package/src/core/TaskIssueMapper.js +15 -11
  9. package/src/core/TemplateManager.js +2 -1
  10. package/templates/.github/ISSUE_TEMPLATE/task.md +23 -0
  11. package/templates/.github/PULL_REQUEST_TEMPLATE.md +23 -0
  12. package/templates/README.md +52 -55
  13. package/dist/hooks/auto-format.js +0 -2
  14. package/dist/hooks/check-pending-reviews.js +0 -2
  15. package/dist/hooks/complete-task.js +0 -2
  16. package/dist/hooks/detect-pending-reviews.js +0 -2
  17. package/dist/hooks/enforce-hard-requirements.js +0 -2
  18. package/dist/hooks/enforce-migration-workflow.js +0 -2
  19. package/dist/hooks/enforce-plan-template.js +0 -2
  20. package/dist/hooks/enforce-structured-development.js +0 -2
  21. package/dist/hooks/enforce-test-pyramid.js +0 -2
  22. package/dist/hooks/init-task-tracker.js +0 -2
  23. package/dist/hooks/performance-cache.js +0 -2
  24. package/dist/hooks/prevent-read-bypass.js +0 -2
  25. package/dist/hooks/session-start-context.js +0 -2
  26. package/dist/hooks/start-task.js +0 -2
  27. package/dist/hooks/task-status.js +0 -2
  28. package/dist/hooks/validate-component-contract.js +0 -2
  29. package/dist/hooks/validate-database-changes.js +0 -2
  30. package/dist/hooks/validate-e2e-coverage.js +0 -2
  31. package/dist/hooks/validate-git-workflow.js +0 -2
  32. package/dist/hooks/validate-integration-site.js +0 -2
  33. package/dist/hooks/validate-migration-impact.js +0 -2
  34. package/dist/hooks/validate-task-completion.js +0 -2
  35. package/dist/hooks/validate-test-quality.js +0 -2
  36. package/dist/hooks/validate-test-results.js +0 -2
  37. package/dist/hooks/validate-ui-integration.js +0 -2
  38. package/dist/hooks/validate-ui-runtime.js +0 -2
  39. package/dist/hooks/validate-ui-syntax.js +0 -2
  40. package/dist/hooks/validate-ui-visual-native.js +0 -2
  41. package/dist/hooks/validate-ui-visual.js +0 -2
  42. package/dist/hooks/validate-visual-regression.js +0 -2
  43. package/dist/index.js +0 -24
  44. package/dist/index.js.map +0 -7
  45. package/dist/scripts/add-version-headers.js +0 -2
  46. package/dist/scripts/help.js +0 -2
  47. package/dist/scripts/plan-amend.js +0 -2
  48. package/dist/scripts/plan-create.js +0 -2
  49. package/dist/scripts/plan-generate.js +0 -2
  50. package/dist/scripts/plan-help.js +0 -2
  51. package/dist/scripts/plan-init.js +0 -2
  52. package/dist/scripts/plan-manager.js +0 -2
  53. package/dist/scripts/pre-publish-checklist.js +0 -2
  54. package/dist/scripts/production-test.js +0 -2
  55. package/dist/scripts/profile-hooks.js +0 -2
  56. package/dist/scripts/setup-git-hooks.js +0 -2
  57. package/dist/scripts/task-done.js +0 -2
  58. package/dist/scripts/task-merge.js +0 -2
  59. package/dist/scripts/task-next.js +0 -2
  60. package/dist/scripts/task-start.js +0 -2
  61. package/dist/scripts/task-status.js +0 -2
  62. package/dist/scripts/verify-hooks.js +0 -2
  63. package/templates/.claude/CLAUDE.md +0 -408
  64. package/templates/.claude/ONBOARDING.md +0 -723
package/CHANGELOG.md CHANGED
@@ -7,6 +7,121 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  Copyright 2024-2025 agentic15.com
9
9
 
10
+ ## [2.0.9] - 2025-12-25
11
+
12
+ ### Changed
13
+ - **BREAKING**: Removed obfuscated scripts directory (contained old v1.x minified code)
14
+ - **BREAKING**: Removed npm scripts (plan:generate, plan:init) - no longer needed
15
+ - Refactored PlanCommand.js to have plan generation/locking logic built-in (no external scripts)
16
+ - Package now uses ONLY CLI commands as documented in WORKFLOWS.md
17
+ - Package size: 45.7 kB compressed, 176.5 kB unpacked (52 files)
18
+ - TaskIssueMapper now follows .github/ISSUE_TEMPLATE/task.md structure for consistency
19
+ - CommitCommand now follows .github/PULL_REQUEST_TEMPLATE.md structure for PRs
20
+ - Updated onboarding instructions to show v2.0 CLI commands (removed outdated npm scripts)
21
+
22
+ ### Added
23
+ - GitHub issue and PR templates (.github/ISSUE_TEMPLATE/task.md, PULL_REQUEST_TEMPLATE.md)
24
+ - CLI now uses templates for consistent issue/PR formatting
25
+ - Built-in plan generation logic in PlanCommand class
26
+ - Built-in plan locking logic with task extraction
27
+ - Support for v2.0 schema (singular 'project' at root) in extractTasks()
28
+ - Standardized issue body format with sections: Task Description, Completion Criteria, Dependencies, Phase
29
+ - Standardized PR body format with sections: Task, Description, Changes, Testing, Notes
30
+
31
+ ### Fixed
32
+ - **BUG #1**: Incorrect import path in bin/create-agentic15-claude-zen.js (dist/index.js → src/index.js)
33
+ - **BUG #2**: Wrong template path in TemplateManager.js (needed to go up 2 levels from src/core/)
34
+ - **BUG #3**: Removed obsolete extractBundledFiles() call (tried to copy non-existent scripts)
35
+ - **BUG #4**: extractTasks() now handles v2.0 schema with singular 'project' key
36
+ - **BUG #5**: TaskCommand.js calls correct TaskIssueMapper methods (not non-existent mapTaskToIssue)
37
+
38
+ ### Removed
39
+ - All obfuscated v1.x scripts (19 files, ~248KB of minified code)
40
+ - npm run plan:* commands from templates
41
+ - extractBundledFiles() method call from ProjectInitializer
42
+
43
+ ### Testing
44
+ - Black box testing completed with 5 bugs found and fixed
45
+ - Successfully tested: project creation, auth setup, plan generation, plan locking, task extraction, feature branch creation
46
+ - Test repository: https://github.com/agentic15/agentic15-test-v2
47
+
48
+ ## [2.0.8] - 2025-12-25
49
+
50
+ ### Changed
51
+ - Removed entire dist/ folder (48 minified files)
52
+ - Changed to ship source code only (no minification)
53
+ - Updated package.json main entry from dist/index.js to src/index.js
54
+ - Removed all build/minification scripts
55
+
56
+ ### Fixed
57
+ - Fixed obfuscated/minified code showing wrong v1.x commands
58
+
59
+ ## [2.0.7] - 2025-12-25
60
+
61
+ ### Removed
62
+ - Deleted CLAUDE.md (1,100+ lines of obsolete v1.x documentation)
63
+ - Deleted ONBOARDING.md (86 lines of obsolete v1.x onboarding)
64
+
65
+ ### Changed
66
+ - Updated templates/README.md with v2.0 commands
67
+
68
+ ## [2.0.6] - 2025-12-25
69
+
70
+ ### Changed
71
+ - Added PowerShell syntax to README.md and WORKFLOWS.md
72
+ - PowerShell requires quotes: `npx "@agentic15.com/agentic15-claude-zen" my-project`
73
+
74
+ ## [2.0.5] - 2025-12-25
75
+
76
+ ### Changed
77
+ - Simplified README.md from 307 lines to 68 lines
78
+ - README now just points to WORKFLOWS.md for detailed workflows
79
+
80
+ ## [2.0.4] - 2025-12-25
81
+
82
+ ### Fixed
83
+ - Fixed package README.md with broken documentation links
84
+ - Removed references to deleted docs/ folder
85
+
86
+ ## [2.0.3] - 2025-12-25
87
+
88
+ ### Changed
89
+ - Further simplified README.md to match WORKFLOWS.md style
90
+ - Consolidated all workflow documentation
91
+
92
+ ## [2.0.2] - 2025-12-25
93
+
94
+ ### Changed
95
+ - Simplified README.md to focus on quick start and command reference
96
+ - All detailed workflows now in WORKFLOWS.md
97
+
98
+ ## [2.0.1] - 2025-12-25
99
+
100
+ ### Changed
101
+ - Updated package README with correct v2.0 commands
102
+ - Fixed mermaid diagram syntax errors in WORKFLOWS.md
103
+
104
+ ## [2.0.0] - 2025-12-25
105
+
106
+ ### Added
107
+ - CLI-based architecture (`npx agentic15` commands)
108
+ - Dedicated agentic15 CLI binary for all automation
109
+ - Single WORKFLOWS.md with mermaid diagrams
110
+ - Visual testing feedback loop
111
+ - Auto-generated commit messages
112
+ - Feature branch workflow with PRs
113
+ - GitHub issue/PR integration
114
+
115
+ ### Removed
116
+ - All npm run task:* commands (replaced by CLI)
117
+ - 9 workflow documentation files (3,526 lines)
118
+ - docs/ folder
119
+
120
+ ### Changed
121
+ - Workflow now requires feature branches + PRs (no direct main commits)
122
+ - Simplified documentation to <20 line POST-INSTALL.md + WORKFLOWS.md
123
+ - Commit messages auto-generated as [TASK-XXX] title
124
+
10
125
  ## [1.0.1] - 2025-12-24
11
126
 
12
127
  ### Changed
@@ -176,7 +176,7 @@ async function main() {
176
176
 
177
177
  // Import and run initialization
178
178
  try {
179
- const { initializeProject } = await import('../dist/index.js');
179
+ const { initializeProject } = await import('../src/index.js');
180
180
  await initializeProject(projectName, targetDir, { initGit, installDeps });
181
181
 
182
182
  console.log('\nāœ… Project created successfully!\n');
package/package.json CHANGED
@@ -1,19 +1,17 @@
1
1
  {
2
2
  "name": "@agentic15.com/agentic15-claude-zen",
3
- "version": "2.0.6",
3
+ "version": "2.0.9",
4
4
  "description": "Structured AI-assisted development framework for Claude Code with enforced quality standards",
5
- "main": "dist/index.js",
5
+ "main": "src/index.js",
6
6
  "bin": {
7
7
  "agentic15-claude-zen": "./bin/create-agentic15-claude-zen.js",
8
8
  "agentic15": "./bin/agentic15.js"
9
9
  },
10
10
  "type": "module",
11
11
  "scripts": {
12
- "build": "node esbuild.config.js",
13
12
  "test": "node test/integration.test.js",
14
13
  "test:e2e": "node test/e2e-verification.test.js",
15
- "test:site": "node test/verify-test-site.js",
16
- "prepublishOnly": "npm run build"
14
+ "test:site": "node test/verify-test-site.js"
17
15
  },
18
16
  "keywords": [
19
17
  "agentic15",
@@ -44,7 +42,6 @@
44
42
  "files": [
45
43
  "bin/",
46
44
  "src/",
47
- "dist/",
48
45
  "templates/",
49
46
  "templates/.gitignore",
50
47
  "README.md",
@@ -178,13 +178,29 @@ export class CommitCommand {
178
178
  taskData = task;
179
179
  }
180
180
 
181
- // Build PR body
182
- let prBody = taskData.description || '';
181
+ // Build PR body following .github/PULL_REQUEST_TEMPLATE.md structure
182
+ let prBody = `## Task\n\n`;
183
183
 
184
184
  if (taskData.githubIssue) {
185
- prBody += `\n\nCloses #${taskData.githubIssue}`;
185
+ prBody += `Closes #${taskData.githubIssue}\n\n`;
186
+ } else {
187
+ prBody += `${task.id}\n\n`;
186
188
  }
187
189
 
190
+ prBody += `## Description\n\n`;
191
+ prBody += `${taskData.description || task.description || commitMessage}\n\n`;
192
+
193
+ prBody += `## Changes\n\n`;
194
+ prBody += `- Implemented ${task.title}\n\n`;
195
+
196
+ prBody += `## Testing\n\n`;
197
+ prBody += `- [x] Unit tests pass (\`npm test\`)\n`;
198
+ prBody += `- [ ] Visual tests pass (if applicable) (\`npx playwright test\`)\n`;
199
+ prBody += `- [ ] Code follows project conventions\n\n`;
200
+
201
+ prBody += `## Notes\n\n`;
202
+ prBody += `Auto-generated by Agentic15 Claude Zen`;
203
+
188
204
  // Create PR using gh CLI
189
205
  const prCommand = `gh pr create --title "${commitMessage}" --body "${prBody}" --base ${mainBranch}`;
190
206
  const prOutput = execSync(prCommand, { encoding: 'utf-8' });
@@ -1,4 +1,3 @@
1
- import { execSync } from 'child_process';
2
1
  import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync } from 'fs';
3
2
  import { join } from 'path';
4
3
 
@@ -49,31 +48,75 @@ export class PlanCommand {
49
48
  console.log('\nšŸ“‹ Generating new plan...\n');
50
49
 
51
50
  try {
52
- // Run plan:generate script
53
- execSync(`npm run plan:generate "${description}"`, { stdio: 'inherit' });
51
+ // Create plan ID
52
+ const planId = this.getNextPlanId();
53
+ const planPath = join(process.cwd(), '.claude', 'plans', planId);
54
54
 
55
- // Find the generated plan
56
- const plansDir = join(process.cwd(), '.claude', 'plans');
57
- const plans = readdirSync(plansDir)
58
- .filter(name => name.startsWith('plan-') && name.includes('-generated'));
55
+ // Create plan directory
56
+ mkdirSync(planPath, { recursive: true });
59
57
 
60
- if (plans.length === 0) {
61
- console.log('\nāŒ Failed to generate plan\n');
62
- process.exit(1);
63
- }
58
+ // Create PROJECT-REQUIREMENTS.txt
59
+ const requirementsPath = join(planPath, 'PROJECT-REQUIREMENTS.txt');
60
+ const requirementsContent = `PROJECT REQUIREMENTS
61
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
62
+
63
+ ${description}
64
+
65
+ Generated: ${new Date().toISOString()}
66
+ PLAN ID: ${planId}
67
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
68
+
69
+ INSTRUCTIONS FOR CLAUDE
70
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
71
+
72
+ Please analyze the requirements above and create a comprehensive project plan.
73
+
74
+ 1. Read the PLAN-SCHEMA.json to understand the plan structure
75
+ 2. Read the PROJECT-PLAN-TEMPLATE.json for the format
76
+ 3. Create a PROJECT-PLAN.json file in this directory with:
77
+ - Clear project/subproject/milestone hierarchy
78
+ - Detailed tasks with IDs (TASK-001, TASK-002, etc.)
79
+ - Proper dependencies between tasks
80
+ - Realistic time estimates
81
+ - Phases: design, implementation, testing, deployment
82
+ - Completion criteria for each task
83
+
84
+ 4. Structure the plan to follow these phases:
85
+ - DESIGN: Architecture, UI/UX, database schema
86
+ - IMPLEMENTATION: Core features, API, frontend
87
+ - TESTING: Unit tests, integration tests, E2E tests
88
+ - DEPLOYMENT: Build, CI/CD, documentation
89
+
90
+ 5. Ensure tasks are:
91
+ - Granular (2-8 hours each)
92
+ - Clearly defined with specific deliverables
93
+ - Properly sequenced with dependencies
94
+ - Grouped logically by feature/component
95
+
96
+ 6. After creating the plan, tell the user to run:
97
+ npx agentic15 plan
64
98
 
65
- // Use the most recent generated plan
66
- const planId = plans[plans.length - 1];
99
+ This will lock the plan and generate the task tracker.
100
+
101
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
102
+ GENERATED: ${new Date().toISOString()}
103
+ `;
104
+
105
+ writeFileSync(requirementsPath, requirementsContent);
67
106
 
68
107
  // Set as active plan
69
- const activePlanPath = join(process.cwd(), '.claude', 'ACTIVE-PLAN');
108
+ const claudeDir = join(process.cwd(), '.claude');
109
+ if (!existsSync(claudeDir)) {
110
+ mkdirSync(claudeDir, { recursive: true });
111
+ }
112
+ const activePlanPath = join(claudeDir, 'ACTIVE-PLAN');
70
113
  writeFileSync(activePlanPath, planId);
71
114
 
72
- console.log(`\nāœ… Plan requirements created: ${planId}`);
115
+ console.log(`āœ… Plan requirements created: ${planId}`);
73
116
  console.log(` Location: .claude/plans/${planId}/PROJECT-REQUIREMENTS.txt\n`);
74
117
  console.log('šŸ’” Next steps:');
75
118
  console.log(` 1. Tell Claude: "Create the project plan"`);
76
- console.log(` 2. When Claude is done, run: agentic15 plan\n`);
119
+ console.log(` 2. When Claude is done, run: npx agentic15 plan\n`);
77
120
  } catch (error) {
78
121
  console.log(`\nāŒ Failed to generate plan: ${error.message}\n`);
79
122
  process.exit(1);
@@ -84,20 +127,106 @@ export class PlanCommand {
84
127
  console.log(`šŸ“‹ Locking plan: ${planId}\n`);
85
128
 
86
129
  try {
87
- // Run plan:init script
88
- execSync('npm run plan:init', { stdio: 'inherit' });
130
+ const planPath = join(process.cwd(), '.claude', 'plans', planId);
131
+ const projectPlanPath = join(planPath, 'PROJECT-PLAN.json');
89
132
 
90
- console.log('\nāœ… Plan locked successfully\n');
133
+ // Verify PROJECT-PLAN.json exists
134
+ if (!existsSync(projectPlanPath)) {
135
+ console.log('\nāŒ PROJECT-PLAN.json not found');
136
+ console.log(' Tell Claude to create the plan first\n');
137
+ process.exit(1);
138
+ }
91
139
 
92
- this.showPlanStatus(planId);
140
+ // Read the plan
141
+ const plan = JSON.parse(readFileSync(projectPlanPath, 'utf-8'));
93
142
 
94
- console.log('šŸ’” Next step: agentic15 task next\n');
143
+ // Extract tasks from plan
144
+ const tasks = [];
145
+ this.extractTasks(plan, tasks);
146
+
147
+ // Create task files
148
+ const tasksDir = join(planPath, 'tasks');
149
+ if (!existsSync(tasksDir)) {
150
+ mkdirSync(tasksDir, { recursive: true });
151
+ }
152
+
153
+ // Write individual task files
154
+ tasks.forEach(task => {
155
+ const taskPath = join(tasksDir, `${task.id}.json`);
156
+ writeFileSync(taskPath, JSON.stringify(task, null, 2));
157
+ });
158
+
159
+ // Create task tracker
160
+ const tracker = {
161
+ planId,
162
+ lockedAt: new Date().toISOString(),
163
+ taskFiles: tasks.map(task => ({
164
+ id: task.id,
165
+ title: task.title,
166
+ phase: task.phase || 'implementation',
167
+ status: 'pending',
168
+ description: task.description
169
+ }))
170
+ };
171
+
172
+ const trackerPath = join(planPath, 'TASK-TRACKER.json');
173
+ writeFileSync(trackerPath, JSON.stringify(tracker, null, 2));
174
+
175
+ // Mark as locked
176
+ const lockedPath = join(planPath, '.plan-locked');
177
+ writeFileSync(lockedPath, new Date().toISOString());
178
+
179
+ console.log('āœ… Plan locked successfully\n');
180
+ this.showPlanStatus(planId);
181
+ console.log('šŸ’” Next step: npx agentic15 task next\n');
95
182
  } catch (error) {
96
183
  console.log(`\nāŒ Failed to lock plan: ${error.message}\n`);
97
184
  process.exit(1);
98
185
  }
99
186
  }
100
187
 
188
+ static extractTasks(obj, tasks) {
189
+ // Recursively extract all tasks from the plan structure
190
+ if (obj.tasks && Array.isArray(obj.tasks)) {
191
+ tasks.push(...obj.tasks);
192
+ }
193
+
194
+ // Check nested structures
195
+ if (obj.milestones && Array.isArray(obj.milestones)) {
196
+ obj.milestones.forEach(milestone => this.extractTasks(milestone, tasks));
197
+ }
198
+
199
+ if (obj.subprojects && Array.isArray(obj.subprojects)) {
200
+ obj.subprojects.forEach(subproject => this.extractTasks(subproject, tasks));
201
+ }
202
+
203
+ if (obj.projects && Array.isArray(obj.projects)) {
204
+ obj.projects.forEach(project => this.extractTasks(project, tasks));
205
+ }
206
+
207
+ // Handle singular 'project' at root level (v2.0 schema)
208
+ if (obj.project && typeof obj.project === 'object') {
209
+ this.extractTasks(obj.project, tasks);
210
+ }
211
+ }
212
+
213
+ static getNextPlanId() {
214
+ const plansDir = join(process.cwd(), '.claude', 'plans');
215
+
216
+ if (!existsSync(plansDir)) {
217
+ mkdirSync(plansDir, { recursive: true });
218
+ }
219
+
220
+ const existingPlans = readdirSync(plansDir)
221
+ .filter(name => name.match(/^plan-\d{3}-/i))
222
+ .map(name => parseInt(name.match(/^plan-(\d{3})-/i)[1]))
223
+ .filter(num => !isNaN(num));
224
+
225
+ const nextNum = existingPlans.length > 0 ? Math.max(...existingPlans) + 1 : 1;
226
+
227
+ return `plan-${String(nextNum).padStart(3, '0')}-generated`;
228
+ }
229
+
101
230
  static showPlanStatus(planId) {
102
231
  const trackerPath = join(process.cwd(), '.claude', 'plans', planId, 'TASK-TRACKER.json');
103
232
 
@@ -152,7 +152,9 @@ export class TaskCommand {
152
152
  const taskPath = this.getTaskPath(task.id);
153
153
  const taskData = JSON.parse(readFileSync(taskPath, 'utf-8'));
154
154
 
155
- const { title, body, labels } = TaskIssueMapper.mapTaskToIssue(taskData);
155
+ const title = TaskIssueMapper.taskToIssueTitle(taskData);
156
+ const body = TaskIssueMapper.taskToIssueBody(taskData);
157
+ const labels = TaskIssueMapper.taskStatusToLabels(taskData.status || 'pending', taskData.phase);
156
158
  const issueNumber = await client.createIssue(title, body, labels);
157
159
 
158
160
  if (issueNumber) {
@@ -53,25 +53,22 @@ export class ProjectInitializer {
53
53
  // Step 1: Copy templates
54
54
  await this.templateManager.copyTemplates(projectName, targetDir);
55
55
 
56
- // Step 2: Extract bundled scripts and hooks
57
- await this.templateManager.extractBundledFiles(targetDir);
58
-
59
- // Step 3: Initialize git repository
56
+ // Step 2: Initialize git repository
60
57
  if (initGit) {
61
58
  await this.gitInitializer.initialize(targetDir);
62
59
  }
63
60
 
64
- // Step 4: Install dependencies
61
+ // Step 3: Install dependencies
65
62
  if (installDeps) {
66
63
  await this.dependencyInstaller.install(targetDir);
67
64
  }
68
65
 
69
- // Step 5: Setup git hooks
66
+ // Step 4: Setup git hooks
70
67
  if (initGit) {
71
68
  await this.hookInstaller.install(targetDir);
72
69
  }
73
70
 
74
- // Step 6: Display onboarding instructions
71
+ // Step 5: Display onboarding instructions
75
72
  this.displayOnboarding();
76
73
  }
77
74
 
@@ -80,26 +77,25 @@ export class ProjectInitializer {
80
77
  */
81
78
  displayOnboarding() {
82
79
  console.log('\n' + '═'.repeat(70));
83
- console.log('šŸŽÆ CRITICAL: NEXT STEP FOR CLAUDE CODE');
80
+ console.log('šŸŽÆ PROJECT CREATED SUCCESSFULLY');
84
81
  console.log('═'.repeat(70));
85
82
  console.log('\nšŸ“– READ THIS FILE: .claude/POST-INSTALL.md');
86
- console.log('\n This file contains the COMPLETE 6-step setup workflow.');
87
- console.log(' Single clear path - no confusion or multiple options.\n');
88
- console.log('šŸš€ QUICK START (6 steps):');
89
- console.log(' 1. npm run plan:generate "description"');
90
- console.log(' 2. Claude creates PROJECT-PLAN.json');
91
- console.log(' 3. echo "plan-001-generated" > .claude/ACTIVE-PLAN');
92
- console.log(' 4. npm run plan:init');
93
- console.log(' 5. npm run task:start TASK-001');
94
- console.log(' 6. Work on task (9-step workflow in POST-INSTALL.md)');
83
+ console.log('\n Complete workflow documentation with examples.\n');
84
+ console.log('šŸš€ QUICK START:');
85
+ console.log(' 1. npx agentic15 auth');
86
+ console.log(' 2. npx agentic15 plan "Your project description"');
87
+ console.log(' 3. Tell Claude: "Create the project plan"');
88
+ console.log(' 4. npx agentic15 plan (locks the plan)');
89
+ console.log(' 5. npx agentic15 task next');
90
+ console.log(' 6. Tell Claude: "Write code for TASK-001"');
91
+ console.log(' 7. npx agentic15 commit');
95
92
  console.log('\nšŸ“‚ Your Workspace:');
96
- console.log(' ./Agent/ - Edit your source code here');
97
- console.log(' ./scripts/ - Edit your scripts here');
98
- console.log(' ./.claude/ - Framework files (DO NOT EDIT)');
99
- console.log('\nāš ļø Work on main branch only - NO feature branches');
100
- console.log('āš ļø Hooks enforce rules - violations will be BLOCKED');
93
+ console.log(' ./Agent/src/ - Your source code');
94
+ console.log(' ./Agent/tests/ - Your test files');
95
+ console.log(' ./test-site/ - Test site for visual verification');
96
+ console.log(' ./.claude/ - Framework files (auto-managed)');
101
97
  console.log('\n' + '═'.repeat(70));
102
- console.log('āœ… Setup complete! Read .claude/POST-INSTALL.md to continue.');
98
+ console.log('āœ… Setup complete! See .claude/POST-INSTALL.md for details.');
103
99
  console.log('═'.repeat(70) + '\n');
104
100
  }
105
101
  }
@@ -34,48 +34,52 @@ export class TaskIssueMapper {
34
34
  }
35
35
 
36
36
  /**
37
- * Generate GitHub issue body from task
37
+ * Generate GitHub issue body from task using issue template format
38
38
  *
39
39
  * @param {Object} task - Task object
40
40
  * @returns {string} Issue body in markdown format
41
41
  */
42
42
  static taskToIssueBody(task) {
43
- let body = `## Task: ${task.title}\n\n`;
43
+ // Follow .github/ISSUE_TEMPLATE/task.md structure
44
+ let body = `## Task Description\n\n`;
44
45
 
45
46
  if (task.description) {
46
47
  body += `${task.description}\n\n`;
47
48
  }
48
49
 
49
- if (task.phase) {
50
- body += `**Phase:** ${task.phase}\n`;
51
- }
52
-
53
50
  if (task.estimatedHours) {
54
- body += `**Estimated Hours:** ${task.estimatedHours}h\n`;
51
+ body += `**Estimated Hours:** ${task.estimatedHours}h\n\n`;
55
52
  }
56
53
 
54
+ body += `## Completion Criteria\n\n`;
57
55
  if (task.completionCriteria && task.completionCriteria.length > 0) {
58
- body += `\n### Completion Criteria\n\n`;
59
56
  task.completionCriteria.forEach(criteria => {
60
57
  body += `- [ ] ${criteria}\n`;
61
58
  });
59
+ } else {
60
+ body += `*No specific criteria defined*\n`;
62
61
  }
63
62
 
63
+ body += `\n## Dependencies\n\n`;
64
64
  if (task.dependencies && task.dependencies.length > 0) {
65
- body += `\n### Dependencies\n\n`;
66
65
  task.dependencies.forEach(dep => {
67
66
  body += `- ${dep}\n`;
68
67
  });
68
+ } else {
69
+ body += `*No dependencies*\n`;
69
70
  }
70
71
 
72
+ body += `\n## Phase\n\n`;
73
+ body += `${task.phase || 'implementation'}\n`;
74
+
71
75
  if (task.testCases && task.testCases.length > 0) {
72
- body += `\n### Test Cases\n\n`;
76
+ body += `\n## Test Cases\n\n`;
73
77
  task.testCases.forEach(test => {
74
78
  body += `- ${test}\n`;
75
79
  });
76
80
  }
77
81
 
78
- body += `\n---\n*Auto-created by Agentic15 Claude Zen*`;
82
+ body += `\n---\n*Auto-generated by Agentic15 Claude Zen*`;
79
83
 
80
84
  return body;
81
85
  }
@@ -28,7 +28,8 @@ const __dirname = dirname(__filename);
28
28
  */
29
29
  export class TemplateManager {
30
30
  constructor() {
31
- this.templatesDir = join(__dirname, '..', 'templates');
31
+ // From src/core/, go up two levels to package root, then into templates
32
+ this.templatesDir = join(__dirname, '..', '..', 'templates');
32
33
  this.distDir = join(__dirname, '.');
33
34
  }
34
35
 
@@ -0,0 +1,23 @@
1
+ ---
2
+ name: Task
3
+ about: Auto-generated task from Agentic15 plan
4
+ title: '[TASK-XXX] '
5
+ labels: 'task'
6
+ assignees: ''
7
+ ---
8
+
9
+ ## Task Description
10
+
11
+ <!-- Auto-generated from PROJECT-PLAN.json -->
12
+
13
+ ## Completion Criteria
14
+
15
+ <!-- Auto-populated from task definition -->
16
+
17
+ ## Dependencies
18
+
19
+ <!-- Auto-populated from task definition -->
20
+
21
+ ## Phase
22
+
23
+ <!-- Auto-populated from task definition -->
@@ -0,0 +1,23 @@
1
+ # Pull Request
2
+
3
+ ## Task
4
+
5
+ Closes #
6
+
7
+ ## Description
8
+
9
+ <!-- Auto-generated from task description -->
10
+
11
+ ## Changes
12
+
13
+ -
14
+
15
+ ## Testing
16
+
17
+ - [ ] Unit tests pass (`npm test`)
18
+ - [ ] Visual tests pass (if applicable) (`npx playwright test`)
19
+ - [ ] Code follows project conventions
20
+
21
+ ## Notes
22
+
23
+ <!-- Additional context or notes -->