From c7d3f1540bca47a0a11bbc0c0695a568db69b7e4 Mon Sep 17 00:00:00 2001 From: mika <211269698+mikamikasuki@users.noreply.github.com> Date: Tue, 6 Oct 2026 16:05:27 -0700 Subject: [PATCH 1/2] fix(heartbeat): keep thin diagnostics within budget Signed-off-by: mika <211269698+mikamikasuki@users.noreply.github.com> --- loopx/control_plane/heartbeat/task_body.py | 19 ++++++++++++++----- .../test_heartbeat_prompt_support.py | 11 +++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/loopx/control_plane/heartbeat/task_body.py b/loopx/control_plane/heartbeat/task_body.py index 5b766a3158..6fba8d4ffd 100644 --- a/loopx/control_plane/heartbeat/task_body.py +++ b/loopx/control_plane/heartbeat/task_body.py @@ -741,13 +741,22 @@ def render_heartbeat_generator_inputs_markdown(payload: dict[str, Any]) -> str: f"- agent_model: `{payload.get('agent_model')}`", f"- agent_role: `{payload.get('agent_role')}`", ] + lines.append(f"- agent_scopes: `{payload.get('agent_scopes')}`") + if payload.get("thin") is True: + lines.append( + f"- thin_prompt_command: `{payload.get('thin_prompt_command')}`" + ) + else: + lines.extend( + [ + f"- expanded_prompt_command: `{payload.get('expanded_prompt_command')}`", + f"- compact_prompt_command: `{payload.get('compact_prompt_command')}`", + f"- brief_prompt_command: `{payload.get('brief_prompt_command')}`", + f"- thin_prompt_command: `{payload.get('thin_prompt_command')}`", + ] + ) lines.extend( [ - f"- agent_scopes: `{payload.get('agent_scopes')}`", - f"- expanded_prompt_command: `{payload.get('expanded_prompt_command')}`", - f"- compact_prompt_command: `{payload.get('compact_prompt_command')}`", - f"- brief_prompt_command: `{payload.get('brief_prompt_command')}`", - f"- thin_prompt_command: `{payload.get('thin_prompt_command')}`", "- pr_review_pre_quota_command: " f"`{payload.get('pr_review_pre_quota_command')}`", f"- quota_guard_command: `{payload.get('quota_guard_command')}`", diff --git a/tests/control_plane/test_heartbeat_prompt_support.py b/tests/control_plane/test_heartbeat_prompt_support.py index c2a64f337b..4747585026 100644 --- a/tests/control_plane/test_heartbeat_prompt_support.py +++ b/tests/control_plane/test_heartbeat_prompt_support.py @@ -230,6 +230,17 @@ def test_public_facade_still_builds_and_renders_prompts() -> None: assert render_heartbeat_prompt_markdown(payload) +def test_thin_markdown_diagnostics_only_show_the_selected_prompt_command() -> None: + payload = build_heartbeat_prompt(goal_id="loopx-meta", thin=True) + rendered = render_heartbeat_prompt_markdown(payload) + + assert payload["task_body"] in rendered + assert "- thin_prompt_command:" in rendered + assert "- expanded_prompt_command:" not in rendered + assert "- compact_prompt_command:" not in rendered + assert "- brief_prompt_command:" not in rendered + + @pytest.mark.parametrize( ("mode", "base_budget"), [("full", 12000), ("compact", 6500), ("brief", 4300), ("thin", 3000)], From 16c055b628434ae1e9d3a0990f16a2859387eae0 Mon Sep 17 00:00:00 2001 From: mika <211269698+mikamikasuki@users.noreply.github.com> Date: Tue, 6 Oct 2026 17:32:52 -0700 Subject: [PATCH 2/2] fix(heartbeat): budget brief diagnostics commands Signed-off-by: mika <211269698+mikamikasuki@users.noreply.github.com> --- loopx/control_plane/heartbeat/builder.py | 8 ++++++++ loopx/control_plane/heartbeat/task_body.py | 4 ++++ .../test_heartbeat_prompt_support.py | 15 +++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/loopx/control_plane/heartbeat/builder.py b/loopx/control_plane/heartbeat/builder.py index 029636d238..d4bd8da9a1 100644 --- a/loopx/control_plane/heartbeat/builder.py +++ b/loopx/control_plane/heartbeat/builder.py @@ -604,6 +604,14 @@ def build_heartbeat_prompt( ): if not payload.get(key): payload.pop(key, None) + elif brief: + # The brief task body already embeds its compact-detail command. Keep + # only the selected brief command as top-level regeneration metadata; + # repeating the other mode commands can exceed the registered output + # budget when the CLI/runtime paths are long. + payload.pop("expanded_prompt_command", None) + payload.pop("compact_prompt_command", None) + payload.pop("thin_prompt_command", None) return payload def build_heartbeat_prompt_error_payload( *, diff --git a/loopx/control_plane/heartbeat/task_body.py b/loopx/control_plane/heartbeat/task_body.py index 6fba8d4ffd..c5df3d7d5b 100644 --- a/loopx/control_plane/heartbeat/task_body.py +++ b/loopx/control_plane/heartbeat/task_body.py @@ -746,6 +746,10 @@ def render_heartbeat_generator_inputs_markdown(payload: dict[str, Any]) -> str: lines.append( f"- thin_prompt_command: `{payload.get('thin_prompt_command')}`" ) + elif payload.get("brief") is True: + lines.append( + f"- brief_prompt_command: `{payload.get('brief_prompt_command')}`" + ) else: lines.extend( [ diff --git a/tests/control_plane/test_heartbeat_prompt_support.py b/tests/control_plane/test_heartbeat_prompt_support.py index 4747585026..0869a3ed00 100644 --- a/tests/control_plane/test_heartbeat_prompt_support.py +++ b/tests/control_plane/test_heartbeat_prompt_support.py @@ -241,6 +241,21 @@ def test_thin_markdown_diagnostics_only_show_the_selected_prompt_command() -> No assert "- brief_prompt_command:" not in rendered +def test_brief_diagnostics_keep_only_the_selected_prompt_command() -> None: + payload = build_heartbeat_prompt(goal_id="loopx-meta", brief=True) + rendered = render_heartbeat_prompt_markdown(payload) + + assert payload["brief_prompt_command"] + assert "compact_prompt_command" not in payload + assert "expanded_prompt_command" not in payload + assert "thin_prompt_command" not in payload + assert "heartbeat-prompt --compact" in payload["task_body"] + assert "- brief_prompt_command:" in rendered + assert "- expanded_prompt_command:" not in rendered + assert "- compact_prompt_command:" not in rendered + assert "- thin_prompt_command:" not in rendered + + @pytest.mark.parametrize( ("mode", "base_budget"), [("full", 12000), ("compact", 6500), ("brief", 4300), ("thin", 3000)],