Matriz de capacidades de Cortex v2¶
Resumen¶
Este documento proporciona una matriz de capacidades concisa y trazable a la fuente para Cortex v2. Todas las capacidades se verifican contra los límites de arquitectura del repositorio, las implementaciones de fuente y los contratos de configuración.
Taxonomía de estado¶
- Core (Zero-CGO): incluido en la distribución pure-Go por defecto; no requiere CGO, bases de datos vectoriales externas ni dependencias daemon.
- Condicional (Build Tag): capacidad funcional compilada con build tags
explícitos de Go (por ejemplo,
-tags cortex_vectors). Los binarios de release habilitancortex_vectors. - Servidor (self-hosted single-tenant): capacidad de servidor PostgreSQL self-hosted que requiere PostgreSQL 16+, alineación con el ledger de migraciones y un bearer estático configurado.
- Adaptador externo: adaptador plug-in para infraestructura externa (por ejemplo, Qdrant o pgvector); condicionado por build tags y configuración de runtime del servidor.
- Stub degradado: implementación de fallback segura conectada por defecto para mantener las garantías de zero-CGO y zero-crash cuando los adaptadores opcionales están ausentes.
- Plugin de cliente: integración con agentes externos incrustada en el binario o distribuida como lifecycle harness.
- Gate de CI: job de verificación determinista definido en
.github/workflows/ci.yml; valida el comportamiento distribuido pero no es en sí una capacidad de runtime.
Dimensiones de especificación y evaluación¶
Cada capacidad de esta matriz se evalúa en cuatro dimensiones estrictas: 1. Alcance (Scope): el límite de runtime, la responsabilidad del componente o el tier operativo donde funciona la capacidad. 2. Prerrequisitos: versión de la toolchain, tags de compilación, infraestructura subyacente o configuración requerida para la activación. 3. Evidencia de fuente: enlaces relativos al repositorio hacia el código fuente verificado, migraciones o tests que implementan la capacidad. 4. Limitaciones y restricciones: límites de comportamiento concretos, vías de degradación o no-capacidades.
[!IMPORTANT] Aviso de reporte veraz: Por las restricciones del dispatch, no se ejecutó ningún suite de tests durante esta sesión de mantenimiento de documentación. Las evaluaciones de gates y resultados de test no ejecutados en esta sesión se reportan como
ND/pending(no determinado) o remiten al CI autoritativo. No se hacen afirmacionesPASSde runtime no ejecutado.
1. Modos de runtime y límites arquitectónicos¶
| Capacidad | Estado / Tier | Alcance | Prerrequisitos | Evidencia de fuente | Limitaciones y restricciones |
|---|---|---|---|---|---|
| Modo local (default) | Core (Zero-CGO) | CLI local, TUI, HTTP local (cortex serve) y servidor MCP stdio |
Go 1.26.5; filesystem local | cmd/cortex/main.go, internal/cli, internal/app/app.go |
Ejecución SQLite embebida single-tenant conectada vía internal/store/bundle. El código local debe seguir siendo zero-CGO. |
| Modo servidor | Servidor (self-hosted single-tenant) | Servicio self-hosted single-tenant, MCP Streamable HTTP (/mcp), API REST, streaming SSE |
Go 1.26.5; PostgreSQL 16+ con bootstrap RLS; configuración de DSN dual; bearer estático | cmd/cortex/main.go, internal/platform/server |
Requiere PostgreSQL externo; no puede ejecutar la base de datos SQLite embebida concurrentemente en el mismo proceso. Tenant y workspace son constantes de configuración, no entrada del cliente. |
| Gate de aislamiento de arquitectura | Core (Zero-CGO) | Verificación de aislamiento estático de dependencias e imports | Go 1.26.5 | internal/app/arch_test.go, AGENTS.md |
Hace cumplir que los paquetes de composición local nunca importen PostgreSQL, authz/identidad, Qdrant/pgvector ni paquetes del servidor. |
| Restricción de puente de comando | Core (Zero-CGO) | Punto de entrada de composición del binario de producción | Go 1.26.5 | cmd/cortex/main.go |
cmd/cortex es el único paquete puente permitido entre la composición local y internal/platform/server. |
2. Motor de persistencia y migración¶
| Capacidad | Estado / Tier | Alcance | Prerrequisitos | Evidencia de fuente | Limitaciones y restricciones |
|---|---|---|---|---|---|
| Línea base SQLite v2 | Core (Zero-CGO) | Esquema de persistencia embebida local | Go 1.26.5; SQLite 3 | migrations/v2/001_init.sql, internal/app/app.go |
Línea base forward-only. Una sonda de arranque de solo lectura verifica SHA-256 en cortex_meta. Rechaza bases de datos v1, ajenas o corruptas sin mutarlas. |
| Follow-ups de migración SQLite | Core (Zero-CGO) | Migraciones de esquema follow-up (002, 003) | Go 1.26.5; baseline 001 aplicada | internal/migration/v2.go, migrations/v2/003_project_artifacts.sql |
Preflight de ledger de solo lectura (PreflightFollowUp) y check post-aplicación (VerifyFollowUpApplied). Append-only, forward-only, retención indefinida. |
| Ledger de esquema PostgreSQL | Servidor (self-hosted single-tenant) | Migraciones de esquema de servidor (100–109) | PostgreSQL 16+; DSN de migración privilegiado | migrations/v2/100_server.sql hasta 109_scoped_code_index.sql, internal/migration/postgres.go |
Rastreado en cortex_server_migrations. Los checksums históricos (100–105) son inmutables; cualquier checksum registrado inesperado aborta el rollout. |
| Seguridad de DSN dual | Servidor (self-hosted single-tenant) | Separación de privilegios del pool de conexión PostgreSQL | Rol de runtime no-superusuario y rol de migración privilegiado | internal/config/config.go, docs/ARCHITECTURE.md |
El rol de runtime (server.storage.dsn) no puede ejecutar DDL; el rol de migración (server.storage.migration_dsn) no puede servir queries de la API. |
| Transacciones cross-store | Core (Zero-CGO) | Escrituras locales atómicas multi-store | Go 1.26.5; backend SQLite | internal/domain/interfaces.go (línea 317), internal/store/bundle/bundle.go |
Escrituras multi-store orquestadas por domain.UnitOfWork a través de memoria, sesiones, prompts y edges de grafo con reintento de busy acotado. |
3. Stack de retrieval e inteligencia RAG¶
| Capacidad | Estado / Tier | Alcance | Prerrequisitos | Evidencia de fuente | Limitaciones y restricciones |
|---|---|---|---|---|---|
| Búsqueda léxica (FTS5 / PostgreSQL) | Core (Zero-CGO) / Servidor | Indexado de texto completo y ranking BM25/tsvector | Go 1.26.5 (local); PostgreSQL 16+ (servidor) | internal/store/search/store.go, internal/store/postgres/extras.go, internal/store/postgres/authorized_operations.go |
SQLite FTS5 pure-Go en local; búsqueda de texto completo PostgreSQL (tsvector/tsquery) en modo servidor; conjunto de candidatos acotado. |
| Vector denso (SQLite BLOB) | Condicional (Build Tag) | Escaneo de similitud vectorial en memoria local | Go 1.26.5; build tag -tags cortex_vectors |
internal/vector/sqlite_blob/adapter.go, internal/store/sqlite/vector_store_enabled.go |
Escaneo coseno en memoria de BLOBs float32 en SQLite; habilitado en binarios de release; rechaza mismatches de dimensión. |
| Stub de vector denso | Stub degradado | Fallback de vectores por defecto cuando se omite la build tag | Go 1.26.5 (sin cortex_vectors) |
internal/vector/sqlite_blob/adapter.go, internal/store/sqlite/vector_store.go |
Fallback zero-CGO que emite warning de salud degradado y devuelve ErrVectorSearchDisabled; cae con seguridad a la búsqueda léxica. |
| Adaptador de vectores Qdrant | Adaptador externo | Búsqueda vectorial distribuida para un servidor self-hosted | Go 1.26.5 con -tags qdrant_integration; clúster Qdrant en marcha |
internal/vector/qdrant, AGENTS.md |
Solo servidor; aislado por una frontera de celda de workspace inmutable; falla explícitamente si el endpoint de Qdrant no está disponible. |
| Adaptador pgvector | Adaptador externo | Indexado vectorial de PostgreSQL in-database | Go 1.26.5 con -tags pgvector_integration; PostgreSQL con extensión vector |
internal/vector/pgvector, AGENTS.md |
Solo servidor; hace cumplir la frontera de celda de workspace para prevenir filtraciones vectoriales cross-cell. |
| Reciprocal Rank Fusion (RRF) | Core (Zero-CGO) | Fusión de rankings híbrida sobre resultados léxicos y vectoriales | Go 1.26.5 | internal/retrieval/retrieval.go (FuseResults, línea 167), internal/store/search/store.go |
Combina listas rankeadas usando la constante canónica $k=60$; opera sobre posiciones rankeadas verdaderas; soporta decay temporal exponencial opcional. |
| Adaptive-RAG | Core (Zero-CGO) | Clasificación y enrutado dinámico de complejidad de queries | Go 1.26.5 | internal/retrieval/adaptive.go |
Clasificador de complejidad de 4 tiers que enruta queries por las vías de retrieval solo-léxico, híbrido, graph-expanded y multi-hop. |
| HippoRAG (PPR) | Core (Zero-CGO) | Retrieval asociativo vía Personalized PageRank | Go 1.26.5 | internal/domain/graph/ppr.go (ComputePersonalizedPageRank) |
Personalized PageRank por power iteration (damping 0.85, máximo 20 iteraciones, tolerancia 1e-6) sobre grafos de memoria y de símbolos de código. |
| LightRAG | Core (Zero-CGO) | Resúmenes macroscópicos de comunidades arquitectónicas | Go 1.26.5 | internal/domain/graph/community_summaries.go (GenerateCommunitySummaries) |
Genera resúmenes Markdown estructurados para comunidades de grafo cohesivas; acotado a subgrafos conectados. |
| CRAG (Corrective RAG) | Core (Zero-CGO) | Evaluación de confianza de retrieval y refinamiento de queries | Go 1.26.5 | internal/retrieval/crag.go |
Evalúa la confianza del retrieval; dispara como mucho una reformulación local determinista acotada en baja confianza. |
| Re-ranking ColBERT MaxSim | Core (Zero-CGO) | Re-ranking de interacción tardía a nivel de token | Go 1.26.5 | internal/retrieval/late_interaction.go (ComputeWeightedMaxSimScore) |
Puntuación de similitud máxima de token ponderada por especificidad sobre los pasajes de evidencia candidatos top; cero modelos externos requeridos. |
4. Inteligencia de código y analítica de grafo¶
| Capacidad | Estado / Tier | Alcance | Prerrequisitos | Evidencia de fuente | Limitaciones y restricciones |
|---|---|---|---|---|---|
| Parser AST zero-CGO | Core (Zero-CGO) | Análisis estático multi-lenguaje | Go 1.26.5 | internal/domain/ast/ast.go, internal/domain/ast |
Extracción estática de símbolos y relaciones sin llamadas a LLM ni tokens de API. Soporta Go, C#, F#, VB.NET, Java, Kotlin, Rust, C/C++, PHP, Ruby, Swift, TypeScript, JavaScript, Python y SQL. |
| Relaciones estructurales | Core (Zero-CGO) | Extracción dirigida de relaciones de entidades de código | Go 1.26.5 | internal/domain/ast/ast.go (CodeRelationship, línea 39) |
Extrae edges estructurales tipados: defines, imports, calls, implements, uses, contains, extends, instantiates. |
| Watcher continuo de código | Core (Zero-CGO) | Daemon watcher de cambios de filesystem (cortex watch) |
Go 1.26.5; proceso activo | internal/domain/code/watcher.go |
Indexado AST incremental en modificaciones de ficheros; eventos de fichero con debounce; salta ficheros gitignored y assets no-source. |
| Detección de comunidades | Core (Zero-CGO) | Descubrimiento de clusters funcionales en el grafo del codebase | Go 1.26.5 | internal/domain/graph/analytics.go (DetectCommunities, línea 117) |
Particiona el grafo del codebase en clusters funcionales cohesivos con etiquetado automático de Hub Node basado en centralidad de grado. |
| Cuellos de botella arquitectónicos (God Nodes) | Core (Zero-CGO) | Detección de nodos de alta centralidad | Go 1.26.5 | internal/domain/graph/analytics.go (FindGodNodes, línea 42) |
Detecta hubs con conectividad desproporcionada (in_degree + out_degree) mientras filtra tipos utilitarios (string, error, context.Context). |
| Ciclos de dependencia (Tarjan SCC) | Core (Zero-CGO) | Detección de dependencias circulares y bucles de import | Go 1.26.5 | internal/domain/graph/analytics.go (FindCycles, línea 334) |
Identifica dependencias circulares y bucles de import entre módulos vía Strongly Connected Components. |
| Análisis de blast radius | Core (Zero-CGO) | Propagación de impacto de cambios a través del call graph | Go 1.26.5 | internal/domain/graph/analytics.go (CalculateBlastRadius, línea 392) |
Calcula callers upstream, dependientes downstream, ficheros afectados y porcentaje de impacto en el grafo hasta un conteo de hops acotado. |
| Indexado de código con ámbito (migración 109) | Servidor (self-hosted single-tenant) | Almacenamiento particionado de símbolos y relaciones AST | PostgreSQL 16+; migración 109 aplicada | migrations/v2/109_scoped_code_index.sql |
Particionado por claves compuestas (tenant_id, workspace_id, project_id) bajo RLS forzado; las filas legacy solo-proyecto no se han backfilleado. |
5. Interfaces de usuario y transportes de integración¶
| Capacidad | Estado / Tier | Alcance | Prerrequisitos | Evidencia de fuente | Limitaciones y restricciones |
|---|---|---|---|---|---|
| Suite de comandos CLI | Core (Zero-CGO) | Interfaz de línea de comandos interactiva y scriptable | Go 1.26.5 | internal/cli, cmd/cortex/main.go |
25+ comandos: setup, search, save, context, stats, timeline, revisions, tui, serve, mcp, doctor, reindex, gc, config, auth, export, import, sync, merge-projects, ingest, code, watch, backup, update, web key, migrate, status/mode. |
| Terminal UI (TUI) | Core (Zero-CGO) | Dashboard interactivo de terminal Bubble Tea (15 pantallas, 5 overlays) | Go 1.26.5; TTY interactivo | internal/tui, docs/TUI-GUIDE.md |
Teclas globales ? (ayuda), ctrl+k (paleta de comandos), 1–4 (conmutación de workspace), n, t (toggle de tema), L (modal de auth), u, P, p, v, ctrl+c; tablas de teclas por pantalla y peculiaridades conocidas documentadas en la guía TUI. |
| Web UI embebida | Core (Zero-CGO) | Sala de control web de binario único servida en el puerto HTTP | Go 1.26.5; backend SQLite; clave de acceso web de primer arranque | internal/web, internal/cli/cli.go (mountWebSurface, línea 803) |
Montada como el fallback / del mux HTTP local (default :7438); sin imagen de contenedor separada ni inyección NEXT_PUBLIC_* en build-time; las rutas explícitas de la API siguen siendo autoritativas. |
cortex web key (CLI de credencial web embebida) |
Core (Zero-CGO) | Inspeccionar y rotar la clave de acceso web embebida | Go 1.26.5 | internal/cli/web.go, internal/webkey |
web key show reporta ruta y prefijo sin plaintext; web key regenerate rota atómicamente e imprime el nuevo secreto una vez. Nunca reemplaza http.token ni el bearer del servidor. |
cortex code (CLI de inteligencia de código) |
Core (Zero-CGO) | Subcomandos AST y de grafo scriptables sobre el store compartido | Go 1.26.5 | internal/cli/cli.go (runCode, línea 2368), internal/domain/code |
Subcomandos scan, symbols, analyze, impact, diff, graph, map, tests, find; lee y escribe el mismo store SQLite que la TUI y MCP. |
cortex ingest (CLI de ingesta AST) |
Core (Zero-CGO) | Escaneo único de repositorio con analítica de grafo | Go 1.26.5 | internal/cli/cli.go (runIngest, línea 2278), internal/domain/ast |
Escanea [path] (default .) hasta --max-files (default 500); persiste símbolos e relaciones e imprime god nodes y ciclos de import detectados. --project usa por defecto el proyecto detectado. |
cortex backup (CLI de backup atómico SQLite) |
Core (Zero-CGO) | Snapshot atómico de base de datos en línea | Go 1.26.5; VACUUM INTO de SQLite |
internal/cli/cli.go (runBackup, línea 1786) |
Escribe un snapshot .db con timestamp o un [path] explícito; un destino existente se sobreescribe. Solo SQLite local. |
cortex update (CLI de self-update) |
Core (Zero-CGO) | Comprobación de release y self-update del binario | Go 1.26.5; red saliente hacia el endpoint de releases | internal/cli/cli.go (runUpdate, línea 2233), internal/update |
--check reporta el release disponible sin instalar; un self-update fallido imprime fallbacks de instalación manual. Requiere red saliente. |
cortex migrate (CLI de migraciones) |
Core (Zero-CGO) | Control de migraciones de esquema local | Go 1.26.5; backend SQLite | internal/cli/cli.go (runMigrate, línea 1054), internal/migration |
Subcomandos up, down --target N y status; línea base forward-only más el ledger follow-up append-only. |
| Servidor MCP local (stdio) | Core (Zero-CGO) | Servidor Model Context Protocol sobre stdio | Go 1.26.5; transporte stdio | internal/mcp/server.go |
El namespace es cortex_*. Perfiles: agent, admin y temporal. Opera con IDs numéricos de observación. |
| Proxy stdio MCP remoto | Core (Zero-CGO) | Proxy stdio que reenvía llamadas MCP al servidor remoto | Go 1.26.5; mcp.remote.enabled: true configurado |
internal/mcp/proxy.go |
Reenvía las llamadas MCP stdio locales al servidor Cortex remoto (/mcp) vía autenticación por bearer token. |
| MCP Streamable HTTP de servidor | Servidor (self-hosted single-tenant) | MCP Streamable HTTP autenticado en /mcp |
PostgreSQL 16+; autenticación por bearer estático | internal/platform/server/http.go |
Expone 16+ herramientas que operan sobre UUIDs públicos vía AuthorizedStore bajo el binding RLS constante tenant/workspace. |
| API HTTP local | Core (Zero-CGO) | Servicio REST local (cortex serve) |
Go 1.26.5; backend SQLite | internal/http/server.go |
Rechaza bindings no-loopback sin http.token. Endpoint público /health. |
Endpoints de paridad (/api/me, /api/stats, /api/projects, /api/agent/projects, /api/graph/project-graph) |
Core (Zero-CGO) | Endpoints críticos para la web servidos sobre el puerto local respaldado por el bundle | Go 1.26.5; handlers neutrales de internal/api |
internal/http/server.go (líneas 141-149) |
Registrados detrás del mismo gate de token withAuth que envuelve todo el mux; reutiliza los handlers neutrales de internal/api en lugar de duplicar la lógica del servidor. |
| API REST de servidor | Servidor (self-hosted single-tenant) | Servicio REST single-tenant self-hosted | PostgreSQL 16+; autenticación por bearer estático | internal/platform/server/http.go |
Endpoints autenticados con bearer para memoria, analítica de grafo, blast radius, ingesta AST y estadísticas administrativas. |
| Agente conversacional de proyecto | Servidor (self-hosted single-tenant) | Asistente web (POST /api/agent/answer, /api/agent/stream) |
Runtime de servidor; proveedor LLM configurado; principal autorizado | internal/domain/agent, web/src/app/agent, docs/ARCHITECTURE.md |
Ámbito de capacidad de solo lectura; traza de retrieval sin contenido; handles de citación validados por el servidor; memoria de navegador efímera (máx. 6 turnos). |
| Web Dashboard (Next.js) | Core (Node/TS) | Aplicación de sala de control Next.js 15 | Node >= 24; navegador web moderno | web/src, web/package.json |
Hacer cumplir la autorización BOLA; visualización de grafo; vista de clusters Louvain; blast radius interactivo; exportador de vault Obsidian. |
| E2E de web embebida con Playwright | Gate de CI | Flujos dirigidos por navegador contra el binario real cortex serve |
Node >= 24; Chromium; Go 1.26.5; make web-build para assets frescos |
.github/workflows/ci.yml:397, tools/e2e-web |
Desbloqueo con clave de primer arranque, dashboard/memoria/búsqueda, selector de ajustes y flujos de graph-mount pasan contra la UI embebida; el informe y los traces se suben en caso de fallo. |
6. Plugins de cliente e integraciones de ecosistema¶
| Capacidad | Estado / Tier | Alcance | Prerrequisitos | Evidencia de fuente | Limitaciones y restricciones |
|---|---|---|---|---|---|
| Plugin de eventos OpenCode | Plugin de cliente | Extensión IDE de OpenCode y event hooks | Node >= 24; runtime de OpenCode | plugin/opencode/cortex.ts, plugin/opencode/embed.go |
Incrustado vía //go:embed. Auto-arranca el servidor, rastrea sesiones, suprime la contaminación de sesiones por subagentes, inyecta el memory protocol en la compaction. |
| Lifecycle hooks de Claude Code | Plugin de cliente | Integración de lifecycle de la CLI de Claude Code | CLI de Claude Code; bash, jq, python3, timeout | plugin/claude-code, docs/PLUGINS.md |
5 lifecycle hooks (SessionStart, UserPromptSubmit, SubagentStop, Stop); inyección automática de contexto y seguimiento de sesiones. |
| Proyección Markdown a Obsidian | Core (Zero-CGO) | Exportador de vault de solo lectura con [[WikiLinks]] |
Go 1.26.5; directorio de export | internal/projection/obsidian |
Exportador de solo lectura; neutraliza nombres de dispositivo reservados de Windows (CON, PRN, AUX, NUL, COM1-9, LPT1-9); previene colisiones insensibles a mayúsculas. |
| Sincronización de observaciones por chunks | Core (Zero-CGO) | Sincronización de observaciones local-a-remoto | Go 1.26.5; credenciales de endpoint remoto | internal/sync |
Sincronización determinista por chunks entre stores SQLite locales y endpoints remotos (cortex sync); preflight de privacidad validado. |
7. Fronteras de seguridad, privacidad y autorización¶
| Capacidad | Estado / Tier | Alcance | Prerrequisitos | Evidencia de fuente | Limitaciones y restricciones |
|---|---|---|---|---|---|
| Aislamiento de tenant y RLS | Servidor (self-hosted single-tenant) | segregación de datos single-tenant bajo RLS forzado | PostgreSQL 16+; AuthorizedStore |
internal/authz, internal/store/postgres |
Tenant y workspace son valores de configuración constantes (server.tenant_id, server.workspace_id), nunca entrada del cliente. Las operaciones Postgres se ejecutan bajo RLS forzado vía AuthorizedContext. |
| Política de logging zero-secret | Core / Servidor | Logging y telemetría en todos los paquetes | Go 1.26.5 | internal/config/config.go, docs/ARCHITECTURE.md |
Los DSN, tokens bearer, claves API, grant digests y passphrases se enmascaran estrictamente y nunca se escriben en logs ni en stdout. |
| Eliminación y redacción de etiquetas de privacidad | Core / Plugin de cliente | Sanitización del texto de ingesta | Go 1.26.5; internal/domain/privacy |
internal/domain/privacy/privacy.go, plugin/opencode/cortex.ts |
Redacta el contenido encerrado en etiquetas <private>...</private>; lo sustituye por [REDACTED] determinista; requiere contenido residual público. |
No interferencia AST (REQ-PRIV-007) |
Core (Zero-CGO) | Integridad estructural de la inteligencia de código | Go 1.26.5 | internal/domain/ast/ast.go, internal/domain/privacy/privacy.go, AGENTS.md |
La inteligencia estructural del código (símbolos, firmas, resúmenes de doc, relaciones, reasoning) es metadato estructural y NUNCA se muta ni se redacta con las rutinas de privacidad. |
8. Identidad de build y procedencia del binario¶
| Capacidad | Estado / Tier | Alcance | Prerrequisitos | Evidencia de fuente | Limitaciones y restricciones |
|---|---|---|---|---|---|
| Contrato de identidad binaria | Core (Zero-CGO) | Procedencia del ejecutable de campaña estadística | Go 1.26.5 | bench/vectorhydration/provenance.go (BinaryIdentity, línea 29) |
Versión de esquema binary-identity/v1. Valida SHA-256 no-cero en minúsculas para binario, árbol de fuente, tool y argv. |
| Fijación de toolchain | Core (Zero-CGO) | Determinismo del entorno de compilación | Go 1.26.5 (go1.26.5) |
bench/vectorhydration/provenance.go (línea 20), .github/workflows/ci.yml |
La versión del tool debe coincidir con el patrón Go portátil (^go[0-9]+\.[0-9]+\.[0-9]+$). CI hace cumplir go1.26.5 exacto. |
| Identidad de build aprobada | Core (Zero-CGO) | Configuración de compilación reproducible | Go 1.26.5 con -trimpath |
bench/vectorhydration/provenance.go (línea 23) |
Fijada a ApprovedBuildIdentity = "go-test-c-trimpath-v1". Los binarios construidos sin los flags aprobados fallan la validación de identidad. |
| Vinculación del digest de publicación | Core (Zero-CGO) | Integridad del artefacto de publicación estadística | Go 1.26.5 | bench/vectorhydration/provenance.go (PublicationBinding, línea 98) |
Vincula el digest de identidad binaria y el digest de identidad del protocolo. Deshabilita campos JSON desconocidos o duplicados durante el unmarshaling. |
9. Política de retención de datos y logs¶
| Capacidad | Estado / Tier | Alcance | Prerrequisitos | Evidencia de fuente | Limitaciones y restricciones |
|---|---|---|---|---|---|
Retención indefinida de artefactos (REQ-RET-001) |
Core / Servidor | Versiones de artefactos del Project Context Protocol | Migración 003 (SQLite) o 106 (PostgreSQL) aplicada | internal/domain/projectprotocol/doc.go (línea 18), migrations/v2/003_project_artifacts.sql |
Revisiones, activaciones y eventos de auditoría de skills y reglas se conservan indefinidamente. El historial nunca sale del ledger. |
| Soft delete no destructivo | Core / Servidor | Transiciones de estado del ciclo de vida del artefacto | Persistencia SQLite o PostgreSQL | internal/domain/projectprotocol/doc.go (línea 19), internal/domain/projectprotocol/ports_test.go |
El paquete NO define operaciones de hard-delete ni purge. La borrera es exclusivamente una transición de estado soft-delete. |
| Invariante de esquema SQL sin purge | Servidor (self-hosted single-tenant) | Triggers y grants de la base de datos PostgreSQL | PostgreSQL 16+; rol cortex_app |
migrations/v2/106_project_artifacts.sql (línea 1567), internal/migration/postgres_integration_test.go |
Los grants omiten explícitamente el privilegio DELETE en las tablas de artefactos. Los intentos de ejecutar SQL DELETE disparan el aborto de la transacción. |
| Invariante de contabilidad monótona | Core (Zero-CGO) | Seguimiento de uso de almacenamiento y bytes | Go 1.26.5 | internal/migration/v2_test.go (línea 1436) |
Los totales de bytes y contadores de uso aumentan monótonamente; no pueden reiniciarse, limpiarse ni decrementarse. |
10. Matriz de privacidad y protecciones por componente¶
| Subsistema / Interfaz | Mecanismo de protección | Campos protegidos | Comportamiento en error | Evidencia de fuente |
|---|---|---|---|---|
| Motor de privacidad de dominio | Parsing exacto/insensible a mayúsculas de <private>...</private> y reemplazo [REDACTED] |
Prosa de texto, campos custom, envelopes multi-campo | Rechaza etiquetas mal formadas (ErrCodeInvalidMarker), residual vacío (ErrCodeRequiredEmpty), UTF-8 inválido (ErrCodeInvalidUTF8) |
internal/domain/privacy/privacy.go |
CLI (save, import, export) |
Sanitización de entrada y validación de residual | Títulos de observación, contenido, texto de prompt | Rechaza entradas sin contenido público residual; preserva la salida sanitizada sin loguear secretos | internal/cli, internal/domain/privacy/privacy.go |
Herramientas MCP (cortex_save) |
Filtro de privacidad pre-persistencia | Contenido de observaciones, tags, notas | Devuelve error de validación al agente llamante si las etiquetas privadas están mal formadas o el residual está vacío | internal/mcp/tools_memory.go, internal/domain/privacy/privacy.go |
Servidor HTTP (/api/memory) |
Filtro de privacidad del body de la petición | Contenido de observaciones de memoria, resúmenes de sesión | HTTP 400 Bad Request con mensaje de error sanitizado sin payload | internal/http/server.go, internal/domain/privacy/privacy.go |
| Store Bundle (UnitOfWork) | Cumplimiento de privacidad transaccional | Registros multi-store enlistados en el guardado atómico | Falla la transacción cerrada antes de commitear buffers sucios si la validación de privacidad falla | internal/store/bundle/bundle.go, internal/domain/privacy/privacy.go |
Protocolo de sync (cortex sync) |
Preflight de privacidad por chunks | Chunks de observaciones en tránsito | Detiene la sincronización antes de la transmisión de red ante cualquier violación de privacidad | internal/sync/sync.go, internal/domain/privacy/privacy.go |
| Inteligencia de código (AST) | Frontera de no interferencia (REQ-PRIV-007) |
Símbolos de código, firmas, resúmenes de doc, relaciones, reasoning | Las estructuras AST son metadato estructural del código y NUNCA se mutan ni se redactan con las rutinas de privacidad | internal/domain/ast/ast.go, AGENTS.md |
11. Fixtures de benchmark sintéticos y seguros¶
| Fixture / Corpus | Origen y revisión | Alcance y cobertura | Garantías de seguridad | Evidencia de fuente |
|---|---|---|---|---|
| Corpus de retrieval nativo de Cortex | origin: "cortex-authored-synthetic", privacy_review: "synthetic-only-no-real-prompts-vendor-rows-private-data-or-secrets" |
Queries de colisión de aislamiento multi-proyecto, filtros temporales, estados de lifecycle | 100% de registros sintéticos; cero prompts de usuarios reales, cero filas de datos de vendors, cero credenciales de API, cero datos personales (PII) | bench/evidence/cortex-native/v1/corpus.json, bench/common/corpus_test.go |
| Fixture de autoridad sintética | Dataset de test sintético autor | Fronteras de aislamiento cross-proyecto y cross-tenant | Claves de proyecto sintéticas (project-a, project-b); verifica cero filtración cross-boundary bajo queries adversariales |
bench/fixtures/cortex-native/authority.jsonl, bench/fixtures/cortex-native/authority_fixtures_test.go |
| Fixture de colisión sintética | Dataset de test sintético autor | Colisión de tokens léxicos y decoys de ranking hard-negative | Evalúa la discriminación de ranking contra decoys léxicos engañosos sin pasajes propietarios ni externos | bench/fixtures/cortex-native/collision.jsonl, bench/fixtures/cortex-native/collision_fixtures_test.go |
12. Límites de evidencia y protocolo de evaluación¶
| Política de evidencia | Clasificación | Reglas operativas y umbrales | Evidencia de fuente |
|---|---|---|---|
| Gates universales de corrección | Invariante de release obligatorio | Se permite exactamente cero violaciones de aislamiento (cualquier fuga cross-tenant o cross-project bloquea el release); coincidencia exacta con el conjunto autoritativo de stable-IDs elegibles. | docs/BENCHMARKS.md, bench/common/gates.go |
| Límites de ground truth de relevancia | Clasificación de métrica | Las afirmaciones de retrieval deben evaluarse contra conjuntos de stable-IDs verificados (IDs de episodio/fact) o spans de bytes semi-abiertos. El F1 / ROUGE-L de tokens de respuesta por sí solos no pueden sustentar la relevancia del retrieval. | docs/BENCHMARKS.md |
| Límites de carga de trabajo semántica | Frontera de revisión de código | Los cambios de lógica fuente se acotan a $\le 350$ LOC (Go/Rust/Java) o $\le 250$ LOC (TS/Python); los tests se acotan a $\le 600$ LOC en total con ficheros de test modulares $\le 250$ LOC. | AGENTS.md |
| Límites efímeros del agente conversacional | Frontera arquitectónica de runtime | El agente web retiene como máximo 6 pares de turnos en memoria; se limpia al cambiar de proyecto; las trazas de retrieval son proyecciones sin contenido; las citaciones del proveedor deben resolver a handles verificados del servidor. | docs/ARCHITECTURE.md |
| Invariante de preregistración de gates | Metodología estadística | Los gates de release, direcciones de métricas, tamaños de muestra y tolerancias deben preregistrarse antes de observar los resultados candidatos. La evidencia de decisión held-out nunca debe reutilizarse para calibración. | docs/BENCHMARKS.md, bench/common/gates_test.go |