{"repo":"NousResearch/hermes-agent","public_id":"13079","display_label":"read_file dedup cache bugs and response inconsistencies","summary":"These issues and fixes center on problems with the read_file tool's deduplication mechanism, including incorrect response structures in the execute_code sandbox, cache invalidation using only mtime, loop detection bypasses, and dedup metadata leaking into file content.","subsystem":"agent","counts":{"members":19,"open_issues":3,"open_issues_distinct":3,"open_prs":4,"closed_issues":2,"merged_prs":1,"attempt_prs":13},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":16382},"resolution":{"state":"partially_resolved","by":"pr-16382"},"freshness":{"state":"verified","last_verified_at":"2026-04-27T07:17:26+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.0902923976608187},"fix_edges":[{"issue_number":15759,"pr_number":16382,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true}],"members":[{"kind":"issue","number":13079,"title":"Bug: read_file tool's dedup mechanism pollutes file content with cache hint text","url":null,"state":"closed"},{"kind":"issue","number":15759,"title":"[Bug]: read_file dedup stub never triggers loop detection — infinite read loop","url":null,"state":"closed"},{"kind":"issue","number":44819,"title":"[Bug]: read_file In some inappropriate situations, is the dedup likely to affect instruction compliance? For example, when reading skill commands","url":null,"state":"open"},{"kind":"issue","number":44843,"title":"read_file` returns inconsistent response structure in `execute_code()` sandbox","url":null,"state":"open"},{"kind":"issue","number":53812,"title":"read_file dedup uses mtime only — stale cache on sub-second edits","url":null,"state":"open"},{"kind":"pr","number":13210,"title":"fix(file_tools): use error field instead of content in dedup stub","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#16223","number":16223}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":14092,"title":"fix(file-tools): move dedup hints out of content","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#13079","number":13079}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":15762,"title":"fix(tools): dedup early-return bypasses loop detection in read_file (#15759)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"a32b325d0","number":0},{"kind":"commit","value":"977d5f56c","number":0},{"kind":"commit","value":"ced8f44cd","number":0},{"kind":"pr","value":"#16382","number":16382},{"kind":"pr","value":"#15759","number":15759},{"kind":"pr","value":"#16382","number":16382}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":16382,"title":"fix(file-tools): escalate to BLOCKED on repeated read_file dedup stubs","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["tests/tools/test_file_read_guards.py","tools/file_tools.py"]},{"kind":"pr","number":44847,"title":"fix(tools): bypass read dedup in execute_code","url":null,"state":"open","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":44849,"title":"fix(tools): skip read_file dedup for execute_code sandbox calls","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#44847","number":44847}],"category":"superseded_by_pr","implication":"superseded"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":44960,"title":"fix(tools): align read_file sandbox response format with normal tool (#44843)","url":null,"state":"closed","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":44997,"title":"fix(tools): make read_file dedup response consistent (#44843)","url":null,"state":"closed","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":45087,"title":"fix(tools): read_file returns inconsistent response structure in execute_code sandbox (#44843)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#44843","number":44843},{"kind":"pr","value":"#44997","number":44997},{"kind":"pr","value":"#44847","number":44847},{"kind":"pr","value":"#44849","number":44849},{"kind":"pr","value":"#44960","number":44960}],"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":45269,"title":"fix(tools): preserve instruction file rereads","url":null,"state":"open","close_reason":{"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":53816,"title":"fix(tools): verify content hash alongside mtime in read_file dedup (#53812)","url":null,"state":"open","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":54281,"title":"fix(files): hash read dedup cache entries","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#53816","number":53816},{"kind":"pr","value":"#53812","number":53812},{"kind":"pr","value":"#53816","number":53816},{"kind":"pr","value":"#53816","number":53816}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":82873,"title":"fix(tools): bypass read_file dedup in execute_code sandbox","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#44847","number":44847},{"kind":"pr","value":"#44847","number":44847}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":102813,"title":"fix(tools): bypass read dedup in execute_code","url":null,"state":"open","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false}],"trust":{"default_tier":"verified","includes_suggested":false}}