Cribado de políticas (Bhutan GNH + NZ LSF + Humphrey)
Rubrica publicada del cribado determinista que alimenta recommend_action (server/chat/policy-screen.ts).
Qué hace
Puntúa un texto de propuesta (o el pitch de un piloto) contra:
- Los 10 ejes del atlas (salud…gobernanza-democrática).
- Los capitales intergeneracionales estilo NZ LSF (natural, human, social, financial, physical, cultural).
- Una lectura Humphrey de “¿qué se mueve y para quién?”, hoy: tono positive / negative / mixed / neutral por eje, sin inventar cifras.
Reglas
- Matching por límite de palabra (
desempleono coincide conempleo). - Keywords por eje: no se infiere el tono de celdas ambientales del país.
- Tokens de producto (
cribado,LatamGPT) no se tratan como geografía (Costa Rica / CRI). human_override_required: trueyexport_allowed: falsesiempre: un humano debe autorizar cualquier exportación del cribado.- Determinista y aceptable; no es un LLM.
Where it lives
- Code:
server/chat/policy-screen.ts(+ tests). - Consumed by: the
policy_screenfield in therecommend_actionresponse. - API:
POST /api/policy-screenwith{ "proposal": "…" }. Body capped at 16 KB (413 body_too_largeabove it); invalid JSON →400 parse_error;maxDuration10 s.proposalmust be a non-empty string. Any other JSON type (object, array, number, boolean) returns400 proposal_required: it is not coerced to text ("[object Object]") and screened as if it were a real proposal. The proposal itself is capped at 8,000 characters. Beyond that, the leading 8,000 are screened and the response carriestruncated: true, so the caller can tell the verdict covers only part of their document; silently truncating a policy document would change the screening result without telling anyone, which is why the flag exists. - Human surface:
/governance/cribado(demo with mixed axes + human override before exporting).