Enhance project management workflow by introducing dual file system for project guidelines and tech analysis

- Updated workflow initialization to create `.workflow/project-tech.json` and `.workflow/project-guidelines.json` for comprehensive project understanding.
- Added mandatory context reading steps in various commands to ensure compliance with user-defined constraints and technology stack.
- Implemented a new command `/workflow:session:solidify` to capture session learnings and solidify them into project guidelines.
- Introduced a detail action in issue management to retrieve task details without altering status.
- Enhanced documentation across multiple workflow commands to reflect changes in project structure and guidelines.
This commit is contained in:
catlog22
2025-12-28 12:47:39 +08:00
parent 2c42cefa5a
commit 4c6b28030f
12 changed files with 576 additions and 146 deletions

View File

@@ -1192,6 +1192,48 @@ async function nextAction(itemId: string | undefined, options: IssueOptions): Pr
}, null, 2));
}
/**
* detail - Get task details by item_id (READ-ONLY, does NOT change status)
* Used for parallel execution: orchestrator gets dag, then dispatches with detail <id>
*/
async function detailAction(itemId: string | undefined, options: IssueOptions): Promise<void> {
if (!itemId) {
console.log(JSON.stringify({ status: 'error', message: 'item_id is required' }));
return;
}
const queue = readActiveQueue();
const queueItem = queue.tasks.find(t => t.item_id === itemId);
if (!queueItem) {
console.log(JSON.stringify({ status: 'error', message: `Task ${itemId} not found` }));
return;
}
// Load task definition from solution
const solution = findSolution(queueItem.issue_id, queueItem.solution_id);
const taskDef = solution?.tasks.find(t => t.id === queueItem.task_id);
if (!taskDef) {
console.log(JSON.stringify({ status: 'error', message: 'Task definition not found in solution' }));
return;
}
// Return full task info (READ-ONLY - no status update)
console.log(JSON.stringify({
item_id: queueItem.item_id,
issue_id: queueItem.issue_id,
solution_id: queueItem.solution_id,
status: queueItem.status,
task: taskDef,
context: solution?.exploration_context || {},
execution_hints: {
executor: queueItem.assigned_executor,
estimated_minutes: taskDef.estimated_minutes || 30
}
}, null, 2));
}
/**
* done - Mark task completed or failed
*/
@@ -1333,6 +1375,9 @@ export async function issueCommand(
case 'next':
await nextAction(argsArray[0], options);
break;
case 'detail':
await detailAction(argsArray[0], options);
break;
case 'done':
await doneAction(argsArray[0], options);
break;
@@ -1370,7 +1415,8 @@ export async function issueCommand(
console.log(chalk.gray(' retry [issue-id] Retry failed tasks'));
console.log();
console.log(chalk.bold('Execution Endpoints:'));
console.log(chalk.gray(' next [item-id] Get task by ID or next ready task (JSON)'));
console.log(chalk.gray(' next [item-id] Get & mark task executing (JSON)'));
console.log(chalk.gray(' detail <item-id> Get task details (READ-ONLY, for parallel)'));
console.log(chalk.gray(' done <item-id> Mark task completed'));
console.log(chalk.gray(' done <item-id> --fail Mark task failed'));
console.log();