{"repo":"NousResearch/hermes-agent","public_id":"123376","display_label":"Update locking and race conditions in desktop pipeline","summary":"These items address race conditions and locking gaps in the desktop update process, including issues where concurrent processes, interrupted updates, or stacked completions can corrupt build state or produce a persistent restart banner. The fixes focus on maintaining update locks correctly and resolving timing issues in the freshness pipeline.","subsystem":"hermes_cli","counts":{"members":3,"open_issues":0,"open_issues_distinct":0,"open_prs":1,"closed_issues":1,"merged_prs":1,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":127237,"merged_at":"2026-10-01T05:15:06+00:00"},"resolution":{"state":"resolved","by":"pr-127237"},"freshness":{"state":"verified","last_verified_at":"2026-10-01T05:15:06+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.6666666666666666},"fix_edges":[{"issue_number":122632,"pr_number":127237,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-10-01T05:15:06+00:00"},{"issue_number":122803,"pr_number":127237,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-10-01T05:15:06+00:00"},{"issue_number":123308,"pr_number":127237,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-10-01T05:15:06+00:00"},{"issue_number":123376,"pr_number":127237,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-10-01T05:15:06+00:00"}],"members":[{"kind":"issue","number":123376,"title":"`hermes update` races with launchd-restarted gateways finishing the \"interrupted\" source update → mixed desktop build, permanent \"Restart to finish update\" banner","url":null,"state":"closed"},{"kind":"pr","number":127021,"title":"fix(update): keep the update lock while its verified owner is alive","url":null,"state":"open","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":127237,"title":"fix(build,update): OS metadata, stamp-clock races and stacked completions break the desktop freshness pipeline","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/desktop/scripts/bundle-electron-main.mjs","hermes_cli/source_completion.py","scripts/build/README.md","scripts/build/desktop.mjs","scripts/build/freshness.mjs","scripts/build/frontend-common.mjs","tests-js/desktop-builder.test.mjs","tests-js/freshness-metadata.test.mjs","tests-js/frontend-common.test.mjs","tests-js/product-builders.test.mjs","tests/hermes_cli/test_source_completion_stamp.py","tests/hermes_cli/test_update_completion_process.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}