{"repo":"NousResearch/hermes-agent","public_id":"107141","display_label":"MCP schema repair corrupts conditional constraint branches","summary":"A bug causes the MCP schema sanitization process to incorrectly prune or overwrite required fields and type annotations inside oneOf, not, if/then/else, and similar conditional schema branches. Multiple fixes address preserving these constraint fragments through schema repair.","subsystem":"mcp","counts":{"members":4,"open_issues":0,"open_issues_distinct":0,"open_prs":1,"closed_issues":1,"merged_prs":1,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":118463,"merged_at":"2026-09-21T20:14:23+00:00"},"resolution":{"state":"resolved","by":"pr-118463"},"freshness":{"state":"verified","last_verified_at":"2026-09-21T20:14:23+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.5},"fix_edges":[{"issue_number":107141,"pr_number":118463,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-21T20:14:23+00:00"}],"members":[{"kind":"issue","number":107141,"title":"[Bug]: MCP schema sanitize chain prunes required inside oneOf/not/if branches, turning mutex constraints always-false (all calls rejected)","url":null,"state":"closed"},{"kind":"pr","number":104548,"title":"fix(mcp): preserve schema maps and independent required constraints","url":null,"state":"open","close_reason":{"refs":[{"kind":"commit","value":"e7c5141f1c5b","number":0},{"kind":"pr","value":"#118463","number":118463},{"kind":"pr","value":"#107141","number":107141},{"kind":"pr","value":"#117872","number":117872},{"kind":"pr","value":"#107146","number":107146},{"kind":"pr","value":"#4651","number":4651},{"kind":"pr","value":"#84056","number":84056},{"kind":"pr","value":"#55078","number":55078},{"kind":"pr","value":"#55082","number":55082},{"kind":"pr","value":"#56620","number":56620}],"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":107146,"title":"fix(moonshot): stop stamping a synthetic type on if/then/else nodes","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"e7c5141f1c5b","number":0},{"kind":"commit","value":"dc0915ce354d","number":0},{"kind":"pr","value":"#118463","number":118463},{"kind":"pr","value":"#117872","number":117872}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":118463,"title":"fix(mcp): if/then/else and oneOf constraint fragments survive schema repair (#107141, salvage #117872 #107146)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/moonshot_schema.py","contributors/emails/robchristiansen13@users.noreply.github.com","tests/agent/test_moonshot_schema.py","tests/tools/test_schema_sanitizer.py","tools/mcp_tool_schema.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}