EveryInc/compound-engineering-plugin · warning

Skipping ${extra}: no output returned.

Error message

Skipping ${extra}: no output returned.

What it means

Mirrors the primary-target 'no output returned' skip for --also targets: an implemented handler ran convert() but returned no bundle, so nothing is written for that extra target and the run continues. It separates 'handler exists' from 'handler produced installable output'.

Source

Thrown at src/commands/convert.ts:189

      targetName === "opencode" ? resolveOpenCodeWriteScope(hasExplicitOutput, resolvedScope) : resolvedScope
    await target.write(primaryOutputRoot, bundle, effectiveScope)
    console.log(`Converted ${plugin.manifest.name} to ${targetName} at ${primaryOutputRoot}`)

    const extraTargets = parseExtraTargets(args.also)
    const allTargets = [targetName, ...extraTargets]
    for (const extra of extraTargets) {
      const handler = targets[extra]
      if (!handler) {
        console.warn(`Skipping unknown target: ${extra}`)
        continue
      }
      if (!handler.implemented) {
        console.warn(`Skipping ${extra}: not implemented yet.`)
        continue
      }
      const extraBundle = handler.convert(plugin, options)
      if (!extraBundle) {
        console.warn(`Skipping ${extra}: no output returned.`)
        continue
      }
      const extraRoot = resolveTargetOutputRoot({
        targetName: extra,
        outputRoot,
        codexHome,
        piHome,
        pluginName: plugin.manifest.name,
        hasExplicitOutput,
        scope: handler.defaultScope,
      })
      const extraScope =
        extra === "opencode"
          ? resolveOpenCodeWriteScope(hasExplicitOutput, handler.defaultScope)
          : handler.defaultScope
      await handler.write(extraRoot, extraBundle, extraScope)
      console.log(`Converted ${plugin.manifest.name} to ${extra} at ${extraRoot}`)
    }

View on GitHub (pinned to c9c10f8c75)

Solutions

  1. Verify the plugin contains content mappable to the extra target.
  2. Inspect the handler's convert() to understand its null-return conditions.
  3. Drop the extra target if it is not relevant to your plugin.
  4. Report upstream if the target should have emitted output.

Example fix

// before
plugin without agents, --also agents-only-target -> 'Skipping X: no output returned.'
// after
add the content type the target consumes, then re-run
Defensive patterns

Strategy: validation

Validate before calling

// confirm the plugin has the content type the extra target consumes
const stats = await stat(pluginRoot + "/skills").catch(() => null);
if (!stats) console.warn("No skills to convert for skill-consuming targets");

Prevention

When it happens

Trigger: An extra target passed via --also whose handler.convert(plugin, options) returns falsy because the plugin has nothing convertible for that target.

Common situations: Converting a minimal plugin where some targets legitimately have nothing to emit; handlers that return null on unsupported plugin structures; testing with empty fixtures.

Related errors


AI-assisted analysis of EveryInc/compound-engineering-plugin@c9c10f8c75 (2026-08-31). Data as JSON: /api/errors/db383028c4ea3174. Report an issue: GitHub.