@galda/cli 0.10.91 → 0.10.92

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.
Files changed (2) hide show
  1. package/engine/lib.mjs +5 -3
  2. package/package.json +1 -1
package/engine/lib.mjs CHANGED
@@ -2987,12 +2987,14 @@ export function replayQueueLog(rawText, reviewDefinitions = {}) {
2987
2987
  }
2988
2988
  for (const t of tasks) {
2989
2989
  if (t.status !== 'running') continue;
2990
+ const parent = goals.find((g) => g.id === t.goalId);
2990
2991
  // A Manager restart is an infrastructure interruption, not a request for
2991
2992
  // human judgment. Resume the same task once from the files/session already
2992
- // on disk. The bounded counter prevents a crash-looping task from being
2993
- // relaunched forever; a second interrupted boot remains visibly retryable.
2993
+ // on disk, but only while its parent goal is genuinely in flight. A stale
2994
+ // running task under a partial/review/done goal must never resurrect work
2995
+ // the customer has already moved past. The bounded counter prevents loops.
2994
2996
  const recoveries = Number(t.restartRecoveries ?? 0);
2995
- if (recoveries < 1) {
2997
+ if (parent?.status === 'running' && recoveries < 1) {
2996
2998
  t.status = 'queued';
2997
2999
  t.restartRecoveries = recoveries + 1;
2998
3000
  t.recoveredFromRestart = true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@galda/cli",
3
- "version": "0.10.91",
3
+ "version": "0.10.92",
4
4
  "type": "module",
5
5
  "description": "Galda - hand off work to Claude Code or Codex, get proof back. Runs on your existing subscription, no extra API cost.",
6
6
  "scripts": {