cleanyourtv-app
Clean Your TV를 위한 커뮤니티 제작 모바일 앱
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
A model that scores live Wikipedia edits, publishes every forecast before the outcome exists, and replaces itself when its own accuracy decays.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A model that notices it is getting worse, and replaces itself.
Bellwether scores English Wikipedia edits for the probability they will be reverted, publishes each score before the outcome exists, grades itself when the outcome arrives, and — when its own accuracy decays — retrains, shadow-tests and replaces its own model without human instruction, recording the evidence for every decision in a public, append-only log.
Live status · Performance · Model timeline · About
The full answer is in the decision memo — two pages, no technical background needed. The short version:
This project does not claim its model is good. The claim is that the system can be trusted about the model.
A ranking model deployed against a live stream decays from the moment it ships, because the behaviour it ranks is generated by people whose behaviour changes. Almost every deployed model is evaluated once, before launch, against a held-out sample of the past — and thereafter trusted. Nobody measures whether it is still right, nobody defines in advance what "no longer right" means, and the decision to replace it is made by someone who has already seen which replacement won.
Can a system detect its own decay, replace its own model, and be trusted to have done so honestly?
| Commits before it knows | Every score is written to a register the writer role cannot UPDATE or DELETE — enforced by database grant, not by careful code |
| Waits for the answer | A prediction enters a published figure only once its outcome has actually settled, by a rule requiring both elapsed time and an observation |
| Decided in advance | PREREGISTRATION.md fixed the promotion rule, thresholds and statistical test before the first model existed. The constants live in code and are asserted against that document by the test suite |
| Publishes refusals | Every rejected challenger appears with the same evidence a promotion would carry. A log holding only changes cannot answer what was refused |
| States the bad news | The ablation finding, the twelve inert features, and the expectation that Wikimedia's own model wins — all published, all recorded before the results were seen |
MediaWiki API ─▶ ingest ─▶ score ─▶ append-only register
│ │
▼ ▼
labels ──────────────▶ metrics ─▶ triggers ─▶ retrain
│ │
▼ ▼
decisions ◀─ shadow
| Layer | Choice | Why |
|---|---|---|
| Pipeline | Python 3.13, scikit-learn | — |
| Database | Neon PostgreSQL | Append-only enforced by REVOKE; row-level security for the app |
| Scheduler | GitHub Actions | The only option unlimited and free on public repositories |
| API | FastAPI on Render (free) | Holds a read-only role; a separate role for the app that cannot touch evidence |
| Frontend | Next.js on Vercel | — |
Total infrastructure cost: zero. Not an incidental property — a constraint that shaped the design, including the parts that are worse for it.
| Job | Cadence |
|---|---|
| Ingest + score | every 10 minutes |
| Label harvest | every 30 minutes |
| Metrics | every 6 hours |
| Reconcile · Reproduce · Lift Wing · Triggers · Decide · Agreement | daily |
| Watchdog | hourly |
| Seal + retention | monthly |
DECISION_MEMO.md | What the system found. Two pages, non-technical |
METHODS.md | Every statistical procedure, and every exclusion with the direction of its bias |
PREREGISTRATION.md | The rules, fixed before any model existed |
Bellwether_SRS_v1.0.md | The full specification, with four dated amendments |
Bellwether_M*_Spec.md / _Summary.md | Per-milestone specifications and findings |
No authentication required.
/health liveness, and which migrations the database has
/stats ingestion, coverage gaps, matured revert rates
/register predictions, scoring lag, reproducibility
/metrics live figures per population, every one with its n
/kc2 the offline backtest, its margin, and the ablation
/calibration reliability bins, raw and population-weighted
/decisions every promotion, rejection and rollback with its evidence
/agreement how good a proxy "was reverted" is for "was a bad edit"
Stated here rather than buried.
python -m venv .venv && .venv/Scripts/pip install -r requirements-dev.txt
python scripts/bootstrap_database.py "<owner-connection-string>"
pytest -q && mypy bellwether && ruff check . && ruff format --check .
449 tests. The suite includes the append-only guarantees, which are checked by connecting as the restricted role and attempting the forbidden action — a grant cannot be tested against a mock.
Author: Muhammad Haris Khokhar · Source