hermes-plugin-qdrant-memory 0.5.2__tar.gz → 0.5.3__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 (167) hide show
  1. {hermes_plugin_qdrant_memory-0.5.2/hermes_plugin_qdrant_memory.egg-info → hermes_plugin_qdrant_memory-0.5.3}/PKG-INFO +18 -13
  2. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/README.md +17 -12
  3. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/docs/local-embedding.md +3 -3
  4. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3/hermes_plugin_qdrant_memory.egg-info}/PKG-INFO +18 -13
  5. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/hermes_plugin_qdrant_memory.egg-info/SOURCES.txt +6 -0
  6. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/pyproject.toml +1 -1
  7. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/ledger.py +51 -44
  8. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/native_owner.py +2 -1
  9. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/plugin.yaml +1 -1
  10. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/provider.py +593 -103
  11. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/shared_service.py +11 -1
  12. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/version.py +1 -1
  13. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/scripts/demo.sh +1 -1
  14. hermes_plugin_qdrant_memory-0.5.3/tests/soak/test_harness.py +333 -0
  15. hermes_plugin_qdrant_memory-0.5.3/tests/soak/test_invariants.py +676 -0
  16. hermes_plugin_qdrant_memory-0.5.3/tests/soak/test_supervisor.py +167 -0
  17. hermes_plugin_qdrant_memory-0.5.3/tests/soak/test_workflow_gates.py +388 -0
  18. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_checkpoint_lifecycle.py +30 -0
  19. hermes_plugin_qdrant_memory-0.5.3/tests/test_cross_process_lifecycle_recovery.py +193 -0
  20. hermes_plugin_qdrant_memory-0.5.3/tests/test_initialization_failures.py +391 -0
  21. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_native_owner.py +14 -0
  22. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_provider.py +32 -1
  23. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_readme_release_contract.py +2 -2
  24. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_remote_qdrant.py +94 -1
  25. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_review_regressions.py +25 -9
  26. hermes_plugin_qdrant_memory-0.5.3/tests/test_shutdown_contract.py +354 -0
  27. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_writer_ownership.py +149 -1
  28. hermes_plugin_qdrant_memory-0.5.2/tests/test_shutdown_contract.py +0 -100
  29. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/LICENSE +0 -0
  30. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/MANIFEST.in +0 -0
  31. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/hermes_plugin_qdrant_memory.egg-info/dependency_links.txt +0 -0
  32. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/hermes_plugin_qdrant_memory.egg-info/entry_points.txt +0 -0
  33. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/hermes_plugin_qdrant_memory.egg-info/requires.txt +0 -0
  34. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/hermes_plugin_qdrant_memory.egg-info/top_level.txt +0 -0
  35. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/__init__.py +0 -0
  36. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/cli.py +0 -0
  37. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/config.py +0 -0
  38. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/config_schema.py +0 -0
  39. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/dedupe.py +0 -0
  40. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/embedding.py +0 -0
  41. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/event_quarantine.py +0 -0
  42. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/extraction.py +0 -0
  43. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/inventory.py +0 -0
  44. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/local_embedding.py +0 -0
  45. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/local_model.py +0 -0
  46. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/managed_setup.py +0 -0
  47. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/mcp_server.py +0 -0
  48. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/migration.py +0 -0
  49. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/models.py +0 -0
  50. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/owner_lifecycle.py +0 -0
  51. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/owner_llm.py +0 -0
  52. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/ownership.py +0 -0
  53. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/policy_admin.py +0 -0
  54. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/private_paths.py +0 -0
  55. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/progress.py +0 -0
  56. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/qdrant_store.py +0 -0
  57. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/quality_metrics.py +0 -0
  58. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/remote_client.py +0 -0
  59. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/remote_gateway.py +0 -0
  60. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/remote_protocol.py +0 -0
  61. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/reset.py +0 -0
  62. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/retry.py +0 -0
  63. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/runtime.py +0 -0
  64. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/shared_client.py +0 -0
  65. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/shared_protocol.py +0 -0
  66. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/shared_reader.py +0 -0
  67. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/shared_recall.py +0 -0
  68. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/shared_security.py +0 -0
  69. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/shared_state.py +0 -0
  70. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/standalone.py +0 -0
  71. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/qdrant_memory/tools.py +0 -0
  72. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/requirements-local.txt +0 -0
  73. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/requirements.txt +0 -0
  74. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/setup.cfg +0 -0
  75. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/__init__.py +0 -0
  76. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/conftest.py +0 -0
  77. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/helpers.py +0 -0
  78. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/local_model/test_acceptance.py +0 -0
  79. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/remote/fixture.py +0 -0
  80. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/security/__init__.py +0 -0
  81. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/security/test_cloud_owner.py +0 -0
  82. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/security/test_cloud_owner_cleanup.py +0 -0
  83. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/security/test_device_server.py +0 -0
  84. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/security/test_shared_security.py +0 -0
  85. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/security/test_shared_security_live.py +0 -0
  86. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/__init__.py +0 -0
  87. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_admission_control.py +0 -0
  88. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_device_grants.py +0 -0
  89. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_event_quarantine.py +0 -0
  90. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_event_quarantine_security.py +0 -0
  91. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_explicit_writes.py +0 -0
  92. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_managed_setup.py +0 -0
  93. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_owner_context.py +0 -0
  94. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_owner_diagnostics.py +0 -0
  95. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_owner_events.py +0 -0
  96. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_owner_lifecycle.py +0 -0
  97. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_owner_llm.py +0 -0
  98. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_policy_admin.py +0 -0
  99. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_public_api.py +0 -0
  100. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_remote_client.py +0 -0
  101. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_remote_gateway.py +0 -0
  102. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_remote_listener.py +0 -0
  103. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_remote_listener_options.py +0 -0
  104. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_remote_retry_contract.py +0 -0
  105. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_remote_service.py +0 -0
  106. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_reset_receipts.py +0 -0
  107. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_shared_contracts.py +0 -0
  108. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_shared_evaluation.py +0 -0
  109. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_shared_reader.py +0 -0
  110. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_shared_response.py +0 -0
  111. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_shared_service.py +0 -0
  112. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_shared_visibility.py +0 -0
  113. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/standalone/test_standalone.py +0 -0
  114. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_backend_contracts.py +0 -0
  115. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_bot_scope.py +0 -0
  116. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_bounded_recovery.py +0 -0
  117. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_ci_gate.py +0 -0
  118. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_ci_infrastructure_retry.py +0 -0
  119. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_cli_output.py +0 -0
  120. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_config_embedding.py +0 -0
  121. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_deletion_ordering.py +0 -0
  122. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_dependency_inputs.py +0 -0
  123. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_dependency_security.py +0 -0
  124. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_discovery_cli.py +0 -0
  125. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_explicit_dedupe.py +0 -0
  126. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_fastembed_compat.py +0 -0
  127. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_host_lifecycle.py +0 -0
  128. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_host_pins.py +0 -0
  129. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_input_validation.py +0 -0
  130. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_inventory_export.py +0 -0
  131. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_live_metrics.py +0 -0
  132. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_local_embedding.py +0 -0
  133. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_local_embedding_provider.py +0 -0
  134. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_local_model.py +0 -0
  135. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_maintenance.py +0 -0
  136. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_manifest_contract.py +0 -0
  137. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_migration.py +0 -0
  138. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_migration_endpoints.py +0 -0
  139. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_migration_progress.py +0 -0
  140. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_migration_resume.py +0 -0
  141. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_migration_superseded.py +0 -0
  142. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_model_smoke.py +0 -0
  143. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_native_unadmitted.py +0 -0
  144. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_openrouter_http.py +0 -0
  145. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_openrouter_models.py +0 -0
  146. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_openrouter_preflight.py +0 -0
  147. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_openrouter_runner.py +0 -0
  148. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_openrouter_workflow.py +0 -0
  149. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_pi_quality_driver.py +0 -0
  150. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_profile_scope.py +0 -0
  151. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_quality_dependencies.py +0 -0
  152. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_quality_metrics.py +0 -0
  153. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_quality_mutations.py +0 -0
  154. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_quality_ollama_setup.py +0 -0
  155. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_quality_profiles.py +0 -0
  156. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_quality_runner.py +0 -0
  157. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_recovery_benchmark.py +0 -0
  158. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_recovery_evaluation.py +0 -0
  159. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_remote_shutdown.py +0 -0
  160. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_reset_inspection.py +0 -0
  161. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_reset_recovery.py +0 -0
  162. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_restart_boundary.py +0 -0
  163. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_retention.py +0 -0
  164. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_session_provenance.py +0 -0
  165. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_setup_contract.py +0 -0
  166. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_shared_recall.py +0 -0
  167. {hermes_plugin_qdrant_memory-0.5.2 → hermes_plugin_qdrant_memory-0.5.3}/tests/test_store_runtime.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hermes-plugin-qdrant-memory
3
- Version: 0.5.2
3
+ Version: 0.5.3
4
4
  Summary: Durable Qdrant memory for Hermes, standalone CLI and local MCP
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/cnkang/hermes-plugin-qdrant-memory
@@ -38,7 +38,7 @@ Skills—with explicit access control, conflict-safe updates, and crash recovery
38
38
  Shared deployment hardening in this checkout is documented in the
39
39
  [protected destination guide](docs/shared-memory/deployment-security.md) and
40
40
  [versioned threat model](docs/shared-memory/threat-model-v1.md). These additions
41
- are included in Runtime 0.5.2. Remote access needs the `[remote]` extra.
41
+ are included in Runtime 0.5.3. Remote access needs the `[remote]` extra.
42
42
 
43
43
  ## One Memory, Multiple Agents — opt-in shared owner
44
44
 
@@ -51,19 +51,21 @@ Runtime 0.5.0 adds an opt-in authenticated local shared owner and stdio bridge.
51
51
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)
52
52
  [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
53
53
 
54
- > **Runtime 0.5.2** keeps the opt-in authenticated local shared owner and the stdio
54
+ > **Runtime 0.5.3** keeps the opt-in authenticated local shared owner and the stdio
55
55
  > bridge for explicit shared memory. It keeps the optional offline CPU embedding,
56
56
  > trusted setup and MCP Python SDK 1.x/2.x support from 0.3.0.
57
57
  > Explicit writes retain canonical-text deduplication without an LLM.
58
58
  > This patch makes a restart-interrupted write replayable with the same request
59
- > identifier. It changes no schema and no collection identity.
60
- > This guide selects Runtime 0.5.2. Check its availability on
61
- > [PyPI](https://pypi.org/project/hermes-plugin-qdrant-memory/0.5.2/) before installation.
59
+ > identifier. This patch fixes partially initialized providers after startup failures,
60
+ > protects required checkpoints, and preserves WriterLease ownership through cleanup.
61
+ > It changes no schema or collection identity. This guide selects Runtime 0.5.3.
62
+ > Check its availability on
63
+ > [PyPI](https://pypi.org/project/hermes-plugin-qdrant-memory/0.5.3/) before installation.
62
64
  > The generic MCP distribution and managed launcher select their own exact Runtime
63
65
  > dependency and are released independently.
64
66
  > The Hermes Plugin Catalog has its own reviewed immutable pin. A PyPI release
65
67
  > does not upgrade it. One writer per destination remains required.
66
- > See [release notes](docs/releases/0.5.2.md) and [validation](docs/validation.md).
68
+ > See [release notes](docs/releases/0.5.3.md) and [validation](docs/validation.md).
67
69
 
68
70
  [English](README.md) | [简体中文](README.zh-CN.md)
69
71
 
@@ -81,7 +83,7 @@ as a community-maintained plugin.
81
83
  ## How it works
82
84
 
83
85
  For non-Hermes users, install in a private Python 3.11+
84
- environment: `pip install 'hermes-plugin-qdrant-memory[mcp]==0.5.2'` (omit `[mcp]`
86
+ environment: `pip install 'hermes-plugin-qdrant-memory[mcp]==0.5.3'` (omit `[mcp]`
85
87
  for CLI only). `qdrant-memory` is the CLI and `mcp` is its server subcommand.
86
88
  Standalone does not require Hermes. See [setup and quick start](docs/standalone.md).
87
89
  MCP-focused agents may instead use the [metadata-only distribution](https://github.com/cnkang/qdrant-memory-mcp).
@@ -185,7 +187,7 @@ Choose the **active profile's** home explicitly. Do not reuse another profile's
185
187
  **Catalog option: install the version reviewed by the official Hermes Plugin Catalog.**
186
188
 
187
189
  The Catalog selects its own fixed revision, which may be older than Runtime
188
- 0.5.2. To use the current release, including opt-in shared memory, follow the
190
+ 0.5.3. To use the current release, including opt-in shared memory, follow the
189
191
  recommended version-locked installation below.
190
192
 
191
193
  ```bash
@@ -203,7 +205,7 @@ The install resolves the catalog's reviewed commit and prints the entry's declar
203
205
  tools, requirements and known issues before it clones anything.
204
206
  `hermes plugins enable` prepares the declared dependencies through Hermes PM.
205
207
 
206
- **Recommended: install the version-locked Runtime 0.5.2 source through the Hermes CLI.**
208
+ **Recommended: install the version-locked Runtime 0.5.3 source through the Hermes CLI.**
207
209
 
208
210
  This immutable source revision includes opt-in shared memory. It does not depend
209
211
  on a PyPI release or a catalog update.
@@ -213,7 +215,7 @@ export HERMES_HOME="/absolute/path/to/your/hermes-profile"
213
215
  ollama pull qwen3-embedding:4b
214
216
  # Start Ollama if it is not running. Keep its service available.
215
217
  hermes plugins install https://github.com/cnkang/hermes-plugin-qdrant-memory \
216
- --ref 604793341226e45f04500cd1d53fd668ddf89d63 # Runtime 0.5.2 release
218
+ --ref 0c83c2279ddd62f1aba98657aecc14a71a3dbf73 # Runtime 0.5.3 release
217
219
  hermes plugins enable qdrant-memory
218
220
  hermes memory setup
219
221
  hermes config set memory.provider qdrant-memory
@@ -224,7 +226,7 @@ hermes qdrant-memory init
224
226
 
225
227
  This older immutable source revision includes optional CPU embedding and guided
226
228
  setup, but it predates opt-in shared memory. For the current release use
227
- Runtime 0.5.2 above. It does not depend on a PyPI release or a catalog update.
229
+ Runtime 0.5.3 above. It does not depend on a PyPI release or a catalog update.
228
230
 
229
231
  ```bash
230
232
  export HERMES_HOME="/absolute/path/to/your/hermes-profile"
@@ -248,7 +250,7 @@ environment. Omit `--ref` to track `main`, the development line.
248
250
  **Historical release: clone a published tag manually.**
249
251
 
250
252
  The v0.1.0 tag below predates the standalone interfaces and the explicit-write
251
- fix. Use the pinned source above for Runtime 0.5.2.
253
+ fix. Use the pinned source above for Runtime 0.5.3.
252
254
 
253
255
  ```bash
254
256
  export HERMES_HOME="/absolute/path/to/your/hermes-profile"
@@ -566,6 +568,9 @@ Run Ruff lint and format checks before you commit. Install the repository
566
568
  pre-commit hook as described in [development setup](docs/development.md). The hook
567
569
  checks the staged snapshot. CI runs lint, both Python versions, Snyk and
568
570
  SonarCloud. See [CI services](docs/ci.md) for the tested host versions and lanes.
571
+ The staged [soak system](docs/testing/soak.md) runs real Owner, Gateway, Ledger
572
+ and Qdrant windows on x64 and ARM64 runners, and admits a five-hour matrix only
573
+ after the short matrix passes.
569
574
 
570
575
  Build isolated dependency environments with Hermes PM. Then run the host's
571
576
  canonical test runner against this repository's tests. The tests import the real
@@ -11,7 +11,7 @@ Skills—with explicit access control, conflict-safe updates, and crash recovery
11
11
  Shared deployment hardening in this checkout is documented in the
12
12
  [protected destination guide](docs/shared-memory/deployment-security.md) and
13
13
  [versioned threat model](docs/shared-memory/threat-model-v1.md). These additions
14
- are included in Runtime 0.5.2. Remote access needs the `[remote]` extra.
14
+ are included in Runtime 0.5.3. Remote access needs the `[remote]` extra.
15
15
 
16
16
  ## One Memory, Multiple Agents — opt-in shared owner
17
17
 
@@ -24,19 +24,21 @@ Runtime 0.5.0 adds an opt-in authenticated local shared owner and stdio bridge.
24
24
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)
25
25
  [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
26
26
 
27
- > **Runtime 0.5.2** keeps the opt-in authenticated local shared owner and the stdio
27
+ > **Runtime 0.5.3** keeps the opt-in authenticated local shared owner and the stdio
28
28
  > bridge for explicit shared memory. It keeps the optional offline CPU embedding,
29
29
  > trusted setup and MCP Python SDK 1.x/2.x support from 0.3.0.
30
30
  > Explicit writes retain canonical-text deduplication without an LLM.
31
31
  > This patch makes a restart-interrupted write replayable with the same request
32
- > identifier. It changes no schema and no collection identity.
33
- > This guide selects Runtime 0.5.2. Check its availability on
34
- > [PyPI](https://pypi.org/project/hermes-plugin-qdrant-memory/0.5.2/) before installation.
32
+ > identifier. This patch fixes partially initialized providers after startup failures,
33
+ > protects required checkpoints, and preserves WriterLease ownership through cleanup.
34
+ > It changes no schema or collection identity. This guide selects Runtime 0.5.3.
35
+ > Check its availability on
36
+ > [PyPI](https://pypi.org/project/hermes-plugin-qdrant-memory/0.5.3/) before installation.
35
37
  > The generic MCP distribution and managed launcher select their own exact Runtime
36
38
  > dependency and are released independently.
37
39
  > The Hermes Plugin Catalog has its own reviewed immutable pin. A PyPI release
38
40
  > does not upgrade it. One writer per destination remains required.
39
- > See [release notes](docs/releases/0.5.2.md) and [validation](docs/validation.md).
41
+ > See [release notes](docs/releases/0.5.3.md) and [validation](docs/validation.md).
40
42
 
41
43
  [English](README.md) | [简体中文](README.zh-CN.md)
42
44
 
@@ -54,7 +56,7 @@ as a community-maintained plugin.
54
56
  ## How it works
55
57
 
56
58
  For non-Hermes users, install in a private Python 3.11+
57
- environment: `pip install 'hermes-plugin-qdrant-memory[mcp]==0.5.2'` (omit `[mcp]`
59
+ environment: `pip install 'hermes-plugin-qdrant-memory[mcp]==0.5.3'` (omit `[mcp]`
58
60
  for CLI only). `qdrant-memory` is the CLI and `mcp` is its server subcommand.
59
61
  Standalone does not require Hermes. See [setup and quick start](docs/standalone.md).
60
62
  MCP-focused agents may instead use the [metadata-only distribution](https://github.com/cnkang/qdrant-memory-mcp).
@@ -158,7 +160,7 @@ Choose the **active profile's** home explicitly. Do not reuse another profile's
158
160
  **Catalog option: install the version reviewed by the official Hermes Plugin Catalog.**
159
161
 
160
162
  The Catalog selects its own fixed revision, which may be older than Runtime
161
- 0.5.2. To use the current release, including opt-in shared memory, follow the
163
+ 0.5.3. To use the current release, including opt-in shared memory, follow the
162
164
  recommended version-locked installation below.
163
165
 
164
166
  ```bash
@@ -176,7 +178,7 @@ The install resolves the catalog's reviewed commit and prints the entry's declar
176
178
  tools, requirements and known issues before it clones anything.
177
179
  `hermes plugins enable` prepares the declared dependencies through Hermes PM.
178
180
 
179
- **Recommended: install the version-locked Runtime 0.5.2 source through the Hermes CLI.**
181
+ **Recommended: install the version-locked Runtime 0.5.3 source through the Hermes CLI.**
180
182
 
181
183
  This immutable source revision includes opt-in shared memory. It does not depend
182
184
  on a PyPI release or a catalog update.
@@ -186,7 +188,7 @@ export HERMES_HOME="/absolute/path/to/your/hermes-profile"
186
188
  ollama pull qwen3-embedding:4b
187
189
  # Start Ollama if it is not running. Keep its service available.
188
190
  hermes plugins install https://github.com/cnkang/hermes-plugin-qdrant-memory \
189
- --ref 604793341226e45f04500cd1d53fd668ddf89d63 # Runtime 0.5.2 release
191
+ --ref 0c83c2279ddd62f1aba98657aecc14a71a3dbf73 # Runtime 0.5.3 release
190
192
  hermes plugins enable qdrant-memory
191
193
  hermes memory setup
192
194
  hermes config set memory.provider qdrant-memory
@@ -197,7 +199,7 @@ hermes qdrant-memory init
197
199
 
198
200
  This older immutable source revision includes optional CPU embedding and guided
199
201
  setup, but it predates opt-in shared memory. For the current release use
200
- Runtime 0.5.2 above. It does not depend on a PyPI release or a catalog update.
202
+ Runtime 0.5.3 above. It does not depend on a PyPI release or a catalog update.
201
203
 
202
204
  ```bash
203
205
  export HERMES_HOME="/absolute/path/to/your/hermes-profile"
@@ -221,7 +223,7 @@ environment. Omit `--ref` to track `main`, the development line.
221
223
  **Historical release: clone a published tag manually.**
222
224
 
223
225
  The v0.1.0 tag below predates the standalone interfaces and the explicit-write
224
- fix. Use the pinned source above for Runtime 0.5.2.
226
+ fix. Use the pinned source above for Runtime 0.5.3.
225
227
 
226
228
  ```bash
227
229
  export HERMES_HOME="/absolute/path/to/your/hermes-profile"
@@ -539,6 +541,9 @@ Run Ruff lint and format checks before you commit. Install the repository
539
541
  pre-commit hook as described in [development setup](docs/development.md). The hook
540
542
  checks the staged snapshot. CI runs lint, both Python versions, Snyk and
541
543
  SonarCloud. See [CI services](docs/ci.md) for the tested host versions and lanes.
544
+ The staged [soak system](docs/testing/soak.md) runs real Owner, Gateway, Ledger
545
+ and Qdrant windows on x64 and ARM64 runners, and admits a five-hour matrix only
546
+ after the short matrix passes.
542
547
 
543
548
  Build isolated dependency environments with Hermes PM. Then run the host's
544
549
  canonical test runner against this repository's tests. The tests import the real
@@ -35,11 +35,11 @@ python -m pip install '.[mcp,local]'
35
35
 
36
36
  For a published package, install the same extras with the release version:
37
37
 
38
- Check [PyPI](https://pypi.org/project/hermes-plugin-qdrant-memory/0.5.2/) for
39
- Runtime 0.5.2 availability before running this command.
38
+ Check [PyPI](https://pypi.org/project/hermes-plugin-qdrant-memory/0.5.3/) for
39
+ Runtime 0.5.3 availability before running this command.
40
40
 
41
41
  ```sh
42
- python -m pip install 'hermes-plugin-qdrant-memory[mcp,local]==0.5.2'
42
+ python -m pip install 'hermes-plugin-qdrant-memory[mcp,local]==0.5.3'
43
43
  ```
44
44
 
45
45
  Choose **one** setup command and replace the profile path with a new absolute
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hermes-plugin-qdrant-memory
3
- Version: 0.5.2
3
+ Version: 0.5.3
4
4
  Summary: Durable Qdrant memory for Hermes, standalone CLI and local MCP
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/cnkang/hermes-plugin-qdrant-memory
@@ -38,7 +38,7 @@ Skills—with explicit access control, conflict-safe updates, and crash recovery
38
38
  Shared deployment hardening in this checkout is documented in the
39
39
  [protected destination guide](docs/shared-memory/deployment-security.md) and
40
40
  [versioned threat model](docs/shared-memory/threat-model-v1.md). These additions
41
- are included in Runtime 0.5.2. Remote access needs the `[remote]` extra.
41
+ are included in Runtime 0.5.3. Remote access needs the `[remote]` extra.
42
42
 
43
43
  ## One Memory, Multiple Agents — opt-in shared owner
44
44
 
@@ -51,19 +51,21 @@ Runtime 0.5.0 adds an opt-in authenticated local shared owner and stdio bridge.
51
51
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)
52
52
  [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
53
53
 
54
- > **Runtime 0.5.2** keeps the opt-in authenticated local shared owner and the stdio
54
+ > **Runtime 0.5.3** keeps the opt-in authenticated local shared owner and the stdio
55
55
  > bridge for explicit shared memory. It keeps the optional offline CPU embedding,
56
56
  > trusted setup and MCP Python SDK 1.x/2.x support from 0.3.0.
57
57
  > Explicit writes retain canonical-text deduplication without an LLM.
58
58
  > This patch makes a restart-interrupted write replayable with the same request
59
- > identifier. It changes no schema and no collection identity.
60
- > This guide selects Runtime 0.5.2. Check its availability on
61
- > [PyPI](https://pypi.org/project/hermes-plugin-qdrant-memory/0.5.2/) before installation.
59
+ > identifier. This patch fixes partially initialized providers after startup failures,
60
+ > protects required checkpoints, and preserves WriterLease ownership through cleanup.
61
+ > It changes no schema or collection identity. This guide selects Runtime 0.5.3.
62
+ > Check its availability on
63
+ > [PyPI](https://pypi.org/project/hermes-plugin-qdrant-memory/0.5.3/) before installation.
62
64
  > The generic MCP distribution and managed launcher select their own exact Runtime
63
65
  > dependency and are released independently.
64
66
  > The Hermes Plugin Catalog has its own reviewed immutable pin. A PyPI release
65
67
  > does not upgrade it. One writer per destination remains required.
66
- > See [release notes](docs/releases/0.5.2.md) and [validation](docs/validation.md).
68
+ > See [release notes](docs/releases/0.5.3.md) and [validation](docs/validation.md).
67
69
 
68
70
  [English](README.md) | [简体中文](README.zh-CN.md)
69
71
 
@@ -81,7 +83,7 @@ as a community-maintained plugin.
81
83
  ## How it works
82
84
 
83
85
  For non-Hermes users, install in a private Python 3.11+
84
- environment: `pip install 'hermes-plugin-qdrant-memory[mcp]==0.5.2'` (omit `[mcp]`
86
+ environment: `pip install 'hermes-plugin-qdrant-memory[mcp]==0.5.3'` (omit `[mcp]`
85
87
  for CLI only). `qdrant-memory` is the CLI and `mcp` is its server subcommand.
86
88
  Standalone does not require Hermes. See [setup and quick start](docs/standalone.md).
87
89
  MCP-focused agents may instead use the [metadata-only distribution](https://github.com/cnkang/qdrant-memory-mcp).
@@ -185,7 +187,7 @@ Choose the **active profile's** home explicitly. Do not reuse another profile's
185
187
  **Catalog option: install the version reviewed by the official Hermes Plugin Catalog.**
186
188
 
187
189
  The Catalog selects its own fixed revision, which may be older than Runtime
188
- 0.5.2. To use the current release, including opt-in shared memory, follow the
190
+ 0.5.3. To use the current release, including opt-in shared memory, follow the
189
191
  recommended version-locked installation below.
190
192
 
191
193
  ```bash
@@ -203,7 +205,7 @@ The install resolves the catalog's reviewed commit and prints the entry's declar
203
205
  tools, requirements and known issues before it clones anything.
204
206
  `hermes plugins enable` prepares the declared dependencies through Hermes PM.
205
207
 
206
- **Recommended: install the version-locked Runtime 0.5.2 source through the Hermes CLI.**
208
+ **Recommended: install the version-locked Runtime 0.5.3 source through the Hermes CLI.**
207
209
 
208
210
  This immutable source revision includes opt-in shared memory. It does not depend
209
211
  on a PyPI release or a catalog update.
@@ -213,7 +215,7 @@ export HERMES_HOME="/absolute/path/to/your/hermes-profile"
213
215
  ollama pull qwen3-embedding:4b
214
216
  # Start Ollama if it is not running. Keep its service available.
215
217
  hermes plugins install https://github.com/cnkang/hermes-plugin-qdrant-memory \
216
- --ref 604793341226e45f04500cd1d53fd668ddf89d63 # Runtime 0.5.2 release
218
+ --ref 0c83c2279ddd62f1aba98657aecc14a71a3dbf73 # Runtime 0.5.3 release
217
219
  hermes plugins enable qdrant-memory
218
220
  hermes memory setup
219
221
  hermes config set memory.provider qdrant-memory
@@ -224,7 +226,7 @@ hermes qdrant-memory init
224
226
 
225
227
  This older immutable source revision includes optional CPU embedding and guided
226
228
  setup, but it predates opt-in shared memory. For the current release use
227
- Runtime 0.5.2 above. It does not depend on a PyPI release or a catalog update.
229
+ Runtime 0.5.3 above. It does not depend on a PyPI release or a catalog update.
228
230
 
229
231
  ```bash
230
232
  export HERMES_HOME="/absolute/path/to/your/hermes-profile"
@@ -248,7 +250,7 @@ environment. Omit `--ref` to track `main`, the development line.
248
250
  **Historical release: clone a published tag manually.**
249
251
 
250
252
  The v0.1.0 tag below predates the standalone interfaces and the explicit-write
251
- fix. Use the pinned source above for Runtime 0.5.2.
253
+ fix. Use the pinned source above for Runtime 0.5.3.
252
254
 
253
255
  ```bash
254
256
  export HERMES_HOME="/absolute/path/to/your/hermes-profile"
@@ -566,6 +568,9 @@ Run Ruff lint and format checks before you commit. Install the repository
566
568
  pre-commit hook as described in [development setup](docs/development.md). The hook
567
569
  checks the staged snapshot. CI runs lint, both Python versions, Snyk and
568
570
  SonarCloud. See [CI services](docs/ci.md) for the tested host versions and lanes.
571
+ The staged [soak system](docs/testing/soak.md) runs real Owner, Gateway, Ledger
572
+ and Qdrant windows on x64 and ARM64 runners, and admits a five-hour matrix only
573
+ after the short matrix passes.
569
574
 
570
575
  Build isolated dependency environments with Hermes PM. Then run the host's
571
576
  canonical test runner against this repository's tests. The tests import the real
@@ -66,6 +66,7 @@ tests/test_ci_gate.py
66
66
  tests/test_ci_infrastructure_retry.py
67
67
  tests/test_cli_output.py
68
68
  tests/test_config_embedding.py
69
+ tests/test_cross_process_lifecycle_recovery.py
69
70
  tests/test_deletion_ordering.py
70
71
  tests/test_dependency_inputs.py
71
72
  tests/test_dependency_security.py
@@ -74,6 +75,7 @@ tests/test_explicit_dedupe.py
74
75
  tests/test_fastembed_compat.py
75
76
  tests/test_host_lifecycle.py
76
77
  tests/test_host_pins.py
78
+ tests/test_initialization_failures.py
77
79
  tests/test_input_validation.py
78
80
  tests/test_inventory_export.py
79
81
  tests/test_live_metrics.py
@@ -128,6 +130,10 @@ tests/security/test_cloud_owner_cleanup.py
128
130
  tests/security/test_device_server.py
129
131
  tests/security/test_shared_security.py
130
132
  tests/security/test_shared_security_live.py
133
+ tests/soak/test_harness.py
134
+ tests/soak/test_invariants.py
135
+ tests/soak/test_supervisor.py
136
+ tests/soak/test_workflow_gates.py
131
137
  tests/standalone/__init__.py
132
138
  tests/standalone/test_admission_control.py
133
139
  tests/standalone/test_device_grants.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "hermes-plugin-qdrant-memory"
7
- version = "0.5.2"
7
+ version = "0.5.3"
8
8
  description = "Durable Qdrant memory for Hermes, standalone CLI and local MCP"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -31,50 +31,57 @@ class Ledger:
31
31
  path.chmod(0o600)
32
32
  self.lock = RLock()
33
33
  self.db = sqlite3.connect(path, check_same_thread=False, timeout=30)
34
- self.db.row_factory = sqlite3.Row
35
- self.db.execute("PRAGMA journal_mode=WAL")
36
- self.db.execute("PRAGMA synchronous=FULL")
37
- self.db.executescript("""
38
- CREATE TABLE IF NOT EXISTS events (
39
- event_id TEXT PRIMARY KEY, session_id TEXT, payload_json TEXT NOT NULL,
40
- status TEXT NOT NULL DEFAULT 'PENDING', attempts INTEGER NOT NULL DEFAULT 0,
41
- last_error TEXT, created_at TEXT, committed_at TEXT, collection TEXT NOT NULL);
42
- CREATE TABLE IF NOT EXISTS operations (
43
- idempotency_key TEXT PRIMARY KEY, point_id TEXT NOT NULL, action TEXT NOT NULL,
44
- payload_json TEXT NOT NULL, source_id TEXT, source_version TEXT, content_hash TEXT,
45
- status TEXT NOT NULL DEFAULT 'PENDING', attempts INTEGER NOT NULL DEFAULT 0,
46
- last_error TEXT, created_at TEXT, committed_at TEXT, collection TEXT NOT NULL);
47
- CREATE INDEX IF NOT EXISTS events_by_collection_status
48
- ON events(collection,status);
49
- CREATE INDEX IF NOT EXISTS operations_by_collection_status
50
- ON operations(collection,status);
51
- CREATE INDEX IF NOT EXISTS operations_by_point_status
52
- ON operations(collection,point_id,status);
53
- CREATE INDEX IF NOT EXISTS operations_delete_by_point
54
- ON operations(collection,source_id,action,point_id);
55
- CREATE INDEX IF NOT EXISTS operations_delete_by_hash
56
- ON operations(collection,source_id,action,content_hash);
57
- CREATE INDEX IF NOT EXISTS operations_unscrubbed_by_collection
58
- ON operations(collection)
59
- WHERE status IN ('COMMITTED','SUPERSEDED') AND payload_json!='{}';
60
- CREATE INDEX IF NOT EXISTS operations_unscrubbed_by_point
61
- ON operations(collection,point_id)
62
- WHERE status IN ('COMMITTED','SUPERSEDED') AND payload_json!='{}';
63
- CREATE TABLE IF NOT EXISTS manifests (
64
- migration_id TEXT PRIMARY KEY, payload_json TEXT NOT NULL, collection TEXT NOT NULL);
65
- CREATE TABLE IF NOT EXISTS metrics (name TEXT, value REAL, collection TEXT);
66
- CREATE TABLE IF NOT EXISTS counters (
67
- name TEXT, value INTEGER, collection TEXT, PRIMARY KEY(name,collection));
68
- CREATE TABLE IF NOT EXISTS unattributed_sessions (
69
- session_id TEXT, collection TEXT, PRIMARY KEY(session_id,collection));
70
- CREATE TABLE IF NOT EXISTS session_provenance (
71
- session_id TEXT, collection TEXT, authors_json TEXT NOT NULL,
72
- explicit_author INTEGER NOT NULL, history_known INTEGER NOT NULL,
73
- PRIMARY KEY(session_id,collection));
74
- """)
75
- self._resumable_operation_keys = self._load_resumable_operation_keys()
76
- with self.lock, self.db:
77
- self._scrub_terminal_payloads()
34
+ try:
35
+ self.db.row_factory = sqlite3.Row
36
+ self.db.execute("PRAGMA journal_mode=WAL")
37
+ self.db.execute("PRAGMA synchronous=FULL")
38
+ self.db.executescript("""
39
+ CREATE TABLE IF NOT EXISTS events (
40
+ event_id TEXT PRIMARY KEY, session_id TEXT, payload_json TEXT NOT NULL,
41
+ status TEXT NOT NULL DEFAULT 'PENDING', attempts INTEGER NOT NULL DEFAULT 0,
42
+ last_error TEXT, created_at TEXT, committed_at TEXT, collection TEXT NOT NULL);
43
+ CREATE TABLE IF NOT EXISTS operations (
44
+ idempotency_key TEXT PRIMARY KEY, point_id TEXT NOT NULL, action TEXT NOT NULL,
45
+ payload_json TEXT NOT NULL, source_id TEXT, source_version TEXT, content_hash TEXT,
46
+ status TEXT NOT NULL DEFAULT 'PENDING', attempts INTEGER NOT NULL DEFAULT 0,
47
+ last_error TEXT, created_at TEXT, committed_at TEXT, collection TEXT NOT NULL);
48
+ CREATE INDEX IF NOT EXISTS events_by_collection_status
49
+ ON events(collection,status);
50
+ CREATE INDEX IF NOT EXISTS operations_by_collection_status
51
+ ON operations(collection,status);
52
+ CREATE INDEX IF NOT EXISTS operations_by_point_status
53
+ ON operations(collection,point_id,status);
54
+ CREATE INDEX IF NOT EXISTS operations_delete_by_point
55
+ ON operations(collection,source_id,action,point_id);
56
+ CREATE INDEX IF NOT EXISTS operations_delete_by_hash
57
+ ON operations(collection,source_id,action,content_hash);
58
+ CREATE INDEX IF NOT EXISTS operations_unscrubbed_by_collection
59
+ ON operations(collection)
60
+ WHERE status IN ('COMMITTED','SUPERSEDED') AND payload_json!='{}';
61
+ CREATE INDEX IF NOT EXISTS operations_unscrubbed_by_point
62
+ ON operations(collection,point_id)
63
+ WHERE status IN ('COMMITTED','SUPERSEDED') AND payload_json!='{}';
64
+ CREATE TABLE IF NOT EXISTS manifests (
65
+ migration_id TEXT PRIMARY KEY, payload_json TEXT NOT NULL, collection TEXT NOT NULL);
66
+ CREATE TABLE IF NOT EXISTS metrics (name TEXT, value REAL, collection TEXT);
67
+ CREATE TABLE IF NOT EXISTS counters (
68
+ name TEXT, value INTEGER, collection TEXT, PRIMARY KEY(name,collection));
69
+ CREATE TABLE IF NOT EXISTS unattributed_sessions (
70
+ session_id TEXT, collection TEXT, PRIMARY KEY(session_id,collection));
71
+ CREATE TABLE IF NOT EXISTS session_provenance (
72
+ session_id TEXT, collection TEXT, authors_json TEXT NOT NULL,
73
+ explicit_author INTEGER NOT NULL, history_known INTEGER NOT NULL,
74
+ PRIMARY KEY(session_id,collection));
75
+ """)
76
+ self._resumable_operation_keys = self._load_resumable_operation_keys()
77
+ with self.lock, self.db:
78
+ self._scrub_terminal_payloads()
79
+ except BaseException as exc:
80
+ try:
81
+ self.db.close()
82
+ except Exception as cleanup_exc:
83
+ exc.add_note(f"SQLite ledger cleanup failed ({type(cleanup_exc).__name__})")
84
+ raise
78
85
 
79
86
  def clear_destination(self):
80
87
  """Forget every destination-scoped replay record so cleared memories cannot replay.
@@ -66,7 +66,7 @@ def load_native_settings(home, value):
66
66
  class NativeOwner:
67
67
  """Share one host-owned Runtime; never acquire a second store, lease or Ledger."""
68
68
 
69
- def __init__(self, runtime, settings, user_id):
69
+ def __init__(self, runtime, settings, user_id, *, ready_check=None):
70
70
  """Recover requests and resolve the explicitly selected Native private grant."""
71
71
  from contextvars import copy_context
72
72
 
@@ -84,6 +84,7 @@ class NativeOwner:
84
84
  grant_loader=lambda: load_policy(settings["policy"]),
85
85
  admission_check=admission if binding is not None else None,
86
86
  execution_context=copy_context(),
87
+ ready_check=ready_check,
87
88
  )
88
89
  grant = self.owner.authenticate(secret(settings["private_token_env"]))
89
90
  if (
@@ -1,5 +1,5 @@
1
1
  name: qdrant-memory
2
- version: 0.5.2
2
+ version: 0.5.3
3
3
  description: Durable native memory with Qdrant and Hermes LLM extraction
4
4
  manifest_version: 2
5
5
  author: Kang Liu