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
-`scope_token` resolves from execution context `memory_scope_tokens`; `context_id` resolves from `memory_context_scopes`.
147
+
- Responses include `resolved_scope` and `scope_source` when available.
148
+
- Required scope by operation:
149
+
-`query`: all four fields must resolve.
150
+
-`ingest`: all four fields must resolve (including `compartment`).
151
+
-`graph_upsert` with `graph.kind="place"`: all four fields must resolve.
152
+
-`validate|supersede|archive|maintain|graph_delete|graph_upsert(kind="link")`: scope is optional.
141
153
- Temporal query semantics:
142
154
-`operation="query"` supports either `query.as_of` OR interval `query.from/query.to` (mutually exclusive).
143
155
-`query.mode="graph"` supports `query.as_of` only; `query.from/query.to` are rejected.
144
156
-`operation="ingest"` with `record.format="raw"` supports `record.valid_from` and `record.valid_to` with ordering validation (`valid_from <= valid_to`).
145
157
- Strict validation: unknown/extra fields are rejected.
158
+
- Direct vs derived boundaries:
159
+
-`operation="ingest"` is direct-only (`record.memory_tier` must be `direct`).
160
+
- Category governance for ingest is explicit:
161
+
- Unknown `record.categories` fail deterministically with `MEM_UNKNOWN_CATEGORY` when `record.allow_create_categories=false` (default behavior).
162
+
- Setting `record.allow_create_categories=true` opts into category creation and allows ingest to proceed when categories are otherwise valid.
163
+
- Derived/community artifacts are produced by maintenance flows (for example `maintenance.mode="community_refresh"`).
164
+
-`query.mode="communities"` uses the dedicated communities strategy.
146
165
- Lifecycle semantics:
147
166
- Archived records are excluded by default query behavior.
-`operation="archive"` maps to forget semantics; repeating archive on already archived records is safe/idempotent.
150
169
- Graph semantics:
151
170
-`operation="graph_upsert"` with `graph.kind="link"` is idempotent.
152
-
-`operation="graph_delete"` with `graph.kind="place"` includes cascaded `deleted_relation_count` in the response.
171
+
-`operation="graph_delete"` returns compact delete counters (`deleted_places` for `kind="place"`, `deleted_links` for `kind="link"`); optional debug output adds diagnostics metadata.
172
+
173
+
Validation note: this ingest category behavior (`MEM_UNKNOWN_CATEGORY` with create disabled, successful ingest with `allow_create_categories=true`) was live-validated on 2026-04-21 via production-like direct MCP `memory` calls.
@@ -233,36 +376,43 @@ Memory is an optional persistent storage feature that lets agents and workflows
233
376
### What memory provides
234
377
235
378
-**`memory` MCP tool** — direct call interface for LLM agents to store and query information without writing workflow YAML.
379
+
-**`project_onboard` / `project_sync` MCP tools** — Current memory contract helpers for checkpointed onboarding/sync sequences.
236
380
-**`Memory` workflow block** — use inside YAML workflows to automate memory operations as part of larger pipelines.
237
-
-**Three-level memory palace scoping** (`wing` → `room` → `hall`) — a strict containment hierarchy: `wing` is a service/project, `room` is a component/module inside that wing, and `hall` is a topic lane inside that room. All three levels are optional and independently filterable. Providing only `wing` returns everything in that wing; adding `room`or `hall` narrows the scope further. `hall` is a sub-partition of a room, not a connection between rooms — cross-room recall is preserved separately by the global companion lane in `auto` queries.
381
+
-**Memory topology scoping** (`palace` → `wing` → `room` → `compartment`) — current memory scope keys are strict and legacy keys (for example `hall`) are rejected. Scope can be supplied directly and/or resolved from context (`scope_token`, `context_id`) using deterministic precedence.
238
382
-**Temporal tracking** — records carry `valid_from` / `valid_to` timestamps supporting point-in-time and interval queries.
239
383
-**Knowledge graph** — link memories to places, entities, or concepts and query the resulting graph.
240
384
-**Lifecycle management** — archive or supersede records without deletion; archived records are excluded from default queries.
241
385
242
386
### Retrieval strategies
243
387
244
-
Two strategies are available via the `memory` tool. The correct one is selected automatically based on the call:
388
+
Current memory behavior exposes query modes that map to retrieval strategies internally:
|`auto`| Default for most queries (any `radius ≥ 1` or unscoped) | Runs a scoped lane (filtered by `wing`/`room`/`hall`) **plus** a global companion lane of up to 20 items; results are fused via RRF. Cross-scope recall is preserved. |
249
-
|`palace`| When `radius == 0`**and** at least one scope field is set | Strict scoped retrieval only — no global companion lane. Requires at least `wing` or `room` to be set; returns an error if both are absent. Use when you want hard isolation. |
392
+
|`query.mode="search"` + `radius=0`|`palace`| Strict scoped retrieval lane (no companion lane). |
393
+
|`query.mode="search"` + `radius>=1`|`auto`| Scoped lane + optional S2 companion lane (`s2_enabled=true` by default). |
394
+
|`query.mode="hybrid"`|`auto`| Same retrieval family as `auto` with fused ranking. |
0 commit comments