feat(0.27.1): stance guard — ideologically antagonistic asks never share a cluster #11
No reviewers
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
brasil/democracia-social!11
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/stance-guard"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Complements #9 (real embeddings) with the layer embeddings cannot provide: policy DIRECTION. Motivating analysis: proposals that morally fight for the same goal (mais saúde) but are ideologically antagonistic in the means (vender o SUS vs fortalecer o SUS; privatizar vs proibir privatização) measure closer than true paraphrases — merging them poisons the consensus signal and the SLA.
Measured on pt-BR civic pairs (calibration tests): "privatizar os postos do SUS" vs "proibir a privatização dos postos do SUS" sit at cosine 0.015 — BELOW every legitimate paraphrase (0.072-0.089) — and opposite budget directions at 0.046. Sentence embedders encode topic, not policy direction; no distance threshold can separate stance, and a merged antagonistic cluster would fire an SLA for a self-contradictory demand. - stance.rs: precision-first auditable lexicon of policy axes (scale, public/private, permit/forbid, open/close, staff) + negators that flip the axis they precede ("proibir a privatização" asserts public+). Pure, deterministic, 10 unit tests that run in CI without any model. - Migration 0517: consensus_embedding.direction_signature text[] — crate-owned derived data, written at ingest. - ingest: an antagonistic signature against any sampled cluster member vetoes the merge and forms a new cluster (audit-logged). False-veto is the cheap error: a split keeps both demands alive; a wrong merge corrupts both. - Layered defense asserted end-to-end: the motivating pair ("vender o SUS" vs "valorizar radiologistas do SUS", 0.107) is stopped by the threshold; negation and budget pairs are stopped by the veto; CI integration test proves "aumentar X" vs "não aumentar X" form separate clusters. - sqlx offline cache regenerated (workspace .sqlx).