9cdcda5e02
- Add pytest suite (34 tests) covering scoring thresholds, dedup clustering + representative selection + time window, brief source/category diversity, avoid-term phrase matching, and text canonicalization/truncation. - Rewrite _select_diverse with an explicit, tested contract (best-first, one per source, backfill, then inject a second category by evicting the lowest-ranked pick). - classify_articles now returns attempted/succeeded/skipped (ClassifyReport) so silent model failures are visible in both the cycle and classify output. - Fix clean_text truncation to stay within max_len (ellipsis no longer overshoots). - New filters.py: canonical FilterPrefs shape (include/mute topics+flavors, avoid_terms, pauses) and pure word/phrase-boundary matching engine seeding Calm Filters. Not yet wired into the API. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
32 lines
695 B
TOML
32 lines
695 B
TOML
[build-system]
|
|
requires = ["setuptools>=68"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "goodnews"
|
|
version = "0.1.0"
|
|
description = "Local-first constructive news ingestion and filtering prototype."
|
|
requires-python = ">=3.11"
|
|
# The ingestion CLI is intentionally pure-stdlib. The optional `web` extra adds
|
|
# the API/site layer so the two halves can be deployed and upgraded independently.
|
|
dependencies = []
|
|
|
|
[project.optional-dependencies]
|
|
web = [
|
|
"fastapi>=0.110",
|
|
"uvicorn[standard]>=0.29",
|
|
]
|
|
test = [
|
|
"pytest>=8",
|
|
]
|
|
|
|
[project.scripts]
|
|
goodnews = "goodnews.cli:main"
|
|
|
|
[tool.setuptools]
|
|
packages = ["goodnews"]
|
|
|
|
[tool.setuptools.package-data]
|
|
goodnews = ["static/*"]
|
|
|