@eldrforge/kodrdriv 1.2.27 → 1.2.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AI-FRIENDLY-LOGGING-GUIDE.md +237 -0
- package/AI-LOGGING-MIGRATION-COMPLETE.md +371 -0
- package/ALREADY-PUBLISHED-PACKAGES-FIX.md +264 -0
- package/AUDIT-BRANCHES-PROGRESS-FIX.md +90 -0
- package/AUDIT-EXAMPLE-OUTPUT.md +113 -0
- package/CHECKPOINT-RECOVERY-FIX.md +450 -0
- package/LOGGING-MIGRATION-STATUS.md +186 -0
- package/PARALLEL-PUBLISH-DEBUGGING-GUIDE.md +441 -0
- package/PARALLEL-PUBLISH-FIXES-IMPLEMENTED.md +405 -0
- package/PARALLEL-PUBLISH-LOGGING-FIXES.md +274 -0
- package/PARALLEL-PUBLISH-QUICK-REFERENCE.md +375 -0
- package/PARALLEL_EXECUTION_FIX.md +2 -2
- package/PUBLISH_IMPROVEMENTS_IMPLEMENTED.md +4 -5
- package/VERSION-AUDIT-FIX.md +333 -0
- package/dist/application.js +6 -6
- package/dist/application.js.map +1 -1
- package/dist/arguments.js +43 -13
- package/dist/arguments.js.map +1 -1
- package/dist/commands/audio-commit.js +18 -18
- package/dist/commands/audio-commit.js.map +1 -1
- package/dist/commands/audio-review.js +32 -32
- package/dist/commands/audio-review.js.map +1 -1
- package/dist/commands/clean.js +9 -9
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/commit.js +20 -20
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/development.js +88 -89
- package/dist/commands/development.js.map +1 -1
- package/dist/commands/link.js +36 -36
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/publish.js +318 -220
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/release.js +14 -14
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/review.js +15 -17
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/select-audio.js +5 -5
- package/dist/commands/select-audio.js.map +1 -1
- package/dist/commands/tree.js +134 -39
- package/dist/commands/tree.js.map +1 -1
- package/dist/commands/unlink.js +39 -39
- package/dist/commands/unlink.js.map +1 -1
- package/dist/commands/updates.js +150 -14
- package/dist/commands/updates.js.map +1 -1
- package/dist/commands/versions.js +14 -13
- package/dist/commands/versions.js.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/content/diff.js +5 -5
- package/dist/content/diff.js.map +1 -1
- package/dist/content/files.js +2 -2
- package/dist/content/files.js.map +1 -1
- package/dist/content/log.js +3 -3
- package/dist/content/log.js.map +1 -1
- package/dist/execution/CommandValidator.js +6 -6
- package/dist/execution/CommandValidator.js.map +1 -1
- package/dist/execution/DynamicTaskPool.js +129 -19
- package/dist/execution/DynamicTaskPool.js.map +1 -1
- package/dist/execution/RecoveryManager.js +99 -21
- package/dist/execution/RecoveryManager.js.map +1 -1
- package/dist/execution/TreeExecutionAdapter.js +23 -20
- package/dist/execution/TreeExecutionAdapter.js.map +1 -1
- package/dist/main.js +2 -2
- package/dist/main.js.map +1 -1
- package/dist/util/checkpointManager.js +4 -4
- package/dist/util/checkpointManager.js.map +1 -1
- package/dist/util/dependencyGraph.js +2 -2
- package/dist/util/dependencyGraph.js.map +1 -1
- package/dist/util/fileLock.js +1 -1
- package/dist/util/fileLock.js.map +1 -1
- package/dist/util/general.js +148 -15
- package/dist/util/general.js.map +1 -1
- package/dist/util/interactive.js +2 -2
- package/dist/util/interactive.js.map +1 -1
- package/dist/util/performance.js.map +1 -1
- package/dist/util/safety.js +13 -13
- package/dist/util/safety.js.map +1 -1
- package/dist/utils/branchState.js +567 -0
- package/dist/utils/branchState.js.map +1 -0
- package/package.json +4 -4
- package/scripts/update-test-log-assertions.js +73 -0
package/dist/content/log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sources":["../../src/content/log.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { ExitError } from '../error/ExitError';\nimport { getLogger } from '../logging';\nimport { run } from '@eldrforge/git-tools';\nimport { DEFAULT_GIT_COMMAND_MAX_BUFFER } from '../constants';\n\nexport interface Instance {\n get(): Promise<string>;\n}\n\nexport const create = async (options: { from?: string, to?: string, limit?: number, currentBranchOnly?: boolean }): Promise<Instance> => {\n const logger = getLogger();\n\n async function get(): Promise<string> {\n try {\n logger.verbose('Gathering change information from Git');\n\n try {\n logger.debug('Executing git log');\n // Build git log range\n let range = '';\n let extraArgs = '';\n // If currentBranchOnly, show only commits unique to HEAD vs. to-branch (or main/master if not provided)\n if (options.currentBranchOnly) {\n const toBranch = options.to || 'main'; // Default to 'main' if not provided\n range = `${toBranch}..HEAD`;\n } else if (options.from && options.to) {\n range = `${options.from}..${options.to}`;\n } else if (options.from) {\n range = `${options.from}`;\n } else if (options.to) {\n range = `${options.to}`;\n } // else, no range: show all\n\n if (options.limit && options.limit > 0) {\n extraArgs += ` -n ${options.limit}`;\n }\n const gitLogCmd = `git log${range ? ' ' + range : ''}${extraArgs}`;\n logger.debug('Git log command: %s', gitLogCmd);\n const { stdout, stderr } = await run(gitLogCmd, { maxBuffer: DEFAULT_GIT_COMMAND_MAX_BUFFER });\n if (stderr) {\n logger.warn('Git log produced stderr: %s', stderr);\n }\n logger.debug('Git log output: %s', stdout);\n return stdout;\n } catch (error: any) {\n // Check if this is an empty repository (no commits) scenario\n const errorMessage = error.message || '';\n const isEmptyRepo = errorMessage.includes('does not have any commits yet') ||\n errorMessage.includes('bad default revision') ||\n errorMessage.includes('unknown revision or path not in the working tree') ||\n errorMessage.includes('ambiguous argument \\'HEAD\\'');\n\n if (isEmptyRepo) {\n logger.debug('Empty repository detected (no commits): %s', errorMessage);\n logger.verbose('No git history available, returning empty log context');\n return ''; // Return empty string for empty repositories\n }\n\n logger.error('Failed to execute git log: %s', error.message);\n throw error;\n }\n } catch (error: any) {\n // Check again at the outer level in case the error wasn't caught by the inner try-catch\n const errorMessage = error.message || '';\n const isEmptyRepo = errorMessage.includes('does not have any commits yet') ||\n errorMessage.includes('bad default revision') ||\n errorMessage.includes('unknown revision or path not in the working tree') ||\n errorMessage.includes('ambiguous argument \\'HEAD\\'');\n\n if (isEmptyRepo) {\n logger.debug('Empty repository detected at outer level: %s', errorMessage);\n logger.verbose('No git history available, returning empty log context');\n return ''; // Return empty string for empty repositories\n }\n\n logger.error('Error occurred during gather change phase: %s %s', error.message, error.stack);\n throw new ExitError('Error occurred during gather change phase');\n }\n }\n\n return { get };\n}\n\n"],"names":["create","options","logger","getLogger","get","verbose","debug","range","extraArgs","currentBranchOnly","toBranch","to","from","limit","gitLogCmd","stdout","stderr","run","maxBuffer","DEFAULT_GIT_COMMAND_MAX_BUFFER","warn","error","errorMessage","message","isEmptyRepo","includes","stack","ExitError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"log.js","sources":["../../src/content/log.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { ExitError } from '../error/ExitError';\nimport { getLogger } from '../logging';\nimport { run } from '@eldrforge/git-tools';\nimport { DEFAULT_GIT_COMMAND_MAX_BUFFER } from '../constants';\n\nexport interface Instance {\n get(): Promise<string>;\n}\n\nexport const create = async (options: { from?: string, to?: string, limit?: number, currentBranchOnly?: boolean }): Promise<Instance> => {\n const logger = getLogger();\n\n async function get(): Promise<string> {\n try {\n logger.verbose('Gathering change information from Git');\n\n try {\n logger.debug('Executing git log');\n // Build git log range\n let range = '';\n let extraArgs = '';\n // If currentBranchOnly, show only commits unique to HEAD vs. to-branch (or main/master if not provided)\n if (options.currentBranchOnly) {\n const toBranch = options.to || 'main'; // Default to 'main' if not provided\n range = `${toBranch}..HEAD`;\n } else if (options.from && options.to) {\n range = `${options.from}..${options.to}`;\n } else if (options.from) {\n range = `${options.from}`;\n } else if (options.to) {\n range = `${options.to}`;\n } // else, no range: show all\n\n if (options.limit && options.limit > 0) {\n extraArgs += ` -n ${options.limit}`;\n }\n const gitLogCmd = `git log${range ? ' ' + range : ''}${extraArgs}`;\n logger.debug('Git log command: %s', gitLogCmd);\n const { stdout, stderr } = await run(gitLogCmd, { maxBuffer: DEFAULT_GIT_COMMAND_MAX_BUFFER });\n if (stderr) {\n logger.warn('GIT_LOG_STDERR: Git log produced stderr output | Stderr: %s | Impact: May indicate warnings', stderr);\n }\n logger.debug('Git log output: %s', stdout);\n return stdout;\n } catch (error: any) {\n // Check if this is an empty repository (no commits) scenario\n const errorMessage = error.message || '';\n const isEmptyRepo = errorMessage.includes('does not have any commits yet') ||\n errorMessage.includes('bad default revision') ||\n errorMessage.includes('unknown revision or path not in the working tree') ||\n errorMessage.includes('ambiguous argument \\'HEAD\\'');\n\n if (isEmptyRepo) {\n logger.debug('Empty repository detected (no commits): %s', errorMessage);\n logger.verbose('No git history available, returning empty log context');\n return ''; // Return empty string for empty repositories\n }\n\n logger.error('GIT_LOG_FAILED: Failed to execute git log command | Error: %s | Impact: Cannot gather commit history', error.message);\n throw error;\n }\n } catch (error: any) {\n // Check again at the outer level in case the error wasn't caught by the inner try-catch\n const errorMessage = error.message || '';\n const isEmptyRepo = errorMessage.includes('does not have any commits yet') ||\n errorMessage.includes('bad default revision') ||\n errorMessage.includes('unknown revision or path not in the working tree') ||\n errorMessage.includes('ambiguous argument \\'HEAD\\'');\n\n if (isEmptyRepo) {\n logger.debug('Empty repository detected at outer level: %s', errorMessage);\n logger.verbose('No git history available, returning empty log context');\n return ''; // Return empty string for empty repositories\n }\n\n logger.error('LOG_GATHER_ERROR: Error during change gathering phase | Error: %s | Stack: %s | Impact: Cannot collect log', error.message, error.stack);\n throw new ExitError('Error occurred during gather change phase');\n }\n }\n\n return { get };\n}\n\n"],"names":["create","options","logger","getLogger","get","verbose","debug","range","extraArgs","currentBranchOnly","toBranch","to","from","limit","gitLogCmd","stdout","stderr","run","maxBuffer","DEFAULT_GIT_COMMAND_MAX_BUFFER","warn","error","errorMessage","message","isEmptyRepo","includes","stack","ExitError"],"mappings":"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"}
|
|
@@ -116,21 +116,21 @@ function _define_property(obj, key, value) {
|
|
|
116
116
|
* Log validation results
|
|
117
117
|
*/ static logValidation(result) {
|
|
118
118
|
if (!result.valid) {
|
|
119
|
-
this.logger.error('
|
|
119
|
+
this.logger.error('VALIDATOR_FAILED: Command validation failed for parallel execution | Error Count: ' + result.issues.length + ' | Impact: Cannot proceed safely');
|
|
120
120
|
for (const issue of result.issues){
|
|
121
|
-
this.logger.error(`
|
|
121
|
+
this.logger.error(`VALIDATOR_ERROR_DETAIL: Validation issue | Issue: ${issue}`);
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
if (result.warnings.length > 0) {
|
|
125
|
-
this.logger.warn('
|
|
125
|
+
this.logger.warn('VALIDATOR_WARNINGS: Command validation warnings for parallel execution | Warning Count: ' + result.warnings.length + ' | Impact: May cause issues');
|
|
126
126
|
for (const warning of result.warnings){
|
|
127
|
-
this.logger.warn(`
|
|
127
|
+
this.logger.warn(`VALIDATOR_WARNING_DETAIL: Validation warning | Warning: ${warning}`);
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
if (result.recommendations.length > 0 && this.logger.verbose) {
|
|
131
|
-
this.logger.info('
|
|
131
|
+
this.logger.info('VALIDATOR_RECOMMENDATIONS: Command validation recommendations | Count: ' + result.recommendations.length + ' | Purpose: Improve parallel execution');
|
|
132
132
|
for (const rec of result.recommendations){
|
|
133
|
-
this.logger.info(`
|
|
133
|
+
this.logger.info(`VALIDATOR_RECOMMENDATION_DETAIL: ${rec}`);
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandValidator.js","sources":["../../src/execution/CommandValidator.ts"],"sourcesContent":["import { getLogger } from '../logging';\n\nexport interface ValidationResult {\n valid: boolean;\n issues: string[];\n warnings: string[];\n recommendations: string[];\n}\n\n/**\n * CommandValidator checks if commands are safe for parallel execution\n */\nexport class CommandValidator {\n private static logger = getLogger();\n\n /**\n * Validate a command for parallel execution\n */\n static validateForParallel(command: string, builtInCommand?: string): ValidationResult {\n const issues: string[] = [];\n const warnings: string[] = [];\n const recommendations: string[] = [];\n\n // Check for inherently unsafe operations\n const unsafePatterns = [\n { pattern: /git\\s+checkout/, message: 'Branch switching is not safe for parallel execution' },\n { pattern: /git\\s+switch/, message: 'Branch switching is not safe for parallel execution' },\n { pattern: /git\\s+rebase/, message: 'Rebase operations should not run in parallel' },\n { pattern: /git\\s+merge/, message: 'Merge operations should not run in parallel' },\n { pattern: /rm\\s+-rf\\s+\\//, message: 'Dangerous deletion commands detected' },\n { pattern: /sudo/, message: 'Sudo commands should not run in parallel' },\n { pattern: /format/, message: 'Format commands may be destructive' }\n ];\n\n for (const { pattern, message } of unsafePatterns) {\n if (pattern.test(command)) {\n issues.push(message);\n }\n }\n\n // Check for potentially problematic operations\n const warningPatterns = [\n { pattern: /npm\\s+(link|unlink)/, message: 'npm link/unlink may conflict in parallel execution' },\n { pattern: /npm\\s+install/, message: 'npm install in parallel may cause lock file conflicts' },\n { pattern: /npm\\s+ci/, message: 'npm ci in parallel may cause lock file conflicts' },\n { pattern: /package-lock\\.json/, message: 'Operations modifying package-lock.json may conflict' },\n { pattern: /node_modules/, message: 'Operations in node_modules may conflict' }\n ];\n\n for (const { pattern, message } of warningPatterns) {\n if (pattern.test(command)) {\n warnings.push(message);\n }\n }\n\n // Built-in command specific checks\n if (builtInCommand === 'commit') {\n warnings.push('Parallel commits: Recommend max concurrency of 2 to avoid conflicts');\n recommendations.push('Use: --max-concurrency 2');\n }\n\n if (builtInCommand === 'publish') {\n warnings.push('Parallel publish: PR checks may take significant time');\n warnings.push('Version propagation happens automatically between dependency levels');\n recommendations.push('Use: --max-concurrency 2-3 for publish operations');\n recommendations.push('Monitor with: kodrdriv tree --status-parallel');\n }\n\n if (builtInCommand === 'link' || builtInCommand === 'unlink') {\n warnings.push('Link operations may have filesystem race conditions');\n recommendations.push('Consider sequential execution for link/unlink');\n }\n\n // Check for output redirection\n if (command.includes('>') || command.includes('>>')) {\n warnings.push('Output redirection in parallel may interleave output');\n }\n\n return {\n valid: issues.length === 0,\n issues,\n warnings,\n recommendations\n };\n }\n\n /**\n * Log validation results\n */\n static logValidation(result: ValidationResult): void {\n if (!result.valid) {\n this.logger.error('
|
|
1
|
+
{"version":3,"file":"CommandValidator.js","sources":["../../src/execution/CommandValidator.ts"],"sourcesContent":["import { getLogger } from '../logging';\n\nexport interface ValidationResult {\n valid: boolean;\n issues: string[];\n warnings: string[];\n recommendations: string[];\n}\n\n/**\n * CommandValidator checks if commands are safe for parallel execution\n */\nexport class CommandValidator {\n private static logger = getLogger();\n\n /**\n * Validate a command for parallel execution\n */\n static validateForParallel(command: string, builtInCommand?: string): ValidationResult {\n const issues: string[] = [];\n const warnings: string[] = [];\n const recommendations: string[] = [];\n\n // Check for inherently unsafe operations\n const unsafePatterns = [\n { pattern: /git\\s+checkout/, message: 'Branch switching is not safe for parallel execution' },\n { pattern: /git\\s+switch/, message: 'Branch switching is not safe for parallel execution' },\n { pattern: /git\\s+rebase/, message: 'Rebase operations should not run in parallel' },\n { pattern: /git\\s+merge/, message: 'Merge operations should not run in parallel' },\n { pattern: /rm\\s+-rf\\s+\\//, message: 'Dangerous deletion commands detected' },\n { pattern: /sudo/, message: 'Sudo commands should not run in parallel' },\n { pattern: /format/, message: 'Format commands may be destructive' }\n ];\n\n for (const { pattern, message } of unsafePatterns) {\n if (pattern.test(command)) {\n issues.push(message);\n }\n }\n\n // Check for potentially problematic operations\n const warningPatterns = [\n { pattern: /npm\\s+(link|unlink)/, message: 'npm link/unlink may conflict in parallel execution' },\n { pattern: /npm\\s+install/, message: 'npm install in parallel may cause lock file conflicts' },\n { pattern: /npm\\s+ci/, message: 'npm ci in parallel may cause lock file conflicts' },\n { pattern: /package-lock\\.json/, message: 'Operations modifying package-lock.json may conflict' },\n { pattern: /node_modules/, message: 'Operations in node_modules may conflict' }\n ];\n\n for (const { pattern, message } of warningPatterns) {\n if (pattern.test(command)) {\n warnings.push(message);\n }\n }\n\n // Built-in command specific checks\n if (builtInCommand === 'commit') {\n warnings.push('Parallel commits: Recommend max concurrency of 2 to avoid conflicts');\n recommendations.push('Use: --max-concurrency 2');\n }\n\n if (builtInCommand === 'publish') {\n warnings.push('Parallel publish: PR checks may take significant time');\n warnings.push('Version propagation happens automatically between dependency levels');\n recommendations.push('Use: --max-concurrency 2-3 for publish operations');\n recommendations.push('Monitor with: kodrdriv tree --status-parallel');\n }\n\n if (builtInCommand === 'link' || builtInCommand === 'unlink') {\n warnings.push('Link operations may have filesystem race conditions');\n recommendations.push('Consider sequential execution for link/unlink');\n }\n\n // Check for output redirection\n if (command.includes('>') || command.includes('>>')) {\n warnings.push('Output redirection in parallel may interleave output');\n }\n\n return {\n valid: issues.length === 0,\n issues,\n warnings,\n recommendations\n };\n }\n\n /**\n * Log validation results\n */\n static logValidation(result: ValidationResult): void {\n if (!result.valid) {\n this.logger.error('VALIDATOR_FAILED: Command validation failed for parallel execution | Error Count: ' + result.issues.length + ' | Impact: Cannot proceed safely');\n for (const issue of result.issues) {\n this.logger.error(`VALIDATOR_ERROR_DETAIL: Validation issue | Issue: ${issue}`);\n }\n }\n\n if (result.warnings.length > 0) {\n this.logger.warn('VALIDATOR_WARNINGS: Command validation warnings for parallel execution | Warning Count: ' + result.warnings.length + ' | Impact: May cause issues');\n for (const warning of result.warnings) {\n this.logger.warn(`VALIDATOR_WARNING_DETAIL: Validation warning | Warning: ${warning}`);\n }\n }\n\n if (result.recommendations.length > 0 && (this.logger as any).verbose) {\n this.logger.info('VALIDATOR_RECOMMENDATIONS: Command validation recommendations | Count: ' + result.recommendations.length + ' | Purpose: Improve parallel execution');\n for (const rec of result.recommendations) {\n this.logger.info(`VALIDATOR_RECOMMENDATION_DETAIL: ${rec}`);\n }\n }\n }\n\n /**\n * Get recommended concurrency for a command type\n */\n static getRecommendedConcurrency(builtInCommand?: string, cpuCount: number = 4): number {\n switch (builtInCommand) {\n case 'commit':\n // Lower concurrency for commit to reduce conflicts\n return Math.min(2, cpuCount);\n\n case 'publish':\n // Moderate concurrency for publish (long-running)\n return Math.max(2, Math.floor(cpuCount / 2));\n\n case 'link':\n case 'unlink':\n // Very conservative for link operations\n return 1; // Sequential recommended\n\n default:\n // Full concurrency for general commands\n return cpuCount;\n }\n }\n}\n"],"names":["CommandValidator","validateForParallel","command","builtInCommand","issues","warnings","recommendations","unsafePatterns","pattern","message","test","push","warningPatterns","includes","valid","length","logValidation","result","logger","error","issue","warn","warning","verbose","info","rec","getRecommendedConcurrency","cpuCount","Math","min","max","floor","getLogger"],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ function _define_property(obj, key, value) {
|
|
|
26
26
|
/**
|
|
27
27
|
* Main execution entry point
|
|
28
28
|
*/ async execute() {
|
|
29
|
-
this.logger.info(`Starting parallel execution
|
|
29
|
+
this.logger.info(`EXECUTION_STARTING: Starting parallel execution | Max Concurrency: ${this.config.maxConcurrency} | Mode: parallel | Purpose: Execute packages with dependency awareness`);
|
|
30
30
|
this.emit('execution:started', {
|
|
31
31
|
totalPackages: this.graph.packages.size
|
|
32
32
|
});
|
|
@@ -185,7 +185,7 @@ function _define_property(obj, key, value) {
|
|
|
185
185
|
if (result.skippedNoChanges) {
|
|
186
186
|
this.state.skippedNoChanges.push(packageName);
|
|
187
187
|
const duration = this.packageDurations.get(packageName);
|
|
188
|
-
this.logger.info(
|
|
188
|
+
this.logger.info(`PACKAGE_SKIPPED_NO_CHANGES: Package skipped due to no code changes | Package: ${packageName} | Duration: ${this.formatDuration(duration)} | Reason: no-changes`);
|
|
189
189
|
this.emit('package:skipped-no-changes', {
|
|
190
190
|
packageName,
|
|
191
191
|
result
|
|
@@ -193,7 +193,7 @@ function _define_property(obj, key, value) {
|
|
|
193
193
|
} else {
|
|
194
194
|
this.state.completed.push(packageName);
|
|
195
195
|
const duration = this.packageDurations.get(packageName);
|
|
196
|
-
this.logger.info(
|
|
196
|
+
this.logger.info(`PACKAGE_EXECUTION_COMPLETE: Package execution finished successfully | Package: ${packageName} | Duration: ${this.formatDuration(duration)} | Status: success`);
|
|
197
197
|
this.emit('package:completed', {
|
|
198
198
|
packageName,
|
|
199
199
|
result
|
|
@@ -245,7 +245,7 @@ function _define_property(obj, key, value) {
|
|
|
245
245
|
errorDetails
|
|
246
246
|
};
|
|
247
247
|
this.state.failed.push(failureInfo);
|
|
248
|
-
this.logger.error(
|
|
248
|
+
this.logger.error(`PACKAGE_FAILED_PERMANENT: Package failed permanently | Package: ${packageName} | Error: ${error.message} | Status: failed | Retriable: false`);
|
|
249
249
|
this.emit('package:failed', {
|
|
250
250
|
packageName,
|
|
251
251
|
error
|
|
@@ -265,7 +265,7 @@ function _define_property(obj, key, value) {
|
|
|
265
265
|
// Add to skipped
|
|
266
266
|
if (!this.state.skipped.includes(dependent)) {
|
|
267
267
|
this.state.skipped.push(dependent);
|
|
268
|
-
this.logger.warn(
|
|
268
|
+
this.logger.warn(`PACKAGE_SKIPPED_DEPENDENCY: Package skipped due to failed dependency | Package: ${dependent} | Failed Dependency: ${failedPackage} | Reason: dependency-failed`);
|
|
269
269
|
this.emit('package:skipped', {
|
|
270
270
|
packageName: dependent,
|
|
271
271
|
reason: `Depends on failed ${failedPackage}`
|
|
@@ -362,13 +362,13 @@ function _define_property(obj, key, value) {
|
|
|
362
362
|
*/ async loadCheckpoint() {
|
|
363
363
|
const checkpoint = await this.checkpointManager.load();
|
|
364
364
|
if (!checkpoint) {
|
|
365
|
-
this.logger.warn('No checkpoint found
|
|
365
|
+
this.logger.warn('CHECKPOINT_NOT_FOUND: No checkpoint file found | Action: Starting fresh execution | Path: ' + this.config.checkpointPath);
|
|
366
366
|
return;
|
|
367
367
|
}
|
|
368
|
-
this.logger.info('Loading checkpoint
|
|
369
|
-
this.logger.info(`
|
|
370
|
-
this.logger.info(`Completed: ${checkpoint.state.completed.length} packages`);
|
|
371
|
-
this.logger.info(`Failed: ${checkpoint.state.failed.length} packages`);
|
|
368
|
+
this.logger.info('CHECKPOINT_LOADING: Loading execution checkpoint | Purpose: Resume previous execution | Path: ' + this.config.checkpointPath);
|
|
369
|
+
this.logger.info(`CHECKPOINT_EXECUTION_ID: Checkpoint execution identifier | ID: ${checkpoint.executionId}`);
|
|
370
|
+
this.logger.info(`CHECKPOINT_STATE_COMPLETED: Completed packages from checkpoint | Count: ${checkpoint.state.completed.length} packages`);
|
|
371
|
+
this.logger.info(`CHECKPOINT_STATE_FAILED: Failed packages from checkpoint | Count: ${checkpoint.state.failed.length} packages`);
|
|
372
372
|
// Restore state
|
|
373
373
|
this.executionId = checkpoint.executionId;
|
|
374
374
|
this.startTime = new Date(checkpoint.totalStartTime);
|
|
@@ -392,6 +392,29 @@ function _define_property(obj, key, value) {
|
|
|
392
392
|
this.state.pending.push(running.name);
|
|
393
393
|
}
|
|
394
394
|
this.state.running = [];
|
|
395
|
+
// CRITICAL FIX: Re-evaluate skipped packages
|
|
396
|
+
// After loading checkpoint (especially with --mark-completed), packages that were
|
|
397
|
+
// skipped due to failed dependencies might now be eligible to run if those
|
|
398
|
+
// dependencies are now completed. Move them back to pending for reassessment.
|
|
399
|
+
const unblocked = [];
|
|
400
|
+
for (const packageName of this.state.skipped){
|
|
401
|
+
// Check if all dependencies are now completed
|
|
402
|
+
const dependencies = this.graph.edges.get(packageName) || new Set();
|
|
403
|
+
const allDepsCompleted = Array.from(dependencies).every((dep)=>this.state.completed.includes(dep) || this.state.skippedNoChanges.includes(dep));
|
|
404
|
+
// Check if any dependencies are still failed
|
|
405
|
+
const anyDepsFailed = Array.from(dependencies).some((dep)=>this.state.failed.some((f)=>f.name === dep));
|
|
406
|
+
if (allDepsCompleted && !anyDepsFailed) {
|
|
407
|
+
unblocked.push(packageName);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
// Move unblocked packages back to pending
|
|
411
|
+
if (unblocked.length > 0) {
|
|
412
|
+
this.logger.info(`PACKAGES_UNBLOCKED: Dependencies satisfied, packages now ready | Count: ${unblocked.length} | Packages: ${unblocked.join(', ')} | Status: ready-to-execute`);
|
|
413
|
+
for (const packageName of unblocked){
|
|
414
|
+
this.state.skipped = this.state.skipped.filter((p)=>p !== packageName);
|
|
415
|
+
this.state.pending.push(packageName);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
395
418
|
}
|
|
396
419
|
/**
|
|
397
420
|
* Build execution result
|
|
@@ -418,17 +441,56 @@ function _define_property(obj, key, value) {
|
|
|
418
441
|
/**
|
|
419
442
|
* Check if error is retriable
|
|
420
443
|
*/ isRetriableError(error) {
|
|
444
|
+
const errorText = error.message || String(error);
|
|
445
|
+
const stackText = error.stack || '';
|
|
446
|
+
const fullText = `${errorText}\n${stackText}`;
|
|
421
447
|
const retriablePatterns = [
|
|
448
|
+
// Network errors
|
|
422
449
|
/ETIMEDOUT/i,
|
|
423
450
|
/ECONNRESET/i,
|
|
424
451
|
/ENOTFOUND/i,
|
|
452
|
+
/ECONNREFUSED/i,
|
|
425
453
|
/rate limit/i,
|
|
426
454
|
/temporary failure/i,
|
|
427
455
|
/try again/i,
|
|
428
456
|
/gateway timeout/i,
|
|
429
|
-
/service unavailable/i
|
|
457
|
+
/service unavailable/i,
|
|
458
|
+
// Git lock file errors (common in parallel execution)
|
|
459
|
+
/index\.lock/i,
|
|
460
|
+
/\.git\/index\.lock/i,
|
|
461
|
+
/unable to create.*lock/i,
|
|
462
|
+
/lock file.*exists/i,
|
|
463
|
+
// npm install race conditions
|
|
464
|
+
/ENOENT.*npm-cache/i,
|
|
465
|
+
/EBUSY.*npm/i,
|
|
466
|
+
/npm.*EEXIST/i,
|
|
467
|
+
// GitHub API temporary errors
|
|
468
|
+
/abuse detection/i,
|
|
469
|
+
/secondary rate limit/i,
|
|
470
|
+
/GitHub API.*unavailable/i,
|
|
471
|
+
// Timeout errors (might be transient)
|
|
472
|
+
/timeout waiting for/i,
|
|
473
|
+
/timed out after/i
|
|
474
|
+
];
|
|
475
|
+
const isRetriable = retriablePatterns.some((pattern)=>pattern.test(fullText));
|
|
476
|
+
// Non-retriable errors that should fail immediately
|
|
477
|
+
const nonRetriablePatterns = [
|
|
478
|
+
/test.*failed/i,
|
|
479
|
+
/coverage.*below.*threshold/i,
|
|
480
|
+
/compilation.*failed/i,
|
|
481
|
+
/build.*failed/i,
|
|
482
|
+
/merge.*conflict/i,
|
|
483
|
+
/uncommitted changes/i,
|
|
484
|
+
/working.*dirty/i,
|
|
485
|
+
/authentication.*failed/i,
|
|
486
|
+
/permission denied/i
|
|
430
487
|
];
|
|
431
|
-
|
|
488
|
+
const isNonRetriable = nonRetriablePatterns.some((pattern)=>pattern.test(fullText));
|
|
489
|
+
// If explicitly non-retriable, don't retry
|
|
490
|
+
if (isNonRetriable) {
|
|
491
|
+
return false;
|
|
492
|
+
}
|
|
493
|
+
return isRetriable;
|
|
432
494
|
}
|
|
433
495
|
/**
|
|
434
496
|
* Calculate retry delay with exponential backoff
|
|
@@ -457,13 +519,15 @@ function _define_property(obj, key, value) {
|
|
|
457
519
|
const errorMsg = error.message || '';
|
|
458
520
|
const errorStack = error.stack || '';
|
|
459
521
|
const fullText = `${errorMsg}\n${errorStack}`;
|
|
522
|
+
// Get log file path from error if attached, otherwise use default
|
|
523
|
+
const logFile = error.logFilePath || this.getLogFilePath(packageName);
|
|
460
524
|
// Test coverage failure
|
|
461
525
|
if (fullText.match(/coverage.*below.*threshold|coverage.*insufficient/i)) {
|
|
462
526
|
const coverageMatch = fullText.match(/(\w+):\s*(\d+\.?\d*)%.*threshold:\s*(\d+\.?\d*)%/i);
|
|
463
527
|
return {
|
|
464
528
|
type: 'test_coverage',
|
|
465
529
|
context: coverageMatch ? `${coverageMatch[1]}: ${coverageMatch[2]}% (threshold: ${coverageMatch[3]}%)` : 'Coverage below threshold',
|
|
466
|
-
logFile
|
|
530
|
+
logFile,
|
|
467
531
|
suggestion: `cd ${this.getPackagePath(packageName)} && npm test -- --coverage`
|
|
468
532
|
};
|
|
469
533
|
}
|
|
@@ -472,7 +536,7 @@ function _define_property(obj, key, value) {
|
|
|
472
536
|
return {
|
|
473
537
|
type: 'build_error',
|
|
474
538
|
context: this.extractFirstErrorLine(fullText),
|
|
475
|
-
logFile
|
|
539
|
+
logFile,
|
|
476
540
|
suggestion: `cd ${this.getPackagePath(packageName)} && npm run build`
|
|
477
541
|
};
|
|
478
542
|
}
|
|
@@ -481,7 +545,7 @@ function _define_property(obj, key, value) {
|
|
|
481
545
|
return {
|
|
482
546
|
type: 'merge_conflict',
|
|
483
547
|
context: 'Unresolved merge conflicts detected',
|
|
484
|
-
logFile
|
|
548
|
+
logFile,
|
|
485
549
|
suggestion: `cd ${this.getPackagePath(packageName)} && git status`
|
|
486
550
|
};
|
|
487
551
|
}
|
|
@@ -491,7 +555,7 @@ function _define_property(obj, key, value) {
|
|
|
491
555
|
return {
|
|
492
556
|
type: 'test_failure',
|
|
493
557
|
context: failMatch ? `${failMatch[1]} test(s) failing` : 'Tests failed',
|
|
494
|
-
logFile
|
|
558
|
+
logFile,
|
|
495
559
|
suggestion: `cd ${this.getPackagePath(packageName)} && npm test`
|
|
496
560
|
};
|
|
497
561
|
}
|
|
@@ -500,15 +564,60 @@ function _define_property(obj, key, value) {
|
|
|
500
564
|
return {
|
|
501
565
|
type: 'timeout',
|
|
502
566
|
context: this.extractFirstErrorLine(fullText),
|
|
503
|
-
logFile
|
|
567
|
+
logFile,
|
|
504
568
|
suggestion: 'Consider increasing timeout or checking for stuck processes'
|
|
505
569
|
};
|
|
506
570
|
}
|
|
571
|
+
// PR/Git errors
|
|
572
|
+
if (fullText.match(/pull request|pr|github/i) && fullText.match(/not mergeable|conflict/i)) {
|
|
573
|
+
return {
|
|
574
|
+
type: 'pr_conflict',
|
|
575
|
+
context: 'Pull request has merge conflicts',
|
|
576
|
+
logFile,
|
|
577
|
+
suggestion: 'Resolve conflicts in the PR and re-run with --continue'
|
|
578
|
+
};
|
|
579
|
+
}
|
|
580
|
+
// Git state errors
|
|
581
|
+
if (fullText.match(/uncommitted changes|working.*dirty|not.*clean/i)) {
|
|
582
|
+
return {
|
|
583
|
+
type: 'git_state',
|
|
584
|
+
context: 'Working directory has uncommitted changes',
|
|
585
|
+
logFile,
|
|
586
|
+
suggestion: `cd ${this.getPackagePath(packageName)} && git status`
|
|
587
|
+
};
|
|
588
|
+
}
|
|
589
|
+
// npm install / dependency errors
|
|
590
|
+
if (fullText.match(/npm.*install|ERESOLVE|Cannot find module/i)) {
|
|
591
|
+
return {
|
|
592
|
+
type: 'dependency_error',
|
|
593
|
+
context: this.extractFirstErrorLine(fullText),
|
|
594
|
+
logFile,
|
|
595
|
+
suggestion: `cd ${this.getPackagePath(packageName)} && rm -rf node_modules package-lock.json && npm install`
|
|
596
|
+
};
|
|
597
|
+
}
|
|
598
|
+
// Git lock file errors
|
|
599
|
+
if (fullText.match(/index\.lock|\.git\/index\.lock|unable to create.*lock/i)) {
|
|
600
|
+
return {
|
|
601
|
+
type: 'git_lock',
|
|
602
|
+
context: 'Git lock file conflict - another git process running',
|
|
603
|
+
logFile,
|
|
604
|
+
suggestion: `cd ${this.getPackagePath(packageName)} && rm -f .git/index.lock`
|
|
605
|
+
};
|
|
606
|
+
}
|
|
607
|
+
// No changes detected (not really an error, but handle it)
|
|
608
|
+
if (fullText.match(/no.*changes|already.*published|nothing.*to.*publish/i)) {
|
|
609
|
+
return {
|
|
610
|
+
type: 'no_changes',
|
|
611
|
+
context: 'No changes detected - package already published',
|
|
612
|
+
logFile,
|
|
613
|
+
suggestion: 'This is expected if package was previously published'
|
|
614
|
+
};
|
|
615
|
+
}
|
|
507
616
|
// Generic error with log file
|
|
508
617
|
return {
|
|
509
618
|
type: 'unknown',
|
|
510
619
|
context: errorMsg.split('\n')[0].substring(0, 200),
|
|
511
|
-
logFile
|
|
620
|
+
logFile
|
|
512
621
|
};
|
|
513
622
|
}
|
|
514
623
|
extractFirstErrorLine(text) {
|
|
@@ -527,7 +636,8 @@ function _define_property(obj, key, value) {
|
|
|
527
636
|
getLogFilePath(packageName) {
|
|
528
637
|
const pkgPath = this.getPackagePath(packageName);
|
|
529
638
|
const outputDir = this.config.config.outputDirectory || 'output/kodrdriv';
|
|
530
|
-
//
|
|
639
|
+
// Return wildcard pattern as fallback (log file should be attached to error directly)
|
|
640
|
+
// This is used as a fallback when log file path isn't attached to the error
|
|
531
641
|
return `${pkgPath}/${outputDir}/publish_*.log`;
|
|
532
642
|
}
|
|
533
643
|
constructor(config){
|