fix+docs: classifier/publisher правки, sources.yaml расширен, глоссарий CONTEXT.md + docs/agents, backup.sh; openspec post-translate/rewrite-as-author/rich-repost-card/selected-layout-stay

This commit is contained in:
kpa39l
2026-09-22 17:39:23 +00:00
parent a10ab9fa3c
commit c8ccd7e187
8 changed files with 302 additions and 94 deletions
+29 -4
View File
@@ -93,9 +93,28 @@ import re
# Направление по умолчанию, если ничего не подошло
DEFAULT_DIRECTION = "linux" # прототип: все посты про linux окружение
# Правила по источнику (slug в sources.yaml): принудительное направление
# для всего контента источника, независимо от словаря/LLM.
# LWN — технологическое СМИ: весь контент → tech.
SOURCE_RULES: dict[str, list[str]] = {
"lwn": ["tech"],
}
def find_directions_all(text: str) -> list[str]:
"""Возвращает ВСЕ направления, которым соответствует текст (для мультинаправлений/fan-out)."""
def source_directions(source_slug: str | None) -> list[str]:
"""Направления, принудительно назначенные источнику (SOURCE_RULES)."""
return list(SOURCE_RULES.get(source_slug or "", []))
def find_directions_all(text: str, source_slug: str | None = None) -> list[str]:
"""Возвращает ВСЕ направления, которым соответствует текст (для мультинаправлений/fan-out).
Если для источника задано правило SOURCE_RULES — возвращает его направления
(принудительно), иначе — словарные попадания.
"""
forced = source_directions(source_slug)
if forced:
return forced
text_low = (text or "").lower()
hits = set()
for direction, cfg in DIRECTIONS.items():
@@ -112,8 +131,14 @@ def find_directions_all(text: str) -> list[str]:
return list(hits)
def find_direction(text: str) -> str | None:
"""Возвращает направление, если текст совпал со словарём (иначе None)."""
def find_direction(text: str, source_slug: str | None = None) -> str | None:
"""Возвращает направление: правило источника (SOURCE_RULES) или словарное.
Принудительное правило источника имеет приоритет над словарём.
"""
forced = source_directions(source_slug)
if forced:
return forced[0]
dirs = find_directions_all(text)
if dirs:
return dirs[0]