facts

package
v0.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 30, 2026 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

Package facts contiene la lógica pura de la capa semántica siempre-cargada: clasificación de volatilidad, peso (híbrido pin+uso), derivación de valores variables (edad desde una fecha invariante) y selección por presupuesto. Es el presentador único que comparten `nem outline` y el servidor MCP, para que la lógica viva en un solo lugar y sea testeable sin tocar la DB ni la salida.

Index

Constants

View Source
const (
	Core     = "core"
	Stable   = "stable"
	Volatile = "volatile"
)

Clases de estabilidad (volatilidad inferida). Determinan las capas: core y los pinned nunca se colapsan; volatile es lo primero en colapsar bajo presupuesto.

View Source
const DefaultBudget = 7

DefaultBudget es el tope por defecto de facts estables siempre-cargados.

Variables

This section is empty.

Functions

func ClassifyStability

func ClassifyStability(content string, dueAt int64, hasAnchor bool) string

ClassifyStability infiere la capa de un fact a partir de su contenido y fechas. Orden de precedencia: identidad invariante (anchor o marcadores core) → core; estado actual (marcadores volátiles o fecha) → volatile; resto → stable. La presencia del anchor se pasa explícita (hasAnchor) porque AnchorAt=0 es una fecha válida (1970-01-01) y no un "sin valor".

func IDs

func IDs(fs []db.Fact) []string

IDs extrae los ids de una lista de facts (para RecordFactHit).

func MatchQuery

func MatchQuery(all []db.Fact, query string) []db.Fact

MatchQuery devuelve los facts cuyo contenido matchea algún término relevante de la query (case-insensitive, términos de ≥3 chars). Es la base de la señal "aprendida" del peso: como los facts son un conjunto chico, basta una pasada en memoria en cada search, sin tocar FTS5. No muta nada.

func Render

func Render(f db.Fact, now int64) string

Render sustituye los tokens derivados ({age}, {elapsed}) usando AnchorAt. Si el fact no es derivado (AnchorAt=0) devuelve el contenido tal cual.

func Weight

func Weight(f db.Fact, now int64) float64

Weight computa el peso (no se guarda). Pin → tope absoluto; luego la capa; y dentro de la capa, el uso (hits) atenuado por recencia y ACOTADO a maxUsage para no cruzar de capa. Empate fino por edad se resuelve en el sort.

Types

type Line

type Line struct {
	Content string
	ID      string
	Due     string // "" para estables; "in 3d"/"overdue 2d" para reminders
}

Line es una entrada lista para imprimir: contenido ya derivado + id completo (la surface hace el short-hash). Due viene humanizado solo para recordatorios.

type Result

type Result struct {
	Stable    []Line // facts estables seleccionados, en orden de peso
	Reminders []Line // recordatorios, ordenados por fecha
	Collapsed int    // estables ocultos por presupuesto (para el "+N más")
}

Result es lo que el presentador entrega a cada surface (CLI / MCP).

func Present

func Present(all []db.Fact, now int64, budget int) Result

Present selecciona y ordena la capa siempre-cargada. Separa estables de recordatorios; ordena estables por peso y aplica el presupuesto (core+pinned exentos; el resto se capa a budget y el sobrante se cuenta en Collapsed); ordena recordatorios por fecha. Resuelve los tokens derivados al vuelo.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL