{"repo":"NousResearch/hermes-agent","public_id":"109955","display_label":"Fix ensureContrast ladder termination for invalid steps","summary":"These issues and PRs address a bug where the ensureContrast function fails to terminate or meet contrast requirements when given invalid or non-advancing step values. The fixes focus on validating and normalizing step inputs before the ladder loop runs.","subsystem":null,"counts":{"members":6,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":4},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":122076},"resolution":{"state":"resolved","by":"pr-122076"},"freshness":{"state":"verified","last_verified_at":"2026-09-27T07:48:50+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.3333333333333333},"fix_edges":[{"issue_number":109955,"pr_number":122076,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":118851,"pr_number":122076,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":118864,"pr_number":122076,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":118940,"pr_number":122076,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":119409,"pr_number":122076,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true}],"members":[{"kind":"issue","number":109955,"title":"[Bug]: shared ensureContrast fails to terminate or meet contrast for invalid step values","url":null,"state":"closed"},{"kind":"pr","number":109967,"title":"fix(shared): validate contrast ladder step","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#109955","number":109955},{"kind":"pr","value":"#109975","number":109975}],"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":109972,"title":"fix(shared): normalize invalid ensureContrast rung sizes so the ladder terminates","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#109967","number":109967}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":109975,"title":"fix(shared): normalize invalid ensureContrast step values before the ladder loop","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#122076","number":122076}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":110800,"title":"fix(shared): ensureContrast terminates for non-advancing step values (#109955)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#109975","number":109975}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":122076,"title":"fix: ensureContrast step validation, streaming reasoning_details, reply-scoped Copy/Read-aloud, axios lockfile, expected-quit forensics","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/chat_completion_helpers.py","agent/reasoning_summaries.py","apps/desktop/electron/crash-forensics.test.ts","apps/desktop/electron/crash-forensics.ts","apps/desktop/electron/local-backend-lifecycle.test.ts","apps/desktop/electron/local-backend-lifecycle.ts","apps/desktop/electron/ssh-bootstrap-coordinator.test.ts","apps/desktop/electron/ssh-bootstrap-coordinator.ts","apps/desktop/src/components/assistant-ui/thread/assistant-message.tsx","apps/desktop/src/components/assistant-ui/thread/response-copy-scope.test.tsx","apps/desktop/src/components/assistant-ui/thread/response-group.test.tsx","apps/desktop/src/i18n/ar.ts","apps/desktop/src/i18n/de.ts","apps/desktop/src/i18n/en.ts","apps/desktop/src/i18n/es.ts","apps/desktop/src/i18n/fr.ts","apps/desktop/src/i18n/ja.ts","apps/desktop/src/i18n/ru.ts","apps/desktop/src/i18n/types.ts","apps/desktop/src/i18n/zh-hant.ts","apps/desktop/src/i18n/zh.ts","apps/shared/src/color.test.ts","apps/shared/src/color.ts","contributors/emails/[redacted:email]","contributors/emails/[redacted:email]","tests/agent/test_streamed_reasoning_details.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}