eyaltoledano/claude-task-master · error · Error
Tag ${oldTag} not found in standard format
Error message
Tag ${oldTag} not found in standard format What it means
In renameTag, when tasks.json is in standard format the only valid rename source is 'master' (which converts the file to legacy format under the new name). Renaming any other tag against a standard-format file throws this error, since non-master tags only exist in legacy format.
Source
Thrown at packages/tm-core/src/modules/storage/adapters/file-storage/file-storage.ts:785
}
return existingData;
} else {
throw new Error(`Tag ${oldTag} not found`);
}
} else if (oldTag === 'master') {
// Convert standard format to legacy when renaming master
const masterTasks = existingData.tasks || [];
const masterMetadata = existingData.metadata || {};
return {
[newTag]: {
tasks: masterTasks,
metadata: { ...masterMetadata, tags: [newTag] }
}
};
} else {
throw new Error(`Tag ${oldTag} not found in standard format`);
}
});
} catch (error: any) {
if (error.code === 'ENOENT') {
throw new Error(`Tag ${oldTag} not found - file doesn't exist`);
}
throw error;
}
}
/**
* Copy a tag within the single tasks.json file
*/
async copyTag(sourceTag: string, targetTag: string): Promise<void> {
const tasks = await this.loadTasks(sourceTag);
if (tasks.length === 0) {
throw new Error(`Source tag ${sourceTag} not found or has no tasks`);View on GitHub (pinned to c0c98d367c)
Solutions
- Migrate tasks.json to legacy/tagged format first, then rename the tag.
- If the intent was to rename the implicit master set, call renameTag('master', newName) — that is the supported standard-format path.
- Detect the file format before renaming and branch accordingly.
- Create the new tag and copy tasks (copyTag) if a full migration is not desired.
Example fix
// before
await storage.renameTag('feature', 'feature-v2'); // standard format file
// after
const data = JSON.parse(fs.readFileSync(tasksPath, 'utf8'));
if (Array.isArray(data.tasks)) {
await storage.renameTag('master', 'feature-v2'); // supported conversion path
} else {
await storage.renameTag('feature', 'feature-v2');
} Defensive patterns
Strategy: validation
Validate before calling
const data = JSON.parse(fs.readFileSync(tasksPath, 'utf8'));
const isStandardFormat = Array.isArray(data.tasks);
if (isStandardFormat && oldTag !== 'master') {
throw new Error(`Only 'master' can be renamed in standard format; migrate tasks.json first`);
} Type guard
function isStandardFormat(data: unknown): data is { tasks: unknown[]; metadata?: object } {
return typeof data === 'object' && data !== null && Array.isArray((data as any).tasks);
} Try / catch
try {
await storage.renameTag(oldTag, newTag);
} catch (err) {
if (err instanceof Error && err.message.includes('not found in standard format')) {
await migrateToTaggedFormat(tasksPath);
await storage.renameTag(oldTag, newTag);
return;
}
throw err;
} Prevention
- Inspect tasks.json layout before renaming; standard format only supports renaming 'master'.
- Migrate to tagged format as part of upgrade/onboarding scripts.
- Rename 'master' explicitly when converting standard files to a named tag.
- Keep automation aware of the format introduced by newer library versions.
When it happens
Trigger: storage.renameTag('feature', 'feature-v2') while tasks.json is still standard/un-migrated format; scripts assuming the file was already converted to tagged format; renaming a tag right after project init when the file still uses {tasks, metadata} layout.
Common situations: Older projects not yet migrated to multi-tag storage; version upgrades introducing tagged format while automation still targets old assumptions; confusion between the 'master' pseudo-tag and real legacy tag keys.
Related errors
- Tag ${tag} not found in standard format
- Tag ${tag} not found
- Tag ${oldTag} not found
- MFA_VERIFICATION_FAILED
- Failed to get brief creation URL
AI-assisted analysis of eyaltoledano/claude-task-master@c0c98d367c (2026-08-29).
Data as JSON: /api/errors/f770f9fced3725cd.
Report an issue: GitHub.