lorebase-store 0.3.1__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/PKG-INFO +3 -3
  2. lorebase_store-0.4.0/migrations/versions/0048_open_conflicts_by_element.py +41 -0
  3. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/pyproject.toml +3 -3
  4. lorebase_store-0.4.0/src/lorebase_store/__init__.py +1 -0
  5. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/merging/service.py +3 -0
  6. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/models/proposals.py +8 -0
  7. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/__init__.py +2 -0
  8. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/merges.py +69 -1
  9. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_models.py +1 -1
  10. lorebase_store-0.3.1/src/lorebase_store/__init__.py +0 -1
  11. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/.gitignore +0 -0
  12. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/LICENSE +0 -0
  13. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/README.md +0 -0
  14. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/alembic.ini +0 -0
  15. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/env.py +0 -0
  16. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/script.py.mako +0 -0
  17. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0001_initial_schema.py +0 -0
  18. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0002_merge_attempt_details.py +0 -0
  19. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0003_webhooks.py +0 -0
  20. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0004_defer_revision_references.py +0 -0
  21. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0005_security_definer_reads.py +0 -0
  22. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0006_api_key_usage.py +0 -0
  23. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0007_document_extraction.py +0 -0
  24. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0008_definer_argument_checks.py +0 -0
  25. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0009_api_key_networks.py +0 -0
  26. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0010_overlay_branches.py +0 -0
  27. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0011_branch_scoped_search_index.py +0 -0
  28. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0012_overlay_neighborhood_lookups.py +0 -0
  29. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0013_web_sessions.py +0 -0
  30. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0014_embedding_jobs.py +0 -0
  31. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0015_append_only_audit_log.py +0 -0
  32. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0016_sealed_webhook_keys.py +0 -0
  33. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0017_background_branch_copies.py +0 -0
  34. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0018_search_lexicon.py +0 -0
  35. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0019_vault_bindings.py +0 -0
  36. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0020_outbox_consumers.py +0 -0
  37. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0021_schema_suggestions.py +0 -0
  38. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0022_read_audit_and_shared_rate_limits.py +0 -0
  39. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0023_agent_trace.py +0 -0
  40. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0024_embedding_template_keys.py +0 -0
  41. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0025_snapshot_refs.py +0 -0
  42. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0026_plain_reverse_link_index.py +0 -0
  43. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0027_vault_rotation_and_tombstones.py +0 -0
  44. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0028_operation_deferred_events.py +0 -0
  45. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0029_agent_trace_sessions.py +0 -0
  46. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0030_path_fanout.py +0 -0
  47. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0031_branch_builds.py +0 -0
  48. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0032_lineage_revisions.py +0 -0
  49. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0033_vault_moved_tokens.py +0 -0
  50. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0034_inference_endpoint_modes.py +0 -0
  51. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0035_search_truncation.py +0 -0
  52. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0036_lineage_maps.py +0 -0
  53. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0037_bm25_search.py +0 -0
  54. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0038_reconciliation_candidates.py +0 -0
  55. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0039_reconciliation_lookups.py +0 -0
  56. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0040_source_written.py +0 -0
  57. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0041_document_versions.py +0 -0
  58. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0042_proposal_kinds.py +0 -0
  59. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0043_source_last_seen.py +0 -0
  60. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0044_mat_records_object_hash_index.py +0 -0
  61. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0045_value_index.py +0 -0
  62. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0046_vocabulary_and_coverage.py +0 -0
  63. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/migrations/versions/0047_value_index_limits.py +0 -0
  64. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/approval_rules.py +0 -0
  65. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/auth/__init__.py +0 -0
  66. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/auth/api_keys.py +0 -0
  67. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/auth/audit.py +0 -0
  68. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/auth/checkpoints.py +0 -0
  69. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/auth/grants.py +0 -0
  70. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/auth/principals.py +0 -0
  71. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/auth/scope.py +0 -0
  72. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/auth/sessions.py +0 -0
  73. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/auth/unit.py +0 -0
  74. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/auth/usage.py +0 -0
  75. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/blobs.py +0 -0
  76. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/bm25.py +0 -0
  77. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/bulk.py +0 -0
  78. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/bundle.py +0 -0
  79. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/changefeed.py +0 -0
  80. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/commit/__init__.py +0 -0
  81. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/commit/changes.py +0 -0
  82. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/commit/errors.py +0 -0
  83. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/commit/migrations.py +0 -0
  84. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/commit/pipeline.py +0 -0
  85. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/commit/schema.py +0 -0
  86. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/coverage.py +0 -0
  87. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/db.py +0 -0
  88. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/definer.py +0 -0
  89. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/digests.py +0 -0
  90. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/duplicates.py +0 -0
  91. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/embeddings.py +0 -0
  92. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/endpoint_modes.py +0 -0
  93. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/extraction/__init__.py +0 -0
  94. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/extraction/items.py +0 -0
  95. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/extraction/materialize.py +0 -0
  96. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/extraction/modes.py +0 -0
  97. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/extraction/proposal.py +0 -0
  98. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/extraction/review.py +0 -0
  99. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/gc.py +0 -0
  100. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/indexes.py +0 -0
  101. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/jobs.py +0 -0
  102. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/keyring.py +0 -0
  103. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/layout.py +0 -0
  104. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/materialize/__init__.py +0 -0
  105. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/materialize/apply.py +0 -0
  106. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/materialize/background.py +0 -0
  107. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/materialize/branch.py +0 -0
  108. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/materialize/build.py +0 -0
  109. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/materialize/derived.py +0 -0
  110. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/materialize/lineage_backfill.py +0 -0
  111. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/materialize/links.py +0 -0
  112. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/materialize/overlay.py +0 -0
  113. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/materialize/paths.py +0 -0
  114. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/materialize/rebuild.py +0 -0
  115. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/materialize/rows.py +0 -0
  116. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/materialize/sensitivity.py +0 -0
  117. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/materialize/snapshot.py +0 -0
  118. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/materialize/stale.py +0 -0
  119. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/materialize/verify.py +0 -0
  120. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/merging/__init__.py +0 -0
  121. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/merging/attempts.py +0 -0
  122. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/merging/lineage.py +0 -0
  123. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/merging/preserved.py +0 -0
  124. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/migrations.py +0 -0
  125. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/models/__init__.py +0 -0
  126. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/models/base.py +0 -0
  127. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/models/enums.py +0 -0
  128. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/models/governance.py +0 -0
  129. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/models/ingestion.py +0 -0
  130. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/models/materialized.py +0 -0
  131. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/models/queues.py +0 -0
  132. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/models/reconciliation.py +0 -0
  133. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/models/tracing.py +0 -0
  134. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/models/versioning.py +0 -0
  135. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/models/webhooks.py +0 -0
  136. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/nodestore.py +0 -0
  137. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/objectstore.py +0 -0
  138. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/outbox_events.py +0 -0
  139. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/profiling/__init__.py +0 -0
  140. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/profiling/delimited.py +0 -0
  141. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/profiling/postgres.py +0 -0
  142. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/profiling/record_files.py +0 -0
  143. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/profiling/records.py +0 -0
  144. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/profiling/sql_databases.py +0 -0
  145. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/ratelimit.py +0 -0
  146. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/reads.py +0 -0
  147. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/reconciliation.py +0 -0
  148. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/replicas.py +0 -0
  149. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/changesets.py +0 -0
  150. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/deferred_events.py +0 -0
  151. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/documents.py +0 -0
  152. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/domains.py +0 -0
  153. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/events.py +0 -0
  154. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/index_view.py +0 -0
  155. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/invocations.py +0 -0
  156. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/materializations.py +0 -0
  157. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/materialized.py +0 -0
  158. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/proposal_items.py +0 -0
  159. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/proposals.py +0 -0
  160. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/provenance.py +0 -0
  161. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/quotes.py +0 -0
  162. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/reconciliation_candidates.py +0 -0
  163. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/refs.py +0 -0
  164. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/revisions.py +0 -0
  165. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/scope.py +0 -0
  166. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/source_runs.py +0 -0
  167. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/source_written.py +0 -0
  168. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/repositories/suggestions.py +0 -0
  169. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/resolve_misses.py +0 -0
  170. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/runtime.py +0 -0
  171. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/schema_cache.py +0 -0
  172. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/settings.py +0 -0
  173. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/storage.py +0 -0
  174. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/telemetry.py +0 -0
  175. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/testing.py +0 -0
  176. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/tracing.py +0 -0
  177. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/traverse.py +0 -0
  178. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/values.py +0 -0
  179. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/vault/__init__.py +0 -0
  180. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/vault/keys.py +0 -0
  181. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/vault/quotes.py +0 -0
  182. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/vault/rotation.py +0 -0
  183. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/vault/settings.py +0 -0
  184. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/vault/store.py +0 -0
  185. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/vault/transfer.py +0 -0
  186. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/webhooks/__init__.py +0 -0
  187. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/webhooks/delivery.py +0 -0
  188. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/webhooks/keys.py +0 -0
  189. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/webhooks/repository.py +0 -0
  190. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/webhooks/settings.py +0 -0
  191. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/src/lorebase_store/webhooks/signing.py +0 -0
  192. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/auth/conftest.py +0 -0
  193. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/auth/test_audit_append_only_integration.py +0 -0
  194. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/auth/test_audit_integration.py +0 -0
  195. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/auth/test_audit_streams_integration.py +0 -0
  196. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/auth/test_principals_api_keys_grants_integration.py +0 -0
  197. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/auth/test_rls_scope.py +0 -0
  198. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/auth/test_sessions_integration.py +0 -0
  199. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/conftest.py +0 -0
  200. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/read_support.py +0 -0
  201. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/support.py +0 -0
  202. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_approval_rules.py +0 -0
  203. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_background_branches.py +0 -0
  204. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_background_pace.py +0 -0
  205. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_bm25.py +0 -0
  206. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_bundle.py +0 -0
  207. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_bundle_limits.py +0 -0
  208. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_bundle_vault.py +0 -0
  209. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_bundle_vault_values.py +0 -0
  210. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_commit.py +0 -0
  211. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_commit_helpers.py +0 -0
  212. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_definer_checks.py +0 -0
  213. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_derived.py +0 -0
  214. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_document_quotes.py +0 -0
  215. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_ef_search.py +0 -0
  216. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_endpoint_modes_integration.py +0 -0
  217. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_extraction_items.py +0 -0
  218. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_extraction_modes.py +0 -0
  219. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_gc.py +0 -0
  220. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_indexes.py +0 -0
  221. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_jobs_depth.py +0 -0
  222. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_lineage_backfill.py +0 -0
  223. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_materialize.py +0 -0
  224. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_merging.py +0 -0
  225. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_migration_revisions.py +0 -0
  226. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_nodestore.py +0 -0
  227. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_outbox_events.py +0 -0
  228. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_outbox_integration.py +0 -0
  229. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_overlay.py +0 -0
  230. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_profiling.py +0 -0
  231. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_profiling_record_files.py +0 -0
  232. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_profiling_records.py +0 -0
  233. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_profiling_sql.py +0 -0
  234. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_ratelimit_buckets_integration.py +0 -0
  235. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_reads.py +0 -0
  236. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_reconciliation_candidates_integration.py +0 -0
  237. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_reconciliation_wrapping.py +0 -0
  238. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_replicas.py +0 -0
  239. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_repositories.py +0 -0
  240. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_schema_integration.py +0 -0
  241. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_search_bm25.py +0 -0
  242. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_sensitivity_refresh.py +0 -0
  243. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_settings.py +0 -0
  244. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_storage.py +0 -0
  245. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_suggestion_fold.py +0 -0
  246. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_suggestion_repository_integration.py +0 -0
  247. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_traverse.py +0 -0
  248. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_values.py +0 -0
  249. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_vault.py +0 -0
  250. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_webhook_keys.py +0 -0
  251. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_webhook_keys_integration.py +0 -0
  252. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_webhook_timeouts_integration.py +0 -0
  253. {lorebase_store-0.3.1 → lorebase_store-0.4.0}/tests/test_webhooks.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: lorebase-store
3
- Version: 0.3.1
3
+ Version: 0.4.0
4
4
  Summary: Lorebase store: persistence, repositories, migrations and materializer
5
5
  Project-URL: Homepage, https://github.com/aantenore/lorebase
6
6
  Project-URL: Documentation, https://aantenore.github.io/lorebase/
@@ -22,8 +22,8 @@ Requires-Python: >=3.12
22
22
  Requires-Dist: alembic>=1.13
23
23
  Requires-Dist: asyncpg>=0.29
24
24
  Requires-Dist: cryptography>=42
25
- Requires-Dist: lorebase-core<0.4,>=0.3
26
- Requires-Dist: lorebase-platform<0.4,>=0.3
25
+ Requires-Dist: lorebase-core<0.5,>=0.4
26
+ Requires-Dist: lorebase-platform<0.5,>=0.4
27
27
  Requires-Dist: opentelemetry-api>=1.25
28
28
  Requires-Dist: pgvector>=0.3
29
29
  Requires-Dist: sqlalchemy[asyncio]>=2.0.30
@@ -0,0 +1,41 @@
1
+ """Open Conflicts by element (design 6.10).
2
+
3
+ A read of a Record can ask whether a Conflict about it waits for a decision in an open
4
+ Proposal. `conflicts` was only reachable by attempt, so that question would scan every
5
+ Conflict of every conflicted attempt. The partial index `ix_conflicts_open_element` over
6
+ `(domain_id, partition, element_key)` holds the unresolved Conflicts only: resolved rows, the
7
+ bulk of a table that keeps merged attempts, are left out, and the lookup of one Record is one
8
+ probe that finds nothing in the common case.
9
+
10
+ Revision ID: 0048
11
+ Revises: 0047
12
+ Create Date: 2026-11-13 09:00:00.000000
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ from collections.abc import Sequence
18
+
19
+ import sqlalchemy as sa
20
+ from alembic import op
21
+
22
+ revision: str = "0048"
23
+ down_revision: str | Sequence[str] | None = "0047"
24
+ branch_labels: str | Sequence[str] | None = None
25
+ depends_on: str | Sequence[str] | None = None
26
+
27
+ TABLE = "conflicts"
28
+ INDEX = "ix_conflicts_open_element"
29
+
30
+
31
+ def upgrade() -> None:
32
+ op.create_index(
33
+ INDEX,
34
+ TABLE,
35
+ ["domain_id", "partition", "element_key"],
36
+ postgresql_where=sa.text("resolved_by IS NULL"),
37
+ )
38
+
39
+
40
+ def downgrade() -> None:
41
+ op.drop_index(INDEX, table_name=TABLE)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "lorebase-store"
3
- version = "0.3.1"
3
+ version = "0.4.0"
4
4
  description = "Lorebase store: persistence, repositories, migrations and materializer"
5
5
  requires-python = ">=3.12"
6
6
  readme = "README.md"
@@ -18,8 +18,8 @@ classifiers = [
18
18
  "Topic :: Database",
19
19
  ]
20
20
  dependencies = [
21
- "lorebase-core>=0.3,<0.4",
22
- "lorebase-platform>=0.3,<0.4",
21
+ "lorebase-core>=0.4,<0.5",
22
+ "lorebase-platform>=0.4,<0.5",
23
23
  "sqlalchemy[asyncio]>=2.0.30",
24
24
  "asyncpg>=0.29",
25
25
  "alembic>=1.13",
@@ -0,0 +1 @@
1
+ __version__ = "0.4.0"
@@ -822,6 +822,9 @@ def _summary(computation: AttemptComputation) -> dict[str, Any]:
822
822
  def _conflict_row(state: ConflictState, stored: Mapping[str, ResolutionRow]) -> ConflictRow:
823
823
  conflict = state.conflict
824
824
  payload = conflict.model_dump(mode="json")
825
+ if payload.get("provenance") is None:
826
+ # Stored only when the merge knew who changed a side: other payloads keep their shape.
827
+ payload.pop("provenance", None)
825
828
  payload["members"] = list(state.members)
826
829
  if state.rejected:
827
830
  payload["details"] = {**payload.get("details", {}), "rejected": REJECTED_DETAIL}
@@ -169,6 +169,14 @@ class Conflict(Base):
169
169
  ondelete="CASCADE",
170
170
  ),
171
171
  UniqueConstraint("domain_id", "attempt_id", "fingerprint"),
172
+ # Reads that ask whether a Record has a Conflict waiting for a decision (design 6.10).
173
+ Index(
174
+ "ix_conflicts_open_element",
175
+ "domain_id",
176
+ "partition",
177
+ "element_key",
178
+ postgresql_where=text("resolved_by IS NULL"),
179
+ ),
172
180
  )
173
181
 
174
182
  domain_id: Mapped[DomainKey]
@@ -48,6 +48,7 @@ from lorebase_store.repositories.merges import (
48
48
  MergeAttemptRepository,
49
49
  MergeAttemptRow,
50
50
  PartitionFilter,
51
+ PendingConflictRow,
51
52
  ResolutionRepository,
52
53
  ResolutionRow,
53
54
  )
@@ -142,6 +143,7 @@ __all__ = [
142
143
  "MergeOutcome",
143
144
  "OutboxRepository",
144
145
  "PartitionFilter",
146
+ "PendingConflictRow",
145
147
  "PgRevisionGraph",
146
148
  "PreservedRow",
147
149
  "ProposalChecks",
@@ -20,8 +20,9 @@ from sqlalchemy.ext.asyncio import AsyncSession
20
20
 
21
21
  from lorebase_store.bulk import chunks
22
22
  from lorebase_store.models import metadata
23
- from lorebase_store.models.enums import MergeAttemptStatus
23
+ from lorebase_store.models.enums import MergeAttemptStatus, ProposalStatus
24
24
 
25
+ PROPOSALS: Table = metadata.tables["proposals"]
25
26
  ATTEMPTS: Table = metadata.tables["merge_attempts"]
26
27
  CONFLICTS: Table = metadata.tables["conflicts"]
27
28
  RESOLUTIONS: Table = metadata.tables["conflict_resolutions"]
@@ -69,6 +70,20 @@ class ConflictRow:
69
70
  return self.resolved_by is not None
70
71
 
71
72
 
73
+ @dataclass(frozen=True, slots=True)
74
+ class PendingConflictRow:
75
+ """An open Conflict about one element, as a reader of the target branch is told: the
76
+ Proposal it blocks, its id and code, the Attribute (None for a Conflict about the whole
77
+ element) and the hash of the competing element on the Proposal's source side."""
78
+
79
+ proposal_id: str
80
+ source_ref: str
81
+ fingerprint: str
82
+ code: str
83
+ attribute_id: str | None
84
+ competing_hash: str | None
85
+
86
+
72
87
  @dataclass(frozen=True, slots=True)
73
88
  class ResolutionRow:
74
89
  fingerprint: str
@@ -348,6 +363,59 @@ class ConflictRepository:
348
363
  )
349
364
  return frozenset((await self._session.execute(query)).scalars())
350
365
 
366
+ async def pending(
367
+ self, target: str, partition: str, element_key: str
368
+ ) -> list[PendingConflictRow]:
369
+ """The open Conflicts about one element in the open Proposals into `target`.
370
+
371
+ Only the current attempt of a Proposal counts (`conflicted`: a recomputation marks the
372
+ earlier ones `stale`, closing the Proposal `abandoned`). The lookup starts from the
373
+ partial index of unresolved Conflicts (`ix_conflicts_open_element`), so a Record
374
+ nobody contests costs one index probe.
375
+ """
376
+ query = (
377
+ select(
378
+ ATTEMPTS.c.proposal_id,
379
+ PROPOSALS.c.source_ref,
380
+ CONFLICTS.c.id,
381
+ CONFLICTS.c.code,
382
+ CONFLICTS.c.attribute_id,
383
+ CONFLICTS.c.payload["theirs_hash"].astext.label("competing_hash"),
384
+ )
385
+ .join(
386
+ ATTEMPTS,
387
+ (ATTEMPTS.c.domain_id == CONFLICTS.c.domain_id)
388
+ & (ATTEMPTS.c.id == CONFLICTS.c.attempt_id),
389
+ )
390
+ .join(
391
+ PROPOSALS,
392
+ (PROPOSALS.c.domain_id == ATTEMPTS.c.domain_id)
393
+ & (PROPOSALS.c.id == ATTEMPTS.c.proposal_id),
394
+ )
395
+ .where(
396
+ CONFLICTS.c.domain_id == self._domain,
397
+ CONFLICTS.c.partition == partition,
398
+ CONFLICTS.c.element_key == element_key,
399
+ CONFLICTS.c.resolved_by.is_(None),
400
+ ATTEMPTS.c.status == MergeAttemptStatus.CONFLICTED,
401
+ PROPOSALS.c.status == ProposalStatus.OPEN,
402
+ PROPOSALS.c.target_ref == target,
403
+ )
404
+ .order_by(ATTEMPTS.c.proposal_id, CONFLICTS.c.id)
405
+ )
406
+ result = await self._session.execute(query)
407
+ return [
408
+ PendingConflictRow(
409
+ proposal_id=row.proposal_id,
410
+ source_ref=row.source_ref,
411
+ fingerprint=row.id,
412
+ code=row.code,
413
+ attribute_id=row.attribute_id,
414
+ competing_hash=row.competing_hash,
415
+ )
416
+ for row in result
417
+ ]
418
+
351
419
 
352
420
  class ResolutionRepository:
353
421
  """Resolutions of the Proposals of one Domain, by Conflict fingerprint."""
@@ -129,4 +129,4 @@ def test_comparison_filter_skips_partitions_and_runtime_indexes() -> None:
129
129
 
130
130
 
131
131
  def test_head_revision_is_the_latest_migration() -> None:
132
- assert head_revisions() == ("0047",)
132
+ assert head_revisions() == ("0048",)
@@ -1 +0,0 @@
1
- __version__ = "0.3.1"
File without changes
File without changes