{"repo":"NousResearch/hermes-agent","public_id":"9948","display_label":"add_provider() state mutation timing bug fixes","summary":"These items address a bug in add_provider() where state is mutated before schema loading succeeds, potentially leaving providers half-registered. The work defers state changes until schema loading completes and adds error handling to roll back or prevent registration on incomplete loading.","subsystem":"agent","counts":{"members":10,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":2,"attempt_prs":7},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":109131},"resolution":{"state":"resolved","by":"pr-109131"},"freshness":{"state":"verified","last_verified_at":"2026-09-23T08:16:42+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.2},"fix_edges":[{"issue_number":7149,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":7718,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":9869,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":9948,"pr_number":109131,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":9948,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":18774,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":21809,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":23307,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":34415,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":35195,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":39424,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":43891,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":44055,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":44804,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":45676,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":46424,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":52153,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":70089,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":70606,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":78064,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":88944,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":93568,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":105353,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":110838,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":117266,"pr_number":119888,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false}],"members":[{"kind":"issue","number":9948,"title":"MemoryManager add_provider() leaves failed external provider half-registered","url":null,"state":"closed"},{"kind":"pr","number":9958,"title":"fix(memory): rollback add_provider state on schema load failure","url":null,"state":"closed","close_reason":{"category":"stale_abandoned","implication":"active"},"merged":false},{"kind":"pr","number":9997,"title":"fix(memory_manager): load schemas before mutating state in add_provider()","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#13224","number":13224},{"kind":"pr","value":"#9948","number":9948}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":13224,"title":"fix(memory): defer state mutation in add_provider until schema load succeeds","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"befa5735e9","number":0},{"kind":"pr","value":"#109131","number":109131}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":17119,"title":"feat(agent): support multiple simultaneous memory providers","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#5688","number":5688}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":21418,"title":"fix(agent): wrap schema loading in try/except to prevent registration on failure","url":null,"state":"closed","close_reason":{"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":26613,"title":"fix(agent): load tool schemas before mutating state in add_provider() (#9948)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#13224","number":13224},{"kind":"pr","value":"#21418","number":21418},{"kind":"pr","value":"#10051","number":10051},{"kind":"pr","value":"#9948","number":9948}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":26660,"title":"fix(agent): load tool schemas before mutating state in add_provider() (#9948)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#13224","number":13224}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":109131,"title":"MemoryManager no longer keeps a provider whose schema load failed (#9948, salvage #9997)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/memory_manager.py","contributors/emails/[redacted:email]","tests/agent/test_memory_provider.py"]},{"kind":"pr","number":119888,"title":"hindsight moves to the plugin catalog (auto-migrated on first start / hermes update)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":[".github/workflows/tests-os.yml",".github/workflows/tests.yml","COMPAT_MANIFEST.md","CONTRIBUTING.es.md","CONTRIBUTING.md","Dockerfile","compat_manifest.json","hermes_cli/config_defaults.py","hermes_cli/memory_setup.py","hermes_cli/subcommands/memory.py","hermes_cli/tips.py","hermes_cli/update_cmd.py","hermes_cli/web_server_memory.py","nix/checks.nix","nix/hermes-agent.nix","nix/moduleCommon.nix","nix/packages.nix","plugins/AGENTS.md","plugins/memory/__init__.py","plugins/memory/hindsight/README.md","plugins/memory/hindsight/__init__.py","plugins/memory/hindsight/config_schema.py","plugins/memory/hindsight/embedded.py","plugins/memory/hindsight/plugin.yaml","plugins/memory/hindsight/settings.py","plugins/memory/hindsight/setup.py","plugins/memory/hindsight/templates.py","pyproject.toml","tests/agent/test_memory_session_switch.py","tests/hermes_cli/test_web_server.py","tests/plugins/memory/test_bom_tolerant_config_reads.py","tests/plugins/memory/test_hindsight_config_schema.py","tests/plugins/memory/test_hindsight_env_perms.py","tests/plugins/memory/test_hindsight_local_runtime_hint.py","tests/plugins/memory/test_hindsight_provider.py","tests/plugins/memory/test_hindsight_templates.py","tests/plugins/memory/test_multiplex_memory_identity_scope.py","tests/plugins/memory/test_provider_threads_inherit_profile.py","tests/plugins/test_hindsight_health_grace_timeout.py","tests/plugins/test_hindsight_root_guard.py","tests/test_project_metadata.py","tests/tools/test_lazy_deps.py","tools/lazy_deps.py","website/docs/getting-started/nix-setup.md","website/docs/integrations/index.md","website/docs/reference/cli-commands.md","website/docs/user-guide/docker.md","website/docs/user-guide/features/memory-providers.md","website/docs/user-guide/features/memory.md","website/docs/user-guide/features/overview.md"]}],"trust":{"default_tier":"verified","includes_suggested":false}}