{"record":{"id":"5810a7e2a2c45409","repo":"EveryInc/compound-engineering-plugin","slug":"skipping-extra-not-implemented-yet","errorCode":null,"errorMessage":"Skipping ${extra}: not implemented yet.","messagePattern":"Skipping (.+?): not implemented yet\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/commands/convert.ts","lineNumber":184,"sourceCode":"    if (!bundle) {\n      throw new Error(`Target ${targetName} did not return a bundle.`)\n    }\n\n    const effectiveScope =\n      targetName === \"opencode\" ? resolveOpenCodeWriteScope(hasExplicitOutput, resolvedScope) : resolvedScope\n    await target.write(primaryOutputRoot, bundle, effectiveScope)\n    console.log(`Converted ${plugin.manifest.name} to ${targetName} at ${primaryOutputRoot}`)\n\n    const extraTargets = parseExtraTargets(args.also)\n    const allTargets = [targetName, ...extraTargets]\n    for (const extra of extraTargets) {\n      const handler = targets[extra]\n      if (!handler) {\n        console.warn(`Skipping unknown target: ${extra}`)\n        continue\n      }\n      if (!handler.implemented) {\n        console.warn(`Skipping ${extra}: not implemented yet.`)\n        continue\n      }\n      const extraBundle = handler.convert(plugin, options)\n      if (!extraBundle) {\n        console.warn(`Skipping ${extra}: no output returned.`)\n        continue\n      }\n      const extraRoot = resolveTargetOutputRoot({\n        targetName: extra,\n        outputRoot,\n        codexHome,\n        piHome,\n        pluginName: plugin.manifest.name,\n        hasExplicitOutput,\n        scope: handler.defaultScope,\n      })\n      const extraScope =\n        extra === \"opencode\"","sourceCodeStart":166,"sourceCodeEnd":202,"githubUrl":"https://github.com/EveryInc/compound-engineering-plugin/blob/c9c10f8c75412c7232cb2bd663e5fd1cea98d84e/src/commands/convert.ts#L166-L202","documentation":"For --also extra targets, an entry that resolves in the registry but is marked implemented:false is skipped with 'not implemented yet' — the 'yet' signals the provider is planned/stubbed. The primary target conversion still proceeds.","triggerScenarios":"Passing a stub provider (implemented:false in src/targets/index.ts) via --also to convert, e.g. --also gemini while the gemini handler is still a stub.","commonSituations":"Following outdated docs that list a not-yet-released provider; testing a branch where a new writer was declared but not finished; copy-pasting a --also list from a template.","solutions":["Remove the stub provider from --also until it is implemented.","Upgrade the CLI to a version where the target is implemented.","Check src/targets/index.ts for the implemented flag before adding targets.","Use only implemented providers from the detected-targets ✓ list."],"exampleFix":"// before\nbun convert claude --also cursor   // cursor stub -> 'Skipping cursor: not implemented yet.'\n// after\nbun convert claude --also codex,opencode\n","handlingStrategy":"validation","validationCode":"const h = (targets as Record<string, { implemented?: boolean }>)[extra];\nif (!h?.implemented) console.warn(`${extra} is a stub; remove from --also`);","typeGuard":"function isImplemented<K extends keyof typeof targets>(k: K): boolean {\n  return Boolean(targets[k]?.implemented);\n}","tryCatchPattern":null,"preventionTips":["Check the implemented flag before adding --also entries.","Remove stubbed providers from scripted invocations.","Track provider implementation status in release notes.","Test --also lists incrementally to spot skipped targets."],"tags":["cli","convert","unimplemented-target"],"backgroundTag":"unimplemented-target-skipped","analyzedSha":"c9c10f8c75412c7232cb2bd663e5fd1cea98d84e","analyzedAt":"2026-08-31T15:18:07.959Z","schemaVersion":2},"datasetVersion":"2026-08-31T19:17:28.585Z"}