Skip to content

Commit a900149

Browse files
committed
fix(tests): replace hardcoded dates with relative offsets
Four tests hardcoded calendar dates (2026-02-14, 2026-02-15, 2026-03-04, date(2026, 2, 23)) that rotted as wall-clock time advanced past the 30-day staleness threshold. This blocked just release end-to-end for v2.1.0. - conftest.py hive_env: fresh facts use date.today() minus 7/10 days - test_growth.py test_fact_count_from_memory: fresh dates use date.today() - 5d - test_wander.py helpers: use get_today() instead of frozen date(2026, 2, 23); all select_wander_seed() calls in affected tests updated Root cause: collect_todos() uses get_today()-30 as cutoff. Log files written relative to a frozen past date fall outside the 30-day window as time advances. open_todos() returns [] and the stale-todo branch never fires.
1 parent 67a6a9f commit a900149

3 files changed

Lines changed: 23 additions & 18 deletions

File tree

tests/conftest.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import json
77
import os
88
import re
9-
from datetime import datetime, timedelta
9+
from datetime import date, datetime, timedelta
1010
from pathlib import Path
1111

1212
import pytest
@@ -66,11 +66,13 @@ def hive_env(tmp_path: Path, monkeypatch: pytest.MonkeyPatch):
6666
(hive_dir / "archive").mkdir()
6767

6868
# Create test data
69+
_fresh1 = (date.today() - timedelta(days=7)).isoformat()
70+
_fresh2 = (date.today() - timedelta(days=10)).isoformat()
6971
(hive_dir / "working" / "memory.md").write_text(
7072
"# Working Memory\n\n"
7173
"- Python is great [verified:2020-01-01]\n"
72-
"- keephive uses Pydantic [verified:2026-02-15]\n"
73-
"- Tests are important [verified:2026-02-14]\n"
74+
f"- keephive uses Pydantic [verified:{_fresh1}]\n"
75+
f"- Tests are important [verified:{_fresh2}]\n"
7476
)
7577

7678
(hive_dir / "working" / "rules.md").write_text(

tests/test_growth.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,13 @@ def test_default_state(self, hive_env):
9494
assert len(snap["trend_30d"]) == 30
9595

9696
def test_fact_count_from_memory(self, hive_env):
97+
_fresh = (date.today() - timedelta(days=5)).isoformat()
9798
mem = hive_env / "working" / "memory.md"
9899
mem.write_text(
99100
"# Memory\n"
100-
"- FACT: first thing [verified:2026-03-04]\n"
101-
"- FACT: second thing [verified:2026-03-04]\n"
102-
"- FACT: third old [verified:2026-01-01]\n"
101+
f"- FACT: first thing [verified:{_fresh}]\n"
102+
f"- FACT: second thing [verified:{_fresh}]\n"
103+
"- FACT: third old [verified:2020-01-01]\n"
103104
)
104105
snap = growth_snapshot()
105106
assert snap["fact_count"] == 3

tests/test_wander.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,19 @@
33
from __future__ import annotations
44

55
import json
6-
from datetime import date, timedelta
6+
from datetime import timedelta
77
from pathlib import Path
88

9+
from keephive.clock import get_today
10+
911
# ---------------------------------------------------------------------------
1012
# Helpers
1113
# ---------------------------------------------------------------------------
1214

1315

1416
def _write_daily(hive_env: Path, days_ago: int, content: str) -> None:
1517
"""Write a daily log file for testing recurring-topic detection."""
16-
d = date(2026, 2, 23) - timedelta(days=days_ago)
18+
d = get_today() - timedelta(days=days_ago)
1719
daily_dir = hive_env / "daily"
1820
daily_dir.mkdir(exist_ok=True)
1921
(daily_dir / f"{d.isoformat()}.md").write_text(content, encoding="utf-8")
@@ -29,7 +31,7 @@ def _write_todo(hive_env: Path, content: str) -> None:
2931

3032
def _write_daily_with_todo(hive_env: Path, days_ago: int, todo_text: str) -> None:
3133
"""Write a daily log containing a hive-tracked TODO entry (real format)."""
32-
d = date(2026, 2, 23) - timedelta(days=days_ago)
34+
d = get_today() - timedelta(days=days_ago)
3335
daily_dir = hive_env / "daily"
3436
daily_dir.mkdir(exist_ok=True)
3537
(daily_dir / f"{d.isoformat()}.md").write_text(
@@ -56,7 +58,7 @@ def test_user_queued_priority(self, hive_env):
5658

5759
from keephive.commands.wander import select_wander_seed
5860

59-
seed, source = select_wander_seed(date(2026, 2, 23))
61+
seed, source = select_wander_seed(get_today())
6062
assert seed == "topic-alpha"
6163
assert source == "user-queued"
6264

@@ -76,7 +78,7 @@ def test_cross_pollination_no_word_overlap(self, hive_env):
7678

7779
from keephive.commands.wander import select_wander_seed
7880

79-
seed, source = select_wander_seed(date(2026, 2, 23))
81+
seed, source = select_wander_seed(get_today())
8082
assert source == "cross-pollination"
8183
assert "/" in seed # combined as "line_a / line_b"
8284

@@ -92,7 +94,7 @@ def test_recurring_topic_detected(self, hive_env):
9294

9395
from keephive.commands.wander import select_wander_seed
9496

95-
seed, source = select_wander_seed(date(2026, 2, 23))
97+
seed, source = select_wander_seed(get_today())
9698
assert source == "recurring-topic"
9799
# Seed comes from the log content — any non-stopword appearing 3+ times
98100
assert seed is not None
@@ -106,7 +108,7 @@ def test_stale_todo_fallback(self, hive_env):
106108

107109
from keephive.commands.wander import select_wander_seed
108110

109-
seed, source = select_wander_seed(date(2026, 2, 23))
111+
seed, source = select_wander_seed(get_today())
110112
assert source == "stale-todo"
111113
assert "Refactor" in seed
112114

@@ -117,7 +119,7 @@ def test_no_seed_returns_none(self, hive_env):
117119

118120
from keephive.commands.wander import select_wander_seed
119121

120-
seed, source = select_wander_seed(date(2026, 2, 23))
122+
seed, source = select_wander_seed(get_today())
121123
assert seed is None
122124
assert source is None
123125

@@ -132,7 +134,7 @@ def test_stopwords_not_returned_as_recurring_topic(self, hive_env):
132134

133135
from keephive.commands.wander import select_wander_seed
134136

135-
seed, source = select_wander_seed(date(2026, 2, 23))
137+
seed, source = select_wander_seed(get_today())
136138
# Should NOT return recurring-topic (falls through to stale-todo or None)
137139
assert source != "recurring-topic"
138140

@@ -148,7 +150,7 @@ def test_user_queued_wins_over_cross_pollination(self, hive_env):
148150

149151
from keephive.commands.wander import select_wander_seed
150152

151-
_, source = select_wander_seed(date(2026, 2, 23))
153+
_, source = select_wander_seed(get_today())
152154
assert source == "user-queued"
153155

154156
def test_todo_md_file_not_used_as_seed_source(self, hive_env):
@@ -159,7 +161,7 @@ def test_todo_md_file_not_used_as_seed_source(self, hive_env):
159161

160162
from keephive.commands.wander import select_wander_seed
161163

162-
seed, source = select_wander_seed(date(2026, 2, 23))
164+
seed, source = select_wander_seed(get_today())
163165
assert source != "stale-todo"
164166

165167
def test_todo_not_returned_when_younger_than_7_days(self, hive_env):
@@ -169,7 +171,7 @@ def test_todo_not_returned_when_younger_than_7_days(self, hive_env):
169171

170172
from keephive.commands.wander import select_wander_seed
171173

172-
seed, source = select_wander_seed(date(2026, 2, 23))
174+
seed, source = select_wander_seed(get_today())
173175
assert source != "stale-todo"
174176

175177

0 commit comments

Comments
 (0)