engraphis 1.5__tar.gz → 1.6__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 (515) hide show
  1. {engraphis-1.5 → engraphis-1.6}/.env.example +22 -17
  2. {engraphis-1.5 → engraphis-1.6}/BENCHMARKS.md +108 -100
  3. {engraphis-1.5 → engraphis-1.6}/CHANGELOG.md +385 -2
  4. {engraphis-1.5 → engraphis-1.6}/Dockerfile +2 -1
  5. {engraphis-1.5 → engraphis-1.6}/MANIFEST.in +3 -0
  6. {engraphis-1.5 → engraphis-1.6}/NOTICE +5 -2
  7. {engraphis-1.5 → engraphis-1.6}/PKG-INFO +168 -95
  8. {engraphis-1.5 → engraphis-1.6}/README.md +798 -727
  9. engraphis-1.6/deploy/force-graph-1.51.4.licenses.json +399 -0
  10. engraphis-1.6/deploy/force-graph-1.51.4.yarn.lock +2344 -0
  11. engraphis-1.6/docs/DOCUMENT_IMPORT.md +148 -0
  12. engraphis-1.6/docs/OBSIDIAN_IMPORT.md +123 -0
  13. {engraphis-1.5 → engraphis-1.6}/docs/RECALL_RECOVERY.md +30 -3
  14. engraphis-1.6/docs/images/context-efficiency.svg +41 -0
  15. {engraphis-1.5 → engraphis-1.6}/engraphis/__init__.py +25 -2
  16. {engraphis-1.5 → engraphis-1.6}/engraphis/app.py +90 -56
  17. {engraphis-1.5 → engraphis-1.6}/engraphis/backends/codegraph.py +153 -18
  18. {engraphis-1.5 → engraphis-1.6}/engraphis/backends/embedder_api.py +38 -5
  19. {engraphis-1.5 → engraphis-1.6}/engraphis/backends/embedder_deterministic.py +7 -1
  20. engraphis-1.6/engraphis/backends/embedder_st.py +350 -0
  21. {engraphis-1.5 → engraphis-1.6}/engraphis/backends/encrypted_db.py +133 -48
  22. {engraphis-1.5 → engraphis-1.6}/engraphis/backends/extractor.py +157 -17
  23. {engraphis-1.5 → engraphis-1.6}/engraphis/backends/graph_extractor.py +17 -3
  24. {engraphis-1.5 → engraphis-1.6}/engraphis/backends/postgres_schema.py +66 -27
  25. engraphis-1.6/engraphis/backends/query_planner.py +151 -0
  26. {engraphis-1.5 → engraphis-1.6}/engraphis/backends/reranker.py +24 -5
  27. {engraphis-1.5 → engraphis-1.6}/engraphis/backends/resources.py +126 -69
  28. {engraphis-1.5 → engraphis-1.6}/engraphis/backends/retention.py +32 -2
  29. {engraphis-1.5 → engraphis-1.6}/engraphis/backends/sync_folder.py +48 -21
  30. {engraphis-1.5 → engraphis-1.6}/engraphis/backends/sync_relay.py +116 -33
  31. {engraphis-1.5 → engraphis-1.6}/engraphis/backends/vector_numpy.py +15 -3
  32. engraphis-1.6/engraphis/backends/vector_sqlitevec.py +565 -0
  33. {engraphis-1.5/engraphis/static → engraphis-1.6/engraphis/classic_assets}/dashboard.css +10 -3
  34. {engraphis-1.5 → engraphis-1.6}/engraphis/classic_assets/dashboard.js +1793 -1698
  35. {engraphis-1.5 → engraphis-1.6}/engraphis/classic_assets/index.html +22 -10
  36. engraphis-1.6/engraphis/classic_assets/vendor/d3.min.js +2 -0
  37. engraphis-1.6/engraphis/classic_assets/vendor/force-graph.min.js +5 -0
  38. engraphis-1.6/engraphis/cloud_authz.py +138 -0
  39. {engraphis-1.5 → engraphis-1.6}/engraphis/cloud_features.py +7 -2
  40. {engraphis-1.5 → engraphis-1.6}/engraphis/cloud_session.py +106 -12
  41. {engraphis-1.5 → engraphis-1.6}/engraphis/commercial_manifest.json +1 -1
  42. {engraphis-1.5 → engraphis-1.6}/engraphis/config.py +428 -45
  43. {engraphis-1.5 → engraphis-1.6}/engraphis/core/__init__.py +4 -2
  44. {engraphis-1.5 → engraphis-1.6}/engraphis/core/consolidate.py +482 -183
  45. {engraphis-1.5 → engraphis-1.6}/engraphis/core/context.py +102 -9
  46. engraphis-1.6/engraphis/core/documents.py +1759 -0
  47. {engraphis-1.5 → engraphis-1.6}/engraphis/core/engine.py +1970 -609
  48. engraphis-1.6/engraphis/core/fsutil.py +47 -0
  49. engraphis-1.6/engraphis/core/graph_scene.py +3082 -0
  50. {engraphis-1.5 → engraphis-1.6}/engraphis/core/graphrank.py +34 -1
  51. {engraphis-1.5 → engraphis-1.6}/engraphis/core/grounded.py +36 -14
  52. {engraphis-1.5 → engraphis-1.6}/engraphis/core/ids.py +12 -1
  53. {engraphis-1.5 → engraphis-1.6}/engraphis/core/interfaces.py +217 -9
  54. engraphis-1.6/engraphis/core/obsidian.py +569 -0
  55. {engraphis-1.5 → engraphis-1.6}/engraphis/core/poisoning.py +50 -1
  56. {engraphis-1.5 → engraphis-1.6}/engraphis/core/query_planner.py +11 -6
  57. {engraphis-1.5 → engraphis-1.6}/engraphis/core/recall.py +248 -127
  58. {engraphis-1.5 → engraphis-1.6}/engraphis/core/schema.py +298 -4
  59. {engraphis-1.5 → engraphis-1.6}/engraphis/core/scoring.py +12 -1
  60. {engraphis-1.5 → engraphis-1.6}/engraphis/core/store.py +3180 -411
  61. {engraphis-1.5 → engraphis-1.6}/engraphis/core/sync.py +951 -239
  62. {engraphis-1.5 → engraphis-1.6}/engraphis/core/user_model.py +56 -18
  63. engraphis-1.6/engraphis/dashboard_app.py +1365 -0
  64. engraphis-1.6/engraphis/dashboard_assets/engraphis-graph-every-worker.js +429 -0
  65. engraphis-1.6/engraphis/dashboard_assets/engraphis-graph-every.js +1529 -0
  66. engraphis-1.6/engraphis/dashboard_assets/engraphis-graph.js +10562 -0
  67. engraphis-1.6/engraphis/dashboard_assets/engraphis-spacetime.js +276 -0
  68. {engraphis-1.5 → engraphis-1.6}/engraphis/dashboard_assets/index.html +128 -33
  69. {engraphis-1.5 → engraphis-1.6}/engraphis/dashboard_assets/ledger.css +307 -29
  70. {engraphis-1.5 → engraphis-1.6}/engraphis/dashboard_assets/ledger.js +2061 -235
  71. engraphis-1.6/engraphis/dashboard_assets/vendor/d3.min.js +2 -0
  72. engraphis-1.6/engraphis/dashboard_assets/vendor/force-graph.min.js +5 -0
  73. engraphis-1.6/engraphis/dashboard_assets/vendor/manifest.json +29 -0
  74. {engraphis-1.5 → engraphis-1.6}/engraphis/device_connect.py +5 -0
  75. engraphis-1.6/engraphis/document_import.py +278 -0
  76. {engraphis-1.5 → engraphis-1.6}/engraphis/engines/embedder.py +44 -3
  77. {engraphis-1.5 → engraphis-1.6}/engraphis/engines/ingest.py +165 -65
  78. {engraphis-1.5 → engraphis-1.6}/engraphis/engines/intelligence.py +22 -11
  79. {engraphis-1.5 → engraphis-1.6}/engraphis/engines/recall.py +14 -9
  80. engraphis-1.6/engraphis/engines/reweight.py +166 -0
  81. {engraphis-1.5 → engraphis-1.6}/engraphis/engines/thoughts.py +9 -1
  82. engraphis-1.6/engraphis/factory.py +200 -0
  83. {engraphis-1.5 → engraphis-1.6}/engraphis/graphdata.py +12 -3
  84. {engraphis-1.5 → engraphis-1.6}/engraphis/hosted_client.py +1 -0
  85. {engraphis-1.5 → engraphis-1.6}/engraphis/http_security.py +7 -0
  86. {engraphis-1.5 → engraphis-1.6}/engraphis/inspector/app.py +87 -47
  87. {engraphis-1.5 → engraphis-1.6}/engraphis/llm/client.py +280 -12
  88. {engraphis-1.5 → engraphis-1.6}/engraphis/mcp_classic_cli.py +7 -0
  89. {engraphis-1.5 → engraphis-1.6}/engraphis/mcp_cli.py +1 -1
  90. {engraphis-1.5 → engraphis-1.6}/engraphis/mcp_http_cli.py +36 -1
  91. {engraphis-1.5 → engraphis-1.6}/engraphis/mcp_server.py +480 -94
  92. engraphis-1.6/engraphis/models.py +254 -0
  93. engraphis-1.6/engraphis/obsidian_import.py +1583 -0
  94. {engraphis-1.5 → engraphis-1.6}/engraphis/private_state.py +148 -9
  95. engraphis-1.6/engraphis/read_only_api.py +406 -0
  96. {engraphis-1.5 → engraphis-1.6}/engraphis/routes/memory.py +150 -76
  97. {engraphis-1.5 → engraphis-1.6}/engraphis/routes/v2_api.py +574 -206
  98. {engraphis-1.5 → engraphis-1.6}/engraphis/routes/vault.py +369 -147
  99. {engraphis-1.5 → engraphis-1.6}/engraphis/service.py +4138 -457
  100. {engraphis-1.5/engraphis/classic_assets → engraphis-1.6/engraphis/static}/dashboard.css +10 -3
  101. {engraphis-1.5 → engraphis-1.6}/engraphis/static/dashboard.js +1793 -1698
  102. {engraphis-1.5 → engraphis-1.6}/engraphis/static/index.html +354 -342
  103. engraphis-1.6/engraphis/static/vendor/d3.min.js +2 -0
  104. engraphis-1.6/engraphis/static/vendor/force-graph.min.js +5 -0
  105. {engraphis-1.5 → engraphis-1.6}/engraphis/stores/__init__.py +92 -1
  106. engraphis-1.6/engraphis/stores/graph.py +296 -0
  107. {engraphis-1.5 → engraphis-1.6}/engraphis/stores/ledger.py +52 -14
  108. {engraphis-1.5 → engraphis-1.6}/engraphis/stores/vaults.py +72 -17
  109. {engraphis-1.5 → engraphis-1.6}/engraphis/stores/vectors.py +223 -82
  110. {engraphis-1.5 → engraphis-1.6}/engraphis/update_check.py +153 -52
  111. {engraphis-1.5 → engraphis-1.6}/engraphis.egg-info/PKG-INFO +168 -95
  112. {engraphis-1.5 → engraphis-1.6}/engraphis.egg-info/SOURCES.txt +52 -1
  113. {engraphis-1.5 → engraphis-1.6}/engraphis.egg-info/entry_points.txt +2 -0
  114. {engraphis-1.5 → engraphis-1.6}/engraphis.egg-info/requires.txt +7 -7
  115. {engraphis-1.5 → engraphis-1.6}/eval/EVIDENCE.md +9 -0
  116. {engraphis-1.5 → engraphis-1.6}/eval/ablation.py +29 -6
  117. {engraphis-1.5 → engraphis-1.6}/eval/agent_benchmarks.py +1 -0
  118. {engraphis-1.5 → engraphis-1.6}/eval/benchmark.py +74 -83
  119. engraphis-1.6/eval/code_arm.py +183 -0
  120. {engraphis-1.5 → engraphis-1.6}/eval/configs/longmemeval_v2_engraphis_planner_type_limits.json +1 -1
  121. {engraphis-1.5 → engraphis-1.6}/eval/configs/longmemeval_v2_engraphis_type_limits.json +1 -1
  122. engraphis-1.6/eval/context_efficiency_guardrails.py +146 -0
  123. engraphis-1.6/eval/datasets/code_arm.jsonl +2 -0
  124. engraphis-1.6/eval/datasets/handoff_quality.jsonl +3 -0
  125. engraphis-1.6/eval/datasets/sample.jsonl +7 -0
  126. engraphis-1.6/eval/extractor_quality.py +217 -0
  127. engraphis-1.6/eval/graph_every_bench.py +67 -0
  128. {engraphis-1.5 → engraphis-1.6}/eval/grounded.py +11 -0
  129. engraphis-1.6/eval/handoff_quality.py +297 -0
  130. {engraphis-1.5 → engraphis-1.6}/eval/harness.py +209 -33
  131. {engraphis-1.5 → engraphis-1.6}/eval/hosted_ledger.py +61 -16
  132. {engraphis-1.5 → engraphis-1.6}/eval/longmemeval_v2.py +58 -4
  133. engraphis-1.6/eval/longmemeval_v2_evidence.py +603 -0
  134. {engraphis-1.5 → engraphis-1.6}/eval/longmemeval_v2_matrix.py +17 -4
  135. {engraphis-1.5 → engraphis-1.6}/eval/metrics.py +24 -8
  136. {engraphis-1.5 → engraphis-1.6}/eval/performance.py +10 -4
  137. {engraphis-1.5 → engraphis-1.6}/eval/productivity.py +7 -8
  138. {engraphis-1.5 → engraphis-1.6}/eval/public_readiness.py +79 -19
  139. {engraphis-1.5 → engraphis-1.6}/eval/reinforcement.py +26 -3
  140. engraphis-1.6/eval/run_longmemeval_v2.py +270 -0
  141. {engraphis-1.5 → engraphis-1.6}/pyproject.toml +18 -9
  142. {engraphis-1.5 → engraphis-1.6}/requirements.txt +1 -0
  143. {engraphis-1.5 → engraphis-1.6}/scripts/approve_memory.py +1 -2
  144. {engraphis-1.5 → engraphis-1.6}/scripts/backfill_graph.py +62 -60
  145. {engraphis-1.5 → engraphis-1.6}/scripts/check_codeql_sarif.py +82 -5
  146. {engraphis-1.5 → engraphis-1.6}/scripts/cli.py +145 -54
  147. {engraphis-1.5 → engraphis-1.6}/scripts/connect.py +1 -1
  148. {engraphis-1.5 → engraphis-1.6}/scripts/consolidate.py +10 -11
  149. {engraphis-1.5 → engraphis-1.6}/scripts/entry.py +4 -0
  150. {engraphis-1.5 → engraphis-1.6}/scripts/externalize_dashboard_assets.py +26 -5
  151. {engraphis-1.5 → engraphis-1.6}/scripts/graph_cli.py +63 -37
  152. {engraphis-1.5 → engraphis-1.6}/scripts/graph_server.py +1 -1
  153. engraphis-1.6/scripts/importer.py +528 -0
  154. {engraphis-1.5 → engraphis-1.6}/scripts/init.py +86 -56
  155. {engraphis-1.5 → engraphis-1.6}/scripts/install_shortcuts.py +186 -64
  156. engraphis-1.6/scripts/migrate_to_v2.py +771 -0
  157. engraphis-1.6/scripts/release_evidence.py +1159 -0
  158. engraphis-1.6/scripts/repair_embed_dim.py +150 -0
  159. engraphis-1.6/scripts/sdk_compat.py +74 -0
  160. engraphis-1.6/scripts/seed_from_obsidian.py +80 -0
  161. {engraphis-1.5 → engraphis-1.6}/scripts/smoke_entry_points.py +2 -0
  162. {engraphis-1.5 → engraphis-1.6}/scripts/start_dashboard.py +127 -7
  163. {engraphis-1.5 → engraphis-1.6}/scripts/sync.py +221 -26
  164. {engraphis-1.5 → engraphis-1.6}/scripts/test_routes.py +6 -1
  165. {engraphis-1.5 → engraphis-1.6}/scripts/update.py +203 -98
  166. engraphis-1.6/scripts/validate_compose_contract.py +164 -0
  167. {engraphis-1.5 → engraphis-1.6}/scripts/verify_distribution_contents.py +4 -0
  168. engraphis-1.6/scripts/watch_repo.py +476 -0
  169. {engraphis-1.5 → engraphis-1.6}/tests/test_agent_connect.py +30 -0
  170. {engraphis-1.5 → engraphis-1.6}/tests/test_backends_factories.py +195 -18
  171. {engraphis-1.5 → engraphis-1.6}/tests/test_benchmark_evidence.py +225 -90
  172. {engraphis-1.5 → engraphis-1.6}/tests/test_benchmark_longmemeval_v2.py +147 -1
  173. engraphis-1.6/tests/test_bounded_uploads.py +110 -0
  174. {engraphis-1.5 → engraphis-1.6}/tests/test_canonical_export.py +31 -0
  175. {engraphis-1.5 → engraphis-1.6}/tests/test_chunking_extractor.py +159 -0
  176. engraphis-1.6/tests/test_cli_entrypoints.py +793 -0
  177. {engraphis-1.5 → engraphis-1.6}/tests/test_cloud_features.py +22 -0
  178. {engraphis-1.5 → engraphis-1.6}/tests/test_cloud_session.py +63 -0
  179. {engraphis-1.5 → engraphis-1.6}/tests/test_codegraph.py +85 -8
  180. {engraphis-1.5 → engraphis-1.6}/tests/test_codeql_sarif_gate.py +73 -0
  181. engraphis-1.6/tests/test_config.py +516 -0
  182. {engraphis-1.5 → engraphis-1.6}/tests/test_consolidate.py +897 -42
  183. {engraphis-1.5 → engraphis-1.6}/tests/test_consolidate_recall.py +156 -3
  184. {engraphis-1.5 → engraphis-1.6}/tests/test_context_economy.py +9 -0
  185. engraphis-1.6/tests/test_context_efficiency_guardrails.py +48 -0
  186. {engraphis-1.5 → engraphis-1.6}/tests/test_context_packing.py +98 -0
  187. engraphis-1.6/tests/test_core_ids.py +59 -0
  188. {engraphis-1.5 → engraphis-1.6}/tests/test_core_store.py +1469 -1
  189. {engraphis-1.5 → engraphis-1.6}/tests/test_dashboard_auth_placement.py +19 -1
  190. {engraphis-1.5 → engraphis-1.6}/tests/test_dashboard_button_regressions.py +7 -0
  191. {engraphis-1.5 → engraphis-1.6}/tests/test_dashboard_security_headers_and_open_window.py +11 -5
  192. {engraphis-1.5 → engraphis-1.6}/tests/test_dashboard_v2.py +2073 -1288
  193. engraphis-1.6/tests/test_dashboard_vendor_assets.py +47 -0
  194. {engraphis-1.5 → engraphis-1.6}/tests/test_db_path_default.py +105 -0
  195. engraphis-1.6/tests/test_deployment_mode_isolation.py +120 -0
  196. {engraphis-1.5 → engraphis-1.6}/tests/test_device_connect.py +49 -0
  197. engraphis-1.6/tests/test_document_import_cli.py +528 -0
  198. engraphis-1.6/tests/test_document_importer.py +565 -0
  199. engraphis-1.6/tests/test_documentation_contracts.py +294 -0
  200. engraphis-1.6/tests/test_documents.py +901 -0
  201. {engraphis-1.5 → engraphis-1.6}/tests/test_embedder_threading.py +25 -0
  202. {engraphis-1.5 → engraphis-1.6}/tests/test_embeddings.py +79 -2
  203. {engraphis-1.5 → engraphis-1.6}/tests/test_encrypted_store.py +135 -0
  204. engraphis-1.6/tests/test_encryption_dependency.py +257 -0
  205. {engraphis-1.5 → engraphis-1.6}/tests/test_engine.py +1152 -0
  206. engraphis-1.6/tests/test_envelope_additions_v16.py +142 -0
  207. {engraphis-1.5 → engraphis-1.6}/tests/test_eval_agent_benchmarks.py +45 -1
  208. engraphis-1.6/tests/test_eval_code_arm.py +29 -0
  209. {engraphis-1.5 → engraphis-1.6}/tests/test_eval_harness.py +119 -8
  210. {engraphis-1.5 → engraphis-1.6}/tests/test_eval_performance.py +1 -1
  211. engraphis-1.6/tests/test_eval_reinforcement.py +24 -0
  212. engraphis-1.6/tests/test_extractor.py +324 -0
  213. engraphis-1.6/tests/test_fsutil.py +65 -0
  214. {engraphis-1.5 → engraphis-1.6}/tests/test_graph_cli.py +22 -0
  215. engraphis-1.6/tests/test_graph_engine_asset.py +11522 -0
  216. engraphis-1.6/tests/test_graph_every_asset.py +429 -0
  217. engraphis-1.6/tests/test_graph_explorer_v2.py +4348 -0
  218. engraphis-1.6/tests/test_graph_scene_contract.py +170 -0
  219. {engraphis-1.5 → engraphis-1.6}/tests/test_graph_server.py +18 -5
  220. {engraphis-1.5 → engraphis-1.6}/tests/test_graph_trust_backfill.py +50 -0
  221. {engraphis-1.5 → engraphis-1.6}/tests/test_graphdata.py +30 -5
  222. {engraphis-1.5 → engraphis-1.6}/tests/test_grounded.py +38 -0
  223. {engraphis-1.5 → engraphis-1.6}/tests/test_hosted_client.py +1 -0
  224. {engraphis-1.5 → engraphis-1.6}/tests/test_hosted_ledger.py +158 -0
  225. {engraphis-1.5 → engraphis-1.6}/tests/test_hosted_plan_resolution.py +104 -5
  226. engraphis-1.6/tests/test_hotfix_security.py +33 -0
  227. {engraphis-1.5 → engraphis-1.6}/tests/test_http_security.py +26 -0
  228. {engraphis-1.5 → engraphis-1.6}/tests/test_import_chunking.py +28 -1
  229. {engraphis-1.5 → engraphis-1.6}/tests/test_import_error_redaction.py +5 -1
  230. {engraphis-1.5 → engraphis-1.6}/tests/test_ingest_entities.py +2 -0
  231. {engraphis-1.5 → engraphis-1.6}/tests/test_init.py +86 -25
  232. {engraphis-1.5 → engraphis-1.6}/tests/test_inspector.py +118 -0
  233. {engraphis-1.5 → engraphis-1.6}/tests/test_inspector_pro.py +16 -0
  234. {engraphis-1.5 → engraphis-1.6}/tests/test_install_shortcuts.py +119 -11
  235. engraphis-1.6/tests/test_intelligence.py +34 -0
  236. {engraphis-1.5 → engraphis-1.6}/tests/test_legacy_reference_surface.py +49 -0
  237. {engraphis-1.5 → engraphis-1.6}/tests/test_llm_dashboard.py +66 -3
  238. engraphis-1.6/tests/test_local_isolation.py +59 -0
  239. engraphis-1.6/tests/test_longmemeval_v2_evidence.py +371 -0
  240. engraphis-1.6/tests/test_longmemeval_v2_matrix.py +27 -0
  241. {engraphis-1.5 → engraphis-1.6}/tests/test_mcp_annotation_idempotency.py +7 -4
  242. {engraphis-1.5 → engraphis-1.6}/tests/test_mcp_server.py +480 -4
  243. {engraphis-1.5 → engraphis-1.6}/tests/test_memory_routes_fixes.py +276 -13
  244. {engraphis-1.5 → engraphis-1.6}/tests/test_metadata_activity_forgery.py +11 -0
  245. {engraphis-1.5 → engraphis-1.6}/tests/test_migration.py +210 -0
  246. engraphis-1.6/tests/test_obsidian_cli.py +222 -0
  247. engraphis-1.6/tests/test_obsidian_import_schema.py +694 -0
  248. engraphis-1.6/tests/test_obsidian_importer.py +813 -0
  249. engraphis-1.6/tests/test_obsidian_parser.py +193 -0
  250. engraphis-1.6/tests/test_obsidian_service.py +444 -0
  251. {engraphis-1.5 → engraphis-1.6}/tests/test_packaging.py +150 -7
  252. engraphis-1.6/tests/test_parse_provider_chain.py +139 -0
  253. {engraphis-1.5 → engraphis-1.6}/tests/test_planned_recall.py +85 -2
  254. {engraphis-1.5 → engraphis-1.6}/tests/test_poisoning.py +57 -1
  255. {engraphis-1.5 → engraphis-1.6}/tests/test_postgres_schema.py +305 -4
  256. {engraphis-1.5 → engraphis-1.6}/tests/test_pro_cta.py +4 -1
  257. {engraphis-1.5 → engraphis-1.6}/tests/test_productivity_eval.py +44 -0
  258. {engraphis-1.5 → engraphis-1.6}/tests/test_provider_error_redaction.py +3 -2
  259. {engraphis-1.5 → engraphis-1.6}/tests/test_public_readiness.py +73 -2
  260. {engraphis-1.5 → engraphis-1.6}/tests/test_public_research_boundary.py +15 -1
  261. {engraphis-1.5 → engraphis-1.6}/tests/test_railway_runtime.py +30 -1
  262. {engraphis-1.5 → engraphis-1.6}/tests/test_read_only_api.py +214 -1
  263. engraphis-1.6/tests/test_ready.py +163 -0
  264. {engraphis-1.5 → engraphis-1.6}/tests/test_recall.py +147 -0
  265. {engraphis-1.5 → engraphis-1.6}/tests/test_recall_recovery.py +73 -0
  266. {engraphis-1.5 → engraphis-1.6}/tests/test_receipts.py +90 -0
  267. engraphis-1.6/tests/test_release_evidence.py +1324 -0
  268. {engraphis-1.5 → engraphis-1.6}/tests/test_release_infrastructure.py +119 -25
  269. engraphis-1.6/tests/test_remember_many.py +368 -0
  270. engraphis-1.6/tests/test_resources.py +300 -0
  271. {engraphis-1.5 → engraphis-1.6}/tests/test_retention.py +22 -0
  272. {engraphis-1.5 → engraphis-1.6}/tests/test_round17_fixes.py +29 -2
  273. {engraphis-1.5 → engraphis-1.6}/tests/test_savings.py +420 -218
  274. {engraphis-1.5 → engraphis-1.6}/tests/test_scoring.py +20 -0
  275. engraphis-1.6/tests/test_screen_demo.py +33 -0
  276. {engraphis-1.5 → engraphis-1.6}/tests/test_secret_hygiene.py +269 -2
  277. {engraphis-1.5 → engraphis-1.6}/tests/test_service.py +796 -12
  278. {engraphis-1.5 → engraphis-1.6}/tests/test_service_graph.py +506 -16
  279. engraphis-1.6/tests/test_setup_plugin_distribution.py +91 -0
  280. engraphis-1.6/tests/test_skill_package.py +132 -0
  281. {engraphis-1.5 → engraphis-1.6}/tests/test_smart_mcp_gateway.py +65 -5
  282. {engraphis-1.5 → engraphis-1.6}/tests/test_start_dashboard.py +142 -6
  283. engraphis-1.6/tests/test_store_class_integrity.py +172 -0
  284. {engraphis-1.5 → engraphis-1.6}/tests/test_store_v4_migration.py +222 -1
  285. {engraphis-1.5 → engraphis-1.6}/tests/test_sync.py +1615 -117
  286. {engraphis-1.5 → engraphis-1.6}/tests/test_sync_cli.py +170 -8
  287. {engraphis-1.5 → engraphis-1.6}/tests/test_sync_e2ee.py +96 -3
  288. {engraphis-1.5 → engraphis-1.6}/tests/test_sync_tombstones.py +299 -20
  289. {engraphis-1.5 → engraphis-1.6}/tests/test_update.py +36 -0
  290. {engraphis-1.5 → engraphis-1.6}/tests/test_update_check.py +429 -302
  291. {engraphis-1.5 → engraphis-1.6}/tests/test_user_model.py +58 -0
  292. engraphis-1.6/tests/test_v1_auto_migrate.py +335 -0
  293. {engraphis-1.5 → engraphis-1.6}/tests/test_v1_hardening.py +62 -1
  294. engraphis-1.6/tests/test_v1_ingest_trust.py +324 -0
  295. {engraphis-1.5 → engraphis-1.6}/tests/test_v1_licensing.py +20 -0
  296. engraphis-1.6/tests/test_v2_service_binding.py +536 -0
  297. {engraphis-1.5 → engraphis-1.6}/tests/test_vector_numpy.py +37 -2
  298. engraphis-1.6/tests/test_vector_sqlitevec_backend.py +703 -0
  299. {engraphis-1.5 → engraphis-1.6}/tests/test_workspace_ops.py +342 -1
  300. engraphis-1.5/docs/images/context-efficiency.svg +0 -106
  301. engraphis-1.5/engraphis/backends/embedder_st.py +0 -163
  302. engraphis-1.5/engraphis/backends/query_planner.py +0 -93
  303. engraphis-1.5/engraphis/backends/vector_sqlitevec.py +0 -286
  304. engraphis-1.5/engraphis/classic_assets/vendor/d3.min.js +0 -2
  305. engraphis-1.5/engraphis/classic_assets/vendor/force-graph.min.js +0 -5
  306. engraphis-1.5/engraphis/core/graph_scene.py +0 -1742
  307. engraphis-1.5/engraphis/dashboard_app.py +0 -532
  308. engraphis-1.5/engraphis/dashboard_assets/engraphis-graph.js +0 -2273
  309. engraphis-1.5/engraphis/dashboard_assets/vendor/d3.min.js +0 -2
  310. engraphis-1.5/engraphis/dashboard_assets/vendor/force-graph.min.js +0 -5
  311. engraphis-1.5/engraphis/engines/reweight.py +0 -115
  312. engraphis-1.5/engraphis/models.py +0 -180
  313. engraphis-1.5/engraphis/read_only_api.py +0 -229
  314. engraphis-1.5/engraphis/static/vendor/d3.min.js +0 -2
  315. engraphis-1.5/engraphis/static/vendor/force-graph.min.js +0 -5
  316. engraphis-1.5/engraphis/stores/graph.py +0 -141
  317. engraphis-1.5/eval/datasets/sample.jsonl +0 -4
  318. engraphis-1.5/eval/longmemeval_v2_evidence.py +0 -349
  319. engraphis-1.5/eval/run_longmemeval_v2.py +0 -110
  320. engraphis-1.5/scripts/migrate_to_v2.py +0 -425
  321. engraphis-1.5/scripts/release_evidence.py +0 -464
  322. engraphis-1.5/scripts/repair_embed_dim.py +0 -97
  323. engraphis-1.5/scripts/sdk_compat.py +0 -45
  324. engraphis-1.5/scripts/seed_from_obsidian.py +0 -98
  325. engraphis-1.5/tests/test_cli_entrypoints.py +0 -342
  326. engraphis-1.5/tests/test_config.py +0 -217
  327. engraphis-1.5/tests/test_core_ids.py +0 -22
  328. engraphis-1.5/tests/test_encryption_dependency.py +0 -28
  329. engraphis-1.5/tests/test_extractor.py +0 -140
  330. engraphis-1.5/tests/test_graph_engine_asset.py +0 -2459
  331. engraphis-1.5/tests/test_graph_explorer_v2.py +0 -1828
  332. engraphis-1.5/tests/test_graph_scene_contract.py +0 -64
  333. engraphis-1.5/tests/test_hermes_integration.py +0 -85
  334. engraphis-1.5/tests/test_longmemeval_v2_evidence.py +0 -172
  335. engraphis-1.5/tests/test_longmemeval_v2_matrix.py +0 -15
  336. engraphis-1.5/tests/test_ready.py +0 -101
  337. engraphis-1.5/tests/test_release_evidence.py +0 -285
  338. engraphis-1.5/tests/test_resources.py +0 -125
  339. engraphis-1.5/tests/test_v1_auto_migrate.py +0 -126
  340. engraphis-1.5/tests/test_v1_ingest_trust.py +0 -151
  341. engraphis-1.5/tests/test_v2_service_binding.py +0 -57
  342. engraphis-1.5/tests/test_vector_sqlitevec_backend.py +0 -309
  343. {engraphis-1.5 → engraphis-1.6}/LICENSE +0 -0
  344. {engraphis-1.5 → engraphis-1.6}/docker-compose.lan.yml +0 -0
  345. {engraphis-1.5 → engraphis-1.6}/docker-compose.yml +0 -0
  346. {engraphis-1.5 → engraphis-1.6}/docker-entrypoint.sh +0 -0
  347. {engraphis-1.5 → engraphis-1.6}/engraphis/ai_context.py +0 -0
  348. {engraphis-1.5 → engraphis-1.6}/engraphis/backends/__init__.py +0 -0
  349. {engraphis-1.5 → engraphis-1.6}/engraphis/backends/model_source.py +0 -0
  350. {engraphis-1.5 → engraphis-1.6}/engraphis/classic_assets/__init__.py +0 -0
  351. {engraphis-1.5 → engraphis-1.6}/engraphis/classic_assets/engraphis-graph.js +0 -0
  352. {engraphis-1.5 → engraphis-1.6}/engraphis/classic_assets/engraphis-icon.png +0 -0
  353. {engraphis-1.5 → engraphis-1.6}/engraphis/classic_assets/engraphis.ico +0 -0
  354. {engraphis-1.5 → engraphis-1.6}/engraphis/classic_assets/favicon-32.png +0 -0
  355. {engraphis-1.5 → engraphis-1.6}/engraphis/classic_assets/vendor/d3.LICENSE +0 -0
  356. {engraphis-1.5 → engraphis-1.6}/engraphis/classic_assets/vendor/force-graph.LICENSE +0 -0
  357. {engraphis-1.5 → engraphis-1.6}/engraphis/classic_assets/vendor/marked.LICENSE +0 -0
  358. {engraphis-1.5 → engraphis-1.6}/engraphis/classic_assets/vendor/marked.min.js +0 -0
  359. {engraphis-1.5 → engraphis-1.6}/engraphis/classic_assets/vendor/purify.min.js +0 -0
  360. {engraphis-1.5 → engraphis-1.6}/engraphis/commercial.py +0 -0
  361. {engraphis-1.5 → engraphis-1.6}/engraphis/core/adaptive_context.py +0 -0
  362. {engraphis-1.5 → engraphis-1.6}/engraphis/core/codegraph_export.py +0 -0
  363. {engraphis-1.5 → engraphis-1.6}/engraphis/core/conflicts.py +0 -0
  364. {engraphis-1.5 → engraphis-1.6}/engraphis/core/graph_layers.py +0 -0
  365. {engraphis-1.5 → engraphis-1.6}/engraphis/core/graph_policy.py +0 -0
  366. {engraphis-1.5 → engraphis-1.6}/engraphis/core/resolve.py +0 -0
  367. {engraphis-1.5 → engraphis-1.6}/engraphis/core/retention_policy.py +0 -0
  368. {engraphis-1.5 → engraphis-1.6}/engraphis/core/retrieval_policy.py +0 -0
  369. {engraphis-1.5 → engraphis-1.6}/engraphis/core/savings.py +0 -0
  370. {engraphis-1.5 → engraphis-1.6}/engraphis/core/secrets.py +0 -0
  371. {engraphis-1.5 → engraphis-1.6}/engraphis/core/textutil.py +0 -0
  372. {engraphis-1.5 → engraphis-1.6}/engraphis/dashboard_assets/__init__.py +0 -0
  373. {engraphis-1.5 → engraphis-1.6}/engraphis/dashboard_assets/engraphis-graph-compat.js +0 -0
  374. {engraphis-1.5 → engraphis-1.6}/engraphis/dashboard_assets/engraphis-icon.png +0 -0
  375. {engraphis-1.5 → engraphis-1.6}/engraphis/dashboard_assets/engraphis.ico +0 -0
  376. {engraphis-1.5 → engraphis-1.6}/engraphis/dashboard_assets/favicon-32.png +0 -0
  377. {engraphis-1.5 → engraphis-1.6}/engraphis/dashboard_assets/vendor/d3.LICENSE +0 -0
  378. {engraphis-1.5 → engraphis-1.6}/engraphis/dashboard_assets/vendor/force-graph.LICENSE +0 -0
  379. {engraphis-1.5 → engraphis-1.6}/engraphis/engines/__init__.py +0 -0
  380. {engraphis-1.5 → engraphis-1.6}/engraphis/inspector/__init__.py +0 -0
  381. {engraphis-1.5 → engraphis-1.6}/engraphis/licensing.py +0 -0
  382. {engraphis-1.5 → engraphis-1.6}/engraphis/llm/__init__.py +0 -0
  383. {engraphis-1.5 → engraphis-1.6}/engraphis/local_auth.py +0 -0
  384. {engraphis-1.5 → engraphis-1.6}/engraphis/logging_setup.py +0 -0
  385. {engraphis-1.5 → engraphis-1.6}/engraphis/netutil.py +0 -0
  386. {engraphis-1.5 → engraphis-1.6}/engraphis/observability.py +0 -0
  387. {engraphis-1.5 → engraphis-1.6}/engraphis/redirector.py +0 -0
  388. {engraphis-1.5 → engraphis-1.6}/engraphis/routes/__init__.py +0 -0
  389. {engraphis-1.5 → engraphis-1.6}/engraphis/static/__init__.py +0 -0
  390. {engraphis-1.5 → engraphis-1.6}/engraphis/static/engraphis-graph.js +0 -0
  391. {engraphis-1.5 → engraphis-1.6}/engraphis/static/engraphis-icon.png +0 -0
  392. {engraphis-1.5 → engraphis-1.6}/engraphis/static/engraphis.ico +0 -0
  393. {engraphis-1.5 → engraphis-1.6}/engraphis/static/favicon-32.png +0 -0
  394. {engraphis-1.5 → engraphis-1.6}/engraphis/static/vendor/d3.LICENSE +0 -0
  395. {engraphis-1.5 → engraphis-1.6}/engraphis/static/vendor/force-graph.LICENSE +0 -0
  396. {engraphis-1.5 → engraphis-1.6}/engraphis/static/vendor/marked.LICENSE +0 -0
  397. {engraphis-1.5 → engraphis-1.6}/engraphis/static/vendor/marked.min.js +0 -0
  398. {engraphis-1.5 → engraphis-1.6}/engraphis/static/vendor/purify.min.js +0 -0
  399. {engraphis-1.5 → engraphis-1.6}/engraphis.egg-info/dependency_links.txt +0 -0
  400. {engraphis-1.5 → engraphis-1.6}/engraphis.egg-info/top_level.txt +0 -0
  401. {engraphis-1.5 → engraphis-1.6}/eval/BASELINES.md +0 -0
  402. {engraphis-1.5 → engraphis-1.6}/eval/__init__.py +0 -0
  403. {engraphis-1.5 → engraphis-1.6}/eval/adversarial_memory_security.py +0 -0
  404. {engraphis-1.5 → engraphis-1.6}/eval/chunking_eval.py +0 -0
  405. {engraphis-1.5 → engraphis-1.6}/eval/code_agent_ab.py +0 -0
  406. {engraphis-1.5 → engraphis-1.6}/eval/configs/longmemeval_v2_engraphis.json +0 -0
  407. {engraphis-1.5 → engraphis-1.6}/eval/configs/longmemeval_v2_engraphis_planner.json +0 -0
  408. {engraphis-1.5 → engraphis-1.6}/eval/consolidation_ranking.py +0 -0
  409. {engraphis-1.5 → engraphis-1.6}/eval/context_economy.py +0 -0
  410. {engraphis-1.5 → engraphis-1.6}/eval/datasets/adversarial.jsonl +0 -0
  411. {engraphis-1.5 → engraphis-1.6}/eval/datasets/codemem.jsonl +0 -0
  412. {engraphis-1.5 → engraphis-1.6}/eval/datasets/consolidation_ranking.jsonl +0 -0
  413. {engraphis-1.5 → engraphis-1.6}/eval/datasets/context_routing_stress.jsonl +0 -0
  414. {engraphis-1.5 → engraphis-1.6}/eval/datasets/graph_layer_routing.jsonl +0 -0
  415. {engraphis-1.5 → engraphis-1.6}/eval/datasets/graph_multihop.jsonl +0 -0
  416. {engraphis-1.5 → engraphis-1.6}/eval/datasets/locomo10_repair_manifest.json +0 -0
  417. {engraphis-1.5 → engraphis-1.6}/eval/datasets/longdoc.jsonl +0 -0
  418. {engraphis-1.5 → engraphis-1.6}/eval/datasets/proactive_ranking.jsonl +0 -0
  419. {engraphis-1.5 → engraphis-1.6}/eval/datasets/redteam_poisoning.jsonl +0 -0
  420. {engraphis-1.5 → engraphis-1.6}/eval/external.py +0 -0
  421. {engraphis-1.5 → engraphis-1.6}/eval/graph_traversal.py +0 -0
  422. {engraphis-1.5 → engraphis-1.6}/eval/hosted_evidence.py +0 -0
  423. {engraphis-1.5 → engraphis-1.6}/eval/hosted_luna.py +0 -0
  424. {engraphis-1.5 → engraphis-1.6}/eval/planned_recall.py +0 -0
  425. {engraphis-1.5 → engraphis-1.6}/eval/proactive_ranking.py +0 -0
  426. {engraphis-1.5 → engraphis-1.6}/eval/redteam_poisoning.py +0 -0
  427. {engraphis-1.5 → engraphis-1.6}/eval/resource_hierarchy.py +0 -0
  428. {engraphis-1.5 → engraphis-1.6}/eval/vector_scale.py +0 -0
  429. {engraphis-1.5 → engraphis-1.6}/railway.json +0 -0
  430. {engraphis-1.5 → engraphis-1.6}/scripts/__init__.py +0 -0
  431. {engraphis-1.5 → engraphis-1.6}/scripts/check_commercial_manifest.py +0 -0
  432. {engraphis-1.5 → engraphis-1.6}/scripts/inspector.py +0 -0
  433. {engraphis-1.5 → engraphis-1.6}/scripts/legacy_reference.py +0 -0
  434. {engraphis-1.5 → engraphis-1.6}/scripts/mcp_server_http.py +0 -0
  435. {engraphis-1.5 → engraphis-1.6}/scripts/normalize_sdist.py +0 -0
  436. {engraphis-1.5 → engraphis-1.6}/scripts/rescan_poisoning.py +0 -0
  437. {engraphis-1.5 → engraphis-1.6}/scripts/run_public_benchmark.py +0 -0
  438. {engraphis-1.5 → engraphis-1.6}/scripts/start_server.py +0 -0
  439. {engraphis-1.5 → engraphis-1.6}/scripts/verify_release_artifacts.py +0 -0
  440. {engraphis-1.5 → engraphis-1.6}/setup.cfg +0 -0
  441. {engraphis-1.5 → engraphis-1.6}/setup.py +0 -0
  442. {engraphis-1.5 → engraphis-1.6}/tests/__init__.py +0 -0
  443. {engraphis-1.5 → engraphis-1.6}/tests/conftest.py +0 -0
  444. {engraphis-1.5 → engraphis-1.6}/tests/test_adaptive_context.py +0 -0
  445. {engraphis-1.5 → engraphis-1.6}/tests/test_adaptive_context_route.py +0 -0
  446. {engraphis-1.5 → engraphis-1.6}/tests/test_app_auth.py +0 -0
  447. {engraphis-1.5 → engraphis-1.6}/tests/test_artifact_smoke.py +0 -0
  448. {engraphis-1.5 → engraphis-1.6}/tests/test_benchmark_adversarial.py +0 -0
  449. {engraphis-1.5 → engraphis-1.6}/tests/test_bitemporal_recall.py +0 -0
  450. {engraphis-1.5 → engraphis-1.6}/tests/test_chunking_eval.py +0 -0
  451. {engraphis-1.5 → engraphis-1.6}/tests/test_client_launch.py +0 -0
  452. {engraphis-1.5 → engraphis-1.6}/tests/test_code_agent_ab.py +0 -0
  453. {engraphis-1.5 → engraphis-1.6}/tests/test_code_index_route_security.py +0 -0
  454. {engraphis-1.5 → engraphis-1.6}/tests/test_code_recall_arm.py +0 -0
  455. {engraphis-1.5 → engraphis-1.6}/tests/test_commercial_hardening.py +0 -0
  456. {engraphis-1.5 → engraphis-1.6}/tests/test_compact_recall.py +0 -0
  457. {engraphis-1.5 → engraphis-1.6}/tests/test_conflict_repair.py +0 -0
  458. {engraphis-1.5 → engraphis-1.6}/tests/test_conflicts.py +0 -0
  459. {engraphis-1.5 → engraphis-1.6}/tests/test_consolidation_loop.py +0 -0
  460. {engraphis-1.5 → engraphis-1.6}/tests/test_cron_write_tools_workspace_default.py +0 -0
  461. {engraphis-1.5 → engraphis-1.6}/tests/test_customer_node_hardening.py +0 -0
  462. {engraphis-1.5 → engraphis-1.6}/tests/test_dashboard_dream_ui.py +0 -0
  463. {engraphis-1.5 → engraphis-1.6}/tests/test_decay_idempotent.py +0 -0
  464. {engraphis-1.5 → engraphis-1.6}/tests/test_entity_resolution.py +0 -0
  465. {engraphis-1.5 → engraphis-1.6}/tests/test_eval_ablation.py +0 -0
  466. {engraphis-1.5 → engraphis-1.6}/tests/test_eval_adversarial_memory_security.py +0 -0
  467. {engraphis-1.5 → engraphis-1.6}/tests/test_eval_consolidation_ranking.py +0 -0
  468. {engraphis-1.5 → engraphis-1.6}/tests/test_eval_external.py +0 -0
  469. {engraphis-1.5 → engraphis-1.6}/tests/test_eval_external_locomo_evidence.py +0 -0
  470. {engraphis-1.5 → engraphis-1.6}/tests/test_eval_graph_traversal.py +0 -0
  471. {engraphis-1.5 → engraphis-1.6}/tests/test_eval_grounded.py +0 -0
  472. {engraphis-1.5 → engraphis-1.6}/tests/test_eval_redteam_poisoning.py +0 -0
  473. {engraphis-1.5 → engraphis-1.6}/tests/test_externalize_dashboard_assets.py +0 -0
  474. {engraphis-1.5 → engraphis-1.6}/tests/test_graph_extractor.py +0 -0
  475. {engraphis-1.5 → engraphis-1.6}/tests/test_graphrank.py +0 -0
  476. {engraphis-1.5 → engraphis-1.6}/tests/test_hosted_evidence.py +0 -0
  477. {engraphis-1.5 → engraphis-1.6}/tests/test_hosted_luna.py +0 -0
  478. {engraphis-1.5 → engraphis-1.6}/tests/test_intent_paywall.py +0 -0
  479. {engraphis-1.5 → engraphis-1.6}/tests/test_licensing_boundary_docs.py +0 -0
  480. {engraphis-1.5 → engraphis-1.6}/tests/test_licensing_launch.py +0 -0
  481. {engraphis-1.5 → engraphis-1.6}/tests/test_llm_config.py +0 -0
  482. {engraphis-1.5 → engraphis-1.6}/tests/test_local_auth_browser_session.py +0 -0
  483. {engraphis-1.5 → engraphis-1.6}/tests/test_logging_setup.py +0 -0
  484. {engraphis-1.5 → engraphis-1.6}/tests/test_merge.py +0 -0
  485. {engraphis-1.5 → engraphis-1.6}/tests/test_netutil.py +0 -0
  486. {engraphis-1.5 → engraphis-1.6}/tests/test_observability.py +0 -0
  487. {engraphis-1.5 → engraphis-1.6}/tests/test_personal_folders.py +0 -0
  488. {engraphis-1.5 → engraphis-1.6}/tests/test_planned_recall_eval.py +0 -0
  489. {engraphis-1.5 → engraphis-1.6}/tests/test_private_state_boundaries.py +0 -0
  490. {engraphis-1.5 → engraphis-1.6}/tests/test_proactive_context.py +0 -0
  491. {engraphis-1.5 → engraphis-1.6}/tests/test_proactive_ranking.py +0 -0
  492. {engraphis-1.5 → engraphis-1.6}/tests/test_protocol_upgrades.py +0 -0
  493. {engraphis-1.5 → engraphis-1.6}/tests/test_provenance_flags.py +0 -0
  494. {engraphis-1.5 → engraphis-1.6}/tests/test_provider_docs.py +0 -0
  495. {engraphis-1.5 → engraphis-1.6}/tests/test_public_benchmark_workflow.py +0 -0
  496. {engraphis-1.5 → engraphis-1.6}/tests/test_public_retrieval_benchmark_workflow.py +0 -0
  497. {engraphis-1.5 → engraphis-1.6}/tests/test_recall_entity_workspace_widening.py +0 -0
  498. {engraphis-1.5 → engraphis-1.6}/tests/test_relay_device_credentials.py +0 -0
  499. {engraphis-1.5 → engraphis-1.6}/tests/test_release_artifacts.py +0 -0
  500. {engraphis-1.5 → engraphis-1.6}/tests/test_remember_atomicity.py +0 -0
  501. {engraphis-1.5 → engraphis-1.6}/tests/test_reproducible_sdist.py +0 -0
  502. {engraphis-1.5 → engraphis-1.6}/tests/test_rescan_poisoning.py +0 -0
  503. {engraphis-1.5 → engraphis-1.6}/tests/test_resolve.py +0 -0
  504. {engraphis-1.5 → engraphis-1.6}/tests/test_resource_hierarchy_eval.py +0 -0
  505. {engraphis-1.5 → engraphis-1.6}/tests/test_retention_policy.py +0 -0
  506. {engraphis-1.5 → engraphis-1.6}/tests/test_retrieval_policy.py +0 -0
  507. {engraphis-1.5 → engraphis-1.6}/tests/test_run_public_benchmark.py +0 -0
  508. {engraphis-1.5 → engraphis-1.6}/tests/test_secrets_edge_cases.py +0 -0
  509. {engraphis-1.5 → engraphis-1.6}/tests/test_security_fixes.py +0 -0
  510. {engraphis-1.5 → engraphis-1.6}/tests/test_service_isolation.py +0 -0
  511. {engraphis-1.5 → engraphis-1.6}/tests/test_session_idempotent.py +0 -0
  512. {engraphis-1.5 → engraphis-1.6}/tests/test_start_session_workspace_default.py +0 -0
  513. {engraphis-1.5 → engraphis-1.6}/tests/test_sync_dashboard.py +0 -0
  514. {engraphis-1.5 → engraphis-1.6}/tests/test_vector_scale.py +0 -0
  515. {engraphis-1.5 → engraphis-1.6}/tests/test_workspace_isolation.py +0 -0
@@ -1,7 +1,8 @@
1
1
  # ── Engraphis Configuration ──────────────────────────────────────────
2
- # Copy this file to .env and edit only the settings you need. Commented values preserve
3
- # the platform-aware defaults in engraphis/config.py; hosted deployments additionally
4
- # require the authentication and public-URL settings described below.
2
+ # Put the settings you need in the owner-private `~/.engraphis/config.env` created by
3
+ # `engraphis-init`, or export them in the process environment. To select another file,
4
+ # export ENGRAPHIS_ENV_FILE as an absolute owner-private regular-file path before launch.
5
+ # Engraphis deliberately ignores arbitrary working-directory `.env` files.
5
6
 
6
7
  # ── Server ──────────────────────────────────────────────────────────────────
7
8
  ENGRAPHIS_HOST=127.0.0.1
@@ -79,6 +80,8 @@ ENGRAPHIS_EMBED_MODEL=sentence-transformers/all-MiniLM-L6-v2
79
80
  # ENGRAPHIS_EMBED_REVISION=<lowercase 40-character model commit>
80
81
  # Reject mutable remote embedding, reranker, and chunk-tokenizer tags before loading. Off by default.
81
82
  # ENGRAPHIS_REQUIRE_IMMUTABLE_MODELS=0
83
+ # Fail startup when a configured optional backend cannot load instead of silently falling back.
84
+ # ENGRAPHIS_REQUIRE_EXACT_BACKENDS=0
82
85
  # Embedding dimension is auto-detected from the model. Override only if needed.
83
86
  # ENGRAPHIS_EMBED_DIM=384
84
87
  # Vector index backend for server entrypoints: "auto" (default; use sqlite-vec when
@@ -204,17 +207,17 @@ ENGRAPHIS_LLM_MODEL=gpt-4o-mini
204
207
  # engraphis connect --token engr_ct_... # the command your account portal shows
205
208
  # printf %s "$TOKEN" | engraphis connect --token - # keep the token out of shell history
206
209
  #
207
- # That is the supported way to connect a client. It redeems the one-time connect token, saves
208
- # the rotating refresh credential with 0600 permissions, and keeps it rotated afterwards, so
209
- # none of the variables below are needed on an interactive machine. Set
210
- # ENGRAPHIS_CLOUD_COMPUTE_URL (or pass --compute-url) only if your account portal shows a
211
- # compute endpoint different from the default. See docs/AGENT_CONNECT.md.
210
+ # That is the supported way to connect a client. It redeems the one-time connect token,
211
+ # saves the rotating refresh credential with 0600 permissions, and keeps it rotated.
212
+ # The saved control and compute endpoints are immutable members of that credential family:
213
+ # later environment changes cannot redirect its refresh or workspace upload. Reconnect
214
+ # explicitly to change either endpoint. See docs/AGENT_CONNECT.md.
212
215
  #
213
- # For non-interactive deployments a refresh credential may be injected as a bootstrap secret.
214
- # It rotates on use; the owner-only saved replacement takes precedence afterward, even while
215
- # the environment variable remains set. Never commit it. Bind environment-only bootstrap
216
- # credentials to the subject assigned at onboarding (device or member). A short-lived access
217
- # token is supported for jobs.
216
+ # For non-interactive deployments a refresh credential may be injected as a bootstrap
217
+ # secret. It rotates on use; the owner-only saved replacement and its bound endpoints take
218
+ # precedence afterward, even while the environment variables remain set. Never commit it.
219
+ # Bind environment-only bootstrap credentials to the subject assigned at onboarding
220
+ # (device or member). A short-lived access token is supported for jobs.
218
221
  # ENGRAPHIS_CLOUD_REFRESH_CREDENTIAL=
219
222
  # ENGRAPHIS_CLOUD_TOKEN_SUBJECT=member
220
223
  # ENGRAPHIS_CLOUD_ACCESS_TOKEN=
@@ -320,13 +323,14 @@ ENGRAPHIS_LLM_MODEL=gpt-4o-mini
320
323
  # rerankers when ENGRAPHIS_REQUIRE_IMMUTABLE_MODELS=1.
321
324
  # ENGRAPHIS_RERANK_REVISION=<lowercase 40-character model commit>
322
325
 
323
- # Workspace allow-list: comma-separated names. Empty = all allowed.
324
- # ENGRAPHIS_WORKSPACES=acme,personal
325
-
326
326
  # Cloud Sync relay: endpoint and optional token for self-hosted relay.
327
327
  # ENGRAPHIS_RELAY_URL=https://relay.example.com
328
328
  # ENGRAPHIS_SYNC_TOKEN=
329
329
  # ENGRAPHIS_SYNC_READ_ONLY=0
330
+ # Origin binding for standalone sync tokens. Must match the relay origin that issued
331
+ # the token; prevents cross-origin token reuse. Required when using ENGRAPHIS_SYNC_TOKEN
332
+ # without a full session credential.
333
+ # ENGRAPHIS_SYNC_TOKEN_ORIGIN=https://relay.example.com
330
334
  # End-to-end encryption key for Cloud Sync bundles (relay transport). A single
331
335
  # immutable 32-byte URL-safe base64 value (43 chars, or 44 with one '=' pad) that
332
336
  # every authorized device shares; changing it makes previously stored ciphertext
@@ -338,7 +342,8 @@ ENGRAPHIS_LLM_MODEL=gpt-4o-mini
338
342
  # ENGRAPHIS_PRO_UPGRADE_URL=
339
343
  # ENGRAPHIS_TEAM_UPGRADE_URL=
340
344
 
341
- # Update check cache duration (seconds). Default: 86400 (1 day).
345
+ # Update check cache duration (seconds), bounded to 1..31622400. Invalid values use the
346
+ # 86400-second (1 day) default. The cache path is fixed under owner-private Engraphis state.
342
347
  # ENGRAPHIS_UPDATE_CACHE=86400
343
348
 
344
349
  # Legacy inspector port (retired 2026-07-10; redirects to dashboard).
@@ -6,6 +6,31 @@ those results. When this document and the code disagree, the code is the source
6
6
  For the locked operator sequence for a public canonical run, see
7
7
  [`docs/PUBLIC_BENCHMARK_RUNBOOK.md`](docs/PUBLIC_BENCHMARK_RUNBOOK.md).
8
8
 
9
+ ### Public numeric evidence registry
10
+
11
+ Every exact public aggregate retained below comes from the checked-in, public-safe
12
+ [`offline-fixtures-v1.json`](docs/benchmark-evidence/offline-fixtures-v1.json) artifact. Its
13
+ SHA-256 is
14
+ `0f60b0868444f676fe14c5f94d7db2c475e22669930c4d760881d0842eaa6800`, also recorded in the
15
+ adjacent `.sha256` file. The artifact contains no raw questions, answers, prompts, customer data,
16
+ or per-record content fingerprints.
17
+
18
+ The fixture-suite digest is
19
+ `4d7e40607319cd4bf8caee3897f1e416dbe5b81998b37a7e4839409ee2923537`. The artifact defines
20
+ the digest algorithm and records the SHA-256 of every suite and dataset file. Each evidence ID
21
+ also binds its exact command through `sha256(UTF-8 exact command)`:
22
+
23
+ | Evidence ID | Exact command | Config digest |
24
+ |---|---|---|
25
+ | `offline-chunking` | `python -m eval.chunking_eval --dataset eval/datasets/longdoc.jsonl --k 5` | `c1c8196aa7e1568ef3844a9fb2d76b87f342c39108e32d6ad144b885a76143b8` |
26
+ | `offline-performance` | `python -m eval.performance --dataset eval/datasets/codemem.jsonl --k 5 --iterations 10 --json` | `bbe4aca81e58d4830e50a8fc7729a1d15b71d97a6299bccd79432b7f119677d7` |
27
+ | `offline-grounded` | `python -m eval.grounded` | `590442e51e3642c10489165759919dc86ffac62c182937330c153e7f8d5fc26f` |
28
+
29
+ External, model-dependent, latency, consolidation, and productivity numbers are not published
30
+ until a redacted immutable artifact with the same three bindings exists. Use the
31
+ [public benchmark runbook](docs/PUBLIC_BENCHMARK_RUNBOOK.md) to produce that evidence; absence
32
+ from this registry means no public number is claimed.
33
+
9
34
  ## What we measure today (all offline, no API key)
10
35
 
11
36
  Most Engraphis evals score **retrieval**, not end-to-end QA. The separate productivity benchmark
@@ -26,33 +51,34 @@ frontier-model QA score.
26
51
  retrieval-only aggregates rather than silently dropping them. `eval.longmemeval_v2` is a local,
27
52
  text-only adapter for the official LongMemEval-V2 `insert(trajectory)` / `query(query,
28
53
  query_image=None)` memory interface; it does not download data or call a model.
29
- - **Grounded**: `eval/grounded.py`: answerable → cite, off-topic → abstain.
54
+ - **Grounded**: `eval/grounded.py`: answerable → cite, off-topic → abstain. Exact fixture
55
+ outcomes are evidence ID `offline-grounded` in the registry above.
30
56
  - **Chunking (quality per token)**: `eval/chunking_eval.py` over `eval/datasets/longdoc.jsonl`
31
57
  ingests a multi-topic corpus twice: once as one memory per document (`whole`) and once with
32
58
  sub-file `ChunkingExtractor` (`chunked`), then queries both through the real recall pipeline.
33
59
  The checked-in corpus is explicitly marked trusted eval data so the measurement isolates
34
60
  chunking from the production trust gate, which excludes arbitrary raw imports from normal
35
61
  agent context. On the deterministic embedder, **recall@5 is 1.000 for both modes; mean
36
- retrieved top-5 content falls from 740.3 to 214.1 tokens (526.2 fewer, 71.1% lower, about
62
+ retrieved top-5 content falls from 740.3 to 214.3 tokens (526.0 fewer, 71.1% lower, about
37
63
  3.5× smaller), while the smallest returned evidence-holding memory falls from 162.2 to 42.4
38
- tokens (119.8 fewer, 73.9% lower, about 3.8× smaller).** Pass `--embed-model
39
- sentence-transformers/all-MiniLM-L6-v2` for a real retrieval number (recall should then favour
40
- chunked on larger corpora, not just tie).
64
+ tokens (119.8 fewer, 73.9% lower, about 3.8× smaller).** These aggregates are evidence ID
65
+ `offline-chunking` in the registry above. Pass `--embed-model
66
+ sentence-transformers/all-MiniLM-L6-v2` to run a model-dependent experiment; do not publish
67
+ that result without a new immutable artifact and pinned model revision.
41
68
  - **Full-pipeline latency + quality**: `eval/performance.py` times the shipped semantic +
42
69
  lexical + graph + fusion + scoring + rerank + packing path after warmup, with reinforcement
43
70
  disabled so repeated measurements do not mutate their corpus. It reports p50/p95/p99 latency,
44
71
  retrieval quality, packed context tokens, and full/compact JSON-shape payload proxies in one
45
72
  JSON-safe schema. Payload proxies are sampled once per question, independently of the number
46
73
  of timed iterations; they are not serialized MCP envelopes or transport responses. In the
47
- documented CodeMem run (`--iterations 10`), 26 payload samples total **23,810** full-proxy
74
+ registered CodeMem run, 26 payload samples total **23,810** full-proxy
48
75
  `engraphis.regex.v1` tokens versus **10,202** compact-proxy tokens, avoiding **13,608** proxy
49
76
  tokens (**57.15% lower**), while 260 recalls are timed. Packed context across the same 26
50
77
  samples averages **85.38** tokens and reaches **108** under a 1,500-token cap; Recall@5,
51
- hit@5, and answer-token recall remain 1.000. `--filler-memories` provides deterministic corpus
52
- scaling, and every report records the runtime, architecture, embedder, vector backend, corpus
53
- size, warmups, and iteration count. `--candidate-k` and `--retrieval-profile` make
54
- adaptive-depth/routing experiments executable instead of changing production defaults from an
55
- unmeasured hunch.
78
+ hit@5, and answer-token recall remain 1.000. These aggregates are evidence ID
79
+ `offline-performance` in the registry above. `--filler-memories`, `--candidate-k`, and
80
+ `--retrieval-profile` make scaling and routing experiments executable, but their results need
81
+ separate evidence before publication.
56
82
  - **Exact vector scale envelope**: `eval/vector_scale.py` measures the production
57
83
  `NumpyVectorIndex` directly at requested corpus sizes with deterministic normalized vectors and
58
84
  queries. It records a corpus fingerprint, result hashes, environment, and observed
@@ -80,41 +106,20 @@ frontier-model QA score.
80
106
  answer, and is identified in every report; inject a real agent callable for model-specific
81
107
  results. Optional provider telemetry is reported separately from the deterministic token
82
108
  counter and is not a provider billing estimate.
83
-
84
- The workload benchmark is also allowed to say “this workload is too small for a memory layer.”
85
- On the 44-memory / 26-question CodeMem regression fixture, every case already fits inside a
86
- 64-token recency window. Full-history and recency therefore use the same 1,180 cumulative reader
87
- tokens at perfect evidence/answer-token quality, while Engraphis uses 1,064–1,066 reader tokens
88
- plus a conservative 631-token indexing pass. The indexing-inclusive total still costs more over a
89
- single pass, with break-even at 142–144 queries. This is an intentionally small, reusable-workload
90
- boundary, not a general cost claim.
91
-
92
- On the same 26 CodeMem tasks, every history fit the 512-token prompt allowance, so adaptive
93
- routing bypassed all 26 memory calls. It used **1,942** total agent-facing tokens versus
94
- **1,883** for always-on retrieval while both strategies completed **24/26** tasks with the bundled
95
- deterministic agent. This demonstrates bypass behavior and token accounting; this small fixture
96
- does not establish a token-saving claim for adaptive routing or general LLM intelligence.
97
-
98
- The complementary real-model LoCoMo workload diagnostic covers 10 conversations and 1,986
99
- questions with `all-MiniLM-L6-v2`, `k=10`, a 512-token reader budget, and conflict resolution
100
- disabled. **This is an unpinned, noncanonical workload diagnostic of reader-context use only, not
101
- answer quality or leaderboard accuracy.** Engraphis used **891,857** cumulative reader-context
102
- tokens versus **49,915,394** for uncapped full history, **98.2133% lower**. Charging one complete
103
- 246,539-token corpus pass to indexing produces a conservative Engraphis total of **1,138,396**,
104
- still **97.7193% lower**, with a calculated break-even at query 10. The quality tradeoff is
105
- explicit:
106
-
107
- | LoCoMo workload method (unpinned, noncanonical context-use diagnostic; not answer quality or leaderboard accuracy) | Retrieval recall | Hit rate | Answer-token recall | Mean reader context |
108
- |---|---:|---:|---:|---:|
109
- | Engraphis hybrid recall | **0.600457** | **0.657417** | **0.679614** | **449.07** tokens |
110
- | Same-budget recency window | 0.011289 | 0.012614 | 0.339941 | 487.87 tokens |
111
- | Uncapped full history | 0.996997 | 0.997477 | 0.917247 | 25,133.63 tokens |
112
-
113
- This diagnostic supports a precise statement: Engraphis recovered much more useful evidence than
114
- a same-budget recency window while using a small fraction of full-history context. It does not
115
- support “same quality as full history,” provider-billing, or end-to-end answer-accuracy claims.
116
- The embedding model revision was not pinned in that run, so rerun it with an immutable revision
117
- before treating the numbers as canonical release evidence.
109
+ - **Dashboard graph layout settle**: `eval/graph_every_bench.py` drives the Every-node
110
+ dashboard engine's real worker (`engraphis-graph-every-worker.js`) through a
111
+ `prepare → settled` round-trip over synthetic node/link loads and reports wall-clock settle
112
+ time plus the scaling ratio across sizes. It measures initial layout cost only: camera pans
113
+ and zooms never touch the worker (they are GPU-uniform updates), so no per-frame number can
114
+ come out of this harness and none should be quoted. Results are host- and Node-version
115
+ dependent local diagnostics, not registered public evidence; run the harness on the target
116
+ class of machine before quoting a figure.
117
+
118
+ The context-economy and productivity tools intentionally report when a small workload does not
119
+ benefit from memory, and the external loaders expose retrieval-quality tradeoffs rather than
120
+ hiding them. Their prior local results are not retained as public numbers because no matching
121
+ redacted immutable artifact is checked in. Run the registered protocol and publish the resulting
122
+ artifact before making a quantitative claim.
118
123
 
119
124
  ### Reproduce
120
125
 
@@ -168,17 +173,12 @@ names every remaining replacement/removal, must be fully consumed, and is record
168
173
  report with its own hash. Any source update, unused repair, or unresolved ID fails the run. This
169
174
  repairs retrieval references only; it does not claim to correct LoCoMo's semantic answer labels.
170
175
 
171
- The pinned full-dataset private retrieval diagnostic run on 2026-08-04 used official-source
172
- SHA-256 `79fa87e90f04081343b8c8debecb80a9a6842b76a7aa537dc9fdf651ea698ff4`, repair-manifest
173
- SHA-256 `7bb74979b98778aafbbe72d44a93593743ff5ba166c9c95cd4702ab7376d7c2b`, and
174
- `sentence-transformers/all-MiniLM-L6-v2` revision
175
- `1110a243fdf4706b3f48f1d95db1a4f5529b4d41`. With `k=10` and conflict resolution disabled,
176
- all 10 conversations, 5,882 memories, and 1,986 questions were processed; 1,982 questions had
177
- gold evidence and were scored. The result was recall@10 **0.6045**, hit@10 **0.6625**,
178
- MRR@10 **0.4138**, NDCG@10 **0.4424**, and answer-token recall **0.4607**. Six questions used
179
- mechanical ID normalization, three source-audited manifest repairs were applied, and four
180
- questions were explicitly excluded as `no_gold_evidence`. These values measure evidence
181
- retrieval only; they are not end-to-end QA accuracy or an official LoCoMo leaderboard score.
176
+ A private pinned retrieval diagnostic was inspected during development, but its result artifact is
177
+ not checked into the public evidence registry. This document therefore publishes none of that
178
+ run's workload counts or scores. Reproduce it from the hash-bound source and repair manifest,
179
+ export a public-safe immutable artifact, and validate its checksum before adding quantitative
180
+ claims. Any future values remain evidence-retrieval metrics, not end-to-end QA accuracy or an
181
+ official LoCoMo leaderboard score.
182
182
 
183
183
  ## What we do NOT yet claim
184
184
 
@@ -226,10 +226,14 @@ cases. Retrieval-only abstention/no-evidence records remain visible in the artif
226
226
  `exclusions`; they are not counted as evidence-retrieval scores.
227
227
 
228
228
  Official LongMemEval-V2 output can be converted into a public-safe QA artifact with
229
- `python -m eval.longmemeval_v2_evidence`. The exporter keeps the official QA score, fixed-reader
230
- context token count, latency, model revisions, source digests, repository state, and artifact
231
- checksum. It removes raw questions, answers, prompts, reader output, and retrieved context before
232
- the artifact can be written. See [`eval/EVIDENCE.md`](eval/EVIDENCE.md) for the exact command.
229
+ `python -m eval.longmemeval_v2_evidence`. The exporter requires the completion manifest written by
230
+ the pinned runner after a successful, complete official run. It binds the exact per-question
231
+ output, questions, haystack, trajectories, memory configuration, matrix manifest, seed, clean
232
+ official checkout, and recorded environment. The public artifact keeps the official QA score,
233
+ fixed-reader context token count, aggregate source-file digests, repository state, and artifact
234
+ checksum. It removes raw questions, answers, prompts, reader output, and retrieved context, and
235
+ does not publish per-record content fingerprints. See the
236
+ [`public benchmark runbook`](docs/PUBLIC_BENCHMARK_RUNBOOK.md) for the end-to-end operator sequence.
233
237
 
234
238
  ### LongMemEval-V2 memory-module adapter
235
239
 
@@ -241,31 +245,42 @@ the artifact can be written. See [`eval/EVIDENCE.md`](eval/EVIDENCE.md) for the
241
245
  with the official harness. The config pins `Qwen/Qwen3-Embedding-8B` to revision
242
246
  `1d8ad4ca9b3dd8059ad90a75d4983776a23d44af`; mutable embedding revisions are rejected, and a
243
247
  canonical adapter run fails instead of relabeling the deterministic offline fallback as Qwen.
244
- Run `python -m eval.run_longmemeval_v2` with the official harness arguments and the pinned
245
- checkout on `PYTHONPATH`. This wrapper performs the upstream registry import in the required order
246
- before delegating to `evaluation.harness`; a direct upstream invocation must otherwise import
247
- `eval.longmemeval_v2` before calling `build_memory`.
248
+ First materialize the six declared variants at all five token budgets:
249
+
250
+ ```bash
251
+ python -m eval.longmemeval_v2_matrix \
252
+ --output "$ENGRAPHIS_EVIDENCE_RUN_DIR/configs"
253
+ ```
254
+
255
+ This writes a 30-run manifest: balanced, planner, episodic-cap, planner-plus-episodic-cap, and
256
+ matched `context_k=2` comparators for both capped variants, each at 256, 512, 1,024, 2,048, and
257
+ 4,096 evidence tokens. Run each manifest cell through `python -m eval.run_longmemeval_v2` with all
258
+ eight `--engraphis-*` completion-receipt arguments. The wrapper imports the adapter before the
259
+ official registry builds the memory module, forces the pinned reader processor revision, and
260
+ delegates the remaining official harness arguments unchanged. Only after a successful return does
261
+ it verify that the output question IDs exactly cover the source question IDs and write the
262
+ immutable execution manifest.
248
263
 
249
264
  The checked-in configuration is canonical only when the adapter resolves the pinned Qwen reader
250
- processor at `c202236235762e1c871ad0ccb60c8ee5ba337b9a`. The wrapper also forces the audited
251
- official harness's otherwise-unpinned `AutoProcessor` call to that same revision. It refuses to
252
- start if the optional processor dependency or immutable revision is unavailable; the local regex
253
- counter is never silently relabeled as a reader budget. The recorded budget counts each returned
254
- context item's content with that reader tokenizer (without prompt framing or inter-item
255
- separators), so it is a hard **evidence-item content** budget, not a claim about total chat-prompt
256
- tokens. Packed sources are returned as separate context items, preserving the largest fitting
257
- evidence prefix instead of dropping one oversized monolithic item. The adapter does not download
258
- benchmark data or call the reader/evaluator; the official harness owns those steps.
265
+ processor at `c202236235762e1c871ad0ccb60c8ee5ba337b9a`. The wrapper refuses a dirty or non-pinned
266
+ official checkout and refuses to start if the optional processor dependency or immutable revision
267
+ is unavailable; the local regex counter is never silently relabeled as a reader budget. The
268
+ recorded budget counts each returned context item's content with that reader tokenizer (without
269
+ prompt framing or inter-item separators), so it is a hard **evidence-item content** budget, not a
270
+ claim about total chat-prompt tokens. Packed sources are returned as separate context items,
271
+ preserving the largest fitting evidence prefix instead of dropping one oversized monolithic item.
272
+ Every official per-question row reports inserted and retrieved counts by memory type. A
273
+ memory-type-cap claim additionally requires at least two populated inserted types, so a nominal cap
274
+ over a single-type workload cannot qualify as evidence. The adapter does not download benchmark
275
+ data or call the reader/evaluator; the official harness owns those steps.
259
276
 
260
277
  ## External evidence status and remaining executions
261
278
 
262
279
  1. **Run the official LongMemEval-V2 reader and evaluator.** The adapter, pinned runner, and
263
280
  redacted evidence exporter are implemented. The exact upstream commit boots in an isolated
264
- Python 3.11 environment and the wrapper reaches the official harness CLI. Dataset revision
265
- `f152293e235517d504809563c833d7190b8c713b` publishes 7,120,369,667 bytes before the pinned
266
- Qwen reader and embedding model assets. A full official run therefore still requires those
267
- resources, sufficient compute, and evaluator configuration; no canonical QA score is claimed
268
- until that run completes.
281
+ Python 3.11 environment and the wrapper reaches the official harness CLI. The dataset, pinned
282
+ Qwen reader, and embedding assets require substantial storage and compute; no canonical QA
283
+ score is claimed until that run completes.
269
284
  2. **Publish production-backend latency.** Run `eval/performance.py` with the real embedder and
270
285
  sqlite-vec/backend configuration on a fixed machine class and corpus scale.
271
286
  3. **Run the fixed-budget curve on the complete official datasets.** The v2 harness now measures
@@ -299,20 +314,15 @@ Use `--artifact` on any of these commands to write a redacted, immutable evidenc
299
314
  an adjacent SHA256 file. The ordinary console/`--json` report is private run material and may
300
315
  contain source questions for debugging.
301
316
 
302
- ### Upstream-data diagnostic baseline (2026-07-30)
303
-
304
- These runs use the dependency-free deterministic embedder on upstream data. They validate the
305
- adapters and expose product gaps; they are noncanonical diagnostics, not leaderboard or marketing
306
- claims. The artifact validator accepted every completed envelope.
317
+ ### Upstream-data diagnostics awaiting public artifacts
307
318
 
308
- | Upstream source | Executed scope | Result and boundary |
309
- |---|---|---|
310
- | LoCoMo-Plus commit `059f4e3d38f7f1f96765e8e2cb7de3097551bffb` | All 401 Cognitive cases, 40,270 source memories | Recall@10 **0.1259**, hit@10 **0.1272**, MRR@10 **0.0744**, answer-token context coverage **0.5095**. This is cue-evidence retrieval, not answer-judge accuracy. The low retrieval score is useful negative evidence: implicit-constraint recall remains a real product gap. |
311
- | MemoryAgentBench commit `455306dcabc3842526eb83cd4e225e5d486c5c5d`, official Hugging Face `Accurate_Retrieval` first row | 100 questions | Recall@10 **0.5100**, hit@10 **0.8600**, answer-token context coverage **0.8500**. Gold evidence was derived only where an accepted answer occurred in a source chunk. |
312
- | The same source, `Conflict_Resolution` first row | 100 questions | Recall@10 **0.4600**, hit@10 **0.6400**, answer-token context coverage **0.6800**. This plain-context export measures retrieval, not structured temporal invalidation. |
313
- | The same source, `Long_Range_Understanding` first row | 1 question | Answer-token context coverage **0.2658**. The export supplied no evidence IDs and no accepted answer occurred verbatim in a source chunk, so retrieval was deliberately left unscored rather than reported as a false perfect score. |
314
- | The same source, `Test_Time_Learning` first row | One 5.88 MB context | The no-resolution ingest did not complete within a five-minute local smoke ceiling. This is a measured large-ingest throughput gap, not a failed quality score; batch embedding and transaction work should precede a complete split run. |
315
- | Mem2ActBench upstream smoke | 2 public rows | Recall@10, hit@10, MRR@10, and NDCG@10 **1.0000**; expected tool-call JSON token coverage **0.5714**. This is retrieval/context coverage, not generated action success. |
319
+ The LoCoMo-Plus, MemoryAgentBench, and Mem2ActBench adapters have been exercised against upstream
320
+ data and exposed useful product gaps. Their earlier local envelopes are not present in the
321
+ checked-in evidence registry, so this document withholds their case counts, retrieval scores,
322
+ token coverage, and throughput measurements. Rerun each adapter with `--artifact`, publish the
323
+ redacted immutable envelope and checksum, and add its suite/config binding before quoting a
324
+ number. Until then these lanes demonstrate executable plumbing only, not leaderboard,
325
+ answer-quality, or marketing results.
316
326
 
317
327
  The MemoryAgentBench loader accepts both its aligned public JSON export and the Hugging Face
318
328
  dataset-server `rows[].row` envelope. Rows without gold evidence remain useful for answer-token
@@ -338,13 +348,11 @@ or invent a task-success oracle.
338
348
  1. **Budget-aware packing**: compare full source, safe summary, sentence-aligned safe summary
339
349
  excerpt, and raw-source excerpt at fixed budgets. Gate on support/answer retention and
340
350
  qualifier preservation, not token count alone.
341
- 2. **Adaptive retrieval work**: `--candidate-depth adaptive` is now an opt-in performance
342
- experiment. It keeps wider graph/code pools and reduces routine lexical/balanced pools while
343
- reporting the requested and actual depth. Sample and CodeMem kept every offline quality metric
344
- at 1.0 with balanced depth reduced from 50 to 15; CodeMem plus 1,000 fillers reduced local
345
- median recall latency from 20.666 ms to 18.991 ms in a 260-recall comparison, an 8.1%
346
- reduction. These are machine-specific regression results, not production latency claims. Keep
347
- the default fixed until complete external categories meet predeclared quality margins.
351
+ 2. **Adaptive retrieval work**: `--candidate-depth adaptive` is an opt-in performance experiment.
352
+ It keeps wider graph/code pools and reduces routine lexical/balanced pools while reporting the
353
+ requested and actual depth. A local experiment motivated this option, but no public number is
354
+ retained because its machine-specific artifact is not in the evidence registry. Keep the
355
+ default fixed until complete external categories meet predeclared quality margins.
348
356
  3. **Packing-pressure consolidation**: prioritize memory families that are frequently recalled,
349
357
  repeatedly omitted, or costly per useful token. Count write/index/storage cost as well as later
350
358
  reader-context savings.
@@ -354,7 +362,7 @@ or invent a task-success oracle.
354
362
  measuring tokens-to-evidence, recall, and storage/index growth together before recommending a
355
363
  model-specific default.
356
364
  5. **Bulk ingestion**: add batch embedding plus a transaction-aware vector upsert path, then rerun
357
- the 5.88 MB MemoryAgentBench Test-Time Learning row. Gate this on identical stored-memory,
365
+ the complete MemoryAgentBench Test-Time Learning input. Gate this on identical stored-memory,
358
366
  provenance, graph-link, and temporal-resolution outcomes, not throughput alone.
359
367
  6. **Scoped caches**: benchmark query embeddings and repeat-recall results keyed by workspace,
360
368
  repo, time anchors, profile, and corpus version. Test invalidation correctness before claiming