{"version":"2.1.227","anchor":"feature-flag-machinery-rebuilt-as-a-class-with-a-real-dispos","canonical_anchor":"feature-flag-machinery-rebuilt-as-a-class-with-a-real-dispos","heading":"Feature-flag machinery rebuilt as a class with a real dispose path","tier":"internal","area":"Internals","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.227\/e\/feature-flag-machinery-rebuilt-as-a-class-with-a-real-dispos","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.227","markdown":"### Feature-flag machinery rebuilt as a class with a real dispose path\n\nFeature-flag handling now cleans up properly, restoring the original fetch when disposed.\n\n**What**\n\nClient creation, exposure logging, remote evaluation, disk sync and the periodic refresh loop moved from module-level globals into one class with injected dependencies behind a lazy singleton. Disposing now restores the SDK's own fetch function instead of leaving the patched wrapper installed, and a disposed instance stops creating clients or refreshing.\n\n**Details**\n\n- The authenticated evaluation endpoint is still decided per call by `tengu_gb_eval_authed_enable`, whose in-source fallback is false; nothing in this build sets it, so the real value comes from remote config.\n\n**Evidence**\n\n`tengu_gb_eval_authed_enable`\n\n- Flag `tengu_gb_eval_authed_enable`: Not enough to say (read for one account on one subscription tier against v2.1.227; this account: no value returned, anonymous baseline: no value returned, compiled default: not a boolean we can read) These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.\n- Area: Internals\n- Tier: Under the hood\n- Useful: 2\/5\n- Signal: 2\/5"}