Releases: PyroDonkey/vexic
Release list
v0.1.8
Event dating gains a provenance fallback, and the public contract stops
breaking older clients on additive result fields. CONTRACT_VERSION stays
0.1.0.
Added
- Tier 3
eventfacts may promote onmentioned_at-- the deterministic
earliest date of a fact's source messages -- when nooccurred_atis
available, instead of sinking in Tier 2 forever.mentioned_atis derived
provenance, never model output, and is never substituted intooccurred_at
(ADR 0037, Memory Invariant 11). It is exposed onLongTermFactand joins
occurred_atahead ofcreated_aton every temporal filter and on the
event-timeline sort. - Light renders each message with a transient
observed=<date> <Day>label so
the extractor can resolve relative references. The label is prompt
scaffolding and is never persisted (ADR 0038). - Operator memory tooling in the CLI:
vexic operator review-exportand
vexic operator rebuild-copy. - Offline evaluation and diagnostic harnesses under
scripts/: extraction
prompt and Light time-context ablations, an oracle-evidence experiment, a
class-3 gap probe and simulation, and a Deep-backlog replay. Plus
preference rescoring (vexic.longmemeval_rescore) and rubric-aware judging
for preference question types.
Changed
- Result models tolerate unknown fields.
MemoryResultand the result-only
payload models now derive fromMemoryResultModel(extra="ignore"), so a
client pinned to an older contract no longer raisesValidationErrorwhen a
newer server returns an additive field -- which addingmentioned_atwould
otherwise have done to every pre-0.1.8 client. Requests and their payload
models keepextra="forbid", because an unknown key in caller-written input
is a typo and should still fail loud. - Deep candidate subject keys normalize case and whitespace for dedup and
histogram grouping (ADR 0039), and extraction prefers named entities as the
subject. - The rebuild-copy secret scan covers every column of every table rather than
only text-declared ones, and refuses a source database missing a canonical
table instead of silently creating an empty replacement.
Fixed
- An echoed
observed=render label could persist into candidate text and
have its recording date copied intooccurred_atas event time. The label
strip now keys on whether the date is one the window actually recorded, and
a source-date backstop refuses any in-text date that is a cited message's
recording date, whatever wording surrounds it. occurred_atno longer survives when it contradicts, or invents precision
beyond, the single date the fact text states.mentioned_atis canonicalized on the promotion path and in Deep selection,
so a value written by the canonical-migration importer or a host cannot
become a durable temporal key that noas_oforevent_beforefilter
matches. Blank values are healable by the init backfill instead of sinking
the candidate permanently.- Candidates reduced to empty text by the marker strip are dropped and counted
in the run's drop telemetry rather than staged with an empty FTS body. - Diagnostic candidate reads no longer issue schema DDL, so a frozen run
database opened read-only is readable, and a run database predating
mentioned_atreports its real candidates instead of an empty set. - The extraction ablation harness opens its frozen corpus read-only, so a
WAL-mode evidence artifact is not rewritten on close. - Preference rescore tolerates legacy run-database schemas, and the recorder
hook fails fast rather than blocking when handed an interactive stdin.
v0.1.7
Recorder deadline, retry, and error-reporting reliability for the async Stop and SessionStart hooks. No public memory contract change; CONTRACT_VERSION stays 0.1.0.
Fixed
- Session-start prime reads fan out across parallel daemon workers under a single end-to-end deadline (default 20s), so a stalled hosted read is abandoned rather than waited into the SessionStart hook kill window and can no longer eat the whole injected block (#250).
- Recorder ingest bounds retries end to end: transport failures, 408, and 429 responses retry with a capped, jittered backoff and honor a bounded
Retry-After, and the per-attempt socket timeout is capped to the remaining budget. The default socket timeout composes with the ingest deadline to stay inside the Stop hook kill even when an un-preempted in-flight read overshoots the deadline (#252, #253). - MCP
tools/callerror path sanitizes pydanticValidationErrormessages through the client-safe builder instead of echoing raw input values (#251).
Changed
fetch_prime_contextreturns aPrimeFetchResult(context plus per-leg timing/outcome) instead of a barestr;recorder primewritesphase: "started"/"finished"records into a sibling-prime.jsonstatus file so overlapping Stop-hook ingests and prime cannot erase each other's records (#250).- Product glossary adds the dreaming and recorder terms; the hosted-mvp sweeper section notes the bounded prelude retry.
Full Changelog: v0.1.6...v0.1.7
v0.1.6
Session-start priming robustness plus recorder and hosted-layer reliability
fixes. No public memory contract change; CONTRACT_VERSION stays 0.1.0.
Fixed
- Session-start prime usage guidance survives truncation: a fixed framing
block leads the injected snapshot and footer space is reserved before
capping, so the instructions can no longer be the first thing truncated
away (#246). - Recorder transcript-cursor writes are monotonic, so overlapping async Stop
ingests can no longer regress the cursor and re-post already-ledgered
rows; equal-offset content corrections still write through so same-length
transcript rewrites self-heal (#248). - Hosted write-route preflight 400 responses sanitize pydantic
ValidationErrormessages through the same client-safe builder as the
HTTP adapter, instead of echoing raw input values (#249). - Dream-phase prelude retries retryable operational faults with a bounded
backoff (#243). - Recorder Stop hook fails open on transient hosted errors instead of
derailing the conversation with a blocking exit (#244). - Hosted 400 responses in the HTTP adapter sanitize pydantic
ValidationErrormessages (#245).
Changed
- Prime snapshot sections carry per-item caps (transcript hits and the
recap body) with an explicit truncation marker at both fetch and render
time, so one long item cannot starve the other sections; the full text
stays reachable through the recall tools (#246). - MCP
server_instructionsnow describe session-start priming: visible
snapshot facts need no re-search (explicitly subordinate to the
search-before-denying rule) and truncated snapshot items are flagged as
incomplete (#246).
Full Changelog: v0.1.5...v0.1.6
v0.1.5
Reliability patch plus evaluation tooling. No public memory contract change;
CONTRACT_VERSION stays 0.1.0.
Added
- LongMemEval weighted sampling (
--type-weight TYPE=N) and the
vexic.longmemeval_analysismiss-classification module for diagnosing
retrieval misses in eval runs (#237).
Fixed
- Transcript ingest strips harness-injected
<task-notification>blocks the
same way as system-reminder blocks, keeping subagent reports and tool
returns out of searchable transcript text (ADR 0034, #235). - Transcript recall uses any-token OR FTS semantics with bm25 ranking, so a
query only partially matching stored text still recalls it (ADR 0036, #236). - Writes to a tombstoned scope fail closed both before and after physical
purge (ADR 0022, #240). - Four hosted-layer alpha staging shortcuts are hardened in the in-process
hosted shell (#239).
Changed
- GitHub Actions workflows moved off deprecated Node 20 runtimes, are
SHA-pinned, and Dependabot now watches the actions ecosystem (#238, #241).
Full Changelog: v0.1.4...v0.1.5
v0.1.4
Reliability patch for the internal-alpha hosted stack. No public memory
contract change; CONTRACT_VERSION stays 0.1.0.
Fixed
- SessionStart priming no longer discards all memory context when a hosted
read times out mid-response: read-phase transport and decode failures are
normalized into the degradation path, so prime emits a partial context
instead of nothing (#231). - Canonical migration artifacts tolerate additive schema columns and the
import row loop is one atomic transaction whose rollback failures preserve
the original import error (#230); a raw libsql DSN string import target
fails closed on host-owned extension tables instead of skipping the
pre-import guard (#233). - Control-plane schema migrations are concurrency-safe (#226), and
control-plane retirement cuts live access (#227). - Dream-phase failures are durably recorded and gate the retry clock (#222),
dream sweep state is stamped with job-completion time (#225), withheld-stamp
dream chains back off briefly after failures (#224), and the summarize
watermark holds when SUMMARIZE never ran (#223). - Light extraction drop counts are durable telemetry, and all-dropped runs
report partial instead of success (#229). - Usage is captured under the pydantic-ai property form, and missing usage
fails loud instead of silently reporting zero (#228).
Full Changelog: v0.1.3...v0.1.4
v0.1.3
Reliability and hardening patch for the internal-alpha hosted stack. No public
memory contract change; CONTRACT_VERSION stays 0.1.0.
Added
- Remote libSQL queries are bounded by a wall-clock deadline (#213).
- Recorder keeps a local transcript cursor, so the Stop hook no longer rereads
the full transcript each turn (#208). - Per-tenant Turso token cache is bounded with LRU eviction (#207).
Changed
- Transient Turso connect faults are absorbed at the connection boundary (#219).
Fixed
- Light extraction drops miscited candidates instead of failing the whole
batch (#201), handles assistant-heavy task transcripts (#211), and filters
Claude Code harness envelopes out of ingested transcript (#212). - The dream in-flight lock is a durable control-plane lease; a cancelled dream
job holds its lease instead of freeing a live scope (#203). - Every reasoning agent gets output headroom rather than output-sized caps
(#199). - Operator CLI honors
VEXIC_CONTROL_PLANE_TARGET, sorevoke-keyrevokes on
production (#206). - Release paths from PR #214 hardened (#215).
Full Changelog: v0.1.2...v0.1.3
v0.1.2
Feature and hardening patch for the internal-alpha hosted stack. The public
memory contract gains one additive operation; CONTRACT_VERSION stays 0.1.0.
Added
load_active_context, a structured sibling offresh_contextthat returns
serialized transcript messages a host can replay as model message history
instead of rendered priming text.- LongMemEval evaluation harness rehomed into
vexic.longmemevalwith a CLI,
host-port judge wiring, and an--allow-liveprovider-call gate (COA-342). - Hosted control-plane catalog can route to Turso behind a flag, with a
migrate_control_planemigration path (COA-360).
Changed
- Dream sweeper storage routes through the customer-target resolver, and raised
dream-phase output token caps with surfaced sweeper logs (COA-352, COA-355). - Hosted ingest storage
ValueErrors are classified as 5xx and surface only a
stable error code (COA-356).
Fixed
- Dream sweeper state writes lost to reaped Turso Hrana streams are now retried
(#194).
v0.1.1
What's Changed
- chore(ci): add gitleaks full-history secret scan by @PyroDonkey in #158
- Release: gitleaks secret-scan CI gate by @PyroDonkey in #159
- docs(agents): document live_retrieval_baseline harness owner by @PyroDonkey in #161
- fix(hosted): harden control-plane against mass deletes (COA-320) by @PyroDonkey in #160
- docs: harden repo docs for public release by @PyroDonkey in #162
- Release: docs public-release hardening + COA-320 control-plane by @PyroDonkey in #163
- docs: promote AGENTS.md to repo root as single source of truth by @PyroDonkey in #164
- chore(release): bump version to 0.1.1 by @PyroDonkey in #165
- release: 0.1.1 by @PyroDonkey in #166
Full Changelog: v0.1.0...v0.1.1
v0.1.0
Initial public release of the Vexic memory core.
Added
- Local-first, provenance-first memory core for long-running AI agents.
- Public contract models (
MemoryScope,MemoryCapability,MemoryService)
with a versioned contract surface. LocalMemoryService, a SQLite reference implementation withsqlite-vec
vector search and hybrid retrieval.- Three-tier memory model: append-only cleaned transcript, staged memory
candidates, and durable long-term facts, each carrying source provenance. - Read-only local MCP server exposing
recall_conversation_historyand
recall_user_memory. - Conformance and reliability test suite.