{"record":{"id":"cf0b696b2cd498a5","repo":"emberjs/ember.js","slug":"invalid-component-manager-compatibility-specified","errorCode":null,"errorMessage":"Invalid component manager compatibility specified","messagePattern":"Invalid component manager compatibility specified","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/@glimmer/manager/lib/public/component.ts","lineNumber":49,"sourceCode":"  prepareArgs: false,\n  createArgs: true,\n  attributeHook: false,\n  elementHook: false,\n  createCaller: false,\n  dynamicScope: true,\n  updateHook: true,\n  createInstance: true,\n  wrapped: false,\n  willDestroy: false,\n  hasSubOwner: false,\n};\n\nexport function componentCapabilities<Version extends keyof ComponentCapabilitiesVersions>(\n  managerAPI: Version,\n  options: ComponentCapabilitiesVersions[Version] = {}\n): ComponentCapabilities {\n  if (DEBUG && managerAPI !== '3.13') {\n    throw new Error('Invalid component manager compatibility specified');\n  }\n\n  let updateHook = Boolean((options as ComponentCapabilitiesVersions['3.13']).updateHook);\n\n  return buildCapabilities({\n    asyncLifeCycleCallbacks: Boolean(options.asyncLifecycleCallbacks),\n    destructor: Boolean(options.destructor),\n    updateHook,\n  });\n}\n\nexport function hasAsyncLifeCycleCallbacks<ComponentInstance>(\n  delegate: ComponentManager<ComponentInstance>\n): delegate is ComponentManagerWithAsyncLifeCycleCallbacks<ComponentInstance> {\n  return delegate.capabilities.asyncLifeCycleCallbacks;\n}\n\nexport function hasUpdateHook<ComponentInstance>(","sourceCodeStart":31,"sourceCodeEnd":67,"githubUrl":"https://github.com/emberjs/ember.js/blob/26f97246a8bf2e28edf26ac3093da2e86c04ffc5/packages/@glimmer/manager/lib/public/component.ts#L31-L67","documentation":"`componentCapabilities()` from @glimmer/manager validates the manager API version string passed to it. In DEBUG builds the only accepted version is '3.13'; any other value throws. Capabilities must be produced by this function so the library can trust them (it records them in a FROM_CAPABILITIES set).","triggerScenarios":"Calling `capabilities('3.12')`, `capabilities('4.0')`, or passing a version typo/variable instead of the literal '3.13' when defining a custom component manager.","commonSituations":"Custom component manager authors copying examples from a different Ember version; passing a dynamic version string; following outdated documentation.","solutions":["Pass exactly the string '3.13': `capabilities('3.13')`","Update custom manager code copied from older/newer Ember examples to use '3.13'","Remove any dynamic version computation and hardcode the supported version","Ensure `capabilities` is imported from @glimmer/manager (or Ember's re-export) and not a local lookalike"],"exampleFix":"// before\nstatic capabilities = capabilities('3.12');\n// after\nstatic capabilities = capabilities('3.13');","handlingStrategy":"validation","validationCode":"// at manager definition\nimport { capabilities } from '@glimmer/manager';\nconst CAPS = capabilities('3.13', { asyncLifecycleCallbacks: true, updateHook: true });\nif (CAPS === undefined) throw new Error('capabilities() must be called with 3.13');","typeGuard":"const isComponentCapabilities = (c: unknown): c is ComponentCapabilities => typeof c === 'object' && c !== null && 'createInstance' in c;","tryCatchPattern":"try { caps = componentCapabilities(version); } catch (e) { if (/Invalid component manager compatibility/.test(e.message)) caps = componentCapabilities('3.13', opts); else throw e; }","preventionTips":["Hardcode the literal '3.13'; never pass dynamic version strings","Copy capability examples only from component-manager docs, not helper docs","Test manager construction in CI to catch version drift"],"tags":["component-manager","capabilities","version"],"backgroundTag":"invalid-manager-capabilities-version","analyzedSha":"26f97246a8bf2e28edf26ac3093da2e86c04ffc5","analyzedAt":"2026-09-01T05:01:28.182Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}