Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .claude-plugin/marketplace.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "cortex",
"description": "Persistent memory for Claude Code — remembers across sessions automatically. Install and forget. Scientific retrieval backed by 97 published references.",
"version": "4.14.2",
"version": "4.14.3",
"author": {
"name": "Clement Deust",
"email": "admin@ai-architect.tools"
Expand Down
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,21 @@ adheres to [Semantic Versioning](https://semver.org/).

## [Unreleased]

## [4.14.3] - 2026-07-17

### Fixed
- `write_class="deliberate"` (or omitted, source-fallback) was rejected by the novelty gate, violating the documented contract that deliberate writes are never rejected for low novelty. `write_class` is now threaded through `evaluate_gate` / `_compute_gate_decision` / `determine_bypass`, checked last so a more specific content-based bypass reason (`bypass_error`/`bypass_decision`/`bypass_important_tag`) still wins when it applies (#147, #148).
- `force=True` (and plain) writes intermittently raised a misleading "check DATABASE_URL" hint on a bare `FileNotFoundError` — root cause was `validate_memory.grade_from_content(base_dir=os.getcwd())` in the write-time provenance grading step, unguarded unlike every sibling enrichment step, raising when the process cwd had been removed mid-session (e.g. a worktree cleanup), unrelated to the DB. Wrapped in the same defensive try/except pattern used elsewhere; `tool_error_handler.py`'s blanket DATABASE_URL hint no longer fires for exception types it doesn't recognize as DB-related (#147, #148).
- Issue #149's Python-3.10-only flake: `pip_install`'s per-entry commit loop pruned superseded `*.dist-info` siblings immediately after each entry committed. `os.listdir()` order is unspecified by the stdlib and differs by OS/filesystem, so the prune could permanently delete the still-valid OLD dist-info right before the package-directory entry failed and rolled back, leaving `deps_dir` with reverted package files but no metadata for either version. The destructive prune now waits until the whole `tmp_dir` commits successfully, independent of listdir enumeration order (#149, #150).

### Changed
- `mcp` dependency bumped 1.27.0 -> 1.28.1 (uv group, dependabot) (#152).
- `wiki_classifier.py` and `wiki_axis_registry.py` split into cohesive collaborators (`wiki_axis_defaults.py`, `wiki_classifier_gates.py`, `wiki_classifier_patterns.py`, `wiki_kind_detection.py`, `wiki_title.py`) to bring both files under the repo's 500-line limit; no behaviour change (#134, #153).

### Verified
- Pre-tag guard on the exact release tree `4e3a202b` (`benchmarks/reproduce.sh --no-ablation` + 2× `--only locomo`, isolated ephemeral pgvector containers, `reranker_state: "loaded"` in all 3 MANIFESTs, same model sha256): LongMemEval-S MRR **0.9166** (floor 0.914, +0.0026 PASS) / R@10 **0.9820** (floor 0.982, +0.0000 PASS); LoCoMo 3-run mean MRR **0.7998** (reps 0.8013 / 0.7983 / 0.7997) / R@10 **0.9135** (reps 0.9142 / 0.9127 / 0.9137, floor 0.915 tol 0.005 PASS); BEAM-100K MRR **0.5417** (not gated, inside the documented 0.539–0.547 intra-day noise band). Evidence: `benchmarks/results/repro/20260717-v4.14.3-pretag/`.
- Adjudication (LoCoMo MRR mean 0.7998 vs threshold 0.800 = floor 0.805 − tol 0.005, i.e. −0.0002): accepted as sampling noise by explicit maintainer decision (2026-07-17). Grounds: delta vs the v4.14.2 pre-tag mean (0.8009) is −0.0011, below the standard error of a 3-rep mean (~0.0013, single-rep stdev 0.0022 per the floors-rebaseline data); rep1 under the identical full-run protocol reads 0.8013 vs 4.14.2's 0.8015; the reranker is verified loaded in every run (FlashRank-absence signature excluded); and none of the 4 released commits is in the LoCoMo harness's dependency graph — ingestion goes through `BenchmarkDB`, not the #148 write path (`benchmarks/lib/bench_db.py`). Symmetric precedent: v4.14.1 released at +0.0002 above the same threshold. #150/#152/#153 do not touch the recall path reproduce.sh's floors exercise; #148 touches the write-gate (write path) — the empirical floor-gate result above is the actual non-regression evidence, not an import-closure argument.

## [4.14.2] - 2026-07-15

### Fixed
Expand Down
25 changes: 25 additions & 0 deletions benchmarks/results/repro/20260717-v4.14.3-pretag/MANIFEST.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"git_sha": "4e3a202b10c897fbc564b79d11314b2c0a1c5449",
"longmemeval_dataset_sha256": "08d8dad4be43ee2049a22ff5674eb86725d0ce5ff434cde2627e5e8e7e117894",
"pg_image": "pgvector/pgvector:pg16",
"bench_container_name": "cortex-bench-pg-47873-501b3391",
"bench_container_port": 32771,
"bench_runner_pid": 47873,
"python": "3.12.11",
"packages": {
"datasets": "4.8.4",
"sentence-transformers": "5.4.1",
"torch": "2.11.0",
"psycopg": "3.3.3",
"psycopg-pool": "3.3.0"
},
"embedding_model_revision": "1110a243fdf4706b3f48f1d95db1a4f5529b4d41",
"reranker_active": true,
"reranker_state": "loaded",
"reranker_model_sha256": "d3dd7b09fcf06b0c070081d6819b5effbb40b667bcad78b2d7543400271141d1",
"results_files": [
"beam-100K.json",
"locomo.json",
"longmemeval-s.json"
]
}
69 changes: 69 additions & 0 deletions benchmarks/results/repro/20260717-v4.14.3-pretag/beam-100K.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
{
"overall_mrr": 0.5416872795414462,
"overall_r10": 0.7163888888888889,
"ability_mrr": {
"abstention": 0.125,
"contradiction_resolution": 0.9291666666666666,
"event_ordering": 0.36908730158730163,
"information_extraction": 0.5669047619047619,
"instruction_following": 0.2961111111111111,
"knowledge_update": 0.8916666666666666,
"multi_session_reasoning": 0.7072916666666667,
"preference_following": 0.40884920634920635,
"summarization": 0.3019620811287478,
"temporal_reasoning": 0.8208333333333334
},
"ability_r5": {
"abstention": 0.125,
"contradiction_resolution": 1.0,
"event_ordering": 0.5,
"information_extraction": 0.625,
"instruction_following": 0.425,
"knowledge_update": 0.95,
"multi_session_reasoning": 0.9,
"preference_following": 0.625,
"summarization": 0.5,
"temporal_reasoning": 0.975
},
"ability_r10": {
"abstention": 0.125,
"contradiction_resolution": 1.0,
"event_ordering": 0.625,
"information_extraction": 0.65,
"instruction_following": 0.575,
"knowledge_update": 0.95,
"multi_session_reasoning": 0.925,
"preference_following": 0.7,
"summarization": 0.6388888888888888,
"temporal_reasoning": 0.975
},
"total_questions": 395,
"elapsed_s": 745.6345331668854,
"manifest": {
"split": "100K",
"n_conversations": 20,
"n_questions": 395,
"n_runs": 1,
"repro": {
"git_commit": "4e3a202b10c897fbc564b79d11314b2c0a1c5449",
"git_dirty": true,
"python_version": "3.12.11 (main, Sep 18 2025, 19:41:45) [Clang 20.1.4 ]",
"platform_system": "Darwin",
"platform_machine": "arm64",
"platform_node": "mac-1.home",
"timestamp_utc": "2026-07-17T09:51:03.497615+00:00",
"lib_versions": {
"sentence-transformers": "5.4.1",
"torch": "2.11.0",
"numpy": "2.4.4",
"psycopg": "3.3.3",
"pgvector": "0.4.2",
"flashrank": "0.2.10"
},
"reranker_active": true,
"reranker_state": "loaded",
"reranker_model_path": "/Users/cdeust/.cache/flashrank/ms-marco-MiniLM-L-12-v2/flashrank-MiniLM-L-12-v2_Q.onnx",
"reranker_model_sha256": "d3dd7b09fcf06b0c070081d6819b5effbb40b667bcad78b2d7543400271141d1"
}
}
}
52 changes: 52 additions & 0 deletions benchmarks/results/repro/20260717-v4.14.3-pretag/locomo-rep1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{
"overall_mrr": 0.8013402367337785,
"overall_recall10": 0.9142280524722503,
"category_mrr": {
"multi_hop": 0.7284725312762697,
"temporal": 0.576656314699793,
"single_hop": 0.7338511764043678,
"open_domain": 0.8462992846762168,
"adversarial": 0.8580281514698554
},
"category_recall10": {
"multi_hop": 0.8411214953271028,
"temporal": 0.8043478260869565,
"single_hop": 0.9361702127659575,
"open_domain": 0.9334126040428062,
"adversarial": 0.9394618834080718
},
"elapsed_s": 2255.837089776993,
"consolidation_total_wall_s": 0.0,
"consolidation_call_count": 0,
"manifest": {
"with_consolidation": false,
"ablate_mechanism": null,
"ablate_env_var": null,
"n_conversations": 10,
"n_questions": 1982,
"n_runs": 1,
"consolidation_call_count": 0,
"consolidation_total_wall_s": 0.0,
"repro": {
"git_commit": "4e3a202b10c897fbc564b79d11314b2c0a1c5449",
"git_dirty": true,
"python_version": "3.12.11 (main, Sep 18 2025, 19:41:45) [Clang 20.1.4 ]",
"platform_system": "Darwin",
"platform_machine": "arm64",
"platform_node": "mac-1.home",
"timestamp_utc": "2026-07-17T09:13:20.977255+00:00",
"lib_versions": {
"sentence-transformers": "5.4.1",
"torch": "2.11.0",
"numpy": "2.4.4",
"psycopg": "3.3.3",
"pgvector": "0.4.2",
"flashrank": "0.2.10"
},
"reranker_active": true,
"reranker_state": "loaded",
"reranker_model_path": "/Users/cdeust/.cache/flashrank/ms-marco-MiniLM-L-12-v2/flashrank-MiniLM-L-12-v2_Q.onnx",
"reranker_model_sha256": "d3dd7b09fcf06b0c070081d6819b5effbb40b667bcad78b2d7543400271141d1"
}
}
}
52 changes: 52 additions & 0 deletions benchmarks/results/repro/20260717-v4.14.3-pretag/locomo-rep2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{
"overall_mrr": 0.798301579293002,
"overall_recall10": 0.9127144298688193,
"category_mrr": {
"multi_hop": 0.7153661672353261,
"temporal": 0.5647299861973775,
"single_hop": 0.7322272880783519,
"open_domain": 0.8463861049770681,
"adversarial": 0.8572807673143996
},
"category_recall10": {
"multi_hop": 0.8348909657320872,
"temporal": 0.7934782608695652,
"single_hop": 0.9361702127659575,
"open_domain": 0.9322235434007135,
"adversarial": 0.9417040358744395
},
"elapsed_s": 2044.8194921016693,
"consolidation_total_wall_s": 0.0,
"consolidation_call_count": 0,
"manifest": {
"with_consolidation": false,
"ablate_mechanism": null,
"ablate_env_var": null,
"n_conversations": 10,
"n_questions": 1982,
"n_runs": 1,
"consolidation_call_count": 0,
"consolidation_total_wall_s": 0.0,
"repro": {
"git_commit": "4e3a202b10c897fbc564b79d11314b2c0a1c5449",
"git_dirty": true,
"python_version": "3.12.11 (main, Sep 18 2025, 19:41:45) [Clang 20.1.4 ]",
"platform_system": "Darwin",
"platform_machine": "arm64",
"platform_node": "mac-1.home",
"timestamp_utc": "2026-07-17T10:03:32.713647+00:00",
"lib_versions": {
"sentence-transformers": "5.4.1",
"torch": "2.11.0",
"numpy": "2.4.4",
"psycopg": "3.3.3",
"pgvector": "0.4.2",
"flashrank": "0.2.10"
},
"reranker_active": true,
"reranker_state": "loaded",
"reranker_model_path": "/Users/cdeust/.cache/flashrank/ms-marco-MiniLM-L-12-v2/flashrank-MiniLM-L-12-v2_Q.onnx",
"reranker_model_sha256": "d3dd7b09fcf06b0c070081d6819b5effbb40b667bcad78b2d7543400271141d1"
}
}
}
52 changes: 52 additions & 0 deletions benchmarks/results/repro/20260717-v4.14.3-pretag/locomo-rep3.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{
"overall_mrr": 0.7997160956545416,
"overall_recall10": 0.91372351160444,
"category_mrr": {
"multi_hop": 0.7229528259902092,
"temporal": 0.5720194962042788,
"single_hop": 0.7358057525610717,
"open_domain": 0.8450611516901647,
"adversarial": 0.8568385650224215
},
"category_recall10": {
"multi_hop": 0.8348909657320872,
"temporal": 0.8152173913043478,
"single_hop": 0.9397163120567376,
"open_domain": 0.9310344827586207,
"adversarial": 0.9417040358744395
},
"elapsed_s": 2060.7755172252655,
"consolidation_total_wall_s": 0.0,
"consolidation_call_count": 0,
"manifest": {
"with_consolidation": false,
"ablate_mechanism": null,
"ablate_env_var": null,
"n_conversations": 10,
"n_questions": 1982,
"n_runs": 1,
"consolidation_call_count": 0,
"consolidation_total_wall_s": 0.0,
"repro": {
"git_commit": "4e3a202b10c897fbc564b79d11314b2c0a1c5449",
"git_dirty": true,
"python_version": "3.12.11 (main, Sep 18 2025, 19:41:45) [Clang 20.1.4 ]",
"platform_system": "Darwin",
"platform_machine": "arm64",
"platform_node": "mac-1.home",
"timestamp_utc": "2026-07-17T10:37:43.471538+00:00",
"lib_versions": {
"sentence-transformers": "5.4.1",
"torch": "2.11.0",
"numpy": "2.4.4",
"psycopg": "3.3.3",
"pgvector": "0.4.2",
"flashrank": "0.2.10"
},
"reranker_active": true,
"reranker_state": "loaded",
"reranker_model_path": "/Users/cdeust/.cache/flashrank/ms-marco-MiniLM-L-12-v2/flashrank-MiniLM-L-12-v2_Q.onnx",
"reranker_model_sha256": "d3dd7b09fcf06b0c070081d6819b5effbb40b667bcad78b2d7543400271141d1"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
{
"overall_mrr": 0.9166380952380953,
"overall_recall10": 0.982,
"category_mrr": {
"Single-session (user)": 0.8412698412698413,
"Multi-session reasoning": 0.9625313283208021,
"Single-session (preference)": 0.6853703703703703,
"Temporal reasoning": 0.9184389545291801,
"Knowledge updates": 0.9320512820512821,
"Single-session (assistant)": 1.0
},
"category_recall10": {
"Single-session (user)": 0.9571428571428572,
"Multi-session reasoning": 1.0,
"Single-session (preference)": 0.9,
"Temporal reasoning": 0.9774436090225563,
"Knowledge updates": 1.0,
"Single-session (assistant)": 1.0
},
"elapsed_s": 1987.0532216249994,
"consolidation_total_wall_s": 0.0,
"consolidation_call_count": 0,
"manifest": {
"with_consolidation": false,
"with_consolidation_note": "Scores collected with consolidation=False do NOT reflect production behaviour. Consolidation-only mechanisms (CASCADE, INTERFERENCE, HOMEOSTATIC_PLASTICITY, SYNAPTIC_PLASTICITY, MICROGLIAL_PRUNING, TWO_STAGE_MODEL, EMOTIONAL_DECAY, TRIPARTITE_SYNAPSE, SCHEMA_ENGINE) are exercised only when with_consolidation=True. Delta between the two conditions is unmeasured in this run.",
"ablate_mechanism": null,
"ablate_env_var": null,
"n_questions": 500,
"n_runs": 1,
"consolidation_call_count": 0,
"consolidation_total_wall_s": 0.0,
"repro": {
"git_commit": "4e3a202b10c897fbc564b79d11314b2c0a1c5449",
"git_dirty": true,
"python_version": "3.12.11 (main, Sep 18 2025, 19:41:45) [Clang 20.1.4 ]",
"platform_system": "Darwin",
"platform_machine": "arm64",
"platform_node": "mac-1.home",
"timestamp_utc": "2026-07-17T08:40:12.173333+00:00",
"lib_versions": {
"sentence-transformers": "5.4.1",
"torch": "2.11.0",
"numpy": "2.4.4",
"psycopg": "3.3.3",
"pgvector": "0.4.2",
"flashrank": "0.2.10"
},
"reranker_active": true,
"reranker_state": "loaded",
"reranker_model_path": "/Users/cdeust/.cache/flashrank/ms-marco-MiniLM-L-12-v2/flashrank-MiniLM-L-12-v2_Q.onnx",
"reranker_model_sha256": "d3dd7b09fcf06b0c070081d6819b5effbb40b667bcad78b2d7543400271141d1"
}
}
}
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "hatchling.build"

[project]
name = "hypermnesia-mcp"
version = "4.14.2"
version = "4.14.3"
description = "Scientifically-grounded memory system based on computational neuroscience research"
readme = "README.md"
license = "MIT"
Expand Down
Loading