s9n-devops-agent 1.6.2 → 1.7.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/docs/AUTOMATED_TESTING_STRATEGY.md +316 -0
- package/docs/branch-management.md +101 -0
- package/package.json +1 -1
- package/src/branch-config-manager.js +544 -0
- package/src/enhanced-close-session.js +492 -0
- package/src/orphan-cleaner.js +538 -0
- package/src/weekly-consolidator.js +403 -0
- package/start-devops-session.sh +1 -1
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
# Automated Testing Strategy for Branch Management System
|
|
2
|
+
|
|
3
|
+
**Date:** October 10, 2025
|
|
4
|
+
|
|
5
|
+
This document outlines the comprehensive automated testing strategy for the DevOps Agent's branch management system. The strategy addresses the unique challenges of testing git operations, multi-session scenarios, and complex branching workflows.
|
|
6
|
+
|
|
7
|
+
## 1. Testing Challenges
|
|
8
|
+
|
|
9
|
+
Testing a branch management system presents several unique challenges that our framework addresses:
|
|
10
|
+
|
|
11
|
+
### 1.1 Git State Management
|
|
12
|
+
- **Challenge**: Each test needs a clean git repository state
|
|
13
|
+
- **Solution**: Isolated test repositories created in temporary directories for each test case
|
|
14
|
+
|
|
15
|
+
### 1.2 Multi-Session Simulation
|
|
16
|
+
- **Challenge**: Testing scenarios with multiple concurrent sessions
|
|
17
|
+
- **Solution**: Mock session creation with realistic branch structures and commit histories
|
|
18
|
+
|
|
19
|
+
### 1.3 Time-Based Logic
|
|
20
|
+
- **Challenge**: Testing orphaned session detection and day rollovers
|
|
21
|
+
- **Solution**: Controlled date manipulation and mock session aging
|
|
22
|
+
|
|
23
|
+
### 1.4 File System Operations
|
|
24
|
+
- **Challenge**: Testing worktree creation, cleanup, and file coordination
|
|
25
|
+
- **Solution**: Temporary directories with full cleanup after each test
|
|
26
|
+
|
|
27
|
+
## 2. Testing Framework Architecture
|
|
28
|
+
|
|
29
|
+
### 2.1 Core Components
|
|
30
|
+
|
|
31
|
+
| Component | Purpose | Key Features |
|
|
32
|
+
|-----------|---------|--------------|
|
|
33
|
+
| **BranchManagementTestFramework** | Base testing infrastructure | Isolated repos, git operations, assertions |
|
|
34
|
+
| **Test Suites** | Specific functionality testing | Session closure, weekly consolidation, orphan cleanup |
|
|
35
|
+
| **Test Runner** | Orchestration and reporting | Parallel execution, comprehensive reporting |
|
|
36
|
+
| **Mock Utilities** | Simulation helpers | Session creation, branch aging, configuration |
|
|
37
|
+
|
|
38
|
+
### 2.2 Test Isolation Strategy
|
|
39
|
+
|
|
40
|
+
Each test runs in complete isolation:
|
|
41
|
+
|
|
42
|
+
```javascript
|
|
43
|
+
// Test lifecycle
|
|
44
|
+
1. Create temporary git repository
|
|
45
|
+
2. Copy source files to test repo
|
|
46
|
+
3. Initialize git with test configuration
|
|
47
|
+
4. Execute test logic
|
|
48
|
+
5. Validate results with assertions
|
|
49
|
+
6. Clean up temporary repository
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
This ensures no test can affect another and provides a clean slate for each scenario.
|
|
53
|
+
|
|
54
|
+
## 3. Test Categories
|
|
55
|
+
|
|
56
|
+
### 3.1 Unit Tests
|
|
57
|
+
Focus on individual functions and methods within each script.
|
|
58
|
+
|
|
59
|
+
**Coverage Areas:**
|
|
60
|
+
- Branch name generation and validation
|
|
61
|
+
- Configuration parsing and validation
|
|
62
|
+
- Date calculations and formatting
|
|
63
|
+
- Git command execution and error handling
|
|
64
|
+
|
|
65
|
+
**Example:**
|
|
66
|
+
```javascript
|
|
67
|
+
// Test branch name generation
|
|
68
|
+
const consolidator = new WeeklyConsolidator();
|
|
69
|
+
const dailyBranches = ['daily/2025-10-01', 'daily/2025-10-02'];
|
|
70
|
+
const weeklyName = consolidator.generateWeeklyBranchName(dailyBranches);
|
|
71
|
+
expect(weeklyName).toBe('weekly/2025-10-01_to_2025-10-02');
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 3.2 Integration Tests
|
|
75
|
+
Test interactions between different components of the system.
|
|
76
|
+
|
|
77
|
+
**Key Scenarios:**
|
|
78
|
+
- Session closure triggering branch merges
|
|
79
|
+
- Configuration changes affecting behavior
|
|
80
|
+
- Error propagation and recovery
|
|
81
|
+
- File coordination between components
|
|
82
|
+
|
|
83
|
+
### 3.3 End-to-End Tests
|
|
84
|
+
Simulate complete user workflows from start to finish.
|
|
85
|
+
|
|
86
|
+
**Comprehensive Scenarios:**
|
|
87
|
+
- Full week of development with multiple sessions
|
|
88
|
+
- Day rollover with active sessions
|
|
89
|
+
- Weekly consolidation with dual merge
|
|
90
|
+
- Orphaned session cleanup after threshold period
|
|
91
|
+
|
|
92
|
+
## 4. Test Data Management
|
|
93
|
+
|
|
94
|
+
### 4.1 Mock Session Creation
|
|
95
|
+
The framework provides utilities to create realistic test sessions:
|
|
96
|
+
|
|
97
|
+
```javascript
|
|
98
|
+
// Create a session with commits and branch structure
|
|
99
|
+
const session = framework.createMockSession('test-session', 'feature-work');
|
|
100
|
+
|
|
101
|
+
// Create an aged session for orphan testing
|
|
102
|
+
const oldSession = framework.createOldSession('old-session', 10); // 10 days old
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 4.2 Configuration Testing
|
|
106
|
+
Multiple configuration scenarios are tested:
|
|
107
|
+
|
|
108
|
+
```javascript
|
|
109
|
+
// Test with dual merge enabled
|
|
110
|
+
framework.createProjectSettings({
|
|
111
|
+
branchManagement: {
|
|
112
|
+
enableDualMerge: true,
|
|
113
|
+
defaultMergeTarget: 'main',
|
|
114
|
+
mergeStrategy: 'hierarchical-first'
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 4.3 Branch Structure Simulation
|
|
120
|
+
The framework can create complex branch structures:
|
|
121
|
+
|
|
122
|
+
```javascript
|
|
123
|
+
// Create daily branches for testing weekly consolidation
|
|
124
|
+
const dates = ['2025-10-01', '2025-10-02', '2025-10-03'];
|
|
125
|
+
const dailyBranches = framework.createDailyBranches(dates);
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## 5. Assertion Framework
|
|
129
|
+
|
|
130
|
+
### 5.1 Git-Specific Assertions
|
|
131
|
+
Custom assertions for git operations:
|
|
132
|
+
|
|
133
|
+
```javascript
|
|
134
|
+
// Branch existence checks
|
|
135
|
+
framework.assertBranchExists('weekly/2025-10-01_to_2025-10-07');
|
|
136
|
+
framework.assertBranchNotExists('session/agent/old-task');
|
|
137
|
+
|
|
138
|
+
// File system checks
|
|
139
|
+
framework.assertFileExists('local_deploy/session-locks/session-id.lock');
|
|
140
|
+
framework.assertFileNotExists('.devops-commit-session-id.msg');
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 5.2 State Validation
|
|
144
|
+
Comprehensive state validation after operations:
|
|
145
|
+
|
|
146
|
+
```javascript
|
|
147
|
+
// Verify complete session cleanup
|
|
148
|
+
const verifySessionCleanup = (sessionData) => {
|
|
149
|
+
framework.assertBranchNotExists(sessionData.branchName);
|
|
150
|
+
framework.assertFileNotExists(`local_deploy/session-locks/${sessionData.sessionId}.lock`);
|
|
151
|
+
framework.assertFileNotExists(`.devops-commit-${sessionData.sessionId}.msg`);
|
|
152
|
+
};
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## 6. Error Handling and Recovery Testing
|
|
156
|
+
|
|
157
|
+
### 6.1 Merge Conflict Simulation
|
|
158
|
+
Tests include scenarios with merge conflicts:
|
|
159
|
+
|
|
160
|
+
```javascript
|
|
161
|
+
// Create conflicting content in different branches
|
|
162
|
+
execSync(`git checkout ${sessionBranch}`, { stdio: 'ignore' });
|
|
163
|
+
fs.writeFileSync('conflict.txt', 'Session content\n');
|
|
164
|
+
execSync('git add conflict.txt && git commit -m "Session changes"', { stdio: 'ignore' });
|
|
165
|
+
|
|
166
|
+
execSync('git checkout main', { stdio: 'ignore' });
|
|
167
|
+
fs.writeFileSync('conflict.txt', 'Main content\n');
|
|
168
|
+
execSync('git add conflict.txt && git commit -m "Main changes"', { stdio: 'ignore' });
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### 6.2 Partial Failure Scenarios
|
|
172
|
+
Tests verify graceful handling of partial failures:
|
|
173
|
+
|
|
174
|
+
- One merge succeeds, another fails in dual merge
|
|
175
|
+
- Some daily branches merge successfully, others conflict
|
|
176
|
+
- Network failures during remote operations
|
|
177
|
+
|
|
178
|
+
## 7. Performance and Scalability Testing
|
|
179
|
+
|
|
180
|
+
### 7.1 Large Repository Simulation
|
|
181
|
+
Tests with many branches and sessions:
|
|
182
|
+
|
|
183
|
+
```javascript
|
|
184
|
+
// Create 50 daily branches for stress testing
|
|
185
|
+
const manyDates = Array.from({length: 50}, (_, i) => {
|
|
186
|
+
const date = new Date();
|
|
187
|
+
date.setDate(date.getDate() - i);
|
|
188
|
+
return date.toISOString().split('T')[0];
|
|
189
|
+
});
|
|
190
|
+
framework.createDailyBranches(manyDates);
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### 7.2 Concurrent Operation Testing
|
|
194
|
+
Simulate multiple agents working simultaneously:
|
|
195
|
+
|
|
196
|
+
```javascript
|
|
197
|
+
// Create multiple sessions with overlapping timeframes
|
|
198
|
+
const sessions = [
|
|
199
|
+
framework.createMockSession('agent1-session', 'feature-a', 'agent1'),
|
|
200
|
+
framework.createMockSession('agent2-session', 'feature-b', 'agent2'),
|
|
201
|
+
framework.createMockSession('agent3-session', 'feature-c', 'agent3')
|
|
202
|
+
];
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## 8. Continuous Integration Integration
|
|
206
|
+
|
|
207
|
+
### 8.1 GitHub Actions Workflow
|
|
208
|
+
The test suite integrates with CI/CD:
|
|
209
|
+
|
|
210
|
+
```yaml
|
|
211
|
+
name: Branch Management Tests
|
|
212
|
+
on: [push, pull_request]
|
|
213
|
+
jobs:
|
|
214
|
+
test:
|
|
215
|
+
runs-on: ubuntu-latest
|
|
216
|
+
steps:
|
|
217
|
+
- uses: actions/checkout@v3
|
|
218
|
+
- uses: actions/setup-node@v3
|
|
219
|
+
with:
|
|
220
|
+
node-version: '18'
|
|
221
|
+
- run: npm install
|
|
222
|
+
- run: node test_cases/branch-management/run-all-tests.js
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### 8.2 Test Reporting
|
|
226
|
+
Comprehensive test reports are generated:
|
|
227
|
+
|
|
228
|
+
- **Summary**: Pass/fail counts and duration
|
|
229
|
+
- **Details**: Individual test results with error messages
|
|
230
|
+
- **Coverage**: Code coverage metrics for each component
|
|
231
|
+
- **Performance**: Execution time trends over commits
|
|
232
|
+
|
|
233
|
+
## 9. Running the Tests
|
|
234
|
+
|
|
235
|
+
### 9.1 Command Line Interface
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
# Run all test suites
|
|
239
|
+
node test_cases/branch-management/run-all-tests.js
|
|
240
|
+
|
|
241
|
+
# Run specific test suite
|
|
242
|
+
node test_cases/branch-management/run-all-tests.js --suite=session-closure
|
|
243
|
+
|
|
244
|
+
# Run with verbose output
|
|
245
|
+
node test_cases/branch-management/run-all-tests.js --verbose
|
|
246
|
+
|
|
247
|
+
# Run suites in parallel (experimental)
|
|
248
|
+
node test_cases/branch-management/run-all-tests.js --parallel
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### 9.2 Individual Test Suites
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
# Session closure tests
|
|
255
|
+
node test_cases/branch-management/session-closure.test.js
|
|
256
|
+
|
|
257
|
+
# Weekly consolidation tests
|
|
258
|
+
node test_cases/branch-management/weekly-consolidation.test.js
|
|
259
|
+
|
|
260
|
+
# Orphan cleanup tests
|
|
261
|
+
node test_cases/branch-management/orphan-cleanup.test.js
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
## 10. Test Maintenance
|
|
265
|
+
|
|
266
|
+
### 10.1 Adding New Tests
|
|
267
|
+
When adding new functionality:
|
|
268
|
+
|
|
269
|
+
1. **Create test cases** in the appropriate test suite
|
|
270
|
+
2. **Add mock data** generation if needed
|
|
271
|
+
3. **Update assertions** for new validation requirements
|
|
272
|
+
4. **Document test scenarios** in this strategy document
|
|
273
|
+
|
|
274
|
+
### 10.2 Test Data Evolution
|
|
275
|
+
As the system evolves:
|
|
276
|
+
|
|
277
|
+
- **Update mock session structures** to match new session data formats
|
|
278
|
+
- **Extend configuration options** in test settings
|
|
279
|
+
- **Add new assertion methods** for new validation needs
|
|
280
|
+
- **Maintain backward compatibility** in test data formats
|
|
281
|
+
|
|
282
|
+
## 11. Benefits of This Testing Strategy
|
|
283
|
+
|
|
284
|
+
### 11.1 Comprehensive Coverage
|
|
285
|
+
- **All major workflows** are tested end-to-end
|
|
286
|
+
- **Edge cases and error conditions** are thoroughly covered
|
|
287
|
+
- **Configuration variations** are tested systematically
|
|
288
|
+
- **Performance characteristics** are validated
|
|
289
|
+
|
|
290
|
+
### 11.2 Reliable and Repeatable
|
|
291
|
+
- **Isolated test environments** prevent interference
|
|
292
|
+
- **Deterministic test data** ensures consistent results
|
|
293
|
+
- **Comprehensive cleanup** prevents test pollution
|
|
294
|
+
- **Parallel execution** reduces testing time
|
|
295
|
+
|
|
296
|
+
### 11.3 Developer Friendly
|
|
297
|
+
- **Clear test organization** makes it easy to find relevant tests
|
|
298
|
+
- **Detailed error reporting** helps with debugging
|
|
299
|
+
- **Fast feedback loops** enable rapid development
|
|
300
|
+
- **Easy test addition** supports continuous improvement
|
|
301
|
+
|
|
302
|
+
## 12. Future Enhancements
|
|
303
|
+
|
|
304
|
+
### 12.1 Advanced Scenarios
|
|
305
|
+
- **Multi-repository testing** for distributed teams
|
|
306
|
+
- **Network partition simulation** for remote operation testing
|
|
307
|
+
- **Large-scale performance testing** with thousands of branches
|
|
308
|
+
- **Real-time collaboration testing** with multiple concurrent agents
|
|
309
|
+
|
|
310
|
+
### 12.2 Enhanced Tooling
|
|
311
|
+
- **Visual test reporting** with branch diagrams
|
|
312
|
+
- **Interactive test debugging** with step-through capabilities
|
|
313
|
+
- **Automated test generation** from user scenarios
|
|
314
|
+
- **Performance regression detection** with historical baselines
|
|
315
|
+
|
|
316
|
+
This comprehensive testing strategy ensures the branch management system is robust, reliable, and ready for production use across diverse development environments and workflows.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# DevOps Agent: Branch Management System
|
|
2
|
+
|
|
3
|
+
**Author:** Manus AI
|
|
4
|
+
**Date:** October 10, 2025
|
|
5
|
+
|
|
6
|
+
This document provides comprehensive documentation for the enhanced branch management system in the DevOps Agent. It covers the architecture, configuration, and usage of the new features.
|
|
7
|
+
|
|
8
|
+
## 1. Introduction
|
|
9
|
+
|
|
10
|
+
The branch management system is designed to automate the lifecycle of branches, from individual work sessions to weekly consolidations. It prevents the proliferation of branches, ensures a clean and organized repository, and provides a clear history of all work done.
|
|
11
|
+
|
|
12
|
+
## 2. Branching Architecture
|
|
13
|
+
|
|
14
|
+
The system uses a hierarchical branching model:
|
|
15
|
+
|
|
16
|
+
- **Session Branches:** `session/<agent-name>/<task-id>`
|
|
17
|
+
- Created for each work session.
|
|
18
|
+
- Short-lived and merged upon session closure.
|
|
19
|
+
- **Daily Branches:** `daily/<YYYY-MM-DD>`
|
|
20
|
+
- Consolidate work from multiple sessions for a single day.
|
|
21
|
+
- Act as the default merge target if no other is specified.
|
|
22
|
+
- **Weekly Branches:** `weekly/<YYYY-MM-DD_to_YYYY-MM-DD>`
|
|
23
|
+
- Consolidate daily branches from the past week.
|
|
24
|
+
- Provide a stable weekly snapshot of work.
|
|
25
|
+
- **Target Branch:** (e.g., `main`, `develop`)
|
|
26
|
+
- The primary line of development, configured by the user.
|
|
27
|
+
|
|
28
|
+
## 3. Configuration
|
|
29
|
+
|
|
30
|
+
All branch management settings are stored in `local_deploy/project-settings.json`. You can manage these settings using the `branch-config-manager.js` script.
|
|
31
|
+
|
|
32
|
+
### 3.1 Configuration Options
|
|
33
|
+
|
|
34
|
+
| Setting | Description |
|
|
35
|
+
| ------------------------------------- | --------------------------------------------------------------------------- |
|
|
36
|
+
| `defaultMergeTarget` | The primary branch for merges (e.g., `main`). |
|
|
37
|
+
| `enableDualMerge` | If `true`, merges to both the daily and target branches. |
|
|
38
|
+
| `enableWeeklyConsolidation` | If `true`, enables automated weekly rollup of daily branches. |
|
|
39
|
+
| `orphanSessionThresholdDays` | The number of days of inactivity before a session is considered orphaned. |
|
|
40
|
+
| `mergeStrategy` | The order for dual merges (`hierarchical-first`, `target-first`, `parallel`). |
|
|
41
|
+
| `autoCleanupOrphans` | If `true`, automatically cleans up orphaned sessions without prompting. |
|
|
42
|
+
| `weeklyCleanupDay` | The day of the week to run the weekly consolidation (`sunday`, `monday`, etc.). |
|
|
43
|
+
| `retainWeeklyBranches` | The number of weekly branches to keep before cleaning up old ones. |
|
|
44
|
+
|
|
45
|
+
### 3.2 Managing Configuration
|
|
46
|
+
|
|
47
|
+
You can use the `branch-config-manager.js` script to manage these settings:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Display current settings
|
|
51
|
+
node src/branch-config-manager.js show
|
|
52
|
+
|
|
53
|
+
# Run the interactive configuration wizard
|
|
54
|
+
node src/branch-config-manager.js wizard
|
|
55
|
+
|
|
56
|
+
# Get a specific setting
|
|
57
|
+
node src/branch-config-manager.js get branchManagement.defaultMergeTarget
|
|
58
|
+
|
|
59
|
+
# Set a specific setting
|
|
60
|
+
node src/branch-config-manager.js set branchManagement.enableDualMerge true
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## 4. Workflows
|
|
64
|
+
|
|
65
|
+
### 4.1 Closing a Session
|
|
66
|
+
|
|
67
|
+
When you close a session using `enhanced-close-session.js`, you will be prompted for an action:
|
|
68
|
+
|
|
69
|
+
- **Merge changes and cleanup:** Merges the session branch and cleans up all related files.
|
|
70
|
+
- **Keep session active, just cleanup worktree:** Removes the worktree but keeps the session branch and lock file.
|
|
71
|
+
- **Delete session and all changes:** Permanently deletes the session branch and all work.
|
|
72
|
+
|
|
73
|
+
If you choose to merge, the system will perform a single or dual merge based on your configuration.
|
|
74
|
+
|
|
75
|
+
### 4.2 Weekly Consolidation
|
|
76
|
+
|
|
77
|
+
This process runs automatically on the configured `weeklyCleanupDay`. It identifies all daily branches from the past week, merges them into a new weekly branch, and then deletes the daily branches.
|
|
78
|
+
|
|
79
|
+
You can also run this process manually:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
node src/weekly-consolidator.js consolidate
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 4.3 Orphaned Session Cleanup
|
|
86
|
+
|
|
87
|
+
This process runs daily and identifies sessions that have been inactive for longer than the `orphanSessionThresholdDays`. It will then prompt you to clean them up.
|
|
88
|
+
|
|
89
|
+
You can also run this process manually:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
node src/orphan-cleaner.js cleanup
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## 5. Command-Line Interface (CLI)
|
|
96
|
+
|
|
97
|
+
- **`enhanced-close-session.js`**: Close and manage active sessions.
|
|
98
|
+
- **`weekly-consolidator.js`**: Consolidate daily branches into weekly branches.
|
|
99
|
+
- **`orphan-cleaner.js`**: Detect and clean up orphaned sessions.
|
|
100
|
+
- **`branch-config-manager.js`**: Manage all branch management settings.
|
|
101
|
+
|
package/package.json
CHANGED