Skip to content

fix(blindaje): no frenar datos de las instrucciones del negocio (#8AF60E) - #82

Draft
santmun wants to merge 1 commit into
mainfrom
cursor/blindaje-custom-instructions-560c
Draft

santmun wants to merge 1 commit into
mainfrom
cursor/blindaje-custom-instructions-560c

Conversation

@santmun

@santmun santmun commented Oct 8, 2026

Copy link
Copy Markdown
Owner

Qué cambia

El Blindaje en modo negaciones ya no reemplaza una respuesta correcta cuando el dato vive en custom_instructions o en el resultado de una tool de ese turno. Un dato que no está en ninguna fuente, aunque vaya junto a una negación, sigue frenándose y abre ticket. La frase de espera se puede cambiar con BLINDAJE_HOLDING_PHRASE.

Por qué

Ticket de soporte #8AF60E (8af60e40-7f19-4edd-a62c-4b0596aa49f2), bot 1.0.77, BLINDAJE_MODE = "negaciones".

src/blindaje/ no está en main (llega en el template publicado). Confirmé la causa en el verificador de starter 1.0.77, no en la hipótesis tal cual:

  • El juez sí recibe system prompt, contexto y tools. No es "solo la KB".
  • custom_instructions van metidas en el system prompt, dentro de un bloque que dice que cambian cómo se atiende, no los hechos. El prompt del juez nunca dice que esos hechos cuentan igual que la KB.
  • En modo negaciones el prompt pide confiar en todo dato positivo y, más abajo, rechazar cualquier promo que no aparezca en las fuentes. Desde que searchKb pide returnMetadata: "all", la KB trae texto real. Una promo que solo está en las instrucciones no está en ese texto y se marca "dato sin respaldo". Se manda la frase de espera y se abre ticket.
  • Si hay system_prompt_override, las instrucciones ni siquiera entran al prompt que ve el juez.
  • "No damos / no atendemos" no disparaba el patrón de negación (sí "no ofrecemos / no tenemos / no hacemos"). El ejemplo del ticket usa "damos".

El arreglo trata como fuente la KB, el contexto, el texto de custom_instructions (aunque haya prompt manual) y las tools del turno. En negaciones, si cada dato positivo está en alguna de esas fuentes, la respuesta sale. Si hay un dato positivo en ninguna, se reemplaza. Una negación sola sigue yendo al modelo.

Queda un hueco a propósito: una negación falsa pegada a un dato que sí está en las fuentes puede salir. Una negación sola, sin dato positivo, no.

Cómo lo probaste

  • pnpm test pasa (569 tests, incluye test/blindaje/verify.test.ts)
  • pnpm typecheck limpio
  • (si aplica) probado contra un bot real

Checklist

  • No toqué la carpeta member/ (config de cada quien)
  • El PR es de un solo tema (enfocado y chico)
  • Si tu agente (Claude) hizo el PR, revisaste el diff tú mismo antes de abrirlo
  • No hay secrets ni API keys en el código
Open in Web Open in Cursor 

…a tool

En modo negaciones, una respuesta con una negación y un dato que solo está
en custom_instructions (o en una tool de ese turno) se reemplazaba por la
frase de espera. Esas fuentes ahora cuentan. Un dato que no está en ninguna
sigue abriendo ticket.

Ticket #8AF60E.

Co-authored-by: santmun <santmun@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented Oct 8, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants