[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-launchdarkly-launchdarkly-flag-drift":3,"mdc--v1ifso-key":34,"related-repo-launchdarkly-launchdarkly-flag-drift":1734,"related-org-launchdarkly-launchdarkly-flag-drift":1820},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":20,"repoUrl":21,"updatedAt":22,"license":23,"forks":24,"topics":25,"repo":29,"sourceUrl":32,"mdContent":33},"launchdarkly-flag-drift","reconcile LaunchDarkly feature flag drift","Detect and reconcile drift between a feature flag's in-code SDK fallback default and its LaunchDarkly default rule (fallthrough). Use when a flag's default rule changed, when the user asks to detect flag drift, check whether a hardcoded default still matches LaunchDarkly, sync an in-code default, or open a PR reconciling a fallback value, without removing the flag or its evaluation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"launchdarkly","LaunchDarkly","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Flaunchdarkly.png",[12,16,17],{"name":13,"slug":14,"type":15},"Feature Flags","feature-flags","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Debugging","debugging",20,"https:\u002F\u002Fgithub.com\u002Flaunchdarkly\u002Fai-tooling","2026-07-31T06:23:33.129251","Apache-2.0",6,[26,27,28],"agent-skills","launchdarkly-ai","managed-by-terraform",{"repoUrl":21,"stars":20,"forks":24,"topics":30,"description":31},[26,27,28],"LaunchDarkly's official AI tooling","https:\u002F\u002Fgithub.com\u002Flaunchdarkly\u002Fai-tooling\u002Ftree\u002FHEAD\u002Fskills\u002Ffeature-flags\u002Flaunchdarkly-flag-drift","---\nname: launchdarkly-flag-drift\ndescription: \"Detect and reconcile drift between a feature flag's in-code SDK fallback default and its LaunchDarkly default rule (fallthrough). Use when a flag's default rule changed, when the user asks to detect flag drift, check whether a hardcoded default still matches LaunchDarkly, sync an in-code default, or open a PR reconciling a fallback value, without removing the flag or its evaluation.\"\nlicense: Apache-2.0\ncompatibility: Requires the remotely hosted LaunchDarkly MCP server\nmetadata:\n  author: launchdarkly\n  version: \"0.1.0\"\n---\n\n# LaunchDarkly Flag Drift Detection\n\nYou're using a skill that will guide you through checking whether a feature flag's **in-code SDK fallback default** has drifted from its **LaunchDarkly default rule (fallthrough)**, and reconciling the code if it has. Your job is to determine the flag's current default rule value from LaunchDarkly, locate the default argument passed to every SDK evaluation in code, compare them, and, only when they differ, update the in-code default so it matches. You never remove the flag or change its evaluation logic.\n\n## Prerequisites\n\nThis skill requires the remotely hosted LaunchDarkly MCP server to be configured in your environment.\n\n**Required MCP tools:**\n- `get-flag`: fetch the flag's configuration **in a specific environment** (fallthrough, variations, offVariation). Fallthrough is environment-specific, so call this **once per critical environment**.\n\n**Optional MCP tools:**\n- `list-flags`: find the flag key if the user only described the flag by name\n- `get-environments`: enumerate the project's environments to determine which are critical\n- `get-flag-status-across-envs`: quick snapshot of a flag's state across environments (a fast way to spot cross-environment differences before pulling each `get-flag`)\n\n## Core Concept: The SDK Fallback Default Is Not the Off Variation\n\nEvery SDK evaluation call takes a **fallback default**: the value returned when LaunchDarkly is unreachable, the client is uninitialized, or the flag is unavailable. This is a code-side safety value, distinct from the flag's `offVariation` (served when the flag is toggled off) and from its `fallthrough` (the default rule served when no targeting rule matches).\n\nThis skill treats one specific invariant as \"correct\": **the in-code fallback default should match the current default rule (fallthrough) value**. When they diverge, that's *drift*. Reconciling it keeps the value returned during an outage consistent with what most users would otherwise receive.\n\n## Core Concept: One In-Code Default, Many Environments\n\nThe in-code fallback default is a **single value compiled into the deployed code**. The flag's fallthrough, however, is configured **per environment** and can differ between them (e.g. `production`, `eu-production`, and `federal` may each serve a different default rule). So the fallthrough must be resolved in **every critical environment the code runs against**, not just one.\n\n- When the critical environments **agree** on the fallthrough, that shared value is the expected default. Reconcile as normal.\n- When they **disagree** (e.g. EU serves `true` but Federal serves `false`), a single in-code default *cannot* match all of them. That divergence is itself a finding: surface it and confirm which environment is authoritative for this build rather than silently reconciling to one. See Edge Cases.\n\nChecking only one environment is the most common way this skill produces a wrong or misleading result, so always establish the full set of critical environments first.\n\nSome teams intentionally keep the fallback as a conservative\u002Foff value instead. Treat a mismatch as a finding to surface, not always an automatic edit. See Edge Cases.\n\n## Workflow\n\n### Step 1: Identify the Flag and the Critical Environments\n\n1. **Get the flag key.** If the user described the flag by name, use `list-flags` to resolve the key. Confirm before proceeding.\n2. **Establish the critical environments.** The fallthrough is environment-specific, and the same in-code default has to stand in for every environment the deployed code serves. Determine that full set before comparing:\n   - If one build serves **multiple** production-grade environments (e.g. `production`, `eu-production`, `federal`), **all** of them are critical.\n   - If the build is scoped to **one** environment (a region- or tenant-specific deployment, e.g. a Federal-only build), that single environment is the only critical one.\n   - Look for signals in the repo (deploy config, environment names in CI, SDK key wiring) and confirm with the user. Use `get-environments` to enumerate what exists if the set is unclear. Do not assume a single `production`.\n\n### Step 2: Determine the Expected Default from LaunchDarkly\n\nCall `get-flag` **once per critical environment**. For each environment, read:\n- `fallthrough`: the default rule. If it points to a single `variation` (an index), that's the resolved value. If it's a percentage `rollout`, there is **no single default value**, so stop and handle as an edge case.\n- `variations`: map `fallthrough.variation` (the index) to `variations[index].value`. This resolved value is that environment's expected default.\n- `offVariation` and flag type: useful context for the comparison and for spotting type mismatches.\n\nThen reconcile across environments:\n\n| Across critical environments | Expected default |\n|------------------------------|------------------|\n| All resolve to the **same** value | That shared value is the expected default. Continue to Step 3. |\n| They resolve to **different** values | **Cross-environment divergence.** One in-code default cannot satisfy all of them. Do **not** auto-pick. Report the per-environment values and confirm which environment is authoritative for this build (or that the divergence should be resolved in LaunchDarkly first). See Edge Cases. |\n\n(`get-flag-status-across-envs` can give a fast heads-up on whether environments differ, but always resolve the actual fallthrough value with `get-flag` before editing.)\n\nNever guess the fallthrough value. Always resolve it from `get-flag`.\n\n### Step 3: Locate Every In-Code Default\n\nFind every place the flag is evaluated in code and, critically, the **default\u002Ffallback argument** passed to the SDK call. Search for the flag key across the codebase, then identify the default in each hit.\n\n- The default is typically the **last positional argument** to `variation(...)` \u002F `*Variation(...)` calls (e.g. `boolVariation(\"\u003Ckey>\", context, \u003Cdefault>)`).\n- Teams often wrap the SDK. Check wrapper\u002Fregistry\u002Fconfig layers that declare a default once per flag, annotation- or struct-tag-based defaults, and generated default files.\n\nSee [SDK Default Patterns](references\u002Fsdk-default-patterns.md) for the full set of patterns by language and abstraction, and how to distinguish the default argument from the context argument.\n\n### Step 4: Compare and Decide\n\nNormalize both sides before comparing (see Edge Cases for JSON\u002Fnumber\u002Ftype notes), then:\n\n| Result | Action |\n|--------|--------|\n| Critical environments **disagree** on the fallthrough | **Stop — no single expected default exists.** Report the per-environment values and confirm which environment is authoritative for this build before editing (or resolve the divergence in LaunchDarkly first). Do not auto-reconcile to one environment. |\n| In-code default **matches** the expected default (in every critical environment) | **No drift.** Report `drift_detected: false` and stop. Do not open a PR. |\n| In-code default **differs** | **Drift detected.** Proceed to Step 5 to reconcile. |\n| Multiple evaluations with **different** in-code defaults | Drift. Reconcile all of them to the expected value and note the prior inconsistency. |\n\n### Step 5: Reconcile the In-Code Default\n\nUpdate **only** the default\u002Ffallback argument so it matches the expected value.\n\n- Do **not** change evaluation logic, branching, or off-path behavior.\n- Do **not** remove the flag or its evaluation.\n- If the default lives in a **generated file**, do not hand-edit it. Update the source of truth (the constructor\u002Fregistry\u002Fannotation) and regenerate using the project's codegen command. Note `requires_generation: true` in your summary.\n\n**Example (before then after), expected default = `true`:**\n\n```typescript\n\u002F\u002F Before: outage returns false even though the default rule now serves true\nconst enabled = await ldClient.variation('new-checkout-flow', context, false);\n\n\u002F\u002F After: fallback default reconciled to match the fallthrough\nconst enabled = await ldClient.variation('new-checkout-flow', context, true);\n```\n\nThe surrounding `if (enabled) { ... } else { ... }` branching is left untouched.\n\n### Step 6: Validate Before Committing\n\nRun the project's configured checks scoped to the changed files. Discover them from `package.json` scripts, a `Makefile`, `AGENTS.md`\u002F`CLAUDE.md`\u002F`CONTRIBUTING.md`, or the CI config. Typically: format, lint, type-check, build, and the relevant tests.\n\n**Hard stop:** if any check fails and you cannot fix it, do not commit or push. Narrow your change instead. Never ship code that fails format\u002Flint\u002Ftype-check\u002Fbuild\u002Ftest.\n\n### Step 7: Open the Pull Request\n\nOnly after validation passes. Use [references\u002Fpr-template.md](references\u002Fpr-template.md). The description must state: the flag key, the critical environments checked and their resolved fallthrough values, the old vs new in-code default, and that **only** the SDK fallback default changed (the flag and its evaluation are preserved).\n\n- Follow the repository's contribution conventions (branch naming, commit style). Check `AGENTS.md`\u002F`CLAUDE.md`\u002F`CONTRIBUTING.md` first.\n- A clear default: branch `fix\u002Fflag-default-drift-\u003Cflag-key>`, commit `fix: sync in-code default for \u003Cflag-key> to match fallthrough`.\n\n### Step 8: Report a Structured Summary\n\nProduce a concise summary with these fields:\n\n```\nflag_key:              \u003Ckey>\nenvironments_checked:  [\u003Cenv>: \u003Cresolved fallthrough value>, ...]\nenvironments_diverge:  true | false\ndrift_detected:        true | false\nold_default:           \u003Cin-code value before, or n\u002Fa>\nnew_default:           \u003Cexpected value \u002F value written, or n\u002Fa>\nfiles_modified:        [\u003Cpaths>]\npr_url:                \u003Curl or null>\nrequires_generation:   true | false\nnotes:                 \u003Canything the reviewer should know, incl. any cross-environment divergence>\n```\n\n## Edge Cases\n\n| Situation | Action |\n|-----------|--------|\n| Fallthrough is a **percentage rollout** | There is no single default value. Report the split, do not auto-edit, and ask the user which value the fallback should represent. |\n| Fallback appears **intentionally conservative** (matches `offVariation` or a safe value) | Surface the mismatch and confirm intent before changing. Some teams keep the fallback as a safe value on purpose. |\n| In-code default lives in a **generated file** | Edit the source of truth and regenerate; never hand-edit generated output. Set `requires_generation: true`. |\n| **Type mismatch** between code default and the variation's type | Flag as a bug in the PR\u002Fsummary; the default and variation types should agree. |\n| **JSON \u002F object \u002F float** defaults | Compare by normalized value, not string form (`{\"a\":1}` == `{ \"a\": 1 }`, `0` == `0.0`). |\n| Flag **not found** or wrong environment | Inform the user; check for typos in the key and confirm the environment. |\n| **Dynamic flag keys** (`flag-${id}`) | Automated detection may be incomplete; flag for manual review. |\n| Critical environments **disagree** on the fallthrough (e.g. `eu-production` serves `true`, `federal` serves `false`) | A single in-code default cannot match all of them. If the build is scoped to **one** environment, reconcile to that environment's value and note the others. If the build serves **several** divergent environments, do not silently pick one — surface every per-environment value and confirm which environment is authoritative, or recommend resolving the divergence in LaunchDarkly first. |\n| Build targets a **single environment** (region- or tenant-specific deployment) | Treat that environment as the sole critical one; other environments' fallthroughs are not relevant to this build's default. |\n| Flag spans **multiple repositories** | This skill operates on the current repo. Note other repos that also reference the key so they can be reconciled separately. |\n\n## What NOT to Do\n\n- Don't remove the flag or its evaluation; this skill only touches the default argument.\n- Don't change evaluation logic, branching, or off-path behavior beyond the fallback default.\n- Don't check only one environment; resolve the fallthrough in every critical environment the build serves.\n- Don't reconcile to one environment's fallthrough when critical environments disagree — a single default can't satisfy divergent environments, so surface the divergence and confirm the authoritative environment first.\n- Don't hand-edit generated files; regenerate from the source of truth.\n- Don't open a PR when there is no drift.\n- Don't guess the fallthrough value; resolve it from `get-flag`.\n- Don't ship code that fails format, lint, type-check, build, or tests.\n\n## References\n\n- [SDK Default Patterns](references\u002Fsdk-default-patterns.md): Where the fallback default lives by language, wrapper, annotation, and generated-file pattern; how to find it\n- [PR Template](references\u002Fpr-template.md): Structured PR description for a drift reconciliation\n- [Flag Cleanup](..\u002Flaunchdarkly-flag-cleanup\u002FSKILL.md): If the goal is to remove the flag entirely, not reconcile its default\n- [Flag Targeting](..\u002Flaunchdarkly-flag-targeting\u002FSKILL.md): If the goal is to change the default rule in LaunchDarkly instead of the code\n",{"data":35,"body":39},{"name":4,"description":6,"license":23,"compatibility":36,"metadata":37},"Requires the remotely hosted LaunchDarkly MCP server",{"author":8,"version":38},"0.1.0",{"type":40,"children":41},"root",[42,51,72,79,84,92,123,131,174,180,208,228,234,284,334,339,344,350,357,459,465,483,556,561,641,660,671,677,689,733,747,753,758,878,884,896,940,955,1160,1173,1179,1222,1232,1238,1256,1303,1309,1314,1324,1330,1623,1629,1678,1684,1728],{"type":43,"tag":44,"props":45,"children":47},"element","h1",{"id":46},"launchdarkly-flag-drift-detection",[48],{"type":49,"value":50},"text","LaunchDarkly Flag Drift Detection",{"type":43,"tag":52,"props":53,"children":54},"p",{},[55,57,63,65,70],{"type":49,"value":56},"You're using a skill that will guide you through checking whether a feature flag's ",{"type":43,"tag":58,"props":59,"children":60},"strong",{},[61],{"type":49,"value":62},"in-code SDK fallback default",{"type":49,"value":64}," has drifted from its ",{"type":43,"tag":58,"props":66,"children":67},{},[68],{"type":49,"value":69},"LaunchDarkly default rule (fallthrough)",{"type":49,"value":71},", and reconciling the code if it has. Your job is to determine the flag's current default rule value from LaunchDarkly, locate the default argument passed to every SDK evaluation in code, compare them, and, only when they differ, update the in-code default so it matches. You never remove the flag or change its evaluation logic.",{"type":43,"tag":73,"props":74,"children":76},"h2",{"id":75},"prerequisites",[77],{"type":49,"value":78},"Prerequisites",{"type":43,"tag":52,"props":80,"children":81},{},[82],{"type":49,"value":83},"This skill requires the remotely hosted LaunchDarkly MCP server to be configured in your environment.",{"type":43,"tag":52,"props":85,"children":86},{},[87],{"type":43,"tag":58,"props":88,"children":89},{},[90],{"type":49,"value":91},"Required MCP tools:",{"type":43,"tag":93,"props":94,"children":95},"ul",{},[96],{"type":43,"tag":97,"props":98,"children":99},"li",{},[100,107,109,114,116,121],{"type":43,"tag":101,"props":102,"children":104},"code",{"className":103},[],[105],{"type":49,"value":106},"get-flag",{"type":49,"value":108},": fetch the flag's configuration ",{"type":43,"tag":58,"props":110,"children":111},{},[112],{"type":49,"value":113},"in a specific environment",{"type":49,"value":115}," (fallthrough, variations, offVariation). Fallthrough is environment-specific, so call this ",{"type":43,"tag":58,"props":117,"children":118},{},[119],{"type":49,"value":120},"once per critical environment",{"type":49,"value":122},".",{"type":43,"tag":52,"props":124,"children":125},{},[126],{"type":43,"tag":58,"props":127,"children":128},{},[129],{"type":49,"value":130},"Optional MCP tools:",{"type":43,"tag":93,"props":132,"children":133},{},[134,145,156],{"type":43,"tag":97,"props":135,"children":136},{},[137,143],{"type":43,"tag":101,"props":138,"children":140},{"className":139},[],[141],{"type":49,"value":142},"list-flags",{"type":49,"value":144},": find the flag key if the user only described the flag by name",{"type":43,"tag":97,"props":146,"children":147},{},[148,154],{"type":43,"tag":101,"props":149,"children":151},{"className":150},[],[152],{"type":49,"value":153},"get-environments",{"type":49,"value":155},": enumerate the project's environments to determine which are critical",{"type":43,"tag":97,"props":157,"children":158},{},[159,165,167,172],{"type":43,"tag":101,"props":160,"children":162},{"className":161},[],[163],{"type":49,"value":164},"get-flag-status-across-envs",{"type":49,"value":166},": quick snapshot of a flag's state across environments (a fast way to spot cross-environment differences before pulling each ",{"type":43,"tag":101,"props":168,"children":170},{"className":169},[],[171],{"type":49,"value":106},{"type":49,"value":173},")",{"type":43,"tag":73,"props":175,"children":177},{"id":176},"core-concept-the-sdk-fallback-default-is-not-the-off-variation",[178],{"type":49,"value":179},"Core Concept: The SDK Fallback Default Is Not the Off Variation",{"type":43,"tag":52,"props":181,"children":182},{},[183,185,190,192,198,200,206],{"type":49,"value":184},"Every SDK evaluation call takes a ",{"type":43,"tag":58,"props":186,"children":187},{},[188],{"type":49,"value":189},"fallback default",{"type":49,"value":191},": the value returned when LaunchDarkly is unreachable, the client is uninitialized, or the flag is unavailable. This is a code-side safety value, distinct from the flag's ",{"type":43,"tag":101,"props":193,"children":195},{"className":194},[],[196],{"type":49,"value":197},"offVariation",{"type":49,"value":199}," (served when the flag is toggled off) and from its ",{"type":43,"tag":101,"props":201,"children":203},{"className":202},[],[204],{"type":49,"value":205},"fallthrough",{"type":49,"value":207}," (the default rule served when no targeting rule matches).",{"type":43,"tag":52,"props":209,"children":210},{},[211,213,218,220,226],{"type":49,"value":212},"This skill treats one specific invariant as \"correct\": ",{"type":43,"tag":58,"props":214,"children":215},{},[216],{"type":49,"value":217},"the in-code fallback default should match the current default rule (fallthrough) value",{"type":49,"value":219},". When they diverge, that's ",{"type":43,"tag":221,"props":222,"children":223},"em",{},[224],{"type":49,"value":225},"drift",{"type":49,"value":227},". Reconciling it keeps the value returned during an outage consistent with what most users would otherwise receive.",{"type":43,"tag":73,"props":229,"children":231},{"id":230},"core-concept-one-in-code-default-many-environments",[232],{"type":49,"value":233},"Core Concept: One In-Code Default, Many Environments",{"type":43,"tag":52,"props":235,"children":236},{},[237,239,244,246,251,253,259,261,267,269,275,277,282],{"type":49,"value":238},"The in-code fallback default is a ",{"type":43,"tag":58,"props":240,"children":241},{},[242],{"type":49,"value":243},"single value compiled into the deployed code",{"type":49,"value":245},". The flag's fallthrough, however, is configured ",{"type":43,"tag":58,"props":247,"children":248},{},[249],{"type":49,"value":250},"per environment",{"type":49,"value":252}," and can differ between them (e.g. ",{"type":43,"tag":101,"props":254,"children":256},{"className":255},[],[257],{"type":49,"value":258},"production",{"type":49,"value":260},", ",{"type":43,"tag":101,"props":262,"children":264},{"className":263},[],[265],{"type":49,"value":266},"eu-production",{"type":49,"value":268},", and ",{"type":43,"tag":101,"props":270,"children":272},{"className":271},[],[273],{"type":49,"value":274},"federal",{"type":49,"value":276}," may each serve a different default rule). So the fallthrough must be resolved in ",{"type":43,"tag":58,"props":278,"children":279},{},[280],{"type":49,"value":281},"every critical environment the code runs against",{"type":49,"value":283},", not just one.",{"type":43,"tag":93,"props":285,"children":286},{},[287,299],{"type":43,"tag":97,"props":288,"children":289},{},[290,292,297],{"type":49,"value":291},"When the critical environments ",{"type":43,"tag":58,"props":293,"children":294},{},[295],{"type":49,"value":296},"agree",{"type":49,"value":298}," on the fallthrough, that shared value is the expected default. Reconcile as normal.",{"type":43,"tag":97,"props":300,"children":301},{},[302,304,309,311,317,319,325,327,332],{"type":49,"value":303},"When they ",{"type":43,"tag":58,"props":305,"children":306},{},[307],{"type":49,"value":308},"disagree",{"type":49,"value":310}," (e.g. EU serves ",{"type":43,"tag":101,"props":312,"children":314},{"className":313},[],[315],{"type":49,"value":316},"true",{"type":49,"value":318}," but Federal serves ",{"type":43,"tag":101,"props":320,"children":322},{"className":321},[],[323],{"type":49,"value":324},"false",{"type":49,"value":326},"), a single in-code default ",{"type":43,"tag":221,"props":328,"children":329},{},[330],{"type":49,"value":331},"cannot",{"type":49,"value":333}," match all of them. That divergence is itself a finding: surface it and confirm which environment is authoritative for this build rather than silently reconciling to one. See Edge Cases.",{"type":43,"tag":52,"props":335,"children":336},{},[337],{"type":49,"value":338},"Checking only one environment is the most common way this skill produces a wrong or misleading result, so always establish the full set of critical environments first.",{"type":43,"tag":52,"props":340,"children":341},{},[342],{"type":49,"value":343},"Some teams intentionally keep the fallback as a conservative\u002Foff value instead. Treat a mismatch as a finding to surface, not always an automatic edit. See Edge Cases.",{"type":43,"tag":73,"props":345,"children":347},{"id":346},"workflow",[348],{"type":49,"value":349},"Workflow",{"type":43,"tag":351,"props":352,"children":354},"h3",{"id":353},"step-1-identify-the-flag-and-the-critical-environments",[355],{"type":49,"value":356},"Step 1: Identify the Flag and the Critical Environments",{"type":43,"tag":358,"props":359,"children":360},"ol",{},[361,378],{"type":43,"tag":97,"props":362,"children":363},{},[364,369,371,376],{"type":43,"tag":58,"props":365,"children":366},{},[367],{"type":49,"value":368},"Get the flag key.",{"type":49,"value":370}," If the user described the flag by name, use ",{"type":43,"tag":101,"props":372,"children":374},{"className":373},[],[375],{"type":49,"value":142},{"type":49,"value":377}," to resolve the key. Confirm before proceeding.",{"type":43,"tag":97,"props":379,"children":380},{},[381,386,388],{"type":43,"tag":58,"props":382,"children":383},{},[384],{"type":49,"value":385},"Establish the critical environments.",{"type":49,"value":387}," The fallthrough is environment-specific, and the same in-code default has to stand in for every environment the deployed code serves. Determine that full set before comparing:\n",{"type":43,"tag":93,"props":389,"children":390},{},[391,429,441],{"type":43,"tag":97,"props":392,"children":393},{},[394,396,401,403,408,409,414,415,420,422,427],{"type":49,"value":395},"If one build serves ",{"type":43,"tag":58,"props":397,"children":398},{},[399],{"type":49,"value":400},"multiple",{"type":49,"value":402}," production-grade environments (e.g. ",{"type":43,"tag":101,"props":404,"children":406},{"className":405},[],[407],{"type":49,"value":258},{"type":49,"value":260},{"type":43,"tag":101,"props":410,"children":412},{"className":411},[],[413],{"type":49,"value":266},{"type":49,"value":260},{"type":43,"tag":101,"props":416,"children":418},{"className":417},[],[419],{"type":49,"value":274},{"type":49,"value":421},"), ",{"type":43,"tag":58,"props":423,"children":424},{},[425],{"type":49,"value":426},"all",{"type":49,"value":428}," of them are critical.",{"type":43,"tag":97,"props":430,"children":431},{},[432,434,439],{"type":49,"value":433},"If the build is scoped to ",{"type":43,"tag":58,"props":435,"children":436},{},[437],{"type":49,"value":438},"one",{"type":49,"value":440}," environment (a region- or tenant-specific deployment, e.g. a Federal-only build), that single environment is the only critical one.",{"type":43,"tag":97,"props":442,"children":443},{},[444,446,451,453,458],{"type":49,"value":445},"Look for signals in the repo (deploy config, environment names in CI, SDK key wiring) and confirm with the user. Use ",{"type":43,"tag":101,"props":447,"children":449},{"className":448},[],[450],{"type":49,"value":153},{"type":49,"value":452}," to enumerate what exists if the set is unclear. Do not assume a single ",{"type":43,"tag":101,"props":454,"children":456},{"className":455},[],[457],{"type":49,"value":258},{"type":49,"value":122},{"type":43,"tag":351,"props":460,"children":462},{"id":461},"step-2-determine-the-expected-default-from-launchdarkly",[463],{"type":49,"value":464},"Step 2: Determine the Expected Default from LaunchDarkly",{"type":43,"tag":52,"props":466,"children":467},{},[468,470,475,477,481],{"type":49,"value":469},"Call ",{"type":43,"tag":101,"props":471,"children":473},{"className":472},[],[474],{"type":49,"value":106},{"type":49,"value":476}," ",{"type":43,"tag":58,"props":478,"children":479},{},[480],{"type":49,"value":120},{"type":49,"value":482},". For each environment, read:",{"type":43,"tag":93,"props":484,"children":485},{},[486,519,546],{"type":43,"tag":97,"props":487,"children":488},{},[489,494,496,502,504,510,512,517],{"type":43,"tag":101,"props":490,"children":492},{"className":491},[],[493],{"type":49,"value":205},{"type":49,"value":495},": the default rule. If it points to a single ",{"type":43,"tag":101,"props":497,"children":499},{"className":498},[],[500],{"type":49,"value":501},"variation",{"type":49,"value":503}," (an index), that's the resolved value. If it's a percentage ",{"type":43,"tag":101,"props":505,"children":507},{"className":506},[],[508],{"type":49,"value":509},"rollout",{"type":49,"value":511},", there is ",{"type":43,"tag":58,"props":513,"children":514},{},[515],{"type":49,"value":516},"no single default value",{"type":49,"value":518},", so stop and handle as an edge case.",{"type":43,"tag":97,"props":520,"children":521},{},[522,528,530,536,538,544],{"type":43,"tag":101,"props":523,"children":525},{"className":524},[],[526],{"type":49,"value":527},"variations",{"type":49,"value":529},": map ",{"type":43,"tag":101,"props":531,"children":533},{"className":532},[],[534],{"type":49,"value":535},"fallthrough.variation",{"type":49,"value":537}," (the index) to ",{"type":43,"tag":101,"props":539,"children":541},{"className":540},[],[542],{"type":49,"value":543},"variations[index].value",{"type":49,"value":545},". This resolved value is that environment's expected default.",{"type":43,"tag":97,"props":547,"children":548},{},[549,554],{"type":43,"tag":101,"props":550,"children":552},{"className":551},[],[553],{"type":49,"value":197},{"type":49,"value":555}," and flag type: useful context for the comparison and for spotting type mismatches.",{"type":43,"tag":52,"props":557,"children":558},{},[559],{"type":49,"value":560},"Then reconcile across environments:",{"type":43,"tag":562,"props":563,"children":564},"table",{},[565,584],{"type":43,"tag":566,"props":567,"children":568},"thead",{},[569],{"type":43,"tag":570,"props":571,"children":572},"tr",{},[573,579],{"type":43,"tag":574,"props":575,"children":576},"th",{},[577],{"type":49,"value":578},"Across critical environments",{"type":43,"tag":574,"props":580,"children":581},{},[582],{"type":49,"value":583},"Expected default",{"type":43,"tag":585,"props":586,"children":587},"tbody",{},[588,609],{"type":43,"tag":570,"props":589,"children":590},{},[591,604],{"type":43,"tag":592,"props":593,"children":594},"td",{},[595,597,602],{"type":49,"value":596},"All resolve to the ",{"type":43,"tag":58,"props":598,"children":599},{},[600],{"type":49,"value":601},"same",{"type":49,"value":603}," value",{"type":43,"tag":592,"props":605,"children":606},{},[607],{"type":49,"value":608},"That shared value is the expected default. Continue to Step 3.",{"type":43,"tag":570,"props":610,"children":611},{},[612,624],{"type":43,"tag":592,"props":613,"children":614},{},[615,617,622],{"type":49,"value":616},"They resolve to ",{"type":43,"tag":58,"props":618,"children":619},{},[620],{"type":49,"value":621},"different",{"type":49,"value":623}," values",{"type":43,"tag":592,"props":625,"children":626},{},[627,632,634,639],{"type":43,"tag":58,"props":628,"children":629},{},[630],{"type":49,"value":631},"Cross-environment divergence.",{"type":49,"value":633}," One in-code default cannot satisfy all of them. Do ",{"type":43,"tag":58,"props":635,"children":636},{},[637],{"type":49,"value":638},"not",{"type":49,"value":640}," auto-pick. Report the per-environment values and confirm which environment is authoritative for this build (or that the divergence should be resolved in LaunchDarkly first). See Edge Cases.",{"type":43,"tag":52,"props":642,"children":643},{},[644,646,651,653,658],{"type":49,"value":645},"(",{"type":43,"tag":101,"props":647,"children":649},{"className":648},[],[650],{"type":49,"value":164},{"type":49,"value":652}," can give a fast heads-up on whether environments differ, but always resolve the actual fallthrough value with ",{"type":43,"tag":101,"props":654,"children":656},{"className":655},[],[657],{"type":49,"value":106},{"type":49,"value":659}," before editing.)",{"type":43,"tag":52,"props":661,"children":662},{},[663,665,670],{"type":49,"value":664},"Never guess the fallthrough value. Always resolve it from ",{"type":43,"tag":101,"props":666,"children":668},{"className":667},[],[669],{"type":49,"value":106},{"type":49,"value":122},{"type":43,"tag":351,"props":672,"children":674},{"id":673},"step-3-locate-every-in-code-default",[675],{"type":49,"value":676},"Step 3: Locate Every In-Code Default",{"type":43,"tag":52,"props":678,"children":679},{},[680,682,687],{"type":49,"value":681},"Find every place the flag is evaluated in code and, critically, the ",{"type":43,"tag":58,"props":683,"children":684},{},[685],{"type":49,"value":686},"default\u002Ffallback argument",{"type":49,"value":688}," passed to the SDK call. Search for the flag key across the codebase, then identify the default in each hit.",{"type":43,"tag":93,"props":690,"children":691},{},[692,728],{"type":43,"tag":97,"props":693,"children":694},{},[695,697,702,704,710,712,718,720,726],{"type":49,"value":696},"The default is typically the ",{"type":43,"tag":58,"props":698,"children":699},{},[700],{"type":49,"value":701},"last positional argument",{"type":49,"value":703}," to ",{"type":43,"tag":101,"props":705,"children":707},{"className":706},[],[708],{"type":49,"value":709},"variation(...)",{"type":49,"value":711}," \u002F ",{"type":43,"tag":101,"props":713,"children":715},{"className":714},[],[716],{"type":49,"value":717},"*Variation(...)",{"type":49,"value":719}," calls (e.g. ",{"type":43,"tag":101,"props":721,"children":723},{"className":722},[],[724],{"type":49,"value":725},"boolVariation(\"\u003Ckey>\", context, \u003Cdefault>)",{"type":49,"value":727},").",{"type":43,"tag":97,"props":729,"children":730},{},[731],{"type":49,"value":732},"Teams often wrap the SDK. Check wrapper\u002Fregistry\u002Fconfig layers that declare a default once per flag, annotation- or struct-tag-based defaults, and generated default files.",{"type":43,"tag":52,"props":734,"children":735},{},[736,738,745],{"type":49,"value":737},"See ",{"type":43,"tag":739,"props":740,"children":742},"a",{"href":741},"references\u002Fsdk-default-patterns.md",[743],{"type":49,"value":744},"SDK Default Patterns",{"type":49,"value":746}," for the full set of patterns by language and abstraction, and how to distinguish the default argument from the context argument.",{"type":43,"tag":351,"props":748,"children":750},{"id":749},"step-4-compare-and-decide",[751],{"type":49,"value":752},"Step 4: Compare and Decide",{"type":43,"tag":52,"props":754,"children":755},{},[756],{"type":49,"value":757},"Normalize both sides before comparing (see Edge Cases for JSON\u002Fnumber\u002Ftype notes), then:",{"type":43,"tag":562,"props":759,"children":760},{},[761,777],{"type":43,"tag":566,"props":762,"children":763},{},[764],{"type":43,"tag":570,"props":765,"children":766},{},[767,772],{"type":43,"tag":574,"props":768,"children":769},{},[770],{"type":49,"value":771},"Result",{"type":43,"tag":574,"props":773,"children":774},{},[775],{"type":49,"value":776},"Action",{"type":43,"tag":585,"props":778,"children":779},{},[780,804,837,859],{"type":43,"tag":570,"props":781,"children":782},{},[783,794],{"type":43,"tag":592,"props":784,"children":785},{},[786,788,792],{"type":49,"value":787},"Critical environments ",{"type":43,"tag":58,"props":789,"children":790},{},[791],{"type":49,"value":308},{"type":49,"value":793}," on the fallthrough",{"type":43,"tag":592,"props":795,"children":796},{},[797,802],{"type":43,"tag":58,"props":798,"children":799},{},[800],{"type":49,"value":801},"Stop — no single expected default exists.",{"type":49,"value":803}," Report the per-environment values and confirm which environment is authoritative for this build before editing (or resolve the divergence in LaunchDarkly first). Do not auto-reconcile to one environment.",{"type":43,"tag":570,"props":805,"children":806},{},[807,819],{"type":43,"tag":592,"props":808,"children":809},{},[810,812,817],{"type":49,"value":811},"In-code default ",{"type":43,"tag":58,"props":813,"children":814},{},[815],{"type":49,"value":816},"matches",{"type":49,"value":818}," the expected default (in every critical environment)",{"type":43,"tag":592,"props":820,"children":821},{},[822,827,829,835],{"type":43,"tag":58,"props":823,"children":824},{},[825],{"type":49,"value":826},"No drift.",{"type":49,"value":828}," Report ",{"type":43,"tag":101,"props":830,"children":832},{"className":831},[],[833],{"type":49,"value":834},"drift_detected: false",{"type":49,"value":836}," and stop. Do not open a PR.",{"type":43,"tag":570,"props":838,"children":839},{},[840,849],{"type":43,"tag":592,"props":841,"children":842},{},[843,844],{"type":49,"value":811},{"type":43,"tag":58,"props":845,"children":846},{},[847],{"type":49,"value":848},"differs",{"type":43,"tag":592,"props":850,"children":851},{},[852,857],{"type":43,"tag":58,"props":853,"children":854},{},[855],{"type":49,"value":856},"Drift detected.",{"type":49,"value":858}," Proceed to Step 5 to reconcile.",{"type":43,"tag":570,"props":860,"children":861},{},[862,873],{"type":43,"tag":592,"props":863,"children":864},{},[865,867,871],{"type":49,"value":866},"Multiple evaluations with ",{"type":43,"tag":58,"props":868,"children":869},{},[870],{"type":49,"value":621},{"type":49,"value":872}," in-code defaults",{"type":43,"tag":592,"props":874,"children":875},{},[876],{"type":49,"value":877},"Drift. Reconcile all of them to the expected value and note the prior inconsistency.",{"type":43,"tag":351,"props":879,"children":881},{"id":880},"step-5-reconcile-the-in-code-default",[882],{"type":49,"value":883},"Step 5: Reconcile the In-Code Default",{"type":43,"tag":52,"props":885,"children":886},{},[887,889,894],{"type":49,"value":888},"Update ",{"type":43,"tag":58,"props":890,"children":891},{},[892],{"type":49,"value":893},"only",{"type":49,"value":895}," the default\u002Ffallback argument so it matches the expected value.",{"type":43,"tag":93,"props":897,"children":898},{},[899,910,920],{"type":43,"tag":97,"props":900,"children":901},{},[902,904,908],{"type":49,"value":903},"Do ",{"type":43,"tag":58,"props":905,"children":906},{},[907],{"type":49,"value":638},{"type":49,"value":909}," change evaluation logic, branching, or off-path behavior.",{"type":43,"tag":97,"props":911,"children":912},{},[913,914,918],{"type":49,"value":903},{"type":43,"tag":58,"props":915,"children":916},{},[917],{"type":49,"value":638},{"type":49,"value":919}," remove the flag or its evaluation.",{"type":43,"tag":97,"props":921,"children":922},{},[923,925,930,932,938],{"type":49,"value":924},"If the default lives in a ",{"type":43,"tag":58,"props":926,"children":927},{},[928],{"type":49,"value":929},"generated file",{"type":49,"value":931},", do not hand-edit it. Update the source of truth (the constructor\u002Fregistry\u002Fannotation) and regenerate using the project's codegen command. Note ",{"type":43,"tag":101,"props":933,"children":935},{"className":934},[],[936],{"type":49,"value":937},"requires_generation: true",{"type":49,"value":939}," in your summary.",{"type":43,"tag":52,"props":941,"children":942},{},[943],{"type":43,"tag":58,"props":944,"children":945},{},[946,948,953],{"type":49,"value":947},"Example (before then after), expected default = ",{"type":43,"tag":101,"props":949,"children":951},{"className":950},[],[952],{"type":49,"value":316},{"type":49,"value":954},":",{"type":43,"tag":956,"props":957,"children":962},"pre",{"className":958,"code":959,"language":960,"meta":961,"style":961},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Before: outage returns false even though the default rule now serves true\nconst enabled = await ldClient.variation('new-checkout-flow', context, false);\n\n\u002F\u002F After: fallback default reconciled to match the fallthrough\nconst enabled = await ldClient.variation('new-checkout-flow', context, true);\n","typescript","",[963],{"type":43,"tag":101,"props":964,"children":965},{"__ignoreMap":961},[966,978,1068,1078,1087],{"type":43,"tag":967,"props":968,"children":971},"span",{"class":969,"line":970},"line",1,[972],{"type":43,"tag":967,"props":973,"children":975},{"style":974},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[976],{"type":49,"value":977},"\u002F\u002F Before: outage returns false even though the default rule now serves true\n",{"type":43,"tag":967,"props":979,"children":981},{"class":969,"line":980},2,[982,988,994,1000,1006,1011,1015,1020,1024,1029,1035,1039,1044,1049,1053,1059,1063],{"type":43,"tag":967,"props":983,"children":985},{"style":984},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[986],{"type":49,"value":987},"const",{"type":43,"tag":967,"props":989,"children":991},{"style":990},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[992],{"type":49,"value":993}," enabled ",{"type":43,"tag":967,"props":995,"children":997},{"style":996},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[998],{"type":49,"value":999},"=",{"type":43,"tag":967,"props":1001,"children":1003},{"style":1002},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[1004],{"type":49,"value":1005}," await",{"type":43,"tag":967,"props":1007,"children":1008},{"style":990},[1009],{"type":49,"value":1010}," ldClient",{"type":43,"tag":967,"props":1012,"children":1013},{"style":996},[1014],{"type":49,"value":122},{"type":43,"tag":967,"props":1016,"children":1018},{"style":1017},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1019],{"type":49,"value":501},{"type":43,"tag":967,"props":1021,"children":1022},{"style":990},[1023],{"type":49,"value":645},{"type":43,"tag":967,"props":1025,"children":1026},{"style":996},[1027],{"type":49,"value":1028},"'",{"type":43,"tag":967,"props":1030,"children":1032},{"style":1031},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1033],{"type":49,"value":1034},"new-checkout-flow",{"type":43,"tag":967,"props":1036,"children":1037},{"style":996},[1038],{"type":49,"value":1028},{"type":43,"tag":967,"props":1040,"children":1041},{"style":996},[1042],{"type":49,"value":1043},",",{"type":43,"tag":967,"props":1045,"children":1046},{"style":990},[1047],{"type":49,"value":1048}," context",{"type":43,"tag":967,"props":1050,"children":1051},{"style":996},[1052],{"type":49,"value":1043},{"type":43,"tag":967,"props":1054,"children":1056},{"style":1055},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[1057],{"type":49,"value":1058}," false",{"type":43,"tag":967,"props":1060,"children":1061},{"style":990},[1062],{"type":49,"value":173},{"type":43,"tag":967,"props":1064,"children":1065},{"style":996},[1066],{"type":49,"value":1067},";\n",{"type":43,"tag":967,"props":1069,"children":1071},{"class":969,"line":1070},3,[1072],{"type":43,"tag":967,"props":1073,"children":1075},{"emptyLinePlaceholder":1074},true,[1076],{"type":49,"value":1077},"\n",{"type":43,"tag":967,"props":1079,"children":1081},{"class":969,"line":1080},4,[1082],{"type":43,"tag":967,"props":1083,"children":1084},{"style":974},[1085],{"type":49,"value":1086},"\u002F\u002F After: fallback default reconciled to match the fallthrough\n",{"type":43,"tag":967,"props":1088,"children":1090},{"class":969,"line":1089},5,[1091,1095,1099,1103,1107,1111,1115,1119,1123,1127,1131,1135,1139,1143,1147,1152,1156],{"type":43,"tag":967,"props":1092,"children":1093},{"style":984},[1094],{"type":49,"value":987},{"type":43,"tag":967,"props":1096,"children":1097},{"style":990},[1098],{"type":49,"value":993},{"type":43,"tag":967,"props":1100,"children":1101},{"style":996},[1102],{"type":49,"value":999},{"type":43,"tag":967,"props":1104,"children":1105},{"style":1002},[1106],{"type":49,"value":1005},{"type":43,"tag":967,"props":1108,"children":1109},{"style":990},[1110],{"type":49,"value":1010},{"type":43,"tag":967,"props":1112,"children":1113},{"style":996},[1114],{"type":49,"value":122},{"type":43,"tag":967,"props":1116,"children":1117},{"style":1017},[1118],{"type":49,"value":501},{"type":43,"tag":967,"props":1120,"children":1121},{"style":990},[1122],{"type":49,"value":645},{"type":43,"tag":967,"props":1124,"children":1125},{"style":996},[1126],{"type":49,"value":1028},{"type":43,"tag":967,"props":1128,"children":1129},{"style":1031},[1130],{"type":49,"value":1034},{"type":43,"tag":967,"props":1132,"children":1133},{"style":996},[1134],{"type":49,"value":1028},{"type":43,"tag":967,"props":1136,"children":1137},{"style":996},[1138],{"type":49,"value":1043},{"type":43,"tag":967,"props":1140,"children":1141},{"style":990},[1142],{"type":49,"value":1048},{"type":43,"tag":967,"props":1144,"children":1145},{"style":996},[1146],{"type":49,"value":1043},{"type":43,"tag":967,"props":1148,"children":1149},{"style":1055},[1150],{"type":49,"value":1151}," true",{"type":43,"tag":967,"props":1153,"children":1154},{"style":990},[1155],{"type":49,"value":173},{"type":43,"tag":967,"props":1157,"children":1158},{"style":996},[1159],{"type":49,"value":1067},{"type":43,"tag":52,"props":1161,"children":1162},{},[1163,1165,1171],{"type":49,"value":1164},"The surrounding ",{"type":43,"tag":101,"props":1166,"children":1168},{"className":1167},[],[1169],{"type":49,"value":1170},"if (enabled) { ... } else { ... }",{"type":49,"value":1172}," branching is left untouched.",{"type":43,"tag":351,"props":1174,"children":1176},{"id":1175},"step-6-validate-before-committing",[1177],{"type":49,"value":1178},"Step 6: Validate Before Committing",{"type":43,"tag":52,"props":1180,"children":1181},{},[1182,1184,1190,1192,1198,1199,1205,1207,1213,1214,1220],{"type":49,"value":1183},"Run the project's configured checks scoped to the changed files. Discover them from ",{"type":43,"tag":101,"props":1185,"children":1187},{"className":1186},[],[1188],{"type":49,"value":1189},"package.json",{"type":49,"value":1191}," scripts, a ",{"type":43,"tag":101,"props":1193,"children":1195},{"className":1194},[],[1196],{"type":49,"value":1197},"Makefile",{"type":49,"value":260},{"type":43,"tag":101,"props":1200,"children":1202},{"className":1201},[],[1203],{"type":49,"value":1204},"AGENTS.md",{"type":49,"value":1206},"\u002F",{"type":43,"tag":101,"props":1208,"children":1210},{"className":1209},[],[1211],{"type":49,"value":1212},"CLAUDE.md",{"type":49,"value":1206},{"type":43,"tag":101,"props":1215,"children":1217},{"className":1216},[],[1218],{"type":49,"value":1219},"CONTRIBUTING.md",{"type":49,"value":1221},", or the CI config. Typically: format, lint, type-check, build, and the relevant tests.",{"type":43,"tag":52,"props":1223,"children":1224},{},[1225,1230],{"type":43,"tag":58,"props":1226,"children":1227},{},[1228],{"type":49,"value":1229},"Hard stop:",{"type":49,"value":1231}," if any check fails and you cannot fix it, do not commit or push. Narrow your change instead. Never ship code that fails format\u002Flint\u002Ftype-check\u002Fbuild\u002Ftest.",{"type":43,"tag":351,"props":1233,"children":1235},{"id":1234},"step-7-open-the-pull-request",[1236],{"type":49,"value":1237},"Step 7: Open the Pull Request",{"type":43,"tag":52,"props":1239,"children":1240},{},[1241,1243,1248,1250,1254],{"type":49,"value":1242},"Only after validation passes. Use ",{"type":43,"tag":739,"props":1244,"children":1246},{"href":1245},"references\u002Fpr-template.md",[1247],{"type":49,"value":1245},{"type":49,"value":1249},". The description must state: the flag key, the critical environments checked and their resolved fallthrough values, the old vs new in-code default, and that ",{"type":43,"tag":58,"props":1251,"children":1252},{},[1253],{"type":49,"value":893},{"type":49,"value":1255}," the SDK fallback default changed (the flag and its evaluation are preserved).",{"type":43,"tag":93,"props":1257,"children":1258},{},[1259,1283],{"type":43,"tag":97,"props":1260,"children":1261},{},[1262,1264,1269,1270,1275,1276,1281],{"type":49,"value":1263},"Follow the repository's contribution conventions (branch naming, commit style). Check ",{"type":43,"tag":101,"props":1265,"children":1267},{"className":1266},[],[1268],{"type":49,"value":1204},{"type":49,"value":1206},{"type":43,"tag":101,"props":1271,"children":1273},{"className":1272},[],[1274],{"type":49,"value":1212},{"type":49,"value":1206},{"type":43,"tag":101,"props":1277,"children":1279},{"className":1278},[],[1280],{"type":49,"value":1219},{"type":49,"value":1282}," first.",{"type":43,"tag":97,"props":1284,"children":1285},{},[1286,1288,1294,1296,1302],{"type":49,"value":1287},"A clear default: branch ",{"type":43,"tag":101,"props":1289,"children":1291},{"className":1290},[],[1292],{"type":49,"value":1293},"fix\u002Fflag-default-drift-\u003Cflag-key>",{"type":49,"value":1295},", commit ",{"type":43,"tag":101,"props":1297,"children":1299},{"className":1298},[],[1300],{"type":49,"value":1301},"fix: sync in-code default for \u003Cflag-key> to match fallthrough",{"type":49,"value":122},{"type":43,"tag":351,"props":1304,"children":1306},{"id":1305},"step-8-report-a-structured-summary",[1307],{"type":49,"value":1308},"Step 8: Report a Structured Summary",{"type":43,"tag":52,"props":1310,"children":1311},{},[1312],{"type":49,"value":1313},"Produce a concise summary with these fields:",{"type":43,"tag":956,"props":1315,"children":1319},{"className":1316,"code":1318,"language":49},[1317],"language-text","flag_key:              \u003Ckey>\nenvironments_checked:  [\u003Cenv>: \u003Cresolved fallthrough value>, ...]\nenvironments_diverge:  true | false\ndrift_detected:        true | false\nold_default:           \u003Cin-code value before, or n\u002Fa>\nnew_default:           \u003Cexpected value \u002F value written, or n\u002Fa>\nfiles_modified:        [\u003Cpaths>]\npr_url:                \u003Curl or null>\nrequires_generation:   true | false\nnotes:                 \u003Canything the reviewer should know, incl. any cross-environment divergence>\n",[1320],{"type":43,"tag":101,"props":1321,"children":1322},{"__ignoreMap":961},[1323],{"type":49,"value":1318},{"type":43,"tag":73,"props":1325,"children":1327},{"id":1326},"edge-cases",[1328],{"type":49,"value":1329},"Edge Cases",{"type":43,"tag":562,"props":1331,"children":1332},{},[1333,1348],{"type":43,"tag":566,"props":1334,"children":1335},{},[1336],{"type":43,"tag":570,"props":1337,"children":1338},{},[1339,1344],{"type":43,"tag":574,"props":1340,"children":1341},{},[1342],{"type":49,"value":1343},"Situation",{"type":43,"tag":574,"props":1345,"children":1346},{},[1347],{"type":49,"value":776},{"type":43,"tag":585,"props":1349,"children":1350},{},[1351,1369,1396,1419,1437,1484,1504,1529,1585,1605],{"type":43,"tag":570,"props":1352,"children":1353},{},[1354,1364],{"type":43,"tag":592,"props":1355,"children":1356},{},[1357,1359],{"type":49,"value":1358},"Fallthrough is a ",{"type":43,"tag":58,"props":1360,"children":1361},{},[1362],{"type":49,"value":1363},"percentage rollout",{"type":43,"tag":592,"props":1365,"children":1366},{},[1367],{"type":49,"value":1368},"There is no single default value. Report the split, do not auto-edit, and ask the user which value the fallback should represent.",{"type":43,"tag":570,"props":1370,"children":1371},{},[1372,1391],{"type":43,"tag":592,"props":1373,"children":1374},{},[1375,1377,1382,1384,1389],{"type":49,"value":1376},"Fallback appears ",{"type":43,"tag":58,"props":1378,"children":1379},{},[1380],{"type":49,"value":1381},"intentionally conservative",{"type":49,"value":1383}," (matches ",{"type":43,"tag":101,"props":1385,"children":1387},{"className":1386},[],[1388],{"type":49,"value":197},{"type":49,"value":1390}," or a safe value)",{"type":43,"tag":592,"props":1392,"children":1393},{},[1394],{"type":49,"value":1395},"Surface the mismatch and confirm intent before changing. Some teams keep the fallback as a safe value on purpose.",{"type":43,"tag":570,"props":1397,"children":1398},{},[1399,1408],{"type":43,"tag":592,"props":1400,"children":1401},{},[1402,1404],{"type":49,"value":1403},"In-code default lives in a ",{"type":43,"tag":58,"props":1405,"children":1406},{},[1407],{"type":49,"value":929},{"type":43,"tag":592,"props":1409,"children":1410},{},[1411,1413,1418],{"type":49,"value":1412},"Edit the source of truth and regenerate; never hand-edit generated output. Set ",{"type":43,"tag":101,"props":1414,"children":1416},{"className":1415},[],[1417],{"type":49,"value":937},{"type":49,"value":122},{"type":43,"tag":570,"props":1420,"children":1421},{},[1422,1432],{"type":43,"tag":592,"props":1423,"children":1424},{},[1425,1430],{"type":43,"tag":58,"props":1426,"children":1427},{},[1428],{"type":49,"value":1429},"Type mismatch",{"type":49,"value":1431}," between code default and the variation's type",{"type":43,"tag":592,"props":1433,"children":1434},{},[1435],{"type":49,"value":1436},"Flag as a bug in the PR\u002Fsummary; the default and variation types should agree.",{"type":43,"tag":570,"props":1438,"children":1439},{},[1440,1450],{"type":43,"tag":592,"props":1441,"children":1442},{},[1443,1448],{"type":43,"tag":58,"props":1444,"children":1445},{},[1446],{"type":49,"value":1447},"JSON \u002F object \u002F float",{"type":49,"value":1449}," defaults",{"type":43,"tag":592,"props":1451,"children":1452},{},[1453,1455,1461,1463,1469,1470,1476,1477,1483],{"type":49,"value":1454},"Compare by normalized value, not string form (",{"type":43,"tag":101,"props":1456,"children":1458},{"className":1457},[],[1459],{"type":49,"value":1460},"{\"a\":1}",{"type":49,"value":1462}," == ",{"type":43,"tag":101,"props":1464,"children":1466},{"className":1465},[],[1467],{"type":49,"value":1468},"{ \"a\": 1 }",{"type":49,"value":260},{"type":43,"tag":101,"props":1471,"children":1473},{"className":1472},[],[1474],{"type":49,"value":1475},"0",{"type":49,"value":1462},{"type":43,"tag":101,"props":1478,"children":1480},{"className":1479},[],[1481],{"type":49,"value":1482},"0.0",{"type":49,"value":727},{"type":43,"tag":570,"props":1485,"children":1486},{},[1487,1499],{"type":43,"tag":592,"props":1488,"children":1489},{},[1490,1492,1497],{"type":49,"value":1491},"Flag ",{"type":43,"tag":58,"props":1493,"children":1494},{},[1495],{"type":49,"value":1496},"not found",{"type":49,"value":1498}," or wrong environment",{"type":43,"tag":592,"props":1500,"children":1501},{},[1502],{"type":49,"value":1503},"Inform the user; check for typos in the key and confirm the environment.",{"type":43,"tag":570,"props":1505,"children":1506},{},[1507,1524],{"type":43,"tag":592,"props":1508,"children":1509},{},[1510,1515,1517,1523],{"type":43,"tag":58,"props":1511,"children":1512},{},[1513],{"type":49,"value":1514},"Dynamic flag keys",{"type":49,"value":1516}," (",{"type":43,"tag":101,"props":1518,"children":1520},{"className":1519},[],[1521],{"type":49,"value":1522},"flag-${id}",{"type":49,"value":173},{"type":43,"tag":592,"props":1525,"children":1526},{},[1527],{"type":49,"value":1528},"Automated detection may be incomplete; flag for manual review.",{"type":43,"tag":570,"props":1530,"children":1531},{},[1532,1567],{"type":43,"tag":592,"props":1533,"children":1534},{},[1535,1536,1540,1542,1547,1549,1554,1555,1560,1561,1566],{"type":49,"value":787},{"type":43,"tag":58,"props":1537,"children":1538},{},[1539],{"type":49,"value":308},{"type":49,"value":1541}," on the fallthrough (e.g. ",{"type":43,"tag":101,"props":1543,"children":1545},{"className":1544},[],[1546],{"type":49,"value":266},{"type":49,"value":1548}," serves ",{"type":43,"tag":101,"props":1550,"children":1552},{"className":1551},[],[1553],{"type":49,"value":316},{"type":49,"value":260},{"type":43,"tag":101,"props":1556,"children":1558},{"className":1557},[],[1559],{"type":49,"value":274},{"type":49,"value":1548},{"type":43,"tag":101,"props":1562,"children":1564},{"className":1563},[],[1565],{"type":49,"value":324},{"type":49,"value":173},{"type":43,"tag":592,"props":1568,"children":1569},{},[1570,1572,1576,1578,1583],{"type":49,"value":1571},"A single in-code default cannot match all of them. If the build is scoped to ",{"type":43,"tag":58,"props":1573,"children":1574},{},[1575],{"type":49,"value":438},{"type":49,"value":1577}," environment, reconcile to that environment's value and note the others. If the build serves ",{"type":43,"tag":58,"props":1579,"children":1580},{},[1581],{"type":49,"value":1582},"several",{"type":49,"value":1584}," divergent environments, do not silently pick one — surface every per-environment value and confirm which environment is authoritative, or recommend resolving the divergence in LaunchDarkly first.",{"type":43,"tag":570,"props":1586,"children":1587},{},[1588,1600],{"type":43,"tag":592,"props":1589,"children":1590},{},[1591,1593,1598],{"type":49,"value":1592},"Build targets a ",{"type":43,"tag":58,"props":1594,"children":1595},{},[1596],{"type":49,"value":1597},"single environment",{"type":49,"value":1599}," (region- or tenant-specific deployment)",{"type":43,"tag":592,"props":1601,"children":1602},{},[1603],{"type":49,"value":1604},"Treat that environment as the sole critical one; other environments' fallthroughs are not relevant to this build's default.",{"type":43,"tag":570,"props":1606,"children":1607},{},[1608,1618],{"type":43,"tag":592,"props":1609,"children":1610},{},[1611,1613],{"type":49,"value":1612},"Flag spans ",{"type":43,"tag":58,"props":1614,"children":1615},{},[1616],{"type":49,"value":1617},"multiple repositories",{"type":43,"tag":592,"props":1619,"children":1620},{},[1621],{"type":49,"value":1622},"This skill operates on the current repo. Note other repos that also reference the key so they can be reconciled separately.",{"type":43,"tag":73,"props":1624,"children":1626},{"id":1625},"what-not-to-do",[1627],{"type":49,"value":1628},"What NOT to Do",{"type":43,"tag":93,"props":1630,"children":1631},{},[1632,1637,1642,1647,1652,1657,1662,1673],{"type":43,"tag":97,"props":1633,"children":1634},{},[1635],{"type":49,"value":1636},"Don't remove the flag or its evaluation; this skill only touches the default argument.",{"type":43,"tag":97,"props":1638,"children":1639},{},[1640],{"type":49,"value":1641},"Don't change evaluation logic, branching, or off-path behavior beyond the fallback default.",{"type":43,"tag":97,"props":1643,"children":1644},{},[1645],{"type":49,"value":1646},"Don't check only one environment; resolve the fallthrough in every critical environment the build serves.",{"type":43,"tag":97,"props":1648,"children":1649},{},[1650],{"type":49,"value":1651},"Don't reconcile to one environment's fallthrough when critical environments disagree — a single default can't satisfy divergent environments, so surface the divergence and confirm the authoritative environment first.",{"type":43,"tag":97,"props":1653,"children":1654},{},[1655],{"type":49,"value":1656},"Don't hand-edit generated files; regenerate from the source of truth.",{"type":43,"tag":97,"props":1658,"children":1659},{},[1660],{"type":49,"value":1661},"Don't open a PR when there is no drift.",{"type":43,"tag":97,"props":1663,"children":1664},{},[1665,1667,1672],{"type":49,"value":1666},"Don't guess the fallthrough value; resolve it from ",{"type":43,"tag":101,"props":1668,"children":1670},{"className":1669},[],[1671],{"type":49,"value":106},{"type":49,"value":122},{"type":43,"tag":97,"props":1674,"children":1675},{},[1676],{"type":49,"value":1677},"Don't ship code that fails format, lint, type-check, build, or tests.",{"type":43,"tag":73,"props":1679,"children":1681},{"id":1680},"references",[1682],{"type":49,"value":1683},"References",{"type":43,"tag":93,"props":1685,"children":1686},{},[1687,1696,1706,1717],{"type":43,"tag":97,"props":1688,"children":1689},{},[1690,1694],{"type":43,"tag":739,"props":1691,"children":1692},{"href":741},[1693],{"type":49,"value":744},{"type":49,"value":1695},": Where the fallback default lives by language, wrapper, annotation, and generated-file pattern; how to find it",{"type":43,"tag":97,"props":1697,"children":1698},{},[1699,1704],{"type":43,"tag":739,"props":1700,"children":1701},{"href":1245},[1702],{"type":49,"value":1703},"PR Template",{"type":49,"value":1705},": Structured PR description for a drift reconciliation",{"type":43,"tag":97,"props":1707,"children":1708},{},[1709,1715],{"type":43,"tag":739,"props":1710,"children":1712},{"href":1711},"..\u002Flaunchdarkly-flag-cleanup\u002FSKILL.md",[1713],{"type":49,"value":1714},"Flag Cleanup",{"type":49,"value":1716},": If the goal is to remove the flag entirely, not reconcile its default",{"type":43,"tag":97,"props":1718,"children":1719},{},[1720,1726],{"type":43,"tag":739,"props":1721,"children":1723},{"href":1722},"..\u002Flaunchdarkly-flag-targeting\u002FSKILL.md",[1724],{"type":49,"value":1725},"Flag Targeting",{"type":49,"value":1727},": If the goal is to change the default rule in LaunchDarkly instead of the code",{"type":43,"tag":1729,"props":1730,"children":1731},"style",{},[1732],{"type":49,"value":1733},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1735,"total":1819},[1736,1753,1762,1776,1787,1797,1805],{"slug":1737,"name":1737,"fn":1738,"description":1739,"org":1740,"tags":1741,"stars":20,"repoUrl":21,"updatedAt":1752},"agent-graphs","create and manage agent graphs","Create and manage agent graphs — directed graphs of configs connected by edges with handoff logic. Use when building multi-agent workflows where configs route to each other.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1742,1745,1748,1749],{"name":1743,"slug":1744,"type":15},"Agents","agents",{"name":1746,"slug":1747,"type":15},"Architecture","architecture",{"name":9,"slug":8,"type":15},{"name":1750,"slug":1751,"type":15},"Multi-Agent","multi-agent","2026-07-28T05:33:33.709407",{"slug":1754,"name":1754,"fn":1755,"description":1756,"org":1757,"tags":1758,"stars":20,"repoUrl":21,"updatedAt":1761},"aiconfig-agent-graphs","manage agent graphs","DEPRECATED redirect — this skill was renamed to agent-graphs. Do not use this skill; invoke agent-graphs instead. Kept only so old references to aiconfig-agent-graphs still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1759,1760],{"name":1743,"slug":1744,"type":15},{"name":1746,"slug":1747,"type":15},"2026-05-22T06:55:56.527064",{"slug":1763,"name":1763,"fn":1764,"description":1765,"org":1766,"tags":1767,"stars":20,"repoUrl":21,"updatedAt":1775},"aiconfig-ai-metrics","manage built-in AI metrics","DEPRECATED redirect — this skill was renamed to built-in-metrics. Do not use this skill; invoke built-in-metrics instead. Kept only so old references to aiconfig-ai-metrics still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1768,1771,1772],{"name":1769,"slug":1770,"type":15},"Analytics","analytics",{"name":9,"slug":8,"type":15},{"name":1773,"slug":1774,"type":15},"Metrics","metrics","2026-05-22T06:55:53.858749",{"slug":1777,"name":1777,"fn":1778,"description":1779,"org":1780,"tags":1781,"stars":20,"repoUrl":21,"updatedAt":1786},"aiconfig-create","redirect to configs-create skill","DEPRECATED redirect — this skill was renamed to configs-create. Do not use this skill; invoke configs-create instead. Kept only so old references to aiconfig-create still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1782,1783],{"name":9,"slug":8,"type":15},{"name":1784,"slug":1785,"type":15},"Reference","reference","2026-05-22T06:55:41.790591",{"slug":1788,"name":1788,"fn":1789,"description":1790,"org":1791,"tags":1792,"stars":20,"repoUrl":21,"updatedAt":1796},"aiconfig-custom-metrics","configure custom metrics in LaunchDarkly","DEPRECATED redirect — this skill was renamed to custom-metrics. Do not use this skill; invoke custom-metrics instead. Kept only so old references to aiconfig-custom-metrics still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1793,1794,1795],{"name":1769,"slug":1770,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},"2026-05-22T06:55:57.84851",{"slug":1798,"name":1798,"fn":1799,"description":1800,"org":1801,"tags":1802,"stars":20,"repoUrl":21,"updatedAt":1804},"aiconfig-migrate","redirect to migrate skill","DEPRECATED redirect — this skill was renamed to migrate. Do not use this skill; invoke migrate instead. Kept only so old references to aiconfig-migrate still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1803],{"name":1784,"slug":1785,"type":15},"2026-05-22T06:55:44.464733",{"slug":1806,"name":1806,"fn":1807,"description":1808,"org":1809,"tags":1810,"stars":20,"repoUrl":21,"updatedAt":1818},"aiconfig-online-evals","run online evaluations","DEPRECATED redirect — this skill was renamed to online-evals. Do not use this skill; invoke online-evals instead. Kept only so old references to aiconfig-online-evals still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1811,1814,1815],{"name":1812,"slug":1813,"type":15},"Evals","evals",{"name":9,"slug":8,"type":15},{"name":1816,"slug":1817,"type":15},"Testing","testing","2026-05-22T06:55:55.179617",49,{"items":1821,"total":1819},[1822,1829,1834,1840,1845,1851,1855,1861,1872,1881,1891,1900],{"slug":1737,"name":1737,"fn":1738,"description":1739,"org":1823,"tags":1824,"stars":20,"repoUrl":21,"updatedAt":1752},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1825,1826,1827,1828],{"name":1743,"slug":1744,"type":15},{"name":1746,"slug":1747,"type":15},{"name":9,"slug":8,"type":15},{"name":1750,"slug":1751,"type":15},{"slug":1754,"name":1754,"fn":1755,"description":1756,"org":1830,"tags":1831,"stars":20,"repoUrl":21,"updatedAt":1761},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1832,1833],{"name":1743,"slug":1744,"type":15},{"name":1746,"slug":1747,"type":15},{"slug":1763,"name":1763,"fn":1764,"description":1765,"org":1835,"tags":1836,"stars":20,"repoUrl":21,"updatedAt":1775},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1837,1838,1839],{"name":1769,"slug":1770,"type":15},{"name":9,"slug":8,"type":15},{"name":1773,"slug":1774,"type":15},{"slug":1777,"name":1777,"fn":1778,"description":1779,"org":1841,"tags":1842,"stars":20,"repoUrl":21,"updatedAt":1786},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1843,1844],{"name":9,"slug":8,"type":15},{"name":1784,"slug":1785,"type":15},{"slug":1788,"name":1788,"fn":1789,"description":1790,"org":1846,"tags":1847,"stars":20,"repoUrl":21,"updatedAt":1796},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1848,1849,1850],{"name":1769,"slug":1770,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"slug":1798,"name":1798,"fn":1799,"description":1800,"org":1852,"tags":1853,"stars":20,"repoUrl":21,"updatedAt":1804},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1854],{"name":1784,"slug":1785,"type":15},{"slug":1806,"name":1806,"fn":1807,"description":1808,"org":1856,"tags":1857,"stars":20,"repoUrl":21,"updatedAt":1818},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1858,1859,1860],{"name":1812,"slug":1813,"type":15},{"name":9,"slug":8,"type":15},{"name":1816,"slug":1817,"type":15},{"slug":1862,"name":1862,"fn":1863,"description":1864,"org":1865,"tags":1866,"stars":20,"repoUrl":21,"updatedAt":1871},"aiconfig-projects","manage AI configuration projects","DEPRECATED redirect — this skill was renamed to projects. Do not use this skill; invoke projects instead. Kept only so old references to aiconfig-projects still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1867,1870],{"name":1868,"slug":1869,"type":15},"Configuration","configuration",{"name":9,"slug":8,"type":15},"2026-05-22T06:55:48.522229",{"slug":1873,"name":1873,"fn":1874,"description":1875,"org":1876,"tags":1877,"stars":20,"repoUrl":21,"updatedAt":1880},"aiconfig-snippets","manage AI configuration snippets","DEPRECATED redirect — this skill was renamed to snippets. Do not use this skill; invoke snippets instead. Kept only so old references to aiconfig-snippets still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1878,1879],{"name":1868,"slug":1869,"type":15},{"name":9,"slug":8,"type":15},"2026-05-22T06:55:47.16557",{"slug":1882,"name":1882,"fn":1883,"description":1884,"org":1885,"tags":1886,"stars":20,"repoUrl":21,"updatedAt":1890},"aiconfig-targeting","configure LaunchDarkly targeting rules","DEPRECATED redirect — this skill was renamed to configs-targeting. Do not use this skill; invoke configs-targeting instead. Kept only so old references to aiconfig-targeting still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1887,1888,1889],{"name":1868,"slug":1869,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},"2026-05-22T06:55:49.845445",{"slug":1892,"name":1892,"fn":1893,"description":1894,"org":1895,"tags":1896,"stars":20,"repoUrl":21,"updatedAt":1899},"aiconfig-tools","redirect to tools skill","DEPRECATED redirect — this skill was renamed to tools. Do not use this skill; invoke tools instead. Kept only so old references to aiconfig-tools still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1897,1898],{"name":9,"slug":8,"type":15},{"name":1784,"slug":1785,"type":15},"2026-05-22T06:55:39.13373",{"slug":1901,"name":1901,"fn":1902,"description":1903,"org":1904,"tags":1905,"stars":20,"repoUrl":21,"updatedAt":1908},"aiconfig-update","redirect to configs-update skill","DEPRECATED redirect — this skill was renamed to configs-update. Do not use this skill; invoke configs-update instead. Kept only so old references to aiconfig-update still point users to the new name.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1906,1907],{"name":9,"slug":8,"type":15},{"name":1784,"slug":1785,"type":15},"2026-05-22T06:55:40.464884"]