docs(api): lowercase v3/v4/v5 across migration and reference pages

This commit is contained in:
Mahesh Sanikommu 2026-09-28 19:29:48 -07:00
parent ec8e3aedb4
commit e8561ff714
20 changed files with 65 additions and 62 deletions

View file

@ -1,5 +1,5 @@
--- ---
title: "Migrate content management to V5" title: "Migrate content management to v5"
description: "Upgrade document retrieval, resource lists, and document or memory deletion" description: "Upgrade document retrieval, resource lists, and document or memory deletion"
sidebarTitle: "Content management" sidebarTitle: "Content management"
--- ---

View file

@ -1,5 +1,5 @@
--- ---
title: "Migrate document and file updates to V5" title: "Migrate document and file updates to v5"
description: "Choose append, replacement, or metadata-only updates deliberately" description: "Choose append, replacement, or metadata-only updates deliberately"
sidebarTitle: "Document updates" sidebarTitle: "Document updates"
--- ---

View file

@ -1,5 +1,5 @@
--- ---
title: "Migrate document ingestion to V5" title: "Migrate document ingestion to v5"
description: "Upgrade single, batch, and file ingestion without changing append behavior" description: "Upgrade single, batch, and file ingestion without changing append behavior"
sidebarTitle: "Document ingestion" sidebarTitle: "Document ingestion"
--- ---

View file

@ -1,6 +1,6 @@
--- ---
title: "Migrate metadata filters to V5" title: "Migrate metadata filters to v5"
description: "Convert legacy Query filters into strict, type-safe V5 filter expressions" description: "Convert legacy Query filters into strict, type-safe v5 filter expressions"
sidebarTitle: "Typed filters" sidebarTitle: "Typed filters"
--- ---

View file

@ -1,5 +1,5 @@
--- ---
title: "Migrate memory forgetting to V5" title: "Migrate memory forgetting to v5"
description: "Replace legacy exact and semantic forgetting with one response contract" description: "Replace legacy exact and semantic forgetting with one response contract"
sidebarTitle: "Memory forgetting" sidebarTitle: "Memory forgetting"
--- ---

View file

@ -1,5 +1,5 @@
--- ---
title: "Migrate organization settings to V5" title: "Migrate organization settings to v5"
description: "Reduce organization settings to shared context and namespace count" description: "Reduce organization settings to shared context and namespace count"
sidebarTitle: "Organization settings" sidebarTitle: "Organization settings"
--- ---

View file

@ -1,5 +1,5 @@
--- ---
title: "Migrate profiles and buckets to V5" title: "Migrate profiles and buckets to v5"
description: "Separate profile retrieval from search and manage namespace-owned buckets" description: "Separate profile retrieval from search and manage namespace-owned buckets"
sidebarTitle: "Profiles and buckets" sidebarTitle: "Profiles and buckets"
--- ---

View file

@ -1,5 +1,5 @@
--- ---
title: "Migrate search to V5" title: "Migrate search to v5"
description: "Upgrade search modes, filters, attachments, defaults, and response readers" description: "Upgrade search modes, filters, attachments, defaults, and response readers"
sidebarTitle: "Search" sidebarTitle: "Search"
--- ---

View file

@ -1,5 +1,5 @@
--- ---
title: "Verify and roll out a V5 migration" title: "Verify and roll out a v5 migration"
description: "Prove behavioral parity, detect intentional differences, and cut over safely" description: "Prove behavioral parity, detect intentional differences, and cut over safely"
sidebarTitle: "Verification and rollout" sidebarTitle: "Verification and rollout"
--- ---

View file

@ -1,10 +1,11 @@
--- ---
title: "Migrate Supermemory V3/V4 to V5" title: "Migrate Supermemory v3/v4 to v5"
description: "Upgrade legacy API calls to the namespace-scoped V5 API" description: "Upgrade legacy API calls to the namespace-scoped v5 API"
sidebarTitle: "Legacy API to V5" sidebarTitle: "Legacy API to v5"
icon: "arrow-up-right" icon: "arrow-up-right"
--- ---
import AgentPrompt from "/snippets/api-v5-agent-prompt.mdx";
import Overview from "/snippets/api-v5-overview.mdx"; import Overview from "/snippets/api-v5-overview.mdx";
import DocumentIngestion from "/snippets/api-v5-document-ingestion.mdx"; import DocumentIngestion from "/snippets/api-v5-document-ingestion.mdx";
import DocumentUpdates from "/snippets/api-v5-document-updates.mdx"; import DocumentUpdates from "/snippets/api-v5-document-updates.mdx";
@ -18,6 +19,8 @@ import Filters from "/snippets/api-v5-filters.mdx";
import Rollout from "/snippets/api-v5-rollout.mdx"; import Rollout from "/snippets/api-v5-rollout.mdx";
import Completion from "/snippets/api-v5-completion.mdx"; import Completion from "/snippets/api-v5-completion.mdx";
<AgentPrompt />
<Overview /> <Overview />
## Document ingestion ## Document ingestion

View file

@ -1,4 +1,4 @@
V5 retrieves, lists, and removes content within one explicit namespace. v5 retrieves, lists, and removes content within one explicit namespace.
### Retrieve a document and its derived context ### Retrieve a document and its derived context
@ -8,7 +8,7 @@ GET /v3/documents/{id}
GET /v3/documents/{id}/chunks GET /v3/documents/{id}/chunks
``` ```
```bash V5 ```bash v5
GET /ns/{namespace}/document/{id}?attach=chunks&attach=memories GET /ns/{namespace}/document/{id}?attach=chunks&attach=memories
``` ```
</CodeGroup> </CodeGroup>
@ -27,7 +27,7 @@ POST /v3/documents/list
POST /v4/memories/list POST /v4/memories/list
``` ```
```bash V5 ```bash v5
POST /ns/{namespace}/list/{type}?page=1&limit=100&sort=createdAt&order=desc POST /ns/{namespace}/list/{type}?page=1&limit=100&sort=createdAt&order=desc
{} {}
``` ```
@ -45,17 +45,17 @@ DELETE /v3/documents/{id}
DELETE /v3/documents/bulk DELETE /v3/documents/bulk
``` ```
```bash V5 ```bash v5
DELETE /ns/{namespace}/document DELETE /ns/{namespace}/document
{"ids":["doc_1","external_id_2"]} {"ids":["doc_1","external_id_2"]}
``` ```
</CodeGroup> </CodeGroup>
The V5 array accepts 1–100 Supermemory or caller-defined IDs. Inspect both `deletedCount` and per-ID `errors`; HTTP success can include partial failures. The v5 array accepts 1–100 Supermemory or caller-defined IDs. Inspect both `deletedCount` and per-ID `errors`; HTTP success can include partial failures.
### Forget memories ### Forget memories
| Legacy intent | V5 operation | | Legacy intent | v5 operation |
| --- | --- | | --- | --- |
| Forget exact IDs | `DELETE /ns/{namespace}/memories` with `{ "ids": [...] }` | | Forget exact IDs | `DELETE /ns/{namespace}/memories` with `{ "ids": [...] }` |
| Find memories by meaning | `DELETE /ns/{namespace}/memories/semantic` with `{ "query": "...", "dryRun": true }` | | Find memories by meaning | `DELETE /ns/{namespace}/memories/semantic` with `{ "query": "...", "dryRun": true }` |

View file

@ -1,8 +1,8 @@
V5 moves document scope into the URL and keeps repeated caller IDs attached to one evolving document. v5 moves document scope into the URL and keeps repeated caller IDs attached to one evolving document.
### Rename common fields ### Rename common fields
| Legacy | V5 | Location | | Legacy | v5 | Location |
| --- | --- | --- | | --- | --- | --- |
| `containerTag` | `{namespace}` | Path | | `containerTag` | `{namespace}` | Path |
| `customId` | `id` | JSON body | | `customId` | `id` | JSON body |
@ -19,13 +19,13 @@ POST /v3/documents
{"content":"new turn","customId":"conv_1","containerTag":"user_1"} {"content":"new turn","customId":"conv_1","containerTag":"user_1"}
``` ```
```bash V5 ```bash v5
POST /ns/user_1/document?dreaming=dynamic POST /ns/user_1/document?dreaming=dynamic
{"content":"new turn","id":"conv_1"} {"content":"new turn","id":"conv_1"}
``` ```
</CodeGroup> </CodeGroup>
The response remains an acceptance result with `id` and `status`. Repeating the V5 request with `id: "conv_1"` adds or diffs the new content into that document; it does not silently replace the canonical source. The response remains an acceptance result with `id` and `status`. Repeating the v5 request with `id: "conv_1"` adds or diffs the new content into that document; it does not silently replace the canonical source.
### Batch ingestion ### Batch ingestion
@ -34,12 +34,12 @@ The response remains an acceptance result with `id` and `status`. Repeating the
{"documents":["first","second"],"containerTag":"user_1"} {"documents":["first","second"],"containerTag":"user_1"}
``` ```
```json V5 ```json v5
{"documents":[{"content":"first","id":"doc_1"},{"content":"second","id":"doc_2"}]} {"documents":[{"content":"first","id":"doc_1"},{"content":"second","id":"doc_2"}]}
``` ```
</CodeGroup> </CodeGroup>
Send the V5 body to `POST /ns/user_1/document/batch`. The array accepts 1–600 document objects. Namespace, `taskType`, and processing mode apply to the request; document content, ID, context, metadata, grouping, and date stay per item. Send the v5 body to `POST /ns/user_1/document/batch`. The array accepts 1–600 document objects. Namespace, `taskType`, and processing mode apply to the request; document content, ID, context, metadata, grouping, and date stay per item.
Batch results preserve input order. Inspect `success`, `failed`, and every item in `results`; a batch can contain successful and failed items together. Batch results preserve input order. Inspect `success`, `failed`, and every item in `results`; a batch can contain successful and failed items together.

View file

@ -1,4 +1,4 @@
V5 makes the difference between adding new information and replacing the canonical source explicit. v5 makes the difference between adding new information and replacing the canonical source explicit.
### Choose the correct write ### Choose the correct write
@ -18,13 +18,13 @@ PATCH /v3/documents/doc_1
{"content":"corrected source","metadata":{"revision":2}} {"content":"corrected source","metadata":{"revision":2}}
``` ```
```bash V5 ```bash v5
PATCH /ns/user_1/document/doc_1?dreaming=dynamic PATCH /ns/user_1/document/doc_1?dreaming=dynamic
{"content":"corrected source","metadata":{"revision":2}} {"content":"corrected source","metadata":{"revision":2}}
``` ```
</CodeGroup> </CodeGroup>
The V5 body accepts any non-empty subset of `content`, `supportingContext`, `metadata`, `group`, or `date`. Supplying `content` makes it the new canonical source; facts supported only by the previous source can disappear after reprocessing. The v5 body accepts any non-empty subset of `content`, `supportingContext`, `metadata`, `group`, or `date`. Supplying `content` makes it the new canonical source; facts supported only by the previous source can disappear after reprocessing.
### Replace a file-backed document ### Replace a file-backed document
@ -50,7 +50,7 @@ metadata={"reviewed":true}
PATCH changes only supplied fields. Include `file` to replace the source while retaining omitted supporting fields, or omit `file` for metadata-, group-, context-, or date-only changes. `metadata` and `group` are JSON-encoded strings; `supportingContext` and `date` are plain strings. PATCH changes only supplied fields. Include `file` to replace the source while retaining omitted supporting fields, or omit `file` for metadata-, group-, context-, or date-only changes. `metadata` and `group` are JSON-encoded strings; `supportingContext` and `date` are plain strings.
<Warning> <Warning>
There is no public V5 `PUT /ns/{namespace}/document/file/{id}` operation. Use POST for a complete replacement and PATCH for a partial update. There is no public v5 `PUT /ns/{namespace}/document/file/{id}` operation. Use POST for a complete replacement and PATCH for a partial update.
</Warning> </Warning>
### IDs and scope ### IDs and scope

View file

@ -1,4 +1,4 @@
V5 uses one optional singular `filter` field for search, profiles, and list operations. v5 uses one optional singular `filter` field for search, profiles, and list operations.
### Shape ### Shape
@ -16,7 +16,7 @@ Fields may contain letters, numbers, `_`, `.`, and `-`. Expressions allow up to
### Operator mapping ### Operator mapping
| Legacy condition | V5 predicate | | Legacy condition | v5 predicate |
| --- | --- | | --- | --- |
| `{ key, value }` | `{ field: key, operator: "eq", value }` | | `{ key, value }` | `{ field: key, operator: "eq", value }` |
| `negate: true` equality | `operator: "neq"` | | `negate: true` equality | `operator: "neq"` |
@ -41,7 +41,7 @@ Fields may contain letters, numbers, `_`, `.`, and `-`. Expressions allow up to
} }
``` ```
```json V5 ```json v5
{ {
"operator": "and", "operator": "and",
"operands": [ "operands": [

View file

@ -1,8 +1,8 @@
V5 scopes forgetting to one namespace and returns the same result envelope for exact and semantic requests. v5 scopes forgetting to one namespace and returns the same result envelope for exact and semantic requests.
### Choose exact or semantic forgetting ### Choose exact or semantic forgetting
| Intent | V5 operation | | Intent | v5 operation |
| --- | --- | | --- | --- |
| Forget reviewed memory IDs | `DELETE /ns/{namespace}/memories` | | Forget reviewed memory IDs | `DELETE /ns/{namespace}/memories` |
| Find memories by meaning | `DELETE /ns/{namespace}/memories/semantic` | | Find memories by meaning | `DELETE /ns/{namespace}/memories/semantic` |
@ -57,7 +57,7 @@ Use this workflow when a human or policy must approve the exact set. Re-running
### Removed memory-write routes ### Removed memory-write routes
Direct V4 memory creation and version updates have no V5 replacement. Ingest source material through document routes and update the canonical document when facts change. Direct v4 memory creation and version updates have no v5 replacement. Ingest source material through document routes and update the canonical document when facts change.
### Verification ### Verification

View file

@ -1,8 +1,8 @@
V5 renames the public isolation boundary from container tag to namespace. Existing values remain valid identifiers; no stored data rename is required. v5 renames the public isolation boundary from container tag to namespace. Existing values remain valid identifiers; no stored data rename is required.
### Endpoint mapping ### Endpoint mapping
| Legacy | V5 | | Legacy | v5 |
| --- | --- | | --- | --- |
| `GET /v3/container-tags/list` | `GET /namespaces` | | `GET /v3/container-tags/list` | `GET /namespaces` |
| `GET /v3/container-tags/{tag}` | `GET /ns/{namespace}` | | `GET /v3/container-tags/{tag}` | `GET /ns/{namespace}` |
@ -24,7 +24,7 @@ PATCH /v3/container-tags/project_alpha
{"entityContext":"Research project for distributed systems"} {"entityContext":"Research project for distributed systems"}
``` ```
```bash V5 ```bash v5
PATCH /ns/project_alpha PATCH /ns/project_alpha
{"supportingContext":"Research project for distributed systems"} {"supportingContext":"Research project for distributed systems"}
``` ```
@ -52,7 +52,7 @@ DELETE /ns/project_alpha
This returns `202` with `status: "queued"` and `operationId`. The destination must differ from the source. Do not treat acceptance as completed migration. This returns `202` with `status: "queued"` and `operationId`. The destination must differ from the source. Do not treat acceptance as completed migration.
Legacy merge can accept multiple sources; V5 moves one source per request. Run multi-source migrations sequentially and record each operation independently. Legacy merge can accept multiple sources; v5 moves one source per request. Run multi-source migrations sequentially and record each operation independently.
### Verification ### Verification

View file

@ -1,8 +1,8 @@
V5 exposes only the organization-wide context needed to guide memory formation. Internal controls and profile bucket mutation are no longer part of this settings resource. v5 exposes only the organization-wide context needed to guide memory formation. Internal controls and profile bucket mutation are no longer part of this settings resource.
### Endpoint mapping ### Endpoint mapping
| Legacy | V5 | | Legacy | v5 |
| --- | --- | | --- | --- |
| `GET /v3/settings` | `GET /organization` | | `GET /v3/settings` | `GET /organization` |
| `PATCH /v3/settings` | `PATCH /organization` | | `PATCH /v3/settings` | `PATCH /organization` |
@ -31,7 +31,7 @@ PATCH /v3/settings
{"filterPrompt":"Acme builds security tools for enterprises"} {"filterPrompt":"Acme builds security tools for enterprises"}
``` ```
```bash V5 ```bash v5
PATCH /organization PATCH /organization
{"organizationalContext":"Acme builds security tools for enterprises"} {"organizationalContext":"Acme builds security tools for enterprises"}
``` ```
@ -44,13 +44,13 @@ Organization updates require an organization administrator. Do not silently fall
### Removed public operations ### Removed public operations
- Organization profile-bucket mutation is not exposed through organization settings. - Organization profile-bucket mutation is not exposed through organization settings.
- Bucket suggestion is not part of V5. - Bucket suggestion is not part of v5.
- Organization data reset is not part of V5. - Organization data reset is not part of v5.
- Namespace-owned profile buckets are managed through `/ns/{namespace}/profile/buckets`. - Namespace-owned profile buckets are managed through `/ns/{namespace}/profile/buckets`.
### Verification ### Verification
- Compare the V5 context with the legacy `filterPrompt` before cutover. - Compare the v5 context with the legacy `filterPrompt` before cutover.
- Set, replace, and clear organizational context. - Set, replace, and clear organizational context.
- Confirm `namespaceCount` agrees with `GET /namespaces` for the same credentials. - Confirm `namespaceCount` agrees with `GET /namespaces` for the same credentials.
- Verify non-admin callers receive `403` on PATCH. - Verify non-admin callers receive `403` on PATCH.

View file

@ -1,4 +1,4 @@
V5 returns a maintained profile directly and gives profile bucket definitions their own namespace-scoped resource. v5 returns a maintained profile directly and gives profile bucket definitions their own namespace-scoped resource.
### Remove search behavior from profile calls ### Remove search behavior from profile calls
@ -8,15 +8,15 @@ POST /v4/profile
{"containerTag":"user_1","q":"work preferences","threshold":0.6,"include":{}} {"containerTag":"user_1","q":"work preferences","threshold":0.6,"include":{}}
``` ```
```bash V5 ```bash v5
POST /ns/user_1/profile POST /ns/user_1/profile
{"filter":{"field":"region","operator":"eq","value":"us-west"},"buckets":["work"]} {"filter":{"field":"region","operator":"eq","value":"us-west"},"buckets":["work"]}
``` ```
</CodeGroup> </CodeGroup>
Remove legacy `q`, `threshold`, and `include`. If the caller needs query-ranked results, issue a separate V5 search request. Move `containerTag` to the path and rename `filters` to singular `filter`. Remove legacy `q`, `threshold`, and `include`. If the caller needs query-ranked results, issue a separate v5 search request. Move `containerTag` to the path and rename `filters` to singular `filter`.
### Read the V5 profile shape ### Read the v5 profile shape
```json ```json
{ {
@ -38,7 +38,7 @@ POST /v4/profile/buckets
{"containerTag":"user_1"} {"containerTag":"user_1"}
``` ```
```bash V5 ```bash v5
GET /ns/user_1/profile/buckets GET /ns/user_1/profile/buckets
``` ```
</CodeGroup> </CodeGroup>

View file

@ -4,7 +4,7 @@ Treat migration as a behavioral comparison, not a raw response snapshot update.
Use an isolated namespace with stable IDs and fixed source content. Include plaintext, URL, file, batch, metadata, grouping, profile facts, related memories, forgotten memories, and empty-result cases. Use an isolated namespace with stable IDs and fixed source content. Include plaintext, URL, file, batch, metadata, grouping, profile facts, related memories, forgotten memories, and empty-result cases.
Record each legacy request, V5 request, expected semantic result, and intentional difference. Never compare generated IDs, signed URLs, timing, or JSON object order unless the contract guarantees them. Record each legacy request, v5 request, expected semantic result, and intentional difference. Never compare generated IDs, signed URLs, timing, or JSON object order unless the contract guarantees them.
### Compare writes ### Compare writes
@ -17,7 +17,7 @@ Record each legacy request, V5 request, expected semantic result, and intentiona
- Document attachments are absent when omitted and empty arrays when requested without results. - Document attachments are absent when omitted and empty arrays when requested without results.
- Unified list responses populate only the selected resource array. - Unified list responses populate only the selected resource array.
- Search parity uses explicit V4-equivalent mode and threshold before testing V5 defaults. - Search parity uses explicit v4-equivalent mode and threshold before testing v5 defaults.
- Profiles always contain static, dynamic, and bucket sections. - Profiles always contain static, dynamic, and bucket sections.
### Exercise boundaries ### Exercise boundaries
@ -36,7 +36,7 @@ Record each legacy request, V5 request, expected semantic result, and intentiona
same request intent same request intent
| |
+-- same semantic result ------> parity +-- same semantic result ------> parity
+-- documented V5 difference --> update assertion +-- documented v5 difference --> update assertion
+-- undocumented difference ----> block cutover +-- undocumented difference ----> block cutover
``` ```
@ -44,7 +44,7 @@ Do not normalize away an undocumented difference. Capture the request pair, name
### Cut over by domain ### Cut over by domain
1. Ship V5 request construction behind a per-domain flag. 1. Ship v5 request construction behind a per-domain flag.
2. Dual-read or shadow-call where side effects allow it. 2. Dual-read or shadow-call where side effects allow it.
3. Switch ingestion, content management, search, profiles, then settings independently. 3. Switch ingestion, content management, search, profiles, then settings independently.
4. Monitor validation failures, authorization failures, latency, empty-result rate, and processing failures. 4. Monitor validation failures, authorization failures, latency, empty-result rate, and processing failures.

View file

@ -1,8 +1,8 @@
V5 searches one namespace, defaults to hybrid recall, and moves ranking controls into a typed request body. v5 searches one namespace, defaults to hybrid recall, and moves ranking controls into a typed request body.
### Request mapping ### Request mapping
| Legacy | V5 | | Legacy | v5 |
| --- | --- | | --- | --- |
| `containerTag` | `/ns/{namespace}` | | `containerTag` | `/ns/{namespace}` |
| body `q` | body `query` | | body `q` | body `query` |
@ -21,7 +21,7 @@ POST /v4/search
{"q":"What did the user decide?","containerTag":"user_1","limit":10,"searchMode":"memories"} {"q":"What did the user decide?","containerTag":"user_1","limit":10,"searchMode":"memories"}
``` ```
```bash V5 ```bash v5
POST /ns/user_1/search?limit=10&searchMode=memories POST /ns/user_1/search?limit=10&searchMode=memories
{"query":"What did the user decide?","threshold":0.6,"rewriteQuery":false} {"query":"What did the user decide?","threshold":0.6,"rewriteQuery":false}
``` ```
@ -29,14 +29,14 @@ POST /ns/user_1/search?limit=10&searchMode=memories
### Changed defaults ### Changed defaults
| Setting | V4 | V5 | | Setting | v4 | v5 |
| --- | --- | --- | | --- | --- | --- |
| Search mode | `memories` | `hybrid` | | Search mode | `memories` | `hybrid` |
| Similarity threshold | `0.6` | `0.3` | | Similarity threshold | `0.6` | `0.3` |
| Reranking | Disabled | `rerank: "none"` | | Reranking | Disabled | `rerank: "none"` |
| Query rewriting | Disabled | `false` | | Query rewriting | Disabled | `false` |
Set mode and threshold explicitly while comparing versions. After parity testing, remove them only if you want the broader V5 hybrid defaults. Set mode and threshold explicitly while comparing versions. After parity testing, remove them only if you want the broader v5 hybrid defaults.
### Search modes ### Search modes
@ -46,7 +46,7 @@ Set mode and threshold explicitly while comparing versions. After parity testing
| `chunks` | Source chunks only | | `chunks` | Source chunks only |
| `hybrid` | Both result types in one ranked list | | `hybrid` | Both result types in one ranked list |
Legacy `include.chunks` has no V5 equivalent. Choose `chunks` or `hybrid` instead. Legacy `include.chunks` has no v5 equivalent. Choose `chunks` or `hybrid` instead.
### Attachments and ranking ### Attachments and ranking
@ -57,7 +57,7 @@ Legacy `include.chunks` has no V5 equivalent. Choose `chunks` or `hybrid` instea
### Response mapping ### Response mapping
| Legacy reader | V5 reader | | Legacy reader | v5 reader |
| --- | --- | | --- | --- |
| Result array | `results` | | Result array | `results` |
| Timing | `searchTime` | | Timing | `searchTime` |
@ -69,7 +69,7 @@ Each primary result contains either `memory`, `chunk`, or both only if the contr
### Verification ### Verification
- Compare IDs using explicit V4-equivalent defaults, then test V5 hybrid behavior separately. - Compare IDs using explicit v4-equivalent defaults, then test v5 hybrid behavior separately.
- Cover all three modes, thresholds at `0` and `1`, each rerank option, and query rewriting. - Cover all three modes, thresholds at `0` and `1`, each rerank option, and query rewriting.
- Cover every attachment alone and in combination, including empty attachments. - Cover every attachment alone and in combination, including empty attachments.
- Verify filters, namespace isolation, result limits, and invalid body/query placement. - Verify filters, namespace isolation, result limits, and invalid body/query placement.