v0.11.0 — anti-entrenchment
The anti-entrenchment release: the compounding loop gains a brake. Promotion
was always judge-gated on the way in; now a promoted answer the community later
turns against is retracted on the way out — measured end-to-end on a live run.
Still drop-in (DB + OPENAI_KEY); the new sweep is off by default.
Added
- Anti-entrenchment demotion sweep. Closes the feedback-loop's open end. The
compounding loop promotes a popular, judge-grounded answer into aresolution
card; this is its brake. The worker sweep (KNOWLEDGE_DEMOTION_ENABLED, default
off) demotes a promoted card todeprecatedonce its cluster's aggregate
feedback score falls to/below a negative floor (DEMOTION_SCORE_THRESHOLD,
−0.7) over at leastDEMOTION_MIN_FEEDBACK(5) signals — so a once-popular
answer the community later rejects stops surfacing. The card is kept (audit
trail intact), not deleted. The decision rule (shouldDemote) is pure and
unit-tested; the sweep is the thin DB executor. - Runnable entrenchment eval.
scripts/entrenchment-eval.tsproves the
demotion half end-to-end against a live Postgres — it seeds a promoted card,
drives its cluster net-negative, runs the sweep, and asserts the card was
retracted. Deterministic (no LLM), self-cleaning (deletes its seed rows),
needs onlyDATABASE_URL. The full-pipeline variant (promoter LLM judge in +
brake out) remains the next step; documented indocs/evals.md.