All notable changes to this project are documented here. This project adheres to Semantic Versioning.
[Unreleased]
[0.1.0] — 2026-09-07
Initial public release, published as foresight_memory.
Foresight is an Elixir port of Hindsight (MIT, Vectorize AI, Inc.). The ported architecture is theirs and is attributed in the README (Provenance) and the LICENSE (third-party notice); divergence from it is documented where introduced. Everything below predates the first publish and is part of the 0.1.0 story.
Changed
- Recall fusion now defaults to
:normalized/:zscore(was:rrf/:min_max). Measured over 134 graded-relevance queries: +0.1009 nDCG@10, 95% CI [0.0597, 0.1476], and MRR 0.776 → 0.903.:rrfmerges on rank position and discards the arm scores; normalizing keeps them. Existing banks with an explicitrecall_fusionoverride are unaffected. - Default reranker is now
Rerankers.Passthrough(wasRerankers.Bumblebee). The old default made a bare install demand the Nx/Bumblebee/EXLA stack and fail its capability preflight, so Foresight could not boot without ML dependencies nobody had asked for.
Fixed
- Foresight is installable.
:plugand:llm_corewere declaredoptional: truewhile being referenced unconditionally at compile time, so{:foresight, "~> 0.1"}on its own failedmix compile.:plugand the new direct:llm_toolkitare now required;:llm_coreremains optional and its adapter is guarded, with a stub that names the missing dependency. - Recall trace reports the fusion algorithm actually in use. It was hardcoded
to
"rrf"and reported the wrong algorithm on every request once the default changed. - MCP:
async_processingaccepted as an alias forasync; fabricated lenient sessions are closed at the end of the request that created them; undeclared tool arguments are named in the log instead of being dropped. - Enqueueing without Oban returns a structured
:unavailableerror instead of raising. - Scrivener ingestion: path traversal via an unvalidated bundle UUID, escape via symlinked path components, and unbounded reads from non-regular files are all closed.
Security
- Mode C schema-per-tenant isolation verified under a genuine least-privilege
role (
rolsuper = false, RLS forced): five forged-header cross-tenant attacks, 5/5 blocked, verified by canary rather than status code.
[0.1.0]
Initial development version.