@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.
Files changed (79) 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-IMPROVEMENTS-IMPLEMENTED.md +439 -0
  10. package/PARALLEL-PUBLISH-QUICK-REFERENCE.md +375 -0
  11. package/PARALLEL_EXECUTION_FIX.md +2 -2
  12. package/PUBLISH_IMPROVEMENTS_IMPLEMENTED.md +294 -0
  13. package/VERSION-AUDIT-FIX.md +333 -0
  14. package/dist/application.js +6 -6
  15. package/dist/application.js.map +1 -1
  16. package/dist/arguments.js +43 -13
  17. package/dist/arguments.js.map +1 -1
  18. package/dist/commands/audio-commit.js +18 -18
  19. package/dist/commands/audio-commit.js.map +1 -1
  20. package/dist/commands/audio-review.js +32 -32
  21. package/dist/commands/audio-review.js.map +1 -1
  22. package/dist/commands/clean.js +9 -9
  23. package/dist/commands/clean.js.map +1 -1
  24. package/dist/commands/commit.js +20 -20
  25. package/dist/commands/commit.js.map +1 -1
  26. package/dist/commands/development.js +91 -90
  27. package/dist/commands/development.js.map +1 -1
  28. package/dist/commands/link.js +36 -36
  29. package/dist/commands/link.js.map +1 -1
  30. package/dist/commands/publish.js +345 -225
  31. package/dist/commands/publish.js.map +1 -1
  32. package/dist/commands/release.js +14 -14
  33. package/dist/commands/release.js.map +1 -1
  34. package/dist/commands/review.js +15 -17
  35. package/dist/commands/review.js.map +1 -1
  36. package/dist/commands/select-audio.js +5 -5
  37. package/dist/commands/select-audio.js.map +1 -1
  38. package/dist/commands/tree.js +75 -34
  39. package/dist/commands/tree.js.map +1 -1
  40. package/dist/commands/unlink.js +39 -39
  41. package/dist/commands/unlink.js.map +1 -1
  42. package/dist/commands/updates.js +150 -14
  43. package/dist/commands/updates.js.map +1 -1
  44. package/dist/commands/versions.js +14 -13
  45. package/dist/commands/versions.js.map +1 -1
  46. package/dist/constants.js +1 -1
  47. package/dist/content/diff.js +5 -5
  48. package/dist/content/diff.js.map +1 -1
  49. package/dist/content/files.js +2 -2
  50. package/dist/content/files.js.map +1 -1
  51. package/dist/content/log.js +3 -3
  52. package/dist/content/log.js.map +1 -1
  53. package/dist/execution/CommandValidator.js +6 -6
  54. package/dist/execution/CommandValidator.js.map +1 -1
  55. package/dist/execution/DynamicTaskPool.js +33 -10
  56. package/dist/execution/DynamicTaskPool.js.map +1 -1
  57. package/dist/execution/RecoveryManager.js +99 -21
  58. package/dist/execution/RecoveryManager.js.map +1 -1
  59. package/dist/execution/TreeExecutionAdapter.js +65 -48
  60. package/dist/execution/TreeExecutionAdapter.js.map +1 -1
  61. package/dist/main.js +2 -2
  62. package/dist/main.js.map +1 -1
  63. package/dist/util/checkpointManager.js +4 -4
  64. package/dist/util/checkpointManager.js.map +1 -1
  65. package/dist/util/dependencyGraph.js +2 -2
  66. package/dist/util/dependencyGraph.js.map +1 -1
  67. package/dist/util/fileLock.js +1 -1
  68. package/dist/util/fileLock.js.map +1 -1
  69. package/dist/util/general.js +148 -15
  70. package/dist/util/general.js.map +1 -1
  71. package/dist/util/interactive.js +2 -2
  72. package/dist/util/interactive.js.map +1 -1
  73. package/dist/util/performance.js.map +1 -1
  74. package/dist/util/safety.js +13 -13
  75. package/dist/util/safety.js.map +1 -1
  76. package/dist/utils/branchState.js +567 -0
  77. package/dist/utils/branchState.js.map +1 -0
  78. package/package.json +1 -1
  79. package/scripts/update-test-log-assertions.js +73 -0
@@ -9,8 +9,8 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
9
9
  * Scans git history for X.X.X-dev.0 commits and tags them
10
10
  */ async function createRetroactiveTags(workingBranch, isDryRun, logger, tagPrefix = 'working/') {
11
11
  logger.info('');
12
- logger.info('🔍 Scanning git history for past release points to tag...');
13
- logger.info(' (Looking for X.X.X-dev.0 version bump commits)');
12
+ logger.info('DEV_TAG_SCAN_STARTING: Scanning git history for past release points | Purpose: Create retroactive tags | Pattern: X.X.X-dev.0 version bumps');
13
+ logger.info('DEV_TAG_SCAN_PATTERN: Looking for development version bump commits | Version Format: X.X.X-dev.0 | Purpose: Identify release points');
14
14
  logger.info('');
15
15
  try {
16
16
  // Get all commits on working branch with oneline format
@@ -21,7 +21,7 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
21
21
  // Match patterns like: "4.4.52-dev.0" or "chore: bump version to 4.4.52-dev.0"
22
22
  return /\b\d+\.\d+\.\d+-dev\.0\b/.test(line);
23
23
  });
24
- logger.info(`📊 Found ${devCommits.length} potential dev version commits`);
24
+ logger.info(`DEV_TAG_COMMITS_FOUND: Found potential development version commits | Count: ${devCommits.length} | Status: Analyzing for tag creation`);
25
25
  const tagsCreated = [];
26
26
  const tagsSkipped = [];
27
27
  for (const commitLine of devCommits){
@@ -47,20 +47,20 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
47
47
  await run(`git tag ${workingTagName} ${sha}`);
48
48
  tagsCreated.push(workingTagName);
49
49
  } else {
50
- logger.info(` Would create: ${workingTagName} at ${sha.substring(0, 7)}`);
50
+ logger.info(`DEV_TAG_DRY_RUN: Would create retroactive tag | Mode: dry-run | Tag: ${workingTagName} | Commit: ${sha.substring(0, 7)}`);
51
51
  tagsCreated.push(workingTagName);
52
52
  }
53
53
  }
54
54
  logger.info('');
55
55
  if (tagsCreated.length > 0 && !isDryRun) {
56
- logger.info(`📤 Pushing ${tagsCreated.length} new retroactive tags to origin...`);
56
+ logger.info(`DEV_TAG_PUSHING: Pushing retroactive tags to remote | Count: ${tagsCreated.length} | Remote: origin | Command: git push origin --tags`);
57
57
  await run('git push origin --tags');
58
58
  logger.info('');
59
- logger.info(`✅ Created and pushed ${tagsCreated.length} retroactive tags:`);
60
- tagsCreated.forEach((tag)=>logger.info(` - ${tag}`));
59
+ logger.info(`DEV_TAG_PUSH_SUCCESS: Successfully created and pushed retroactive tags | Count: ${tagsCreated.length} | Remote: origin | Status: completed`);
60
+ tagsCreated.forEach((tag)=>logger.info(`DEV_TAG_CREATED: Retroactive tag created | Tag: ${tag} | Status: pushed`));
61
61
  } else if (tagsCreated.length > 0 && isDryRun) {
62
- logger.info(`Would create and push ${tagsCreated.length} retroactive tags:`);
63
- tagsCreated.forEach((tag)=>logger.info(` - ${tag}`));
62
+ logger.info(`DEV_TAG_DRY_RUN_SUMMARY: Would create and push retroactive tags | Mode: dry-run | Count: ${tagsCreated.length}`);
63
+ tagsCreated.forEach((tag)=>logger.info(`DEV_TAG_DRY_RUN_TAG: Would create tag | Tag: ${tag} | Mode: dry-run`));
64
64
  }
65
65
  if (tagsSkipped.length > 0) {
66
66
  logger.verbose('');
@@ -68,12 +68,12 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
68
68
  tagsSkipped.forEach((tag)=>logger.verbose(` - ${tag}`));
69
69
  }
70
70
  if (tagsCreated.length === 0 && tagsSkipped.length === 0) {
71
- logger.info('â„šī¸ No dev version commits found in history');
71
+ logger.info('DEV_TAG_NO_COMMITS: No development version commits found in history | Pattern: X.X.X-dev.0 | Status: Nothing to tag | Action: No retroactive tags created');
72
72
  }
73
73
  logger.info('');
74
74
  } catch (error) {
75
- logger.warn(`âš ī¸ Could not create retroactive tags: ${error.message}`);
76
- logger.warn(' You can tag past releases manually if needed');
75
+ logger.warn(`DEV_TAG_CREATION_FAILED: Unable to create retroactive tags | Error: ${error.message} | Impact: Past releases not tagged | Alternative: Manual tagging available`);
76
+ logger.warn('DEV_TAG_MANUAL_OPTION: Manual tagging option available | Action: Use git tag manually for past releases | Purpose: Tag historical releases');
77
77
  // Don't throw - retroactive tagging is optional
78
78
  }
79
79
  }
@@ -82,24 +82,24 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
82
82
  */ const execute = async (runConfig)=>{
83
83
  const isDryRun = runConfig.dryRun || false;
84
84
  const logger = getDryRunLogger(isDryRun);
85
- logger.info('🔄 Navigating to working branch for active development...');
85
+ logger.info('DEV_BRANCH_NAVIGATION: Navigating to working branch for development | Purpose: Start development cycle | Next: Version bump and sync');
86
86
  try {
87
87
  var _runConfig_development, _runConfig_development1, _runConfig_development2;
88
88
  // Get current branch
89
89
  const currentBranch = isDryRun ? 'mock-branch' : await getCurrentBranch();
90
- logger.info(`📍 Currently on branch: ${currentBranch}`);
90
+ logger.info(`DEV_CURRENT_BRANCH: Current branch identified | Branch: ${currentBranch} | Action: Determine working branch`);
91
91
  // Find the working/development branch from configuration
92
92
  let workingBranch = 'working'; // Default fallback
93
93
  if (runConfig.branches) {
94
94
  const configuredDevBranch = findDevelopmentBranch(runConfig.branches);
95
95
  if (configuredDevBranch) {
96
96
  workingBranch = configuredDevBranch;
97
- logger.info(`đŸŽ¯ Found configured working branch: ${workingBranch}`);
97
+ logger.info(`DEV_WORKING_BRANCH_CONFIGURED: Using configured working branch | Branch: ${workingBranch} | Source: config | Current: ${currentBranch}`);
98
98
  } else {
99
- logger.info(`đŸŽ¯ No working branch configured, using default: ${workingBranch}`);
99
+ logger.info(`DEV_WORKING_BRANCH_DEFAULT: No working branch configured | Branch: ${workingBranch} | Source: default | Current: ${currentBranch}`);
100
100
  }
101
101
  } else {
102
- logger.info(`đŸŽ¯ No branch configuration found, using default working branch: ${workingBranch}`);
102
+ logger.info(`DEV_WORKING_BRANCH_NO_CONFIG: No branch configuration found | Branch: ${workingBranch} | Source: default | Current: ${currentBranch}`);
103
103
  }
104
104
  // Track what actions are taken to determine the appropriate return message
105
105
  let branchCreated = false;
@@ -133,24 +133,24 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
133
133
  }
134
134
  }
135
135
  }
136
- logger.info(`đŸˇī¸ Using prerelease tag: ${prereleaseTag}`);
137
- logger.info(`📈 Using increment level: ${incrementLevel}`);
136
+ logger.info(`DEV_VERSION_CONFIG: Development version configuration | Prerelease Tag: ${prereleaseTag} | Increment Level: ${incrementLevel}`);
137
+ logger.info(`DEV_VERSION_STRATEGY: Version increment strategy | Level: ${incrementLevel} | Tag: ${prereleaseTag} | Purpose: Development version management`);
138
138
  // Step 1: Fetch latest remote information
139
139
  if (!isDryRun) {
140
- logger.info('📡 Fetching latest remote information...');
140
+ logger.info('DEV_GIT_FETCH: Fetching latest remote information | Remote: origin | Purpose: Ensure sync before branch operations');
141
141
  try {
142
142
  await run('git fetch origin');
143
- logger.info('✅ Fetched latest remote information');
143
+ logger.info('DEV_GIT_FETCH_SUCCESS: Successfully fetched remote information | Remote: origin | Status: up-to-date');
144
144
  } catch (error) {
145
- logger.warn(`âš ī¸ Could not fetch from remote: ${error.message}`);
145
+ logger.warn(`DEV_GIT_FETCH_FAILED: Unable to fetch remote | Remote: origin | Error: ${error.message} | Impact: May have stale branch info`);
146
146
  }
147
147
  } else {
148
- logger.info('Would fetch latest remote information');
148
+ logger.info('DEV_GIT_FETCH_DRY_RUN: Would fetch latest remote information | Mode: dry-run | Remote: origin');
149
149
  }
150
150
  // Special case: If currently on development branch, merge development into working
151
151
  if (currentBranch === 'development') {
152
152
  if (!isDryRun) {
153
- logger.info('🔄 Currently on development branch, merging into working...');
153
+ logger.info('DEV_MERGE_STARTING: Currently on development branch, merging into working | Source: development | Target: working | Purpose: Sync branches before development');
154
154
  await run(`git checkout ${workingBranch}`);
155
155
  await run(`git merge development --no-ff -m "Merge development into working for continued development"`);
156
156
  await run('npm install');
@@ -163,7 +163,7 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
163
163
  // Stay on working branch for development (removed checkout development)
164
164
  mergedDevelopmentIntoWorking = true;
165
165
  } else {
166
- logger.info('Would merge development into working and stay on working branch');
166
+ logger.info('DEV_MERGE_DRY_RUN: Would merge development into working | Mode: dry-run | Source: development | Target: working');
167
167
  mergedDevelopmentIntoWorking = true;
168
168
  }
169
169
  }
@@ -171,17 +171,17 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
171
171
  if (!isDryRun && !mergedDevelopmentIntoWorking) {
172
172
  const workingBranchExists = await localBranchExists(workingBranch);
173
173
  if (!workingBranchExists) {
174
- logger.info(`🌟 Working branch '${workingBranch}' doesn't exist, creating it...`);
174
+ logger.info(`DEV_BRANCH_CREATING: Working branch does not exist, creating now | Branch: ${workingBranch} | Action: Create and checkout | Source: current HEAD`);
175
175
  await run(`git checkout -b ${workingBranch}`);
176
- logger.info(`✅ Created and switched to ${workingBranch}`);
176
+ logger.info(`DEV_BRANCH_CREATED: Successfully created and switched to branch | Branch: ${workingBranch} | Status: checked-out`);
177
177
  branchCreated = true;
178
178
  } else if (currentBranch !== workingBranch) {
179
- logger.info(`🔄 Switching to ${workingBranch}...`);
179
+ logger.info(`DEV_BRANCH_SWITCHING: Switching to working branch | Branch: ${workingBranch} | Action: checkout | Previous: ${currentBranch}`);
180
180
  await run(`git checkout ${workingBranch}`);
181
- logger.info(`✅ Switched to ${workingBranch}`);
181
+ logger.info(`DEV_BRANCH_SWITCHED: Successfully switched to branch | Branch: ${workingBranch} | Status: checked-out`);
182
182
  branchUpdated = true;
183
183
  } else {
184
- logger.info(`✅ Already on working branch: ${workingBranch}`);
184
+ logger.info(`DEV_BRANCH_CURRENT: Already on working branch | Branch: ${workingBranch} | Status: no-switch-needed`);
185
185
  alreadyOnBranch = true;
186
186
  }
187
187
  } else if (!mergedDevelopmentIntoWorking) {
@@ -194,31 +194,33 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
194
194
  } else {
195
195
  alreadyOnBranch = true;
196
196
  }
197
- logger.info(`Would switch to ${workingBranch} branch (creating if needed)`);
198
- logger.info(`Would sync ${workingBranch} with remote to avoid conflicts`);
197
+ logger.info(`DEV_BRANCH_DRY_RUN: Would switch to working branch | Mode: dry-run | Branch: ${workingBranch} | Action: Create if needed`);
198
+ logger.info(`DEV_SYNC_DRY_RUN: Would sync branch with remote | Mode: dry-run | Branch: ${workingBranch} | Purpose: Avoid conflicts`);
199
199
  }
200
200
  // Step 2.1: Sync with remote working branch to avoid conflicts
201
201
  if (!isDryRun) {
202
202
  try {
203
- logger.info(`🔄 Syncing ${workingBranch} with remote to avoid conflicts...`);
203
+ logger.info(`DEV_BRANCH_SYNCING: Synchronizing working branch with remote | Branch: ${workingBranch} | Remote: origin/${workingBranch} | Purpose: Avoid conflicts`);
204
204
  const remoteExists = await run(`git ls-remote --exit-code --heads origin ${workingBranch}`).then(()=>true).catch(()=>false);
205
205
  if (remoteExists) {
206
- await run(`git pull origin ${workingBranch} --no-edit`);
207
- logger.info(`✅ Synced ${workingBranch} with remote`);
206
+ // Use explicit fetch+merge instead of pull to avoid git config conflicts
207
+ await run(`git fetch origin ${workingBranch}`);
208
+ await run(`git merge origin/${workingBranch} --no-ff --no-edit`);
209
+ logger.info(`DEV_BRANCH_SYNCED: Successfully synchronized with remote | Branch: ${workingBranch} | Remote: origin/${workingBranch} | Status: in-sync`);
208
210
  } else {
209
- logger.info(`â„šī¸ No remote ${workingBranch} branch found, will be created on first push`);
211
+ logger.info(`DEV_REMOTE_BRANCH_NOT_FOUND: No remote branch exists | Branch: ${workingBranch} | Remote: origin | Action: Will be created on first push`);
210
212
  }
211
213
  } catch (error) {
212
214
  if (error.message && error.message.includes('CONFLICT')) {
213
- logger.error(`❌ Merge conflicts detected when syncing ${workingBranch} with remote`);
214
- logger.error(` Please resolve the conflicts manually and then run:`);
215
- logger.error(` 1. Resolve conflicts in the files`);
216
- logger.error(` 2. git add <resolved-files>`);
217
- logger.error(` 3. git commit`);
218
- logger.error(` 4. kodrdriv development (to continue)`);
215
+ logger.error(`DEV_MERGE_CONFLICTS: Merge conflicts detected when syncing with remote | Branch: ${workingBranch} | Remote: origin | Status: conflicts-detected`);
216
+ logger.error(`DEV_CONFLICT_RESOLUTION: Manual conflict resolution required:`);
217
+ logger.error(` Step 1: Resolve conflicts in the files`);
218
+ logger.error(` Step 2: Stage resolved files | Command: git add <resolved-files>`);
219
+ logger.error(` Step 3: Complete merge | Command: git commit`);
220
+ logger.error(` Step 4: Resume development | Command: kodrdriv development`);
219
221
  throw new Error(`Merge conflicts detected when syncing ${workingBranch} with remote. Please resolve conflicts manually.`);
220
222
  } else {
221
- logger.warn(`âš ī¸ Could not sync with remote ${workingBranch}: ${error.message}`);
223
+ logger.warn(`DEV_SYNC_FAILED: Could not sync with remote | Branch: ${workingBranch} | Remote: origin | Error: ${error.message}`);
222
224
  }
223
225
  }
224
226
  }
@@ -230,48 +232,48 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
230
232
  const targetBranch = allBranchConfig && ((_allBranchConfig_workingBranch = allBranchConfig[workingBranch]) === null || _allBranchConfig_workingBranch === void 0 ? void 0 : _allBranchConfig_workingBranch.targetBranch) || 'main';
231
233
  const targetBranchExists = await localBranchExists(targetBranch);
232
234
  if (targetBranchExists) {
233
- logger.info(`🔄 Syncing ${workingBranch} with target branch '${targetBranch}'...`);
235
+ logger.info(`DEV_TARGET_SYNC: Syncing working branch with target branch | Working: ${workingBranch} | Target: ${targetBranch} | Strategy: fast-forward`);
234
236
  try {
235
237
  await run(`git merge ${targetBranch} --ff-only`);
236
- logger.info(`✅ Fast-forward merged ${targetBranch} into ${workingBranch}`);
238
+ logger.info(`DEV_TARGET_MERGED_FF: Fast-forward merged target into working | Target: ${targetBranch} | Working: ${workingBranch} | Status: merged`);
237
239
  } catch (error) {
238
240
  // Fast-forward failed, might need regular merge
239
241
  if (error.message && error.message.includes('Not possible to fast-forward')) {
240
- logger.warn(`âš ī¸ Cannot fast-forward ${targetBranch} into ${workingBranch}`);
241
- logger.info(` Attempting regular merge...`);
242
+ logger.warn(`DEV_NO_FAST_FORWARD: Cannot fast-forward merge | Target: ${targetBranch} | Working: ${workingBranch} | Reason: Divergent history`);
243
+ logger.info(`DEV_REGULAR_MERGE_ATTEMPTING: Attempting regular merge | Strategy: no-ff | Purpose: Sync branches`);
242
244
  try {
243
245
  await run(`git merge ${targetBranch} --no-ff -m "Merge ${targetBranch} into ${workingBranch} for sync"`);
244
- logger.info(`✅ Merged ${targetBranch} into ${workingBranch}`);
246
+ logger.info(`DEV_TARGET_MERGED: Merged target into working | Target: ${targetBranch} | Working: ${workingBranch} | Status: merged`);
245
247
  // Run npm install after merge
246
- logger.info('đŸ“Ļ Running npm install after merge...');
248
+ logger.info('DEV_POST_MERGE_INSTALL: Running npm install after merge | Command: npm install | Purpose: Update dependencies');
247
249
  await run('npm install');
248
250
  // Check if npm install created changes
249
251
  const gitStatus = await run('git status --porcelain');
250
252
  if (gitStatus.stdout.trim()) {
251
- logger.info('📝 Committing changes from npm install...');
253
+ logger.info('DEV_POST_MERGE_COMMIT: Committing changes from npm install | Files: package-lock.json | Purpose: Finalize merge');
252
254
  await run('git add -A');
253
255
  await run('git commit -m "chore: update package-lock.json after merge"');
254
256
  }
255
257
  } catch (mergeError) {
256
258
  if (mergeError.message && mergeError.message.includes('CONFLICT')) {
257
- logger.error(`❌ Merge conflicts detected when merging ${targetBranch} into ${workingBranch}`);
258
- logger.error(` Please resolve the conflicts manually and then run:`);
259
- logger.error(` 1. Resolve conflicts in the files`);
260
- logger.error(` 2. git add <resolved-files>`);
261
- logger.error(` 3. git commit`);
262
- logger.error(` 4. npm install`);
263
- logger.error(` 5. kodrdriv development (to continue)`);
259
+ logger.error(`DEV_MERGE_CONFLICTS: Merge conflicts detected | Target: ${targetBranch} | Working: ${workingBranch} | Status: conflicts-detected`);
260
+ logger.error(`DEV_CONFLICT_RESOLUTION: Manual conflict resolution required:`);
261
+ logger.error(` Step 1: Resolve conflicts in the files`);
262
+ logger.error(` Step 2: Stage resolved files | Command: git add <resolved-files>`);
263
+ logger.error(` Step 3: Complete merge | Command: git commit`);
264
+ logger.error(` Step 4: Update dependencies | Command: npm install`);
265
+ logger.error(` Step 5: Resume development | Command: kodrdriv development`);
264
266
  throw new Error(`Merge conflicts detected when merging ${targetBranch} into ${workingBranch}. Please resolve conflicts manually.`);
265
267
  } else {
266
268
  throw mergeError;
267
269
  }
268
270
  }
269
271
  } else {
270
- logger.warn(`âš ī¸ Could not merge ${targetBranch} into ${workingBranch}: ${error.message}`);
272
+ logger.warn(`DEV_TARGET_MERGE_FAILED: Could not merge target into working | Target: ${targetBranch} | Working: ${workingBranch} | Error: ${error.message}`);
271
273
  }
272
274
  }
273
275
  } else {
274
- logger.info(`â„šī¸ Target branch '${targetBranch}' does not exist, skipping target sync`);
276
+ logger.info(`DEV_TARGET_NOT_EXISTS: Target branch does not exist | Branch: ${targetBranch} | Action: Skipping target sync | Status: no-target-branch`);
275
277
  }
276
278
  } else {
277
279
  logger.info('Would sync working branch with target branch (main) if it exists');
@@ -280,45 +282,45 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
280
282
  if (!isDryRun) {
281
283
  const developmentBranchExists = await localBranchExists('development');
282
284
  if (developmentBranchExists) {
283
- logger.info('🔄 Merging latest changes from development branch...');
285
+ logger.info('DEV_DEVELOPMENT_MERGE: Merging latest changes from development branch | Source: development | Target: ' + workingBranch + ' | Purpose: Sync development changes');
284
286
  try {
285
287
  await run(`git merge development --no-ff -m "Merge latest development changes into ${workingBranch}"`);
286
- logger.info('✅ Successfully merged development changes');
288
+ logger.info('DEV_DEVELOPMENT_MERGED: Successfully merged development changes | Source: development | Target: ' + workingBranch + ' | Status: merged');
287
289
  // Run npm install after merge to update dependencies
288
- logger.info('đŸ“Ļ Running npm install after merge...');
290
+ logger.info('DEV_DEVELOPMENT_INSTALL: Running npm install after merge | Command: npm install | Purpose: Update dependencies');
289
291
  await run('npm install');
290
292
  // Check if npm install created any changes (e.g., package-lock.json)
291
293
  const gitStatus = await run('git status --porcelain');
292
294
  if (gitStatus.stdout.trim()) {
293
- logger.info('📝 Committing changes from npm install...');
295
+ logger.info('DEV_POST_MERGE_COMMIT: Committing changes from npm install | Files: package-lock.json | Purpose: Finalize merge');
294
296
  await run('git add -A');
295
297
  await run(`git commit -m "chore: update package-lock.json after merge"`);
296
- logger.info('✅ Changes committed');
298
+ logger.info('DEV_CHANGES_COMMITTED: Changes committed successfully | Files: package-lock.json | Status: committed');
297
299
  }
298
300
  } catch (error) {
299
301
  if (error.message && error.message.includes('CONFLICT')) {
300
- logger.error(`❌ Merge conflicts detected when merging development into ${workingBranch}`);
301
- logger.error(` Please resolve the conflicts manually and then run:`);
302
- logger.error(` 1. Resolve conflicts in the files`);
303
- logger.error(` 2. git add <resolved-files>`);
304
- logger.error(` 3. git commit`);
305
- logger.error(` 4. npm install`);
306
- logger.error(` 5. npm version pre${incrementLevel} --preid=${prereleaseTag}`);
302
+ logger.error(`DEV_DEV_MERGE_CONFLICTS: Merge conflicts detected | Source: development | Target: ${workingBranch} | Status: conflicts-detected`);
303
+ logger.error(`DEV_DEV_CONFLICT_RESOLUTION: Manual conflict resolution required:`);
304
+ logger.error(` Step 1: Resolve conflicts in the files`);
305
+ logger.error(` Step 2: Stage resolved files | Command: git add <resolved-files>`);
306
+ logger.error(` Step 3: Complete merge | Command: git commit`);
307
+ logger.error(` Step 4: Update dependencies | Command: npm install`);
308
+ logger.error(` Step 5: Bump version | Command: npm version pre${incrementLevel} --preid=${prereleaseTag}`);
307
309
  throw new Error(`Merge conflicts detected when merging development into ${workingBranch}. Please resolve conflicts manually.`);
308
310
  } else {
309
- logger.error(`❌ Failed to merge development into ${workingBranch}: ${error.message}`);
311
+ logger.error(`DEV_DEV_MERGE_FAILED: Failed to merge development branch | Source: development | Target: ${workingBranch} | Error: ${error.message}`);
310
312
  throw error;
311
313
  }
312
314
  }
313
315
  } else if (!developmentBranchExists) {
314
- logger.info('â„šī¸ Development branch does not exist, skipping merge step');
316
+ logger.info('DEV_NO_DEV_BRANCH: Development branch does not exist | Branch: development | Action: Skipping merge step | Status: not-found');
315
317
  } else {
316
- logger.info('â„šī¸ Already merged from development (was on development branch)');
318
+ logger.info('DEV_ALREADY_MERGED: Already merged from development | Reason: Was on development branch | Action: Skipping');
317
319
  }
318
320
  } else {
319
- logger.info('Would merge latest changes from development branch if it exists');
320
- logger.info('Would run npm install after merge');
321
- logger.info('Would commit any changes from npm install (e.g., package-lock.json)');
321
+ logger.info('DEV_DEV_MERGE_DRY_RUN: Would merge development if exists | Mode: dry-run | Source: development | Target: working');
322
+ logger.info('DEV_INSTALL_DRY_RUN: Would run npm install after merge | Mode: dry-run | Command: npm install');
323
+ logger.info('DEV_COMMIT_DRY_RUN: Would commit npm install changes | Mode: dry-run | Files: package-lock.json');
322
324
  }
323
325
  // Step 4.5: Create retroactive tags if requested (one-time operation)
324
326
  if ((_runConfig_development1 = runConfig.development) === null || _runConfig_development1 === void 0 ? void 0 : _runConfig_development1.createRetroactiveTags) {
@@ -335,7 +337,7 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
335
337
  const currentVersion = packageJson.version;
336
338
  // If current version already has the dev tag, we're done
337
339
  if (currentVersion.includes(`-${prereleaseTag}.`)) {
338
- logger.info(`✅ Already on working branch with development version ${currentVersion}`);
340
+ logger.info(`DEV_ALREADY_DEV_VERSION: Already on working branch with development version | Branch: ${workingBranch} | Version: ${currentVersion} | Status: no-bump-needed`);
339
341
  return 'Already on working branch with development version';
340
342
  }
341
343
  } catch {
@@ -355,13 +357,13 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
355
357
  const tagPrefix = ((_runConfig_development4 = runConfig.development) === null || _runConfig_development4 === void 0 ? void 0 : _runConfig_development4.workingTagPrefix) || 'working/';
356
358
  const workingTagName = `${tagPrefix}v${currentVersion}`;
357
359
  if (!isDryRun) {
358
- logger.info(`đŸˇī¸ Current version is ${currentVersion} (release version)`);
360
+ logger.info(`DEV_TAG_RELEASE_VERSION: Current version is release version | Version: ${currentVersion} | Type: release | Action: Will tag before bump`);
359
361
  logger.verbose(`Checking if tag ${workingTagName} exists...`);
360
362
  // Check if tag already exists
361
363
  const tagExistsResult = await run(`git tag -l "${workingTagName}"`);
362
364
  const tagExists = tagExistsResult.stdout.trim() !== '';
363
365
  if (tagExists) {
364
- logger.info(`â„šī¸ Tag ${workingTagName} already exists, skipping tag creation`);
366
+ logger.info(`DEV_TAG_EXISTS: Tag already exists | Tag: ${workingTagName} | Action: Skipping tag creation | Status: already-tagged`);
365
367
  } else {
366
368
  // Create tag on current commit (working branch at release version)
367
369
  logger.verbose(`Creating tag ${workingTagName} at current HEAD...`);
@@ -369,12 +371,11 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
369
371
  // Push tag to remote
370
372
  logger.verbose(`Pushing tag ${workingTagName} to origin...`);
371
373
  await run(`git push origin ${workingTagName}`);
372
- logger.info(`✅ Tagged working branch: ${workingTagName}`);
373
- logger.info(` 📝 Release notes for v${currentVersion} can be generated from:`);
374
- logger.info(` kodrdriv release --from {previous-tag} --to ${workingTagName}`);
374
+ logger.info(`DEV_TAG_CREATED: Tagged working branch | Tag: ${workingTagName} | Version: ${currentVersion} | Status: tagged-and-pushed`);
375
+ logger.info(`DEV_TAG_RELEASE_NOTES_HINT: Release notes can be generated | Version: v${currentVersion} | Command: kodrdriv release --from {previous-tag} --to ${workingTagName}`);
375
376
  }
376
377
  } else {
377
- logger.info(`Would tag working branch with ${workingTagName} (current version: ${currentVersion})`);
378
+ logger.info(`DEV_TAG_DRY_RUN: Would tag working branch | Mode: dry-run | Tag: ${workingTagName} | Version: ${currentVersion}`);
378
379
  }
379
380
  } else if (currentVersion) {
380
381
  logger.verbose(`Current version is ${currentVersion} (prerelease), skipping tag creation`);
@@ -383,8 +384,8 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
383
384
  }
384
385
  } catch (error) {
385
386
  if (!isDryRun) {
386
- logger.warn(`âš ī¸ Could not tag working branch: ${error.message}`);
387
- logger.warn(' This is not critical - you can tag manually later');
387
+ logger.warn(`DEV_TAG_FAILED: Could not tag working branch | Error: ${error.message} | Impact: Not critical | Alternative: Manual tagging`);
388
+ logger.warn('DEV_TAG_MANUAL: Manual tagging option available | Action: Tag manually later | Purpose: Mark release point');
388
389
  } else {
389
390
  logger.info('Would tag working branch with current release version if applicable');
390
391
  }
@@ -401,12 +402,12 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
401
402
  'major'
402
403
  ].includes(incrementLevel)) {
403
404
  versionCommand = `pre${incrementLevel}`;
404
- logger.info(`🚀 Bumping ${incrementLevel} version with prerelease tag '${prereleaseTag}'...`);
405
+ logger.info(`DEV_VERSION_BUMPING: Bumping version with prerelease tag | Level: ${incrementLevel} | Tag: ${prereleaseTag} | Command: npm version`);
405
406
  } else {
406
407
  // Explicit version like "3.5.0"
407
408
  const cleanVersion = incrementLevel.replace(/^v/, '');
408
409
  versionCommand = `${cleanVersion}-${prereleaseTag}.0`;
409
- logger.info(`🚀 Setting explicit version ${versionCommand}...`);
410
+ logger.info(`DEV_VERSION_EXPLICIT: Setting explicit version | Version: ${versionCommand} | Type: explicit`);
410
411
  }
411
412
  if (!isDryRun) {
412
413
  try {
@@ -416,7 +417,7 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
416
417
  'major'
417
418
  ].includes(incrementLevel) ? await run(`npm version ${versionCommand} --preid=${prereleaseTag}`) : await run(`npm version ${versionCommand}`);
418
419
  const newVersion = versionResult.stdout.trim();
419
- logger.info(`✅ Version bumped to: ${newVersion}`);
420
+ logger.info(`DEV_VERSION_BUMPED: Version bumped successfully | New Version: ${newVersion} | Status: completed`);
420
421
  // Return appropriate message based on what actions were taken
421
422
  if (mergedDevelopmentIntoWorking) {
422
423
  return 'Merged development into working and ready for development';
@@ -430,7 +431,7 @@ import { KODRDRIV_DEFAULTS } from '../constants.js';
430
431
  return `Ready for development on ${workingBranch} with version ${newVersion}`;
431
432
  }
432
433
  } catch (error) {
433
- logger.error(`❌ Failed to bump version: ${error.message}`);
434
+ logger.error(`DEV_VERSION_BUMP_FAILED: Failed to bump version | Error: ${error.message} | Impact: Version not updated`);
434
435
  throw new Error(`Failed to bump ${incrementLevel} version: ${error.message}`);
435
436
  }
436
437
  } else {