Files
timmy-home/tests/twitter_archive/test_ktf_tracker.py
Timmy e20ffd3e1d
Some checks failed
Smoke Test / smoke (pull_request) Failing after 11s
feat: Know Thy Father processing log and tracker (#587)
Structured processing log for the multimodal Twitter archive analysis.
33 meaning kernel entries indexed with theme classification.

## What
- twitter-archive/know-thy-father/PROCESSING_LOG.md — progress tracker,
  theme index, arc pattern catalog
- twitter-archive/know-thy-father/entries/processed.jsonl — 33 structured
  entries with tweet_id, media_type, arc, meaning_kernel, themes
- twitter-archive/know-thy-father/tracker.py — CLI tool for status/add/report
- tests/twitter_archive/test_ktf_tracker.py — 7 tests

## Themes tracked
identity (20), transmutation (13), authenticity (12), digital_agency (11),
agency (8), glitch (8), silence (5), void (5), collective_identity (4),
noise (4), presence (4), simulation (2), shadow (1), self_naming (1),
persistence (1)

## Usage
python tracker.py status   — show progress
python tracker.py add X.json — add entry
python tracker.py report   — generate markdown report

Closes #587.
2026-04-13 20:21:44 -04:00

146 lines
5.1 KiB
Python

"""Tests for the Know Thy Father processing tracker."""
import json
import tempfile
from pathlib import Path
import pytest
@pytest.fixture
def tmp_log_dir(tmp_path):
"""Create a temporary log directory with test entries."""
entries_dir = tmp_path / "entries"
entries_dir.mkdir()
# Write test entries
entries = [
{
"tweet_id": "123",
"media_type": "video",
"method": "frame_sequence",
"arc": "Test arc 1",
"meaning_kernel": "Test kernel 1",
"themes": ["identity", "glitch"],
},
{
"tweet_id": "456",
"media_type": "image",
"method": "screenshot",
"arc": "Test arc 2",
"meaning_kernel": "Test kernel 2",
"themes": ["transmutation"],
},
]
entries_file = entries_dir / "processed.jsonl"
with open(entries_file, "w") as f:
for entry in entries:
f.write(json.dumps(entry) + "\n")
return tmp_path
class TestLoadEntries:
def test_loads_jsonl(self, tmp_log_dir, monkeypatch):
import sys
sys.path.insert(0, str(Path(__file__).parent.parent.parent / "twitter-archive" / "know-thy-father"))
import tracker
monkeypatch.setattr(tracker, "ENTRIES_FILE", tmp_log_dir / "entries" / "processed.jsonl")
entries = tracker.load_entries()
assert len(entries) == 2
assert entries[0]["tweet_id"] == "123"
assert entries[1]["tweet_id"] == "456"
def test_empty_file(self, tmp_path, monkeypatch):
import sys
sys.path.insert(0, str(Path(__file__).parent.parent.parent / "twitter-archive" / "know-thy-father"))
import tracker
entries_file = tmp_path / "nonexistent.jsonl"
monkeypatch.setattr(tracker, "ENTRIES_FILE", entries_file)
entries = tracker.load_entries()
assert entries == []
class TestComputeStats:
def test_basic_stats(self, tmp_log_dir, monkeypatch):
import sys
sys.path.insert(0, str(Path(__file__).parent.parent.parent / "twitter-archive" / "know-thy-father"))
import tracker
monkeypatch.setattr(tracker, "ENTRIES_FILE", tmp_log_dir / "entries" / "processed.jsonl")
entries = tracker.load_entries()
stats = tracker.compute_stats(entries)
assert stats["total_targets"] == 108
assert stats["processed"] == 2
assert stats["pending"] == 106
assert stats["themes"]["identity"] == 1
assert stats["themes"]["transmutation"] == 1
assert stats["themes"]["glitch"] == 1
assert stats["media_types"]["video"] == 1
assert stats["media_types"]["image"] == 1
def test_completion_percentage(self, tmp_log_dir, monkeypatch):
import sys
sys.path.insert(0, str(Path(__file__).parent.parent.parent / "twitter-archive" / "know-thy-father"))
import tracker
monkeypatch.setattr(tracker, "ENTRIES_FILE", tmp_log_dir / "entries" / "processed.jsonl")
entries = tracker.load_entries()
stats = tracker.compute_stats(entries)
assert stats["completion_pct"] == pytest.approx(1.9, abs=0.1)
class TestSaveEntry:
def test_append_entry(self, tmp_log_dir, monkeypatch):
import sys
sys.path.insert(0, str(Path(__file__).parent.parent.parent / "twitter-archive" / "know-thy-father"))
import tracker
entries_file = tmp_log_dir / "entries" / "processed.jsonl"
monkeypatch.setattr(tracker, "ENTRIES_FILE", entries_file)
new_entry = {
"tweet_id": "789",
"media_type": "video",
"arc": "New arc",
"meaning_kernel": "New kernel",
"themes": ["agency"],
}
tracker.save_entry(new_entry)
entries = tracker.load_entries()
assert len(entries) == 3
assert entries[-1]["tweet_id"] == "789"
def test_creates_parent_dirs(self, tmp_path, monkeypatch):
import sys
sys.path.insert(0, str(Path(__file__).parent.parent.parent / "twitter-archive" / "know-thy-father"))
import tracker
entries_file = tmp_path / "new_dir" / "entries" / "processed.jsonl"
monkeypatch.setattr(tracker, "ENTRIES_FILE", entries_file)
tracker.save_entry({"tweet_id": "000", "media_type": "test", "arc": "x", "meaning_kernel": "y", "themes": []})
assert entries_file.exists()
class TestThemeDistribution:
def test_theme_counts(self, tmp_log_dir, monkeypatch):
import sys
sys.path.insert(0, str(Path(__file__).parent.parent.parent / "twitter-archive" / "know-thy-father"))
import tracker
monkeypatch.setattr(tracker, "ENTRIES_FILE", tmp_log_dir / "entries" / "processed.jsonl")
entries = tracker.load_entries()
stats = tracker.compute_stats(entries)
# identity appears in entry 1 only
assert stats["themes"]["identity"] == 1
# glitch appears in entry 1 only
assert stats["themes"]["glitch"] == 1
# transmutation appears in entry 2 only
assert stats["themes"]["transmutation"] == 1