Repository navigation
Releases
v4.24.0
- chore(release): prepare Cortex 4.24.0 (#987)
- fix(tests): the auto-dispatch test declares the PostgreSQL driver it needs (#986)
- feat(telemetry): each captured payload stored in the background is one operation (#733) (#985)
- test(backup): a restored store keeps its version chains and source links (#731, slice 5) (#984)
- feat(backup): restore a staged backup into a fresh root, verified against its manifest (#731) (#983)
- fix(security): a memory write cannot target another project's domain (GHSA-7848-qh48-mx2w) (#981)
- ci: the resolver reads the low-risk file names from ci.json (ADR-1131) (#982)
- ci(review): one review workflow and budget script for every repository (#980)
- deps: bump python-dateutil from 3.0.0 to 4.0.0 (#935)
- deps: bump pymupdf from 1.28.2 to 2.1 (#933)
- chore(deps): bump the npm_and_yarn group across 2 directories with 1 update (#955)
- feat(backup): a live SQLite store is staged as one consistent copy (#731, slice 3) (#979)
- feat(ingest): each embedded docx image names its part, digest and size (#732, slice 2) (#978)
- ci: only reviews run under the review contract count against the budget (ADR-1129) (#965)
- feat(telemetry): every sample of one MCP tool call carries its operation id (#733, slice 3) (#967)
- docs(privacy): say which captured calls keep nothing, and what Write and MultiEdit copy (#737, slice 5) (#976)
- docs(agents): state the CI contract every agent and routine follows (#973)
- feat(doctor): the cached embedding weights are checked against their declared digest (#734, slice 4) (#974)
- ci(review): the comment that carries the verdict links the review run (ADR-1130) (#975)
- feat(doctor): the reranker weights are verified against the published digest (#734, slice 3) (#972)
- docs(privacy): say what auto-capture copies, tool by tool, in every project (#737, slice 4) (#968)
- fix(bench): manifests record the embedding a run served, not the pin (#734, slice 2) (#966)
- feat(backup): a versioned manifest digests every class A file of an install (#731, slice 2) (#960)
- ci: a merge that waits ends the resolver green, not red (ADR-1128) (#964)
- Merge pull request #962 from cdeust/fix/733-unknown-provider-cost
- ci: admit the Claude reviews of one pull request one at a time (#963)
- fix(scope): the SQL project predicate normalizes Windows separators like the Python rule (#692) (#959)
- ci: bump github/codeql-action/upload-sarif (#931)
- fix(tests): the #733 tests import each changed module by its dotted path
- feat(verification): a native receipt's artifact object is produced from the doctor's identity (#730) (#957)
- fix(consolidation): an unreported provider cost is unknown, not a free 0.0 (#733, slice 2)
- ci: the review's completion wakes the resolver as the Pipeline's does (ADR-1127) (#958)
- deps: bump the minor-and-patch group across 1 directory with 3 updates (#949)
- deps: bump pytest-asyncio from 1.4.1 to 1.4.1.post1 (#934)
- fix(tests): the uv stand-in is a uv.cmd on Windows so PATH lookup reaches it (#692) (#956)
- ci: a Dependabot minor or patch update of the dependency files merges without a review (ADR-1126) (#953)
- fix(tests): issue-147 cwd fault hits only the grading fallback (#692) (#954)
- feat(bench): MANIFEST.json names the mcp_server artifact behind the scores (#729) (#947)
- fix(tests): reranker cache-path tests compare paths, not strings (#692) (#952)
- fix(mcp-client): the real-child stdio tests spawn on a subprocess-capable loop (#692) (#951)
- feat(verification): native receipts bind each check to the artifact digest it ran (#730) (#948)
- fix(infra): a zero graph TTL is stale even when the clock reads the mtime back (#692) (#950)
- fix(ast): Kotlin walker tests read valid Kotlin; tree-sitter-language-pack <1.24 (#939)
- test(session-registry): reader tests set the window pid on every platform (#692) (#945)
- docs(admission): ADR-1125, a cancelled tool call's worker runs to completion (#728, slice 5) (#946)
- fix(security): ADR task records stay inside the wiki root (GHSA-5w3v-7v7h-q9x4) (#941)
- chore(security): secret scanning skips the vendored gitleaks allowlist (#944)
- fix(security): apply_patch paths stay inside the working directory (GHSA-pw64-v3mg-xxmm) (#942)
- test(admission): a cancelled real remember keeps its slot and lands its row in the Cortex store (#728, slice 4) (#943)
- fix(tests): session_queue ~/state test sets USERPROFILE next to HOME (#692, class 5) (#925)
- fix(storage): no default PostgreSQL URL in code; auto without a URL is SQLite (#704, slice 2) (#937)
- fix(security): the embedding model loads only safetensors; advisory paths stay unreachable (#938)
- test(admission): MCP client cancel and disconnect keep the worker's slot and land its write (#728, slice 3) (#936)
- fix(methodology): query_methodology lists hot memories under the domain remember writes (#721, slice 9) (#930)
- fix(validate): validate_memory reads the domain remember writes (#721, slice 8) (#929)
- fix(coverage): assess_coverage scores the domain remember writes (#721, slice 7) (#928)
- test(claims): corrections and contradictory dates keep each claim's own event time (#717, slice 5) (#927)
- feat(claims): extract stated event intervals with each bound's own precision (#717, slice 4) (#926)
- fix(tests): validate_memory tests write native paths and pass extracted refs (#692, class 5) (#924)
- fix(drill): drill_down rebuilds the hierarchy over the domain remember writes (#721, slice 6) (#921)
- Merge pull request #919 from cdeust/fix/729-doctor-symlink-loop
- feat(wiki): extract_claims reads a claim's stated event time (#717, slice 3) (#923)
- ci: close the issues a resolver-merged PR names (close-issues job) (#922)
- Merge remote-tracking branch 'origin/main' into fix/729-doctor-symlink-loop
- fix(tests): send platform-absolute event paths in the preemptive-context tests (#692, class 5) (#920)
- feat(telemetry): carry a per-stage latency breakdown in every telemetry sample (#722, slice 1) (#878)
- fixup! fix(doctor): a symlink loop fails only the pairing and artifact checks (#729, slice 4)
- fixup! fix(doctor): a symlink loop fails only the pairing and artifact checks (#729, slice 4)
- feat(wiki): persist a claim's event time in wiki.claim_events (#717, slice 2) (#894)
- feat(stats): memory_stats reports abandoned workers from abandoned_work (#728, slice 2) (#902)
- fix(tests): name the Windows home and wait on pipes without select (#692, classes 6-7) (#913)
- fix(doctor): a symlink loop fails only the pairing and artifact checks (#729, slice 4)
- fix(story): get_project_story reads the domain remember writes (#721, slice 5) (#918)
- ci: the mutation gate judges only the mutants on changed lines (ADR-1122 item 6) (#917)
- feat(doctor): diagnose an unsupported Claude plugin/runtime pairing (#729, slice 3) (#916)
- fix(narrative): narrative reads the domain remember writes (#721, slice 4) (#915)
- fix(windows): CLAUDE_PID names the window before the ancestor walk (#835, slice 1) (#909)
- Merge pull request #907 from cdeust/fix/737-no-orphan-capture-artifact
- docs(audit): which model identity facts a local run records (#734, slice 1) (#905)
- test(hooks): spawn the consolidate exit child instead of forking a threaded parent (#801) (#908)
- Merge remote-tracking branch 'origin/main' into fix/737-no-orphan-capture-artifact
- feat(ingest): name each embedded image ingest_document leaves out (#732, slice 1) (#893)
- fix(recall): recall_hierarchical reads the domain remember writes (#721, slice 3) (#914)
- fixup! fix(capture): keep the artifact when the payload may have left the hook
- fix(capture): keep the artifact when the payload may have left the hook
- fix(doctor): artifact identity ignores git-ignored files and names trees outside git (#729, slice 2) (#904)
- feat(admission): count workers still running after their caller was cancelled (#728, slice 2) (#903)
- Merge pull request #897 from cdeust/fix/711-session-start-graph-prune
- fix(recall): scope by the domain identity remember writes (#721, slice 2) (#901)
- feat(recall): a recalled document segment names its source file and version (#713, slice 2) (#899)
- fixup! fix(hooks): SessionStart prunes orphaned code graphs even when it ingests nothing (#711, slice 2)
- refactor(infrastructure): remove viz_client, a read client with no caller (#724, slice 5) (#900)
- fix(wiki): POSIX wiki paths and byte-exact decision fixtures on Windows (#692, class 8) (#896)
- docs(audit): what a Cortex backup must contain (#731, slice 1) (#892)
- fixup! fix(hooks): SessionStart prunes orphaned code graphs even when it ingests nothing (#711, slice 2)
- fix(hooks): SessionStart prunes orphaned code graphs even when it ingests nothing (#711, slice 2)
- docs(audit): what the telemetry attributes to an operation today (#733, slice 1) (#895)
- docs(audit): which platform combinations a receipt measures (#730, slice 1) (#891)
- ci: an added blank or comment line selects no function for the mutation gate (ADR-1122) (#912)
- ci: pick mutmut's process isolation per platform (ADR-1122) (#911)
- ci: sync the dev group in the workflows that run ci_unit.sh (ADR-1122) (#910)
- fix(capture): kill the mutants of the #737 change and let the gate's stats run start
- fix(capture): an undelivered capture leaves no artifact behind (#737, slice 1)
- ci: fork mutmut mutants from a fork server, not from the suite's process (ADR-1122) (#906)
- fix(remember): keep an explicit domain instead of remapping it by substring (#721, slice 1) (#877)
- fix(profiles): rebuild_profiles creates a domain from a Codex-only history (#726, slice 1) (#881)
- feat(doctor): name the running artifact, its revision and its members digest (#729, slice 1) (#887)
- Merge pull request #885 from cdeust/fix/728-admission-worker-ownership
- Merge pull request #882 from cdeust/fix/727-tool-operation-signal
- Merge remote-tracking branch 'origin/main' into fix/727-tool-operation-signal
- ci: run only the mutants of the changed functions in the mutation gate (ADR-112...
pgvector-v0.8.7-pg18.6.0
pgvector built by .github/workflows/pgvector.yml (run 39017072528) from the pinned upstream tag against the pinned theseus PostgreSQL. Verify: gh attestation verify --repo cdeust/Cortex
v4.23.5
- chore(release): prepare Cortex 4.23.5 (#641)
- ci(windows): target the Windows leg at what actually broke on Windows (#640)
- fix(sqlite): install sqlite-vec on every backend, self-heal vectorless rows (#637)
- fix(consolidate): gate PG-only wiki passes once at wiring, not per call (#639)
- fix(setup): persist backend marker before setup.py can fail; close ML-child isolation gap (#638)
What's Changed
- fix(setup): persist backend marker before setup.py can fail; close ML-child isolation gap by @cdeust in #638
- fix(consolidate): gate PG-only wiki passes once at wiring, not per call by @cdeust in #639
- fix(sqlite): install sqlite-vec on every backend, self-heal vectorless rows by @cdeust in #637
- ci(windows): target the Windows leg at what actually broke on Windows by @cdeust in #640
- chore(release): publish Cortex 4.23.5 by @cdeust in #641
Full Changelog: v4.23.4...v4.23.5
v4.23.4
- chore(release): prepare Cortex 4.23.4 (#635)
- docs: verify native Claude Codex memory sharing and clarify capabilities (#632)
What's Changed
- docs: verify Claude and Codex memory sharing and clarify native capabilities by @cdeust in #632
- chore(release): publish Cortex 4.23.4 by @cdeust in #635
Full changelog: v4.23.3...v4.23.4
Verified with installed Claude Code and Codex
After updating both local plugins and the Cortex runtime to 4.23.4, fresh macOS sessions completed a Claude → Codex → Claude memory handoff against the same PostgreSQL store. Each reader retrieved a synthetic payload omitted from its prompt. Both clients excluded the test record from another project and received automatic Cortex startup context. All 12 Codex hook entries were trusted. The synthetic record was soft-deleted after verification.
The first Codex attempt reported unavailable tools and made no memory calls. In the successful fresh session, Cortex appeared after deferred tool discovery. The trace records this observation; it does not claim every startup or host feature was tested.
Download the sanitized native verification trace. This check covers macOS; Windows and Linux validation is provided separately by CI, not by this native handoff.
v4.23.3
v4.23.2
- fix(codex): deliver native context and durable session records (#627)
- fix(wiki): stop re-materialising wiki_write pointer memories as pages (#622) (#624)
- docs(readme): document the one-line update command (#626)
- docs: close the last stale claims and name what a session-end kill costs (#625)
- fix(launcher): isolate the vendored deps/ from user site-packages (#621) (#623)
- feat(codex): full profile and the same eleven lifecycle hooks under Codex (#620)
- fix(devcontainer): wire the composition root before the FlashRank prewarm (#618)
What's Changed
- fix(devcontainer): wire the composition root before the FlashRank prewarm by @cdeust in #618
- feat(codex): full profile and the same eleven lifecycle hooks under Codex by @cdeust in #620
- fix(launcher): isolate the vendored deps/ from user site-packages (#621) by @cdeust in #623
- docs: close the last stale Codex parity claims (follow-up to #620) by @cdeust in #625
- docs(readme): document the one-line update command by @cdeust in #626
- fix(wiki): stop re-materialising wiki_write pointer memories as pages (#622) by @cdeust in #624
- fix(codex): deliver native context and durable session records by @cdeust in #627
Full Changelog: v4.23.1...v4.23.2
v4.23.1
v4.23.0
- release: 4.23.0 (#609)
- feat(transcripts): read Codex rollouts, write the session log before consolidating (#610) (#610)
- feat(hooks): normalise Codex hook events into what the lifecycle hooks read (#608) (#608)
- fix(gitignore): anchor .Codex/ to repo root, report outside worktrees (ADR-1078) (#602)
- Inject only the session's project and global memories (#604) (#606)
- feat(hooks): a console entry point runs any lifecycle hook from the wheel (#605)
- docs(readme): predictions and calibration, one store for Claude Code and Codex (#603)
- fix: align Claude and Codex backend selection and verify shared handoff (#600)
- feat(predictions): record what is expected, resolve it, score the confidence (#597) (#599)
- chore(git): ignore .Codex/, where Codex puts its worktrees (#601)
- feat(sqlite): store procedural skills on the default backend (#596) (#598)
- ci(test-sqlite): set the job budget from its measured p90 (#594) (#595)
- chore(scanner): delete the unused transcript reader, refuse a non-path (#591) (#593)
- fix(hooks): fill a session entry's tool sequence from its transcript (#591) (#592)
- fix(wiki): one reading of a draft section for every consumer (#589) (#590)
- fix(wiki): a draft section carries a heading and a body, both text (#587) (#588)
- fix(wiki): refuse a draft refinement whose value is empty (#585) (#586)
- fix(launcher,wiki): install without a pip module, refuse an empty refine (#582, #583) (#584)
- feat(wiki): expose the Path B draft tools over MCP (#579) (#581)
- fix(wiki): refining a draft leaves its confidence as the claims set it (#578) (#580)
- fix(launcher): read deps entry owners from the scratch RECORD files (#575) (#577)
- fix(installer): route setup.sh and setup.py through the launcher's scratch-and-commit install (#573) (#576)
- docs(changelog): 4.22.0 lists only the dependency bumps #531 committed (#574)
- docs(readme): architecture diagram and the sourced how-it-works note (#572)
What's Changed
- docs(readme): architecture diagram and the sourced how-it-works note by @cdeust in #572
- docs(changelog): 4.22.0 lists only the dependency bumps #531 committed by @cdeust in #574
- fix(installer): route setup.sh and setup.py through the launcher's scratch-and-commit install (#573) by @cdeust in #576
- fix(launcher): read deps entry owners from the scratch RECORD files (#575) by @cdeust in #577
- fix(wiki): refining a draft leaves its confidence as the claims set it (#578) by @cdeust in #580
- feat(wiki): expose the Path B draft tools over MCP (#579) by @cdeust in #581
- fix(launcher,wiki): install without a pip module, refuse an empty refine (#582, #583) by @cdeust in #584
- fix(wiki): refuse a draft refinement whose value is empty (#585) by @cdeust in #586
- fix(wiki): a draft section carries a heading and a body, both text (#587) by @cdeust in #588
- fix(wiki): one reading of a draft section for every consumer (#589) by @cdeust in #590
- fix(hooks): fill a session entry's tool sequence from its transcript (#591) by @cdeust in #592
- chore(scanner): delete the unused transcript reader, refuse a non-path (#591) by @cdeust in #593
- ci(test-sqlite): set the job budget from its measured p90 (#594) by @cdeust in #595
- feat(sqlite): store procedural skills on the default backend (#596) by @cdeust in #598
- chore(git): ignore .Codex/, where Codex puts its worktrees by @cdeust in #601
- feat(predictions): record what is expected, resolve it, score the confidence (#597) by @cdeust in #599
- fix: align Claude and Codex backend selection and verify shared handoff by @cdeust in #600
- docs(readme): predictions and calibration, one store for Claude Code and Codex by @cdeust in #603
- feat(hooks): a console entry point runs any lifecycle hook from the wheel by @cdeust in #605
- Inject only the session's project and global memories (#604) by @cdeust in #606
- fix(gitignore): anchor .Codex/ to repo root, report outside worktrees (ADR-1078) by @cdeust in #602
- feat(hooks): normalise Codex hook events into what the lifecycle hooks read (#608) by @cdeust in #608
- feat(transcripts): read Codex rollouts, write the session log before consolidating by @cdeust in #610
- release: 4.23.0 by @cdeust in #609
Full Changelog: v4.22.0...v4.23.0
v4.22.0
- release: 4.22.0 (#570)
- fix(core): remove os/pathlib from ablation.py and 8 retrieval env-flag modules (#560, 2/3) (#568)
- fix(core): remove os/pathlib from wiki_coverage cluster (#560, 3/3) (#569)
- fix(core): remove pathlib from abstention_gate and codebase_graph (#560) (#564)
- fix: expose 13 handler-declared params dropped by hand-written MCP wrappers (#559) (#567)
- fix(remember): propagate decisions written under an agent context to team scope (#561) (#565)
- docs: describe recall's real fusion; stop storing layer file counts (#562, #563) (#566)
- deps: bump sentence-transformers from 5.6.1 to 6.0.1 (#533)
- deps: bump xxhash from 3.8.1 to 4.0.1 (#532)
- deps: bump the minor-and-patch group with 4 updates (#531)
- ci: bump hashgraph-online/ai-plugin-scanner-action (#529)
What's Changed
- ci: bump hashgraph-online/ai-plugin-scanner-action from 1.2.591 to 1.2.624 in the minor-and-patch group by @dependabot[bot] in #529
- deps: bump the minor-and-patch group with 4 updates by @dependabot[bot] in #531
- deps: bump xxhash from 3.8.1 to 4.0.1 by @dependabot[bot] in #532
- deps: bump sentence-transformers from 5.6.1 to 6.0.1 by @dependabot[bot] in #533
- docs: describe recall's real fusion; stop storing layer file counts (#562, #563) by @cdeust in #566
- fix(remember): propagate decisions written under an agent context to team scope (#561) by @cdeust in #565
- fix: expose 13 handler-declared params dropped by hand-written MCP wrappers (#559) by @cdeust in #567
- fix(core): remove pathlib from abstention_gate and codebase_graph (#560, 1/3) by @cdeust in #564
- fix(core): remove os/pathlib from wiki_coverage cluster (#560, 3/3) by @cdeust in #569
- fix(core): remove os/pathlib from ablation.py and 8 retrieval env-flag modules (#560, 2/3) by @cdeust in #568
- release: 4.22.0 by @cdeust in #570
Full Changelog: v4.21.0...v4.22.0
v4.21.0
- release: 4.21.0 (#556)
- fix(hooks): the decision gate judges every language, test file and header (ADR-1060 revision, no exception) (#555)
- chore(marketplace): deliver zetetic-team-subagents v2.41.0 (#554)
- chore(marketplace): deliver zetetic-team-subagents v2.40.1 (#553)
- chore(marketplace): deliver zetetic-team-subagents v2.40.0 and hypermnesia-mcp-viz v3.1.2 (#552)
- docs: reflect the v4.20.0 LongMemEval-S measurement in the README, with its artifacts (#551)
- fix(benchmarks): reproduce.sh --only fails closed on a selector that runs nothing (#550)
- docs: restore the green and privacy sections word for word from v4.20.0 (#549)
- Remove independent project disclaimer from README
- docs: rewrite the README around its three positions, marketplace-complete (#548)
What's Changed
- docs: rewrite the README around its three positions, marketplace-complete by @cdeust in #548
- docs: restore the green and privacy sections word for word from v4.20.0 by @cdeust in #549
- fix(benchmarks): reproduce.sh --only fails closed on a selector that runs nothing by @cdeust in #550
- docs: reflect the v4.20.0 LongMemEval-S measurement in the README, with its artifacts by @cdeust in #551
- chore(marketplace): deliver zetetic-team-subagents v2.40.0 and hypermnesia-mcp-viz v3.1.2 by @cdeust in #552
- chore(marketplace): deliver zetetic-team-subagents v2.40.1 by @cdeust in #553
- chore(marketplace): deliver zetetic-team-subagents v2.41.0 by @cdeust in #554
- fix(hooks): the decision gate judges every language, test file and header (ADR-1060 revision, no exception) by @cdeust in #555
- release: 4.21.0 by @cdeust in #556
Full Changelog: v4.20.0...v4.21.0