Releases: cdeust/Cortex
v3.13.2
- fix(v3.13.2): revert plugin.json to launcher path (Claude Code marketplace install)
Full Changelog: v3.13.1...v3.13.2
v3.13.1
- fix(v3.13.1): SQLite A3 migration + pinned plugin.json versions
- docs(readme): v3.13.0 scalability release note + cortex-doctor + pool architecture
Full Changelog: v3.13.0...v3.13.1
v3.13.0 — Scalability Program Complete
- feat(marketplace): no-Python-required install + uvx-consistent hooks
- bench(phase-5): LongMemEval 500-Q regression gate PASSED — exact match
- release(v3.13.0): bump version + cortex-doctor CLI for marketplace users
- feat(phase-7): hardening — content normalization, metrics, Dockerfile
- feat(phase-4): chunked consolidate + streaming homeostatic moments
- feat(phase-2): JOIN replacements for plasticity / synaptic tagging / co-activation
- test(phase-5-step-6): I10 invariant — pool capacity vs cycle worker fanout
- feat(phase-5-step-4c): asyncio.to_thread wrap handlers at registration
- feat(phase-5-step-4b): migrate 14 external store._conn.execute sites to pool
- feat(phase-5-step-4a): _execute borrows from interactive_pool per call
- feat(phase-5-step-5): per-tool admission semaphore middleware
- feat(phase-5-step-3): latency-class registry for MCP tool handlers
- feat(phase-5-step-2): ConnectionPool infrastructure in PgMemoryStore
- feat(phase-5-step-1): psycopg_pool dep + pool config knobs
- docs(phase-5): ConnectionPool + to_thread + admission design spec
- docs(darval): github issue #14 A3 delivery reply draft
- bench(a3-step-9): BEAM-100K regression gate PASSED — exact zero delta
- bench(a3-step-9): LoCoMo 1982-Q regression gate PASSED
- bench(a3-step-9): LongMemEval 500-Q regression gate PASSED
- fix(a3): effective_heat underflow guards for multi-year age rows
- feat(a3-step-8): delete legacy heat path — single A3 canonical implementation
- feat(a3-step-7): flag-gated decay cycle no-op under A3_LAZY_HEAT
- feat(a3-step-6): recall_memories_lazy PL/pgSQL function + get_a3_ddl
- feat(a3-step-5): dual-path heat writers (anchor, preemptive_context, stale, sqlite)
- chore(settings): add project permission allowlist for read-only ops
- style: ruff format + drop unused import in Phase 6 fixes
- feat(reranker): Platt calibration from rate_memory feedback (AF-2)
- feat(a3-step-4): bump_heat_raw canonical writer + homeostatic_state helpers
- feat(write_gate): auto-calibrate threshold from observed acceptance rate (AF-5)
- feat(a3-step-2): effective_heat() + effective_heat_frozen() PL/pgSQL functions
- feat(a3-step-1): CORTEX_MEMORY_A3_LAZY_HEAT flag + migration SQL scaffolding
- fix(recall_hierarchical): require domain or memory_ids — kill O(N^2) uncapped fallback
- style: ruff check --fix unused imports in Phase 1 tests
- style: ruff format Phase 1 changes — line length + minor normalisation
- fix(profile-store): per-domain split — bound write amplification per session
- fix(compression): eliminate redundant gist encode on 0→2 transitions
- fix(homeostatic): Welford one-pass moments for heat-distribution health
- fix(wiki-sync): surface errors in remember handler, stop silent swallowing
- fix(codebase-analyze): bounded-candidate rglob — ADR-0045 R2/R3
- style: ruff format v3.12.x commits (CI format-check fix)
- fix(validation): bounded tags envelope on remember (ADR-0045 R2)
- fix(validation): tighten remember.content maxLength 50K→10K (ADR-0045 R2)
- fix(embedding_cache): SHA256[:16] keys, never raw text (ADR-0045 R5)
- fix(import_sessions): delete full_read path — streaming only (ADR-0045 R2)
Full Changelog: v3.12.2...v3.13.0
v3.12.2 — darval field report fixes (#14)
- release: v3.12.2 — darval field report fixes (#14)
- feat(entities): case-variant canonicalization + merge migration
- feat(diagnostics): cls + memify reason_for_zero signals (#14)
- feat(backfill+homeostatic): age-decayed initial_heat + bimodality-aware cohort correction (#14)
Full Changelog: v3.12.1...v3.12.2
v3.12.1 — hotfix: emergence_tracker import + I2 regression guard
v3.12.0 — upstream MCP ingest (ingest_codebase + ingest_prd)
- release: v3.12.0 — upstream MCP ingest (ingest_codebase + ingest_prd)
- feat(ingest): upstream MCP consumption — ingest_codebase + ingest_prd
Full Changelog: v3.11.0...v3.12.0
v3.11.0 — consolidate batching + plasticity/CLS/cascade fixes
Addresses issue #13 (darval) in full
The telemetry patch in v3.10.1 (commit `69d81fb`) gave per-stage observability. This release is the substantive follow-up: the five pathologies identified by the agent+genius audit of darval's 35-min run on a 66K-memory store.
Phase A — Set-based SQL batching (100–500× speedup on decay)
Per-row UPDATE/DELETE loops with per-row commits were the dominant cost. New batch methods on both `PgMemoryStore` and `SqliteMemoryStore`:
- `update_memories_heat_batch` — single `UPDATE … FROM UNNEST` replaces 62K per-row `UPDATE + COMMIT`
- `update_entities_heat_batch`, `archive_entities_batch`
- `update_relationships_weight_batch`, `delete_relationships_batch`
- `insert_stage_transitions_batch`
Converted callers: `decay`, `plasticity`, `pruning`, `cascade`. Erlang analysis predicts the decay stage drops from ~1100 s → 3–10 s on a 66K store.
Phase B — Consolidation-scoped memory cache
`store.get_all_memories_for_decay()` was called 6× per run (decay, compression, memify, homeostatic, sleep, emergence). Now loaded once at handler entry and threaded through every stage that needs it. Stages retain a fallback load when called standalone.
Phase C — Plasticity co-access starvation fixed
Previous `get_hot_memories(limit=50)` sampled 0.5% of a 10k-entity store → 99.95% LTD was distribution collapse, not biology. Sample cap raised 50 → 2000; reuses Phase B cache; precomputes lowercase entity-name index once; exception handler surfaces errors instead of swallowing them.
Phase D — CLS causal-edge signal gate
`_discover_causal_edges` previously hard-capped at 500 episodic on a 25K store (2% sample) and produced 0 edges by construction. Episodic cap raised 500 → 2000; adds an early-exit gate that skips the O(E²) PC pass when too few entities clear the minimum-observations threshold; restricts the PC vocabulary to qualifying entities so the matrix is `E_qualifying²` not `E_all²`.
Phase E — Cascade heartbeat skip + payload trim
Cascade was writing a heartbeat `UPDATE` on every scanned memory (~2000) even when nothing advanced, each with its own commit; and per-transition `INSERT + commit` for stage_transitions (503 fsyncs); and returning the full 503-transition list in the response. Now:
- Heartbeat skipped when `|Δhours| < 1` (the previous value was noise)
- `stage_transitions` INSERTs batched into one statement
- Response payload: `transitions_preview` (first 50) + `transitions_count`
- Exception handler now surfaces errors
- Response adds `scanned / heartbeats_written / heartbeats_skipped` counters
SQLite parity
Cowork mode previously lacked `stage_transitions` / `stage_entered_at` — cascade would error silently. Schema now has the table + column migration so cowork installs get the same cascade behavior as CLI.
Reviewed by
- `code-reviewer` — APPROVE
- `test-engineer` — 2188 tests pass
- `genius:erlang` — queuing theory on the 66K store
- `genius:feinstein` — differential diagnosis of all 6 findings
- `genius:feynman` — independent rederivation from first principles
Breaking changes
None. Stage functions gained an optional `memories=` parameter; all existing callers continue to work. MCP tool schemas unchanged. Response payload adds new fields (non-breaking).
Install
```
/plugin marketplace update
```
v3.10.1 — wiki_purge tool
- release: v3.10.1 — wiki_purge tool for cleaning audit-artefact pollution
- fix(wiki): reject audit artefacts (backfill, stage-N, path/URL titles)
Full Changelog: v3.10.0...v3.10.1
v3.10.0 — Cowork compat + TDQS schema enrichment
- release: v3.10.0 — Cowork compat + TDQS schema enrichment
- chore(tools): TDQS schema enrichment (40 tools) + sqlite memory_entities
- style: ruff format memory_store after auto-fallback edit
- feat(memory_store): auto-fallback to SQLite when DATABASE_URL absent
- chore(plugin): declare CORTEX_RUNTIME in mcp env schema
- security: use compile-time filename constants + README Glama badge
- chore: add glama.json — maintainer manifest for Glama's evaluator
- docs: refresh Views → Wiki screenshot with post-edit rendered view
- docs: reposition Cortex as a scientific-authoring tool, not just memory+graph
- security: close 2 new CodeQL alerts (ReDoS + HTTP response splitting)
- feat(wiki ui): collapse duplicate-title entries in the sidebar tree
- fix(wiki export): strip frontmatter before pandoc; re-inject as --metadata
- fix(wiki export): clearer error messages; pre-check for LaTeX engine
- ci+ui: skip ccplugins workflows without PAT; surface export errors in UI
- feat(wiki redesign): Phase 10 — Pandoc export (PDF, LaTeX, DOCX, HTML)
- feat(wiki redesign): Phase 9 — academic extensions
- feat(wiki redesign): Phase 8 — inline editor with live KaTeX preview
- feat(wiki redesign): Phase 7.3 — seed wiki from existing repo docs
- feat(wiki redesign): Phase 7.1 + 7.2 — cold-start fix
- ci: keep ccplugins fork in sync continuously
- ci: auto-sync cortex plugin to ccplugins monorepo on release
- docs: add Wiki + Knowledge screenshots; refresh Graph + Board shots
- security: match CodeQL py/path-injection example verbatim (3rd attempt)
- security: switch sanitizer to startswith pattern for CodeQL recognition
- security: keep sanitized path on same variable through sink (CodeQL #48 #49)
- security: close 6 CodeQL alerts in wiki_store + wiki_view_executor
- feat(wiki redesign): Phase 6 — Frontend integration
- feat(wiki redesign): Phase 5 — Malleability (user rules + executable views)
- feat(wiki redesign): Phase 4 — Thermodynamics
- feat(wiki redesign): Phase 3 — Concept emergence (Strauss grounded theory)
- feat(wiki redesign): Phase 2.4 + 2.5 — Curate + Compile
- feat(wiki redesign): Phase 2.3 — Synthesize phase (Path A + Path B)
- feat(wiki redesign): Phase 2.2 — Resolve phase
- feat(wiki redesign): Phase 2.1 — Extract phase (claim_events from memories)
- fix(wiki migrate): accurate written/unchanged counter on idempotent re-runs
- feat(wiki redesign): Phase 1.2 + 1.3 — migration + self-hosting loader
- feat(wiki redesign): Phase 1.1 — wiki.* schema + IR models
- feat: invert wiki gate + harden path traversal check (security)
- fix: classifier tolerates markdown heading prefix in reject patterns
- fix: reject / slash-command framing in wiki
Full Changelog: v3.9.1...v3.10.0
v3.9.1 — hooks.json schema fix
- release: v3.9.1 — hooks.json nested schema fix (#12)
- fix: hooks.json nested schema per Claude Code requirement (#12)
- style: apply ruff format + remove unused imports
- feat: 7-view frontend + wiki classifier + backend schema fixes
Full Changelog: v3.9.0...v3.9.1