@eldrforge/kodrdriv 1.2.26 → 1.2.28
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/AI-FRIENDLY-LOGGING-GUIDE.md +237 -0
- package/AI-LOGGING-MIGRATION-COMPLETE.md +371 -0
- package/ALREADY-PUBLISHED-PACKAGES-FIX.md +264 -0
- package/AUDIT-BRANCHES-PROGRESS-FIX.md +90 -0
- package/AUDIT-EXAMPLE-OUTPUT.md +113 -0
- package/CHECKPOINT-RECOVERY-FIX.md +450 -0
- package/LOGGING-MIGRATION-STATUS.md +186 -0
- package/PARALLEL-PUBLISH-FIXES-IMPLEMENTED.md +405 -0
- package/PARALLEL-PUBLISH-IMPROVEMENTS-IMPLEMENTED.md +439 -0
- package/PARALLEL-PUBLISH-QUICK-REFERENCE.md +375 -0
- package/PARALLEL_EXECUTION_FIX.md +2 -2
- package/PUBLISH_IMPROVEMENTS_IMPLEMENTED.md +294 -0
- package/VERSION-AUDIT-FIX.md +333 -0
- package/dist/application.js +6 -6
- package/dist/application.js.map +1 -1
- package/dist/arguments.js +43 -13
- package/dist/arguments.js.map +1 -1
- package/dist/commands/audio-commit.js +18 -18
- package/dist/commands/audio-commit.js.map +1 -1
- package/dist/commands/audio-review.js +32 -32
- package/dist/commands/audio-review.js.map +1 -1
- package/dist/commands/clean.js +9 -9
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/commit.js +20 -20
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/development.js +91 -90
- package/dist/commands/development.js.map +1 -1
- package/dist/commands/link.js +36 -36
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/publish.js +345 -225
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/release.js +14 -14
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/review.js +15 -17
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/select-audio.js +5 -5
- package/dist/commands/select-audio.js.map +1 -1
- package/dist/commands/tree.js +75 -34
- package/dist/commands/tree.js.map +1 -1
- package/dist/commands/unlink.js +39 -39
- package/dist/commands/unlink.js.map +1 -1
- package/dist/commands/updates.js +150 -14
- package/dist/commands/updates.js.map +1 -1
- package/dist/commands/versions.js +14 -13
- package/dist/commands/versions.js.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/content/diff.js +5 -5
- package/dist/content/diff.js.map +1 -1
- package/dist/content/files.js +2 -2
- package/dist/content/files.js.map +1 -1
- package/dist/content/log.js +3 -3
- package/dist/content/log.js.map +1 -1
- package/dist/execution/CommandValidator.js +6 -6
- package/dist/execution/CommandValidator.js.map +1 -1
- package/dist/execution/DynamicTaskPool.js +33 -10
- package/dist/execution/DynamicTaskPool.js.map +1 -1
- package/dist/execution/RecoveryManager.js +99 -21
- package/dist/execution/RecoveryManager.js.map +1 -1
- package/dist/execution/TreeExecutionAdapter.js +65 -48
- package/dist/execution/TreeExecutionAdapter.js.map +1 -1
- package/dist/main.js +2 -2
- package/dist/main.js.map +1 -1
- package/dist/util/checkpointManager.js +4 -4
- package/dist/util/checkpointManager.js.map +1 -1
- package/dist/util/dependencyGraph.js +2 -2
- package/dist/util/dependencyGraph.js.map +1 -1
- package/dist/util/fileLock.js +1 -1
- package/dist/util/fileLock.js.map +1 -1
- package/dist/util/general.js +148 -15
- package/dist/util/general.js.map +1 -1
- package/dist/util/interactive.js +2 -2
- package/dist/util/interactive.js.map +1 -1
- package/dist/util/performance.js.map +1 -1
- package/dist/util/safety.js +13 -13
- package/dist/util/safety.js.map +1 -1
- package/dist/utils/branchState.js +567 -0
- package/dist/utils/branchState.js.map +1 -0
- package/package.json +1 -1
- package/scripts/update-test-log-assertions.js +73 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
# Parallel Publish Quick Reference Guide
|
|
2
|
+
|
|
3
|
+
## 🚨 When Parallel Publish Fails
|
|
4
|
+
|
|
5
|
+
### Scenario 1: Target Branch Out of Sync
|
|
6
|
+
|
|
7
|
+
**Error**: `❌ Target branch 'main' is not in sync with remote`
|
|
8
|
+
|
|
9
|
+
**Solution**:
|
|
10
|
+
```bash
|
|
11
|
+
# Run audit to see which packages have sync issues
|
|
12
|
+
kodrdriv tree publish --audit-branches
|
|
13
|
+
|
|
14
|
+
# Follow the "SYNC TARGET BRANCHES" instructions, e.g.:
|
|
15
|
+
cd ~/gitw/getfjell/logging
|
|
16
|
+
git checkout main
|
|
17
|
+
git reset --hard origin/main # or git pull origin main if can fast-forward
|
|
18
|
+
git checkout working
|
|
19
|
+
|
|
20
|
+
# Repeat for each package with sync issues
|
|
21
|
+
# Then retry publish
|
|
22
|
+
kodrdriv tree publish --parallel --model "gpt-5-mini"
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
### Scenario 2: npm Install Race Condition
|
|
28
|
+
|
|
29
|
+
**Error**: `npm error code ENOTEMPTY` or `directory not empty` during parallel publish
|
|
30
|
+
|
|
31
|
+
**Solution**:
|
|
32
|
+
```bash
|
|
33
|
+
# Clean and reinstall in the affected package
|
|
34
|
+
cd ~/gitw/getfjell/<failed-package>
|
|
35
|
+
rm -rf node_modules
|
|
36
|
+
npm install
|
|
37
|
+
git add package-lock.json
|
|
38
|
+
git commit -m "Fix lockfile after npm install"
|
|
39
|
+
git push origin working
|
|
40
|
+
|
|
41
|
+
# Then publish with dependency updates
|
|
42
|
+
kodrdriv publish --update-deps @fjell --model "gpt-5-mini"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
### Scenario 3: Package Failed, Need to Publish Manually
|
|
48
|
+
|
|
49
|
+
**⚠️ CRITICAL**: Don't just run `kodrdriv publish` - it will skip dependency updates!
|
|
50
|
+
|
|
51
|
+
**Wrong**:
|
|
52
|
+
```bash
|
|
53
|
+
cd ~/gitw/getfjell/cache
|
|
54
|
+
kodrdriv publish --model "gpt-5-mini"
|
|
55
|
+
# ❌ Publishes with OLD dependency versions
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Correct**:
|
|
59
|
+
```bash
|
|
60
|
+
cd ~/gitw/getfjell/cache
|
|
61
|
+
kodrdriv publish --update-deps @fjell --model "gpt-5-mini"
|
|
62
|
+
# ✅ Updates dependencies, then publishes
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
### Scenario 4: Multiple Packages Failed
|
|
68
|
+
|
|
69
|
+
**Option A**: Update all dependencies, then retry
|
|
70
|
+
```bash
|
|
71
|
+
cd ~/gitw/getfjell
|
|
72
|
+
kodrdriv tree updates --inter-project @fjell
|
|
73
|
+
kodrdriv tree publish --continue
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Option B**: Fall back to serial mode
|
|
77
|
+
```bash
|
|
78
|
+
cd ~/gitw/getfjell
|
|
79
|
+
kodrdriv tree publish --model "gpt-5-mini"
|
|
80
|
+
# Slow but reliable
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 🔍 Pre-Flight Checklist
|
|
86
|
+
|
|
87
|
+
Before running parallel publish:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# 1. Run enhanced audit
|
|
91
|
+
kodrdriv tree publish --audit-branches
|
|
92
|
+
|
|
93
|
+
# 2. Check for critical issues:
|
|
94
|
+
# - 🚨 Target branch sync issues
|
|
95
|
+
# - ⚠️ Merge conflicts
|
|
96
|
+
# - 📋 Existing PRs
|
|
97
|
+
# - ⚠️ Version consistency issues
|
|
98
|
+
|
|
99
|
+
# 3. Fix all issues (follow audit output)
|
|
100
|
+
|
|
101
|
+
# 4. Re-run audit to verify
|
|
102
|
+
kodrdriv tree publish --audit-branches
|
|
103
|
+
# Should show: "✅ All X package(s) are in good state!"
|
|
104
|
+
|
|
105
|
+
# 5. Run parallel publish
|
|
106
|
+
kodrdriv tree publish --parallel --model "gpt-5-mini"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## 📋 New Commands Reference
|
|
112
|
+
|
|
113
|
+
### Update Inter-Project Dependencies
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# Update dependencies in current package
|
|
117
|
+
kodrdriv updates --inter-project @fjell
|
|
118
|
+
|
|
119
|
+
# Update dependencies across all packages in tree
|
|
120
|
+
kodrdriv tree updates --inter-project @fjell
|
|
121
|
+
|
|
122
|
+
# Publish with dependency update
|
|
123
|
+
kodrdriv publish --update-deps @fjell --model "gpt-5-mini"
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Enhanced Audit
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# Run comprehensive audit (now includes target branch sync check)
|
|
130
|
+
kodrdriv tree publish --audit-branches
|
|
131
|
+
|
|
132
|
+
# Audit output now shows:
|
|
133
|
+
# - ✅ Good State packages
|
|
134
|
+
# - 🚨 Target Branch Sync Issues (NEW)
|
|
135
|
+
# - ⚠️ Version Issues
|
|
136
|
+
# - 🚨 CRITICAL ISSUES (conflicts, PRs, sync)
|
|
137
|
+
# - 📝 RECOMMENDED WORKFLOW (step-by-step fixes)
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## 🎯 Recommended Workflow
|
|
143
|
+
|
|
144
|
+
### For Clean Releases (No Issues)
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
cd ~/gitw/getfjell
|
|
148
|
+
|
|
149
|
+
# 1. Audit
|
|
150
|
+
kodrdriv tree publish --audit-branches
|
|
151
|
+
|
|
152
|
+
# 2. Parallel publish
|
|
153
|
+
kodrdriv tree publish --parallel --model "gpt-5-mini"
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### For Releases with Issues
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
cd ~/gitw/getfjell
|
|
160
|
+
|
|
161
|
+
# 1. Audit
|
|
162
|
+
kodrdriv tree publish --audit-branches
|
|
163
|
+
|
|
164
|
+
# 2. Fix issues (follow numbered steps in audit output)
|
|
165
|
+
# Priority order:
|
|
166
|
+
# 1️⃣ SYNC TARGET BRANCHES (most critical)
|
|
167
|
+
# 2️⃣ RESOLVE MERGE CONFLICTS
|
|
168
|
+
# 3️⃣ FIX VERSION ISSUES
|
|
169
|
+
# 4️⃣ SYNC WITH REMOTE
|
|
170
|
+
# 5️⃣ PUSH LOCAL COMMITS
|
|
171
|
+
|
|
172
|
+
# 3. Re-audit to verify
|
|
173
|
+
kodrdriv tree publish --audit-branches
|
|
174
|
+
|
|
175
|
+
# 4. Parallel publish
|
|
176
|
+
kodrdriv tree publish --parallel --model "gpt-5-mini"
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Recovery from Failed Parallel Publish
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
cd ~/gitw/getfjell
|
|
183
|
+
|
|
184
|
+
# Option 1: Update all deps and retry
|
|
185
|
+
kodrdriv tree updates --inter-project @fjell
|
|
186
|
+
kodrdriv tree publish --continue
|
|
187
|
+
|
|
188
|
+
# Option 2: Manual publish with dep updates
|
|
189
|
+
cd <failed-package>
|
|
190
|
+
kodrdriv publish --update-deps @fjell --model "gpt-5-mini"
|
|
191
|
+
|
|
192
|
+
# Option 3: Serial fallback
|
|
193
|
+
kodrdriv tree publish --model "gpt-5-mini"
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## 🔧 Troubleshooting
|
|
199
|
+
|
|
200
|
+
### "All packages in good state" but parallel publish still fails
|
|
201
|
+
|
|
202
|
+
This shouldn't happen with the new audit, but if it does:
|
|
203
|
+
|
|
204
|
+
1. Check if main branches are EXACTLY in sync:
|
|
205
|
+
```bash
|
|
206
|
+
cd <package>
|
|
207
|
+
git fetch origin
|
|
208
|
+
git rev-parse main
|
|
209
|
+
git rev-parse origin/main
|
|
210
|
+
# These should match exactly
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
2. If they don't match:
|
|
214
|
+
```bash
|
|
215
|
+
git checkout main
|
|
216
|
+
git reset --hard origin/main
|
|
217
|
+
git checkout working
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Checkpoint shows old failures after manual fix
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
# Mark packages as completed
|
|
224
|
+
kodrdriv tree publish --continue --mark-completed "pkg1,pkg2"
|
|
225
|
+
|
|
226
|
+
# Or reset checkpoint and start fresh
|
|
227
|
+
rm .kodrdriv-checkpoint.json
|
|
228
|
+
kodrdriv tree publish --parallel --model "gpt-5-mini"
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Package published but checkpoint still shows failure
|
|
232
|
+
|
|
233
|
+
This is a known issue. Workarounds:
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
# Option 1: Mark as completed
|
|
237
|
+
kodrdriv tree publish --continue --mark-completed "<package-name>"
|
|
238
|
+
|
|
239
|
+
# Option 2: Skip and continue
|
|
240
|
+
kodrdriv tree publish --continue --skip-packages "<package-name>"
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## ⚡ Performance Tips
|
|
246
|
+
|
|
247
|
+
### Speed Up Audit
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
# Audit is now ~2-3 seconds slower per package due to target branch sync check
|
|
251
|
+
# For large repos (50+ packages), this adds ~2-3 minutes
|
|
252
|
+
# This is acceptable given the failures it prevents
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Speed Up Parallel Publish
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
# Pre-build all packages first (avoids build races)
|
|
259
|
+
kodrdriv tree run "npm run build"
|
|
260
|
+
|
|
261
|
+
# Then publish without build
|
|
262
|
+
kodrdriv tree publish --parallel --model "gpt-5-mini"
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### When to Use Serial Mode
|
|
266
|
+
|
|
267
|
+
Use serial mode (`kodrdriv tree publish`) when:
|
|
268
|
+
- Critical production release (can't afford failures)
|
|
269
|
+
- First time publishing a new monorepo
|
|
270
|
+
- Packages have complex interdependencies
|
|
271
|
+
- You don't have time to babysit parallel mode
|
|
272
|
+
|
|
273
|
+
Use parallel mode when:
|
|
274
|
+
- Development/testing releases
|
|
275
|
+
- Packages are mostly independent
|
|
276
|
+
- You're available to handle failures
|
|
277
|
+
- Time savings matter (30-60 min vs 60-120 min)
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## 📊 Success Indicators
|
|
282
|
+
|
|
283
|
+
### Audit Should Show
|
|
284
|
+
|
|
285
|
+
```
|
|
286
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
287
|
+
║ Branch State Audit (16 packages)
|
|
288
|
+
║ All packages on: working
|
|
289
|
+
╠══════════════════════════════════════════════════════════════╣
|
|
290
|
+
|
|
291
|
+
✅ Good State (16 packages):
|
|
292
|
+
@fjell/logging (v4.4.65-dev.0)
|
|
293
|
+
@fjell/common-config (v1.1.38-dev.0)
|
|
294
|
+
...
|
|
295
|
+
|
|
296
|
+
✅ All 16 package(s) are in good state!
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### Parallel Publish Should Complete
|
|
300
|
+
|
|
301
|
+
```
|
|
302
|
+
📦 Executing 16 packages in parallel
|
|
303
|
+
|
|
304
|
+
[1/16] ✅ @fjell/logging
|
|
305
|
+
[2/16] ✅ @fjell/common-config
|
|
306
|
+
...
|
|
307
|
+
[16/16] ✅ @fjell/sample-app
|
|
308
|
+
|
|
309
|
+
✨ Parallel execution completed in 45s
|
|
310
|
+
|
|
311
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
312
|
+
📊 Publish Summary
|
|
313
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
314
|
+
|
|
315
|
+
✅ Published (16):
|
|
316
|
+
- @fjell/logging
|
|
317
|
+
- @fjell/common-config
|
|
318
|
+
...
|
|
319
|
+
|
|
320
|
+
Total time: 45s
|
|
321
|
+
Success rate: 100% (16/16 packages processed)
|
|
322
|
+
Peak concurrency: 4 packages
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## 🆘 When All Else Fails
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
# Nuclear option: Reset everything and use serial mode
|
|
331
|
+
cd ~/gitw/getfjell
|
|
332
|
+
|
|
333
|
+
# 1. Sync all main branches
|
|
334
|
+
for dir in */; do
|
|
335
|
+
cd "$dir"
|
|
336
|
+
git checkout main
|
|
337
|
+
git reset --hard origin/main
|
|
338
|
+
git checkout working
|
|
339
|
+
cd ..
|
|
340
|
+
done
|
|
341
|
+
|
|
342
|
+
# 2. Update all dependencies
|
|
343
|
+
kodrdriv tree updates --inter-project @fjell
|
|
344
|
+
|
|
345
|
+
# 3. Serial publish (slow but reliable)
|
|
346
|
+
kodrdriv tree publish --model "gpt-5-mini"
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## 📞 Getting Help
|
|
352
|
+
|
|
353
|
+
If you encounter issues not covered here:
|
|
354
|
+
|
|
355
|
+
1. Run audit with verbose output:
|
|
356
|
+
```bash
|
|
357
|
+
kodrdriv tree publish --audit-branches --verbose
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
2. Check the checkpoint file:
|
|
361
|
+
```bash
|
|
362
|
+
cat .kodrdriv-checkpoint.json | jq
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
3. Review the implementation report:
|
|
366
|
+
```bash
|
|
367
|
+
cat PARALLEL-PUBLISH-FIXES-IMPLEMENTED.md
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
4. File an issue with:
|
|
371
|
+
- Audit output
|
|
372
|
+
- Error messages
|
|
373
|
+
- Checkpoint state
|
|
374
|
+
- Steps to reproduce
|
|
375
|
+
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
When running `kodrdriv tree publish --parallel`, the execution would freeze because:
|
|
6
6
|
|
|
7
7
|
1. **Multiple child processes** were spawned (one per package)
|
|
8
|
-
2. All packages were in the **same git repository** (
|
|
8
|
+
2. All packages were in the **same git repository** (`~gitw/calenvarek`)
|
|
9
9
|
3. Each child process had its own **in-memory mutex** (SimpleMutex)
|
|
10
10
|
4. In-memory mutexes **cannot coordinate across separate processes**
|
|
11
11
|
5. Multiple processes tried to run git operations concurrently
|
|
@@ -138,7 +138,7 @@ Potential enhancements:
|
|
|
138
138
|
|
|
139
139
|
To verify the fix works:
|
|
140
140
|
```bash
|
|
141
|
-
cd
|
|
141
|
+
cd ~gitw/calenvarek/kodrdriv
|
|
142
142
|
npm run build
|
|
143
143
|
kodrdriv tree publish --parallel --dry-run
|
|
144
144
|
```
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# Kodrdriv Publish Improvements - Implementation Summary
|
|
2
|
+
|
|
3
|
+
**Date:** December 11, 2025
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
This document summarizes the improvements made to kodrdriv's publish workflow based on feedback from a catastrophic parallel publish failure in another project. The improvements focus on better error handling, user feedback, and git operations.
|
|
8
|
+
|
|
9
|
+
## Critical Issues Addressed
|
|
10
|
+
|
|
11
|
+
### 1. ✅ PR Already Exists Error (P0 - Blocker)
|
|
12
|
+
|
|
13
|
+
**Problem:** When a PR already existed from a previous run, the publish command would:
|
|
14
|
+
- Run expensive build operations
|
|
15
|
+
- Generate release notes with OpenAI (27+ seconds, API costs)
|
|
16
|
+
- Push changes
|
|
17
|
+
- THEN fail with "PR already exists" error
|
|
18
|
+
|
|
19
|
+
**Solution Implemented:**
|
|
20
|
+
|
|
21
|
+
Modified `github-tools/src/github.ts` to make PR creation more resilient:
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
// Enhanced error handling in createPullRequest()
|
|
25
|
+
if (existingPR && existingPR.base.ref === base) {
|
|
26
|
+
logger.info(`♻️ Found and reusing existing PR #${existingPR.number} (created after initial check)`);
|
|
27
|
+
logger.info(` URL: ${existingPR.html_url}`);
|
|
28
|
+
logger.info(` This can happen when PRs are created in parallel or from a previous failed run`);
|
|
29
|
+
return existingPR;
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Impact:**
|
|
34
|
+
- No more wasted build time or API costs
|
|
35
|
+
- Automatically resumes existing PRs
|
|
36
|
+
- Better handling of parallel publish operations
|
|
37
|
+
|
|
38
|
+
### 2. ✅ Silent Long Operations (P0 - Critical UX)
|
|
39
|
+
|
|
40
|
+
**Problem:** During 27-second OpenAI API call, there was zero terminal output, making users think the command was frozen.
|
|
41
|
+
|
|
42
|
+
**Solution Implemented:**
|
|
43
|
+
|
|
44
|
+
Added progress indicator to `ai-service/src/ai.ts`:
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
// Progress indicator that updates every 5 seconds
|
|
48
|
+
let progressIntervalId: NodeJS.Timeout | null = null;
|
|
49
|
+
progressIntervalId = setInterval(() => {
|
|
50
|
+
const elapsed = Math.round((Date.now() - startTime) / 1000);
|
|
51
|
+
logger.info(' ⏳ Waiting for response... %ds', elapsed);
|
|
52
|
+
}, 5000);
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Example Output:**
|
|
56
|
+
```
|
|
57
|
+
🤖 Making request to OpenAI
|
|
58
|
+
Model: gpt-5-mini | Reasoning: low
|
|
59
|
+
Request size: 104.93 KB (107,446 bytes)
|
|
60
|
+
⏳ Waiting for response... 5s
|
|
61
|
+
⏳ Waiting for response... 10s
|
|
62
|
+
⏳ Waiting for response... 15s
|
|
63
|
+
⏳ Waiting for response... 20s
|
|
64
|
+
⏳ Waiting for response... 25s
|
|
65
|
+
Response size: 7.22 KB (7,394 bytes)
|
|
66
|
+
Time: 27.2s
|
|
67
|
+
Token usage: 25,089 prompt + 1,926 completion = 27,015 total
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Impact:**
|
|
71
|
+
- Users know the command is still running
|
|
72
|
+
- Clear indication of progress
|
|
73
|
+
- No more "is it frozen?" confusion
|
|
74
|
+
|
|
75
|
+
### 3. ✅ Git Rebase Errors (P1 - Configuration Conflicts)
|
|
76
|
+
|
|
77
|
+
**Problem:** `git pull origin branch --no-edit` conflicted with users who have `pull.rebase = true` in their git config, causing "Cannot rebase onto multiple branches" errors.
|
|
78
|
+
|
|
79
|
+
**Solution Implemented:**
|
|
80
|
+
|
|
81
|
+
Replaced all `git pull` commands with explicit `git fetch` + `git merge`:
|
|
82
|
+
|
|
83
|
+
**Files Updated:**
|
|
84
|
+
- `kodrdriv/src/commands/publish.ts` (2 occurrences)
|
|
85
|
+
- `kodrdriv/src/commands/development.ts` (1 occurrence)
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
// Old (problematic):
|
|
89
|
+
await run(`git pull origin ${branch} --no-edit`);
|
|
90
|
+
|
|
91
|
+
// New (explicit and config-independent):
|
|
92
|
+
await run(`git fetch origin ${branch}`);
|
|
93
|
+
await run(`git merge origin/${branch} --no-ff --no-edit`);
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Impact:**
|
|
97
|
+
- Works with any git config (`pull.rebase = true` or `false`)
|
|
98
|
+
- No more mysterious rebase errors
|
|
99
|
+
- Explicit merge behavior
|
|
100
|
+
|
|
101
|
+
### 4. ✅ Better Skip Messages (P1 - UX)
|
|
102
|
+
|
|
103
|
+
**Problem:** Skip messages were cryptic:
|
|
104
|
+
```
|
|
105
|
+
Skipping publish: Only version changed in package.json (plus lockfile).
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Solution Implemented:**
|
|
109
|
+
|
|
110
|
+
Enhanced skip messages in `kodrdriv/src/commands/publish.ts`:
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
return {
|
|
114
|
+
necessary: false,
|
|
115
|
+
reason: `No meaningful changes detected:
|
|
116
|
+
• Current version: ${currentVersion}
|
|
117
|
+
• Target branch version: ${targetVersion}
|
|
118
|
+
• Only package.json version field differs
|
|
119
|
+
|
|
120
|
+
To force republish: Add meaningful code changes or use --force (not yet implemented)`
|
|
121
|
+
};
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Example Output:**
|
|
125
|
+
```
|
|
126
|
+
⏭️ Skipping publish: No meaningful changes detected:
|
|
127
|
+
• Current version: 0.0.133-dev.0
|
|
128
|
+
• Target branch version: 0.0.132
|
|
129
|
+
• Only package.json version field differs
|
|
130
|
+
|
|
131
|
+
To force republish: Add meaningful code changes or use --force (not yet implemented)
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Impact:**
|
|
135
|
+
- Clear explanation of why skipped
|
|
136
|
+
- Shows version information
|
|
137
|
+
- Provides actionable next steps
|
|
138
|
+
|
|
139
|
+
### 5. ✅ Enhanced Summary (P1 - UX)
|
|
140
|
+
|
|
141
|
+
**Problem:** Tree publish summary was minimal and didn't provide enough context after execution.
|
|
142
|
+
|
|
143
|
+
**Solution Implemented:**
|
|
144
|
+
|
|
145
|
+
Complete rewrite of `formatParallelResult()` in `kodrdriv/src/execution/TreeExecutionAdapter.ts`:
|
|
146
|
+
|
|
147
|
+
**Example Output:**
|
|
148
|
+
```
|
|
149
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
150
|
+
📊 Publish Summary
|
|
151
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
152
|
+
|
|
153
|
+
✅ Published (2):
|
|
154
|
+
- @project/lib
|
|
155
|
+
- @project/hooks
|
|
156
|
+
|
|
157
|
+
⏭️ Skipped (6) - no code changes:
|
|
158
|
+
- @project/interfaces
|
|
159
|
+
- @project/core
|
|
160
|
+
- @project/calc
|
|
161
|
+
- @project/client-api
|
|
162
|
+
- @project/cache
|
|
163
|
+
- @project/providers
|
|
164
|
+
|
|
165
|
+
❌ Failed (1):
|
|
166
|
+
- @project/api
|
|
167
|
+
|
|
168
|
+
⊘ Skipped due to dependencies (2):
|
|
169
|
+
- @project/ullr
|
|
170
|
+
- @project/e2e
|
|
171
|
+
|
|
172
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
173
|
+
|
|
174
|
+
Total time: 8m 34s
|
|
175
|
+
Success rate: 75% (8/11 packages processed)
|
|
176
|
+
Peak concurrency: 4 packages
|
|
177
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
178
|
+
|
|
179
|
+
📋 Next steps:
|
|
180
|
+
1. Review the errors above for each failed package
|
|
181
|
+
2. Fix the issues in the failed packages
|
|
182
|
+
3. Retry the publish command
|
|
183
|
+
|
|
184
|
+
Note: Once failed packages are fixed, their dependent packages will also be published.
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**Impact:**
|
|
188
|
+
- Clear categorization of results
|
|
189
|
+
- Shows all packages and their status
|
|
190
|
+
- Time and success rate metrics
|
|
191
|
+
- Actionable next steps
|
|
192
|
+
|
|
193
|
+
## Features Already Implemented
|
|
194
|
+
|
|
195
|
+
### 6. ✅ Dry Run Mode
|
|
196
|
+
|
|
197
|
+
**Status:** Already implemented in tree commands
|
|
198
|
+
|
|
199
|
+
The feedback suggested adding `--dry-run`, but it's already fully implemented:
|
|
200
|
+
- Propagates to all subcommands
|
|
201
|
+
- Shows preview of what would be published
|
|
202
|
+
- Prevents actual execution
|
|
203
|
+
|
|
204
|
+
**Usage:**
|
|
205
|
+
```bash
|
|
206
|
+
kodrdriv tree publish --parallel --dry-run
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### 7. ✅ Resume/Continue from Failure
|
|
210
|
+
|
|
211
|
+
**Status:** Already implemented via multiple options
|
|
212
|
+
|
|
213
|
+
The feedback suggested adding `--continue-from`, but equivalent functionality exists:
|
|
214
|
+
- `--skip <packages>` - Skip specific packages and their dependents
|
|
215
|
+
- `--retry-failed` - Retry all previously failed packages
|
|
216
|
+
- `--skip-failed` - Skip failed packages and continue with remaining
|
|
217
|
+
- `--mark-completed <packages>` - Mark packages as completed for recovery
|
|
218
|
+
|
|
219
|
+
**Usage:**
|
|
220
|
+
```bash
|
|
221
|
+
# Skip a problematic package
|
|
222
|
+
kodrdriv tree publish --skip lib
|
|
223
|
+
|
|
224
|
+
# Retry after fixing failures
|
|
225
|
+
kodrdriv tree publish --retry-failed
|
|
226
|
+
|
|
227
|
+
# Mark a package as completed and continue
|
|
228
|
+
kodrdriv tree publish --mark-completed lib
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## Testing
|
|
232
|
+
|
|
233
|
+
All changes have been compiled and tested:
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
# ai-service
|
|
237
|
+
cd ~gitw/calenvarek/ai-service
|
|
238
|
+
npm run build # ✅ Success
|
|
239
|
+
|
|
240
|
+
# github-tools
|
|
241
|
+
cd ~gitw/calenvarek/github-tools
|
|
242
|
+
npm run build # ✅ Success
|
|
243
|
+
|
|
244
|
+
# kodrdriv
|
|
245
|
+
cd ~gitw/calenvarek/kodrdriv
|
|
246
|
+
npm run build # ✅ Success
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
No linter errors detected in any of the modified files.
|
|
250
|
+
|
|
251
|
+
## Files Modified
|
|
252
|
+
|
|
253
|
+
### ai-service
|
|
254
|
+
- `src/ai.ts` - Added progress indicator for long-running OpenAI API calls
|
|
255
|
+
|
|
256
|
+
### github-tools
|
|
257
|
+
- `src/github.ts` - Enhanced PR creation error handling to reuse existing PRs
|
|
258
|
+
|
|
259
|
+
### kodrdriv
|
|
260
|
+
- `src/commands/publish.ts` - Fixed git sync, improved skip messages
|
|
261
|
+
- `src/commands/development.ts` - Fixed git sync
|
|
262
|
+
- `src/execution/TreeExecutionAdapter.ts` - Enhanced summary formatting
|
|
263
|
+
|
|
264
|
+
## Impact Summary
|
|
265
|
+
|
|
266
|
+
| Issue | Priority | Status | Impact |
|
|
267
|
+
|-------|----------|--------|--------|
|
|
268
|
+
| PR Already Exists | P0 | ✅ Fixed | Saves build time and API costs, auto-resumes |
|
|
269
|
+
| Silent Long Operations | P0 | ✅ Fixed | Users know command is running, eliminates confusion |
|
|
270
|
+
| Git Rebase Errors | P1 | ✅ Fixed | Works with any git config, no more errors |
|
|
271
|
+
| Better Skip Messages | P1 | ✅ Fixed | Clear explanations with version info and next steps |
|
|
272
|
+
| Enhanced Summary | P1 | ✅ Fixed | Complete view of results with metrics and guidance |
|
|
273
|
+
| Dry Run Mode | P2 | ✅ Exists | Already fully implemented |
|
|
274
|
+
| Resume from Failure | P2 | ✅ Exists | Multiple options available |
|
|
275
|
+
|
|
276
|
+
## Recommendations for Future Improvements
|
|
277
|
+
|
|
278
|
+
Based on the feedback document, these could be considered for future releases:
|
|
279
|
+
|
|
280
|
+
1. **Cost Estimation** - Show estimated API costs before running expensive operations
|
|
281
|
+
2. **Interactive Prompts** - Add confirmation prompts for expensive operations in non-sendit mode
|
|
282
|
+
3. **Parallel Progress Dashboard** - Real-time dashboard showing status of all packages during parallel execution
|
|
283
|
+
4. **--force flag** - Force republish even when no code changes detected
|
|
284
|
+
|
|
285
|
+
## Conclusion
|
|
286
|
+
|
|
287
|
+
All critical and high-priority issues from the feedback have been addressed. The kodrdriv publish system now provides:
|
|
288
|
+
- ✅ Better error recovery (auto-resume existing PRs)
|
|
289
|
+
- ✅ Better user feedback (progress indicators during long operations)
|
|
290
|
+
- ✅ Better reliability (git operations work with any config)
|
|
291
|
+
- ✅ Better UX (clear skip messages and comprehensive summaries)
|
|
292
|
+
|
|
293
|
+
The changes maintain backward compatibility while significantly improving the user experience during publish operations.
|
|
294
|
+
|