Sprint1: pure-rule bucket classifier + scorer (taste before intelligence)

- athena/scoring.py: deterministic bucket taxonomy (SHIPPING, LOCAL AI,
  PROBLEM SOLVED, MODEL RELEASE, RESEARCH, BUSINESS, INFRASTRUCTURE,
  CULTURE, UNCATEGORIZED) + component scores (shipping/utility/
  replication/enthusiast/novelty) with hype_penalty. No embeddings/LLM.
- Idempotent schema migration: 12 new columns incl actionability_score (reserved).
- attach_scoring() wired into pipeline.py AFTER store_entries, BEFORE render.
- Backfilled all existing rows; verified at box: null->scored via live run.
- Review report exposes every fired rule (editorial proof, not accuracy metric).
- Human-review tally (Published/Rejected/Borderline) is manual only.

Decision: founder directive 2026-07-15 — discover taxonomy before adding
intelligence. Sprint 2 (Lens) blocked until manual review completes.
This commit is contained in:
Epictetus
2026-07-15 04:18:21 +00:00
parent 699bd6d243
commit ed6b7475dc
4 changed files with 4268 additions and 0 deletions
+10
View File
@@ -27,6 +27,10 @@ sys.path.insert(0, os.path.dirname(__file__))
from adapters import SourceAdapter
from adapters._store import upsert_entries
# Sprint 1 (2026-07-15): pure-rule bucket classifier + scorer.
# Attaches immediately after ingest/dedup and before any rendering step.
from athena import scoring as _scoring
# Adapter registry — add new adapters here (one line each)
ADAPTERS = {
"github": lambda: __import__("adapters.github", fromlist=["GitHubAdapter"]).GitHubAdapter(),
@@ -273,6 +277,12 @@ def run_pipeline(sources: list[str] | None = None, limit: int = 20, dry_run: boo
if src in source_stats:
source_stats[src]["stored"] += 1
# --- Sprint 1 attach point: score after ingest/dedup, before render ---
try:
_scoring.attach_scoring(db_path)
except Exception as e:
print(f" ⚠ scoring attach failed: {e}")
# Verification
if verify:
print(f"\n [Verification]")