@eldrforge/kodrdriv 1.2.27 → 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.
Files changed (78) hide show
  1. package/AI-FRIENDLY-LOGGING-GUIDE.md +237 -0
  2. package/AI-LOGGING-MIGRATION-COMPLETE.md +371 -0
  3. package/ALREADY-PUBLISHED-PACKAGES-FIX.md +264 -0
  4. package/AUDIT-BRANCHES-PROGRESS-FIX.md +90 -0
  5. package/AUDIT-EXAMPLE-OUTPUT.md +113 -0
  6. package/CHECKPOINT-RECOVERY-FIX.md +450 -0
  7. package/LOGGING-MIGRATION-STATUS.md +186 -0
  8. package/PARALLEL-PUBLISH-FIXES-IMPLEMENTED.md +405 -0
  9. package/PARALLEL-PUBLISH-QUICK-REFERENCE.md +375 -0
  10. package/PARALLEL_EXECUTION_FIX.md +2 -2
  11. package/PUBLISH_IMPROVEMENTS_IMPLEMENTED.md +4 -5
  12. package/VERSION-AUDIT-FIX.md +333 -0
  13. package/dist/application.js +6 -6
  14. package/dist/application.js.map +1 -1
  15. package/dist/arguments.js +43 -13
  16. package/dist/arguments.js.map +1 -1
  17. package/dist/commands/audio-commit.js +18 -18
  18. package/dist/commands/audio-commit.js.map +1 -1
  19. package/dist/commands/audio-review.js +32 -32
  20. package/dist/commands/audio-review.js.map +1 -1
  21. package/dist/commands/clean.js +9 -9
  22. package/dist/commands/clean.js.map +1 -1
  23. package/dist/commands/commit.js +20 -20
  24. package/dist/commands/commit.js.map +1 -1
  25. package/dist/commands/development.js +88 -89
  26. package/dist/commands/development.js.map +1 -1
  27. package/dist/commands/link.js +36 -36
  28. package/dist/commands/link.js.map +1 -1
  29. package/dist/commands/publish.js +318 -220
  30. package/dist/commands/publish.js.map +1 -1
  31. package/dist/commands/release.js +14 -14
  32. package/dist/commands/release.js.map +1 -1
  33. package/dist/commands/review.js +15 -17
  34. package/dist/commands/review.js.map +1 -1
  35. package/dist/commands/select-audio.js +5 -5
  36. package/dist/commands/select-audio.js.map +1 -1
  37. package/dist/commands/tree.js +75 -34
  38. package/dist/commands/tree.js.map +1 -1
  39. package/dist/commands/unlink.js +39 -39
  40. package/dist/commands/unlink.js.map +1 -1
  41. package/dist/commands/updates.js +150 -14
  42. package/dist/commands/updates.js.map +1 -1
  43. package/dist/commands/versions.js +14 -13
  44. package/dist/commands/versions.js.map +1 -1
  45. package/dist/constants.js +1 -1
  46. package/dist/content/diff.js +5 -5
  47. package/dist/content/diff.js.map +1 -1
  48. package/dist/content/files.js +2 -2
  49. package/dist/content/files.js.map +1 -1
  50. package/dist/content/log.js +3 -3
  51. package/dist/content/log.js.map +1 -1
  52. package/dist/execution/CommandValidator.js +6 -6
  53. package/dist/execution/CommandValidator.js.map +1 -1
  54. package/dist/execution/DynamicTaskPool.js +33 -10
  55. package/dist/execution/DynamicTaskPool.js.map +1 -1
  56. package/dist/execution/RecoveryManager.js +99 -21
  57. package/dist/execution/RecoveryManager.js.map +1 -1
  58. package/dist/execution/TreeExecutionAdapter.js +19 -19
  59. package/dist/execution/TreeExecutionAdapter.js.map +1 -1
  60. package/dist/main.js +2 -2
  61. package/dist/main.js.map +1 -1
  62. package/dist/util/checkpointManager.js +4 -4
  63. package/dist/util/checkpointManager.js.map +1 -1
  64. package/dist/util/dependencyGraph.js +2 -2
  65. package/dist/util/dependencyGraph.js.map +1 -1
  66. package/dist/util/fileLock.js +1 -1
  67. package/dist/util/fileLock.js.map +1 -1
  68. package/dist/util/general.js +148 -15
  69. package/dist/util/general.js.map +1 -1
  70. package/dist/util/interactive.js +2 -2
  71. package/dist/util/interactive.js.map +1 -1
  72. package/dist/util/performance.js.map +1 -1
  73. package/dist/util/safety.js +13 -13
  74. package/dist/util/safety.js.map +1 -1
  75. package/dist/utils/branchState.js +567 -0
  76. package/dist/utils/branchState.js.map +1 -0
  77. package/package.json +1 -1
  78. package/scripts/update-test-log-assertions.js +73 -0
@@ -39,7 +39,7 @@ function _define_property(obj, key, value) {
39
39
  * Mark packages as completed
40
40
  * Accepts either package names (e.g., "@eldrforge/git-tools") or directory names (e.g., "git-tools")
41
41
  */ async markCompleted(packages) {
42
- this.logger.info(`Marking ${packages.length} package(s) as completed...`);
42
+ this.logger.info(`RECOVERY_MARKING_COMPLETED: Marking packages as completed | Package Count: ${packages.length} | Action: Update checkpoint state | Purpose: Manual recovery`);
43
43
  for (const pkgIdentifier of packages){
44
44
  // Resolve identifier to package name
45
45
  const pkg = this.resolvePackageName(pkgIdentifier);
@@ -50,25 +50,41 @@ function _define_property(obj, key, value) {
50
50
  }
51
51
  // Validate not already completed
52
52
  if (this.checkpoint.state.completed.includes(pkg)) {
53
- this.logger.warn(`Package ${pkg} already completed`);
53
+ this.logger.warn(`RECOVERY_ALREADY_COMPLETED: Package already marked as completed | Package: ${pkg} | Action: Skipping | Status: already-completed`);
54
54
  continue;
55
55
  }
56
56
  // Remove from other states
57
57
  this.removeFromAllStates(pkg);
58
58
  // Add to completed
59
59
  this.checkpoint.state.completed.push(pkg);
60
- this.logger.info(`āœ“ Marked ${pkg} as completed`);
60
+ this.logger.info(`RECOVERY_PACKAGE_COMPLETED: Package marked as completed | Package: ${pkg} | Status: completed | Checkpoint: Updated`);
61
61
  }
62
- // Update ready queue
62
+ // Update ready queue and count what got unblocked
63
+ const beforeSkipped = this.checkpoint.state.skipped.length;
64
+ const beforeReady = this.checkpoint.state.ready.length;
63
65
  this.updateReadyState();
66
+ const afterSkipped = this.checkpoint.state.skipped.length;
67
+ const afterReady = this.checkpoint.state.ready.length;
68
+ const unblockedCount = beforeSkipped - afterSkipped;
69
+ const newReadyCount = afterReady - beforeReady;
64
70
  // Save checkpoint
65
71
  await this.saveCheckpoint();
66
72
  this.logger.info('State updated successfully');
73
+ if (unblockedCount > 0) {
74
+ this.logger.info(`āœ“ Unblocked ${unblockedCount} package(s)`);
75
+ }
76
+ if (newReadyCount > 0) {
77
+ this.logger.info(`āœ“ ${newReadyCount} package(s) ready to execute`);
78
+ }
79
+ if (unblockedCount === 0 && newReadyCount === 0 && this.checkpoint.state.skipped.length > 0) {
80
+ this.logger.warn(`āš ļø No packages unblocked. ${this.checkpoint.state.skipped.length} packages still blocked by dependencies.`);
81
+ this.logger.warn(' Use --status to see what\'s blocking them.');
82
+ }
67
83
  }
68
84
  /**
69
85
  * Mark packages as failed
70
86
  */ async markFailed(packages, reason = 'Manually marked as failed') {
71
- this.logger.info(`Marking ${packages.length} package(s) as failed...`);
87
+ this.logger.info(`RECOVERY_MARKING_FAILED: Marking packages as failed | Package Count: ${packages.length} | Action: Update checkpoint state | Purpose: Skip dependent packages`);
72
88
  for (const pkg of packages){
73
89
  // Validate package exists
74
90
  if (!this.graph.packages.has(pkg)) {
@@ -87,13 +103,13 @@ function _define_property(obj, key, value) {
87
103
  dependents: Array.from(findAllDependents(pkg, this.graph))
88
104
  };
89
105
  this.checkpoint.state.failed.push(failureInfo);
90
- this.logger.info(`āœ— Marked ${pkg} as failed`);
106
+ this.logger.info(`RECOVERY_PACKAGE_FAILED: Package marked as failed | Package: ${pkg} | Status: failed | Checkpoint: Updated`);
91
107
  // Cascade to dependents
92
108
  const dependents = findAllDependents(pkg, this.graph);
93
109
  for (const dep of dependents){
94
110
  this.removeFromAllStates(dep);
95
111
  this.checkpoint.state.skipped.push(dep);
96
- this.logger.warn(`⊘ Skipped ${dep} (depends on failed ${pkg})`);
112
+ this.logger.warn(`RECOVERY_DEPENDENT_SKIPPED: Dependent package skipped | Package: ${dep} | Failed Dependency: ${pkg} | Reason: dependency-failed`);
97
113
  }
98
114
  }
99
115
  await this.saveCheckpoint();
@@ -116,7 +132,7 @@ function _define_property(obj, key, value) {
116
132
  if (!this.checkpoint.state.skipped.includes(pkg)) {
117
133
  this.checkpoint.state.skipped.push(pkg);
118
134
  }
119
- this.logger.info(`⊘ Skipped ${pkg}`);
135
+ this.logger.info(`RECOVERY_PACKAGE_SKIPPED: Package marked as skipped | Package: ${pkg} | Status: skipped | Checkpoint: Updated`);
120
136
  }
121
137
  await this.saveCheckpoint();
122
138
  }
@@ -125,10 +141,10 @@ function _define_property(obj, key, value) {
125
141
  */ async retryFailed(options) {
126
142
  const failed = this.checkpoint.state.failed;
127
143
  if (failed.length === 0) {
128
- this.logger.info('No failed packages to retry');
144
+ this.logger.info('RECOVERY_NO_FAILED: No failed packages found | Action: Nothing to retry | Status: All packages succeeded or skipped');
129
145
  return;
130
146
  }
131
- this.logger.info(`Retrying ${failed.length} failed package(s)...`);
147
+ this.logger.info(`RECOVERY_RETRY_STARTING: Initiating retry for failed packages | Failed Count: ${failed.length} | Action: Reset to pending and retry`);
132
148
  const retriable = [];
133
149
  const nonRetriable = [];
134
150
  for (const failedPkg of failed){
@@ -157,36 +173,36 @@ function _define_property(obj, key, value) {
157
173
  if (this.checkpoint.state.skipped.includes(dependent)) {
158
174
  this.checkpoint.state.skipped = this.checkpoint.state.skipped.filter((p)=>p !== dependent);
159
175
  this.checkpoint.state.pending.push(dependent);
160
- this.logger.info(`↻ ${dependent} moved back to pending (was skipped)`);
176
+ this.logger.info(`RECOVERY_DEPENDENT_RESTORED: Dependent package moved back to pending | Package: ${dependent} | Previous Status: skipped | New Status: pending | Reason: Retry parent package`);
161
177
  }
162
178
  }
163
- this.logger.info(`↻ ${failedPkg.name} moved to pending for retry`);
179
+ this.logger.info(`RECOVERY_PACKAGE_PENDING: Package moved to pending for retry | Package: ${failedPkg.name} | Previous Status: failed | New Status: pending | Action: Will retry`);
164
180
  }
165
181
  // Keep only non-retriable failures in failed state
166
182
  this.checkpoint.state.failed = nonRetriable;
167
183
  // Update ready queue
168
184
  this.updateReadyState();
169
185
  await this.saveCheckpoint();
170
- this.logger.info(`${retriable.length} package(s) reset for retry`);
186
+ this.logger.info(`RECOVERY_RETRY_READY: Packages reset and ready for retry | Package Count: ${retriable.length} | Status: pending | Next: Will execute`);
171
187
  }
172
188
  /**
173
189
  * Skip failed packages and continue with remaining
174
190
  */ async skipFailed() {
175
191
  const failed = this.checkpoint.state.failed.map((f)=>f.name);
176
192
  if (failed.length === 0) {
177
- this.logger.info('No failed packages to skip');
193
+ this.logger.info('RECOVERY_NO_FAILED_TO_SKIP: No failed packages found | Action: Nothing to skip | Status: Clean state');
178
194
  return;
179
195
  }
180
- this.logger.info(`Skipping ${failed.length} failed package(s) and their dependents...`);
196
+ this.logger.info(`RECOVERY_SKIP_FAILED: Skipping failed packages and dependents | Failed Count: ${failed.length} | Action: Mark as skipped | Purpose: Continue with remaining packages`);
181
197
  await this.skipPackages(failed);
182
198
  // Clear failed state
183
199
  this.checkpoint.state.failed = [];
184
- this.logger.info('Failed packages skipped, execution can continue');
200
+ this.logger.info('RECOVERY_SKIP_COMPLETE: Failed packages skipped successfully | Status: Execution can continue | Next: Process remaining packages');
185
201
  }
186
202
  /**
187
203
  * Reset specific package to initial state
188
204
  */ async resetPackage(packageName) {
189
- this.logger.info(`Resetting package: ${packageName}`);
205
+ this.logger.info(`RECOVERY_PACKAGE_RESETTING: Resetting package to initial state | Package: ${packageName} | Action: Clear all state | Purpose: Fresh start`);
190
206
  if (!this.graph.packages.has(packageName)) {
191
207
  throw new Error(`Package not found: ${packageName}`);
192
208
  }
@@ -200,7 +216,7 @@ function _define_property(obj, key, value) {
200
216
  delete this.checkpoint.packageEndTimes[packageName];
201
217
  delete this.checkpoint.packageDurations[packageName];
202
218
  await this.saveCheckpoint();
203
- this.logger.info(`āœ“ ${packageName} reset to initial state`);
219
+ this.logger.info(`RECOVERY_PACKAGE_RESET: Package reset to initial state | Package: ${packageName} | Status: pending | Checkpoint: Updated`);
204
220
  }
205
221
  /**
206
222
  * Validate checkpoint state integrity
@@ -361,6 +377,49 @@ function _define_property(obj, key, value) {
361
377
  }
362
378
  lines.push('');
363
379
  }
380
+ // Skipped packages with dependency details
381
+ if (skipped > 0) {
382
+ lines.push('šŸ”’ Blocked Packages (dependency issues):');
383
+ for (const pkgName of this.checkpoint.state.skipped){
384
+ const deps = this.graph.edges.get(pkgName) || new Set();
385
+ const depStatus = Array.from(deps).map((dep)=>{
386
+ if (this.checkpoint.state.completed.includes(dep) || this.checkpoint.state.skippedNoChanges.includes(dep)) {
387
+ return `${dep} āœ“`;
388
+ } else if (this.checkpoint.state.failed.some((f)=>f.name === dep)) {
389
+ return `${dep} āŒ`;
390
+ } else if (this.checkpoint.state.running.some((r)=>r.name === dep)) {
391
+ return `${dep} ā³`;
392
+ } else if (this.checkpoint.state.skipped.includes(dep)) {
393
+ return `${dep} šŸ”’`;
394
+ } else if (this.checkpoint.state.pending.includes(dep) || this.checkpoint.state.ready.includes(dep)) {
395
+ return `${dep} ā³`;
396
+ } else {
397
+ return `${dep} ā“`;
398
+ }
399
+ });
400
+ lines.push(` • ${pkgName}`);
401
+ if (depStatus.length > 0) {
402
+ lines.push(` Dependencies: ${depStatus.join(', ')}`);
403
+ }
404
+ }
405
+ lines.push('');
406
+ lines.push('Legend: āœ“ = complete, āŒ = failed, ā³ = pending/running, šŸ”’ = blocked');
407
+ lines.push('');
408
+ }
409
+ // Ready to execute
410
+ if (this.checkpoint.state.ready.length > 0) {
411
+ lines.push('ā³ Ready to Execute:');
412
+ for (const pkgName of this.checkpoint.state.ready){
413
+ const deps = this.graph.edges.get(pkgName) || new Set();
414
+ if (deps.size === 0) {
415
+ lines.push(` • ${pkgName} (no dependencies)`);
416
+ } else {
417
+ const depList = Array.from(deps).join(', ');
418
+ lines.push(` • ${pkgName} (depends on: ${depList})`);
419
+ }
420
+ }
421
+ lines.push('');
422
+ }
364
423
  // Recovery hints
365
424
  const hints = this.generateRecoveryHints();
366
425
  if (hints.length > 0) {
@@ -395,7 +454,7 @@ function _define_property(obj, key, value) {
395
454
  /**
396
455
  * Apply multiple recovery options at once
397
456
  */ async applyRecoveryOptions(options) {
398
- this.logger.info('Applying recovery options...');
457
+ this.logger.info('RECOVERY_OPTIONS_APPLYING: Applying recovery options to checkpoint | Purpose: Modify execution state | Options: Complete, fail, skip, retry, reset');
399
458
  if (options.markCompleted && options.markCompleted.length > 0) {
400
459
  await this.markCompleted(options.markCompleted);
401
460
  }
@@ -416,7 +475,7 @@ function _define_property(obj, key, value) {
416
475
  if (options.resetPackage) {
417
476
  await this.resetPackage(options.resetPackage);
418
477
  }
419
- this.logger.info('Recovery options applied successfully');
478
+ this.logger.info('RECOVERY_OPTIONS_APPLIED: Recovery options applied successfully | Status: Checkpoint updated | Next: Resume execution or exit');
420
479
  }
421
480
  /**
422
481
  * Get checkpoint for external access
@@ -434,11 +493,30 @@ function _define_property(obj, key, value) {
434
493
  this.checkpoint.state.skippedNoChanges = this.checkpoint.state.skippedNoChanges.filter((p)=>p !== packageName);
435
494
  }
436
495
  updateReadyState() {
496
+ // CRITICAL FIX: First, re-evaluate skipped packages
497
+ // Packages that were skipped due to failed dependencies might now be eligible
498
+ // to run if those dependencies have been completed (e.g., via --mark-completed)
499
+ const unblocked = [];
500
+ for (const pkg of this.checkpoint.state.skipped){
501
+ const deps = this.graph.edges.get(pkg) || new Set();
502
+ const allDepsCompleted = Array.from(deps).every((dep)=>this.checkpoint.state.completed.includes(dep) || this.checkpoint.state.skippedNoChanges.includes(dep));
503
+ // Check if any dependencies are still failed
504
+ const anyDepsFailed = Array.from(deps).some((dep)=>this.checkpoint.state.failed.some((f)=>f.name === dep));
505
+ if (allDepsCompleted && !anyDepsFailed) {
506
+ unblocked.push(pkg);
507
+ }
508
+ }
509
+ // Move unblocked packages back to pending
510
+ for (const pkg of unblocked){
511
+ this.checkpoint.state.skipped = this.checkpoint.state.skipped.filter((p)=>p !== pkg);
512
+ this.checkpoint.state.pending.push(pkg);
513
+ this.logger.info(`RECOVERY_PACKAGE_UNBLOCKED: Package unblocked due to satisfied dependencies | Package: ${pkg} | Previous Status: skipped | New Status: pending | Reason: Dependencies satisfied`);
514
+ }
437
515
  // Move packages from pending to ready if dependencies met
438
516
  const nowReady = [];
439
517
  for (const pkg of this.checkpoint.state.pending){
440
518
  const deps = this.graph.edges.get(pkg) || new Set();
441
- const allDepsCompleted = Array.from(deps).every((dep)=>this.checkpoint.state.completed.includes(dep));
519
+ const allDepsCompleted = Array.from(deps).every((dep)=>this.checkpoint.state.completed.includes(dep) || this.checkpoint.state.skippedNoChanges.includes(dep));
442
520
  if (allDepsCompleted) {
443
521
  nowReady.push(pkg);
444
522
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RecoveryManager.js","sources":["../../src/execution/RecoveryManager.ts"],"sourcesContent":["import { getLogger } from '../logging';\nimport { DependencyGraph, findAllDependents } from '../util/dependencyGraph';\nimport { ParallelExecutionCheckpoint, FailedPackageSnapshot, RecoveryHint } from '../types/parallelExecution';\nimport { CheckpointManager } from '../util/checkpointManager';\nimport * as path from 'path';\n\nexport interface ValidationResult {\n valid: boolean;\n issues: string[];\n warnings: string[];\n}\n\nexport interface RecoveryOptions {\n markCompleted?: string[];\n markFailed?: string[];\n skipPackages?: string[];\n retryFailed?: boolean;\n skipFailed?: boolean;\n resetPackage?: string;\n maxRetries?: number;\n}\n\n/**\n * RecoveryManager provides granular control over execution state recovery\n */\nexport class RecoveryManager {\n private checkpoint: ParallelExecutionCheckpoint;\n private graph: DependencyGraph;\n private checkpointManager: CheckpointManager;\n private logger = getLogger();\n\n constructor(\n checkpoint: ParallelExecutionCheckpoint,\n graph: DependencyGraph,\n checkpointManager: CheckpointManager\n ) {\n this.checkpoint = checkpoint;\n this.graph = graph;\n this.checkpointManager = checkpointManager;\n }\n\n /**\n * Resolve a package identifier (directory name or package name) to a package name\n */\n private resolvePackageName(identifier: string): string | null {\n // Try exact package name match first\n if (this.graph.packages.has(identifier)) {\n return identifier;\n }\n\n // Try directory name match\n for (const [pkgName, pkgInfo] of this.graph.packages) {\n const dirName = path.basename(pkgInfo.path);\n if (dirName === identifier) {\n return pkgName;\n }\n }\n\n return null;\n }\n\n /**\n * Mark packages as completed\n * Accepts either package names (e.g., \"@eldrforge/git-tools\") or directory names (e.g., \"git-tools\")\n */\n async markCompleted(packages: string[]): Promise<void> {\n this.logger.info(`Marking ${packages.length} package(s) as completed...`);\n\n for (const pkgIdentifier of packages) {\n // Resolve identifier to package name\n const pkg = this.resolvePackageName(pkgIdentifier);\n\n if (!pkg) {\n // List available packages for better error message\n const available = Array.from(this.graph.packages.entries())\n .map(([name, info]) => `${path.basename(info.path)} (${name})`)\n .join(', ');\n throw new Error(`Package not found: ${pkgIdentifier}. Available packages: ${available}`);\n }\n\n // Validate not already completed\n if (this.checkpoint.state.completed.includes(pkg)) {\n this.logger.warn(`Package ${pkg} already completed`);\n continue;\n }\n\n // Remove from other states\n this.removeFromAllStates(pkg);\n\n // Add to completed\n this.checkpoint.state.completed.push(pkg);\n\n this.logger.info(`āœ“ Marked ${pkg} as completed`);\n }\n\n // Update ready queue\n this.updateReadyState();\n\n // Save checkpoint\n await this.saveCheckpoint();\n\n this.logger.info('State updated successfully');\n }\n\n /**\n * Mark packages as failed\n */\n async markFailed(packages: string[], reason: string = 'Manually marked as failed'): Promise<void> {\n this.logger.info(`Marking ${packages.length} package(s) as failed...`);\n\n for (const pkg of packages) {\n // Validate package exists\n if (!this.graph.packages.has(pkg)) {\n throw new Error(`Package not found: ${pkg}`);\n }\n\n // Remove from other states\n this.removeFromAllStates(pkg);\n\n // Add to failed\n const failureInfo: FailedPackageSnapshot = {\n name: pkg,\n error: reason,\n isRetriable: false,\n attemptNumber: 1,\n failedAt: new Date().toISOString(),\n dependencies: Array.from(this.graph.edges.get(pkg) || []),\n dependents: Array.from(findAllDependents(pkg, this.graph))\n };\n\n this.checkpoint.state.failed.push(failureInfo);\n\n this.logger.info(`āœ— Marked ${pkg} as failed`);\n\n // Cascade to dependents\n const dependents = findAllDependents(pkg, this.graph);\n for (const dep of dependents) {\n this.removeFromAllStates(dep);\n this.checkpoint.state.skipped.push(dep);\n this.logger.warn(`⊘ Skipped ${dep} (depends on failed ${pkg})`);\n }\n }\n\n await this.saveCheckpoint();\n }\n\n /**\n * Skip packages and their dependents\n */\n async skipPackages(packages: string[]): Promise<void> {\n this.logger.info(`Skipping ${packages.length} package(s)...`);\n\n const toSkip = new Set<string>(packages);\n\n // Find all dependents\n for (const pkg of packages) {\n const dependents = findAllDependents(pkg, this.graph);\n for (const dep of dependents) {\n toSkip.add(dep);\n }\n }\n\n this.logger.info(`Total packages to skip (including dependents): ${toSkip.size}`);\n\n for (const pkg of toSkip) {\n this.removeFromAllStates(pkg);\n if (!this.checkpoint.state.skipped.includes(pkg)) {\n this.checkpoint.state.skipped.push(pkg);\n }\n this.logger.info(`⊘ Skipped ${pkg}`);\n }\n\n await this.saveCheckpoint();\n }\n\n /**\n * Retry failed packages\n */\n async retryFailed(options?: { maxRetries?: number }): Promise<void> {\n const failed = this.checkpoint.state.failed;\n\n if (failed.length === 0) {\n this.logger.info('No failed packages to retry');\n return;\n }\n\n this.logger.info(`Retrying ${failed.length} failed package(s)...`);\n\n const retriable: FailedPackageSnapshot[] = [];\n const nonRetriable: FailedPackageSnapshot[] = [];\n\n for (const failedPkg of failed) {\n if (failedPkg.isRetriable || options?.maxRetries) {\n retriable.push(failedPkg);\n } else {\n nonRetriable.push(failedPkg);\n }\n }\n\n if (nonRetriable.length > 0) {\n this.logger.warn(`${nonRetriable.length} package(s) are not retriable: ${nonRetriable.map(p => p.name).join(', ')}`);\n if (!options?.maxRetries) {\n this.logger.warn('Use --max-retries to force retry of non-retriable packages');\n }\n }\n\n for (const failedPkg of retriable) {\n // Reset retry count if max retries overridden\n if (options?.maxRetries) {\n this.checkpoint.retryAttempts[failedPkg.name] = 0;\n }\n\n // Move back to pending\n this.removeFromAllStates(failedPkg.name);\n this.checkpoint.state.pending.push(failedPkg.name);\n\n // Un-skip dependents if they were skipped\n for (const dependent of failedPkg.dependents) {\n if (this.checkpoint.state.skipped.includes(dependent)) {\n this.checkpoint.state.skipped = this.checkpoint.state.skipped.filter(p => p !== dependent);\n this.checkpoint.state.pending.push(dependent);\n this.logger.info(`↻ ${dependent} moved back to pending (was skipped)`);\n }\n }\n\n this.logger.info(`↻ ${failedPkg.name} moved to pending for retry`);\n }\n\n // Keep only non-retriable failures in failed state\n this.checkpoint.state.failed = nonRetriable;\n\n // Update ready queue\n this.updateReadyState();\n\n await this.saveCheckpoint();\n\n this.logger.info(`${retriable.length} package(s) reset for retry`);\n }\n\n /**\n * Skip failed packages and continue with remaining\n */\n async skipFailed(): Promise<void> {\n const failed = this.checkpoint.state.failed.map(f => f.name);\n\n if (failed.length === 0) {\n this.logger.info('No failed packages to skip');\n return;\n }\n\n this.logger.info(`Skipping ${failed.length} failed package(s) and their dependents...`);\n\n await this.skipPackages(failed);\n\n // Clear failed state\n this.checkpoint.state.failed = [];\n\n this.logger.info('Failed packages skipped, execution can continue');\n }\n\n /**\n * Reset specific package to initial state\n */\n async resetPackage(packageName: string): Promise<void> {\n this.logger.info(`Resetting package: ${packageName}`);\n\n if (!this.graph.packages.has(packageName)) {\n throw new Error(`Package not found: ${packageName}`);\n }\n\n // Remove from all states\n this.removeFromAllStates(packageName);\n\n // Add back to pending\n this.checkpoint.state.pending.push(packageName);\n\n // Clear retry attempts\n delete this.checkpoint.retryAttempts[packageName];\n delete this.checkpoint.packageStartTimes[packageName];\n delete this.checkpoint.packageEndTimes[packageName];\n delete this.checkpoint.packageDurations[packageName];\n\n await this.saveCheckpoint();\n\n this.logger.info(`āœ“ ${packageName} reset to initial state`);\n }\n\n /**\n * Validate checkpoint state integrity\n */\n validateState(): ValidationResult {\n const issues: string[] = [];\n const warnings: string[] = [];\n\n // Check for duplicates across states\n const allPackages: string[] = [\n ...this.checkpoint.state.pending,\n ...this.checkpoint.state.ready,\n ...this.checkpoint.state.running.map(r => r.name),\n ...this.checkpoint.state.completed,\n ...this.checkpoint.state.failed.map(f => f.name),\n ...this.checkpoint.state.skipped,\n ...this.checkpoint.state.skippedNoChanges\n ];\n\n const duplicates = this.findDuplicates(allPackages);\n if (duplicates.length > 0) {\n issues.push(`Packages in multiple states: ${duplicates.join(', ')}`);\n }\n\n // Check for missing packages\n const missing = this.checkpoint.buildOrder.filter(\n pkg => !allPackages.includes(pkg)\n );\n if (missing.length > 0) {\n issues.push(`Missing packages: ${missing.join(', ')}`);\n }\n\n // Check dependency consistency\n for (const pkg of this.checkpoint.state.completed) {\n const deps = this.graph.edges.get(pkg) || new Set();\n for (const dep of deps) {\n if (!this.checkpoint.state.completed.includes(dep)) {\n warnings.push(`${pkg} completed but dependency ${dep} not completed`);\n }\n }\n }\n\n // Check for stale running packages\n const now = Date.now();\n for (const running of this.checkpoint.state.running) {\n const elapsed = now - new Date(running.startTime).getTime();\n if (elapsed > 3600000) { // 1 hour\n warnings.push(`${running.name} has been running for ${this.formatDuration(elapsed)}`);\n }\n }\n\n return {\n valid: issues.length === 0,\n issues,\n warnings\n };\n }\n\n /**\n * Generate recovery hints based on current state\n */\n generateRecoveryHints(): RecoveryHint[] {\n const hints: RecoveryHint[] = [];\n\n // Check for retriable failures\n const retriableFailed = this.checkpoint.state.failed.filter(f => f.isRetriable);\n if (retriableFailed.length > 0) {\n hints.push({\n type: 'info',\n message: `${retriableFailed.length} package(s) failed with retriable errors`,\n actionable: true,\n suggestedCommand: 'kodrdriv tree [command] --continue --retry-failed'\n });\n }\n\n // Check for non-retriable failures\n const permanentFailed = this.checkpoint.state.failed.filter(f => !f.isRetriable);\n if (permanentFailed.length > 0) {\n hints.push({\n type: 'warning',\n message: `${permanentFailed.length} package(s) failed permanently`,\n actionable: true,\n suggestedCommand: 'kodrdriv tree [command] --continue --skip-failed'\n });\n\n for (const pkg of permanentFailed.slice(0, 3)) { // Limit to first 3\n hints.push({\n type: 'error',\n message: `${pkg.name}: ${pkg.error}`,\n actionable: true,\n suggestedCommand: `# Fix the issue, then:\\nkodrdriv tree [command] --continue --mark-completed \"${path.basename(this.graph.packages.get(pkg.name)?.path || pkg.name)}\"`\n });\n }\n }\n\n // Check for long-running packages\n const now = Date.now();\n for (const running of this.checkpoint.state.running) {\n const elapsed = now - new Date(running.startTime).getTime();\n if (elapsed > 1800000) { // 30 minutes\n hints.push({\n type: 'warning',\n message: `${running.name} has been running for ${this.formatDuration(elapsed)} - may be stuck`,\n actionable: false\n });\n }\n }\n\n // Check for state inconsistencies\n const validation = this.validateState();\n if (!validation.valid) {\n hints.push({\n type: 'error',\n message: 'State inconsistencies detected - checkpoint may be corrupted',\n actionable: true,\n suggestedCommand: 'kodrdriv tree --validate-state'\n });\n }\n\n return hints;\n }\n\n /**\n * Show detailed status\n */\n async showStatus(): Promise<string> {\n const lines: string[] = [];\n\n lines.push('═══════════════════════════════════════');\n lines.push(' Parallel Execution Status');\n lines.push('═══════════════════════════════════════');\n lines.push('');\n lines.push(`Execution ID: ${this.checkpoint.executionId}`);\n lines.push(`Started: ${new Date(this.checkpoint.totalStartTime).toLocaleString()}`);\n lines.push(`Last Updated: ${new Date(this.checkpoint.lastUpdated).toLocaleString()}`);\n lines.push('');\n\n // Progress summary\n const total = this.checkpoint.buildOrder.length;\n const completed = this.checkpoint.state.completed.length;\n const skippedNoChanges = this.checkpoint.state.skippedNoChanges.length;\n const failed = this.checkpoint.state.failed.length;\n const skipped = this.checkpoint.state.skipped.length;\n const running = this.checkpoint.state.running.length;\n const pending = this.checkpoint.state.pending.length + this.checkpoint.state.ready.length;\n\n lines.push('šŸ“Š Progress:');\n lines.push(` Completed: ${completed}/${total} (${Math.round(completed/total*100)}%)`);\n lines.push(` Skipped (no changes): ${skippedNoChanges}`);\n lines.push(` Running: ${running}`);\n lines.push(` Pending: ${pending}`);\n lines.push(` Failed: ${failed}`);\n lines.push(` Skipped (dependency failed): ${skipped}`);\n lines.push('');\n\n // Progress bar\n const progressBar = this.createProgressBar(completed, total);\n lines.push(`Progress: [${progressBar}] ${Math.round(completed/total*100)}%`);\n lines.push('');\n\n // Running packages\n if (running > 0) {\n lines.push('šŸ”„ Currently Running:');\n for (const pkg of this.checkpoint.state.running) {\n const elapsed = Date.now() - new Date(pkg.startTime).getTime();\n lines.push(` • ${pkg.name} (${this.formatDuration(elapsed)})`);\n }\n lines.push('');\n }\n\n // Failed packages\n if (failed > 0) {\n lines.push('āŒ Failed Packages:');\n for (const pkg of this.checkpoint.state.failed) {\n lines.push(` āœ— ${pkg.name}`);\n lines.push(` Error: ${pkg.error}`);\n lines.push(` Retriable: ${pkg.isRetriable ? 'Yes' : 'No'}`);\n lines.push(` Attempts: ${pkg.attemptNumber}`);\n if (pkg.dependents.length > 0) {\n lines.push(` Blocked: ${pkg.dependents.length} dependent(s)`);\n }\n }\n lines.push('');\n }\n\n // Recovery hints\n const hints = this.generateRecoveryHints();\n if (hints.length > 0) {\n lines.push('šŸ’” Recovery Suggestions:');\n for (const hint of hints) {\n const icon = hint.type === 'error' ? 'āŒ' : hint.type === 'warning' ? 'āš ļø' : 'ā„¹ļø';\n lines.push(` ${icon} ${hint.message}`);\n if (hint.suggestedCommand) {\n lines.push(` ${hint.suggestedCommand}`);\n }\n }\n lines.push('');\n }\n\n // State validation\n const validation = this.validateState();\n if (!validation.valid) {\n lines.push('āš ļø State Issues Detected:');\n for (const issue of validation.issues) {\n lines.push(` • ${issue}`);\n }\n lines.push('');\n }\n\n if (validation.warnings.length > 0) {\n lines.push('āš ļø Warnings:');\n for (const warning of validation.warnings) {\n lines.push(` • ${warning}`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Apply multiple recovery options at once\n */\n async applyRecoveryOptions(options: RecoveryOptions): Promise<void> {\n this.logger.info('Applying recovery options...');\n\n if (options.markCompleted && options.markCompleted.length > 0) {\n await this.markCompleted(options.markCompleted);\n }\n\n if (options.markFailed && options.markFailed.length > 0) {\n await this.markFailed(options.markFailed);\n }\n\n if (options.skipPackages && options.skipPackages.length > 0) {\n await this.skipPackages(options.skipPackages);\n }\n\n if (options.retryFailed) {\n await this.retryFailed({ maxRetries: options.maxRetries });\n }\n\n if (options.skipFailed) {\n await this.skipFailed();\n }\n\n if (options.resetPackage) {\n await this.resetPackage(options.resetPackage);\n }\n\n this.logger.info('Recovery options applied successfully');\n }\n\n /**\n * Get checkpoint for external access\n */\n getCheckpoint(): ParallelExecutionCheckpoint {\n return this.checkpoint;\n }\n\n // Private helper methods\n\n private removeFromAllStates(packageName: string): void {\n this.checkpoint.state.pending = this.checkpoint.state.pending.filter(p => p !== packageName);\n this.checkpoint.state.ready = this.checkpoint.state.ready.filter(p => p !== packageName);\n this.checkpoint.state.running = this.checkpoint.state.running.filter(r => r.name !== packageName);\n this.checkpoint.state.completed = this.checkpoint.state.completed.filter(p => p !== packageName);\n this.checkpoint.state.failed = this.checkpoint.state.failed.filter(f => f.name !== packageName);\n this.checkpoint.state.skipped = this.checkpoint.state.skipped.filter(p => p !== packageName);\n this.checkpoint.state.skippedNoChanges = this.checkpoint.state.skippedNoChanges.filter(p => p !== packageName);\n }\n\n private updateReadyState(): void {\n // Move packages from pending to ready if dependencies met\n const nowReady: string[] = [];\n\n for (const pkg of this.checkpoint.state.pending) {\n const deps = this.graph.edges.get(pkg) || new Set();\n const allDepsCompleted = Array.from(deps).every(dep =>\n this.checkpoint.state.completed.includes(dep)\n );\n\n if (allDepsCompleted) {\n nowReady.push(pkg);\n }\n }\n\n for (const pkg of nowReady) {\n this.checkpoint.state.pending = this.checkpoint.state.pending.filter(p => p !== pkg);\n this.checkpoint.state.ready.push(pkg);\n }\n }\n\n private findDuplicates(arr: string[]): string[] {\n const seen = new Set<string>();\n const duplicates = new Set<string>();\n\n for (const item of arr) {\n if (seen.has(item)) {\n duplicates.add(item);\n }\n seen.add(item);\n }\n\n return Array.from(duplicates);\n }\n\n private async saveCheckpoint(): Promise<void> {\n this.checkpoint.lastUpdated = new Date().toISOString();\n await this.checkpointManager.save(this.checkpoint);\n }\n\n private formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n return `${seconds}s`;\n }\n\n private createProgressBar(current: number, total: number, width: number = 30): string {\n const percent = current / total;\n const filled = Math.round(width * percent);\n const empty = width - filled;\n\n return 'ā–ˆ'.repeat(filled) + 'ā–‘'.repeat(empty);\n }\n}\n\n/**\n * Load checkpoint and create recovery manager\n */\nexport async function loadRecoveryManager(\n graph: DependencyGraph,\n outputDirectory?: string\n): Promise<RecoveryManager | null> {\n const checkpointManager = new CheckpointManager(outputDirectory);\n const checkpoint = await checkpointManager.load();\n\n if (!checkpoint) {\n return null;\n }\n\n return new RecoveryManager(checkpoint, graph, checkpointManager);\n}\n"],"names":["RecoveryManager","resolvePackageName","identifier","graph","packages","has","pkgName","pkgInfo","dirName","path","basename","markCompleted","logger","info","length","pkgIdentifier","pkg","available","Array","from","entries","map","name","join","Error","checkpoint","state","completed","includes","warn","removeFromAllStates","push","updateReadyState","saveCheckpoint","markFailed","reason","failureInfo","error","isRetriable","attemptNumber","failedAt","Date","toISOString","dependencies","edges","get","dependents","findAllDependents","failed","dep","skipped","skipPackages","toSkip","Set","add","size","retryFailed","options","retriable","nonRetriable","failedPkg","maxRetries","p","retryAttempts","pending","dependent","filter","skipFailed","f","resetPackage","packageName","packageStartTimes","packageEndTimes","packageDurations","validateState","issues","warnings","allPackages","ready","running","r","skippedNoChanges","duplicates","findDuplicates","missing","buildOrder","deps","now","elapsed","startTime","getTime","formatDuration","valid","generateRecoveryHints","hints","retriableFailed","type","message","actionable","suggestedCommand","permanentFailed","slice","validation","showStatus","lines","executionId","totalStartTime","toLocaleString","lastUpdated","total","Math","round","progressBar","createProgressBar","hint","icon","issue","warning","applyRecoveryOptions","getCheckpoint","nowReady","allDepsCompleted","every","arr","seen","item","checkpointManager","save","ms","seconds","floor","minutes","hours","current","width","percent","filled","empty","repeat","getLogger","loadRecoveryManager","outputDirectory","CheckpointManager","load"],"mappings":"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"}
1
+ {"version":3,"file":"RecoveryManager.js","sources":["../../src/execution/RecoveryManager.ts"],"sourcesContent":["import { getLogger } from '../logging';\nimport { DependencyGraph, findAllDependents } from '../util/dependencyGraph';\nimport { ParallelExecutionCheckpoint, FailedPackageSnapshot, RecoveryHint } from '../types/parallelExecution';\nimport { CheckpointManager } from '../util/checkpointManager';\nimport * as path from 'path';\n\nexport interface ValidationResult {\n valid: boolean;\n issues: string[];\n warnings: string[];\n}\n\nexport interface RecoveryOptions {\n markCompleted?: string[];\n markFailed?: string[];\n skipPackages?: string[];\n retryFailed?: boolean;\n skipFailed?: boolean;\n resetPackage?: string;\n maxRetries?: number;\n}\n\n/**\n * RecoveryManager provides granular control over execution state recovery\n */\nexport class RecoveryManager {\n private checkpoint: ParallelExecutionCheckpoint;\n private graph: DependencyGraph;\n private checkpointManager: CheckpointManager;\n private logger = getLogger();\n\n constructor(\n checkpoint: ParallelExecutionCheckpoint,\n graph: DependencyGraph,\n checkpointManager: CheckpointManager\n ) {\n this.checkpoint = checkpoint;\n this.graph = graph;\n this.checkpointManager = checkpointManager;\n }\n\n /**\n * Resolve a package identifier (directory name or package name) to a package name\n */\n private resolvePackageName(identifier: string): string | null {\n // Try exact package name match first\n if (this.graph.packages.has(identifier)) {\n return identifier;\n }\n\n // Try directory name match\n for (const [pkgName, pkgInfo] of this.graph.packages) {\n const dirName = path.basename(pkgInfo.path);\n if (dirName === identifier) {\n return pkgName;\n }\n }\n\n return null;\n }\n\n /**\n * Mark packages as completed\n * Accepts either package names (e.g., \"@eldrforge/git-tools\") or directory names (e.g., \"git-tools\")\n */\n async markCompleted(packages: string[]): Promise<void> {\n this.logger.info(`RECOVERY_MARKING_COMPLETED: Marking packages as completed | Package Count: ${packages.length} | Action: Update checkpoint state | Purpose: Manual recovery`);\n\n for (const pkgIdentifier of packages) {\n // Resolve identifier to package name\n const pkg = this.resolvePackageName(pkgIdentifier);\n\n if (!pkg) {\n // List available packages for better error message\n const available = Array.from(this.graph.packages.entries())\n .map(([name, info]) => `${path.basename(info.path)} (${name})`)\n .join(', ');\n throw new Error(`Package not found: ${pkgIdentifier}. Available packages: ${available}`);\n }\n\n // Validate not already completed\n if (this.checkpoint.state.completed.includes(pkg)) {\n this.logger.warn(`RECOVERY_ALREADY_COMPLETED: Package already marked as completed | Package: ${pkg} | Action: Skipping | Status: already-completed`);\n continue;\n }\n\n // Remove from other states\n this.removeFromAllStates(pkg);\n\n // Add to completed\n this.checkpoint.state.completed.push(pkg);\n\n this.logger.info(`RECOVERY_PACKAGE_COMPLETED: Package marked as completed | Package: ${pkg} | Status: completed | Checkpoint: Updated`);\n }\n\n // Update ready queue and count what got unblocked\n const beforeSkipped = this.checkpoint.state.skipped.length;\n const beforeReady = this.checkpoint.state.ready.length;\n\n this.updateReadyState();\n\n const afterSkipped = this.checkpoint.state.skipped.length;\n const afterReady = this.checkpoint.state.ready.length;\n\n const unblockedCount = beforeSkipped - afterSkipped;\n const newReadyCount = afterReady - beforeReady;\n\n // Save checkpoint\n await this.saveCheckpoint();\n\n this.logger.info('State updated successfully');\n\n if (unblockedCount > 0) {\n this.logger.info(`āœ“ Unblocked ${unblockedCount} package(s)`);\n }\n if (newReadyCount > 0) {\n this.logger.info(`āœ“ ${newReadyCount} package(s) ready to execute`);\n }\n if (unblockedCount === 0 && newReadyCount === 0 && this.checkpoint.state.skipped.length > 0) {\n this.logger.warn(`āš ļø No packages unblocked. ${this.checkpoint.state.skipped.length} packages still blocked by dependencies.`);\n this.logger.warn(' Use --status to see what\\'s blocking them.');\n }\n }\n\n /**\n * Mark packages as failed\n */\n async markFailed(packages: string[], reason: string = 'Manually marked as failed'): Promise<void> {\n this.logger.info(`RECOVERY_MARKING_FAILED: Marking packages as failed | Package Count: ${packages.length} | Action: Update checkpoint state | Purpose: Skip dependent packages`);\n\n for (const pkg of packages) {\n // Validate package exists\n if (!this.graph.packages.has(pkg)) {\n throw new Error(`Package not found: ${pkg}`);\n }\n\n // Remove from other states\n this.removeFromAllStates(pkg);\n\n // Add to failed\n const failureInfo: FailedPackageSnapshot = {\n name: pkg,\n error: reason,\n isRetriable: false,\n attemptNumber: 1,\n failedAt: new Date().toISOString(),\n dependencies: Array.from(this.graph.edges.get(pkg) || []),\n dependents: Array.from(findAllDependents(pkg, this.graph))\n };\n\n this.checkpoint.state.failed.push(failureInfo);\n\n this.logger.info(`RECOVERY_PACKAGE_FAILED: Package marked as failed | Package: ${pkg} | Status: failed | Checkpoint: Updated`);\n\n // Cascade to dependents\n const dependents = findAllDependents(pkg, this.graph);\n for (const dep of dependents) {\n this.removeFromAllStates(dep);\n this.checkpoint.state.skipped.push(dep);\n this.logger.warn(`RECOVERY_DEPENDENT_SKIPPED: Dependent package skipped | Package: ${dep} | Failed Dependency: ${pkg} | Reason: dependency-failed`);\n }\n }\n\n await this.saveCheckpoint();\n }\n\n /**\n * Skip packages and their dependents\n */\n async skipPackages(packages: string[]): Promise<void> {\n this.logger.info(`Skipping ${packages.length} package(s)...`);\n\n const toSkip = new Set<string>(packages);\n\n // Find all dependents\n for (const pkg of packages) {\n const dependents = findAllDependents(pkg, this.graph);\n for (const dep of dependents) {\n toSkip.add(dep);\n }\n }\n\n this.logger.info(`Total packages to skip (including dependents): ${toSkip.size}`);\n\n for (const pkg of toSkip) {\n this.removeFromAllStates(pkg);\n if (!this.checkpoint.state.skipped.includes(pkg)) {\n this.checkpoint.state.skipped.push(pkg);\n }\n this.logger.info(`RECOVERY_PACKAGE_SKIPPED: Package marked as skipped | Package: ${pkg} | Status: skipped | Checkpoint: Updated`);\n }\n\n await this.saveCheckpoint();\n }\n\n /**\n * Retry failed packages\n */\n async retryFailed(options?: { maxRetries?: number }): Promise<void> {\n const failed = this.checkpoint.state.failed;\n\n if (failed.length === 0) {\n this.logger.info('RECOVERY_NO_FAILED: No failed packages found | Action: Nothing to retry | Status: All packages succeeded or skipped');\n return;\n }\n\n this.logger.info(`RECOVERY_RETRY_STARTING: Initiating retry for failed packages | Failed Count: ${failed.length} | Action: Reset to pending and retry`);\n\n const retriable: FailedPackageSnapshot[] = [];\n const nonRetriable: FailedPackageSnapshot[] = [];\n\n for (const failedPkg of failed) {\n if (failedPkg.isRetriable || options?.maxRetries) {\n retriable.push(failedPkg);\n } else {\n nonRetriable.push(failedPkg);\n }\n }\n\n if (nonRetriable.length > 0) {\n this.logger.warn(`${nonRetriable.length} package(s) are not retriable: ${nonRetriable.map(p => p.name).join(', ')}`);\n if (!options?.maxRetries) {\n this.logger.warn('Use --max-retries to force retry of non-retriable packages');\n }\n }\n\n for (const failedPkg of retriable) {\n // Reset retry count if max retries overridden\n if (options?.maxRetries) {\n this.checkpoint.retryAttempts[failedPkg.name] = 0;\n }\n\n // Move back to pending\n this.removeFromAllStates(failedPkg.name);\n this.checkpoint.state.pending.push(failedPkg.name);\n\n // Un-skip dependents if they were skipped\n for (const dependent of failedPkg.dependents) {\n if (this.checkpoint.state.skipped.includes(dependent)) {\n this.checkpoint.state.skipped = this.checkpoint.state.skipped.filter(p => p !== dependent);\n this.checkpoint.state.pending.push(dependent);\n this.logger.info(`RECOVERY_DEPENDENT_RESTORED: Dependent package moved back to pending | Package: ${dependent} | Previous Status: skipped | New Status: pending | Reason: Retry parent package`);\n }\n }\n\n this.logger.info(`RECOVERY_PACKAGE_PENDING: Package moved to pending for retry | Package: ${failedPkg.name} | Previous Status: failed | New Status: pending | Action: Will retry`);\n }\n\n // Keep only non-retriable failures in failed state\n this.checkpoint.state.failed = nonRetriable;\n\n // Update ready queue\n this.updateReadyState();\n\n await this.saveCheckpoint();\n\n this.logger.info(`RECOVERY_RETRY_READY: Packages reset and ready for retry | Package Count: ${retriable.length} | Status: pending | Next: Will execute`);\n }\n\n /**\n * Skip failed packages and continue with remaining\n */\n async skipFailed(): Promise<void> {\n const failed = this.checkpoint.state.failed.map(f => f.name);\n\n if (failed.length === 0) {\n this.logger.info('RECOVERY_NO_FAILED_TO_SKIP: No failed packages found | Action: Nothing to skip | Status: Clean state');\n return;\n }\n\n this.logger.info(`RECOVERY_SKIP_FAILED: Skipping failed packages and dependents | Failed Count: ${failed.length} | Action: Mark as skipped | Purpose: Continue with remaining packages`);\n\n await this.skipPackages(failed);\n\n // Clear failed state\n this.checkpoint.state.failed = [];\n\n this.logger.info('RECOVERY_SKIP_COMPLETE: Failed packages skipped successfully | Status: Execution can continue | Next: Process remaining packages');\n }\n\n /**\n * Reset specific package to initial state\n */\n async resetPackage(packageName: string): Promise<void> {\n this.logger.info(`RECOVERY_PACKAGE_RESETTING: Resetting package to initial state | Package: ${packageName} | Action: Clear all state | Purpose: Fresh start`);\n\n if (!this.graph.packages.has(packageName)) {\n throw new Error(`Package not found: ${packageName}`);\n }\n\n // Remove from all states\n this.removeFromAllStates(packageName);\n\n // Add back to pending\n this.checkpoint.state.pending.push(packageName);\n\n // Clear retry attempts\n delete this.checkpoint.retryAttempts[packageName];\n delete this.checkpoint.packageStartTimes[packageName];\n delete this.checkpoint.packageEndTimes[packageName];\n delete this.checkpoint.packageDurations[packageName];\n\n await this.saveCheckpoint();\n\n this.logger.info(`RECOVERY_PACKAGE_RESET: Package reset to initial state | Package: ${packageName} | Status: pending | Checkpoint: Updated`);\n }\n\n /**\n * Validate checkpoint state integrity\n */\n validateState(): ValidationResult {\n const issues: string[] = [];\n const warnings: string[] = [];\n\n // Check for duplicates across states\n const allPackages: string[] = [\n ...this.checkpoint.state.pending,\n ...this.checkpoint.state.ready,\n ...this.checkpoint.state.running.map(r => r.name),\n ...this.checkpoint.state.completed,\n ...this.checkpoint.state.failed.map(f => f.name),\n ...this.checkpoint.state.skipped,\n ...this.checkpoint.state.skippedNoChanges\n ];\n\n const duplicates = this.findDuplicates(allPackages);\n if (duplicates.length > 0) {\n issues.push(`Packages in multiple states: ${duplicates.join(', ')}`);\n }\n\n // Check for missing packages\n const missing = this.checkpoint.buildOrder.filter(\n pkg => !allPackages.includes(pkg)\n );\n if (missing.length > 0) {\n issues.push(`Missing packages: ${missing.join(', ')}`);\n }\n\n // Check dependency consistency\n for (const pkg of this.checkpoint.state.completed) {\n const deps = this.graph.edges.get(pkg) || new Set();\n for (const dep of deps) {\n if (!this.checkpoint.state.completed.includes(dep)) {\n warnings.push(`${pkg} completed but dependency ${dep} not completed`);\n }\n }\n }\n\n // Check for stale running packages\n const now = Date.now();\n for (const running of this.checkpoint.state.running) {\n const elapsed = now - new Date(running.startTime).getTime();\n if (elapsed > 3600000) { // 1 hour\n warnings.push(`${running.name} has been running for ${this.formatDuration(elapsed)}`);\n }\n }\n\n return {\n valid: issues.length === 0,\n issues,\n warnings\n };\n }\n\n /**\n * Generate recovery hints based on current state\n */\n generateRecoveryHints(): RecoveryHint[] {\n const hints: RecoveryHint[] = [];\n\n // Check for retriable failures\n const retriableFailed = this.checkpoint.state.failed.filter(f => f.isRetriable);\n if (retriableFailed.length > 0) {\n hints.push({\n type: 'info',\n message: `${retriableFailed.length} package(s) failed with retriable errors`,\n actionable: true,\n suggestedCommand: 'kodrdriv tree [command] --continue --retry-failed'\n });\n }\n\n // Check for non-retriable failures\n const permanentFailed = this.checkpoint.state.failed.filter(f => !f.isRetriable);\n if (permanentFailed.length > 0) {\n hints.push({\n type: 'warning',\n message: `${permanentFailed.length} package(s) failed permanently`,\n actionable: true,\n suggestedCommand: 'kodrdriv tree [command] --continue --skip-failed'\n });\n\n for (const pkg of permanentFailed.slice(0, 3)) { // Limit to first 3\n hints.push({\n type: 'error',\n message: `${pkg.name}: ${pkg.error}`,\n actionable: true,\n suggestedCommand: `# Fix the issue, then:\\nkodrdriv tree [command] --continue --mark-completed \"${path.basename(this.graph.packages.get(pkg.name)?.path || pkg.name)}\"`\n });\n }\n }\n\n // Check for long-running packages\n const now = Date.now();\n for (const running of this.checkpoint.state.running) {\n const elapsed = now - new Date(running.startTime).getTime();\n if (elapsed > 1800000) { // 30 minutes\n hints.push({\n type: 'warning',\n message: `${running.name} has been running for ${this.formatDuration(elapsed)} - may be stuck`,\n actionable: false\n });\n }\n }\n\n // Check for state inconsistencies\n const validation = this.validateState();\n if (!validation.valid) {\n hints.push({\n type: 'error',\n message: 'State inconsistencies detected - checkpoint may be corrupted',\n actionable: true,\n suggestedCommand: 'kodrdriv tree --validate-state'\n });\n }\n\n return hints;\n }\n\n /**\n * Show detailed status\n */\n async showStatus(): Promise<string> {\n const lines: string[] = [];\n\n lines.push('═══════════════════════════════════════');\n lines.push(' Parallel Execution Status');\n lines.push('═══════════════════════════════════════');\n lines.push('');\n lines.push(`Execution ID: ${this.checkpoint.executionId}`);\n lines.push(`Started: ${new Date(this.checkpoint.totalStartTime).toLocaleString()}`);\n lines.push(`Last Updated: ${new Date(this.checkpoint.lastUpdated).toLocaleString()}`);\n lines.push('');\n\n // Progress summary\n const total = this.checkpoint.buildOrder.length;\n const completed = this.checkpoint.state.completed.length;\n const skippedNoChanges = this.checkpoint.state.skippedNoChanges.length;\n const failed = this.checkpoint.state.failed.length;\n const skipped = this.checkpoint.state.skipped.length;\n const running = this.checkpoint.state.running.length;\n const pending = this.checkpoint.state.pending.length + this.checkpoint.state.ready.length;\n\n lines.push('šŸ“Š Progress:');\n lines.push(` Completed: ${completed}/${total} (${Math.round(completed/total*100)}%)`);\n lines.push(` Skipped (no changes): ${skippedNoChanges}`);\n lines.push(` Running: ${running}`);\n lines.push(` Pending: ${pending}`);\n lines.push(` Failed: ${failed}`);\n lines.push(` Skipped (dependency failed): ${skipped}`);\n lines.push('');\n\n // Progress bar\n const progressBar = this.createProgressBar(completed, total);\n lines.push(`Progress: [${progressBar}] ${Math.round(completed/total*100)}%`);\n lines.push('');\n\n // Running packages\n if (running > 0) {\n lines.push('šŸ”„ Currently Running:');\n for (const pkg of this.checkpoint.state.running) {\n const elapsed = Date.now() - new Date(pkg.startTime).getTime();\n lines.push(` • ${pkg.name} (${this.formatDuration(elapsed)})`);\n }\n lines.push('');\n }\n\n // Failed packages\n if (failed > 0) {\n lines.push('āŒ Failed Packages:');\n for (const pkg of this.checkpoint.state.failed) {\n lines.push(` āœ— ${pkg.name}`);\n lines.push(` Error: ${pkg.error}`);\n lines.push(` Retriable: ${pkg.isRetriable ? 'Yes' : 'No'}`);\n lines.push(` Attempts: ${pkg.attemptNumber}`);\n if (pkg.dependents.length > 0) {\n lines.push(` Blocked: ${pkg.dependents.length} dependent(s)`);\n }\n }\n lines.push('');\n }\n\n // Skipped packages with dependency details\n if (skipped > 0) {\n lines.push('šŸ”’ Blocked Packages (dependency issues):');\n for (const pkgName of this.checkpoint.state.skipped) {\n const deps = this.graph.edges.get(pkgName) || new Set();\n const depStatus = Array.from(deps).map(dep => {\n if (this.checkpoint.state.completed.includes(dep) ||\n this.checkpoint.state.skippedNoChanges.includes(dep)) {\n return `${dep} āœ“`;\n } else if (this.checkpoint.state.failed.some(f => f.name === dep)) {\n return `${dep} āŒ`;\n } else if (this.checkpoint.state.running.some(r => r.name === dep)) {\n return `${dep} ā³`;\n } else if (this.checkpoint.state.skipped.includes(dep)) {\n return `${dep} šŸ”’`;\n } else if (this.checkpoint.state.pending.includes(dep) ||\n this.checkpoint.state.ready.includes(dep)) {\n return `${dep} ā³`;\n } else {\n return `${dep} ā“`;\n }\n });\n\n lines.push(` • ${pkgName}`);\n if (depStatus.length > 0) {\n lines.push(` Dependencies: ${depStatus.join(', ')}`);\n }\n }\n lines.push('');\n lines.push('Legend: āœ“ = complete, āŒ = failed, ā³ = pending/running, šŸ”’ = blocked');\n lines.push('');\n }\n\n // Ready to execute\n if (this.checkpoint.state.ready.length > 0) {\n lines.push('ā³ Ready to Execute:');\n for (const pkgName of this.checkpoint.state.ready) {\n const deps = this.graph.edges.get(pkgName) || new Set();\n if (deps.size === 0) {\n lines.push(` • ${pkgName} (no dependencies)`);\n } else {\n const depList = Array.from(deps).join(', ');\n lines.push(` • ${pkgName} (depends on: ${depList})`);\n }\n }\n lines.push('');\n }\n\n // Recovery hints\n const hints = this.generateRecoveryHints();\n if (hints.length > 0) {\n lines.push('šŸ’” Recovery Suggestions:');\n for (const hint of hints) {\n const icon = hint.type === 'error' ? 'āŒ' : hint.type === 'warning' ? 'āš ļø' : 'ā„¹ļø';\n lines.push(` ${icon} ${hint.message}`);\n if (hint.suggestedCommand) {\n lines.push(` ${hint.suggestedCommand}`);\n }\n }\n lines.push('');\n }\n\n // State validation\n const validation = this.validateState();\n if (!validation.valid) {\n lines.push('āš ļø State Issues Detected:');\n for (const issue of validation.issues) {\n lines.push(` • ${issue}`);\n }\n lines.push('');\n }\n\n if (validation.warnings.length > 0) {\n lines.push('āš ļø Warnings:');\n for (const warning of validation.warnings) {\n lines.push(` • ${warning}`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Apply multiple recovery options at once\n */\n async applyRecoveryOptions(options: RecoveryOptions): Promise<void> {\n this.logger.info('RECOVERY_OPTIONS_APPLYING: Applying recovery options to checkpoint | Purpose: Modify execution state | Options: Complete, fail, skip, retry, reset');\n\n if (options.markCompleted && options.markCompleted.length > 0) {\n await this.markCompleted(options.markCompleted);\n }\n\n if (options.markFailed && options.markFailed.length > 0) {\n await this.markFailed(options.markFailed);\n }\n\n if (options.skipPackages && options.skipPackages.length > 0) {\n await this.skipPackages(options.skipPackages);\n }\n\n if (options.retryFailed) {\n await this.retryFailed({ maxRetries: options.maxRetries });\n }\n\n if (options.skipFailed) {\n await this.skipFailed();\n }\n\n if (options.resetPackage) {\n await this.resetPackage(options.resetPackage);\n }\n\n this.logger.info('RECOVERY_OPTIONS_APPLIED: Recovery options applied successfully | Status: Checkpoint updated | Next: Resume execution or exit');\n }\n\n /**\n * Get checkpoint for external access\n */\n getCheckpoint(): ParallelExecutionCheckpoint {\n return this.checkpoint;\n }\n\n // Private helper methods\n\n private removeFromAllStates(packageName: string): void {\n this.checkpoint.state.pending = this.checkpoint.state.pending.filter(p => p !== packageName);\n this.checkpoint.state.ready = this.checkpoint.state.ready.filter(p => p !== packageName);\n this.checkpoint.state.running = this.checkpoint.state.running.filter(r => r.name !== packageName);\n this.checkpoint.state.completed = this.checkpoint.state.completed.filter(p => p !== packageName);\n this.checkpoint.state.failed = this.checkpoint.state.failed.filter(f => f.name !== packageName);\n this.checkpoint.state.skipped = this.checkpoint.state.skipped.filter(p => p !== packageName);\n this.checkpoint.state.skippedNoChanges = this.checkpoint.state.skippedNoChanges.filter(p => p !== packageName);\n }\n\n private updateReadyState(): void {\n // CRITICAL FIX: First, re-evaluate skipped packages\n // Packages that were skipped due to failed dependencies might now be eligible\n // to run if those dependencies have been completed (e.g., via --mark-completed)\n const unblocked: string[] = [];\n for (const pkg of this.checkpoint.state.skipped) {\n const deps = this.graph.edges.get(pkg) || new Set();\n const allDepsCompleted = Array.from(deps).every(dep =>\n this.checkpoint.state.completed.includes(dep) ||\n this.checkpoint.state.skippedNoChanges.includes(dep)\n );\n\n // Check if any dependencies are still failed\n const anyDepsFailed = Array.from(deps).some(dep =>\n this.checkpoint.state.failed.some(f => f.name === dep)\n );\n\n if (allDepsCompleted && !anyDepsFailed) {\n unblocked.push(pkg);\n }\n }\n\n // Move unblocked packages back to pending\n for (const pkg of unblocked) {\n this.checkpoint.state.skipped = this.checkpoint.state.skipped.filter(p => p !== pkg);\n this.checkpoint.state.pending.push(pkg);\n this.logger.info(`RECOVERY_PACKAGE_UNBLOCKED: Package unblocked due to satisfied dependencies | Package: ${pkg} | Previous Status: skipped | New Status: pending | Reason: Dependencies satisfied`);\n }\n\n // Move packages from pending to ready if dependencies met\n const nowReady: string[] = [];\n\n for (const pkg of this.checkpoint.state.pending) {\n const deps = this.graph.edges.get(pkg) || new Set();\n const allDepsCompleted = Array.from(deps).every(dep =>\n this.checkpoint.state.completed.includes(dep) ||\n this.checkpoint.state.skippedNoChanges.includes(dep)\n );\n\n if (allDepsCompleted) {\n nowReady.push(pkg);\n }\n }\n\n for (const pkg of nowReady) {\n this.checkpoint.state.pending = this.checkpoint.state.pending.filter(p => p !== pkg);\n this.checkpoint.state.ready.push(pkg);\n }\n }\n\n private findDuplicates(arr: string[]): string[] {\n const seen = new Set<string>();\n const duplicates = new Set<string>();\n\n for (const item of arr) {\n if (seen.has(item)) {\n duplicates.add(item);\n }\n seen.add(item);\n }\n\n return Array.from(duplicates);\n }\n\n private async saveCheckpoint(): Promise<void> {\n this.checkpoint.lastUpdated = new Date().toISOString();\n await this.checkpointManager.save(this.checkpoint);\n }\n\n private formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n return `${seconds}s`;\n }\n\n private createProgressBar(current: number, total: number, width: number = 30): string {\n const percent = current / total;\n const filled = Math.round(width * percent);\n const empty = width - filled;\n\n return 'ā–ˆ'.repeat(filled) + 'ā–‘'.repeat(empty);\n }\n}\n\n/**\n * Load checkpoint and create recovery manager\n */\nexport async function loadRecoveryManager(\n graph: DependencyGraph,\n outputDirectory?: string\n): Promise<RecoveryManager | null> {\n const checkpointManager = new CheckpointManager(outputDirectory);\n const checkpoint = await checkpointManager.load();\n\n if (!checkpoint) {\n return null;\n }\n\n return new RecoveryManager(checkpoint, graph, checkpointManager);\n}\n"],"names":["RecoveryManager","resolvePackageName","identifier","graph","packages","has","pkgName","pkgInfo","dirName","path","basename","markCompleted","logger","info","length","pkgIdentifier","pkg","available","Array","from","entries","map","name","join","Error","checkpoint","state","completed","includes","warn","removeFromAllStates","push","beforeSkipped","skipped","beforeReady","ready","updateReadyState","afterSkipped","afterReady","unblockedCount","newReadyCount","saveCheckpoint","markFailed","reason","failureInfo","error","isRetriable","attemptNumber","failedAt","Date","toISOString","dependencies","edges","get","dependents","findAllDependents","failed","dep","skipPackages","toSkip","Set","add","size","retryFailed","options","retriable","nonRetriable","failedPkg","maxRetries","p","retryAttempts","pending","dependent","filter","skipFailed","f","resetPackage","packageName","packageStartTimes","packageEndTimes","packageDurations","validateState","issues","warnings","allPackages","running","r","skippedNoChanges","duplicates","findDuplicates","missing","buildOrder","deps","now","elapsed","startTime","getTime","formatDuration","valid","generateRecoveryHints","hints","retriableFailed","type","message","actionable","suggestedCommand","permanentFailed","slice","validation","showStatus","lines","executionId","totalStartTime","toLocaleString","lastUpdated","total","Math","round","progressBar","createProgressBar","depStatus","some","depList","hint","icon","issue","warning","applyRecoveryOptions","getCheckpoint","unblocked","allDepsCompleted","every","anyDepsFailed","nowReady","arr","seen","item","checkpointManager","save","ms","seconds","floor","minutes","hours","current","width","percent","filled","empty","repeat","getLogger","loadRecoveryManager","outputDirectory","CheckpointManager","load"],"mappings":"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"}
@@ -88,11 +88,11 @@ function _define_property(obj, key, value) {
88
88
  let totalPackages = 0;
89
89
  pool.on('execution:started', ({ totalPackages: total })=>{
90
90
  totalPackages = total;
91
- logger.info(`\nšŸ“¦ Executing ${total} packages in parallel\n`);
91
+ logger.info(`\nPARALLEL_EXECUTION_STARTING: Initiating parallel package execution | Package Count: ${total} | Mode: parallel | Strategy: dependency-aware`);
92
92
  });
93
93
  pool.on('package:started', ({ packageName })=>{
94
94
  if (config.verbose || config.debug) {
95
- logger.info(`ā–¶ļø Started: ${packageName}`);
95
+ logger.info(`PACKAGE_STARTED: Package execution initiated | Package: ${packageName} | Status: running`);
96
96
  }
97
97
  });
98
98
  pool.on('package:completed', ({ packageName, result })=>{
@@ -100,45 +100,45 @@ function _define_property(obj, key, value) {
100
100
  const percent = Math.round(completedCount / totalPackages * 100);
101
101
  const elapsed = Math.round((Date.now() - startTime) / 1000);
102
102
  if (config.debug) {
103
- logger.info(`āœ… Completed: ${packageName} (${result.duration}ms) [${completedCount}/${totalPackages} - ${percent}% - ${elapsed}s elapsed]`);
103
+ logger.info(`PACKAGE_COMPLETED: Package execution finished successfully | Package: ${packageName} | Duration: ${result.duration}ms | Progress: ${completedCount}/${totalPackages} (${percent}%) | Elapsed: ${elapsed}s`);
104
104
  } else if (config.verbose) {
105
- logger.info(`āœ… Completed: ${packageName} [${completedCount}/${totalPackages}]`);
105
+ logger.info(`PACKAGE_COMPLETED: Package execution finished | Package: ${packageName} | Progress: ${completedCount}/${totalPackages}`);
106
106
  } else {
107
107
  // Minimal output
108
- logger.info(`[${completedCount}/${totalPackages}] āœ… ${packageName}`);
108
+ logger.info(`PROGRESS: [${completedCount}/${totalPackages}] Package completed: ${packageName}`);
109
109
  }
110
110
  });
111
111
  pool.on('package:failed', ({ packageName, error })=>{
112
- logger.error(`āŒ Failed: ${packageName} - ${error.message}`);
112
+ logger.error(`PACKAGE_FAILED: Package execution failed | Package: ${packageName} | Error: ${error.message} | Status: error`);
113
113
  });
114
114
  pool.on('package:retrying', ({ packageName, attemptNumber })=>{
115
- logger.warn(`šŸ”„ Retrying: ${packageName} (attempt ${attemptNumber})`);
115
+ logger.warn(`PACKAGE_RETRYING: Retrying package execution | Package: ${packageName} | Attempt: ${attemptNumber} | Status: retrying`);
116
116
  });
117
117
  pool.on('package:skipped', ({ packageName, reason })=>{
118
- logger.warn(`⊘ Skipped: ${packageName} (${reason})`);
118
+ logger.warn(`PACKAGE_SKIPPED: Package skipped due to dependency failure | Package: ${packageName} | Reason: ${reason} | Status: skipped`);
119
119
  });
120
120
  pool.on('package:skipped-no-changes', ({ packageName })=>{
121
121
  if (config.verbose || config.debug) {
122
- logger.info(`⊘ Skipped: ${packageName} (no code changes)`);
122
+ logger.info(`PACKAGE_SKIPPED_NO_CHANGES: Package skipped due to no code changes | Package: ${packageName} | Reason: no-code-changes | Status: skipped`);
123
123
  }
124
124
  });
125
125
  pool.on('checkpoint:saved', ()=>{
126
126
  if (config.debug) {
127
- logger.debug('šŸ’¾ Checkpoint saved');
127
+ logger.debug('CHECKPOINT_SAVED: Execution checkpoint saved | Purpose: Recovery support | Action: State persisted to disk');
128
128
  }
129
129
  });
130
130
  pool.on('execution:completed', ({ result })=>{
131
131
  const totalTime = Math.round((Date.now() - startTime) / 1000);
132
- logger.info(`\n✨ Parallel execution completed in ${totalTime}s`);
132
+ logger.info(`\nPARALLEL_EXECUTION_COMPLETED: Parallel execution finished | Duration: ${totalTime}s | Status: completed`);
133
133
  if (config.verbose || config.debug) {
134
- logger.info(`\nMetrics:`);
135
- logger.info(` Total packages: ${result.totalPackages}`);
136
- logger.info(` Completed: ${result.completed.length}`);
137
- logger.info(` Skipped (no changes): ${result.skippedNoChanges.length}`);
138
- logger.info(` Skipped (dependency failed): ${result.skipped.length}`);
139
- logger.info(` Failed: ${result.failed.length}`);
140
- logger.info(` Peak concurrency: ${result.metrics.peakConcurrency}`);
141
- logger.info(` Average concurrency: ${result.metrics.averageConcurrency.toFixed(1)}`);
134
+ logger.info(`\nEXECUTION_METRICS: Performance and execution statistics:`);
135
+ logger.info(` METRIC_TOTAL_PACKAGES: ${result.totalPackages}`);
136
+ logger.info(` METRIC_COMPLETED: ${result.completed.length} packages successfully completed`);
137
+ logger.info(` METRIC_SKIPPED_NO_CHANGES: ${result.skippedNoChanges.length} packages skipped (no changes)`);
138
+ logger.info(` METRIC_SKIPPED_DEPENDENCIES: ${result.skipped.length} packages skipped (dependency failures)`);
139
+ logger.info(` METRIC_FAILED: ${result.failed.length} packages failed`);
140
+ logger.info(` METRIC_PEAK_CONCURRENCY: ${result.metrics.peakConcurrency} packages running simultaneously`);
141
+ logger.info(` METRIC_AVG_CONCURRENCY: ${result.metrics.averageConcurrency.toFixed(1)} average concurrent packages`);
142
142
  }
143
143
  });
144
144
  }