fix(heartbeat): ignore completed-only heartbeat entries

This commit is contained in:
Xubin Ren 2026-05-31 14:12:55 +08:00
parent e3df310309
commit 2671c8fe55
2 changed files with 8 additions and 0 deletions

View File

@ -107,6 +107,7 @@ _HEARTBEAT_PREAMBLE = (
def _heartbeat_has_active_tasks(content: str) -> bool:
"""True if HEARTBEAT.md has task lines, ignoring headers, blanks and comments."""
in_comment = False
in_active_section: bool | None = None
for line in content.splitlines():
stripped = line.strip()
if in_comment:
@ -114,11 +115,16 @@ def _heartbeat_has_active_tasks(content: str) -> bool:
in_comment = False
continue
if not stripped or stripped.startswith("#"):
if stripped.startswith("##") and not stripped.startswith("###"):
heading = stripped.lstrip("#").strip().lower()
in_active_section = heading.startswith("active tasks")
continue
if stripped.startswith("<!--"):
if "-->" not in stripped[4:]:
in_comment = True
continue
if in_active_section is False:
continue
return True
return False

View File

@ -960,6 +960,8 @@ def test_heartbeat_retains_recent_messages_by_default():
("<!--\nmulti-line\ncomment\n-->\n", False), # block comment, not tasks
("<!-- single line -->\n", False),
("## Active Tasks\n\n- water the plants\n", True),
("## Completed\n\n- water the plants\n", False),
("## Active Tasks\n\n### Garden\n\n- water the plants\n", True),
],
)
def test_heartbeat_has_active_tasks(content, expected):