{"record":{"id":"367199484b6b02ed","repo":"emberjs/ember.js","slug":"the-hasscheduledeffect-capability-has-not-yet-be","errorCode":null,"errorMessage":"The `hasScheduledEffect` capability has not yet been implemented for helper managers. Please pass `hasValue` instead","messagePattern":"The `hasScheduledEffect` capability has not yet been implemented for helper managers\\. Please pass `hasValue` instead","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/@glimmer/manager/lib/public/helper.ts","lineNumber":47,"sourceCode":"): HelperCapabilities {\n  debugAssert(\n    managerAPI === '3.23',\n    () =>\n      `Invalid helper manager compatibility specified; you specified ${managerAPI}, but only '3.23' is supported.`\n  );\n\n  if (\n    DEBUG &&\n    (!(options.hasValue || options.hasScheduledEffect) ||\n      (options.hasValue && options.hasScheduledEffect))\n  ) {\n    throw new Error(\n      'You must pass either the `hasValue` OR the `hasScheduledEffect` capability when defining a helper manager. Passing neither, or both, is not permitted.'\n    );\n  }\n\n  if (DEBUG && options.hasScheduledEffect) {\n    throw new Error(\n      'The `hasScheduledEffect` capability has not yet been implemented for helper managers. Please pass `hasValue` instead'\n    );\n  }\n\n  return buildCapabilities({\n    hasValue: Boolean(options.hasValue),\n    hasDestroyable: Boolean(options.hasDestroyable),\n    hasScheduledEffect: Boolean(options.hasScheduledEffect),\n  });\n}\n\n////////////\n\nexport function hasValue(\n  manager: HelperManager<unknown>\n): manager is HelperManagerWithValue<unknown> {\n  return manager.capabilities.hasValue;\n}","sourceCodeStart":29,"sourceCodeEnd":65,"githubUrl":"https://github.com/emberjs/ember.js/blob/26f97246a8bf2e28edf26ac3093da2e86c04ffc5/packages/@glimmer/manager/lib/public/helper.ts#L29-L65","documentation":"Although `hasScheduledEffect` is an accepted capability name for helper managers, it is not implemented yet. `helperCapabilities()` throws immediately when it is passed in DEBUG builds, directing authors to the `hasValue` capability instead. This is a forward-compatibility guard for a future feature.","triggerScenarios":"Passing `{ hasScheduledEffect: true }` to `helperCapabilities('3.23', ...)` while defining a helper manager, usually copied from design docs or issues describing the planned API.","commonSituations":"Following RFC/design documentation before implementation; attempting to build reactive/effect-style helpers; migrating custom helpers from other frameworks that support effects.","solutions":["Replace `hasScheduledEffect: true` with `hasValue: true` and implement `compute()` returning a value","Restructure the helper so its effect is expressed through the returned value (e.g. reactive values from @glimmer/validator)","Track Glimmer releases for when hasScheduledEffect is implemented before using it","Remove stale capability options copied from design proposals"],"exampleFix":"// before\ncapabilities = helperCapabilities('3.23', { hasScheduledEffect: true });\n// after\ncapabilities = helperCapabilities('3.23', { hasValue: true });","handlingStrategy":"validation","validationCode":"function buildHelperCaps(opts: { hasValue?: boolean; hasScheduledEffect?: boolean }) {\n  if (opts.hasScheduledEffect) throw new Error('hasScheduledEffect is not implemented; use hasValue');\n  return helperCapabilities('3.23', { hasValue: true });\n}","typeGuard":"const isSupportedHelperCaps = (o: { hasValue?: boolean; hasScheduledEffect?: boolean }): boolean => !o.hasScheduledEffect && !!o.hasValue;","tryCatchPattern":"try { caps = helperCapabilities('3.23', opts); } catch (e) { if (/hasScheduledEffect` capability has not yet been implemented/.test(e.message)) caps = helperCapabilities('3.23', { hasValue: true }); else throw e; }","preventionTips":["Never pass hasScheduledEffect until the Glimmer docs mark it implemented","Implement helper behavior via compute() + hasValue","Revisit capability usage on each Glimmer/Ember upgrade"],"tags":["helper-manager","capabilities","unimplemented"],"backgroundTag":"unimplemented-helper-capability","analyzedSha":"26f97246a8bf2e28edf26ac3093da2e86c04ffc5","analyzedAt":"2026-09-01T05:01:28.182Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}