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
34 changes: 34 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [1.5.0] - 2026-10-21

**`/add` no longer has to wait for extraction, and an index can no longer be
wrong without saying so.** A client can hand a batch to `/add` with
`async_mode` and get a `202` back in milliseconds, while a durable in-process
queue runs extraction in session order; the field, the response body and the
task-status paths match EverOS Cloud, so one client works against both. Vector
columns now follow `[embedding] dim` instead of a hardcoded 1024, startup
refuses an index the configured model cannot have produced instead of
accepting writes that are truncated or searches that quietly return nothing,
and an emptied index is reported instead of looking healthy. The rest is
reliability: OME writes no longer starve one another on Windows, a session
lock timeout no longer strands a memcell without its episode, a message the
model can never segment no longer blocks its session, resolving a cluster's
members no longer reads two embedding vectors per member, and a dozen smaller
faults found by property-based tests are fixed.

### Added

- **`async_mode` on `/add`: accept now, extract in the background.** A request with `async_mode: true` is written to a durable
Expand Down Expand Up @@ -187,6 +204,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
that table's index UUID / FTS segment count grew unbounded. The mirror wait
cancelled the optimize beat it was meant to stay clear of. Both waits now
only stop waiting. Present since 1.2.2.
- **Cascade: the handler limit held per drain pass, not per worker.** A worker
runs at most four handlers of a batch at once, but the limit was created
inside each drain pass, so two passes running together each got their own:
`POST /cascade/quiesce` drains while the background loop is still draining,
and that overlap peaked at eight concurrent handlers. The limit is now
shared by the worker. (#492)
- **Resolving a cluster's members read each member's full row, vectors
included.** The profile path maps a fresh cluster's episodes back to their
parents and needed two fields per member, yet fetched every member's whole
episode row with both embedding vectors; a cluster can hold thousands of
members, so that read dominated the path's memory. LanceDB now reads only
`parent_type` and `parent_id` (Milvus still loads full rows), and the
reflection path's bulk read skips the vector columns. (#490)
- **`method="vector"` finds episodes when no atomic fact is in scope.**
Vector search over episodes recalls through atomic facts, and it returned
an empty list (HTTP 200, no log line) whenever none were in scope — fact
Expand All @@ -201,6 +231,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
release rewrites or re-embeds anything on its own. The first start records
which model built the index and logs one line saying so.

The first start also creates the `memorize_inbox` table in `system.db` for the
async queue. `async_mode` is opt-in: clients that never send it get the same
synchronous responses as before.

Two deployments need attention:

- **A model narrower than `dim`** — the server now refuses to start instead of
Expand Down
2 changes: 1 addition & 1 deletion docs/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"info": {
"title": "everos",
"description": "md-first memory extraction framework",
"version": "1.5.0rc1"
"version": "1.5.0"
},
"paths": {
"/health": {
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "everos"
version = "1.5.0rc1"
version = "1.5.0"
description = "EverOS — local-first markdown memory framework for AI agents and user chats; lightweight, dev-friendly, small-team"
license = {text = "Apache-2.0"}
readme = "README.md"
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading