cortexdbai 0.11.2__tar.gz → 0.13.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. cortexdbai-0.13.0/COVERAGE.md +327 -0
  2. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/LICENSE +202 -202
  3. cortexdbai-0.13.0/PKG-INFO +1061 -0
  4. cortexdbai-0.13.0/README.md +946 -0
  5. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/__init__.py +128 -110
  6. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/ag2/__init__.py +21 -21
  7. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/ag2/agent.py +185 -185
  8. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/ag2/tools.py +165 -165
  9. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/agno/__init__.py +13 -13
  10. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/agno/memory.py +113 -113
  11. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/agno/tools.py +97 -97
  12. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/autogen/__init__.py +21 -21
  13. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/autogen/agent.py +194 -194
  14. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/autogen/tools.py +165 -165
  15. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/beeai/__init__.py +15 -15
  16. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/beeai/memory.py +142 -142
  17. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/beeai/tools.py +189 -189
  18. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/camel/__init__.py +21 -21
  19. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/camel/memory.py +164 -164
  20. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/camel/tools.py +163 -163
  21. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/controlflow/__init__.py +12 -12
  22. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/controlflow/memory.py +270 -270
  23. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/crewai/__init__.py +14 -14
  24. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/crewai/memory.py +83 -83
  25. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/crewai/tools.py +80 -80
  26. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/deepinfra/__init__.py +13 -13
  27. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/deepinfra/config.py +73 -73
  28. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/deepinfra/embeddings.py +36 -36
  29. {cortexdbai-0.11.2/cortexdb/integrations/groq → cortexdbai-0.13.0/cortexdb/integrations/deepinfra}/openai_compat.py +208 -208
  30. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/dify/__init__.py +12 -12
  31. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/dify/tool.py +229 -229
  32. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/dspy/__init__.py +13 -13
  33. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/dspy/memory.py +121 -121
  34. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/dspy/retriever.py +111 -111
  35. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/fireworks/__init__.py +13 -13
  36. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/fireworks/config.py +68 -68
  37. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/fireworks/embeddings.py +36 -36
  38. {cortexdbai-0.11.2/cortexdb/integrations/together → cortexdbai-0.13.0/cortexdb/integrations/fireworks}/openai_compat.py +208 -208
  39. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/flowise/__init__.py +12 -12
  40. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/flowise/node.py +295 -295
  41. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/google_adk/__init__.py +20 -20
  42. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/google_adk/tools.py +198 -198
  43. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/groq/__init__.py +13 -13
  44. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/groq/config.py +63 -63
  45. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/groq/embeddings.py +55 -55
  46. {cortexdbai-0.11.2/cortexdb/integrations/deepinfra → cortexdbai-0.13.0/cortexdb/integrations/groq}/openai_compat.py +208 -208
  47. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/hermes/__init__.py +5 -5
  48. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/hermes/provider.py +276 -276
  49. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/instructor/__init__.py +17 -17
  50. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/instructor/memory.py +232 -232
  51. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/langchain/__init__.py +29 -29
  52. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/langchain/memory.py +143 -143
  53. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/langchain/retriever.py +74 -74
  54. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/langchain/tools.py +121 -121
  55. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/langgraph/__init__.py +12 -12
  56. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/langgraph/memory.py +335 -335
  57. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/letta/__init__.py +12 -12
  58. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/letta/storage.py +311 -311
  59. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/llamaindex/__init__.py +12 -12
  60. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/llamaindex/memory.py +260 -260
  61. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/nemo_guardrails/__init__.py +24 -24
  62. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/nemo_guardrails/actions.py +218 -218
  63. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/nemo_guardrails/knowledge_base.py +134 -134
  64. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/ollama/__init__.py +14 -14
  65. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/ollama/config.py +44 -44
  66. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/ollama/embeddings.py +126 -126
  67. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/openai_agents/__init__.py +19 -19
  68. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/openai_agents/tools.py +183 -183
  69. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/prefect/__init__.py +21 -21
  70. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/prefect/blocks.py +88 -88
  71. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/prefect/tasks.py +145 -145
  72. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/pydanticai/__init__.py +21 -21
  73. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/pydanticai/dependencies.py +42 -42
  74. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/pydanticai/tools.py +100 -100
  75. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/smolagents/__init__.py +19 -19
  76. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/smolagents/tools.py +251 -251
  77. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/temporal/__init__.py +21 -21
  78. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/temporal/activities.py +241 -241
  79. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/temporal/interceptor.py +208 -208
  80. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/together/__init__.py +13 -13
  81. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/together/config.py +75 -75
  82. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/together/embeddings.py +36 -36
  83. {cortexdbai-0.11.2/cortexdb/integrations/fireworks → cortexdbai-0.13.0/cortexdb/integrations/together}/openai_compat.py +208 -208
  84. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/vllm/__init__.py +13 -13
  85. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/vllm/config.py +59 -59
  86. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/vllm/embeddings.py +37 -37
  87. cortexdbai-0.13.0/cortexdb/integrations/vllm/openai_compat.py +208 -0
  88. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/v1/__init__.py +211 -117
  89. cortexdbai-0.13.0/cortexdb/v1/_transport.py +487 -0
  90. cortexdbai-0.13.0/cortexdb/v1/_wire.py +898 -0
  91. cortexdbai-0.13.0/cortexdb/v1/auth.py +198 -0
  92. cortexdbai-0.13.0/cortexdb/v1/client.py +1670 -0
  93. cortexdbai-0.13.0/cortexdb/v1/consistency.py +144 -0
  94. cortexdbai-0.13.0/cortexdb/v1/diagnostics.py +85 -0
  95. cortexdbai-0.13.0/cortexdb/v1/errors.py +5397 -0
  96. cortexdbai-0.13.0/cortexdb/v1/exceptions.py +371 -0
  97. cortexdbai-0.13.0/cortexdb/v1/fragments.py +71 -0
  98. cortexdbai-0.13.0/cortexdb/v1/models.py +10236 -0
  99. cortexdbai-0.13.0/cortexdb/v1/ops/__init__.py +7 -0
  100. cortexdbai-0.13.0/cortexdb/v1/ops/access.py +727 -0
  101. cortexdbai-0.13.0/cortexdb/v1/ops/admin.py +448 -0
  102. cortexdbai-0.13.0/cortexdb/v1/ops/code.py +372 -0
  103. cortexdbai-0.13.0/cortexdb/v1/ops/core.py +2056 -0
  104. cortexdbai-0.13.0/cortexdb/v1/ops/erasure.py +179 -0
  105. cortexdbai-0.13.0/cortexdb/v1/ops/native.py +137 -0
  106. cortexdbai-0.13.0/cortexdb/v1/ops/org.py +461 -0
  107. cortexdbai-0.13.0/cortexdb/v1/ops/rest.py +639 -0
  108. cortexdbai-0.13.0/cortexdb/v1/ops/scim.py +321 -0
  109. cortexdbai-0.13.0/cortexdb/v1/records.py +142 -0
  110. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/v1/source.py +554 -554
  111. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/pyproject.toml +188 -188
  112. cortexdbai-0.13.0/scripts/error_codes.json +2710 -0
  113. cortexdbai-0.13.0/scripts/generate_errors.py +215 -0
  114. cortexdbai-0.13.0/scripts/generate_models.py +319 -0
  115. cortexdbai-0.13.0/tests/_harness.py +224 -0
  116. cortexdbai-0.13.0/tests/conftest.py +22 -0
  117. cortexdbai-0.13.0/tests/live/__init__.py +0 -0
  118. cortexdbai-0.13.0/tests/live/conftest.py +229 -0
  119. cortexdbai-0.13.0/tests/live/test_live_shared_memory.py +1065 -0
  120. cortexdbai-0.13.0/tests/test_access_api.py +319 -0
  121. cortexdbai-0.13.0/tests/test_admin_and_rest.py +249 -0
  122. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/tests/test_admin_retention.py +28 -0
  123. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/tests/test_answer_unavailable.py +4 -1
  124. cortexdbai-0.13.0/tests/test_client_parity.py +129 -0
  125. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/tests/test_code_namespace.py +217 -217
  126. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/tests/test_conflicts.py +310 -310
  127. cortexdbai-0.13.0/tests/test_consistency.py +97 -0
  128. cortexdbai-0.13.0/tests/test_delete_blob.py +105 -0
  129. cortexdbai-0.13.0/tests/test_erasures_forget.py +144 -0
  130. cortexdbai-0.13.0/tests/test_errors_and_auth.py +398 -0
  131. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/tests/test_integration_write_barriers.py +73 -73
  132. cortexdbai-0.13.0/tests/test_matched_fragments.py +106 -0
  133. cortexdbai-0.13.0/tests/test_org_routes.py +189 -0
  134. cortexdbai-0.13.0/tests/test_read_write_fields.py +129 -0
  135. cortexdbai-0.13.0/tests/test_readme_examples.py +50 -0
  136. cortexdbai-0.13.0/tests/test_recall_hints_capabilities.py +230 -0
  137. cortexdbai-0.13.0/tests/test_scim.py +106 -0
  138. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/tests/test_signup.py +114 -114
  139. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/tests/test_source.py +342 -342
  140. cortexdbai-0.13.0/tests/test_streams.py +82 -0
  141. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/tests/test_v093_surfaces.py +499 -499
  142. cortexdbai-0.13.0/tests/test_with_options.py +43 -0
  143. cortexdbai-0.11.2/.gitignore +0 -109
  144. cortexdbai-0.11.2/PKG-INFO +0 -366
  145. cortexdbai-0.11.2/README.md +0 -251
  146. cortexdbai-0.11.2/cortexdb/integrations/vllm/openai_compat.py +0 -208
  147. cortexdbai-0.11.2/cortexdb/v1/client.py +0 -3001
  148. cortexdbai-0.11.2/cortexdb/v1/exceptions.py +0 -132
  149. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/__init__.py +0 -0
  150. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/integrations/dify/manifest.yaml +0 -0
  151. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/cortexdb/py.typed +0 -0
  152. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/tests/__init__.py +0 -0
  153. {cortexdbai-0.11.2 → cortexdbai-0.13.0}/tests/test_unknown_method_guidance.py +0 -0
@@ -0,0 +1,327 @@
1
+ # `cortexdbai` coverage of the CortexDB 0.14.0 v1 API
2
+
3
+ Every route the 0.14.0 server serves to clients, and the `cortexdbai` method that calls it. Every method exists in
4
+ `V1Client` and in `AsyncV1Client` under the same name, with the same parameters (both are built from the same
5
+ builders, `cortexdb/v1/ops/`, and `tests/test_client_parity.py` pins it). Kept up to date with the SDK: a route the
6
+ server adds goes in this table in the same change.
7
+
8
+ ## How the list was made
9
+
10
+ - **The server's route table.** Every `.route("…")` under `crates/cortex-api/src/` that is compiled into the binary
11
+ (test code is skipped the way `scripts/openapi_route_diff.py` skips it), for the public prefixes the OpenAPI gate
12
+ covers: `/v1/`, `/access/`, `/.well-known/` and `/scim/`. That is `crates/cortex-api/src/v1/router.rs` and every
13
+ router it mounts (`access_routes.rs`, `access_change_routes.rs`, `access_watch.rs`, `app_routes.rs`,
14
+ `directory_routes.rs`, `scim_routes.rs`, `restore_routes.rs`, `rollup_routes.rs`, `publish_routes.rs`,
15
+ `forget_routes*.rs`, `code_routes.rs`, `commitment_routes.rs`, `source_erasure_routes.rs` and the rest).
16
+ - **Base:** `origin/sharedcontext` at `4618df85`, the final 0.14.0 server, 206 paths and 237 operations (a path with
17
+ two methods is two rows). The field families are in the second table.
18
+ - **The method column** is read from the SDK itself: each method's docstring names its route first.
19
+ - **Status:** `covered` (both clients), or `not covered` with the reason.
20
+
21
+ ## How it is tested
22
+
23
+ - **Unit** (`tests/`, run by CI's `pytest -q` in `sdks/python`): every method on both clients sends the same
24
+ request (`test_client_parity.py`), and each route family's tests pin its requests and its answers' handling.
25
+ - **Live** (`tests/live/`, against a release binary of the merged tree, `CORTEXDB_BINARY=… pytest tests/live`): one
26
+ org's life in 25 legs, run once on each client. The last leg calls every route the others do not, and checks that
27
+ each answers by its contract on a default server: 2xx, or the documented refusal of a switch the server leaves off
28
+ (`CODE_PLANE_DISABLED`, `COHORT_DISABLED`, `ICE_OFF`, plans' 404, the native memory host's routes, which a
29
+ plain server does not mount). With `CORTEXDB_LIVE_ROUTES=<file>` the run records every request it sent: on 0.14.0
30
+ it reaches 229 of the 235 covered operations (signup's class method included); the other six are aliases of reached routes (`GET /v1/health`,
31
+ `/v1/ready`, `/v1/understanding/coverage`, `/v1/understanding/{id}` and `/{id}/related`, `POST
32
+ /v1/experiences`), which the method's own route serves.
33
+
34
+ ## Not part of the SDK
35
+
36
+ These are served by the binary but are not the v1 API a client calls:
37
+
38
+ | Route | Why not |
39
+ |---|---|
40
+ | `POST`, `GET`, `DELETE /mcp` | The HTTP MCP server (`CORTEX_MCP=on`): an MCP client's transport, covered by MCP clients, not by this SDK |
41
+ | `/internal/ui/*` | The embedded console's own routes (settings, features, license, updater); 403 on a data node, not routed by an ingress |
42
+ | `/metrics` | Prometheus text exposition, for a scraper |
43
+ | `/`, `/status`, `/assets/*`, `/docs*`, `/openapi.json` | The console and its static files; `/openapi.json` is the same document as `GET /v1/openapi.json` |
44
+ | `/shard/v1/*`, `/node/v1/*` | A cluster's internal mTLS routes, between nodes |
45
+ | `GET /.well-known/oauth-protected-resource`, `/.well-known/oauth-protected-resource/mcp` | The MCP server's OAuth protected-resource metadata (RFC 9728), read by MCP clients; listed below because the OpenAPI gate covers `/.well-known/` |
46
+
47
+ ## Summary
48
+
49
+ 237 operations: 235 covered by both clients, 2 not covered (each row says why).
50
+
51
+ Before the 0.14.0 work (`cortexdbai` 0.12.0), 67 operations were reached, 49 of them only partly (38 had no
52
+ `AsyncV1Client` method), and none of the shared-memory routes.
53
+
54
+ ## Routes
55
+
56
+ | Route | Family | Method (`V1Client` and `AsyncV1Client`) | Status |
57
+ |---|---|---|---|
58
+ | `GET /.well-known/authzen-configuration` | AuthZEN | `authzen_configuration` | covered |
59
+ | `GET /.well-known/oauth-protected-resource` | MCP metadata | - | not covered: the MCP server's OAuth metadata, for MCP clients (see above) |
60
+ | `GET /.well-known/oauth-protected-resource/mcp` | MCP metadata | - | not covered: the MCP server's OAuth metadata, for MCP clients (see above) |
61
+ | `POST /access/v1/evaluation` | AuthZEN | `authzen_evaluation` | covered |
62
+ | `POST /access/v1/search/resource` | AuthZEN | `authzen_search_resource` | covered |
63
+ | `GET /scim/v2/Groups` | SCIM | `scim.list_groups` | covered |
64
+ | `POST /scim/v2/Groups` | SCIM | `scim.create_group` | covered |
65
+ | `DELETE /scim/v2/Groups/{id}` | SCIM | `scim.delete_group` | covered |
66
+ | `GET /scim/v2/Groups/{id}` | SCIM | `scim.get_group` | covered |
67
+ | `PATCH /scim/v2/Groups/{id}` | SCIM | `scim.patch_group` | covered |
68
+ | `PUT /scim/v2/Groups/{id}` | SCIM | `scim.replace_group` | covered |
69
+ | `GET /scim/v2/ResourceTypes` | SCIM | `scim.resource_types` | covered |
70
+ | `GET /scim/v2/ResourceTypes/{id}` | SCIM | `scim.resource_type` | covered |
71
+ | `GET /scim/v2/Schemas` | SCIM | `scim.schemas` | covered |
72
+ | `GET /scim/v2/Schemas/{id}` | SCIM | `scim.schema` | covered |
73
+ | `GET /scim/v2/ServiceProviderConfig` | SCIM | `scim.service_provider_config` | covered |
74
+ | `GET /scim/v2/Users` | SCIM | `scim.list_users` | covered |
75
+ | `POST /scim/v2/Users` | SCIM | `scim.create_user` | covered |
76
+ | `DELETE /scim/v2/Users/{id}` | SCIM | `scim.delete_user` | covered |
77
+ | `GET /scim/v2/Users/{id}` | SCIM | `scim.get_user` | covered |
78
+ | `PATCH /scim/v2/Users/{id}` | SCIM | `scim.patch_user` | covered |
79
+ | `PUT /scim/v2/Users/{id}` | SCIM | `scim.replace_user` | covered |
80
+ | `POST /v1/access/accounts/resolve` | Source containers | `access_resolve_accounts` | covered |
81
+ | `POST /v1/access/changes` | Change sets | `changeset_stage` | covered |
82
+ | `DELETE /v1/access/changes/{id}` | Change sets | `changeset_discard` | covered |
83
+ | `GET /v1/access/changes/{id}` | Change sets | `changeset_get` | covered |
84
+ | `POST /v1/access/changes/{id}/activate` | Change sets | `changeset_activate` | covered |
85
+ | `POST /v1/access/changes/{id}/parts` | Change sets | `changeset_add_parts` | covered |
86
+ | `POST /v1/access/changes/{id}/preview` | Change sets | `changeset_preview` | covered |
87
+ | `POST /v1/access/check` | Access API | `access_check` | covered |
88
+ | `GET /v1/access/enrich` | Access API | `access_enrich` | covered |
89
+ | `POST /v1/access/explain` | Access API | `access_explain` | covered |
90
+ | `GET /v1/access/limits` | Access API | `access_limits` | covered |
91
+ | `POST /v1/access/lookup/principals` | Access API | `access_lookup_principals` | covered |
92
+ | `POST /v1/access/lookup/scopes` | Access API | `access_lookup_scopes` | covered |
93
+ | `GET /v1/access/notices` | Watch and notices | `access_notices` | covered |
94
+ | `POST /v1/access/notices/ack` | Watch and notices | `access_notices_ack` | covered |
95
+ | `GET /v1/access/records` | Restores | `access_records` | covered |
96
+ | `POST /v1/access/rehome` | Source containers | `access_rehome` | covered |
97
+ | `POST /v1/access/restore/ack` | Restores | `access_restore_ack` | covered |
98
+ | `POST /v1/access/texts/erase` | Access API | `access_texts_erase` | covered |
99
+ | `GET /v1/access/watch` | Watch and notices | `access_watch` | covered |
100
+ | `GET /v1/access/watermarks` | Source containers | `access_watermarks` | covered |
101
+ | `PUT /v1/access/watermarks` | Source containers | `access_watermark_put` | covered |
102
+ | `GET /v1/admin/access/report` | Access admin | `admin_access_report` | covered |
103
+ | `POST /v1/admin/access/restore` | Restores | `admin_access_restore` | covered |
104
+ | `POST /v1/admin/access/tenant-binding` | Access admin | `admin_tenant_binding` | covered |
105
+ | `GET /v1/admin/access/tenant-settings` | Access admin | `admin_tenant_settings` | covered |
106
+ | `PUT /v1/admin/access/tenant-settings` | Access admin | `admin_set_tenant_settings` | covered |
107
+ | `POST /v1/admin/auth/reload` | Access admin | `admin_auth_reload` | covered |
108
+ | `GET /v1/admin/cohort/status` | Cohort (xscope) | `admin_cohort_status` | covered |
109
+ | `POST /v1/admin/cohort/warm` | Cohort (xscope) | `admin_cohort_warm` | covered |
110
+ | `POST /v1/admin/compaction/dedup` | Admin | `admin_compaction_dedup` | covered |
111
+ | `GET /v1/admin/compile-dead-letter` | Admin | `admin_compile_dead_letter` | covered |
112
+ | `POST /v1/admin/derived/rederive` | Admin | `admin_rederive` | covered |
113
+ | `GET /v1/admin/derived/rederive/{job_id}` | Admin | `admin_rederive_status` | covered |
114
+ | `POST /v1/admin/derived/resolver/unmerge` | Admin | `admin_resolver_unmerge` | covered |
115
+ | `GET /v1/admin/events/{id}/chunks` | Admin | `event_chunks` | covered |
116
+ | `GET /v1/admin/health` | Admin | `health` | covered |
117
+ | `POST /v1/admin/ice/owner` | Admin | `admin_ice_owner` | covered |
118
+ | `POST /v1/admin/ice/seal` | Admin | `admin_ice_seal` | covered |
119
+ | `GET /v1/admin/ice/status` | Admin | `admin_ice_status` | covered |
120
+ | `POST /v1/admin/index-audit` | Admin | `index_audit` | covered |
121
+ | `GET /v1/admin/index-audit/orphan-blobs` | Admin | `admin_orphan_blobs` | covered |
122
+ | `POST /v1/admin/index-audit/reinclude` | Admin | `admin_reinclude` | covered |
123
+ | `POST /v1/admin/index-audit/source-blob-links` | Admin | `admin_source_blob_links` | covered |
124
+ | `GET /v1/admin/layers/stats` | Admin | `layer_stats` | covered |
125
+ | `GET /v1/admin/metrics` | Admin | `admin_metrics` | covered |
126
+ | `GET /v1/admin/native-memory` | Admin | `admin_native_memory` | covered |
127
+ | `POST /v1/admin/persist` | Admin | `admin_persist` | covered |
128
+ | `GET /v1/admin/plans/{subtree}` | Admin | `admin_plan` | covered |
129
+ | `PUT /v1/admin/plans/{subtree}` | Admin | `admin_set_plan` | covered |
130
+ | `GET /v1/admin/ready` | Admin | `ready` | covered |
131
+ | `GET /v1/admin/retention` | Admin | `retention_status` | covered |
132
+ | `DELETE /v1/admin/retention/policies` | Admin | `retention_policy_delete` | covered |
133
+ | `GET /v1/admin/retention/policies` | Admin | `retention_policy_get` | covered |
134
+ | `PUT /v1/admin/retention/policies` | Admin | `retention_policy_set` | covered |
135
+ | `POST /v1/admin/retention/sweep` | Admin | `retention_sweep` | covered |
136
+ | `GET /v1/admin/rollups/status` | Rollups | `admin_rollups_status` | covered |
137
+ | `POST /v1/admin/scopes/migrate` | Admin | `admin_scope_migrate` | covered |
138
+ | `GET /v1/admin/scopes/migrate/{id}` | Admin | `admin_scope_migration` | covered |
139
+ | `GET /v1/admin/usage` | Admin | `admin_usage` | covered |
140
+ | `GET /v1/admin/usage/subtrees` | Admin | `admin_usage_subtrees` | covered |
141
+ | `POST /v1/admin/vector-hygiene` | Admin | `admin_vector_hygiene` | covered |
142
+ | `GET /v1/admin/version` | Admin | `version` | covered |
143
+ | `GET /v1/admin/wal` | Admin | `wal_status` | covered |
144
+ | `POST /v1/admin/wal/compact` | Admin | `wal_compact` | covered |
145
+ | `POST /v1/answer` | Read | `answer`, `answer_stream` | covered |
146
+ | `GET /v1/apps/{id}` | Applications | `app_get` | covered |
147
+ | `PUT /v1/apps/{id}` | Applications | `app_put` | covered |
148
+ | `GET /v1/audit` | Audit | `audit_list` | covered |
149
+ | `GET /v1/audit/chain` | Audit | `audit_chain` | covered |
150
+ | `POST /v1/audit/chain/verify` | Audit | `audit_chain_verify` | covered |
151
+ | `POST /v1/audit/verify` | Audit | `audit_verify` | covered |
152
+ | `GET /v1/audit/{id}` | Audit | `audit_get` | covered |
153
+ | `POST /v1/auth/revoke` | Auth | `revoke_token` | covered |
154
+ | `POST /v1/auth/signup` | Auth | `signup` | covered |
155
+ | `POST /v1/auth/tokens` | Auth | `mint_agent_token`, `mint_app_token`, `mint_token` | covered |
156
+ | `GET /v1/auth/whoami` | Auth | `whoami` | covered |
157
+ | `GET /v1/beliefs` | Layers | `beliefs` | covered |
158
+ | `POST /v1/beliefs` | Layers | `create_belief` | covered |
159
+ | `POST /v1/beliefs/build` | Layers | `build_beliefs` | covered |
160
+ | `GET /v1/beliefs/history` | Layers | `belief_history` | covered |
161
+ | `GET /v1/beliefs/why` | Layers | `belief_why` | covered |
162
+ | `POST /v1/blobs` | Blobs | `upload_blob` | covered |
163
+ | `DELETE /v1/blobs/idempotent` | Blobs | `retire_blob_keyed` | covered |
164
+ | `POST /v1/blobs/idempotent` | Blobs | `upload_blob_keyed` | covered |
165
+ | `GET /v1/blobs/idempotent/status` | Blobs | `blob_keyed_status` | covered |
166
+ | `DELETE /v1/blobs/{id}` | Blobs | `delete_blob` | covered |
167
+ | `GET /v1/blobs/{id}` | Blobs | `get_blob` | covered |
168
+ | `GET /v1/claims` | Layers | `query_claims` | covered |
169
+ | `GET /v1/claims/history` | Layers | `claim_history` | covered |
170
+ | `GET /v1/code/calls` | Code plane | `code.calls` | covered |
171
+ | `POST /v1/code/certify` | Code plane | `code.certify` | covered |
172
+ | `POST /v1/code/context` | Code plane | `code.context` | covered |
173
+ | `GET /v1/code/coverage/status` | Code plane | `code.coverage_status` | covered |
174
+ | `GET /v1/code/export-index` | Code plane | `code.export_index` | covered |
175
+ | `POST /v1/code/gc` | Code plane | `code.gc` | covered |
176
+ | `POST /v1/code/graph/export` | Code plane | `code.graph_export` | covered |
177
+ | `POST /v1/code/graph/query` | Code plane | `code.graph_query` | covered |
178
+ | `GET /v1/code/history/for-symbol` | Code plane | `code.history_for_symbol` | covered |
179
+ | `GET /v1/code/impact` | Code plane | `code.impact` | covered |
180
+ | `POST /v1/code/import-index` | Code plane | `code.import_index` | covered |
181
+ | `POST /v1/code/import/coverage` | Code plane | `code.import_coverage` | covered |
182
+ | `POST /v1/code/import/scip` | Code plane | `code.import_scip` | covered |
183
+ | `POST /v1/code/inventory` | Code plane | `code.inventory` | covered |
184
+ | `GET /v1/code/matrix` | Code plane | `code.matrix` | covered |
185
+ | `DELETE /v1/code/pins` | Code plane | `code.unpin` | covered |
186
+ | `POST /v1/code/pins` | Code plane | `code.pin` | covered |
187
+ | `GET /v1/code/repos` | Code plane | `code.repos` | covered |
188
+ | `POST /v1/code/repos` | Code plane | `code.register_repo` | covered |
189
+ | `DELETE /v1/code/repos/{name}` | Code plane | `code.remove_repo` | covered |
190
+ | `GET /v1/code/repos/{name}` | Code plane | `code.repo_status` | covered |
191
+ | `GET /v1/code/symbol/resolve` | Code plane | `code.resolve_symbol` | covered |
192
+ | `GET /v1/code/symbol/search` | Code plane | `code.search_symbols` | covered |
193
+ | `GET /v1/code/tests/for-change` | Code plane | `code.tests_for_change` | covered |
194
+ | `POST /v1/code/workspace/context` | Code plane | `code.workspace_context` | covered |
195
+ | `POST /v1/cohort/query` | Cohort (xscope) | `cohort_query` | covered |
196
+ | `GET /v1/cohort/vocabulary` | Cohort (xscope) | `cohort_vocabulary` | covered |
197
+ | `POST /v1/compose` | Read | `compose` | covered |
198
+ | `GET /v1/concepts` | Layers | `concepts` | covered |
199
+ | `GET /v1/concepts/coverage` | Layers | `concepts_coverage` | covered |
200
+ | `GET /v1/concepts/{id}` | Layers | `concept` | covered |
201
+ | `GET /v1/concepts/{id}/history` | Layers | `concept_history` | covered |
202
+ | `GET /v1/concepts/{id}/related` | Layers | `concept_related` | covered |
203
+ | `GET /v1/conflicts` | Layers | `list_conflicts` | covered |
204
+ | `GET /v1/conflicts/{id}` | Layers | `get_conflict` | covered |
205
+ | `POST /v1/conflicts/{id}/resolve` | Layers | `resolve_conflict` | covered |
206
+ | `GET /v1/derivation/status` | Layers | `derivation_status` | covered |
207
+ | `GET /v1/directory` | Directory | `directory_search` | covered |
208
+ | `DELETE /v1/directory/{id}` | Directory | `directory_delete` | covered |
209
+ | `GET /v1/directory/{id}` | Directory | `directory_get` | covered |
210
+ | `PUT /v1/directory/{id}` | Directory | `directory_put` | covered |
211
+ | `GET /v1/episodes` | Layers | `episodes` | covered |
212
+ | `POST /v1/episodes/build` | Layers | `build_episodes` | covered |
213
+ | `POST /v1/erasures` | Erasures | `erase` | covered |
214
+ | `POST /v1/erasures/person` | Erasures | `erase_person` | covered |
215
+ | `POST /v1/erasures/preview` | Erasures | `erasure_preview` | covered |
216
+ | `POST /v1/erasures/tenant` | Erasures | `erase_tenant` | covered |
217
+ | `GET /v1/erasures/{id}` | Erasures | `erasure_status` | covered |
218
+ | `POST /v1/erasures/{id}/cancel` | Erasures | `erasure_cancel` | covered |
219
+ | `GET /v1/erasures/{id}/receipt` | Erasures | `erasure_receipt` | covered |
220
+ | `GET /v1/erasures/{id}/verify` | Erasures | `erasure_verify` | covered |
221
+ | `GET /v1/events` | Layers | `events` | covered |
222
+ | `GET /v1/events/{id}` | Layers | `event` | covered |
223
+ | `POST /v1/experience` | Write | `experience` | covered |
224
+ | `POST /v1/experience/bulk` | Write | `experience_bulk` | covered |
225
+ | `POST /v1/experience/resume` | Write | `native.capture_resume` | covered |
226
+ | `GET /v1/experience/status` | Write | `write_status` | covered |
227
+ | `POST /v1/experience/status` | Write | `native.capture_status` | covered |
228
+ | `POST /v1/experiences` | Write | `experience_bulk` | covered |
229
+ | `POST /v1/export` | Import and export | `export`, `import_data` | covered |
230
+ | `GET /v1/facts` | Layers | `facts` | covered |
231
+ | `GET /v1/facts/timeline` | Layers | `facts_timeline` | covered |
232
+ | `GET /v1/facts/{id}` | Layers | `fact` | covered |
233
+ | `POST /v1/forget` | Forget | `forget` | covered |
234
+ | `POST /v1/forget/preview` | Forget | `forget_preview` | covered |
235
+ | `GET /v1/health` | Service and policy | `health` | covered |
236
+ | `POST /v1/import` | Import and export | `import_data` | covered |
237
+ | `POST /v1/import/jsonl` | Import and export | `import_jsonl` | covered |
238
+ | `POST /v1/import/letta` | Import and export | `import_letta` | covered |
239
+ | `POST /v1/import/mem0` | Import and export | `import_mem0` | covered |
240
+ | `POST /v1/import/openai` | Import and export | `import_openai` | covered |
241
+ | `POST /v1/import/zep` | Import and export | `import_zep` | covered |
242
+ | `GET /v1/import/{id}` | Import and export | `import_status` | covered |
243
+ | `GET /v1/lifecycle` | Lifecycle | `lifecycle_events` | covered |
244
+ | `GET /v1/lifecycle/event/{lce_id}` | Lifecycle | `lifecycle_event` | covered |
245
+ | `GET /v1/lifecycle/memory-event/{evt_id}` | Lifecycle | `lifecycle_memory_event` | covered |
246
+ | `POST /v1/lifecycle/memory-event/{evt_id}/cancel` | Lifecycle | `cancel_event` | covered |
247
+ | `GET /v1/lifecycle/stream` | Lifecycle | `lifecycle_stream` | covered |
248
+ | `POST /v1/memory/commitments/commands` | Native memory host | `native.commitment_command` | covered |
249
+ | `POST /v1/memory/commitments/current` | Native memory host | `native.commitment_current` | covered |
250
+ | `POST /v1/memory/commitments/evidence` | Native memory host | `native.commitment_evidence` | covered |
251
+ | `POST /v1/memory/commitments/status` | Native memory host | `native.commitment_status` | covered |
252
+ | `POST /v1/memory/source-erasure/commands` | Native memory host | `native.source_erasure_command` | covered |
253
+ | `POST /v1/memory/source-erasure/discovered-commands` | Native memory host | `native.source_erasure_discovered_command` | covered |
254
+ | `POST /v1/memory/source-erasure/discovery` | Native memory host | `native.source_erasure_discovery` | covered |
255
+ | `POST /v1/memory/source-erasure/progress` | Native memory host | `native.source_erasure_progress` | covered |
256
+ | `POST /v1/memory/source-erasure/refusals` | Native memory host | `native.source_erasure_refusal` | covered |
257
+ | `POST /v1/memory/source-erasure/status` | Native memory host | `native.source_erasure_status` | covered |
258
+ | `GET /v1/openapi.json` | Service and policy | `openapi` | covered |
259
+ | `GET /v1/plan` | Service and policy | `plan` | covered |
260
+ | `GET /v1/policy/deployment` | Service and policy | `policy_deployment` | covered |
261
+ | `GET /v1/policy/effective` | Service and policy | `policy_effective` | covered |
262
+ | `POST /v1/publish` | Publish | `publish` | covered |
263
+ | `GET /v1/ready` | Service and policy | `ready` | covered |
264
+ | `POST /v1/recall` | Read | `recall` | covered |
265
+ | `POST /v1/recall/stream` | Read | `recall_stream` | covered |
266
+ | `GET /v1/rollups` | Rollups | `rollups` | covered |
267
+ | `GET /v1/rollups/totals` | Rollups | `rollup_totals` | covered |
268
+ | `GET /v1/rollups/{id}` | Rollups | `rollup` | covered |
269
+ | `GET /v1/schemas` | Service and policy | `schemas` | covered |
270
+ | `GET /v1/schemas/{name}` | Service and policy | `schema` | covered |
271
+ | `DELETE /v1/scopes` | Scopes | `scope_delete` | covered |
272
+ | `GET /v1/scopes` | Scopes | `scope_get` | covered |
273
+ | `POST /v1/scopes` | Scopes | `scope_register` | covered |
274
+ | `GET /v1/scopes/list` | Scopes | `scopes_list` | covered |
275
+ | `PUT /v1/scopes/members` | Scopes | `scope_set_members` | covered |
276
+ | `POST /v1/scopes/prune` | Scopes | `scopes_prune` | covered |
277
+ | `PUT /v1/scopes/tree` | Scopes | `scope_set_tree` | covered |
278
+ | `GET /v1/temporal/phrases` | Vocabularies and phrases | `temporal_phrases` | covered |
279
+ | `POST /v1/temporal/phrases` | Vocabularies and phrases | `add_temporal_phrase` | covered |
280
+ | `DELETE /v1/temporal/phrases/{name}` | Vocabularies and phrases | `delete_temporal_phrase` | covered |
281
+ | `GET /v1/understanding` | Layers | `understanding` | covered |
282
+ | `GET /v1/understanding/coverage` | Layers | `concepts_coverage` | covered |
283
+ | `POST /v1/understanding/synthesize` | Layers | `synthesize` | covered |
284
+ | `GET /v1/understanding/synthesize/{id}` | Layers | `synthesis_status` | covered |
285
+ | `GET /v1/understanding/{id}` | Layers | `concept` | covered |
286
+ | `GET /v1/understanding/{id}/history` | Layers | `understanding_history` | covered |
287
+ | `GET /v1/understanding/{id}/related` | Layers | `concept_related` | covered |
288
+ | `GET /v1/usage` | Service and policy | `usage` | covered |
289
+ | `GET /v1/vocabularies` | Vocabularies and phrases | `vocabularies` | covered |
290
+ | `POST /v1/vocabularies` | Vocabularies and phrases | `create_vocabulary` | covered |
291
+ | `DELETE /v1/vocabularies/{name}` | Vocabularies and phrases | `delete_vocabulary` | covered |
292
+ | `GET /v1/vocabularies/{name}` | Vocabularies and phrases | `vocabulary` | covered |
293
+ | `PATCH /v1/vocabularies/{name}` | Vocabularies and phrases | `update_vocabulary` | covered |
294
+ | `PUT /v1/vocabularies/{name}` | Vocabularies and phrases | `replace_vocabulary` | covered |
295
+
296
+ ## Fields, headers and errors of 0.14.0
297
+
298
+ | Family | Where | SDK | Status |
299
+ |---|---|---|---|
300
+ | `consistency: {}` / `{"at_least": token}` (`consistency_tokens_v1`) | `/v1/recall`, `/v1/recall/stream`, `/v1/answer`, `/v1/compose`, `POST /v1/access/{check,explain,lookup/scopes,lookup/principals}` | `consistency=True` or `consistency=<token>` | covered |
301
+ | `?consistency=1` | `POST /v1/experience`, `/v1/experience/bulk`, `/v1/experiences`, `POST /v1/scopes`, `PUT /v1/scopes/{members,tree}`, `DELETE /v1/scopes` | `consistency=True` | covered on the write routes |
302
+ | `?at_least=<token>` | `GET /v1/events`, `/v1/events/{id}`, the fact, belief, episode and concept reads, `GET /v1/scopes`, `GET /v1/experience/status` | `at_least=<token>` | covered on the routes the SDK reaches |
303
+ | `consistency_token`, `consistency_reset`, `derived_through`, `access_restored_at` in responses | every route above | typed in `cortexdb.v1.models`; `ConsistencyTokens` records them per root | covered |
304
+ | `extra_scopes` (up to 40, `extra_scopes_40_v1`) | `/v1/recall`, `/v1/recall/stream`, `/v1/answer`, `/v1/compose` | `extra_scopes=[...]` (more than 40 is a `ValueError` before the call) | covered |
305
+ | `coverage: true` (`recall_coverage_v1`) | the same four routes | `coverage=True`; `Coverage` in `cortexdb.v1.models` | covered |
306
+ | `beliefs: "merged"` (`beliefs_merged_v1`) | the same four routes; `GET /v1/beliefs/why` `merges`, `scopes`, `scope` | `beliefs="merged"`; `belief_why(..., merges=, scopes=, scope=)` | covered |
307
+ | `mounts: "default"` (`recall_mounts_v1`) | the same four routes | `mounts="default"` | covered |
308
+ | `provenance` (`write_provenance_v1`) | `POST /v1/experience`, each `/v1/experience/bulk` and `/v1/experiences` item, `/v1/import/jsonl` lines, `POST /v1/beliefs` | `provenance=[...]` on `experience`, a bulk item's `"provenance"`, a JSONL line's own field, `create_belief(..., provenance=)` | covered |
309
+ | The read-free forget (`forget_by_key_v1`): `selector.idempotency_keys`, `selector.capture_keys` | `POST /v1/forget`, `/v1/forget/preview` | `idempotency_keys=[key or (key, caller)]`, `capture_keys=[label]` | covered |
310
+ | `subject: {email}` with `confirm: true` (`party_erasure_v1`) | `POST /v1/erasures`, `/v1/erasures/preview` | `erase(root, subject_email=..., confirm=True)`, `erasure_preview(root, subject_email=...)` | covered |
311
+ | Server-sent events: `plan`, `layer`, `context_block`, `token`, `citations`, `done`, `error` | `/v1/recall/stream`, `/v1/answer` with `stream: true`, `/v1/lifecycle/stream` | `recall_stream`, `answer_stream`, `lifecycle_stream` yield `StreamEvent`s (async iterators on `AsyncV1Client`); an `error` event raises | covered |
312
+ | `X-Cortex-Break-Glass: reason=…; ticket=…[; note=…]` (`operator_break_glass_v1`) | every operator-key request under `CORTEX_OPERATOR_DATA_READS=deny`, the tenant's or the deployment's | `client.break_glass(reason, ticket, note)`, `with_options(break_glass=...)`; `break_glass_header` checks the form | covered |
313
+ | `X-Cortex-Subject-Token` (`subject_token_shadow_v1`) | the trusted operator's requests | `with_options(subject_token=...)` | covered |
314
+ | Chain fields of a mint (`act`, `app`, `client`, `run`, `run_start`, `taint`; `mint_chain_v1`) and `tenant` | `POST /v1/auth/tokens` | `mint_token(...)`, `mint_agent_token`, `mint_app_token`; `check_mint` refuses locally what the server always refuses; `with_token` | covered |
315
+ | `purpose` (`read_purpose_v1`) | `/v1/recall`, `/v1/recall/stream`, `/v1/answer`, `/v1/compose`, `POST /v1/access/{check,explain}` | `purpose="..."` (`[a-z0-9_-]{1,64}`, a `ValueError` otherwise); a read refused for want of its purpose raises `PolicyDeniedError` with `reason == "purpose_required"` and `purpose` | covered |
316
+ | `?scope=` on the by-id reads (a scope that does not hold the row is 404) | `/v1/facts/{id}`, `/v1/beliefs/{why,history}`, `/v1/concepts/{id}[/history,/related]`, `/v1/understanding/{id}[/history,/related]`, `/v1/conflicts/{id}[/resolve]`, `/v1/lifecycle/event/{id}`, `/v1/admin/events/{id}/chunks`, `/v1/erasures/{id}[/receipt,/verify]` | `scope=` | covered |
317
+ | `include_vectors=true` | the layer listings and the fact and concept reads by id | `include_vectors=True` | covered |
318
+ | Paging: `cursor` / `next_cursor` / `has_more` (the events' `le1.` cursor newest first, the scope list, the layers) | `GET /v1/events`, `/v1/scopes/list`, `/v1/facts`, `/v1/beliefs`, `/v1/episodes`, `/v1/understanding`, `/v1/concepts` and the access listings | `cursor=`, `pages(method, ...)` | covered |
319
+ | `as_of` on the timeline; `?at_least=` and the token on `GET /v1/access/records`; `?consistency=1` on `POST /v1/publish` | those routes | `as_of=`, `at_least=`, `consistency=True` | covered |
320
+ | `idempotency_key` on a declared belief; `owner` on `POST /v1/scopes`; `scope` on a temporal phrase; `batch_id` on the lifecycle stream | those routes | `idempotency_key=`, `owner=`, `scope=`, `batch_id=` | covered |
321
+ | `events_under_legal_hold`, `derived_under_legal_hold`, and `matched` counting what a hold kept | `POST /v1/forget`, `/v1/forget/preview` | in the answer (documented on both methods) | covered |
322
+ | `in_band`, `in_band_parts` of a change set's preview; the operator key's in-band activation under `deny` (`BREAK_GLASS_REQUIRED` class `in_band`, `NOTICE_UNAVAILABLE`, `REGISTRY_STALE`) | `POST /v1/access/changes/{id}/preview`, `/activate` | `ChangeSetPreview` in `cortexdb.v1.models`; `client.break_glass(...).changeset_activate(...)` | covered |
323
+ | `deployment_mode` (`tenant_access_settings_v1`) | `GET`, `PUT /v1/admin/access/tenant-settings`; the access report's `tenant_settings` | `TenantAccessSettings` in `cortexdb.v1.models` | covered |
324
+ | `resend` of a write status (`"no"` for a failed write, never re-sent; `"new_key"` gone) | `GET /v1/experience/status` | `write_status(...)`; `IndexingFailedError` says never to re-send | covered |
325
+ | An omitted `X-Cortex-Actor` (issuers-file `prefix`, `hash` and `directory` tokens; SCIM clients) | every route | `actor=None`, `with_options(actor=None)`; derived from a token's `sub` when no `actor` is given (none for a mapped subject) | covered |
326
+ | `view` left to the server (granular at an org tree's shared scope) | `/v1/recall`, `/v1/answer`, `/v1/compose` | `view=None` (the default) | covered |
327
+ | Typed errors with `retriable` and `details` | every route | one class per code (`cortexdb.v1.errors`, 362 codes from `scripts/error_codes.json`, built from the error catalog, `docs/API_REFERENCE_V1.md` §16) under status-family classes; documented `details` keys as properties; `retry_after` | covered |