You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#1709 removed the projection write amplification reported in #1321 by updating active-head/search projection rows incrementally instead of rewriting every projection row on each append.
That PR intentionally did not define the remaining long-lived Memory capacity contract. #1321 was closed by the merge, but several parts of the original expected behavior still need a separate design and implementation track.
Pagination for list_memory_entries is already tracked separately in #1656. This issue should coordinate with that work but should not duplicate it.
Remaining problem
A long-lived Memory can still grow without an explicit, observable capacity boundary:
each Artifact Revision still stores a complete manifest directory;
inactive entries remain in the manifest as tombstones;
revision/history growth has no retention or compaction contract;
there is no entry-count or manifest-byte budget;
there is no defined behavior for routing/splitting when a Memory reaches a practical limit;
scale regression coverage is still focused on projection writes, not the full capacity envelope.
Scope
Define and implement the remaining Memory capacity contract after #1709.
At minimum, cover:
Current-manifest entry-count budget.
Current-manifest byte budget.
Stable over-limit behavior: explicit error, automatic routing to another Memory, or split.
Split/routing semantics, including artifact identity, citation behavior, and search across split Memories.
Inactive/tombstone compaction semantics.
Revision/history retention or bounding semantics.
Interaction with MemoryIndex.delete() / upsert() and projection rebuilds.
SQLite and OceanBase behavior documented separately.
Context
#1709 removed the projection write amplification reported in #1321 by updating active-head/search projection rows incrementally instead of rewriting every projection row on each append.
That PR intentionally did not define the remaining long-lived Memory capacity contract. #1321 was closed by the merge, but several parts of the original expected behavior still need a separate design and implementation track.
Pagination for
list_memory_entriesis already tracked separately in #1656. This issue should coordinate with that work but should not duplicate it.Remaining problem
A long-lived Memory can still grow without an explicit, observable capacity boundary:
Scope
Define and implement the remaining Memory capacity contract after #1709.
At minimum, cover:
MemoryIndex.delete()/upsert()and projection rebuilds.Acceptance criteria
Related work