{"repo":"NousResearch/hermes-agent","public_id":"10879","display_label":"Non-UTF-8 memory file encoding crash and silent failure","summary":"These issues and fixes concern crashes or silent memory loss when MEMORY.md or USER.md contain non-UTF-8 bytes, BOMs, or legacy encodings. Proposed fixes involve graceful degradation, error logging, and tolerant file reading instead of strict UTF-8 decoding.","subsystem":"agent","counts":{"members":10,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":4,"merged_prs":1,"attempt_prs":5},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":71078},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-07-25T00:10:40+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.20355555555555555},"fix_edges":[{"issue_number":49508,"pr_number":71078,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":53833,"pr_number":71078,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":68053,"pr_number":71078,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":68369,"pr_number":71078,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":69706,"pr_number":71078,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false}],"members":[{"kind":"issue","number":10879,"title":"[Bug]: Non-UTF-8 MEMORY.md raises uncaught UnicodeDecodeError — agent starts with empty memory","url":null,"state":"closed"},{"kind":"issue","number":49508,"title":"memory_tool.py can crash on non-UTF-8 files during strict UTF-8 read","url":null,"state":"closed"},{"kind":"issue","number":53833,"title":"[Bug]: memory tool crashes with UnicodeDecodeError on legacy non-UTF-8 bytes in USER.md/MEMORY.md","url":null,"state":"closed"},{"kind":"issue","number":57754,"title":"Encoding corruption in MEMORY.md/USER.md silently disables memory, with no log","url":null,"state":"closed"},{"kind":"pr","number":10888,"title":"fix(memory): handle BOM and non-UTF-8 bytes in memory files","url":null,"state":"closed","close_reason":{"category":"partial_fix","implication":"needs_llm"},"merged":false},{"kind":"pr","number":49516,"title":"fix(memory): handle non-UTF-8 files gracefully instead of crashing","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#26045","number":26045},{"kind":"pr","value":"#71078","number":71078}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":49552,"title":"Fix UnicodeDecodeError when reading non-UTF-8 files (fix #49508)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#49516","number":49516},{"kind":"pr","value":"#49508","number":49508},{"kind":"pr","value":"#49516","number":49516},{"kind":"pr","value":"#49516","number":49516}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":54044,"title":"fix(memory): tolerate non-UTF-8 bytes in USER.md/MEMORY.md reads","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#26045","number":26045},{"kind":"pr","value":"#71078","number":71078}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":57755,"title":"fix(memory): log and degrade gracefully on invalid UTF-8 in memory files","url":null,"state":"closed","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":71078,"title":"fix(windows): retire the bare read_text/write_text class — salvage 11 contributor PRs + sweep + linter","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/auxiliary_client.py","agent/copilot_acp_client.py","agent/credential_sources.py","agent/nous_rate_guard.py","agent/shell_hooks.py","cli.py","contributors/emails/[redacted:email]","contributors/emails/[redacted:email]","contributors/emails/[redacted:email]","hermes_cli/auth.py","hermes_cli/banner.py","hermes_cli/container_boot.py","hermes_cli/doctor.py","hermes_cli/gateway.py","hermes_cli/main.py","hermes_cli/plugins.py","hermes_cli/profiles.py","hermes_cli/service_manager.py","hermes_cli/uninstall.py","hermes_constants.py","optional-skills/creative/kanban-video-orchestrator/scripts/bootstrap_pipeline.py","optional-skills/migration/openclaw-migration/scripts/openclaw_to_hermes.py","optional-skills/research/osint-investigation/scripts/build_findings.py","optional-skills/research/osint-investigation/scripts/timing_analysis.py","plugins/cron_providers/__init__.py","plugins/disk-cleanup/disk_cleanup.py","plugins/google_meet/realtime/openai_client.py","plugins/hermes-achievements/dashboard/plugin_api.py","plugins/memory/__init__.py","plugins/memory/hindsight/__init__.py","plugins/memory/honcho/__init__.py","plugins/memory/mem0/__init__.py","plugins/memory/mem0/_setup.py","scripts/check-windows-footguns.py","scripts/check_subprocess_stdin.py","scripts/ci/assemble_review_comment.py","scripts/install.ps1","scripts/lint_diff.py","scripts/profile-tui.py","scripts/release.py","scripts/run_tests_parallel.py","skills/creative/comfyui/scripts/auto_fix_deps.py","skills/creative/comfyui/scripts/extract_schema.py","skills/creative/comfyui/scripts/run_workflow.py","skills/creative/comfyui/tests/conftest.py","skills/creative/comfyui/tests/test_common.py","skills/creative/comfyui/tests/test_run_workflow.py","skills/productivity/docx/scripts/accept_changes.py","skills/productivity/docx/scripts/office/soffice.py","skills/productivity/docx/scripts/office/validators/base.py","skills/productivity/google-workspace/scripts/google_api.py","skills/productivity/google-workspace/scripts/gws_bridge.py","skills/productivity/google-workspace/scripts/setup.py","skills/productivity/pdf/scripts/check_bounding_boxes.py","skills/productivity/pdf/scripts/create_validation_image.py","skills/productivity/pdf/scripts/fill_fillable_fields.py","skills/productivity/pdf/scripts/fill_pdf_form_with_annotations.py","skills/productivity/powerpoint/scripts/office/soffice.py","skills/productivity/powerpoint/scripts/office/validators/base.py","skills/productivity/xlsx/scripts/office/soffice.py","skills/productivity/xlsx/scripts/recalc.py","tests/agent/test_copilot_acp_client.py","tests/agent/test_nous_rate_guard.py","tests/cli/test_worktree_security.py","tests/hermes_cli/test_doctor.py","tests/hermes_cli/test_profile_install_env_encoding.py","tests/plugins/memory/test_hindsight_provider.py","tests/plugins/memory/test_mem0_setup.py","tests/skills/test_office_document_skills.py","tests/skills/test_openclaw_migration.py","tests/test_hermes_bootstrap.py","tests/tools/test_hub_lock_non_utf8_68053.py","tools/managed_tool_gateway.py","tools/skill_usage.py","tools/skills_hub.py","tools/skills_sync.py","tools/web_tools.py","tools/xai_http.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}