Add one level of submemories (bags) #295
Description
See #290, section 3.
Work
- Optional parent memory in the same project and scope. A memory with active children is a bag; there is no bag flag.
- Rules enforced in the service: exactly one level, no critical children, no cross-project or cross-scope parents, no personal memory under a project bag.
memory_storesets and clears the parent;item_geton a bag returns visible children with title and summary using the continuation contract from #219.item_searchfinds children directly and returnsparent.- Archiving a bag moves its children to the top level.
- Hygiene score: stale bag (a child changed after the last bag revision that changed its summary, weighted by child weight) and lopsided bag (one child or more than the maximum).
- Web: set parent in the editor, show children on the bag's detail page and the bag on each child.
Acceptance
- Counts, titles and continuation metadata include only children the reader may see; a public bag with private children reveals nothing about them.
- Tests for every rule above, for archive and for concurrent parent changes.
- A save that leaves the bag summary unchanged does not clear a stale-bag finding.