From 90a044883fcd097b8efd75cc562a5169512de799 Mon Sep 17 00:00:00 2001 From: costajohnt Date: Sun, 21 Jun 2026 16:52:41 -0700 Subject: [PATCH] docs: align snip_compact README guards with code Match the snip_compact teaching snippet (en/zh/ja) to code.py: add the `head_end > 0` head guard and the `tail_start > 0 and tail_start < len(messages)` tail bounds check before indexing messages, mirroring the reactive_compact alignment. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_011UJumwVeBXSGYh8nSzoVTF --- s08_context_compact/README.en.md | 6 ++++-- s08_context_compact/README.ja.md | 6 ++++-- s08_context_compact/README.md | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/s08_context_compact/README.en.md b/s08_context_compact/README.en.md index dcf254cc..15199c37 100644 --- a/s08_context_compact/README.en.md +++ b/s08_context_compact/README.en.md @@ -46,10 +46,12 @@ def snip_compact(messages, max_messages=50): if len(messages) <= max_messages: return messages head_end, tail_start = 3, len(messages) - (max_messages - 3) - if _message_has_tool_use(messages[head_end - 1]): + if head_end > 0 and _message_has_tool_use(messages[head_end - 1]): while head_end < len(messages) and _is_tool_result_message(messages[head_end]): head_end += 1 - if _is_tool_result_message(messages[tail_start]) and _message_has_tool_use(messages[tail_start - 1]): + if (tail_start > 0 and tail_start < len(messages) + and _is_tool_result_message(messages[tail_start]) + and _message_has_tool_use(messages[tail_start - 1])): tail_start -= 1 snipped = tail_start - head_end placeholder = {"role": "user", "content": f"[snipped {snipped} messages from conversation middle]"} diff --git a/s08_context_compact/README.ja.md b/s08_context_compact/README.ja.md index 72cae428..da174d0a 100644 --- a/s08_context_compact/README.ja.md +++ b/s08_context_compact/README.ja.md @@ -46,10 +46,12 @@ def snip_compact(messages, max_messages=50): if len(messages) <= max_messages: return messages head_end, tail_start = 3, len(messages) - (max_messages - 3) - if _message_has_tool_use(messages[head_end - 1]): + if head_end > 0 and _message_has_tool_use(messages[head_end - 1]): while head_end < len(messages) and _is_tool_result_message(messages[head_end]): head_end += 1 - if _is_tool_result_message(messages[tail_start]) and _message_has_tool_use(messages[tail_start - 1]): + if (tail_start > 0 and tail_start < len(messages) + and _is_tool_result_message(messages[tail_start]) + and _message_has_tool_use(messages[tail_start - 1])): tail_start -= 1 snipped = tail_start - head_end placeholder = {"role": "user", "content": f"[snipped {snipped} messages from conversation middle]"} diff --git a/s08_context_compact/README.md b/s08_context_compact/README.md index 771257d4..ab5dae54 100644 --- a/s08_context_compact/README.md +++ b/s08_context_compact/README.md @@ -46,10 +46,12 @@ def snip_compact(messages, max_messages=50): if len(messages) <= max_messages: return messages head_end, tail_start = 3, len(messages) - (max_messages - 3) - if _message_has_tool_use(messages[head_end - 1]): + if head_end > 0 and _message_has_tool_use(messages[head_end - 1]): while head_end < len(messages) and _is_tool_result_message(messages[head_end]): head_end += 1 - if _is_tool_result_message(messages[tail_start]) and _message_has_tool_use(messages[tail_start - 1]): + if (tail_start > 0 and tail_start < len(messages) + and _is_tool_result_message(messages[tail_start]) + and _message_has_tool_use(messages[tail_start - 1])): tail_start -= 1 snipped = tail_start - head_end placeholder = {"role": "user", "content": f"[snipped {snipped} messages from conversation middle]"}