# Peneira · Arquitectura

> Peza 3 do paquete de recursos (Q3). Licenza **CC BY 4.0**.
> **As tres pezas publicadas** (eval-204 + inventario + este README) son de **autoría propia**, baixo **CC BY
> 4.0**, e **NON conteñen texto de Wikipedia** → non herdan share-alike (un reutilizador do eval/inventario NON
> queda suxeito a CC BY-SA). Atribucións: **RAG/ILG** (NOMIG 2003, DRAG) como fonte normativa citada · **BSC-LT**
> (modelo base Salamandra-7B). A licenza **CC BY-SA de Wikipedia** aplica SÓ ao **corpus de adestramento**
> (frases wiki-gl), que **NON se inclúe neste paquete**.

Peneira é un **corrector-asistente normativo do galego** (interferencias do castelán, colocación pronominal,
perífrases, ortografía). Corre en local (Ollama), privado, sen API.

## 1 · As tres pezas
```
   texto ──▶  CHULETA  ──▶  CEREBRO  ──▶  GUARDIAS  ──▶  saída estruturada
             (inventario)   (LoRA)       (deterministas)   (JSON: correccións + explicación)
```
- **CHULETA** — o **inventario** (`recurso/inventario.jsonl`, 153 entradas): filtro léxico que inxecta ao
  prompt as fichas relevantes. Ver `INVENTARIO-auditado.md`.
- **CEREBRO** — o **modelo**: Salamandra-7B-instruct + QLoRA (r=16, α=32, 1 época, completion-mask) adestrado
  sobre `dataset_peneira_v3.2.jsonl`. Xulga o contexto (colocación, ambigüidade, perífrases).
- **GUARDIAS** — o **cinto determinista** que corre TRAS o modelo. Tres:
  1. **léxica** (`guardia_lexica`): engade correccións de interferencia INEQUÍVOCA do inventario que o modelo
     deixou pasar. Máis o patrón ortográfico ¿¡.
  2. **réxime te/che** (`guardia_rexime`): engade o cheísmo de réxime (che sobre verbo CD → te), lista pechada
     `VERBO_REXIME` + heurística contextual.
  3. **contraccións** (`guardia_contraccions`): prep+artigo obrigatorio (en o→no…), lista curada.

**Toda corrección sae ETIQUETADA coa súa FONTE** (`fonte`: `modelo` · `inventario` · `inventario-rexime` ·
`inventario-contrac`). Non é cosmética: é o mecanismo de transparencia do marco **«propón, non impón»** — o
usuario ve QUEN di cada corrección (o modelo ou unha guardia determinista) e pode decidir. Unha corrección de
guardia é unha regra normativa dura; unha do modelo é un xuízo contextual.

## 2 · O principio de deseño: SÓ-ENGADE · asimetría miss/disparo
As guardias **só ENGADEN correccións, nunca validan** unha forma nin borran unha do modelo. A consecuencia é
o invariante que fai o sistema fiable:

> **Un fallo posible da guardia é un MISS (non cazou algo) — nunca unha NORM.INVERSA (corrixir o correcto).**
> Un miss é recuperable (o modelo aínda pode acertar); unha norm.inversa é un erro que o corrector existe para
> non cometer. Por iso, **na dúbida, SILENCIO**.

**A garantía non é a lista pechada — é esta asimetría.** Unha lista pode ter un caso ambiguo; o que protexe o
usuario é que, ante calquera dúbida, a guardia cala e delega no modelo.

## 3 · «Na dúbida, silencio» aplicado en TRES niveis (os exemplos canónicos)
O mesmo principio, descuberto por auditoría adversarial a tres profundidades distintas:

| nivel | exemplo | por que cala a guardia |
|---|---|---|
| **palabra** | **«roxo»** | é falso amigo: «roxo» = louro-avermellado é galego válido. Fóra do con-erro automático; só o modelo o xulga con contexto. |
| **verbo** | **«chamar»** | réxime-ambiguo: CD ao teléfono («chámote») / CI predicativo de nome («chámanche Pituco»). Fóra da lista pechada `VERBO_REXIME`. |
| **sintaxe** | **PP-adxunto** | «Notáronche **no exame** moitos erros»: «che» é dativo de posesión (o CD é «moitos erros»). A heurística consome o PP e, se atopa unha cousa-CD despois, **cala**. |

O terceiro é o máis instrutivo: mostra que a garantía non depende de *que verbos* estean na lista, senón de
*cando* a guardia se atreve a disparar. A auditoría adversarial (roldas 1-3) empúrraa cara ao silencio ata
que só dispara onde «che» é inequivocamente o obxecto directo. Batería `finetune/test_rexime.py`: tests de
disparo E de silencio, N/N.

## 4 · Ambiguas e preferencias (Decisión C)
- **9 ambiguas** (`ambigua:true`): formas contexto-dependentes; a guardia nunca as toca, o modelo responde
  «depende do sentido». Unha verificación de construción do dataset (**Regra de Ouro nº1**, non unha das tres
  guardias runtime) comproba que nunca se valide un destino-castelanismo.
- **4 preferencias** (`preferencia:true`): ambas formas correctas (papelaría/papelería…); **Decisión C** —
  preferencia, xamais corrección.

## 5 · Avaliación
Held-out selado **EVAL-204** (`EVAL-204-manifesto.md`): serie 204 / estricto 193 / 11 exclusións por
proximidade. A porta de certificación lese no estricto. Benchmark determinista (temp 0 + seed) co sistema
completo (modelo + guardias). A hiper lese en tres chanzos (≤3 certificación · 4-5 predición cumprida · >5
inversión). Todos os números do informe final lense **coa guardia refinada**.

A familia **te=CD** lese nun **subconxunto de familia** á parte (`eval_teche_v32.jsonl`, 10 casos + 2 do
estricto), porque no estricto quedan só 2 casos tras as exclusións por proximidade. Os 9 erros están cubertos
pola guardia de réxime (0 misses tras a rolda 3); a serie-204 e o estricto-193 non se tocan. Detalle en
`EVAL-204-manifesto.md` §4b.