ruvnet/ruflo · error · DarwinUnavailableError

Darwin explicitly requested but unavailable

Error message

Darwin explicitly requested but unavailable

What it means

proposeFlywheelCandidates raises DarwinUnavailableError when mode is explicitly 'darwin' but no Darwin proposer is available; unlike local mode, an explicit darwin request must not silently substitute.

Solutions

  1. Do not pass the Darwin option on this platform/config
  2. Enable Darwin support prerequisites before requesting it

Example fix

Remove the explicit Darwin request, or enable/install the Darwin proposer backend before requesting it.
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at v3/@claude-flow/cli/src/services/flywheel-proposer.ts:196 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of ruvnet/ruflo@fa13ee4ad6 (2026-08-18). Data as JSON: /api/errors/c9b28be89a920baa. Report an issue: GitHub.

Appendix: source

Thrown at v3/@claude-flow/cli/src/services/flywheel-proposer.ts:196

}

export async function proposeFlywheelCandidates(input: ProposeCandidatesInput): Promise<CandidateArchive> {
  const baselineRef = policyCandidateId(input.baselinePolicy);
  const runLocal = async (substitution?: string) => finalizeArchive({
    requested: input.mode,
    effective: 'local',
    substitution,
    promotionAllowed: substitution ? input.allowSubstitutionPromotion === true : true,
    baselineRef,
    safetyEnvelope: input.safetyEnvelope,
    seed: input.seed,
    candidates: await input.localProposer(input.baselinePolicy, input.seed),
    completed: true,
  });

  if (input.mode === 'local') return runLocal();
  if (!input.darwinInvoker) {
    if (input.mode === 'darwin') throw new DarwinUnavailableError('Darwin explicitly requested but unavailable');
    return runLocal('darwin-unavailable');
  }

  try {
    const maxWallTimeMs = input.maxWallTimeMs ?? 60_000;
    let timeout: NodeJS.Timeout | undefined;
    const result = await Promise.race([
      input.darwinInvoker({
        baselinePolicy: input.baselinePolicy,
        seed: input.seed,
        budget: {
          maxEvaluationCostMicros: input.safetyEnvelope.maxEvaluationCostMicros,
          maxConcurrency: input.maxConcurrency ?? 2,
          maxWallTimeMs,
        },
      }),
      new Promise<never>((_, reject) => {
        timeout = setTimeout(() => reject(new DarwinUnavailableError('Darwin exceeded wall-time budget')), maxWallTimeMs);

View on GitHub (pinned to fa13ee4ad6)