Evidence-driven detection overhaul, a media false-positive fix, and a new self-improving-weights pipeline.
Detection
- New
structuremetric — enumeration/list-intro/participial-tail/negative-parallelism scaffolding; paraphrase-robust; the 2025-2026 assistant register (~40% before) is now caught. - Fixed two inverted signals:
voice(passive no longer scored as AI) andpunctuation(semicolons/colons/em-dashes/« » no longer scored as AI — they fired on edited human prose). - Anti-evasion normalization (homoglyph + zero-width) — defeats the RAID evasion; genuine Cyrillic/Greek preserved.
- Weights rebalanced; AI-cliché dictionary gains the assistant register.
Self-improving weights — training/
The detector is a transparent single-layer model (metric vector × per-metric weight). train_weights.py fits those weights from a labelled corpus (numpy, non-negative simplex, shrinkage by evidence, held-out gate) and ships only the fitted numbers in detector_weights.json. .github/workflows/retrain.yml re-fits and opens a PR when it improves. Bootstrap = current weights (no behaviour change on this release).
Media — fixed a false-positive class (human Description/Title/Comment/Software chunks read as AI); +ComfyUI/SwarmUI + 2026 generator signatures.
Full notes: see CHANGELOG.md.