Skip to content

Releases: cdeust/Cortex

v3.13.2

17 Apr 12:45

Choose a tag to compare

  • 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

17 Apr 12:34

Choose a tag to compare

  • 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

17 Apr 12:13

Choose a tag to compare

  • 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)

16 Apr 20:48

Choose a tag to compare

  • 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

16 Apr 20:48

Choose a tag to compare

v3.12.0 — upstream MCP ingest (ingest_codebase + ingest_prd)

15 Apr 21:30

Choose a tag to compare

  • 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

15 Apr 17:51

Choose a tag to compare

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

15 Apr 12:51

Choose a tag to compare

  • 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

15 Apr 09:23

Choose a tag to compare

  • 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

14 Apr 00:09

Choose a tag to compare

  • 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