Summary
TaskManager is in-memory only. If process crashes mid-execution, task state is lost and tasks get stuck in limbo.
Source
Adversarial Security Assessment
Location
impl/mvp/src/tasks/manager.ts:78-130
impl/mvp/src/holons/root.ts:461-492
Problems
- Process crash → task orphaned (not DONE, not FAILED)
- No recovery mechanism on restart
- Manual cleanup required
- Resource leaks (Linear sub-issues created but task "lost")
Impact
- Tasks stuck indefinitely after crash
- Inconsistent state between Linear and HCA
- Manual intervention required
- Resource leaks
Severity
High | Likelihood: High (processes crash: OOM, deployments, exceptions)
Recommended Fix
- Persist task state to Redis/database
- Implement recovery on startup
- Add TTL to orphaned tasks
- Log state transitions for debugging
class PersistentTaskManager extends TaskManager {
constructor(private redis: Redis) { super(); }
async createTask(opts: CreateTaskOptions): Promise<Task> {
const task = super.createTask(opts);
await this.redis.hset(`task:${task.id}`, task);
return task;
}
async recoverOrphanedTasks(): Promise<void> {
const keys = await this.redis.keys('task:*');
for (const key of keys) {
const task = await this.redis.hgetall(key);
if (task.state.status === 'PLANNING' || task.state.status === 'WORKING') {
// Recover or fail orphaned tasks
await this.failTask(task.id, 'Recovered after crash');
}
}
}
}
Generated by HCA Architecture Assessment
Summary
TaskManager is in-memory only. If process crashes mid-execution, task state is lost and tasks get stuck in limbo.
Source
Adversarial Security Assessment
Location
impl/mvp/src/tasks/manager.ts:78-130impl/mvp/src/holons/root.ts:461-492Problems
Impact
Severity
High | Likelihood: High (processes crash: OOM, deployments, exceptions)
Recommended Fix
Generated by HCA Architecture Assessment