proagents 1.6.5 → 1.6.7
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/.proagents/AI_INSTRUCTIONS.md +43 -0
- package/.proagents/active-features/_index.json +10 -62
- package/lib/commands/init.js +72 -0
- package/package.json +1 -1
- package/.proagents/active-features/feature-user-auth/dependencies.json +0 -81
- package/.proagents/active-features/feature-user-auth/files-modified.json +0 -126
- package/.proagents/active-features/feature-user-auth/status.json +0 -122
|
@@ -273,6 +273,49 @@ When the user types commands starting with `pa:`, recognize and execute them.
|
|
|
273
273
|
| `pa:help` | Show all available commands |
|
|
274
274
|
| `pa:status` | Show current progress |
|
|
275
275
|
|
|
276
|
+
**How to execute Initialization commands:**
|
|
277
|
+
|
|
278
|
+
For `pa:status` (or `pa:s`):
|
|
279
|
+
1. **Read the ACTUAL data** from `./.proagents/active-features/_index.json`
|
|
280
|
+
2. **Check if empty** - if `active_features`, `paused_features`, and `completed_features` are all empty arrays:
|
|
281
|
+
```
|
|
282
|
+
Project Status
|
|
283
|
+
══════════════
|
|
284
|
+
|
|
285
|
+
No features currently tracked.
|
|
286
|
+
|
|
287
|
+
Start a new feature with:
|
|
288
|
+
→ pa:feature-start "feature name"
|
|
289
|
+
|
|
290
|
+
Or quick bug fix:
|
|
291
|
+
→ pa:fix "bug description"
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
3. **If has features**, show real status:
|
|
295
|
+
```
|
|
296
|
+
Project Status
|
|
297
|
+
══════════════
|
|
298
|
+
|
|
299
|
+
Active Features: [count]
|
|
300
|
+
────────────────────────
|
|
301
|
+
• [feature-name] - [phase] ([progress]%)
|
|
302
|
+
Branch: [branch]
|
|
303
|
+
Last updated: [timestamp]
|
|
304
|
+
|
|
305
|
+
Paused Features: [count]
|
|
306
|
+
────────────────────────
|
|
307
|
+
• [feature-name] - Paused: [reason]
|
|
308
|
+
|
|
309
|
+
Completed Features: [count]
|
|
310
|
+
──────────────────────────
|
|
311
|
+
• [feature-name] - Completed [date]
|
|
312
|
+
|
|
313
|
+
Next Steps:
|
|
314
|
+
→ [suggested action based on current state]
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
4. **NEVER show example/template data** - only show what's actually in the JSON file
|
|
318
|
+
|
|
276
319
|
### Feature Development
|
|
277
320
|
| Command | Action |
|
|
278
321
|
|---------|--------|
|
|
@@ -1,74 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./schemas/index-schema.json",
|
|
3
3
|
"version": "1.0.0",
|
|
4
|
-
"last_updated":
|
|
4
|
+
"last_updated": null,
|
|
5
5
|
|
|
6
|
-
"active_features": [
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
"name": "User Authentication",
|
|
10
|
-
"description": "Add user authentication with OAuth support",
|
|
11
|
-
"current_phase": "implementation",
|
|
12
|
-
"phase_progress": 60,
|
|
13
|
-
"branch": "feature/user-auth",
|
|
14
|
-
"started": "2024-01-10T09:00:00Z",
|
|
15
|
-
"last_updated": "2024-01-15T10:30:00Z",
|
|
16
|
-
"estimated_completion": "2024-01-17T17:00:00Z",
|
|
17
|
-
"assignee": "developer-1",
|
|
18
|
-
"priority": "high",
|
|
19
|
-
"blockers": [],
|
|
20
|
-
"dependencies": [],
|
|
21
|
-
"files_modified_count": 12,
|
|
22
|
-
"checkpoints_completed": ["after_analysis", "after_requirements", "after_design"],
|
|
23
|
-
"checkpoints_pending": ["after_implementation", "before_deployment"]
|
|
24
|
-
}
|
|
25
|
-
],
|
|
26
|
-
|
|
27
|
-
"paused_features": [
|
|
28
|
-
{
|
|
29
|
-
"id": "feature-notifications",
|
|
30
|
-
"name": "Push Notifications",
|
|
31
|
-
"description": "Add push notification support",
|
|
32
|
-
"current_phase": "requirements",
|
|
33
|
-
"phase_progress": 30,
|
|
34
|
-
"branch": "feature/notifications",
|
|
35
|
-
"started": "2024-01-08T14:00:00Z",
|
|
36
|
-
"paused_at": "2024-01-12T11:00:00Z",
|
|
37
|
-
"pause_reason": "Waiting for user-auth to complete",
|
|
38
|
-
"assignee": "developer-2",
|
|
39
|
-
"priority": "medium",
|
|
40
|
-
"blocked_by": ["feature-user-auth"]
|
|
41
|
-
}
|
|
42
|
-
],
|
|
43
|
-
|
|
44
|
-
"completed_features": [
|
|
45
|
-
{
|
|
46
|
-
"id": "feature-dark-mode",
|
|
47
|
-
"name": "Dark Mode Support",
|
|
48
|
-
"completed_at": "2024-01-09T16:00:00Z",
|
|
49
|
-
"duration_hours": 18,
|
|
50
|
-
"merged_commit": "abc123def",
|
|
51
|
-
"pr_number": 42
|
|
52
|
-
}
|
|
53
|
-
],
|
|
6
|
+
"active_features": [],
|
|
7
|
+
"paused_features": [],
|
|
8
|
+
"completed_features": [],
|
|
54
9
|
|
|
55
10
|
"conflicts": {
|
|
56
11
|
"active": [],
|
|
57
|
-
"resolved": [
|
|
58
|
-
{
|
|
59
|
-
"features": ["feature-user-auth", "feature-dark-mode"],
|
|
60
|
-
"file": "src/styles/theme.ts",
|
|
61
|
-
"resolved_at": "2024-01-09T15:30:00Z",
|
|
62
|
-
"resolution": "merged"
|
|
63
|
-
}
|
|
64
|
-
]
|
|
12
|
+
"resolved": []
|
|
65
13
|
},
|
|
66
14
|
|
|
67
15
|
"statistics": {
|
|
68
|
-
"total_active":
|
|
69
|
-
"total_paused":
|
|
70
|
-
"total_completed":
|
|
71
|
-
"average_completion_days":
|
|
72
|
-
"conflict_rate": 0
|
|
16
|
+
"total_active": 0,
|
|
17
|
+
"total_paused": 0,
|
|
18
|
+
"total_completed": 0,
|
|
19
|
+
"average_completion_days": 0,
|
|
20
|
+
"conflict_rate": 0
|
|
73
21
|
}
|
|
74
22
|
}
|
package/lib/commands/init.js
CHANGED
|
@@ -595,6 +595,35 @@ function detectProjectType(targetDir) {
|
|
|
595
595
|
return detectedTypes;
|
|
596
596
|
}
|
|
597
597
|
|
|
598
|
+
/**
|
|
599
|
+
* Prompt user for .gitignore preference
|
|
600
|
+
*/
|
|
601
|
+
async function promptGitignoreChoice() {
|
|
602
|
+
const rl = createInterface({
|
|
603
|
+
input: process.stdin,
|
|
604
|
+
output: process.stdout
|
|
605
|
+
});
|
|
606
|
+
|
|
607
|
+
const question = (prompt) => new Promise(resolve => rl.question(prompt, resolve));
|
|
608
|
+
|
|
609
|
+
console.log(chalk.bold('\nGit Ignore Settings'));
|
|
610
|
+
console.log(chalk.gray('─'.repeat(40) + '\n'));
|
|
611
|
+
|
|
612
|
+
console.log(chalk.cyan('What to ignore in .gitignore?'));
|
|
613
|
+
console.log(chalk.white(' 1. Local data only') + chalk.green(' (recommended for teams)'));
|
|
614
|
+
console.log(chalk.gray(' Ignores: cache, learning, sessions, active-features'));
|
|
615
|
+
console.log(chalk.gray(' Shares: prompts, templates, config with team'));
|
|
616
|
+
console.log('');
|
|
617
|
+
console.log(chalk.white(' 2. Entire .proagents/ folder') + chalk.gray(' (solo developers)'));
|
|
618
|
+
console.log(chalk.gray(' Nothing shared with git'));
|
|
619
|
+
console.log('');
|
|
620
|
+
|
|
621
|
+
const choice = await question(chalk.yellow(' Choose (1 or 2, default=1): '));
|
|
622
|
+
rl.close();
|
|
623
|
+
|
|
624
|
+
return choice.trim() === '2' ? 'full' : 'local';
|
|
625
|
+
}
|
|
626
|
+
|
|
598
627
|
/**
|
|
599
628
|
* Interactive prompt for project configuration
|
|
600
629
|
*/
|
|
@@ -879,6 +908,49 @@ Generated by [ProAgents](https://github.com/prakashpro3/proAgents)
|
|
|
879
908
|
}
|
|
880
909
|
console.log(chalk.green('✓ Created docs/ folder structure'));
|
|
881
910
|
|
|
911
|
+
// Add .proagents/ to .gitignore - prompt user for preference
|
|
912
|
+
const gitignorePath = join(targetDir, '.gitignore');
|
|
913
|
+
const existingGitignore = existsSync(gitignorePath) ? readFileSync(gitignorePath, 'utf-8') : '';
|
|
914
|
+
|
|
915
|
+
if (!existingGitignore.includes('.proagents')) {
|
|
916
|
+
// Prompt user for gitignore preference
|
|
917
|
+
const gitignoreChoice = await promptGitignoreChoice();
|
|
918
|
+
|
|
919
|
+
let gitignoreEntries;
|
|
920
|
+
if (gitignoreChoice === 'full') {
|
|
921
|
+
// Ignore entire .proagents/ folder
|
|
922
|
+
gitignoreEntries = [
|
|
923
|
+
'# ProAgents - Entire folder ignored (not shared with team)',
|
|
924
|
+
'.proagents/',
|
|
925
|
+
''
|
|
926
|
+
].join('\n');
|
|
927
|
+
} else {
|
|
928
|
+
// Default: Ignore only local data
|
|
929
|
+
gitignoreEntries = [
|
|
930
|
+
'# ProAgents - Local data only (workflow config shared with team)',
|
|
931
|
+
'.proagents/cache/',
|
|
932
|
+
'.proagents/.learning/',
|
|
933
|
+
'.proagents/sessions/',
|
|
934
|
+
'.proagents/active-features/',
|
|
935
|
+
'.proagents/backups/',
|
|
936
|
+
'.proagents/*.log',
|
|
937
|
+
''
|
|
938
|
+
].join('\n');
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
if (existingGitignore) {
|
|
942
|
+
writeFileSync(gitignorePath, existingGitignore + '\n' + gitignoreEntries);
|
|
943
|
+
} else {
|
|
944
|
+
writeFileSync(gitignorePath, gitignoreEntries);
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
if (gitignoreChoice === 'full') {
|
|
948
|
+
console.log(chalk.green('✓ Added .proagents/ to .gitignore (entire folder)'));
|
|
949
|
+
} else {
|
|
950
|
+
console.log(chalk.green('✓ Added .proagents/ local data to .gitignore'));
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
|
|
882
954
|
// Create placeholder CHANGELOG.md if not exists
|
|
883
955
|
const changelogPath = join(targetDir, 'CHANGELOG.md');
|
|
884
956
|
if (!existsSync(changelogPath)) {
|
package/package.json
CHANGED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "../schemas/dependencies-schema.json",
|
|
3
|
-
"feature_id": "feature-user-auth",
|
|
4
|
-
"updated_at": "2024-01-15T10:30:00Z",
|
|
5
|
-
|
|
6
|
-
"depends_on": [],
|
|
7
|
-
|
|
8
|
-
"blocks": [
|
|
9
|
-
{
|
|
10
|
-
"feature_id": "feature-notifications",
|
|
11
|
-
"reason": "Notifications require authenticated user context",
|
|
12
|
-
"required_phase": "implementation_complete",
|
|
13
|
-
"blocking_since": "2024-01-12T11:00:00Z"
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
"feature_id": "feature-user-preferences",
|
|
17
|
-
"reason": "Preferences need user authentication",
|
|
18
|
-
"required_phase": "testing_complete"
|
|
19
|
-
}
|
|
20
|
-
],
|
|
21
|
-
|
|
22
|
-
"shared_resources": [
|
|
23
|
-
{
|
|
24
|
-
"resource": "prisma/schema.prisma",
|
|
25
|
-
"shared_with": ["feature-user-preferences"],
|
|
26
|
-
"conflict_risk": "medium",
|
|
27
|
-
"coordination_required": true
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"resource": "src/middleware.ts",
|
|
31
|
-
"shared_with": [],
|
|
32
|
-
"conflict_risk": "low"
|
|
33
|
-
}
|
|
34
|
-
],
|
|
35
|
-
|
|
36
|
-
"external_dependencies": {
|
|
37
|
-
"packages": [
|
|
38
|
-
{
|
|
39
|
-
"name": "next-auth",
|
|
40
|
-
"version": "^4.24.0",
|
|
41
|
-
"added": true,
|
|
42
|
-
"reason": "Authentication framework"
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
"name": "@auth/prisma-adapter",
|
|
46
|
-
"version": "^1.0.0",
|
|
47
|
-
"added": true,
|
|
48
|
-
"reason": "Prisma adapter for NextAuth"
|
|
49
|
-
}
|
|
50
|
-
],
|
|
51
|
-
"services": [
|
|
52
|
-
{
|
|
53
|
-
"name": "Google OAuth",
|
|
54
|
-
"type": "oauth_provider",
|
|
55
|
-
"required": true,
|
|
56
|
-
"configured": true
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
"name": "GitHub OAuth",
|
|
60
|
-
"type": "oauth_provider",
|
|
61
|
-
"required": true,
|
|
62
|
-
"configured": true
|
|
63
|
-
}
|
|
64
|
-
],
|
|
65
|
-
"environment_variables": [
|
|
66
|
-
"NEXTAUTH_SECRET",
|
|
67
|
-
"NEXTAUTH_URL",
|
|
68
|
-
"GOOGLE_CLIENT_ID",
|
|
69
|
-
"GOOGLE_CLIENT_SECRET",
|
|
70
|
-
"GITHUB_CLIENT_ID",
|
|
71
|
-
"GITHUB_CLIENT_SECRET"
|
|
72
|
-
]
|
|
73
|
-
},
|
|
74
|
-
|
|
75
|
-
"merge_requirements": {
|
|
76
|
-
"order": 1,
|
|
77
|
-
"can_merge_independently": true,
|
|
78
|
-
"requires_features": [],
|
|
79
|
-
"required_before": ["feature-notifications", "feature-user-preferences"]
|
|
80
|
-
}
|
|
81
|
-
}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "../schemas/files-schema.json",
|
|
3
|
-
"feature_id": "feature-user-auth",
|
|
4
|
-
"updated_at": "2024-01-15T10:30:00Z",
|
|
5
|
-
|
|
6
|
-
"summary": {
|
|
7
|
-
"total_files": 12,
|
|
8
|
-
"new_files": 8,
|
|
9
|
-
"modified_files": 4,
|
|
10
|
-
"deleted_files": 0,
|
|
11
|
-
"lines_added": 845,
|
|
12
|
-
"lines_removed": 23
|
|
13
|
-
},
|
|
14
|
-
|
|
15
|
-
"files": [
|
|
16
|
-
{
|
|
17
|
-
"path": "src/lib/auth.ts",
|
|
18
|
-
"status": "new",
|
|
19
|
-
"lines_added": 120,
|
|
20
|
-
"lines_removed": 0,
|
|
21
|
-
"last_modified": "2024-01-14T16:30:00Z",
|
|
22
|
-
"purpose": "Core authentication utilities"
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
"path": "src/app/api/auth/[...nextauth]/route.ts",
|
|
26
|
-
"status": "new",
|
|
27
|
-
"lines_added": 85,
|
|
28
|
-
"lines_removed": 0,
|
|
29
|
-
"last_modified": "2024-01-14T14:00:00Z",
|
|
30
|
-
"purpose": "NextAuth API route handler"
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
"path": "src/components/auth/LoginButton.tsx",
|
|
34
|
-
"status": "new",
|
|
35
|
-
"lines_added": 45,
|
|
36
|
-
"lines_removed": 0,
|
|
37
|
-
"last_modified": "2024-01-15T09:00:00Z",
|
|
38
|
-
"purpose": "Login button component"
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"path": "src/components/auth/LogoutButton.tsx",
|
|
42
|
-
"status": "new",
|
|
43
|
-
"lines_added": 35,
|
|
44
|
-
"lines_removed": 0,
|
|
45
|
-
"last_modified": "2024-01-15T09:15:00Z",
|
|
46
|
-
"purpose": "Logout button component"
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
"path": "src/components/auth/UserMenu.tsx",
|
|
50
|
-
"status": "new",
|
|
51
|
-
"lines_added": 78,
|
|
52
|
-
"lines_removed": 0,
|
|
53
|
-
"last_modified": "2024-01-15T10:00:00Z",
|
|
54
|
-
"purpose": "User dropdown menu"
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
"path": "src/hooks/useAuth.ts",
|
|
58
|
-
"status": "new",
|
|
59
|
-
"lines_added": 52,
|
|
60
|
-
"lines_removed": 0,
|
|
61
|
-
"last_modified": "2024-01-14T15:00:00Z",
|
|
62
|
-
"purpose": "Authentication hook"
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
"path": "src/middleware.ts",
|
|
66
|
-
"status": "modified",
|
|
67
|
-
"lines_added": 35,
|
|
68
|
-
"lines_removed": 5,
|
|
69
|
-
"last_modified": "2024-01-14T17:00:00Z",
|
|
70
|
-
"purpose": "Added auth middleware"
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"path": "src/types/auth.ts",
|
|
74
|
-
"status": "new",
|
|
75
|
-
"lines_added": 28,
|
|
76
|
-
"lines_removed": 0,
|
|
77
|
-
"last_modified": "2024-01-14T11:00:00Z",
|
|
78
|
-
"purpose": "Authentication type definitions"
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
"path": "src/app/layout.tsx",
|
|
82
|
-
"status": "modified",
|
|
83
|
-
"lines_added": 15,
|
|
84
|
-
"lines_removed": 8,
|
|
85
|
-
"last_modified": "2024-01-15T10:30:00Z",
|
|
86
|
-
"purpose": "Added SessionProvider wrapper"
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
"path": "prisma/schema.prisma",
|
|
90
|
-
"status": "modified",
|
|
91
|
-
"lines_added": 42,
|
|
92
|
-
"lines_removed": 0,
|
|
93
|
-
"last_modified": "2024-01-13T14:00:00Z",
|
|
94
|
-
"purpose": "Added User and Session models"
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
"path": ".env.example",
|
|
98
|
-
"status": "modified",
|
|
99
|
-
"lines_added": 8,
|
|
100
|
-
"lines_removed": 0,
|
|
101
|
-
"last_modified": "2024-01-13T10:00:00Z",
|
|
102
|
-
"purpose": "Added auth environment variables"
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
"path": "src/tests/auth.test.ts",
|
|
106
|
-
"status": "new",
|
|
107
|
-
"lines_added": 302,
|
|
108
|
-
"lines_removed": 0,
|
|
109
|
-
"last_modified": "2024-01-15T10:15:00Z",
|
|
110
|
-
"purpose": "Authentication test suite"
|
|
111
|
-
}
|
|
112
|
-
],
|
|
113
|
-
|
|
114
|
-
"conflicts": {
|
|
115
|
-
"potential": [],
|
|
116
|
-
"detected": [],
|
|
117
|
-
"resolved": []
|
|
118
|
-
},
|
|
119
|
-
|
|
120
|
-
"impact_analysis": {
|
|
121
|
-
"affected_modules": ["auth", "middleware", "database"],
|
|
122
|
-
"breaking_changes": false,
|
|
123
|
-
"requires_migration": true,
|
|
124
|
-
"security_sensitive": true
|
|
125
|
-
}
|
|
126
|
-
}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "../schemas/feature-schema.json",
|
|
3
|
-
"id": "feature-user-auth",
|
|
4
|
-
"name": "User Authentication",
|
|
5
|
-
"description": "Add user authentication with OAuth support for Google and GitHub",
|
|
6
|
-
"created_at": "2024-01-10T09:00:00Z",
|
|
7
|
-
"updated_at": "2024-01-15T10:30:00Z",
|
|
8
|
-
|
|
9
|
-
"workflow": {
|
|
10
|
-
"mode": "full",
|
|
11
|
-
"entry_point": "feature_start",
|
|
12
|
-
"current_phase": "implementation",
|
|
13
|
-
"phase_progress": 60
|
|
14
|
-
},
|
|
15
|
-
|
|
16
|
-
"phases": {
|
|
17
|
-
"init": {
|
|
18
|
-
"status": "completed",
|
|
19
|
-
"started_at": "2024-01-10T09:00:00Z",
|
|
20
|
-
"completed_at": "2024-01-10T09:15:00Z",
|
|
21
|
-
"duration_minutes": 15
|
|
22
|
-
},
|
|
23
|
-
"analysis": {
|
|
24
|
-
"status": "completed",
|
|
25
|
-
"started_at": "2024-01-10T09:15:00Z",
|
|
26
|
-
"completed_at": "2024-01-10T10:00:00Z",
|
|
27
|
-
"duration_minutes": 45,
|
|
28
|
-
"artifacts": ["analysis-report.md"]
|
|
29
|
-
},
|
|
30
|
-
"requirements": {
|
|
31
|
-
"status": "completed",
|
|
32
|
-
"started_at": "2024-01-10T10:00:00Z",
|
|
33
|
-
"completed_at": "2024-01-10T11:30:00Z",
|
|
34
|
-
"duration_minutes": 90,
|
|
35
|
-
"artifacts": ["requirements.md", "user-stories.md"]
|
|
36
|
-
},
|
|
37
|
-
"design": {
|
|
38
|
-
"status": "completed",
|
|
39
|
-
"started_at": "2024-01-10T13:00:00Z",
|
|
40
|
-
"completed_at": "2024-01-10T15:00:00Z",
|
|
41
|
-
"duration_minutes": 120,
|
|
42
|
-
"artifacts": ["ui-specification.md", "component-designs.md"]
|
|
43
|
-
},
|
|
44
|
-
"planning": {
|
|
45
|
-
"status": "completed",
|
|
46
|
-
"started_at": "2024-01-10T15:00:00Z",
|
|
47
|
-
"completed_at": "2024-01-10T16:00:00Z",
|
|
48
|
-
"duration_minutes": 60,
|
|
49
|
-
"artifacts": ["implementation-plan.md"]
|
|
50
|
-
},
|
|
51
|
-
"implementation": {
|
|
52
|
-
"status": "in_progress",
|
|
53
|
-
"started_at": "2024-01-11T09:00:00Z",
|
|
54
|
-
"progress": 60,
|
|
55
|
-
"tasks_completed": 6,
|
|
56
|
-
"tasks_total": 10
|
|
57
|
-
},
|
|
58
|
-
"testing": {
|
|
59
|
-
"status": "pending"
|
|
60
|
-
},
|
|
61
|
-
"review": {
|
|
62
|
-
"status": "pending"
|
|
63
|
-
},
|
|
64
|
-
"documentation": {
|
|
65
|
-
"status": "pending"
|
|
66
|
-
},
|
|
67
|
-
"deployment": {
|
|
68
|
-
"status": "pending"
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
|
-
|
|
72
|
-
"checkpoints": {
|
|
73
|
-
"after_analysis": {
|
|
74
|
-
"triggered": true,
|
|
75
|
-
"approved": true,
|
|
76
|
-
"approved_by": "@tech-lead",
|
|
77
|
-
"approved_at": "2024-01-10T10:05:00Z"
|
|
78
|
-
},
|
|
79
|
-
"after_requirements": {
|
|
80
|
-
"triggered": true,
|
|
81
|
-
"approved": true,
|
|
82
|
-
"approved_by": "@product-manager",
|
|
83
|
-
"approved_at": "2024-01-10T11:45:00Z"
|
|
84
|
-
},
|
|
85
|
-
"after_design": {
|
|
86
|
-
"triggered": true,
|
|
87
|
-
"approved": true,
|
|
88
|
-
"approved_by": "@tech-lead",
|
|
89
|
-
"approved_at": "2024-01-10T15:15:00Z"
|
|
90
|
-
},
|
|
91
|
-
"after_implementation": {
|
|
92
|
-
"triggered": false
|
|
93
|
-
},
|
|
94
|
-
"before_deployment": {
|
|
95
|
-
"triggered": false
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
|
|
99
|
-
"git": {
|
|
100
|
-
"branch": "feature/user-auth",
|
|
101
|
-
"base_branch": "develop",
|
|
102
|
-
"commits": 12,
|
|
103
|
-
"last_commit": "abc123def",
|
|
104
|
-
"pr_number": null,
|
|
105
|
-
"pr_status": null
|
|
106
|
-
},
|
|
107
|
-
|
|
108
|
-
"assignees": {
|
|
109
|
-
"primary": "developer-1",
|
|
110
|
-
"reviewers": ["tech-lead", "developer-2"]
|
|
111
|
-
},
|
|
112
|
-
|
|
113
|
-
"context": {
|
|
114
|
-
"key_decisions": [
|
|
115
|
-
"Using NextAuth.js for authentication",
|
|
116
|
-
"JWT tokens stored in httpOnly cookies",
|
|
117
|
-
"Refresh token rotation enabled"
|
|
118
|
-
],
|
|
119
|
-
"open_questions": [],
|
|
120
|
-
"blockers": []
|
|
121
|
-
}
|
|
122
|
-
}
|