|
| 1 | +# Recibo local de validação — SPEC-935-R457 |
| 2 | + |
| 3 | +## Escopo |
| 4 | + |
| 5 | +Implementação da **proposta pós-Recamán** documentada no manual técnico RAG |
| 6 | +(SPEC-935-R456): um conjunto de artefatos que diversificam de forma |
| 7 | +**determinística** e **estruturada** o ranking pós-ranqueado da arquitetura RAG, |
| 8 | +fechando a lacuna de métrica de diversidade do painel `EnhancedRAG.metrics()`. |
| 9 | + |
| 10 | +A implementação é **aditiva, de baixo acoplamento e não-invasiva**: cria o módulo |
| 11 | +`rag/recaman.py` e acrescenta um campo novo (`diversity`) ao dicionário de |
| 12 | +métricas, sem alterar o contrato dos campos existentes nem o comportamento dos |
| 13 | +ranqueadores atuais. |
| 14 | + |
| 15 | +## Artefatos implementados (GREEN) |
| 16 | + |
| 17 | +| Artefato | Descrição | |
| 18 | +|---|---| |
| 19 | +| `rag/recaman.py` | Novo módulo 100% stdlib, determinístico. | |
| 20 | +| `recaman_sequence(n)` | Gera os `n` primeiros termos de A005132 (oráculo OEIS). | |
| 21 | +| `ArtifactType` | Enum de classificação semântica (paper/regulation/judicial/clinical/generic). | |
| 22 | +| `AnchorResolver` | Deduplica por âncora canônica (identidade de fonte/âmago). | |
| 23 | +| `RecamanDiversifier` | Diversifica ranking via offsets `(1 + a_m) mod N` (Tabela 1 do manual). | |
| 24 | +| `CanonicalContextPacker` | Posiciona âncoras distintas de forma determinística (mitiga "lost in the middle"). | |
| 25 | +| `diversity(items)` | Métrica Div(S) ∈ [0,1] sobre âncoras canônicas (Eq. 6.1 do manual). | |
| 26 | +| `EnhancedRAG.metrics()` | Integração ADITIVA: novo campo `diversity`, sem remover/renomear os 4 existentes. | |
| 27 | + |
| 28 | +## Evidência observada |
| 29 | + |
| 30 | +```text |
| 31 | +25 passed in 0.34s # tests/test_r457_recaman_diversifier.py (25 contratos GREEN) |
| 32 | +48 passed in 0.81s # R457 + R456 + R455 |
| 33 | +47 passed in 6.49s # regressão R436 (enhanced_search_rag) + R99 (rag_evolved) |
| 34 | +``` |
| 35 | + |
| 36 | +## Fidelidade matemática ao manual |
| 37 | + |
| 38 | +- **Oráculo OEIS A005132**: `[0,1,3,6,2,7,13,...]` — confirmado por teste. |
| 39 | +- **Tabela 1 (N=8)**: índices `(1 + a_m) mod 8 = [1,2,4,7,3,0]` — confirmado por teste. |
| 40 | +- **Seção 5.1**: relevância primária (top-1) nunca perdida — confirmado por teste |
| 41 | + para vários `k`. |
| 42 | +- **Seção 6.1**: Div(S) ≈ 0 para itens idênticos; ≈ 1 para itens disjuntos — |
| 43 | + confirmado por teste. |
| 44 | +- **Custo O(N)/O(M)**: implementação iterativa com conjunto visitado; sem |
| 45 | + recursão, termina sempre — confirmado por teste para N até 512. |
| 46 | + |
| 47 | +## Distinção escopo (anti-overclaim) |
| 48 | + |
| 49 | +- A implementação **torna a capacidade e a métrica disponíveis**, mas **NÃO |
| 50 | + promove o diversificador ao pipeline padrão**: a flag `_DIVERSIFIER_ENABLED` |
| 51 | + permanece `False` e o fluxo principal fica configurável/desligado. |
| 52 | +- **NÃO** alega ganhos empíricos de qualidade (isso exige experimento de coorte |
| 53 | + futuro, fora desta spec). |
| 54 | +- **NÃO** altera ranqueamento primário (BM25/denso) nem roteamento adaptativo. |
| 55 | + |
| 56 | +## Comandos executados |
| 57 | + |
| 58 | +```bash |
| 59 | +cd /home/marceloclaro/opencode-ecosystem-core |
| 60 | +python3 -m pytest tests/test_r457_recaman_diversifier.py -q |
| 61 | +python3 -m pytest tests/test_r457_recaman_diversifier.py tests/test_r456_manual_tecnico_rag.py tests/test_r455_readme_historico_operacional.py -q |
| 62 | +python3 -m pytest tests/test_r436_enhanced_search_rag.py tests/test_r99_rag_evolved.py -q |
| 63 | +python3 -m marceloclaro.cli doctor |
| 64 | +``` |
| 65 | + |
| 66 | +## Limites conhecidos |
| 67 | + |
| 68 | +- O `diversity` é computado sobre âncoras canônicas (source/doc_id/title), que é |
| 69 | + uma aproximação determinística de "âmago" sem embeddings — suficiente para a |
| 70 | + métrica, que pode ser refinada em ciclo futuro. |
| 71 | +- Para `N` pequenos, offsets de Recamán repetem posições; o `diversify` pula |
| 72 | + posições já usadas e completa por relevância, garantindo unicidade. |
| 73 | +- A sequência de Recamán legitimanmente revisita valores (A005132 não é injetora |
| 74 | + para `n` grande) — os testes refletem a definição real, não uma premissa falsa |
| 75 | + de termos todos distintos. |
0 commit comments