{"record":{"id":"5fbe43e6bcfed08e","repo":"langchain-ai/deepagents","slug":"missing-update-option-option-key","errorCode":null,"errorMessage":"missing update option: {option_key}","messagePattern":"missing update option: (.+?)","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"libs/code/deepagents_code/update_check.py","lineNumber":4276,"sourceCode":"\n    Returns:\n        Sources, manifest declaration, and ranked resolution.\n\n    Raises:\n        RuntimeError: If `option_key` is missing from the manifest.\n    \"\"\"\n    from deepagents_code.config_manifest import get_option\n    from deepagents_code.configuration.providers import TomlFileProvider\n    from deepagents_code.configuration.resolver import resolver_from_snapshots\n    from deepagents_code.configuration.service import (\n        ConfigSources,\n        get_managed_snapshot,\n    )\n\n    option = get_option(option_key)\n    if option is None:\n        msg = f\"missing update option: {option_key}\"\n        raise RuntimeError(msg)\n    resolver_option = (\n        replace(option, empty_env_is_false=True)\n        if option_key == \"update.auto_update\"\n        else option\n    )\n    sources = ConfigSources(\n        managed=get_managed_snapshot(),\n        user=TomlFileProvider(\"config.toml\", DEFAULT_CONFIG_PATH).load(),\n    )\n    # Resolve against this exact snapshot generation: the caller reports the\n    # sources' health next to the value, so both must come from the same read\n    # rather than the shared process cache.\n    resolved = resolver_from_snapshots(managed=sources.managed, user=sources.user).get(\n        resolver_option\n    )\n    return sources, option, resolved\n\n","sourceCodeStart":4258,"sourceCodeEnd":4294,"githubUrl":"https://github.com/langchain-ai/deepagents/blob/a1af029e6e73cb17c36bff823d227747b28e91e1/libs/code/deepagents_code/update_check.py#L4258-L4294","documentation":"Raised when a config option key is not a known update-check option. The code resolves the key via get_option; unknown keys cannot be turned into a ConfigSources lookup. This protects against silently applying settings to nonexistent options.","triggerScenarios":"Calling the update-check option-resolution API (update_check.py, get_managed_snapshot path) with an option_key not registered in the options table, e.g. a misspelled key like 'update.autoupdate' instead of 'update.auto_update'.","commonSituations":"Typo in config key after a rename across versions; hand-written policy/config files with stale option names; scripts generated against an older library version.","solutions":["Use a valid option key such as 'update.auto_update' (check the options registry via get_option or docs).","Fix typos: keys use dot-notation with underscores, e.g. update.auto_update.","Check the library version for renamed/removed options and update callers."],"exampleFix":"// before\nresolve_option('update.autoupdate')\n// after\nresolve_option('update.auto_update')","handlingStrategy":"validation","validationCode":"if get_option(key) is None:\n    raise ValueError(f'unknown update option: {key}')","typeGuard":"def is_known_option(key: str) -> bool:\n    return get_option(key) is not None","tryCatchPattern":"try:\n    resolve_update_option(key)\nexcept RuntimeError as e:\n    logger.error('bad option key: %s', e)","preventionTips":["Keep option keys centralized as constants instead of inline strings","Check the options registry/docs after upgrading the library","Use dot-notation with underscores exactly as documented (update.auto_update)"],"tags":["config","validation","update-check"],"backgroundTag":"missing-config-option","analyzedSha":"a1af029e6e73cb17c36bff823d227747b28e91e1","analyzedAt":"2026-08-29T11:43:24.718Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}