Skip to content

v0.22.3 - Correctness Hardening

Choose a tag to compare

@zzhang82 zzhang82 released this 21 Jul 05:13

v0.22.3 - Correctness Hardening

Agent Memory Bridge 0.22.3 closes verified correctness gaps in the existing
local coordination and promotion paths without adding MCP tools.

0.22.3 = insertion-ordered Signal polling, owner-matched active-claim ack, metadata-preserving promotion, and non-blocking operational output.

What Changed

  • Signal polling through recall(..., since=...) now returns later insertions
    in ascending order, so a page limit cannot strand older unseen Signals.
  • Polling rejects missing, deleted, and cross-namespace anchors instead of
    silently replaying from the beginning. Text and memory recall no longer emit
    a reusable polling cursor.
  • An active claimed Signal can be acknowledged only by its current lease owner.
    Pending, unclaimed Signals retain the existing ownerless-ack behavior.
  • Relation, promotion, and lineage readers now share one structured-record
    scanner with normalized keys and deterministic duplicate-field handling.
  • Promotion keeps relation, validity, content-lineage, and database-lineage
    metadata. FTS is refreshed, and cached embeddings remain detectably stale
    until the normal rebuild path replaces them.
  • Operational and telemetry JSONL write failures are sanitized and reported to
    stderr without changing the result of an already committed database action.
  • The regression suite includes an eight-process exact-ID claim test and
    focused coverage for polling, ack ownership, parser consistency, promotion,
    and post-commit output failures.

Why It Matters

The affected paths could previously skip Signals across paginated polling,
allow a non-owner to close claimed work, or discard governance metadata during
promotion. These are correctness failures in the existing contract, so this
patch fixes them before the next reliability release adds more maintenance and
service hardening.

Validation

  • pytest: 405 passed
  • 10,000-Signal local acceptance with limit=100: exact insertion order,
    10,000 unique IDs, 0 missing, and 0 unexpected across 100 pages
  • exact-ID claim contention: eight independent processes, one winner
  • release, public-surface, and onboarding contracts: passed locally
  • public MCP surface: unchanged at 10 tools
  • GitHub release gate: all nine matrix jobs must be green before tagging

Boundaries

Polling is an insertion-only local SQLite/WAL contract. It is not exactly-once
delivery, a distributed queue, a scheduler, or a distributed lock. Claim owner
labels are declared client identities rather than authenticated principals, and
namespaces remain organizational labels rather than access-control boundaries.

This patch does not add Signal idempotency keys, mandatory governed writes,
formal schema-version migrations, service-lane isolation, a vector index, or
new MCP tools. Those concerns remain separate from the verified correctness
fixes shipped here.