Repository navigation
Description
Contexto y evidencia
Derivado de #198 y pablontiv/homeserver#485. Fuente cotejada en main, HEAD f280884a359f88e0e71bef48d69b0a1052d6fa30. Las mediciones siguientes ya fueron ejecutadas en la investigación; este triage no ejecuta builds ni modifica el índice. Evidencia local (no adjunta ni pública): /tmp/backscroll-485-handoff/reports/. Solo se publican conteos, comandos y referencias de código.
Problema independiente de la ordenación BM25
internal/storage/search.go:59-77,370-377 aplica búsqueda paginable directa si hay content-type, pero sin filtro fija 200 candidatos por tabla FTS, offset 0, antes del merge RRF. La paginación final no permite alcanzar coincidencias fuera del conjunto inicial. #77 ya corrigió inversión BM25; se deja evidencia adicional allí y este issue posee la pérdida silenciosa de cobertura/paginación que persiste con el orden correcto. #145 trata list/patterns, no esta ruta.
Reproducción ya ejecutada
lim-uniform-metric.md:80-90,222 y siguientes (ledger): consultas amplias sin content-type agotaban el conjunto de candidatos. Enumerar por separado text/code/tool/reasoning con --limit 300 --offset N alcanzó páginas adicionales y una página terminal corta.
backscroll search 'Actions' --all-projects --role user --json --limit 300 --offset 0
backscroll search 'Actions' --all-projects --role user --content-type text --json --limit 300 --offset 0
backscroll search 'Actions' --all-projects --role user --content-type text --json --limit 300 --offset 300El corpus medido devolvió 3.599 filas agregadas por streams tipados para esta consulta (antes de deduplicar sesiones), no una exportación equivalente sin filtro. No se reproduce texto de resultados.
Contrato y aceptación
docs/search.md:261 menciona genéricamente candidate limits; el diseño split-FTS documenta ranking aproximado, pero no un contrato público explícito de truncamiento 200 por tabla ni cómo afecta offset. Search es discovery rankeado, no exportación completa; el defecto aquí es paginación aceptada con agotamiento silencioso no explicitado.
- El contrato público especifica alcance de limit/offset y comportamiento de agotamiento de candidatos sin content-type.
- Las páginas solicitadas son alcanzables según ese contrato o se informa explícitamente el límite/truncamiento, distinguiéndolo de ausencia de más coincidencias.
- Prueba conductual con más de 200 matches por tabla demuestra páginas posteriores, ranking estable, y comportamiento contrastado con búsquedas tipadas.
- Se preservan filtros de ámbito y exclusión de query echoes; no se usa el fix de BM25 como prueba de cobertura completa.
Duplicados: inventario open/closed, search candidate, "candidate cap"; #77 solo ordenación/candidatos invertidos y #145 list/patterns. Sin ticket de esta paginación silenciosa independiente.
Activity
pablontiv commentedon Oct 20, 2026
Pregunta
Detect proven unfiltered FTS candidate truncation and expose it without changing RRF ranking, typed pagination, or JSON array shape.
BASIS
Issue201 documents exercised candidate exhaustion; deterministic SQLite/Go bounded query and output correction with no new external runtime.
REVIEW
TriageReview201
pablontiv commentedon Oct 20, 2026
Pregunta
Expose proven unfiltered candidate truncation while preserving ranking, typed pagination, filters and complete output budgets.
BASIS
Existing bounded implementation at retained clean SHA 2a936ab passed actual isolated CLI and just check plus just ci; replacement preserves the documented same-issue retained candidate after infrastructure failure.
REVIEW
TriageReview201v2
pablontiv commentedon Oct 20, 2026
Pregunta
Expose proven unfiltered candidate truncation while preserving ranking, typed pagination, scope, query-echo exclusions and complete output budgets.
BASIS
Retained implementation and null-to-array correction already exercised by real CLI; original gate PASS. Source094 PR453 officialDagu retained-capture proof and BackscrollPR208 nativeSucceeded establish replacement mechanics; actual201 recovery remains to verify.
REVIEW
TriageReview201v3