Simplified implementation

This commit is contained in:
Carl Mercier
2025-07-26 01:13:23 -05:00
committed by Ralph Khreish
parent ef23beac0d
commit 3f31c34f8d
4 changed files with 20 additions and 15 deletions

View File

@@ -22,8 +22,7 @@ import {
truncate,
ensureTagMetadata,
performCompleteTagMigration,
markMigrationForNotice,
normalizeTaskIds
markMigrationForNotice
} from '../utils.js';
import { generateObjectService } from '../ai-services-unified.js';
import { getDefaultPriority } from '../config-manager.js';
@@ -70,7 +69,6 @@ function getAllTasks(rawData) {
rawData[tagName] &&
Array.isArray(rawData[tagName].tasks)
) {
normalizeTaskIds(rawData[tagName].tasks);
allTasks = allTasks.concat(rawData[tagName].tasks);
}
}
@@ -308,8 +306,6 @@ async function addTask(
// Find the highest task ID *within the target tag* to determine the next ID
const tasksInTargetTag = rawData[targetTag].tasks;
normalizeTaskIds(tasksInTargetTag);
const highestId =
tasksInTargetTag.length > 0
? Math.max(...tasksInTargetTag.map((t) => t.id))

View File

@@ -1,5 +1,5 @@
import path from 'path';
import { log, readJSON, writeJSON, setTasksForTag, normalizeTaskIds } from '../utils.js';
import { log, readJSON, writeJSON, setTasksForTag } from '../utils.js';
import { isTaskDependentOn } from '../task-manager.js';
import generateTaskFiles from './generate-task-files.js';
@@ -79,8 +79,6 @@ async function moveTask(
// Get the tasks for the current tag
const tasks = rawData[tag].tasks;
normalizeTaskIds(tasks);
log(
'info',

View File

@@ -7,8 +7,7 @@ import {
readJSON,
writeJSON,
findTaskById,
ensureTagMetadata,
normalizeTaskIds
ensureTagMetadata
} from '../utils.js';
import { displayBanner } from '../ui.js';
import { validateTaskDependencies } from '../dependency-manager.js';
@@ -77,8 +76,6 @@ async function setTaskStatus(tasksPath, taskIdInput, newStatus, options = {}) {
tag,
_rawTaggedData: rawData
};
normalizeTaskIds(data.tasks);
if (!data || !data.tasks) {
throw new Error(`No valid tasks found in ${tasksPath}`);

View File

@@ -282,9 +282,16 @@ function normalizeTaskIds(tasks) {
if (Array.isArray(task.subtasks)) {
task.subtasks.forEach(subtask => {
if (subtask.id !== undefined) {
const parsedSubtaskId = parseInt(subtask.id, 10);
if (!isNaN(parsedSubtaskId) && parsedSubtaskId > 0) {
subtask.id = parsedSubtaskId;
// Check for dot notation (which shouldn't exist in storage)
if (typeof subtask.id === 'string' && subtask.id.includes('.')) {
// Extract the subtask part after the dot
const parts = subtask.id.split('.');
subtask.id = parseInt(parts[parts.length - 1], 10);
} else {
const parsedSubtaskId = parseInt(subtask.id, 10);
if (!isNaN(parsedSubtaskId) && parsedSubtaskId > 0) {
subtask.id = parsedSubtaskId;
}
}
}
});
@@ -432,6 +439,13 @@ function readJSON(filepath, projectRoot = null, tag = null) {
// Store reference to the raw tagged data for functions that need it
const originalTaggedData = JSON.parse(JSON.stringify(data));
// Normalize IDs in all tags before storing as originalTaggedData
for (const tagName in originalTaggedData) {
if (originalTaggedData[tagName] && Array.isArray(originalTaggedData[tagName].tasks)) {
normalizeTaskIds(originalTaggedData[tagName].tasks);
}
}
// Check and auto-switch git tags if enabled (for existing tagged format)
// This needs to run synchronously BEFORE tag resolution