ruvnet/ruflo · error

${failure} Previous Meta-Proxy ${prior ? 'was restored and v

Error message

${failure} Previous Meta-Proxy ${prior ? 'was restored and verified' : 'binary was restored; it was not running before the upgrade'}.

What it means

This is the terminal error of a failed upgrade with successful rollback: installAndActivateProxy() prefixes the original failure with what happened to the previous Meta-Proxy. If a prior daemon was running, it was restored and re-verified via launchAndVerify; otherwise only the old binary files were restored and nothing was relaunched. It tells you the system is back to (or at) the pre-upgrade state and the requested upgrade did not happen.

Source

Thrown at v3/@claude-flow/cli/src/proxy/activation.ts:182

    if (fs.existsSync(binary)) fs.copyFileSync(binary, binaryBackup);
    if (fs.existsSync(manifest)) fs.copyFileSync(manifest, manifestBackup);
    const installed = await installProxy({ version, log });
    const effective = await launchAndVerify(installed.binaryPath, installed.version, wait);
    return { ...installed, pid: effective.pid };
  } catch (error) {
    const failure = error instanceof Error ? error.message : String(error);
    if (fs.existsSync(binaryBackup)) {
      try {
        await stopEffective(wait);
        fs.rmSync(binary, { force: true });
        fs.renameSync(binaryBackup, binary);
        fs.rmSync(manifest, { force: true });
        if (fs.existsSync(manifestBackup)) fs.renameSync(manifestBackup, manifest);
        if (prior) await launchAndVerify(prior.executable === binary ? binary : prior.executable, prior.version, wait);
      } catch (rollbackError) {
        throw new Error(`${failure} Rollback failed: ${rollbackError instanceof Error ? rollbackError.message : String(rollbackError)}`);
      }
      throw new Error(`${failure} Previous Meta-Proxy ${prior ? 'was restored and verified' : 'binary was restored; it was not running before the upgrade'}.`);
    }
    throw error;
  } finally {
    fs.rmSync(binaryBackup, { force: true });
    fs.rmSync(manifestBackup, { force: true });
    release?.();
  }
}

View on GitHub (pinned to 29f048fc3b)

Solutions

  1. Read the prefix of the message — it is the root cause of the upgrade; address that (network, version availability, daemon startup)
  2. Confirm the previous daemon is healthy (probe http://127.0.0.1:11435/version) or start it manually if none was running before
  3. Re-run the install once the root cause is fixed; the transactional flow can be safely retried
  4. If repeated, pin the currently working version and check the daemon log and CLI --verbose output for the underlying failure

Example fix

// retry after fixing root cause (e.g. network)
export HTTPS_PROXY=http://corp-proxy:8080
npx ruflo proxy install --version 1.2.3
Defensive patterns

Strategy: try-catch

Validate before calling

// Verify the current install is healthy before attempting an upgrade
const current = await probeEffectiveProxy();
if (current) console.log(`Healthy baseline: v${current.version} pid ${current.pid}`);

Type guard

null

Try / catch

try {
  await installAndActivateProxy(version);
} catch (e) {
  if (e instanceof Error && e.message.includes('was restored')) {
    // upgrade failed, previous state restored — inspect the prefix cause and retry later
    console.error('Upgrade failed, rolled back. Cause:', e.message.split('.')[0]);
  } else throw e;
}

Prevention

When it happens

Trigger: installAndActivateProxy() failed at any step after the backup was created (installProxy download failure, launchAndVerify timeout, competing daemon) and the rollback path completed; the error message embeds the root cause as its prefix.

Common situations: Network failure while downloading the new version; target version doesn't exist or is incompatible; the new daemon couldn't start within 5s (errors 5/6 conditions); corporate proxy blocking downloads in CI.

Related errors


AI-assisted analysis of ruvnet/ruflo@29f048fc3b (2026-09-01). Data as JSON: /api/errors/fe90f2451b19e717. Report an issue: GitHub.